Cvičení – vytvoření struktury vnořené smyčky pro výpočty známek studentů

Dokončeno

V tomto cvičení přidáte pole řetězců pro uložení jmen studentů a poté implementujete vnořenou strukturu foreach, která prochází jména studentů ve vnější smyčce a skóre studentů ve vnitřní smyčce. Začnete vytvořením studentNames pole a smyčky foreach , která prochází prvky pole. V dalším kroku přesunete kód používaný k výpočtu známek Sophii do bloku kódu smyčky "names". Nakonec implementujete logiku kódu, která používá jméno studenta pro přístup k poli skóre, výpočet průměrného skóre a zápis známek do konzoly. Podrobné úkoly, které jste dokončili během tohoto cvičení, jsou:

  1. Vytvoření pole názvů: Vytvořte pole jmen studentů.

  2. Vytvořit vnější smyčku: Vytvořte smyčku foreach , která iteruje jména studentů.

  3. Vývoj bloku kódu vnější smyčky: Přemísťuje kód, který vypočítá a hlásí skóre Sophia, a umístí ho do bloku kódu smyčky "names".

  4. Aktualizace výpočtů a vytváření sestav: Aktualizujte kód, který provádí výpočty skóre studentů pomocí nového pole skóre.

Důležité

Před zahájením tohoto cvičení musíte dokončit předchozí cvičení "Vytvoření polí a smyčky foreach".

Vytvoření pole jmen studentů a vnější smyčky foreach

V tomto úkolu vytvoříte pole jmen studentů a smyčku foreach , která iteruje jména studentů.

  1. Ujistěte se, že máte otevřený soubor Program.cs v editoru visual Studio Code.

  2. Posuňte se na začátek souboru kódu a vyhledejte řádky kódu, které se používají k deklaraci polí skóre.

  3. Pod deklarací polí skóre vytvořte prázdný řádek kódu.

    Prázdný řádek kódu by měl být umístěn mezi řádky použitými k deklaraci polí skóre a řádku použitého k deklaraci sophiaSum.

  4. Pokud chcete vytvořit pole studentNames řetězců, které obsahuje jména studentů, zadejte následující kód:

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

    Všimněte si, že jste zadali jména studentů jako součást deklarace.

  5. Pokud chcete vytvořit foreach příkaz, který můžete použít k iteraci jmen studentů, zadejte následující kód:

    foreach (string name in studentNames)
    {
    }
    
  6. Pokud chcete ověřit, že smyčka foreach prochází studentNames polem podle očekávání, aktualizujte blok foreach kódu příkazu následujícím způsobem:

    foreach (string name in studentNames)
    {
        Console.WriteLine($"{name}");
    
    }
    
  7. Projděte si kód, který jste vytvořili, chvilku.

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

    Váš kód použije tuto foreach smyčku jako vnější smyčku vaší aplikace. V tomto cvičení implementujete ve své aplikaci následující logiku:

    Pro každého ze studentů v studentNames poli bude vaše aplikace:

    • určit aktuálního studenta.
    • přístup k skóre aktuálního studenta.
    • vypočítat známku aktuálního studenta (součet a průměr).
    • napište do konzoly známku aktuálního studenta.

    Prozatím ale stačí napsat jména studentů do konzoly.

  8. V nabídce Soubor editoru Visual Studio Code klepněte na tlačítko Uložit.

  9. V zobrazení Průzkumníka editoru Visual Studio Code klikněte pravým tlačítkem myši na Starter a pak vyberte Otevřít v integrovaném terminálu.

    Důležité

    Příkazový řádek terminálu musí obsahovat cestu ke složce pro váš Program.cs soubor.

  10. Na příkazovém řádku terminálu zadejte dotnet build a stiskněte Enter.

    Příkaz dotnet build dává kompilátoru pokyn k sestavení aplikace. Pokud se zjistí nějaké chyby, budou hlášeny.

  11. Pokud se zobrazí chybové nebo upozorňující zprávy, musíte je před pokračováním opravit.

  12. Na příkazovém řádku terminálu zadejte příkaz dotnet run a stiskněte Enter.

  13. Ověřte, že váš kód vytvořil následující výstup:

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

    Poznámka:

    Pokud seznam jmen studentů nad sestavou skóre Sophia nevidíte, vraťte se a ověřte, že jste kód zadali správně.

  14. Na panelu TERMINÁL zastavte spuštěnou aplikaci stisknutím klávesy Enter.

  15. Zavřete panel Terminálu.

Výpočet skóre Sophia uvnitř smyčky vnějších názvů

V tomto úkolu přemístíte kód, který vypočítá a hlásí skóre Sophia, a umístíte ho do bloku kódu smyčky "names".

  1. V editoru Visual Studio Code vyhledejte řádky kódu, které se používají k výpočtu a hlášení známky 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-");
    

    Poznámka:

    Dalším krokem bude přesunutí tohoto kódu z jeho aktuálního umístění do bloku kódu smyčky "names" foreach .

  2. Pomocí operace vyjmutí a vložení přesuňte kód, který vypočítá a hlásí známky Sophia do bloku kódu smyčky "names" foreach .

    Pokud si nejste jistí, jak v editoru Visual Studio Code vyjmout a vložit, zkuste použít postup popsaný v následujících krocích:

    1. Vyberte kód, který se používá k výpočtu a hlášení známky Sophia.

      Kliknutím a přetažením můžete vybrat řádky kódu.

    2. V nabídce Úpravy editoru Visual Studio Code vyberte Vyjmout.

    3. V editoru Visual Studio Code umístěte kurzor na prázdný řádek kódu pod následujícím kódem: Console.WriteLine($"{name}");

    4. V nabídce Úpravy editoru Visual Studio Code vyberte Vložit.

  3. Aktualizujte kód tak, aby zobrazoval správné odsazení řádku kódu.

    Návod

    Visual Studio Code poskytuje Format Document příkaz, který se dá použít k aktualizaci formátování kódu. Klikněte pravým tlačítkem myši do editoru Visual Studio Code a v místní nabídce vyberte Formát dokumentu. Na počítačích s Windows je klávesová zkratka pro tento příkaz: Shift + Alt + F. Počítače s Linuxem a macOS používají v případě potřeby alternativní klávesové zkratky, aby nedocházelo ke konfliktům se zadanými zástupci operačního systému.

  4. Ujistěte se, že aktualizace odpovídají následujícímu kódu:

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

    Všimněte si, že v tomto okamžiku bude váš kód počítat a hlásit skóre Sophia bez name ohledu na aktuální studenta. Za chvíli to vyřešíte.

  5. Odstraňte následující kód:

    Console.WriteLine($"{name}");
    
  6. Na prázdný řádek kódu, který jste právě vytvořili, zadejte následující kód:

    if (name == "Sophia")
    {    
    
  7. Vytvořte prázdný řádek kódu za kódem, který se používá k psaní známky Sophia do konzoly.

  8. Pokud chcete zavřít blok if kódu příkazu, zadejte následující kód:

    }    
    
  9. Aktualizujte kód tak, aby zobrazoval správné odsazení řádku kódu.

    Návod

    Format Document Pomocí příkazu můžete zachovat aktualizované formátování kódu. Klikněte pravým tlačítkem myši na panel Editoru sady Visual Studio a v místní nabídce vyberte Formát dokumentu.

  10. Než si kód prohlédnou, udělejte si chvilku.

    Váš kód by měl odpovídat následujícímu kódu:

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

    Všimněte si, že if příkaz uvnitř bloku vnějšího foreach kódu omezuje, které známky studenta se vypočítá a ohlásí. To není přesně to, co potřebujete, ale je to krok ve správném směru.

  11. V nabídce Soubor editoru Visual Studio Code klepněte na tlačítko Uložit.

  12. V zobrazení Průzkumníka editoru Visual Studio Code klikněte pravým tlačítkem myši na Starter a pak vyberte Otevřít v integrovaném terminálu.

    Důležité

    Příkazový řádek terminálu musí obsahovat cestu ke složce pro váš Program.cs soubor.

  13. Na příkazovém řádku terminálu zadejte dotnet build a stiskněte Enter.

    Příkaz dotnet build dává kompilátoru pokyn k sestavení aplikace. Pokud se zjistí nějaké chyby, budou hlášeny.

  14. Pokud se zobrazí chybové nebo upozorňující zprávy, musíte je před pokračováním opravit.

  15. Na příkazovém řádku terminálu zadejte příkaz dotnet run a stiskněte Enter.

  16. Ověřte, že váš kód vytvořil následující výstup:

    Student         Grade
    
    Sophia:         92.2    A-
    

    Poznámka:

    Pokud se stále zobrazuje seznam jmen studentů zobrazených nad sestavou skóre Sophia, ujistěte se, že jste si uložili aktualizace.

  17. Na panelu TERMINÁL zastavte spuštěnou aplikaci stisknutím klávesy Enter.

  18. Zavřete panel Terminálu.

Aktualizace vnořené smyčky pro výpočet všech skóre studentů

V tomto úkolu aktualizujete kód, který provádí výpočty skóre studentů pomocí nového pole skóre. Začnete vytvořením pole s názvem studentScores , které se dá použít k uchování skóre libovolného studenta. Dále vytvoříte if .. elseif konstruktor, který použije jméno aktuálního studenta k přiřazení pole skóre.studentScores Nakonec aktualizujete kód, který počítá a podává zprávy o známkách studenta. Po dokončení by sestava měla obsahovat jméno a číselné skóre pro všechny studenty.

  1. Pod deklarací studentNames pole vytvořte prázdný řádek kódu.

    Prázdný řádek by měl být nad vnějším foreach příkazem.

  2. Chcete-li vytvořit celočíselné pole, které můžete použít k uchování skóre aktuálního studenta, zadejte následující kód:

    int[] studentScores = new int[10];
    
    

    Všimněte si, že tento kód v tomto okamžiku nepřiřazuje k poli žádné hodnoty. Jednoduše určíte, že pole může obsahovat 10 prvků.

  3. Vytvořte prázdný řádek kódu v horní části vnějšího foreach bloku kódu.

    Prázdný řádek by měl být uvnitř foreach bloku kódu a nad if příkazem, který vyhodnocuje, jestli name se rovná Sophia.

  4. Pokud chcete vytvořit řetězcovou proměnnou, která se použije k uložení jména aktuálního studenta, zadejte následující kód:

    string currentStudent = name;
    
    

    Poznámka:

    Při iteraci v matici názvů můžete dál sledovat name jméno aktuálního studenta, ale použití currentStudent vám usnadní pochopení logiky kódu při sestavování aplikace v nadcházejících krocích.

  5. Chcete-li nahradit currentStudentname v if příkazu, který vyhodnotí, zda name je rovna Sophia, aktualizujte kód následujícím způsobem:

    if (currentStudent == "Sophia")
    
  6. Přesuňte kód, který počítá a hlásí skóre Sophia, do umístění pod blokem kódu.

    Přesouváte veškerý kód, který je v bloku kódu, do umístění pod blokem kódu. Důvod, proč to udělat, se projeví během několika dalších kroků.

  7. Ověřte, že kód ve vnějším foreach bloku kódu odpovídá následujícímu kódu:

    {
        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. Chcete-li přiřadit sophiaScores pole k studentScores when currentStudent == "Sophia", aktualizujte if kód příkazu následujícím způsobem:

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

    Všimněte si, že jste během této aktualizace kódu příkazu odebrali složené závorky z if bloku kódu příkazu.

  9. Chcete-li přidat else if příkaz, který přiřazuje andrewScores pole, studentScorescurrentStudent == "Andrew"zadejte následující kód:

    else if (currentStudent == "Andrew")
        studentScores = andrewScores;
    
    
  10. Vytvořte další else if příkaz pro přiřazení emmaScores pole when studentScorescurrentStudent == "Emma".

  11. Vytvořte příkaz else if pro přiřazení loganScores pole k studentScorescurrentStudent == "Logan"when .

  12. Ujistěte se, že blok foreach kódu odpovídá následujícímu kódu:

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

    Dále je potřeba aktualizovat vnitřní foreach smyčku tak, aby používala studentScores a "depersonalizovat" proměnné, které používáte ve výpočtech.

  13. Pokud chcete nahradit studentScoressophiaScores ve foreach smyčce, která prochází polem skóre, aktualizujte kód následujícím způsobem:

    foreach (int score in studentScores)
    
  14. Pokud chcete nahradit deklarace proměnných specifických pro Sophia obecnějšími názvy, aktualizujte kód následujícím způsobem:

    int sumAssignmentScores = 0;
    
    decimal currentStudentGrade = 0;
    

    Tyto dvě deklarace proměnných jsou určeny k nahrazení následujících deklarací proměnných specifických pro Sophia:

    int sophiaSum = 0;
    
    decimal sophiaScore;
    
  15. Pokud chcete nový název proměnné použít na rovnici použitou k sumarizačnímu skóre studentů, aktualizujte vnitřní foreach blok kódu následujícím způsobem:

    foreach (int score in studentScores)
    {
        // add the exam score to the sum
        sumAssignmentScores += score;
    }
    
  16. Pokud chcete pro rovnici použitou k výpočtu průměrného skóre použít nový název proměnné, aktualizujte kód následujícím způsobem:

    currentStudentGrade = (decimal)(sumAssignmentScores) / currentAssignments;
    
  17. Než si kód prohlédnou, udělejte si chvilku.

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

    Vaše vnořené foreach smyčky teď iterují jména studentů a k výpočtu známek používají skóre studenta, ale stále potřebujete aktualizovat kód použitý k vygenerování sestavy skóre.

  18. Pokud chcete vytisknout jméno studenta a počítané skóre do konzoly, aktualizujte druhý Console.WriteLine příkaz následujícím způsobem:

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

    Všimněte si, že tento kód nahradil zadání známky písmenem "?". V dalším cvičení budete pracovat na automatizaci udělování známek.

  19. Console.WriteLine Přesuňte příkaz, který se používá k napsání popisků sloupců sestavy skóre, do umístění těsně nad vnější foreach smyčkou.

    Nechcete opakovat záhlaví sloupců pro každé skóre studenta, takže tento kód přesunete na bod nad vnější foreach smyčkou.

  20. V nabídce Soubor editoru Visual Studio Code klepněte na tlačítko Uložit.

  21. Než si prohlédnou kód aplikace, udělejte si chvilku.

    Vaše úplná aplikace by teď měla odpovídat následujícímu kódu:

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

    S kódem, který vygeneruje sestavu skóre studenta, se aktualizuje; zdá se, že jste připraveni zkontrolovat svou práci.

Kontrola práce

V této úloze spustíte aplikaci, abyste ověřili, že logika kódu funguje podle očekávání.

  1. Ujistěte se, že jste změny uložili do souboru Program.cs.

  2. V zobrazení Průzkumníka editoru Visual Studio Code klikněte pravým tlačítkem myši na Starter a pak vyberte Otevřít v integrovaném terminálu.

  3. Na příkazovém řádku terminálu zadejte dotnet build a stiskněte Enter.

  4. Pokud se zobrazí chybové nebo upozorňující zprávy, musíte je před pokračováním opravit.

  5. Na příkazovém řádku terminálu zadejte příkaz dotnet run a stiskněte Enter.

  6. Ověřte, že váš kód vytvořil následující výstup:

    Student         Grade
    
    Sophia          92.2    ?
    Andrew          89.6    ?
    Emma            85.6    ?
    Logan           91.2    ?
    Press the Enter key to continue
    
  7. Na panelu TERMINÁL zastavte spuštěnou aplikaci stisknutím klávesy Enter.

  8. Zavřete panel Terminálu.

Blahopřejeme, vaše aplikace ušla dlouhou cestu od začátku. Efektivně používáte pole a foreach iterace a jste integrovali příkaz if, který vašemu kódu umožňuje vybrat správné pole skóre.