Exercice - Construire une structure de boucles imbriquées pour les calculs de note finale des étudiants
Dans cet exercice, vous ajoutez un tableau de chaînes pour contenir les noms des étudiants, puis implémentez une structure imbriquée foreach qui itère sur les noms des étudiants dans une boucle externe et sur les scores des étudiants dans la boucle interne. Vous commencez par construire le studentNames tableau et une foreach boucle qui itère à travers les éléments du tableau. Ensuite, vous déplacez le code utilisé pour calculer les notes de Sophia dans le bloc de code de la boucle « names ». Enfin, vous implémentez la logique de code qui utilise le nom de l’étudiant pour accéder à son tableau de scores, calculer son score moyen et écrire sa note dans la console. Les tâches détaillées que vous effectuez pendant cet exercice sont les suivantes :
Créer un tableau de noms : créer un tableau contenant les noms des étudiants
Créer une boucle externe : créer une boucle
foreachqui itère dans les noms des étudiantsDévelopper un bloc de code comme boucle externe : déplacer le code qui calcule et affiche la note de Sophia dans le bloc de code de la « boucle de noms »
Mettre à jour les calculs et l’affichage : mettre à jour le code qui effectue les calculs de notes des étudiants en utilisant un nouveau tableau de notes
Important
Vous devez avoir effectué l’exercice précédent de ce module, « Créer des tableaux et des boucles foreach », avant de commencer celui-ci.
Créer un tableau des noms des étudiants et une boucle foreach externe
Dans le cadre de cette tâche, vous allez créer un tableau des noms des étudiants et une boucle foreach qui itère dans les noms des étudiants.
Vérifiez que le fichier Program.cs est ouvert dans l’éditeur de Visual Studio Code.
Faites défiler votre code jusqu’en haut, puis recherchez les lignes de code utilisées pour déclarer les tableaux de notes.
Créez une ligne de code vide sous la déclaration des tableaux de notes.
La ligne de code vide doit se trouver entre les lignes utilisées pour déclarer les tableaux de notes et la ligne utilisée pour déclarer
sophiaSum.Pour créer un tableau de chaînes nommé
studentNamescontenant les noms des étudiants, entrez le code suivant :// Student names string[] studentNames = new string[] { "Sophia", "Andrew", "Emma", "Logan" };Notez que vous avez spécifié les noms des étudiants dans le cadre de la déclaration.
Pour créer une instruction
foreachpermettant d’itérer dans les noms des étudiants, entrez le code suivant :foreach (string name in studentNames) { }Pour vérifier que votre boucle
foreachitère dans le tableaustudentNamescomme prévu, mettez à jour le bloc de code de l’instructionforeachcomme suit :foreach (string name in studentNames) { Console.WriteLine($"{name}"); }Prenez quelques instants pour passer en revue le code que vous avez créé.
// Student names string[] studentNames = new string[] { "Sophia", "Andrew", "Emma", "Logan" }; foreach (string name in studentNames) { Console.WriteLine($"{name}"); }Votre code utilisera cette boucle
foreachcomme boucle externe de votre application. Au cours de cet exercice, vous allez implémenter la logique suivante dans votre application :Pour chacun des étudiants du tableau
studentNames, votre application :- Détermine l’étudiant actuel
- Accède aux notes de l’étudiant actuel
- Calcule la note finale de l’étudiant actuel (somme et moyenne)
- Écrit la note finale de l’étudiant actuel dans la console
Pour l’instant, toutefois, vous allez simplement écrire les noms des étudiants dans la console.
Dans le menu Fichier de Visual Studio Code, cliquez sur Enregistrer.
Dans l’affichage Explorateur de Visual Studio Code, cliquez avec le bouton droit sur Starter, puis sélectionnez Ouvrir dans le terminal intégré.
Important
L’invite de commandes du Terminal doit afficher le chemin de votre fichier Program.cs.
À l’invite de commandes du Terminal, tapez dotnet build, puis appuyez sur Entrée.
La commande
dotnet buildindique au compilateur de générer l’application. Si des erreurs sont détectées, elles sont signalées.Si vous voyez des messages d’erreur ou d’avertissement, vous devez les corriger avant de continuer.
À l’invite de commandes du Terminal, tapez dotnet run, puis appuyez sur Entrée.
Vérifiez que votre code a produit la sortie suivante :
Sophia Andrew Emma Logan Student Grade Sophia: 92.2 A- Press the Enter key to continueNotes
Si vous ne voyez pas la liste des noms des étudiants au-dessus du rapport de notation de Sophia, revenez en arrière et vérifiez que vous avez entré votre code correctement.
Dans le panneau TERMINAL, pour arrêter l’exécution de votre application, appuyez sur la touche Entrée.
Fermez le panneau du Terminal.
Calculer la note de Sophia dans la boucle des noms externe
Dans le cadre de cette tâche, vous allez déplacer le code qui calcule et affiche la note de Sophia dans le bloc de code de la « boucle de noms ».
Dans l’éditeur de Visual Studio Code, recherchez les lignes de code utilisées pour calculer et afficher la note finale de Sophia.
int sophiaSum = 0; decimal sophiaScore; foreach (int score in sophiaScores) { // add the exam score to the sum sophiaSum += score; } sophiaScore = (decimal)sophiaSum / currentAssignments; Console.WriteLine("Student\t\tGrade\n"); Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-");Notes
L’étape suivante consiste à déplacer ce code de son emplacement actuel vers le bloc de code de la « boucle de noms »
foreach.Pour effectuer le déplacement, coupez le code qui calcule et affiche la note finale de Sophia et collez-le dans le bloc de code de la boucle « boucle de noms »
foreach.Si vous ne savez pas comment couper et coller dans Visual Studio Code, essayez l’approche décrite dans les étapes suivantes :
Sélectionnez le code utilisé pour calculer et afficher la note finale de Sophia.
Vous pouvez cliquer et faire glisser pour sélectionner des lignes de code.
Dans le menu Édition de Visual Studio Code, sélectionnez Couper.
Dans l’éditeur de Visual Studio Code, positionnez le curseur sur la ligne de code vide sous le code suivant :
Console.WriteLine($"{name}");Dans le menu Édition de Visual Studio Code, sélectionnez Coller.
Mettez à jour votre code pour afficher correctement la mise en retrait des lignes de code.
Conseil
Visual Studio Code offre une commande
Format Documentqui peut être utilisée pour maintenir à jour la mise en forme de votre code. Cliquez avec le bouton droit dans l’éditeur de Visual Studio Code, puis sélectionnez Mettre le document en forme dans le menu contextuel. Sur les ordinateurs Windows, le raccourci clavier de cette commande est :Shift + Alt + F. Les ordinateurs Linux et macOS utilisent d’autres raccourcis si nécessaire pour éviter les conflits avec les raccourcis fournis par le système d’exploitation.Vérifiez que votre code mis à jour correspond au code suivant :
// Student names string[] studentNames = new string[] { "Sophia", "Andrew", "Emma", "Logan" }; foreach (string name in studentNames) { Console.WriteLine($"{name}"); int sophiaSum = 0; decimal sophiaScore; foreach (int score in sophiaScores) { // add the exam score to the sum sophiaSum += score; } sophiaScore = (decimal)sophiaSum / currentAssignments; Console.WriteLine("Student\t\tGrade\n"); Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-"); } Console.WriteLine("Press the Enter key to continue"); Console.ReadLine();Notez qu’à ce stade, votre code calcule et affiche la note de Sophia, quel que soit le
namede l’étudiant actuel. Vous allez vous en occuper bientôt.Supprimez le code suivant :
Console.WriteLine($"{name}");Sur la ligne de code vide que vous venez de créer, entrez le code suivant :
if (name == "Sophia") {Créez une ligne de code vide après le code utilisé pour écrire la note finale de Sophia dans la console.
Pour fermer le bloc de code de l’instruction
if, entrez le code suivant :}Mettez à jour votre code pour afficher correctement la mise en retrait des lignes de code.
Conseil
Utilisez la commande
Format Documentpour mettre à jour la mise en forme de votre code. Cliquez avec le bouton droit dans le panneau d’édition de Visual Studio Code, puis sélectionnez Mettre le document en forme dans le menu contextuel.Prenez quelques instants pour passer en revue votre code.
Votre code doit se présenter comme suit :
// initialize variables - graded assignments int currentAssignments = 5; int[] sophiaScores = new int[] { 90, 86, 87, 98, 100 }; int[] andrewScores = new int[] { 92, 89, 81, 96, 90 }; int[] emmaScores = new int[] { 90, 85, 87, 98, 68 }; int[] loganScores = new int[] { 90, 95, 87, 88, 96 }; // Student names string[] studentNames = new string[] {"Sophia", "Andrew", "Emma", "Logan"}; foreach (string name in studentNames) { if (name == "Sophia") { int sophiaSum = 0; decimal sophiaScore; foreach (int score in sophiaScores) { // add the exam score to the sum sophiaSum += score; } sophiaScore = (decimal)(sophiaSum) / currentAssignments; Console.WriteLine("Student\t\tGrade\n"); Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-"); } } Console.WriteLine("Press the Enter key to continue"); Console.ReadLine();Notez que l’instruction
ifdans votre bloc de codeforeachexterne limite l’étudiant dont la note finale est calculée et affichée. Ce n’est pas exactement ce dont vous avez besoin, mais c’est un pas dans la bonne direction.Dans le menu Fichier de Visual Studio Code, cliquez sur Enregistrer.
Dans l’affichage Explorateur de Visual Studio Code, cliquez avec le bouton droit sur Starter, puis sélectionnez Ouvrir dans le terminal intégré.
Important
L’invite de commandes du Terminal doit afficher le chemin de votre fichier Program.cs.
À l’invite de commandes du Terminal, tapez dotnet build, puis appuyez sur Entrée.
La commande
dotnet buildindique au compilateur de générer l’application. Si des erreurs sont détectées, elles sont signalées.Si vous voyez des messages d’erreur ou d’avertissement, vous devez les corriger avant de continuer.
À l’invite de commandes du Terminal, tapez dotnet run, puis appuyez sur Entrée.
Vérifiez que votre code a produit la sortie suivante :
Student Grade Sophia: 92.2 A-Notes
Si la liste des noms des étudiants s’affiche toujours au-dessus du rapport de notation de Sophia, vérifiez que vous avez enregistré vos mises à jour.
Dans le panneau TERMINAL, pour arrêter l’exécution de votre application, appuyez sur la touche Entrée.
Fermez le panneau du Terminal.
Mettre à jour la boucle imbriquée pour calculer les notes de tous les étudiants
Dans le cadre de cette tâche, vous allez mettre à jour le code qui effectue les calculs de notes des étudiants en utilisant un nouveau tableau de notes. Vous allez commencer par créer un tableau nommé studentScores, qui peut être utilisé pour stocker les notes de n’importe quel étudiant. Ensuite, vous créerez une construction if .. elseif qui utilise le nom de l’étudiant actuel pour attribuer son tableau de notes à studentScores. Enfin, vous mettrez à jour le code qui calcule et affiche les notes finales de l’étudiant. Quand vous aurez terminé, le rapport devra inclure le nom et la note numérique de tous les étudiants.
Créez une ligne de code vide sous la déclaration du tableau
studentNames.La ligne vide doit se trouver au-dessus de l’instruction
foreachexterne.Pour créer un tableau d’entiers permettant de stocker les notes de l’étudiant actuel, entrez le code suivant :
int[] studentScores = new int[10];Notez que ce code n’attribue aucune valeur au tableau à ce stade. Vous spécifiez simplement que le tableau peut contenir 10 éléments.
Créez une ligne de code vide en haut du bloc de code
foreachexterne.La ligne vide doit se trouver à l’intérieur du bloc de code
foreachet au-dessus de l’instructionifqui détermine sinameest égal à Sophia.Pour créer une variable de chaîne qui sera utilisée pour stocker le nom de l’étudiant actuel, entrez le code suivant :
string currentStudent = name;Notes
Vous pourriez continuer à utiliser
namepour suivre le nom de l’étudiant actuel à mesure que vous itérez dans le tableau de noms. Cependant, l’utilisation decurrentStudentpermettra de mieux comprendre votre logique de code pour les prochaines étapes de développement de votre application.Pour remplacer
currentStudentparnamedans l’instructionifqui détermine sinameest égal à Sophia, mettez à jour votre code comme suit :if (currentStudent == "Sophia")Déplacez le code qui calcule et affiche la note de Sophia sous le bloc de code.
Vous déplacez tout le code se trouvant dans le bloc de code à un emplacement situé sous le bloc de code. Vous comprendrez pourquoi dans le cadre des prochaines étapes.
Vérifiez que le code de votre bloc de code
foreachexterne correspond au code suivant :{ string currentStudent = name; if (currentStudent == "Sophia") { } int sophiaSum = 0; decimal sophiaScore; foreach (int score in sophiaScores) { // add the exam score to the sum sophiaSum += score; } sophiaScore = (decimal)sophiaSum / currentAssignments; Console.WriteLine("Student\t\tGrade\n"); Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-"); }Pour attribuer le tableau
sophiaScoresàstudentScoresquandcurrentStudent == "Sophia", mettez à jour le code de votre instructionifcomme suit :if (currentStudent == "Sophia") studentScores = sophiaScores;Notez que vous avez supprimé les accolades du bloc de code de l’instruction
ifdans le cadre de cette mise à jour du code.Pour ajouter une instruction
else ifqui attribue le tableauandrewScoresàstudentScoresquandcurrentStudent == "Andrew", entrez le code suivant :else if (currentStudent == "Andrew") studentScores = andrewScores;Créez une autre instruction
else ifpour attribuer le tableauemmaScoresàstudentScoresquandcurrentStudent == "Emma".Créez une instruction
else ifpour attribuer le tableauloganScoresàstudentScoresquandcurrentStudent == "Logan".Vérifiez que votre bloc de code
foreachcorrespond au code suivant :foreach (string name in studentNames) { string currentStudent = name; if (currentStudent == "Sophia") studentScores = sophiaScores; else if (currentStudent == "Andrew") studentScores = andrewScores; else if (currentStudent == "Emma") studentScores = emmaScores; else if (currentStudent == "Logan") studentScores = loganScores; int sophiaSum = 0; decimal sophiaScore; foreach (int score in sophiaScores) { // add the exam score to the sum sophiaSum += score; } sophiaScore = (decimal)sophiaSum / currentAssignments; Console.WriteLine("Student\t\tGrade\n"); Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-"); }Ensuite, vous devez mettre à jour la boucle
foreachinterne pour utiliserstudentScoreset « dépersonnaliser » les variables que vous utilisez dans vos calculs.Pour remplacer
studentScoresparsophiaScoresdans la boucleforeachqui itère dans le tableau de notes, mettez à jour votre code comme suit :foreach (int score in studentScores)Pour remplacer les déclarations de variable spécifiques à Sophia par des noms plus génériques, mettez à jour votre code comme suit :
int sumAssignmentScores = 0; decimal currentStudentGrade = 0;Ces deux déclarations de variable sont destinées à remplacer ces déclarations de variable spécifiques à Sophia :
int sophiaSum = 0; decimal sophiaScore;Pour appliquer le nouveau nom de variable à l’équation utilisée pour additionner les notes des étudiants, mettez à jour votre bloc de code
foreachinterne comme suit :foreach (int score in studentScores) { // add the exam score to the sum sumAssignmentScores += score; }Pour appliquer le nouveau nom de variable à l’équation utilisée pour calculer la note moyenne, mettez à jour votre code comme suit :
currentStudentGrade = (decimal)(sumAssignmentScores) / currentAssignments;Prenez quelques instants pour passer en revue votre code.
int[] studentScores = new int[10]; foreach (string name in studentNames) { string currentStudent = name; if (currentStudent == "Sophia") studentScores = sophiaScores; else if (currentStudent == "Andrew") studentScores = andrewScores; else if (currentStudent == "Emma") studentScores = emmaScores; else if (currentStudent == "Logan") studentScores = loganScores; // initialize/reset the sum of scored assignments int sumAssignmentScores = 0; // initialize/reset the calculated average of exam + extra credit scores decimal currentStudentGrade = 0; foreach (int score in studentScores) { // add the exam score to the sum sumAssignmentScores += score; } currentStudentGrade = (decimal)(sumAssignmentScores) / currentAssignments; Console.WriteLine("Student\t\tGrade\n"); Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-"); }Vos boucles
foreachimbriquées vont maintenant itérer dans les noms des étudiants et utiliser leurs notes pour calculer leur note finale. Cependant, il vous faut encore mettre à jour le code utilisé pour générer le rapport de notation.Pour afficher le nom de l’étudiant et la note calculée dans la console, mettez à jour la deuxième instruction
Console.WriteLinecomme suit :Console.WriteLine($"{currentStudent}\t\t{currentStudentGrade}\t?");Notez que dans ce code, l’attribution d’une note finale sous forme de lettre a été remplacée par « ? ». Vous allez travailler sur l’automatisation de l’affectation des notes dans l’exercice suivant.
Déplacez l’instruction
Console.WriteLineutilisée pour écrire les étiquettes de colonne de votre rapport de notation vers l’emplacement situé juste au-dessus de la boucleforeachexterne.Pour éviter que les en-têtes de colonne se répètent pour les notes de chaque étudiant, vous déplacez ce code au-dessus de la boucle
foreachexterne.Dans le menu Fichier de Visual Studio Code, cliquez sur Enregistrer.
Prenez quelques instants pour passer en revue le code de votre application.
Votre application complète doit maintenant correspondre au code suivant :
// initialize variables - graded assignments int currentAssignments = 5; int[] sophiaScores = new int[] { 90, 86, 87, 98, 100 }; int[] andrewScores = new int[] { 92, 89, 81, 96, 90 }; int[] emmaScores = new int[] { 90, 85, 87, 98, 68 }; int[] loganScores = new int[] { 90, 95, 87, 88, 96 }; // Student names string[] studentNames = new string[] { "Sophia", "Andrew", "Emma", "Logan" }; int[] studentScores = new int[10]; // Write the Report Header to the console Console.WriteLine("Student\t\tGrade\n"); foreach (string name in studentNames) { string currentStudent = name; if (currentStudent == "Sophia") studentScores = sophiaScores; else if (currentStudent == "Andrew") studentScores = andrewScores; else if (currentStudent == "Emma") studentScores = emmaScores; else if (currentStudent == "Logan") studentScores = loganScores; // initialize/reset the sum of scored assignments int sumAssignmentScores = 0; // initialize/reset the calculated average of exam + extra credit scores decimal currentStudentGrade = 0; foreach (int score in studentScores) { // add the exam score to the sum sumAssignmentScores += score; } currentStudentGrade = (decimal)(sumAssignmentScores) / currentAssignments; Console.WriteLine($"{currentStudent}\t\t{currentStudentGrade}\t?"); }Le code qui génère le rapport de notation des étudiants a été mis à jour. Il est donc temps de vérifier votre travail.
Vérifier votre travail
Dans le cadre de cette tâche, vous allez exécuter l’application pour vérifier que votre logique de code fonctionne comme prévu.
Vérifiez que vous avez enregistré les modifications apportées au fichier Program.cs.
Dans l’affichage Explorateur de Visual Studio Code, cliquez avec le bouton droit sur Starter, puis sélectionnez Ouvrir dans le terminal intégré.
À l’invite de commandes du Terminal, tapez dotnet build, puis appuyez sur Entrée.
Si vous voyez des messages d’erreur ou d’avertissement, vous devez les corriger avant de continuer.
À l’invite de commandes du Terminal, tapez dotnet run, puis appuyez sur Entrée.
Vérifiez que votre code a produit la sortie suivante :
Student Grade Sophia 92.2 ? Andrew 89.6 ? Emma 85.6 ? Logan 91.2 ? Press the Enter key to continueDans le panneau TERMINAL, pour arrêter l’exécution de votre application, appuyez sur la touche Entrée.
Fermez le panneau du Terminal.
Félicitations, votre application est loin d’être là où vous avez commencé. Vous utilisez efficacement les tableaux et foreach les itérations, et vous avez intégré une if instruction qui permet à votre code de sélectionner le tableau de scores approprié.