On doit gérer par ordinateur les notes d’un groupe de N (N <= 100) étudiants qui suivent une formation composée de M matières (M <= 15).
1. Un type structure appelée Matière
contenant un champ nom de type chaîne, un champ moyenne de type réel et un champ coef de type réel.
structure Matière { nom : chaîne; moyenne : réel; coef : réel; }
2. Définissez un type tableau de réels appelé TabReels. Ce tableau contiendra les notes d’un étudiant.
type TabReels : tableau de réels;
3. un type structure appelée Etudiant contenant un champ nom de type chaîne, un champ moyenne de type réel, et un champs notes de type TabReels.
structure Etudiant { nom : chaîne; moyenne : réel; notes : TabReels; }
4. Un type tableau de Matière, appelé TabMat ; un type tableau d’étudiants appelé TabEtu.
type TabMat : tableau de Matière; type TabEtu : tableau de Etudiant;
5. Définissez un type tableau de réels à deux dimensions appelé MatNotes. Ce tableau contiendra les notes des étudiants (étudiants classés en ligne et notes des matières en colonnes).
La consigne est pas très claire puisque se sont des réels que l'on stocke ici mais une ligne est associée à un étudiant et chaque élément de cette ligne représente une de ses notes.
Par exemple, avec le tableau :
Matière 1 Matière 2 13 18 9 17 L'étudiant n°1, a 13 et 18 dans ses notes et l'étudiant n°2 a 9 et 17.
type MatNotes : tableau de TabReels;
3. Ecrire la procédure saisieLaMatiere(matiere : Matiere)
qui permet la saisie d’une matière (son nom et son coef).
procédure saisieLaMatiere(matiere : Matiere) nom : chaîne; coef : réel; début lire(nom) lire(coef) matiere.nom <- nom matiere.coef <- coef fin
4. Ecrire la procédure saisieMatieres(matieres : TabMat, nbMat : Entier)
qui permet la saisie de nbMat matières qui sont ensuite stockées dans le tableau tabMatieres.
procédure saisieMatieres(matieres : TabMat, nbMat : Entier) i : entier début pour i de 1 à nbMat saisieLaMatiere(matieres[i]) fin fin
5. Ecrire la procédure saisieEtu(etu : Etudiant, nbMat : Entier)
qui permet la saisie d’un étudiant, et de ses notes sur nbMat
matières.
procédure saisieEtu(etu : Etudiant, nbMat : Entier) nom : chaîne: i : entier; note, somme : réel début lire(nom) etu.nom <- nom // Ensuite on saisie les notes de l'étudiants pour i de 1 à nbMat lire(note) etu.notes[i] <- note fin fin
6. Ecrire la procédure afficheEtu(etu : Etudiant)
qui affiche le nom et la moyenne d’un etudiant.
procédure afficheEtu(etu : Etudiant) début afficher(etu.nom) afficher(etu.moyenne) fin
7. Ecrire la procédure saisieEtudiants(etudiants : TabEtu, nbEtu : Entier, nbMat : Entier)
qui permet la saisie de nbEtu
etudiants et leur stockage dans le tableau etudiants
.
procédure saisieEtudiants(etudiants : TabEtu, nbEtu : Entier, nbMat : Entier) i : entier etu : Etudiant début pour i de 1 à nbEtu saisieEtu(etu, nbMat) etudiants[i] <- etu fin fin
8. Ecrire la procédure afficheTabEtu(etudiants : TabEtu)
qui affiche les étudiants du tableau.
Note : Ici, la consigne ne donne pas la taille du tableau ; c'est sûrement une erreur de l'énnoncé du coup elle est dans la correction.
procédure afficheTabEtu(etudiants : TabEtu, nbEtu : Entier) i : entier début pour i de 1 à nbEtu afficheEtu(etudiants[i]) fin fin
9. Ecrire la procédure calculMoyennesEtu(etudiants : TabEtu, nbEtu : Entier, matieres : TabMat, nbMat : Entier, grille : MatNotes)
qui calcule la moyenne de chaque étudiant, stocke cette moyenne dans le champ moyenne de l’étudiant, et qui remplit la matrice de notes grille
.
La difficulté ici est qu'on a deux boucles avec une qui permet de parcourir le tableau d'étudiants et l'autre qui permet de parcourir le tableau de notes associé à un étudiant.
procédure calculMoyennesEtu(etudiants : TabEtu, nbEtu : Entier, matieres : TabMat, nbMat : Entier, grille : MatNotes) netu, nmat : entier total, moyenne somme_coef : réel début pour netu de 1 à nbEtu moyenne <- 0 somme_coef <- 0 pour nmat de 1 à nbMat // +------------------------------------+ // | Calcul de la moyenne de l'étudiant | // +------------------------------------+ total <- total + (matieres[nmat].coef * etu.notes[nmat]) somme_coef <- matieres[nmat].coef // +--------------------------+ // | Remplissage de la grille | // +--------------------------+ grille[netu][nmat] = etu.notes[nmat] fin moyenne <- total / somme_coef etudiants[nbetu].moyenne = moyenne fin fin
10. Ecrire la procédure calculMoyennesMatieres (nbEtu : Entier, matieres : TabMat, nbMat : Entier, grille : MatNotes)
qui calcule la moyenne des notes obtenues dans chaque matière et qui stocke cette moyenne dans le champ moyenne des matières.
La difficulté ici c'est qu'on fait la somme des éléments d'une colonne plutôt que d'une ligne.
procédure calculMoyennesMatieres (nbEtu : Entier, matieres : TabMat, nbMat : Entier, grille : MatNotes) netu, nmat : entier total : réel début pour nmat de 1 et nbMat total <- 0 // On somme toutes les notes de cette matière pour netu de 1 à nbEtu total <- total + grille[netu][nmat] fin matieres[nmat].moyenne = total / nbEtu fin fin
11. Ecrire la fonction meilleurMoyenne(etudiants : TabEtu, nbEtu : Entier)
qui retourne l’étudiant ayant la moyenne la plus élevées.
Ici, on part du principe que le premier étudiant du tableau a la moyenne la plus élevée et on parcours le reste du tableau en essayant de trouver une meilleure moyenne.
fonction meilleurMoyenne(etudiants : TabEtu, nbEtu : Entier) : Etudiant meilleur : Etudiant i : entier début meilleur <- etudiants[1] pour i de 2 à nbEtu si (etudiants[i].moyenne > meilleur.moyenne) meilleur <- etudiants[i] fin fin retourner meilleur fin