2008/09 – Fase scolastica – 08

Si consideri la seguente funzione:

Function foo(x: Integer): Integer;
Var
   y: Integer;
Begin
   y:=0;
   While(x <> 0) Do
      Begin
         y:=y*10;
         y:=y+x Mod 10;
         x:=x Div 10;
      End;
   foo:=y;
End;

Dire cosa restituisce la chiamata foo(4312).


Soluzione: 2134.


Soluzione

Al termine della prima iterazione del ciclo, il valore di y è pari a 2, ovvero la cifra meno significativa di x (resto della divisione di x per 10); inoltre il valore di x viene diviso per 10: essendo x una variabile intera, il suo valore al termine della prima iterazione è 431.

La seconda iterazione del ciclo moltiplica y per 10 e quindi somma 1, il valore della cifra meno significativa di x (che ora vale 431).
Pertanto, al termine della seconda iterazione del ciclo, il valore di y è pari a 21.

Procedendo in modo analogo possiamo verificare che al termine della terza e quarta iterazione del ciclo il valore di y è 213 e 2134 rispettivamente.