Ciclo DO WHILE in Fortran

Concetti Chiave
  • Un ciclo DO WHILE esegue un blocco di istruzioni fintanto che una condizione specificata è vera.
  • La sintassi del ciclo DO WHILE include la parola chiave WHILE seguita da una condizione tra parentesi.
  • Se la condizione è falsa all'inizio, il blocco di istruzioni non viene eseguito affatto.
  • Il ciclo DO WHILE è un caso speciale del ciclo DO più generale, con il test di uscita all'inizio del ciclo.
  • Esempi pratici includono il calcolo del massimo comune divisore (MCD) e l'integrazione numerica usando il metodo dei trapezi.

Il Ciclo DO WHILE

Nella lezione precedente abbiamo studiato il generico ciclo DO che permette di creare dei cicli. Il controllo del ciclo DO avviene tramite l'istruzione EXIT attraverso la quale possiamo uscire dal ciclo. Combinando EXIT con una condizione IF possiamo stabilire quando uscire dal ciclo.

Esiste, tuttavia, un altro tipo di ciclo DO che permette di eseguire un ciclo fintanto che una certa condizione è vera. Questo ciclo si chiama DO WHILE e la sua sintassi è la seguente:

DO WHILE (condizione)
    Istruzione 1
    Istruzione 2
    ...
    Istruzione n
END DO

Se l'espressione logica, condizione, è vera, le istruzioni da 1 a n verranno eseguite, e poi il controllo tornerà all'istruzione DO WHILE. Se l'espressione logica è ancora vera, le istruzioni verranno eseguite di nuovo. Questo processo verrà ripetuto finché l'espressione logica non diventa falsa. Quando il controllo torna all'istruzione DO WHILE e l'espressione logica è falsa, il programma eseguirà la prima istruzione dopo END DO.

Consiglio

Il ciclo DO WHILE è conosciuto anche come ciclo WHILE

In altri linguaggi di programmazione, questo costrutto è spesso chiamato ciclo WHILE. Ad esempio, in Java, JavaScript, C, C++, e Python, questo costrutto si chiama ciclo WHILE.

In Fortran, il ciclo WHILE è un caso speciale del ciclo DO che si ripete fintanto che una certa condizione è vera.

Questo costrutto è un caso speciale del ciclo DO più generale, in cui il test di uscita deve sempre avvenire all'inizio del ciclo.

Vediamo qualche esempio applicativo.

Esempio: Calcolo del Massimo Comune Divisore (MCD)

Per calcolare il massimo comune divisore (MCD) di due numeri interi positivi, a e b, possiamo usare l'algoritmo di Euclide, che si basa sui seguenti passi:

  1. Se b è maggiore di a, scambiare i valori di a e b.
  2. Calcolare il resto r della divisione di a per b.
  3. Se r è zero, allora b è il MCD di a e b.
  4. Altrimenti, assegnare il valore di b a a, il valore di r a b, e tornare al passo 2.

Questo algoritmo si presta bene all'uso di un ciclo DO WHILE, come mostrato nel seguente programma Fortran:

PROGRAM MCD
    IMPLICIT NONE
    INTEGER :: a, b, r, temp

    ! Leggi i due numeri interi positivi
    PRINT *, 'Inserisci due numeri interi positivi:'
    READ *, a, b

    ! Assicurati che a sia maggiore o uguale a b
    IF (b > a) THEN
        temp = a
        a = b
        b = temp
    END IF

    ! Calcola il MCD usando l'algoritmo di Euclide
    DO WHILE (b /= 0)
        r = MOD(a, b)
        a = b
        b = r
    END DO

    PRINT *, 'Il MCD è:', a
END PROGRAM MCD

Provando ad eseguire questo programma, si ottiene il seguente output:

 Inserisci due numeri interi positivi:
 48 18
 Il MCD è: 6

In questo esempio, il ciclo DO WHILE continua a eseguire il calcolo del resto finché b non diventa zero. Quando b è zero, il ciclo termina e il valore di a contiene il MCD dei due numeri iniziali.

Esempio: Integrazione Numerica con il Metodo dei Trapezi

Per integrare numericamente una funzione f(x) su un intervallo [a, b] usando il metodo dei trapezi, possiamo suddividere l'intervallo in n sottointervalli e calcolare l'area di ciascun trapezio. La formula approssimata per l'integrale è:

\int_a^b f(x) \, dx \approx \frac{b - a}{2n} \left( f(a) + 2 \sum_{i=1}^{n-1} f(a + i \cdot h) + f(b) \right)

dove h = \frac{b - a}{n} è la larghezza di ciascun sottointervallo.

La precisione dell'approssimazione dipende dal numero di sottointervalli n.

Proviamo a implementare questo metodo in Fortran, utilizzando un ciclo DO WHILE per stimare l'integrale della funzione f(x) = x^2 sull'intervallo [0, 1] usando 1000 sottointervalli:

PROGRAM IntegrazioneTrapezi

    ! Questo programma calcola l'integrale di f(x) = x^2
    ! sull'intervallo [0, 1] usando il metodo dei trapezi

    IMPLICIT NONE
    INTEGER :: n, i
    REAL :: a, b, h, integral, x

    ! Definisci l'intervallo e il numero di sottointervalli
    a = 0.0
    b = 1.0
    n = 1000

    ! Calcola la larghezza di ciascun sottointervallo
    h = (b - a) / n

    ! Inizializza l'integrale con i valori ai bordi
    integral = 0.5 * (a**2 + b**2)

    ! Calcola la somma dei valori intermedi usando un ciclo DO WHILE
    i = 1
    DO WHILE (i < n)
        x = a + i * h
        integral = integral + x**2
        i = i + 1
    END DO

    ! Moltiplica per la larghezza del sottointervallo per ottenere l'integrale finale
    integral = integral * h

    PRINT *, 'L''integrale approssimato è:', integral
END PROGRAM IntegrazioneTrapezi

Eseguendo questo programma, si ottiene il seguente output:

 L'integrale approssimato è:  0.333333552

Da notare che il valore esatto dell'integrale è:

\int_0^1 x^2 \, dx = \frac{1}{3} = 0.3333333333...