Caros Amigos,

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;
[3º Passo] Executando a Aplicação
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)