FAQ Fortran

FAQ FortranConsultez toutes les FAQ
Nombre d'auteurs : 1, nombre de questions : 70, dernière mise à jour : 23 juillet 2021
Sommaire→ Les boucles- Comment dire Si ... et Sinon ... (Boucle IF THEN ELSE) ?
- Comment écrire une condition d'égalité ?
- Quelle est la différence entre = et == ?
- Comment écrire supérieur, inférieur, supérieur ou égal et inférieur ou égal ?
- Quels sont les opérateures logiques ?
- Comment faire répéter une série d'instructions (boucle DO) ?
- Comment sortir prématurément d'une boucle DO ?
- Comment passer une itération d'une boucle DO ?
- Comment construire une liste de choix (SELECT CASE) ?
La structure If...Then...(ElseIf)...Else...EndIf permet d'introduire des conditions et d'exécuter certaines lignes de code si ces conditions sont vraies.
If ( condition1 ) Then
! instructions à réaliser si condition1 est vrai
ElseIf (condition2 ) Then
! instructions à réaliser si condition2 est vrai
ElseIf (condition3 ) Then
! instructions à réaliser si condition3 est vrai
Else
! instructions à réaliser si aucun des trois conditions n'est vrai
EndifSi on a une seule condition et une seule instruction, on peut également utiliser le If logique dont la syntaxe est :
If ( condition ) instruction à réaliser si condition est vraiEn programmation le signe = est réservé à l'assignation d'une valeur à une variable. Pour tester l'égalité de deux variables on utilise le signe == (.eq. en FORTRAN77).
! écrire i et j s'ils sont égaux
If (i == j ) write(*,*)"i et j sont égaux"Il est dangereux d'écrire une condition d'égalité entre des réels. En effet, les nombres réels sont soumis à un arrondi dû à leur enregistrement sur un nombre limité de bits. Il s'ensuit que la manipulation des réels peut conduire à l'introduction d'erreurs numériques. Celles-ci sont généralement suffisamment faibles pour ne pas perturber les résultats mais aboutissent au fait que 2 réels ne sont, en pratique, jamais égaux car ils n'ont pas été arrondis de la même manière.
En Fortran comme dans la plupart des langages de programmation le signe = se lit "reçoit" et sert à assigner une valeur à une variable. Le signe == sert lui à tester l'égalité entre deux variables.
! on affecte 1 à la variable i
i = 1
! on teste si i et j sont égaux
If (i == j ) write(*,*)"i et j sont égaux"Le tableau suivant récapitule les différents comparateurs :
| Comparateur | Symbole en Fortran90 | Symbole en FORTRAN77 |
|---|---|---|
| supérieur | i > j | i .gt. j |
| supérieur ou égal | i >= j | i .ge. j |
| Inférieur | i < j | i .lt. j |
| Inférieur | i <= j | i .le. j |
| Différent | i /= j | i .ne. j |
Le tableau suivant regroupe les différents opérateurs logiques.
| Opérateur | Effet |
|---|---|
| condition1 .AND. condition2 | condition1 ET condition2 |
| condition1 .OR. condition2 | condition1 OU condition2 |
| .NOT. condition1 | L'inverse de condition1 |
If ( i > 10 .AND. i < 20 ) Then
! i est entre 10 et 20
ElseIf ( i == 10 .OR. i == 20 ) Then
! i égale 10 ou 20
ElseIf ( .NOT. i == 1 ) Then
! i n'est pas égal à 1
EndifIl est quelquefois intéressant de répéter un grand nombre de fois une même instruction sur une série de variables. La boucle DO...ENDDO est faite pour ça. Dans l'exemple suivant on va répéter les instructions pour des valeurs d'un entier i allant de l'entier debut à l'entier fin par incrément de pas.
! i est un entier qui sert de compteur
integer::i,debut,fin,pas
Do i=debut,fin,pas
! instructions
EnddoVoici par exemple comment calculer la somme des 20 premiers entiers :
PROGRAM somme
implicit none
integer::i,som
Do i=1,20,1
som = som + i
Enddo
write(*,*)"somme :",som
END PROGRAM sommeLes éléments définissant le début, la fin et le pas de la boucle peuvent être des expressions arithmétiques entières.
Il est possible de ne pas définir de compteur et de faire une boucle infinie. Il faut alors ajouter une instruction de sortie à l'intérieur de la boucle en utilisant la commande exit
Il est parfois intéressant de pouvoir sortir d'une boucle do avant la fin du compteur. Ou encore de ne pas mettre de compteur et de sortir de la boucle lorsqu'une condition est réalisée. Pour cela on se sert de la commande exit
Do i=1,10,1
! instructions
If( condition ) exit ! si condition est vrai on sort de la boucle
EnddoSupposons que le compteur d'une boucle DO...ENDDO aille de 1 à 10 mais que l'on ne veux pas passer par la valeur 6. Dans ce cas on utilise la commande cycle pour passer la valeur 6 du compteur et recommencer à l'itération 7.
Do i=1,10,1
If( condition ) cycle ! si condition est vrai on passe à l'itération suivante
! instructions
EnddoSoit choix un entier. La boucle Select Case permet en fonction de la valeur de choix d'exécuter une série d'instructions. Il s'agit en fait d'une boucle du même genre qu'une série d'instruction If ElseIf EndIf.
Select case(choix)
case(1)
! si choix égal 1 exécuter les instructions suivantes
case(2,3)
! si choix égal 2 ou 3 exécuter les instructions suivantes
case(4:10)
! si choix est compris entre 4 et 10 inclus exécuter les instructions suivantes
case(11:)
! si choix est suppérieur ou égal à 11 exécuter les instructions suivantes
case default
! sinon exécuter les instructions suivantes
End Select


