2004 – 2

Si consideri il seguente frammento di programma

bool verifica(int vett[], int n)
{
   int i,j=0;
   int appoggio[n];
   for(i=0; i < n; i++)
      if(j == 0)
      {
         appoggio[j]=vett[i];
         j++;
      {
      else if(appoggio[j-1] == vett[i])
         j--;
      else
      {
         appoggio[j]=vett[i];
         j++;
      }
   if(j == 0)
      return true;
   else
      return false;
}

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

Soluzione: a (true-false-true)


L'indice j si sposta avanti e indietro... e punta a un elemento nel vettore di appoggio...