Главная страница
    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.5 MB
Время: 0.1 c
7-1080330501
Asd
2004-03-26 22:48
2004.04.11
Блокируем Cd-rom что не так делаю


1-1082787196
Mr.Credo
2004-04-24 10:13
2004.04.11
Масштаб в RichEdit


14-1079782302
SPeller
2004-03-20 14:31
2004.04.11
С++


14-1079076043
Budy
2004-03-12 10:20
2004.04.11
Сеть->Письмо


1-1082415396
VPV
2004-04-20 02:56
2004.04.11
Minimize+Maximize и alClient





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