X-Git-Url: http://svarog.pmf.uns.ac.rs/gitweb/?p=spa2-teorijske-vezbe.git;a=blobdiff_plain;f=Cas09%2FPut.MOD;fp=Cas09%2FPut.MOD;h=0000000000000000000000000000000000000000;hp=2b93a8034b81c5c5c61cd6276578d5ba66b911b4;hb=8a74ce20c68b61b8992a348e34c43671116e9549;hpb=a35f3e51789ace81cea01e548963568da918635f diff --git a/Cas09/Put.MOD b/Cas09/Put.MOD deleted file mode 100644 index 2b93a80..0000000 --- a/Cas09/Put.MOD +++ /dev/null @@ -1,143 +0,0 @@ -MODULE Put; - - FROM IO IMPORT - WrLn, WrStr, RdCard, WrCard, OK; - - FROM Storage IMPORT - ALLOCATE; - - CONST - MaxBrGrad = 50; - - TYPE - Lista = POINTER TO Grad; - Grad = RECORD - Info: CARDINAL; - Veza: Lista; - END; - Mreza = ARRAY [1 .. MaxBrGrad] OF Lista; - Posecen = ARRAY [1 .. MaxBrGrad] OF BOOLEAN; - - VAR - m: Mreza; - BrojGr: CARDINAL; - GPoc, GKra: CARDINAL; - - PROCEDURE Ubaci(VAR L: Lista; G: CARDINAL); - VAR - Tek, Novi: Lista; - BEGIN - IF (L = NIL) OR (G < L^.Info) THEN - NEW(Novi); - Novi^.Info:= G; - Novi^.Veza:= L; - L:= Novi; - ELSE - Tek:= L; - WHILE (Tek^.Veza # NIL) AND (Tek^.Veza^.Info < G) DO - Tek:= Tek^.Veza; - END; - IF (Tek^.Veza = NIL) OR (Tek^.Veza^.Info > G) THEN - NEW(Novi); - Novi^.Info:= G; - Novi^.Veza:= Tek^.Veza; - Tek^.Veza:= Novi; - END; - END; - END Ubaci; - - PROCEDURE Povezi(G1, G2: CARDINAL); - BEGIN - Ubaci(m[G1], G2); - Ubaci(m[G2], G1); - END Povezi; - - PROCEDURE Unos(VAR G1, G2: CARDINAL); - VAR - G: CARDINAL; - BEGIN - REPEAT - WrStr('Unesite broj gradova (od 2 do '); - WrCard(MaxBrGrad, 1); - WrStr(') ---- '); - BrojGr:= RdCard(); - WrLn; - UNTIL OK AND (2 <= BrojGr) AND (BrojGr <= MaxBrGrad); - FOR G:= 1 TO BrojGr DO - m[G]:= NIL; - END; - REPEAT - WrStr('Unesite dva grada koji su povezani linijom.'); - REPEAT - WrLn; - WrStr('Unesite red. br. prvog grada (ili 0 za kraj unosa linija) -- '); - G1:= RdCard() - UNTIL OK AND (G1 <= BrojGr); - IF G1 > 0 THEN - REPEAT - WrStr('Unesite red. br. drugog grada ------------------------------ '); - G2:= RdCard(); - UNTIL OK AND (1 <= G2) AND (G2 <= BrojGr) AND (G1 # G2); - Povezi(G1, G2); - END; - WrLn; - UNTIL G1 = 0; - REPEAT - WrLn; - WrLn; - WrStr('Unesite red. br. pocetnog grada -- '); - G1:= RdCard(); - UNTIL OK AND (1 <= G1) AND (G1 <= BrojGr); - REPEAT - WrLn; - WrStr('Unesite red. br ciljnog grada -- '); - G2:= RdCard(); - UNTIL OK AND (1 <= G2) AND (G2 <= BrojGr) AND (G1 # G2); - END Unos; - - PROCEDURE NadjiPut(Od, Do, brojGr : CARDINAL); - VAR - Pos: Posecen; - Reseno: BOOLEAN; - i: CARDINAL; - Resenje: ARRAY [1 .. MaxBrGrad] OF CARDINAL; - - PROCEDURE Pokusaj(Od, Br: CARDINAL; VAR Reseno: BOOLEAN); - VAR - Pok: Lista; - BEGIN - Pos[Od]:= TRUE; - Resenje[Br]:= Od; - IF Od = Do THEN - Reseno:= TRUE; - WrLn; - WrStr('Put koji treba precji je sledeci:'); - WrLn; - FOR i:= 1 TO Br DO - WrCard(Resenje[i], 4); - END; - ELSE - Pok:= m[Od]; - WHILE (Pok # NIL) AND NOT Reseno DO - WHILE (Pok # NIL) AND Pos[Pok^.Info] DO - Pok:= Pok^.Veza; - END; - IF Pok # NIL THEN - Pokusaj(Pok^.Info, Br + 1, Reseno); - END; - END; - END; - END Pokusaj; - - BEGIN - Reseno:= FALSE; - FOR i:= 1 TO BrojGr DO - Pos[i]:= FALSE; - END; - Pokusaj(Od, 1, Reseno); - END NadjiPut; - -BEGIN - Unos(GPoc, GKra); - NadjiPut(GPoc, GKra, BrojGr); -END Put.