0% ont trouvé ce document utile (0 vote)
53 vues19 pages

Introduction à la Programmation Fortran

fortran

Transféré par

elbouhalicharaf2002
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)
53 vues19 pages

Introduction à la Programmation Fortran

fortran

Transféré par

elbouhalicharaf2002
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

Université Abdelmalek Essaadi

Faculté des sciences-Tétouan


Département de Physique

Filière master PTR & PMA

Module
Programmation Fortran

Pr. Otman El-hajjaji


[email protected]
Année universitaire 2022/23

1
Introduction
A partir des années 50 du dernier siècle, l’informatique (traitement des informations par
voie automatique) commence à prendre de l’ampleur. La compagnie IBM a publié la
description d’un langage qu’il a nommé FORTRAN (FORmula TRANslator). La première
version FORTRAN І est apparue en 1956, puis avec le fil des années plusieurs versions ont
était développées jusqu’au 1978 où le FORTRAN 77 fait son apparition suivi du Fortran 90.
D’autres versions ont vu le jour après, Fortran 95, Fortran 2000, 2005...

Le langage Fortran reste le langage le plus utilisé par les scientifiques dans les codes de
calcul (par exemple physique des réacteurs). Les dernières versions sont devenues des vrais
langages orientés objet. Dans ce cours nous allons étudier le langage fortran 90.

Structure d’un programme Fortran


Un programme Fortran est une succession d’opérations permettant d’obtenir un résultat
final.

Program nom_du_programme

Déclaration des variables

Instruction

End [Program nom_du_programme]

Remarque : [ ] instruction optionnelle

2
I. Nom du programme
Le nom du programme est soit un mot soit un nombre de mots alpha numérique (lettres et
chiffres) [somme8], Factoriel, Racine_carre,...

Remarques :

- Dans le cas où le nom comporte un ensemble de mots, l’espace est représenté par
le tiré _. Le nom du programme doit absolument figurer en première ligne.
- Les différents accents ne sont pas acceptés par le compilateur.

Exemple : - Program somme

- Program racine_carre

II. Déclaration des variables

Il existe deux types de variables, les variables simples et les variables indicées
(Tableaux)

II.1 Variables simples

On représente les variables simples à l’aide de leur identificateur (un identificateur est
un nom que le programmeur attribut à une variable).

Un identificateur sert à désigner les différents objets manipulés par le programme : variables,
fonctions, noms de types ... ils sont formés d'une suite de caractères (lettres ou chiffres). Sa
longueur est limitée à 31 caractères.

Exemple : Somme ; 5 caractères.

Le fortran ne différencié pas entre une majuscule et une minuscule. (Somme≡ somme≡
𝑆𝑂𝑀𝑀𝐸).

Cinq types de variables intrinsèques sont utilisés :

3
Type Signification

Integer Entier

Real Réel
Double precision Double précision
Complex Complexe
Character Chaine de caractère
Logical Variables logiques

Ce sont des variables alphanumériques avec une lettre comme premier caractère. Par
défaut, le langage Fortran traite les lettres de I jusqu’à N comme des entiers les autres lettres
comme des réels. Cette affectation automatique peut être annulée par la commande Implicit
none

Dans ce cas, il faut absolument expliciter le type de la variable au début du programme.

II.1.1 Variable entière (Integer)

La syntaxe de cette déclaration est : Integer :: a,b,c

a, b et c peuvent prendre par exemple les valeurs +123, 0, -548, +99999. Le signe + est
optionnel (on ne l’écrit pas) alors que le signe moins est obligatoire.

II.1.2 Variable réelle (Real)

La syntaxe de déclaration est : Real :: i,y,z

i, y et z peuvent avoir comme valeurs : 0.,-0.9, 123.5, dans le cas des grands nombres la
variable s’écrit 7.23E+5 =7.23105 alors que dans le cas des faibles nombre on écrit

2.0E-03=2.010-3. En fortran la virgule est représentée par un point.

- La mantisse (nombre de chiffres après le point) peut comporter jusqu’à 7 chiffres


significatifs.

- 32 bits (4 octes), 1.210−38 ≤ |𝑥| ≤ 3.41038

N.B : Le point doit être toujours présent dans le cas d’un réel (3.)

4
II.1.3 Double précision (real*8)

La syntaxe est : double precision :: d,e

Pour une variable en double précision, l’exposant commencera alors avec la lettre ″D″
au lieu de ″E″ et peut comporter 3 chiffres. Elle prend un espace mémoire plus important et
le temps de calcul est plus long. Donc il ne faut l’utiliser qu’en cas de besoin

- La mantisse comporte 15 à 16 chiffres significatifs


- 64 bits (8 octes), 2.210−308 ≤ |𝑥 | ≤ 1.810308

Exemple : 1.237456899D+01 ; 2.5D-123

II.1.4 Variable complexe (cmplx (x,y))

La syntaxe est : complex :: z ; z=(20. , -30)

Une variable complexe se présente sous la forme d’un doublet de réels (x,y) placés entre
parenthèse et séparés par une virgule. Le premier réel (x) représente la partie réelle alors que
le deuxième (y) représente la partie imaginaire.

II.1.5 Variable caractère (character)

Elle est formée par une suite de caractères alphanumérique quelconque encadré par une
apostrophe (‘). On utilise cette variable pour composer des messages ou initialiser des
chaines de caractères.

Syntaxe : character (LEN=12) :: Nom

LEN : définit le nombre maximal de caractère. Dans notre exemple la variable Nom doit
avoir au maximum 12 caractères.

Exemple : character (LEN=12) :: Nom

- Nom=’pays’
- Nom=’bonjour-KHADIJA’ n’est pas valide car le nombre de caractères est supérieur
à 12.

5
II.1.6 Variable logique

Elle permet de déclarer les variables logiques, et elle a deux valeurs : .True. (vrai) ou .False.
(faux). Elles sont utilisées pour effectuer des tests.

Exemple : logical :: converge=.FALSE.

II.2 Variables indicées (tableaux)

Tous les types précédents peuvent (real, integer) être structurés en tableaux avec
l’attribut dimension. Un tableau est un ensemble de variables de même type. On représente
une variable indicée (tableau) par un identificateur suivi d’indice placé entre parenthèse et
séparé par une virgule dans le cas où le nombre est supérieure à 1. La forme déclarative
générale est la suivante :

Type, dimension (indices) :: nom_tableau

Le nombre d’indices dans un tableau varie de 1 à 7. Ces indices sont des constantes ou
variables entières. Les indices du tableau peuvent être positifs ou négatifs.

Exemple:

Integer, dimension (31) :: jour


Real, dimension(10) :: somme
Character(LEN=8), dimension(15) :: mois
Integer, dimension(-2,2) :: dim
Real, dimension(1 : 3,0 : 4,1 : 20) :: tab
character, dimension(1 : 3 , 4 : 6) :: pays

L’accès à chaque composante du tableau se fait de la façon suivante :

mois ( 1 ) = ‘janvier’
tab ( 2 , 3 , 20 ) = 2 . e−5
pays ( 1 , 5 ) = ’ maroc ’

6
Character (LEN=8), dimension(15) :: mois, spécifie que mois est le nom d’un tableau de 15
éléments.
mois ( 1 ) = ‘janvier’ , spécifie que le premier élément a une valeur = janvier.

III. Affectation des valeurs aux variables

Elle peut se faire de plusieurs façons :

III.1 Affectation simple

Une valeur réelle ou entière peut être attribuée à une variable de la façon suivante.

Variable = valeur

Exemple : Real :: masse


masse = 3.

III.2 Affectation par print et read

La valeur de la variable peut être donnée à partir du clavier par l’instruction :

Print *, ‘Introduire la valeur de x’

Read *, x

III.3 Affectation par Data

Elle permet d’initialiser des variables au début du programme, ces variables sont écrites
entre deux slachs (//)

Exemple : Real :: x,y,z

Data x,y,z /2.,3.,5./

III.4 Affectation par l’attribut : Parameter

L’attribut ‘parameter’ permet de donner une valeur à une variable. Cette valeur ne peut pas
être modifiée dans le programme, sinon une erreur sera déclarée par le compilateur. Cette
instruction est utilisée pour déclarer et protéger les constantes physiques.

7
Exemple: Real, parameter :: pi=3.14159265
N=6.023.1023

Character (LEN=12), parameter :: yes=’yes’

Ces affectations se font aussi aux variables indicées.

III.5 Autres Commandes

Il y a d’autres commandes qu’on utilise pour réaliser un programme. On cite entre autres :

Continuation ″&″

En fortran 90 les lignes ont une longueur maximale de 132 caractères. On peut écrire
plusieurs instructions sur une même ligne à condition de les séparées par un point virgule.
Une instruction peut s’écrire sur plusieurs lignes en utilisant le caractère de continuation
″&″. Une chaine de caractère écrite sur plusieurs lignes doit être précédée par le symbole
″&″ en plus de celui de la ligne précédente.

Exemple : Print*, ‘Dans ce travail la somme &


& doit être positive’, somme

Commentaire ″ ! ″

Pour expliquer le but et la nature du programme et par fois les instructions utilisées on
utilise le symbole ″ ! ″. Ce symbole peut être placé n’importe où dans la ligne (au début, au
milieu). Tous ce qui est à droite du symbole ″ ! ″ est ignoré par le compilateur

Exemple :

! Ce programme calcule la resolution de l’equation du second degre

Delta=b*b-4*a*c ! Discriminant

8
IV Instructions
IV.1 Opérations
IV.1.1 Opération arithmétique et puissance

En fortran on utilise les opérations +,-, *, / pour réaliser les opérations arithmétiques.

Le symbole ″=″signifie une affectation à une variable donnée (y=2+x). Les puissances
sont indiquées par (**). Elles sont prioritaires sur les multiplications (*) et sur les divisions
(/) et même prioritaire sur l’addition et la soustraction. Par précaution, il faut utiliser les
parenthèses.

Exemple : 3+5*9**4≡3+(5*(9**4))=32808

Remarque : le type de la puissance est : entier (Ex : 9**5)

IV.1.2 Opérations logiques

Elles agissent sur les variables booléennes (proposition vraie ou fausse)

.NOT. Négation. La proposition est vraie si les deux propositions sont fausses.

.AND. Ajouter 2 variables. La proposition est vraie si les deux propositions sont vraies.

.OR. La proposition est vraie si une des deux propositions est vraie.

IV.1.3 Opérations relationnelles

Elles permettent de comparer les variables non logiques mais de même type (deux réels ou
deux entiers, ...)

Expression Signification
> Strictement supérieur à
< Strictement inférieur à
>= Supérieur ou égale à
<= Inférieur ou égale
== Egale à
/= Différent de

9
IV.2 Les instructions de contrôle

Ce sont des instructions qui permettent de faire des tests où des itérations sur des
variables.

IV.2.1 Test if

C’est un test qui peut porter sur une ou plusieurs conditions.

• Test sur une seule condition

La syntaxe s’écrit : IF (expression logique) Instruction

L’instruction n’est exécutée que si l’expression logique est vraie. Sinon on passe à
l’instruction suivante.

Exemple :

[nom] If (expression logique) then Instructions (s’exécutent si l’expression est vraie)

Else Instructions (s’exécutent si l’expression est fausse)

End if [nom]

 Le nom du test est facultatif, il est utilisé dans le cas où le programme présente
plusieurs tests if.

Exemple:

ln(𝑥)
Soit la fonction f(x)={ 𝑠𝑖 𝑥 > 0
𝑥
1 𝑠𝑖𝑛𝑜𝑛

Faire un programme qui permet d’afficher les valeurs de f(x) pour différentes valeurs de x.

• Test pour plus d’une condition


Dans le cas où on a plusieurs tests à faire, la syntaxe est la suivante :
[Nom] if (expression 1 logique) then
Instructions (s’exécutent si l’expression 1 est vraie)
Else if (expression 2 logique) then

10
Instructions (s’exécutent si l’expression 1 est fausse et l’expression 2est vraie)
Else
Instructions (s’exécutent si les deux expressions 1 et 2 sont fausses)
End if [Nom]

Remarque : il y’a autant de ″end if″ que de ″if″.

Exemple : Ecrire un programme qui permet d’afficher les valeurs de f(x) pour les différentes
valeurs de x

0 𝑠𝑖 𝑥 < 0 𝑜𝑢 𝑥 > 2
Y= { √𝑥 𝑠𝑖 𝑥 ∈ [0,1]
1 𝑠𝑖 𝑥 > 1

Remarques :

En fortran, parfois un utilise les instructions suivantes :

• GOTO numéro
L’instruction GOTO permet d’aller à la ligne correspondante au numéro de l’étiquette.
• STOP
L’instruction STOP permet d’arrêter l’exécution du programme

IV.2.2 Instruction select case

C’est une instruction qui permet de choisir entre plusieurs choix en fonction de la valeur
d’une expression scalaire de type entier, réel ou caractère.

La syntaxe s’écrit :

[Nom] : select case (expression)

Case (liste 1)

Instruction 1

Case (liste 2)

Instruction 2

End select [nom]

11
IV.2.3 Structure d’itération

a) Boucle finie : DO ↔ END DO

Syntaxe :
Do variable = Vmin, Vmax [, pas]
Instruction
End do

La variable est de type entier. La boucle s’arrête une fois la variable est supérieure à
Vmax. Par défaut le pas est égal à 1, il peut être positif ou négatif

Boucle conditionnelle Do while ↔ end do

Syntaxe :
Do while (Instruction logique)
Instruction
End do

Les itérations s’arrêtent une fois la condition n’est pas satisfaite.


b) Boucle infinie
Ce sont des boucles sans contrôles, on sort de la boucle avec l’instruction exit.
Syntaxe :
[Nom] do
Instructions
If (condition) then
Exit [nom]
End If
Instructions
I=i+1
End do [nom]

Remarque: l’instruction (exit) peut être utilisée pour tous les types de boucle.

12
c) Boucle imbriquée (multiple)

Il se trouve parfois qu’on a affaire à un calcul qui nécessite deux boucles (ou plus) une
dans l’autre. La boucle interne est exécutée en premier.

Exemple: résultat:

Do I=3, 5 3, 5
Do J=5, 7 3, 6
Print*, I, J 3, 7
End do 4, 5
End

Do Do J=5, 7 5,3
I=3, 5 5,4
Print*, I, J 5,5
End do 6,3
End 6,4

IV.3 Organigramme d’un programme

Un organigramme permet une représentation facile du programme. Les opérations dans


un organigramme sont représentées par des symboles de formes bien normalisées. Ces
symboles sont reliés entre eux par des lignes fléchées qui indiquent le chemin, on a :

13
Symboles Leur rôle

Utilisé pour les calculs

Utilisé pour la lecture et


l’affichage

Utilisé pour le début et la fin

Utilisé pour représenter des tests

V. Les Entrées / Sorties

On appelle Entrée/Sortie, le transfert d’information entre la mémoire de l’ordinateur et


les unités périphériques (clavier, écran, disck dur, ….) les instructions d’entrée et de sortie
sont respectivement : read (lire), print(écrire), write. On distinct deux formes
d’entrées/sorties : Forme libre : appelé aussi format standard et Format avec spécification
précise. Ces deux formats peuvent être utilisés quand on fait l’entrée/sortie sur un fichier.

V.1 Format libre

Dans ce format la syntaxe de l’écriture : print*, write(*,*).

Les données sont affichées sur l’écran sous forme de caractères ou de valeurs numériques.

Exemple : print*, ‘Donner la valeur de x’

Print*, ‘la valeur de y est ‘ , y

La syntaxe de lecture est : read*, read(*,*).

Les données sont communiquées à l’aide de clavier.

Exemple : read*, a,b,c

Ces syntaxes peuvent aussi être utilisées quand il s’agit de l’écriture et de la lecture dans un
fichier. Le fichier est généralement nommé nom_de_fichier.txt, .dat, .out,…

14
La syntaxe est : open (unit=nombre entier, file=’factoriel.txt’)

(Forme compacte ; forme la plus utilisée)

*Open (unit=nombre entier, file=’factoriel .txt, status=new(ou old))


• Old : le fichier existe déjà
• New : fichier à créer
 Forme option
Les nombres 5 et 6 sont réservés respectivement au clavier et à l’écran.

Exemple :
Open (unit=2,file=’resultat.txt’)
Write (2,*) ‘la valeur est’, x
Close (2) : fermeture de fichier

V.2 Format référencié

Dans ce cas, le format est fixé par l’opérateur via l’instruction ‘format’. Ce format est une
instruction qui se trouve dans une ligne avec une étiquette. Format est valable pour la lecture
et l’écriture (c'est-à-dire même forme).

write(2,10) a,b,c
10 format(2X, ‘(liste des descripteurs)’)
Write(2,‘(liste des descripteurs)’)a,b,c, (voir page Format d’entrée/sortie)
Exemple :
Program Format_Entree_sortie
Implicit none
Real :: a,b,c,delta
Print *, 'Introduire les valeurs de a, b et c '
Read (*, *) a,b,c
delta = b**2-4*a*c !Calcul du discriminent
print *, 'delta =', delta
Open(unit=3,file='test.txt') !Ouverture du fichier

15
Write(*,10)delta !Ecriture sur ecran
Write(*,fmt='(2X,''La valeur de delta est :''F10.5)')delta
Write(*,'(2X,''La valeur de delta est :''F10.5)')delta
Write(3,10)delta ! Ecriture dans le fichier test.txt
Close(3) ! Fermeture du fichier
10 format (2X,'La valeur de delta est :'F10.5)
end
V.3 Lecture et écriture des tableaux (Voir II.2)

On peut remplir, lire et écrire des tableaux de plusieurs façons :

• Instruction data
Real dimension (5) :: a
Data a/3.,2.,3.,6.,5./
• Real dimension (5) :: a=/1.,2.,3.,4.,5./

• A partir d’une boucle


Real dimension (5) :: a
Do i=1,5
a(i+1)=a(i)+i
Enddo

• A partir d’un fichier

Open (unit=3,file= ‘données.txt’)


1. 10.
Do i=1,5 2. 20.
3. 30.
Read(3,*)a(i),b(i) 4. 40.
5. 50.
Enddo
Close (3)

16
Interpolation
Soit une fonction f dont les valeurs pour x=a et x=b sont f(a) et f(b).
f(x)=a1x+b1 et soit x=c un point compris entre a et b
𝑓(𝑎) = a1 a + b1 𝑓(𝑎)−𝑓(𝑏) 𝑓(𝑎)−𝑓(𝑏)
{ ➔ a1= et b1=f(a)- a
𝑓 (𝑏) = a1 b + b1 𝑎−𝑏 𝑎−𝑏

𝑓(𝑎)−𝑓(𝑏) 𝑓(𝑎)−𝑓(𝑏)
 f(x)= x+f(a)- a
𝑎−𝑏 𝑎−𝑏

𝑓(𝑎)−𝑓(𝑏)
= (x-a)+f(a)
𝑎−𝑏
La valeur de l’inconnue f(c) est déterminée par :

𝑓(𝑎)−𝑓(𝑏)
f(c) = (c-a)+f(a)
𝑎−𝑏

VI. Function et subroutine


VI.1 Function (fonction)

Function est un petit programme à l’extérieur du programme principal.


Program Calcul program Calcul
- -
- -
- -
Appel à la fonction Appel à la fonction
End contains
Type function Real function
- -
- -
Fonction
End End

Type function (arg1, arg2,….)

A l’intérieur de la fonction on doit avoir une instruction de type nom_fonction=expression

NB :

17
• le nom de la fonction ne doit pas figurer à la droite de l’expression.
• Toutes les instructions utilisées dans le programme principal peuvent l’être dans la
fonction.

Syntaxe
Type function nom_fonction(arg1, arg2,….)

Implicit none

Déclaration des variables

Instruction

End function

VI.2 Subroutine (sous-programme)


Il arrive parfois qu’on doit faire une même opération plusieurs fois dans le même
programme, subroutine permet de décomposer le programme principal sous forme de block.
Le sous-programme est appelé de programme principal par la syntaxe :

Call nom-subroutine (arg1, arg2,…)


o Syntaxe :
Subroutine nom-subroutine (arg1, arg2,…)
Implicit none
Déclaration des variables
Instruction
Return
End [subroutine]

L’instruction ″return″ fait retourner le programme à la ligne qui suit l’appel de la


subroutine. Les variables utilisées seulement dans le sous programme sont déclarées dans
ce dernier. Même chose pour le programme principal. Il est souhaitable de préciser, dans la
fonction et le sous programme, la déclaration des attributs suivants :

• Type Intent (in) : A, B, C : Déclaration des variables d’entrée.

18
• Type Intent (out) : D, E, F : Déclaration des arguments de sortie.
• Type Intent (inout) : E, F : pour les arguments mixtes

Si le sous programme ne nécessite pas l’argument, on écrit seulement nom-subroutine ()


Dans ce cas, l’appel de la subroutine se fait par : call nom-subroutine ()

19

Vous aimerez peut-être aussi