Главная страница
    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.033 c
6-80062
Anet
2003-12-16 13:09
2004.02.25
Отследить вход пользователя в сеть


1-79903
Death2
2004-02-07 05:36
2004.02.25
Масштабирование


3-79643
Ig
2004-01-31 17:14
2004.02.25
DBase , на другом компьютере


14-80175
Думкин
2004-01-31 06:54
2004.02.25
31 января.


1-79834
karburator
2004-02-10 11:05
2004.02.25
Как узнать путь к программе из запущенного ею потока?





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