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

Вниз

Множества   Найти похожие ветки 

 
Незнающий   (2004-02-12 10:25) [0]

Подскажите кто знает...

Задача следующая: По ходу выполнения программы необходимо несколько раз переопределять множество, т.е. в какой-то момент там может быть значение [1], а в другой [-1,0,1,5,6,19]. Количество элементов различное. Далее необходимо проверять некие значения на вхождение в это множество (in). Если задачу нельзя решить с помощью множеств, то каким другим способом это сделать наиболее эффективно?


 
Плохиш   (2004-02-12 10:31) [1]

set of byte

В чём проблема-то?


 
Незнающий   (2004-02-12 10:36) [2]


> Плохиш (12.02.04 10:31) [1]
> set of byte
> В чём проблема-то?


Значения например -2,-1...


 
Плохиш   (2004-02-12 10:43) [3]

set of -127..127


 
PVOzerski   (2004-02-12 10:45) [4]

Сначала диапазон сообщи (точнее: влезет ли элемент в 1 байт), потом думать будем...


 
Незнающий   (2004-02-12 10:48) [5]

> Плохиш (12.02.04 10:43) [3]
> set of -127..127


У меня на это ругается:
Sets may have at most 256 elements
как и на set of Shortint.


 
Плохиш   (2004-02-12 10:49) [6]

>Незнающий (12.02.04 10:36) [2]
Используй массив..TStringList

PS. Ба, set of не переваривает отрицательные числа


 
KADAN   (2004-02-12 10:51) [7]

Блин, да хоть set of int64.. вопроса я не понял, паскаль что-ли в школе не проходил?
Пусть было [-1,2], пишешь
include(S,5);
exclude(S,-1);

и получается у тебя [2,5].


 
KADAN   (2004-02-12 10:54) [8]

хм... и правда, только 256 :-(
Сорри, ошибся


 
Плохиш   (2004-02-12 10:54) [9]


> KADAN © (12.02.04 10:51) [7]
> Блин, да хоть set of int64

Да?!?


 
Незнающий   (2004-02-12 10:58) [10]


> PVOzerski © (12.02.04 10:45) [4]
> Сначала диапазон сообщи (точнее: влезет ли элемент в 1 байт),
> потом думать будем...


В один байт влезет. Ориентировочно будет [-2..100], еще лучше что-то вроде [FullOpen, FullClose, 0..100], рассматривать такой вариант как [1..103] и потом обращаться как Var+3 in [] не хотелось бы.


 
Незнающий   (2004-02-12 11:03) [11]


> Плохиш (12.02.04 10:49) [6]
> >Незнающий (12.02.04 10:36) [2]
> Используй массив..TStringList


Может я не знаю возможностей TStringList, но насколько мне известно вхождение элемента в TStringList можно найти только методом перебора. А это не совсем хорошо, т.к. такая проверка на вхождение происходит давольно часто. В таком случае уж лучше использовать безразмерный массив ( array;)


 
Плохиш   (2004-02-12 11:05) [12]

TStringList.IndexOf


 
PVOzerski   (2004-02-12 11:07) [13]

> рассматривать такой вариант как [1..103] и потом обращаться как Var+3 in [] не хотелось бы.
INHO, как раз это - наилучшее решение.


 
KADAN   (2004-02-12 11:10) [14]

Так если вопрос в отрицательных числах - то можно реализовать так:

type TSet=set of byte;
var S:TSet;

procedure AddIntoSet(var S:TSet; i:shortint);
begin
include(S,i+128);
end;

procedure DeleteFromSet(var S:TSet; i:shortint);
begin
exclude(S,i+128);
end;

function ElemInSet(S:TSet; i:shortint):boolean;
begin
result:=(i+128) in S;
end;


 
Sandman25   (2004-02-12 11:13) [15]

var a:
set of byte;
b: byte;
begin
b := byte(-2);
include(a, b);
if b in a then
caption := "1";
end;


 
Тимохов   (2004-02-12 11:25) [16]

TList можно использовать с приведением типа integer <-> pointer


 
Незнающий   (2004-02-12 11:28) [17]

Спасибо за помощь что-нибудь придумаю на основе вышесказанного.



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

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

Наверх





Память: 0.47 MB
Время: 0.032 c
1-79853
aus
2004-02-09 14:16
2004.02.25
Подсказки


8-80028
Lita
2003-10-23 20:22
2004.02.25
Помогите ламеру с графиком


14-80225
Gorlum
2004-02-03 17:39
2004.02.25
3D модели


3-79665
Sliften
2004-01-30 20:10
2004.02.25
SQL запрос Как обрубить в строке все после первого пробела


7-80326
Blondin
2003-12-04 14:08
2004.02.25
RASAPI, Как определить кол-во переданных и принятых байт





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