![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Object Pascal and Delphi [D5]
turusov © (2002-09-25 15:24:00)Есть множество:
m = ["-","+","0".."9"] или
m = ["-","+","1","0","2".."9"]
Watch List выводит:
m: ["-","+","0".."9"]
Как получить значение в stringкак в Watch List
Памяти (2002-09-27 03:33:00) [1]Купа-Купыча Гениального (см. "республика ШКИД").
До сих пор, Анатолий, критерием для меня служила надпись в ст.газете Купа-Купыча - "Юлыстрация к трогедии Борис Гадунв"!
Но Вы превзошли сей рекорд всего лишь в одном слове - "доепольнилетьный"!
Anatoly Podgoretsky (2002-09-26 09:10:00) [2]MBo © (26.09.02 08:39)
Алгоритм можно упростить, если сделать вначале еде один доепольнилетьный обратный цикл для поиска максимального элемента во множестве.
MBo (2002-09-26 08:39:00) [3]Сказали же, на GetSetProp.
В моем и qube вариантах добавлен вывод "2".."9" именно в таком виде, без перечисления каждого элемента отдельно.
turusov (2002-09-26 08:37:00) [4]БлагодарюСтарый паскалист!!!
turusov (2002-09-26 08:32:00) [5]Ребята не понимайте вопрос, буквально. Множествоможет быть любого типа. А насчет TypInfo, подскажите по конкретнее, на что обратить внимание.
qube (2002-09-25 16:13:00) [6]Ого, сколько насочиняли, пока я трудился!
Да, одним извратом больше :).
qube (2002-09-25 16:10:00) [7]По просьбам трудящихся:
type
TCharSet = set of char;
procedure PrintSet(s: TCharSet);
var
c: char;
state: (start, wait_first, wait_next, wait_last);
begin
state := start;
write("[");
for c := Chr(0) to Chr(255) do begin
case state of
start:
if c in s then begin
state := wait_next;
write(c);
end;
wait_first:
if c in s then begin
state := wait_next;
write(", ",c);
end;
wait_next:
if c in s then
state := wait_last
else
state := wait_first;
wait_last:
if not (c in s) then begin
state := wait_first;
write("..",chr(ord(c)-1));
end;
end;
end;
writeln("]");
end;
Старый паскалист (2002-09-25 16:09:00) [8]См исходники ф-и GetSetProp (TypInfo.pas).
Если её немного изменить, будет то, что тебе надо.
MBo (2002-09-25 16:05:00) [9]извратик ;)
procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
m: set of char;
c: char;
flag: Boolean;
first: byte;
begin
s := "[";
flag := false;
m := ["-", "+", "1", "0", "2".."9"];
for c := #0 to #255 do
begin
if c in m then
begin
if not flag then
s := s + ",""" + c + """";
flag := true;
end
else
begin
if flag then
if (Ord(c) - first) > 2 then
s := s + "..""" + Pred(c) + """";
flag := false;
first := Ord(c);
end;
end;
if (Length(s) >= 2) and (Pos(",", s) = 2) then
Delete(s, 2, 1);
s := s + "]";
caption := s;
end;
Kaban (2002-09-25 15:49:00) [10]qube © (25.09.02 15:40)
сильно
человек, по-видимому, и интересуется как это сделать
qube (2002-09-25 15:40:00) [11]Представление в памяти множеств
["-","+","1","0","2".."9"] и ["-","+","0".."9"] одинаково, поэтому надо просто написать процедуру вывода элементов множества.