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.