Fortran - Sortie d'entrée de base

Nous avons jusqu'ici vu que nous pouvons lire des données à partir du clavier en utilisant le read * et affichez la sortie à l'écran à l'aide de print*déclaration, respectivement. Cette forme d'entrée-sortie estfree format I / O, et il est appelé list-directed entrée sortie.

Les E / S simples au format libre ont la forme -

read(*,*) item1, item2, item3...
print *, item1, item2, item3
write(*,*) item1, item2, item3...

Cependant, les E / S formatées vous offrent plus de flexibilité sur le transfert de données.

Sortie d'entrée formatée

La sortie d'entrée formatée a la syntaxe suivante -

read fmt, variable_list 
print fmt, variable_list 
write fmt, variable_list

Où,

  • fmt est la spécification de format

  • variable-list est une liste des variables à lire à partir du clavier ou à écrire à l'écran

La spécification de format définit la manière dont les données formatées sont affichées. Il se compose d'une chaîne contenant une liste deedit descriptors entre parenthèses.

Un edit descriptor spécifie le format exact, par exemple la largeur, les chiffres après la virgule décimale, etc., dans lequel les caractères et les nombres sont affichés.

Par exemple

Print "(f6.3)", pi

Le tableau suivant décrit les descripteurs -

Descripteur La description Exemple
je

Ceci est utilisé pour la sortie entière. Cela prend la forme «rIw.m» où les significations de r, w et m sont données dans le tableau ci-dessous. Les valeurs entières sont justi fi ées correctement dans leurs champs. Si la largeur du champ n'est pas assez grande pour accueillir un entier, alors le champ est rempli d'astérisques.

imprimer "(3i5)", i, j, k
F

Ceci est utilisé pour la sortie de nombres réels. Cela prend la forme «rFw.d» où les significations de r, w et d sont données dans le tableau ci-dessous. Les vraies valeurs sont justi fi ées dans leurs domaines. Si la largeur du champ n'est pas assez grande pour accueillir le nombre réel, alors le champ est rempli d'astérisques.

imprimer "(f12.3)", pi
E

Ceci est utilisé pour la sortie réelle en notation exponentielle. L'énoncé du descripteur «E» prend la forme «rEw.d» où les significations de r, w et d sont données dans le tableau ci-dessous. Les vraies valeurs sont justi fi ées dans leurs domaines. Si la largeur du champ n'est pas assez grande pour accueillir le nombre réel, alors le champ est rempli d'astérisques.

Veuillez noter que, pour imprimer un nombre réel avec trois décimales, une largeur de champ d'au moins dix est nécessaire. Un pour le signe de la mantisse, deux pour le zéro, quatre pour la mantisse et deux pour l'exposant lui-même. En général, w ≥ d + 7.

print "(e10.3)", 123456.0 donne '0.123e + 06'
ES

Ceci est utilisé pour la sortie réelle (notation scientifique). Cela prend la forme «rESw.d» où les significations de r, w et d sont données dans le tableau ci-dessous. Le descripteur «E» décrit ci-dessus diffère légèrement de la «notation scienti fi que» traditionnelle bien connue. La notation scienti fi que a la mantisse dans la plage de 1,0 à 10,0 contrairement au descripteur E qui a la mantisse dans la plage de 0,1 à 1,0. Les vraies valeurs sont justi fi ées dans leurs domaines. Si la largeur du champ n'est pas assez grande pour accueillir le nombre réel, alors le champ est rempli d'astérisques. Ici aussi, le champ width doit satisfaire l'expression w ≥ d + 7

print "(es10.3)", 123456.0 donne '1.235e + 05'
UNE

Ceci est utilisé pour la sortie de caractères. Cela prend la forme «rAw» où les significations de r et w sont données dans le tableau ci-dessous. Les types de caractères sont justi fi és dans leurs champs. Si la largeur du champ n'est pas assez grande pour accueillir la chaîne de caractères, alors le champ est rempli avec les premiers caractères «w» de la chaîne.

imprimer "(a10)", str
X

Ceci est utilisé pour la sortie d'espace. Cela prend la forme «nX» où «n» est le nombre d'espaces souhaités.

imprimer "(5x, a10)", str
/

Descripteur de barre oblique - utilisé pour insérer des lignes vides. Cela prend la forme «/» et force la sortie de données suivante à être sur une nouvelle ligne.

imprimer "(/, 5x, a10)", str

Les symboles suivants sont utilisés avec les descripteurs de format -

Sr.Non Symbole et description
1

c

Numéro de colonne

2

d

Nombre de chiffres à droite de la décimale pour l'entrée ou la sortie réelle

3

m

Nombre minimum de chiffres à afficher

4

n

Nombre d'espaces à ignorer

5

r

Nombre de répétitions - le nombre de fois où utiliser un descripteur ou un groupe de descripteurs

6

w

Largeur du champ - le nombre de caractères à utiliser pour l'entrée ou la sortie

Exemple 1

program printPi

   pi = 3.141592653589793238 
   
   Print "(f6.3)", pi 
   Print "(f10.7)", pi
   Print "(f20.15)", pi 
   Print "(e16.4)", pi/100 
   
end program printPi

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

3.142
3.1415927
3.141592741012573
0.3142E-01

Exemple 2

program printName
implicit none

   character (len = 15) :: first_name
   print *,' Enter your first name.' 
   print *,' Up to 20 characters, please'
   
   read *,first_name 
   print "(1x,a)",first_name
   
end program printName

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant: (supposons que l'utilisateur entre le nom Zara)

Enter your first name.
Up to 20 characters, please
Zara

Exemple 3

program formattedPrint
implicit none

   real :: c = 1.2786456e-9, d = 0.1234567e3 
   integer :: n = 300789, k = 45, i = 2
   character (len=15) :: str="Tutorials Point"
   
   print "(i6)", k 
   print "(i6.3)", k 
   print "(3i10)", n, k, i 
   print "(i10,i3,i5)", n, k, i 
   print "(a15)",str 
   print "(f12.3)", d
   print "(e12.4)", c 
   print '(/,3x,"n = ",i6, 3x, "d = ",f7.4)', n, d
   
end program formattedPrint

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

45
045
300789 45  2
300789 45  2
Tutorials Point
123.457
0.1279E-08

n = 300789 d = *******

La déclaration de format

L'instruction de format vous permet de mélanger et de faire correspondre les caractères, les entiers et les résultats réels dans une seule instruction. L'exemple suivant illustre ceci -

program productDetails 
implicit none 

   character (len = 15) :: name
   integer :: id 
   real :: weight
   name = 'Ardupilot'
   id = 1
   weight = 0.08
   
   print *,' The product details are' 
   
   print 100
   100 format (7x,'Name:', 7x, 'Id:', 1x, 'Weight:')
   
   print 200, name, id, weight 
   200 format(1x, a, 2x, i3, 2x, f5.2) 
   
end program productDetails

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

The product details are
Name:       Id:    Weight:
Ardupilot   1       0.08