Wczytywanie z pliku, lista podwieszana

0

Witam, muszę napisać projekt na laborki z Pascala, który będzie działał jako tłumacz. "Program powinien umozliwiac zamiane słów znajdujacych sie w pliku tekstowym
na słowa wczytane ze słownika (innego pliku tekstowego). Słowa odczytane ze słownika powinny
byc trzymane w listach. W liscie znajduja sie słowa zaczynajace sie od tej samej litery." Chcę wykorzystać listę podwieszaną. W liście głównej będą hasła z tłumaczeniami posortowane alfabetycznie, przy czym dla każdej literki alfabetu tylko jeden raz, a reszta w podliście. Coś niedziała w moim programie, a mianowicie w procedurze tworzenie_listy. Cały czas sądzi, że lista jest pusta. Byłbym wdzięczny za wyłapanie błedu i przy okazji innych :)

program translator;
uses crt;

type
  Plitera = ^litera;
  Phaslo = ^haslo;

  litera = record
    ang : string;
    pol : string;
    wsk : Plitera;
    glowa_haslo : Phaslo;
  end;


  haslo = record
    ang : string;
    pol : string;
    nast : Phaslo;
  end;
procedure dodaj_do_podlis(var glowa : Phaslo; ang,pol:string);
var
  p,e : Phaslo;
begin
     new(e);
     e^.nast:=nil;
     e^.ang:=ang;
     e^.pol:=pol;
     p:=glowa;
     if p = nil then
     glowa:=e
     else
       begin
        while p^.nast <> nil do p:=p^.nast;
        p^.nast:=e;
       end;


end;
procedure dodaj_na_pocz_lit(var glowa : Plitera; ang,pol : string);
var
  p : Plitera;
begin
  new(p);
  p^.ang := ang;
  p^.pol := pol;
  p^.wsk:=glowa;
  glowa := p;
end;
procedure dodaj_w_sr_liter(var glowa:Plitera; e:Plitera;ang,pol:string);
var
  p : Plitera;
begin
  p:=glowa;
  if p = e then dodaj_na_pocz_lit(glowa,ang,pol)
  else
    begin
     while p^.wsk <> e do p:=p^.wsk;
     new(p^.wsk);
     p^.wsk^.wsk:=e;
     p^.wsk^.ang:=ang;
     p^.wsk^.pol:=pol;
    end;
end;
procedure tworzenie_listy(glowa:Plitera;ang,pol:string);
var skl_litera : Plitera;
  p : Phaslo;
  begin
skl_litera:=glowa;
    if skl_litera = nil then
                 begin
                  dodaj_na_pocz_lit(glowa,ang,pol);

                 end
                else
                 while ang[1] < skl_litera^.ang[1] do
                       begin
                         p:=skl_litera^.glowa_haslo;
                         if ang[1] = skl_litera^.ang[1] then
                         dodaj_do_podlis(p,ang,pol)
                         else
                         dodaj_w_sr_liter(glowa,skl_litera,ang,pol);
                         skl_litera:=skl_litera^.wsk;
                       end;
end;

procedure wczytaj_slownik(var skl_litera : Plitera);
var
  plik : text;
  ang,pol : string;
  sciezka : string;
begin
clrscr;
Writeln('Podaj sciezke do slownika (np. D:\slownik.txt)');
readln(sciezka);
assign(plik,sciezka);
{$I-}
reset(plik);
{$I+}
if IOResult <>  0 then
WriteLn('Blad')
else
  begin
    while SeekEof(plik) = false do
          begin
            readln(plik, ang);
            readln(plik, pol);
            tworzenie_listy(skl_litera,ang,pol);
          end;
  close(plik);
  end;
 end;

procedure wyswietl(glowa : Plitera);
var
  p : Plitera;

begin
p:=glowa;
while p<>nil do
      begin
        Writeln(p^.ang);
        Writeln(p^.pol);
        Writeln();
        p:=p^.wsk;
      end;

end;

var
  skl_litera : Plitera;


begin
  clrscr;
  wczytaj_slownik(skl_litera);
  wyswietl(skl_litera);

  readln;
end.


0

Nikt nie da rady pomóc??

0
  1. Zapoznaj się z pojęciem formatowania kodu, bo nikomu się nie chce w tym się babrać.
  2. procedure tworzenie_listy(var glowa:Plitera;ang,pol:string);
0

Co masz dokładnie na myśli, jeśli chodzi o formatowanie kodu?

1 użytkowników online, w tym zalogowanych: 0, gości: 1