Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.25;
Скачать: CL | DM;

Вниз

Математический алгоритм... или ???   Найти похожие ветки 

 
ЮРИЙ_К ©   (2003-09-12 13:34) [0]

Кто может подсказать алгоритм занесения, к примеру, в базу числа по следующим требованиям:
Есть 5 чисел 1, 2, 3, 4, 5, которые могут быть выбраны. Но в базу нужно занести только одно число, говорящее о том, что и какие числа именно выбраны. К примеру я выбрал числа 1 и 3. В базу заношу число 4. Но мне нужно точно знать, какие именно числа выбраны, ведь это может быть и 4 и так-же 1+3. Как поступить в такой ситуации?


 
Юрий Федоров ©   (2003-09-12 13:38) [1]

Используй биты
10100 - означает, что выбраны 1 и 3 (например)


 
Sandman25 ©   (2003-09-12 13:39) [2]

Или 13.


 
[lamer]Barmaglot ©   (2003-09-12 13:43) [3]

Обычно кодируют. Например 2^n. то есть первое число 1, второе 2, третее 4 и т.д. В итоге если у тебя число 5. то понятно, что оно содержит 4 и 1...


 
Sandman25 ©   (2003-09-12 13:46) [4]

[3] [lamer]Barmaglot © (12.09.03 13:43)

Это и есть метод из поста [1] Юрий Федоров © (12.09.03 13:38).
Только биты в другом порядке.


 
[lamer]Barmaglot ©   (2003-09-12 13:50) [5]

Я и не спорю... Просто набивал долго :-). Кстати почему в другом порядке? Помоему также как и у него. Просто я объяснил принцип, который можно понять даже на бумаге. С битами сложнее - хотя каждому своё...


 
pasha_676 ©   (2003-09-12 13:57) [6]


> С битами сложнее - хотя каждому своё...

Имхо - с битами все на порядок проще. Сравни


> 10100 - означает, что выбраны 1 и 3 (например)



Или


> Обычно кодируют. Например 2^n. то есть первое число 1, второе
> 2, третее 4 и т.д. В итоге если у тебя число 5. то понятно,
> что оно содержит 4 и 1...

В твое утверждение надо долго вникать. Не говоря уже о страшном слове "кодируют", в то время как в первом случае "выставляют бит"


 
ЮРИЙ_К ©   (2003-09-12 13:58) [7]

>> [lamer]Barmaglot

>>Обычно кодируют. Например 2^n. то есть первое число 1, второе >>2, третее 4 и т.д. В итоге если у тебя число 5. то понятно, что >>оно содержит 4 и 1...
А вот и не понятно, а может это 2 и 3?


 
Verg ©   (2003-09-12 14:08) [8]

Ну вот конкретно -
Есть 32-х битное число N, там битики, у них номер от 0 до 31 (или от 1 до 32, как кому нравится).
Предположим, что выбор происходит из чисел от 0 до 31.
Тогда в этом числе N установим в 1 тот бит, номер которого равен выбранному.
Т.о., чило 1-ных бит в N будет равно количеству выбранных чисел, а порядковые номера этих 1-чек - собственно числам.

Ограничение:
нельзя выбрать два и более одинаковых числа.


 
[lamer]Barmaglot ©   (2003-09-12 14:22) [9]

to ЮРИЙ_К

Да нет все понятно . Особенно для тех кто когда-нибудь рисовал спрайты :-). Просто я объясняю так, как мне лично, было-бы легче понять.

Конкретнее на ваш вопрос :-). Декодирование идет следующим образом сначала вычитается наибольшее число из возможного, то есть из 5 вычитают 4. Из остатка наибольшее число из возможного и т.д. Пока число не обратится в ноль. Степени числа 2 и дают номера выбранных слотов. :-).


 
pasha_676 ©   (2003-09-12 14:30) [10]


> Декодирование идет следующим образом сначала вычитается
> наибольшее число из возможного, то есть из 5 вычитают 4.
> Из остатка наибольшее число из возможного и т.д. Пока число
> не обратится в ноль. Степени числа 2 и дают номера выбранных
> слотов. :-).

ты это, как его... Давай через биты лучше. Там проще и никаких вычитаний не надо. Сравнил если второй бит установлен - то одно число, если третий - то другое...


 
[lamer]Barmaglot ©   (2003-09-12 14:34) [11]

Биты ещё знать надо :-). А то, что я написал - это математика 3-го класса. Знают все (я надеюсь). Хотя для реализации на компьютере Биты действительно намного проще и быстрее.


 
pasha_676 ©   (2003-09-12 14:51) [12]


> :-). А то, что я написал - это математика 3-го класса.

Я чуть рак мозга не заработал пытаясь в такой математике разобраться :). На редкость все запутано. Биты проще и для понимания и для реализации. Ну а если программер не знает что есть биты и как с ними манипулировать - то ему надо учиться. Все в сад, в сад.... ну или хотя бы к Юрию Зотову на сайт.


 
[lamer]Barmaglot ©   (2003-09-12 14:58) [13]

Я же не спорю, что для реализации на компьютере проще биты. Но он же попросил МАТЕМАТИЧЕСКИЙ АЛГОРИТМ, вот я его ему и предоставил...


 
ЮРИЙ_К ©   (2003-09-12 15:47) [14]

>> Да мне без разницы какой алгоритм, лиж-бы работало так как нуно 8-). А математический назвал - потому, как нужно же было заглавие для темы придумать ;-)


 
ЮРИЙ_К ©   (2003-09-15 08:45) [15]

>> [lamer]Barmaglot
>> pasha_676

А нельзя-ли конкретно примерец кинуть, как через биты это реализовать, нк никогда не сталкивался с этим. Знать что такое биты - это одно, а реализовать их применение к конкретному вопросу - другое. Не все-же выросли вундеркиндами ;-). Для чего тогда нужен этот форум?


 
[lamer]Barmaglot ©   (2003-09-15 12:04) [16]

Например так...

procedure TForm1.Button1Click(Sender: TObject);
const
d: array[0..4] of Boolean=(false,false,true,false,true);
var
i, k: Integer;
begin
i:=0;
For k:=0 to 4 do
begin
if d[k]=true then i:=(i shl 1) or 1 else i:=(i shl 1) or 0;
end;
Edit1.Text:=inttostr(i);
end;

Это для одирования, для декодирования используется shr...



Страницы: 1 вся ветка

Текущий архив: 2003.09.25;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.015 c
14-82384
Dilezzz
2003-09-07 21:59
2003.09.25
Когда выйдет SP2 для WinXP?


3-82154
Oleon
2003-09-03 17:42
2003.09.25
Здраствуйте. Можно отключать триггеры на время закачки данных?


14-82496
gn
2003-09-05 06:11
2003.09.25
а ктонибудь своих подруг учит языкам


1-82306
Regul
2003-09-11 21:04
2003.09.25
Microsoft Equation


6-82358
Davinchi
2003-07-27 22:07
2003.09.25
Одновременная работа TWebBrowser and Word2000