INSA Toulouse 1A Algorithme ADA Cours 1-5
-
Upload
purplera1n -
Category
Documents
-
view
217 -
download
0
Transcript of INSA Toulouse 1A Algorithme ADA Cours 1-5
-
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
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