Ciclo DO WHILE in Fortran
- Un ciclo
DO WHILEesegue un blocco di istruzioni fintanto che una condizione specificata è vera. - La sintassi del ciclo
DO WHILEinclude la parola chiaveWHILEseguita 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 cicloDOpiù 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.
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:
- Se
bè maggiore dia, scambiare i valori diaeb. - Calcolare il resto
rdella divisione diaperb. - Se
rè zero, allorabè il MCD diaeb. - Altrimenti, assegnare il valore di
baa, il valore dirab, 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 n sottointervalli e calcolare l'area di ciascun trapezio. La formula approssimata per l'integrale è:
dove
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
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 è: