Programmation FORTRAN

Transcription

Programmation FORTRAN
Entrées / Sorties
Par défaut:
Programmation FORTRAN
– Saisie
read (*,*) VARIABLE
– Affichage
write (*,*) expression [,expr…]
write (*,*) ’message’ [,expr…]
La 1ère * indique le périphérique par d éfaut
– read : saisie au clavier
– write : affichage à l’écran
La 2ème * indique un format libre pour la saisie
ou l’affichage des donn ées.
Entrées / Sorties
Échanges avec l’extérieur
– Saisie
read (*,format[,iostat=VAR1]) VAR2,…
– Affichage
write (*,format[,iostat=VAR1]) VAR2,…
format : label où est défini le format des
données à saisir ou à afficher.
iostat (I/O status ) : variable indiquant le statut
de l’opération d’entrée/sortie.
Formatage
Contenu de l’instruction format
– Chaînes de caractères entre ’’
– Codes de format pour contrôler la
présentation:
nX
n: entier >0
Crée n espaces après la position courante
Positionnement relatif
Tn
n: entier >0
Place le curseur à la colonne n (tabulation)
Positionnement absolu
Formatage
write(*,100)
100 format( … )
Le format est spécifié après un label:
– étiquette numérique de 5 chiffres maximum
– repère dans le programme
Ce label est situé au début d’une autre
ligne de programme.
Formatage
Code de format pour un entier
Iw[.d]
w (width) : nombre de caractères pour
écrire les entiers, cadrés à droite
d : sert à contrôler la possibilité de placer
des 0 à gauche
1
Formatage
Code de format pour un entier
Iw[.d]
Exemple:
N=123
write(*,100) N
100
format(’ Résultat:’,I7)
sortie: ‘Résultat:’ puis 4 espaces puis 123:
Résultat:
123
Formatage
Code de format pour un entier
Iw[.d]
Si le nombre ne peut être représenté avec
le format donné:
– Exemple : 1234 avec format(I3)
Message d’erreur %FOR-E-OUTCONERR à
l’exécution (Fortran : output conversion error)
Erreur non fatale: la valeur ne peut être affichée,
mais le programme continue son exécution.
Formatage
Code de format pour un entier
Iw[.d]
on doit écrire au minimum d chiffres, et au maximum w.
Exemple: valeur 12 avec I6.3
sortie: 3 espaces puis 012
Par défaut: Iw óIw.1
le 0 n’est affiché que pour n=0
Iw.0
si n=0, la valeur n’est pas affichée.
Formatage
Code de format pour un r éel
Fw[.d]
w : taille d’affichage = nombre de chiffres entiers + 1
(pour le point) + nombre de décimales
d : nombre de décimales
Exemple: valeur 12.34 avec format(F7.3)
– sortie : 1 espace puis 12.340
– 7 caractères ó 3 chiffres maximum avant la virgule
(2 pour les nombres négatifs) et 3 décimales.
– Ici, un nombre plus de 3 décimales est arrondi à 3
décimales.
– Un nombre positif dont la partie entière contient plus
de 3 chiffres ou un nombre négatif à plus de 2 chiffes
ne peut être écrit: %FOR-E-OUTCONERR%
Formatage
Code de format pour un nombre à exposant
Ew[.d]
– w: taille d’affichage
– d: nombre de décimales
Le nombre est toujours affiché avec une
mantisse inférieure à 1, donc 0,xxEyy
Exemple: E8.2 (8 caractères au total)
– espace après le E si l ’exposant est positif
0,25E 12
– Signe – si l ’exposant est négatif
0,25E-12
Formatage
Chaînes de caractères
A[w]
– w: longueur facultative
Valeurs entières en octal
Ow[.d]
Valeurs entières en hexadécimal
Zw[.d]
Le fonctionnement du format est le même pour
les entiers en décimal, en octal et en
hexadécimal.
2
Carriage control character
Caractère servant à commander le
comportement du retour chariot (retour à la
ligne) lors de l’affichage d’une ligne.
Le 1er caractère d’une ligne écran n’est jamais
affiché, mais interprété comme un saut de ligne:
Espace
simple interligne
0
double interligne
1
saut de page
+
surimpression
autre
simple interligne
Carriage control character
Pour ne pas passer à la ligne suivante
après l’affichage d’un message:
write (*,300)
300 format (’Entrez N: ’,$)
read (*,*) N
La saisie de N se fait alors sur la même
ligne que l’affichage du message
précédent.
Exemple
Affichage des nombres de 1 à 99 et de
leurs carrés:
do I=1,99
write (*,100) I, I*I
100
format(I2,5X,I4)
end do
2 caractères pour I, puis 5 espaces, puis 4
caractères pour I2.
Exemple
Affichage des nombres de 1 à 99 et de leurs
carrés:
100
format(I2,5X,I4)
Résultat:
1
1 1er caractère: carriage control character
L’espace indique un simple interligne
…
10
100 Problème de carriage control character !
…
Le 1 indique un saut de page
Solution : mettre un espace en début de format
100
format(X,I2,5X,I4)
Exemple
Affichage des nombres de 1 à 99 et de leurs
carrés:
100
format(I2,5X,I4)
Résultat:
1
1
2
4
…
10
100
…
99
9801
5 espaces
Contrôle d’erreur
Le contrôle d’erreur est particulièrement
utile pour vérifier le format d’une saisie, et
éviter l’interruption du programme en cas
d’erreur.
Le statut d’erreur est indiqué par une
variable iostat, de type entier.
3
Contrôle d’erreur
Sans contrôle d’erreur:
integer*4 N
…
read (*,*) N
– Si la saisie est correcte (ici, des chiffres
seulement), N prend la valeur saisie.
– En cas d’erreur (ici, des lettres ou autres
caractères), le programme s ’arrête.
Contrôle d’erreur et formatage
Il est possible d’utiliser le formatage et le
contrôle d’erreur ensemble:
– Pour vérifier que les données saisies
correspondent à une syntaxe donnée
– Pour vérifier que les données peuvent être
affichées avec le format demandé sans erreur
Contrôle d’erreur
Avec contrôle d’erreur:
integer*4 N,IOS
…
read (*,*,iostat=IOS) N
– Si la saisie est correcte (chiffres seulement), N prend
la valeur saisie, et IOS=0.
– En cas d’erreur de saisie, le programme peut
continuer, mais N ne change pas de valeur, et IOS
prend une valeur supérieure à 0.
– En cas d’annulation de la saisie (avec la touche F10),
N ne change pas de valeur, et IOS=-1.
Tableaux (arrays)
Un tableau est une variable contenant des
valeurs multiples de même type.
Le nombre de valeurs doit être connu à
l’avance, dès la déclaration.
integer*4 T(10)
– Tableau de 10 entiers de 4 octets chacun
Un tableau peut avoir plusieurs dimensions:
integer*4 M(10,20)
– Matrice à 2 dimensions : 10 lignes et 20 colonnes.
– Un tableau peut avoir jusqu’à 7 dimensions.
Tableaux
Tableaux
Chaque élément d’un tableau est
référencé par un indice (numéro de
l’élément dans le tableau).
Par défaut: integer*4 T(10)contient
10 éléments numérotés de 1 à 10.
On peut spécifier une autre numérotation:
real*4 X(-5:4)
La numérotation peut être différente pour
chaque dimension
real*4 Y(-3:2,-5:4)
1ère dimension de -3 à 2
2ème dimension de -5 à 4
10 éléments réels, numérotés de -5 à 4
4
Tableaux (arrays)
Pour désigner un élément d’un tableau
– Dans une expression, T(I) désigne l’élément
d’indice I du tableau
– L’indice (subscript) I est toujours un entier
– S’il y a dépassement d’indice:
%SYSTEM-F-SUBRNG : subscript out of range
Erreur fatale: le programme s’arrête
Tableaux
Initialisation
integer*4 T(3) /2,-1,1/
T contient 2 , -1 , 1
T(1)=2 T(2)=-1
T(3)=1
Par défaut, tous les éléments d’un tableau sont
initialisés à 0.
integer*4 T(3)
T contient 0, 0 , 0
Si l’initialisation est incomplète, le tableau est
complété par des 0.
integer*4 T(3) /2,-1/
T contient 2 , -1 , 0
Tableaux
Initialisation d’un tableau à 2 dimensions
integer*4 T(3,2) /1,2,3,4,5,6/
Tableaux
Mise à 0 de tous les éléments d’un tableau
à deux dimensions:
real*4 T(10,20)
…
do I=1,10
do J=1,20
T(I,J)=0
end do
end do
Tableaux
Mise à 0 de tous les éléments d’un tableau
à une dimension:
real*4 T(10)
…
do I=1,10
T(I)=0
end do
Produit de matrice
integer*4 I,J,K
real*4 A(10,10)
real*4 B(10,10)
real*4 C(10,10)
On veut que la matrice C soit le produit des
matrices A et B:
n
cij = ∑ aik .bk j
k =1
5
Produit de matrice
Paramètres de programme
do I=1,10
do J=1,10
C(I,J)=0
do K=1,10
C(I,J)= C(I,J)+A(I,K)*B(K,J)
end do
end do
end do
Lors des déclarations, il est possible de
définir des paramètres, qui sont des
constantes utilisables dans tout le
programme.
integer*4 N
parameter (N=10)
La valeur de N ne peut plus être changée
dans les autres instructions du
programme.
Paramètres de programme
Paramètres de programme
integer*4 N
parameter (N=10)
Ce type de paramètre est à utiliser pour
des valeurs qui interviennent à plusieurs
endroits du programme.
– Exemple: taille d’un tableau
integer*4 T(N)
Produit de matrice
En utilisant des paramètres:
integer*4 M,N,P,I,J,K
parameter(M=10)
parameter(N=10)
parameter(P=10)
real*4 A(M,N)
real*4 B(N,P)
real*4 C(M,P)
Avantage: si l’on a besoin de modifier la
valeur du paramètre, une seule ligne est à
modifier.
Sans paramètre, il faudrait rechercher
toutes les lignes où la taille apparaît «en
dur» (sous forme de constante
numérique):
èRisque de ne pas modifier les bonnes lignes,
ou d’en oublier.
èCause de bugs du programme.
Produit de matrice
do I=1,M
do J=1,P
C(I,J)=0
do K=1,N
C(I,J)= C(I,J)+A(I,K)*B(K,J)
end do
end do
end do
6

Documents pareils