Vous êtes sur la page 1sur 16

ALGORITHMIQUE ET STRUCTURE DE DONNEES 1

CHAPITRE 3 : LES TABLEAUX


ET LES CHAINES DE
CARACTERES

Dr BACHI Katia

Année universitaire 2020/2021 1


ALGORITHMIQUE ET STRUCTURE DE DONNEES 1

Plan du chapitre 5
- Introduction ………………………………….......................................
- Les tableaux…………………………..……………………………….
- Les tableaux multidimensionnels…………………………………….
- Les chaînes de caractères……………….…………………………….

I. Introduction

Problème : Pourquoi les tableaux ?


Calculer la moyenne de 100 étudiants
Effectuer leur classement

Solution :
Debut
pour i de 1 à 100 faire
Ecrire (" Donner la moyenne de l'étudiant N°",i) ;
Lire (moyenne) ;
Fin pour
Fin
* Conclusion : On ne peut pas effectuer le classement
Pourquoi ? Parce qu'on ne garde pas les moyennes précédentes et la variable moyenne contient
uniquement la dernière valeur.
Une solution à ce problème consiste à utiliser une structure de données appelée « Tableau »

II. Les tableaux


II.1 Tableau à une dimension (Vecteur)
Un tableau à une dimension est un ensemble de valeurs portant le même nom de variable, et
repérées par un nombre appelé indice, et qui sert à repérer chaque valeur du tableau séparément.
A chaque fois qu’on doit designer un élément du tableau, on fait figurer le nom du tableau, suivi
de l’indice de l’élément entre deux crochets. Le schéma ci-dessous représente un tableau à une
dimension

Année universitaire 2020/2021 2


ALGORITHMIQUE ET STRUCTURE DE DONNEES 1

T[1] T[2] T [3] ……………………………………………………………. T[n]

Indice du tableau L’élément du tableau

- Chaque élément d’un tableau est accessible par un indice, qui est un entier.
- Selon les langages de programmation, le premier indice est soit 0 (Le C), soit 1 (Pascal)
- Dans ce cous, on va considérer que le premier indice du tableau est 1.

Un tableau est caractérisé par :


- Un nom (le nom du tableau).
- Une longueur (le nombre des éléments du tableau).
- Un type (le type des éléments du tableau).
- Une dimension (1, 2, 3, etc).

II.1 .1 Déclaration des tableaux à une dimension

Un tableau à une dimension ou monodimensionnel est un tableau ayant une seule dimension.

Un tableau se déclare dans la partie déclaration (VAR), en précisant le nombre et le type de


valeurs qu’il contiendra :
Syntaxe en algorithmique :
➢ Var identificateur : Tableau [indice-1..indice_n] de <Type> ;
Ou
➢ Type identificateur_type =Tableau [indice-1..indice_n] de <Type> ;
➢ Var identificateur : identificateur_type ;
Syntaxe en langage C :
Type_elements Identificateur [Taille constante] ;
La Taille du tableau est le nombre de ses éléments. Elle ne peut être une variable. Elle doit être
une constante définie avant ou au moment de la déclaration.
Exemples en algorithmique:
Var Tab : tableau [1..100] d’entiers ;
Var Note : tableau [1..10] de réels ;

Exemples en langage C :

Année universitaire 2020/2021 3


ALGORITHMIQUE ET STRUCTURE DE DONNEES 1

int a [5];
II.1.2 Représentation physique
Lors de la déclaration d'un tableau, une zone mémoire lui sera réservée. Elle sera utilisée pour
le stockage de ses données. La taille de cette zone en octets est la multiplication de la taille
du tableau par la taille du type de ses éléments (un tableau de trois entiers sera représenté par
six octets : chaque entier est codé sur deux octets). Un tableau T correspond à l'adresse mémoire
de son premier élément (T=&T[0]). Il s'agit de la première cellule de la zone mémoire qui lui est
réservé.
Exemple :
Supposant que T a été mémorisé à l'adresse mémoire 100, un caractère étant codé sur un octet, le
contenu des cellules mémoire sera alors comme suit :
T=&T[0]=100

Adresse 100 a T[0]=’a’ &T[0] est 100

b T[1]=’b’ &T[1] est 101


Adresse 101

C T[2]=’c’ &T[2] est 102


Adresse 102

II.1.3 Manipulation des tableaux

Accès à un élément d’un tableau

Un élément du tableau est accessible par sa position (indice) dans le tableau. Soient « T » le nom
d’un tableau de N éléments, et i un entier.
▪ L’élément de T d’indice i est représenté par la notation T[i]
▪ Si (i≤0) ou (i>N), l’écriture T[i] n’a pas de sens (c’est une erreur),
▪ Ainsi :
T[1] est le premier élément de T ;
T[N] est le dernier élément de T.
En particulier, les trois manipulations de base sont :
❖ Ecriture ;
❖ Lecture ;

Année universitaire 2020/2021 4


ALGORITHMIQUE ET STRUCTURE DE DONNEES 1

❖ Affectation.

Lecture et affichage
Les éléments d'un tableau sont à lire et à afficher élément par élément. Comme les variables
simples, il est possible aussi d’assigner des valeurs aux éléments d’un tableau lors de l’exécution
c.-à-d. les valeurs sont saisies par l’utilisateur à la demande du programme.

Syntaxe en algorithmique Syntaxe en langage C


Lire(T[i]) ; scanf ("%d",&T[i]);

De façon analogue à la lecture, l’écriture de la valeur d’un élément donné d’un tableau s’écrira
comme suit :
Syntaxe en algorithmique Syntaxe en langage C
Ecrire(T[i]) ; printf("%d",&T[i]);

Affectation
Pour affecter une valeur à un élément i d’un tableau nommé par exemple T, on écrira :
En algorithmique En langage C
T[i] valeur ; t[i] :=valeur ;

Exercice 1 : (Création, initialisation et édition d’un tableau)


Problème : Ecrire l'algorithme, permettant de créer un tableau de dix entiers, d’initialiser ses
éléments à 0, ensuite de les afficher.
Solution : Algorithme init_tab ;
Var T : tableau [1..10] d’entier ;
i : entier ;
Début
Pour i allant de 1 jusqua 10 Faire
T[i] ← 0 ;
Fin pour
Pour i allant de 1 jusqua 10 Faire
Ecrire(T[i]) ;

Année universitaire 2020/2021 5


ALGORITHMIQUE ET STRUCTURE DE DONNEES 1

Fin pour
Fin
Exercice 2 : (Création, lecture et affichage d’un tableau)
Problème : Ecrire l'algorithme permettant de créer un tableau de dix caractères, de lire ses
éléments à partir du clavier, ensuite de les afficher.
Solution :
Algorithme lire_tab ;
Var T : tableau [1..10] de caractère ;
i : entier ;
Début
Pour i allant de 1 jusqua 10 Faire
Lire (T[i]) ;
Fin pour
Pour i allant de 1 jusqua 10 Faire
Ecrire(T[i]) ;
Fin pour
Fin

Important :

- L'affectation d'un tableau T1 à un autre tableau T2 se fait élément par élément. Une affectation
"brutale" de T1 à T2 n'est pas possible.
- L'affectation élément par élément d'un tableau T1 à un autre tableau T2 réalise une copie de T1
dans T2.
- La comparaison des éléments de deux tableaux doit se faire élément par élément
- La somme et le produit de deux tableaux T1 et T2 doit se faire élément par élément

II.1.4 Parcourir les éléments d'un tableau


Dans de nombreux algorithmes, on doit parcourir le tableau pour faire un traitement sur chaque
élément du tableau. Cependant, dans certain cas on ne devra pas parcourir le tableau jusqu’à son
dernier élément, mais jusqu'à trouver un élément satisfaisant une certaine condition. On présente
ici quelques algorithmes utiles, qui permettent de parcourir le tableau.

Année universitaire 2020/2021 6


ALGORITHMIQUE ET STRUCTURE DE DONNEES 1

L’algorithme qui permet de consulter un élément L’algorithme qui permet de chercher toutes les
d’un tableau occurrences d’un élément dans un tableau
Algorithme consultation; Algorithme recherche_toutes_occurences ;
Var T: tableau [1..100] de reels ; Var T : tableau [1..100] de reels ;
N,P : entiers ; N,i: entiers ;
Début X : reel ;
Si (N=0) alors Ecrire(‘le tableau est vide ‘) ; Existe : booleen ;
Sinon Début

Ecrire(‘entrer l’’indice de l’’élément à Si(N=0) alors Ecrire(‘le tableau est vide ‘) ;


consulter :’) ; Sinon
Lire(P) ; Ecrire(‘entrer la valeur de l’’élément à
Si (P<1) ou (P>N) alors chercher :’) ;

Lire(X) ;
Ecrire(‘Position hors limites du tableau ‘)
Existe <-- Faux ;
Sinon
Pour i allant de 1 jusqua à N Faire
Si T[i] = X alors Existe <-- Vrai ;
Ecrire(‘l’’élément à consulter est :’,T[P]) ;
Finsi
Ecrire(‘l’’élément à chercher apparait à la
Finsi position : ‘,i) ;
Fin Finsi
Finpour
Si Existe = Faux alors
Ecrire(‘l’’élément n’’apparait pas dans ce
tableau ‘) ;
Finsi
Finsi
Fin

Algorithme permettant de trier par ordre croissant Algorithme permettant de fusionner les éléments de
les éléments d’un tableau deux tableaux T1 et T2 dans un autre tableau T
Algorithme tri_Croissant; Algorithme fusion_deux_tableaux;
Var T : tableau [1..100] de reels ; Var T1,T2 : tableau [1..100] de reels ;
N ,i,j: entiers ;
T : tableau [1..200] de reels ;
x: réel ;
N ,M,i: entiers ;
Debut
Debut
Si (N=0) alors Ecrire(‘le tableau est vide’) ; Si (N=0)et (M=0) alors
Sinon
Ecrire(‘le tableau est vide’) ;
Pour i allant de 1 jusqua N-1 Faire
Sinon
Pour j allant de i+1 jusqua N Faire
Pour i allant de 1 jusqua N Faire
Si T[i] > T[j] alors Si T[i]< T[j] alors
T[i]<--T1[i] ;
x <-- T[i] ; x <-- T[i] ;
FinPour
T[i] <-- T[j] ; T[i] <-- T[j] ;
T[j] <-- x ; T[j] <-- x ; Pour i allant de 1 jusqua M Faire
Finsi // tri_Décroissant;
T[N+1]<--T2[i] ;
Finpour
FinPour
Finpour
FinSi
Finsi
Fin Fin

Année universitaire 2020/2021 7


ALGORITHMIQUE ET STRUCTURE DE DONNEES 1

II.2 Tableaux à deux dimensions (matrice)


Un tableau bidimensionnel est un tableau ayant deux dimensions. Avec ce type de tableaux, on
peut manipuler des données matricielles. Un tableau à deux dimensions est déclaré de la manière
citée ci-dessous, en précisant le nombre (lignes et colonnes) et le type des valeurs qu’il
contiendra.

Syntaxe en algorithmique Syntaxe en langage C


Var M : Tableau [indice_lig_1..
indice_lig_2, indice_col_1..
indice_col_2] de type des TypeIdentificateur
éléments ; [nbr_lignes][nbr_colones] ;
Ou
Type
Mat_type =Tableau[indice_lig_1..
indice_lig_2, indice_col_1..
indice_col_2] de type des
éléments ;
Var M :Mat_type ;

Exemple :
Syntaxe en algorithmique Syntaxe en langage C
Var M : Tableau [1.. 4,1..5] de
reels;
Ou float M [4][5] ;
Type Mat =[1.. 4,1..5] de reels ;
Var M :Mat ;

On vient de déclarer une matrice de 4 lignes et 5 colonnes.

Indice : les lignes d’une matrice sont numérotées par des entiers successifs de même que les
cases de chaque ligne. Ces numéros sont appelés indices de ligne et de colonne. En

Année universitaire 2020/2021 8


ALGORITHMIQUE ET STRUCTURE DE DONNEES 1

programmation, il dépend du langage utilisé que la première case porte le numéro 0 ou 1 (ou
autre) ; la case suivante porte le numéro suivant, etc. Nous respecterons la consigne donnée pour
les tableaux de débuter par "1"

Accès à un élément d’une matrice


Les cases d'un tableau à deux dimensions sont accessibles en utilisant l'identificateur du tableau,
l'indice de la ligne et l'indice de la colonne comme référence. Un tableau à deux dimensions peut
être représenté par un ensemble de cases organisées en lignes et colonnes, et schématisées
comme suit :
1 2 3 4 5
1
2 M]2,5[

3
4

Exemple : la 5ème Case de la 2ème ligne de la matrice M est désignée par M[2,5].
Donc M[i, j], désigne la case de la ligne i et de la colonne j du tableau à deux dimensions M avec i
(resp. j) une variable ayant des valeurs entre 1 et 4 (resp. entre 1 et 5)

Remarque :
Le traitement d’une matrice se fait en général par des boucles imbriquées.
Lecture et affichage dans un tableau à deux dimensions

Boucle de lecture d’une matrice de dimension NxM Boucle de lecture d’une matrice en langage C
Pour i allant de 1 jusqua N Faire for(j=0 ; j<N ; j++){
Pour j allant de 1 jusqua M Faire for(i=0 ; i<M ; i++) {

Lire(M[i,j]) ; scanf("%d",&Mat[i][j]);

FinPour }
}
FinPour

Année universitaire 2020/2021 9


ALGORITHMIQUE ET STRUCTURE DE DONNEES 1

Boucle d’écriture d’une matrice de dimension NxM Boucle d’écriture d’une matrice en langage C
Pour i allant de 1 jusqua N Faire for(j=0 ; j<N ; j++){
Pour j allant de 1 jusqua M Faire for(i=0 ; i<M ; i++) {

Ecrire(M[i,j]) ; printf("%d",&Mat[i][j]);

FinPour }
}
FinPour

Affectation
L’instruction suivante affecte à la variable ‘x’ la valeur d’un élément de la matrice M,
xM[i,j]

L’instruction suivante affecte à la case M[i,j] de la matrice M une valeur ‘x’


M[i,j]x

Exercice 3 :
Ecrire un algorithme permettant de saisir les données d’un tableau à deux dimensions (10,4), de
faire leur somme, produit et moyenne et de les afficher avec les résultats de calcul à l’écran.
Algorithme tableau_deux_dimension;
Var T : tableau [1..10,1..4] de réels ;
i,j: entiers ;
S,P,M : réels ;
Debut
//(*saisie des éléments du tableau *)
Pour i allant de 1 jusqua 10 Faire
Pour allant de 1 jusqua 4 Faire
Ecrire(‘entrer les elements de la matrice :’;
Lire(T[i,j]) ;
Finpour;
Finpour ;

//(*calcul de la somme ,produit et moyenne *)


S <-- 0 ;
P <-- 1 ;
Pour i allant de 1 jusqua 10 Faire
Pour j allant de 1 jusqua 4 Faire
S <-- S+T[i,j] ;

Année universitaire 2020/2021 10


ALGORITHMIQUE ET STRUCTURE DE DONNEES 1

P <-- P + T[i,j] ;
Finpour
Finpour
M <-- S/40 ; //(*40 : nombre d’élément du tableau = 10x4 *)
//(* Affichage des éléments du tableau et des résultats *)
Pour i allant de 1 jusqua 10 Faire
Pour j allant de 1 jusqua 4 Faire
Ecrire(‘l’’élément T[‘,i,’,’,j,’] = ‘, T[i,j]);
Finpour
Finpour
Ecrire (‘la somme des éléments du tableau est :’,S) ;
Ecrire (‘le produit des éléments du tableau est :’,P) ;
Ecrire(‘la moyenne des éléments du tableau est :’,M) ;
Fin

Traitements sur les tableaux


• Créer des tableaux
• Ranger des valeurs dans un tableau
• Récupérer, consulter des valeurs rangées dans un tableau
• Rechercher si une valeur est dans un tableau
• Tester si un tableau vérifie une certaine propriété
• Mettre à jour des valeurs dans un tableau
• Modifier la façon dont les valeurs sont rangées dans un tableau (par exemple : les trier de
différentes manières)
• Effectuer des opérations entre tableaux : comparaison de tableaux, multiplication,...

III. Les tableaux multidimensionnels


Un tableau à N dimensions est déclaré de la manière citée ci-dessous, en précisant le
nombre et le type de valeurs qu’il contiendra
Syntaxe en algorithmique :
Var T :Tableau[indice_l_1.. indice_l_2, indice_c_1..
indice_c_2..indice_zN..indice_zN] de type des éléments ;
Exemples
Achat : tableau [1..100, 1..100, 1…300] d’entiers ;
Vente : tableau [1..10, 1..47, 1..12, 1..7] de réels ;

Le premier est un tableau à trois dimensions et le deuxième est un tableau à quatre dimensions.

Année universitaire 2020/2021 11


ALGORITHMIQUE ET STRUCTURE DE DONNEES 1

Syntaxe en langage C :
Type name [size1][size2]…[sizeN];

Exemple
La déclaration suivante crée un tableau d’entiers tridimensionnel ( 5x10x4) :
int arr[5][10][4] ;

Tableau à trois dimensions


Nous pouvons avoir des tableaux avec un nombre quelconque de dimensions, bien qu’il soit
probable que la plupart des tableaux crées auront une ou deux dimensions.
III.1 Accès à un élément
Chaque élément est repéré par sa position dans le tableau. Il faut donner autant d’indices qu’il ya
de dimensions.

IV. Les chaînes de caractères


1. Introduction
Une chaîne de caractères est une suite ordonnée de caractères. En algorithmique, une chaîne de
caractères est considérée comme une variable scalaire. Par contre, en langage C, une chaîne est
vue comme un tableau de caractères.
2. Déclaration d’une chaîne de caractères
Une chaîne de caractères est déclarée en utilisant la syntaxe suivante

Année universitaire 2020/2021 12


ALGORITHMIQUE ET STRUCTURE DE DONNEES 1

En algorithmique En langage C
Var identificateur : chaine[longueur] ; Une chaîne de caractères en langage C est un
ou tableau de type char. La déclaration est
var identificateur : chaine ; identique à un tableau normal:
char<nom_chaine> [<dimension>] ;

Exemple (algorithmique)
var nom :chaine ;
var prenom :chaine[8] ;
nom’Peaky’ ;//Initialisation de nom à la chaine ‘peaky’
La variable nom peut contenir jusqu'à 255 caractères alors que prenom peut contenir au
maximum 8.
Exemple (langage C)
char chaine[10] ; // // la longueur maximale = 9.
Char chaine[]=’peaky’ ; //Initialisation de chaine à la chaine ‘peaky’

Lecture et affichage
Une variable de type chaîne de caractères en algorithmique peut être lue et affichée globalement
au moyen de Lire() et écrire(), par contre, en langage C, elle peut être lue et affichée
caractère par caractère au moyen de scanf et printf utilisant le format %c. Elle peut également
être lue (affichée) globalement (d'un seul coup) au moyen de la fonction scanf (printf) utilisant
cette fois-ci le format %s ou au moyen de la fonction gets (puts).

En algorithmique En langage C
Lire(nom) ; scanf("%s", chaine);
printf("%s", chaine);
Ecrire(mom) ;
gets(chaine);
puts(chaine);

3. Accès à une case


Pour accéder à un caractère de la chaîne, il suffit d’indiquer le nom de la chaîne suivi d’un entier
entre crochets qui indique la position du caractère dans la chaîne.
Exemple :
X<- nom[3] ;

Année universitaire 2020/2021 13


ALGORITHMIQUE ET STRUCTURE DE DONNEES 1

• La variable X contiendra le caractère ‘a’.


4. Concaténation de chaînes de caractères
Le but de la concaténation est de créer des chaînes de caractères en juxtaposant deux (ou plus)
chaînes de caractères. En algorithmique, l'opérateur de concaténation est représenté par + ou
par //. La concaténation de chaînes de caractère en C ne se fait pas par le symbole ‘+’ comme en
langage algorithmique. Il faut ou bien copier la deuxième chaîne caractère par caractère ou bien
utiliser la fonction strcat.
Exemple : (Concaténation de deux chaînes)
Algorithme Concaténations ;
Var categorie : Chaine
Debut
categorie  ‘développeur’ ;
categorie ’catégorie’// ‘s’ ;
ecrire(categorie) ; Affiche : développeurs
categorie ’des’//’catégorie’;
ecrire(categorie) ; Affiche : des développeurs
Fin
Exemple : (Concaténation de deux chaînes en langage C)
#include<studio.h>
#include <studio.h>
Int main()
{
Char str1[100],str2[100] ;
Printf(‘Entrez la premiere chaine :’ ) ;
Gets(str1) ;
Printf(‘Entrez la deuxieme chaine :’ ) ;
Gets(str2) ;
Strcat(str1,str2);
Printf(‘apres la concatenation =%s\n’,str1);
}
La sortie :
Entrez la premiere chaine : des
Entrez la deuxieme chaine : développeurs
apres la concatenation = des développeurs

Année universitaire 2020/2021 14


ALGORITHMIQUE ET STRUCTURE DE DONNEES 1

5. Les opérateurs relationnels


Dans un système informatique, à chaque caractère est associé une valeur numérique : son code
ASCII (American Standard Code for Information Interchange). L'ensemble des codes est
recensé dans une table nommée "table des codes ASCII". Quand on stocke un caractère en
mémoire (dans une variable), on mémorise en réalité son code ASCII. Un code ASCII est codé
sur un octet (huit bits). Il est possible d’effectuer une comparaison entre deux chaînes de
caractères, le résultat est de type booléen. La comparaison se fait caractère par caractère de la
gauche vers la droite selon le code ASCII .
Exemple :
➢ L’expression (‘a’>’A’) est vraie puisque le code ASCII de ‘a’ (97) est supérieur à celui
de ‘A’ (65).
➢ L’expression (‘programme’>’programmation’) est fausse puisque ‘e’>’a’.
➢ L’expression (‘’= ‘ ‘) est fausse (le vide est différent du caractère espace).

6. Les fonctions et les procédures prédéfinies sur les chaînes de


caractères

En algorithmique

Fonction Rôle Exemple


long(chaîne) Retourne la longueur de la Nom’Peaky’
chaîne. xlong(Nom)
x contiendra 5
copie(Chaîne,P,N) Copie N caractères de la Chn1’Année universitaire’
chaîne à partir de la position P Chn2copie(chn1,7,6)
donnée. Chn2 contiendra ‘univer’
position(Chn1,Chn2) Retourne la position de la Chn1’ver’
première occurrence de la Chn2’Année universitaire’
chaîne Chn1 dans la chaîne Pposition(Chn1,Chn2)
P contiendra 9
Chn2

Année universitaire 2020/2021 15


ALGORITHMIQUE ET STRUCTURE DE DONNEES 1

Procédure Rôle Exemple


Efface(chaîne,P,N) Enlève N caractères à partir Chn1’Année universitaire’
de la position P donnée. Efface(Chn1,6,14)
Chn1 contiendra ‘Année’
Insert(Chn1,Chn2,P) Insère la chaîne Chna1 dans la Chn1’é’
Chn2 à partir de la position P. Chn2 ‘Anne
Insert(Chn1,Chn2,4)
Chn2 contiendra ‘Année’
Convch(Nbr,Chn) Converti le nombre Nbr en X=2020
une chaîne de caractères Chn. Convch(x,Chn)
Chn contiendra la chaîne
‘2020’

En langage C
Fonction Rôle Exemple

Strlen(Chn) Retourne la longueur d’une chaîne de Strlen(‘Bonjour’)


caractères. On obtiendra le résultat :
7
Strepy(Chn1,Chn2) Char chn1[20]= ‘Année’ ;
Copie une chaîne en deuxième argument Char chn2[20]=’ Universitaire’ ;
Strepy(Chn1,Chn2)
dans une autre en premier argument.
On obtiendra le résultat :
‘Année Universitaire’
Strcmp (Ch1, Ch2) Compare deux chaînes et retourne Char Ch1[]=’Bonjour’ ;
Char Ch2[]=’Au revoir’ ;
• Une valeur positive si la première Strcmp (Ch1, Ch2)
chaine plus grande que la seconde
• Zéro si elles sont égales On obtiendra le résultat :
• Une valeur négative si la seconde -1
chaine est plus grande que la
première.

Année universitaire 2020/2021 16

Vous aimerez peut-être aussi