function, procedure em pascal no LAZARUS

Bom estamos vendo na linguagem pascal usando a IDE do LAZARUS PROCEDIMENTOS e FUNCÕES, ou procedure, e funtion, onde dividimos o programa em partes as quais seram chamdas quando necessario
o que melhora para a organização da programação.

este exemplo foi contruido pelo Professor PAULO ROBERTO na material de LTP1 então vou posta-lo:


program TesteFunction;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

//Criando as funções
function areaTriangulo(b: Real; H: Real): Real;
begin
     Result:= (b*H)/2;
end;

function JurosComp(cai: Real; taxa: Real; tempo:Integer): Real;
{vou precisar de utilizar uma variável interna para realizar este
procedimento, esta variável é chamada de variável auxiliar}
var
   i: integer;
begin
     //descobrir taxa elevado a tempo
     for i:= 1 to tempo do
         taxa:= taxa*taxa;

     //agora fazer a multiplicação entre capital inicial e taxa
     Result:= cai*taxa;
end;

procedure Bascara(a:Real; b:Real; c:Real);
//variáveis auxiliares necessárias
var
   delta: Real;
   bas1, bas2: real;

begin
     //são dois cálculos que serão executados
     //primeiro delta
     delta:= b*b-4*a*c;

     //se o delta for diferente de zero vai ter duas respostas
     if delta <> 0 then begin
        //calcular duas vezes o positivo e negativo
        bas1:= (-b+sqrt(delta))/2*a;
        bas2:= (-b-sqrt(delta))/2*a;
        Writeln('Positivo = ',bas1,' Negativo = ',bas2);
     end else Writeln('O valor do delta é igual a zero!');

end;

var
   op: Integer = 0;
   //variáveis para eu poder ler fora das funções;
   par1, par2, par4: Real;
   par3: integer;

{$IFDEF WINDOWS}{$R TesteFunction.rc}{$ENDIF}

begin
     repeat
         //Usando as funções
         WriteLn('Bem vindos ao SuperCalc 1.0 - Escolha sua opção:');
         WriteLn('1 - Calcular a area do Triângulo;');
         WriteLn('2 - Calcular Juros Compostos;');
         WriteLn('3 - Calcular Báscara;');
         WriteLn('4 - Sair do Sistema;');

         //Leitura de Escolha do Menu
         ReadLn(op);

         case op of
              // Calcular o triângulo
//o case esta sendo usado para determinar onde que operação devera ser executada
             1: begin
                WriteLn('Digite a base (b) do triângulo:');

                ReadLn(par1);
                WriteLn('Digite a altura (h) do triângulo:');
                ReadLn(par2);
                Write('A área do triangulo é: ');
//neste trecho é feita a chamada da function e é passada as variáveis para ela como parâmetro
                WriteLn(areaTriangulo(par1,par2):2);
             end;
             //calcular o juros composto
             2: begin
                WriteLn('Digite o capital inicial (cai):');
                ReadLn(par1);
                WriteLn('Digite a Taxa de Juros (taxa):');
                ReadLn(par2);
                WriteLn('Digite o Tempo (tempo):');
                ReadLn(par3);
                Write('O juros composto calculado é: ');
                WriteLn(JurosComp(par1,par2,par3));
             end;
             //calcular báscara
             3:begin
                WriteLn('Digite A:');
                ReadLn(par1);
                WriteLn('Digite B:');
                ReadLn(par2);
                WriteLn('Digite C:');
                ReadLn(par4);
                Write('O resultado de báscara é: ');
                //para chamar uma procedure pode ser sem usar um write
                Bascara(par1, par2, par4);
             end;
             4: WriteLn('Obrigado por usar o sistema!');
         else
             WriteLn('Escolha incorreta tente novamente!');
         end;
     until op = 4;
end.

Comentários

Formulário de contato

Nome

E-mail *

Mensagem *