Tableaux et listes
2020
Les "grands" types
• numériques (types simples)
entier, réel, booléen caractère, complex
• Les types composites
chaîne de caractères tableaux
liste
et beaucoup d’autres
VOCABULAIRE : Les variables de ces types sont appelées des variables objets
(ou des objets)
Types simples
Une variable d'un type simple contient une valeur
unEntier 123
unReel 1.235e12 unBooleen Vrai unCaractere 'N' unComplexe 2+3j
Liste et Tableau
• entité composée d'un ensemble d'entités plus petites,
• une variable de type liste ou tableau
– peut être vue comme un seul objet,
– ou comme une suite ordonnée d'éléments
Les tableaux
Définition et exemples taille d'un tableau indices d'une case
déclaration, initialisation, utilisation tableaux passés en paramètres
Qu'est-ce qu'un Tableau ?
• Type de données composite
– Regroupement organisé de valeurs – Exemple : vecteur, matrice,
• Caractérisé par
– sa dimension : nb d'indices pour désigner une case (généralement 1 ou 2 dimensions)
– sa taille : nombre d'éléments par dimension, – le type des éléments
(en général, même type pour toutes les valeurs)
Exemple deux variables tableaux
Tab1 : Tableau d'entiers à 1 dimension, de taille 12
Tab2 : Tableau de booléens à 2 dimensions, de taille 3*5
123 456 789 159 48 26 15 48 456 147 777 47
0 1 2 3 4 5 6 7 8 9 10 11
0 1 2 3 4
0 False True True True False
1 True False True False True
2 True True False True True
Exemple de tableau à une dimension (un vecteur)
Tab1 : variable de type tableau d'entiers
à 1 dimension, de taille 12
Tab1 [6] désigne la case d'indice 6 Tab1[6] est un entier
Tab1[6] vaut 15
123 456 789 159 48 26 15 48 456 147 777 47
0 1 2 3 4 5 6 7 8 9 10 11
Valeur
d'une case du tableau
Exemple de tableau à une dimension
• Les indices sont des entiers successifs
• L'indice de la première case est 0
• l'indice est écrit entre crochets : SI tab1[10] > 1000 ALORS 123 456 789 159 48 26 15 48 456 147 777 47
0 1 2 3 4 5 6 7 8 9 10 11
Chaque case est repérée par
un indice (tableau à UNE dimension)
L'indice est TOUJOURS un entier
Dimensions et Indices
• Indice :
– nombres entiers successifs
– premier indice : (en général) zéro
– numéro de la case (pour un tableau 1D)
• Chaque case d'un tableau est repérée par un (ou plusieurs) indices
– nb d'indices par case : nb de dimensions du tableau
• pour un tableau 2D (ou +), l'ordre des indices est important
Tableau à une ou deux (ou 3) dimensions
Dans un tableau à une dimension (vecteur), chaque case est repérée par UN indice, Dans un tableau à deux dimensions,
chaque case est repérée par DEUX indices, Dans un tableau à trois dimensions,
chaque case est repérée par TROIS indices,
Tableau à deux dimensions
• fixer le nombre de cases dans chaque dimension
• Exemple : tabResult : tableau de 3 x 10 réels
– 1er indice : 0, 1, 2
– 2ème indice : 0, 1, 2, 3, … 8, 9
– tabResult[0,9] est la case désignée par ces indices
– tabResult[0,9] est comme une variable réelle – tabResult[9,1] n'existe pas
Taille d'un tableau
• La taille est le nombre d'éléments du tableau (nombre de cases)
• La taille d'un Tableau est fixe
– la taille d'une variable tableau est fixée lors de sa déclaration.
– Le nombre de cases ne change pas au cours de l'exécution du programme
– On utilise souvent une constante pour définir la taille d'un tableau
Taille d'un tableau à deux dimensions
• La taille totale est le nombre total d'éléments (nombre de cases) du tableau
• on fixe le nombre de cases dans chaque dimension
exemple : tabResult : tableau de 3 x 10 réels – 1ère dimension : taille 3
– 2ème dimension : taille 10
– taille totale : 3 x 10 = 30 cases (30 valeurs)
Constante
• Identifiant associé à une valeur fixe
• Convention : Identifiant en majuscule
• La valeur de la constante est définie une et une seule fois.
• Une constante a un type
Comment définir une constante
NOM_CST : <type> = <valeur> // rôle
T : entier = 12 // taille de tab1 T2 : entier = 200 // taille de tab2
MAX_DEP : entier = 100 // nb max de dépts AVOGADRO : réel = 6.02214076e23 // nb/mol
Déclaration d'une variable de type tableau
• Décrire ces 4 informations :
– nom de la variable
– Entre crochet, la taille pour chaque dimension
• Si une dimension : une taille, si deux dimensions : 2 tailles
– le type des éléments
– décrire le rôle / contenu d'une case
• Exemples
totMensuel[12] : tableau de réels // total des ventes par mois
totauxMensuel[3,12] : tableau de réels
// la case d'indice d,m représente le total des ventes // pour le département d, pour le mois m
Déclaration d'un tableau à 1 Dim.
CONSTANTES
T : entier = 12 // taille de tab1 VARIABLES
tab1[T] : tableau d'entiers // tab1[i] contient … (rôle)
Déclaration d'un tableau à 1 Dim.
CONSTANTES
T : entier = 12 // taille de tab1 VARIABLES
tab1[T] : tableau d'entiers // tab1[i] contient … (rôle)
entre crochet : nb de cases du tableau à une dimension
(constante)
entre crochet : indice d'une case du tableau,
entre 0 et T-1
Déclaration d'un tableau à 2 Dim.
CONSTANTE
NBL : entier = 100 // nb de lignes NBCOL : entier = 12 // nb de colonnes VARIABLES
matA [NBL, NBCOL] : tableau de Reels // rôle de matA matB [NBL, NBCOL] : tableau de Reels // rôle de matB Tab2[3,5] : tableau de booléens // rôle de tab2[i,j]
Utiliser un tableau à une dimension
On utilise un élément du tableau, tab[6], comme une variable simple:
a tab1[6] * 100 // a reçoit 15 * 100 afficher tab1[6] // affiche 15
saisir tab1[6] // la case d'indice 6 reçoit
// la valeur saisie (qui écrase 15) tab1[6] 222 // la case d'indice 6 reçoit 222
123 456 789 159 48 26 15 48 456 147 777 47
0 1 2 3 4 5 6 7 8 9 10 11
Exemple de tableau à deux dimensions
Tab2[2,4] désigne la case d'indices 2,4 Tab2[2,4] est un booléen
Tab2[2,4] vaut Vrai
0 1 2 3 4
0 False True True True False
1 True False True False True
2 True True False True True
Chaque case est repérée
par deux indices
Etapes d'utilisation d'un tableau
1. Déclarer la variable tableau 2. Initialiser le tableau
– préparer le tableau avant traitemt (ex. damier d'un jeu)
– saisie des valeurs (manuelle / fichier) (ex. : total ventes)
3. Traiter / gérer / utiliser le tableau 4. Afficher le tableau
• parfois faire 3 et 4 en boucle (ex. étapes du jeu)
• parfois recommencer 1,2,3 (ex. : nouvelle partie)
(ré) Initialiser une variable de type tableau
• ATTENTION : Déclarer un tableau
n'implique pas que le tableau est initialisé
• On initialise un tableau pour affecter une valeur à chaque case du tableau avant de l'utiliser
• Méthode générale :
– traiter les cases une par une – utiliser des boucles imbriquées
• Parfois, une seule instruction
– Initialise à zéro (ou autre valeur) toutes les cases d'un tableau, – met toutes les valeurs d'un fichier dans un tableau …
(ré) Initialiser une variable de type tableau
• Avec des boucles (imbriquées)
– boucle pour car on connait le nombre de cases – tableau à 1 dimension : 1 boucle pour
– tableau à 2 dimensions : 2 boucles pour imbriquées – tableau à 3 dimensions : 3 boucles pour imbriquées
VARIABLES : tab[T] : tableau de réels
k : entier // indice des cases de tab POUR k de 0 à T-1
initialiser la case k du tableau tab Fin POUR
(ré) Initialiser une variable de type tableau
VARIABLES :
tab : tableau de réels (ou autres) de taille T k : entiers // indices
// initialisation du tableau tab à zéro POUR k de 0 à T-1
tab[k] 0.0 // initialise la case k de tab Fin POUR
(ré) Initialiser une variable de type tableau
VARIABLES :
jeu[8,8] : tableau d' entiers // role … i,j : entiers // indices // initialisation du tableau jeu à -1 partout POUR i de 0 à 7
POUR j de 0 à 7
jeu[i,j] -1 // initialise la case (i,j) du jeu Fin POUR
Fin POUR
Traiter un tableau
• Vous voulez traiter toutes les cases d'un tableau ?
– exemple : tester si la valeur est XXX
– mettre le traitement dans la/les boucles POUR
• Vous voulez traiter une seule case d'un tableau ?
– exemple : déplacer un pion sur un damier – pas de boucle
Parfois, on n'utilise pas toutes les cases
Ex : jeu de 4 à 12 joueurs, compter les points des joueurs
VARIABLES :
tabScores[12] : tableau d'entiers // tabScores[k] contient // le score du joueur k
k : entier // numéro joueur
nbJoueurs : entier // nb de joueurs POUR k de 0 à nbJoueurs -1
tabScores [k] 0 Fin POUR
…
Lorsqu'on n'utilise pas toutes les cases
• Utiliser la variable nb_de_cases_utilisées au lieu de la taille
// afficher le tableau des scores POUR k de 0 à nbJoueurs-1
afficher (nomJoueur[k], " : ", tabScores[k]) FIN POUR
Lorsqu'on n'utilise pas toutes les cases
Autre idée : définir une valeur spéciale signifiant
"case non utilisé"
exemple :
VARIABLES :
tabPts[12] : tableau d'entiers // tabPts[k] contient le nombre // de points du joueur k
// ou -1 si k >= nb de joueurs
Attention : organisation des valeurs en mémoire ≠ affichage
• L'organisation des cases d'un tableau (en mémoire)
est indépendante de leur affichage (à l'écran)
• Le programmeur choisit la façon d'afficher les valeurs d'un tableau
• Dans un tableau à 2 dimensions, on choisit souvent pour l'affichage
– le premier indice comme numéro de ligne
– le second indice comme le numéro de colonne – C'EST UN CHOIX, ON PEUT DECIDER AUTREMENT
Tableau en mémoire ≠ affichage
Exemple : tab1[100] : tableau de réels tab1 peut être affiché
• en ligne
• en colonne (une valeur par ligne)
• sur 10 lignes (1ère ligne : 10 premières valeurs)
• sur 10 colonnes (1ère col. : 10 premières valeurs)
(petite gymnastique algorithmique )
• Comme vous voulez : une valeur sur deux, en commençant par la fin, etc.
Exercices simples
sur les Tableaux
Déclarer une variable de type tableau
1. pour gérer les recettes d'un magasin par mois et par département sur un an
2. pour gérer le score maximum de 10 joueurs maximum pour un jeu donné
3. pour gérer les relevés quotidiens de
pluviométrie (mm de pluie) sur une année en un point donné.
4. pour gérer un jeu de dame
Correction : Déclarer une variable tableau
1. pour gérer les recettes d'un magasin par mois et par département sur un an
CONSTANTES
NB_DEP : entier = 5 // nb de dépaertements VARIABLES
recettes [NB_DEP, 12] : tableau de réels
// recettes[i, m] : total des recettes du département i pendant le mois m+1
Correction : Déclarer une variable tableau
2. pour gérer le score maximum de 10 joueurs maximum pour un jeu donné
CONSTANTES
MAX_JOUEURS : entier = 10 // nb max de joueurs VARIABLES
nbJ : entier // nb de joueurs
score [MAX_JOUEURS] : tableau de entiers
// score[j] : score du joueur j (-1 si pas joueur)
Correction : Déclarer une variable tableau
3. pour gérer les relevés quotidiens de
pluviométrie (mm de pluie) sur une année en un point donné
CONSTANTES
NBJ : entier = 365 // nb de jours par an
// attention si an bissextile VARIABLES
pluie [NBJ] : tableau de réels
// pluie [j] : nb de mm de pluie relevé le jour j
Correction : Déclarer une variable tableau
4. pour gérer un jeu de dame 10 x 10 cases, N&B alternées 20 pions blancs + 20 noirs
Etats possibles d'une case ?
Correction : Déclarer une variable tableau
4. pour gérer un jeu de dame 10 x 10 cases, N&B alternées 20 pions blancs + 20 noirs
Etats possibles d'une case ?
• case vide
• case avec un pion blanc
• case avec un pion noir
Correction : Déclarer une variable tableau
4. pour gérer un jeu de dame 10 x 10 cases, N&B alternées 20 pions blancs + 20 noirs
Est-ce important de savoir si le fond de la case est N ou B ?
et si oui, comment le savoir ?
case d'indices (i,j) : blanc si i+j est pair noir sinon
Correction : Déclarer une variable tableau
4. pour gérer un jeu de dame 10 x 10 cases, N&B alternées 20 pions blancs + 20 noirs
VARIABLES
jeuDame [10, 10] : tableau d'entiers
// jeuDame [i, j] vaut : 0 si case (i,j) vide // 1 si case avec pion noir // 2 si case avec pion blanc
Exercices rapides sur 1 tableau 1D
VARIABLE
score : tableau d'entier de taille MAX_J
• Initialisez le tableau score à 0 pour les joueurs numéro 0 à nbJ-1 et -1 pour les autres cases
• Echanger les scores des joueurs a et b
Initialisation d'un tableau 1D
VARIABLE
score [MAX_J ]: tableau d'entier nbJ : entier // nb de joueurs
// Initialise les score à 0 pour les nbJ joueurs et -1 après POUR i de 0 à nbJ-1
score[i] O FIN POUR
POUR i de nbJ à MAX_J score[i] -1
FIN POUR
POUR i de nbJ à MAX_J SI i < nbJ
score[i] O SINON
score[i] -1 FINSI
FIN POUR
ou bien
Utilisation d'un tableau 1D
VARIABLE
Score[MAX_J] : tableau d'entiers nbJ : entier // nb de joueurs
a, b : entiers // deux numéros de joueurs temp : entier // temporaire
…
// Echange les scores des joueurs a et b temp score[a]
score[a] score[b]
score[b] temps
Exercices rapides sur 1 tableau 2D
VARIABLE
recettes : tableau 2D de réels de taille (NB_DEP, 12)
• Initialisez le tableau recettes à 0.0 partout
• Afficher les recettes du département dc pour les 12 mois comme suit :
recettes département XXX : mois 1 : XXX
mois 2 : XXX
…
Initialisation d'un tableau 2D
VARIABLE
Recettes[NB_DEP, 12] : tableau 2D de réels // Initialise le tableau recettes à 0.0
POUR d de 0 à NB_DEP - 1 POUR m de 0 à 11
recettes [d, m] 0.0 FIN POUR
FIN POUR
Utilisation d'un tableau
VARIABLE
Recettes[NB_DEP, 12] : tableau 2D de réels
dc : entier // numéro d'un département
…
// Affiche les recettes du département dc POUR m de 0 à 11
afficher ("mois ", m+1 : recettes [dc, m]) FIN POUR
Utilisation d'un tableau
PROCEDURE principale () VARIABLE
Recettes[MAXD, 12] : tableau 2D de réels nbDep : entier // nb de départements DEBUT
initialise (recettes, NBD, 12, nomFichier) // initialise le tableau // à partir des valeurs du fichier affiche(recettes, NB_DEP, 12)
analyse (recettes, NB_DEP, 12) // affiche l'analyse des recettes FIN PROCEDURE
Utilisation d'un tableau
PROCEDURE principale () VARIABLE
Recettes[MAXD, 12] : tableau 2D de réels nbDep : entier // nb de départements DEBUT
initialise (recettes, NBD, 12, nomFichier) // initialise le tableau // à partir des valeurs du fichier affiche(recettes, NB_DEP, 12)
analyse (recettes, NB_DEP, 12) // affiche l'analyse des recettes FIN PROCEDURE
la variable tableau est une variable locale de
la procédure principale
Utilisation d'un tableau
PROCEDURE principale () VARIABLE
recettes[MAXD, 12] : tableau 2D de réels nbDep : entier // nb de départements DEBUT
initialise (recettes, NBD, 12, nomFichier) // initialise le tableau // à partir des valeurs du fichier affiche (recettes, NB_DEP, 12)
analyse (recettes, NB_DEP, 12) // affiche l'analyse des recettes FIN PROCEDURE
chaque SP qui utilise le tableau prend la variable
en paramètre
Rappel
• Une variable utilisée dans un SP ne peut être
QUE :
Rappel
• Une variable utilisée dans un SP ne peut être
QUE :
– une variable locale au SP ou
– un paramètre du SP
Rappel
• Une variable utilisée dans un SP ne peut être
QUE :
– une variable locale au SP ou
– un paramètre du SP
c'est vrai aussi pour les varaibles tableaux
Corrigez cet algorithme
VARIABLE
TT[1000] : tableau d'entiers cherche : entier
// affiche si 777 est dans le tableau TT cherche ← 777
pour i de 0 à 999
si i =? cherche alors afficher "trouvé !"
FinSi Fin pour
Correction
Variable TT[1000] : tableau d' entiers
cherche ← 777 (tester si 777 est dans le tableau)
pour i de 0 à 999
si i = cherche alors afficher "trouvé !"
Fin si
Fin pour ne pas confondre l' indice et la valeur
Corrigez cet algorithme
Initialiser la diagonale d'un
tableau carré à 1 (et 0 ailleurs)
Variable TT[100] : tableau d'entiers TT ← 0
pour i de 0 à 9 T[i,i] ← 1 Fin pour
Correction
Algo : Initialise la diagonale d'un tableau carré Variable TT : tableau de 100 entiers
TT ← 0
pour i de 0 à 9 T[i,i] = 1
il faut donner la taille dans chaque dimension,
par exemple 10 * 10 entiers.
TT n'est pas un entier
>>> il faut initialiser case par case