Menu
Coddy logo textTech

Logique de notation

Fait partie de la section Logique & Flux du Journey C# de Coddy — leçon 43 sur 66.

challenge icon

Défi

Facile

Maintenant que nous pouvons analyser les données, implémentons un système de notation pour attribuer des notes par lettre en fonction des scores. Créez une classe appelée GradingSystem avec ces méthodes :

  1. ConvertToLetterGrade(double score) : Convertit un score numérique en note par lettre selon cette échelle :
    • A : 90-100
    • B : 80-89
    • C : 70-79
    • D : 60-69
    • F : 0-59
    • Invalide : Retournez "N/A" pour tout score invalide (négatif ou > 100)
  2. GetStudentGrade(int[][] scoreGrid, int studentIndex) : Calcule la moyenne d'un étudiant et retourne sa note par lettre. Retournez "N/A" pour les indices d'étudiants invalides.
  3. GetClassDistribution(int[][] scoreGrid) : Retourne un tableau d'entiers représentant le nombre de chaque note par lettre dans la classe [A, B, C, D, F]. Basez-vous sur la moyenne de chaque étudiant.

Essayez vous-même

using System; // Ne supprimez pas cette ligne
public class GradingSystem
{
    public static string ConvertToLetterGrade(double score)
    {
        // Écrivez votre code ici
        
    }
    
    public static string GetStudentGrade(int[][] scoreGrid, int studentIndex)
    {
        // Écrivez votre code ici
        
    }
    
    public static int[] GetClassDistribution(int[][] scoreGrid)
    {
        // Écrivez votre code ici
        
    }
}

// Required for testing - do not modify
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)
    {
        // Vérifier les indices hors limites
        if (studentIndex < 0 || studentIndex >= scoreGrid.Length || 
            assignmentIndex < 0 || assignmentIndex >= scoreGrid[studentIndex].Length)
        {
            return -1;
        }
        
        // Valider la note
        if (!DataCollector.ValidateScore(score))
        {
            return -2;
        }
        
        // Définir la note
        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)
    {
        // Vérifier si l'index de l'étudiant est valide
        if (studentIndex < 0 || studentIndex >= scoreGrid.Length)
        {
            return -1;
        }
        
        int sum = 0;
        int count = 0;
        
        // Calculer la somme des notes valides
        for (int j = 0; j < scoreGrid[studentIndex].Length; j++)
        {
            int score = scoreGrid[studentIndex][j];
            if (score != -1)  // Ignorer les devoirs non notés
            {
                sum += score;
                count++;
            }
        }
        
        // Retourner la moyenne ou 0 s'il n'y a pas de notes valides
        return count > 0 ? (double)sum / count : 0;
    }
    
    public static double CalculateAssignmentAverage(int[][] scoreGrid, int assignmentIndex)
    {
        // Vérifier s'il y a des étudiants
        if (scoreGrid.Length == 0)
        {
            return -1;
        }
        
        // Vérifier si l'index du devoir est valide
        if (assignmentIndex < 0 || assignmentIndex >= scoreGrid[0].Length)
        {
            return -1;
        }
        
        int sum = 0;
        int count = 0;
        
        // Calculer la somme des notes valides pour le devoir
        for (int i = 0; i < scoreGrid.Length; i++)
        {
            if (assignmentIndex < scoreGrid[i].Length)
            {
                int score = scoreGrid[i][assignmentIndex];
                if (score != -1)  // Ignorer les devoirs non notés
                {
                    sum += score;
                    count++;
                }
            }
        }
        
        // Retourner la moyenne ou 0 s'il n'y a pas de notes valides
        return count > 0 ? (double)sum / count : 0;
    }
    
    public static int[] FindHighestScore(int[][] scoreGrid)
    {
        int highestStudentIndex = 0;
        int highestAssignmentIndex = 0;
        int highestScore = -1;
        
        // Rechercher la note la plus élevée
        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 };
    }
}

Toutes les leçons de Logique & Flux