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

Controllo: selezioni

Precedente
SUPERIORE
Successiva

Selezione singola

Decidere se eseguire o meno una sequenza di istruzioni

if(A > 0)
{
   istr1;
   istr2;
   ...
}

Decide se eseguire le istruzioni istr1 e istr2.

Se si controlla l'esecuzione di una singola istruzione

if(A > 0)
   istr1;

Selezione doppia

Decidere quale eseguire tra due diverse sequenze di istruzioni

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

Decide se eseguire le istruzioni istr11 e istr12 oppure le istruzioni istr21 e istr22.

Se viene controllata l'esecuzione di singole istruzioni

if(A > 0)
   istr11;
else          // if(A <= 0)
   istr21;

Selezione multipla

Decidere quale sequenza di istruzioni eseguire tra tante sequenze alternative

if(E == E1)
{
   istr11;
   istr12;
   ...
}
else if(E == E2)
{
   istr21;
   istr22;
   ...
}

...

else
{
   istrn1;
   istrn2;
   ...
}

Decide se eseguire le istruzioni istr11 e istr12 (se E = E1), oppure le istruzioni istr21 e istr22 (se E = E2), oppure ... oppure istrn1 e istrn2 (altrimenti).

Tra l'ultimo blocco else if() e l'else finale possono essere inseriti ulteriori blocchi di tipo else if(). L'ultimo blocco else è facoltativo (quindi si può prevedere che nessun blocco sarà eseguito).

Se le espressioni E, E1, E2, ... sono costanti numeriche si può tradurre il tutto in una forma più immediata

switch(E)
{
   case E1: istr11;
            istr12;
            ...
            break;
   case E2: istr21;
            istr22;
            ...
            break;

   ...

   default: istrn1;
            istrn2;
            ...
            break;
}

Il blocco default è facoltativo.

Se in un blocco case manca l'istruzione break l'esecuzione continua con il blocco successivo.

Selezioni annidate

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

if(A > 0)
{
   if(B > 0)
   {
      istr11;
      istr12;
      ...
   }
   else
   {
      istr21;
      istr22;
      ...
   }
}
else
{
   istr31;
   istr32;
   ...
}
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, è necessario aggiungere le parentesi graffe

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

Controllo: selezioni - ApPuNtIdIuNiNfOrMaTiCo

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

Precedente
SUPERIORE
Successiva