INSA Toulouse 1A Algorithme ADA Cours 1-5

Embed Size (px)

Citation preview

  • 8/9/2019 INSA Toulouse 1A Algorithme ADA Cours 1-5

    1/4

    Algorithmique 1re anne

    Initiation la programmation - Ada (6/6)

    Didier Le Botlan

    INSA

    [email protected]

    1er semestre 20092010

    http://wwwdgeinew.insa-toulouse.fr/~lebotlan/index.html

    1 / 16

    Bloc IF

    Dfinition du bloc IF

    Syntaxe : if condition then

    B

    else

    B

    end if;

    condition est une

    expression boolenne

    B et B sont des blocs de code.

    Excution du bloc IF :

    1 La condition est value vrai ou faux (True ou False) ;2a Si cest vrai, le bloc B est excut (mais pas B)2b Si cest faux, le bloc B est excut (mais pas B)3 Le bloc IF est termin lorsque le bloc excut (B ou B)

    est termin.

    2 / 16

    Exemple de bloc if

    Dfinition de procdure ( placer avant le begin du programme)

    Cette fonction affiche la catgorie au judo selon le poids indiqu.

    procedure Categorie_Hommes ( Poids : Int ege r ) is

    begin

    i f Poids < 60 then Txt.Put_Line( "Super leger") ;

    elsif Poids

  • 8/9/2019 INSA Toulouse 1A Algorithme ADA Cours 1-5

    2/4

    Le bloc FOR en une page

    Voici un bloc squence :

    Fermer_Electrovanne (1) ;

    Fermer_Electrovanne (2) ;

    Fermer_Electrovanne (3) ;

    Fermer_Electrovanne (4) ;

    Fermer_Electrovanne (5) ;

    Fermer_Electrovanne (6) ;Fermer_Electrovanne (7) ;

    Fermer_Electrovanne (8) ;

    Fermer_Electrovanne (9) ;

    Fermer_Electrovanne (10) ;

    Fermer_Electrovanne (11) ;

    Fermer_Electrovanne (12) ;

    La mme chose avec un bloc FOR :

    for No_Vanne in 1..12 loop

    Fermer_Electrovanne (No_Vanne) ;

    end loop ;

    Des questions ?

    5 / 16

    Le bloc WHILE

    Le bloc FOR est un itrateur : il rpte un bloc pour tout x X.

    Le bloc WHILE rpte un bloc tant quune condition le permet

    Dfinition du bloc WHILE

    Syntaxe : while condition loop

    B

    end loop ;

    condition est une

    expression boolenne

    B est un bloc de code

    Excution du bloc WHILE :

    1 La condition est value vrai ou faux (True ou False) ;2a Si cest vrai, le bloc B est excut, puis le bloc while est

    excut de nouveau (retour ltape 1).2b Si cest faux, le bloc while est termin.

    6 / 16

    Exemple de bloc while

    Mesurer_Niveau_Cuve Float

    Niveau est une variable relle dclare avant le beginet Mesurer_Niveau_Cuve une fonction sans argument

    Mesure initialeNiveau : = Mesurer_Niveau_Cuve ;

    Ouvrir_Electrovanne ;

    while Niveau < Capacite loop

    Niveau := Mesurer_Niveau_Cuve ;

    end loop ;

    Fermer_Electrovanne ;

    Que se passe-t-il si au dbut le niveau est ou gal la capacit?

    7 / 16

    Le Type Article

    Un article (record) est un regroupement de plusieurs types.

    Dclaration de type

    placer avant le begintype Une_Duree is record

    Heures : Integer ;

    Minutes : Integer ;

    Secondes : Float ;

    end record ;

    Attributs

    Foo : Une_Duree ;Heures =

    . . .

    Minutes =. . .

    Secondes =. . .

    Foo

    8 / 16

  • 8/9/2019 INSA Toulouse 1A Algorithme ADA Cours 1-5

    3/4

    Initialisation

    Dclaration et initialisation

    Duree_du_Cours : Une_Duree := (1,15,0.0) ;

    Une manire quivalente dinitialiser la variable :

    Duree_du_Cours : Une_Duree := (Heures => 1,

    Minutes => 15,Secondes => 0.0) ;

    Les cadres sont typs avec la rgle Construction dun article

    (1, 15, 0.0) Une_Duree

    (Heures => 1, Minutes => 15, Secondes => 0.0) Une_Duree

    9 / 16

    Accs aux attributs

    Heures =0

    Minutes =30

    Secondes =0.0

    Duree

    _du_Cour

    s

    Accs aux attributs

    Duree_Du_Cours.Heures := 0;

    Duree_Du_Cours.Minutes := Duree_Du_Cours.Minutes * 2 ;

    Laccs se fait par notation pointe (comme pour les acteurs).

    10 / 16

    Exemple

    type Un_Complexe is record

    Re : Float ;

    Im : Float ;

    end record ;

    Attention, ceci nest quun type (ce nest pas une variable !)

    On ne peut jamais crire Un_Complexe.Re ni

    Un_Complexe.Im .

    Un type sert dfinir une variable ou un argument :

    Z : Un_Complexe;

    11 / 16

    Exemple

    Additionner deux complexes

    function Add (C1, C2 : Un_Complexe) return Un_Complexe is

    Resultat : Un_Complexe ;

    begin

    Resultat .Re := C1 .Re + C2 .Re ;

    Resultat .Im := C1 .Im + C2 .Im ;return Resultat;

    end Add;

    O sont les nombres complexes ?

    Un_Complexe

    12 / 16

  • 8/9/2019 INSA Toulouse 1A Algorithme ADA Cours 1-5

    4/4

    Exemple

    Convertir une dure en secondes

    function Duree_To_Sec (D : Une_Duree) return Integer is

    begin

    return Integer(D.Secondes) + D.Minutes * 60 + D.Heures * 3600 ;

    end Duree_To_Sec ;

    13 / 16

    Exemple

    Convertir des secondes en une dure

    function Sec_To_Duree (Sec : Integer) return Une_Duree is

    Resultat : Une_Duree;

    begin

    Resultat.Heures := Sec / 3600;Resultat.Minutes := (Sec / 60) mod 60;

    Resultat.Secondes:= Float(Sec mod 60) ;

    return Resultat;

    end Sec_To_Duree ;

    14 / 16

    Exemple

    Additionner deux dures, reloaded

    function Add_Durees (Duree1, Duree2 : Une_Duree)

    return Une_Duree is

    beginreturn Sec_To_Duree(Duree_To_Sec(Duree1) +

    Duree_To_Sec(Duree2)) ;

    end Add_Durees;

    15 / 16

    Exemple

    Multiplier une dure par 4/3

    function Tiers_Temps (Duree : Une_Duree)

    return Une_Duree is

    begin

    return Sec_To_Duree(Duree_To_Sec(Duree) * (4 / 3))

    end Tiers_Temps ;

    O est le bug ?

    16 / 16