Ответы на задачи 24 (С1)
Скачать 1.99 Mb.
|
Видим, что верно обрабатываются только областей E, F и G, для области H выводится неверный ответ (она закрашена, но программа выдает ответ «не принадлежит»), а для остальных никакого ответа не выводится.
Для исправления программы лучше всего составить новое сложное условие. Во-первых, вся выделенная область находится ниже параболы, поэтому условие имеет вид (y <= 3-x*x) and (...) где вместо многоточия нужно добавить некоторое условие. Закрашенная область может быть получена объединением двух областей: выше прямой (y>=x+1) и в первом квадранте ((x>=0) and (y>=0)). Эти две области объединяются с помощью логической операции ИЛИ (or). Таким образом, получаем if (y <= 3-x*x) and ((y >= x+1) or { выше прямой } (x>=0) and (y>=0)) { первый квадрант } then write('принадлежит') else write('не принадлежит');
Программы выводит какой-то ответ только тогда когда истинны первые два условия; в этом случае ответ зависит от истинности третьего условия:
Нужная область представляет собой объединение двух областей, которые описываются двойными неравенствами -5 <= x <= 1 и 7 <= x <= 13 Поскольку в Паскале двойные неравенства использовать нельзя (а в некоторых языках, например, в школьном алгоритмическом языке системы КуМир – можно!), заменяем их на сложные условия с логической операцией «И» (and): (-5 <= x) and (x <= 1) (7 <= x) and (x <= 13) Для объединения областей два эти условия нужно объединить с помощью логической операции «ИЛИ» (or). Таким образом, получаем такое решение: if (-5 <= x) and (x <= 1) or (7 <= x) and (x <= 13) then write('принадлежит') else write('не принадлежит'); Здесь учтено, что логическая операция «ИЛИ» имеет более низкий приоритет, чем «И», и поэтому выполняется последней.
Исправленная программа на Паскале: if (-3 <= x) and (x <= 3) or (9 <= x) and (x <= 15) then write('принадлежит') else write('не принадлежит');
|