Jump to content

[Resolvido] Ajuda a associar resultados


Recommended Posts

Posted (edited)

Boas, recentemente aventurei-me na programação em C, como tal ainda sei muito pouco e recentemente deparei-me com um problema.

Estou a fazer um programa que mede o IMC (índice de massa corporal)=peso/altura^2. Depois de calculado o valor queria associar o resultado a um diagnostico, de acordo com valores tabelados.

Uso o Dev C++

eu sei que os if's não podem ser apresentados assim, mas não consigo pensar numa forma em que os consiga associar individualmente.

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

int main ()
{
float peso,altura,indice;

printf("\nInsira o seu peso: ");
scanf("%f",& peso);

printf("\nAgora insira a sua altura: ");
scanf("%f",& altura);

indice=peso/(altura*altura);

printf("\nO seu indice de massa corporea e de %f\n\n",indice);

if(indice<18.5) {
                printf("Voce esta abaixo do peso ideal\n\n\n\n\n");
                    }

if(18.5<=indice<=24.9) {
                        printf("Parabens voce esta no peso ideal\n\n\n\n\n");
                        }

if(25<=indice<=29.9) {
                    printf("Voce esta acima do seu peso---sobrepeso\n\n\n\n\n");
                    }

if(30<=indice<=34.9) {
                    printf("Voce tem Obesidade grau I\n\n\n\n\n");
                    }

if(35<=indice<=39.9) {
                printf("Voce tem Obesidade grau II\n\n\n\n\n");
                }
if(indice>=40) {
                printf("Voce tem Obesidade grau III\n\n\n\n\n");
                }                    


system("pause");
return(0);

}
Edited by pmg
falta LP
Posted (edited)

A condicao "indice entre 20 e 30", como sugerido pelo teu codigo pode ser descrita como "indice maior que 20 e menor que 30".

Nesta ultima frase, composta por uma conjuncao, a segunda parte tem o sujeito implicito. Explicitando o sujeito a frase fica assim: "indice maior que 20 e indice menor que 30".

Em C tens que explicitar tudo ... o codigo pode ficar assim

if ((20 <= indice) && (indice < 30)) /* ... */;

Nota: os parentesis interiores sao redundantes

EDIT: Outra nota: O que acontece a alguem que tenha um indice de 29.93?

Sugiro que uses os mesmos numeros para os limites; uma vez com < e outra vez com >= (ou similar, como no meu exemplo)

Edited by pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted

Exemplo para a sugestao do CSalgado

if (indice < 18.5) { printf("abaixo"); }
else if (indice < 25) { printf("ideal"); }
/* ... */
else if (indice < 40) { printf("grau II"); }
else printf("grau III");

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted

peço desculpa pelo offtopic mas como é que ponho o código devidamente identado e a cores aqui no forum?

Olha para a assinatura do pmg:

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Posted (edited)

Boas, tentei seguir a sugestão do CSalgado, mas não me dá, provavelmente percebi mal.

Nota:Quando insiro os valores de peso e de altura dá-me o IMC certo e depois aparecem todas as opções(que não deveriam aparecer), menos a última, em que o indice é maior que 40.

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

int main ()
{
float peso,altura,indice;

printf("\nInsira o seu peso: ");
scanf("%f",& peso);

printf("\nAgora insira a sua altura: ");
scanf("%f",& altura);

indice=peso/(altura*altura);

printf("\nO seu indice de massa corporea e de %f\n\n",indice);

if(indice<18.5) {
                printf("Voce esta abaixo do peso ideal\n\n\n\n\n");
                }

else if(indice<25.0) {
                    printf("Parabens voce esta no peso ideal\n\n\n\n\n");
                        }

else if(indice<30.0) {
                    printf("Voce esta acima do seu peso---sobrepeso\n\n\n\n\n");
                    }

else if(indice<35.0) {
                    printf("Voce tem Obesidade grau I\n\n\n\n\n");
                    }

else if(indice<40.0) {
                    printf("Voce tem Obesidade grau II\n\n\n\n\n");
                    }                

else {
        printf("Voce tem Obesidade grau III\n\n\n\n\n");
        }            


system("pause");
return(0);

}            

Edited by pmg
falta LP
Posted (edited)

O teu código tal e qual como o postaste aqui (menos o include <stdlib> e a chamada à função system()) funciona bem no ideone.

Edited by pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted (edited)

Experimenta meter uma identificacao unica para cada compilacao do programa, por exemplo a macro __TIME__.

#include <stdio.h>

int main(void) {
   printf("Calculador de massa corporea, versao %s %s\n", __DATE__, __TIME__);
   /* ... */
   return 0;
}

Isto vai servir para verificares que o programa que estas a correr e, de facto, o programa que compilaste. Se compilares um programa as 19:13, mas o identificador disser 16:57, sabes que nao estas a correr a ultima versao do programa.

Como o teu programa esta bem (isto e: tem obrigacao de compilar e correr tal qual como o postaste aqui), o teu problema de ser na tua configuracao. Suponho que estas a compilar para uma directoria e a correr de outra ou qualquer outra coisa parecida.

Edited by pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted

De facto o problema é mesmo esse, pois inseri o que disseste no código e continuou tudo na mesma, mas depois passei o 1º printf (Insira o seu peso), de modo a que a 1ª coisa a aparecer fosse a altura, tal não aconteceu, continuou a aparecer o peso.

O que posso fazer para resolver o problema?

Posted

ok, descobri que o dev c++ executa o programa anterior ao final, apesar de estes terem nomes diferentes. Também acontece com outros programas que ja tinha feito, ele abre um antigo, que tem um nome diferente.

Fui a CVS->Arquivo atual...->Atualizar, e ele diz para configurar o suporte a CVS em Ferramentas->Opções do Ambiente. Fui ai, mas não sei o que devo alterar.

A configuração atual é esta:

Arquivo de Programa CVS:cvs.exe

Nivel de compressão=4

Usar SSH ao inves de RSH

Posted (edited)

Estive a mudar o ficheiro mais recente para uma nova pasta e ja não confundia.

O que acham do programa agora?

Nota:ainda falta introduzir outra variavel, o facto de se ser do sexo masculino ou feminino.

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

int main (void)
{
int resposta;
float peso,altura,indice;


/* printf ("%s:%d (%s %s)\n",
        __FILE__, __LINE__, __DATE__, __TIME__);*/


do {
printf("\nInsira o seu peso: ");
scanf("%f",& peso);



printf("\nAgora insira a sua altura: ");
scanf("%f",& altura);

indice=peso/(altura*altura);

printf("\nO seu indice de massa corporea e de %f\n\n",indice);

if(indice<18.5) {
                printf("Voce esta abaixo do peso ideal\n\n\n\n\n");
                }

else if(indice<25.0) {
                    printf("Parabens voce esta no peso ideal\n\n\n\n\n");
                        }

else if(indice<30.0) {
                    printf("Voce esta acima do seu peso---sobrepeso\n\n\n\n\n");
                    }

else if(indice<35.0) {
                    printf("Voce tem Obesidade grau I\n\n\n\n\n");
                    }

else if(indice<40.0) {
                    printf("Voce tem Obesidade grau II\n\n\n\n\n");
                    }                

else {
        printf("Voce tem Obesidade grau III\n\n\n\n\n");
        }            



    printf("\nDeseja continuar? (1 - sim / Carregue noutro numero - nao)\n");
    scanf("%d",&resposta);
    if((resposta!=1)&& (resposta!=1))    
    printf("\nPrograma finalizado. \n");
}
while(resposta==1);



    system("pause");
return(0);

}            

Edited by pmg
falta LP

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.