1
Université Hasiba Ben Bouali Chlef UHBC Faculté de Sciences Exactes et
Informatique
Département TC-MI-SM
INFORMATIQUE 2 (Langage de programmation
Cours de Fortran
Initiation et structures conditionnelles
2
Bibliographie :
Informatique O2 Algorithmique et programmation, support de cours ; par Dr. Nateche tahar , Faculté : Génie Mécanique ,Département : Génie Maritime Année Universitaire 2016-2017,USTO- MB.
Initiation à Fortran ,Mehmet Ersoy1,2 ,1SEATECH–Ecole d’ingénieurs de l’Université de Toulon,2 IMATH–Institut de Mathématiques de Toulon
Institut Du Developpement ´Et Des Ressources En Informatique Scientifique .Cours langage Fortran – 27 janvier 2006,Patrick Corde et Anne Fouilloux.
Initiation au Langage de Programmation Fortran 90 (Première Partie) ;Auteurs : Habib BOUTALEB ; faculté des sciences, Université « Dr. Tahar Moulay » De Saida
Composition d’un ordinateur
* 1 microprocesseur pour calculer et de la mémoire pour ranger des données
* Le microprocesseur ne sait exécuter que des opérations simples sur des nombres codés en binaire (1 et 0) :
– additionner – soustraire – multiplier – diviser ,– lire dans la mémoire – écrire dans la mémoire ……..
Le code machine est très éloigné de la logique humaine.
La résolution d’un problème par l’ordinateur
La résolution d’un problème mathématique par l’ordinateur passe par les étapes suivantes :
Mme BELALIA.A
3
Problème
mathématique Algorithme
Programme écrit en langage de programmation
La compilation
Programme.exe Programme.obj
Langage machine Fournir des résultats
Mme BELALIA.A 4
Quelques définitions :
Algorithme : est une suite d’instructions bien ordonnées et structurés pour résoudre un problème.
Un programme est ensemble des sous programmes.
Exemples de problème
- Multiplier deux matrices
Le microprocesseur ne sait pas de lui-mème manipuler de tels objets. Il faut une structure capable d’organiser une matrice en mémoire
- Calculer sin(x) pour 100 valeurs de x régulièrement espacées sur
- [0, 2π]. Le microprocesseur n’a pas d’instruction capable de calculer le sinus d’un nombre réel.
Un langage de programmation :
Le lien entre l’homme et la machine c’est le langage de programmation Elle est constitué par :
- un ensemble de mots-clés
- un ensemble d’objets manipulables, éventuellement extensible - des règles de syntaxe
- de structures logiques - Bibliothèque de données
Programmer, c’est écrire un texte respectant les règles du langage, susceptible de
Généralité sur le langage Fortran (Fortran langage compilé, Fortran = (Mathematical) FORmula TRANslating)
Mme BELALIA.A 5
Mme BELALIA.A 6
Historique :
1954 : IBM (International Business Machines) avec John Backus publie la description d’un système de FORmula TRANslator (traducteur d'équations).
1956 : Premier manuel de référence qui définit le Fortran I.
1957 : Fortran II avec l’apparition des procédures et la compilation séparée.
1962 : Fortran IV (Fortran III est resté interne à IBM) introduit le type explicite. Il sera rebatisé Fortran 66.
1978 : Fortran 77 (l’ère moderne) propose une avancée significative dans les entrés sorties avec le format libre et l’instruction OPEN.
1991 : Fortran 90 quelques facilités de la programmation objets, le calcul matriciel, le contrôle de la précision numérique, ...
2000 : Fortran 95, introduction de notion de parallélisme de données 200X : Fortran 2000, programmation orienté objets
2004 : fortran 2003 standard adopté,nouveautés : interopérabilité avec C,
arithmétique IEEE, accès au système,allocations dynamiques étendues à d’autres contextes, aspects objet...
Fortran 2003 implémenté sur certains compilateurs (en cours pour gfortran) 2010 : standard fortran 2008 adopté le 20 sept 2010
novembre 2018 : norme Fortran 2018 (ISO et ANSI).
7
Elaboration d'un programme
Un programme Fortran nécessite trois types de fichiers pour son élaboration :
Les fichiers source (extension .FOR, .F90 sous MS-D OS ou WINDOWS, .f sous UNIX2) : Le programmeur écrit le fichier source à l'aide d'un éditeur de texte de son choix. Il s'agit d'un texte clair, contenant toutes les instructions du programme. Ce fichier peut être envoyé sur une imprimante ou affiché sur l'écran. C'est ce que fait l'éditeur de texte.
Les fichiers objet (extension .OBJ sous MS-DOS, .o sous UNIX) :
Le fichier source doit ensuite être compilé, c'est à dire traduit en langage machine.
C'est le rôle du compilateur. Chaque langage possède d'ailleurs un compilateur propre.
Le fichier obtenu après compilation est un fichier objet, pas encore exécutable.
Le fichier exécutable (extension .EXE sous MS-DOS ou WINDOWS, définie par L’utilisateur sous UNIX).
Avantage de ce langage: Rapidité d’exécution et - Sécurité du code exécutable
Mme BELALIA.A 8
Installation du compilateur
Editeur de texte (notepad++ sous windows, gedit sous Linux, Fraise sous mac)
sous windows (gfortran) via mingw ou cygwin (émulateurs unix)
sous linux (gfortran) via l’installateur de paquet apt
sous IOS via l’installateur de paquet fink ou suivre certains tuto sur le net Organisation d’un programme FORTRAN
Succession de « pavés » ´élémentaires qu’on appellera blocs fonctionnels.
Il en existe 3 sortes :
1. Le programme principal inclus entre program (facultatif ) et end 2. Les subroutines inclus entre subroutine et end
3. Les fonctions inclus entre function et end
program nom ...
end
subroutine nom( arguments) ...
end
Type function nom (arguments) ...
end
Mme BELALIA.A 9
Organisation de programme fortran
Programme principal
Le programme principal est obligatoirement présent. Il n’existe qu’un seul pro- gramme principal. Ce programme principal se découpe en deux parties distinctes
Partie déclaration
C’est dans cette partie qu’on définit les objets (type + nom) qui seront manipuler par le programme.
Partie instructions
L’exécution d’un programme FORTRAN consiste à dérouler dans l’ordre toutes les instructions de la partie exécutable du programme principal.
Certaines instructions déroutent le pointeur de programme vers d’autres blocs fonctionnels (subroutines ou fonctions).
10
Les données
Les déférents types de données : Type integer
Il contient un entier et il est représenté par son écriture en base 2 signées sur 4 octets, Ses valeurs possibles sont dans l’intervalle [−231 , 231 − 1].
Type real
Il contient un nombre réel et il est codé en virgule flottante (IEEE) sur 4 octets .Chaque nombre est représenté sous la forme x = ±0.m × 2e. Les sont comprises dans l’intervalle [1.401 × 10−45 , 3.403 × 1038]
type double precision
Est un real plus précis, codé en virgule flottante sur 8 octets l’exposant codé sur 11 bits (−1023 < e < 1024).Les valeurs sont comprises entre [4.941×10−324 ,
1.798×10308 ] Type complex
Assemblage de 2 real dans un même objet.
Constantes numériques:
• Constantes integer
Une constante de type integer est écrite sans point décimal.
Exemple : 1 , 123, -28 , 0
11
Constantes numériques:
• Constantes real
Une constante de type real doit obligatoirement comporter :
soit le point décimal, même s’il n’y a pas de chiffres après la virgule ;
soit le caractère e pour la notation en virgule flottante.
Pour les nombres écrits 0.xxxxx, on peut omettre le 0 avant le point décimal.
Exemple : 0. 1.0 1. 3.1415 31415e-4 1.6e-19 1e12 .001 -36.
• Constantes double précision
Il doit obligatoirement être écrite en virgule flottante, le e étant remplacé par un d.
Exemple : 0d0 0.d0 1.d0 1d0 3.1415d0 31415d-4 1.6d-19 1d12 -36.d0
• Constantes complex
Une constante de type complex est obtenue en combinant deux constantes réelles entre parenthèses séparées par une virgule. 2.5 + 1 s’écrira (2.5,1.)
Exemple (0.,0.) (1.,-1.) (1.34e-7, 4.89e-8)
12
Les variables
Une variable est un emplacement en mémoire référencé par un nom, dans lequel on peut lire et écrire des valeurs au cours du programme.
Avant d’utiliser une variable, il faut : – définir son type (integer, real,…….) – lui donner un nom.(identificateur) Une variable est :
locale si seul le bloc fonctionnel où elle est déclarée peut y accéder.
C’est le défaut ;
globale si tous les blocs fonctionnels peuvent y accéder.
Identificateurs
Un identificateur permet de donner un nom a` :
☞ Une variable, ☞ Une constante, ☞ Une procédure.
Il est défini par :
☞ Une suite de caractères alphanumériques (lettres non accentuées, chiffres, le caract`ere «_ » (« underscore » <> « moins ») ;),
☞ le premier caractère doit être une lettre, ☞ la longueur est limitée à 31 caractères, ☞ On ne distingue pas les lettres majuscules des minuscules.
13
Exemples d’identificateurs compteur
Compteur fin_de_fichier
montant_annee_1993
Identificateurs non valides accentué
avec espace
Il_y_a_plus_de_trente_et_un_caracteres _souligne_devant
1 _chiffre_devant
nom#alphanumerique
Types prédéfinis ou de bases
INTEGER : entier
CHARACTER : caractère
LOGICAL : deux valeurs .TRUE. / .FALSE.
REAL : réel simple précision DOUBLE PRECISION : réel double précision
COMPLEX : complexe simple précision
14
La déclaration Attributs
Chaque type peut être surchargé des attributs suivants : Différents attributs :
parameter constante symbolique dimension taille d’un tableau allocatable objet dynamique
pointer objet défini comme pointeur
target objet accessible par pointeur (cible)
save objet statique
intent vocation d’un argument muet optional argument muet facultatif
public ou private visibilité d’un objet défini dans un module external ou intrinsic nature d’une procédure
Syntaxe
– Forme générale d’une déclaration
Type [ , liste attributs :: ] liste identificateurs
15
La déclaration:
Exemple de programme
PROGRAM declaration
INTEGER, SAVE :: compteur INTEGER :: temperature LOGICAL :: arret_boucle
...
END PROGRAM declaration
PROGRAM declaration
INTEGER :: indice_boucle SAVE :: indice_boucle
...
END PROGRAM declaration
PROGRAM Declaration
REAL, PARAMETER :: PI=3.141
LOGICAL, PARAMETER :: VRAI=.TRUE. , FAUX=.FALSE.
END PROGRAM Declaration
16
La déclaration:
Cas particulier : le type CHARACTER
Pour déclarer une chaine de caractères on précise de plus sa longueur. Si elle n’est pas indiquée elle est égale à 1 :
CHARACTER *N chaine ou CHARACTER (LEN =N) chaine
Exemple : CHARACTER *15 dep , dep = ‘informatique’
Fonctions sur les chaines
Longueur d’une chaine :
LEN ( chaine) : Renvoie la longueur de la chaine
Ex : LEN (dep) renvoie 15 et non pas 12 .
LEN TRIM : retourne la longueur de la chaine de caractères transmise en argument sans considérer les blancs de fin.
LEN_TRIM ( ’ FORTRAN ’ ) → 9 et pas 11 . Recherche dans une chaine:
INDEX(chaine1, chaine2) renvoie la position de la chaine chaine2 dans la chaine chaine1.
Exemple : INDEX (dep,’ tique’) = 8
17
La déclaration :
Fonctions sur les chaines La sous chaine
A` partir d’une variable chaine de caractères on peut extraire une suite de caractères contigus. Pour cela on spécifie le nom de la variable suivi entre parenthèses d’un
couple d’entiers n:m indiquant les rangs de début et de fin d’extraction.
Exemple :
Concaténation : la concaténation permet de coller deux chaines. En fortran ce note //
Exemples:
Ex1 ‘bon’ // ‘jour’ représente ‘bonjour’
Ex2 Trim(dep) // ‘ est mon départemet’ représente ‘informatique est mon département’.
EX3
Character (len=5) :: ch = ‘bon’
ch = ch // ’JOUR’ ! <--- INVALIDE !!!
ch = TRIM(ch) // ’JOUR’ ! <--- VALIDE CHARACTER *=10 :: ch
ch = "Bonjour"
ch(4:7) = "jour"
18
La déclaration
Continuation d’une ligne dans une chaine de caractères
Une ligne d’instructions comporte au maximum 132 caractères ,Si plus que 132, la solution : couper la ligne en morceaux. Placer &en fin de première ligne et & au début de la ligne
suivante
Commentaire : On précise le commentaire par le symbole ! avant d’écrire le commentaire ,En format fixe, les lignes qui commencent par C, c, * ou ! en colonne 1 sont des
commentaires.
Exemple :
Program texte
CHARACTER *100 parag
!ce paragraphe pour définir les règles
Parag = ‘ pour écrire un paragraphe, on utilise le symbole & à la fin de ligne qui& &et &au début de la ligne suivante.
Mme
19
La déclaration
Constantes chaines de caractères
Une constante chaines de caractères est une suite de caractères encadrées par le délimiteur ‘….’ ou bien ‘’…..’’.
Si parmi la suite des caractères figurent le caractère délimiteur, il devra être doublé.
Exemple:
’La somme des n premiers entiers est : ’
’l’’étendue désirée est : ’
"l’’étendue désirée est :’’
20
La déclaration
Deux modes de déclaration des variables
• Par défaut :
Par défaut, les variables dont l’identificateur commence par les caractères ( I a` N ) sont de type INTEGER.
Toutes les autres sont de type REAL.
• On déclare tous : Instruction IMPLICIT NONE
L’instruction IMPLICIT NONE change cette règle car elle impose à l’utilisateur la déclaration de chaque variable.
☞ Elle permet la détection d’un certain nombre d’erreurs à la compilation. Cette instruction est vivement recommandée ! ! !
☞ IMPLICIT NONE se place avant les déclarations des variables,
☞ L’instruction ne s’applique qu’à l’unité de programme qui la contient.
l’instruction STOP interrompt le programme.
21
La déclaration Initialisation
L’instruction DATA
DATA liste1/init1/[, ..., listei/initi/, ...]
☞ listei fait référence à une liste de variables à initialiser,
☞ initi indique les valeurs d’initialisation,
☞ le type des valeurs d’initialisation doit respecter les règles suivantes :
➳ pour un objet de type caractère ou logique, la constante d’initialisation doit être de même type,
➳ pour un objet de type entier, réel ou complexe, la constante d’initialisation peut être de type entier, réel ou complexe.
Exemple:
REAL A, B, C INTEGER N, M LOGICAL arret
DATA A, B, N/1.0, 2.0, 17/
DATA C/2.6/, M/3/
DATA arret/.FALSE./
22
La déclaration Le symbole ”=”
Fortran permet d’initialiser une variable lors de sa déclaration a` l’aide du symbole ”=”.
Dans ce contexte, les caractères :: sont obligatoires.
TYPE [, attributs] :: v1 =c1[, ..., vi =ci, ...]
ou` vi est le nom de la variable a` initialiser et ci sa valeur Exemple
PROGRAM initialisation
INTEGER :: debut = 100 REAL :: valeur = 76.3
LOGICAL :: drapeau = .TRUE.
...
END PROGRAM initialisation
23
Les entrées/sorties Syntaxe générale
- Lecture
Read (périphérique, format [, options]) liste Read format, liste
- Ecriture
Write (périphérique, format [, options]) liste Print format, liste
Entrées-sorties standards : Ecriture en format libre print *, ‘Energie totale = ‘, Etot, ‘ eV’
write(*,*) ‘Energie totale = ‘, Etot, ‘ eV’
Le * associé au format indique à l’instruction d’écriture de formater
automatiquement les données. (Ex: données numériques écrites avec toutes leurs décimales représentées en machine)
Le * associé au périphérique (write) correspond à la sortie standard.
Exemple:
Write (*,*) a, b, c, d
Écrit les valeurs a, b, c, d sur une ligne, séparées par des blancs.
Write (*,*) ‘ La valeur de A est ‘, A
Ecrit la chaine « La valeur de A est », suive de la valeur A.
24
Les entrés /sorties
Entrées-sorties standards : Lecture en format libre read *, title, nb, x
read(*,*) title, nb, x
Le * signifie que la conversion des données vers leur représentation machine doit se faire automatiquement.
Les données d’entrée doivent être séparées - par des espaces
- ou des virgules
- ou des fins de ligne (à éviter)
Les chaînes de caractères se notent entre apostrophes (') ou entre guillemets (") Exercice 1:
Ecrire un programme fortran qui demande à l’utilisateur de saisir son nom et son prénom puis afficher bonjour suivi de nom et de prénom de l’utilisateur.
25
Les entrées /sorties
Algorithme bonjour
Caractère nom, prénom Début
Ecrire " donner votre nom : "
Lire (nom)
Ecrire " donner votre prénom : "
Lire (prénom)
Ecrire " bonjour", nom, prénom
Fin
Program bonjourr
CHARACTER * 50 nom, prenom Write(*,*)’donner votre nom’
Write (*,*) ‘donner votre prenom’
Read * , nom,prenom
Write (*,*)’mon nom est ‘,nom , ‘et mon prenom est ‘, prenom
end
26
Les opération arithmétique:
Les opérateurs mathématiques Opérateurs relationnels
Ces opérateurs admettent des opérandes de type INTEGER, REAL ou CHARACTER. Seuls les opérateurs ==, /= peuvent s’appliquer a` des expressions de type COMPLEX.
Exemples
N .GE. 0 X .LT. Y Z /= 3.7 (B**2 - 4*A*C) .GT. 0.
Mme BELALIA.A 27
Les opérateurs:
Les opérateurs logiques:
28
les structures de contrôle
Ce sont des instructions qui permettent de faire des itérations ou des tests sur des variables.
I. Structures de contrôle conditionnel :
Ces structures sont utilisées pour décider de l'exécution d'un bloc d'instruction : est-ce-que ce bloc est exécuté ou non. Ou bien pour choisir entre l'exécution de deux blocs différents.
I.1 Expression logique
Un prédicat est un énoncée ou proposition qui peut être vraie ou fausse.
En mathématiques, c’est une expression contenant une ou plusieurs variables et qui est susceptible de devenir une proposition vraie ou fausse selon les valeurs attribuées à ces variables.
Exemple :
(10 < 15) prédicat, après l’évaluation qui est vrai, devient une proposition vraie.
(10 < 3) une proposition fausse.
Mme BELALIA.A 29
I. Structures de contrôle conditionnel : I.2 Evaluation d'une expression logique
Une condition est une expression de type logique. Ils lui correspondent deux valeurs possibles VRAI et FAUX qu'on note par V ou F.
Considérons deux variables logiques A et B. Voyons quels sont les opérateurs logiques et leurs ordres de priorités.
Notons que :
(A = faux) non A (A = vrai) A
Les opérateurs logiques sont : La négation : "non"
L'intersection : "et"
L'union : "ou"
Notation et Ordre de priorité des opérateurs logiques
1. Non : — 2. Et : 3. ou :
30
I. Structures de contrôle conditionnel : I.2 Evaluation d'une expression logique
La négation d'une condition (A) soit A un variable logique
Si A = true alors Non A = False et si A= False alors Non A = True L’intersection et l’union de deux variable logique A et B
I.2 Le test If :
Il contient les cas suivants :
Un test simple contient un seul bloc d'instructions.
Cas 1 : IF (expression logique) then Instructions ! Exécuté si la condition est vraie END IF
A B ET OU
False False False False
False True False True
True False False True
True True True True
31
I. Structures de contrôle conditionnel : I.2 Le Test If
Exemple : Écrire un programme Fortran qui demande un entier (A) à l’utilisateur, teste si ce nombre est positif (A≥ 0) et affiche “positif”.
Programme fortran : program positif
INTEGER A
write(*,*) ’ entrer la valeur de A ’ read(*,*) A
IF (A.GE.0) then
write(*,*) ’ positif ’ END IF
END
32
I. Structures de contrôle conditionnel : I.2 Le Test If
Cas 2:
IF (expression logique) then Instructions 1
ELSE
Instructions 2 END IF
Exemple : Écrire un algorithme qui demande un entier (A) à l’utilisateur, teste si ce nombre est positif (A ≥ 0) ou non, et affiche “positif” ou “négatif”.
Solution
Programme fortran : program positif
INTEGER A
write(*,*)’ entrer la valeur de A ’ read(*,*) A
IF (A.GE.0) then
write(*,*)’ positif ’ ELSE
write(*,*)’ négatif ’ END IF
33
I. Structures de contrôle conditionnel : I.2 Le Test If
Cas 03:
IF (expression logique) then Instructions 1
ELSEIF
Instructions 2
….
ELSEIF
Instructions n-1 ELSE
Instructions n END IF
Exemple:Écrire un programme fortran qui demande un entier à l’utilisateur, teste si ce nombre est
strictement positif, nul ou strictement négatif, et affiche ce résultat.
SolProgramme fortran : program positif
INTEGER A
write(*,*)’ entrer la valeur de A ’ read(*,*) A
IF (A.GE.0) then write(*,*)’ positif ’ ELSE
IF (A.EQ.0) then write(*,*)’ nul ’ ELSE
write(*,*)’ négatif ’ END IF
END END
34
I. Structures de contrôle conditionnel : I.2 Le Test If
12.3 Tests Imbriques
Plusieurs structures conditionnelles peuvent être imbriquées, si bien que dans une structure peut (peuvent) figurer une ou plusieurs structure(s) conditionnelle(s), et les tests peuvent avoir un degré quelconque d'imbrications.
Exemple :
Ecrire un programme fortran qui demande à l’user la température de l’eau et afficher son état
(solide, liquide, vapeur).
Solution
program températureH2O INTEGER T
write(*,*)’ entrer la valeur de T
’
read(*,*) T
IF (T.LE.0) then
write(*,*)’ C’’est de la glace ’ ELSE
IF (T.LT.100) then write(*,*)’ C’’est du liquide ’
ELSE
write(*,*)’ C’’est de la vapeur ’
END IF END
35
I. Structures de contrôle conditionnel : I.3 Instruction SELECT CASE
Une instruction SELECT CASE, souvent appelée instruction CASE, est utilisée pour comparer une
valeur donnée avec des constantes présélectionnées et prendre une action en fonction de la première constante à faire correspondre. Une instruction case peut être pratique pour choisir entre une série de possibilités ou de cas différents.
La variable ou l'expression de requête de sélection doit être de type entier, caractère ou logique. Un type réel n'est pas permis
Le format général de l'instruction SELECT CASE est:
select case (variable) case (selecteur1)
< instruction (s) fortran1 >
case (selecteur2)
< instruction (s) fortran2 >
case (selecteur n)
< instruction (s) fortran n >
case default
< instruction (s) fortran par defaut>
end select
36
I. Structures de contrôle conditionnel : I.3 Instruction SELECT CASE
où <instruction (s) fortran -1>,…. instruction (s) fortran-n> et <instruction(s) fortran par defaut> sont des séquences d'une ou de plusieurs instructions exécutables. Les sélecteurs-1,... et sélecteur-n sont appelés listes de sélection.
Exemple : le nombre de jours de mois Program mois
integer :: nmois, nbrjours,year
write (*,*)’’entrer le numero de mois et l’’année’’
read(*,*) nmois ,year select case (nmois) case (1,3,5,7,8,10,12) nbrjours = 31
case (2)
if (mod(year,4)==0) then nbrjours = 29
else
nbrjours = 28 end if
case (4,6,9,11) nbrjours = 30 case default
write (*,*) "Error, numéro n’est pas valide."
37
I. Structures de contrôle conditionnel : I.3 Instruction SELECT CASE
pour un intervalle de valeurs , la syntaxe est comme suite Selecte case (variable de test)
Case(valeur min: valeur max) instructions…..
exemple : selon la note on classe deux grades select case (note)
Case (90:)
write (*,*) "Grade is: A"
case(80:89) ! veut dire que 80<= note >= 89 write (*,*) "Grade is: B«
End select
Mme BELALIA.A 38