Разберем задачу:
Задание 1. Составить программу, по которой определяется, лежит ли точка с заданными координатами (x, y) внутри заштрихованной области.
Составим условия, которым должны отвечать точки, попавшие в выделенную область (прямоугольник).
Во первых, заштрихованная область ограничена по координате , она находится правее x=-4 и левее x=3, следовательно, координата x должна удовлетворять условию: (x>=-4) and (x<=3).
Во вторых, заштрихованная область ограничена по координате y, она находится ниже y=3 и выше y=-2, следовательно, координата y должна удовлетворять условию: (y>=-2) and (y<=3).
Так как эти два условия должны выполняться одновременно, то запишем условный оператор (фрагмент программы):
if (x>=-4) and (x<=3) and (y>=-2) and (y<=3) then writeln(‘точка принадлежит’)
else writeln(‘точка не принадлежит’);
Задание 2. Составить программу, по которой определяется, лежит ли точка с заданными координатами (x, y) внутри заштрихованной области.
Заштрихованная область представляет собой часть кольца, ограниченного прямой y=2. Кольцо составлено двумя концентрическими окружностями с центром в начале координат. Запишем уравнения этих окружностей:
L1: x2+y2=42
L2: x2+y2=62
Так как точка должна лежать вне окружности L1 и одновременно внутри окружности L2, то получим условия: x2+y2>=16 и x2+y2<=36.
Запишем условный оператор (фрагмент программы):
if (x2+y2>=16) and (x2+y2<=36) and (y>=2) then writeln(‘точка принадлежит’)
else writeln(‘точка не принадлежит’);
Задание 3. Составить программу, по которой определяется, лежит ли точка с заданными координатами (x, y) внутри заштрихованной области.
L1: y=x-2
L2: y=x-5
L3: x2+y2=4
L4: x2+y2=25
1 часть: если y<=0 и x>=0, то y>=x-5 и y<=x-2
2 часть: если y>0 и x>=0, то x2+y2>=4 и x2+y2<=25
Так как точка не может попасть одновременно в 1 и 2 часть, то между условиями 1 и 2 части должен быть союз ИЛИ
if (y<=0) and (x>=0) and (y>=x-5) and (y<=x-2) or (y>0) and (x>=0) and (x*x+y*y>=4) and (x*x+y*y<=25)
then writeln(‘точка принадлежит’)
else writeln(‘точка не принадлежит’);
Задание 4. Составить программу, по которой определяется, лежит ли точка с заданными координатами (x, y) внутри заштрихованной области.
L1: y=-x-3
L2: x2+y2=32
L3: x2+y2=52
1 часть: если x<=0, то x2+y2<=9 и y>=-x-3
2 часть: если x>=0, то x2+y2<=25
if (x<=0) and (x*x+y*y<=9) and (y>=-x-3) or (x>=0) and (x*x+y*y<=25) then writeln(‘точка принадлежит’)
else writeln(‘точка не принадлежит’);
Задание 5. Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Вот она:
var x,y: real;
begin
readln(x,y);
if y>=x then
if y>=0 then
if y<=2-x*x then
write('принадлежит')
else
write('не принадлежит')
end.
Последовательно выполните следующее.
1. Перерисуйте и заполните таблицу, которая показывает, как работает программа при аргументах, принадлежащих различным областям (A, B, C, D, E, F и G). Точки, лежащие на границах областей, отдельно не рассматривать.
В столбцах условий укажите "да", если условие выполнится, "нет" если условие не выполнится, "—" (прочерк), если условие не будет проверяться, «не изв.», если программа ведет себя по-разному для разных значений, принадлежащих данной области. В столбце "Программа выведет" укажите, что программа выведет на экран. Если программа ничего не выводит, напишите "—" (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите «не изв». В последнем столбце укажите "да" или "нет".
2. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы.)
Решение.
Для составления правильной программы можно разбить область на две части:
Тогда программа будет выглядеть следующим образом:
if (x<0) and (y<=2-x*x) and (y>=x) or (x>=0) and (y>=0) and (y<=2-x*x) then write('принадлежит')
else write('не принадлежит');
2 способ - разбиение на две других части:
Тогда программа будет выглядеть следующим образом:
if (y<=2-x*x) and (y>=x) or (y<=x) and (y<=2-x*x) and (x>=0) then write('принадлежит')
else write('не принадлежит');