
Captulo 21 - function

  A function  uma rotina que nos retorna um determinado valor. A definio
de uma function  bastante parecida com a definio de uma procedure. Sua 
sintaxe:
FUNCTION identificador[(parmetros : tipo)] : tipo; [EXTERNAL;]
                                                    [FORWARD;]    
                                                    [TYPE]
                                                    [VAR]
                                                    [CONST]
BEGIN
  [comandos;]
END;
  Assim como uma procedure, a function deve ser declarada antes de sua cha-
mada. Uma function reotrna apenas um resultado de acordo com o seu tipo.
Vejamos agora, agluns exemplos de funes:
PROGRAM teste_function1;
USES CRT;
FUNCTION s_n : CHAR; 
VAR
  ch : CHAR;
BEGIN  
  REPEAT 
    ch := UPCASE (READKEY);
  UNTIL ch IN[S,N];
  s_n : ch;
END;
BEGIN
  REPEAT
    CLRSCR;
    GOTOXY (10,10);
    WRITE (voc do sexo masculino? S/N ??);
    GOTOXY (10,12);
    IF s_n = S
    THEN
      WRITE (voc do sexo masculin)
    ELSE
      WRITE (voc do sexo feminin);
    GOTOXY (10,25);
    WRITE (deseja repetir ??? S/N ???);
  UNTIL s_n = N;
END.  
  Neste exemplo, a funo nos retorna apenas os caracteres "S" ou "N", 
e pode ser utilizada em diversos contextos diferentes.
  Vejamos um novo exemplo que use a passagem de parmetros:
PROGRAM teste_function2;
VAR
  x ; STRING;
FUNCTION maiscula (s : STRING) : STRING;  
VAR
  ind : BYTE;
BEGIN  
  FOR ind := 1 TO ORD (s[0]) DO
    s [ind] := UPCASE (s[ind]);
    maiscula := s;
END;
BEGIN
  WRITE (entre com uma frase :);
  READLN (x);
  x := maiscula(x);
  WRITELN (a frase em maiscula ,x);
END.  
  A varivel passada como parmetro "x"  a mesma que recebe o valor da 
funo: 
  Uma funo pode ter mais de um parmetro:
PROGRAM teste_function3;
VAR
  n1, n2, : LONGINT;
FUNCTION compara (a, b : LONGINT) : BOOLEAN;
BEGIN  
  compara := a = b;
END;
BEGIN
  WRITE (digite o primeiro nmero :);
  READLN (n1);
  WRITE (digite o segundo nmero :);
  READLN (n2);
  IF compara (n1, n2)
    THEN
      WRITELN (os numeros so iguais);
    ELSE
      WRITELN (os nmeros so diferentes);
  READLN;
END.
  Cabe salientar que o tipo da funo  independente do tipo dos parmetros
passados. No exemplo anterior, as variveis passadas como parmetro, so 
do tipo LONGINT e a funo em si  do tipo BOOLEAN, e retorna somente os 
valores TRUE ou FALSE. 
