FAQ Fortran
FAQ FortranConsultez toutes les FAQ
Nombre d'auteurs : 1, nombre de questions : 70, dernière mise à jour : 23 juillet 2021
- 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
Endif
Si 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 vrai
En 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
Endif
Il 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
Enddo
Voici 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
somme
Les é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
Enddo
Supposons 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
Enddo
Soit 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