Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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.

 

 

Editado por isrnick
  • 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

valeu gente boa! funcionou perfeitamente, 

  • Curtir 2

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






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

×