Sharkson napisał(a)
A jest może w takim razie możliwość przekazania pewnej funkcji informacji jaką procedurę uruchomić?
Tak - wystarczy wskaźnik na taką procedurę i znajomość ewentualnych parametrów i ich typów; Przykład masz poniżej:
type
TNumberProc = procedure(ANumber: Integer);
procedure Even(ANumber: Integer);
begin
Write('Number ', ANumber, ' is even');
end;
procedure Odd(ANumber: Integer);
begin
Write('Number ', ANumber, ' is odd');
end;
procedure ShowNumberInfo(ANumberProc: TNumberProc; ANumber: Integer);
begin
ANumberProc(ANumber);
end;
var
spRandom: TNumberProc;
intRandom: Integer;
begin
Randomize();
intRandom := Random(1000);
if intRandom and 1 = 0 then
spRandom := @Even
else
spRandom := @Odd;
ShowNumberInfo(spRandom, intRandom);
ReadLn;
end.
Wskaźnik spRandom
zostaje ustawiony na odpowiednią procedurę, według parzystości wylosowanej liczby; Następnie zostaje on przekazany wraz ze zmienną intRandom
do procedury ShowNumberInfo
, w której to procedura zostaje wywołana i do której zostaje przekazany parametr ANumber
;
Ewentualnie możesz posłużyć się tablicą ze wskaźnikami na procedury, np.:
type
TNumberProc = procedure(ANumber: Integer);
procedure Even(ANumber: Integer);
begin
Write('Number ', ANumber, ' is even');
end;
procedure Odd(ANumber: Integer);
begin
Write('Number ', ANumber, ' is odd');
end;
procedure ShowNumberInfo(ANumberProc: TNumberProc; ANumber: Integer);
begin
ANumberProc(ANumber);
end;
const
NUMBER_PROCS: array [Boolean] of TNumberProc = (@Odd, @Even);
var
spRandom: TNumberProc;
intRandom: Integer;
begin
Randomize();
intRandom := Random(1000);
spRandom := NUMBER_PROCS[intRandom and 1 = 0];
ShowNumberInfo(spRandom, intRandom);
ReadLn;
end.