Ю4.27

Задача Ю4.27. Сессия. Результаты сессии, состоящей из трёх экзаменов, для группы из [latex]n[/latex] студентов представлены матрицей [latex]K \left(n,3 \right)[/latex]. Оценка ставится по четырёхбалльной системе; неявка обозначена единицей. Подсчитать количество неявок, неудовлетворительных, удовлетворительных, хороших и отличных оценок по каждому экзамену.

[latex]n[/latex] Оценки. Результат. Комментарий.
3 5 3 1

4 3 5

5 2 3

1: неявка (1), уд (1), отл (1).

2: уд (1), хор (1), отл (1).

3: неуд (1), уд (1), отл (1).

Тест пройден.
6 5 4 2 1 1 3

3 2 1 4 4 2

5 5 3 4 2 1

1: неявка (2), неуд (1), уд (1), хор (1), отл (1).

2: неявка (1), неуд (2), уд (1), хор (2).

3: неявка (1), неуд (1), уд (1), хор (1), отл (2).

Тест пройден.
2 2 4

1 5

3 3

1: неуд (1), хор (1).

2: неявка (1), отл (1).

3: уд (2).

Тест пройден.

Код программы (C++):

Java:

 

Изначально пользователю предлагается ввести количество студентов [latex]n[/latex]. Затем создаётся массив  [latex]K \left(n,3\right)[/latex], в котором будут храниться оценки студентов, а так же двумерный массив [latex]o \left(5,3 \right)[/latex], который, собственно говоря, и будет хранить статистику по оценкам. Внешний цикл перебирает экзамены (по [latex]j[/latex]), а внутренний — студентов (по [latex]i[/latex]). Затем пользователю предлагается ввести оценки студентов (сначала вводятся все оценки за первый экзамен, затем за второй, а потом уж за третий). В этом цикле находится «счётчик», который подсчитывает количество определённых оценок (или неявок) в зависимости от массива [latex]K \left(n,3\right)[/latex] на данном этапе цикла. Затем на экран выводятся элементы массива (в дальнейшем все элементы сохранятся, то есть с оценками студентов можно будет работать и дальше).

Код программы можно посмотреть тут (C++) и тут (Java).

Related Images:

5 thoughts on “Ю4.27

  1. — Вы «перевернули» массив по сравнению с общепринятым построением. Обычно считается, что первым изменяется последний индекс (говорят «по строкам»). Так массивы хранятся в памяти. В нашем случае, массив должен был бы задаваться n строчками по 3 числа в каждой. При вводе (и в тестах) вы расположили массив наоборот. Я не возражаю. Но не рассчитывайте, что всегда сможете сами задавать удобный формат данных. Обычно формат жестко задан.
    — Как показывает Ваша программа массив для хранения данных совсем не нужен. Никакие данные об оценках не используются повторно. Почему же задача на массивы? Потому, что счётчики (результаты работы) это как раз и есть массив размером 3х5. В этом случае Вам не понадобится столько условных операторов (уместен switch). Если Вас не пугает такой код o[j][K[i][j]]++, то стоит переделать программу с массивом счётчиков. Если пугает, то посмотрите как мы считали частоты букв здесь.
    — Почему лучше массив счётчиков? Результаты вычислений редко приходится просто печатать. Чаще их нужно передавать дальше (или возвращать) в виде некоторого объекта. Используя массив счётчиков Вы получаете программу, которая строит такой объект. Вторая причина — с массивом счётчиков программа становится более универсальной. Её почти не придется переделывать если экзаменов будет не три, а оценок не пять.

    А вообще — молодец.
    Может нужно было бы и так зачесть, но у Вас должно быть идеально 🙂

    • Исправлено.
      Если честно, я не совсем поняла, как реализовать программу с помощью этой частички кода o[j][K[i][j]]++, поэтому попробовала несколько иначе. Теперь все оценки сохранятся в массиве и с ними можно будет работать и дальше.

  2. Вы на правильном пути. Но куда делся массив n x 3 требуемый в условии?
    Что касается непонятного кода, нужно только внимательно посмотреть на свои строчки 12 и 13:

    Всё гораздо проще. Вы ведь делаете o[K[i]-1][j] += 1.
    Только с помощью серии странных проверок. В моём предложении я не использовал 0-й счётчик (у Вас лучше) и писал ++ вместо +=1.

    • Ой, извините, пожалуйста, я пока меняла, то смотрела, чтобы у меня результаты с прошлой программой не различались. А в конце всё посокращала, забыв про условие.
      Теперь вроде бы всё должно быть в порядке.
      Спасибо и за объяснение.

Добавить комментарий