Skocz do zawartości

Wczytywanie z pliku, lista podwieszana


somas3k

Polecane posty

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.

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...