C/C++

Решение задач с использованием базовых алгоритмов.

Составить программу на C++, которая выдает одно из сообщений «Да», «Нет», «На границе» в зависимости от того, лежит ли точка внутри заштрихованной области, не заштрихованной области или на её границе. Области задаются графически следующим образом.
Чуток порезвился. :)
 #include  
#include

template
int check_into_area(const T x, const T y, BorderConditions... borders)
{
/*
Проверяет нахождение точки с координатами x, y
внутри области, задаваемой условиями границ.

Условия границ должны быть вызываемыми
объектами с сигнатурой int(Type, Type).
Возвращаемое значение вызова объекта интерпретируется так:
0 - точка находится вне границы

Возвращаемое значение:

-1, если точка находится внутри области
0, если точка находится на границе области
1, если точка находится вне области
*/
int res = -1;
for( auto& bordercheck : { std::function(borders)... } ) {
int check_on_border = bordercheck(x, y);
if(check_on_border > 0) return 1;
res = std::max(res, check_on_border);
}
return res;
}

template
int sgn(const T value, const U border = U(0))
{
return (border < value) ? 1 : (value < border) ? -1 : 0;
}

// Пример использования функции

#include
#include

int main()
{
float x, y;
std::cin >> x >> y;
std::cout int{ return sgn(x); },
[](auto x, auto y)->int{ return sgn(9, x*x + y*y); },
[](auto x, auto y)->int{ return sgn(x*x + y*y, 64); }
) + 1 ];
return 0;
}
Макс Макс
Макс Макс
12 091
Лучший ответ
Максим Орлов ? Уууух!
Посмотрит новичок на такой вариант решения и побежит сначала в "Красное и Белое", чтобы утихомирить ? разбушевавшиеся эмоции ?, а потом в соседнюю ветку, где вопросы про Python ?
 double x, y;
cin >> x >> y;
double t = x * x + y * y;
cout 9 && t < 64 ? "Да" : x > 0 || t < 9 || t > 64 ? "Нет" : "На границе");
Денис Будков
Денис Будков
65 021