Home • ECDL • Algoritmi • Java • Basi di dati • Seconda prova • Eccetera • Cerca nel sito

Selezioni annidate

Precedente
SUPERIORE
Successiva

Le condizioni perché un blocco sia eseguito a scapito di un altro possono essere complicate

if(A > 0)
{
   if(B > 0)   // if(A > 0 && B > 0)
   {
      istr11;
      istr12;
      ...
   }
   else        // if(A > 0 && B <= 0)
   {
      istr21;
      istr22;
      ...
   }
}
else           // if(A <= 0)
{
   istr31;
   istr32;
   ...
}

Un errore frequente che si commette annidando le selezioni è quello dell'else ciondolante

if(A > 0)
   if(B > 0)   // if(A > 0 && B > 0)
   {
      istr11;
      istr12;
      ...
   }
else           // if(A <= 0) ???
{
   istr21;
   istr22;
   ...
}

Il compilatore associa l'else al secondo if piuttosto che al primo!

if(A > 0)
   if(B > 0)   // if(A > 0 && B > 0)
   {
      istr11;
      istr12;
      ...
   }
   else        // if(A > 0 && B <= 0)
   {
      istr21;
      istr22;
      ...
   }

Quindi cambiare l'indentazione non basta per cambiare la valutazione da parte del compilatore. Se la valutazione voluta è la prima allora è necessario aggiungere le parentesi graffe

if(A > 0)
{
   if(B > 0)   // if(A > 0 && B > 0)
   {
      istr11;
      istr12;
      ...
   }
}
else           // if(A <= 0)
{
   istr21;
   istr22;
   ...
}

In Basic il problema non sussiste perché le etichette END IF specificano, se usate correttamente, la chiusura o meno dell'IF.

IF (A > 0) THEN
   IF (B > 0) THEN
      istr11
      istr12
      ...
   END IF
ELSE
   istr21
   istr22
   ...
END IF

è diverso da

IF (A > 0) THEN
   IF(B > 0) THEN
      istr11;
      istr12;
      ...
   ELSE
      istr21;
      istr22;
      ...
   END IF
END IF

Selezioni annidate - ApPuNtIdIuNiNfOrMaTiCo

Home • ECDL • Algoritmi • Java • Basi di dati • Seconda prova • Eccetera • Cerca nel sito

Precedente
SUPERIORE
Successiva