Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Теория - Несколько цифер в одной цифре

Ответить
Настройки темы
Теория - Несколько цифер в одной цифре

Новый участник


Сообщения: 49
Благодарности: 17

Профиль | Отправить PM | Цитировать


Изменения
Автор: ___oj
Дата: 06-11-2008
Привет всем. Вопрос такой:
Функция должна возвратить одно число. В теле функции происходит выбор этого числа из нескольких вариантов, например 1, 2 или 3.

Пример:
Код: Выделить весь код
if(  x=a ) code = 1;
if(  x=b ) code = 2;
if(  x=c ) code = 3;

...

return code;
Но как вернуть, например, из трех вариантов, значения двух вариантов, а потом разложить число и выяснить какие варианты в нем заключены?
Пример:
Код: Выделить весь код
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 надо спросить, содержит ли она в себе code_a, code_b или code_с, или их любую комбинацию...

Сразу напрашиваетс решение с включением определенног бита в переменной code, но хочется узнать математическое решение этого вопроса. Именно как разложить число и выяснить не содержит ли оно в себе значения заранее определенных вариантов. Значения могут быть любыми, не обязательно 1, 2 и 3, а например 2, 4 и 8 лишь бы решалось.

PS: Математику забыл совсем


Проще говоря: Как раздожить число на числа из заданного диапазона значений?

Отправлено: 08:46, 06-11-2008

 

Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


Не особо понятно, что же именно надо.
К примеру, есть числа a=1, b=2, c=3
Складываем a+b, получаем 3. И в чем суть вопроса с математической точки зрения? Складывались ли a и b, или просто 0+3? или -5+8 ?

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)


Отправлено: 08:53, 06-11-2008 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 49
Благодарности: 17

Профиль | Отправить PM | Цитировать


Delirium, Короче получаю переменную x, что в ней я не знаю, но имею диапазон чисел , которые или комбинацию которых может содержать переменная x.

Какие математические операции мне надо проделать? Упрощает задачу то, что числа в переменной x не могут повторяться...

Последний раз редактировалось ___oj, 06-11-2008 в 09:45.


Отправлено: 09:12, 06-11-2008 | #3

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


если используется только операция сложения, то это задача линейной алгебры. Линейная операция, которая преобразует несколько переменных в одну является вырожденной:
Код: Выделить весь код
             x ? ?
code_a 1 0 0    матрица преобразования вырожденная, 
code_b 1 0 0    однознаяного обратного 
code_c 1 0 0    преобразования не существует
выход один: разносить по битам, любо другим способом сделать матрицу преобразования невыроденной и возвращать N независимых значений (столько, сколько было переменных)
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:23, 06-11-2008 | #4


Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1204

Профиль | Отправить PM | Цитировать


В общем, это довольно банальная задачка, если по битам разносить.
Получается, что функция возвращает числа из пяти переменных: 1, 2, 4, 8, 16.
Скажем, нужно вернуть первое, третье и четвёртое число. Сумма получается 1+4+8=13. Никаким другим способом 13 получить из этих чисел нельзя.

Отправлено: 10:47, 06-11-2008 | #5


Новый участник


Сообщения: 49
Благодарности: 17

Профиль | Отправить PM | Цитировать


Цитата pva:
Линейная операция, которая преобразует несколько переменных в одну является вырожденной: »
Конечно интересно звучит...
Цитата pva:
возвращать N независимых значений »
Помоему это я делаю пытаясь решить так:
Все дело в диапазоне значений
Диапазон 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:
Скажем, нужно вернуть первое, третье и четвёртое число. Сумма получается 1+4+8=13. Никаким другим способом 13 получить из этих чисел нельзя. »
Да дошло уже

Последний раз редактировалось ___oj, 06-11-2008 в 11:13.


Отправлено: 10:54, 06-11-2008 | #6


Аватара для CyberDaemon

DOOMer


Сообщения: 3254
Благодарности: 438

Профиль | Отправить PM | Цитировать


Цитата ___oj:
В теле функции происходит выбор этого числа из нескольких вариантов, например 1, 2 или 3. »
Если варианты - однозначные числа, то пусть функция возвращает 1, 20 или 300 - первый десятичный разряд для первого числа, второй для второго, третий - для третьего.
Тогда, к примеру, возвращенный результат 321 означает, что функция вернула и 1 и 2 и 3.

-------
"640 K ought to be enough for anybody" Bill Gates, 1981

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:09, 06-11-2008 | #7


Новый участник


Сообщения: 49
Благодарности: 17

Профиль | Отправить PM | Цитировать


Думаю можно развить мысль и зделать так переменная содержит два значения a = { 1, 2 } ; b= { 2, 4 }; c= { 3, 8 }; d= { 4, 16 };
Таким образом первое значение простое число, второе разнесенное по битам значение этого числа

Тогда складывая a + b , беру вторые значения и складывваю их. Получится так или нет ?

Цитата CyberDaemon:
Тогда, к примеру, возвращенный результат 321 означает, что функция вернула 1 и 2 и 3. »
Точно, даже не подумал че-то.

Отправлено: 11:17, 06-11-2008 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Теория - Несколько цифер в одной цифре

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход