
Программист торопился и написал программу неправильно.
Последовательно выполните следующее:
1) Приведите пример таких чисел x, y, при которых программа неправильно решает поставленную задачу.
2)
Укажите, как нужно доработать программу, чтобы не было случаев ее
неправильной работы. (Это можно сделать несколькими способами, поэтому
можно указать любой правильный способ доработки исходной программы.)
Решение задачи №3
1) Пример: x=2, y=2 (Любая пара (x,y), для которой выполняется: y>x или y>–x.)
2) Возможная доработка (Паскаль, разбиение области на две части прямой x=0):
if (y>=x*x-2) and (y<=x) and (x>=0) or (x<=0) and (y<=-x) and (y>=x*x-2) then
write('принадлежит')
else
write('не принадлежит')
Обратите внимание, что вариантов доработки может быть достаточно много, но обычно правильное описание заштрихованных областей в них представляет собой
или объединение двух (или более) возможно пересекающихся областей,
или исключение одной области из другой.
Возврат к списку задач
ПРОГРАММА НА
ПАСКАЛЕ
| ПРОГРАММА НА БЕЙСИКЕ | ПРОГРАММА НА СИ |
var x,y: real; begin readln(x,y); if y<=x then if y<=-x then if y>=x*x-2 then write('принадлежит') else write('не принадлежит') end. | INPUT x, y IF y<=x THEN IF y<=-x THEN IF y>=x*x-2 THEN PRINT "принадлежит" ELSE PRINT "не принадлежит" ENDIF ENDIF ENDIF END | void main(void) { float x,y; scanf("%f%f",&x,&y); if (y<=x) if (y<=-x) if (y>=x*x-2) printf("принадлежит"); else printf("не принадлежит"); } |
Решение задачи №3
1) Пример: x=2, y=2 (Любая пара (x,y), для которой выполняется: y>x или y>–x.)
2) Возможная доработка (Паскаль, разбиение области на две части прямой x=0):
if (y>=x*x-2) and (y<=x) and (x>=0) or (x<=0) and (y<=-x) and (y>=x*x-2) then
write('принадлежит')
else
write('не принадлежит')

или объединение двух (или более) возможно пересекающихся областей,
или исключение одной области из другой.
