Распечатайте таблицу распределения оценок всех учащихся, использующих звезды, чтобы определять каждый раз, когда появляется оценка - PullRequest
0 голосов
/ 20 мая 2018

Как гласит заголовок.Я сейчас выполнил большую часть своего кода для программы, и это последний кусок.Если честно, на данный момент я просто не понимаю, как это осуществить.Я знаю, что должен использовать реализацию, аналогичную тому, как реализованы буквы оценок, но как я могу реализовать ее таким образом, чтобы для каждой оценки в диапазоне оценок в диаграмме распределения добавлялась звездочка в соответствующем диапазоне оценок.

По сути, диаграмма распределения должна выглядеть следующим образом:

Общее распределение оценок:

0-9:

10-19:

20-29:

30-39:

40-49:

50-59:

60-69: ***

70-79: ******

80-89: ***********

90-99: *******

100: ***

Подумал, что может быть лучше, чтобы весь код был доступен по ссылке, вот так:

Это мой код на dotnetfiddle

Я пытался понять это.Мне сказали, чтобы цикл от 0 до 100 к 10, а затем вложенный цикл цикл от 0 до количества звезд.N равно количеству студентов, а 5 соответствует количеству оценок на одного учащегося:

for (int i = 0; i <= 100; i += 10)
{
    Console.WriteLine(i + " - " + (i + 10));
    for (int j = 0; j < (n*5); j++)
    {
        // add stars here
    }
}

1 Ответ

0 голосов
/ 21 мая 2018

Глядя на ваш код в .net fiddle, прежде всего вам нужно реализовать какой-то способ вернуть оценки ученику, в моем примере я использовал метод GetGrades.Во-вторых, я уверен, что есть лучший или более ясный способ, чем этот (linq), но, по крайней мере, эй, это работает:)

        // Array where each value represents number of grades within range
        // distribution[0]: 0 - 9
        // distribution[1]: 10 - 19
        // distribution[2]: 20 - 29
        // distribution[3]: 30 - 39
        // distribution[4]: 40 - 49
        // distribution[5]: 50 - 59
        // distribution[6]: 60 - 69
        // distribution[7]: 70 - 79
        // distribution[8]: 80 - 89
        // distribution[9]: 90 - 99
        // distribution[10]: 100
        var distribution = new int[11]; 
        // Fill the array with distribtions for all students 
        // *Don't forget to implement GetGradse method for student 
        foreach (var s in students)
        foreach (var g in s.GetGrades())
        {
            // skip the grade thats less than 0 or greater than 100 (invalid grade)
            // in every other case increment distribution at g / 10 index
            if (g < 0 || g > 100) continue;
            else distribution[(int)g / 10]++;
        }
        // Now we can print out the grades distribution
        for (var i = 0; i < distribution.Length - 1; i++)
            Console.WriteLine($"{i * 10}-{i * 10 + 9}: {new String('*', distribution[i])}");
        Console.WriteLine($"100: {new String('*', distribution[10])}");

РЕДАКТИРОВАТЬ (Другой способ сделать это, печатая частьостается неизменным): Вы также можете объявить массив распределения рядом с массивом студентов и заполнить его в том же месте, где вы назначаете оценки студентам, если вы сделаете это таким образом, вам не нужно будет зацикливать всеученики и оценки снова:

            ...
            Student[] students = new Student[n];
            var distribution = new int[11];
            ...
            for (int j = 0; j < 5; j++)
            {
                Console.WriteLine($"Enter grade {j + 1} for student {i + 1}: ");
                double grade = double.Parse(Console.ReadLine());
                students[i].addGrade(grade);
                // assuming grade value won't be greater than 100 or less than 0
                distributions[(int)grade / 10]++;
            }
            ...
            ...
...