Menu
Coddy logo textTech

לוגיקת מתן ציונים

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C# של Coddy. שיעור 43 מתוך 66.

challenge icon

אתגר

קל

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

  1. ConvertToLetterGrade(double score): ממירה ציון מספרי לציון אות לפי הסולם הזה:
    • A: 90-100
    • B: 80-89
    • C: 70-79
    • D: 60-69
    • F: 0-59
    • לא תקין: יש להחזיר "N/A" עבור כל ציון לא תקין (שלילי או > 100)
  2. GetStudentGrade(int[][] scoreGrid, int studentIndex): מחשבת את הממוצע של תלמיד ומחזירה את ציון האות שלו. יש להחזיר "N/A" עבור אינדקסים לא תקינים של תלמידים.
  3. GetClassDistribution(int[][] scoreGrid): מחזירה מערך של מספרים שלמים המייצגים את מספר התלמידים שקיבלו כל ציון אות בכיתה [A, B, C, D, F]. יש להתבסס על הציון הממוצע של כל תלמיד.

נסו בעצמכם

using System; // אין למחוק את השורה הזו
public class GradingSystem
{
    public static string ConvertToLetterGrade(double score)
    {
        // כתבו כאן את הקוד שלכם
        
    }
    
    public static string GetStudentGrade(int[][] scoreGrid, int studentIndex)
    {
        // כתבו כאן את הקוד שלכם
        
    }
    
    public static int[] GetClassDistribution(int[][] scoreGrid)
    {
        // כתבו כאן את הקוד שלכם
        
    }
}

// נדרש לצורך בדיקות - אין לשנות
public class DataCollector
{
    public static int[][] CreateScoreGrid(int students, int assignments)
    {
        int[][] scoreGrid = new int[students][];
        for (int i = 0; i < students; i++)
        {
            scoreGrid[i] = new int[assignments];
        }
        return scoreGrid;
    }
    
    public static bool ValidateScore(int score)
    {
        return score >= 0 && score <= 100;
    }
    
    public static int[][] PopulateWithDefaultValues(int[][] scoreGrid)
    {
        for (int i = 0; i < scoreGrid.Length; i++)
        {
            for (int j = 0; j < scoreGrid[i].Length; j++)
            {
                scoreGrid[i][j] = -1;
            }
        }
        return scoreGrid;
    }
}

public class DataEntry
{
    public static int SetStudentScore(int[][] scoreGrid, int studentIndex, int assignmentIndex, int score)
    {
        // בדקו אם האינדקסים חורגים מהטווח
        if (studentIndex < 0 || studentIndex >= scoreGrid.Length || 
            assignmentIndex < 0 || assignmentIndex >= scoreGrid[studentIndex].Length)
        {
            return -1;
        }
        
        // ודאו שהציון תקין
        if (!DataCollector.ValidateScore(score))
        {
            return -2;
        }
        
        // הגדירו את הציון
        scoreGrid[studentIndex][assignmentIndex] = score;
        return 0;
    }
    
    public static int UpdateAllScores(int[][] scoreGrid, int[] studentIndices, int assignmentIndex, int score)
    {
        int successCount = 0;
        
        for (int i = 0; i < studentIndices.Length; i++)
        {
            int result = SetStudentScore(scoreGrid, studentIndices[i], assignmentIndex, score);
            if (result == 0)
            {
                successCount++;
            }
        }
        
        return successCount;
    }
}

public class DataAnalyzer
{
    public static double CalculateStudentAverage(int[][] scoreGrid, int studentIndex)
    {
        // בדקו אם אינדקס התלמיד תקין
        if (studentIndex < 0 || studentIndex >= scoreGrid.Length)
        {
            return -1;
        }
        
        int sum = 0;
        int count = 0;
        
        // חשבו את סכום הציונים התקינים
        for (int j = 0; j < scoreGrid[studentIndex].Length; j++)
        {
            int score = scoreGrid[studentIndex][j];
            if (score != -1)  // התעלמו ממטלות שטרם קיבלו ציון
            {
                sum += score;
                count++;
            }
        }
        
        // החזירו את הממוצע, או 0 אם אין ציונים תקינים
        return count > 0 ? (double)sum / count : 0;
    }
    
    public static double CalculateAssignmentAverage(int[][] scoreGrid, int assignmentIndex)
    {
        // בדקו אם יש תלמידים
        if (scoreGrid.Length == 0)
        {
            return -1;
        }
        
        // בדקו אם אינדקס המטלה תקין
        if (assignmentIndex < 0 || assignmentIndex >= scoreGrid[0].Length)
        {
            return -1;
        }
        
        int sum = 0;
        int count = 0;
        
        // חשב את סכום הציונים התקינים עבור המטלה
        for (int i = 0; i < scoreGrid.Length; i++)
        {
            if (assignmentIndex < scoreGrid[i].Length)
            {
                int score = scoreGrid[i][assignmentIndex];
                if (score != -1)  // התעלמו ממטלות שטרם קיבלו ציון
                {
                    sum += score;
                    count++;
                }
            }
        }
        
        // החזירו את הממוצע, או 0 אם אין ציונים תקינים
        return count > 0 ? (double)sum / count : 0;
    }
    
    public static int[] FindHighestScore(int[][] scoreGrid)
    {
        int highestStudentIndex = 0;
        int highestAssignmentIndex = 0;
        int highestScore = -1;
        
        // חפש את הציון הגבוה ביותר
        for (int i = 0; i < scoreGrid.Length; i++)
        {
            for (int j = 0; j < scoreGrid[i].Length; j++)
            {
                int currentScore = scoreGrid[i][j];
                if (currentScore > highestScore)
                {
                    highestScore = currentScore;
                    highestStudentIndex = i;
                    highestAssignmentIndex = j;
                }
            }
        }
        
        return new int[] { highestStudentIndex, highestAssignmentIndex, highestScore };
    }
}

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר C# אונליין