Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
ЮРИЙ_К   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.009 c
6-82363
clim
2003-07-23 00:20
2003.09.25
connect function


4-82568
bineon
2003-07-24 22:26
2003.09.25
Что за проблема с мультимедиа-таймером? Пол дня мучаюсь.


14-82434
esu
2003-09-07 19:07
2003.09.25
Откуда бы мне скачать MSSQL2000 ?


3-82066
Новенький
2003-09-02 15:27
2003.09.25
Требуется помощь по простому запросу!


1-82187
ddf
2003-09-12 19:46
2003.09.25
Компоненты для создания программ со скинами





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский