Комментарии 22
НЛО прилетело и опубликовало эту надпись здесь
Центр окружности имеет координаты 0,0?
На ассемблере лениво писать.
Но вариант решения есть.
Построить конечный автомат:
Пусть даны координаты.
Используем только логические переменные (битовые)
x1 = знак абсциссы (1 если больше нуля, 0 — если меньше)
x2 = знак ординаты (1 если больше нуля, 0 — если меньше)
f1, f2 — номер квадратнта, в виде 1 и второго разрада его двоичного предстваления -1 (1 = 00; 2 = 01; 3=10; 4=11)
x1 x2 f1 f2
1 1 0 0
0 1 0 1
0 0 1 0
1 0 1 1
Ну а дальше СНДФ:
f1 = (not(x1) and not(x2)) or (x1 and not(x2))
f2 = (not(x1) and x2) or (x1 and not(x2))
Результат А=f1*2+f2+1 (это и будет номер квадратнта).
Джампов вроде недолжно быть.
Но вариант решения есть.
Построить конечный автомат:
Пусть даны координаты.
Используем только логические переменные (битовые)
x1 = знак абсциссы (1 если больше нуля, 0 — если меньше)
x2 = знак ординаты (1 если больше нуля, 0 — если меньше)
f1, f2 — номер квадратнта, в виде 1 и второго разрада его двоичного предстваления -1 (1 = 00; 2 = 01; 3=10; 4=11)
x1 x2 f1 f2
1 1 0 0
0 1 0 1
0 0 1 0
1 0 1 1
Ну а дальше СНДФ:
f1 = (not(x1) and not(x2)) or (x1 and not(x2))
f2 = (not(x1) and x2) or (x1 and not(x2))
Результат А=f1*2+f2+1 (это и будет номер квадратнта).
Джампов вроде недолжно быть.
Отучился пять лет в ВУЗе и не знаю что такое «квадрант окружности». Стыдно за себя :(
НЛО прилетело и опубликовало эту надпись здесь
У вас получилось:) Приз уходит в карму )
У кого-то, по-моему, неправильное представление о квадранте.
Подставьте точку (1; -1) в текст выше и прикиньте, сильно ли промахнулись.
Подставьте точку (1; -1) в текст выше и прикиньте, сильно ли промахнулись.
Да, действительно необходимо ответы писать в последовательности
1,2,4,3
Но главное, что у человека идея правильная.
1,2,4,3
Но главное, что у человека идея правильная.
Отличная логика.
Не возмущайтесь потом, если кто-то вдруг напишет книгу, которую нужно будет читать задом наперед. Идея-то классная! :)
Не возмущайтесь потом, если кто-то вдруг напишет книгу, которую нужно будет читать задом наперед. Идея-то классная! :)
НЛО прилетело и опубликовало эту надпись здесь
__asm {
mov ebx, y;
and ebx, -1;
shr ebx, 31;
mov eax, x;
and eax, -1;
shr eax, 31;
xor eax, ebx;
shl ebx, 1;
add eax, ebx;
inc eax;
mov q, eax;
}
Итак мое решение
Для начала немного теории:
Для всех числел в двоичном виде последний бит (первый слва) отвечает за знак
(бит знака)
Теперь решение:
Допустим, у нас есть два числа X и Y
Теперь запишем завиимость номера квадрантов(N) от его двоичного представления(Bn) и
от бита флагов X и Y (Bs):
N Bn Bs
1 00 00
2 01 10
3 10 11
4 11 01
Ура-есть четкая (биективная) зависимость N от Bs. Идея в том, что бы использовать
биты знака как адрес с ответом.
Реализацию программы можно делать разными способами, лично я сделал так
A = <[1,2,4,3]>
X = <ввод X>
Y = <ввод Y>
X = <сдвиг вправо до бита знака>
Y = <сдвиг вправо до бита знака>
Y = <сдвиг влево на бит>
X = <X+Y>
<Вывод элемента X из массива A>
Для начала немного теории:
Для всех числел в двоичном виде последний бит (первый слва) отвечает за знак
(бит знака)
Теперь решение:
Допустим, у нас есть два числа X и Y
Теперь запишем завиимость номера квадрантов(N) от его двоичного представления(Bn) и
от бита флагов X и Y (Bs):
N Bn Bs
1 00 00
2 01 10
3 10 11
4 11 01
Ура-есть четкая (биективная) зависимость N от Bs. Идея в том, что бы использовать
биты знака как адрес с ответом.
Реализацию программы можно делать разными способами, лично я сделал так
A = <[1,2,4,3]>
X = <ввод X>
Y = <ввод Y>
X = <сдвиг вправо до бита знака>
Y = <сдвиг вправо до бита знака>
Y = <сдвиг влево на бит>
X = <X+Y>
<Вывод элемента X из массива A>
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Немного попрограммируем…