Mam za zadanie stworzyć licznik stosu podający ilość elementów znając tylko jego wierzchołek, mam już naskrobany taki przykładowy program ze stosem oraz funkcję odpowiedzialną za licznik ale coś mi nie działa on, zwraca tylko nonstop 0. Nie wiem co jest nie tak.
Aj ofiarą jestem, do funkcji nie przypisalem wartości.
program project1;
uses crt;
type
wskaznik=^element;
rek = record
liczba:integer;
ciag:string;
end;
element = record
rekord:rek;
wsk:wskaznik;
end;
var
wsk:wskaznik;
rekord:rek;
i:byte;
z:byte;
procedure push(var x:wskaznik; var rekord:rek);
var
top:wskaznik;
begin
new(top);
top^.rekord:=rekord;
top^.wsk:=x;
x:=top;
end;
procedure pop(var x:wskaznik; var rekord:rek);
var
bottom:wskaznik;
begin
if x<>nil then
begin
rekord:=x^.rekord;
writeln(rekord.liczba);
writeln(rekord.ciag);
bottom:=x^.wsk;
dispose(x);
x:=bottom;
end
else
begin
writeln('Stos pusty');
end;
end;
function licznik(a:wskaznik):word;
var
l:integer;
begin
l:= 0;
while (a<>nil) do
begin
l:=l+1;
a:= a^.wsk;
end;
end;
begin
randomize;
z:=random(20);
//writeln('Memavail= ',memavail);
for i:=0 to z do
begin
rekord.liczba:=random(50);
rekord.ciag:=chr(random(94)+32);
push(wsk,rekord)
end;
//writeln('Memavail= ',memavail);
writeln('Licznik stosu wynosi: ',licznik(wsk));
for i:=0 to z do
begin
pop(wsk,rekord);
end;
//writeln('Memavail= ',memavail);
writeln('Licznik stosu wynosi: ',licznik(wsk));
readln;
end.