Gérer une liste de fiches
Comment garder le prénom et la note de chaque élève d'une classe ? Une technique simple : deux tableaux qui avancent ensemble. On les appelle des tableaux parallèles.
Le principe
La case i de chaque tableau concerne le même élève :
prenoms est un tableau vaut ['Léa', 'Tom', 'Inès', 'Sam']
notes est un tableau vaut [15, 9, 18, 12]
pour i de 0 à longueur(prenoms) - 1
affiche prenoms[i] + ' : ' + notes[i] + '/20'
fin pour
prenoms[2] et notes[2] vont ensemble : Inès a 18. Un même index relie les deux tableaux.
Chercher la fiche d'un élève
On cherche dans un tableau, et on lit la réponse dans l'autre :
prenoms est un tableau vaut ['Léa', 'Tom', 'Inès', 'Sam']
notes est un tableau vaut [15, 9, 18, 12]
cherche est un texte
demande 'Quel élève ? ' dans cherche
place est un nombre vaut index_de(prenoms, cherche)
si place >= 0 alors
affiche cherche + ' a obtenu ' + notes[place] + '/20.'
sinon
affiche 'Aucun élève ne s’appelle ' + cherche + '.'
fin si
Le meilleur élève
On cherche l'index de la meilleure note, pour retrouver ensuite le prénom :
prenoms est un tableau vaut ['Léa', 'Tom', 'Inès', 'Sam']
notes est un tableau vaut [15, 9, 18, 12]
meilleur est un nombre vaut 0
pour i de 1 à longueur(notes) - 1
si notes[i] > notes[meilleur] alors
meilleur vaut i
fin si
fin pour
affiche 'Meilleure note : ' + prenoms[meilleur] + ' avec ' + notes[meilleur] + '/20'
Question : Pourquoi mémorise-t-on l'index du meilleur, et pas seulement sa note ? — Parce que l'index permet de retrouver aussi le prénom. Avec la note seule, on ne saurait plus à qui elle appartient. L'index donne accès aux deux tableaux.
Ajouter et supprimer
La règle d'or : toute modification se fait dans les deux tableaux, sinon ils se décalent.
prenoms est un tableau vaut ['Léa', 'Tom', 'Inès', 'Sam']
notes est un tableau vaut [15, 9, 18, 12]
// un nouvel élève
prenoms ajoute 'Zoé'
notes ajoute 14
// Tom quitte la classe
place est un nombre vaut index_de(prenoms, 'Tom')
si place >= 0 alors
prenoms supprime place
notes supprime place
fin si
pour i de 0 à longueur(prenoms) - 1
affiche prenoms[i] + ' : ' + notes[i]
fin pour
Si tu supprimes dans un seul tableau, toutes les fiches suivantes sont fausses : chaque prénom se retrouve avec la note du voisin.
Trier les fiches
trier(notes) ne déplacerait que les notes. Il faut donc trier « à la main », en échangeant dans les deux tableaux à la fois :
prenoms est un tableau vaut ['Léa', 'Tom', 'Inès', 'Sam']
notes est un tableau vaut [15, 9, 18, 12]
tamponNote est un nombre
tamponPrenom est un texte
pour i de 0 à longueur(notes) - 2
pour j de i + 1 à longueur(notes) - 1
si notes[j] > notes[i] alors
tamponNote vaut notes[i]
notes[i] vaut notes[j]
notes[j] vaut tamponNote
tamponPrenom vaut prenoms[i]
prenoms[i] vaut prenoms[j]
prenoms[j] vaut tamponPrenom
fin si
fin pour
fin pour
affiche 'Classement :'
pour i de 0 à longueur(prenoms) - 1
affiche (i + 1) + '. ' + prenoms[i] + ' (' + notes[i] + ')'
fin pour
Le classement affiche Inès, Léa, Sam, puis Tom.
En résumé
- Deux tableaux parallèles : la case
i de chacun décrit le même élément. - On cherche un index dans l'un pour lire dans l'autre.
- Ajouter, supprimer, échanger : toujours dans tous les tableaux à la fois.
- Pour une seule information par nom, un dictionnaire est plus simple ; pour plusieurs, les tableaux parallèles font très bien l'affaire.