Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Hеограниченные параметры.

0 views
Skip to first unread message

Ivan Kuvshinov

unread,
Jan 16, 2005, 5:23:34 PM1/16/05
to
Где-то однажды было плодотворное обсуждение как можно в Паскале, передавать в
процедуру не фиксированное количество параметров, но отыскать не удалось..
Что-то там было, вроде, с открытыми массивами..
Hазрела такая необходимость, пока решается через множества, вот так:

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икто не помнит то давнишнее обсуждение?

КИА

Alexey Rybenko

unread,
Jan 26, 2005, 7:10:08 PM1/26/05
to
Hi Ivan!

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!..

0 new messages