Exercice - Construire une structure de boucles imbriquées pour les calculs de note finale des étudiants

Effectué

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 :

  1. Créer un tableau de noms : créer un tableau contenant les noms des étudiants

  2. Créer une boucle externe : créer une boucle foreach qui itère dans les noms des étudiants

  3. Dé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 »

  4. 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.

  1. Vérifiez que le fichier Program.cs est ouvert dans l’éditeur de Visual Studio Code.

  2. Faites défiler votre code jusqu’en haut, puis recherchez les lignes de code utilisées pour déclarer les tableaux de notes.

  3. 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.

  4. Pour créer un tableau de chaînes nommé studentNames contenant 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.

  5. Pour créer une instruction foreach permettant d’itérer dans les noms des étudiants, entrez le code suivant :

    foreach (string name in studentNames)
    {
    }
    
  6. Pour vérifier que votre boucle foreach itère dans le tableau studentNames comme prévu, mettez à jour le bloc de code de l’instruction foreach comme suit :

    foreach (string name in studentNames)
    {
        Console.WriteLine($"{name}");
    
    }
    
  7. 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 foreach comme 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.

  8. Dans le menu Fichier de Visual Studio Code, cliquez sur Enregistrer.

  9. 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.

  10. À l’invite de commandes du Terminal, tapez dotnet build, puis appuyez sur Entrée.

    La commande dotnet build indique au compilateur de générer l’application. Si des erreurs sont détectées, elles sont signalées.

  11. Si vous voyez des messages d’erreur ou d’avertissement, vous devez les corriger avant de continuer.

  12. À l’invite de commandes du Terminal, tapez dotnet run, puis appuyez sur Entrée.

  13. 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 continue
    

    Notes

    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.

  14. Dans le panneau TERMINAL, pour arrêter l’exécution de votre application, appuyez sur la touche Entrée.

  15. 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 ».

  1. 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.

  2. 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 :

    1. 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.

    2. Dans le menu Édition de Visual Studio Code, sélectionnez Couper.

    3. Dans l’éditeur de Visual Studio Code, positionnez le curseur sur la ligne de code vide sous le code suivant : Console.WriteLine($"{name}");

    4. Dans le menu Édition de Visual Studio Code, sélectionnez Coller.

  3. Mettez à jour votre code pour afficher correctement la mise en retrait des lignes de code.

    Conseil

    Visual Studio Code offre une commande Format Document qui 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.

  4. 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 name de l’étudiant actuel. Vous allez vous en occuper bientôt.

  5. Supprimez le code suivant :

    Console.WriteLine($"{name}");
    
  6. Sur la ligne de code vide que vous venez de créer, entrez le code suivant :

    if (name == "Sophia")
    {    
    
  7. Créez une ligne de code vide après le code utilisé pour écrire la note finale de Sophia dans la console.

  8. Pour fermer le bloc de code de l’instruction if, entrez le code suivant :

    }    
    
  9. Mettez à jour votre code pour afficher correctement la mise en retrait des lignes de code.

    Conseil

    Utilisez la commande Format Document pour 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.

  10. 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 if dans votre bloc de code foreach externe 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.

  11. Dans le menu Fichier de Visual Studio Code, cliquez sur Enregistrer.

  12. 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.

  13. À l’invite de commandes du Terminal, tapez dotnet build, puis appuyez sur Entrée.

    La commande dotnet build indique au compilateur de générer l’application. Si des erreurs sont détectées, elles sont signalées.

  14. Si vous voyez des messages d’erreur ou d’avertissement, vous devez les corriger avant de continuer.

  15. À l’invite de commandes du Terminal, tapez dotnet run, puis appuyez sur Entrée.

  16. 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.

  17. Dans le panneau TERMINAL, pour arrêter l’exécution de votre application, appuyez sur la touche Entrée.

  18. 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.

  1. 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 foreach externe.

  2. 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.

  3. Créez une ligne de code vide en haut du bloc de code foreach externe.

    La ligne vide doit se trouver à l’intérieur du bloc de code foreach et au-dessus de l’instruction if qui détermine si name est égal à Sophia.

  4. 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 name pour suivre le nom de l’étudiant actuel à mesure que vous itérez dans le tableau de noms. Cependant, l’utilisation de currentStudent permettra de mieux comprendre votre logique de code pour les prochaines étapes de développement de votre application.

  5. Pour remplacer currentStudent par name dans l’instruction if qui détermine si name est égal à Sophia, mettez à jour votre code comme suit :

    if (currentStudent == "Sophia")
    
  6. 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.

  7. Vérifiez que le code de votre bloc de code foreach externe 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-");
    
    }
    
  8. Pour attribuer le tableau sophiaScores à studentScores quand currentStudent == "Sophia", mettez à jour le code de votre instruction if comme suit :

    if (currentStudent == "Sophia")
        studentScores = sophiaScores;
    
    

    Notez que vous avez supprimé les accolades du bloc de code de l’instruction if dans le cadre de cette mise à jour du code.

  9. Pour ajouter une instruction else if qui attribue le tableau andrewScores à studentScores quand currentStudent == "Andrew", entrez le code suivant :

    else if (currentStudent == "Andrew")
        studentScores = andrewScores;
    
    
  10. Créez une autre instruction else if pour attribuer le tableau emmaScores à studentScores quand currentStudent == "Emma".

  11. Créez une instruction else if pour attribuer le tableau loganScores à studentScores quand currentStudent == "Logan".

  12. Vérifiez que votre bloc de code foreach correspond 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 foreach interne pour utiliser studentScores et « dépersonnaliser » les variables que vous utilisez dans vos calculs.

  13. Pour remplacer studentScores par sophiaScores dans la boucle foreach qui itère dans le tableau de notes, mettez à jour votre code comme suit :

    foreach (int score in studentScores)
    
  14. 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;
    
  15. Pour appliquer le nouveau nom de variable à l’équation utilisée pour additionner les notes des étudiants, mettez à jour votre bloc de code foreach interne comme suit :

    foreach (int score in studentScores)
    {
        // add the exam score to the sum
        sumAssignmentScores += score;
    }
    
  16. 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;
    
  17. 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 foreach imbriqué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.

  18. Pour afficher le nom de l’étudiant et la note calculée dans la console, mettez à jour la deuxième instruction Console.WriteLine comme 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.

  19. Déplacez l’instruction Console.WriteLine utilisée pour écrire les étiquettes de colonne de votre rapport de notation vers l’emplacement situé juste au-dessus de la boucle foreach externe.

    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 foreach externe.

  20. Dans le menu Fichier de Visual Studio Code, cliquez sur Enregistrer.

  21. 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.

  1. Vérifiez que vous avez enregistré les modifications apportées au fichier Program.cs.

  2. Dans l’affichage Explorateur de Visual Studio Code, cliquez avec le bouton droit sur Starter, puis sélectionnez Ouvrir dans le terminal intégré.

  3. À l’invite de commandes du Terminal, tapez dotnet build, puis appuyez sur Entrée.

  4. Si vous voyez des messages d’erreur ou d’avertissement, vous devez les corriger avant de continuer.

  5. À l’invite de commandes du Terminal, tapez dotnet run, puis appuyez sur Entrée.

  6. 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 continue
    
  7. Dans le panneau TERMINAL, pour arrêter l’exécution de votre application, appuyez sur la touche Entrée.

  8. 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é.