Exerciții - Construiți o structură de buclă imbricată pentru calculele notelor elevilor/studenților

Finalizat

În acest exercițiu, adăugați o matrice de șiruri pentru a conține numele elevilor/studenților, apoi implementați o structură imbricată foreach care iterează numele elevilor/studenților într-o buclă exterioară și punctajele elevilor/studenților în bucla internă. Începeți prin a construi matricea studentNames și o foreach buclă care iterează prin elementele matricei. În continuare, mutați codul utilizat pentru a calcula notele Sophia în blocul de cod al buclei "nume". În sfârșit, implementați logica de cod care utilizează numele elevului/studentului pentru a-și accesa matricea de punctaje, a calcula punctajul mediu și a scrie nota pe consolă. Activitățile detaliate pe care le efectuați în timpul acestui exercițiu sunt:

  1. Creare matrice de nume: Creați o matrice de nume de elevi/studenți.

  2. Creați o buclă exterioară: creați o foreach buclă pe care o iterează prin numele elevilor/studenților.

  3. Dezvoltați blocul de cod buclă exterioară: Repoziționați codul care calculează și raportează scorul Sophia, plasându-l în blocul de cod al buclei "nume".

  4. Actualizare calcule și raportare: Actualizați codul care efectuează calcule de punctaj pentru elevi/studenți utilizând o matrice nouă de punctaje.

Importantă

Trebuie să fi finalizat exercițiul anterior al acestui modul, "Creați matrice și bucle de prim-rând", înainte de a începe acest exercițiu.

Crearea unei matrice de nume de elevi/studenți și buclă exterioară

În această activitate, veți crea o matrice de nume de elevi/studenți și o foreach buclă care iterează numele elevilor/studenților.

  1. Asigurați-vă că aveți fișierul Program.cs deschis în Visual Studio Code Editor.

  2. Defilați în partea de sus a fișierului de cod, apoi găsiți liniile de cod utilizate pentru a declara matricele de punctaje.

  3. Creați o linie de cod necompletată sub declarația matricelor de punctaje.

    Linia de cod necompletată ar trebui să se afle între liniile utilizate pentru a declara matricele de punctaje și linia utilizată pentru a declara sophiaSum.

  4. Pentru a crea o matrice de șiruri denumită studentNames care conține numele elevilor/studenților, introduceți următorul cod:

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

    Observați că ați specificat numele elevilor/studenților ca parte a declarației.

  5. Pentru a crea o foreach instrucțiune pe care o puteți utiliza pentru a itera numele elevilor/studenților, introduceți următorul cod:

    foreach (string name in studentNames)
    {
    }
    
  6. Pentru a verifica dacă bucla parcurge matricea foreach așa cum intenționați, actualizați studentNames blocul de cod al instrucțiunii foreach după cum urmează:

    foreach (string name in studentNames)
    {
        Console.WriteLine($"{name}");
    
    }
    
  7. Citiți codul pe care l-ați creat.

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

    Codul dvs. va utiliza această foreach buclă ca buclă exterioară a aplicației. În timpul acestui exercițiu, veți implementa următoarea logică în aplicația dvs.:

    Pentru fiecare dintre elevii/studenții din studentNames matrice, aplicația dvs. va:

    • determinați elevul/studentul curent.
    • să acceseze punctajele elevilor/studenților actuali.
    • calculați nota curentă a elevilor/studenților (suma și media).
    • scrieți nota studentului curent pe consolă.

    Deocamdat, veți scrie numele elevilor/studenților pe consolă.

  8. În meniul Fișier cod Visual Studio, faceți clic pe Salvare.

  9. În vizualizarea Visual Studio Code EXPLORER, faceți clic dreapta pe Starter, apoi selectați Deschidere în Terminal integrat.

    Importantă

    Linia de comandă Terminal trebuie să afișeze calea folderului pentru fișierul Program.cs.

  10. În linia de comandă Terminal, tastați compilare dotnet , apoi apăsați pe Enter.

    Comanda dotnet build instruiește compilatorul să construiască aplicația. Dacă sunt detectate erori, acestea vor fi raportate.

  11. Dacă vedeți Mesaje de eroare sau Avertisment, trebuie să le remediați înainte de a continua.

  12. În linia de comandă Terminal, tastați run dotnet , apoi apăsați pe Enter.

  13. Verificați dacă codul dvs. a produs următoarea ieșire:

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

    Notă

    Dacă nu vedeți lista de nume de elevi/studenți deasupra raportului de punctaj sophia, reveniți și verificați dacă ați introdus corect codul.

  14. În panoul TERMINAL, pentru a opri rularea aplicației, apăsați tasta Enter.

  15. Închideți panoul Terminal.

Calcularea scorului Sophia în bucla de nume exterioare

În această activitate, veți muta codul care calculează și raportează scorul Sophia, plasându-l în blocul de cod al buclei "nume".

  1. În Visual Studio Code Editor, găsiți liniile de cod utilizate pentru a calcula și a raporta nota 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-");
    

    Notă

    Următorul pas va fi să mutați acest cod din locația curentă în blocul de cod al buclei "nume". foreach

  2. Utilizați o operațiune de decupare și lipire pentru a muta codul care calculează și raportează nota Sophia la blocul de cod al buclei "nume". foreach

    Dacă nu sunteți sigur cum să decupați și să lipiți în Visual Studio Code, încercați abordarea descrisă în următorii pași:

    1. Selectați codul utilizat pentru a calcula și a raporta nota Sophia.

      Puteți să faceți clic și să glisați pentru a selecta linii de cod.

    2. În meniul Editare cod Visual Studio, selectați Decupare.

    3. În Visual Studio Code Editor, poziționați cursorul pe linia de cod necompletată de sub următorul cod: Console.WriteLine($"{name}");

    4. În meniul Editare cod Visual Studio, selectați Lipire.

  3. Actualizați codul pentru a afișa indentarea corectă a liniei de cod.

    Sfat

    Visual Studio Code furnizează o Format Document comandă care poate fi utilizată pentru a menține actualizată formatarea codului. Faceți clic dreapta în Visual Studio Code Editor, apoi selectați Formatare document din meniul pop-up. Pe computerele Windows, comanda rapidă de la tastatură pentru această comandă este: Shift + Alt + F. Computerele Linux și macOS utilizează comenzi rapide alternative atunci când este necesar pentru a evita conflictele cu comenzile rapide furnizate de sistemul de operare.

  4. Asigurați-vă că actualizările se potrivesc cu următorul cod:

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

    Observați că, în acest moment, codul dvs. va calcula și va raporta punctajul Sophia indiferent de elevul name /studentul curent. Veți rezolva acest lucru în scurt timp.

  5. Ștergeți următorul cod:

    Console.WriteLine($"{name}");
    
  6. În linia de cod necompletată pe care tocmai ați creat-o, introduceți următorul cod:

    if (name == "Sophia")
    {    
    
  7. Creați o linie de cod necompletată după codul utilizat pentru a scrie nota Sophia pe consolă.

  8. Pentru a închide blocul de cod al declarației if , introduceți următorul cod:

    }    
    
  9. Actualizați codul pentru a afișa indentarea corectă a liniei de cod.

    Sfat

    Format Document Utilizați comanda pentru a păstra formatarea codului actualizată. Faceți clic dreapta în panoul Visual Studio Code Editor, apoi selectați Formatare document din meniul pop-up.

  10. Acordați-vă un minut pentru a vă revizui codul.

    Codul dvs. ar trebui să corespundă următorului cod:

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

    Observați că instrucțiunea if din interiorul codului exterior foreach limitează limitele notei elevilor/studenților care sunt calculate și raportate. Nu este exact ceea ce ai nevoie, dar este un pas în direcția corectă.

  11. În meniul Fișier cod Visual Studio, faceți clic pe Salvare.

  12. În vizualizarea Visual Studio Code EXPLORER, faceți clic dreapta pe Starter, apoi selectați Deschidere în Terminal integrat.

    Importantă

    Linia de comandă Terminal trebuie să afișeze calea folderului pentru fișierul Program.cs.

  13. În linia de comandă Terminal, tastați compilare dotnet , apoi apăsați pe Enter.

    Comanda dotnet build instruiește compilatorul să construiască aplicația. Dacă sunt detectate erori, acestea vor fi raportate.

  14. Dacă vedeți Mesaje de eroare sau Avertisment, trebuie să le remediați înainte de a continua.

  15. În linia de comandă Terminal, tastați run dotnet , apoi apăsați pe Enter.

  16. Verificați dacă codul dvs. a produs următoarea ieșire:

    Student         Grade
    
    Sophia:         92.2    A-
    

    Notă

    Dacă vedeți în continuare lista de nume de elevi/studenți afișată deasupra raportului scorului Sophia, asigurați-vă că ați salvat actualizările.

  17. În panoul TERMINAL, pentru a opri rularea aplicației, apăsați tasta Enter.

  18. Închideți panoul Terminal.

Actualizați bucla imbricată pentru a calcula toate punctajele elevilor/studenților

În această activitate, veți actualiza codul care efectuează calcule ale punctajelor elevilor utilizând o matrice nouă de punctaje. Veți începe prin a crea o matrice denumită studentScores care poate fi utilizată pentru a păstra punctajele oricărui elev/student. În continuare, veți crea o if .. elseif construcție care utilizează numele curent al elevului/studentului pentru a-i atribui matricea de punctaje .studentScores În sfârșit, veți actualiza codul care calculează și raportează notele elevilor/studenților. După ce ați terminat, raportul ar trebui să includă numele și punctajul numeric pentru toți elevii/studenții.

  1. Creați o linie de cod necompletată sub declarația matricei studentNames .

    Linia necompletată ar trebui să fie deasupra instrucțiunii exterioare foreach .

  2. Pentru a crea o matrice întreagă pe care o puteți utiliza pentru a reține punctajele elevului/studentului curent, introduceți următorul cod:

    int[] studentScores = new int[10];
    
    

    Observați că acest cod nu atribuie nicio valoare matricei în acest moment. Specificați pur și simplu că matricea poate conține 10 elemente.

  3. Creați o linie de cod necompletată în partea de sus a blocului de cod exterior foreach .

    Linia necompletată ar trebui să fie în interiorul blocului de foreach cod și deasupra instrucțiunii if care evaluează dacă name este egal cu Sophia.

  4. Pentru a crea o variabilă șir care va fi utilizată pentru a reține numele elevului/studentului curent, introduceți următorul cod:

    string currentStudent = name;
    
    

    Notă

    Puteți continua să utilizați name pentru a urmări numele elevului/studentului curent pe măsură ce parcurgeți matricea de nume, dar utilizarea currentStudent va face mai ușor de înțeles logica de cod pe măsură ce construiți aplicația în pașii următori.

  5. Pentru a înlocui currentStudentname cu instrucțiunea if care evaluează dacă name este egal cu Sophia, actualizați codul după cum urmează:

    if (currentStudent == "Sophia")
    
  6. Mutați codul care calculează și raportează scorul Sophia într-o locație sub blocul de cod.

    Mutați tot codul care se află în blocul de cod într-o locație de sub blocul de cod. Motivul pentru care acest lucru va deveni evident în următorii câțiva pași.

  7. Verificați dacă codul din blocul de cod exterior foreach corespunde următorului cod:

    {
        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. Pentru a atribui matricea sophiaScoresstudentScores la data currentStudent == "Sophia", actualizați codul de instrucțiune if după cum urmează:

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

    Observați că ați eliminat acoladele curbate din blocul if codului de instrucțiune în timpul acestei actualizări de cod.

  9. Pentru a adăuga o else if instrucțiune care atribuie matricea andrewScoresstudentScores atunci când currentStudent == "Andrew", introduceți următorul cod:

    else if (currentStudent == "Andrew")
        studentScores = andrewScores;
    
    
  10. Creați o altă else if instrucțiune pentru a atribui matricea emmaScoresstudentScores când currentStudent == "Emma".

  11. Creați o else if instrucțiune pentru a atribui matricea loganScoresstudentScores la când currentStudent == "Logan".

  12. Asigurați-vă că blocul de foreach cod corespunde următorului cod:

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

    În continuare, trebuie să actualizați bucla internă foreach pentru a utiliza studentScores și a "depersonaliza" variabilele pe care le utilizați în calcule.

  13. Pentru a înlocui studentScoressophiaScores în foreach buclă faptul că iterează prin matricea de punctaje, actualizați codul după cum urmează:

    foreach (int score in studentScores)
    
  14. Pentru a înlocui declarațiile variabilei specifice Sophia cu nume mai generice, actualizați codul după cum urmează:

    int sumAssignmentScores = 0;
    
    decimal currentStudentGrade = 0;
    

    Aceste două declarații de variabilă sunt menite să înlocuiască următoarele declarații specifice variabilei Sophia:

    int sophiaSum = 0;
    
    decimal sophiaScore;
    
  15. Pentru a aplica noul nume de variabilă la ecuația utilizată pentru a însuma punctajele elevilor/studenților, actualizați blocul de cod interior foreach după cum urmează:

    foreach (int score in studentScores)
    {
        // add the exam score to the sum
        sumAssignmentScores += score;
    }
    
  16. Pentru a aplica noul nume de variabilă ecuației utilizate pentru a calcula punctajul mediu, actualizați codul după cum urmează:

    currentStudentGrade = (decimal)(sumAssignmentScores) / currentAssignments;
    
  17. Acordați-vă un minut pentru a vă revizui codul.

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

    Buclele imbricate foreach vor trece acum prin numele elevilor/studenților și vor utiliza punctajele elevilor/studenților pentru a-și calcula notele, dar tot trebuie să actualizați codul utilizat pentru a genera raportul de punctaj.

  18. Pentru a imprima numele elevului/studentului și punctajul calculat pe consolă, actualizați a doua Console.WriteLine instrucțiune după cum urmează:

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

    Observați că acest cod a înlocuit atribuirea notei cu litera "?". Veți lucra la automatizarea atribuirii notelor de scrisoare în următorul exercițiu.

  19. Mutați instrucțiunea Console.WriteLine utilizată pentru a scrie etichetele de coloană ale raportului de punctaj în locația aflată imediat deasupra buclei exterioare foreach .

    Nu doriți să repetați anteturile de coloană pentru fiecare punctaj de elev/student, astfel încât să mutați acest cod într-un punct deasupra buclei exterioare foreach .

  20. În meniul Fișier cod Visual Studio, faceți clic pe Salvare.

  21. Luați un minut pentru a revizui codul aplicației.

    Aplicația completă ar trebui să corespundă acum următorului cod:

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

    Cu codul care generează raportul de punctaj al elevului/studentului actualizat; se pare că sunteți gata să vă verificați lucrul.

Verificați-vă activitatea

În această activitate, veți rula aplicația pentru a verifica dacă logica de cod funcționează așa cum vă așteptați.

  1. Asigurați-vă că ați salvat modificările în fișierul Program.cs.

  2. În vizualizarea Visual Studio Code EXPLORER, faceți clic dreapta pe Starter, apoi selectați Deschidere în Terminal integrat.

  3. În linia de comandă Terminal, tastați compilare dotnet , apoi apăsați pe Enter.

  4. Dacă vedeți Mesaje de eroare sau Avertisment, trebuie să le remediați înainte de a continua.

  5. În linia de comandă Terminal, tastați run dotnet , apoi apăsați pe Enter.

  6. Verificați dacă codul dvs. a produs următoarea ieșire:

    Student         Grade
    
    Sophia          92.2    ?
    Andrew          89.6    ?
    Emma            85.6    ?
    Logan           91.2    ?
    Press the Enter key to continue
    
  7. În panoul TERMINAL, pentru a opri rularea aplicației, apăsați tasta Enter.

  8. Închideți panoul Terminal.

Felicitări, aplicația dvs. a ajuns foarte departe de locul de unde ați început. Utilizați eficient matricele și foreach iterațiile și ați integrat o if instrucțiune care permite codului să selecteze matricea corectă de punctaje.