Блог инженера-программиста / шапку скоро поменяю /

По координатам точки — четверть

Попалась мне сегодня на глаза простенькая задачка:

Задано точку с координатами х и у. Определить, в какой координатной четверти она расположена.

Входные данные: В единственной строке через пробел задано 2 вещественных числа — координаты точки, значения координат по модулю не превышают 100.

Выходные данные: Единственное число — номер соответствующей четверти, либо 0, если однозначно определить четверть невозможно.

Задача очень простая (из сборника для выпускников школ), но, мне показалось, что посмотреть вариант нестандартного решения читателям будет интересно.

Для начала, стандартное решение этой задачи — проверяем, не является ли одна из координат нулем, если является — выводим 0, иначе — в зависимости от знаков координат выводим соответствующую четверть:

1
2
3
4
5
6
7
8
9
10
11
var x,y:real;
begin
  readln(x,y);
  if (x=0) or (y=0) then Writeln(0) else
  begin
    if x > 0 then
      if  y > 0 then Writeln(1) else Writeln(4)
    else
      if y > 0 then writeln(2) else Writeln(3);
  end;
end.

Вот реализация второго варианта решения (на языке Pascal):

1
2
3
4
5
var x,y:real;
begin
  readln(x,y);
  Writeln( ord(x*y <> 0)*(ord(x*y < 0) + 2*ord(y < 0) + 1) );
end.

Вначале не понятна логика этого выражения, поэтому постараюсь объяснить, как вычисляется номер нужной четверти.

1. Проверяем, не лежит ли точка на одной из осей: ord(x*y <> 0). Если x или y равны 0, то ord(x*y <> 0) будет равно 0, а вместе с ним и все выражения, что и требуется вывести.

2. Проверяем, разный ли знак у координат точки: ord(x*y < 0). Координаты точки имеют разный знак во второй и четвертой четвертях. Если точка принадлежит II или IV четверти, выражение ord(x*y < 0) будет равно 1, иначе — 0, что образно можно показать так:
Показать / спрятать изображение

3. Если координата y точки меньше 0, то выражение 2*ord(y < 0) будет равно 2, иначе — 0. Таким образом, для точек в III и IV четвертях к сумме прибавляем 2:
Показать / спрятать изображение

4. Прибавим 1, независимо от расположения точки (таким образом получим необходимые номера четвертей в зависимости от координат точки):
Показать / спрятать изображение

Комментарии на: "По координатам точки — четверть" (2)

  1. Прикольный перевод логики в цифры! Маладец! ;)

  2. (=Тори=) said:

    Спасибо) Очень понравилась реализация! Наверное, нужно почаще задумываться о интересных решениях, а не о стандартных и надоедливых. Стоит подумать))
    Так держать! Молодец!