Ir ao conteúdo
  • Cadastre-se
glaukito

C++ problema com vetor (calcular a média).

Recommended Posts

olá!

o programa não está calculando a média. acredito que seja algo ridiculamente simples, mas não consigo ver o que é. segue o código:

#include <stdio.h>
#include <stdlib.h> 

/*2. Escreva um programa que leia n números. Depois da leitura mostre a média
dos números lidos, o maior número lido, e o menor.*/

int main(){
	
	int qtd, n[qtd], i, soma, maior, menor;
	float media;

	printf("quantos números serão lindos? ");
	scanf("%d", &qtd);

    for (i=0; i<qtd; i++){
    	
		printf("numero: \n");
    	scanf("%d", &n[i]);
	}
    maior = n[0];
    for (i=0; i<qtd; i++){
    	if (n[i] > maior){
    		maior = n[i];
    	}
	}

	menor = n[0];
    for (i=0; i<qtd; i++){
    	if (n[i] < maior){
    		menor = n[i];
    	}
	}
	
	for (i=0; i<qtd; i++){
    	soma= (soma+n[i]);
  	}
  	media= soma/qtd;
	
	for (i=0; i<qtd; i++){
		printf ("%d\n", n[i]);
	}
	printf("maior: %d\n", maior);
	printf("menor: %d\n", menor);
	printf("media: %d\n", media);
}

desde já grato pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

1- soma não é inicializado com valor 0, então você está somando sobre um valor lixo deixado por algum outro programa que usou o mesmo espaço de memória anteriormente.

 

2- soma e qtd são int, logo é entendido que ao fazer a divisão soma/qtd deseja-se fazer uma divisão inteira, portanto como está não será obtida a parte fracionária da média. Para resultar em um número com ponto flutuante deve-se fazer divisão com número de ponto flutuante, logo use casting para converter o tipo para float ( media = (float)soma/qtd; )

 

3- média é do tipo float, logo no printf deve usar o especificador %f ao invés de %d (inteiro).

 

4- A condição para achar o menor valor está errada pois está comparando n[ i ] com o maior.

 

 

  • Curtir 1
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
7 horas atrás, isrnick disse:

1- soma não é inicializado com valor 0, então você está somando sobre um valor lixo deixado por algum outro programa que usou o mesmo espaço de memória anteriormente.

 

2- soma e qtd são int, logo é entendido que ao fazer a divisão soma/qtd deseja-se fazer uma divisão inteira, portanto como está não será obtida a parte fracionária da média. Para resultar em um número com ponto flutuante deve-se fazer divisão com número de ponto flutuante, logo use casting para converter o tipo para float ( media = (float)soma/qtd; )

 

3- média é do tipo float, logo no printf deve usar o especificador %f ao invés de %d (inteiro).

 

4- A condição para achar o menor valor está errada pois está comparando n[ i ] com o maior.

 

5- está criando o vetor n com a variável qtd antes desta última ser inicializada, ou seja, primeiro ler qtd, depois cria n. Ou utiliza o conceito de vetores dinâmicos.

 

6- na hora de calcular o maior e menor, o i deve começar do 1, já que o maior e menor estão inicializados com a posição 0; (obs.: assim vai funcionar, mas seria uma falha de lógica, pois irá comparar duas posições iguais sem necessidade)

 

7- a depender, é possível verificar o maior, o menor e efetuar a soma em um único for. Seria como efetuar uma compra utilizando um único frete, rs.

  • Curtir 2
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui uma solução para o problema que não usa vetor:

#include <stdio.h>

/*2. Escreva um programa que leia n números. Depois da leitura mostre a média
dos números lidos, o maior número lido, e o menor.*/

int main() {
    int qtd, n, i, soma, maior, menor;
    float media;

    printf("quantos números serão lindos? ");
    scanf("%d", &qtd);
    
    soma = 0;
    for (i=0; i<qtd; i++) {

        printf("numero: \n");
        scanf("%d", &n);
        
        if (i == 0){
            maior = n;
            menor = n;
        }
        
        if (n < menor) {
            menor = n[i];
        }
        
        if (n > maior) {
            maior = n;
        }
        
        soma = soma + n;
    }

    media= (float)soma/qtd;

    printf("\nmaior: %d\n", maior);
    printf("menor: %d\n", menor);
    printf("media: %f\n", media);

    return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×