Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
Задача 2. 31Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Вот она:
var x, y: real;
begin
readln(x, y);
if y >= 0 then
if x <= 1 then
if y >= x*x then
write('принадлежит')
else
write('не принадлежит');
end.
1. Перерисуйте и заполните таблицу, которая показывает, как работает программа при аргументах, принадлежащих различным областям (A, B, C, D, E, F). Точки, лежащие на границах областей, отдельно не рассматривать.
В столбцах условий укажите "да", если условие выполнится, "нет" если условие не выполнится, "—" (прочерк), если условие не будет проверяться, «не изв.», если программа ведет себя по-разному для разных значений, принадлежащих данной области. В столбце "Программа выведет" укажите, что программа выведет на экран. Если программа ничего не выводит, напишите "—" (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите «не изв». В последнем столбце укажите "да" или "нет".
2. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы.
Решение. Второе условие проверяется в программе только тогда, когда истинно первое, а третье – только тогда, когда истинны первые два. В остальных ячейках (если условие не проверяется) нужно ставить прочерк:
Обл. | y >= 0 | x <= 1 | y >= x*x | вывод | верно? |
A | да | да | да | принадлежит | да |
B | да | нет | – | – | нет |
C | да | нет | – | – | нет |
D | да | да | нет | не принадлеж | да |
E | да | да | нет | не принадлеж | нет |
F | нет | – | – | – | нет |
Для исправления программы лучше всего составить новое сложное условие. Выделенная область может быть получена как объединение двух областей: области выше параболы y >= x*x и квадрата с единичной стороной, левый нижний угол которого находится в начале координат:
if ((y >= x*x) and (x <= 1)) or ((x >= 0) and (x <= 1) and (y >= 0) and (y <= 1))
then write('принадлежит')
else write('не принадлежит');
Для квадрата ограничение сверху по координате Y несущественно (вся область прямо над квадратом выделена), и можно заменить квадрат на верхнюю часть полосы, убрав последнее условие: if ((y >= x*x) and (x <= 1)) or ((x >= 0) and (x <= 1) and (y >= 0).
Задача 3. 29Начнем с заполнения таблицы. Обратите внимание, что второе условие проверяется в приведенной программе только тогда, когда истинно первое, а третье – только тогда, когда истинны первые два. В остальных ячейках (если условие не проверяется) нужно ставить прочерк:
Программа выводит ответ только тогда когда истинны первые два условия; в этом случае ответ зависит от истинности третьего условия:
Верно обрабатываются только области B и E, для области F выводится неверный ответ (эта область не закрашена, но программа выдает ответ «принадлежит»), а для остальных никакого ответа не выводится.
Обл. | y>=0? | y>=2-x? | y<=x*x? | вывод | верно? |
A | да | нет | – | – | нет |
B | да | да | да | принадлежит | да |
C | да | нет | – | – | нет |
D | да | нет | – | – | нет |
E | да | да | нет | не принадлежит | да |
F | да | да | да | принадлежит | нет |
G | нет | – | – | – | нет |
H | нет | – | – | – | нет |
построить условия для каждой из закрашенных областей, и затем объединить их с помощью операции ИЛИ. Записываем условия для обеих интересующих нас областей (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!
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 |


