Добрый день,
Недавно копался в простейшей вещи: работа с множествами.
Обнаружил весьма странное поведение, хотя и вполне понятное из физического представления множеств, но недокументированное в хелпе.
program prg;
type
range=10..255;
rangedset=set of range;
var
s: rangedset;
begin
s:=[0..12];
if 0 in s then
WriteLn('0 in set');
if 9 in s then
WriteLn('9 in set');
end;
Как вы думаете, что выведет такая программа, и какие элементы содержатся в множестве?
Правильный ответ

:
программа выведет
9 in set
В множестве содержатся эл-ты 8,9,10,11,12.
Причем результат воспроизводится с {$OVERFLOWCHECKS ON}{$RANGECHECKS ON}
и с отладочной версией RTL.
С уважением, Евгений Белоусов.
PS Хотя все множества заданы константами, компилятор не выдает ни даже хинтов
по этому поводу.
... << RSDN@Home 1.1 beta 1 >>