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

Вниз

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

 
Незнающий   (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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.023 c
7-80315
Denius
2003-12-04 19:37
2004.02.25
Определение температуры процессора? Кто-нибудь кто-нибудь знает?


6-80049
Buffoon
2003-12-22 14:35
2004.02.25
Ссылки


1-79952
ИМХО
2004-02-13 16:49
2004.02.25
Проблема с использованием StrToDateTime


3-79616
Вованчик
2004-02-02 08:15
2004.02.25
IBUpdateSQL


3-79585
coder
2004-01-28 20:28
2004.02.25
FireBird