Oefening: een geneste lusstructuur maken voor berekeningen van leerlingen/studenten

Voltooid

In deze oefening voegt u een tekenreeksmatrix toe om de namen van leerlingen/studenten vast te houden en implementeert u vervolgens een geneste foreach structuur die de namen van leerlingen/studenten doorloopt in een buitenste lus en scores van leerlingen/studenten in de binnenste lus. U begint met het samenstellen van de studentNames matrix en een foreach lus die door de matrixelementen wordt herhaald. Vervolgens verplaatst u de code die wordt gebruikt om de cijfers van Sophia te berekenen in het codeblok van de lus 'namen'. Ten slotte implementeert u de codelogica die gebruikmaakt van de naam van de leerling/student om toegang te krijgen tot hun scoresmatrix, hun gemiddelde score te berekenen en hun cijfer naar de console te schrijven. De gedetailleerde taken die u tijdens deze oefening hebt voltooid, zijn:

  1. Namenmatrix maken: Maak een matrix met namen van leerlingen/studenten.

  2. Een buitenste lus maken: maak een foreach lus die de namen van leerlingen/studenten doorloopt.

  3. Codeblok voor buitenste lus ontwikkelen: Verplaats de code die de score van Sophia berekent en rapporteert, waarbij deze in het codeblok van de lus 'namen' wordt geplaatst.

  4. Berekeningen en rapportage bijwerken: werk de code bij waarmee studentscoreberekeningen worden uitgevoerd met behulp van een nieuwe scoresmatrix.

Belangrijk

U moet de vorige oefening van deze module, 'Matrices en foreach-lussen maken' hebben voltooid voordat u met deze oefening begint.

Een matrix met namen van leerlingen/studenten en een buitenste foreachlus maken

In deze taak maakt u een matrix met namen van leerlingen/studenten en een foreach lus die de namen van leerlingen/studenten doorloopt.

  1. Zorg ervoor dat het Program.cs-bestand is geopend in de Visual Studio Code-editor.

  2. Schuif naar het begin van het codebestand en zoek de coderegels die worden gebruikt om de scoresmatrices te declareren.

  3. Maak een lege coderegel onder de declaratie van de scoresmatrices.

    De lege coderegel moet zich bevinden tussen de regels die worden gebruikt om de scoresmatrices en de regel te declareren sophiaSum.

  4. Als u een tekenreeksmatrix studentNames wilt maken met de namen van de leerlingen/studenten, voert u de volgende code in:

    // Student names
    string[] studentNames = new string[] { "Sophia", "Andrew", "Emma", "Logan" };
    

    U ziet dat u de namen van leerlingen/studenten hebt opgegeven als onderdeel van de declaratie.

  5. Als u een foreach instructie wilt maken waarmee u de namen van leerlingen/studenten kunt herhalen, voert u de volgende code in:

    foreach (string name in studentNames)
    {
    }
    
  6. Als u wilt controleren of de foreach lus door de studentNames matrix wordt herhaald zoals bedoeld, werkt u het codeblok van de foreach instructie als volgt bij:

    foreach (string name in studentNames)
    {
        Console.WriteLine($"{name}");
    
    }
    
  7. Neem even de tijd om de code te bekijken die u hebt gemaakt.

    // Student names
    string[] studentNames = new string[] { "Sophia", "Andrew", "Emma", "Logan" };
    
    foreach (string name in studentNames)
    {
        Console.WriteLine($"{name}");
    
    }
    

    Uw code gebruikt deze foreach lus als de buitenste lus van uw toepassing. Tijdens deze oefening implementeert u de volgende logica in uw toepassing:

    Voor elk van de leerlingen/studenten in de studentNames matrix zal uw toepassing het volgende doen:

    • de huidige student bepalen.
    • toegang tot de scores van de huidige leerling/student.
    • het cijfer van de huidige student berekenen (som en gemiddelde).
    • schrijf het cijfer van de huidige leerling/student naar de console.

    Op dit moment schrijft u echter alleen de namen van de leerlingen/studenten naar de console.

  8. Klik in het menu Visual Studio Code File op Opslaan.

  9. Klik in de visual Studio Code EXPLORER-weergave met de rechtermuisknop op Starter en selecteer Openen in geïntegreerde terminal.

    Belangrijk

    De Terminal-opdrachtprompt moet het mappad voor het Program.cs-bestand weergeven.

  10. Typ dotnet build bij de Terminal-opdrachtprompt en druk op Enter.

    Met dotnet build de opdracht wordt de compiler geïnstrueerd om de toepassing te bouwen. Als er fouten worden gedetecteerd, worden deze gerapporteerd.

  11. Als u foutberichten of waarschuwingen ziet, moet u deze oplossen voordat u doorgaat.

  12. Typ dotnet run bij de Terminal-opdrachtprompt en druk op Enter.

  13. Controleer of de code de volgende uitvoer heeft geproduceerd:

    Sophia
    Andrew
    Emma
    Logan
    Student         Grade
    
    Sophia:         92.2    A-
    Press the Enter key to continue
    

    Notitie

    Als u de lijst met namen van leerlingen/studenten boven het scorerapport van Sophia niet ziet, gaat u terug en controleert u of u de code correct hebt ingevoerd.

  14. Druk in het TERMINAL-deelvenster op Enter om de actieve toepassing te stoppen.

  15. Sluit het deelvenster Terminal.

De score van Sophia berekenen binnen de buitenste namenlus

In deze taak verplaatst u de code die de score van Sophia berekent en rapporteert, en plaatst u deze in het codeblok van de lus 'namen'.

  1. Zoek in de Visual Studio Code-editor de coderegels die worden gebruikt om het cijfer van Sophia te berekenen en te rapporteren.

    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-");
    

    Notitie

    De volgende stap is het verplaatsen van deze code van de huidige locatie naar het codeblok van de lus 'namen' foreach .

  2. Gebruik een knip-en-plakbewerking om de code te verplaatsen die het cijfer van Sophia berekent en rapporteert aan het codeblok van de lus 'namen' foreach .

    Als u niet zeker weet hoe u visual Studio Code kunt knippen en plakken, probeert u de methode die wordt beschreven in de volgende stappen:

    1. Selecteer de code die wordt gebruikt om het cijfer van Sophia te berekenen en te rapporteren.

      U kunt klikken en slepen om coderegels te selecteren.

    2. Selecteer Knippen in het menu Bewerken van Visual Studio Code.

    3. Plaats in de Visual Studio Code-editor de cursor op de lege coderegel onder de volgende code: Console.WriteLine($"{name}");

    4. Selecteer Plakken in het menu Bewerken van Visual Studio Code.

  3. Werk uw code bij om de juiste inspringing van de coderegel weer te geven.

    Aanbeveling

    Visual Studio Code biedt een Format Document opdracht die kan worden gebruikt om de codeopmaak bijgewerkt te houden. Klik met de rechtermuisknop in de Visual Studio Code-editor en selecteer Document opmaken in het pop-upmenu. Op Windows-computers is de sneltoets voor deze opdracht: Shift + Alt + F. Linux- en macOS-computers gebruiken indien nodig alternatieve sneltoetsen om conflicten met door het besturingssysteem geleverde snelkoppelingen te voorkomen.

  4. Zorg ervoor dat uw updates overeenkomen met de volgende code:

    // 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();
    

    U ziet dat uw code op dit moment de score van Sophia berekent en rapporteert, ongeacht de name huidige student. U gaat dat zo dadelijk aanpakken.

  5. Verwijder de volgende code:

    Console.WriteLine($"{name}");
    
  6. Voer op de lege coderegel die u zojuist hebt gemaakt de volgende code in:

    if (name == "Sophia")
    {    
    
  7. Maak een lege coderegel na de code die wordt gebruikt om Sophia's cijfer naar de console te schrijven.

  8. Voer de volgende code in om het codeblok van de if instructie te sluiten:

    }    
    
  9. Werk uw code bij om de juiste inspringing van de coderegel weer te geven.

    Aanbeveling

    Gebruik de Format Document opdracht om de codeopmaak bijgewerkt te houden. Klik met de rechtermuisknop in het deelvenster Visual Studio Code Editor en selecteer Document opmaken in het pop-upmenu.

  10. Neem even de tijd om uw code te controleren.

    Uw code moet overeenkomen met de volgende code:

    // 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();
    

    U ziet dat de if instructie in het buitenste foreach codeblok de limieten voor het cijfer van de leerling/student heeft berekend en gerapporteerd. Dit is niet precies wat u nodig hebt, maar het is een stap in de juiste richting.

  11. Klik in het menu Visual Studio Code File op Opslaan.

  12. Klik in de visual Studio Code EXPLORER-weergave met de rechtermuisknop op Starter en selecteer Openen in geïntegreerde terminal.

    Belangrijk

    De Terminal-opdrachtprompt moet het mappad voor het Program.cs-bestand weergeven.

  13. Typ dotnet build bij de Terminal-opdrachtprompt en druk op Enter.

    Met dotnet build de opdracht wordt de compiler geïnstrueerd om de toepassing te bouwen. Als er fouten worden gedetecteerd, worden deze gerapporteerd.

  14. Als u foutberichten of waarschuwingen ziet, moet u deze oplossen voordat u doorgaat.

  15. Typ dotnet run bij de Terminal-opdrachtprompt en druk op Enter.

  16. Controleer of de code de volgende uitvoer heeft geproduceerd:

    Student         Grade
    
    Sophia:         92.2    A-
    

    Notitie

    Als u nog steeds de lijst met namen van leerlingen/studenten ziet die boven het scorerapport van Sophia worden weergegeven, controleert u of u uw updates hebt opgeslagen.

  17. Druk in het TERMINAL-deelvenster op Enter om de actieve toepassing te stoppen.

  18. Sluit het deelvenster Terminal.

De geneste lus bijwerken om alle scores van leerlingen/studenten te berekenen

In deze taak werkt u de code bij waarmee studentscoreberekeningen worden uitgevoerd met behulp van een nieuwe scoresmatrix. U begint met het maken van een matrix met de naam studentScores die kan worden gebruikt om de scores van elke leerling/student te bewaren. Vervolgens maakt u een if .. elseif constructie die gebruikmaakt van de naam van de huidige leerling/student om de scoresmatrix toe te wijzen aan studentScores. Ten slotte werkt u de code bij waarmee de cijfers van de leerling/student worden berekend en gerapporteerd. Wanneer u klaar bent, moet het rapport de naam en de numerieke score voor alle leerlingen/studenten bevatten.

  1. Maak een lege coderegel onder de declaratie van de studentNames matrix.

    De lege regel moet boven de buitenste foreach instructie staan.

  2. Als u een matrix met gehele getallen wilt maken die u kunt gebruiken om de scores van de huidige student vast te houden, voert u de volgende code in:

    int[] studentScores = new int[10];
    
    

    U ziet dat met deze code op dit moment geen waarden worden toegewezen aan de matrix. U geeft gewoon op dat de matrix 10 elementen kan bevatten.

  3. Maak een lege coderegel boven aan het buitenste foreach codeblok.

    De lege regel moet zich in het foreach codeblok en boven de if instructie die evalueert of name gelijk is aan Sophia.

  4. Als u een tekenreeksvariabele wilt maken die wordt gebruikt om de naam van de huidige student op te geven, voert u de volgende code in:

    string currentStudent = name;
    
    

    Notitie

    U kunt de naam van de huidige leerling/student blijven gebruiken terwijl u de namenmatrix doorloopt, maar door deze te gebruiken namecurrentStudent , kunt u uw codelogica gemakkelijker begrijpen terwijl u uw toepassing in de komende stappen uitbouwt.

  5. Als u wilt vervangen currentStudentname door de if instructie die evalueert of name deze gelijk is aan Sophia, werkt u uw code als volgt bij:

    if (currentStudent == "Sophia")
    
  6. Verplaats de code die de score van Sophia berekent en rapporteert naar een locatie onder het codeblok.

    U verplaatst alle code in het codeblok naar een locatie onder het codeblok. De reden hiervoor wordt tijdens de volgende stappen duidelijk.

  7. Controleer of de code in het buitenste foreach codeblok overeenkomt met de volgende code:

    {
        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. Als u de sophiaScores matrix wilt toewijzen aan studentScores wanneer currentStudent == "Sophia", werkt u de if instructiecode als volgt bij:

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

    U ziet dat u de accolades uit het if instructiecodeblok hebt verwijderd tijdens deze code-update.

  9. Als u een else if instructie wilt toevoegen waaraan de andrewScores matrix studentScores wordt toegewezen wanneer currentStudent == "Andrew", voert u de volgende code in:

    else if (currentStudent == "Andrew")
        studentScores = andrewScores;
    
    
  10. Maak een andere else if instructie om de emmaScores matrix toe te wijzen aan studentScores wanneer currentStudent == "Emma".

  11. Maak een else if instructie om de loganScores matrix toe te wijzen aan studentScores wanneer currentStudent == "Logan".

  12. Zorg ervoor dat uw foreach codeblok overeenkomt met de volgende code:

    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-");
    
    }
    

    Vervolgens moet u de binnenste foreach lus bijwerken om de variabelen die u in uw berekeningen gebruikt te gebruiken studentScores en depersonaliseren.

  13. Als u wilt vervangen studentScoressophiaScores door de foreach lus die door de scoresmatrix wordt herhaald, werkt u de code als volgt bij:

    foreach (int score in studentScores)
    
  14. Als u de declaraties van Sophia-specifieke variabelen wilt vervangen door algemenere namen, werkt u uw code als volgt bij:

    int sumAssignmentScores = 0;
    
    decimal currentStudentGrade = 0;
    

    Deze twee variabeledeclaraties zijn bedoeld om de volgende Sophia-specifieke variabeledeclaraties te vervangen:

    int sophiaSum = 0;
    
    decimal sophiaScore;
    
  15. Als u de nieuwe variabelenaam wilt toepassen op de vergelijking die wordt gebruikt voor het optellen van scores van leerlingen/studenten, werkt u het interne foreach codeblok als volgt bij:

    foreach (int score in studentScores)
    {
        // add the exam score to the sum
        sumAssignmentScores += score;
    }
    
  16. Als u de nieuwe variabelenaam wilt toepassen op de vergelijking die wordt gebruikt om de gemiddelde score te berekenen, werkt u de code als volgt bij:

    currentStudentGrade = (decimal)(sumAssignmentScores) / currentAssignments;
    
  17. Neem even de tijd om uw code te controleren.

    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-");
    
    }
    

    Uw geneste foreach lussen doorlopen nu de namen van leerlingen/studenten en gebruiken de scores van de leerling/student om hun cijfers te berekenen, maar u moet de code die wordt gebruikt om het scorerapport te genereren, bijwerken.

  18. Als u de naam van de leerling/student en de berekende score wilt afdrukken naar de console, werkt u de tweede Console.WriteLine instructie als volgt bij:

    Console.WriteLine($"{currentStudent}\t\t{currentStudentGrade}\t?");
    

    U ziet dat deze code de cijfertoewijzing voor letters heeft vervangen door een '?'. In de volgende oefening gaat u werken aan het automatiseren van het toekennen van lettercijfers.

  19. Verplaats de Console.WriteLine instructie die wordt gebruikt om de kolomlabels van uw scorerapport naar de locatie net boven de buitenste foreach lus te schrijven.

    U wilt de kolomkoppen voor elke studentscore niet herhalen, dus verplaatst u deze code naar een punt boven de buitenste foreach lus.

  20. Klik in het menu Visual Studio Code File op Opslaan.

  21. Neem even de tijd om uw toepassingscode te controleren.

    Uw volledige toepassing moet nu overeenkomen met de volgende code:

    // 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?");
    }
    

    Met de code waarmee het scorerapport van de leerling/student wordt gegenereerd, bijgewerkt; het lijkt erop dat u klaar bent om uw werk te controleren.

Controleer uw werk

In deze taak voert u de toepassing uit om te controleren of uw codelogica werkt zoals verwacht.

  1. Zorg ervoor dat u de wijzigingen in het Program.cs-bestand hebt opgeslagen.

  2. Klik in de visual Studio Code EXPLORER-weergave met de rechtermuisknop op Starter en selecteer Openen in geïntegreerde terminal.

  3. Typ dotnet build bij de Terminal-opdrachtprompt en druk op Enter.

  4. Als u foutberichten of waarschuwingen ziet, moet u deze oplossen voordat u doorgaat.

  5. Typ dotnet run bij de Terminal-opdrachtprompt en druk op Enter.

  6. Controleer of de code de volgende uitvoer heeft geproduceerd:

    Student         Grade
    
    Sophia          92.2    ?
    Andrew          89.6    ?
    Emma            85.6    ?
    Logan           91.2    ?
    Press the Enter key to continue
    
  7. Druk in het TERMINAL-deelvenster op Enter om de actieve toepassing te stoppen.

  8. Sluit het deelvenster Terminal.

Gefeliciteerd, uw toepassing is al heel ver weg van waar u bent begonnen. U maakt efficiënt gebruik van matrices en foreach iteraties en u hebt een if instructie geïntegreerd waarmee uw code de juiste scoresmatrix kan selecteren.