Esempi di funzioni

Le funzioni restituiscono un valore a chi ha fatto la chiamata
sub5Quadrato di un numero

function QUADRATO(X: Real): Real;
begin
    QUADRATO:=X*X;
end;

Adesso, per calcolare lo spostamento in un moto uniformemente accelerato, possiamo scrivere

s:=1/2*a*t*t;

oppure

s:=1/2*a*Sqr(t);

oppure

s:=1/2*a*QUADRATO(t);

Realizzare una funzione che restituisce la misura dell’ipotenusa, date quelle dei cateti, di un triangolo rettangolo

function IPOTENUSA(X, Y: Real): Real;
begin
    IPOTENUSA:=Sqrt(Sqr(X)+Sqr(Y));
end;

Il perimetro di un triangolo rettangolo, dati i cateti, diventa

p:=c1+c2+IPOTENUSA(c1, c2);

Analogamente, realizzando la funzione CATETO(),

p:=ipo+c1+CATETO(ipo, c1);

Dati 2 valori reali, calcolare la media

function MEDIA2(X, Y: Real): Real;
begin
    Media2:=(X+Y)/2;
end;

Dati 3 valori reali…

function MEDIA3(X, Y, Z: Real): Real;
...

Valore assoluto

function VALORE_ASSOLUTO(X: Real): Real;
begin
    if(X < 0) then
        X:=-X;
    VALORE_ASSOLUTO:=X;
end;

La radice quarta è la radice quadrata della radice quadrata…

Function RADICE_QUARTA(X: Real): Real;
Begin
   RADICE_QUARTA:=Sqrt(Sqrt(X));
End;

Realizzare una funzione che restituisce un intero casuale con una sola cifra

Function CIFRA_CASUALE: Integer;
Begin
    Randomize;
    CIFRA_CASUALE:=Random(10);
End;

Possiamo definire funzioni senza argomenti (operazioni senza operandi…).

Lanciare un dado

Function LANCIO_DADO: Integer;
begin
    Randomize;
    LANCIO_DADO:=Random(6)+1;
end;

Lanciare due dadi

Function LANCIO2DADI: Integer;
begin
    LANCIO2DADI:=LANCIO_DADO+LANCIO_DADO;
end;

Realizzare una funzione che restituisce una lettera alfabetica maiuscola casuale

function MAIUSCOLA_CASUALE: Char;
Var
    DISTANZA: Integer;
begin
    Randomize;
    DISTANZA:=Random(26);
    MAIUSCOLA_CASUALE:=Char(Ord(‘A’)+DISTANZA);
end;

Maiuscola o minuscola

Function LETTERA_CASUALE: Char;
Var
   DISTANZA: Integer;
Begin
   Randomize;
   DISTANZA:=Random(26);
   Case Random(2) Of
      0: LETTERA_CASUALE:=Char(Ord(‘A’)+DISTANZA);
      1: LETTERA_CASUALE:=Char(Ord(‘a’)+DISTANZA);
   End;
End;

Se utilizziamo delle funzioni analoghe per le coordinate sullo schermo, per sporcare lo schermo con lettere casuali possiamo scrivere

GotoXY(COLONNA_CASUALE, RIGA_CASUALE);
Write(LETTERA_CASUALE);

Realizzare una funzione che restituisce il massimo tra 2 real

Function MAX2(X, Y: Real): Real;
...

… 3 real

Function MAX3(X, Y, Z: Real): Real;
...

… 4 real

Function MAX4(X1, X2, X3, X4: Real): Real;
...

Tangente

function TANGENTE(X: Real): Real;
Var
    C: Real;
begin
    TANGENTE:=sin(X)/cos(X);
end;

Se il coseno è nullo si avra una divisione per zero!

function TANGENTE(X: Real): Real;
Var
    C: Real;
begin
    C:=cos(X);
    if(C = 0) then
        Halt(1);
    TANGENTE:=sin(X)/C;
end;

Compare la trappola

if(C = 0) then
   Halt(1);

per l’operazione di divisione per zero.

Decidere se un ANNO è bisestile

Function BISESTILE(ANNO: Integer): Boolean;
Begin
    BISESTILE:=(ANNO Mod 4 = 0) And (ANNO Mod 100 <> 0) Or (ANNO Mod 400 = 0);
End;

Quando una funzione è di tipo logico si può utilizzare l’espressione risolutiva direttamente nell’assegnazione della risposta…