procedure NewSystem(const nachalo : PoiOnSystemsTyp; const param : set of
Byte);
var
begun : ^OnSystemsTyp := nachalo;
increa : Byte;
begin
for increa := 0 to High(Byte) do
begin
if Not(increa in param) then Continue;
New(begun);
with begun^ do
begin
typs := increa;
OnLine := 0;
next := nil;
begun := Addr(next);
end;
end;
end;
С вызовом примерно таким: NewSystem(nachalo,[1, 2, 3, 4, 100, 5, 0, 7, 6]);
Однако это не устраивает. С диапазоном чисел в Byte в принципе нормально, а
вот то, что два одинаковых числа будут полученны как одно - вот это и не
подходит, а тем более то, что не сохраняется порядок следования, а он как раз
для меня важен.
Конечно, всегда остаётся возможность передавать как строку ('1, 2, 3, 4, 100,
5, 0, 7;') и разбирать на месте, но хочеться этого избежать.
Есть какие-нибудь идеи? Hикто не помнит то давнишнее обсуждение?
КИА
17 Jan 05 01:23, you wrote to All:
IK> Где-то однажды было плодотворное обсуждение как можно в Паскале,
IK> передавать в процедуру не фиксированное количество параметров, но
IK> отыскать не удалось.. Что-то там было, вроде, с открытыми массивами..
IK> Hазрела такая необходимость, пока решается через множества, вот так:
type
TMyParam = record
x, y, z : Integer;
end;
function my_func( params: array of TMyParam): boolean;
var
param_count: integer;
begin
param_count := SizeOf( params ) div SizeOf( params[0] ); { Hmm.. ;) }
writeln( 'Parameters count is ', param_count );
end;
var
a: array[1..5] of TMyParam;
begin
my_func( a );
end.
Alexey.
... Don't try to defraud yourself, just be yourself, here and now!..