Предмет: Информатика,
автор: zhdmit
Написать программу, которая определяет, попадает ли точка с заданными координатами в область, закрашенную на рисунке серым цветом(график №10)если моно на раскале
Приложения:

Ответы
Автор ответа:
0
В таких задачах самое сложное - это правильно составить условие попадания (или непопадания) точки в указанную область.
Поскольку ничего не сказано, как поступать с точками, попавшими на границу области, будем считать, что они также удовлетворяют условию "попадания".
Из рисунка видно, что имеются две области, каждая из которых образована комбинацией прямоугольника и части окружности радиуса R.
Первая из затемненных областей использует прямоугольник, в котором координаты по длине меняются от -а до 0, а по высоте - от 0 -b до 0. Здесь надо составить два условия и объединить их по "И":
![(x in [-a;0]) land (y in [-b;0]) (x in [-a;0]) land (y in [-b;0])](https://tex.z-dn.net/?f=%28x+in+%5B-a%3B0%5D%29+land+%28y+in+%5B-b%3B0%5D%29)
И еще необходимо учесть окружность - область не должна выходить за ее границы, т.е. x²+y² ≤ R². Итак, для первой области запишем
![(x in [-a;0]) land (y in [-b;0]) land (x^2+y^2 le R^2) (x in [-a;0]) land (y in [-b;0]) land (x^2+y^2 le R^2)](https://tex.z-dn.net/?f=%28x+in+%5B-a%3B0%5D%29+land+%28y+in+%5B-b%3B0%5D%29+land+%28x%5E2%2By%5E2+le+R%5E2%29)
Рассуждая аналогичным методом, можно составить и второе выражение, определяющее условие попадания во вторую затемненную область.
![(x in [0;a]) land (y in [0; b]) land (x^2+y^2 > R^2) (x in [0;a]) land (y in [0; b]) land (x^2+y^2 > R^2)](https://tex.z-dn.net/?f=%28x+in+%5B0%3Ba%5D%29+land+%28y+in+%5B0%3B+b%5D%29+land+%28x%5E2%2By%5E2+%26gt%3B+R%5E2%29)
Нужное логическое выражение получится если оба выражения соединить по "ИЛИ".
Несколько слов о программировании. Можно запрограммировать выражение так, как оно написано. А можно написать так, чтобы было легко потом разбираться.
Предлагаю выбрать второй путь. Он потребует ввести дополнительные логические переменные.
var
a, b, R, x, y: real;
b1, b2: boolean;
begin
Write('Введите через пробел координаты точки (x,y): ');
Readln(x, y);
Write('Введите через пробел размеры a,b,R: ');
Readln(a, b, R);
b1 := ((x >= -a) and (x <= 0)); { по длине }
b1 := b1 and ((y >= -b) and (y <= 0)); { по высоте }
b1 := b1 and (sqr(x) + sqr(y) <= sqr(R)); { внутри и на границе окружности. }
b2 := ((x >= 0) and (x <= a)); { по длине }
b2 := b2 and ((y >= 0) and (y <= b)); { по высоте }
b2 := b2 and (sqr(x) + sqr(y) > sqr(R)); { снаржи и на границе окружности. }
b1:=(b1 or b2);
if b1 then Writeln('Попвдает') else Writeln('Не попадает')
end.
Тестовое решение
Введите через пробел коорднаты точки (x,y): -1 -1
Введите через пробел размеры a,b,R: 3 4 3
Попвдает
Поскольку ничего не сказано, как поступать с точками, попавшими на границу области, будем считать, что они также удовлетворяют условию "попадания".
Из рисунка видно, что имеются две области, каждая из которых образована комбинацией прямоугольника и части окружности радиуса R.
Первая из затемненных областей использует прямоугольник, в котором координаты по длине меняются от -а до 0, а по высоте - от 0 -b до 0. Здесь надо составить два условия и объединить их по "И":
И еще необходимо учесть окружность - область не должна выходить за ее границы, т.е. x²+y² ≤ R². Итак, для первой области запишем
Рассуждая аналогичным методом, можно составить и второе выражение, определяющее условие попадания во вторую затемненную область.
Нужное логическое выражение получится если оба выражения соединить по "ИЛИ".
Несколько слов о программировании. Можно запрограммировать выражение так, как оно написано. А можно написать так, чтобы было легко потом разбираться.
Предлагаю выбрать второй путь. Он потребует ввести дополнительные логические переменные.
var
a, b, R, x, y: real;
b1, b2: boolean;
begin
Write('Введите через пробел координаты точки (x,y): ');
Readln(x, y);
Write('Введите через пробел размеры a,b,R: ');
Readln(a, b, R);
b1 := ((x >= -a) and (x <= 0)); { по длине }
b1 := b1 and ((y >= -b) and (y <= 0)); { по высоте }
b1 := b1 and (sqr(x) + sqr(y) <= sqr(R)); { внутри и на границе окружности. }
b2 := ((x >= 0) and (x <= a)); { по длине }
b2 := b2 and ((y >= 0) and (y <= b)); { по высоте }
b2 := b2 and (sqr(x) + sqr(y) > sqr(R)); { снаржи и на границе окружности. }
b1:=(b1 or b2);
if b1 then Writeln('Попвдает') else Writeln('Не попадает')
end.
Тестовое решение
Введите через пробел коорднаты точки (x,y): -1 -1
Введите через пробел размеры a,b,R: 3 4 3
Попвдает
Похожие вопросы
Предмет: Қазақ тiлi,
автор: kuchurkin06
Предмет: Русский язык,
автор: elnazkabdolova
Предмет: Английский язык,
автор: Byse
Предмет: Химия,
автор: molkometty