Задача:
Даны действительные числа
Определить, принадлежит ли точка с координатами x, y заштрихованной области.
X | Y | Ответ |
-0.65 | -0.75 | Yes |
-0.95 | -0.59 | No |
700 | 8 | No |
0 | 0 | No |
0.56 | 0.75 | Yes |
1,0011 | 1,0012 | No |
0.6 | 0 | Yes |
Код программы на С++
1 2 3 4 5 6 7 8 9 10 11 |
#include <iostream> using namespace std; int main() { double x, y, r; printf("Please, whrite x and y: \n"); scanf("%lf %lf", &x, &y ); r=(x*x)+(y*y); printf((r >= 0.25) && (r <= 1.0) ? "Yes" : "No"); return 0; } |
Код программы на Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) throws java.lang.Exception { Scanner in = new Scanner(System.in); double x, y, r; x=in.nextDouble(); y=in.nextDouble(); r=(x*x)+(y*y); System.out.printf((r >= 0.25) && (r <= 1.0) ? "Yes" : "No"); } } |
Поскольку заштрихованная область это круг с «вырезанным кругом» внутри, то для того чтобы определить лежит ли точка в нужной нам области нам достаточно сравнить сумму квадратов координат точек с квадратом радиуса двух окружностей, которые и являются нашими границами.
Если точка лежит на самой окружности, мы считаем что она принадлежит нужной нам области.
Сравнивая полученную величину с радиусами большого и малого круга мы можем уверенно сказать находится ли точка в нужной нам окрестности.
Вы перепутали категорию — это не линейные вычисления, а разветвленные. И метки (ключевые слова) не указали.
Очень хорошая идея о том, что не нужно два раза расстояние от центра до точки (x,y). Но и полностью расстояние считать необязательно — т..е. необязательно извлекать корень. Можно сравнивать квадрат расстояния с квадратами радиусов, так обычно и делается в уравнении окружности.
Границу (две окружности) Вы считаете частью заштрихованной области или нет? Укажите это в отчете пожалуйста. Кстати, слова «Поскольку заштрихованная область это окружность с “дыркой” внутри …» только сбивают с толку, т.к., наверное, Вы имели в виду круг с “дыркой” внутри, а не окружность.
У строчек с 13-й по 15-ю, как мне кажется, слишком большой отступ.
Вот более компактная форма записи Вашей программы:
Совершенно верно. Спасибо за совет.
Николай, прислушайтесь к этому замечанию.
Кстати, при желании можно избавиться от условного оператора вообще:
А если не быть слишком требовательными к формату вывода и ограничиться кодом 0 — нет, 1 — да, то совсем просто будет
Конечно в нашей задаче этот вариант неприемлем, но при написании функций возвращающих bool поступают именно так
return r2 >= 0.25 && r2 <= 1.0;
Java-версия засчитана, 5 баллов.