Program cviat_topki;
TYPE
st15=string[15];
poredica=^element; {тип указател към един елемент от стека}
element=record
cviat:st15; {цвят на топката}
predishen
oredica; {предишен елемент}
end;
VAR
s:st15;
posleden
oredica;
procedure dobav (s:st15); {добавяне на елемент към стека}
VAR
w
oredica;
begin
new(w); {създава се елемент}
w^.cviat:=s;
w^.predishen:=posleden;
posleden:=w; {трябва да съдържа последната добавена топка към стека}
end; {край на процедура}
procedure izvlich(var s:st15);
VAR
w
oredica;
begin
s:=posleden^.cviat; {извлича се цвета на последната добавена топка}
w:=posleden;
posleden:=posleden^.predishen;
dispose(w); {освобождава се заеманата от последната добавена топка памет}
end;
procedure vavej; {процедура за въвеждане на топките със съответния цвят}
VAR
i:integer;
begin
write('Vavedete cviat na topka No1 (Za izhod -> "1"): ');
readln(s);
i:=1;
while s<>'1' do
begin
i:=i+1;
dobav(s);
write('Cviat na topka No',i,' : ');
readln(s);
end;
dobav(s); { добавя цвят '1' }
end; {край на процедура}
procedure izvej; {процедура за извеждане на цвета на топките по реда на изваждането им }
VAR
i:integer;
begin
i:=1; { промених на '1' }
while posleden^.cviat<>'1' do
begin
izvlich(s);
writeln(i,'.',s);
i:=i+1;
if i mod 24 = 0 then
readln
end;
end; {край на процедура}
BEGIN
posleden:=nil;
vavej;
izvej;
END.