Member 13561235 Ответов: 2

Примите 2 значения и отобразите их квадранты без условных обозначений


Принимаем два значения X и Y и отображения их квадрантов.

Но условие состоит в том, что вы не можете использовать никакой условный оператор или оператор switch.

Что я уже пробовал:

Я просто знаю, что это можно сделать с помощью if condition или с помощью switch case.

2 Ответов

Рейтинг:
0

OriginalGriff

Подумайте об этом: есть четыре возможных ответа.

A | B
__|__
  |
D | C
Квадрант зависит не от величины x и y, а от их знака: оба положительных-B, оба отрицательных-D.
Так что берите знаки и отбрасывайте величину:
int sign = a / abs(a);
Даст вам -1 или 1.
Если вы затем смещаете каждый знак на 1 (чтобы дать вам 0 или 2), Вы можете легко получить четыре "разумных числа" :
int quadIndex = (x / 2) + y;
Итак, строка с четырьмя символами внутри
char * quadrands = "DCAB";

Я дам вам письмо для того квадранта, который вам нужен.


Member 13561235

Хорошо, но есть 9 условия для
Что делать, если точка находится на положительной оси y или в начале координат или на отрицательной оси x?

OriginalGriff

Тот же принцип применим: но это ваше домашнее задание, так что давайте посмотрим, сможете ли вы его выполнить! У вас есть основы, теперь начните использовать это.

CPallini

5.

Рейтинг:
0

Jochen Arndt

Вы можете использовать таблицу поиска, содержащую индикаторы квадранта. Для доступа к таблице вам понадобятся индексы, указывающие, являются ли входные значения отрицательными или нет.

Потому что тип x и y не уточняется, я полагаю int.

Зная, что отрицательные целые числа обозначаются набором MSB, отрицательные значения можно обнаружить, сдвинув значение вправо на битовую ширину минус единица.

Но операция сдвига должна выполняться без знака (значение должно быть приведено к unsigned int).

Чтобы получить битовую ширину int используйте

sizeof(int) * 8;
и вычтите один, чтобы получить количество смен.

Выполните операцию для x и y и используйте результирующие значения которые могут быть равны нулю или единице для доступа к массиву индикаторов квадранта:
char qArr[2][2] = { { '?', '?' }, { '?', '?' }};

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