2004/05 – Fase scolastica – 02

Si consideri il seguente frammento di programma

Type
   sequenza = array[1..100] of integer;
Function verifica(vett: sequenza; n: Integer): Boolean;
Var
   i, j    : integer;
   appoggio: sequenza;
Begin
   j:=1;
   For i:=1 To n Do
      If(j = 0) Then
         Begin
            appoggio[j]:=vett[i];
            j:=j+1;
         End
      Else If(appoggio[j-1] = vett[i]) Then
         j:=j-1
      Else
         Begin
            appoggio[j]:=vett[i];
            j:=j+1;
         End;
   If(j = 1) Then
      verifica:=true
   Else
      verifica:=false;
End;

Si considerino i seguenti tre vettori

  • {5, 8, 1, 1, 2, 4, 4, 8, 8, 2, 3, 9, 7, 7, 9, 3, 8, 2, 2, 5}
  • {6, 7, 9, 9, 5, 4, 3, 3, 4, 5, 7, 6, 2, 2, 2, 2, 4, 5, 4, 5}
  • {3, 3, 3, 2, 2, 3, 1, 5, 5, 1, 3, 5, 7, 6, 6, 7, 5, 3, 1, 1}.

Si supponga di invocare tre volte la funzione verifica passando nell’ordine i tre vettori (assumendo che il secondo parametro sia 20 in tutti e tre i casi).

Quali tre valori saranno restituiti nell’ordine dalle tre invocazioni?

Risposte:

  1. true false true
  2. true true true
  3. true false false
  4. nessuna delle precedenti.