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

Вниз

Set   Найти похожие ветки 

 
Ш-К   (2004-03-23 15:51) [0]

Как узнать, сколько элементов содержит переменная типа множество?


 
Fay ©   (2004-03-23 15:54) [1]

8


 
Тимохов ©   (2004-03-23 15:55) [2]

почему 8?


 
MBo ©   (2004-03-23 15:57) [3]

SizeOf и посчитать единичные биты


 
Digitman ©   (2004-03-23 15:58) [4]

посчитать в цикле результаты "правдивых" IN-операторов


 
Ш-К   (2004-03-23 16:07) [5]

MBo ©   (23.03.04 15:57) [3]
SizeOf всегда 32.
Привёл к integer. Как посчитаь единичные биты?

Digitman ©   (23.03.04 15:58) [4]
Так пока и делаю.


 
Тимохов ©   (2004-03-23 16:08) [6]

одним словом, штатных механизмов нет - нужно делать самому.
когда то это делал как в 3 через конструкцию absolute.


 
Digitman ©   (2004-03-23 16:09) [7]


> Ш-К


> Как посчитаь единичные биты?


нампример, циклическим (от 0 до 31) сдвигом вправо и анализом состояния мл.бита рез-та


> Так пока и делаю


что в этом плохого ?


 
Тимохов ©   (2004-03-23 16:09) [8]


> Привёл к integer. Как посчитаь единичные биты?

с помощью битовых операций shl и and.


 
Fay ©   (2004-03-23 16:09) [9]

Народ, извините. Просто задолбался на работе и тупо ткнул в клаву. Попал в 8.


 
Digitman ©   (2004-03-23 16:11) [10]


> тупо ткнул в клаву


по-мужски) ... клава была довольна, надеюсь)


 
cosinus ©   (2004-03-23 16:12) [11]

>>Digitman ©   (23.03.04 16:11) [10]
:))


 
Тимохов ©   (2004-03-23 16:12) [12]


> Ш-К   (23.03.04 16:07) [5]
> MBo ©   (23.03.04 15:57) [3]
> SizeOf всегда 32.
> Привёл к integer. Как посчитаь единичные биты?

32 - это байты.
приводите к области памяти из 32 байт, например к packed array [0..31] of byte


 
Fay ©   (2004-03-23 16:15) [13]

Ваще говоря, отсутствие этих самых механизмов может говорить о том, что set-ы придуманы для задач, в которых количество элементов считать не принято.


 
Ш-К   (2004-03-23 16:21) [14]

Digitman ©   (23.03.04 16:09) [7]
512 итераций в случае заполненого множества до предела.
В принципе и не страшно.

Тимохов ©   (23.03.04 16:12) [12]
32 это биты, тоже парюсь.


 
MBo ©   (2004-03-23 16:26) [15]

>SizeOf всегда 32.
Не всегда
type
 TShortSet=set of 0..7;
begin
Caption:=IntToStr(SizeOf(TShortSet));


 
Плохиш   (2004-03-23 16:26) [16]

>Ш-К   (23.03.04 16:21) [14]

> 32 это биты,

Т.е. Ви хатите сказат, что в Set можно сохранит толко 32 элемента?


 
Ш-К   (2004-03-23 16:29) [17]

MBo ©   (23.03.04 16:26) [15]
Плохиш   (23.03.04 16:26) [16]

Это у меня всегда (по определению) :)


 
Тимохов ©   (2004-03-23 16:30) [18]

вопрос то в чем - все равно перебором, либо через битовые операции либо через in.


 
Плохиш   (2004-03-23 16:32) [19]

>Ш-К   (23.03.04 16:29) [17]
[16] было к тому, что 32 - это байты


 
Плохиш   (2004-03-23 16:33) [20]


> Тимохов ©   (23.03.04 16:30) [18]
> вопрос то в чем - все равно перебором, либо через битовые
> операции либо через in.

Ой, пардон, я думал, что после [13] раз ветка не закрыта, то мы в потрепаться ;-)


 
MBo ©   (2004-03-23 16:40) [21]


procedure TForm1.Button1Click(Sender: TObject);
type
 TShortSet = set of 0..31;
var
 ss: TShortSet;
 pb: PByteArray;
 i, n: Integer;
 function BitCount(b: byte): byte;
 begin
   b := (b and $55) + (b shr 1) and $55;
   b := (b and $33) + (b shr 2) and $33;
   b := (b and $0F) + (b shr 4) and $0F;
   Result := b;
 end;
begin
 ss := [0, 15, 23];
 pb := @ss;
 n := 0;
 for i := 0 to SizeOf(ss) - 1 do
   Inc(n, BitCount(pb[i]));
 Caption := IntToStr(n);
end;



 
Ш-К   (2004-03-23 16:56) [22]

Всем спасибо.
MBo ©  большое.


 
MBo ©   (2004-03-23 17:10) [23]

З.Ы.
Для твоего случая, если всегда множество мощности 32 элемента, можно обойтись без цикла, приведя к Integer и добавив пару строк, маски $55555555,$33333333,$0F0F0F0F, $00FF00FF, $0000FFFF


 
Ш-К   (2004-03-23 17:27) [24]

MBo ©   (23.03.04 17:10) [23]
Ну так я и говорил, что привёл к интежер :))))



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

Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.064 c
6-1075900425
Petrovitch
2004-02-04 16:13
2004.04.11
Относительно IP адреса. ДЛЯ ВСЕХ...


9-1070862678
Kair
2003-12-08 08:51
2004.04.11
Фигуры


14-1079089350
_none_
2004-03-12 14:02
2004.04.11
небольшой соц.опрос: купили бы вы электроскутер?


3-1081952112
pashaz
2004-04-14 18:15
2004.04.11
Как узнать, что за база ?


1-1079947978
V-Isa
2004-03-22 12:32
2004.04.11
Hot Key + Selected Text





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский