|
numerowanie listy jednokierunkowej, zapis do pliku
dzakens - 22-02-2010 11:55
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.
wojak - 22-02-2010 16:38
Mam gotowe programy z listami w Delphi. Jak chcesz mogę wrzucić kody. Ja na szczęście już to mam od dawna za sobą.
dzakens - 22-02-2010 18:10
Jakby to nie był problem.
wojak - 23-02-2010 15:07
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.
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.
zanotowane.pldoc.pisz.plpdf.pisz.plminister.pev.pl
|