- Algorithmique et Programmation Hicham Meftah Master EMM1 - 2019/2020 H. Mefta

- Algorithmique et Programmation Hicham Meftah Master EMM1 - 2019/2020 H. Meftah - ENSA d’Agadir - h.meftah@uiz.ac.ma 1 / 90 Introduction Historique 1954 : projet création du premier langage 1957 : Livraison des premiers compilateurs 1958 : Fortran II (IBM) ⇒sous-programmes 1966 : Fortran IV (Fortran 66) 1977 : Fortran V (Fortran 77) type caractère ; IF-THEN-ELSE ; E/S accès direct et OPEN. 1991/1992 : Norme Fortran 90 1994 : Premiers compilateurs Fortran 90 Cray et IBM ; 1997 : Norme Fortran 95 1999 : Premiers compilateurs Fortran 95 sur Cray T3E puis IBM RS/6000 ; septembre 2004 : Norme Fortran 2003 octobre 2010 : Norme Fortran 2008 H. Meftah - ENSA d’Agadir - h.meftah@uiz.ac.ma 2 / 90 Compatibilité norme 77/90 La norme 77 est totalement incluse dans la norme 90. Quelques comportements différents : beaucoup plus de fonctions/sous-progr attribut SAVE automatiquement donné aux variables initiali- sées par l’instruction DATA Procédures internes (CONTAINS), modules (USE) ; « Format libre », identificateurs, déclarations ; DO–END DO, SELECT CASE, WHERE ; Allocation dynamique de mémoire (ALLOCATE) Pointeurs ; Normalisation directive INCLUDE H. Meftah - ENSA d’Agadir - h.meftah@uiz.ac.ma 3 / 90 Structure d’un programme H. Meftah - ENSA d’Agadir - h.meftah@uiz.ac.ma 4 / 90 Compilation, édition des liens, exécution Le compilateur crée pour chaque fichier source : un fichier objet de même nom suffixé par .o, autant de fichiers nom_module.mod qu’il y a de modules. Si un module fait appel (USE) à d’autres modules, ces der- niers doivent avoir été précédemment compilés. 1. Compilation préalable des sources contenant les modules : f90 -c mod1.f90 mod2.f90 2. Compil./link de prog.f90 utilisant ces modules : f90 prog.f90 mod1.o mod2.o les fichiers .mod (contenant la partie descripteur ) sont au- tomatiquement trouvés s’ils se trouvent dans le répertoire courant ou dans celui du source. L ’option -I permet de spé- cifier d’autres répertoires de recherche prioritaires. 3. Exécution : a.out H. Meftah - ENSA d’Agadir - h.meftah@uiz.ac.ma 5 / 90 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. Exemple d’identificateurs : compteur Compteur fin_de_fichier montant_annee_1993 H. Meftah - ENSA d’Agadir - h.meftah@uiz.ac.ma 6 / 90 Les identificateurs 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, pour permettre une bonne lisibilité du programme on évitera de le faire. Dans le mode format libre les lignes peuvent être de lon- gueur 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 " ;" Une instruction peut être codée sur plusieurs lignes : on utilisera alors le caractère "&" Lors de la coupure d’une constante chaîne de caractères la suite de la chaîne doit obligatoirement être précédée du caractère "&" H. Meftah - ENSA d’Agadir - h.meftah@uiz.ac.ma 7 / 90 Les identificateurs Exemple print* , " Entrez une valeur : " ; read * , n print* , " Montant HT : " , montant_ht , & " TVA : " , tva, & " Montant TTC : " , montant_ttc H. Meftah - ENSA d’Agadir - h.meftah@uiz.ac.ma 8 / 90 Les identificateurs Le caractère " !" rencontré sur une ligne indique que ce qui suit est un commentaire. On peut évidemment écrire une ligne complète de commentaires : il suffit pour cela que le 1er caractère non blanc soit le caractère " !". Exemple if (n< 00.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 etre un nombre > 0 " else z = y** x ! On calcule la puissance end if H. Meftah - ENSA d’Agadir - h.meftah@uiz.ac.ma 9 / 90 Les identificateurs Notez la nouvelle syntaxe possible des opérateurs logiques : .LE. ⇒<= .LT. ⇒< .EQ. ⇒== Les opérateurs .AND., .OR. et .NOT. 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 2eme instruction ferait partie du commentaire. H. Meftah - ENSA d’Agadir - h.meftah@uiz.ac.ma 10 / 90 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é avec For- tran 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. H. Meftah - ENSA d’Agadir - h.meftah@uiz.ac.ma 11 / 90 Les déclarations type,liste_attributs::liste_identificateurs Liste des différents types : real integer complex character logical type H. Meftah - ENSA d’Agadir - h.meftah@uiz.ac.ma 12 / 90 Les déclarations type,liste_attributs::liste_identificateurs Différents attributs : : parameter : constante symbolique dimension : taille d’un tableau allocatable : objet dynamique pointer : objet défini comme pointeur target : objet accessible par pointeur (cible) save : objet statique intent : vocation d’un argument muet optional : argument muet facultatif public ou private : visibilité d’un objet défini dans un module external ou intrinsic : nature d’une procédure H. Meftah - ENSA d’Agadir - h.meftah@uiz.ac.ma 13 / 90 Les déclarations Par défaut, les variables dont l’identificateur commence par les caractères I à N sont de type INTEGER. Toutes les autres sont de type REAL. L ’instruction IMPLICIT NONE change cette règle car elle impose à l’utilisateur la déclaration de chaque variable. Cette instruction est vivement recommandée car elle per- met la détection d’un certain nombre d’erreurs à la compi- lation. IMPLICIT NONE se place avant les déclarations des va- riables L ’instruction ne s’applique qu’à l’unité de programme qui la contient. H. Meftah - ENSA d’Agadir - h.meftah@uiz.ac.ma 14 / 90 Les déclarations Une constante de type REAL doit obligatoirement compor- ter : soit le point décimal, même s’il n’y a pas de chiffres après la virgule ; soit le caractère E pour la notation en virgule flottante. Exemple 0. 1.0 1. 3.1415 31415E -4 1.6E -19 1E12 .001 -36. H. Meftah - ENSA d’Agadir - h.meftah@uiz.ac.ma 15 / 90 Les déclarations Une constante double precision doit obligatoirement être écrite en virgule flottante, le E étant remplacé par un D. Exemple 0D0 0.D0 1.D0 1d0 3.1415d0 31415d -4 1.6D -19 1d12 -36.d0 H. Meftah - ENSA d’Agadir - h.meftah@uiz.ac.ma 16 / 90 Les déclarations Une constante de type COMPLEX est obtenue en combi- nant deux constantes réelles entre parenthèses séparées par une virgule : 2.5+i s’écrira (2.5,1.) Exemple (0. ,0.) (1. , -1.) (1.34 e -7 , 4.89 e -8) H. Meftah - ENSA d’Agadir - h.meftah@uiz.ac.ma 17 / 90 Les déclarations Une constante chaînes de caractères est une suite de ca- ractères encadrée par le délimiteur ’ ou bien ". Si parmi la suite des caractères figure le caractère délimiteur, il devra être doublé. Exemple ’La somme des n premiers entiers est :’ ’l’’etendue desiree est :’ "l’ tendue d s i r e est :" H. Meftah - ENSA d’Agadir - h.meftah@uiz.ac.ma 18 / 90 Les déclarations Une initialisation pourra s’effectuer au moyen de l’instruc- tion suivante : DATA liste1/init1/,liste2/init2/,... liste fait référence à une liste de variables à initialiser initi indique les valeurs d’initialisation le type des valeurs d’initialisation doit respecter les règles suivantes : pour un objet de type caractère ou logique, la constante d’initialisation doit être de même type pour un objet de type entier, réel ou complexe, la constante d’initialisation peut être de l’un de ces types. REAL a, b, c INTEGER n, m LOGICAL arret DATA a , b , n /1.0 , 2.0 , 17/ DATA c /2.6/ , m /3/ DATA arret /. FALSE ./ H. Meftah - ENSA d’Agadir - h.meftah@uiz.ac.ma 19 / 90 Les opérateurs Les opérandes o1 et o2 peuvent être : une constante numérique ; une variable numérique, précédée ou non d’un opérateur unaire (+ ou -) ; une expression arithmétique entre parenthèses. H. Meftah - ENSA d’Agadir - h.meftah@uiz.ac.ma 20 / 90 Les opérateurs Opérateurs arithmétiques : Les opérandes o1 et o2 peuvent être : une constante numérique ; une variable numérique, précédée ou non d’un opérateur unaire (+ ou -) ; une expression arithmétique entre parenthèses. H. Meftah - ENSA d’Agadir - h.meftah@uiz.ac.ma 21 / 90 Les opérateurs Opérateurs relationnels : Ces opérateurs admettent des opérandes de type INTE- GER, REAL uploads/Ingenierie_Lourd/ pre-fortran-pdf.pdf

  • 22
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager