Leçon 15 sur 20

Chapitre 15 — Enregistrements et structures

Regrouper et traiter des données hétérogènes de manière cohérente

 

Fiche pédagogique du chapitre

Objectifs d’apprentissage

À la fin de ce chapitre, l’étudiant devra être capable de :

  • expliquer l’intérêt de regrouper des informations de types différents ;
  • définir un type structuré adapté à un problème ;
  • identifier les champs, leurs types et leurs rôles ;
  • déclarer, initialiser et modifier une variable de type enregistrement ;
  • accéder correctement à un champ à l’aide de la notation pointée ;
  • concevoir et parcourir un tableau d’enregistrements ;
  • ajouter, modifier et supprimer un élément d’une collection structurée ;
  • effectuer une recherche selon un ou plusieurs champs ;
  • trier des enregistrements en préservant la cohérence des données ;
  • produire un affichage formaté et lisible ;
  • décomposer une application en fonctions et procédures ;
  • concevoir une gestion simplifiée d’étudiants avec calcul de moyenne et décision.

Prérequis

  • maîtriser les variables, constantes et types simples ;
  • savoir utiliser les conditions, les boucles et les fonctions ;
  • savoir déclarer et parcourir un tableau à une dimension ;
  • connaître les algorithmes de recherche et de tri ;
  • comprendre le passage de paramètres et la portée des variables.

Plan du chapitre

15.1 Définition des enregistrements et des structures

15.2 Tableaux d’enregistrements

15.3 Traitements sur les données structurées

Projet d’application : gestion simplifiée d’étudiants

Travaux dirigés, corrigés, synthèse et auto-évaluation

Organisation pédagogique indicative

Activité

Durée indicative

Objectif principal

Cours4 hComprendre les types structurés et les tableaux d’enregistrements.
Travaux dirigés4 hDéclarer des structures et concevoir les traitements classiques.
Travaux pratiques5 hDévelopper une application modulaire de gestion d’étudiants.
Travail personnel2 hPréparer les jeux d’essai et améliorer l’affichage.
Idée centrale : un enregistrement réunit, sous un même nom, plusieurs informations liées à un même objet, même lorsque ces informations n’ont pas le même type.

Introduction aux données structurées

Les types simples permettent de représenter une seule valeur : un entier, un réel, un booléen, un caractère ou une chaîne. Cependant, la plupart des objets réels sont décrits par plusieurs informations. Un étudiant possède un nom, un numéro d’inscription, plusieurs notes et une décision. Un produit possède une référence, une désignation, un prix et une quantité en stock.

Stocker chaque information dans un tableau séparé est possible, mais cette solution devient rapidement fragile. Les indices doivent rester parfaitement synchronisés. Une insertion ou un tri mal réalisé peut associer le nom d’un étudiant aux notes d’un autre. Les enregistrements évitent ce problème en regroupant les informations qui appartiennent au même objet.

Objet

Informations associées

Types possibles

ÉtudiantNom, prénom, numéro, notes, moyenneChaînes, entier, tableau, réel
ProduitRéférence, désignation, prix, quantitéChaînes, réel, entier
LivreISBN, titre, auteur, année, disponibilitéChaînes, entier, booléen
CapteurIdentifiant, type, valeur, unité, étatChaînes, réel, booléen
Vocabulaire : les termes enregistrement, structure, record et type structuré désignent des notions très proches. Le vocabulaire exact dépend du langage de programmation utilisé.

15.1 Définition

15.1.1 Regroupement de données de types différents

Un enregistrement est une structure de données composée de plusieurs éléments appelés champs. Contrairement à un tableau, dont tous les éléments ont généralement le même type, les champs d’un enregistrement peuvent être de types différents.

Chaque enregistrement représente une occurrence complète d’un objet. Par exemple, une variable etudiant peut contenir simultanément le nom « Amine », le numéro 2026015, une moyenne de 14,75 et une décision d’admission vraie.

Caractéristique

Tableau

Enregistrement

Nature des élémentsValeurs généralement de même typeChamps éventuellement de types différents
AccèsPar un indice : T[i]Par un nom de champ : E.nom
Usage principalCollection homogèneDescription complète d’un objet
ExempleListe de notesFiche d’un étudiant

15.1.2 Notion de champ

Un champ est une composante nommée de l’enregistrement. Il possède un nom, un type et une valeur. Le nom du champ doit être explicite afin de refléter l’information représentée.

Champ

Type

Exemple de valeur

Rôle

nomChaîne"El Amrani"Nom de famille
prenomChaîne"Salma"Prénom
numeroEntier ou chaîne2026015Identifiant unique
moyenneRéel14,75Résultat calculé
admisBooléenVraiDécision finale
Bonne pratique : choisir des noms de champs courts mais explicites, par exemple prixUnitaire plutôt que p, et dateNaissance plutôt que date lorsque plusieurs dates existent.

15.1.3 Accès aux champs

L’accès à un champ s’effectue généralement à l’aide du nom de la variable suivi d’un point et du nom du champ. Cette notation permet de lire ou de modifier une information précise sans affecter les autres champs.

Exemples d’accès aux champs

E.nom ← "El Amrani"
E.prenom ← "Salma"
E.numero ← 2026015
E.moyenne ← 14.75
E.admis ← Vrai

Écrire(E.nom)
E.moyenne ← E.moyenne + 0.5

 

Dans ces instructions, E représente l’enregistrement complet. E.nom et E.moyenne représentent deux champs particuliers. Modifier E.moyenne ne change ni le nom ni le numéro de l’étudiant.

15.1.4 Déclaration d’un type structuré

Avant de déclarer des variables structurées, il faut définir le modèle commun. Ce modèle précise le nom du type et la liste de ses champs. Toutes les variables créées à partir de ce type possèdent la même organisation.

Déclaration du type Etudiant

Type Etudiant = Enregistrement
    nom : Chaîne
    prenom : Chaîne
    numero : Entier
    notes : Tableau[0..3] de Réel
    moyenne : Réel
    decision : Chaîne
FinEnregistrement

 

Une fois le type défini, plusieurs variables peuvent être déclarées :

Variables
    etudiant1, etudiant2 : Etudiant

 

Distinction importante : le type Etudiant décrit la forme générale d’une fiche ; etudiant1 est une variable concrète contenant les valeurs d’un étudiant particulier.

15.1.5 Initialisation d’un enregistrement

L’initialisation consiste à attribuer une valeur cohérente à chaque champ avant son utilisation. Les champs calculés peuvent être initialisés à zéro ou à une valeur neutre, puis mis à jour après la saisie.

Initialisation champ par champ

etudiant1.nom ← ""
etudiant1.prenom ← ""
etudiant1.numero ← 0
Pour i allant de 0 à 3 Faire
    etudiant1.notes[i] ← 0
FinPour
etudiant1.moyenne ← 0
etudiant1.decision ← "Non calculée"

 

15.1.6 Enregistrements imbriqués

Un champ peut lui-même être un enregistrement. Cette composition permet de construire des modèles riches tout en conservant une organisation claire. Par exemple, une adresse peut être définie comme un type séparé puis intégrée dans le type Etudiant.

Exemple de composition

Type Adresse = Enregistrement
    rue : Chaîne
    ville : Chaîne
    codePostal : Chaîne
FinEnregistrement

Type Etudiant = Enregistrement
    nom : Chaîne
    prenom : Chaîne
    adresse : Adresse
FinEnregistrement

E.adresse.ville ← "Tétouan"

 

Conseil de conception : créer un sous-type lorsque plusieurs champs forment un ensemble cohérent, réutilisable ou suffisamment complexe pour mériter un nom propre.

15.1.7 Affectation et comparaison

Dans de nombreux langages, une affectation entre deux variables du même type recopie tous les champs. La comparaison globale n’a pas toujours de sens : il faut généralement comparer une clé pertinente, comme le numéro, la référence ou l’ISBN.

Comparaison selon une clé

Si E1.numero = E2.numero Alors
    Écrire("Même étudiant")
FinSi

 

15.2 Tableaux d’enregistrements

15.2.1 Principe général

Un tableau d’enregistrements permet de gérer une collection d’objets structurés. Chaque case contient un enregistrement complet. L’indice désigne un objet, tandis que le nom du champ désigne une information de cet objet.

Déclaration d’une liste d’étudiants

Constante
    CAPACITE ← 100
Variables
    classe : Tableau[0..CAPACITE - 1] de Etudiant
    nbEtudiants : Entier

 

La variable nbEtudiants indique le nombre de cases réellement utilisées. Les indices valides des étudiants présents vont de 0 à nbEtudiants - 1.

Expression

Signification

classe[i]Enregistrement complet de l’étudiant i
classe[i].nomNom de l’étudiant i
classe[i].notes[j]Note j de l’étudiant i
classe[i].moyenneMoyenne de l’étudiant i
classe[0].numeroNuméro du premier étudiant

15.2.2 Saisie et affichage

Saisie de plusieurs étudiants

Pour i allant de 0 à nbEtudiants - 1 Faire
    Lire(classe[i].nom)
    Lire(classe[i].prenom)
    Lire(classe[i].numero)
    Pour j allant de 0 à 3 Faire
        Lire(classe[i].notes[j])
    FinPour
FinPour

 

Affichage simple

Pour i allant de 0 à nbEtudiants - 1 Faire
    Écrire(classe[i].numero, " - ", classe[i].nom, " ",
           classe[i].prenom, " - Moyenne : ", classe[i].moyenne)
FinPour

 

15.2.3 Liste d’étudiants

Les champs calculés, tels que la moyenne et la décision, doivent être mis à jour dès qu’une note est modifiée.

Numéro

Nom

Prénom

Notes

Moyenne

Décision

202601AlaouiImane[14, 12, 16, 15]14,25Admis
202602BennaniOmar[8, 10, 9, 11]9,50Ajourné
202603ChafikSara[17, 15, 18, 16]16,50Admis

15.2.4 Liste de produits

Type Produit

Type Produit = Enregistrement
    reference : Chaîne
    designation : Chaîne
    prix : Réel
    quantite : Entier
    disponible : Booléen
FinEnregistrement

 

Les traitements possibles incluent la recherche par référence, le calcul de la valeur du stock, le classement par prix et l’identification des produits en rupture.

15.2.5 Liste de livres

Type Livre

Type Livre = Enregistrement
    isbn : Chaîne
    titre : Chaîne
    auteur : Chaîne
    annee : Entier
    disponible : Booléen
FinEnregistrement

 

Une bibliothèque peut rechercher un livre par ISBN, afficher les ouvrages d’un auteur, classer les livres par titre ou filtrer ceux qui sont disponibles.

15.2.6 Liste de capteurs

Type Capteur

Type Capteur = Enregistrement
    identifiant : Chaîne
    typeMesure : Chaîne
    valeur : Réel
    unite : Chaîne
    actif : Booléen
FinEnregistrement

 

Identifiant

Type de mesure

Valeur

Unité

Actif

T01Température24,6°CVrai
H01Humidité58%Vrai
P03Pression1012hPaFaux

15.2.7 Tableaux parallèles ou tableau d’enregistrements ?

Critère

Tableaux parallèles

Tableau d’enregistrements

LisibilitéFaible lorsque les attributs se multiplientÉlevée : les champs sont regroupés
TriTous les tableaux doivent être échangés ensembleUn enregistrement complet est échangé
Ajout d’un attributNouveau tableau à synchroniserNouveau champ dans le type
Risque d’incohérenceÉlevéRéduit
Passage en paramètrePlusieurs tableauxUne seule collection structurée
À retenir : lorsque plusieurs informations décrivent le même objet et doivent toujours rester associées, le tableau d’enregistrements est généralement la solution la plus sûre.

15.3 Traitements

15.3.1 Ajout

Dans un tableau de capacité fixe, l’ajout s’effectue à l’indice nbElements. Il faut vérifier la capacité, valider les données et contrôler l’unicité de la clé.

Ajout en fin de tableau

Si nbEtudiants = capacite Alors
    Écrire("Liste pleine")
Sinon
    SaisirEtudiant(nouveau)
    Si RechercherParNumero(classe, nbEtudiants, nouveau.numero) ≠ -1 Alors
        Écrire("Numéro déjà utilisé")
    Sinon
        classe[nbEtudiants] ← nouveau
        nbEtudiants ← nbEtudiants + 1
    FinSi
FinSi

 

Précondition : nbEtudiants doit toujours représenter le nombre réel d’éléments présents.

15.3.2 Modification

La modification commence par une recherche. Après une modification des notes, la moyenne et la décision doivent être recalculées.

Modification des notes

position ← RechercherParNumero(classe, nbEtudiants, numeroCherche)
Si position = -1 Alors
    Écrire("Étudiant introuvable")
Sinon
    Pour j allant de 0 à 3 Faire
        Lire(classe[position].notes[j])
    FinPour
    classe[position].moyenne ← CalculerMoyenne(classe[position].notes, 4)
    classe[position].decision ← DeterminerDecision(classe[position].moyenne)
FinSi

 

15.3.3 Suppression

La suppression d’un élément dans un tableau contigu nécessite un décalage vers la gauche des enregistrements suivants.

Suppression

Si position ≠ -1 Alors
    Pour i allant de position à nbEtudiants - 2 Faire
        classe[i] ← classe[i + 1]
    FinPour
    nbEtudiants ← nbEtudiants - 1
Sinon
    Écrire("Étudiant introuvable")
FinSi

 

Avant

Décalage

Après

[E0, E1, E2, E3]E2 → case 1 ; E3 → case 2[E0, E2, E3]

15.3.4 Recherche

Une recherche exacte retourne généralement l’indice de l’enregistrement trouvé ou -1 en cas d’échec.

Recherche séquentielle par numéro

Fonction RechercherParNumero(classe, n, numeroCherche) : Entier
Variables
    i : Entier
Début
    i ← 0
    TantQue i < n ET classe[i].numero ≠ numeroCherche Faire
        i ← i + 1
    FinTantQue
    Si i < n Alors
        Retourner i
    Sinon
        Retourner -1
    FinSi
Fin

 

Recherche de toutes les occurrences d’un nom

trouve ← Faux
Pour i allant de 0 à n - 1 Faire
    Si Minuscule(classe[i].nom) = Minuscule(nomCherche) Alors
        AfficherEtudiant(classe[i])
        trouve ← Vrai
    FinSi
FinPour

 

15.3.5 Tri selon un champ

Le tri utilise un champ comme clé, mais l’échange doit porter sur l’enregistrement complet.

Tri par moyenne décroissante

Pour i allant de 0 à n - 2 Faire
    indiceMax ← i
    Pour j allant de i + 1 à n - 1 Faire
        Si classe[j].moyenne > classe[indiceMax].moyenne Alors
            indiceMax ← j
        FinSi
    FinPour
    temp ← classe[i]
    classe[i] ← classe[indiceMax]
    classe[indiceMax] ← temp
FinPour

 

Erreur classique : échanger uniquement les moyennes détruit les associations. Il faut échanger l’enregistrement complet.

15.3.6 Tri multicritère

Moyenne décroissante puis nom croissant

Si classe[j].moyenne > classe[indice].moyenne
   OU (classe[j].moyenne = classe[indice].moyenne
       ET classe[j].nom < classe[indice].nom) Alors
    indice ← j
FinSi

 

15.3.7 Affichage formaté

Un affichage formaté aligne les colonnes, affiche les titres et limite le nombre de décimales.

Nom

Prénom

Moyenne

Décision

202603ChafikSara16,50Admis
202601AlaouiImane14,25Admis
202602BennaniOmar9,50Ajourné

15.3.8 Calculs statistiques

Taux de réussite

nbAdmis ← 0
Pour i allant de 0 à n - 1 Faire
    Si classe[i].decision = "Admis" Alors
        nbAdmis ← nbAdmis + 1
    FinSi
FinPour
Si n > 0 Alors
    taux ← nbAdmis * 100.0 / n
Sinon
    taux ← 0
FinSi

 

Projet d’application — Gestion simplifiée d’étudiants

1. Cahier des charges

L’application doit conserver le nom, le prénom, le numéro d’inscription, quatre notes, la moyenne et la décision d’admission de chaque étudiant.

  • ajouter un étudiant après validation ;
  • afficher la liste sous forme de tableau ;
  • rechercher par numéro d’inscription ;
  • modifier les notes et recalculer les résultats ;
  • supprimer un étudiant ;
  • classer les étudiants par moyenne décroissante ;
  • afficher des statistiques.

2. Modèle de données

Type utilisé

Constantes
    NB_NOTES ← 4
    CAPACITE ← 100

Type Etudiant = Enregistrement
    nom : Chaîne
    prenom : Chaîne
    numero : Chaîne
    notes : Tableau[0..NB_NOTES - 1] de Réel
    moyenne : Réel
    decision : Chaîne
FinEnregistrement

Variables
    classe : Tableau[0..CAPACITE - 1] de Etudiant
    nbEtudiants : Entier

 

3. Règles de gestion

Règle

Contrôle

Numéro obligatoire et uniqueRefuser une chaîne vide ou déjà présente.
Nom et prénom obligatoiresRefuser une valeur vide.
Notes validesChaque note doit appartenir à [0, 20].
MoyenneSomme des notes divisée par NB_NOTES.
AdmissionAdmis si moyenne ≥ 10, sinon Ajourné.
CapacitéRefuser l’ajout si nbEtudiants = CAPACITE.

4. Modules du projet

Module

Rôle

Retour / effet

CalculerMoyenneCalculer la moyenne des notesRéel
DeterminerDecisionDéterminer la décisionChaîne
RechercherParNumeroTrouver la positionIndice ou -1
SaisirEtudiantLire et valider une ficheRemplit E
AjouterEtudiantAjouter une ficheModifie la liste
ModifierEtudiantModifier les notesMet à jour les calculs
SupprimerEtudiantRetirer une ficheDécale la liste
TrierParMoyenneClasser la listeRéordonne la collection

5. Calcul de la moyenne et de la décision

Fonction CalculerMoyenne(notes, n) : Réel
Variables
    i : Entier
    somme : Réel
Début
    somme ← 0
    Pour i allant de 0 à n - 1 Faire
        somme ← somme + notes[i]
    FinPour
    Retourner somme / n
Fin

Fonction DeterminerDecision(moyenne : Réel) : Chaîne
Début
    Si moyenne ≥ 10 Alors
        Retourner "Admis"
    Sinon
        Retourner "Ajourné"
    FinSi
Fin

 

6. Saisie validée

Procédure SaisirEtudiant(E : Etudiant)
Variables
    j : Entier
Début
    Lire(E.nom)
    Lire(E.prenom)
    Lire(E.numero)
    Pour j allant de 0 à NB_NOTES - 1 Faire
        Répéter
            Lire(E.notes[j])
        Jusqu’à E.notes[j] ≥ 0 ET E.notes[j] ≤ 20
    FinPour
    E.moyenne ← CalculerMoyenne(E.notes, NB_NOTES)
    E.decision ← DeterminerDecision(E.moyenne)
Fin

 

7. Menu principal

Répéter
    Écrire("1. Ajouter  2. Afficher   3. Rechercher")
    Écrire("4. Modifier 5. Supprimer 6. Trier")
    Écrire("7. Statistiques 0. Quitter")
    Lire(choix)
    Selon choix Faire
        Cas 1 : AjouterEtudiant(classe, nbEtudiants, CAPACITE)
        Cas 2 : AfficherListe(classe, nbEtudiants)
        Cas 3 : RechercherEtAfficher(classe, nbEtudiants)
        Cas 4 : ModifierEtudiant(classe, nbEtudiants)
        Cas 5 : SupprimerEtudiant(classe, nbEtudiants)
        Cas 6 : TrierParMoyenne(classe, nbEtudiants)
        Cas 7 : AfficherStatistiques(classe, nbEtudiants)
        Cas 0 : Écrire("Fin")
        Sinon : Écrire("Choix invalide")
    FinSelon
Jusqu’à choix = 0

 

8. Jeu d’essai

Numéro

Nom et prénom

Notes

Moyenne attendue

Décision

E001Alaoui Imane14 ; 12 ; 16 ; 1514,25Admis
E002Bennani Omar8 ; 10 ; 9 ; 119,50Ajourné
E003Chafik Sara20 ; 20 ; 20 ; 2020,00Admis
E004Dahbi Yassine0 ; 0 ; 0 ; 00,00Ajourné
E005El Idrissi Lina10 ; 10 ; 10 ; 1010,00Admis

Tester aussi : numéro en double, note invalide, recherche absente, suppression en première et dernière position, classe vide et liste pleine.

9. Améliorations possibles

  • ajouter une mention ;
  • gérer des coefficients ;
  • ajouter la filière et le groupe ;
  • trier par nom puis prénom ;
  • exporter les données dans un fichier ;
  • remplacer le tableau fixe par une liste dynamique.

Erreurs fréquentes et bonnes pratiques

Erreur fréquente

Conséquence

Correction

Confondre type et variableDéclaration incohérenteDéfinir le type puis déclarer les variables.
Oublier le nom du champAccès impossibleUtiliser variable.champ.
Échanger un seul champDonnées désassociéesÉchanger l’enregistrement complet.
Ne pas recalculer la moyenneRésultats contradictoiresMettre à jour les champs dérivés.
Ajouter sans contrôler la capacitéAccès hors limitesTester n < capacité.
Supprimer sans décalerTrou dans la collectionDécaler puis décrémenter n.
Utiliser le nom comme cléHomonymes mal gérésUtiliser un identifiant unique.
Ne pas valider les notesMoyennes non fiablesContrôler l’intervalle [0, 20].

Travaux dirigés

Exercice 1 — Structure Produit

Définir un type Produit contenant référence, désignation, prix unitaire, quantité et disponibilité.

Exercice 2 — Affichage d’un livre

Écrire une procédure AfficherLivre qui présente tous les champs d’un enregistrement Livre.

Exercice 3 — Valeur d’un stock

Calculer la valeur totale du stock et afficher le produit dont la valeur prix × quantité est maximale.

Exercice 4 — Recherche de capteurs

Afficher les capteurs actifs de type Température et compter les capteurs inactifs.

Exercice 5 — Ajout contrôlé

Ajouter un livre en contrôlant la capacité et l’unicité de l’ISBN.

Exercice 6 — Suppression par référence

Supprimer un produit à partir de sa référence et retourner un booléen de réussite.

Exercice 7 — Tri par nom

Trier les étudiants par nom puis prénom dans l’ordre alphabétique.

Exercice 8 — Statistiques

Calculer moyenne générale, minimum, maximum, nombre d’admis et taux de réussite.

Exercice 9 — Correction

Expliquer pourquoi échanger seulement le champ moyenne est incorrect et proposer la correction.

Exercice 10 — Mention

Ajouter un champ mention avec les niveaux Très bien, Bien, Assez bien, Passable et Ajourné.


 

 

Corrigés indicatifs des travaux dirigés

Correction 1 — Structure Produit

Type Produit = Enregistrement
    reference : Chaîne
    designation : Chaîne
    prixUnitaire : Réel
    quantite : Entier
    disponible : Booléen
FinEnregistrement

 

Correction 2 — Affichage d’un livre

Procédure AfficherLivre(L : Livre)
Début
    Écrire(L.isbn, " | ", L.titre, " | ", L.auteur, " | ", L.annee)
    Si L.disponible Alors
        Écrire("Disponible")
    Sinon
        Écrire("Emprunté")
    FinSi
Fin

 

Correction 3 — Valeur du stock

total ← 0
positionMax ← -1
valeurMax ← -1
Pour i allant de 0 à n - 1 Faire
    valeur ← produits[i].prixUnitaire * produits[i].quantite
    total ← total + valeur
    Si valeur > valeurMax Alors
        valeurMax ← valeur
        positionMax ← i
    FinSi
FinPour

 

Correction 4 — Recherche de capteurs

nbInactifs ← 0
Pour i allant de 0 à n - 1 Faire
    Si capteurs[i].actif = Faux Alors
        nbInactifs ← nbInactifs + 1
    SinonSi capteurs[i].typeMesure = "Température" Alors
        AfficherCapteur(capteurs[i])
    FinSi
FinPour

 

Correction 5 — Ajout contrôlé

Si n = capacite OU RechercherISBN(livres, n, nouveau.isbn) ≠ -1 Alors
    Retourner Faux
Sinon
    livres[n] ← nouveau
    n ← n + 1
    Retourner Vrai
FinSi

 

Correction 6 — Suppression

position ← RechercherReference(produits, n, reference)
Si position = -1 Alors
    Retourner Faux
FinSi
Pour i allant de position à n - 2 Faire
    produits[i] ← produits[i + 1]
FinPour
n ← n - 1
Retourner Vrai

 

Correction 7 — Tri par nom et prénom

Si E1.nom > E2.nom
   OU (E1.nom = E2.nom ET E1.prenom > E2.prenom) Alors
    temp ← E1
    E1 ← E2
    E2 ← temp
FinSi

 

Correction 8 — Statistiques

Si n = 0 Alors
    Écrire("Classe vide")
Sinon
    somme ← 0
    minimum ← classe[0].moyenne
    maximum ← classe[0].moyenne
    nbAdmis ← 0
    Pour i allant de 0 à n - 1 Faire
        somme ← somme + classe[i].moyenne
        minimum ← Min(minimum, classe[i].moyenne)
        maximum ← Max(maximum, classe[i].moyenne)
        Si classe[i].decision = "Admis" Alors
            nbAdmis ← nbAdmis + 1
        FinSi
    FinPour
    moyenneGenerale ← somme / n
    taux ← nbAdmis * 100.0 / n
FinSi

 

Correction 9 — Échange complet

Échanger seulement les moyennes désassocie les résultats des noms et des notes. Il faut échanger les enregistrements complets.

temp ← classe[i]
classe[i] ← classe[j]
classe[j] ← temp

 

Correction 10 — Mention

Si moyenne ≥ 16 Alors
    mention ← "Très bien"
SinonSi moyenne ≥ 14 Alors
    mention ← "Bien"
SinonSi moyenne ≥ 12 Alors
    mention ← "Assez bien"
SinonSi moyenne ≥ 10 Alors
    mention ← "Passable"
Sinon
    mention ← "Ajourné"
FinSi

 

Synthèse du chapitre

Notion

Idée essentielle

EnregistrementRegroupe des champs liés de types éventuellement différents.
ChampComposante accessible par variable.champ.
Type structuréModèle commun pour plusieurs variables.
Tableau d’enregistrementsCollection d’objets structurés du même type.
CléChamp utilisé pour identifier ou classer.
AjoutContrôler capacité, unicité et validité.
ModificationRechercher puis recalculer les champs dérivés.
SuppressionDécaler les éléments et décrémenter la taille logique.
TriComparer un champ et échanger la fiche complète.
AffichagePrésenter les champs dans des colonnes lisibles.

Méthode de résolution

1.  Identifier les objets du problème.

2.  Lister les informations qui décrivent chaque objet.

3.  Choisir le type de chaque champ.

4.  Définir une clé unique et les champs calculés.

5.  Déclarer le type structuré et la collection.

6.  Concevoir les fonctions de validation et de calcul.

7.  Développer l’ajout, la recherche, la modification et la suppression.

8.  Tester les invariants et les cas limites.

9.  Ajouter le tri, les statistiques et l’affichage.

Glossaire

Terme

Définition

EnregistrementStructure regroupant plusieurs champs décrivant un objet.
ChampInformation nommée contenue dans un enregistrement.
OccurrenceVariable concrète créée à partir d’un type structuré.
CléChamp identifiant un enregistrement.
Champ dérivéValeur calculée à partir d’autres champs.
CollectionEnsemble d’enregistrements du même type.
CapacitéNombre maximal de cases disponibles.
Taille logiqueNombre d’éléments réellement présents.
InvariantPropriété qui doit rester vraie.
Tri multicritèreTri utilisant plusieurs champs prioritaires.

Auto-évaluation

Cochez les compétences que vous maîtrisez :

Compétence

Oui

À revoir

Je distingue un tableau d’un enregistrement.

Je sais définir un type structuré.

Je sais accéder à un champ simple ou imbriqué.

Je sais déclarer un tableau d’enregistrements.

Je sais ajouter un élément sans dépasser la capacité.

Je sais rechercher et modifier une fiche.

Je sais supprimer un élément par décalage.

Je sais trier sans désassocier les données.

Je sais calculer une moyenne et une décision.

Je sais concevoir une application modulaire de gestion.

Conclusion : les enregistrements préparent à la programmation orientée objet, aux bases de données et à la conception d’applications de gestion.