Mission Carthage

Accueil › Cours › Les enregistrements

Enregistrements en algo et Python (dictionnaires) : cours

Chapitre 18 · 3ème SI, Bac SI

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

  1. Un enregistrement et ses champs
  2. Un tableau d'enregistrements
  3. Trier des enregistrements

Leçon 18.1 : Un enregistrement et ses champs

10 min

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 :

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

11 min

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.

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

11 min

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.

Ouvrir le chapitre dans Mission Carthage Essayer dans le compilateur en ligne

← 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.