Menu
CoddyTech

Logika Penilaian

Termasuk bagian Logika dan Alur dalam perjalanan C# di Coddy. Pelajaran 43 dari 66.

challenge icon

Tantangan

Mudah

Sekarang setelah kita dapat menganalisis data, mari terapkan sistem penilaian untuk memberikan nilai huruf berdasarkan skor. Buat class bernama GradingSystem dengan method berikut:

  1. ConvertToLetterGrade(double score): Mengubah skor numerik menjadi nilai huruf sesuai skala berikut:
    • A: 90-100
    • B: 80-89
    • C: 70-79
    • D: 60-69
    • F: 0-59
    • Tidak valid: Kembalikan "N/A" untuk skor yang tidak valid (negatif atau > 100)
  2. GetStudentGrade(int[][] scoreGrid, int studentIndex): Menghitung nilai rata-rata seorang siswa dan mengembalikan nilai hurufnya. Kembalikan "N/A" untuk indeks siswa yang tidak valid.
  3. GetClassDistribution(int[][] scoreGrid): Mengembalikan array bilangan bulat yang mewakili jumlah setiap nilai huruf di kelas [A, B, C, D, F]. Gunakan nilai rata-rata setiap siswa sebagai dasar.

Coba sendiri

using System; // Jangan hapus baris ini
public class GradingSystem
{
    public static string ConvertToLetterGrade(double score)
    {
        // Tulis kodemu di sini
        
    }
    
    public static string GetStudentGrade(int[][] scoreGrid, int studentIndex)
    {
        // Tulis kodemu di sini
        
    }
    
    public static int[] GetClassDistribution(int[][] scoreGrid)
    {
        // Tulis kodemu di sini
        
    }
}

// Diperlukan untuk pengujian, jangan ubah
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)
    {
        // Periksa apakah indeks berada di luar batas
        if (studentIndex < 0 || studentIndex >= scoreGrid.Length || 
            assignmentIndex < 0 || assignmentIndex >= scoreGrid[studentIndex].Length)
        {
            return -1;
        }
        
        // Validasi nilai
        if (!DataCollector.ValidateScore(score))
        {
            return -2;
        }
        
        // Tetapkan nilai
        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)
    {
        // Periksa apakah indeks siswa valid
        if (studentIndex < 0 || studentIndex >= scoreGrid.Length)
        {
            return -1;
        }
        
        int sum = 0;
        int count = 0;
        
        // Hitung jumlah nilai yang valid
        for (int j = 0; j < scoreGrid[studentIndex].Length; j++)
        {
            int score = scoreGrid[studentIndex][j];
            if (score != -1)  // Abaikan tugas yang belum dinilai
            {
                sum += score;
                count++;
            }
        }
        
        // Kembalikan rata-rata atau 0 jika tidak ada nilai yang valid
        return count > 0 ? (double)sum / count : 0;
    }
    
    public static double CalculateAssignmentAverage(int[][] scoreGrid, int assignmentIndex)
    {
        // Periksa apakah ada siswa
        if (scoreGrid.Length == 0)
        {
            return -1;
        }
        
        // Periksa apakah indeks tugas valid
        if (assignmentIndex < 0 || assignmentIndex >= scoreGrid[0].Length)
        {
            return -1;
        }
        
        int sum = 0;
        int count = 0;
        
        // Hitung jumlah nilai yang valid untuk tugas ini
        for (int i = 0; i < scoreGrid.Length; i++)
        {
            if (assignmentIndex < scoreGrid[i].Length)
            {
                int score = scoreGrid[i][assignmentIndex];
                if (score != -1)  // Abaikan tugas yang belum dinilai
                {
                    sum += score;
                    count++;
                }
            }
        }
        
        // Kembalikan rata-rata atau 0 jika tidak ada nilai yang valid
        return count > 0 ? (double)sum / count : 0;
    }
    
    public static int[] FindHighestScore(int[][] scoreGrid)
    {
        int highestStudentIndex = 0;
        int highestAssignmentIndex = 0;
        int highestScore = -1;
        
        // Cari nilai tertinggi
        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 };
    }
}

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler C# online