Ответы на задачи 24 (С1)
Скачать 1.99 Mb.
|
Простейший способ исправить ошибку – построить условия для каждой из закрашенных областей, и затем объединить их с помощью операции ИЛИ. Записываем условия для обеих интересующих нас областей (B и D) B: (y >= 2-x) и (y <= x*x) и (x <= 0) D: (y <= 2-x) и (x >= 0) и (y >= 0) и (y <= x*x) Обратите внимание: легко забыть условие x<=0 для области B и условие x>=0 для области D! В этой задаче обе области находятся под прямой y=2-x, поэтому это условие будет общим. Получаем: C или D: (y >= 2-x) и (y <= x*x) и (x <= 0) или (y <= 2-x) и (x >= 0) и (y >= 0) и (y <= x*x) Переводим на язык программирования: if (y >= 2-x) and (y <= x*x) and (x <= 0) or (y <= 2-x) and (x >= 0) and (y >= 0) and (y <= x*x) then write('принадлежит') else write('не принадлежит'); Условие можно записать и в другом виде: if (y <= x*x) and (y >= 0) and ((x>=0) and (y<=2-x) or (y>=2-x) and (x<=0)) then write('принадлежит') else write('не принадлежит');
if x <= 1 then if y <= 1 then if x*x + y*y <= 1 then write('принадлежит') else write('не принадлежит'); Обратите внимание, что второе условие проверяется в приведенной программе только тогда, когда истинно первое, а третье – только тогда, когда истинны первые два. В остальных ячейках (если условие не проверяется) нужно ставить прочерк:
Программы выводит какой-то ответ только тогда когда истинны первые два условия; в этом случае ответ зависит от истинности третьего условия:
Видим, что верно обрабатываются только области A и B, для области E выводится неверный ответ (эта область не закрашена, но программа выдает ответ «принадлежит»), а для остальных никакого ответа не выводится.
Для исправления программы лучше всего составить новое сложное условие. Выделенная область может быть получена как объединение двух областей: круга x*x + y*y <= 1 и квадрата с единичной стороной, левый нижний угол которого находится в начале координат: if (x*x + y*y <= 1) { круг } or ((x >= 0) and (x <= 1) and { квадрат} (y >= 0) and (y <= 1)) then write('принадлежит') else write('не принадлежит');
if y >= 0 then if x <= 1 then if y >= x*x then write('принадлежит') else write('не принадлежит'); Обратите внимание, что второе условие проверяется в приведенной программе только тогда, когда истинно первое, а третье – только тогда, когда истинны первые два. В остальных ячейках (если условие не проверяется) нужно ставить прочерк:
Программы выводит какой-то ответ только тогда когда истинны первые два условия; в этом случае ответ зависит от истинности третьего условия:
Видим, что верно обрабатываются только области A и D, для области E выводится неверный ответ (эта область закрашена, но программа выдает ответ «не принадлежит»), а для остальных никакого ответа не выводится.
Для исправления программы лучше всего составить новое сложное условие. Выделенная область может быть получена как объединение двух областей: области выше параболы y >= x*x и квадрата с единичной стороной, левый нижний угол которого находится в начале координат: if ((y >= x*x) and (x <= 1)) { над параболой } |