Selezione multipla


imageDecidere quale eseguire tra tante sequenze alternative di istruzioni (per esempio tre)

Dopo aver eseguito istruzione 0 decide quale blocco eseguire in funzione del valore assunto dall'espressione E.

Se E = E1 esegue
istruzione 11
istruzione 12
altrimenti se E = E2 esegue
istruzione 21
istruzione 22
altrimenti esegue
istruzione 31
istruzione 32
e poi continua eseguendo istruzione 4.

imageNon è necessario introdurre un costrutto di controllo a tre uscite perché il diagramma di flusso si può trasformare nel successivo

dove cambia l'interpretazione ma non il comportamento dell'algoritmo.

Dopo aver eseguito istruzione 0 decide se eseguire
istruzione 11
istruzione 12
oppure continua e quindi decide se eseguire
istruzione 21
istruzione 21
oppure
istruzione 31
istruzione 32
e quindi continua eseguendo istruzione 4.
BasicPascalC
If E = E1 Then
    Istr11
    Istr12
Else
    If E = E2 Then
        Istr21
        Istr22
    Else
        Istr31
        Istr32
    End If
End If
If E = E1 Then
    Begin
        Istr11;
        Istr12;
    End
Else
    begin
        If E = E2 Then
            Begin
                Istr21;
                Istr22;
            End
        Else
            Begin
                Istr31;
                Istr32;
            End
    End;
if(E == E1)
{
    istr11;
    istr12;
}
else
{
    if(E == E2)
    {
        istr21;
        istr22;
    }
    else
    {
        istr31;
        istr32;
    }
}


Note
  1. In linguaggio C: ==...
  2. Il valore assunto dell'unica espressione E decide quale blocco verrà eseguito
  3. Un solo blocco sarà eseguito in esclusiva.

Si può semplificare il codice, e rimanere più aderenti al primo diagramma di flusso, cambiando l'indentazione delle istruzioni ed eliminando le etichette di blocco superflue
BasicPascalC
If E = E1 Then
    Istr11
    Istr12
Else If E = E2 Then
    Istr21
    Istr22
Else
    Istr31
    Istr32
End If
If E = E1 Then
    Begin
        Istr11;
        Istr12;
    End
Else If E = E2 Then
    Begin
        Istr21;
        Istr22;
    End
Else
    Begin
        Istr31;
        Istr32;
    End
if(E == E1)
{
    istr11;
    istr12;
}
else if(E == E2)
{
    istr21;
    istr22;
}
else
{
    istr31;
    istr32;
}


Nota
  1. Prima dell'Else finale possono essere inseriti ulteriori blocchi di tipo Else If (con E3, E4, ...).
  2. L'ultimo blocco Else è facoltativo (quindi si può prevedere che nessuna sequenza di istruzioni venga eseguita).
  3. La versione Basic ha una sintassi diversa, ma notevolmente semplificata...



Se le espressioni E, E1, E2, ... sono di tipo semplice si può utilizzare una struttura di controllo che permette un'interpretazione ancora più fedele al primo diagramma di flusso
BasicPascalC
Select Case E
    Case E1:
            Istr11
            Istr12
    Case E2:
            Istr21
            Istr22
    Case Else:
            Istr31
            Istr32
End Select
Case(E)
    E1:
        Begin
            Istr11;
            Istr12;
        End;
    E2:
        Begin
            Istr21;
            Istr22;
        End;
    Else
        Begin
            Istr31;
            Istr32;
        End;
End;
switch(E)
{
    case E1:
            istr11;
            istr12; break;
    case E2:
            istr21;
            istr22; break;
    default:
            istr31;
            istr32; break;
}


Note
  1. la struttura dell'istruzione è abbastanza simile ma...
  2. ci sono notevoli differenze tra i vari linguaggi nei valori ammessi per i casi.

Se più casi richiedono lo stesso trattamento
BasicPascalC
Select Case E
    Case E11 To E1n:
            Istr11
            Istr12
    Case E2, E3:
            Istr21
            Istr22
    Case Else:
            Istr31
            Istr32
End Select
Case(E)
    E11..E1n:
        Begin
            Istr11;
            Istr12;
        End;
    E2,E3:
        Begin
            Istr21;
            Istr22;
        End;
    Else
        Begin
            Istr31;
            Istr32;
        End;
End;
switch(E)
{
    case E11:
    case E12:
    ...
    case E1n:
            istr11;
            istr12; break;
    case E2:
            istr21;
            istr22; break;
    default:
            istr31;
            istr32; break;
}

There are no comments on this page.
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki