Selezione multipla

Decidere quale eseguire tra tante sequenze alternative di istruzioni

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 n1
istruzione n2

e poi continua eseguendo istruzione n+1.

if3n
Non è necessario introdurre un costrutto di controllo a più uscite perché il diagramma di flusso si può trasformare nel successivo (esempio con 3 scelte…) 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.

if32

Top…

If E = E1 Then
   Begin
      Istr11;
      Istr12;
   End
Else
   Begin
      (* ... da sviluppare ... *)
   End;

…down

If E = E1 Then
   Begin
      Istr11;
      Istr12;
   End
Else
   Begin
      If E = E2 Then
         Begin
            Istr21;
            Istr22;
         End
      Else
         Begin
            Istr31;
            Istr32;
         End
   End;

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

If E = E1 Then
   Begin
      Istr11;
      Istr12;
   End
Else If E = E2 Then
   Begin
      Istr21;
      Istr22;
   End
Else
   Begin
      Istrn1;
      Istrn2;
   End;

Istruzioni singole…

If E = E1 Then
   Istr1
Else If E = E2 Then
   Istr2
Else
   Istrn;

Note

  1. Il valore assunto dell’unica espressione E decide quale blocco verrà eseguito
  2. Un solo blocco sarà eseguito in esclusiva
  3. Prima dell’Else finale possono essere inseriti ulteriori blocchi di tipo Else If (con E3, E4, …)
  4. L’ultimo blocco Else è facoltativo (quindi si può prevedere che nessuna sequenza di istruzioni venga eseguita).