Ciclo DO WHILE in Fortran
- Un ciclo
DO WHILE
esegue un blocco di istruzioni fintanto che una condizione specificata è vera. - La sintassi del ciclo
DO WHILE
include la parola chiaveWHILE
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 cicloDO
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
.
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 dia
eb
. - Calcolare il resto
r
della divisione dia
perb
. - Se
r
è zero, allorab
è il MCD dia
eb
. - Altrimenti, assegnare il valore di
b
aa
, il valore dir
ab
, 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 è: