Текст задания :
Написать программу, определяющую по введенным с клавиатуры значениям координаты точки (x,y) её принадлежность к одному из образов.
Решение :
Создадим консольное приложение.
Оценив задание, очевидно что нам нужны формулы построения всех заданных фигур, а именно линия, эллипс и прямоугольник.
Функция линии определяется по формуле 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]
Всем удачной компиляции 😉