Académique Documents
Professionnel Documents
Culture Documents
Objectif
Éléments de contenu
1. Introduction
2. Le type tableau
3. Le type chaine de caractères
4. Le type enregistrement
1
Abir BK, Karim H et Rym K
Introduction
Jusque-là, et avec les structures de données simple qu’on a déjà définies (entier, réel,
caractère,), on n’est capable de définir que des variables de types simples qui, à un instant
donné, ne peut contenir qu’une seule valeur, et l’affectation d’une nouvelle valeur détruit
l’ancienne.
1. Le type Tableau
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.
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.
1.2.1 Déclaration
A. Algorithmique
La déclaration d’un tableau peut être faite de deux manières équivalentes :
2
Abir BK, Karim H et Rym K
Var
Nom _ tableau : tableau [bi…bs] du _ type_ de_
base
Ou
Var
Nom _ tableau : tableau de taille type _ tableau
Avec :
Type _ de_ base peut être : type simple (logique, caractère, entier, etc) ou type
composé (chaîne de caractère, etc.)
Exemple :
Var
T : tableau de 100 entiers
Ou bien
T : tableau de [0..99] entiers
Un élément d’un tableau doit être considéré exactement comme une variable simple. En effet,
toutes les opérations applicables sur le type de base sont applicables sur les éléments du
tableau (comparaison, affectation, etc.)
L’indice n’est pas nécessairement une constante, il peut être également une variable ou une
expression.
Exemples :
3
Abir BK, Karim H et Rym K
TAB [4] : donne le cinquième élément de TAB
Remarque :
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.
B. Langage C
En langage C, la syntaxe de la définition d’un tableau unidimensionnel est la suivante :
Type : définit le type d’élément que contient le tableau, c’est-à-dire définit la taille
d’une case du tableau en mémoire.
Nom_tableau : est le nom qu’on décide de donner au tableau. Le nom du tableau suit
les mêmes règles qu’un nom de variable
Nombre d’éléments : est un nombre entier qui détermine le nombre de case que le
tableau doit comporter
Exemples :
4
Abir BK, Karim H et Rym K
1.2.2 Opérations de base sur un tableau
A. Initialiser un tableau
Etant donné un tableau défini, les valeurs des éléments qu’il contient en sont pas
obligatoirement définies, il faut donc les initialiser. C’est-à-dire leur affecter une valeur
Algorithme Ini_Tab
Var
T: Tableau [0..N-1] de Entier
N, i: entier
Début
Lire (N)
Pour i de 0 à N-1 faire
T[i] 0
FinPour
Fin
Traduction en langage C
#include <stdio.h>
#include <conio.h>
int main()
{
int Tab[10];
int Taille, i=0;
do
{
printf("Donner la taille de Tableau Tab : ");
scanf("%d",&Taille);
}
while(Taille<2 || Taille>10);
for(i=0 ; i<Taille ; i++)
5
Abir BK, Karim H et Rym K
Tab[i]=0;
getch();
return 0;
}
B. Remplir un Tableau
Il s’agit de remplir le tableau par des valeurs saisis au clavier par l’utilisateur
Algorithme Remp_Tab
Var
T = Tableau [0..N-1] de Entier
N,i : entier
Début
Lire (N)
Pour i de 0 à N-1 faire
Lire( T [ i ] )
FinPour
Fin
Traduction en langage C
#include <stdio.h>
#include <conio.h>
int main()
{
int Tab[10];
int Taille, i=0;
do
{
printf("Donner la taille de Tableau Tab : ");
scanf("%d",&Taille);
}
while(Taille<2 || Taille>10);
6
Abir BK, Karim H et Rym K
for(i=0 ; i<Taille ; i++)
scanf("%d",&Tab[i]);
getch();
return 0;
}
Algorithme Aff_Tab
Var
TAB= Tableau [0..N-1] de Entier
N,i : entier
Début
Lire (N)
Pour i de 0 à N-1 faire
Écrire ( TAB [ i ], " ")
FinPour
Fin
Traduction en langage C
#include <stdio.h>
#include <conio.h>
int main()
{
int TAB[10];
int Taille, i=0;
/*Avant d’afficher le tableau TAB il faut le remplir par des éléments*/
do
{
printf("Donner la taille de Tableau Tab : ");
scanf("%d",&Taille);
7
Abir BK, Karim H et Rym K
}
while(Taille<2 || Taille>10);
for(i=0 ; i<Taille ; i++)
scanf("%d",&TAB[i]);
/*Affichage de tableau TAB*/
for(i=0 ; i<Taille ; i++)
printf("%d\t",TAB[i]);
getch();
return 0;
}
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.
1.3.1 Déclaration
A. Algorithmique
Var
M : Tableau [0..Nbr_Lig-1, 0..Nbr_Col-1] de Type_Élément
Ou bien
Var
M : Tableau [Nbr_Lig, Nbr_Col] de Type_Élément
8
Abir BK, Karim H et Rym K
ème ème
Si M est la matrice, M[I,J] désigne l’élément de M situé à la I Ligne et à la J
Colonne.
B. Langage C
Type : définit le type d’élément que contient la matrice, c’est-à-dire définit la taille
d’une case de la matrice en mémoire.
Nom _ Matrice: est le nom qu’on décide de donner à la matrice.
NombreLigneMax: est un nombre entier qui détermine le nombre de lignes max de la
matrice.
NombreColMax : est un nombre entier qui détermine le nombre de colonnes max de
la matrice.
Algorithme Ini_matrice
Var
M : Tableau de [Nbr_Lig, Nbr_Col] Entier
Nbr_Lig, Nbr_Col ,I,J: entier
Début
Lire(Nbr_Lig)
Lire(Nbr_Col)
9
Abir BK, Karim H et Rym K
FinPour
Fin
Traduction en langage C
#include<conio.h>
#include<stdio.h>
int main()
{
int M[5][5];
int Nbr_Lig, Nbr_Col, i, j;
do
{
printf("Donner le nombre de lignes dans [2..5] : ");
scanf("%d",&Nbr_Lig);
}
while(Nbr_Lig<2 || Nbr_Lig>5);
do
{
printf("Donner le nombre de colonnes dans [2..5] : ");
scanf("%d",&Nbr_Col);
}
while(Nbr_Col<2 || Nbr_Col>5);
getch();
return 0;
}
10
Abir BK, Karim H et Rym K
B. Remplir une matrice
Algorithme Remplir_matrice
Var
M : Tableau [1..Nbr_Lig, 1..Nbr_Col] de Entier
Nbr_Lig, Nbr_Col ,I,J: entier
Début
Lire(Nbr_Lig)
Lire(Nbr_Col)
Traduction en langage C
#include<conio.h>
#include<stdio.h>
int main()
{
int M[5][5];
int Nbr_Lig, Nbr_Col, i, j;
do
{
printf("Donner le nombre de lignes dans [2..5] : ");
scanf("%d",&Nbr_Lig);
}
while(Nbr_Lig<2 || Nbr_Lig>5);
11
Abir BK, Karim H et Rym K
do
{
printf("Donner le nombre de colonnes dans [2..5] : ");
scanf("%d",&Nbr_Col);
}
while(Nbr_Col<2 || Nbr_Col>5);
getch();
return 0;
}
Algorithme Parcourir_matrice
Var
M : Tableau [1..Nbr_Lig, 1..Nbr_Col] de Entier
Nbr_Lig, Nbr_Col ,I,J: entier
Début
Lire(Nbr_Lig)
Lire(Nbr_Col)
Pour I de 0 à Nbr_Lig-1 Faire
Pour J de 0 à Nbr_Col-1 Faire
Lire(M[I,J])
FinPour
FinPour
12
Abir BK, Karim H et Rym K
Pour I de 0 à Nbr_Lig-1 Faire
Pour J de 0 à Nbr_Col-1 Faire
Ecrire(M[I,J], " ")
FinPour
RetourLigne()
FinPour
Fin
Traduction en langage C
#include<conio.h>
#include<stdio.h>
int main()
{
int M[5][5];
int Nbr_Lig, Nbr_Col, i, j;
do
{
printf("Donner le nombre de lignes dans [2..5] : ");
scanf("%d",&Nbr_Lig);
}
while(Nbr_Lig<2 || Nbr_Lig>5);
do
{
printf("Donner le nombre de colonnes dans [2..5] : ");
scanf("%d",&Nbr_Col);
}
while(Nbr_Col<2 || Nbr_Col>5);
13
Abir BK, Karim H et Rym K
for(i=0 ; i<Nbr_Lig ; i++)
for(j=0 ; j<Nbr_Col ; j++)
{
printf("Donner la valeur de la case M[%d][%d] : ",i+1,j+1);
scanf("%d",&M[i][j]);
}
printf("\n\n");
}
getch();
return 0;
}
2.1 Déclaration
Algorithmique
Type
Nom_chaine = chaine [Taille_max]
Var
Nom_variable : Nom_chaine
Var
Nom_variable : chaine [Taille_max]
Avec :
14
Abir BK, Karim H et Rym K
Taille_max désigne la taille maximale que peut avoir une chaîne de caractère ; il doit
être strictement positif.
Exemple :
Type
Nom = chaine [20]
Var
Nom1, Nom2 : Nom
On a déclaré une chaîne Nom qui est de taille maximale 20 et deux variables Nom1 et Nom2.
Langage C
Une chaîne de caractères n'est rien d'autre qu'un tableau de type char
La figure suivante vous donne une idée de la façon dont la chaîne « Salut » est stockée en
mémoire
Comme on peut le voir, c'est un tableau qui prend 5 cases en mémoire pour représenter le mot
« Salut ».
15
Abir BK, Karim H et Rym K
Toutefois, une chaîne de caractères ne contient pas que des lettres ! Le schéma de la fig.
suivante est en fait incomplet. Une chaîne de caractère doit impérativement contenir un
caractère spécial à la fin de la chaîne, appelé « caractère de fin de chaîne ». Ce caractère
s'écrit'\0'.
Par conséquent, pour stocker le mot « Salut » (qui comprend 5 lettres) en mémoire, il ne faut
pas un tableau de 5char, mais de 6 !
Chaque fois que vous créez une chaîne de caractères, vous allez donc devoir penser à prévoir
de la place pour le caractère de fin de chaîne.
En Algorithmique
L’affichage :
Ecrire (Nom1, Nom2)
16
Abir BK, Karim H et Rym K
Initialisation :
Nom1 ‘’ (*chaîne vide*)
En C
Les langages de programmation comportent un jeu de fonctions prédéfinies sur le type chaîne
de caractère. On cite principalement les fonctions suivantes :
- La fonction LONG qui retourne la longueur d’une chaîne
- La fonction CONCAT qui rassemble plusieurs chaînes en une seule.
- La fonction POS qui retourne la position d’une sous chaîne dans une chaîne.
- La fonction MAJ qui rend une chaîne en majuscule.
- La fonction MIN qui rend une chaîne en majuscule.
- La fonction SUBSTR qui permet d’extraire une sous chaîne à partir d’une chaîne.
Exemple :
CH : chaine
X : entier
CH ’isetjendouba’
17
Abir BK, Karim H et Rym K
X long (ch)
Ecrire (x)
Remarque :
La longueur d’une chaîne étant un entier, on ne peut pas la mettre isolée dans un
algorithme ; on doit l’affecter à une variable de type entier ou on doit le mettre
dans une primitive d’écriture.
Cette fonction permet de concaténer plusieurs chaînes non nécessairement de même taille, en
une seule.
Exemple :
Nom : chaîne
Prénom : chaîne
Etudiant : chaîne
Dans la variable Etudiant, on va trouver une chaîne contenant le nom et le prénom ensemble.
Remarque :
La concaténation de plusieurs chaînes est une chaîne, on ne peut pas la mettre isolée
dans un algorithme ; on doit l’affecter à une variable de chaîne ou on doit le mettre
dans une primitive d’écriture.
18
Abir BK, Karim H et Rym K
2.3.3 La fonction POS :
La fonction POS retourne la position à partir de laquelle une sous chaîne apparaisse dans une
chaîne Dans les cas où cette chaîne n’existe pas, elle retourne la valeur zéro.
X POS (nom_chaine,nom_sous_chaine)
X prend comme valeur la position à partir de laquelle la sous chaîne apparaisse dans la chaîne.
Exemple :
CH ‘isetjendouba’
CH1 ‘et’
X POS (CH,CH1)
X POS (CH,’et’)
Remarque :
Exemple :
CH ‘isetjendouba’
19
Abir BK, Karim H et Rym K
2.3.5 La fonction SUBSTR :
Il s’agit d’extraire une sous-chaîne de taille P à partir d’une position dans une chaîne.
Algorithmiquement, elle est notée sous-chaîne. Pour faciliter son utilisation, on va utiliser la
convention du langage pascal qui est SUBSTR. Cette fonction retourne une chaîne de
caractères.
Exemple :
Cette bibliothèque fournit un ensemble de fonctions qui permettent de manipuler des chaînes
de caractères. En voici la liste :
strcat, strchr, strcmp, strcpy, strcspn, strlen, strncat, strncmp, strncpy, strpbrk, strrchr, strspn,
strtok.
Vous remarquerez que leurs noms commencent toujours par "str" pour string (chaîne en
anglais).
20
Abir BK, Karim H et Rym K
strcat (chaîne1, chaîne2) : copie le contenu de chaîne2 à la fin de chaîne1.
strcmp ( chaîne1 , chaîne2 ) : compare les deux chaînes, retourne 0 en cas d'égalité,
une valeur négative si « chaîne1 » est "avant" « chaîne2 » dans l'ordre
lexicographique, une valeur strictement positive sinon.
strncat ( chaine1 , chaine2 , n ) : concatène au plus les « n » premiers caractères de «
chaine2 » à « chaine1 ». Si n est plus grand que la longueur de « chaine2 », la
longueur de « chaine2 » est utilisée à la place de n.
strncpy ( chaine1 , chaine2 , n) : copie « n » caractères de « chaine2 » sur « chaine1
». Si « n » est inférieur à longueur de « chaine2 » « \0 » n'est pas ajouté en fin de «
chaine1 ». Si « n » est supérieur à longueur de « chaine2 », « chaine1 » est complétée
par des « \0 ».
Pour les opérations de copies, si la chaîne de caractères cible « chaîne1 » ne contient pas assez
de place pour contenir « chaîne2 » alors seuls les caractères que l'on peut copier le sont. On
dit que « chaîne2 » est tronquée.
3. Le type Enregistrement
3.1 Déclaration
Algorithmique
21
Abir BK, Karim H et Rym K
Type
Nom_Enreg : Enregistrement
Nom_champ1 : type_champ1
Nom_champ2 : type_champ2
…
Nom_champ n : type_champ n
Fin Enregistrement
Var
Nom_variable : Nom_Enreg
Exemples :
Type
Etudiant : Enregistrement
Nom : chaîne [30]
Prenom : chaîne [20]
Matricule : entier
Age : entier
Fin Enregistrement
Var
Etud : Etudiant
Type
Produit = Enregistrement
Quantité : Entier
Prix : Réel
Ref : chaîne[5]
Fin Enregistrement
Var
Pr :Produit
Type
Date = Enregistrement
Jour : Entier
Mois : Entier
22
Abir BK, Karim H et Rym K
Année : Entier
Fin Enregistrement
Var
Dn :Date
Langage C
Dans un programme en C, un enregistrement est déclaré avant la fonction main() comme
suivant :
int main()
{
Nom_Enreg Nom_Variable ;
…
}
Exemples :
#include<conio.h>
#include<stdio.h>
int main()
23
Abir BK, Karim H et Rym K
{
Etudiant Etud;
....
getch();
return 0;
}
#include<conio.h>
#include<stdio.h>
int main()
{
Produit Pr;
....
s getch();
return 0;
}
#include<conio.h>
#include<stdio.h>
int main()
24
Abir BK, Karim H et Rym K
{
Date Dn;
....
getch();
return 0;
}
Pour accéder soit en lecture, soit en écriture à un champ d’enregistrement que ce soit dans un
algorithme ou un programme, on utilise la syntaxe suivante.
Nom_variable.Nom_champ
Exemples :
Etud.Nom
Etud.Prénom
Etud.CIN
Pr.Nom
Pr.Qte
Une variable de type enregistrement doit être lue champ par champ. Par exemple :
Var
P : Personne
C : Complexe
On ne peut pas faire lire(E) ou lire(C) mais il faut faire :
Lire(P.nom)
Lire(P.prénom)
Lire(P.CIN)
Lire(C.P_réel)
Lire(C.P_imag)
25
Abir BK, Karim H et Rym K
En langage C
scanf("%s", &P.nom) ;
scanf("%s", &P.prénom) ;
scanf("%d", &P.CIN) ;
scanf("%f", &C.P_réel) ;
scanf("%f", &C.P_imag) ;
3.2.2 Affichage
Une variable de type enregistrement doit être affichée champ par champ. Par exemple :
Var
P : Personne
C : Complexe
On ne peut pas faire écrire(E) ou écrire(C) mais il faut faire :
Ecrire(P.nom)
Ecrire(P.prénom)
Ecrire(P.CIN)
Ecrire (C.P_réel)
Ecrire (C.P_imag)
En langage C
3.2.3 Affectation
Une variable de type enregistrement doit être initialisée champ par champ. Par exemple :
Var
P1,P2 : Personne
D : Date
26
Abir BK, Karim H et Rym K
E : Etudiant
On ne peut pas faire D ??? , mais il faut faire :
Remarque :
Il existe des variables de type enregistrement dont certains champs sont eux même
de type enregistrement donc on parle ici de l’enregistrement imbriqué ;
Exemple :
Type
Date = Enregistement
Jour : Entier
Mois : Entier
Année : Entier
Fin Enregistrement
Type
Personne = Enregistement
Nom : chaîne[30]
Prénom : chaîne[20]
Date_Naissance : Date
Fin Enregistrement
Var
P : Personne
DEBUT
27
Abir BK, Karim H et Rym K
Lire(P.nom)
Lire(P.prénom)
Lire(P.date_naissance.Jour)
Lire(P.date_naissance.Mois)
Lire(P.date_naissance.Année)
FIN
4. Exercices d’application
Exercice 1
Ecrire un algorithme qui lit les dimensions L et C d'un tableau T à deux dimensions du type
entier (dimensions maximales : 50 lignes et 50 colonnes). Remplir le tableau par des valeurs
entrées au clavier et afficher le tableau ainsi que la somme de tous les éléments qui se
trouvent dans la même ligne.
Exercice 2
Ecrire un algorithme qui lit deux chaînes de caractères CH1 et CH2 et qui copie la première
moitié de CH1 et la première moitié de CH2 dans une troisième chaîne CH3. Afficher le
résultat.
Traduire cet algorithme en langage C
Exercice 3
Ecrire un algorithme qui permet de gérer une association des joueurs de football, un joueur est
caractérisé par son nom, son prénom, sa date de naissance, sa nationalité, et son sexe.
Cet algorithme permet aussi d’afficher tous les joueurs qui ont un Age supérieur à 22 ans.
28
Abir BK, Karim H et Rym K