Форум: "Основная";
Текущий архив: 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.033 c