Batata
Batata
Batata
Chapitre III
Eléments de base du langage FORTRAN
1. Introduction :
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. 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).
Dans un cas simple, sur un compatible PC, on écrit le programme que nous appellerons par
exemple PROG.FOR texte. On sauvegarde le fichier source sur le disque dur en lui donnant un
nom respectant les conditions du système d'exploitation utilisé.
15
Chapitre III Eléments de base du langage FORTRAN
Attention : Le non respect de l'usage de ces quatre groupes de colonnes est une cause fréquente
d'erreurs que commet un débutant.
Remarques
¾ Les compilateurs FORTRAN 90 admettent le format libre de ligne. Aucune colonne n’est
réservée, un commentaire commence par un point d’exclamation, la colonne 72 n’est plus
une limite, le fait de préciser .f90 pour l’extension d’un fichier source au lieu de .for,
implique l’utilisation du format libre.
¾ Lorsque le caractère C ou * figure dans la première colonne, la ligne entière est supposée
être un commentaire, et le compilateur l'ignore. Une ligne vide est également considérée
comme commentaire par le compilateur.
¾ Il est conseillé de faire usage autant que possible des commentaires, afin de rendre le
programme plus lisible.
16
Chapitre III Eléments de base du langage FORTRAN
¾ Il est possible, en FORTRAN 90, de placer plusieurs instructions par ligne, à condition de
les séparer par des points-virgule, mais réservez cette possibilité uniquement aux
affectations d'initialisation.
3. Constantes et Variables
3.1. Constantes :
C’est une quantité dont la valeur numérique est fixée et ne peut plus être modifiée pendant
l’exécution du programme. Les constantes que nous étudierons sont :
. TRUE. . FALSE.
17
Chapitre III Eléments de base du langage FORTRAN
3.1.6. Constantes caractères : c’est une suite de caractères alphanumériques ou spéciaux
encadrés par deux apostrophes. L’apostrophe à l’intérieur d’une chaîne de caractères est doublée.
Attention : Le français fait un usage courant de l'apostrophe, ceci peut poser un problème lors
de l'affichage de certains messages.
Exemples:
WRITE(*,*)'SAMEDI 22 JANVIER 2005'
18
Chapitre III Eléments de base du langage FORTRAN
Remarques :
On pourra déclarer alphanumériques toutes les variables dont le nom commencera par la lettre C
en mentionnant en début de programme la déclaration suivante:
IMPLICIT CHARACTER (C)
Dans cette déclaration les chaînes sont déclarées de longueur 1. Or dans la plupart des cas,
notamment dans les programmes orientés gestion, il est intéressant de pouvoir manipuler des
mots. On peut déclarer des variables alphanumériques de longueur différente de 1 en écrivant:
CHARACTER *20 NOM,PRENOM
NOM et PRENOM sont deux chaînes de caractères pouvant comporter au plus 20 caractères.
On peut également déclarer plusieurs variables comme étant de longueurs différentes:
CHARACTER*8 NOM1, NOM2, ORIGIN*15, NOM3
Attention dans l'exemple ci-dessus, NOM1, NOM2 et NOM3 ont une longueur maximale de 8
caractères, et ORIGIN est défini comme étant de longueur 15.
Généralement, on place la déclaration CHARACTER après la déclaration IMPLICIT.
Il faut prévenir le compilateur de la place mémoire à réserver à une variable indicée à l'aide de
l'instruction DIMENSION.
Exemple:
DIMENSION ELEM(20,20), X(20)
+ Addition
- Soustraction
* Multiplication
/ Division
** Exponentiation
19
Chapitre III Eléments de base du langage FORTRAN
Pour le calcul des expressions arithmétiques, une priorité est établie entre les opérateurs
arithmétiques. L’évaluation d’une expression arithmétique se fait selon l’ordre de priorité
suivant :
− évaluation à une puissance (**).
− multiplication et division (*, /).
− addition et soustraction (+, -).
Le langage FORTRAN permet aussi l’utilisation des parenthèses de façon conventionnelle. Plus
précisément, les parenthèses sont prioritaires sur toutes les opérations arithmétiques et c’est le
couple de parenthèse le plus interne qui est traité le premier.
Les opérations arithmétiques simples sont évaluées de la gauche vers la droite. Par contre, deux
exponentiations successives sont évaluées de la droite vers la gauche.
FORTRAN 77 FORTRAN 90
.GT. Plus grand que (Greater than) >
.GE. Plus grand ou égal que (Greater than or equal to) >=
.EQ. Egal à (Equal to) ==
.NE. Différent de (Not equal to ) /=
.LE. Inférieur ou égal à (Less than or equal to) <=
.LT. Inférieur à (Less than) <
.TRUE. VRAI
.FALSE. FAUX
SIN sinus
COS cosinus
ALOG logarithme népérien
EXP exponentielle
SQRT racine carrée
ATAN arc tangente
TANH tangente hyperbolique
ABS valeur absolue d'un réel
IABS valeur absolue d'un entier
FLOAT convertit d'entier à réel
IFIX convertit de réel à entier
20
Chapitre III Eléments de base du langage FORTRAN
Exemples :
ABS (a − b ) + c / sin( d )
c
¾ a−b + ⇒
sin d
e x+ y
¾ ⇒ EXP( x − y ) / (x + y )
x+ y
Remarques
- Pour éviter les erreurs d’interprétation, il est conseillé d’utiliser les parenthèses.
- Dans une expression arithmétique sans parenthèse qui comprend des fonctions de la
bibliothèque, l’évaluation de ces fonctions est prioritaire sur les règles énoncées
précédemment.
4.4. Conversion de type dans une opération
Le compilateur ne sait faire des opérations arithmétiques (+ - * / **) que sur des valeurs codées
de la même manière. Si vous lui demandez un calcul entre deux variables de type différent, le
compilateur doit avant tout en convertir une pour qu'elles soient de même type. Il sait convertir
automatiquement un entier en réel et un réel en double précision. Donc, suivant le type des deux
opérandes, le résultat de l'opération sera : Donc, suivant le type des deux opérandes, le résultat
de l'opération sera :
integer real double précision
Exercice 1
Ecrire les expressions logiques suivantes en FORTRAN77
A≥B X<Y et Z>W X#Y
Exemple
PARAMETER (u=l0)
READ(u,*)((a(i,j),i=1,l0),=l,5)
22
Chapitre III Eléments de base du langage FORTRAN
Exemples
READ*,x,y
READ*,I,J,K,FIN
A l’exécution on introduit les valeurs de I,J,K,FIN séparées par une virgule ou un espace
Soit , par exemple
5, 20,10, 300.5E- 05
¾ deuxième syntaxe avec format libre
La lecture se fait à partir de l’unité logique.
READ(u,* [,liste de spécifications])liste
Avec:
u : numéro d’unité logique.
23
Chapitre III Eléments de base du langage FORTRAN
Exemples
Lecture d’une matrice
READ(5,*)(A(I,J),I=1,10), J=1,15)
Lecture d’un vecteur
READ(7,*)(X(I),I=1,100)
Lecture des variables
READ(1,*)A,B,C
24
Chapitre III Eléments de base du langage FORTRAN
Avec:
Exemple
DELTA = B*B-4*A*C
IF (DELTA) 10,20,30
Nous pouvons la représenter comme ci-contre:
IF (Explog) instExéc
Avec :
Explog: expression logique
InstExéc : instruction exécutable. Elle n’est exécutée que dans le cas ou l’évaluation de
l’expression logique st vraie. Elle est décrite par l’organigramme suivant:
L’instruction peut être n’importe quelle instruction FORTRAN sauf les instructions IF , DO ,
END.
IF (condition) THEN
traitement-l
ELSE
traitement-2
ENDIF
Si la condition est vraie, alors seulement le traitement-1 est exécuté, sinon c’est à dire si la
condition est fausse, alors seulement le traitement-2 est exécuté.
25
Chapitre III Eléments de base du langage FORTRAN
Example
IF (DELTA.LT.0.) THEN
PRINT *, ‘RACINES COMPLEXES’
ELSE IF (DELTA.EQ.0.) THEN
PRINT*, ‘RACINE DOUBLE’
ELSE
PRINT *, ‘ RACINES REELLES’
ENDIF
30 READ*,I
....
5.6.2. GOTO calculé
Sa syntaxe est: GOTO (nl,n2 ...... ni),I
26
Chapitre III Eléments de base du langage FORTRAN
Exemple
Calcul de l a somme des éléments de la diagonale d’une matrice carrée :
dimension a(6,6)
read(5,*) n
do 10 i=1,n
10 read(5,*) (a(i,j),j=1,n)
s=0
do 20 i=1,n
s=s+a(i,i)
20 continue
write (6,*) s
stop
end
¾ Remarques
Si l’incrément est 1, il peut être entièrement omis. par exemple :
DO 100 I=1,N,1 peut être écrit sous la forme abrégée DO 100 I=1,N
il est possible qu’une boucle DO (la boucle DO intérieure) soit comprise totalement dans une
autre boucle DO (la boucle extérieure). Les boucles DO construite de cette façon sont
appelées boucles DO imbriquées, le nombre de boucles DO imbriquées est limité par le
compilateur. Dans l’écriture des boucles imbriquées, les variables de contrôles des boucles
doivent être différentes.
L’instruction CONTINUE ne donne naissance à aucun ordre, elle sert simplement pour des
transferts entraînant une, nouvelle itération DO.
Pour certaines commandes (telles que READ, PRINT, WRITE), il est parfois pratique
d'utiliser des boucles itératives implicites. Pour la lecture des coefficients d'un tableau A de
dimension 10*20, cela donnerait : READ *,((A(I,J),I=1, 10),J=1,20)
27
Chapitre III Eléments de base du langage FORTRAN
5.10. Gestion des entrées/sorties
a- Les Fichiers
Il sera intéressant d'envoyer certains résultats dans des fichiers, pour une utilisation ultérieure
par un programme différent. Ces fichiers seront soit des fichiers d'entrée, soit des fichiers de
sortie. Lorsque les résultats d'un programme sont nombreux, il est agréable de pouvoir les
consulter dans un fichier, à l'aide d'un éditeur de texte.
b- Ouverture d'un fichier
L’instruction standard d'ouverture de fichier a généralement la forme suivante :
OPEN(unite, FILE = 'nom du fichier', STATUS =
'OLD'
'NEW'
'UNKNOWN')
• Unite : est un entier représentant l'identificateur de fichier.
• Nom du fichier est une chaîne de caractères représentant le nom du fichier.
• Status est une chaîne de caractères pouvant prendre les valeurs suivantes :
o OLD pour ouvrir un fichier qui existe déjà. Par exemple pour lire des données
dans un fichier.
o NEW pour ouvrir un nouveau fichier ou écraser un fichier dont les données ne
sont plus utiles.
o UNKNOWN. C'est la valeur par défaut. Si le fichier existe, il est ouvert, sinon, un
nouveau fichier est créé.
INTEGER X1,X2,X3
READ(*,60)X1,X2,X3
60 FORMAT(I2,I4,I3)
Nous faisons entrer par le biais du clavier le nombre : un blanc suivi de 58234651, l’attribution
sera ainsi faite:
Xl = un blanc suivi de 5
X2 = 8234
X3 = 651
¾ Le descripteur F
II est utilisé pour la représentation des nombres de type réel en point fixe simple précision.
Sa forme générale est:
[m]Fn.d
Avec:
28
Chapitre III Eléments de base du langage FORTRAN
m : répétiteur
n : représente la longueur totale occupée par le nombre à entrer ou à imprimer.
d : représente le nombre de chiffres à imprimer après la virgule.
Pour ne pas avoir de dépassement de capacité, la relation suivante doit être satisfaite:
n = d+p+2
Avec:
n et d comme précédemment.
p : nombre de caractères de la partie entière.
Exemple
Au nombre : +53.127 on associe le Format : F7.3
¾ Le descripteur E
Il est utilisé pour la représentation des nombres de type réel en point flottant simple précision
avec exposant en entrée-sortie.
Sa forme générale est:
[m]En.d
m :répétiteur
n: représente la longueur totale occupée par le nombre à lire ou à imprimer.
d : indique le nombre de positions après le point décimal
Avec : n>d+6
Exemple
U=-2.25267
WRITE(3,5)U
5 FORMAT(E11,3)
L’édition donnera: un blanc suivi de -0.225E+0l
¾ Le descripteur L
Il est utilisé pour le traitement des variables logiques.
Sa forme générale est: [m]Ln
Avec :
m : répétiteur
n: désigne le nombre de caractères qu’occupe la zone externe. Généralement, n est égal à 1.
A l’édition , à droite de la zone sera édité un T (TRUE) si la variable logique est vraie, sinon il
sera édité un F (FALSE).
¾ Le descripteur D
II est utilisé pour représenter des nombres en double précision.
Sa forme générale est: [m]Dn.d
Avec:
m : répétiteur
n et d : Voir le descripteur E.
La relation suivante doit être satisfaite : n ≥d+7
Exemple: Donner le format du nombre l.123456789D+l5
D15.9
¾ Le descripteur A
II est utilisé pour les variables de type caractère. Son intérêt est de permettre la lecture et
l’édition de chaînes de caractères.
Sa forme générale est: [m]An
m : répétiteur
n: longueur de la chaîne caractères.
Exemple
WRITE(l,6)X
6 FORMAT(A6)
Si X a pour valeur MATH, il sera édité comme suit: un blanc suivi de MATH. Le premier blanc
sera ignoré.
5.11.2. Les descripteurs de mise en page et d’édition
29
Chapitre III Eléments de base du langage FORTRAN
¾ Le descripteur X
Insère n blancs ou permet de sauter n caractères à la lecture.
Sa forme générale est: nX
Exemple
WRITE(3,5) R, P
5 FORMAT(1X,F8.7,5X,E14.7)
L’édition donnera : un blanc qui sera ignoré à l’édition suivi de 8 positions pour la valeur de R ,
suivi de cinq blancs suivi de 14 positions pour la valeur de P.
¾ Le descripteur ''
II permet l’édition de caractères non interprétés en sortie.
Exemple
WRITE(3,9) R
9 FORMAT(5X,'la valeur de R est:',F8.7)
A l’édition, nous aurons ‘la valeur de R est: ’ suivis de la valeur numérique de R sur 8
positions.
¾ Le descripteur H
Il permet d’éditer un texte.
Sa forme générale est : nH
n indique le nombre de caractère du texte à éditer après le H.
Exemple
WRITE (1,5)
5 FORMAT (lx,8HRESULTAT,/,1H,10(IH=))
6. Exemples
9 Transposition d’une matrice
dimension a(5,5),b(5,5)
read(*,*) n
do 10 i=1,n
10 read(*,*)(a(i,j),j=1,n)
do 20 i=1,n
do 20 j=1,n
c Transposition
b(j,i)=a(i,j)
20 continue
do 30 i=1,n
30 write(*,50)(b(i,j),j=1,n)
c 50 format(5(1x,f11.5))
stop
end
9 Somme de deux matrices
dimension a(4,4),b(4,4),c(4,4)
do 10 i=1,4
10 read(*,*)(a(i,j),j=1,4)
do 20 i=1,4
20 read(*,*)(b(i,j),j=1,4)
do 30 i=1,4
do 30 j=1,4
c(i,j)=a(i,j)+b(i,j)
30 continue
do 50 i=1,4
50 write(*,40)(c(i,j),j=1,4)
40 format (4(1x,e14.7))
stop
end
9 Produit de deux matrices
30
Chapitre III Eléments de base du langage FORTRAN
dimension a(30,40),b(40,50),c(30,50)
open(unit=5,file='dmat.dat',status='old')
open(unit=6,file='rmat.dat',status='unknown')
read(5,*)n,m,l
do 10 i=1,n
10 read(5,*)(a(i,j),j=1,m)
do 20 j=1,m
20 read(5,*)(b(j,k),k=1,l)
do 30 i=1,n
do 30 k=1,l
c(i,k)=0
do 30 j=1,m
c(i,k)=c(i,k)+a(i,j)*b(j,k)
30 continue
do 40 i=1,n
40 write(6,*)(c(i,k),k=1,l)
stop
end
9 Elément Max et Min d’un vecteur
dimension a(10)
read(5,*) (a(i),i=1,10)
rmax=a(1)
rmin=a(1)
c recherche du MIN et du MAX
do 35 i=2,10
if(rmax.le.a(i)) then
rmax=a(i)
else
if(rmin.ge.a(i)) then
rmin=a(i)
endif
endif
35 continue
write(6,40) rmax,rmin
40 format (1x,6hrmax= ,f10.4,2x,'rmin=',f10.4)
stop
end
9 lecture d’une matrice
dimension rr(3,3), r(3)
write(6,*) '---> r(i), i=1,3'
read(5,*)(r(i),i=1,3)
do 10 i=1,3
rr(i,i)=r(i)+r(i+1)
10 continue
do 20 i=1,3
rr(i,i+1)=-r(i)
rr(i+1,i)=-r(i)
20 continue
do 40 i=1,3
40 write(6,100) (rr(i,j),j=1,3)
100 format(3(1x,f12.6))
stop
end
31
Chapitre III Eléments de base du langage FORTRAN
Exercices
2.
Que donnera en sortie le programme suivant:
K= 1
JSOM=0
31 JSOM=JSOM+K**2
K=K+3
IF(K.LT.10) GOTO 31
PRINT*,JSOM
STOP
END
32
Chapitre III Eléments de base du langage FORTRAN
7. Les sous-programmes
Un sous programme est en réalité un petit programme indépendant qui peut être utilisé
(ou appelé) par le programme principal ou par d’autres sous-programmes. Deux types de sous
programmes sont disponibles dans le langage FORTRAN:
¾ Les sous-programmes, dans lesquels nous retrouvons les fonctions, définies par l’instruction
FUNCTION et les subroutines définies par l’instruction SUBROUTINE.
¾ Les fonctions formules, qui sont des fonctions mathématiques déjà définies, c’est a dire
reconnues par le compilateur.
Avec :
déclaration : instruction de déclaration explicite de type autre que CHARACTER; s’il est absent,
la déclaration est implicite.
nomfct: nom de fonction qui doit être différent de celui des fonctions de la bibliothèque de
FORTRAN. Ce nom doit apparaître au moins une fois dans un sous-programme FUNCTION,
soit a gauche du signe =, soit dans une instruction READ, soit dans une instruction d’appel de
sous-programme.
arg1, arg2,…., argn : arguments; ce sont des noms de variables simples ou indicées, de sous-
programmes ou de fonctions.
Les sous-programmes définis par l’instruction FUNCTION permettent d’écrire des séquences
d’instructions différentes de celles du programme principal.
La structure générale est:
[déclaration] FUNCTION nomfct(arg1[,arg2,.....,argn])
déclarations
instructions exécutables
END
La dernière instruction exécutable doit être RETURN
Sa syntaxe est:
[étiq] RETURN
Elle transmet le résultat numérique de la fonction au programme qui lui fait appel ainsi que le
retour à ce programme l’étiquette est rarement utilisable.
33
Chapitre III Eléments de base du langage FORTRAN
Le sous programme FUNCTION doit toujours contenir une instruction d’affectation qui affecte
une valeur au nom de la fonction.
Il faut remarquer que chacune des fonctions de bibliothèque ABS, SQRT, etc. calcule une valeur
chaque fois que l’argument correct lui est donné.
L’appel se fait en écrivant dans n’importe quelle expression mathématique, la syntaxe suivante:
Exemple
Supposons que trios examens et un examen terminal soient passés par une classe de 25 étudiants.
La note finale est calculée en faisant la moyenne de l’examen terminal et la plus haute note des
trois examens.
Le programme suivant qui utilise le sous-programme GR, calcule la note finale de chaque
étudiant.
DO 100 I=1,25
READ(*,*) ID, T1, T2, T3, FINAL
GRADE=0.5*(FINAL+GR(T1,T2,T3))
100 CONTINUE
STOP
END
par1, par2, pam : paramètres effectifs, qui peuvent êtres des constantes, des noms de variables
simples ou indicées, des expressions arithmétiques, des noms de sous-programmes.
Les sous-programmes définis par l’instruction SUBROUTINE permettent d’écrire des séquences
d’instructions différentes de celles du programme principal.
La structure générale est:
34
Chapitre III Eléments de base du langage FORTRAN
Exemples:
Pour l’élément poutre la matrice de rigidité est :
⎡ 12 6 L − 12 6 L ⎤
⎢ 6 L 4 L2 − 6 L 2 L2 ⎥
[K ]
e E.I
= 3 ⎢
L ⎢− 12 − 6 L 12 − 6 L ⎥
⎥
⎢ ⎥
⎣ 6L 2L
2
− 6 L 4 L2 ⎦
REAL KM(4,4)
:
:
:
READ(5,*)NXE
DO 10 IP=1,NXE
READ(5,*)EI,ELL
CALL BEAMKM(KM,EI,ELL)
10 CALL FORMKV (KV,KM,IKM,G,N,IDOF)
:
:
:
STOP
END
SUBROUTINE BEAMKM(KM,EI,ELL)
c THIS SUBROUTINE FORMS THE STIFFNESS MATRIX OF A
C HORIZONTAL BEAM ELEMENT(BENDING ONLY)
REAL KM(4,4)
KM(1,1)=12.*EI/(ELL*ELL*ELL)
KM(3,3)=KM(1,1)
KM(1,2)=6.*EI/(ELL*ELL)
KM(2,1)=KM(1,2)
KM(1,4)=KM(1,2)
KM(4,1)=KM(1,4)
KM(1,3)=-KM(1,1)
KM(3,1)=KM(1,3)
KM(3,4)=-KM(1,2)
KM(4,3)=KM(3,4)
KM(2,3)=KM(3,4)
KM(3,2)=KM(2,3)
KM(2,2)=4.*EI/ELL
KM(4,4)=KM(2,2)
KM(2,4)=2.*EI/ELL
KM(4,2)=KM(2,4)
RETURN
END
35
Chapitre III Eléments de base du langage FORTRAN
2. Programme de multiplication matricielle
PROGRAM MULT_MAT
C Programme de multiplication matricielle (3x3)
REAL A(3,3),B(3,3)
CHARACTER C
C Initialisation
DATA A,B/18*0.0/
C Corps du programme principal
PRINT*, 'Programme de multiplication matricielle'
10 PRINT*, ' '
PRINT*, 'Voulez-vous :'
PRINT*, '(1)- Entrer A'
PRINT*, '(2)- Entrer B'
PRINT*, '(3)- Afficher A'
PRINT*, '(4)- Afficher B'
PRINT*, '(5)- Calculer A*B'
PRINT*, '(6)- Sortir'
READ*, C
IF (C .EQ. '1') THEN
PRINT*, ' -> A '
CALL LIRE(A)
ELSEIF (C .EQ. '2') THEN
PRINT*, ' -> B '
CALL LIRE(B)
ELSEIF (C .EQ. '3') THEN
PRINT*, ' A ='
CALL ECRIRE(A)
ELSEIF (C .EQ. '4') THEN
PRINT*, ' B ='
CALL ECRIRE(B)
ELSEIF (C .EQ. '5') THEN
PRINT*, ' A*B -> B'
CALL MULTAB(A,B)
ELSEIF (C .EQ. '6') THEN
STOP
ELSE
PRINT*, 'Ordre non compris'
ENDIF
GO TO 10
END
C
C Procédure de lecture
SUBROUTINE LIRE(D)
REAL D(3,3)
INTEGER I,J
PRINT*, ' Entrez la matrice par ligne'
READ*, ((D(I,J), J=1,3), I=1,3)
RETURN
END
C Procedure d'affichage
SUBROUTINE ECRIRE(D)
REAL D(3,3)
INTEGER I,J
36
Chapitre III Eléments de base du langage FORTRAN
DO I=1,3
PRINT*, (D(I,J), J=1,3)
END DO
RETURN
END
C Procedure de multiplication
SUBROUTINE MULTAB(D,E)
REAL D(3,3),E(3,3)
REAL F(3,3)
INTEGER I,J, K
DO I=1,3
DO J=1,3
F(I,J) = 0
DO K=1,3
F(I,J) = F(I,J)+D(I,K)*E(K,J)
END DO
END DO
END DO
CALL TRANS(F,E)
RETURN
END
C Procedure de transfert
C
SUBROUTINE TRANS(D,E)
REAL D(3,3),E(3,3)
INTEGER I,J
DO I=1,3
DO J=1,3
E(I,J) = D(I,J)
END DO
END DO
RETURN
END
37
Chapitre III Eléments de base du langage FORTRAN
C DEFINIR LA FONCTION
G(X)=X*X-5.0*X+2.0
C CALCULER LES VALEURS FONCTIONNELLES
C
DO 100 J=1,20
VALEUR=G(FLOAT(J))
WRITE(5,*) J,VALEUR
100 CONTINUE
STOP
END
La fonction G est appelée une fonction arithmétique. Si un programme doit utiliser plusieurs fois
la même expression, cette expression sera écrite une fois en tête du programme.
La syntaxe générale d’une fonction formule est:
NF(pfl, pf2 , …….,pfn) = EAL
Avec:
NF: Nom de Fonction, construit selon les règles des variables.
pf1, pf2 ,pfn : paramètres formels de la fonction; ce sont des variables non indicées.
EAL : Expression Arithmétique ou logique.
Nous devons faire apparaître la définition de la fonction dans le programme avant toute
instruction exécutable.
EXERCICES
1.
Trouver les erreurs dans chacune des instructions des sous-programmes suivants :
(a) FUNCTION, ISUIV(A,B+C,X)
(b) SUBROUTINE NOUV(X Y,Z)
(c) SUBROUTINE (U,V,W)
2.
Trouver la sortie du programme suivant :
JF(M)=M**2-3*M+4
K=2
L=JF(k+2)
M=JF(L-3*K)+K
WRITE(6,10) K,L,M
10 FORMAT (1X,3(I10,2X))
STOP
END
3.
Définir une fonction instruction qui calcul R = u 2 + v 2 + w 2 et l’utilise pour calculer
x
A= , B = x 2 + y 2 + z 2 , C = 4x 2 + 9 y 2 + 4z 4
x +y +z
2 2 2
38
Chapitre III Eléments de base du langage FORTRAN
1.
Que donnera en sortie le programme suivant:
c PREMIER PROGRAMME RESOLU
J =1
K=3
L=2*J + K
J=3*J+2*L
K=K+2
L=J+K+L
PRINT*,J,K,L
STOP
END
Ligne 1. L’ordinateur ignore cette instruction puisqu’elle constitue un commentaire.
Ligne 2. L’ordinateur stocke 1 dans une case-mémoire appelée J
Ligne3. L’ordinateur stocke 3 dans une case-mémoire appelée K
Ligne4. L’ordinateur doit calculer 2*J+K, puis stocker le résultat dans une case-mémoire
appelée L. Puisque
2*J + K = 2 1 + 3 = 5
L’ordinateur stocke 5 en L
Ligne 5. L’ordinateur doit calculer 3*J + 2*L en utilisant les valeurs actuelles de J et de L, puis
substituer le résultat à la valeur actuelle de J. Ceci donne
39
Chapitre III Eléments de base du langage FORTRAN
3*J + 2*L = 3.1 + 2.5 = 13
L’ordinateur efface, donc, la valeur actuelle de J et la remplace par 13.
Ligne 6. L’ordinateur doit augmenter de 1 la valeur actuelle de K
Ligne 7. L’ordinateur additionne les valeurs actuelles de J, K, et L
J+K+L=13+5+5=23
Il efface alors la valeur actuelle de L et la remplace par 23
Ligne 8. L’ordinateur imprime les valeurs actuelles de J, K et L
13 5 23
Ligne 9. Fin de l'exécution.
40