Ahoj,
prosím Vás potřeboval bych poradit, pro někoho asi s maličkostí, ale já nevím....?
Mám tuto funkci a nevím jakým způsobem jí volat? ( ta funkce je opsaná, nepsal jsem jí já, jen se to snažím pochopit)
function vypust(P:Uk):Uk;
{ P ukazuje na předchůdce rušeného prvku }
{ Funkce vrací ukazatel na vypuštěný prvek, případně vrací hodnotu nil,
* pokud byl prvek P posledním prvkem seznamu }
var Q:Uk; { TOTO V KNIZE NENÍ!! }
begin
Q := P^.dalsi; { Q odkazuje na rušený prvek }
if Q <> nil then
begin
P^.dalsi := Q^.dalsi; { uzel Q je vypuštěn ze seznamu }
Q^.dalsi := nil; { odpojit před dalším použitím }
end;
vypust := Q;
end;
Možná nebude od věci celý kód. Připomínám ještě jednou že to je opsané z knihy, jde mi o pochopení té věci. Myslím tím
napíšu vypust("argument typu 'Uk'") // ale jaký????
Takže celý kód:
program seznamJednosmerny;
type Uk = ^Uzel;
Uzel = record
info : integer;
dalsi : Uk;
pred:Uk;
end;
var seznam : Uk;
seznamDva: Uk;
procedure vytvor(N:integer; var P: Uk);
var Q: Uk;
begin
P:= nil;
while N > 0 do
begin
new(Q);
Q^.info := N;
Q^.dalsi := P;
P:= Q;
N:= N-1;
end;
writeln('vše je ok');
end;
procedure vytvor2(N: integer; var P:Uk);
{ P bude ukazovat na začátek vytvořeného seznamu }
var Q,R:Uk;
I:integer;
{ P - začátek seznamu (první prvek)
* Q - konec seznamu (poslední prvek)
* R - nový prvek }
begin
new(P); { první prvek seznamu vytvoříme odděleně }
P^.info := 1;
P^.dalsi := nil;
Q := P; {první prvek seznamu je zároveň posledním }
for I:=2 to N do
begin
new(R);
R^.info:=I;
Q^.dalsi:= R;
Q:=R;
end;
Q^.dalsi := nil { ještě seznam řádně zakončíme }
end;
procedure vlozZa(P,Q:Uk);
{ P ukazuje na prvek seznamu, za který se má vlkádat
* Q ukazuje na nově vkládaný prvek }
begin
Q^.dalsi:=P^.dalsi;
P^.dalsi:=Q;
end;
procedure vlozPred(P,Q:Uk);
{ P ukazuje na prvek seznamu, před který se má vkládat
* Q ukazuje na nově vkládaný prvek }
var K: integer;
begin
K:=Q^.info; { do proměnné K si odložíme obsah Q }
Q^ := P^; { kopírují se celé uzly, tj Info i Dalsi }
P^.info := K; { dokončit výměnu hodnot Info }
P^.dalsi := Q; { zapojit nový prvek }
end;
function vypust(P:Uk):Uk;
{ P ukazuje na předchůdce rušeného prvku }
{ Funkce vrací ukazatel na vypuštěný prvek, případně vrací hodnotu nil,
* pokud byl prvek P posledním prvkem seznamu }
var Q:Uk; { TOTO V KNIZE NENÍ!! }
begin
Q := P^.dalsi; { Q odkazuje na rušený prvek }
if Q <> nil then
begin
P^.dalsi := Q^.dalsi; { uzel Q je vypuštěn ze seznamu }
Q^.dalsi := nil; { odpojit před dalším použitím }
end;
vypust := Q;
end;
procedure vypis(var P:uk);
begin
while P <> nil do
begin
write(P^.info);
write(' ---> ');
write(double(P^.dalsi));
P:=P^.dalsi;
writeln();
end;
end;
var cislo : integer;
begin
writeln('napiš číslo');
read(cislo);
vytvor(cislo, seznam);
vypis(seznam);
read(cislo);
vytvor2(cislo, seznamDva);
writeln('enter a vipíše se seznam');
vypis(seznamDva);
read(cislo);
end.
Aby bylo jasné jak volám ty předchozí.
Moc děkuji za každou radu:-)
P.S.- snad budu někdy taky radit:-)