somas3k Napisano Styczeń 15, 2015 Zgłoś Share Napisano Styczeń 15, 2015 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 More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.