gitweb on Svarog
projekti pod git sistemom za održavanje verzija -- projects under the git version control systemdiff --git a/01. Dvosmerni Recnik/XDS/RECNIKATP.MOD b/01. Dvosmerni Recnik/XDS/RECNIKATP.MOD
--- /dev/null
@@ -0,0 +1,186 @@
+IMPLEMENTATION MODULE RecnikATP;\r
+\r
+ FROM IO IMPORT\r
+ RdKey, WrStr, WrLn, WrCard;\r
+ FROM SYSTEM IMPORT\r
+ TSIZE;\r
+ FROM Str IMPORT\r
+ Compare;\r
+ FROM Storage IMPORT\r
+ ALLOCATE, DEALLOCATE;\r
+\r
+ PROCEDURE Hash(Rec: String): Indeksi;\r
+ VAR\r
+ i, Zbir, Temp: CARDINAL;\r
+ BEGIN\r
+ Zbir:= 0;\r
+ i:= 1;\r
+ WHILE (i <= MaxDuzRec) AND (Rec[i] # CHR(0)) DO\r
+ Temp:= (ORD(Rec[i]) * ORD(Rec[i])) MOD Broj;\r
+ Zbir:= (Zbir + Temp) MOD Broj;\r
+ INC(i);\r
+ END;\r
+ RETURN Zbir;\r
+ END Hash;\r
+\r
+ PROCEDURE Inicijalizuj(VAR R: Recnik);\r
+ VAR\r
+ i: Indeksi;\r
+ BEGIN\r
+ WITH R DO\r
+ BrojReci:= 0;\r
+ FOR i := 0 TO MaxTabela DO\r
+ NEW(Domace[i]);\r
+ Domace[i]^.Veza := Domace[i];\r
+ NEW(Strane[i]);\r
+ Strane[i]^.Veza := Strane[i]\r
+ END;\r
+ END;\r
+ END Inicijalizuj;\r
+\r
+ PROCEDURE Unisti(VAR R: Recnik);\r
+ VAR\r
+ i: Indeksi;\r
+ Tekuci: Lista;\r
+ BEGIN\r
+ FOR i:= 0 TO MaxTabela DO\r
+ WHILE R.Domace[i] # R.Domace[i]^.Veza DO\r
+ Tekuci:= R.Domace[i]^.Veza;\r
+ R.Domace[i]^.Veza:= Tekuci^.Veza;\r
+ DISPOSE(Tekuci);\r
+ END;\r
+ DISPOSE(R.Domace[i]);\r
+ WHILE R.Strane[i] # R.Strane[i]^.Veza DO\r
+ Tekuci:= R.Strane[i]^.Veza;\r
+ R.Strane[i]^.Veza:= Tekuci^.Veza;\r
+ DISPOSE(Tekuci);\r
+ END;\r
+ DISPOSE(R.Strane[i]);\r
+ END;\r
+ END Unisti;\r
+\r
+ PROCEDURE Nadji(VAR Rec: String;\r
+ VAR Tab: Tabela;\r
+ VAR Prethodni: Lista;\r
+ VAR Nadjen: BOOLEAN);\r
+ VAR\r
+ Pozicija: Indeksi;\r
+ BEGIN\r
+ Pozicija:= Hash(Rec);\r
+ Prethodni:= Tab[Pozicija];\r
+ Prethodni^.Rec:= Rec;\r
+ IF Prethodni^.Veza = Prethodni THEN\r
+ Nadjen:= FALSE;\r
+ ELSE\r
+ WHILE Compare(Prethodni^.Veza^.Rec, Rec) # 0 DO\r
+ Prethodni:= Prethodni^.Veza;\r
+ END;\r
+ Nadjen:= Prethodni^.Veza # Tab[Pozicija]\r
+ END;\r
+ END Nadji;\r
+\r
+ PROCEDURE Ubaci(DomacaRec, StranaRec: String;\r
+ VAR R: Recnik;\r
+ VAR Duplikat: BOOLEAN);\r
+ VAR\r
+ NadjenDom, NadjenStr: BOOLEAN;\r
+ PrethodniDom, PrethodniStr, PomDom, PomStr: Lista;\r
+ BEGIN\r
+\r
+ Nadji(DomacaRec, R.Domace, PrethodniDom, NadjenDom);\r
+ Nadji(StranaRec, R.Strane, PrethodniStr, NadjenStr);\r
+\r
+ IF NadjenDom OR NadjenStr THEN\r
+ Duplikat:= TRUE;\r
+ ELSE\r
+\r
+ Duplikat := FALSE;\r
+\r
+ NEW(PomDom);\r
+ PomDom^.Rec:= DomacaRec;\r
+ PomDom^.Veza:= PrethodniDom^.Veza;\r
+ PrethodniDom^.Veza:= PomDom;\r
+\r
+ NEW(PomStr);\r
+ PomStr^.Rec:= StranaRec;\r
+ PomStr^.Veza:= PrethodniStr^.Veza;\r
+ PrethodniStr^.Veza:= PomStr;\r
+\r
+ PomDom^.Prevod:= PomStr;\r
+ PomStr^.Prevod:= PomDom;\r
+\r
+ INC(R.BrojReci);\r
+\r
+ END;\r
+ END Ubaci;\r
+\r
+ PROCEDURE Izbaci(Rec: String;\r
+ VAR R: Recnik;\r
+ Domaca: BOOLEAN;\r
+ VAR Ok: BOOLEAN);\r
+ VAR\r
+ Prethodni, Prethodni2, Temp, Temp2: Lista;\r
+ BEGIN\r
+\r
+ IF Domaca THEN\r
+ Nadji(Rec, R.Domace, Prethodni, Ok);\r
+ ELSE\r
+ Nadji(Rec, R.Strane, Prethodni, Ok);\r
+ END;\r
+\r
+ IF Ok THEN\r
+\r
+ Temp:= Prethodni^.Veza;\r
+ Prethodni^.Veza:= Temp^.Veza;\r
+\r
+ Temp2:= Temp^.Prevod;\r
+ Prethodni2:= Temp2^.Veza;\r
+ WHILE Prethodni2^.Veza # Temp2 DO\r
+ Prethodni2:= Prethodni2^.Veza;\r
+ END;\r
+ Prethodni2^.Veza:= Temp2^.Veza;\r
+\r
+ DISPOSE(Temp);\r
+ DISPOSE(Temp2);\r
+\r
+ DEC(R.BrojReci);\r
+ END;\r
+ END Izbaci;\r
+\r
+ PROCEDURE Prevedi(StranuNaDomacu: BOOLEAN;\r
+ Rec: String;\r
+ VAR Prevod: String;\r
+ VAR R: Recnik;\r
+ VAR Ok: BOOLEAN);\r
+ VAR\r
+ Prethodni: Lista;\r
+ BEGIN\r
+ IF StranuNaDomacu THEN\r
+ Nadji(Rec, R.Strane, Prethodni, Ok);\r
+ ELSE\r
+ Nadji(Rec, R.Domace, Prethodni, Ok);\r
+ END;\r
+ IF Ok THEN\r
+ Prevod:= Prethodni^.Veza^.Prevod^.Rec;\r
+ END\r
+ END Prevedi;\r
+\r
+ PROCEDURE Sadrzaj(VAR R: Recnik);\r
+ VAR\r
+ i: Indeksi;\r
+ Tekuci: Lista;\r
+ BEGIN\r
+ WrStr('Sadrzaj recnika:');\r
+ FOR i:= 0 TO MaxTabela DO\r
+ Tekuci:= R.Domace[i]^.Veza;\r
+ WHILE Tekuci# R.Domace[i] DO\r
+ WrLn;\r
+ WrStr(Tekuci^.Rec);\r
+ WrStr(' --------- ');\r
+ WrStr(Tekuci^.Prevod^.Rec);\r
+ Tekuci:= Tekuci^.Veza;\r
+ END;\r
+ END;\r
+ END Sadrzaj;\r
+\r
+END RecnikATP.\r