A59б

Задача:

Для задачи (А.59(б)

Даны действительные числа

Определить, принадлежит ли точка с координатами 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

Код программы на С++

Код программы на Java

Поскольку заштрихованная область это круг с «вырезанным кругом» внутри, то для того чтобы определить лежит ли точка в нужной нам области нам достаточно сравнить сумму квадратов координат точек с квадратом радиуса двух окружностей, которые и являются нашими границами.

Если точка лежит на самой окружности, мы считаем что она принадлежит нужной нам области.

Сравнивая полученную величину с радиусами большого и малого круга мы можем уверенно сказать находится ли точка в нужной нам окрестности.

 

Related Images:

4 thoughts on “A59б

  1. Вы перепутали категорию — это не линейные вычисления, а разветвленные. И метки (ключевые слова) не указали.

    Очень хорошая идея о том, что не нужно два раза расстояние от центра до точки (x,y). Но и полностью расстояние считать необязательно — т..е. необязательно извлекать корень. Можно сравнивать квадрат расстояния с квадратами радиусов, так обычно и делается в уравнении окружности.

    Границу (две окружности) Вы считаете частью заштрихованной области или нет? Укажите это в отчете пожалуйста. Кстати, слова «Поскольку заштрихованная область это окружность с “дыркой” внутри …» только сбивают с толку, т.к., наверное, Вы имели в виду круг с “дыркой” внутри, а не окружность.

    У строчек с 13-й по 15-ю, как мне кажется, слишком большой отступ.

  2. Вот более компактная форма записи Вашей программы:

    • Совершенно верно. Спасибо за совет.
      Николай, прислушайтесь к этому замечанию.

      Кстати, при желании можно избавиться от условного оператора вообще:

      А если не быть слишком требовательными к формату вывода и ограничиться кодом 0 — нет, 1 — да, то совсем просто будет

      Конечно в нашей задаче этот вариант неприемлем, но при написании функций возвращающих bool поступают именно так
      return r2 >= 0.25 && r2 <= 1.0;

Добавить комментарий