Correspondances Vecteurs Ada-Algo

Transcription

Correspondances Vecteurs Ada-Algo
Mémento
sur
les
vecteurs
(Ada
—
langage
Algorithmique)
1
Notion
de
vecteur
Un vecteur est une collection dʼobjets dʼun même type rangés dans un tableau dont les « cases » sont indicées.
Les indices ne font pas partie du tableau.
2
Déclaration
d’un
type
vecteur
et
d’une
variable
de
type
vecteur
En langage algorithmique, les types vecteurs sont contraints et les indices sont toujours des entiers.
2.1
En Ada, les types vecteurs peuvent être contraints ou non contraints et les indices peuvent être de
nʼimporte quel type discret (entiers, caractères, énumérés).
En
algorithmique
(vecteur
contraints)
2.1.1 Déclaration
d’un
type
vecteur
:
Type mon_vecteur : tableau[1..nmax] de t ; {t est un type simple, structuré ou vecteur et nmax un entier}
2.1.2 Déclaration
d’une
variable
de
type
vecteur
:
V[1..n] : mon_vecteur ; {V est une variable de type mon_vecteur dont la borne inférieure des indices est 1 et la
borne supérieure n, n ≤ nmax}
2.2
2.2.1
En
ada
Vecteur
contraint
vs
vecteur
non
contraint
– Les types vecteurs peuvent être déclarés sous la forme « contraint » ou « non contraint »
– Les variables de type vecteur doivent être contraintes.
– Les paramètres formels de fonctions ou de procédures de type vecteur ne sont jamais contraints, leur type peut
lʼêtre ou ne pas lʼêtre.
2.2.2 Déclaration
d’un
type
vecteur
non
contraint
:
--Modèle
type TV_Vecteur is array (type_indice range <>) of t ;
-- t est un type simple, structuré, ou vecteur
-- type_indice est le type des indices ce peut être par exemple integer,
natural, positive
-- <> indique que l’intervalle des indices n’est pas contraint
--Exemple
type TV_Suite is array (Integer
range <>) of Integer ;
2.2.3 Déclaration
d’un
type
vecteur
contraint
:
--Modèle
type TV_Vecteur is array (borne_inférieure..borne_supérieure) of t ;
-- t est un type simple, structuré, ou vecteur
-- borne_inférieure est la borne inférieure de l’intervalle des indices
-- borne_supérieure est la borne supérieure de l’intervalle des indices
--Exemples
type TV_Mesures is array (101..200) of Float ;
type T_Jour is(Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi,Dimanche) ;
type TV_Semaine is array (T_Jour) of Boolean ;
2.2.4 Déclaration
de
variables
:
--Modèle
Nom_de_variable : Nom_d’un_Type_de_vecteur_contraint ;
--Exemples
V1 : TV_Mesures ; --un vecteur de Float indicé de 101 à 200
V2 : TV_semaine ; --un vecteur de Boolean indicé de Lundi à Dimanche
V3 : TV_suite(1..10) ; --un vecteur TV_suite contraint
Page
1/2
3
Accès
à
l’élément
d’indice
i
dans
un
vecteur
V
en ada
V(i)
V[i]
Bien noter que lʼon utilise des parenthèses en Ada et des crochets dans un algorithme
4
dans un algorithme
Paramètre
de
type
vecteur
d’une
fonction
ou
procédure
4.1
4.1.1
En
algorithmique
Paramètre
formel
d’une
fonction
ou
procédure
On utilise obligatoirement un vecteur contraint.
Exemple : fonction somme ( d V[1..n] : vecteur ) : entier ;
V est le nom du vecteur manipulé dans la fonction, 1 est la borne inférieure des indices, n est la borne supérieure
des indices.
Dans le corps de la fonction ou de la procédure, on peut lire nʼimporte quel V[i] sous la condition que 1 ≤ i ≤ n.
4.1.2
Paramètre
effectif
lors
de
l’appel
d’une
fonction
ou
procédure
On utilise obligatoirement un vecteur contraint.
Exemple d’appel : mon_entier := somme( Mon_Vect[1..m] )
Mon_Vect est le paramètre effectif, dans somme il « devient » V et n prend pour valeur m.
4.2
4.2.1
En
Ada
Paramètre
formel
d’une
fonction
ou
procédure
On utilise obligatoirement un vecteur non contraint afin de ne pas écrire plusieurs fonctions ou procédures qui font
la même chose sur des vecteurs de tailles différentes.
Exemples :
function somme (V : in TV_vecteur ) return integer is ...
procedure tri (V : in out TV_vecteur) is ...
V est le nom du vecteur manipulé dans la fonction ou la procédure. Il nʼest pas contraint.
Dans le corps de la fonction ou de la procédure, on peut lire nʼimporte quel V(i) sous la condition que
V'First ≤ i ≤ V'Last.
V'First est la valeur de la borne inférieure des indices, V'Last est la valeur de la borne supérieure des indices.
4.2.2
Paramètre
effectif
lors
de
l’appel
d’une
fonction
ou
procédure
On a bien sûr un vecteur contraint.
Exemple d’appel : mon_entier := somme( Mon_Vect(k..l) )
Mon_Vect est le paramètre effectif, dans somme il « devient » V, V'First vaudra k et V'Last vaudra l.
On peut aussi passer un vecteur complet mon_entier := somme( Mon_Vect )
4.3
Exemple
complet
On suppose que le type vectent (vecteur dʼentiers) a été déclaré au préalable.
en ada
en algorithmique
Déclaration dʼune fonction avec un vecteur comme paramètre formel
function somme (V : in vectent) return integer is
fonction somme (d V[1..n] : vectent) : entier ;
-- {V vide ou non} -> {résultat = somme élems V}
spécification {n ≥ 0}  {résultat = Σ V[1..n]}
s, i : integer ;
s, i : entier ;
begin
debfonc
s := 0 ; i := V'First ;
s := 0 ; i := 1 ;
while i <= V'Last loop
tantque i ≤ n faire
s := s + V(i) ;
s := s + V[i] ;
i := i + 1 ;
i := i + 1 ;
end loop;
finfaire ;
return s ;
retour s ;
end somme ;
finfonc ;
Appel de la fonction
mon_entier := somme( Mon_Vect(1..20) );
mon_entier := somme( Mon_Vect[1..20] ) ;
Page
2/2


Documents pareils