0% ont trouvé ce document utile (0 vote)
225 vues11 pages

Introduction au langage Fortran et algorithmes

Ce document décrit les éléments essentiels du langage de programmation FORTRAN, y compris les types de données, les opérations, les instructions conditionnelles et les boucles.

Transféré par

Farid Aoulad
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
225 vues11 pages

Introduction au langage Fortran et algorithmes

Ce document décrit les éléments essentiels du langage de programmation FORTRAN, y compris les types de données, les opérations, les instructions conditionnelles et les boucles.

Transféré par

Farid Aoulad
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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)

Vous aimerez peut-être aussi