Witam.. mam pytanie. Muszę napisać słownik polsko-angielski. Program ten powinien gromadzić polskie słowa oraz ich angielskie tłumaczenia (oczywiście nie cały słownik) w tablicy (lub tablicach) oraz umożliwiać wprowadzanie nowego słowa do słownika jeżeli jeszcze się w nim nie znajduję.. jak to zrobić?? Macie jakieś pomysły ?
Jak to zrobić? Siąść i napisać. Ja bym stworzył plik amorficzny z typem rekordowym, gdzie były by zapisane takie informacje na początku ilośc wpisów, ewentualnie wcześniej jakiś nagłowek, żeby mieć sprawdzić czy program ma do czynienia z właściwym śłownikiem. Później zapisujemy typ rekordowy, długośc polskiego słowa, polskie słowo, długośc angielskiego słowa, angielskie słowo. Odczyt polegał by na odczytaniu ilośc słow, ustawieniu na tę długośc rozmiaru tablicy, a później odczyt. Dzięki zadeklarowanniu pól rekordu z długościami słów (wystarczą typu Byte) nie musisz narzucać długości stringów aby odczyt i zapis był prawidlowy. Odczytujesz tylko string o takiej długośc jaką on ma, wcześniej ustawiając go przez SetLength
na pobraną z pliku długość. Także nie wiem w czym problem, tylko siąść i pokobinować. Wszystko opierać się będzie na operacjach plikowych charakterystycznych dla Pascala, ewentualnie WinAPI z modułu Windows
. Wyszukiwanie to pętla po tablicy dynamicznej z tymi rekordami i porównywania słowa polskiego lub angielskiego z wpisanym. Dodatkowo można zrobić sortowanie na przykład QuickSortem alfabetycznie według słowa po polsku lub angielsku. Tyle.
w tym rzecz , że ja mało ogarniam Pascala ;) Może ktoś ocenić ten kod (chodzi tu głownie o procedury) ? Są dobre ? Jeśli nie to jakie poprawki? Naprawdę nie wiem jak się do tego zabrać.
program angpol;
uses crt;
type
tlumaczenie = record
a:string;
b:string;
end;
wskaznik=^element;
element = record
dana:tlumaczenie;
next:wskaznik;
prev:wskaznik;
end;
var
first:wskaznik;
i:integer;
procedure wyszukajslowo(var a: integer; czy_znaleziono: boolean);
var slowko:string;
l:integer;
begin
a:=0;
czy_znaleziono := false;
while NOT EOF(pol.txt) do
begin
inc(a);
readLN(pol.txt, slowko);
if szukane = slowko then begin
czy_znaleziono = true;
break;
end;
if NOT czy_znaleziono then writeLN('Nie ma takiego slowa w slowniku')
else begin
for l:=1 to a do
readLN(eng.txt, tlumaczenie);
end;
end;
procedure dodajdolisty(var f:wskaznik; a:integer);
var
nowy:wskaznik;
begin
if f=nil then
begin
new(nowy);
nowy^.dana:=a;
nowy^.next:=nil;
nowy^.prev:=nil;
f:=nowy;
end
else
end;
var
w:wskaznik;
a,b,el,c,d:integer;
wybor:integer;
begin
clrscr;
writeln;
writeln("Wybierz numer z menu i wcisnij enter");
writeln;
writeln("1 Przetlumacz z angielskiego na polski");
writeln("2 Przetlumacz z polskiego na angielski");
writeln("3. Dodaj tlumaczenie");
writeln("4. KONIEC");
case wybor of
1:
2:
3:
4:
readln;
end.
Sformatuj kod po ludzku i wstaw w odpowiednie znaczniki to może ktoś spojrzy. Bo ja tylko widzę jedno, że kolejna osoba uskutecznia dziwną "modę". Polega ona na tym, że do zwócenia pewnych wartości spokojnie można użyć funkcji, a piszący upiera się na procedurę.
procedure wyszukajslowo(var a: integer; czy_znaleziono: boolean);
1.To powinna być funkcja.
2.Nie jestem pewien czy tyczy się to wszystkich odmian Pascala, ale w każdym razie FPC przypisuje var
pod pojedynczy parametr, więc czy_znaleziono
już nie zostanie przekazane w tej konwencji.
3.Nazwy typów powinny zaczynać się od T
, a typów wskaźnikowych od P
4.W ogóle nie masz pojęcia, jak obsługuje się w pliki w Pascalu - przeczytaj poradnik, potem pisz kod.
5.Po co lista? Tablica dynamiczna byłaby imho rozsądniejsza i czas dostępu byłby O(1)
.
2.Nie jestem pewien czy tyczy się to wszystkich odmian Pascala, ale w każdym razie FPC przypisuje var pod pojedynczy parametr
nie do końca:
procedure foobar(var a,b,c:integer; d,e,f:integer; var g:integer)
parametry a, b, c i g są ze słowem var
, a d, e i f bez.