Напишите условие на любом языке программирования для проверки попадания вводимой точки.A(x, y) в область, ограниченную функциями f1(y) =0.5, f2(y) = 3.5, f3(x) =sin(x), f4(y) =cos(x). Область включает границы. Мне нужно подробно. Даю баллы.
Ответы
Ответ:
Насколько я понял, четвёртая функция должна быть f4(x) =cos(x). Видимо там опечатка (вместо икс записан игрек). Скорее всего так, а иначе не получится область между этими функциями.
То есть, все четыре уравнения выглядят так:
x = 0.5
x = 3.5
y = sin(x)
y = cos(x)
Решить можно например так (проверял в PascalABCNET):
begin
var x := ReadReal('x=');
var y := ReadReal('y=');
if (x>=0.5) and (x<=3.5) and (y>=Min(Sin(x),Cos(x))) and (y<=Max(Sin(x),Cos(x)))
then write('принадлежит')
else write('не принадлежит');
end.
Объяснение:
А вообще, для таких заданий я сначала рисую графики всех заданных функций в любой удобной графической программе (например см. первую приложенную внизу картинку). Это чтобы понять, что вообще за область- какой формы и как и чем ограничена.
А уже потом составляю алгоритм, определяющий попала ли точка в заданную область. Алгоритм я составляю внутри моей специально написанной для таких заданий программки (на PascalABCNET). Эта программка рисует область (заданную алгоритмом) в окне, что позволяет сразу визуально оценить, всё ли правильно задано, и нет ли пропущенных областей (это иногда бывает в непродуманных нагромождениях if-then-else -для некоторые точки может просто пропустить, без вывода ответа, либо с неверным).
Когда алгоритм составлен, переношу его в простую программу, которая (как и требуется обычно в таких заданиях) запрашивает координаты точки и сообщает, попадает ли она в область.
Вот, собственно моя программка, отрисовывающая в окне область, заданную алгоритмом (результат работы программы см. на второй приложенной внизу картинке):
uses GraphABC;
begin
var x, y: real;
var a, b, c: integer;
SetWindowPos(15, 56);
SetWindowSize(801, 801); // квадратное окно (по 400 пикселей в плюс и минус и один пиксель для нуля)
LockDrawing; // повысим скорость, отключив вывод на экран (рисование будет идти только во внеэкранном буфере)
for a := 0 to 801 do // два цикла (по x и y) перебирают все точки окна
begin
x := (a - 401) / 50; // пересчёт из пикселей в координаты (масштаб задан тут)
for b := 0 to 801 do
begin
y := (b - 401) / 50;
c:=2; // точки будут выделены красным цветом, если их пропустит основной алгоритм (ниже)
// тут располагаем основной алгоритм (любое нагромождение if-then-else и других условий или просто одну строку, как сейчас)
// алгоритм должен записать в переменную c единицу (если нужно ставить точку), либо ноль (если не нужно)
c := ( (x>=0.5) and (x<=3.5) and (y>=Min(Sin(x),Cos(x))) and (y<=Max(Sin(x),Cos(x))) ) ? 1 : 0; // условная операция (вместо if-then-else)
if c=1 then // если алгоритм присвоил единицу переменной c, то ставим чёрную точку
SetPixel(Round(401 + x * 50), Round(401 - y * 50), clBlack);
if c=2 then // если алгоритм не изменил значение переменной c, то ставим красную точку
SetPixel(Round(401 + x * 50), Round(401 - y * 50), clRed);
end;
end;
Pen.Color := clBlue; // рисуем оси
Line(0, 401, 801, 401);
Line(401, 0, 401, 801);
Redraw; // обновляем кадр (вывод внеэкранного буфера на экран)
end.
![](https://st.uroker.com/files/472/472007f477bd6299fe5fe999cbcf067e.png)
![](https://st.uroker.com/files/958/958db5b38f0fb4d710d6b4de5abf402d.png)