Clausola ELSE e ELSE IF in Fortran

Le clausole ELSE ed ELSE IF in Fortran permettono di gestire più condizioni in un'istruzione IF, eseguendo blocchi di codice diversi in base al valore di espressioni logiche.

Questo approccio consente di controllare il flusso del programma in modo strutturato ed efficiente, evitando annidamenti complessi di IF.

In questa lezione analizziamo la sintassi di ELSE ed ELSE IF, le regole di utilizzo e un esempio pratico applicato alla classificazione delle radici di un'equazione quadratica.

Le Clausole ELSE ed ELSE IF

All'interno di un blocco IF, un blocco di codice viene eseguito solo se l'espressione logica di controllo è vera.

Se l'espressione logica è falsa, tutte le istruzioni nel blocco vengono saltate.

Tuttavia, in molti casi, potremmo voler eseguire diverse istruzioni a seconda di condizioni differenti.

Per gestire più condizioni, possiamo usare le clausole ELSE e ELSE IF, che estendono l'istruzione IF.

La sintassi di un blocco IF che contiene anche le clausole ELSE ed ELSE IF è la seguente:

IF (espressione_logica_1) THEN
    ! Blocco 1
    Istruzione 1.1
    Istruzione 1.2
    ...
ELSE IF (espressione_logica_2) THEN
    ! Blocco 2
    Istruzione 2.1
    Istruzione 2.2
    ...
ELSE
    ! Blocco 3
    Istruzione 3.1
    Istruzione 3.2
    ...
END IF

Quando si utilizzano ELSE ed ELSE IF, il programma esegue le seguenti operazioni:

  • Se espressione_logica_1 è vera, viene eseguito Blocco 1 e il resto viene saltato.
  • Se espressione_logica_1 è falsa, il programma controlla espressione_logica_2.
  • A questo punto, se espressione_logica_2 è vera, viene eseguito Blocco 2 e il resto viene saltato.
  • Se nessuna delle espressioni logiche è vera, viene eseguito Blocco 3 (clausola ELSE).

Il diagramma di flusso per questa costruzione è mostrato nella figura che segue:

Diagramma di flusso del blocco IF-ELSE IF-ELSE
Figura 1: Diagramma di flusso del blocco IF-ELSE IF-ELSE

Nel realizzare un blocco IF che contiene anche le clausole ELSE ed ELSE IF devono essere rispettate alcune regole fondamentali:

  • ELSE ed ELSE IF devono essere scritte su righe separate.
  • Non devono avere un numero di istruzione sulla stessa riga.
  • Può esserci un numero qualsiasi di clausole ELSE IF, ma solo un'istruzione ELSE alla fine.
  • Una volta trovata un'espressione vera, il codice associato viene eseguito e il programma salta le condizioni successive.

Esempio: Verifica del Discriminante di un'Equazione Quadratica

Riprendiamo il calcolo del discriminante \Delta = b^2 - 4ac di un'equazione quadratica visto già nella lezione precedente.

Vogliamo determinare se l'equazione ha radici complesse, reali distinte o reali uguali.

Una possibile implementazione in Fortran utilizzando le clausole ELSE ed ELSE IF è la seguente:

PROGRAM ControllaRadici2

    REAL :: a, b, c, discriminante

    ! Inserimento dei coefficienti dell'equazione
    WRITE (*,*) 'Inserisci i coefficienti dell''equazione quadratica:'
    READ (*,*) a, b, c

    ! Calcolo del discriminante
    discriminante = b**2 - 4. * a * c

    ! Verifica del discriminante
    IF (discriminante > 0.) THEN
        WRITE (*,*) 'L''equazione ha due radici reali distinte.'
    ELSE IF (discriminante == 0.) THEN
        WRITE (*,*) 'L''equazione ha una radice reale ripetuta.'
    ELSE
        WRITE (*,*) 'L''equazione ha due radici complesse.'
    END IF

END PROGRAM ControllaRadici2

In Sintesi

In questa lezione abbiamo studiato che:

  • Un'istruzione IF esegue un blocco di codice solo se la condizione è vera, altrimenti il codice viene saltato.
  • La clausola ELSE IF permette di valutare più condizioni alternative, eseguendo il primo blocco di codice corrispondente a una condizione vera.
  • La clausola ELSE definisce un blocco di codice eseguito se nessuna condizione precedente è vera, garantendo una gestione completa dei casi possibili.
  • La sintassi richiede che ELSE ed ELSE IF siano su righe separate, senza numeri di istruzione.
  • Si può usare un numero qualsiasi di ELSE IF, ma solo un ELSE alla fine, che viene eseguito solo se tutte le condizioni precedenti risultano false.
  • Un esempio pratico applica ELSE ed ELSE IF alla classificazione delle radici di un'equazione quadratica, distinguendo tra radici reali distinte, uguali o complesse.
  • L'uso di ELSE IF evita il bisogno di più IF annidati, migliorando la leggibilità e la struttura del codice.