Cours Fortran définition et déclaration de structures

Généralités

⇒ Structure d’un programme ⇒ Éléments syntaxiques
– Les identificateurs
– Le “format libre”
– Les commentaires
– Le “format fixe”
– Les déclarations
– Typage et précision des nombres : paramètre KIND ⇒ Compilation, édition des liens, exécution

Éléments syntaxiques

Les identificateurs

Un identificateur est formé d’une suite de caractères choisis parmi les lettres (non accentuées), les chiffres et le blanc souligné. Le premier d’entre eux doit être obligatoirement une lettre.
La longueur d’un identificateur est limitée à 63 caractères.
On ne distingue pas les majuscules des minuscules.
Attention : en “format libre”, les blancs sont significatifs.
Exemples d’identificateurs
• compteur
• Compteur
• fin_de_fichier
• montant_annee_1993
En Fortran 95 il existe un certain nombre de mots-clés(real, integer, if, logical, do, …), mais qui ne sont pas réservés comme dans la plupart des autres langages. On peut donc, dans l’absolu, les utiliser comme identificateurs personnels. Cependant, pou r permettre une bonne lisibilité du programme on évitera de le faire.

Le “format libre”

Dans le mode “ format libre” les lignes peuvent être de longueur quelconque à concurrence de 132 caractères.
Il est également possible de coder plusieurs instructions sur une même ligne en les séparant avec le caractère ; .
Exemple
print *, ‘ Entrez une valeur :’; read *,n
Une instruction peut être codée sur plusieurs lignes : on utilisera alors le caractère & .
Exemple
print *, ‘Montant HT :’, montant_ht, &
‘ TVA :’, tva , &
‘Montant TTC :’, montant_ttc
Lors de la coupure d’une chaîne de caractères la suite de la chaîne doit obligatoirement être précédée du caractère&.
Exemple
print *, ‘Entrez un nombre entier &
&compris entre 100 & 199’

Les commentaires

Le caractère ! rencontré sur une ligne indique que ce qui suit est un commentaire. On peut évidemment écrire une ligne complète ed commentaires : il suffit pour cela que le 1 ercaractère non blanc soit le caractère !
Exemple
if (n < 100 .or. n > 199) ! Test cas d’erreur
….
! On lit l’exposant read *,x
! On lit la base read *,y
if (y <= 0) then ! Test cas d’erreur
print *,’ La base doit être un nombre >0′
else
z = y**x ! On calcule la puissance
end if
Notez la nouvelle syntaxe possible des opérateurs logiques :
.LE. –> <= .LT. –> < .EQ. –> ==
.GE. –> >= .GT. –> > .NE. –> /=
Les opérateurs.AND., .OR., .NOT. ainsi que .EQV. et .NEQV. n’ont pas d’équivalents nouveaux.
Par contre, il n’est pas possible d’insérer un commentaire entre deux
instructions situées sur une même ligne. Dans ce cas la e2instruction
ferait partie du commentaire.
Exemple
i=0 ! initialisation ; j = i + 1
Attention :
C—– Commentaire Fortran 77
c—– Commentaire Fortran 77
*—– Commentaire Fortran 77
ne sont pas des commentaires Fortran 90 en “ format libre” et génèrent des erreurs de compilation.

Le “format fixe”

Le “ format fixe ” de Fortran 95 correspond à l’ancien format du Fortran 77 avec deux extensions :
• plusieurs instructions possibles sur une même ligne,
• nouvelle forme de commentaire introduite par le caractère ! . Son principal intérêt est d’assurer la compatibilité avecFortran 77.
C’est un aspect obsolète du langage !
Structure d’une ligne en “format fixe” :
• zone étiquette (colonnes 1 à 5)
• zone instruction (colonnes 7 à 72)
• colonne suite (colonne 6)
Les lignes qui commencent par C, c, * ou ! en colonne 1 sont des commentaires.

Les déclarations

Forme générale d’une déclaration
type[, liste_attributs : :] liste_objets
Différents types:
• real
• integer
• double precision
• complex
• character
• logical
• type

1 Introduction 
1.1 Historique
1.2 Compatibilité norme 77/90
1.3 Apports de Fortran 90
1.4 Aspects obsolètes de Fortran 90
1.5 Aspects obsolètes de Fortran 95
1.6 Évolution : principales nouveautés Fortran 95
1.7 Bibliographie
1.8 Documentation
2 Généralités 
2.1 Structure d’un programme
2.2 Éléments syntaxiques
2.2.1 Les identificateurs
2.2.2 Le “format libre”
2.2.3 Les commentaires
2.2.4 Le “format fixe”
2.2.5 Les déclarations
2.2.6 Typage et précision des nombres : paramètre KIND 32
2.3 Compilation, édition des liens, exécution
3 Types dérivés 
3.1 Définition et déclaration de structures
3.2 Initialisation (constructeur de structure)
3.3 Symbole % d’accès à un champ
3.4 Types dérivés et procédures
3.5 Types dérivés et entrées/sorties
3.6 Remarques
4 Programmation structurée 
4.1 Introduction
4.2 Boucles DO
4.3 Construction SELECT-CASE
5 Extensions tableaux 
5.1 Définitions (rang, profil, étendue, …)
5.2 Manipulations de tableaux (conformance, constructeur, section, taille, …)
5.3 Tableau en argument d’une procédure (taille et profil implicites)
5.4 Section de tableau non contiguë en argument d’une procédure
5.5 Fonctions intrinsèques tableaux
5.5.1 Interrogation (maxloc, lbound, shape, …)
5.5.2 Réduction (all, any, count, sum,…)
5.5.3 Multiplication (matmul, dot_product,…)
5.5.4 Construction/transformation (reshape, cshift, pack, spread, transpose,…)
5.6 Instruction et bloc WHERE
5.7 Expressions d’initialisation autorisées
5.8 Exemples d’expressions tableaux
6 Gestion mémoire 
6.1 Tableaux automatiques
6.2 Tableaux dynamiques (ALLOCATABLE, profil différé)
7 Pointeurs 
7.1 Définition, états d’un pointeur
7.2 Déclaration d’un pointeur
7.3 Symbole =>
7.4 Symbole = appliqué aux pointeurs
7.5 Allocation dynamique de mémoire
7.6 Imbrication de zones dynamiques
7.7 Fonction NULL() et instruction NULLIFY
7.8 Fonction intrinsèque ASSOCIATED
7.9 Situations à éviter
7.10 Déclaration de “tableaux de pointeurs”
7.11 Passage d’un pointeur en argument de procédure
7.12 Passage d’une cible en argument de procédure
7.13 Pointeur, tableau à profil différé et COMMON : exemple
7.14 Liste chaînée : exemple
8 Interface de procédures et modules 
8.1 Interface implicite : définition
8.2 Interface implicite : exemple
8.3 Arguments : attributs INTENT et OPTIONAL
8.4 Passage d’arguments par mot-clé
8.5 Interface explicite : procédure interne (CONTAINS)
8.6 Interface explicite : 5 cas possibles
8.7 Interface explicite : bloc interface
8.8 Interface explicite : ses apports
8.9 Interface explicite : module et bloc interface (USE)
8.10 Interface explicite : module avec procédure
8.11 Cas d’interface explicite obligatoire
8.12 Argument de type procédural et bloc interface
9 Interface générique 
9.1 Introduction
9.2 Exemple avec module procedure
9.3 Exemple : contrôle de procédure F77
10 Surcharge ou création d’opérateurs 
10.1 Introduction
10.2 Interface operator
10.3 Interface assignment
11 Contrôle de visibilité, concept d’encapsulation et gestion de zones dynamiques
11.1 Introduction
11.2 Instruction PRIVATE et PUBLIC
11.3 Attribut PRIVATE et PUBLIC
11.4 Type dérivé “semi-privé”
11.5 Exemple avec gestion de zones dynamiques inaccessibles en retour de fonction
11.6 Paramètre ONLY de l’instruction USE
12 Procédures récursives 
12.1 Clauses RESULT et RECURSIVE
12.2 Exemple : suite de Fibonacci
13 Nouveautés sur les E/S 
13.1 OPEN (status, position, action, …)
13.2 INQUIRE (recl, action, iolength,…)
13.3 Entrées-sorties sur les fichiers texte (advance=’no’)
13.4 Instruction NAMELIST : exemple
13.5 Spécification de format minimum
14 Quelques nouvelles fonctions intrinsèques 
14.1 Conversion entiers/caractères (char, ichar, …)
14.2 Comparaison de chaînes (lge, lgt, lle, llt)
14.3 Manipulation de chaînes (adjustl, index, …)
14.4 Transformation (transfer)
14.5 Précision/codage numérique : tiny/huge, sign, nearest, spacing, ..
14.6 Mesure de temps, date, nombres aléatoires
14.7 Opérations sur les bits (iand, ior, ishft, …)
A Annexe : paramètre KIND et précision des nombres

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 *