Задача:
Даны действительные числа [latex]x[/latex], [latex]y[/latex]. Определить, принадлежит ли точка с координатами [latex]x[/latex], [latex]y[/latex] заштрихованной части плоскости.
x | y | x*x+y*y | r | Результат | Комментарий |
1 | 1 | 2 | 1 | Не принадлежит | Пройден |
0 | 0 | 0 | 1 | Принадлежит | Пройден |
0,5 | 0,3 | 0,34 | 1 | Принадлежит | Пройден |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <stdio.h> #include <math.h> int main() { double x, y, r=1; scanf ("%lf %lf", &x, &y); printf ("x: %0.2lf\n", x); printf ("y: %0.2lf\n", y); printf ("r: %lf\n", r); if((x*x)+(y*y)<=r) printf ("Принадлежит окружности \n"); else printf ("Не принадлежит окружности \n"); return 0; } |
Решение:
Уравнение окружности задается формулой: [latex]\left(x-x_{0} \right)^{2}+\left(y-y_{0} \right)^{2}=r^{2}[/latex].
Так как у нас единичный круг, то [latex]r=1[/latex] и уравнение окружности можно записать следующим образом: [latex]x^{2}+y^{2}=r[/latex].
Что бы точка принадлежала окружности, нужно чтоб выполнялось условие [latex]x^{2}+y^{2}\leq r[/latex].
Если же [latex]x^{2}+y^{2}>r[/latex], то точка не будет принадлежать заштрихованной части.
Работу программы можно посмотреть тут.
Есть существенное замечание. Функция pow — не целочисленная. А Вы работаете с целыми числами, что очень хорошо для геометрической задачи. Всегда, если есть такая возможность, геометрию стоит решать в целых числах.
Так вот, при больших значениях координат, pow возвращает неточное значение, потому что принцип хранения целых и дробных чисел различен. К тому же, pow вычисляет значения рядами Фурье, что само по себе не очень точно. гораздо лучше вычислять квадраты в явном виде, как (x — x0) * (x — x0) — это и быстрее и точнее.
исправила
Дополню.
— «координаты радиуса» — интересное, но бессмысленное в данном контексте словосочетание. Пожалуйста, решите именно эту задачу. Не нужно никаких странных модификаций условий.
— «Координаты x» — аналогично.
— «Координаты y» — аналогично. Стоит погуглить, что такое координаты..
— «Возьмем … за a» — лучше обозначить через а.
— Последнее предложение не дописано? «Если….» … то что?
— Понимаю, что Вам трудно придумать метки. Подскажу. Нужно что-то в духе — «заштрихованная область», «единичный круг», «принадлежит», «точка»
исправила
Только заметил. «Даны действительные числа». Тогда правильно было бы сделать их double, а не int. И все равно возводить в квадрат с помощью pow не стоит 🙂
В общем все правильно теперь, только потерялась строчка 15 с закрывающей фигурной скобкой. Также в строчках 11 и 13 необходимо использовать больший отступ, чтобы показать, что они находятся в условном операторе.
В else условие if((x*x)+(y*y)>r) писать уже не обязательно, т.к. если не выполнено первое условие, то автоматически выполнено второе.
Исправлено
Зачтено на 8 баллов с учётом опоздания с выполнением заданий сентября.