numerowanie listy jednokierunkowej, zapis do pliku

Potrzebujesz pomocy z C, C++, perl, python, itp.
dzakens
Posty: 8
Rejestracja: 31 października 2009, 13:20

numerowanie listy jednokierunkowej, zapis do pliku

Post autor: dzakens »

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
Beginner
Posty: 129
Rejestracja: 04 lutego 2009, 15:59

Post autor: wojak »

Mam gotowe programy z listami w Delphi. Jak chcesz mogę wrzucić kody. Ja na szczęście już to mam od dawna za sobą.
dzakens
Posty: 8
Rejestracja: 31 października 2009, 13:20

Post autor: dzakens »

Jakby to nie był problem.
wojak
Beginner
Posty: 129
Rejestracja: 04 lutego 2009, 15:59

Post autor: wojak »

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.
ODPOWIEDZ