INSA Toulouse 1A Algorithme ADA Fascicule 2
INSA Toulouse 1A Algorithme ADA Fascicule 2
INSA Toulouse 1A Algorithme ADA Fascicule 2
UV Algorithmique 2
INSA première année
Structures de données
G ROUPE : ...................................
Notations
◦ La notation ` e ∈ τ , où τ est un type, signifie que l’expression e a le type τ .
◦ De même ` B ∈ bloc signifie que B est un bloc de code
◦ Enfin, ` D ∈ definition signifie que D est une définition, et doit donc être
placée avant le begin.
P RÉAMBULE
Règles de qualité 2
E NSEMBLES DE VARIABLES
Tableaux 6
Parcours de tableaux 7
Matrices 8
Parcours de matrices 9
1
Règles de qualité
Afin d’améliorer la robustesse des programmes, il convient de respecter cer-
taines normes de qualité (issues pour la plupart de la norme CNES pour Ada).
Règles 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 procédure commence en général par un verbe.
Règles esthétiques
◦ Le code est indenté (décalage judicieux des blocs, automatique dans emacs).
◦ Le code est aéré, mais sans excès.
◦ Des commentaires perspicaces aident à la lecture du code.
Règles de conception
◦ Définir des constantes si besoin : à part dans les tests, il ne doit pas y
avoir de nombres après le begin (sauf éventuellement 0 ou 1).
◦ Utiliser une boucle for chaque fois que c’est possible, plutôt qu’une
boucle while.
◦ Le return d’une fonction se situe à la fin de la fonction.
◦ Chaque fonction ou procédure majeure doit être testée avec une
procédure associée : la fonction Foo est testée avec la procédure
TEST_Foo.
Exemples d’identificateurs
Nombre_Mots procedure Trouver_Min type Un_Gnome
Largeur procedure Afficher_Ensemble type Des_No_Telephone
2
Sous-types
Un sous-type représente un intervalle dans un type existant.
Définition 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, pour
déclarer une variable : Compteur : Un_Foo ;
Exemples de sous-types
Noter qu’en Ada ∞ n’existe pas. Le plus grand entier vaut environ 2.109
Même remarque pour les réels (Float) : le plus grand réel vaut 3.438
Les sous-types Natural ([0 ; +∞]) et Positive ([1 ; +∞]) sont prédéfinis en Ada.
Notes personnelles
3
Types énumérés
Un type énuméré représente un ensemble fini de valeurs.
Pour tester une variable d’un type énuméré, on utilise très souvent un bloc case.
Notes personnelles
4
Bloc CASE
Le bloc case permet de tester un type énuméré.
5
Tableaux
Un tableau (array) représente un ensemble fini de variables du même type
repérées par un indice : v1 , v2 , . . ., vk .
Définition d’un type tableau
type Des_Foo is array (Integer range <>) of Float ;
∈ definition
Ce type Des_Foo permet de définir des ensembles de variables réelles :
Bar est une famille de 5 variables réelles, numérotées de 1 à 5
Bar : Des_Foo (1..5) ;
Moo est une famille de 3 variables réelles, numérotées de 10 à 12
et initialisées à 0.0
Moo : Des_Foo (10..12) := (others => 0.0) ; ∈ definition
Bar 1 2 3 4 5
Moo 10 11 12
R ÈGLE ` « Tableau »
Après la définition type Des_Foo is array (Integer range <>) of τ où τ est un
type quelconque,
6
Parcours de tableaux
Pour parcourir toutes les variables du tableau, on utilise une boucle for.
Les indices de début et de fin du tableau sont obtenus avec les attributs ‘FIRST
et ‘LAST.
Parcours d’un tableau
L’intervalle peut s’écrire
for Index in Bar ’ First . . Bar ’ Last loop
Ici on ajoute 1.0 à toutes les variables
de manière équivalente
Bar(Index) := Bar(Index) + 1.0 ; Bar’Range
end loop ;
Notes personnelles
7
Matrices
En Ada, une matrice de n lignes et m colonnes se représente par un tableau
(array) à deux dimensions.
Définition d’un tableau à 2 dimensions
type Une_Matrice is array (Integer range <>, Integer range <>) of Float ;
∈ definition
0 1 2
1 2 3 4
5
Bar : 1 Moo :
6
2
7
R ÈGLE ` « Matrice »
Après la définition type Une_Mat is array (Integer range <>, Integer range <>) of τ
où τ est un type quelconque,
8
Parcours de matrices
Pour parcourir toute la matrice ligne par ligne, il suffit d’imbriquer deux boucles
for (comparer avec le parcours de tableaux, page précédente).
Les indices des lignes ou des colonnes sont obtenus avec les attributs
‘RANGE(1) et ‘RANGE(2), respectivement.
Notes personnelles
9
Mode de passage IN OUT
Par défaut, il est interdit de modifier les arguments des procédures et fonctions.
On dit que les arguments sont en mode IN, c.-à-d. en entrée seulement.
Notes personnelles
10
Procédures avec arguments IN OUT
Une procédure peut modifier ses arguments qui sont en mode IN OUT.
(en général des tableaux ou des matrices)
11
Bloc DECLARE
Un bloc declare permet d’insérer des définitions dans un bloc quelconque.
12
Vade mecum
SOUS-TYPE (p. 3)
subtype Un_Foo is un_type_existant range intervalle
ex : subtype Natural is Integer range 0 .. Integer’Last
BLOC DECLARE (p. 12) PROCÉDURE AVEC ARGUMENT IN OUT (p. 11)
declare procedure Foo (Bar1 : in Float ; Bar2 : in out Une_Mat) is
Dj ; ∈ definition begin
begin Corps de la procédure
B ; ∈ bloc end Foo ;
end ;
13
Document compilé le 14 janvier 2010.