Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Hellsius

[Resolvido] Programa que calcula o peso ideal em C

Recommended Posts

Pessoal, sou novato e estou tentando fazer este exercicio:

"Construa um programa que calcule o peso ideal de uma pessoa. Dados de entrada: altura e sexo. Fórmulas para calculo do peso:

peso ideal de homem = (72,7*altura)-58

peso ideal da mulher = (62,1*altura-44,7"

 

Fiz só uma parte, mas não tenho ideia de como fazer o resto, segue o fonte abaixo:

 

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

int main ()
{
   // Variaveis
   int altura;
   char sexo;

   // Entrada de Dados
   printf("Informe qual eh a sua altura: ");
   scanf("%d", &altura);
   printf("Informe o sexo"
   "\nM para masculino e F para feminino: ");
   scanf("%c", &sexo);

   // Processamento
   mpeso = (72.7*altura)-58; // mpeso = peso ideal masculino
   fpeso = (62.1*altura)-44.7; // fpeso = peso ideal feminino


   // Final do Codigo   
   getch ();
   return 0;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tava no caminho certo...

Eu faria da seguinte forma, criaria uma variavel para armazena o resultado, resultado.

Depois de ler tudo colocaria um IF pra ver o sexo e fazer as contas, mais ou menos assim:

if(sexo == 'm')
   resultado = (72.7*altura)-58;
   else
      resultado = (62.1*altura)-44.7;

 

Sendo que essa variável resultado é do tipo float.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela ajuda.

 

Veja como ficou o codigo:

 

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
                   // Exercicio 5 "Aula4.pdf"
int main ()
{
   // Variaveis
   float altura, resultado_m, resultado_f;
   char sexo;

   // Entrada de Dados
   printf("Informe qual eh a sua altura: ");
   scanf("%f", &altura);
   printf("Informe o sexo. "
   "\nM para masculino e F para feminino: ");
   scanf("%c", &sexo);

   // Processamento

   if(sexo == 'm')
   {
   resultado_m = (72.7*altura)-58;
                  printf("\nO peso ideal eh: %f", resultado_m);
    }
                  else
                      {
                       resultado_f = (62.1*altura)-44.7;
                       printf("\nO peso ideal eh: %f", resultado_f);
                       }
   // Final do Codigo   
   getch ();
   return 0;

}

 

 

Mas a saída Esta desta forma:

Informe qual eh a sua altura: 1,75

Informe o sexo.

M para masculino e F para feminino: //Nesta parte ele nem me deixou digitar "m" ou "f" e ja me mostrou 17.400000

O peso ideal eh: 17.400000

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acabei obtendo ajuda de uma pessoa que me disse para deixar esta parte do cordigo desta forma:

 

// Entrada de Dados
   printf("Informe qual eh a sua altura: ");
   scanf("%f", &altura);
   fflush(stdin); //limpa o buffer
   printf("Informe o sexo. "
   "\nM para masculino e F para feminino: ");
   scanf("%c", &sexo);

 

Colocando o fflush(stdio); em baixo do scanf("%f", &altura) o programa funcionou normalmente, mas ainda não sei por que tive que acrescentar a linha fflush(stdio); em baixo do scanf("%f", altura); ????

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acabei obtendo ajuda de uma pessoa que me disse para deixar esta parte do cordigo desta forma:

 

// Entrada de Dados
   printf("Informe qual eh a sua altura: ");
   scanf("%f", &altura);
   fflush(stdin); //limpa o buffer
   printf("Informe o sexo. "
   "\nM para masculino e F para feminino: ");
   scanf("%c", &sexo);

 

Colocando o fflush(stdio); em baixo do scanf("%f", &altura) o programa funcionou normalmente, mas ainda não sei por que tive que acrescentar a linha fflush(stdio); em baixo do scanf("%f", altura); ????

 

 

é pra limpar o buffer do teclado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando você digita 1 e da enter (por exemplo),o que vai pro buffer de entrada é 1\n,dai quando você le um número do buffer de entrada,ele limpa o 1 e deixa o \n no buffer.Ao pedir para ler outro número ele vai pedir por input do teclado,o que vai fazer o buffer ficar algo como \n3\n,e na hora de limpar o buffer e colocar a parte retirada nas devidas variaveis e com o devido cast ele não vai achar um número no inicio do buffer e deixar sua variavel como estava.Limpar o buffer é retirar todo esse resquicio nele,no caso o endline.

O fflush não é aconselhado como explicado em vários artigos,inclusive 1 na imasters.

Ao invés faça:

#include <stdio.h>

int main()
{
   float resultado = 0, altura = 0;
   char sexo = 0;
   printf("Digite sua altura:");
   scanf("%f%*c", &altura);
   printf("Digite seu sexo [F] ou [M]:");
   scanf("%c%*c", &sexo);
   if(sexo == 'M')
       resultado = 72.7*altura - 58;
   else if(sexo == 'F')
       resultado = 62.1*altura - 44.7;
   printf("O seu peso ideal eh:%g\n", resultado);
   scanf("%*c");
   return 0;
}

Um código que calculasse e exibisse os pesos ideais para os 2 sexos seria mais rápido que o acima,por ser branchless.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela otima explicação, exclareceu muita coisa mesmo e desculpe a demora de responder pois a facul e o trabalho estão consumindo muito minha vida social, kkkk.

Vlw, abraços

 

 

 

Quando você digita 1 e da enter (por exemplo),o que vai pro buffer de entrada é 1\n,dai quando você le um número do buffer de entrada,ele limpa o 1 e deixa o \n no buffer.Ao pedir para ler outro número ele vai pedir por input do teclado,o que vai fazer o buffer ficar algo como \n3\n,e na hora de limpar o buffer e colocar a parte retirada nas devidas variaveis e com o devido cast ele não vai achar um número no inicio do buffer e deixar sua variavel como estava.Limpar o buffer é retirar todo esse resquicio nele,no caso o endline.

O fflush não é aconselhado como explicado em vários artigos,inclusive 1 na imasters.

Ao invés faça:

#include <stdio.h>

int main()
{
   float resultado = 0, altura = 0;
   char sexo = 0;
   printf("Digite sua altura:");
   scanf("%f%*c", &altura);
   printf("Digite seu sexo [F] ou [M]:");
   scanf("%c%*c", &sexo);
   if(sexo == 'M')
       resultado = 72.7*altura - 58;
   else if(sexo == 'F')
       resultado = 62.1*altura - 44.7;
   printf("O seu peso ideal eh:%g\n", resultado);
   scanf("%*c");
   return 0;
}

Um código que calculasse e exibisse os pesos ideais para os 2 sexos seria mais rápido que o acima,por ser branchless.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.