Les tableaux à deux dimensions
Un échiquier, une bataille navale, un tableau de notes par élève et par matière... Toutes ces données ont deux dimensions : des lignes et des colonnes. En CoddyRun, on les représente par un tableau dont chaque case contient... un autre tableau.
Deux index au lieu d'un
On accède à une case avec deux index entre crochets : d'abord la ligne, puis la colonne.
plateau est un tableau
plateau[0][0] vaut 'A'
plateau[0][1] vaut 'B'
plateau[1][0] vaut 'C'
plateau[1][1] vaut 'D'
affiche plateau[0][1] // B
affiche plateau[1][0] // C
plateau[1][0] se lit : ligne 1, colonne 0. Comme toujours avec les tableaux, on compte à partir de 0.
Remplir avec deux boucles imbriquées
Pour parcourir toutes les cases, on place une boucle dans une autre : la première parcourt les lignes, la seconde les colonnes.
// Un plateau de morpion vide : 3 lignes, 3 colonnes
plateau est un tableau
pour i de 0 à 2
pour j de 0 à 2
plateau[i][j] vaut '.'
fin pour
fin pour
plateau[1][1] vaut 'X'
plateau[0][2] vaut 'O'
Pour chaque valeur de i, la boucle sur j s'exécute en entier : au total, 3 × 3 = 9 cases sont remplies.
Question : Avec pour i de 0 à 3 et, à l'intérieur, pour j de 0 à 4, combien de cases sont parcourues ? — 20. i prend 4 valeurs (0 à 3) et j en prend 5 (0 à 4) : 4 × 5 = 20 cases.
Afficher la grille
affiche écrit une ligne à la fois. On construit donc chaque rangée dans un texte, case après case, puis on l'affiche :
plateau est un tableau
pour i de 0 à 2
pour j de 0 à 2
plateau[i][j] vaut '.'
fin pour
fin pour
plateau[1][1] vaut 'X'
plateau[0][2] vaut 'O'
rangee est un texte
pour i de 0 à 2
rangee vaut ''
pour j de 0 à 2
rangee ajoute plateau[i][j] + ' '
fin pour
affiche rangee
fin pour
La console montre le plateau, avec le X au centre et le O en haut à droite. Remarque le rangee vaut '' : on vide le texte au début de chaque ligne.
Une table de multiplication
Les deux index peuvent aussi servir à calculer le contenu des cases :
produits est un tableau
pour i de 0 à 5
pour j de 0 à 5
produits[i][j] vaut i * j
fin pour
fin pour
affiche '4 x 3 = ' + produits[4][3]
rangee est un texte
pour i de 1 à 5
rangee vaut ''
pour j de 1 à 5
rangee ajoute produits[i][j] + ' '
fin pour
affiche rangee
fin pour
On remplit la grille à partir de l'index 0, puis on n'affiche que les lignes et les colonnes de 1 à 5.
Compter dans une grille
Combien de cases du plateau sont encore libres ? On retrouve le compteur, avec deux boucles :
plateau est un tableau
pour i de 0 à 2
pour j de 0 à 2
plateau[i][j] vaut '.'
fin pour
fin pour
plateau[1][1] vaut 'X'
plateau[0][2] vaut 'O'
libres est un nombre vaut 0
pour i de 0 à 2
pour j de 0 à 2
si plateau[i][j] = '.' alors
libres ajoute 1
fin si
fin pour
fin pour
affiche 'Cases libres : ' + libres // 7
Par habitude, on appelle i l'index des lignes et j celui des colonnes. Garde toujours le même ordre : plateau[ligne][colonne].
En résumé
- Un tableau à deux dimensions se lit avec deux index :
plateau[ligne][colonne]. - Deux boucles imbriquées parcourent toutes les cases.
- Pour afficher une grille, on construit le texte de chaque rangée avant de l'afficher.
- Compter, chercher, calculer : les techniques des tableaux marchent aussi, avec une boucle de plus.