Programmer en Fortran

Les types de données

Les différents types

o Integer :
Nombres entiers
Valeurs positives ou négatives entre des limites qui dépendent de la machine
Real :
Nombres réels
Valeurs positives ou négatives, ayant une partie fractionnaire, entre des limites qui dépendent de la machine
Complex :
Nombres complexes composés d’une partie réelle et d’une partie imaginaire, toutes deux de type réel
Logical
Valeurs booléennes ou logiques ne prenant que deux valeurs: vrai (true) ou faux (false)
Character :
• Chaînes d’un ou plusieurs caractères 16

Le type INTEGER

Représentation des nombres entiers relatifs (complément à 2 )
Limite en fonction de la machine
16 bits (2 octets): -32.768 ≤ i ≤ 32.767
32 bits (4 octets): -2.147.483.648 ≤ i ≤ 2.147.483.647
Pour introduire une constante entière, il suffit de l’écrire sous sa forme décimale habituelle avec ou sans signe:
+533 48 -2894
Il est également possible de l’écrire en base 2, 8 ou 16:
B’0110101110′
O’025472′
Z‘FA0FA’
Le type REAL : Représentation en mémoire
Virgule flottante normalisée
Le nombre A se décompose sous la forme: A = m*bc tel que 1/b ≤ m < 1
m est la mantisse (nombre algébrique à partie entière et partie décimale) o b est la base du système de numérotation (système binaire)
o c est l’exposant ou caractéristique (nombre algébrique entier)
-123.135 = -0.123135 103
+84.0 = +0.84 102
Erreur de troncature
Utilisateur : entrées/sorties en base décimale
• Ordinateur : travail en base binaire
Le typepe REALREAL donnedonne une reprepréésentationsentation approchochééee desdes nombresbres rrééels!els!

Le type REAL : Limite de représentation

o Réel simple précision
Motif binaire de la forme
Nombre représenté : r = s1.m 2e-127
32 bits (4 octets): 1.2 10-38 ≤ |x| ≤ 3.4 1038
Précision : 7 chiffres significatifs
Réel double précision
Motif binaire de la forme
Nombre représenté : r = s1.m 2e-1023
64 bits (8 octets): 2.2 10-308 ≤ |x| ≤ 1.8 10308
• Précision : 16 chiffres significatifs 19
Le type REAL : Notation des constantes
Les constantes de type réel s’écrivent indifféremment suivant l’une des deux notations:
Décimale (doit comporter obligatoirement un .)
12.43 -0.38 .38 4. -.27
Exponentielle (utilisation de la lettre e, le . peut être absent)
4.25E4 4.25e+4 425e2
0.54e-2 5.4e-3
48e13 48.e13 48.0e13
En double précision (codage 8 octets), les constantes s’écrivent obligatoirement sous forme exponentielle en utilisant la lettre d à la place de e.
4.25D4 4.25d+4 425d2

Les types implicites

Fortran 90 ne rend pas obligatoire les déclarations des types des variables. Fortran attribue implicitement un type à une variables non définies en fonction de la première lettre:
I, J, K, L, M, N représentent des types INTEGER
Les autres représentent des types REAL
Plus néfaste qu’utile
integer :: nbre = 5, k
……
k = nbr + 1
nbr auu lieulieu dede nbrenbre nene sera paspas ddéétecttectééparpar lele compilateurpilateur
Solution : Supprimer les types implicites
implicit none

Le Type COMPLEX

Pour Fortran, un nombre complexe est un couple de nombres réels.
En mémoire, le type complex est représenté par deux nombres de type real.
Les constantes de type complex
(2.5,3.e2) 2,5 + 300i
( partie_reelle, partie_imaginaire )
(0.,1.) i
L’assignation
complex :: z
real :: x,y
variable = cmplx(variable_r,variable_i)
……
z = cmplx(x,y)

Le type LOGICAL

Déclaration des variables numériques et logiques (1)
<type> [ [,<attribut(s)>] :: ] <variable> [=<value>]
Type:
INTEGER[([KIND=] variante)]
REAL[([KIND=] variante)]
COMPLEX[([KIND=] variante)]
LOGICAL[([KIND=] variante)]
DOUBLE PRECISION
Attribut:
parameter, public, private, pointer, target, allocatable, optional, save, external, intrinsic, intent, dimension
Si <attribut(s)> ou =<value>, le :: est obligatoire

Déclaration des variables numériques et logiques (2)

integer :: nbre = 5, k
real a
real :: c,d,e
interger, parameter :: maxat=100
integer,parameter :: at_xyz=3*maxat
real,dimension(3) :: a_vec,b_vec
logical :: converged=.FALSE.
complex(kind=4) :: z=(1.0,0.1)
Les expressions constantes
Fortran permet de définir une « constante symbolique », un symbole auquel on attribue une valeur qui ne pourra être modifiée par le programme
<type>, parameter :: <variable(s)> = <value>
interger, parameter :: n1=50, n2=120
integer,parameter :: nbv=abs(n1-n2)+1
Conseillé:
si la variable ne change pas lors de l’exécution du programme
pour rendre un code plus lisible (pi, deux_pi, …)
pour rendre un code plus facile à modifier (dimension d’une matrice)

Les types de données paramétrisés (1)

Ils assurent la portabilité de la précision numérique
Les compilateurs supportent au moins deux sortes de réels, identifiés par un nombre entier (nombre d’octets utilisés pour la représentation de ces réels)
real(kind=4) :: x !simple précision
real(kind=8) :: y !double précision
Le kind de constantes littérales se note par exemple 3.5_8
RQ : tous les compilateurs ne codent pas forcément la simple et la double précision avec kind=4 et kind=8
Pour faciliter la conversion de tout un programme d’un kind vers un autre, on définit
integer,parameter :: r=4
real(kind=r) :: x,y=2._r
Détermination « propre » d’un kind:
selected_int_kind(r): valeur de la première sorte d’entiers disponibles capables de représenter les entiers de -10r à 10r (r=range)
selected_real_kind(p,r): valeur de la première sorte de réels disponibles capables de représenter les réels ayant au moins p chiffres décimaux significatifs (p=precision) de -10r à 10r (r=range)
Si la précision n’est pas disponible, les fonctions retournent la valeur -1
Exemple:
x et y ont 15 chiffres significatifs et peuvent prendre des valeurs comprises entre -1070 et 1070
integer,parameter :: r=selected_real_kind(15,70)
real(kind=r) :: x,y=2._r

Déclaration du Type CHARACTER

character[(len=<longueur>)] [,<attribut(s)>] [::] <variable> [=<value>]
Longueur:
Expression entière ou * (déduction par le compilateur de la longueur)
character(len=10) :: nom
character :: oui_ou_non
character(len=5) :: ville=’Namur’
character(len=8) :: town=’Namur’ !Padded right
character(len=8) :: capitale=’Bruxelles’ !Truncated
character(len=*),parameter :: lang=’F90′ !Assumed length

Les expressions et l’instruction d’affectation

Introduction

L’instruction d’affectation se présente sous la forme:
<variable> = <expression>
Expression peut faire intervenir
des opérateurs comme la division entière, l’exponentiation,…
plusieurs opérateurs et, donc, des problèmes de priorité
des variables de types différents, ce qui engendre des conversions implicites
une variable ayant un type différent du résultat fourni par l’expression engendre des conversions forcées
La valeur d’une expression est entièrement évaluée avant d’être affectée

Expressions arithmétiques : Opérateurs usuels

Quatre opérateurs dyadiques :
Addition : +
Soustraction : –
Multiplication : *
Division : / (Pas de division par zéro!)
Un opérateur monadique :
Opposé : –
Le résultat de la division entre deux entiers est un entier (partie entière du quotient exact).

1. Généralités sur le Fortran 90
2. Les types de données
3. Les expressions et l’instruction d’affectation
4. Les instructions de contrôle
5. Les tableaux
6. Les opérations de lecture et d’écriture
7. Les procédures
8. Les modules
9. Les structures ou types dérivés
10. La librairie graphique DFLIB
11. Les procédures : Notions avancées
12. Les modules : Notions avancées
13. Les pointeurs
14. Notions d’optimisation
15. Exécution en lignes de commandes

Cours gratuitTélécharger le cours complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *