Ir ao conteúdo
  • Cadastre-se

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


Visitante

Posts recomendados

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.

Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
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 1
  • Amei 1
Link para o comentário
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;
}
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...