Victor Surozhtsev
Просветленный
(35680)
4 года назад
Очень просто:
#include "iostream"
using namespace std;
bool f(double x,double y)
{ double z=x*x+y*y; if (x <= 0.5) if (y >= 0) if (z <= 1) return true; if (x >= 0.5) if (y >= 0) if (z >= 1) return true; return false; }
int main()
{ double x,y; for (;;) { cout << "x y > "; cin >> x >> y; if (f(x,y)) cout << "Yes" << endl; else cout << "No" << endl; } return 0; }
Дмитро УдаловУченик (29)
4 года назад
Вы мой спаситель. Если не трудно, могли бы вы расписать более подробное решение с комментариями. Ибо сейчас эта тема - мой бедрок. А преподаватель не очень хорош.
Victor SurozhtsevПросветленный (35680)
4 года назад
...но тогда программу надо будет всякий раз перепускáть для проверки вхождения в область новой пробной точки. Без ритуального return 0; можно обойтись - и без него всё прекрасно работает, но ведь главная функция main() типа int, так что у лучше пусть возвращает целый ноль.
Victor SurozhtsevПросветленный (35680)
4 года назад
Да, естественно, можно обойтись и без функции f(x,y), a x и y сделать типа float, вот только в моей системе программирования на C++ кликер стоит и поддерживаются настройки на вывод кириллицы. А в других системах надо писáть всякие там дурацкие сетлокейт-рус, так что даже не знаю, как всё будет работать, если я сделаю запрос на ввод типа: cout << "Введите координаты точки (x,y) >> ";
Victor SurozhtsevПросветленный (35680)
4 года назад
В общем так:
#include < include > // без пробелов между < и >
using namespace std; int main()
{ float a=0.5,x,y,z; cout << "Введите координаты точки (x,y) >> "; cin >> x >> y; z=x*x+y*y; if (x <= a) if (y >= 0) if (z <= 1) cout << "Принадлежит" << endl; if (x >= a) if (y >= 0) if (z >= 1) cout << "Принадлежит" << endl; else cout << "Не принадлежит" << endl; return 0; }
Дмитро УдаловУченик (29)
4 года назад
Когда вводишь координаты, которые не входят в область, сообщение "Не принадлежит" не выводится в консоль. Недочет, который я заметил.
inga zajonc
Искусственный Интеллект
(197046)
4 года назад
Если область просто окружность с центром в начале координат, находим положение точки в полярных координатах и с помощью одного if проверяем, не будет ли длина вектора больше радиуса:
if (sqrt(x*x+y*y) > r) cout >>"точка вне области";
Если кроме окружности имеем ещё прямую А, отсекающую от неё какой сегмент, проверяем, лежит ли точка ещё и с нужной стороны прямой А.
Для чего записываем уравнение прямой, (x-x0)(y1-y0)-(y-y0)(x1-x0), и если оно равно нулю, точка лежит на прямой, если меньше - правее, если больше - левее. Почему так разбирайтесь сами. x0,y0,x1,y1 - две точки, лежащие на этой прямой.
Если прямых две, проверяем обе.
inga zajoncИскусственный Интеллект (197046)
4 года назад
Если рассматривать уравнение окружности и уравнения прямых как единую систему уравнений решением будет одинаковый знак в решениях всех уравнений - только тогда точка окажется внутри области.