Ir ao conteúdo

Dúvida no programa pascal


Zauron

Posts recomendados

Postado

Bem galera, estou com uma dúvida num programinha simples aqui. Fiz um programa que calcula o IMC da pessoa. Olha o programa:

program IMC;
uses crt;
var peso,altura,seuimc:real;
begin
clrscr;
writeln ('Digite o seu peso:');
readln (peso);
writeln ('Digite a sua altura:');
readln (altura);
seuimc := peso / sqr(altura);
writeln (' ');
writeln (' Seu imc é de: ', seuimc:0:1);
writeln (' ');
writeln ('Veja em qual padrão você se encaixa:');
writeln (' ');
writeln ('Abaixo de 18,5: Você está abaixo do peso');
writeln ('Entre 18,5 e 24,9: Você está no seu peso ideal');
writeln ('Entre 25,0 e 29,9: Você está acima do seu peso');
writeln ('Entre 30,0 e 34,9: Você está em obesidade grau 1');
writeln ('Entre 35,0 e 39,9: Você está em obesidade grau 2');
writeln ('Acima de 40,0: Você está em obesidade grau 3');
readkey;
end.

Até aí tudo bem, o programa funciona beleza, porém eu gostaria de dar uma "estética" pra ele, colocando o resultado em vermelho, e marcar na tabelinha logo abaixo do resultado, a linha correspondente a seu imc. Vou colocar agora como estou fazendo e não está dando. :angry:

textcolor (12);
writeln (' Seu imc é de: ', seuimc:0:1);
writeln (' ');
writeln ('Veja em qual padrão você se encaixa:');
writeln (' ');
if seuimc < 18.5 then
textcolor (12);
writeln ('Abaixo de 18,5: Você está abaixo do peso');
if (seuimc > 18.5) and (seuimc < 24.9) then
textcolor (12);
writeln ('Entre 18,5 e 24,9: Você está no seu peso ideal');
if (seuimc > 25.0) and (seuimc < 29.9) then
textcolor (12);
writeln ('Entre 25,0 e 29,9: Você está acima do seu peso');
if (seuimc > 30.0) and (seuimc < 34.9) then
textcolor (12);
writeln ('Entre 30,0 e 34,9: Você está em obesidade grau 1');
if (seuimc > 35.0) and (seuimc < 39.9) then
textcolor (12);
writeln ('Entre 35,0 e 39,9: Você está em obesidade grau 2');
if seuimc > 40.0 then
textcolor (12);
writeln ('Acima de 40,0: Você está em obesidade grau 3');
readkey;
end.

Então, eu queria que ficasse o resultado em vermelho(isso ok) e a linha correspondente em vermelho, porém do jeito que o codigo está, fica colorido do resultado pra baixo, ou seja, se o imc der 28,6, vai ficar colorido da linha "Entre 25,0 e 29,9" pra baixo, e não só a linha que eu queria.

Gostaria de saber o que estou errando.

Obrigado pela atenção.

  • Membro VIP
Postado

Bem galera, estou com uma dúvida num programinha simples aqui. Fiz um programa que calcula o IMC da pessoa. Olha o programa:

program IMC;

uses crt;

var peso,altura,seuimc:real;

begin

clrscr;

writeln ('Digite o seu peso:');

readln (peso);

writeln ('Digite a sua altura:');

readln (altura);

seuimc := peso / sqr(altura);

writeln (' ');

writeln (' Seu imc é de: ', seuimc:0:1);

writeln (' ');

writeln ('Veja em qual padrão você se encaixa:');

writeln (' ');

writeln ('Abaixo de 18,5: Você está abaixo do peso');

writeln ('Entre 18,5 e 24,9: Você está no seu peso ideal');

writeln ('Entre 25,0 e 29,9: Você está acima do seu peso');

writeln ('Entre 30,0 e 34,9: Você está em obesidade grau 1');

writeln ('Entre 35,0 e 39,9: Você está em obesidade grau 2');

writeln ('Acima de 40,0: Você está em obesidade grau 3');

readkey;

end.

Até aí tudo bem, o programa funciona beleza, porém eu gostaria de dar uma "estética" pra ele, colocando o resultado em vermelho, e marcar na tabelinha logo abaixo do resultado, a linha correspondente a seu imc. Vou colocar agora como estou fazendo e não está dando. :angry:

textcolor (12);

writeln (' Seu imc é de: ', seuimc:0:1);

writeln (' ');

writeln ('Veja em qual padrão você se encaixa:');

writeln (' ');

if seuimc < 18.5 then

textcolor (12);

writeln ('Abaixo de 18,5: Você está abaixo do peso');

if (seuimc > 18.5) and (seuimc < 24.9) then

textcolor (12);

writeln ('Entre 18,5 e 24,9: Você está no seu peso ideal');

if (seuimc > 25.0) and (seuimc < 29.9) then

textcolor (12);

writeln ('Entre 25,0 e 29,9: Você está acima do seu peso');

if (seuimc > 30.0) and (seuimc < 34.9) then

textcolor (12);

writeln ('Entre 30,0 e 34,9: Você está em obesidade grau 1');

if (seuimc > 35.0) and (seuimc < 39.9) then

textcolor (12);

writeln ('Entre 35,0 e 39,9: Você está em obesidade grau 2');

if seuimc > 40.0 then

textcolor (12);

writeln ('Acima de 40,0: Você está em obesidade grau 3');

readkey;

end.

Então, eu queria que ficasse o resultado em vermelho(isso ok) e a linha correspondente em vermelho, porém do jeito que o codigo está, fica colorido do resultado pra baixo, ou seja, se o imc der 28,6, vai ficar colorido da linha "Entre 25,0 e 29,9" pra baixo, e não só a linha que eu queria.

Gostaria de saber o que estou errando.

Obrigado pela atenção.

Olá,

1) Cor do texto no momento

Zauron, simplesmente falta você "redefinir a cor para o padrão", ou seja, o TextColor() serve para mudar a cor daquele momento em diante, logo toda escrita na tela vai continuar em vermelho.

Para corrigir, basta você mudar a cor novamente para a que você quer logo depois de ter impresso o texto, que no caso é o "branco".

TextColor(white);
ou
TextColor(15);

Obs.: Essa cor branca é mais clara, inclusive é interessante coloca-la logo no início do programa. Acho mais bonita que a tradicional... (a cor branca original eu não lembro agora, mas dar para voltar também, é fácil achá-la).

PS1: No Pascal, o TextColor() muda a cor a partir do momento que foi chamado. É como se "mudasse de lápis". Já no "ms-dos", por exemplo, o comando de mudar a cor (ex.: "color 0C"), muda a cor de todo o texto, ou seja, todo o texto, novo ou velho, vai passar a ficar com a cor (no exemplo, em vermelho).

2) Estrutura de seleção if x if/else

Não sei se você já aprendeu a usar if/else, se sim, observe que as proposições são mutualmente exclusivas, ou seja, se for um, não pode ser outra, logo devem-se usar o "else"....

3) SUGESTÃO

Uma sugestão para aprimorar seu programa...

Que tal inserir também no programa a informação de quanto a pessoa precisa ganhar ou perder de peso para chegar no "peso ideal" ???

***

No aguardo

Abraços

Postado

Olá EstilingueAtomico,

Obrigado pela ajuda, consegui fazer ficar do jeito que eu queria :lol:

E realmente o textcolor (15) é melhor que o "branco meio cinza" padrão que já vem :lol:

E gostei da sugestão de colocar quanto a pessoa tem que emagrecer para chegar no peso ideal, porém não tenho ideia de como fazer isso no programa kkkkkkkkkk

Se tiver como dar uma ajuda sobre como fazer isso :help:

  • Membro VIP
Postado
Olá EstilingueAtomico,

Obrigado pela ajuda, consegui fazer ficar do jeito que eu queria :lol:

E realmente o textcolor (15) é melhor que o "branco meio cinza" padrão que já vem :lol:

E gostei da sugestão de colocar quanto a pessoa tem que emagrecer para chegar no peso ideal, porém não tenho ideia de como fazer isso no programa kkkkkkkkkk

Se tiver como dar uma ajuda sobre como fazer isso :help:

Olá,

Veja que estamos trabalhando com uma equação.

imc = peso / (altura^2)

Ou seja, são 3 variáveis.

imc

peso

altura

No seu programa/problema você obtêm duas (peso e altura) e calcula a outra (imc).

Na conta para descobrir o peso ideal parte do mesmo princípio.

Veja, o que falta agora é o "peso". Os imc você já tem (Entre 18,5 e 24,9), e já tem a altura também.

Basta agora ajustar a fórmula para descobrir o peso...

imc = peso / (altura^2) {original}
peso / (altura^2) = imc {só inverti o lado}
[B]peso = imc * (altura^2)[/B] {passa a altura^2 para o outro membro}

Pronto, basta agora você calcular os "2 pesos ideais para a altura passada", ou seja, faz duas contas, um para cada extremo do imc (18,5 e 24,9).

Daí você já terá a faixa de peso que a pessoa deve ter para a altura dela. Agora basta calcular quanto precisa ganhar ou perder..

PS: se possível poste aqui o que você fez.

No aguardo

Abraços

Postado

Olá,

realmente, você foi de grande, na verdade, enorme ajuda :lol:

o programa que era bem simples, triplicou de tamanho hehehe.


program Calculo_do_IMC;
uses crt;
var peso,altura,imc,pesoMIN,pesoMAX,pesoEMAGRECER,pesoENGORDAR : real;
begin
clrscr;
textcolor (15);
writeln ('Programa para calcular o seu IMC');
writeln (' ');
writeln ('Digite o seu peso:');
readln (peso);
writeln ('Digite a sua altura:');
readln (altura);
imc := peso / sqr(altura);
writeln (' ');
textcolor (12);
writeln ('Seu IMC é de: ',imc:0:1);
writeln (' ');
textcolor (15);
writeln ('Veja em qual padrão você se encaixa:');
writeln (' ');
if imc < 18.5 then
textcolor (12);
writeln ('Abaixo de 18,5: Você está abaixo do seu peso ideal.');
textcolor (15);
if (imc>=18.5) and (imc<25.0) then
textcolor (12);
writeln ('Entre 18,5 e 24,9: Você está no seu peso ideal.');
textcolor (15);
if (imc>=25.0) and (imc<30.0) then
textcolor (12);
writeln ('Entre 25,0 e 29,9: Você está acima do seu peso.');
textcolor (15);
if (imc>=30.0) and (imc<35.0) then
textcolor (12);
writeln ('Entre 30,0 e 34,9: Você está em obesidade de grau 1.');
textcolor (15);
if (imc>=35.0) and (imc<40.0) then
textcolor (12);
writeln ('Entre 35,0 e 39,9: Você está em obesidade de grau 2.');
textcolor (15);
if imc>=40.0 then
textcolor (12);
writeln ('Acima de 40,0: Você está em obesidade de grau 3.');
textcolor (15);
pesoMIN := 18.5*sqr(altura);
pesoMAX := 24.9*sqr(altura);
pesoEMAGRECER := peso-pesoMAX;
pesoENGORDAR := pesoMIN-peso;
writeln (' ');
writeln ('Para sua altura, você teria que estar pesando entre ',pesoMIN:0:1,' e ',pesoMAX:0:1,' quilos.');
writeln (' ');
if imc<18.5 then begin
textcolor (12);
writeln ('Você deverá engordar no mínimo ',pesoENGORDAR:0:1,' quilos para chegar no seu peso ideal.');
end;
if imc>=25.0 then begin
textcolor (12);
writeln ('Você deverá emagrecer no mínimo ',pesoEMAGRECER:0:1,' quilos para chegar no seu peso ideal.');
end;
readkey;
end.

Acho que ficou grande demais :lol: mas valeu a experiencia, e como só estou começando em mexer em pascal agora, foi meu primeiro programa descente.:cool:

  • Membro VIP
Postado

Olá,

realmente, você foi de grande, na verdade, enorme ajuda :lol:

o programa que era bem simples, triplicou de tamanho hehehe.


program IMC;
uses crt;
var peso,altura,imc,peso1,peso2,peso3,peso4 : real;
begin
clrscr;
textcolor (15);
writeln ('Programa para calcular o seu IMC');
writeln (' ');
writeln ('Digite o seu peso:');
readln (peso);
writeln ('Digite a sua altura:');
readln (altura);
imc := peso / sqr(altura);
writeln (' ');
textcolor (12);
writeln ('Seu IMC é de: ',imc:0:1);
writeln (' ');
textcolor (15);
writeln ('Veja em qual padrão você se encaixa:');
writeln (' ');
if imc < 18.5 then
textcolor (12);
writeln ('Abaixo de 18,5: Você está abaixo do seu peso ideal.');
textcolor (15);
if (imc>=18.5) and (imc<=24.9) then
textcolor (12);
writeln ('Entre 18,5 e 24,9: Você está no seu peso ideal.');
textcolor (15);
if (imc>=25.0) and (imc<29.9) then
textcolor (12);
writeln ('Entre 25,0 e 29,9: Você está acima do seu peso.');
textcolor (15);
if (imc>=30.0) and (imc<34.9) then
textcolor (12);
writeln ('Entre 30,0 e 34,9: Você está em obesidade de grau 1.');
textcolor (15);
if (imc>=35.0) and (imc<39.9) then
textcolor (12);
writeln ('Entre 35,0 e 39,9: Você está em obesidade de grau 2.');
textcolor (15);
if imc>=40.0 then
textcolor (12);
writeln ('Acima de 40,0: Você está em obesidade de grau 3.');
textcolor (15);
peso1 := 18.5*sqr(altura);
peso2 := 24.9*sqr(altura);
peso3 := peso-peso2;
peso4 := peso1-peso;
writeln (' ');
writeln ('Para sua altura, você teria que estar pesando entre ',peso1:0:1,' e ',peso2:0:1,' quilos.');
writeln (' ');
if imc<18.5 then begin
textcolor (12);
writeln ('Você deverá engordar no mínimo ',peso4:0:1,' quilos para chegar no seu peso ideal.');
textcolor (15);
end;
if imc>=25.0 then begin
textcolor (12);
writeln ('Você deverá emagrecer no mínimo ',peso3:0:1,' quilos para chegar no seu peso ideal.');
textcolor (15);
end;
readkey;
end.

Acho que ficou grande demais :lol: mas valeu a experiencia, e como só estou começando em mexer em pascal agora, foi meu primeiro programa descente.:cool:

Olá,

Legal, só precisa ajustar algumas coisas:

1) Nome duplicado

Na Pascal não pode-se usar o mesmo identificador para duas coisas diferentes. No caso você atribuiu "imc" tanto para o "program" tanto para uma variável...

Acho mais simples trocar o nome do "program", ex.:

[color=#0000ff]program[/color] Calculo_IMC[color=#000000];[/color]

2) Identificadores das variáveis

Em vez de usar:

[color=#0000ff]var[/color] 
peso1[color=#000000],[/color]
peso2[color=#000000],[/color]
peso3[color=#000000],[/color]
peso4 [color=#000000]:[/color][color=#0000ff]real[/color][color=#000000];[/color]

Que tal:

[color=#0000ff]var[/color] 
pesoMim[color=#000000],[/color]
pesoMax[color=#000000],[/color]
pesoEngordar[color=#000000],[/color]
pesoEmagracer [color=#000000]:[/color][color=#0000ff]real[/color][color=#000000];[/color]

Não existe um padrão único para definir esses "nomes", mas o importante é pelo menos deixar que eles fiquem claros, ou seja, só pelo nome dá mais ou menos para identificar para que ela serve.

3) Categorias do IMC

Só uma pergunta... se por exemplo meu IMC bater 24.95, em qual categoria eu vou pertencer???... Veja que existe um brecha.. todos os números maiores que 24.9 e menor que 25, por exemplo, NÃO ESTÃO EM NENHUMA CATEGORIA!!! E agora???? (isso se repete nas outras categorias também...)

Precisa corrigir...

PS: Sabe quantos números reais existem entre 24,5 e 25??? Pois é!!!

PS: Para corrigir é simples, o final de um tem que ter o mesmo valor do início do outro. Ai basta saber em qual deles vai conter o "="... ou seja, um deles vai ser ">=" ou "<=" e o outro ">" ou "<".

***

Precisa ainda verificar a questão de ficar "remarcando" para branco sem necessidade e utilizar "if/else"... mas vou deixar isso pra depois.. (tô atrasado para o carnaval.. .heheheheh)

No aguardo

Abraços

Postado

Olá,

Corrigi tudo o que disse :lol:

Porém if/else não tenho ideia de como usar, na verdade até tenho, mas não sei aonde encaixar no meu programa.

Bem, obrigado ae, ajudou demais.

Feliz carnaval pra ti.:lol:

Arquivado

Este tópico foi arquivado e está fechado para 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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!