Ir ao conteúdo
  • Cadastre-se

Alguém consegue me ajudar aqui? Calcular o Peso Ideal.


bc2010
Ir à solução Resolvido por ScreenBlack,

Posts recomendados

     Faça um programa que leia a altura e o sexo de uma pessoa e calcule e mostre seu peso ideal, utilizando as seguintes formulas (em que h corresponde a altura):

  Homens – (72,7 * h) – 58

  Mulheres – (62,1 * h) – 44,7

 

  Minha dúvida: quando eu dou F11 (comando de compilar e executar) aparece normal, não dá nenhum erro, só que na frase: "Seu peso ideal seria: %0.2f!", ele dá como resultado o número 0,0.

Alguém sabe o porque?

Obrigado.

 

OBS: estou usando o programa Dev-C++ 5.8.3


#include <iostream>
#include <stdio.h>
#include <locale.h>
#include <string.h>
 
int main(int argc, char** argv) 
{
setlocale(LC_ALL, "Portuguese");
 
float alt, peso, pesoid;
char sexo;
 
printf ("Digite sua altura (em metros): ");
scanf ("%f", &alt);
printf ("\nDigite seu peso: ");
scanf ("%f", &peso);
printf ("\nDigite F para Feminino e M para Masculino: ");
scanf ("%s", &sexo);
 
if (sexo == 'M')
{
pesoid = (72,7*alt-58);
}
else if (sexo == 'F')
{
pesoid = (62,1*alt-44,7);
}
 
 
if (peso == pesoid)
{
printf ("\n\nSeu peso é: %f! Parabéns, você está no peso ideal, que é: %0.2f! \n", peso, pesoid);
}
 
if(peso > pesoid)
{
printf ("\nSeu peso é: %f. Você está acima do peso! Seu peso ideal seria: %0.2f! \n", peso, pesoid);
}
  else
{
  printf ("\nSeu peso é: %f. Você está abaixo do peso! Seu peso ideal seria: %0.2f! \n", peso, pesoid);
}
 
return 0;
}
Link para o comentário
Compartilhar em outros sites

 Bom vamos começar, primeiro se você quiser ser preciso deve pegar a altura do usuário em Metros e CM, porque normalmente as pessoas tem 1 metro, mas vária os centímetros correto? 

 

Seu calculo seria totalmente falho sem os cm...

 

Segundo, na hora de declarar a variável o compilador está confundindo seu calculo, lembra matemática básica os conceitos de " ( ) "?

 

Faça assim: 

 

pesoid = 72,7 * (alt-58); // Masculino

 

pesoid = 62,1 * (alt-44,7); // Feminino

Link para o comentário
Compartilhar em outros sites

 Bom vamos começar, primeiro se você quiser ser preciso deve pegar a altura do usuário em Metros e CM, porque normalmente as pessoas tem 1 metro, mas vária os centímetros correto? 

 

Seu calculo seria totalmente falho sem os cm...

 

Segundo, na hora de declarar a variável o compilador está confundindo seu calculo, lembra matemática básica os conceitos de " ( ) "?

 

Faça assim: 

 

pesoid = 72,7 * (alt-58); // Masculino

 

pesoid = 62,1 * (alt-44,7); // Feminino

Olá Internal Programmer, fiz como você me disse na parte dos Parênteses, coloquei entre o alt e os números para fazer a subtração primeiramente, mas continua dando resultado 0,0.

E sobre os Centímetros e Metros, eu coloco a vírgula após o 1 metro, e em seguida eu coloco como se fosse os Centímetros, por exemplo, 1,74, como consta na imagem abaixo. Se eu tiver errado, me corrijam, por favor.

http://prntscr.com/5bflpe

Link para o comentário
Compartilhar em outros sites

Troque as vírgulas por ponto, no código.

A vírgula só vai funcionar para entrada de valores feitas pelo usuário, devido ao 'setlocale'. Para uso no código, ainda mantém o padrão.

if (sexo == 'M'){pesoid = (72.7*alt-58);}else if (sexo == 'F'){pesoid = (62.1*alt-44.7);}
Outro erro, está na leitura do sexo (M ou F):

scanf ("%c", &sexo);
A máscara '%s' é para string, ou seja, será adicionado o terminador de string ('\0') no final da leitura.

Para leitura de carácter simples, use '%c'.

Saída:

Digite sua altura (em metros): 1,77Digite seu peso: 84Digite F para Feminino e M para Masculino: MSeu peso é: 84,000000. Você está acima do peso! Seu peso ideal seria: 70,68!Process returned 0 (0x0)   execution time : 10.344 sPress any key to continue.
Estou obeso :(
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Troque as vírgulas por ponto, no código.

A vírgula só vai funcionar para entrada de valores feitas pelo usuário, devido ao 'setlocale'. Para uso no código, ainda mantém o padrão.

if (sexo == 'M'){pesoid = (72.7*alt-58);}else if (sexo == 'F'){pesoid = (62.1*alt-44.7);}
Outro erro, está na leitura do sexo (M ou F):

scanf ("%c", &sexo);
A máscara '%s' é para string, ou seja, será adicionado o terminador de string ('\0') no final da leitura.

Para leitura de carácter simples, use '%c'.

Saída:

Digite sua altura (em metros): 1,77Digite seu peso: 84Digite F para Feminino e M para Masculino: MSeu peso é: 84,000000. Você está acima do peso! Seu peso ideal seria: 70,68!Process returned 0 (0x0)   execution time : 10.344 sPress any key to continue.
Estou obeso :(

 

 

Coloquei os pontos ao invés das vírgulas, tirei o %s e coloquei %c no scanf, mas não funcionou, na verdade, apareceu outro problema, além do resultado do Peso Ideal aparecer como 0.0, quando dou F11, não consigo digitar se é M ou F, ele pula automaticamente, não sei por qual motivo. Vou postar o código aqui abaixo e uma imagem de como fica quando dou F11.

#include <iostream>#include <stdio.h>#include <locale.h>#include <string.h>int main(int argc, char** argv) {	setlocale(LC_ALL, "Portuguese");		float alt, peso, pesoid;	char sexo;		printf ("Digite sua altura (em metros): ");	scanf ("%f", &alt);	printf ("\nDigite seu peso: ");	scanf ("%f", &peso);	printf ("\nDigite F para Feminino e M para Masculino: ");	scanf ("%c", &sexo);		if (sexo == 'M')	{		pesoid = (72.7*alt-58);	}	else if (sexo == 'F')	{		pesoid = (62.1*alt-44.7);	}			if (peso == pesoid)	{		printf ("\n\nSeu peso é: %0.2f! Parabéns, você está no peso ideal, que é: %0.2f! \n", peso, pesoid);	}		if (peso > pesoid)	{		printf ("\n\nSeu peso é: %0.2f. Você está acima do peso! Seu peso ideal seria: %0.2f! \n", peso, pesoid);	}  	else	{  		printf ("\n\nSeu peso é: %0.2f. Você está abaixo do peso! Seu peso ideal seria: %0.2f! \n", peso, pesoid);	}		return 0;}

Imagem da Compilação: http://prntscr.com/5bjrxy

 

Desde já, agradeço.

Link para o comentário
Compartilhar em outros sites

  • Solução

E erro ocorre por causa da máscara usada na função "scanf ("%f", &peso)"

Troque para:

	printf ("Digite sua altura (em metros): ");	scanf (" %f", &alt);	printf ("\nDigite seu peso: ");	scanf (" %f", &peso);	printf ("\nDigite F para Feminino e M para Masculino: ");	scanf (" %c", &sexo);
O espaço adicionado antes do '%', serve para ignorar o carácter referente a tecla ENTER, que é a razão por não permitir a leitura do 'M' ou 'F'.
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

E erro ocorre por causa da máscara usada na função "scanf ("%f", &peso)"

Troque para:

	printf ("Digite sua altura (em metros): ");	scanf (" %f", &alt);	printf ("\nDigite seu peso: ");	scanf (" %f", &peso);	printf ("\nDigite F para Feminino e M para Masculino: ");	scanf (" %c", &sexo);
O espaço adicionado antes do '%', serve para ignorar o carácter referente a tecla ENTER, que é a razão por não permitir a leitura do 'M' ou 'F'.

 

Problema resolvido Screen! Muito obrigado pelas explicações!

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!