Le Funzioni (Pascal)

Come abbiamo visto nel mio precedente tutorial, la costruzione di un programma per quanto semplice richiede molte istruzioni. Nasce, quindi, l'esigenza di scomporre i problemi in sottoproblemi al fine di garantire un pił facile controllo della correttezza delle singole parti.

Come abbiamo visto nel mio precedente tutorial, la costruzione di un programma per quanto semplice richiede molte istruzioni. Nasce, quindi, l'esigenza di scomporre i problemi in sottoproblemi al fine di garantire un più facile controllo della correttezza delle singole parti. Questi sottoproblemi vengono tradotti in sottoprogramma, che sono
detti, in Pascal, funzioni e procedure, oggi parleremo soltanto delle funzioni.. Esse possono essere utilizzate
più volte nel programma principale.

Per introdurre il concetto di funzione in Pascal supponiamo di dover calcolare a[n] + b[m] ( con a, b, n ed m
numeri naturali non nulli ). Poichè gia conosciamo il programma per calcolare la potenza, scriviamo il seguente
listato che permette di risolvere il problema ( le righe tra parentesi graffe sono commentati al programma che
che vengono saltate dal compilatore e servono invece al programmatore per chiarire il significato del codice ):

Program SommaPotenze;
Var a,b,n,m ; integer;
Var p,i : integer

Begin
    writeln('Inserisci la prima base:');
    readln(a);
    writeln('Inserisci la seconda base:');
    readln(b);
    writeln('Inserisci il primo esponente:');
    readln(b);
    writeln('Inserisci il secondo esponente:');
    readln(b);
{ nelle istruzioni seguenti si calcola a^n e si inserisce il risultato in an }

    p:= 1;
    For i:= 1 to n Do
        p := p * a;
    an :=p;
{ segue il listato relativo all'elevamento a potenza; si calcola b^m e si inserisce il risultato in bm }

    p := 1;
    For i:= 1 to m Do
        p := p * b;
    bm := p;
    writeln(an+bm)
End.

La ripetizione del listato dell'elevamento a potenza può essere superata costruendo una funzione il cui scopo
sarà quello di svolgere l'operazione richiesta:

Function Eleva(base, esponente : integer) : integer;
    Var potenza,i : integer;
Begin
    potenza := 1;
    For i:= 1 to esponente Do
        potenza := potenza * base;
    Eleva := potenza
End.

Questa parte di programma, cioè la dichiarazione della funzione, va inserita prima del Begin del programma
principale, il quale potrà richiamare la funzione ( cioè far eseguire il calcolo ), inserendo l'assegnazione:

...
an := Eleva(a,n);
...

L'istruzione precedente opera nel modo seguente:

- i valori di a e di n vengono "passati" alla funzione Eleva: cioè diventano i valori delle variabili corrispondenti
  nella dichiarazione della funzione, cioè base ed esponente, che sono dette variabili di scambio;

- si esegue la sequenza di istruzioni comprese nel blocco Begin ... End della funzione  ( nelle quali si calcola
  il valore di a[n] e lo si memorizza nella variabile potenza, interna alla funzione );

- l'ultima istruzione del blocco
    
    Eleva := potenza

assegna a Eleva il valore che la funzione "ritorna" al programma principale;
- riprende l'esecuzione del programma principale con l'assegnazione del valore ritornato dalla funzione an.

Guarda nella riga iniziale della dichiarazione della funzione:

    Function Eleva(base, esponente : integer) : integer;

abbiamo specificato, dopo il nome della funzione:
- la lista delle variabili di scambio e il loro tipo, poste tra parentesi;
- il tipo di dato associato alla funzione (integer).

Dal momento che ogni funzione restituisce un dato, è sempre necessario specificare di quale tipo sia.
Osserva, inoltre, che la funzione Eleva si comporta proprio come le funzioni studiate in matematica o per lo
meno che avreste dovuto studiare =)

- Per suggerimenti o delucidazioni <[email protected]> ciao! ;)

Privacy Policy