|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Теория - Несколько цифер в одной цифре |
|
Теория - Несколько цифер в одной цифре
|
Новый участник Сообщения: 49 |
Привет всем. Вопрос такой:
Функция должна возвратить одно число. В теле функции происходит выбор этого числа из нескольких вариантов, например 1, 2 или 3. Пример: Но как вернуть, например, из трех вариантов, значения двух вариантов, а потом разложить число и выяснить какие варианты в нем заключены? Пример: if( x=a ) code_a = 1; if( x=b ) code_b = 2; if( x=c ) code_c = 3; ... code = code_a + code_b; return code; Сразу напрашиваетс решение с включением определенног бита в переменной code, но хочется узнать математическое решение этого вопроса. Именно как разложить число и выяснить не содержит ли оно в себе значения заранее определенных вариантов. Значения могут быть любыми, не обязательно 1, 2 и 3, а например 2, 4 и 8 лишь бы решалось. PS: Математику забыл совсем ![]() Проще говоря: Как раздожить число на числа из заданного диапазона значений? |
|
Отправлено: 08:46, 06-11-2008 |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать Не особо понятно, что же именно надо.
К примеру, есть числа a=1, b=2, c=3 Складываем a+b, получаем 3. И в чем суть вопроса с математической точки зрения? Складывались ли a и b, или просто 0+3? или -5+8 ? |
------- Отправлено: 08:53, 06-11-2008 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 49
|
Профиль | Отправить PM | Цитировать Delirium, Короче получаю переменную x, что в ней я не знаю, но имею диапазон чисел , которые или комбинацию которых может содержать переменная x.
Какие математические операции мне надо проделать? Упрощает задачу то, что числа в переменной x не могут повторяться... |
Последний раз редактировалось ___oj, 06-11-2008 в 09:45. Отправлено: 09:12, 06-11-2008 | #3 |
![]() Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать если используется только операция сложения, то это задача линейной алгебры. Линейная операция, которая преобразует несколько переменных в одну является вырожденной:
выход один: разносить по битам, любо другим способом сделать матрицу преобразования невыроденной и возвращать N независимых значений (столько, сколько было переменных) |
Отправлено: 10:23, 06-11-2008 | #4 |
Кот Ти Сообщения: 7318
|
Профиль | Отправить PM | Цитировать В общем, это довольно банальная задачка, если по битам разносить.
Получается, что функция возвращает числа из пяти переменных: 1, 2, 4, 8, 16. Скажем, нужно вернуть первое, третье и четвёртое число. Сумма получается 1+4+8=13. Никаким другим способом 13 получить из этих чисел нельзя. |
|
Отправлено: 10:47, 06-11-2008 | #5 |
Новый участник Сообщения: 49
|
Профиль | Отправить PM | Цитировать Цитата pva:
Цитата pva:
Все дело в диапазоне значений Диапазон 2, 4, 8, 16 Имею переменную x = (16 + 8 + 4 + 2) = 30 Шагаю от наибольшего числа из диапазона = 16 30 - 16 = 14 Здвигаюсь на одно значение диапазона = 8 14 - 8 = 6 Здвигаюсь на одно значение диапазона = 4 6 - 4 = 2 Здвигаюсь на одно значение диапазона = 2 2 - 2 = 0 Таким обоазом выясняю что переменная x содержит 16, 8, 4 и 2 Имею переменную x = (8 + 4 + 2) = 14 Шагаю от наибольшего числа из диапазона = 16 т.к 14 < 16 Здвигаюсь на одно значение диапазона = 8 14 - 8 = 6 Здвигаюсь на одно значение диапазона = 4 6 - 4 = 2 Здвигаюсь на одно значение диапазона = 2 2 - 2 = 0 Таким обоазом выясняю что переменная x содержит 8, 4 и 2 Извиняюсь за неграмотность. Так можно безошибочно определять какие числа содержит переменная x (если зачения разнесены по битам 2, 4, 8, 16 ... Хотя изначально речь шла о диапазоне чисел 1, 2, 3, 4 ...) Цитата Coutty:
![]() |
|||
Последний раз редактировалось ___oj, 06-11-2008 в 11:13. Отправлено: 10:54, 06-11-2008 | #6 |
DOOMer Сообщения: 3254
|
Профиль | Отправить PM | Цитировать Цитата ___oj:
Тогда, к примеру, возвращенный результат 321 означает, что функция вернула и 1 и 2 и 3. |
|
------- Отправлено: 11:09, 06-11-2008 | #7 |
Новый участник Сообщения: 49
|
Профиль | Отправить PM | Цитировать Думаю можно развить мысль и зделать так переменная содержит два значения a = { 1, 2 } ; b= { 2, 4 }; c= { 3, 8 }; d= { 4, 16 };
Таким образом первое значение простое число, второе разнесенное по битам значение этого числа Тогда складывая a + b , беру вторые значения и складывваю их. Получится так или нет ? Цитата CyberDaemon:
|
|
Отправлено: 11:17, 06-11-2008 | #8 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
2 ip адреса на одной сетевухе | Fat Bastard | Общий по Linux | 6 | 18-08-2008 01:37 | |
Установка - 4 ОС на одной машине! | LexerON | Microsoft Windows 2000/XP | 2 | 18-10-2007 02:56 | |
win 2003 несколько IP(inet) на несколько LAN? | Alexandr_l | Сетевые технологии | 11 | 03-04-2006 15:19 | |
IE ограничить одной страницей | BatutMAN | Защита компьютерных систем | 1 | 17-08-2004 11:15 | |
DOS, Вынь98, в общем несколько систем на одной машине | Guest | Хочу все знать | 6 | 02-05-2003 19:46 |
|