1
Chapitre 1
Résumé du cours FORTRAN
1.1 Exemple d’un programme Fortran
Exercice : Soit la suite :
un = un−1 + un−2
u0 = 0 , u1 = 1
Ecrire un programme qui calcule le terme uL pour L = 20. On doit trouver u20 = 6765.
Posons vn = un−1 , le problème devient :
un = un−1 + vn−1
vn = un−1
u0 = 0 , u 1 = 1 , v 1 = 0
M. Boulerhcha - Filière : Master ”ER” - Année : 2012-2013 2
Algorithme :
• On donne L = 20
• Faire varier n de 1 à L
• Pour chaque valeur de n
• Calculer un = un−1 + vn−1
• Calculer vn = un−1
• Fin de la boucle sur un
• Ecrire le résultat
Programme :
c Données
parameter(L=20)
c Initialisation
un=1
vn=0
do 100 N=2,L
k=un
un=un+vn
vn=k
100 continue
stop
end
1.2 Les éléments essentiels d’un programme
1. Instructions : Les insructions doivent être écrites entre la colonne 7 et la colonne
72. Si la colnne 6 contient un caractère (en général 1,2, ..), la ligne est interprétée
comme la suite de la ligne précédente. Les colonnes 1,2,3,4,5 sont réservées aux
M. Boulerhcha - Filière : Master ”ER” - Année : 2012-2013 3
étiquettes (ici 100) ; et si la première colonne contient le caractère c, elle est
considérée comme ligne commentaire.
2. Mots clés : parameter, data, do, continue, stop, end, ...
Ils définissent les caractères des données, les rôles des instructions, ...
3. Variables : Les variables sont choisies par le programmeur et formées de 6 car-
actères alphanumèriques, la 1ère étant un caractère. Les variables : 1X, a-t,
SUIVANT ne sont pas valides. Le compilateur ne fait pas de différence entre
majuscules et minuscules.
4. Opérateurs arithmétiques : +, -, *, /, **, ... La même régle de priorité est ap-
pliquée qu’en langage C, en cas de besoin ne pas hésiter à utiliser des parenthèses.
5. Opérateurs d’ordre :
• .GT. Greater Than (>)
• .LT. Little Than (<)
• .GE. Greater or Equal (≥)
• .LE. Little or Equal (≤)
• .EQ. EQual (=)
• .NE. Not Equal (6=)
6. Etiquettes : Permettent de se brancher à une ligne quelconque du programme.
1.3 Types de données
1.3.1 Données entières
Si aucune déclaration n’est faite, les variables commençant par : i, j, k, l, m, n
sont automatiquement considérées comme entières.
1.3.2 Données réelles
Si aucune déclaration n’est faite, les variables commençant par : a-h et o-z sont
automatiquement considérées comme réelles.
M. Boulerhcha - Filière : Master ”ER” - Année : 2012-2013 4
1.3.3 Données réelles en double précision
Si on veut travailler en double précision, il faut déclarer les variables concernées.
Plusieurs façons sont possibles.
• double precision a, b, c uniquement les variables a, b, c sont en double précision
• implicit double precision (a) : toute variable commençant par a est en double
précision
• implicit double precision (a-h,o-z) : toute variable commençant par a − h ou o − z
est en double précision
1.3.4 Données de type caractère
Un caractère (lettre, chiffre, espace, caractère spécial, ..) s’écrit entre apostrophes:
character*8 nom
nom=’EINSTEIN’
nom sera une chaine de 8 caractères.
Deux chaines de caractères peuvent être groupées en une seule par l’instruction //
appelée concaténation.
character*8 nom, espace*1, prenom*6, np*16
nom=’EINSTEIN’
prenom=’ALBERT’
espace=’ ’
np=nom//espace//prenom
stop
end
La variable np contiendra la chaine AINSTEIN ALBERT
1.3.5 Régle de priorité des opérations arithmétiques
Dans l’ordre, on a les priotités suivantes :
1. ** (puissance )
M. Boulerhcha - Filière : Master ”ER” - Année : 2012-2013 5
2. * et / (multiplication et division)
3. + et - addition et soustraction
1.3.6 Fonctions intrinsèques
Parmi les fonctions intrinsèques les plus usuelles : sqrt(), abs(), max(), min(),
cos(), sin(), tan(), log(), log10(), exp() L’argument peut être une constante ou une
expression.
1.3.7 Lecture et impression
Lecture et impression sur écran
Lecture et impression en format libre sur écran :
write(*,*)’Donner les valeurs des constantes a, b :’
read(*,*)a,b
write(*,*)’Les valeurs des constantes a, b sont :’
write(*,*)a, b
Lecture et impression sur écran avec format fixe :
write(*,*)’Donner les valeurs des constantes i, a, b :’
read(*,1000)i, a, b
write(*,*)’Les valeurs des constantes i, a, b sont :’
write(*,1000)i, a, b
1000 format(I5, F10.4, E12.6)
Lecture et impression sur un fichier
open(32,file,=’lecture.dat’,status=’old’)
open(33,file,=’ecriture.dat’,status=’new’)
read(32,1000)i, a, b
write(33,*)’Les valeurs des constantes i, a, b sont :’
write(33,1000)i, a, b
1000 format(I5, F10.4, E12.6)
Bien entendu dans le fichier lecture.dat le prgramme doit trouver les valeurs des con-
stantes i, a, b sous le format indiqué, sinon il va déclarer une erreur.
M. Boulerhcha - Filière : Master ”ER” - Année : 2012-2013 6
Les numéros 32 et 33 sont des numéros de l’unité à utiliser ; tout numéro entre
7 et 99 peut être utilisé.
Initialisation d’une donnée
Les constantes dont les valeurs ne changent pas au cours du programme peuvent
être fixées au début du programme par l’instruction parameter ou l’instruction data :
parameter(l=20)
data i/10/, x/23.6/
1.4 Tests et choix
1.4.1 if logique
L’instruction s’écrit :
if (expression logique) instruction exécutable
Exemple :
if (x .lt. 0.) a=sqrt(-x)
1.4.2 Séquences conditionnées if ... then/endif
L’instruction s’écrit :
if (expression logique) then
instructions exécutables
endif
Exemple :
read(*,*) L
if (L .lt. 0.) then
write(*,*)L, ’est negatif ’
stop
end
1.4.3 L’alternative if ... then/elseif/endif
L’instruction s’écrit :
if (expression logique) then
M. Boulerhcha - Filière : Master ”ER” - Année : 2012-2013 7
instructions exécutables
else
instructions exécutables
endif
Exemple : Calculer N1 /N2 à conditon que N2 soit non nul
read(*,*) N1 , N2
if (N2 .eq. 0.) then
write(*,*)’Le denominateur est nul’
else
nq=N1 /N2
end if
end
1.4.4 Renvoie par l’instruction goto
L’instruction goto s’écrit :
goto etiquette
L’exécution séquentielle du programme est interrompue pour reprendre à la ligne por-
tant l’étiquette.
Exemple :
goto 100
instructions
100 continue
Une autre instruction goto dite goto de ventilation peut être utilisée :
goto (et1 , et2 , ..., etn )expression
Exemple :
goto(10, 20, 30) ICODE
Traitement relatif à ICODE=4
goto 40
10 Traitement relatif à ICODE=1
goto 40
20 Traitement relatif à ICODE=2
goto 40
M. Boulerhcha - Filière : Master ”ER” - Année : 2012-2013 8
30 Traitement relatif à ICODE=3
40 suite du programme
1.4.5 Choix fondé sur le signe d’une quantité
L’instruction s’écrit :
if(expression arithmétique) etn , et0 , etp
etn , et0 , etp sont les étiquettes de 3 séquences à exécuter lorsque l’expression est négative,
nulle ou positive. Exemple :
if(I-J)40, 50, 60
40 Traitement si (I-J) est négatif
goto 100
50 Traitement si (I-J) est nul
goto 100
60 Traitement si (I-J) est positif
100 continue
1.5 Les boucles
Boucle ordinaire
Elle s’écrit :
do etiq I=1,N
Traitement
etiq continue
ou do I=1,N
Traitement
end do
Cette dernière forme est à éviter autant que possible. Exemple: écrire un programme
qui lit la valeur de n puis calcule le factoriel de n (n!):
integer fac
read(*,*) n
M. Boulerhcha - Filière : Master ”ER” - Année : 2012-2013 9
fac=1
do 100 i=2,N
fac=fac*i
100 continue
write(*,*)’Factoriel de ’,n,’=’,fac
stop
end
Boucle avec un pas négatif
Elle s’écrit :
do etiq I=1,N,-1
Traitement
etiq continue
Boucle générale
On peut parcourir un intervalle [N1 , N2 ] avec un pas K, dans ce cas l’instruction
s’écrit :
do etiq I=N1 , N2 ,K
Traitement
etiq continue
Exemple : écrire un programme qui lit N puis calcule la somme des nombres pairs
inférieurs ou égaux à N .
integer somme
read(*,*) N
somme=0
do 100 I=2,N,2
somme=somme+I
100 continue
write(*,*)’La somme des ’,N, ’premiers nombres pairs est =’,somme)
M. Boulerhcha - Filière : Master ”ER” - Année : 2012-2013 10
Boucles imbriquées
do etiq1 I = N1 , N2
Traitement
do etiq2 J = K1 , K2
Traitement
etiq2 continue
etiq1 continue
1.6 Tableau
Un tableau peut être de dimension 1 (un vecteur) ou de dimension 2 (une ma-
trice). Les tableaux de dimensions supérieures à 3 sont accéptés par le compilateur,
mais rarement utilisés.
La dimension d’un tableau doit être une constante fixée au début du programme.
Cependant, la taille exacte du tableau n’est connue qu’au moment de l’exécution ; on
résoud le problème en déclarant une dimension du tableau supérieure à la taille réelle.
Le type du tableau peut être entier, réel, double précision ou caractère. On utilise
des régles identiques au cas d’une seule variable. Exemple :
dimension a(10), b(5,15), k(1000)
ou
parameter(K=1000)
dimension T1(K), T2(K,100)
Opérations sur les tableaux
Les opérations sur le tableau global sont interdites ; il faut effectuer les opérations
sur les éléments du tableau. Ces éléments se ma nipulent comme un scalaire de même
type. Exemple : calculer la somme des deux tableaux A(5) et B(5) et mettre le résultat
dans le tableau T (5).
parameter(kmax=1000)
dimension A(KMAX), B(KMAX), T(KMAX)
M. Boulerhcha - Filière : Master ”ER” - Année : 2012-2013 11
c Lecture de A et B à l’écran
do 100 I=1,5
read(*,*) A(I), B(I)
c Calcul de la somme
C(I)=A(I)+B(I)
c Ecriture de C à l’écran
write(*,*) ’Le terme’, I, ’de la matrice C’, C(I)
100 continue
Une autre façon de lire ou d’écrire un tableau est d’utiliser une pseudo-boucle :
dimension A(2000), B(2000), T(2000)
c Lecture de A et B à l’écran
read(*,*) (A(I),I=1,5), (B(I),I=1,5)
c Calcul de la somme
do 200 I=1,5
100 C(I)=A(I)+B(I)
c Ecriture de C à l’écran
write(*,*) (C(I),I=1,5)