Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x,y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно.
ПРОГРАММА
НА ПАСКАЛЕ
var x,y: real;
begin
readln(x,y);
if x*x+y*y>=4 then
if x>= –2 then
if y<= –x then
write('принадлежит')
else
write('не принадлежит')
end.
ПРОГРАММА
НА БЕЙСИКЕ
INPUT x, y
IF x*x+y*y>=4 THEN
IF x>= –2 THEN
IF y<= –x THEN
PRINT "принадлежит"
ELSE
PRINT "не принадлежит"
ENDIF
ENDIF
ENDIF
END
ПРОГРАММА
НА СИ
void main(void)
{ float x,y;
scanf("% f % f",&x,&y);
if (x*x+y*y>=4)
if (x>= –2)
if (y<= –x)
printf("принадлежит");
else
printf("не принадлежит");
}
Последовательно выполните следующее:
1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу.
2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Ответ
Содержание верного ответа и указания по оцениванию
(допускаются иные формулировки ответа, не искажающие его смысла)
Элементы ответа:
1) Пример: x= –1, y= –3 (Любая пара (x,y), для которой выполняется: x2+y2<4 или x< –2 или (y<0 и y<= –x))
2) Возможная доработка (Паскаль):
if (x*x+y*y>=4) and (x>= –2) and (y<= –x) and (y>=0) then
write('принадлежит')
else
write('не принадлежит')
(могут быть и другие способы доработки).
Критерии оценивания
Правильно ли указаны числа X и Y, при которых программа неверно решает поставленную задач
ДА
Для всех ли точек плоскости доработанная программа выводит ответ «Принадлежит» или «Не принадлежит"
ДА
Правильно ли в доработанной программе задана область, для которой программа должна вывести сообщение «Принадлежит»?
ДА
Надо ли снизить оценку за синтаксическую ошибку – использование знака "≥" вместо ">=" при сравнении двух чисел?
НЕТ
Оценка: 3
Правильно ли указаны числа X и Y, при которых программа неверно решает поставленную задачу?
ДА
Для всех ли точек плоскости доработанная программа выводит ответ «Принадлежит» или «Не принадлежит»?
ДА
Правильно ли в доработанной программе задана область, для которой программа должна вывести сообщение «Принадлежит»?
ДА (для правильного задания области необходимо было добавить дополнительное условие y>=0, и это сделано в доработанной программе.)
Оценка: 3
Верно ли выполнил выпускник первое задание (указать числа X и Y, при которых программа неверно решает поставленную задачу)?
ДА (Выпускник не указал пару чисел явно, но записал, что в качестве такой пары подходят все точки, у которых x<-2)
Исправлена ли ошибка в программе, связанная с неверным использованием инструкции IF?
ДА
Правильно ли в доработанной программе задана область, для которой программа должна вывести сообщение «Принадлежит»?
НЕТ
Оценка:
2 ( верно выполнены два задания из трех – указана точка, для которой программа неверно решает поставленную задачу и исправлена ошибка с неверной организацией условия IF. Вторая ошибка (неверное задание области) – не исправлена.)
Верно ли выполнил выпускник первое задание (указать числа X и Y, при которых программа неверно решает поставленную задачу)?
НЕТ
Исправлена ли ошибка в программе, связанная с неверным использованием инструкции IF?
НЕТ
Правильно ли в доработанной программе задана область, для которой программа должна вывести сообщение «Принадлежит»?
ДА (Указание выпускника на то, что нужно добавить дополнительное условие y>=0 можно считать правильным заданием области, о которой идет речь в условии задачи.)
Оценка:
1 (верно выполнена одна часть задания – добавлено дополнительное условие, ограничивающее область, но при этом точка явно не указана (а из указанных точек подходят не все) и не исправлены ошибки, связанные с отсутствием вариантов ELSE)
Верно ли выполнил выпускник первое задание (указать числа X и Y, при которых программа неверно решает поставленную задачу)?
НЕТ
Исправлена ли ошибка в программе, связанная с неверным использованием инструкции IF?
ДА
Правильно ли в доработанной программе задана область, для которой программа должна вывести сообщение «Принадлежит»?
НЕТ
Оценка:
1 (верно выполнена одна часть задания – добавлены варианты ELSE к двум условным инструкциям IF, что оценивается в 1 балл. Но не исправлена ошибка с определением области и не указана пара чисел X, Y, для которой программа неверно решает поставленную задачу.)
Можно ли считать предложенный рисунок указанием пары чисел X, Y, для которой программа неверно решает поставленную задачу?
ДА
Исправлена ли ошибка в программе, связанная с неверным использованием инструкции IF?
НЕТ
Правильно ли в доработанной программе задана область, для которой программа должна вывести сообщение «Принадлежит»?
ДА
Оценка:
2 (Выпускник верно указал точку, что оценивается в 1 балл. Также выпускник указал, что нужно добавить условие y>=0, но при этом он вообще не написал ни одного слова ELSE, поэтому ошибка, связанная с отсутствием ELSE не может считаться исправленной (несмотря на то, что выпускник объединил все условия в одно, и ему было достаточно написать только одно слово ELSE).
Правильно ли указаны числа X и Y, при которых программа неверно решает поставленную задачу?
НЕТ
Исправлена ли ошибка в программе, связанная с неверным использованием инструкции IF?
НЕТ
Правильно ли в доработанной программе задана область, для которой программа должна вывести сообщение «Принадлежит»?
ДА
В ответе выпускника имеются синтаксические ошибки – инструкции IF не закрыты инструкциями ENDIF. Следует ли это учитывать при выставлении оценки?
НЕТ
Оценка:
1 (верно выполнено только одна часть задания – добавлено дополнительное условие Y>=0, задающее область.)
Правильно ли указаны числа X и Y, при которых программа неверно решает поставленную задачу?
НЕТ
Исправлена ли ошибка в программе, связанная с неверным использованием инструкции IF?
ЧАСТИЧНО (В неисправленной программе была одна инструкция ELSE, а в работе выпускника их две.)
Правильно ли в доработанной программе задана область, для которой программа должна вывести сообщение «Принадлежит»?
НЕТ
Сделал ли выпускник какое-либо улучшение программы, то есть стала ли программа работать верно для некоторых точек, для которых она ранее работала неверно?
ДА
Оценка:
1 (Несмотря на то, что ошибка с отсутствием варианта ELSE исправлена не полностью (только к одной инструкции IF добавлен вариант ELSE), а ошибка с неверным заданием области не была исправлена совсем, работу следует оценить в 1 балл, так как исправленная программа стала работать корректно для большего числа случаев, чем исходная (например, для случая X<-2), но не для всех возможных случаев.)
Правильно ли указаны числа X и Y, при которых программа неверно решает поставленную задачу?
ДА
Исправлена ли ошибка в программе, связанная с неверным использованием инструкции IF?
ДА
Правильно ли в доработанной программе задана область, для которой программа должна вывести сообщение «Принадлежит»?
НЕТ
Сделал ли выпускник какое-либо ухудшение программы (есть ли такие точки, для которых исходная программа работала верно, а доработанная – неверно)?
ДА (Обратите внимание на точки, для которых выполнено условие Y>=0)
Можно ли добавить 1 балл выпускнику за исправление ошибок, связанных с добавлением варианта ELSE для тех инструкций IF, где раньше их не было.
НЕТ
Оценка: 1 (Работа оценивается в 1 балл только за верное указание пары чисел X, Y. Доработка программы не может быть оценена в дополнительный балл, поскольку выпускник внес в исходную программу ухудшение (для некоторых точек программа ранее выдавала верный ответ, а теперь выдает неверный).)
{Отдельные задания}
1.
1 балл
Пара чисел X, Y указана неверно (для данной точки программа выдает верный ответ "Не принадлежит"). Исправлена ошибка, связанная с отсутствием вариантов ELSE, но не исправлена ошибка, связанная с неверным заданием области. Программа стала верно работать в большем числе случаев, но не для всех точек плоскости.
2.
1 балл
Пара чисел (X, Y) указана верно (для данных чисел программа выдает ответ "Принадлежит", а должна выдавать ответ "Не принадлежит"). Исправлена одна ошибка, связанная с неверным заданием области (добавлено условие y>=0), но в доработанном решении неверно организованы варианты else для условных инструкций – ветка else в данном решении по правилам языка относится только к первому условию if, поэтому если не выполнено второе или третье условие, то программа ничего не выдаст. В результате, например, для точки x=-1, y=10 первоначальная программа выдавала "Не принадлежит", а теперь не выдает ничего, то есть появились точки, для которых программа стала работать неверно, хотя ранее работала верно. По критериям оценивания доработанное решение не должно работать хуже исходного, поэтому доработка решения оценивается в 0 баллов. Итоговая оценка – 1 балл.
3.
2 балла
Пара чисел X, Y не указана но задание доработано верно. Несмотря на то, что дополнительное условие задано в необычной форме (y>=x+2), не совпадающей с авторским ответом, область задана верно, в чем можно убедиться, построив пересечения областей из ответа школьников. Синтаксические ошибки вроде использования знака "≥" для операции сравнения или использование верхнего индекса "x2" вместо умножения для возведения в квадрат не искажает замысла автора, поэтому не влияет на оценку.
4.
2 балла
Пара чисел X, Y указана верно. Исправлена только одна ошибка (неверное задание области – добавлено условие y>=0).
5.
1 балл
Верно указана пара чисел (для данной пары чисел программа ничего не выводит). Доработка программы отсутствует.
6.
3 балла
Пара чисел X, Y указана верно. Последующий комментарий непонятен, но на ответ не влияет, поэтому его не нужно учитывать. Решение доработано полностью, несмотря на неформальную запись текста, который нужно добавить в условие над строкой, идея решения полностью понятно. В решении присутствует лишнее условие x<0, однако доработанная программа по-прежнему работает верно, поэтому наличие лишнего условия не влияет на оценку.
7.
0 баллов
Несмотря на то, что выпускник добавил недостающее условие Y>=0, он ошибочно использовал в условной инструкции IF логические операции OR, вместо AND. В итоге программа стала выводить неверный ответ "Принадлежит" для всех точек плоскости.
8.
1 балл
Пара чисел X, Y указана верно. Несмотря на то, что в работе сформулировано верное утверждение "не хватает условия else после if", это не является доработкой программы, поэтому итоговая оценка – 1 балл за верно выполненное первое задание.