Попадание в определенную область сетки координат

Текст задания :
Написать программу, определяющую по введенным с клавиатуры значениям координаты точки (x,y) её принадлежность к одному из образов.
Решение :
jiQvXaoB6-c
Создадим консольное приложение.
Оценив задание, очевидно что нам нужны формулы построения всех заданных фигур, а именно линия, эллипс и прямоугольник.
Функция линии определяется по формуле y=(2/3)*x+4, значит условие должно быть y > ((2 / 3) * x + 4), но это не единственное условие для первой области, точка также не должна принадлежать эллипсу.
Наш эллипс описывается формулой (x-5)^2/2^2+(y-6)^2/5^2=1, значит первая область должна отвечать двум условиям y > ((2 / 3) * x + 4) и (sqr(x — 5) / 4 + sqr(y — 6) / 25) > 1
Вторая область должна удовлетворять обеим предыдущим условиям т.е. быть выше линии и попадать в эллипс: y > ((2 / 3) * x + 4) и (sqr(x — 5) / 4 + sqr(y — 6) / 25) < 1 Третья область ниже линии, попадает в эллипс и не попадает в прямоугольник. Проверку попадания в прямоугольник реализуем в виде функции : [cc lang="delphi" tab_size="2" line_numbers="false" no_links="false"] function pr(x, y: real): boolean; begin if (x > 5) and (x < 11) and (y > 1) and (y < 5) then Result := true else Result := false; end; [/cc] Условие для третьей области получилось таким : y < ((2 / 3) * x + 4) и (sqr(x - 5) / 4 + sqr(y - 6) / 25) < 1 и pr(x, y) = false. Четвертая область ниже линии, попадает в эллипс, попадает в прямоугольник : y < ((2 / 3) * x + 4) и sqr(x - 5) / 4 + sqr(y - 6) / 25) < 1 и pr(x, y) = true. Пятая область ниже линии, не попадает в эллипс и попадает в прямоугольник, тут проверяем только эллипс и прямоугольник, остальные условия излишни : (sqr(x - 5) / 4 + sqr(y - 6) / 25) > 1 и pr(x, y) = true.
Шестая область ниже линии, и не попадает в эллипс и прямоугольник : y < ((2 / 3) * x + 4) и (sqr(x - 5) / 4 + sqr(y - 6) / 25) > 1 и pr(x, y) = false.

Код конечного модуля :
[cc lang=»delphi» tab_size=»2″ line_numbers=»false» no_links=»false»]
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}

uses
System.SysUtils;
var
x, y: real;
function pr(x, y: real): boolean;
begin
if (x > 5) and (x < 11) and (y > 1) and (y < 5) then Result := true else Result := false; end; begin writeln('Введите x'); Readln(x); writeln('Введите y'); Readln(y); if (y > ((2 / 3) * x + 4)) and ((sqr(x — 5) / 4 + sqr(y — 6) / 25) > 1) then
writeln(‘Точка принадлежит 1 области’);
if (y > ((2 / 3) * x + 4)) and ((sqr(x — 5) / 4 + sqr(y — 6) / 25) < 1) then writeln('Точка принадлежит 2 области'); if (y < ((2 / 3) * x + 4)) and ((sqr(x - 5) / 4 + sqr(y - 6) / 25) < 1) and (pr(x, y) = false) then writeln('Точка принадлежит 3 области'); if (y < ((2 / 3) * x + 4)) and ((sqr(x - 5) / 4 + sqr(y - 6) / 25) < 1) and (pr(x, y) = true) then writeln('Точка принадлежит 4 области'); if ((sqr(x - 5) / 4 + sqr(y - 6) / 25) > 1) and (pr(x, y) = true) then
writeln(‘Точка принадлежит 5 области’);
if (y < ((2 / 3) * x + 4)) and ((sqr(x - 5) / 4 + sqr(y - 6) / 25) > 1) and
(pr(x, y) = false) then
writeln(‘Точка принадлежит 6 области’);
Readln;
end.
[/cc]
Всем удачной компиляции 😉

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *