insa toulouse 1a algorithme ada fascicule 2

Upload: purplera1n

Post on 29-May-2018

218 views

Category:

Documents


1 download

TRANSCRIPT

  • 8/9/2019 INSA Toulouse 1A Algorithme ADA Fascicule 2

    1/16

    Aide-mmoire Ada

    UV Algorithmique 2

    INSA premire anne

    Structures de donnes

    NOM : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . PRNOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    GROUPE : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    Campagne 20092010 Didier LE BOTLANSecond semestrec o n t a c t . l e b o t l a n @ i n s a - t o u l o u s e . f r

  • 8/9/2019 INSA Toulouse 1A Algorithme ADA Fascicule 2

    2/16

  • 8/9/2019 INSA Toulouse 1A Algorithme ADA Fascicule 2

    3/16

    1

    Introduction

    Alors que lUV1 couvre la base de la programmation, il manque les outils de passage lchelle : comment crire un programme qui gre un gnome de 3 milliards depaire de bases, ou un rseau routier comprenant des millions de segments?

    LUV2 se focalise sur la reprsentation des informations et sur la dcompositiondun problme complexe en tches simples.

    Notations

    La notation e , o est un type, signifie que lexpression e a le type . De mme B bloc signifie que B est un bloc de code Enfin, D definition signifie que D est une dfinition, et doit donc tre

    place avant le begin.

    Table des matires

    PRAMBULE

    Rgles de qualit 2

    DFINIR DES INTERVALLES

    Sous-types 3Types numrs 4

    Bloc CASE 5

    ENSEMBLES DE VARIABLES

    Tableaux 6Parcours de tableaux 7Matrices 8Parcours de matrices 9

    MODIFIER UN ARGUMENT DE PROCDURE

    Mode de passage IN OUT 10

    Procdures avec arguments IN OUT 11

    INSRER DES DFINITIONS AU MILIEU D UN BLOC

    Bloc DECLARE 12

  • 8/9/2019 INSA Toulouse 1A Algorithme ADA Fascicule 2

    4/16

    2

    Afin damliorer la robustesse des programmes, il convient de respecter cer-taines normes de qualit (issues pour la plupart de la norme CNES pour Ada).

    Rgles de nommage

    Un identificateur est aussi informatif que possible, sans tre trop long. Un nom de type commence par Un_, Une_, ou Des_. Un nom de procdure commence en gnral par un verbe.

    Rgles esthtiques

    Le code est indent (dcalage judicieux des blocs, automatique dans emacs). Le code est ar, mais sans excs. Des commentaires perspicaces aident la lecture du code.

    Rgles de conception

    Dfinir des constantes si besoin : part dans les tests, il ne doit pas yavoir de nombres aprs le begin (sauf ventuellement 0 ou 1).

    Utiliser une boucle for chaque fois que cest possible, plutt quuneboucle while.

    Le return dune fonction se situe la fin de la fonction.

    Chaque fonction ou procdure majeure doit tre teste avec uneprocdure associe : la fonction Foo est teste avec la procdureTEST_Foo.

    Rgles de qualit

    Exemples didentificateurs

    Nombre_Mots procedure Trouver_Min type Un_Gnome

    Largeur procedure Afficher_Ensemble type Des_No_Telephone

    N procedure Message type Gnome

    ZKLFS procedure Trop_Grand type Tom_Cruise

    X et Y sont des noms acceptables pour des coordonnes.

    Lorsque le rle dune procdure est clair, son nom nest pas forcment un verbe.Par exemple Pause(10).

  • 8/9/2019 INSA Toulouse 1A Algorithme ADA Fascicule 2

    5/16

    3

    Un sous-type reprsente un intervalle dans un type existant.

    Dfinition de sous-types

    subtype Un_Foo is un_type_existant range intervalle ; definition

    Le sous-type peut ensuite tre utilis comme un type normal. Par exemple, pourdclarer une variable : Compteur : Un_Foo ;

    Sous-types

    Exemples de sous-types

    DFINITION DU SOUS-TYPE ( definition ) INTERVALLE REPRSENT

    subtype Un_Foo is Integer range -50 .. 2000 ; [50 ; 2000]

    subtype Un_Bar is Float range 0.0 .. 1.0 ; [0.0 ; 1.0]

    subtype Un_Moo is Character range A .. D ; A, B, C, D

    subtype Un_Bla is Integer range IntegerFirst .. -40 ; [ ; 40]

    subtype Des_Foo is Integer range 0 .. IntegerLast ; [0 ; +]

    Noter quen Ada nexiste pas. Le plus grand entier vaut environ 2.109Mme remarque pour les rels (Float) : le plus grand rel vaut 3.438

    Les sous-types Natural ([0 ; +]) et Positive ([1 ; +]) sont prdfinis en Ada.

    Notes personnelles

  • 8/9/2019 INSA Toulouse 1A Algorithme ADA Fascicule 2

    6/16

    4

    Un type numr reprsente un ensemble fini de valeurs.

    Dfinition dun type numr

    type Un_Jour_Semaine is (Lun, Mar, Mer, Jeu, Ven, Sam, Dim) ; definition

    Un type numr sutilise comme tout type ou sous-type :Demain : Un_Jour_Semaine ;

    Le compilateur dtecte automatiquement les incohrences :Demain := Mer ; Correct

    Demain := Mercredi ; Erreur de compilation (Mercredi est inconnu)

    Types numrs

    RGLE Type numr

    Aprs une dfinition type Un_Foo is (Nom1, Nom2, . . ., Nomk) ;

    les k jugements Nomi Un_Foo sont valides pour 1 i k.

    Ainsi, on a Dim Un_Jour_Semaine ( comparer avec Dim String).

    Pour tester une variable dun type numr, on utilise trs souvent un bloc case.

    Notes personnelles

  • 8/9/2019 INSA Toulouse 1A Algorithme ADA Fascicule 2

    7/16

    5

    Le bloc case permet de tester un type numr.

    Dfinition du bloc CASE

    Syntaxe : case e is

    when Nom1 => B1 ;...when Nomk => Bk ;

    end case ;

    Bi bloc

    e , o est un type numr.

    Nomk

    Excution du bloc CASE :

    1 L expression e est calcule et donne une valeur Nomj .2 Le bloc Bj correspondant est excut, puis le bloc case se termine.

    Il est possible de factoriser plusieurs cas en crivant when Nom1 | Nom2

    Bloc CASE

    RGLE Bloc CASE

    Un bloc CASE est un bloc :

    Si e Nomi et Bi bloc,

    alors

    case e is

    when Nomi => Bi. . .

    end case ;

    bloc

    Exemple dutilisation

    bloc

    1 Cette procdure affiche son argument de type Un_Jour_Semaine (voir page de gauche).

    2 On suppose que lacteur Txt est dfini.

    4 procedure Afficher_Jou r (Jour : Un_Jour_Semaine) is

    5 begin

    6

    case Jour is7 when Lun => Txt . Put ("Lundi, jour difficile") ;

    8 when Mar | Mer | Jeu => Txt .Put ( "Milieu de la semaine") ;

    9 when Ven => Txt . Put ("Vendredi") ;

    10 when Sam | Dim => Txt . Put ("Week end") ;

    11 end case ;

    12 end Afficher_Jour ; definition

    L expression e teste par le bloc case est largument Jour (ligne 6).

    Afficher_JourJour : Un_Jour_Semaine

  • 8/9/2019 INSA Toulouse 1A Algorithme ADA Fascicule 2

    8/16

    6

    Un tableau (array) reprsente un ensemble fini de variables du mme typerepres par un indice : v1, v2, . . ., vk.

    Dfinition dun type tableau

    type Des_Foo is array (Integer range ) of Float;

    definition

    Ce type Des_Foo permet de dfinir des ensembles de variables relles :

    Bar est une famille de 5 variables relles, numrotes de 1 5

    Bar : Des_Foo (1 .. 5) ;

    Moo est une famille de 3 variables relles, numrotes de 10 12

    et initialises 0.0

    Moo : Des_Foo (10 ..1 2) := (others => 0.0) ; definition

    Accs aux variables du tableau

    Lexpression Bar( i) , o i est un entier, renvoie la ieme variable du tableau.

    Pour modifier sa valeur, il suffit dcrire : Bar( i) := valeur;

    Tableaux

    Bar 1 2 3 4 5

    Moo 10 11 12

    RGLE Tableau

    Aprs la dfinition type Des_Foo is array (Integer range ) of o est untype quelconque,

    Si e1, e2 Integer alors Bar : Des_Foo (e1 .. e2) definition

    Si e Des_Foo et e Integer alors e(e)

    Si e Des_Foo et e Integer et e alors e(e) := e bloc

  • 8/9/2019 INSA Toulouse 1A Algorithme ADA Fascicule 2

    9/16

    7

    Pour parcourir toutes les variables du tableau, on utilise une boucle for.Les indices de dbut et de fin du tableau sont obtenus avec les attributs FIRSTet LAST.

    Parcours dun tableau

    for Index in Bar F irs t . . Bar Last loopIci on ajoute 1.0 toutes les variables

    Bar(Index) := Bar(Index) + 1.0 ;

    end loop ;

    Lintervalle peut scrirede manire quivalente

    BarRange

    Parcours de tableaux

    RGLE Attributs dun tableau

    Aprs la dfinition type Des_Foo is array (Integer range ) of o est un

    type quelconque,

    Si e : Des_Foo alors eFirst Integer et eLast Integer

    Notes personnelles

  • 8/9/2019 INSA Toulouse 1A Algorithme ADA Fascicule 2

    10/16

    8

    En Ada, une matrice de n lignes et m colonnes se reprsente par un tableau(array) deux dimensions.

    Dfinition dun tableau 2 dimensions

    type Une_Matrice is array (Integer range , Integer range ) of Float;

    definition

    Bar est une matrice de 2 lignes et 4 colonnes

    Bar : Une_Matrice(1. .2 , 1..4 ) ;

    Moo est une matrice de 3 lignes et 3 colonnes initialise 0

    Moo : Une_Matrice(5 .. 7 , 0.. 2) := (others => (others => 0.0)) ; definition

    Accs aux variables de la matrice

    Lexpression Bar( i, j) , o i et j sont des entiers, renvoie la variable si-tue ligne i, colonne j.Pour modifier sa valeur, il suffit dcrire : Bar( i, j) := valeur;

    Matrices

    Bar :1 2 3 4

    1

    2

    Moo :0 1 2

    5

    6

    7

    RGLE Matrice

    Aprs la dfinition type Une_Mat is array (Integer range , Integer range ) of o est un type quelconque,

    Si e1, e2, e3, e4 Integer alors Bar : Une_Mat (e1 .. e2, e3 .. e4) definition

    Si e Une_Mat et e1, e2 Integer alors e(e1, e2)

    Si e Une_Mat , e1, e2 Integer et e alors e(e1, e2) := e bloc

  • 8/9/2019 INSA Toulouse 1A Algorithme ADA Fascicule 2

    11/16

    9

    Pour parcourir toute la matrice ligne par ligne, il suffit dimbriquer deux bouclesfor (comparer avec le parcours de tableaux, page prcdente).Les indices des lignes ou des colonnes sont obtenus avec les attributsRANGE(1) et RANGE(2), respectivement.

    Parcours dune matrice

    for Ligne in Bar Firs t (1 ). .Bar Last(1) loop

    for Colonne in Bar First (2 ). .Bar Last(2) loop

    On met toutes les variables 0

    Bar( Ligne , Colonne) := 0.0

    end loop ;

    end loop ;

    Les deux intervallespeuvent scrire demanire quivalente

    BarRange(1) et

    BarRange(2) .

    Parcours de matrices

    RGLE Attributs dune matrice

    Aprs la dfinition type Une_Mat is array (Integer range , Integer range ) of

    Si e : Une_Mat alors eFirst(1) Integer et eLast(1) Integer

    De mme pour eFirst(2) et eLast(2)

    Notes personnelles

  • 8/9/2019 INSA Toulouse 1A Algorithme ADA Fascicule 2

    12/16

    10

    Par dfaut, il est interdit de modifier les arguments des procdures et fonctions.On dit que les arguments sont en mode IN, c.--d. en entre seulement.

    Mode IN Rouler_VersDest : Character

    Il est possible de dfinir des procdures qui modifient leur(s) argument(s), enparticulier lorsque ce sont des tableaux ou des matrices.Un argument modifi est en mode IN OUT.

    Mode IN OUT Ajouter_ConstanteArg : Une_Matrice

    Lors de lexcution de la procdure, la matrice passe en argument est modifie.

    Mode de passage IN OUT

    Notes personnelles

  • 8/9/2019 INSA Toulouse 1A Algorithme ADA Fascicule 2

    13/16

    11

    Une procdure peut modifier ses arguments qui sont en mode IN OUT.(en gnral des tableaux ou des matrices)

    Dfinition de procdure avec argument IN OUT

    Ce in est facultatif

    procedure Foo (Bar1 : in Float ; Bar2 : in out Une_Matrice) is

    beginCorps de la procdure

    end Foo ; definition

    Procdures avec arguments IN OUT

    Exemple de procdure avec argument IN OUT

    Largument Mat esten mode IN OUT.Il est modifiable

    Cette procdure ajoute une constante chaque variable de la matrice

    procedure Ajouter_Constante (Const : in Float ; Mat : in out Une_Matrice ) is

    beginfor Ligne in MatRange(1) loop

    for Col in MatRange(2) loop

    Mat(Ligne, Col) := Mat(Ligne, Col) + Const ;

    end loop ;

    end loop ;

    end Ajouter_Constante ; definition

    Ajouter_ConstanteConst : FloatMat : Une_Matrice

    UNE PROCDURE AVEC ARGUMENTS IN OUT NEST PAS UNE FONCTION !(Elle ne renvoie rien)

  • 8/9/2019 INSA Toulouse 1A Algorithme ADA Fascicule 2

    14/16

    12

    Un bloc declare permet dinsrer des dfinitions dans un bloc quelconque.

    RGLE Bloc DECLARE

    Si Dj definition, et B bloc,

    alors

    declareDj ;

    begin

    B ;

    end;

    bloc

    Les dfinitions Dj sont values

    puis le bloc B est excut.

    Bloc DECLARE

    Exemple de bloc declare

    with GAda. Text_IO , GAda. Integer_Text_IO ;procedure Mission is

    package Txt renames GAda. Text_IO ;

    package ITxt renames GAda. Integer_Text_IO ;

    type Des_Entiers is array(Integer range ) of Integer ;

    Nb_Termes : Int eger ;

    begin

    Txt.Put("Combien de termes a entrer ? ") ;

    Nb_Termes := IT xt .FGet ;

    declare

    ZeTab : Des_Entiers ( 1 . .Nb_Termes) ; definition

    begin

    for Indice in ZeTabRange loop

    Txt.Put("Entrer le terme numero " & Integer Image(Indice) & " : ") ;

    ZeTab( Indice ) := ITxt .FGet ;

    end loop ;

    end ;

    end Mission ;

    bloc

  • 8/9/2019 INSA Toulouse 1A Algorithme ADA Fascicule 2

    15/16

    13

    Vade mecum

    SOUS-TYPE (p. 3)

    subtype Un_Foo is un_type_existant range intervalle

    ex : subtype Natural is Integer range 0 .. IntegerLast

    TYPE NUMR (p. 4)

    type Un_Signal is (Rouge, Orange, Vert ) ;

    Dclaration dune variable

    Foobar : Un_Signal ; definition

    Affectation de la variable

    Foobar := Orange ; bloc

    BLOC CASE (p. 5)

    case Foobar is

    when Rouge => B1 ;

    when Orange => B2 ;

    when Vert => B3 ;

    end case ; bloc

    TABLEAUX (p. 6)

    Dfinition dun type tableau

    type Des_Foo is array (Integer range ) of Float;

    Dclaration dune famille de 5 variables

    Bar : Des_Foo (1 .. 5) ;

    Affectation des variables du tableau

    Bar(1) := 12.0 ;

    Bar(2) := Bar(1) 3.0 ;

    PARCOURS DE TABLEAUX(p. 7)

    for Num in BarRange loop

    Bar(Num) := Bar(Num) + 1.0 ;

    end loop ;

    MATRICES (p. 8)

    Dfinition dun type matrice

    type Une_Mat is array (Integer range ,

    Integer range ) of Float;

    Dclaration dune matrice 2x3

    Moo : Une_Mat (1 .. 2 , 1.. 3) ;

    Affectation des variables de la matriceMoo(1 ,1) := 0.0 ; Ligne 1, colonne 1

    Moo(2 ,1) := 100.0 ; Ligne 2, colonne 1

    PARCOURS DE MATRICE (p. 9)

    for Ligne in MooRange(1) loop

    for Col in MooRange(2) loop

    Moo(Ligne , Col) := 5.0 ;

    end loop ;

    end loop ;

    BLOC DECLARE (p. 12)

    declare

    Dj ; definition

    begin

    B;

    bloc

    end ;

    PROCDURE AVEC ARGUMENT IN OUT (p. 11)

    procedure Foo (Bar1 : in Float ; Bar2 : in out Une_Mat) is

    begin

    Corps de la procdure

    end Foo ;

  • 8/9/2019 INSA Toulouse 1A Algorithme ADA Fascicule 2

    16/16

    Document compil le 14 janvier 2010.