Cosa stampa il seguente programma?
Program Test(Input, Output); Var a,b,c: Integer; Function prova(x: Integer; Var y:Integer): Integer; Begin x:=x+y; y:=x+2; prova:=x End; Begin a:=11; b:=1; c:=prova(a, b); WriteLn('a =', a, '; b =', b, '; c = ', c, ';'); End.
Risposte:
- a=11; b=1; c=12;
- a=11; b=1; c=14;
- a=12; b=14; c=14;
- a=11; b=14; c=12;
Risposta: d)
Soluzione
Tratta da: Materiale didattico 2008
La variabile a viene passata alla funzione prova per valore e la variabile b per indirizzo.
Ci troviamo quindi la seguente situazione:
- prima della chiamata di prova:
- a=11
- b=1
- all’ingresso nella funzione prova:
- x = 11
- y (cioè b) = 1
- dopo l’esecuzione del corpo di prova:
- x = 12
- y (cioè b) = x+2 = 14
- all’uscita da prova (che restituisce il valore di x, cioè 12) avremo:
- a = 11 (non modificato)
- b = 14
- c = 12.