Jump to content
Fórum Script Brasil
  • 0

Problema com casas decimais


Question

Bom dia

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????

#include <stdio.h>

#include <stdlib.h>

main()

{

int numero1,numero2;

float media;

printf("POR FAVOR,DIGITE O PRIMEIRO NUMERO");

scanf("%d",&numero1);

printf("POR FAVOR, DIGITE O SEGUNDO NUMERO");

scanf("%d",&numero2);

media = (numero1+numero2)/2;

printf("A MEDIA DO ALUNO E %f. \n",media);

system("PAUSE");

}

desde já agradeço

Link to post
Share on other sites

13 answers to this question

Recommended Posts

  • 0

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;

Link to post
Share on other sites
  • 0

Ou pode ser assim:

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

main()
{
float numero1,numero2;
float media;
printf("POR FAVOR,DIGITE O PRIMEIRO NUMERO");
scanf("%f",&numero1);
printf("POR FAVOR, DIGITE O SEGUNDO NUMERO");
scanf("%f",&numero2);
media = (numero1+numero2)/2;
printf("A MEDIA DO ALUNO E %f. \n",media);
system("PAUSE");
}

Link to post
Share on other sites
  • 0
#include <stdio.h>
#include <conio.h>

void main(void)
{
   float nota1, nota2, media;
   clrscr();
   printf("Digite a Nota 1: ");
   scanf("%f",&nota1);
   printf("Digite a Nota 2: ");
   scanf("%f",&nota2);
   media = (nota1+nota2)/2;
   printf("M‚dia: %5.2f",media);
   getch();
}

Edited by DeeKilleer
Link to post
Share on other sites
  • 0
float nota1, nota2, media;

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.

Link to post
Share on other sites
  • 0

media = (float)(numero1+numero2)/2;

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!

Link to post
Share on other sites
  • 0
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á.

Link to post
Share on other sites
  • 0
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!

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.

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)...

Link to post
Share on other sites
  • 0
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. :)

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      148684
    • Total Posts
      644516
×
×
  • Create New...