Programmation C
Exercice de révision
Mme. Feyrouz Hamdaoui
ET AU. 2024/2025
M. Sofiene ben Ahmed
Gestion des étudiants et des notes
Contexte :
On veut gérer les étudiants et leurs notes dans une école. Chaque étudiant est défini par un
identifiant, un nom, un prénom, une date de naissance, et une liste de notes pour différentes
matières. Une matière est cratérisée par son code son nom et coefficient.
Objectifs :
• Saisir les notes d’un étudiant dans différentes matières (attention aux intégrités des
données).
• Ecrire les informations et les notes d’un étudiant.
• Calculer la moyenne générale de chaque étudiant.
• Ecrire les étudiants ayant une moyenne au-dessus d’un seuil donné.
• Rechercher et Ecrire les informations d’un étudiant par son identifiant.
Spécificités :
• Gestion des matières et des notes par matière.
• Sauvegarder les données des étudiants et des notes et des matières dans des tableaux,
Contraintes d’intégrités
Pour assurer l'intégrité des données dans ce problème, nous devons mettre en place deux
contraintes spécifiques lors de la gestion des notes d'un étudiant :
1. Le code de la matière dans une note doit exister dans le tableau des matières : Cela
signifie que, lors de la saisie d'une note pour une matière donnée, il faut vérifier que la
matière existe dans le tableau de matières.
2. Une même matière ne doit pas apparaître plus d'une fois dans le tableau des notes d'un
étudiant : Lorsqu'on ajoute une note pour une matière, il faut s'assurer que cette
matière n'est pas déjà présente dans la liste des notes de l'étudiant.
1
Correction
Première approche :
Structure Tdate
entier jour
entier mois
entier annee
Fin Structure
Structure TEtud
chaîne mat[20]
Tdate date
réel moy
Fin Structure
Structure Tmat
chaîne code[5]
chaîne titre[30]
entier coefficient
réel note
Fin Structure
Constante N ← 30000 // nombre maximal d'étudiants
Tableau TListeEtud[N] de TEtud
2
Constante M ← 30 // nombre maximal de matières par étudiant
Structure TEtudMat
TEtud Etud
Tableau matiere[M] de Tmat
Fin Structure
Fonction LireDate() : Tdate
Var
date : Tdate
début
Ecrire("Entrer votre date de naissance dans le format (jj/mm/aaaa) :")
Lire([Link], [Link], [Link])
Tant que ([Link] < 1 ou [Link] > 31) ou ([Link] < 1 ou [Link] > 12) ou
([Link] < 1900)
Ecrire("Votre date est invalide. Veuillez entrer une nouvelle date.")
Lire([Link], [Link], [Link])
Fin Tant que
Retourner date
Fin Fonction
Fonction SaisieEtud() : TEtud
Var
Etud : TEtud
début
Ecrire("Entrer les informations sur l'étudiant :")
3
Ecrire("Entrer le matricule :")
Lire([Link])
[Link] ← LireDate()
Répéter
Ecrire("Entrer la moyenne :")
Lire([Link])
Jusqu'à ce que ([Link] ≥ 0)
Retourner Etud
Fin Fonction
Procédure SaisieMatEtud(e : Tableau de Tmat, taille : entier)
Var
i : entier
début
Pour i allant de 0 à taille - 1 Faire
Ecrire("Entrer les informations sur la matière (", i + 1, ") :")
Ecrire("Entrer le code :")
Lire(e[i].code)
Ecrire("Entrer le titre :")
Lire(e[i].titre)
4
Répéter
Ecrire("Entrer le coefficient :")
Lire(e[i].coefficient)
Jusqu'à ce que (e[i].coefficient > 0)
Répéter
Ecrire("Entrer la note :")
Lire(e[i].note)
Jusqu'à ce que (e[i].note >= 0)
Fin Pour
Fin Procédure
Procédure SaisieTout()
Var
i : entier
TListeEtud : Tableau[N] de TEtudMat
début
Pour i allant de 0 à N - 1 Faire
TListeEtud[i].Etud ← SaisieEtud()
SaisieMatEtud(TListeEtud[i].matiere, M)
Fin Pour
Fin Procédure
Procédure Moyenetud(TListeEtud : Tableau de TEtudMat, taille : entier)
5
Var
i, j : entier
sum_notes, sum_coefficients : réel
début
Pour i allant de 0 à taille - 1 Faire
sum_notes ← 0
sum_coefficients ← 0
Pour j allant de 0 à M - 1 Faire
sum_notes ← sum_notes + (TListeEtud[i].matiere[j].note *
TListeEtud[i].matiere[j].coefficient)
sum_coefficients ← sum_coefficients + TListeEtud[i].matiere[j].coefficient
Fin Pour
Si sum_coefficients ≠ 0 Alors
TListeEtud[i].[Link] ← sum_notes / sum_coefficients
Sinon
TListeEtud[i].[Link] ← 0
Fin Si
Fin Pour
Fin Procédure
6
Deuxième méthode
Structure Tdate
entier jour
entier mois
entier annee
Fin Structure
Structure TNote
chaîne code[5]
chaîne titre_matiere[30]
réel valeur
Fin Structure
Structure TEtud
chaîne mat[20]
Tdate date
réel moy
Tableau Notes[M] de TNote
Fin Structure
Structure Tmat
chaîne code[5]
chaîne titre[30]
7
entier coefficient
Fin Structure
Constante N ← 30000 // nombre maximal d'étudiants
Tableau TListeEtud[N] de TEtud
Constante M ← 30 // nombre maximal de matières par étudiant
Structure TEtudMat
TEtud Etud
Tableau matiere[M] de Tmat
Fin Structure
Fonction LireDate() : Tdate
Var
date : Tdate
début
Ecrire("Entrer votre date de naissance dans le format (jj/mm/aaaa) :")
Lire([Link], [Link], [Link])
Tant que ([Link] < 1 ou [Link] > 31) ou ([Link] < 1 ou [Link] > 12) ou
([Link] < 1900)
Ecrire("Votre date est invalide. Veuillez entrer une nouvelle date.")
Lire([Link], [Link], [Link])
Fin Tant que
Retourner date
Fin Fonction
8
Fonction SaisieEtud() : TEtud
Var
Etud : TEtud
début
Ecrire("Entrer les informations sur l'étudiant :")
Ecrire("Entrer le matricule :")
Lire([Link])
[Link] ← LireDate()
Répéter
Ecrire("Entrer la moyenne :")
Lire([Link])
Jusqu'à ce que ([Link] ≥ 0)
Retourner Etud
Fin Fonction
Procédure SaisieMatieres(e : Tableau de Tmat, taille : entier)
Var
i : entier
début
Pour i allant de 0 à taille - 1 Faire
9
Ecrire("Entrer les informations sur la matière (", i + 1, ") :")
Ecrire("Entrer le code :")
Lire(e[i].code)
Ecrire("Entrer le titre :")
Lire(e[i].titre)
Répéter
Ecrire("Entrer le coefficient :")
Lire(e[i].coefficient)
Jusqu'à ce que (e[i].coefficient > 0)
Fin Pour
Fin Procédure
Procédure SaisieNotes(Notes : Tableau de TNote, taille : entier)
Var
i : entier
début
Pour i allant de 0 à taille - 1 Faire
Ecrire("Entrer les informations sur la note de la matière (", i + 1, ") :")
Ecrire("Entrer le code de la matière :")
Lire(Notes[i].code)
Ecrire("Entrer le titre de la matière :")
Lire(Notes[i].titre_matiere)
10
Répéter
Ecrire("Entrer la note :")
Lire(Notes[i].valeur)
Jusqu'à ce que (Notes[i].valeur >= 0)
Fin Pour
Fin Procédure
Procédure SaisieTout()
Var
i : entier
TListeEtud : Tableau[N] de TEtudMat
début
Pour i allant de 0 à N - 1 Faire
TListeEtud[i].Etud ← SaisieEtud()
SaisieMatieres(TListeEtud[i].matiere, M)
SaisieNotes(TListeEtud[i].[Link], M)
Fin Pour
Fin Procédure
Procédure Moyenetud(TListeEtud : Tableau de TEtudMat, taille : entier)
Var
i, j : entier
sum_notes, sum_coefficients : réel
début
11
Pour i allant de 0 à taille - 1 Faire
sum_notes ← 0
sum_coefficients ← 0
Pour j allant de 0 à M - 1 Faire
sum_notes ← sum_notes + (TListeEtud[i].[Link][j].valeur *
TListeEtud[i].matiere[j].coefficient)
sum_coefficients ← sum_coefficients + TListeEtud[i].matiere[j].coefficient
Fin Pour
Si sum_coefficients ≠ 0 Alors
TListeEtud[i].[Link] ← sum_notes / sum_coefficients
Sinon
TListeEtud[i].[Link] ← 0
Fin Si
Fin Pour
Fin Procédure
12