Vous êtes sur la page 1sur 8

TechnoLab-Ista Matière : Algorithmique et Structure de Données1

Chapitre 5 : Les tableaux et les chaines de caractères

1. Introduction :
Imaginons que l'on veuille calculer la moyenne des notes d'une promotion, quel algorithme allons-nous
utiliser ?
Il faudrait alors déclarer autant de variables qu'il y a d'étudiants, par exemple en supposant qu'il y ait 10
étudiants, on aurait l'algorithme suivant :
Algorithme Moyenne ;
Var N1, N2, N3, N4, N5, N6, N7, N8, N9, N10, M : réel ;
Début
Lire (N1) ;
Lire (N2) ;
Lire (N3) ;
Lire (N4) ;
Lire (N5) ;
Lire (N6) ;
Lire (N7) ;
Lire (N8) ;
Lire (N9) ;
Lire (N10) ;
M ← (N1+ N2+ N3+ N4+ N5+ N6 + N7 + N8 + N9 + N10)/10 ;
Ecrire (M) ;
Fin.
Il faudrait pouvoir par l'intermédiaire d'une seule variable stocker plusieurs valeurs de même type : c'est
le rôle des tableaux. Donc un objet de type simple est un objet élémentaire contenant une seule valeur à
la fois. Par contre, un objet structuré est composé d’un nombre fixe de valeurs (ou tableau de valeurs) de
même type. Les tableaux à une dimension sont appelés vecteurs et les tableaux à deux dimensions
sont appelés matrices.

2. Le type tableau :
Un tableau à une dimension(vecteur) est un objet structuré formé de cellules contiguës accessibles
directement à l’aide d’un « indice » qui précise la position (rang) d’un élément dans un vecteur.

2.1. Manipulation d’un tableau :


2.1.1. Déclaration d’un vecteur
En algorithmique la déclaration d’un vecteur est donnée de deux façons suivantes :
Type Tab = tableau[Intervalle de l’indice] de <type élémentaire>
Var Vect : Tab ; (Vect est une variable de type Tab)
Var Vect : tableau[Intervalle de l’indice] de <type élémentaire>
Où <intervalle>est un intervalle sur un type simple dénombrable avec des bornes constantes.

1
TechnoLab-Ista Matière : Algorithmique et Structure de Données1

Notes
Exemple 1:
15.5 12.25 13 Elements
Var Notes : Tableau [1..3 ] de Réel
Notes est un tableau(vecteur) de 3 Réels. 1 2 3 Indices
Exemple 2:
Type Alphabet = Tableau [1..26] de caractère
Var Fr : Alphabet ;

2.1.2. Accès aux composantes d’un tableau :

Indice d’un tableau : L’indice nous permet d’accéder à n’importe quel élément d’un tableau.
On accède (en lecture ou en écriture) à la ième valeur d'un tableau en utilisant la syntaxe
suivante : nom_de_la_ variable[indice]
Exemple :
Lire(Notes[0]) : met l’entier saisi par l’utilisateur dans la première case du tableau.
Ecrire(Notes[1]) : affiche la valeur du 2ième case du tableau « 13 ».
Notes[2] ← 5 : met la valeur 5 dans la 3ième case du tableau.
Notes[I-1] ← 11 : met la valeur 11 dans la Iième case du tableau.
2.1.3. Lecture d’un tableau :
La lecture d’un tableau se fait généralement ave une boucle POUR :
Algorithme Langage C
Algorithme lecture ; #include<stdio.h>
Const N=10 ; int main ()
Var T : Tableau [1..N] d’entiers ; { int
TAB[10],i;
i : entier ;
for (i=0;i<=9;i++)
Début { printf("TAB[%d] =
Pour i de 1 à N Faire ",i);
Ecrire (‘T [‘, i,’]=’); scanf("%d",&TAB[i]);
Lire (T[i]) ; }
Fin pour return 0;
Fin. }

2
TechnoLab-Ista Matière : Algorithmique et Structure de Données1
2.1.4. Affichage d’un tableau :

Algorithme Langage C
Algorithme affichage ; #include<stdio.h>
Const N=10 ; int main ()
Var T : Tableau [1..N] d’entiers ; { int
TAB[10],i;
i : entier ;
for (i=0;i<=9;i++)
Début
printf("TAB[%d] =%d \n ", i ,TAB[i]);
Pour i de 1 à N Faire
return 0;
Ecrire (‘T [‘, i,’]=’,T[i]) ; }
Fin pour
Fin.

2 .2 Quelques traitements de base sur les vecteurs:

2.2.1 Affectation globale :

Si T1 et T2 sont deux tableaux de même taille et du même type, on peut écrire l’instruction
suivante : T1 ← T2.

2.2.2 Recherche :
On a souvent besoin de rechercher dans un grand tableau, la position d’un élément donné. Un point
particulier à ne pas oublier pour tous les algorithmes est le traitement du cas où l’élément cherché n’est
pas dans le tableau. Une autre caractéristique importante d’un algorithme de recherche est son
comportement désiré en cas d’éléments identiques (doit-il donner le premier, le dernier, tous ?).

2.2.2.1 Recherche séquentielle :

Il suffit de lire le tableau progressivement du début vers la fin. Si le tableau n’est pas trié, arriver en fin
du tableau signifie que l'élément n’existe pas.

Algorithme Recherche_Seq ;

Var T : Tableau [1..N] d’entiers ;


i ,e: entier ;
trouve : booléen ;

Début
Pour i de 1 à N Faire
Lire (T[i]) ;
Fin Pour

trouvefaux ;
i 1 ;
Lire(e) ;

3
TechnoLab-Ista Matière : Algorithmique et Structure de Données1

Tant que (trouve = faux) et (i<=N) Faire


Si T[i] = e Alors
trouve vrai ;
Sinon i i+1 ;
Fin Si
Fin Tant que
Si trouve = vrai Alors
Ecrire (i) ;
Sinon
Ecrire (‘ l’élément recherché n’existe pas dans le tableau’) ;
Fin Si
Fin.

2.2.2.2 Recherche dichotomique (ou binaire) :


Dans le cas d’un tableau trié, on peut réduire le nombre de lectures, en cherchant à limiter l’espace de
recherche. On compare la valeur cherchée à l’élément central du tableau, si ce n’est pas la bonne, un test
permet de trouver dans quelle moitié du tableau on trouvera la valeur. On continue récursivement jusqu’à
un sous-tableau de taille 1.

Algorithme Recherche_Bin ;
Var T : Tableau [1..N] d’entiers ; p,
m , d , i : entier;
trouve : booléen ;
Début
Pour i de 1 à N Faire
Lire (T[i]) ;
Fin Pour
trouve faux ;p 1 ;d N ;
Lire(e) ;
Tant que (p<= d) et (non trouve) Faire m
(p + d) Div 2
Si (T[m] > e ) Alors d
m – 1;
Sinon
Si T[m] < e Alors
p m + 1 ;
Sinon trouve
vrai ;
Fin Si
Fin Si
Fin Tant que
Si trouve = vrai Alors Ecrire
(m)
Sinon
Ecrire (‘ l’élément recherché n’existe pas dans le tableau’)

4
TechnoLab-Ista Matière : Algorithmique et Structure de Données1
Fin Si
Fin.

2.2.2.3 Recherche du minimum (ou maximum)


/* Recherche d'indice Imin de l’élément minimum dans un tableau T */

Algorithme Indice_Min ;
Var T : Tableau [1..N] d’entiers ;
k, i, Imin : entier ;
Début
Pour k de 1 à N Faire
Lire (T[k]) ;
Fin Pour
Imin 1 ;
Pour i 2 à N Faire
Si (T[i] < T[Imin]) Alors Imin
i ;
Fin Si
Fin Pour
Ecrire (Imin) ;
Fin.
3. Les tableaux multidimensionnels :
Considérons l’exemple suivant : une section de 1000 étudiant suit durant toute l’année 7 module, calculer
la moyenne de chaque étudiant. Dans ce cas le vecteur ne répond pas à cette réalité, alors chercher d’autres
type → tableau à deux dimension (matrice), nous créons une matrice de 1000 lignes
(étudiants) et 8 colonnes (7 colonnes pour les moyennes de 7 modules et la dernière colonne pour la
moyenne générale de chaque étudiant).

3.1 Les Matrices :


Une matrice est un tableau bidimensionnels (à deux dimension ), composé de plusieurs lignes et plusieurs
colonnes, qui possède deux indices : un indice de lignes et un indice de colonnes.
3.2 Déclaration :
Var Nom_Matrice :tableau[Intervalle indice_ligne, Intervalle indice_col] de <type élémentaire>
Exemple : Var M : tableau[1..2,1..3] d’entiers ;

M[1,1] = 1 , M[1,3] = 0 , M[2,2] = 7 …etc.


En langage C :
type nom_matrice [M] [N] ;
Exemple: int Matrice [3] [4] ;
Lors de la déclaration de la matrice, on peut initialiser les composantes de la matrice, en indiquant la liste
des valeurs respectives entre accolades.
int A[3][10] ={{ 0,10,20,30,40,50,60,70,80,90},
{10,11,12,13,14,15,16,17,18,19},
5
TechnoLab-Ista Matière : Algorithmique et Structure de Données1
{ 1,12,23,34,45,56,67,78,89,90}};
3.3 La lecture d’une matrice :
Algorithme Langage C
Algorithme Lecture_matrice ; #include<stdio.h>
Var MAT: tableau [3, 4] d’entier ; int main() {
i, j: entier ; int MAT[3][2] ;
int i, j;
Début
for (i = 0 ; i <3; i++)
Pour i de 1 à 3 Faire
for (j = 0; j < 4; j++)
Pour j de 1 à 4 Faire
{
lire (MAT[i, j]) ;
printf("MAT [%d,%d]= ",i,j);
Fin Pour
scanf("%d",&MAT[i][j]);
Fin Pour
}
Fin
return 0;
}
3.4 L’écriture d’une matrice :
Algorithme Langage C
Algorithme ecriture_matrice ; #include<stdio.h>
Var MAT: tableau [3, 4] d’entier ; int main() {
i, j: entier ; int MAT[3][2] ;
int i, j;
Début
for (i = 0 ; i <3; i++)
Pour i de 1 à 3 Faire
for (j = 0; j < 4; j++)
Pour j de 1 à 4 Faire
printf("tab[%d,%d]= %d \n",i,j,tab[i][j]);
Ecrire (MAT[i, j]) ;
return 0;
Fin Pour }
Fin Pour
Fin
3.5 Accès à un tableau à deux dimensions :
En algorithmique :
<NomTableau>[<Ligne>, <Colonne>]
En langage C :
<NomTableau>[<Ligne>][<Colonne>]
Exemple :Considérons un tableau A de dimensions L et C.
En langage algorithmique,
- les indices du tableau varient de 1 à L, respectivement de 1 à C.
- la composante de la Nième ligne et Mième colonne est notée: A[N,M]
En langage C,
- les indices du tableau varient de 0 à L-1, respectivement de 0 à C-1.
- la composante de la Nième ligne et Mième colonne est notée: A[N-1][M-1]

4. Les chaînes de caractères :

6
TechnoLab-Ista Matière : Algorithmique et Structure de Données1
Une chaîne de caractères est une suite de caractères. Elle est utilisée en informatique pour stocker du texte
(mot, phrase…). Outre la manipulation de données textuelles, elle est très utilisée pour effectuer des
entrées/sorties : affichage à l’écran ou saisie au clavier, lecture ou écriture dans un fichier texte.
Certains langages de programmation définissent un type pour les représenter, comme par exemple le
langage Java avec le type String, mais d’autres langages, comme le langage C, ne définissent pas de
type spécifique pour les représenter. Elle est mémorisée dans un tableau de caractères à une dimension.
4.1 Déclaration d'une chaîne de caractères : En langage C pour définir une chaîne de
caractères, il suffit de définir un tableau de caractères. Le nombre maximum de caractères
que comportera la chaîne sera égal au nombre d'éléments du tableau moins un (réservé au
caractère de fin de chaîne).
char nom_du_tableau [nombre d'éléments]
Exemple : char Mot[10];
4.2 Initialisation d'une chaîne de caractères :
En général, les tableaux sont initialisés par l'indication de la liste des éléments du tableau entre accolades :
char CHAINE[ ] = {'B','a','m','a','k','o','\0'};
Pour le cas spécial des tableaux de caractères, nous pouvons utiliser une initialisation plus confortable en
indiquant simplement une chaîne de caractère constante: char CHAINE[ ] = "Bamako";
Lors de l'initialisation par [], l'ordinateur réserve automatiquement le nombre d'octets nécessaires pour la
chaîne, c.-à-d.: le nombre de caractères + 1 (ici: 7 octets). Nous pouvons aussi indiquer explicitement le
nombre d'octets à réserver, si celui-ci est supérieur ou égal à la longueur de la chaîne d'initialisation.
4.3 Opérations sur les chaines :
La majorité des fonctions de manipulation de chaines sont directement fournies. Ces fonctions se trouvent
dans le fichier d'en-tête <string.h>, Le fichier <string.h> contient les prototypes de nombreuses fonctions
permettant de simplifier l'utilisation et la manipulation de chaînes. Il ne faut pas oublier d'inclure <string.h>
avant de les utiliser.
4.3.1 Longueur d'une chaîne de caractères :
En langage C, la longueur d'une chaîne de caractères est donnée par la fonction strlen(). Cette fonction
reçoit en argument le nom de la chaîne et renvoie le nombre d'octets occupés par la chaîne. Exemple :
char MaChaine[100]="chaine test"; strlen(MaChaine) retourne 11.
4.3.2 Copier une chaîne de caractères :
Pour copier une chaîne dans une autre chaîne, on peut affecter les éléments de la première chaîne aux
éléments correspondants de la deuxième chaîne. Ou utiliser directement la fonction strcpy(), dont la
syntaxe est la suivante :
strcpy (chaine destination, chaine_source)
Ainsi chaine destination recevra le contenu de chaine_source.
Exemple: char Mot1 (20), Mot2 [15];
strcpy (Mot2, Mot1);
4.3.3 Lecture et écriture d'une chaîne :
On peut toujours utiliser les instructions scanf et printf pour lire, respectivement, écrire une chaîne de
caractères :
scanf(" %S ",x); en général la chaîne x est déclarée comme pointeur, c'est pour cela que l'opérateur & est
omis devant le nom de la variable.
Dans le cas d'une écriture on écrit, quelque soit la déclaration :
printf (" %S\n",x);
Le langage C dispose de deux fonctions plus pratiques pour la saisie et l’affichage des chaînes de
caractères :
• gets (x); pour saisir la chaîne x.
7
TechnoLab-Ista Matière : Algorithmique et Structure de Données1
• puts (x); pour afficher la chaîne x.
4.3.4 Conversion miniscules-majuscules :
La fonction strupr(x) de la bibliothèque <string.h> reçoit la chaîne x et la convertit en majuscules.
4.3.5 Comparaison de chaines de caractères :
Pour comparer deux chaînes de caractères on utilise la fonction strcmp(x,y) qui retourne "0" en cas
d'égalité des deux chaînes.
Si x précède y dans l'ordre alphabétique, alors la fonction retourne un nombre négatif et si x suit y, la
valeur rendue est positive.
4.3.6 Concaténation de chaines :
La fonction strcat (x,y) concatène la chaîne y à la fin de la chaîne x.
Exemple :
Char *chl= "Bam";
Char *ch2= "ako";
Char ch [7];
Ch=strcat (ch1, ch2); Puts (ch); Ce programme affichera : Bamako

Vous aimerez peut-être aussi