Cours Informatique Master STEP



Documents pareils
1. Structure d'un programme FORTRAN 95

Introduction à MATLAB R


STAGE IREM 0- Premiers pas en Python

Corrigé des TD 1 à 5

Algorithmique et programmation : les bases (VBA) Corrigé

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

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

Examen Médian - 1 heure 30

Initiation à la programmation en Python

Recherche dans un tableau

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

Algorithmique et Programmation, IMA

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)

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

Chapitre 2 Devine mon nombre!

Organigramme / Algorigramme Dossier élève 1 SI

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

Application 1- VBA : Test de comportements d'investissements

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

Calcul Formel et Numérique, Partie I

Propagation sur réseau statique et dynamique

Présentation du langage et premières fonctions

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Programmation Objet - Cours II

Plan du cours Cours théoriques. 29 septembre 2014

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

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Cours de Fortran 90 / 95

Bernard HAMM, Évelyne LAVOISIER

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Conception de circuits numériques et architecture des ordinateurs

Cours d algorithmique pour la classe de 2nde

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

Cours d Algorithmique et de Langage C v 3.0

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

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

TP 1. Prise en main du langage Python

Plan du cours. Historique du langage Nouveautés de Java 7

Chap III : Les tableaux

Algorithmique avec Algobox

Programmer en JAVA. par Tama

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

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

TD3: tableaux avancées, première classe et chaînes

ACTIVITÉ DE PROGRAMMATION

Introduction à NetCDF

Algorithmique et structures de données I

Algorithme. Table des matières

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

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

Les commandes de base de LINUX

TP : Gestion d une image au format PGM

Logiciel SCRATCH FICHE 02

Chapitre 4 Pierre, papier, ciseaux

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

I. Introduction aux fonctions : les fonctions standards

Rappels sur les suites - Algorithme

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

Présentation du PL/SQL

Évaluation et implémentation des langages

Initiation à la Programmation en Logique avec SISCtus Prolog

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

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

TP 1 Introduction à Matlab Février 2009

Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel)

Cours Informatique 1. Monsieur SADOUNI Salheddine

L informatique en BCPST

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Cours d initiation à la programmation en C++ Johann Cuenin

ALGORITHMIQUE ET PROGRAMMATION En C

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

IMAGES NUMÉRIQUES MATRICIELLES EN SCILAB

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

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

IMPORTATION, CRÉATION, MANIPULATION, EXPORTATION DE DONNÉES STATISTIQUES

Conventions d écriture et outils de mise au point

Compléments de documentation Scilab : affichage de texte et formatage de nombres

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Calcul Formel et Numérique, Partie I

Cours 14 Les fichiers

Cours d Informatique

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

Projet Active Object

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

.NET - Classe de Log

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Sujet proposé par Yves M. LEROY. Cet examen se compose d un exercice et de deux problèmes. Ces trois parties sont indépendantes.

Chapitre 2. Eléments pour comprendre un énoncé

R, Bonnes pratiques. Christophe Genolini

SYSTÈME DE GESTION DE FICHIERS

Annexe : La Programmation Informatique

Matériel & Logiciels (Hardware & Software)

Java Licence Professionnelle CISII,

Transcription:

Cours Informatique Master STEP Bases de la programmation: Compilateurs/logiciels Algorithmique et structure d'un programme Programmation en langage structuré (Fortran 90) Variables, expressions, instructions simples Instructions complexes (boucles, tests...) Tableaux et variables structurées Sous programmes et fonctions http:/ganymede.ipgp.jussieu.fr/~garcia/cours.info.m.pdf

Qu'es ce qu'un programme Programme (lisible par l'homme) = suite d'actions Compilateur (ifort) Programme en langage machine (*.exe) Actions réalisées par l'ordinateur Interpréteur ou logiciel (matlab)

Méthode de programmation But du programme? Variables d'entrée (données)? Variables de sortie (produits du programme)? Variables internes? Décomposer les actions à faire: Lire les entrées Calculs/actions à faire Ecriture des sorties Ecrire le programme en langage informatique position d'un satellite f(t) Paramètres de l'orbite, temps t (r, Ө, Ф) (t) Masse de la planète, constante de gravitation... Lire le temps demandé calcul de la position écrire la position avec un certain fomat (Vecteur ou coordonnées sphériques) Exemple de programme

Structure d'un programme Structure ci contre Mettre des commentaires (!) pour décrire les variables et les instructions Assurer la lisibilité du programme:! Commentaire décrivant le but, le contenu,! l'auteur, la date, etc du programme PROGRAM [nom_du_programme] [ Déclaration: [ des variables (entrées, sorties, locales), [ des fonctions et des sous programmes Sauter des lignes indenter (marge) les différentes parties Valide pour tout langage [ Corps du programme: [ Instructions, structures et actions [ décomposées en actions simples END PROGRAM

Créer, compiler et exécuter un programme en fortran90 Rédiger son programme au format ascii dans un éditeur de texte quelconque (xemacs préféré). Sauver son fichier avec l'extension.f90 (toto.f90) Compiler le programme par la ligne de commande: >ifort o toto.exe toto.f90 Si aucune érreur, exécuter le programme par: >toto.exe Cette suite de commande peut etre mise dans un script

Programmer en Fortran 90 Qu'es ce qu'une variable? Une variable est l'unité qui va contenir l'information dans un programme Une variable possède: un nom de variable > adresse de l'espace mémoire réservé un type (réel, entier, complexe, booléen, chaine de caractères...) un espace mémoire réservé lors de sa déclaration

Variables entières (INTEGER) Déclaration: INTEGER :: [nom_variable]! i, j, k! Expressions: i=j+k, i=j*k, i=j/k Fonctions simples: x=real(i) : renvoie le réel x associé à l'entier i mod(i,40) : renvoie le modulo de i par 40

Variables réelles (REAL) Déclaration: REAL :: [nom_variable]! x, y, z! Expressions: x=y+z, x=y*z, x=y/z Fonctions simples: i=int(x) : renvoie la partie entière de x dans l'entier i y=cos(x), y= exp(x)...

Variables complexes (COMPLEX) Déclaration: COMPLEX :: [nom_variable]! X, Y, Z!! contient deux réels pour les parties réelles et imaginaires Expressions: X=Y+Z, X=Y*Z Fonctions simples: x=real(x) : renvoie la partie réelle de X dans le réel X y=im(x) : renvoie la partie imaginaire de X dans le réel y Y= exp(x)...

Variables Booléennes (LOGICAL) Déclaration: LOGICAL :: [nom_variable]! I, J, K!! Ne prend que deux valeurs: TRUE (1) ou FALSE (0) Expressions: I=J.AND.K, I=J.OR.K, I=.NOT.J (tableau des relations...) I=(i<j), I=(x>y), I=(x>=y), I=(i<=j), I=(i==j), I=(i/=j) I=((x<y).AND.(x>z)), I=((x>z).OR.(x>y))

Variables caractères (CHARACTER) Déclaration: CHARACTER(30) :: [nom_variable]! A,B!! Le chiffre entre parenthèses indique le nombre de caractères dans la chaine. Si on ne met pas le chiffre, alors 1 caractère Expressions: I=(A==B) renvoie TRUE uniquement si les chaines de caractères sont identiques dans les variables A et B Fonctions simples: i=len(a) renvoie le nombre de caractères dans A i=len_trim(a) renvoie le nombre de caractères non blancs

Instructions simples d'entrée/sortie WRITE(*,*) 'J'ai ', i, ' ans'! Ecris à l'écran la chaine de caractères entre les cotes ('), la valeur de la variable i, puis l'autre chaine de caractères READ(*,*) x! Lit au clavier le nombre donné, et le stocke dans la variable x (*,*) > (unité d'entrée/sortie,format d'entrée/sortie)

Instructions complexes Condition (IF... THEN... ELSE... END IF) Boucle itérative ( DO... END DO) Boucle Conditionelle (DO WHILE... END DO) Instructions liées aux boucles (EXIT, CYCLE) Choix discret (SELECT CASE... END SELECT)

Instructions complexes: Condition IF ((x<0).or.(x=0)) THEN! condition x=0.0 x! si condition WRITE(*,*) 'x était négatif ou nul'! si TRUE ELSE WRITE(*,*) 'x est positif'! si FALSE END IF Le ELSE est facultatif (mais pas le END IF)

Instructions complexes: Boucle itérative j=1 DO i=0,100,2! le compteur est i (ne pas modifier! dans la boucle) i=0 au premier tour,! puis est incrémenté de 2 jusqu'à 100 j=j*(i+1)*(i+2) END DO! renvoie au début de la boucle, incrémente i WRITE(*,*) 'factorielle... égale ', j

Instructions complexes: Boucle conditionelle j=1 DO WHILE (i<100)! condition pour entrer i=i+2 j=j*(i+1)*(i+2) END DO! renvoie à la condition du début WRITE(*,*) 'factorielle... égale ', j

Instructions liées aux boucles EXIT! sort de la boucle lorsque le programme recontre EXIT CYCLE! va jusqu'au prochain END DO sans éffectuer! les opérations entre CYCLE et END DO

END SELECT Instructions complexes Choix discret READ(*,*) REPONSE SELECT CASE (REPONSE) CASE ('y')! si REPONSE='y' WRITE(*,*) 'Réponse YES' CASE ('n')! si REPONSE='n' WRITE(*,*) 'Réponse NO' CASE DEFAULT! si aucun des autres cas WRITE(*,*) 'Vous avez répondu ni YES, ni NO'

Les Tableaux On peux organiser une suite de variables d'un meme type dans un tableau. Le Tableau est caractérisé par: un nom de tableau un type de variables stockées dans le tableau le nombre de dimensions du tableau (1D = vecteur, 2D = matrice...) la longueur du tableau selon chaque dimension

Déclaration des tableaux on commence par le type des variables puis la longeur selon chaque dimension enfin le nom du tableau éventuellement son initialisation (remplissage) par une valeur Exemples: REAL, DIMENSION(3) :: U, V, W CHARACTER(30), DIMENSION(2) :: NOM REAL, DIMENSION(3,3) :: MATRICE=0.0

Accéder aux éléments du tableaux Chaque élément du tableau est répéré par un nombre d'indices entiers qui dépend de la dimension du tableau Ces indices vont de la valeur 1 à la longueur du tableau dans cette dimension Exemple: DO i=1,3 x=v(i)*u(i)! produit scalaire U.V DO j=1,3 W(j)= W(j) + MATRICE(i,j)*V(j)! produit matrice par V END DO END DO

Erreurs à éviter avec les tableaux Ne pas confondre les indices (i,j) qui servent à repérer un élément du tableau avec la valeur contenue dans cet élément du tableau: WRITE(*,*) i,j différent de WRITE(*,*) MATRICE(i,j) Ne pas donner un indice i dont la valeur ne serait pas comprise entre 1 et la dimension du tableau > renvoie n'importe quelle valeur WRITE(*,*) V(4), MATRICE(5,6)! donne n'importe quoi Manipuler avec précaution les opérations prédéfinies sur les tableaux où ceux ci apparaissent sans leurs indices: V=U/3.0! divise tous les éléments du tableau par la valeur 3.0 WRITE(*,*) MATRICE! écrit à l'écran tous les membres du tableau

Expressions spécifiques aux tableaux On peux faire des opérations sur certains éléments du tableaux en utilisant des résumés d'indice: WRITE(*,*) MATRICE(1,:)! écris la première ligne de MATRICE V(1:3)= 1.0! Donne la valeur 1.0 aux éléments dont les indices sont entre 1 et 3 Si, et uniquement si, les dimensions s'accordent en nombre et en taille, on peux faire des opérations sur les tableaux du type: U=MATRICE(:,1)*V(:)! U(i)=MATRICE(i,1)*V(i)

Instruction spécifique aux tableaux L'instruction WHERE permet de rechercher dans un tableau: WHERE (MATRICE<2.0)! cherche les indices qui vérifient la condition MATRICE=0.0! modifie uniquement les valeurs à ces indices ELSEWHERE MATRICE=MATRICE*2.0! modifie les autres valeurs END WHERE Comme pour IF, le ELSEWHERE est facultatif (mais le END WHERE)

Fonctions spécifiques aux tableaux (voir polycopié) MATRICE2=TRANSPOSE(MATRICE) W=DOT_PRODUCT(U,V) U=MATMUL(MATRICE,V) i=minloc(v)! renvoie la valeur de l'indice dont l'élément du tableau est minimum j=maxloc(v)! renvoie la valeur de l'indice dont l'élément du tableau est minimum...

Fonctions et sous programmes La réalisation d'un programme requiert de décomposer les actions en éléments de base, à la fois pour une meilleure compréhension du programme et pour pouvoir utiliser ces éléments de base dans d'autres programmes. Une fonction ou un sous programme est un petit programme indépendant, avec entrées et sorties, qui sera écrit dans le meme fichier que la programme (entre la commande CONTAINS et END PROGRAM) ou dans un fichier différent qui sera apellé au moment de la compilation.

Fonctions intrinsèques (pré définies) Chaque langage possède des fonctions intrinsèques que l'on peux utiliser dans nos programmes: y=sin(x)! entrée = réel x, sortie = sin(x) x=real(x)! entrée = complèxe X, sortie = partie réelle i=minloc(v)! entrée = tableau V, sortie = indice du min. Ces fonctions sont listées dans le polycopié ou dans l'aide en ligne du fortran90 Une fonction renvoie une seule variable en sortie

Programmer une fonction Une fonction se programme presque un programme Les différences sont: Donner le type de la fonction (ou de la variable de sortie) au début de la fonction: REAL FUNCTION MAXTAB(T) Déclarer explicitement les variables d'entrée par l'attribut INTENT(IN) On utilise le nom de la fonction comme variable de sortie: MAXTAB=... On termine par: END FUNCTION MAXTAB

Programmer une fonction : Exemple REAL FUNCTION MAXTAB(T) REAL, INTENT(IN), DIMENSION(:) :: T INTEGER :: I DO I=1,SIZE(T) IF (T(I)>MAXTAB) THEN MAXTAB=T(I) END IF END DO END FUNCTION MAXTAB

Sous programmes Un sous programme est aussi un petit programme indépendant qui s'insère entre les instructions CONTAINS et END PROGRAM dans le fichier du programme La différence avec les fonctions est qu'il peut renvoyer en sortie plus d'une variable On l'apelle dans le programme par l'instruction : CALL [Nom_sous_programme]([variables_entrée_sortie]) Il ne communique avec le programme qu'au travers des variables qui lui sont données. Le nom du sous programme n'est pas une variable.

Sous programmes intrinsèques Certains sous programmes sont prédéfinis. Exemples: CALL RANDOM_NUMBER(T)! remplit le tableau T de réels tirés aléatoirement entre 0 et 1 CALL DATE_AND_TIME(date,time, zone,values)! renvoie dans les variables la date, l'heure,...! au moment de l'éxecution du sous programme

Programmer un sous programme Un sous programme ressemble a un programme. Les différences sont: Commencer par déclarer le sous programme avec ses variables d'entrée, et de sortie (ordre important): SUBROUTINE MUL23(I,J,K) Déclarer les variables d'entrée par INTENT(IN) et de sortie par INTENT(OUT). Terminer par: END SUBROUTINE MUL23

Programmer un sous programme Exemple SUBROUTINE MUL23(I,J,K) INTEGER, INTENT(IN) :: I INTEGER, INTENT(OUT) :: J,K J=2*I K=3*I END SUBROUTINE MUL23 On l'utilise dans le programme (plus haut) par l'instruction: CALL MUL23(I,J,K)! où I,J,K sont des variables déclarées du programme

Librairies de sous programmes Il existe des sous programmes déjà codés (et débuggés) en fortran90 pour faire de nombreuses choses (algèbre matricielle, décomposition de fonctions...) Dans la mesure du possible, il faut utiliser ces sousprogrammes lorsque ils sont adaptés à vos problèmes car: Ils n'ont pas de bug Ils sont optimisés (temps de calcul faible): spécifiques au processeur permettent la paraléllisation du code à moindre cout par un changement de librairie (séquentiel >parallèle)

Comment utiliser une librairie de sous programmes? Chercher un sous programme adapté (aide en ligne, descriptif) Installer la librairie sur votre ordinateur (souvent déjà fait) Connaître et déclarer les entrées et sorties (types, dimensions, tailles...) du sous programme pour l'utiliser en boite noire Coder l'appel au sous programme (CALL...) Lors de la compilation, apeller la librairie au moment de la compilation du programme (option l en général): >ifort l lapack o toto.exe toto.f90 Certaines librairies sont déjà incluses dans certains compilateurs

Quelques librairies de sous programmes BLAS et LAPACK (calcul matriciel, inversion de matrices...) IMSL et NAG (calcul mathématiques) Mais aussi quelques librairies spécialisées: SPICE (NASA): librairie fortran pour les calculs d'orbite, d'orientation et de géométrie de objets planétaires DXFortran, MPLOT: librairies graphiques... Quelques sites web pour trouver les bonnes librairies fortran: www.netlib.org et www.fortranlib.com