Vous êtes sur la page 1sur 33

1

LSI 1

Les tableaux
Les structures
2

LSI 1

Définition
Les tableaux unidirectionnels
Syntaxe de déclaration
Opérations de manipulation
Applications
Les tableaux multidimensionnels\bidirectionnels
Syntaxe de déclaration
Opérations de manipulation
Applications
3

LSI 1

Définition
• Un tableau est une structure de données constituée d’un ensemble ou
collection d’éléments de même type de base
• Ces éléments sont mémorisés (ou stockés) dans un espace contiguë (continu)
 Ces éléments sont accessibles pour un indice

• La cardinalité de cet ensemble doit être fixée avant l’utilisation


• Les seuls moyens offerts sont
 déclarer un tableau
 accéder à un élément d’indice i d’un tableau
4

LSI 1

Les tableaux unidimensionnels


• Description schématique

Adresse de base Cardinalité


5

LSI 1

Syntaxe de déclaration
Syntaxe 1 Syntaxe 2

VAR TYPE
Nom_table : tableau [bi .. bs] de type_de_base type_table = tableau [bi ..bs] de type_de_base
VAR
nom_table : type_table

• Avec :
▫ bi et bs représentent les bornes de l’intervalle borné des indices (par convention bi = 1)
▫ Le type_de_base peut être un type simple (logique, caractère, entier, etc.) ou un type composé (tableau, chaîne de caractères,
structure ou pointeur)
• Exemple : Déclaration d’un tableau de 100 entiers
VAR TYPE
T : tableau [1 .. 100] d’entier TAB = tableau [1 .. 100] d’entier
VAR
T : TAB
6

LSI 1

Opérations de manipulation
• Accès à un élément d’un tableau
▫ La seule primitive d’accès aux éléments d’un tableau repose sur l’opération d’indiçage
▫ Exemple
 Soit un tableau T de taille n, pour tout indice i  [1 .. n], l’opération d’indiçage notée T[i] délivre la
valeur de l’élément d’indice i du tableau
 Le résultat de T[i] est indéfini si i  [1 .. n].
• Coût d’accès à un élément d’un tableau

Adresse d’un élément d’indice i = adresse de base + i * taille du type des éléments stockés dans le tableau

▫ Le coût d’accès à un élément d’indice donné correspond au temps exigé pour faire une
multiplication suivie d’une addition
 Ce temps peut être majoré par une constante ( temps exigé pour faire * et + )
 On note ce coût O(1)
7

LSI 1

Opérations de manipulation
• Les opérations globales sur les tableaux ne sont pas prédéfinies
▫ un tableau doit être traité élément par élément et non pas comme une seule entité
• Toutes les opérations autorisées sur le type de base du tableau sont aussi
applicables sur les éléments du tableau
Il est Interdit d’écrire Il faut plutôt écrire

lire(T) lire(T[i])

écrire(T) écrire(T[i])

T1  T2 T1 [ i ]  T2 [ j ]
8

LSI 1

Application
• Ecrire un sous algorithme permettant de déterminer le plus grand élément
parmi les éléments d’un tableau T de N entiers, ainsi que son rang (position)
Procédure MAXIMUM (Entrée T : tableau [1..30] d’entier, N : entier, Sortie max : entier, pos : entier)
Var
i : entier
Début
// calcul du max et de sa position
pos  1
pour i de 2 à N faire
Si T [ i ] > T[pos] alors
pos  i
FinSi
FinFaire
max  T [pos]
Fin MAXIMUM
9

LSI 1

Les tableaux multidimensionnels


• Descriptions schématiques

(dimension 2 ) (dimension 3)
• Syntaxe de déclaration
TYPE
ind1 = 1 .. n1
ind2 = 1 .. n2
ind3 = 1 .. n3
VAR
Nom_table : tableau [ind1, ind2, ind3, …] de type_de_base
10

LSI 1

Les tableaux bidimensionnels


• Un tableau bidimensionnel (matrice) est un cas particulier des tableaux multidimensionnels
• Un tableau bidimensionnel est définie par un nombre de lignes et un nombre de colonnes
• Une matrice peut être considérée comme un tableau de tableau
▫ chaque élément (ligne) est un tableau : qui contient plusieurs autres éléments (colonnes)
• Syntaxe de déclaration

Syntaxe 1
VAR
Nom_matrice : tableau [ 1.. Nlignes, 1 .. Ncolonnes ] de type_de_base

Syntaxe 2
Type
Type_matrice = tableau [ 1.. Nligne, 1 .. Ncolonne ] de type_de_base
VAR
Nom_matrice : Type_matrice
11

LSI 1

Opérations de manipulation
• Une matrice doit être traitée élément par élément et non pas comme une
seule entité

• Toutes les opérations autorisées sur le type de base de la matrice sont aussi
applicables sur les éléments de la matrice

• Accès à un élément
▫ l’accès aux éléments d’une matrice repose sur l’opération d’indiçage
 M [ i , j ] désigne l’élément de M se trouvant à la ligne i et à la colonne j
12

LSI 1

Application
• Ecrire un algorithme permettant de remplir une matrice
▫ Ligne par ligne
▫ Colonne par colonne
Algorithme Remplissage ligne_par_ligne // remplissage ligne par ligne
VAR Pour i de 1 à L faire
M : tableau [1..100, 1..50] d’entier Pour j de 1 à C faire
i,j , L, C : entier Ecrire(" donnez l’élément " , i , j)
Début lire(M [i , j ])
Répéter Fin faire
Ecrire(" donnez le nombre de lignes ") Fin faire
Lire(L) Fin
Jusqu’à ( L>=1 et L<=100)
Répéter
Ecrire(" donnez le nombre de colonnes ")
Lire(C)
Jusqu’à ( C>=1 et C<=50)
13

LSI 1

Application
• Ecrire un algorithme permettant de remplir une matrice
▫ Ligne par ligne
▫ Colonne par colonne
Algorithme Remplissage colonne_par_colonne // remplissage colonne par colonne
VAR Pour j de 1 à C faire
M : tableau [1..100, 1..50] d’entier Pour i de 1 à L faire
i,j , L, C : entier Ecrire(" donnez l’élément " , i , j)
Début lire(M [i , j ])
Répéter Fin faire
Ecrire(" donnez le nombre de lignes ") Fin faire
Lire(L) Fin
Jusqu’à ( L>=1 et L<=100)
Répéter
Ecrire(" donnez le nombre de colonnes ")
Lire(C)
Jusqu’à ( C>=1 et C<=50)
14

LSI 1

Application
• Ecrire une fonction qui admet comme paramètres une matrice M de L x C réels et un indice
de ligne i et qui retourne la somme des éléments de la i ème ligne de M

Fonction Somme_Ligne (M: tableau [1..20,1..30] de réel, C,i : entier) : réel


VAR
j : entier
S : réel
Début
S0
pour j de 1 à C faire
S  S + M[i,j]
Fin faire
retourner S
Fin Somme_Ligne
15

LSI 1

Définition
Syntaxe de déclaration
Opérations de manipulation
Applications
Tableaux de structure
Applications
16

LSI 1

Définition
• La structure (ou enregistrement) est un regroupement de données composées
d’un nombre fixe d’éléments qu’on appelle champs ayant chacun un nom et
un type
• Exemple : pour collecter les informations d’un visiteur à une entreprise
Structure : Visiteur

CIN
Nom (entier)
(chaine)
Type Champs
(chaine)
17

LSI 1

Syntaxe de déclaration
TYPE
nom_enreg = Structure
<Nom_Champ1> : type1
<Nom_Champ2> : type2
...
<Nom_champN> : typeN
Fin Structure

VAR
nom_vble : nom_enreg

• Avec
▫ Nom_Champ i : représente le nom du champ "i" de la structure
▫ Type i: représente le type du champ "i". Il peut être simple ou composé
18

LSI 1

Exemple de déclaration
• On veut gérer l’ensemble des informations d’un étudiant ETD connu par son nom, son
prénom, sa moyenne et son âge
▫ La structure correspondante sera la suivante

TYPE
Etudiant = Structure ETD
nom : chaine
prenom : chaine nom
moyenne : réel
prenom
age : entier
Fin Structure moyenne
age
VAR
ETD : Etudiant
19

LSI 1

Opérations de manipulation
• L’accès à un élément (champ : nom_champ) d’une variable Nom_vbl de type
structure Etudiant doit respecter la syntaxe suivante
Nom_vble  nom_champ

▫ Exemple
ETD

nom
ETD  nom : correspond au nom de l’étudiant ETD
prenom ETD  moyenne : correspond à la moyenne de l’étudiant ETD
moyenne
age
20

LSI 1

Opérations de manipulation
• Lecture/Affichage
▫ Une structure doit être traitée champ par champ et non pas comme une seule entité

Il est Interdit d’écrire Il faut plutôt écrire

lire(ETD) lire(ETD.nom)

écrire(ETD) écrire(ETD.nom)
21

LSI 1

Opérations de manipulation
• Affectation
▫ peut se faire entre deux variables de même type structure ou pour chaque champ comme
une entité à part
▫ Exemple
Soit deux étudiants E1 et E2 de type Etudiant
Les écritures suivantes sont autorisées
E1  E2
E1.moyenne  12
E1.moyenne  E2.moyenne

• Chaque champ peut subir les fonctions autorisées sur son type
22

LSI 1

Applications
• Application 1 : Ecrire un algorithme qui permet de saisir les informations
d’un étudiant (nom, prénom, âge et moyenne)
Algorithme Application1 Début
ecrire(" donnez le nom et prénom " )
TYPE
Etudiant = Structure lire(ETD.nom, ETD.prenom)
nom : chaine
prenom : chaine ecrire(" donnez la moyenne " )
moyenne : réel
age : entier lire(ETD.moyenne)
Fin Structure
ecrire(" donnez l’âge" )
VAR lire(ETD.age)
ETD : Etudiant
Fin
23

LSI 1

Applications
• Application 2 : Ecrire un algorithme qui permet de saisir des informations
d’un étudiant sachant qu'un étudiant est caractérisé par son nom, son
prénom, sa date de naissance (jour, mois et année) et sa moyenne générale

ETD

nom

prenom
moyenne DN De type structure

DN j
m
a
24

LSI 1

Applications
Algorithme Application2 Début
ecrire(" donnez le nom et prénom " )
TYPE
lire(ETD.nom, ETD.prenom)
Date = Structure
j,m,a : entier ecrire(" donnez la moyenne ")
Fin Structure lire(ETD.moyenne)
ecrire(" donnez le jour de la date de naissance" )
Etudiant = Structure
nom : chaine lire(ETD.DN.j)
prenom : chaine ecrire(" donnez le mois de la date de naissance" )
moyenne : réel
lire(ETD.DN.m)
DN : Date
Fin Structure ecrire(" donnez l’année de la date de naissance" )
lire(ETD.DN.a)
VAR
ETD : Etudiant Fin
25

LSI 1

Applications
• Application 3 : Donner les structures de données pour représenter un étudiant ETD sachant
qu'un étudiant est caractérisé par son nom, son prénom, sa date de naissance et ses
moyennes pour 10 matières où il est inscrit

ETD

nom Notes de Type tableau


prenom
… DN de type structure
Notes
DN j
m
a
26

LSI 1

Applications
Algorithme Application3 Début
ecrire(" donnez le nom et prénom " )
TYPE lire(ETD.nom, ETD.prenom)
Date = Structure ecrire(" donnez la date de naissance" )
j,m,a : entier lire(ETD.DN.j, ETD.DN.m , ETD.DN.a)
Fin Structure
ecrire (" donnez les notes")
Etudiant = Structure Pour i de 1 à 10 faire
nom : chaine ecrire(" matiere n° ", i)
prenom : chaine lire(ETD.Notes [i])
Notes : tableau [1..10] d’entier Finfaire
DN : Date
Fin Structure Fin

VAR
ETD : Etudiant
i : entier
27

LSI 1

Applications
Algorithme Application3 Début
ecrire(" donnez le nom et prénom " )
TYPE lire(ETD.nom, ETD.prenom)
Date = Structure ecrire(" donnez la date de naissance" )
j,m,a : entier lire(ETD.DN.j, ETD.DN.m , ETD.DN.a)
FinStructure
ecrire (" donnez les notes")
Etudiant = Structure Pour i de 1 à 10 faire
nom : chaine ecrire (" matiere n° ", i)
prenom : chaine lire (ETD.Notes [i])
Notes : tableau [1..10] d’entier Finfaire
DN : Date
Fin Structure Fin

VAR
ETD : Etudiant
i : entier
28

LSI 1

Tableaux de structures
• Chaque case est une structure de type Etudiant
T[1] T[i] T[N]

nom nom nom

prenom prenom prenom

T … … …
Notes … Notes … Notes
DN j DN j DN j
m m m
a a a

1 i N
T[i].DN.j
T[i].Notes [k]
T[i].Prénom
T[i].Nom
29

LSI 1

Tableaux de structures
• Syntaxe de déclaration
TYPE
nom_enreg = Structure
<Nom_Champ1> : type1
<Nom_Champ2> : type2
...
<Nom_champN> : typeN
Fin Structure

VAR
T : tableau [bi .. bs] de nom_enreg
30

LSI 1

Tableaux de structures
• Exemple : Si on veut gérer les informations relatives à N (maximum 30) étudiants, on doit
alors déclarer un tableau d’étudiants
TYPE
Date = Structure
j,m,a : entier
Fin Structure

Etudiant = Structure
nom : chaine
prenom : chaine
Notes : tableau [1..10] d’entier
DN : Date
Fin Structure

VAR
T : tableau [1.. 30] de Etudiant
31

LSI 1

Tableaux de structures : Application


• Application 4 : Sachant qu’un étudiant est caractérisé par son nom, son prénom, ses notes dans 10
matières, sa moyenne générale et sa date de naissance, écrire un algorithme qui permet de
▫ Remplir un tableau de N étudiants (N≤30) sachant que la moyenne doit être calculée à partir des moyennes des
différentes matières (supposées de même coefficient)
▫ Chercher le/les étudiants majeurs de la classes
▫ Calculer la moyenne générale de la classe

nom nom nom

prenom prenom prenom

T … … …
Notes … Notes … Notes
DN j DN j DN j
m m m
a a a

moy moy moy


32

LSI 1

Application
Algorithme Application4 VAR
T : Tableau [1..30] de Etudiant
TYPE I,N : entier
Date = Structure J,S : entier // somme des notes d’un étudiant
j,m,a : entier max : reel // meilleure moyenne
Fin Structure SM : reel // somme des moyennes des étudiants
//pour le calcul de la moyenne générale de la classe
Etudiant = Structure moyG : reel // moyenne générale de la classe
nom : chaine
prenom : chaine
DN : Date
Notes : tableau [1..10] d’entier
moy : réel
Fin Structure
33

LSI 1

Application
Début // calcul de la meilleur moyenne de la classe
// saisie de la taille de T //et calcul de la somme des moyennes
Répéter Max  T[ 1 ]. moy
ecrire(" donnez le nombre d’étudiants ") SM  T[ 1 ]. moy
lire(N) Pour i de 2 à N faire
Jusqu’à (N≥1 et N≤ 30) Si T[ i ]. moy > max
// remplissage de T alors max T[ i ]. moy
Pour i de 1 à N faire FinSi
ecrire(" donnez le nom et prénom " ) SM SM + T[ i ]. moy
lire(T[ i ].nom, T[i].prenom) FinFaire
ecrire(" donnez la date de naissance ")
lire(T[ i ].DN.j, T[ i ].DN.m , T[ i ].DN.a) //Affichage des nom et prénoms de meilleurs étudiants
ecrire (" donnez les notes") ecrire(" les meilleurs étudiants sont " )
S0 Pour i de 1 à N faire
Pour j de 1 à 10 faire si T[ i ]. moy = max
ecrire(" matiere n° ", j) alors ecrire(T[ i]. nom, T[ i]. prenom)
lire(T[ i ].Notes [ j ]) finSi
S  S + T[ i ].Notes [ j ] FinFaire
Finfaire // calcul de la moyenne générale de la classe
T[ i ].moy  S /10 MG  SM / N
Fin Faire ecrire(" la moyenne de la classe est ", MG)
Fin

Vous aimerez peut-être aussi