parra1100 Posted October 23, 2012 at 10:18 PM Report #480174 Posted October 23, 2012 at 10:18 PM (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 October 23, 2012 at 10:40 PM by pmg falta LP
pmg Posted October 23, 2012 at 10:45 PM Report #480178 Posted October 23, 2012 at 10:45 PM (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 October 23, 2012 at 10:47 PM 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!
CSalgado Posted October 23, 2012 at 10:49 PM Report #480179 Posted October 23, 2012 at 10:49 PM (edited) usa o else if... Edited October 23, 2012 at 10:53 PM by CSalgado 1 Report
pmg Posted October 23, 2012 at 10:50 PM Report #480180 Posted October 23, 2012 at 10:50 PM 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!
CSalgado Posted October 23, 2012 at 10:54 PM Report #480181 Posted October 23, 2012 at 10:54 PM peço desculpa pelo offtopic mas como é que ponho o código devidamente identado e a cores aqui no forum?
pikax Posted October 23, 2012 at 11:09 PM Report #480182 Posted October 23, 2012 at 11:09 PM 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."
CSalgado Posted October 23, 2012 at 11:15 PM Report #480183 Posted October 23, 2012 at 11:15 PM obrigado
parra1100 Posted October 24, 2012 at 03:14 PM Author Report #480271 Posted October 24, 2012 at 03:14 PM (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 October 24, 2012 at 03:23 PM by pmg falta LP
pmg Posted October 24, 2012 at 03:32 PM Report #480273 Posted October 24, 2012 at 03:32 PM (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 October 24, 2012 at 03:33 PM 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!
parra1100 Posted October 24, 2012 at 03:40 PM Author Report #480274 Posted October 24, 2012 at 03:40 PM Então deverá ser algum problema no dev C, porque no meu PC aparece isto: http://upload.crazzy.com.br/show-image.php?id=e310e071d5c31c0f17ab50220853bbf8
pmg Posted October 24, 2012 at 05:23 PM Report #480283 Posted October 24, 2012 at 05:23 PM (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 October 24, 2012 at 05:25 PM 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!
parra1100 Posted October 24, 2012 at 06:44 PM Author Report #480298 Posted October 24, 2012 at 06:44 PM 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?
HappyHippyHippo Posted October 24, 2012 at 07:24 PM Report #480302 Posted October 24, 2012 at 07:24 PM apaga o programa compilado que tens e verifica que uma nova compilação cria-o IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
parra1100 Posted October 24, 2012 at 09:24 PM Author Report #480325 Posted October 24, 2012 at 09:24 PM Continua a não funcionar
HappyHippyHippo Posted October 24, 2012 at 09:33 PM Report #480329 Posted October 24, 2012 at 09:33 PM mas criou o executavel ou não ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
parra1100 Posted October 24, 2012 at 09:46 PM Author Report #480334 Posted October 24, 2012 at 09:46 PM Sim criou. Já detetei o problema, ao abrir o programa atraves do compilador não funciona, mas se usar o executavel criado funciona na perfeição, porque será?
HappyHippyHippo Posted October 24, 2012 at 10:16 PM Report #480348 Posted October 24, 2012 at 10:16 PM porque o compilador está a executar um ficheiro que não o compilado, tenta descubrir onde está, apaga-lo e desvendar onde mudaste essa configuração. IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
parra1100 Posted October 24, 2012 at 10:34 PM Author Report #480355 Posted October 24, 2012 at 10:34 PM 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
mundo Posted October 25, 2012 at 08:02 AM Report #480381 Posted October 25, 2012 at 08:02 AM Queres um conselho? Se usas o windows desinstala o dev-C e instala o code::blocks
parra1100 Posted October 25, 2012 at 08:11 PM Author Report #480472 Posted October 25, 2012 at 08:11 PM (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 October 25, 2012 at 08:14 PM by pmg falta LP
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now