LES TABLEAUX LE TYPE TABLEAU Plan du chapitre : I. II. III. IV. V. Problématique Définition Les tableaux à une dimension Techniques utilisées avec les tableaux Les tableaux a deux dimensions Objectifs du chapitre : Connaitre le type tableau et son utilité pour resoudre des problèmes en algorithmique. Manipuler les différentes techniques et opérations de base sur les tableaux. Construire des algorithmes s’appuyant sur le type tableau à une et à deux dimensions. 1 LES TABLEAUX I. Problématique : On considère le problème suivant : Il s’agit de calculer la moyenne d’un nombre fini d’étudiants d’une classe, puis d’afficher les étudiants par ordre de mérite : de la plus forte moyenne jusqu’à la plus faible. Quelle solution allez-vous proposer ? On peut utiliser une structure répétitive qui permettra de traiter la moyenne de chaque étudiant (calcul et affichage). Cependant, l’affichage des étudiants par ordre de mérite nécessite la disponibilité de toutes les moyennes déjà calculées. Or, avec les structures de données vues jusqu'à maintenant, la mémorisation de ces moyennes semblent difficile à faire : il faut déclarer autant de variables moyennes que d’étudiants ; dans ce cas, on peut même s’en passer de la boucle et on écrira autant de blocs d’instructions que de nombre d’étudiants. Ce qui donne un algorithme de mauvaise qualité ! Pour remédier à cette fameuse proposition !!, on doit utiliser une structure de données capable de mémoriser les moyennes dans un seul endroit, pour les retrouver ultérieurement et effectuer le traitement souhaité. Une telle structure est appelée Tableau. II. Définition : Un tableau est une structure de données permettant de regrouper sous un même nom un nombre fini d’éléments de même type. Dans ce chapitre, on va évoquer deux types de tableaux : les tableaux à une dimension appelés également Vecteurs, les tableaux à deux dimensions appelés également Matrices. Remarques : Un tableau est constitué d’un nombre fini de cases contigües situé en mémoire centrale. Un tableau est caractérisé par : son nom sa taille (borne inférieure et borne supérieure connues à l’avance) ses éléments : chaque élément est défini par son type et son contenu. L’accès à un élément du tableau se fait à l’aide d’un indice. III. Les tableaux à une dimension : 1. Définition : Un tableau unidimensionnel (vecteur) est une manière de ranger des éléments ou des valeurs de même type. Il regroupe ces éléments dans une structure fixe et permet d’accéder à chaque élément par l’intermédiaire de son rang ou indice. Tableau A : Les composantes de A 2 LES TABLEAUX 2. Représentation algorithmique : Type Nomtableau = Tableau [borne_inf .. borne_sup] de type_élément Variable Nomvar : Nomtableau Indice : entier Exemple : On veut déclarer un tableau T de moyennes Type Tab_Moy = Tableau [1..20] de réel Variable T : Tab_Moy I : entier (* indice du tableau T *) En mémoire, on va avoir une variable T comportant 20 cases et dans chacune on placera une moyenne qui est de type réel. 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 T 10.5 08.2 09.7 11.0 10.5 13.6 Le premier élément de T contient la valeur 10.5 ; on note T[1] 10.5 Le deuxième élément de T contient la valeur 08.2 ; on note T[2] 08.2 D’une manière générale, le Ième élément de T est noté T[I] et contient une valeur de type réel. T[I] désigne également le contenu de la Ième case du tableau T. Remarques : L’indice du tableau doit être obligatoirement de type entier. Il serait préférable que cet indice soit initialisé à la valeur 1. Un tableau, s’il est rempli, ne doit pas faire l’objet d’une lecture supplémentaire sauf s’il s’agit d’une opération de mise à jour où on doit modifier le contenu des éléments du tableau. La taille du tableau doit être connu à l’avance. 3. Opérations de base sur un tableau : Pour représenter ces différentes opérations, on va utiliser un tableau T d’entiers. a. Initialiser un Tableau : Algorithme Ini_Tab Constante N = Val Type TabEnt = Tableau [1..N] de Entier Variable T : TabEnt I : entier Début Pour I de 1 à N Faire T[I] 0 FinPour Fin 3 LES TABLEAUX b. Remplir un Tableau : Algorithme Remp_Tab Constante N = Val Type TabEnt = Tableau [1..N] de Entier Variable T : TabEnt I : entier Début Pour I de 1 à N Faire Lire(T[I]) FinPour Fin Remarque : Lire(T[I]) consiste à entrer une valeur à partir du clavier et la mémoriser dans la Ième case du tableau T. c. Affichage les éléments d’un tableau : On va afficher les éléments strictement positifs du tableau T Algorithme Aff_Tab Constante N = Val Type TabEnt = Tableau [1..N] de Entier Variable T : TabEnt I : entier Début Pour I de 1 à N Faire Si T(I) > 0 Alors écrire(T[I]) FinSi FinPour Fin d. Additionner les éléments de deux tableaux : On dispose de deux tableaux T1 et T2 et on veut réaliser la somme. Ça consiste à additionner les éléments de même indice et les mémoriser dans un tableau T3. Condition nécessaire : T1 et T2 de même taille. Algorithme Add_Tab Constante N = Val Type TabEnt = Tableau [1..N] de Entier Variable T1, T2, T3 : TabEnt I : entier Début Pour I de 1 à N Faire T3[I] T1[I] + T2[I] FinPour Fin 4 LES TABLEAUX e. Multiplier les éléments de deux tableaux : Algorithme Mult_Tab Constante N = Val Type TabEnt = Tableau [1..N] de Entier Variable T1, T2, T3 : TabEnt I : entier Début Pour I de 1 à N Faire T3[I] T1[I] * T2[I] FinPour Fin 4. Exercice d’application : On dispose d’un tableau d’entiers T et on veut afficher le nombre d’éléments positifs et le nombre d’éléments négatifs contenus dans le tableau. IV. Techniques utilisées avec les tableaux : 1. Recherche dans un tableau : a. Introduction : Il s’agit de rechercher un élément saisi à partir du clavier, dans un tableau. Dès qu’on le trouve ce n’est plus la peine de continuer le parcours du tableau ; on doit sortir et afficher un message d’existence. Deux façons de faire : soit faire une recherche séquentielle, soit faire une recherche plus optimisée dite recherche dichotomique et dans ce cas, il y a des précautions et des actions préalables à faire. b. Recherche Séquentielle : Algorithme Rech_Seq Constante N = 20 Type TabEnt = Tableau [1..N] de Entier Variable T : TabEnt I , X: entier (* X est l’élément à chercher dans le tableau *) Trouve : Booléen (*cette variable va nous permettre de sortir dès qu’on trouve X*) Début Lire(X) I1 Trouve Faux Tant que (I<=N) ET (Trouve = Faux) Faire Si (T[I] <> X) Alors II+1 Sinon Trouve Vrai FinSi FinTantQue 5 LES TABLEAUX Si (Trouve = Vrai) Alors Ecrire(X, ‘appartient à T’) Sinon Ecrire (X,’ne se trouve pas dans T’) FinSi Fin c. Recherche Dichotomique : Pour pouvoir appliquer la recherche dichotomique, il faut que : le tableau T soit Rempli et le tableau soit Trié. Il s’agit d’une recherche qui consiste à réduire le temps de recherche d’un élément X dans un tableau T qui doit être obligatoirement trié. On commence par comparer X avec le contenu de l’élément du milieu : si X est inférieur à cette valeur alors on va continuer la recherche dans la partie gauche du tableau T avec modification de la borne supérieure, sinon on continuera la recherche dans partie droite du tableau avec modification de la valeur de la borne inférieure. On s’arrêtera quand X serait égale à la valeur du milieu ou quand on dépasse les bornes du tableau. Algorithme Dichoto Constante N=Val1 , M= Val2 Type TabEnt = Tableau [1..N] de Entier Variable T : TabEnt I, inf, sup, mil, X : entier (* X est l’élément à chercher dans le tableau *) Début Lire(X) inf1 supN Répéter mil (inf+sup) div 2 Si X < T(mil) Alors sup mil – 1 Sinon inf mil +1 FinSi Jusqu’à (X=T[mil]) ou (inf > sup) Fin 2. Comparaison de deux Tableaux : Pour écrire l’algorithme correspondant, on doit s’assurer que les deux tableaux soient de même type et de même taille. La comparaison va se faire sur les éléments des deux tableaux en les prenant deux à deux. Algorithme Compare Constante N=20 Type Tab_Ent = Tableau[1..N] de Entier Variable T1,T2 : Tab_Ent I : entier 6 LES TABLEAUX Egal : Booléen Début (* on suppose que T1 et T2 déjà remplis *) I1 Egal Vrai Tant que (I<=N) ET (Egal=Vrai) Faire Si (T1[I] <> T2[I]) Alors Egal Faux Sinon I I + 1 FinSi FinTantQue Si (Egal=Vrai) Alors écrire(‘T1 et T2 sont égaux’) Sinon écrire(‘T1 et T2 sont différents’) FinSi Fin V. Les Tableaux à deux dimensions : Les Matrices 1. Définition : Un tableau à deux dimensions appelé également matrice est une structure de données permettant d’organiser des informations de même type en lignes et en colonnes. Il est caractérisé donc par son nombre de lignes et son nombre de colonnes. 2. Représentation Algorithmique : Constante Nbr_Lig = Val1 (* Nombre de Lignes *) Nbr_Col = Val2 (* Nombre de Colonnes *) Type Matrice = Tableau [1..Nbr_Lig, 1..Nbr_Col] de Type_élément_Matrice Variable M : Matrice I, J : Entier (* I étant l’indice des lignes et J celui des colonnes *) Remarques : Le Type_Elément_Matrice peut être simple ou structuré. L’accès à un élément de la matrice ne peut se faire qu’avec deux indices : un élément est identifié par son numéro de ligne et son numéro de colonne. Si M est la matrice, M[I,J] désigne l’élément de M situé à la Ième Ligne et à la Jème Colonne. 3. Opérations de base sur une Matrice : On va supposer que le Type_Elément_Matrice est Entier a. Initialiser une matrice : Pour I de 1 à Nbr_Lig Faire Pour J de 1 à Nbr_Col Faire M[I,J] 0 7 LES TABLEAUX FinPour FinPour b. Remplir une matrice : Pour I de 1 à Nbr_Lig Faire Pour J de 1 à Nbr_Col Faire Lire(M[I,J]) FinPour FinPour Remarque : La primitive Lire(M[I,J]) consiste à lire à partir du clavier un élément et le placer à la Ième Ligne et à la Jème Colonne. c. Parcourir une matrice : Par exemple, on veut afficher tous les éléments de la matrice dont la valeur est supérieur à 10. Pour I de 1 à Nbr_Lig Faire Pour J de 1 à Nbr_Col Faire Si (M[I,J] >= 10) Alors écrire(M[I,J]) FinSi FinPour FinPour d. Additionner deux matrices : Condition nécessaire : les deux matrices doivent être de même type et de même taille. Pour I de 1 à Nbr_Lig Faire Pour J de 1 à Nbr_Col Faire M[I,J] M1[I,J] + M2[I,J] FinPour FinPour 8