numerowanie listy jednokierunkowej, zapis do pliku
numerowanie listy jednokierunkowej, zapis do pliku
Mam taki problem, rozchodzi się o to, że chcę zrobić licznik kolejnych pozycji listy jednokierunkowej tak, że gdy zapiszę do pliku pozycje podczas jednego uruchomienia programu to po ponownym jego uruchomieniu liczenie zaczynało się od konkretnego numeru. Jakieś pomysły? Początkujący i wyrozumiałość wskazana.
Tu masz coś w ten deseń. Nie robi dokładnie tego co twój z zadania, ale myślę, że będzie pomocny. Lista jednokierunkowa na przykładzie stosu. Przerób sobie poniższy kod.
Kod: Zaznacz cały
program lista_5_zad_1;
{Zadanie 1.
Zadeklarować typy danych określające listę jednokierunkową:
type tdana = real;
plista = ^tlista;
tlista = record
liczba: tdana;
nast: plista;
end;
Wykorzystać przedstawione definicje do implementacji stosu. Opracować procedurę
dodającą element na stos, zdejmującą element ze stosu oraz wyprowadzającą zawartość
stosu na ekran. Program ma sprawdzać czy liczba dodawana na stos jest większa od 10.
Jeżeli tak to zapisuje w pliku tekstowym wartość tej liczby oraz jej pozycję na
stosie a następnie likwiduje stos i wychodzi z programu. Liczby dodawane na stos
są wprowadzane przez użytkownika.}
{$APPTYPE CONSOLE}
uses
SysUtils;
type
tdana = real;
plista = ^tlista;
tlista = record
liczba : tdana;
nast : plista;
end;
function Dodaj (var pocz : plista; co : tdana) : boolean;
var nowy : plista;
begin
New (nowy);
if nowy = nil then
begin
result := false;
exit;
end;
nowy^.liczba := co;
if pocz = nil then pocz := nowy
else
begin
nowy^.nast := pocz;
pocz := nowy;
end;
result := true;
end;
procedure Wyswietl (pocz : plista);
begin
while pocz <> nil do
begin
writeln ('Liczba : ',pocz^.liczba:4:2);
pocz := pocz^.nast;
end;
end;
function Usun (var pocz : plista) : boolean;
var temp : plista;
begin
if pocz = nil then
begin
result := false;
exit;
end;
temp := pocz;
pocz := pocz^.nast;
dispose (temp);
result := true;
end;
procedure Zapisz (pocz : plista; co : tdana);
var
plik : textfile;
poz : word;
begin
assignfile (plik,'liczby.txt');
if not fileexists ('liczby.txt') then rewrite (plik) else append (plik);
poz := 0;
while pocz <> nil do
begin
inc (poz);
if pocz^.liczba > 10 then writeln (plik, poz,' ',co:4:2);
pocz := pocz^.nast;
end;
closefile (plik);
end;
procedure Czysc (var pocz : plista);
var temp : plista;
begin
while pocz <> nil do
begin
temp := pocz;
pocz := pocz^.nast;
dispose (temp);
end;
end;
var
pocz : plista;
opcja : char;
co : tdana;
begin
repeat
writeln ('[1] - Odloz na stos');
writeln ('[2] - Wyswietl stos');
writeln ('[3] - Zdejmij ze stosu');
writeln ('[4] - Zakoncz');
readln (opcja);
case opcja of
'1':begin
write ('Podaj liczbe: ');
readln (co);
writeln (Dodaj (pocz, co));
if co > 10 then Zapisz (pocz, co);
end;
'2': Wyswietl (pocz);
'3': writeln (Usun (pocz));
end;
until opcja = '4';
Czysc (pocz);
end.