Potrzebuję informację nt. tego, jak poprawnie odnieść się do elementów na stosie z listy jednokierunkowej.
Koncepcja programu jest taka : dodaj element na stos - wypisz elementy znajdujące się na stosie - usuń elementy ze stosu.
Teraz potrzebuję te elementy zapisać do pliku tekstowego. W przypadku typu rekordowego nie było problemów, ale teraz takowe się pojawiają. Jakieś sugestie?
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
lista = ^tlista;
tlista = record
imie: string[25];
nazwisko: string[35];
wiek:byte;
PESEL: string;
wsk: lista;
end;
var
pocz:lista;
procedure ini(var pocz:lista); //procedura inicjalizujaca stos
begin
pocz:=nil;
end;
function dodaj(var pocz:lista):boolean;
var
temp:lista;
begin
new(temp);
if temp=nil then begin dodaj:=false; //zwroci false jezeli pamiec przepelniona
writeln('Pamiec prawdopodobnie przepelniona!');
end
else
begin
writeln('Podaj imie: ');
readln(temp^.imie);
writeln('Podaj nazwisko: ');
readln(temp^.nazwisko);
writeln('Podaj wiek: ');
readln(temp^.wiek);
writeln('Podaj PESEL: ');
readln(temp^.pesel);
temp^.wsk:=pocz;
pocz:=temp;
dodaj:=true;
writeln('Pomyslnie dodano uzytkownika na stos');
end;
writeln;
end;
function usun(var pocz:lista):boolean;
var
temp:lista;
begin
if pocz=nil then begin usun:=false;
writeln('Stos jest pusty :(');
end
else
begin
temp:=pocz;
pocz:=pocz^.wsk;
dispose(temp);
usun:=true;
end;
writeln;
end;
function wypisz(pocz:lista):boolean;
begin
if pocz=nil then begin wypisz:=false;
writeln('Stos jest pusty :(');
end
else
begin
wypisz:=true;
while(pocz<>nil) // petla bedzie wykonywac sie dopoki nie napotka na nil w pocz
// czyli bedzie wykonywac sie do ostatniego-pierwszego elementu na stosie;
do
begin
writeln('Imie: ',pocz^.imie);
writeln('Nazwisko: ',pocz^.nazwisko);
writeln('Wiek: ',pocz^.wiek);
writeln('Pesel: ',pocz^.PESEL);
pocz:=pocz^.wsk;
writeln;
end;
end;
writeln;
end;
procedure zapis(pocz:lista);
var
plik:text;
begin
assign(plik,'stos.txt');
append(plik);
readln(pocz);
writeln(plik,pocz);
closefile(plik);
end;
procedure menu();
var
a:byte;
begin
repeat
writeln('Witaj w bazie STOS.');
writeln('1. Dodaj uzytkownika na stos.');
writeln('2. Usun uzytkownika ze stosu.');
writeln('3. Wypisz uzytkownika.');
writeln('0. ||WYJDZ Z PROGRAMU||.');
readln(a);
writeln;
if (a=1) then begin
writeln(dodaj(pocz));
end;
if (a=2) then begin
writeln(usun(pocz));
end;
if (a=3) then begin
writeln(wypisz(pocz));
end;
until (a=0);
writeln;
end;
begin
{ TODO -oUser -cConsole Main : Insert code here }
ini(pocz); //inicjalizacja stosu
menu();
end.