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