PascalABC.NET Составить программу, которая печатает true, если точка с координатами (х,...

0 голосов
53 просмотров

PascalABC.NET
Составить программу, которая печатает true, если точка с координатами (х, у) принадлежит заштрихованной области, и false в противном случае.
Заранее спасибо.


image

Информатика (19 баллов) | 53 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

В таких задачах основное - составить уравнения линий, ограничивающие заданный контур.
Уравнение прямой, проходящей через две точки, можно записать в виде \displaystyle \frac{x-x_A}{x_B-x_A}= \frac{y-y_A}{y_B-y_A} \qquad (1)
Первая линия (показана красным цветом) проходит через точки A(2;5) и В(5;1). Подставляя значения в (1) получаем
\displaystyle \frac{x-2}{5-2}= \frac{y-5}{1-5} ; \ \frac{x-2}{3}= \frac{y-5}{-4}; \ 8-4x=3y-15; \\ \\ 
3y=23-4x \to y= \frac{23-4x}{3}
Вторая линия (показана синим цветом) проходит через точки В(5;1) и С(2;-4). Подставляя значения в (1) получаем
\displaystyle \frac{x-5}{2-5}= \frac{y-1}{-4-1} ; \ \frac{x-5}{-3}= \frac{y-1}{-5}; \ 25-5x=3-3y; \\ \\ 3y=5x-22 \to y= \frac{5x-22}{3}
Вторая линия (показана зеленым цветом) имеет уравнение х=2.

Границы, а также внутренняя часть контура, составленного этими тремя линиями (треугольник) принадлежат одновременно трем областям, показанным цветными заливками. Каждая область определяется математическим неравенством. Если область лежит выше линии y=F(x), то y≥F(x), а если ниже, то y≤F(x)
Тогда для красной области
\displaystyle y\leq F(x); \quad y \leq \frac{23-4x}{3}
для синей области
\displaystyle y\geq F(x); \quad y \geq \frac{5x-22}{3}
и для зеленой области х≥2
А контур описывается совокупностью этих трех условий, объединенных логическим "И".
\displaystyle \left(y \leq \frac{23-4x}{3}\right) \land \left(y \geq \frac{5x-22}{3}\right) \land (x \geq 2) \qquad (2)
Условие (2) является логическим выражением и его значением в программе будет true/false, что и требуется по условию.

// PascalABC.NET 3.2, сборка 1379 от 21.01.2017

var
  x,y:real;
begin
  Write('Введите координаты точки: '); Read(x,y);
  Writeln((y<=(23-4*x)/3) and (y>=(5*x-22)/3) and (x>=2))
end.

Пример
Введите координаты точки: 3 2.1
True


image
(150k баллов)