Definição
As funções são muito parecidas
com as procedures. A principal diferença é que o identificador de uma função
assume o valor de retorno da função. Uma função deve sempre retornar um valor e em Turbo Pascal, este
valor é retornado no nome da função.
Declaração de funções
A declaração de uma função é
muito parecida com de uma procedure que por sua vez é parecida com a de um
programa, senão vejamos:
Function
Nome_da_função(parâmetros) : Tipo_da_função;
< área de declarações >
Begin
corpo da função
End;
A formação do nome da função deve
seguir as mesmas regras para formação de identificadores em Turbo Pascal. Dentro
dos parênteses devemos declarar os parâmetros e seus respectivos tipos dos
quais a função depende. O tipo de valor retornado pela função também deve ser
declarado.
Na área de declarações, podemos declarar labels,
constantes, variáveis e até mesmo Procedures e Functions. Devemos lembrar que
tais elementos só poderão ser utilizados dentro do corpo da função, pois são
locais a ela. Abaixo, temos o exemplo de uma função.
Program Exemplo;
Uses CRT;
Var x,y : Real; (* variáveis globais *)
Function Soma(a,b:real):real; (*
Soma é uma função que depende de dois parâmetros reais e devolve um valor real
*)
Begin
Soma:=a+b; (* reparem que o valor da funçåo é retornado p. seu nome *)
End;
Begin
ClrScr;
x:=Soma(4,5);
y:=Soma(3,6)-Soma(45.5,5.6);
Writeln(x:10:2,y:10:2);
Writeln;
Write('Valor de x --> ');
Readln(x);
Write('Valor de y --> ');
Readln(y);
Writeln;
Writeln(Soma(x,y):10:2);
End.
Devemos lembrar que o Turbo Pascal possui inúmeras
funções de procedures pré-definidas, que iremos ver no decorrer do curso.
Exemplos:
Program Fat;
Uses CRT;
{Programa para calcular o fatorial de um número lido do teclado, usando
o conceito de Function}
Label inicio,fim;
Var n : Integer;
tecla : char;
Function Fatorial(numero:integer) : Real;
Var i
: Integer;
Fat : Real;
Begin (* da função Fatorial *)
Fat:=1;
If numero>1
Then Begin
i:=1;
Repeat
i:=i+1;
Fat:=Fat*i;
Until i=numero;
End;
Fatorial:=Fat;
End; (* da função fatorial *)
Begin
(* do programa *)
ClrScr;
inicio:
Write('Valor de n (menor que 0 =
fim) --> ');
Readln(n);
Writeln;
If n<0
Then Begin
Write('Não existe
fatorial de numeros negativos');
Goto fim;
End
Else Writeln('Fatorial de n =
',fatorial(n):10:0);
Writeln;
Goto inicio;
Fim:
End. (* do programa *)
Program Fibonacci;
Uses CRT;
{Programa para determinar um determinado elemento da seqüência de Fibonacci.
A seqüência de Fibonacci é definida como
Fib(0) = 0
Fib(1) = 1
Fib(n) =
Fib(n-1) + Fib(n-2)}
{Como podemos ver, o elemento atual é determinado pela soma dos dois
elementos anteriores}
Label inicio;
Var numero:integer;
tecla : char;
Function Fib(n:integer):integer;
Var
a1,a2,i,pe : Integer;
Begin
if n=0
Then Fib:=0
Else If n=1
Then Fib:=1
Else Begin
a1:=0;
a2:=1;
i:=1;
Repeat
pe:=a1+a2;
i:=i+1;
a1:=a2;
a2:=pe;
Until i=n;
Fib:=a2;
End;
End;
Begin
ClrScr;
inicio:
Write('Fib(');
Read(numero);
Writeln(') = ',fib(numero));
Writeln;
Write('Deseja continuar ? --> ');
Readln(tecla);
writeln;
writeln;
If tecla='s' Then goto inicio;
End.
Recursividade
A linguagem Pascal e o Turbo
Pascal permitem a utilização de funções recursivas. Uma função é dita recursiva
quando ela chama a si mesma. Devemos tomar cuidado ao lidar com esse tipo de
função, pois podemos criar loops infinitos. Existem pessoas que têm facilidade
para pensar recursivamente e outras não. A recursividade
permite criar funções elegantes e torna os programas mais fáceis de serem
entendidos. Abaixo, temos os mesmos programas anteriores, só que utilizando o
conceito de recursividade.
Program Fatorial;
Uses CRT;
Label inicio,fim;
Var n : Integer;
tecla : char;
Function Fat(n:integer):real;
Begin
if n=0
Then Fat:=1
Else Fat:=n*Fat(n-1); (*
repare que estamos chamando novamente a funçåo Fat *)
End;
Begin
ClrScr;
inicio:
Write('Valor de n (menor que 0 =
fim) --> ');
Readln(n);
Writeln;
If n<0
Then Begin
Write('Não existe
fatorial de números negativos');
Goto fim;
End
Else Writeln('Fatorial de n = ',fat(n):10:0);
Writeln;
Goto inicio;
Fim:
End.
Program Fibonacci;
Uses CRT;
Label inicio;
Var numero:integer;
tecla : char;
Function Fib(n:integer):integer;
Begin
If n=0
Then Fib:=0
Else If n=1
Then Fib:=1
Else Fib:=Fib(n-1)+fib(n-2);
End;
Begin
ClrScr;
inicio:
Write('Fib(');
Read(numero);
Writeln(') = ',fib(numero));
Writeln;
Write('Deseja continuar ? --> ');
Readln(tecla);
writeln;
writeln;
If tecla='s' Then goto inicio;
End.
Nenhum comentário:
Postar um comentário