Premiers pas en Fortran 95



Documents pareils
Cours Informatique Master STEP

1. Structure d'un programme FORTRAN 95

Corrigé des TD 1 à 5

Présentation du langage et premières fonctions

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

STAGE IREM 0- Premiers pas en Python

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Maple: premiers calculs et premières applications

TP 1. Prise en main du langage Python

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Introduction à MATLAB R

Tp 1 correction. Structures de données (IF2)

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Algorithmique et programmation : les bases (VBA) Corrigé

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Algorithmique et Programmation, IMA

Langage Fortran (Base)


Application 1- VBA : Test de comportements d'investissements

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

Complément d information concernant la fiche de concordance

Bases de programmation. Cours 5. Structurer les données

ALGORITHMIQUE ET PROGRAMMATION En C

Programmation C. Apprendre à développer des programmes simples dans le langage C

DUT Techniques de commercialisation Mathématiques et statistiques appliquées

Exercices - Polynômes : corrigé. Opérations sur les polynômes

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Outils pour la pratique

Utilisation d objets : String et ArrayList

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Introduction au langage C

Cours d algorithmique pour la classe de 2nde

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Rappels sur les suites - Algorithme

L informatique en BCPST

Programmer en JAVA. par Tama

1 Recherche en table par balayage

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Algorithme. Table des matières

Baccalauréat S Antilles-Guyane 11 septembre 2014 Corrigé

Licence Sciences et Technologies Examen janvier 2010

Langage Fortran. Support de cours

Baccalauréat ES Pondichéry 7 avril 2014 Corrigé

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Initiation à la Programmation en Logique avec SISCtus Prolog

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Surveillance de Scripts LUA et de réception d EVENT. avec LoriotPro Extended & Broadcast Edition

Vue d ensemble de Windows PowerShell

Plan du cours Cours théoriques. 29 septembre 2014

Représentation géométrique d un nombre complexe

Quelques éléments de compilation en C et makefiles

Travaux Pratiques de Commande par ordinateur 1 TRAVAUX PRATIQUES

1) Installation de Dev-C++ Téléchargez le fichier devcpp4990setup.exe dans un répertoire de votre PC, puis double-cliquez dessus :

CORRECTION EXERCICES ALGORITHME 1

KL5121. Pour activer des sorties en fonction de la position d'un codeur

Seconde Généralités sur les fonctions Exercices. Notion de fonction.

Examen Médian - 1 heure 30

Auto-Entreprise : Activités : Eric SOTY - Siret n Formation Bureautique, continue d'adultes. Tél : Fax :

L ALGORITHMIQUE. Algorithme

Cours d Algorithmique et de Langage C v 3.0

as Architecture des Systèmes d Information

Propagation sur réseau statique et dynamique

I. Introduction aux fonctions : les fonctions standards

Compilation (INF 564)

Débuter avec EXPRESS. Alain Plantec. 1 Schema 2

Cours de Programmation en Langage Synchrone SIGNAL. Bernard HOUSSAIS IRISA. Équipe ESPRESSO

Recherche dans un tableau

Chapitre 11. Séries de Fourier. Nous supposons connues les formules donnant les coefficients de Fourier d une fonction 2 - périodique :

PRESENTATION RESSOURCES. Christian Dupaty BTS Systèmes Numériques Lycée Fourcade Gardanne Académie d Aix Marseille

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

Vous allez le voir au cours de ce premier chapitre, 1. Découvrir l ipad

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

La fonction exponentielle

Enoncé et corrigé du brevet des collèges dans les académies d Aix- Marseille, Montpellier, Nice Corse et Toulouse en Énoncé.

DOCM Solutions officielles = n 2 10.

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

BACCALAURÉAT GÉNÉRAL SESSION 2012 OBLIGATOIRE MATHÉMATIQUES. Série S. Durée de l épreuve : 4 heures Coefficient : 7 ENSEIGNEMENT OBLIGATOIRE

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Notions fondamentales du langage C# Version 1.0

Découverte de Python

Programmation en Caml pour Débutants

Cours Bases de données 2ème année IUT

Calcul Formel et Numérique, Partie I

Feuille TD n 1 Exercices d algorithmique éléments de correction

Premiers pas avec Mathematica

Les commandes de base de LINUX

Mathématiques Première L, ES, S, Concours Post-Bac Equations et inéquations du second degré FORMAV

Représentation des Nombres

Cours de Fortran 90 / 95

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Programmation C++ (débutant)/instructions for, while et do...while

TD3 - Facturation avec archivage automatisé

Pour l épreuve d algèbre, les calculatrices sont interdites.

Transcription:

1 Premiers pas en Fortran 95 Nicolas Depauw 26 septembre 2011 Dans ce petit exemple, nous écrivons un programme en Fortran 95 qui résoud les équations du second degré à coefficients réels. Nous détaillons au passage quelques aspects de la syntaxe du langage. Tout le code est tapé avec le jeu de caractères ASCII. En particulier, sans caractères accentués.

26 septembre 2011 edsd.nw 2 1 Structure Un programme en Fortran 95 contient une section de déclarations et une section d instructions. Par les déclarations, nous indiquons le type de chaque variable. Les instructions décrivent le déroulement des opérations que le programme exécute. 1 edsd.f95 1 program edsd déclarations 2 instructions 5 end program

26 septembre 2011 edsd.nw 3 2 La résolution de l équation Le problème mathématique consiste à trouver les solutions de ax 2 + bx + c = 0 pour trois réels a, b, c. On peut, selon le signe du discrimant, avoir deux solutions réelles x 1, x 2, ou bien deux solutions complexes conjuguées z 1, z 2. 2.1 Déclarations On déclare donc des variables correspondant à ces nombres, et une indiquant le cas rencontré. On utilise naturellement les types de base logical, real et complex. À cause de la déclaration implicit none, le compilateur considère comme une erreur l usage (pendant les exécutions) d un identificateur de variable non déclaré au préalable (dans les spécifications). Tant que vous ne serez pas experts, n oubliez pas cette déclaration, en premier. La variable delta_positif est initialisée à vrai, en considérant que c est le cas le plus courant. 2 déclarations 2 implicit none logical :: delta_positif=.true. real :: a,b,c,delta,x1,x2 complex :: z1,z2 (1) 4

26 septembre 2011 edsd.nw 4 2.2 Calculs Le discriminant est donné par = b 2 4ac. De son signe dépend si les racines sont réelles ou complexes conjuguées. Tester le signe ou la taille d une variable real n a pas de sens en soi. Ici on doit décider du signe de par rapport à b : si < ɛ b, alors on doit considérer comme nul. On choisit ɛ de l ordre de la précision machine pour le type considéré, donnée par epsilon(b) si on considère le type de la variable b. Dans le cas de racines réelles, pour éviter une perte de précision par cancellation, on calcule d abord la racine qui conduit à ajouter deux nombres de mêmes signes. Puis on utilise la relation ax 1 x 2 = c pour trouver l autre. La fonction sign(x,y) renvoie un nombre qui a la valeur absolue de x et le signe de y. 3 calculs 3 delta=b**2-4*a*c if (abs(delta)<epsilon(b)*abs(b)*2) then x1=-b/2/a x2=x1 else if (delta>0) then x1=-(b+sign(sqrt(delta),b))/2/a x2=c/a/x1 else! (delta<0) z1=cmplx(-b, sqrt(-delta))/2/a z2=conjg(z1) delta_positif=.false. end if (5)

26 septembre 2011 edsd.nw 5 3 Les entrées-sorties Pour ce premier programme, nous utilisons une interface avec l utilisateur. L inconvénient majeur est le temps qu on risque de consacrer à cette interface, alors que vous devez apprendre à résoudre des problèmes mathématiques. C est pourquoi dans la suite nous nous interdirons de telles élaborations. Les entrées-sorties des données-résultats se feront par lecture-écriture sur des fichiers. Pour ce petit premier programme, exceptionnellement, on fabrique une boucle qui demande à l utilisateur s il veut continuer ou quitter, puis, s il veut continuer, les trois coefficients a, b, c. Les résultats sont simplement affichés à l écran. En quittant, le programme affiche en dernier le nombre d équations résolues. On déclare donc de nouvelles variables de type character et integer. 4 déclarations 2 + character :: choix integer :: nbre_equations (1) 2

26 septembre 2011 edsd.nw 6 En Fortran 95, l instruction de contrôle do...end do est complètée des instructions exit, pour arrêter complètement la boucle en cours et passer à l instruction suivante ; et continue, pour arrêter le tours de boucle en cours et passer au tour suivant. 5 instructions 5 nbre_equations=0; choix= c do print*,"continuer (c) ou Quitter (q)?"; read*,choix select case (choix) case ( c ) print*,"coefficients ( real ) a,b,c?"; read*,a,b,c calculs 3 affichage 6 nbre_equations=nbre_equations+1 case ( q ) exit case default print*,"merci de repondre par c ou q." continue end select end do print*,"nous avons resolu ",nbre_equations," equations." (1)

26 septembre 2011 edsd.nw 7 L affichage dépend du signe du discriminant. 6 affichage 6 if (delta_positif) then print*,"discriminant positif, x1 et x2 :" print*,x1,x2 else print*,"discriminant negatif, z1 et z2 :" print*,z1,z2 end if (5) 4 Compilation, exécution Ayant écrit notre programme, il faut encore le compiler. Sur nos machines, nous utilisons le compilateur Gnu gfortran. Dans un terminal (ou bien même depuis Emacs, avec Meta-!), la ligne de commande pour compiler le fichier source edsd.f95 en un exécutable edsd, en déclenchant les options donnant beaucoup d avertissements, est gfortran -Wall -Wextra -o edsd edsd.f95 La ligne de commande pour exécuter est alors./edsd

26 septembre 2011 edsd.nw 8 5 Et la programmation documentée? En fait le programme edsd et ce document qui l explique ont été produit à partir d un même fichier source, edsd.nw, qui contient tout à la fois les explications (dans l ordre de lecture choisi par l auteur pour ses vertus pédagogiques) et le code (découpé en petits morceau pour coller aux explications), dans un format compréhensible par l outil noweb. Pour produire tout le reste, nous regroupons les commandes dans un petit script nommé mk (comme make). La première partie consiste à produire le code edsd.f95. Puis le fichier L A TEXedsd.tex. Que l on compile avec pdflatex tandis qu on compile le programme avec gfortran. 7 mk 7 notangle -Redsd.f95 edsd.nw > edsd.f95 noweave -delay -index edsd.nw > edsd.tex pdflatex edsd pdflatex edsd gfortran -Wall -Wextra -o edsd edsd.f95 Il reste enfin deux détails. D une part, dans un terminal, afficher ce document avec xpdf edsd.pdf et lancer l exécution avec./edsd. D autre part, avant de pouvoir exécuter./mk, il aura bien fallu le produire, avec notangle -Rmk edsd.nw > mk; chmod 744 mk.

26 septembre 2011 edsd.nw 9 A Résumé des éléments de Fortran 95rencontrés Nous utilisons la capacité d indexation de notre outil de programmation documentée (noweb) pour rappeler les mots réservés et les fonctions prédéfinies que nous avons utilisés. Le numéro souligné correspond à la définition, c est-à-dire en fait à sa première occurrence, et donc peut-être à une explication. Noter qu à cause des end program, end if et end do, nous avons défini end ici seulement. **: 3.false.: 3.true.: 2 abs: 3 character: 4 complex: 2 complx: 3 continue: 5 do: 5 else: 3, 6 end: 1, 3, 5, 6, 9 epsilon: 3 exit: 5 if: 3, 6 implicit: 2 integer: 4 logical: 2 none: 2 print: 5, 6 program: 1 read: 5 real: 2 sign: 3 then: 3, 6 B Bouts de code Voici, juste pour le plaisir, comment noweb collecte les bouts de code. affichage 6 5, 6 calculs 3 3, 5 déclarations 2 1, 2, 4 edsd.f95 1 1 instructions 5 1, 5 mk 7 7

26 septembre 2011 edsd.nw 10 C Exercice 1. Compiler et executer le programme, détecter une erreur de programmation. 2. Corriger cette erreur dans le programme, recompiler, tester à nouveau. 3. Sur le même modèle, écrire un programme qui, en boucle, demande un réel x et affiche une valeur approchée de exp(x) et ln(x), sans faire appel aux functions intrinsèques exp et log, mais en utilisant uniquement les opérations arithmétiques usuelles. On cherchera une valeur approchée aussi exacte que possible, sachant qu a priori x sera choisit dans l intervalle [1, 2). Indications On peut utiliser les séries de Taylor exp(x) = a i=0 x i /i!, et ln(x) = ln(1 u) = b i=1 u i /i avec u = 1 1/x [0, 1/2). Le nombre de termes à sommer est à mettre en regard de la précision relative de l encodage des réels flottants simple précision : 23 bits dans la mantisse. Dans une somme de termes de mêmes signes variants de façon monotone, les erreurs d arrondis seront moins grandes si on commence la somme par les petits termes, donc ici ceux de degrés élevés. On économise des instructions en suivant le shéma de Hörner. Par exemple ((((x/5 + 1) x/4 + 1) x/3 + 1) x/2 + 1) x + 1. Pour apprécier les résultats, on pourra les comparer aux valeurs exactes données par exemple par les fonctions intrinsèques exp et log.