Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

تحليل البيانات

جزء من قسم Logic & Flow في رحلة C# على Coddy — الدرس 42 من 66.

challenge icon

التحدي

متوسط

الآن بعد أن أصبح بإمكاننا جمع وتحديث بيانات الطلاب، دعنا نقوم بتنفيذ وظائف التحليل للحصول على رؤى من الدرجات. قم بإنشاء فئة تسمى DataAnalyzer تحتوي على هذه الطرق (methods):

  1. CalculateStudentAverage(int[][] scoreGrid, int studentIndex): يحسب ويعيد متوسط الدرجات لطالب معين. أعد -1 إذا كان studentIndex غير صالح.
  2. CalculateAssignmentAverage(int[][] scoreGrid, int assignmentIndex): يحسب ويعيد متوسط الدرجات لمهمة معينة لجميع الطلاب. أعد -1 إذا كان assignmentIndex غير صالح.
  3. FindHighestScore(int[][] scoreGrid): يعيد مصفوفة من ثلاثة أعداد صحيحة تمثل أعلى درجة وموقعها: [studentIndex, assignmentIndex, score]. إذا كانت هناك عدة إدخالات لها نفس أعلى درجة، فأعد أول إدخال تم العثور عليه.

ملاحظة: عند حساب المتوسطات، خذ في الاعتبار الدرجات الصالحة فقط (0-100). تجاهل المهام غير المصنفة (-1).

جرّب بنفسك

using System; // لا تحذف هذا السطر
public class DataAnalyzer
{
    public static double CalculateStudentAverage(int[][] scoreGrid, int studentIndex)
    {
        // اكتب كودك هنا
        
    }
    
    public static double CalculateAssignmentAverage(int[][] scoreGrid, int assignmentIndex)
    {
        // اكتب كودك هنا
        
    }
    
    public static int[] FindHighestScore(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;
    }
}

جميع دروس Logic & Flow