insa toulouse 1a algorithme ada fascicule 2
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.