1. Сколько синтаксических и программистских ошибок содержит программа? Ответ: 2
В динамическом массиве, создаваемом в программе, элементы пронумерованы от 0 до N-1, а обращение происходит, в том числе, к N-му элементу. В строке s[j] in [0..9] 0 и 9 являются символами и должны быть взяты в апострофы. Больше ошибок нет – используются конструкции, допустимые в Delphi, точки с запятой отсутствуют в тех местах, где они не обязательны.
2. Будут ли данные считаны верно? Ответ: да
Ошибок в алгоритме считывания нет. Баллы каждого участника олимпиады отделяются от конца строки и переводятся в число.
3. Сколько ошибок есть в алгоритме (ходе) решения? Ответ: 1
Неверно обрабатывается случай равенства баллов на границе призеров.
4.Есть ли ошибки в реализации сортировки и вычислении 45% с округлением вниз? Ответ: нет
Сортировка пузырьком и вычисление процентов организованы верно.
ОЦЕНКА: 2 балла
Данное решение содержит две синтаксических ошибки, одну принципиальную ошибку и не является эффективным.
2.
1. Сколько синтаксических ошибок в программе - Ответ 1
В программе нет явных синтаксических ошибок. Есть опечатки в цикле for (int i=50;i≥0;i++). А именно: вместо символа ≥ нужно писать >=, а также вместо i++ в данном цикле следует писать i--
2. Верно ли считаны данные? Ответ: да
Ошибок в алгоритме считывания нет. В языке С++ слова будут считаны корректно. Последний элемент строки будет сразу считан как число.
3. Сколько ошибок есть в алгоритме (ходе) решения? Ответ: 0
4. Является ли решение задачи эффективным? Ответ: да
По количеству действий и используемой памяти решение практически совпадает с эталонным
ОЦЕНКА: 4 балла
Данная программа реализует верный алгоритм решения задачи. Указанные 2 ошибки в записи заголовка цикла можно считать опечатками, которые легко исправляются при отладке (одну из них на компьютере сделать невозможно), и считать их за одну синтаксическую ошибку.
3.
1. Сколько синтаксических и программистских ошибок содержит программа? Ответ: 3
Согласно справочнику языка Ruby программа содержит как минимум следующие ошибки: использование в диапазонах значений трех точек вместо двух, использование слова THEN (оно просто лишнее), выход за границу массива (обращение в цикле к элементу MAS[n+1]. О данных ошибках можно догадаться и не зная синтаксиса языка.
2. Будут ли считаны все входные данные? Ответ: нет
Считывается только количество участников. Информация об участниках и их баллах не считывается.
3. Является ли ход решения верным? Ответ: нет
Вне зависимости от того, набрали ли участники на границе призеров одинаковые баллы или нет, программа действует одинаково и, в большинстве случаев, не верно.
4. Есть ли ошибки в реализации алгоритма? Ответ: да
В решении предполагалась сортировка, она реализована не верно. Округление процентов также проводится в большую, а не в меньшую сторону. Последний цикл for является лишним или ошибочным.
ОЦЕНКА: 1 балл
4.
1. Сколько различных синтаксических ошибок содержит программа? Ответ: 0
Синтаксических ошибок в программе нет. Массив r не обнуляется, но в среде BP для глобальных переменных это делается автоматически.
2. Будут ли считаны все входные данные верно? Ответ: нет
Использование read, а не readln при считывании количества участников приводит к неверному считыванию первой строки. В результате последняя строка входных данных не будет считана вообще.
3. Есть ли в решении другие ошибки, которые надо учитывать при оценивании? Ответ: нет
ОЦЕНКА: 3 балла
5.
1. Сколько различных синтаксических и программистских ошибок содержит программа? Ответ: 0
Синтаксических ошибок в программе нет. Массив M не обнуляется, но компилятор это делает автоматически. При описании M(50) в языке BASIC задается массив из 51 элемента с индексами от 0 до 50.
2. Верно ли производится считывание входных данных? Ответ: нет
В разборе входных строк допущена ошибка. После нахождения первого пробела, второй ищется с места, в котором находится первый, следовательно, все функции INSTR будут находить только первый пробел. В результате числовые значения баллов участников распознаны не будут.
3.Является ли решение верным для всех случаев? Ответ: нет
Алгоритм неверно определяет количество призеров в случае, когда 45% от числа участников не является целым числом (тогда призерами всегда будут названы более 45% участников). Случай равенства баллов на границе дипломов тоже разбирается не верно.
4. ОЦЕНКА: 1 балл
1.
Представлено верное, решение, содержащее всего одну синтаксическую ошибку (отсутствие двоеточия после последнего ELSE). Решение не является эффективным, т.к. сохраняет баллы всех участников в массиве.
ОЦЕНКА: 3 балла
2.
Представлено эффективное решение, но оно неверно работает, когда 45% от числа участников не является целым числом. В этом случае в число призеров сначала будет включена лишняя группа участников, а если они набрали меньше половины баллов, то из числа призеров будут исключены лишние участники.
ОЦЕНКА: 2 балла
3.
В решении неверно считываются входные данные: в операторе ввода записаны лишние символы пробела (это можно считать синтаксической ошибкой, программа с ними не компилируется), и неверно заполняется основной массив А, вероятно, в результате опечатки. Дальнейшее решение является верным для всех случаев и эффективным.
ОЦЕНКА: 3 балла
4.
Решение является правильным, но не эффективным.
ОЦЕНКА: 3 балла
5.
Неверно реализована часть алгоритма, связанная с определением случая, когда несколько участников олимпиады набрали равное число баллов.
ОЦЕНКА: 1 балл
6.
Неэффективный алгоритм, основанный на сохранении всех данных и сортировке массива. В реализации алгоритма имеется ошибка – массив сортируется по возрастанию баллов, а 45% от числа N берется от начала массива, а не от конца. Для исправления решения необходимо изменить выражение для вычисления значения переменной d. Также в последнем случае необходимо выводить не значение A[d], а значение A[d+1].
ОЦЕНКА: 2 балла
7.
Неэффективный алгоритм, основанный на сохранении всех данных и сортировке массива. В реализации алгоритма имеется ошибка в вычислении индекса в массиве участника, имеющего минимальный балл среди награжденных. Во-первых, при вычислении переменной NumberOfPlayers выполняется деление N/100 с отбрасыванием дробной части (в языке C++ деление целого числа на целое производится с отбрасыванием дробной части), поэтому 45% от числа участников вычисляется неверно. Во-вторых, если в переменной NumberOfPlayers записано число награжденных участников, то номер последнего из награжденных будет N- NumberOfPlayers, а не (N-1)- NumberOfPlayers, как предполагается в работе выпускника.
ОЦЕНКА: 2 балла