• Aucun résultat trouvé

Tableaux et listes 2020

N/A
N/A
Protected

Academic year: 2022

Partager "Tableaux et listes 2020"

Copied!
58
0
0

Texte intégral

(1)

Tableaux et listes

2020

(2)

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)

(3)

Types simples

Une variable d'un type simple contient une valeur

unEntier  123

unReel  1.235e12 unBooleen  Vrai unCaractere  'N' unComplexe  2+3j

(4)

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

(5)

Les tableaux

Définition et exemples taille d'un tableau indices d'une case

déclaration, initialisation, utilisation tableaux passés en paramètres

(6)

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)

(7)

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

(8)

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

(9)

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

(10)

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

(11)

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,

(12)

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

(13)

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

(14)

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)

(15)

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

(16)

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

(17)

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

(18)

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)

(19)

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

(20)

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]

(21)

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

(22)

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

(23)

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)

(24)

(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 …

(25)

(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

(26)

(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

(27)

(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

(28)

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

(29)

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

(30)

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

(31)

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

(32)

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

(33)

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.

(34)

Exercices simples

sur les Tableaux

(35)

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

(36)

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

(37)

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)

(38)

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

(39)

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 ?

(40)

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

(41)

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

(42)

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

(43)

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

(44)

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

(45)

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

(46)

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

(47)

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

(48)

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

(49)

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

(50)

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

(51)

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

(52)

Rappel

• Une variable utilisée dans un SP ne peut être

QUE :

(53)

Rappel

• Une variable utilisée dans un SP ne peut être

QUE :

– une variable locale au SP ou

– un paramètre du SP

(54)

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

(55)

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

(56)

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

(57)

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

(58)

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

Références

Documents relatifs

Le soin et la rédaction seront pris en compte dans la notation.. Faites des phrases claires

Chaque case contient un nombre qui est la somme des deux nombres des cases sur lesquelles elle repose..

Pour repérer un point dans le plan, on trace deux droites (axes) sécants en O, origine du repère.. Sur un axe, on place un point I qui permet de définir un repère sur

De même, sur l’autre axe, on choisit un point J qui définit un repère sur cet axe.. (O ; I ; J ) définit alors un repère

• Calculer la distance entre deux points de coordonnées fixées dans un repère orthonormal du plan. • Calcul des coordonnées du milieu

Dans un repère

- les périmètres des huit triangles sont identiques. Les triangles ainsi obtenus sont appelés magiques. Trouver trois tableaux 3 x 3 distincts de sorte que l’aire de l’un au moins

fait toujours un mouvement circulaire, mais avec une vitesse dont la grandeur varie. Pour parvenir à étudier ce phénomène, on sépare l’accélération en deux composantes. La