Pretendo demonstrar neste artigo uma aplicação Delphi para calcular o Índice de Massa Corporal (IMC) que é uma medida utilizada pela Organização Mundial de Saúde para avaliar o grau de obesidade de um indivíduo.
O IMC é calculado pela relação entre o peso (em Kg) dividido pelo quadrado da altura (em metros) do indivíduo, como mostra a fórmula abaixo:

Uma vez calculado o IMC ele poderá ser classificado segundo tabela fornecida pelo Sistema de Vigilância Alimentar e Nutricional (SISVAN). Levando em consideração indivíduos adultos, tem-se as seguintes classificações:
1) Valores de IMC abaixo de 18,5: adulto com baixo peso.
2) Valores de IMC maior ou igual a 18,5 e menor que 25,0: adulto com peso adequado (eutrófico).
3) Valores de IMC maior ou igual a 25,0 e menor que 30,0: adulto com sobrepeso.
4) Valores de IMC maior ou igual a 30,0: adulto com obesidade.
Fonte: http://tabnet.datasus.gov.br/cgi-win/SISVAN/CNV/notas_sisvan.html
[1º Passo] Formulário Principal
Criar uma nova aplicação no ambiente de desenvolvimento e implementar o formulário principal como sugere a figura abaixo:

Relação dos componentes do formulário principal com a ordem sequencial, o nome do componente, a página da sua localização e as propriedades que devem ser alteradas com os seus respectivos valores. | |||||
1. GroupBox pág. Standard | 2. Label pág. Standard | 3. Edit pág. Standard | |||
Caption | Dados de Entrada: | Name | Peso (Kg): | Name | Edit1 |
Left | 10 | Left | 10 | Left | 10 |
Top | 10 | Top | 25 | Top | 39 |
Height | 75 | Text | apagar | ||
Width | 520 | ||||
4. Label pág. Standard | 5. Edit pág. Standard | 6. Button pág. Standard | |||
Name | Altura (m): | Name | Edit2 | Name | Button1 |
Left | 145 | Left | 145 | Caption | &Calcular IMC |
Top | 25 | Top | 39 | Left | 285 |
Text | apagar | Top | 37 | ||
7. BitBtn pág. Additional | 8. GroupBox pág. Standard | 9. Label pág. Standard | |||
Kind | bkClose | Caption | Resultados: | Caption | IMC: |
Caption | &Fechar | Left | 10 | Left | 10 |
Left | 435 | Top | 10 | Top | 25 |
Top | 37 | Height | 280 | ||
Width | 520 | ||||
10. Edit pág. Standard | |||||
Caption | 10 | ||||
Top | 39 | ||||
Text | apagar | ||||
Color | clSkyBlue | ||||
ReadOnly | True | ||||
11. Panel pág. Standard | |||||
Caption | Valores de IMC abaixo de 18,5: adulto com baixo peso. | ||||
Left | 10 | ||||
Top | 75 | ||||
Width | 500 | ||||
Tag | 1 | ||||
12. Panel pág. Standard | |||||
Caption | Valores de IMC maior ou igual a 18,5 e menor que 25,0: adulto com peso adequado (eutrófico). | ||||
Left | 10 | ||||
Top | 125 | ||||
Width | 500 | ||||
Tag | 2 | ||||
13. Panel pág. Standard | |||||
Caption | Valores de IMC maior ou igual a 25,0 e menor que 30,0: adulto com sobrepeso. | ||||
Left | 10 | ||||
Top | 175 | ||||
Width | 500 | ||||
Tag | 3 | ||||
14. Panel pág. Standard | |||||
Caption | Valores de IMC maior ou igual a 30,0: adulto com obesidade. | ||||
Left | 10 | ||||
Top | 225 | ||||
Width | 500 | ||||
Tag | 4 |
[2º Passo] implementation
a) Função que retorna o valor do IMC. Parâmetros: "peso" = peso corporal em Kg; e, "altura" = altura do indivíduo em metros.
function IMC(peso, alt: real): real;
begin
IMC := peso / (alt * alt);
end;
b) Função que retorna a faixa do IMC. Parâmetro: "vlrIMC" = valor do IMC calculado. Os valores de faixa (1, 2, 3 e 4) servem para identificar o respectivo componente TPanel que foi indexado através da propriedade Tag com estes valores.
function faixaIMC(vlrIMC: real): integer;
begin
if (vlrIMC < 18.5)
then faixaIMC := 1
else if ((vlrIMC >= 18.5) and (vlrIMC < 25.0))
then faixaIMC := 2
else if ((vlrIMC >= 25.0) and (vlrIMC < 30.0))
then faixaIMC := 3
// Valores de IMC maior ou igual a 30,0
else faixaIMC := 4;
end;
c) Procedimento para colorir o componente TPanel que corresponde a faixa do IMC calculado. Parâmetros: "indice" = faixa do IMC; e, "fr" = formulário da aplicação. Neste procedimento serão percorridos todos os componentes do formulário verificando quais são componentes TPanel. Se o i-ésimo componente é um TPanel (operador is), como um TPanel (operador as) será verificado ainda se o valor da propriedade Tag é igual a faixa do IMC (parâmetro indice). Se as condições verificadas forem verdadeiras o respectivo componente TPanel será colorido com a cor clskyBlue.
procedure corResultado(indice: integer; fr: TForm);
var i, fim: integer;
begin
fim := (fr.ComponentCount - 1);
for i:=0 to fim do // percorre o vetor de componentes do formulário
begin
// verifica se o i-esimo componente do formulário é um TPanel
if (fr.Components[i] is TPanel)
then // como um TPanel verifica se o valor
// da propriedade Tag é igual a faixa do IMC
if ((fr.Components[i] as TPanel).Tag = indice)
then begin
(fr.Components[i] as TPanel).Color := clSkyBlue;
(fr.Components[i] as TPanel).Font.Color := clBlue;
end
else begin
(fr.Components[i] as TPanel).Color := clBtnFace;
(fr.Components[i] as TPanel).Font.Color := clBlack;
end;
end;
end;
d) Evento "onClick" do botão "Calcular IMC".
procedure TForm1.Button1Click(Sender: TObject);
var peso, alt, vlrIMC: real;
indice: integer;
begin
try
peso := StrToFloat(Edit1.Text);
alt := StrToFloat(Edit2.Text);
vlrIMC := IMC(peso, alt);
indice := faixaIMC(vlrIMC);
Edit3.Text := FloatToStr(vlrIMC);
corResultado(indice, Form1);
except
end;
end;
Informar o peso (em Kg), a altura (em metros) e pressionar o botão "Calcular IMC" e o seguinte resultado poderá ser exibido:

Obrigado e um abraço.
Prof. Omero Francisco Bertol (//www.devmedia.com.br/omero)
Download da Aplicação (http://www.pb.utfpr.edu.br/omero/Delphi/Artigos/IMCDelphi.rar)