Accueil › Cours › Les enregistrements
Enregistrements en algo et Python (dictionnaires) : cours
Regroupe plusieurs informations d'un même objet (un élève, un produit) dans une seule variable, puis dans un tableau.
Les leçons de ce chapitre
- Un enregistrement et ses champs
- Un tableau d'enregistrements
- Trier des enregistrements
Leçon 18.1 : Un enregistrement et ses champs
Un enregistrement regroupe des informations de types différents qui décrivent un même objet. Un élève a un nom (chaîne), une classe (chaîne) et une moyenne (réel). Chaque information est un champ.
On déclare d'abord le type dans le TDNT (tableau de déclaration des nouveaux types), puis la variable dans le TDO :
- TDNT :
Eleve = Enregistrement, puis une ligne par champ (nom : Chaîne,moy : Réel), puisFin. - TDO :
e | Eleve. - On accède à un champ avec un point :
e.nom ← "Sami",Lire(e.moy).
En Python, un enregistrement s'écrit avec un dictionnaire : e = {"nom": "", "moy": 0.0}, et on écrit e["nom"] à la place de e.nom.
Astuce : Tu verras aussi la forme e = dict(nom=str(), moy=float()) : c'est le même dictionnaire, écrit autrement.
En Python
On lit le nom et la moyenne d'un élève, puis on affiche une phrase.
e = {"nom": "", "moy": 0.0}
e["nom"] = input()
e["moy"] = float(input())
if e["moy"] >= 10:
print(e["nom"], "est admis avec", e["moy"])
else:
print(e["nom"], "doit rattraper")
En algorithme
Le type Eleve est déclaré dans le TDNT, la variable e dans le TDO.
Algorithme UnEleve
Début
Lire(e.nom)
Lire(e.moy)
Si e.moy ≥ 10 Alors
Ecrire(e.nom, " est admis avec ", e.moy)
Sinon
Ecrire(e.nom, " doit rattraper")
FinSi
Fin
TDNT
Eleve = Enregistrement
nom : Chaîne
moy : Réel
Fin
TDO
Objet | Type/Nature
e | Eleve
Leçon 18.2 : Un tableau d'enregistrements
Pour une classe entière, on range les élèves dans un tableau d'enregistrements : chaque case est un élève complet. T[i].nom est le nom de l'élève de la case i.
- TDNT :
Eleve = Enregistrement … Fin, puisTab = Tableau de 30 Eleve. - TDO :
T | Tab. - Python :
T = [{"nom": "", "moy": 0.0} for i in range(n)], puisT[i]["nom"].
Attention : Comme pour les matrices, n'écris pas [{…}] * n : toutes les cases seraient le même dictionnaire. La forme for i in range(n) en crée un nouveau pour chaque case.
En Python
On lit 3 élèves et on cherche celui qui a la meilleure moyenne.
n = 3
T = [{"nom": "", "moy": 0.0} for i in range(n)]
for i in range(n):
T[i]["nom"] = input()
T[i]["moy"] = float(input())
pm = 0
for i in range(1, n):
if T[i]["moy"] > T[pm]["moy"]:
pm = i
print("Major :", T[pm]["nom"], T[pm]["moy"])
En algorithme
pm retient la position du meilleur élève.
Algorithme Major
Début
n ← 3
Pour i de 1 à n Faire
Lire(T[i].nom)
Lire(T[i].moy)
FinPour
pm ← 1
Pour i de 2 à n Faire
Si T[i].moy > T[pm].moy Alors
pm ← i
FinSi
FinPour
Ecrire("Major : ", T[pm].nom, " ", T[pm].moy)
Fin
TDNT
Eleve = Enregistrement
nom : Chaîne
moy : Réel
Fin
Tab = Tableau de 30 Eleve
TDO
Objet | Type/Nature
T | Tab
n, i, pm | Entier
Leçon 18.3 : Trier des enregistrements
Pour faire un classement, on trie le tableau d'enregistrements selon un champ (la moyenne, le nom…). Les tris du chapitre précédent marchent tels quels : on compare le champ choisi, et on permute les enregistrements entiers.
Attention : Si tu permutes seulement le champ moy, les moyennes changent de propriétaire ! Permute toujours l'élève complet : aux ← T[i], T[i] ← T[pmax], T[pmax] ← aux.
Astuce : En Python, échanger deux cases d'une liste échange les dictionnaires eux-mêmes : c'est exactement ce qu'on veut.
En Python
Classement décroissant par moyenne, avec le tri par sélection.
n = 3
T = [{"nom": "", "moy": 0.0} for i in range(n)]
for i in range(n):
T[i]["nom"] = input()
T[i]["moy"] = float(input())
for i in range(n - 1):
pmax = i
for j in range(i + 1, n):
if T[j]["moy"] > T[pmax]["moy"]:
pmax = j
if pmax != i:
aux = T[i]
T[i] = T[pmax]
T[pmax] = aux
for i in range(n):
print(i + 1, T[i]["nom"], T[i]["moy"])
En algorithme
aux est un enregistrement Eleve, déclaré dans le TDO.
Algorithme Classement
Début
n ← 3
Pour i de 1 à n Faire
Lire(T[i].nom)
Lire(T[i].moy)
FinPour
Pour i de 1 à n - 1 Faire
pmax ← i
Pour j de i + 1 à n Faire
Si T[j].moy > T[pmax].moy Alors
pmax ← j
FinSi
FinPour
Si pmax ≠ i Alors
aux ← T[i]
T[i] ← T[pmax]
T[pmax] ← aux
FinSi
FinPour
Pour i de 1 à n Faire
Ecrire(i, " ", T[i].nom, " ", T[i].moy)
FinPour
Fin
TDNT
Eleve = Enregistrement
nom : Chaîne
moy : Réel
Fin
Tab = Tableau de 30 Eleve
TDO
Objet | Type/Nature
T | Tab
aux | Eleve
n, i, j, pmax | Entier
S'entraîner gratuitement
Chaque leçon a 3 exercices gratuits avec indices pour appliquer ce chapitre avec Hannibot.
← Chapitre précédent : Les matrices · Chapitre suivant : Interfaces graphiques avec Qt →
Tous les chapitres · Voir les devoirs corrigés de 2ème TI
Cours écrit pour Mission Carthage d'après le programme officiel. Ton professeur reste la référence.