2002/03 – Fase scolastica – 01

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:

  1. a=11; b=1; c=12;
  2. a=11; b=1; c=14;
  3. a=12; b=14; c=14;
  4. 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.