gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
Cas01 preimenovan, dodate XDS verzije koda
[spa2-teorijske-vezbe.git] / 01. Dvosmerni Recnik / TopSpeed / RECNIKAT.MOD
1 IMPLEMENTATION MODULE RecnikATP;
3 FROM IO IMPORT
4 RdKey, WrStr, WrLn, WrCard;
5 FROM SYSTEM IMPORT
6 TSIZE;
7 FROM Str IMPORT
8 Compare;
9 FROM Storage IMPORT
10 ALLOCATE, DEALLOCATE;
12 PROCEDURE Hash(Rec: String): Indeksi;
13 VAR
14 i, Zbir, Temp: CARDINAL;
15 BEGIN
16 Zbir:= 0;
17 i:= 1;
18 WHILE (i <= MaxDuzRec) AND (Rec[i] # CHR(0)) DO
19 Temp:= (ORD(Rec[i]) * ORD(Rec[i])) MOD Broj;
20 Zbir:= (Zbir + Temp) MOD Broj;
21 INC(i);
22 END;
23 RETURN Zbir;
24 END Hash;
26 PROCEDURE Inicijalizuj(VAR R: Recnik);
27 VAR
28 i: Indeksi;
29 BEGIN
30 WITH R DO
31 BrojReci:= 0;
32 FOR i := 0 TO MaxTabela DO
33 NEW(Domace[i]);
34 Domace[i]^.Veza := Domace[i];
35 NEW(Strane[i]);
36 Strane[i]^.Veza := Strane[i]
37 END;
38 END;
39 END Inicijalizuj;
41 PROCEDURE Unisti(VAR R: Recnik);
42 VAR
43 i: Indeksi;
44 Tekuci: Lista;
45 BEGIN
46 FOR i:= 0 TO MaxTabela DO
47 WHILE R.Domace[i] # R.Domace[i]^.Veza DO
48 Tekuci:= R.Domace[i]^.Veza;
49 R.Domace[i]^.Veza:= Tekuci^.Veza;
50 DISPOSE(Tekuci);
51 END;
52 DISPOSE(R.Domace[i]);
53 WHILE R.Strane[i] # R.Strane[i]^.Veza DO
54 Tekuci:= R.Strane[i]^.Veza;
55 R.Strane[i]^.Veza:= Tekuci^.Veza;
56 DISPOSE(Tekuci);
57 END;
58 DISPOSE(R.Strane[i]);
59 END;
60 END Unisti;
62 PROCEDURE Nadji(VAR Rec: String;
63 VAR Tab: Tabela;
64 VAR Prethodni: Lista;
65 VAR Nadjen: BOOLEAN);
66 VAR
67 Pozicija: Indeksi;
68 BEGIN
69 Pozicija:= Hash(Rec);
70 Prethodni:= Tab[Pozicija];
71 Prethodni^.Rec:= Rec;
72 IF Prethodni^.Veza = Prethodni THEN
73 Nadjen:= FALSE;
74 ELSE
75 WHILE Compare(Prethodni^.Veza^.Rec, Rec) # 0 DO
76 Prethodni:= Prethodni^.Veza;
77 END;
78 Nadjen:= Prethodni^.Veza # Tab[Pozicija]
79 END;
80 END Nadji;
82 PROCEDURE Ubaci(DomacaRec, StranaRec: String;
83 VAR R: Recnik;
84 VAR Duplikat: BOOLEAN);
85 VAR
86 NadjenDom, NadjenStr: BOOLEAN;
87 PrethodniDom, PrethodniStr, PomDom, PomStr: Lista;
88 BEGIN
90 Nadji(DomacaRec, R.Domace, PrethodniDom, NadjenDom);
91 Nadji(StranaRec, R.Strane, PrethodniStr, NadjenStr);
93 IF NadjenDom OR NadjenStr THEN
94 Duplikat:= TRUE;
95 ELSE
97 Duplikat := FALSE;
99 NEW(PomDom);
100 PomDom^.Rec:= DomacaRec;
101 PomDom^.Veza:= PrethodniDom^.Veza;
102 PrethodniDom^.Veza:= PomDom;
104 NEW(PomStr);
105 PomStr^.Rec:= StranaRec;
106 PomStr^.Veza:= PrethodniStr^.Veza;
107 PrethodniStr^.Veza:= PomStr;
109 PomDom^.Prevod:= PomStr;
110 PomStr^.Prevod:= PomDom;
112 INC(R.BrojReci);
114 END;
115 END Ubaci;
117 PROCEDURE Izbaci(Rec: String;
118 VAR R: Recnik;
119 Domaca: BOOLEAN;
120 VAR Ok: BOOLEAN);
121 VAR
122 Prethodni, Prethodni2, Temp, Temp2: Lista;
123 BEGIN
125 IF Domaca THEN
126 Nadji(Rec, R.Domace, Prethodni, Ok);
127 ELSE
128 Nadji(Rec, R.Strane, Prethodni, Ok);
129 END;
131 IF Ok THEN
133 Temp:= Prethodni^.Veza;
134 Prethodni^.Veza:= Temp^.Veza;
136 Temp2:= Temp^.Prevod;
137 Prethodni2:= Temp2^.Veza;
138 WHILE Prethodni2^.Veza # Temp2 DO
139 Prethodni2:= Prethodni2^.Veza;
140 END;
141 Prethodni2^.Veza:= Temp2^.Veza;
143 DISPOSE(Temp);
144 DISPOSE(Temp2);
146 DEC(R.BrojReci);
147 END;
148 END Izbaci;
150 PROCEDURE Prevedi(StranuNaDomacu: BOOLEAN;
151 Rec: String;
152 VAR Prevod: String;
153 VAR R: Recnik;
154 VAR Ok: BOOLEAN);
155 VAR
156 Prethodni: Lista;
157 BEGIN
158 IF StranuNaDomacu THEN
159 Nadji(Rec, R.Strane, Prethodni, Ok);
160 ELSE
161 Nadji(Rec, R.Domace, Prethodni, Ok);
162 END;
163 IF Ok THEN
164 Prevod:= Prethodni^.Veza^.Prevod^.Rec;
165 END
166 END Prevedi;
168 PROCEDURE Sadrzaj(VAR R: Recnik);
169 VAR
170 i: Indeksi;
171 Tekuci: Lista;
172 BEGIN
173 WrStr('Sadrzaj recnika:');
174 FOR i:= 0 TO MaxTabela DO
175 Tekuci:= R.Domace[i]^.Veza;
176 WHILE Tekuci# R.Domace[i] DO
177 WrLn;
178 WrStr(Tekuci^.Rec);
179 WrStr(' --------- ');
180 WrStr(Tekuci^.Prevod^.Rec);
181 Tekuci:= Tekuci^.Veza;
182 END;
183 END;
184 END Sadrzaj;
186 END RecnikATP.
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner