Problema com casas decimais - C, C++ - Fórum Script Brasil
Asked by rafaelvitti,
rafaelvitti 0
Preciso fazer um programa que calcule a media de duas notas mas por exemplo, quando executo e entro com valores 1 e 2 ele me retorn media 1 ao invés de 1,5.
Tem algo faltando????
printf("POR FAVOR,DIGITE O PRIMEIRO NUMERO");
printf("POR FAVOR, DIGITE O SEGUNDO NUMERO");
printf("A MEDIA DO ALUNO E %f. \n",media);
A variável "media" até pode ser float, mas o resultado da divisão não é. Logo, o resultado da divisão ignora a parte fracionária. Mas você só precisa fazer um cast na divisão:
media = (float)(numero1+numero2)/2;
printf("M'dia: %5.2f",media);
Edited April 15, 2009 by DeeKilleer
Paulo_elite 0
Apenas mude de float pra integer sua variável media!!! Só mudar a semântica!
Apenas mude de float pra integer sua variável media!!!
Tem certeza de que isso realmente vai resolver o problema da forma como o OP expôs?
Se, em qualquer situação, a entrada não tiver uma parte fracionária, mudar tudo para float é gambiarra. Nestes casos, um cast é mais indicado.
Aliás, entrada de dados em C ou C++ é uma das coisas mais porcas que existem. Isso é coisa do tempo do onça. O ideal é usar o mínimo possível. E pelo que já vi até hoje, isso é usado apenas em programas muito simples, do tipo exercício de faculdade.
O Cast resolve da forma mais tradicional, agora mudar a semântica tyambém resolve, o que postei era apenas um quebra galho, como a variável so recebe números inteiros, quando tentar entrar números fracionários, ele eliminará... Isso dependendo do compilador, se for um conpilador antigo, dá erro, semantica de dados errados.... é como querer inserir um campo bolean um string!
Espero ter esclarecido meu post anterior!
mudar a semântica tyambém resolve, o que postei era apenas um quebra galho
Negativo. Ao trocar o tipo de "media" para int, o problema continuará sendo exatamente o mesmo que o OP reclamou: a média dos valores 1 e 2 continuará sendo 1. A acurácia do resultado depende de "media" armazenar em ponto flutuante. Portanto, para resolver, só com "media" sendo float. E, adicionalmente, o cast que indiquei ou então, trocar tudo para float de uma vez. Fora isso, não dá.
Caro amigo, acho que você não entendeu, ele quer que o resultado seja sempre um inteiro, olha só o pedido dele!
Por isso que postei o quebra galho, ou então o jeito erto, fazendo um cast!!!
Entendeu agora? Se a resposta for 1.5, ele quer apenas a casa do inteiro!!! Pode fazer isso dependendo da plicação no próprio palicativo, por exempro em pascal (media, 2:0)...
O valor retornado é 1 e deveria ser 1,5 (foi o que eu entendi)
ele quer que o resultado seja sempre um inteiro, olha só o pedido dele!
Leia novamente o pedido do OP com um pouquinho mais de calma. Observe que ele reclama justamente do resultado ser apresentado como um inteiro. Logo, NÃO é isso o que ele quer.
Ademais, pense bem: pra quê alguém iria querer ignorar o resto numa média aritmética? É até uma questão de lógica. :)