Ir ao conteúdo
  • Cadastre-se

C Média errada não encontro erro


Ir à solução Resolvido por Simon Viegas,

Posts recomendados

Bom dia,

 

Iniciei o curso em Análise e Desenvolvimento de Sistemas e o professor passou um programa que calcula a média ponderada de 2 alunos que fizeram 2 provas, a primeira prova tinha peso 6, a segunda peso 4.

Escrevi o código mas na hora de executar, se eu colocar todas as notas de todas as avaliações, ele me trás o resultado 64, eu esperava um 10.

Comparei meu código com do meu amigo mas não consegui encontrar a diferença, se alguém puder me ajudar a achar este erro ficarei muito grato.

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

int main()
{
	float pro1_1,pro2_1,pro1_2,pro2_2,mpa1,mpa2,ma;
	
	printf("Calculadora de Média Ponderada\n\n\n\n\n");
	
	printf("Na primeira prova o peso é igual a 6\n");
	printf("Na segunda prova o peso é igual a 4\n\n");
	printf("Digite a pontuação obtida na primeira prova do aluno 1: \n");
	scanf("%f",&pro1_1);
	printf("\nDigite a pontuação obtida na segunda prova do aluno 1: \n");
	scanf("%f",&pro2_1);
	printf("\nDigite a pontuação obtida na primeira prova do aluno 2: \n");
	scanf("%f",&pro1_2);
	printf("\nDigite a pontuação obtida na segunda prova do aluno 2: \n");
	scanf("%f",&pro2_2);
	
	mpa1 = (pro1_1 * 6) + (pro2_1 * 4) / 10;
	mpa2 = (pro1_2 * 6) + (pro2_2 * 4) / 10;
	
	ma = (mpa1 + mpa2) / 2;
	
	printf("\nA média ponderada do aluno 1 é %2.2f\n",mpa1);
	printf("A média ponderada do aluno 2 é %2.2f\n",mpa2);
	printf("A média aritmética das médias ponderadas dos alunos 1 e 2 é %2.2f\n",ma);
	
system("pause");
	
}

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @Patrick Franco.

 

15 minutos atrás, Patrick Franco disse:

	mpa1 = (pro1_1 * 6) + (pro2_1 * 4) / 10;
	mpa2 = (pro1_2 * 6) + (pro2_2 * 4) / 10;

A fórmula está errada. Primeiro você adiciona, só depois divide! No caso, faltou os parênteses na adição, para tirar a prioridade da divisão, ou seja, no seu código, está dividindo antes de adicionar. Vide PEMDAS que é relacionada à Ordem de operações.

 

No aguardo.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
  • Solução

Pelo contrário... os parênteses do código original não tem utilidade em nível de preferência, ou seja, isso:

 

7 horas atrás, Patrick Franco disse:

	mpa1 = (pro1_1 * 6) + (pro2_1 * 4) / 10;
	mpa2 = (pro1_2 * 6) + (pro2_2 * 4) / 10;

 

 

É o mesmo que isso:

	mpa1 = pro1_1 * 6 + pro2_1 * 4 / 10;
	mpa2 = pro1_2 * 6 + pro2_2 * 4 / 10;

 

Em ambos os códigos, primeiro multiplica [1] pro1_1 por 6..., depois multiplica os [2] pro2_1 por 4, após, [3] divide a conta 2 por 10, só depois adiciona a conta [1] a conta [3]. Resumindo: a conta 1 não vai ser dividida por 10.

 

 

Já no seu novo código, ficou certo:

	mpa1 = ((pro1_1 * 6) + (pro2_1 * 4)) / 10;
	mpa2 = ((pro1_2 * 6) + (pro2_2 * 4)) / 10;

 

Que é o mesmo que:

    mpa1 = (pro1_1 * 6 + pro2_1 * 4) / 10;
    mpa2 = (pro1_2 * 6 + pro2_2 * 4) / 10;

Veja que os parênteses da multiplicação não são necessário... entretanto, para um melhor efeito didático, deixe da forma que você fez... (visualmente separa as etapas)

 

Att

 

 

  • Amei 1
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...