Académique Documents
Professionnel Documents
Culture Documents
Dans la suite, on note les variables de façon différente selon qu'elles sont passées à la fonction par
adresse ou par valeur. Lors du codage dans un langage de programmation X, il convient d'adapter ces
conventions à la syntaxe du langage utilisé. En particulier, si le langage utilisé est le C++, le passage
par adresse peut prendre deux formes : pointeur ou référence (à noter, pas de passage par référence
en C).
Remarques :
1/ dans les langages utilisés, les indices varient à partir de la valeur 0, cette convention est utilisée
dans la suite,
2/ le type des éléments des vecteurs peut être quelconque ; dans la suite, on désigne par T le type de
ces éléments. Il est important de noter que les notations supposent que tous les opérateurs sont
utilisables avec tout type T, ce qui n'est pas toujours vrai (c'est faux en particulier pour les chaînes de
caractères au sens C, de même que pour String en Java) : comparer l'exemple utilisant le type string
et le type (char *) pour effectuer le même traitement.
3/ dans certains cas, en C/C++, on peut choisir, pour des raisons d'efficacité du code des passages de
paramètres différents de ceux utilisés ici. A préciser lors des TP,
4/ l'utilisation d'un "for" est bien adapté au traitement des vecteurs, l'utilisation d'un "tantque" est
toutefois préférée au niveau algorithmique à cause des variantes trop nombreuses de représentation
d'un schéma "pour".
1/ Parcours
début
i Ù 0;
tantque (i < n)
// un traitement quelconque sur l'élément courant
i Ù i + 1;
fintq;
fin; // Parcours_Vecteur
On recherche dans un vecteur v de n éléments la position (indice) d'une valeur val. La fonction
retourne la position de val dans v si cette valeur est présente, -1 sinon.
début
i Ù 0;
tantque (i < n)
si (v[i] = val)
retourner i;
finsi;
i Ù i + 1;
fintq;
retourner -1;
fin; // Acces_Associatif_Vecteur
On cherche à insérer dans un vecteur v de n éléments une valeur valins en position k. La fonction
retourne vrai si l'insertion a pu être réalisée. Le nombre d'éléments de v est modifié en fin d'action : la
vérification que le vecteur peut comporter 1 élément supplémentaire est laissée à la fonction
appelante (donc au programmeur si utilisation d'un vecteur statique en C/C++).
début
retourner vrai;
fin; // Insertion_Position_Vecteur
On cherche à insérer dans un vecteur v de n éléments une valeur valins après un élément de valeur
apres.
début
fin; // Insertion_Associative_Vecteur
début
retourner vrai;
fin; // Suppression_Position_Vecteur
On cherche à supprimer dans un vecteur v de n éléments une valeur valsup. Le nombre d'éléments
de v est modifié en fin d'action.
début
fin; // Suppression_Associative_Vecteur
Exemple de codage de ces fonctions en C++ avec des vecteurs dont les éléments sont de type
différent (entiers, chaînes C, string) : voir répertoire C++
Remarque : des conventions de type JAVADOC sont utilisées (on pourrait générer de la
documentation programme C++ par Javadoc).
Pour rappel :
Dans le cas d'un accès séquentiel, la structure de données dans laquelle s'effectue la recherche
comporte au départ n éléments, après le premier accès, il reste (au plus) n-1 éléments à examiner,
après l'accès suivant, il reste (au plus) n-2 éléments ; de façon générale, après k accès, il reste (au
plus) n-k éléments à examiner.
Dans le cas d'un accès dichotomique, la structure de données (qui ne peut être dans ce cas qu'un
vecteur trié) dans laquelle s'effectue la recherche comporte au départ n éléments, après le premier
accès, il reste (au plus) n/2 éléments à examiner, après l'accès suivant, il reste (au plus) n/4
éléments ; de façon générale, après k accès, il reste (au plus) n/2 k éléments à examiner.
Accès séquentiel ; cas favorable : 1 accès ; cas défavorable : 1024 ; en moyenne : 512.
Accès dichotomique ; cas favorable : 1 accès ; cas défavorable : au maximum 10.
Reste à pouvoir utiliser un vecteur trié : de nombreux algorithmes de tri ont été développés, certains
seront présentés dans le module Algorithmique II.
début
retourner -1;
fin; // Acces_Dichotomique_Vecteur