From: Doni Pracner Date: Mon, 21 Oct 2013 12:44:36 +0000 (+0200) Subject: Cas01 preimenovan, dodate XDS verzije koda X-Git-Url: http://svarog.pmf.uns.ac.rs/gitweb/?p=spa2-teorijske-vezbe.git;a=commitdiff_plain;h=c3663b0b48c5d562615e606e6a1cc3f7fe4d43c8 Cas01 preimenovan, dodate XDS verzije koda --- diff --git a/01. Dvosmerni Recnik/Prezentacija.ppt b/01. Dvosmerni Recnik/Prezentacija.ppt new file mode 100644 index 0000000..6ff7ded Binary files /dev/null and b/01. Dvosmerni Recnik/Prezentacija.ppt differ diff --git a/01. Dvosmerni Recnik/TopSpeed/RECNIKAT.DEF b/01. Dvosmerni Recnik/TopSpeed/RECNIKAT.DEF new file mode 100644 index 0000000..92a237a --- /dev/null +++ b/01. Dvosmerni Recnik/TopSpeed/RECNIKAT.DEF @@ -0,0 +1,42 @@ +DEFINITION MODULE RecnikATP; + + CONST + Broj = 11; (* Neki prost broj *) + MaxDuzRec = 50; + MaxTabela = Broj - 1; + + TYPE + String = ARRAY [1 .. MaxDuzRec] OF CHAR; + Lista = POINTER TO Element; + Element = RECORD + Veza, Prevod: Lista; + Rec: String; + END; + Indeksi = [0 .. MaxTabela]; + Tabela = ARRAY Indeksi OF Lista; + Recnik = RECORD + BrojReci: CARDINAL; + Domace, Strane: Tabela; + END; + + PROCEDURE Inicijalizuj(VAR R: Recnik); + PROCEDURE Unisti(VAR R: Recnik); + + PROCEDURE Ubaci(DomacaRec, StranaRec: String; + VAR R: Recnik; + VAR Duplikat: BOOLEAN); + + PROCEDURE Izbaci(Rec: String; + VAR R: Recnik; + Domaca: BOOLEAN; + VAR Ok: BOOLEAN); + + PROCEDURE Prevedi(StranaNaDomacu: BOOLEAN; + Rec: String; + VAR Prevod: String; + VAR R: Recnik; + VAR Ok: BOOLEAN); + + PROCEDURE Sadrzaj(VAR R: Recnik); + +END RecnikATP. diff --git a/01. Dvosmerni Recnik/TopSpeed/RECNIKAT.MOD b/01. Dvosmerni Recnik/TopSpeed/RECNIKAT.MOD new file mode 100644 index 0000000..1977893 --- /dev/null +++ b/01. Dvosmerni Recnik/TopSpeed/RECNIKAT.MOD @@ -0,0 +1,186 @@ +IMPLEMENTATION MODULE RecnikATP; + + FROM IO IMPORT + RdKey, WrStr, WrLn, WrCard; + FROM SYSTEM IMPORT + TSIZE; + FROM Str IMPORT + Compare; + FROM Storage IMPORT + ALLOCATE, DEALLOCATE; + + PROCEDURE Hash(Rec: String): Indeksi; + VAR + i, Zbir, Temp: CARDINAL; + BEGIN + Zbir:= 0; + i:= 1; + WHILE (i <= MaxDuzRec) AND (Rec[i] # CHR(0)) DO + Temp:= (ORD(Rec[i]) * ORD(Rec[i])) MOD Broj; + Zbir:= (Zbir + Temp) MOD Broj; + INC(i); + END; + RETURN Zbir; + END Hash; + + PROCEDURE Inicijalizuj(VAR R: Recnik); + VAR + i: Indeksi; + BEGIN + WITH R DO + BrojReci:= 0; + FOR i := 0 TO MaxTabela DO + NEW(Domace[i]); + Domace[i]^.Veza := Domace[i]; + NEW(Strane[i]); + Strane[i]^.Veza := Strane[i] + END; + END; + END Inicijalizuj; + + PROCEDURE Unisti(VAR R: Recnik); + VAR + i: Indeksi; + Tekuci: Lista; + BEGIN + FOR i:= 0 TO MaxTabela DO + WHILE R.Domace[i] # R.Domace[i]^.Veza DO + Tekuci:= R.Domace[i]^.Veza; + R.Domace[i]^.Veza:= Tekuci^.Veza; + DISPOSE(Tekuci); + END; + DISPOSE(R.Domace[i]); + WHILE R.Strane[i] # R.Strane[i]^.Veza DO + Tekuci:= R.Strane[i]^.Veza; + R.Strane[i]^.Veza:= Tekuci^.Veza; + DISPOSE(Tekuci); + END; + DISPOSE(R.Strane[i]); + END; + END Unisti; + + PROCEDURE Nadji(VAR Rec: String; + VAR Tab: Tabela; + VAR Prethodni: Lista; + VAR Nadjen: BOOLEAN); + VAR + Pozicija: Indeksi; + BEGIN + Pozicija:= Hash(Rec); + Prethodni:= Tab[Pozicija]; + Prethodni^.Rec:= Rec; + IF Prethodni^.Veza = Prethodni THEN + Nadjen:= FALSE; + ELSE + WHILE Compare(Prethodni^.Veza^.Rec, Rec) # 0 DO + Prethodni:= Prethodni^.Veza; + END; + Nadjen:= Prethodni^.Veza # Tab[Pozicija] + END; + END Nadji; + + PROCEDURE Ubaci(DomacaRec, StranaRec: String; + VAR R: Recnik; + VAR Duplikat: BOOLEAN); + VAR + NadjenDom, NadjenStr: BOOLEAN; + PrethodniDom, PrethodniStr, PomDom, PomStr: Lista; + BEGIN + + Nadji(DomacaRec, R.Domace, PrethodniDom, NadjenDom); + Nadji(StranaRec, R.Strane, PrethodniStr, NadjenStr); + + IF NadjenDom OR NadjenStr THEN + Duplikat:= TRUE; + ELSE + + Duplikat := FALSE; + + NEW(PomDom); + PomDom^.Rec:= DomacaRec; + PomDom^.Veza:= PrethodniDom^.Veza; + PrethodniDom^.Veza:= PomDom; + + NEW(PomStr); + PomStr^.Rec:= StranaRec; + PomStr^.Veza:= PrethodniStr^.Veza; + PrethodniStr^.Veza:= PomStr; + + PomDom^.Prevod:= PomStr; + PomStr^.Prevod:= PomDom; + + INC(R.BrojReci); + + END; + END Ubaci; + + PROCEDURE Izbaci(Rec: String; + VAR R: Recnik; + Domaca: BOOLEAN; + VAR Ok: BOOLEAN); + VAR + Prethodni, Prethodni2, Temp, Temp2: Lista; + BEGIN + + IF Domaca THEN + Nadji(Rec, R.Domace, Prethodni, Ok); + ELSE + Nadji(Rec, R.Strane, Prethodni, Ok); + END; + + IF Ok THEN + + Temp:= Prethodni^.Veza; + Prethodni^.Veza:= Temp^.Veza; + + Temp2:= Temp^.Prevod; + Prethodni2:= Temp2^.Veza; + WHILE Prethodni2^.Veza # Temp2 DO + Prethodni2:= Prethodni2^.Veza; + END; + Prethodni2^.Veza:= Temp2^.Veza; + + DISPOSE(Temp); + DISPOSE(Temp2); + + DEC(R.BrojReci); + END; + END Izbaci; + + PROCEDURE Prevedi(StranuNaDomacu: BOOLEAN; + Rec: String; + VAR Prevod: String; + VAR R: Recnik; + VAR Ok: BOOLEAN); + VAR + Prethodni: Lista; + BEGIN + IF StranuNaDomacu THEN + Nadji(Rec, R.Strane, Prethodni, Ok); + ELSE + Nadji(Rec, R.Domace, Prethodni, Ok); + END; + IF Ok THEN + Prevod:= Prethodni^.Veza^.Prevod^.Rec; + END + END Prevedi; + + PROCEDURE Sadrzaj(VAR R: Recnik); + VAR + i: Indeksi; + Tekuci: Lista; + BEGIN + WrStr('Sadrzaj recnika:'); + FOR i:= 0 TO MaxTabela DO + Tekuci:= R.Domace[i]^.Veza; + WHILE Tekuci# R.Domace[i] DO + WrLn; + WrStr(Tekuci^.Rec); + WrStr(' --------- '); + WrStr(Tekuci^.Prevod^.Rec); + Tekuci:= Tekuci^.Veza; + END; + END; + END Sadrzaj; + +END RecnikATP. diff --git a/01. Dvosmerni Recnik/TopSpeed/RECNIKTE.MOD b/01. Dvosmerni Recnik/TopSpeed/RECNIKTE.MOD new file mode 100644 index 0000000..5358707 --- /dev/null +++ b/01. Dvosmerni Recnik/TopSpeed/RECNIKTE.MOD @@ -0,0 +1,116 @@ +MODULE RecnikTest; + + FROM RecnikATP IMPORT + String, Recnik, Inicijalizuj, Ubaci, Izbaci, Sadrzaj, Prevedi, Unisti; + FROM IO IMPORT + WrLn, WrStr, RdStr, WrCard, RdKey, WrChar; + FROM Window IMPORT + Clear; + + VAR + R: Recnik; + Rec, Prevod: String; + Izbor, Izb: CHAR; + Ok, Duplikat, Domaca, StrNaDom: BOOLEAN; + + PROCEDURE Meni(VAR Izbor: CHAR); + TYPE + Slova = SET OF CHAR; + VAR + i: CARDINAL; + BEGIN + Clear; + FOR i:= 1 TO 8 DO + WrLn; + END; + WrStr(' P --- prevod reci'); WrLn; + WrStr(' B --- broj reci u recniku'); WrLn; + WrStr(' U --- ubacivanje nove reci i njenog prevoda u recnik'); WrLn; + WrStr(' I --- izbacivanje reci i njenog prevoda iz recnika'); WrLn; + WrStr(' S --- sekvencijalni prikaz recnika'); WrLn; + WrStr(' Q --- kraj rada'); + REPEAT + Izbor:= CAP(RdKey()); + UNTIL Izbor IN Slova {'P', 'B', 'U', 'I', 'S', 'Q'}; + Clear; + END Meni; + + PROCEDURE Pauza; + VAR + Ch: CHAR; + BEGIN + Ch:= RdKey(); + END Pauza; + +BEGIN + Inicijalizuj(R); + REPEAT + Meni(Izbor); + CASE Izbor OF + 'P': REPEAT + WrStr('1) prevod strane reci'); WrLn; + WrStr('2) prevod domace reci'); WrLn; + WrLn; + WrStr("Unesite '1' ili '2' --- "); + Izb:= RdKey(); + WrChar(Izb); WrLn; + UNTIL (Izb = '1') OR (Izb = '2'); + StrNaDom:= Izb = '1'; + IF StrNaDom THEN + WrStr('Unesite stranu rec ---- '); + RdStr(Rec); + Prevedi(StrNaDom, Rec, Prevod, R, Ok); + IF Ok THEN + WrStr('Prevod ---------------- '); + WrStr(Prevod); + ELSE + WrStr('Zadata rec se ne nalazi u recniku.'); + END; + ELSE + WrStr('Unesite domacu rec ---- '); + RdStr(Rec); + Prevedi(StrNaDom, Rec, Prevod, R, Ok); + IF Ok THEN + WrStr('Prevod ---------------- '); + WrStr(Prevod); + ELSE + WrStr('Zadata rec se ne nalazi u recniku.'); + END; + END; + Pauza; | + 'B': WrStr('Recnik raspolaze fondom od '); + WrCard(R.BrojReci, 1); + WrStr(' reci.'); + Pauza; | + 'U': WrStr('Unesite novu domacu rec ----- '); + RdStr(Rec); + WrStr('Unesite njen prevod -------- '); + RdStr(Prevod); + Ubaci(Rec, Prevod, R, Duplikat); + IF Duplikat THEN + WrStr('U recniku se vec nalazi data rec.'); + ELSE + WrStr('Upisano.'); + END; + Pauza; | + 'I': WrStr('Unesite rec --- '); + RdStr(Rec); + REPEAT + WrStr('Da li je uneta rec domaca ili strana? (d/s) '); + Izb:= RdKey(); + WrLn; + UNTIL (CAP(Izb) = 'D') OR (CAP(Izb) = 'S'); + Domaca:= CAP(Izb) = 'D'; + Izbaci(Rec, R, Domaca, Ok); + IF Ok THEN + WrStr('Izbrisano.') + ELSE + WrStr('Rec se nije ni nalazila u recniku.') + END; + Pauza; | + 'S': Sadrzaj(R); + Pauza; + END; + UNTIL Izbor = 'Q'; + Unisti(R); +END RecnikTest. diff --git a/01. Dvosmerni Recnik/XDS/RECNIKATP.DEF b/01. Dvosmerni Recnik/XDS/RECNIKATP.DEF new file mode 100644 index 0000000..92a237a --- /dev/null +++ b/01. Dvosmerni Recnik/XDS/RECNIKATP.DEF @@ -0,0 +1,42 @@ +DEFINITION MODULE RecnikATP; + + CONST + Broj = 11; (* Neki prost broj *) + MaxDuzRec = 50; + MaxTabela = Broj - 1; + + TYPE + String = ARRAY [1 .. MaxDuzRec] OF CHAR; + Lista = POINTER TO Element; + Element = RECORD + Veza, Prevod: Lista; + Rec: String; + END; + Indeksi = [0 .. MaxTabela]; + Tabela = ARRAY Indeksi OF Lista; + Recnik = RECORD + BrojReci: CARDINAL; + Domace, Strane: Tabela; + END; + + PROCEDURE Inicijalizuj(VAR R: Recnik); + PROCEDURE Unisti(VAR R: Recnik); + + PROCEDURE Ubaci(DomacaRec, StranaRec: String; + VAR R: Recnik; + VAR Duplikat: BOOLEAN); + + PROCEDURE Izbaci(Rec: String; + VAR R: Recnik; + Domaca: BOOLEAN; + VAR Ok: BOOLEAN); + + PROCEDURE Prevedi(StranaNaDomacu: BOOLEAN; + Rec: String; + VAR Prevod: String; + VAR R: Recnik; + VAR Ok: BOOLEAN); + + PROCEDURE Sadrzaj(VAR R: Recnik); + +END RecnikATP. diff --git a/01. Dvosmerni Recnik/XDS/RECNIKATP.MOD b/01. Dvosmerni Recnik/XDS/RECNIKATP.MOD new file mode 100644 index 0000000..1977893 --- /dev/null +++ b/01. Dvosmerni Recnik/XDS/RECNIKATP.MOD @@ -0,0 +1,186 @@ +IMPLEMENTATION MODULE RecnikATP; + + FROM IO IMPORT + RdKey, WrStr, WrLn, WrCard; + FROM SYSTEM IMPORT + TSIZE; + FROM Str IMPORT + Compare; + FROM Storage IMPORT + ALLOCATE, DEALLOCATE; + + PROCEDURE Hash(Rec: String): Indeksi; + VAR + i, Zbir, Temp: CARDINAL; + BEGIN + Zbir:= 0; + i:= 1; + WHILE (i <= MaxDuzRec) AND (Rec[i] # CHR(0)) DO + Temp:= (ORD(Rec[i]) * ORD(Rec[i])) MOD Broj; + Zbir:= (Zbir + Temp) MOD Broj; + INC(i); + END; + RETURN Zbir; + END Hash; + + PROCEDURE Inicijalizuj(VAR R: Recnik); + VAR + i: Indeksi; + BEGIN + WITH R DO + BrojReci:= 0; + FOR i := 0 TO MaxTabela DO + NEW(Domace[i]); + Domace[i]^.Veza := Domace[i]; + NEW(Strane[i]); + Strane[i]^.Veza := Strane[i] + END; + END; + END Inicijalizuj; + + PROCEDURE Unisti(VAR R: Recnik); + VAR + i: Indeksi; + Tekuci: Lista; + BEGIN + FOR i:= 0 TO MaxTabela DO + WHILE R.Domace[i] # R.Domace[i]^.Veza DO + Tekuci:= R.Domace[i]^.Veza; + R.Domace[i]^.Veza:= Tekuci^.Veza; + DISPOSE(Tekuci); + END; + DISPOSE(R.Domace[i]); + WHILE R.Strane[i] # R.Strane[i]^.Veza DO + Tekuci:= R.Strane[i]^.Veza; + R.Strane[i]^.Veza:= Tekuci^.Veza; + DISPOSE(Tekuci); + END; + DISPOSE(R.Strane[i]); + END; + END Unisti; + + PROCEDURE Nadji(VAR Rec: String; + VAR Tab: Tabela; + VAR Prethodni: Lista; + VAR Nadjen: BOOLEAN); + VAR + Pozicija: Indeksi; + BEGIN + Pozicija:= Hash(Rec); + Prethodni:= Tab[Pozicija]; + Prethodni^.Rec:= Rec; + IF Prethodni^.Veza = Prethodni THEN + Nadjen:= FALSE; + ELSE + WHILE Compare(Prethodni^.Veza^.Rec, Rec) # 0 DO + Prethodni:= Prethodni^.Veza; + END; + Nadjen:= Prethodni^.Veza # Tab[Pozicija] + END; + END Nadji; + + PROCEDURE Ubaci(DomacaRec, StranaRec: String; + VAR R: Recnik; + VAR Duplikat: BOOLEAN); + VAR + NadjenDom, NadjenStr: BOOLEAN; + PrethodniDom, PrethodniStr, PomDom, PomStr: Lista; + BEGIN + + Nadji(DomacaRec, R.Domace, PrethodniDom, NadjenDom); + Nadji(StranaRec, R.Strane, PrethodniStr, NadjenStr); + + IF NadjenDom OR NadjenStr THEN + Duplikat:= TRUE; + ELSE + + Duplikat := FALSE; + + NEW(PomDom); + PomDom^.Rec:= DomacaRec; + PomDom^.Veza:= PrethodniDom^.Veza; + PrethodniDom^.Veza:= PomDom; + + NEW(PomStr); + PomStr^.Rec:= StranaRec; + PomStr^.Veza:= PrethodniStr^.Veza; + PrethodniStr^.Veza:= PomStr; + + PomDom^.Prevod:= PomStr; + PomStr^.Prevod:= PomDom; + + INC(R.BrojReci); + + END; + END Ubaci; + + PROCEDURE Izbaci(Rec: String; + VAR R: Recnik; + Domaca: BOOLEAN; + VAR Ok: BOOLEAN); + VAR + Prethodni, Prethodni2, Temp, Temp2: Lista; + BEGIN + + IF Domaca THEN + Nadji(Rec, R.Domace, Prethodni, Ok); + ELSE + Nadji(Rec, R.Strane, Prethodni, Ok); + END; + + IF Ok THEN + + Temp:= Prethodni^.Veza; + Prethodni^.Veza:= Temp^.Veza; + + Temp2:= Temp^.Prevod; + Prethodni2:= Temp2^.Veza; + WHILE Prethodni2^.Veza # Temp2 DO + Prethodni2:= Prethodni2^.Veza; + END; + Prethodni2^.Veza:= Temp2^.Veza; + + DISPOSE(Temp); + DISPOSE(Temp2); + + DEC(R.BrojReci); + END; + END Izbaci; + + PROCEDURE Prevedi(StranuNaDomacu: BOOLEAN; + Rec: String; + VAR Prevod: String; + VAR R: Recnik; + VAR Ok: BOOLEAN); + VAR + Prethodni: Lista; + BEGIN + IF StranuNaDomacu THEN + Nadji(Rec, R.Strane, Prethodni, Ok); + ELSE + Nadji(Rec, R.Domace, Prethodni, Ok); + END; + IF Ok THEN + Prevod:= Prethodni^.Veza^.Prevod^.Rec; + END + END Prevedi; + + PROCEDURE Sadrzaj(VAR R: Recnik); + VAR + i: Indeksi; + Tekuci: Lista; + BEGIN + WrStr('Sadrzaj recnika:'); + FOR i:= 0 TO MaxTabela DO + Tekuci:= R.Domace[i]^.Veza; + WHILE Tekuci# R.Domace[i] DO + WrLn; + WrStr(Tekuci^.Rec); + WrStr(' --------- '); + WrStr(Tekuci^.Prevod^.Rec); + Tekuci:= Tekuci^.Veza; + END; + END; + END Sadrzaj; + +END RecnikATP. diff --git a/01. Dvosmerni Recnik/XDS/RECNIKTEST.MOD b/01. Dvosmerni Recnik/XDS/RECNIKTEST.MOD new file mode 100644 index 0000000..e1b97a2 --- /dev/null +++ b/01. Dvosmerni Recnik/XDS/RECNIKTEST.MOD @@ -0,0 +1,141 @@ +MODULE RecnikTest; + + FROM RecnikATP IMPORT + String, Recnik, Inicijalizuj, Ubaci, Izbaci, Sadrzaj, Prevedi, Unisti; + FROM IO IMPORT + WrLn, WrStr, RdStr, WrCard, RdChar, WrChar, RdInt; + + + VAR + R: Recnik; + Rec, Prevod: String; + Izbor: CHAR; + Izb : INTEGER; + Ok, Duplikat, Domaca, StrNaDom: BOOLEAN; + +PROCEDURE Clr(r : CARDINAL); +VAR + i : CARDINAL; +BEGIN + FOR i:=1 TO r DO + WrLn; + END; +END Clr; + +PROCEDURE Clear(); +BEGIN + Clr(40); +END Clear; + + PROCEDURE Meni(VAR Izbor: CHAR); + TYPE + Slova = SET OF CHAR; + VAR + i: CARDINAL; + BEGIN + Clear; + FOR i:= 1 TO 8 DO + WrLn; + END; + WrStr(' P --- prevod reci'); WrLn; + WrStr(' B --- broj reci u recniku'); WrLn; + WrStr(' U --- ubacivanje nove reci i njenog prevoda u recnik'); WrLn; + WrStr(' I --- izbacivanje reci i njenog prevoda iz recnika'); WrLn; + WrStr(' S --- sekvencijalni prikaz recnika'); WrLn; + WrStr(' Q --- kraj rada'); + Clr(7); + REPEAT + Izbor:= CAP(RdChar()); + UNTIL Izbor IN Slova {'P', 'B', 'U', 'I', 'S', 'Q'}; + Clear; + END Meni; + + PROCEDURE Pauza; + VAR + c: CHAR; + BEGIN + WrLn; + WrStr('Enter za nastavak');WrLn; + (* visak RdChar-ova zbog Entera i sl *) + c := RdChar(); + c := RdChar(); + c := RdChar(); + END Pauza; + +BEGIN + Inicijalizuj(R); + REPEAT + Meni(Izbor); + CASE Izbor OF + 'P': REPEAT + WrStr('1) prevod strane reci'); WrLn; + WrStr('2) prevod domace reci'); WrLn; + WrLn; + WrStr("Unesite '1' ili '2' --- "); + Izb:= RdInt(); + WrLn; + UNTIL (Izb = 1) OR (Izb = 2); + StrNaDom:= Izb = 1; + IF StrNaDom THEN + WrStr('Unesite stranu rec ---- '); + RdStr(Rec); + Prevedi(StrNaDom, Rec, Prevod, R, Ok); + IF Ok THEN + WrStr('Prevod ---------------- '); + WrStr(Prevod); + ELSE + WrStr('Zadata rec se ne nalazi u recniku.'); + END; + ELSE + WrStr('Unesite domacu rec ---- '); + RdStr(Rec); + Prevedi(StrNaDom, Rec, Prevod, R, Ok); + IF Ok THEN + WrStr('Prevod ---------------- '); + WrStr(Prevod); + ELSE + WrStr('Zadata rec se ne nalazi u recniku.'); + END; + END; + Pauza; | + 'B': WrStr('Recnik raspolaze fondom od '); + WrCard(R.BrojReci, 1); + WrStr(' reci.'); + Pauza; | + 'U': WrStr('Unesite novu domacu rec ----- '); + RdStr(Rec); + WrStr('Unesite njen prevod -------- '); + RdStr(Prevod); + Ubaci(Rec, Prevod, R, Duplikat); + IF Duplikat THEN + WrStr('U recniku se vec nalazi data rec.'); + ELSE + WrStr('Upisano.'); + END; + Pauza; | + 'I': WrStr('Unesite rec --- '); + RdStr(Rec); + REPEAT + WrStr('uneta rec je'); WrLn; + WrStr('1) strana'); WrLn; + WrStr('2) domaca'); WrLn; + WrLn; + WrStr("Unesite '1' ili '2' --- "); + Izb:= RdInt(); + WrLn; + UNTIL (Izb = 1) OR (Izb = 2); + Domaca:= Izb = 1; + Izbaci(Rec, R, Domaca, Ok); + IF Ok THEN + WrStr('Izbrisano.') + ELSE + WrStr('Rec se nije ni nalazila u recniku.') + END; + Pauza; | + 'S': Sadrzaj(R); + Pauza| + ELSE ; + END; + UNTIL Izbor = 'Q'; + Unisti(R); +END RecnikTest. diff --git a/Cas01/Prezentacija.ppt b/Cas01/Prezentacija.ppt deleted file mode 100644 index 6ff7ded..0000000 Binary files a/Cas01/Prezentacija.ppt and /dev/null differ diff --git a/Cas01/RECNIKAT.DEF b/Cas01/RECNIKAT.DEF deleted file mode 100644 index 92a237a..0000000 --- a/Cas01/RECNIKAT.DEF +++ /dev/null @@ -1,42 +0,0 @@ -DEFINITION MODULE RecnikATP; - - CONST - Broj = 11; (* Neki prost broj *) - MaxDuzRec = 50; - MaxTabela = Broj - 1; - - TYPE - String = ARRAY [1 .. MaxDuzRec] OF CHAR; - Lista = POINTER TO Element; - Element = RECORD - Veza, Prevod: Lista; - Rec: String; - END; - Indeksi = [0 .. MaxTabela]; - Tabela = ARRAY Indeksi OF Lista; - Recnik = RECORD - BrojReci: CARDINAL; - Domace, Strane: Tabela; - END; - - PROCEDURE Inicijalizuj(VAR R: Recnik); - PROCEDURE Unisti(VAR R: Recnik); - - PROCEDURE Ubaci(DomacaRec, StranaRec: String; - VAR R: Recnik; - VAR Duplikat: BOOLEAN); - - PROCEDURE Izbaci(Rec: String; - VAR R: Recnik; - Domaca: BOOLEAN; - VAR Ok: BOOLEAN); - - PROCEDURE Prevedi(StranaNaDomacu: BOOLEAN; - Rec: String; - VAR Prevod: String; - VAR R: Recnik; - VAR Ok: BOOLEAN); - - PROCEDURE Sadrzaj(VAR R: Recnik); - -END RecnikATP. diff --git a/Cas01/RECNIKAT.MOD b/Cas01/RECNIKAT.MOD deleted file mode 100644 index 1977893..0000000 --- a/Cas01/RECNIKAT.MOD +++ /dev/null @@ -1,186 +0,0 @@ -IMPLEMENTATION MODULE RecnikATP; - - FROM IO IMPORT - RdKey, WrStr, WrLn, WrCard; - FROM SYSTEM IMPORT - TSIZE; - FROM Str IMPORT - Compare; - FROM Storage IMPORT - ALLOCATE, DEALLOCATE; - - PROCEDURE Hash(Rec: String): Indeksi; - VAR - i, Zbir, Temp: CARDINAL; - BEGIN - Zbir:= 0; - i:= 1; - WHILE (i <= MaxDuzRec) AND (Rec[i] # CHR(0)) DO - Temp:= (ORD(Rec[i]) * ORD(Rec[i])) MOD Broj; - Zbir:= (Zbir + Temp) MOD Broj; - INC(i); - END; - RETURN Zbir; - END Hash; - - PROCEDURE Inicijalizuj(VAR R: Recnik); - VAR - i: Indeksi; - BEGIN - WITH R DO - BrojReci:= 0; - FOR i := 0 TO MaxTabela DO - NEW(Domace[i]); - Domace[i]^.Veza := Domace[i]; - NEW(Strane[i]); - Strane[i]^.Veza := Strane[i] - END; - END; - END Inicijalizuj; - - PROCEDURE Unisti(VAR R: Recnik); - VAR - i: Indeksi; - Tekuci: Lista; - BEGIN - FOR i:= 0 TO MaxTabela DO - WHILE R.Domace[i] # R.Domace[i]^.Veza DO - Tekuci:= R.Domace[i]^.Veza; - R.Domace[i]^.Veza:= Tekuci^.Veza; - DISPOSE(Tekuci); - END; - DISPOSE(R.Domace[i]); - WHILE R.Strane[i] # R.Strane[i]^.Veza DO - Tekuci:= R.Strane[i]^.Veza; - R.Strane[i]^.Veza:= Tekuci^.Veza; - DISPOSE(Tekuci); - END; - DISPOSE(R.Strane[i]); - END; - END Unisti; - - PROCEDURE Nadji(VAR Rec: String; - VAR Tab: Tabela; - VAR Prethodni: Lista; - VAR Nadjen: BOOLEAN); - VAR - Pozicija: Indeksi; - BEGIN - Pozicija:= Hash(Rec); - Prethodni:= Tab[Pozicija]; - Prethodni^.Rec:= Rec; - IF Prethodni^.Veza = Prethodni THEN - Nadjen:= FALSE; - ELSE - WHILE Compare(Prethodni^.Veza^.Rec, Rec) # 0 DO - Prethodni:= Prethodni^.Veza; - END; - Nadjen:= Prethodni^.Veza # Tab[Pozicija] - END; - END Nadji; - - PROCEDURE Ubaci(DomacaRec, StranaRec: String; - VAR R: Recnik; - VAR Duplikat: BOOLEAN); - VAR - NadjenDom, NadjenStr: BOOLEAN; - PrethodniDom, PrethodniStr, PomDom, PomStr: Lista; - BEGIN - - Nadji(DomacaRec, R.Domace, PrethodniDom, NadjenDom); - Nadji(StranaRec, R.Strane, PrethodniStr, NadjenStr); - - IF NadjenDom OR NadjenStr THEN - Duplikat:= TRUE; - ELSE - - Duplikat := FALSE; - - NEW(PomDom); - PomDom^.Rec:= DomacaRec; - PomDom^.Veza:= PrethodniDom^.Veza; - PrethodniDom^.Veza:= PomDom; - - NEW(PomStr); - PomStr^.Rec:= StranaRec; - PomStr^.Veza:= PrethodniStr^.Veza; - PrethodniStr^.Veza:= PomStr; - - PomDom^.Prevod:= PomStr; - PomStr^.Prevod:= PomDom; - - INC(R.BrojReci); - - END; - END Ubaci; - - PROCEDURE Izbaci(Rec: String; - VAR R: Recnik; - Domaca: BOOLEAN; - VAR Ok: BOOLEAN); - VAR - Prethodni, Prethodni2, Temp, Temp2: Lista; - BEGIN - - IF Domaca THEN - Nadji(Rec, R.Domace, Prethodni, Ok); - ELSE - Nadji(Rec, R.Strane, Prethodni, Ok); - END; - - IF Ok THEN - - Temp:= Prethodni^.Veza; - Prethodni^.Veza:= Temp^.Veza; - - Temp2:= Temp^.Prevod; - Prethodni2:= Temp2^.Veza; - WHILE Prethodni2^.Veza # Temp2 DO - Prethodni2:= Prethodni2^.Veza; - END; - Prethodni2^.Veza:= Temp2^.Veza; - - DISPOSE(Temp); - DISPOSE(Temp2); - - DEC(R.BrojReci); - END; - END Izbaci; - - PROCEDURE Prevedi(StranuNaDomacu: BOOLEAN; - Rec: String; - VAR Prevod: String; - VAR R: Recnik; - VAR Ok: BOOLEAN); - VAR - Prethodni: Lista; - BEGIN - IF StranuNaDomacu THEN - Nadji(Rec, R.Strane, Prethodni, Ok); - ELSE - Nadji(Rec, R.Domace, Prethodni, Ok); - END; - IF Ok THEN - Prevod:= Prethodni^.Veza^.Prevod^.Rec; - END - END Prevedi; - - PROCEDURE Sadrzaj(VAR R: Recnik); - VAR - i: Indeksi; - Tekuci: Lista; - BEGIN - WrStr('Sadrzaj recnika:'); - FOR i:= 0 TO MaxTabela DO - Tekuci:= R.Domace[i]^.Veza; - WHILE Tekuci# R.Domace[i] DO - WrLn; - WrStr(Tekuci^.Rec); - WrStr(' --------- '); - WrStr(Tekuci^.Prevod^.Rec); - Tekuci:= Tekuci^.Veza; - END; - END; - END Sadrzaj; - -END RecnikATP. diff --git a/Cas01/RECNIKTE.MOD b/Cas01/RECNIKTE.MOD deleted file mode 100644 index 5358707..0000000 --- a/Cas01/RECNIKTE.MOD +++ /dev/null @@ -1,116 +0,0 @@ -MODULE RecnikTest; - - FROM RecnikATP IMPORT - String, Recnik, Inicijalizuj, Ubaci, Izbaci, Sadrzaj, Prevedi, Unisti; - FROM IO IMPORT - WrLn, WrStr, RdStr, WrCard, RdKey, WrChar; - FROM Window IMPORT - Clear; - - VAR - R: Recnik; - Rec, Prevod: String; - Izbor, Izb: CHAR; - Ok, Duplikat, Domaca, StrNaDom: BOOLEAN; - - PROCEDURE Meni(VAR Izbor: CHAR); - TYPE - Slova = SET OF CHAR; - VAR - i: CARDINAL; - BEGIN - Clear; - FOR i:= 1 TO 8 DO - WrLn; - END; - WrStr(' P --- prevod reci'); WrLn; - WrStr(' B --- broj reci u recniku'); WrLn; - WrStr(' U --- ubacivanje nove reci i njenog prevoda u recnik'); WrLn; - WrStr(' I --- izbacivanje reci i njenog prevoda iz recnika'); WrLn; - WrStr(' S --- sekvencijalni prikaz recnika'); WrLn; - WrStr(' Q --- kraj rada'); - REPEAT - Izbor:= CAP(RdKey()); - UNTIL Izbor IN Slova {'P', 'B', 'U', 'I', 'S', 'Q'}; - Clear; - END Meni; - - PROCEDURE Pauza; - VAR - Ch: CHAR; - BEGIN - Ch:= RdKey(); - END Pauza; - -BEGIN - Inicijalizuj(R); - REPEAT - Meni(Izbor); - CASE Izbor OF - 'P': REPEAT - WrStr('1) prevod strane reci'); WrLn; - WrStr('2) prevod domace reci'); WrLn; - WrLn; - WrStr("Unesite '1' ili '2' --- "); - Izb:= RdKey(); - WrChar(Izb); WrLn; - UNTIL (Izb = '1') OR (Izb = '2'); - StrNaDom:= Izb = '1'; - IF StrNaDom THEN - WrStr('Unesite stranu rec ---- '); - RdStr(Rec); - Prevedi(StrNaDom, Rec, Prevod, R, Ok); - IF Ok THEN - WrStr('Prevod ---------------- '); - WrStr(Prevod); - ELSE - WrStr('Zadata rec se ne nalazi u recniku.'); - END; - ELSE - WrStr('Unesite domacu rec ---- '); - RdStr(Rec); - Prevedi(StrNaDom, Rec, Prevod, R, Ok); - IF Ok THEN - WrStr('Prevod ---------------- '); - WrStr(Prevod); - ELSE - WrStr('Zadata rec se ne nalazi u recniku.'); - END; - END; - Pauza; | - 'B': WrStr('Recnik raspolaze fondom od '); - WrCard(R.BrojReci, 1); - WrStr(' reci.'); - Pauza; | - 'U': WrStr('Unesite novu domacu rec ----- '); - RdStr(Rec); - WrStr('Unesite njen prevod -------- '); - RdStr(Prevod); - Ubaci(Rec, Prevod, R, Duplikat); - IF Duplikat THEN - WrStr('U recniku se vec nalazi data rec.'); - ELSE - WrStr('Upisano.'); - END; - Pauza; | - 'I': WrStr('Unesite rec --- '); - RdStr(Rec); - REPEAT - WrStr('Da li je uneta rec domaca ili strana? (d/s) '); - Izb:= RdKey(); - WrLn; - UNTIL (CAP(Izb) = 'D') OR (CAP(Izb) = 'S'); - Domaca:= CAP(Izb) = 'D'; - Izbaci(Rec, R, Domaca, Ok); - IF Ok THEN - WrStr('Izbrisano.') - ELSE - WrStr('Rec se nije ni nalazila u recniku.') - END; - Pauza; | - 'S': Sadrzaj(R); - Pauza; - END; - UNTIL Izbor = 'Q'; - Unisti(R); -END RecnikTest.