2005/06 – Fase scolastica – 05

Cosa stampa il seguente programma?

Program Test(Input, Output);
Type
   vett = Array[0..9] Of Integer;
Var
   i, f, a, b: Integer;
   arr       : vett;
 
Function funzione1(arr: vett): Integer;
Var
   i: Integer;
Begin
   i:=1;
   While(arr[i] <> -1) Do
      i:=i*2;
   funzione1:=i;
End;
 
Function funzione2(arr: vett; f: Integer; k: Integer): Integer;
Var
   i, m, temp: Integer;
Begin
   i:=0;
   m:=0;
   temp:=-1;
   While(i <= f) Do
      Begin
         m:=(i+f) Div 2;
         If(arr[m] = k) Then
            temp:=m;
         If((arr[m] = -1) Or (arr[m] > k)) Then
            f:=m-1
         Else
            i:=m+1;
      End;
   funzione2:= temp;
End;
    
Begin
   For i:=0 To 9 Do
      arr[i] := -1;
   arr[0]:=1;
   arr[1]:=2;
   arr[2]:=4;
   arr[3]:=8;
   f:=funzione1(arr);
   a:=funzione2(arr, f, 4);
   b:=funzione2(arr, f, 7);
   Writeln("a=", a, ",b=", b);
End.

Risposte:

  1. a=2, b=4
  2. a=2, b=-1
  3. a=-1, b=4
  4. a=-1, b=-1.