תרגיל - בניית מבנה לולאה מקונן עבור חישובי ציון תלמיד

הושלם

בתרגיל זה, עליך להוסיף מערך מחרוזות כדי להכיל את שמות התלמידים ולאחר foreach מכן ליישם מבנה מקונן המדרג דרך שמות התלמידים בלולאה החיצונית ותוצאות התלמידים בלולאה הפנימית. התחל על-ידי בניית המערך studentNames ולולאה foreach שעוברת דרך רכיבי המערך. בשלב הבא, תעביר את הקוד המשמש לחישוב הציונים של סופיה בבלוק הקוד של הלולאה "שמות". לבסוף, עליך ליישם את לוגיקת הקוד המשתמשת בשם התלמיד כדי לגשת למערך הציונים שלו, לחשב את הציון הממוצע שלו ולכתוב את הציון שלו בקונסולה. המשימות המפורטות שאתה משלים במהלך תרגיל זה הן:

  1. יצירת מערך שמות: צור מערך שמות תלמידים.

  2. יצירת לולאה גורמת ליצירת לולאה foreach לאורך שמות התלמידים.

  3. פיתוח בלוק קוד לולאה החוצה: שנה את המיקום של הקוד המחשב ומדוחות על הציון של סופיה, ומקם אותו בבלוק הקוד של לולאת "השמות".

  4. עדכון חישובים ודיווח: עדכן את הקוד המבצע חישובי ניקוד של תלמיד באמצעות מערך ניקוד חדש.

חשוב

עליך להשלים את התרגיל הקודם במודול זה, "יצירת מערכים ולולאות מערך", לפני שתתחיל בתרגיל זה.

יצירת מערך של שמות תלמידים ולולאת התמיכה היוצאת

במשימה זו, תיצור מערך foreach שמות תלמידים ולולאה שעוברת דרך שמות התלמידים.

  1. ודא שקובץ ה- Program.cs פתוח בעורך הקוד של Visual Studio.

  2. גלול לחלק העליון של קובץ הקוד ולאחר מכן אתר את שורות הקוד המשמשות להצהיר על מערכים של ציונים.

  3. צור שורת קוד ריקה מתחת להצהרה על מערכים של ציונים.

    שורת הקוד הריק אמורה להיות ממוקמת בין השורות המשמשות להצהיר על מערכים של ציונים בשורה המשמשת להצהיר sophiaSum.

  4. כדי ליצור מערך מחרוזות studentNames בשם שמכיל את שמות התלמידים, הזן את הקוד הבא:

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

    שים לב שציינת את שמות התלמידים כחלק מההצהרה.

  5. כדי ליצור משפט foreach שבו באפשרותך להשתמש כדי לבצע חזרה באמצעות שמות התלמידים, הזן את הקוד הבא:

    foreach (string name in studentNames)
    {
    }
    
  6. כדי לוודא שהלולאה foreach חוזרת דרך המערך studentNames כצפוי, עדכן את בלוק הקוד foreach של המשפט באופן הבא:

    foreach (string name in studentNames)
    {
        Console.WriteLine($"{name}");
    
    }
    
  7. הת להימשך דקה כדי לסקור את הקוד שיצרת.

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

    הקוד שלך ישתמש בלולאה foreach זו בתור הלולאה העליונה של היישום שלך. במהלך תרגיל זה, תיישם את הלוגיקה הבאה ביישום שלך:

    עבור כל אחד מהתלמידים במערך studentNames , היישום שלך:

    • לקבוע את התלמיד הנוכחי.
    • לגשת לציונים של התלמיד הנוכחי.
    • חישוב הציון הנוכחי של התלמיד (סכום וממוצע).
    • כתוב את ציון התלמיד הנוכחי בקונסולה.

    עם זאת, בשלב זה, פשוט תרשום את שמות התלמידים בקונסולה.

  8. בתפריט קובץ קוד של Visual Studio, לחץ על שמור.

  9. בתצוגה Visual Studio Code EXPLORER, לחץ באמצעות לחצן העכבר הימני על Starter ולאחר מכן בחר פתח במסוף משולב.

    חשוב

    שורת הפקודה של Terminal חייבת להציג את נתיב התיקיה עבור Program.cs הקובץ.

  10. בשורת הפקודה של מסוף, הקלד dotnet build ולאחר מכן הקש Enter.

    הפקודה dotnet build מורה למהדר לבנות את היישום. אם זוהו שגיאות, הן ידווחו.

  11. אם אתה רואה הודעות שגיאה או אזהרה, עליך לתקן אותן לפני שתמשיך.

  12. בשורת הפקודה של מסוף, הקלד dotnet run ולאחר מכן הקש Enter.

  13. ודא שהקוד שלך יצר את הפלט הבא:

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

    הערה

    אם אינך רואה את רשימת שמות התלמידים מעל דוח הניקוד של סופיה, חזור וודא שהזנת את הקוד כראוי.

  14. בלוח TERMINAL, כדי להפסיק את הפעלת היישום, הקש על מקש Enter.

  15. סגור את לוח המסוף.

חשב את הניקוד של סופיה בתוך לולאת השמות הפנימיים

במשימה זו, תמקם מחדש את הקוד המחשב ומדוחות את הציון של סופיה, ותמקם אותו בבלוק הקוד של הלולאה "שמות".

  1. בעורך קוד של Visual Studio, אתר את שורות הקוד המשמשות לחישוב ולדיווח על הציון של סופיה.

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

    הערה

    השלב הבא יהיה להעביר קוד זה מהמיקום הנוכחי שלו לבלוק הקוד של לולאת "השמות foreach ".

  2. השתמש בפעולה של גזירה והדבקה כדי להעביר את הקוד המחשב ומדוחות את הציון של סופיה לבלוק הקוד של הלולאה "שמות foreach ".

    אם אינך בטוח כיצד לגזור ולהדביק בקוד Visual Studio, נסה את הגישה המתוארת בשלבים הבאים:

    1. בחר את הקוד המשמש לחישוב ולדיווח על הציון של סופיה.

      באפשרותך ללחוץ ולגרור כדי לבחור שורות קוד.

    2. בתפריט עריכת קוד של Visual Studio, בחר גזור.

    3. בעורך קוד של Visual Studio, הצב את הסמן בשורת הקוד הריק מתחת לקוד הבא: Console.WriteLine($"{name}");

    4. בתפריט עריכת קוד של Visual Studio, בחר הדבק.

  3. עדכן את הקוד כדי להציג כניסה נכונה של שורת קוד.

    תשר

    Visual Studio Code מספק Format Document פקודה שניתן להשתמש בה כדי לשמור על עיצוב הקוד מעודכן. לחץ באמצעות לחצן העכבר הימני בתוך עורך הקוד של Visual Studio ולאחר מכן בחר עיצוב מסמך מהתפריט המוקפץ. במחשבי Windows, קיצור המקשים עבור פקודה זו הוא: Shift + Alt + F. מחשבי Linux ו- macOS משתמשים בקיצורי דרך חלופיים בעת הצורך כדי להימנע מהתנגשויות עם קיצורי דרך שסופקו על-ידי מערכת ההפעלה.

  4. ודא שהעדכונים שלך תואמים לקוד הבא:

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

    שים לב שבנקודה זו, הקוד שלך יחשב וידווח על הניקוד של סופיה, ללא name קשר לתלמיד הנוכחי. תמוען את זה בקרוב.

  5. מחק את הקוד הבא:

    Console.WriteLine($"{name}");
    
  6. בשורת הקוד הריקה שיצרת זה עתה, הזן את הקוד הבא:

    if (name == "Sophia")
    {    
    
  7. צור שורת קוד ריקה לאחר הקוד המשמש בכתיבת הציון של סופיה בקונסולה.

  8. כדי לסגור את בלוק הקוד של המשפט if , הזן את הקוד הבא:

    }    
    
  9. עדכן את הקוד כדי להציג כניסה נכונה של שורת קוד.

    תשר

    השתמש בפקודה Format Document כדי לשמור על עיצוב הקוד מעודכן. לחץ באמצעות לחצן העכבר הימני בתוך הלוח Visual Studio Code Editor ולאחר מכן בחר עיצוב מסמך מהתפריט המוקפץ.

  10. בדוק את הקוד שלך כדקה.

    הקוד שלך אמור להתאים לקוד הבא:

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

    שים לב שהצהרה if בתוך הקוד הפנימי מגבילה foreach את הציון של התלמיד המחושב ומדווח. זה לא בדיוק מה שאתה צריך, אבל זה צעד בכיוון הנכון.

  11. בתפריט קובץ קוד של Visual Studio, לחץ על שמור.

  12. בתצוגה Visual Studio Code EXPLORER, לחץ באמצעות לחצן העכבר הימני על Starter ולאחר מכן בחר פתח במסוף משולב.

    חשוב

    שורת הפקודה של Terminal חייבת להציג את נתיב התיקיה עבור Program.cs הקובץ.

  13. בשורת הפקודה של מסוף, הקלד dotnet build ולאחר מכן הקש Enter.

    הפקודה dotnet build מורה למהדר לבנות את היישום. אם זוהו שגיאות, הן ידווחו.

  14. אם אתה רואה הודעות שגיאה או אזהרה, עליך לתקן אותן לפני שתמשיך.

  15. בשורת הפקודה של מסוף, הקלד dotnet run ולאחר מכן הקש Enter.

  16. ודא שהקוד שלך יצר את הפלט הבא:

    Student         Grade
    
    Sophia:         92.2    A-
    

    הערה

    אם אתה עדיין רואה את רשימת שמות התלמידים המוצגת מעל דוח הניקוד של סופיה, ודא ששמרת את העדכונים.

  17. בלוח TERMINAL, כדי להפסיק את הפעלת היישום, הקש על מקש Enter.

  18. סגור את לוח המסוף.

עדכן את הלולאה המקוננת כדי לחשב את כל הציונים של התלמידים

במשימה זו, תעדכן את הקוד המבצע חישובי ניקוד של תלמיד באמצעות מערך ציונים חדש. תתחיל ביצירת מערך בשם שניתן studentScores להשתמש בו כדי להכיל את הציונים של כל תלמיד. בשלב הבא, תיצור מבנה if .. elseif שמשתמש בשם התלמיד הנוכחי כדי להקצות את מערך הניקוד שלו ל- studentScores. לבסוף, תעדכן את הקוד המחשב ומדוחות את הציונים של התלמיד. לאחר שתסיים, הדוח צריך לכלול את השם ואת הציון המספרי עבור כל התלמידים.

  1. צור שורת קוד ריקה מתחת להצהרה על המערך studentNames .

    השורה הריקה אמורה להיות מעל המשפט היוצא foreach .

  2. כדי ליצור מערך מספר שלם שבו באפשרותך להשתמש כדי להוסיף את הניקוד של התלמיד הנוכחי, הזן את הקוד הבא:

    int[] studentScores = new int[10];
    
    

    שים לב שקוד זה אינו מקצה ערכים למערך בשלב זה. עליך פשוט לציין כי המערך יכול להכיל 10 רכיבים.

  3. צור שורת קוד ריקה בחלק העליון של בלוק הקוד foreach היוצא.

    השורה הריקה אמורה להיות בתוך בלוק foreach הקוד ומעל המשפט if שמעריכה אם היא name שווה ל- סופיה.

  4. כדי ליצור משתנה מחרוזת שישמש לאחסון שם התלמיד הנוכחי, הזן את הקוד הבא:

    string currentStudent = name;
    
    

    הערה

    תוכל להמשיך להשתמש name כדי לעקוב אחר השם של התלמיד הנוכחי בעת ביצוע חזרה באמצעות מערך השמות, currentStudent אך השימוש יאפשר לך להבין ביתר קלות את לוגיקת הקוד שלך בעת בניית היישום בשלבים הקרובים.

  5. כדי להחליף currentStudent במשפט name המוערך if אם הוא שווה ל name - סופיה, עדכן את הקוד באופן הבא:

    if (currentStudent == "Sophia")
    
  6. העבר את הקוד המחשב ומדוחות את הציון של סופיה למיקום מתחת לבלוק הקוד.

    אתה מעביר את כל הקוד שנמצא בבלוק הקוד למיקום מתחת לבלוק הקוד. הסיבה לכך תהפוך לברורה במהלך השלבים הבאים.

  7. ודא שהקוד בבלוק הקוד היוצא foreach תואם לקוד הבא:

    {
        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. כדי להקצות את המערך sophiaScores למצב studentScores שבו currentStudent == "Sophia", עדכן את if קוד המשפט באופן הבא:

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

    שים לב שהורדת את סוגריים מסולסלים מבלוק if קוד המשפט במהלך עדכון קוד זה.

  9. כדי להוסיף else if משפט המקצה את המערך andrewScores ל- studentScores , currentStudent == "Andrew"הזן את הקוד הבא:

    else if (currentStudent == "Andrew")
        studentScores = andrewScores;
    
    
  10. צור משפט else if נוסף להקצאת המערך emmaScores למצב studentScores שבהם currentStudent == "Emma".

  11. צור משפט else if להקצאת המערך loganScores למצב studentScores שבהם currentStudent == "Logan".

  12. ודא שבלוק foreach הקוד שלך תואם לקוד הבא:

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

    לאחר מכן, עליך לעדכן את הלולאה foreachstudentScores הפנימית כדי להשתמש במשתנים שבהם אתה משתמש ו"לבטל את ההתאמה" של המשתנים שבהם אתה משתמש בחישובים שלך.

  13. כדי להחליף studentScores בלולאה sophiaScores שעוברת foreach דרך מערך הציונים, עדכן את הקוד באופן הבא:

    foreach (int score in studentScores)
    
  14. כדי להחליף את הצהרות המשתנה הספציפיות ל- סופיה בשמות כלליים יותר, עדכן את הקוד באופן הבא:

    int sumAssignmentScores = 0;
    
    decimal currentStudentGrade = 0;
    

    שתי הצהרות משתנות אלה מיועדות להחליף את ההצהרות המשתנה הספציפיות הבאות של סופיה:

    int sophiaSum = 0;
    
    decimal sophiaScore;
    
  15. כדי להחיל את שם המשתנה החדש על המשוואה המשמשת לסכם ציונים של תלמידים, עדכן את בלוק הקוד foreach הפנימי באופן הבא:

    foreach (int score in studentScores)
    {
        // add the exam score to the sum
        sumAssignmentScores += score;
    }
    
  16. כדי להחיל את שם המשתנה החדש על המשוואה המשמשת לחישוב הציון הממוצע, עדכן את הקוד באופן הבא:

    currentStudentGrade = (decimal)(sumAssignmentScores) / currentAssignments;
    
  17. בדוק את הקוד שלך כדקה.

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

    הלולאות foreach המקוננות שלך יתבצעו כעת שוב דרך שמות התלמידים וישתמשו בציונים של התלמיד כדי לחשב את הציונים שלהם, אך עדיין עליך לעדכן את הקוד המשמש ליצירת דוח הציונים.

  18. כדי להדפיס את שם התלמיד ואת הציון המחושב בקונסולה, עדכן את המשפט Console.WriteLine השני באופן הבא:

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

    שים לב שקוד זה החליף את הקצאת ציון האות ב-"?". בתרגיל הבא תעבוד על הפיכת המטלה של ציתותי אותיות לאוטומטית.

  19. העבר את Console.WriteLine המשפט המשמש כדי לכתוב את תוויות העמודות של דוח הניקוד למיקום ממש מעל הלולאה foreach העליונה.

    אין ברצונך לחזור על כותרות העמודות עבור כל ציון של תלמיד, לכן עליך להעביר קוד זה לנקודה מעל הלולאה foreach העליונה.

  20. בתפריט קובץ קוד של Visual Studio, לחץ על שמור.

  21. הת להימשך דקה כדי לסקור את קוד היישום.

    היישום המלא שלך אמור להתאים כעת לקוד הבא:

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

    עם הקוד שמפיק את דוח הניקוד של התלמיד עודכן; נראה שאתה מוכן לבדוק את עבודתך.

בדוק את העבודה שלך

במשימה זו, תפעיל את היישום כדי לוודא שלוגיקת הקוד שלך פועלת כצפוי.

  1. ודא ששמרת את השינויים שביצעת בקובץ Program.cs שלך.

  2. בתצוגה Visual Studio Code EXPLORER, לחץ באמצעות לחצן העכבר הימני על Starter ולאחר מכן בחר פתח במסוף משולב.

  3. בשורת הפקודה של מסוף, הקלד dotnet build ולאחר מכן הקש Enter.

  4. אם אתה רואה הודעות שגיאה או אזהרה, עליך לתקן אותן לפני שתמשיך.

  5. בשורת הפקודה של מסוף, הקלד dotnet run ולאחר מכן הקש Enter.

  6. ודא שהקוד שלך יצר את הפלט הבא:

    Student         Grade
    
    Sophia          92.2    ?
    Andrew          89.6    ?
    Emma            85.6    ?
    Logan           91.2    ?
    Press the Enter key to continue
    
  7. בלוח TERMINAL, כדי להפסיק את הפעלת היישום, הקש על מקש Enter.

  8. סגור את לוח המסוף.

מזל טוב, היישום שלך הגיע דרך ארוכה מהיכן שהתחלת. אתה עושה שימוש יעיל במערכים ובחזרות foreach , if ושילוב משפט המאפשר לקוד לבחור את מערך הציונים הנכון.