![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
пересечения диапазонов
Вика © (2004-07-30 15:29:00)Подскажите плиз.
Юзер в форме вводит три даипазона номеров (начальный и конечный номер каждого диапазона), как сделать проверку не содержится ли пересечений или не встречаются ли номера (или единичный номер) одного диапазона в каком-либо другом.
Заранее спасибо.
default (2004-07-30 22:13:00) [1]KSergey © (30.07.04 17:10) [23]
ничего особенного я не сказал
ЛИШЬ то что ограничение в 256 элементов можно ликвидировать реализовал ту же работу с множествами какую предоставляют средства Delphi, но самому, в принципе, конечно, это не обязательно должен быть класс, но пользоваться классом чем отдельными подпрограммами будет удобней
вот и всё
ничего из сказанном не противоречит постам указанных авторов
Rem (2004-07-30 19:23:00) [2]2 [42]
set of integer = [0..4294967295]
Для хранения 1 множества получим 536870912 байта.
Итого, приводя к "удобоваримому" виду, 512 мегабайт.
Не много ли?
Я думаю, проще будет хранить список диапазонов, входящих в множество.
pasha_golub (2004-07-30 18:51:00) [3]Rem (30.07.04 18:17) [41]
- разработать механизм хранения множеств
А чего его реализовывать? По-моему, очевидно. Только расширить для интеджер.
А про класс, абсолютно согласен. Вполне здравая мысль.
Rem (2004-07-30 18:17:00) [4]2 [23]
- разработать механизм хранения множеств (например, для integer)
- реализовать его в классе
- реализовать набор методов оперирования и взаимодействия с другими множествами (как этого класса, так и стандартными)
- назвать класс TIntegerSet :)
Ega23 (2004-07-30 18:06:00) [5]Гы. LISP использовать. Для создания множеств. :о)
Юрий Зотов (2004-07-30 18:05:00) [6]Что ж, уговорили...
:о)
Rem (2004-07-30 18:03:00) [7]В [14], [15] та же самая ситуация. Компилятор не знает значений StrToInt(Edit1.Text) и StrToInt(Edit2.Text), поэтому такой код он допускает, а при включенных проверках возникает "Range check error".
Sandman25 (2004-07-30 17:54:00) [8]Забыл сделать build. range checking все-таки ловит ошибку.
Sandman25 (2004-07-30 17:52:00) [9][35] Юрий Зотов © (30.07.04 17:50)
Кстати, ни range checking, ни overflow checking ошибку не обнаруживают.
Юрий Зотов (2004-07-30 17:50:00) [10]> Rem (30.07.04 17:38) [29]
Нет, это не странно. Компилятор заранее не может знать значений b и i, поэтому такой код он допускает, а ошибки не возникает потому что отключены проверки.
А в [14]-[15] ситуация другая.
Sandman25 (2004-07-30 17:46:00) [11][32] Анонимщик © (30.07.04 17:44)
Вы серьезно спрашиваете?
Sandman25 (2004-07-30 17:45:00) [12]Байты нумеруются слева направо, биты справа налево. То есть
[11] хранится как $00 08 00 00...
Анонимщик (2004-07-30 17:44:00) [13]Что значит "отвечает"?
Sandman25 (2004-07-30 17:43:00) [14]32 байта. Каждый бит отвечает за 1 элемент.
Анонимщик (2004-07-30 17:41:00) [15]Ладно, давайте разберемся.
Первый вопрос - где в памяти и в каком виде хранится переменная типа "множество"?
Rem (2004-07-30 17:38:00) [16]2 [24]
var
b: byte;
i: integer;
begin
b := 100;
i := 300;
b := b + i;
end;
Это тоже странно?
Sandman25 (2004-07-30 17:28:00) [17][27] Rem (30.07.04 17:25)
У меня это вообще любимое число. Наверное, поэтому и присвоил :)
[/Offtop]
Rem (2004-07-30 17:25:00) [18]2 [21]
1. Все мастера. Каждый в своем.
2. Мне так показалось по контексту.
3. Прошу прощения.
2 [22]
А мне так импонировало число 13! :)
Sandman25 (2004-07-30 17:21:00) [19]var
B: Word;
begin
B := 257;
ShowMessage(IntToStr(Ord(B in [B])));
ShowMessage(IntToStr(Ord(B-256 in [B])))
end;
выводит 0 и 1. Именно в таком порядке :)
Romkin (2004-07-30 17:18:00) [20]Пересечение диапазонов:
1. Упорядочить диапазоны по возрастанию нижних границ.
2. Если после этого нижняя граница диапазона не больше верхней границы предыдущего диапазона - есть пересечение