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 |
|---|---|---|
| Cours | 4 h | Comprendre les types structurés et les tableaux d’enregistrements. |
| Travaux dirigés | 4 h | Déclarer des structures et concevoir les traitements classiques. |
| Travaux pratiques | 5 h | Développer une application modulaire de gestion d’étudiants. |
| Travail personnel | 2 h | Pré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 |
|---|---|---|
| Étudiant | Nom, prénom, numéro, notes, moyenne | Chaînes, entier, tableau, réel |
| Produit | Référence, désignation, prix, quantité | Chaînes, réel, entier |
| Livre | ISBN, titre, auteur, année, disponibilité | Chaînes, entier, booléen |
| Capteur | Identifiant, type, valeur, unité, état | Chaî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éments | Valeurs généralement de même type | Champs éventuellement de types différents |
| Accès | Par un indice : T[i] | Par un nom de champ : E.nom |
| Usage principal | Collection homogène | Description complète d’un objet |
| Exemple | Liste de notes | Fiche 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 |
|---|---|---|---|
| nom | Chaîne | "El Amrani" | Nom de famille |
| prenom | Chaîne | "Salma" | Prénom |
| numero | Entier ou chaîne | 2026015 | Identifiant unique |
| moyenne | Réel | 14,75 | Résultat calculé |
| admis | Booléen | Vrai | Dé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].nom | Nom de l’étudiant i |
| classe[i].notes[j] | Note j de l’étudiant i |
| classe[i].moyenne | Moyenne de l’étudiant i |
| classe[0].numero | Numé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 |
|---|---|---|---|---|---|
| 202601 | Alaoui | Imane | [14, 12, 16, 15] | 14,25 | Admis |
| 202602 | Bennani | Omar | [8, 10, 9, 11] | 9,50 | Ajourné |
| 202603 | Chafik | Sara | [17, 15, 18, 16] | 16,50 | Admis |
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 |
|---|---|---|---|---|
| T01 | Température | 24,6 | °C | Vrai |
| H01 | Humidité | 58 | % | Vrai |
| P03 | Pression | 1012 | hPa | Faux |
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 |
| Tri | Tous les tableaux doivent être échangés ensemble | Un enregistrement complet est échangé |
| Ajout d’un attribut | Nouveau tableau à synchroniser | Nouveau champ dans le type |
| Risque d’incohérence | Élevé | Réduit |
| Passage en paramètre | Plusieurs tableaux | Une 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.
N° | Nom | Prénom | Moyenne | Décision |
|---|---|---|---|---|
| 202603 | Chafik | Sara | 16,50 | Admis |
| 202601 | Alaoui | Imane | 14,25 | Admis |
| 202602 | Bennani | Omar | 9,50 | Ajourné |
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 unique | Refuser une chaîne vide ou déjà présente. |
| Nom et prénom obligatoires | Refuser une valeur vide. |
| Notes valides | Chaque note doit appartenir à [0, 20]. |
| Moyenne | Somme des notes divisée par NB_NOTES. |
| Admission | Admis si moyenne ≥ 10, sinon Ajourné. |
| Capacité | Refuser l’ajout si nbEtudiants = CAPACITE. |
4. Modules du projet
Module | Rôle | Retour / effet |
|---|---|---|
| CalculerMoyenne | Calculer la moyenne des notes | Réel |
| DeterminerDecision | Déterminer la décision | Chaîne |
| RechercherParNumero | Trouver la position | Indice ou -1 |
| SaisirEtudiant | Lire et valider une fiche | Remplit E |
| AjouterEtudiant | Ajouter une fiche | Modifie la liste |
| ModifierEtudiant | Modifier les notes | Met à jour les calculs |
| SupprimerEtudiant | Retirer une fiche | Décale la liste |
| TrierParMoyenne | Classer la liste | Ré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 |
|---|---|---|---|---|
| E001 | Alaoui Imane | 14 ; 12 ; 16 ; 15 | 14,25 | Admis |
| E002 | Bennani Omar | 8 ; 10 ; 9 ; 11 | 9,50 | Ajourné |
| E003 | Chafik Sara | 20 ; 20 ; 20 ; 20 | 20,00 | Admis |
| E004 | Dahbi Yassine | 0 ; 0 ; 0 ; 0 | 0,00 | Ajourné |
| E005 | El Idrissi Lina | 10 ; 10 ; 10 ; 10 | 10,00 | Admis |
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 variable | Déclaration incohérente | Définir le type puis déclarer les variables. |
| Oublier le nom du champ | Accès impossible | Utiliser variable.champ. |
| Échanger un seul champ | Données désassociées | Échanger l’enregistrement complet. |
| Ne pas recalculer la moyenne | Résultats contradictoires | Mettre à jour les champs dérivés. |
| Ajouter sans contrôler la capacité | Accès hors limites | Tester n < capacité. |
| Supprimer sans décaler | Trou dans la collection | Décaler puis décrémenter n. |
| Utiliser le nom comme clé | Homonymes mal gérés | Utiliser un identifiant unique. |
| Ne pas valider les notes | Moyennes non fiables | Contrô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 |
|---|---|
| Enregistrement | Regroupe des champs liés de types éventuellement différents. |
| Champ | Composante accessible par variable.champ. |
| Type structuré | Modèle commun pour plusieurs variables. |
| Tableau d’enregistrements | Collection d’objets structurés du même type. |
| Clé | Champ utilisé pour identifier ou classer. |
| Ajout | Contrôler capacité, unicité et validité. |
| Modification | Rechercher puis recalculer les champs dérivés. |
| Suppression | Décaler les éléments et décrémenter la taille logique. |
| Tri | Comparer un champ et échanger la fiche complète. |
| Affichage | Pré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 |
|---|---|
| Enregistrement | Structure regroupant plusieurs champs décrivant un objet. |
| Champ | Information nommée contenue dans un enregistrement. |
| Occurrence | Variable concrète créée à partir d’un type structuré. |
| Clé | Champ identifiant un enregistrement. |
| Champ dérivé | Valeur calculée à partir d’autres champs. |
| Collection | Ensemble d’enregistrements du même type. |
| Capacité | Nombre maximal de cases disponibles. |
| Taille logique | Nombre d’éléments réellement présents. |
| Invariant | Propriété qui doit rester vraie. |
| Tri multicritère | Tri 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. |