Определить принадлежность точки заштрихованной области - C (СИ)
Формулировка задачи:
Дана точка на плоскости с координатами (x, y). Составить программу, которая будет выводить на экран одно из сообщений «Да», «Нет», «На границе». В зависимости от т ого, лежит ли точка внутри, вне или на границе заштрихованной области. Области задаются графически следующим образом:
Решение задачи: «Определить принадлежность точки заштрихованной области»
textual
Листинг программы
int InArea(double r,double x,double y)
{
double l=sqrt(x*x+y*y);
if(l<=r)
{
if(!x || !y || l==r || y==x || x==-y) return 2;
if(y>0)
{
if(x<0 && -x>y) return 1;
if(x>0 && x<y) return 1;
}
else
{
if(x<0 && x>y) return 1;
if(x>0 && -x<y) return 1;
}
}
return 0;
}
int main(int argc,char* argv[])
{
double r,x,y;
int res;
setlocale(LC_ALL, "Russian");
printf("Радиус=");
scanf("%lf",&r);
do
{
printf("X и Y через пробел:");
scanf("%lf %lf",&x,&y);
res=InArea(r,x,y);
if(!res) printf("Вне области\n");
else
if(res==1) printf("В области\n");
else printf("На границе\n");
printf("Еще(Enter)?\n");
}while(getch()==13);
return 0;
}
Объяснение кода листинга программы
- Сначала функция
InAreaпринимает три аргумента типаdouble: радиусr, координатуxи координатуy. - Затем функция вычисляет значение
l, которое представляет собой гипотенузу прямоугольного треугольника с основаниемxиy. - Если
lменьше или равноr, то функция проверяет, принадлежит ли точка к заштрихованной области. - Если точка принадлежит области, функция возвращает
1. - Если точка находится на границе области, функция возвращает
2. - Если точка не принадлежит области, функция возвращает
0. - Функция
mainпринимает два аргумента типаintи строку, содержащую имя программы. - Затем функция устанавливает локальную настройку для вывода русского языка.
- Функция запрашивает у пользователя радиус
rи сохраняет его в переменной. - В цикле do-while пользователь вводит координаты
xиyи функцияInAreaпроверяет, принадлежит ли точка к заштрихованной области. - Если точка принадлежит области, функция
printfвыводит сообщениеВ области. - Если точка находится на границе области, функция
printfвыводит сообщениеНа границе. - Если точка не принадлежит области, функция
printfвыводит сообщениеВне области. - После каждого запроса пользователю предлагается ввести еще один набор координат, нажимая Enter.
- Если пользователь нажимает Enter без ввода, программа завершается.
- Функция
mainвозвращает0, указывая, что программа успешно завершилась.