Académique Documents
Professionnel Documents
Culture Documents
II .
tableaux et
chaînes de
caractères
Ecole Polytechnique de Tunisie | Cours Algorithmique et Structures de Données Ecole Polytechnique de Tunisie | Cours Algorithmique et Structures de Données
21 22
Les structures de données simples ne suffisent pas pour concevoir tout types d'algorithmes. ALGORITHM init_tab
Par exemple, si on veut faire des statistiques sur la moyenne d'âge d'un échantillon de OUTPUT INT tab [100];
population, il faudrait stocker une certaine quantité de données de même nature (l'âge) pour BEGIN
pouvoir ensuite déterminer le nombre d'individus sondés et calculer la moyenne d'âge. Si INT nb_val;
l'on connaissait le nombre N de personnes à interroger, on pourrait déclarer le même nombre INT i;
de variables (age1, age2, ... ageN), mais cette solution n'est pas une bonne solution et d'un INT val;
autre côté, on ne connait pas la taille de l'échantillon de population.
write ("combien de valeurs voulez-vous saisir : ");
La plupart des bons algorithmes fonctionnent grâce à une méthode astucieuse pour read (nb_val);
organiser les données. On distingue quatre grandes classes de structures de données :
FOR i ← 0 TO nb_val - 1 DO
• Les structures de données séquentielles (tableaux) ; write ("donner la valeur N° ", i, " : ");
read (val);
• Les structures de données linéaires (liste chaînées) ;
tab [i] ← val;
• Les arbres ; END FOR
• Les graphes. END
Algo 8. - Initialisation d'un tableau
II.1 Définition
L'instruction tab [i] ← val veut dire initialiser la valeur à l'indice i du tableau avec le contenu
Un tableau est une structure de donnée séquentielle permettant de stocker des données de de la variable val. Il n'est pas nécessaire d'utiliser la variable intermédiaire val. En effet, on
même type, chacun de ces éléments étant repéré par un indice unique. C'est une structure peut directement lire la valeur donnée par l'utilisateur et directement initialiser la valeur à
statique dont le nombre maximal N d'éléments qu'il peut contenir est connu d'avance. La l'indice i du tableau :
taille mémoire d'un tableau dépend de la nature des éléments qu'il peut contenir.
Généralement, la taille mémoire se calcule simplement par la formule : N × taille (TYPE) ; write ("donner la valeur N° ", i, " : ");
c'est à dire le nombre maximal d'éléments que peut contenir le tableau multiplié par la taille read (tab[i]);
de l'élément. II.2.2 Insertion d'un élément
Déclaration d'un tableau : TYPE nom_tableau [TAILLE_MAX] où TYPE est le type L'insertion peut se faire au début, au milieu où à la fin d'un tableau à condition de ne pas
d'éléments que va contenir le tableau. Ce type peut être n'importe quel type de base déjà vu dépasser la taille maximale c'est à dire le nombre maximum de valeurs déclaré avant l'usage
ou un type complexe ou pointeur que nous verrons plus tard. du tableau. Il est donc impératif de vérifier au préalable que le nombre d'éléments contenus
Un tableau occupe une zone mémoire contigüe. Si on déclare un tableau d'une taille N et dans le tableau est strictement inférieur au nombre total d'éléments qu'il peut contenir.
qu'il y a pas assez de mémoire contigüe pour contenir le tableau, l'opération échoue même si En ce qui concerne l'insertion en fin de tableau, il suffit de vérifier que le nombre d'éléments
la taille totale de la mémoire libre est supérieur à la taille requise par le tableau. Les éléments contenus est strictement inférieur à nombre maximal autorisé. Il faudrait ensuite mettre
d'un tableau sont repérés par des indices qui vont, selon chaque langage de programmation, l'élément à insérer au premier indice libre du tableau et incrémenter le nombre d'éléments
de 0 à N - 1 ou de 1 à N. Certains langages permettent des indices de M à N avec 1 < M < N. réellement contenus d'une unité. Pour toute autre insertion, il faut décaler tous les éléments à
Dans ce documents on considère les indices de 0 à N - 1. partir de l'indice dans lequel on va insérer le nouvel éléments jusqu'au dernier élément à
Les opération de base que l'on peut effectuer sur un tableaux sont l'accès à un éléments l'indice suivant. Ensuite on procède à l'insertion du nouvel élément à l'indice adéquat.
d'indice i, l'insertion d'un élément (au début, au milieu ou à lal fin du tableau) et enfin la Dans l'algorithme suivant, on suppose que le nombre d'éléments contenus dans le tableau
suppression d'un élément (au début, au milieu ou à lal fin du tableau). (nb_val) est connu. ce nombre peut être nul, cela ne pose pas de problème.
II.2 Algorithmes sur les tableaux ALGORITHM insertion
INPUT/OUTPUT INT tab [100];
Les algorithmes de base sur les tableaux sont l'initialisation d'un tableau et l'accumulation BEGIN
d’une opération sur les éléments du tableaux (par exemple : somme, produit, maximum, etc.) INT i;
INT pos;
II.2.1 Initialisation d'un tableau
IF nb_val >= 100 THEN
Initialiser un tableau consiste à le remplir avec des valeurs provenant soit de l'utilisateur soit write ("le tableau est plein, impossible d'insérer");
d'un autre tableau ou bien d'un fichier, etc. Il est possible de remplir tout ou partie d'un ELSE
write ("Donner la position d'insertion : ");
tableau. Généralement on utilise la structure FOR afin d'initialiser un tableau, mais les
read (pos);
structure WHILE et REPEAT sont tout autant convenables.
IF pos < 0 OR pos >= 100 THEN
write ("Erreur : débordement d'indice");
Ecole Polytechnique de Tunisie | Cours Algorithmique et Structures de Données Ecole Polytechnique de Tunisie | Cours Algorithmique et Structures de Données
23 24
ELSE La déclaration d'une matrice est TYPE nom_matrice [TAILLE_L] [TAILLE_C] où TAILLE_L
write ("Donner la valeur à insérer : "); est le nombre de vecteurs contenus dans la matrice et TAILLE_C est le nombre d'éléments
par vecteur. Par exemple :
FOR i ← nb_val TO pos + 1 STEP = -1 DO
tab [i] ← tab [i - 1];
END FOR
0 0 0 0
read (tab [pos]);
1 1 1 1
END IF
2 2 2 2
END IF
END 3 3 3 3
4 4 4 4
Algo 9. - Insertion d'un élément dans un tableau . . . .
Ecole Polytechnique de Tunisie | Cours Algorithmique et Structures de Données Ecole Polytechnique de Tunisie | Cours Algorithmique et Structures de Données
25 26
A L G O R I T H M I Q U E \0
0 1 2 3 4 5 6 7 8 9 10 11 12 13
65 76 71 79 82 73 84 72 77 73 81 84 69 0
0 1 2 3 4 5 6 7 8 9 10 11 12 13
write ("la longueur de la chaîne ", ch, " est : ", long);
13 A L G O R I T H M I Q U E END
Algo 13. - Calcul de la longueur d'une chaîne de caractères
0 1 2 3 4 5 6 7 8 9 10 11 12 13
Fig. 5 - Codage d'une chaîne de caractères en Pascal II.4.2 Concaténation de deux chaines de caractères
Contrairement au Pascal, le langage C ne limite pas la longueur d'une chaîne de caractère. Il Pour concaténer deux chaînes, il faut disposer d'un vecteur dont la taille est au mois égale à
adopte le codage connu sous la terminologie anglaise : "null terminated strings" ce qui veut la longueur de la première chaîne additionnée à la longueur de la deuxième chaînes et on
dire les chaînes de caractères terminées par la valeur 0 (à ne pas confondre avec le caractère ajoute à la somme totale 1 (pour la valeur zéro terminant la chaîne de caractère résultante).
'0'). Dans une chaîne de caractères, le caractère '0' (zéro) est remplacé par son code ASCII On verra plus tard comment réserver l'espace mémoire pour un tel vecteur.
(48). La figure 6 (a et b) représente le codage d'une chaîne de caractères en C. Il s'agit alors de recopier la première chaîne de caractère dans la chaîne résultat. Ensuite lui
coller la deuxième chaîne et pour finir ajouter la valeur 0 à la fin de la chaîne résultat.
Ecole Polytechnique de Tunisie | Cours Algorithmique et Structures de Données Ecole Polytechnique de Tunisie | Cours Algorithmique et Structures de Données
27 28
ALGORITHM concat
INPUT STRING ch1, ch2;
OUTPUT STRING ch;
BEGIN
INT long, l;
long ← 0;
l ← 0;
l ← 0;
ch [long] ← 0;
END
Algo 14. - Concaténation de deux chaînes de caractères