Le procedure (pascal)

Le funzione non sono adatte a risolvere tutti i problemi che si possono incontrare nella scrittura di un programma.

Le funzione non sono adatte a risolvere tutti i problemi che si possono incontrare nella scrittura di un programma.
Ad esempio, potrebbe essere necessario ritornare più di un parametro. Per questo il linguaggio Pascal mette a
disposizione un'altra struttura: la procedura.
Per comprendere come funziona una procedura vediamo un semplice esempio.
Nel costruire gli algoritmi può capitare di dover scambiare il contenuto di due variabili. Questo processo richiede
sempre l'uso di una variabile di appoggio, come hai visto nel tutorial precedente :)
Possiamo immaginare di allestire una procedura che realizzi quest'operazione e possa essere utilizzata in un
programma tutte le volte che è necessario.
In Pascal, la procedura che realizza lo scopo va scritta in questo modo:

Procedure Scambia(var A,B : integer);
var appoggio : integer;

Begin
    appoggio:=B;
    B:=A;
    A:=appoggio
End;

nella prima riga, dopo la parola Procedure, viene dichiarato il nome della procedura, seguito dalle variabili
scambiate con il programma principale, poste tra parentesi.
Nel programma principale la procedura:

- deve essere dichiarata subito dopo la dichiarazione delle variabili e prima delle eventuali funzioni;

- in seguito, può essere chiamata (cioè eseguita) in un punto qualunque del programma principale, scrivendo
semplicemente il suo nome e specificando, tra parentes, le variabili che vengono passate

    Scambia(Uno,Due);

Un programma che utilizza la procedura scambio può essere il seguente:

Program ScambiaEricorda;
    var primoNumero, secondoNumero: Integer

Procedure Scambia(var A,B : integer);
var appoggio : integer;

Begin
    appoggio:=B;
    B:=A;
    A:=appoggio;
    Writeln('è stata applicata la procedura Scambia')
End;

Begin
    primoNumero := 5;
    secondoNumero := 3;
    Scambia(primoNumero, secondoNumero);
    Writeln(' La variabile primo Numero ha ora valore ',primo Numero);
    Writeln(' La variabile secondoNumero ha ora valore ',secondoNumero);
End.

A prima vista sembra che la procedura non restituisca alcun valore, infatti non troviamo dopo Scambia( var
A,B : integer ) alcuna indicazione del tipo. La modifica e la restituzione dei valori delle variabili passate alla
procedura viene realizzata premettendo alla dichiarazione delle variabili di scambio, A e B, la parola riservata
var. Le modifiche effettuate in una procedure su variabili dichiarate di tipo var, come A e B, hanno effetto anche
nel programma principale.
Nel programma precedente l'effetto della procedura Scambia è il seguente:
- vengono passati alla procedura le variabili primoNumero, il cui valore, 5, è assegnato ad A e secondoNumero,
  il cui valore, 3, è assegnato a B;
- la procedura viene eseguita e si scambiano i valori di A e B;
- i nuovi valori di A e B vengono assegnati a primoNumero e secondoNumero.

Alla fine, la variabile primoNumero ha valore 3 e la variabile secondoNumero ha valore 5.
Le variabili passate come var sono passate per indirizzo: cioè viene passato alla procedura l'indirizzo della locazione
di memoria in cui è memorizzato il valore della variabile. Eventuali modifiche verranno effettuate in quella locazione
e pertanto permangono anche al termine della procedura.
Le altre variabili vengono invece passate per valore: cioè viene creata una copia del valore della variabile in una
nuova locazione di memoria e le modifiche sono applicate a tale copia. Il valore originario non viene quindi cambiato.

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

Privacy Policy