X-Git-Url: http://svarog.pmf.uns.ac.rs/gitweb/?p=spa2-teorijske-vezbe.git;a=blobdiff_plain;f=06.%20Maksimalan%20zbir%2FTopSpeed%2FMAXZBIR.MOD;fp=06.%20Maksimalan%20zbir%2FTopSpeed%2FMAXZBIR.MOD;h=85e8209fe94625e52030316656ad822bda16c173;hp=0000000000000000000000000000000000000000;hb=8a74ce20c68b61b8992a348e34c43671116e9549;hpb=a35f3e51789ace81cea01e548963568da918635f diff --git a/06. Maksimalan zbir/TopSpeed/MAXZBIR.MOD b/06. Maksimalan zbir/TopSpeed/MAXZBIR.MOD new file mode 100644 index 0000000..85e8209 --- /dev/null +++ b/06. Maksimalan zbir/TopSpeed/MAXZBIR.MOD @@ -0,0 +1,100 @@ +MODULE MaxZbir; + + FROM IO IMPORT + WrStr, WrLn, WrCard, WrInt, RdCard, RdInt; + + CONST + Max = 100; + + VAR + A, B: ARRAY [1 .. Max], [1 .. Max] OF INTEGER; + m, n: CARDINAL; + (* B[vr, ko] je vrednost optimalnog resenja od (1, 1) do (vr, ko) *) + + PROCEDURE Unos; + VAR + i, j: CARDINAL; + BEGIN + WrStr('Unesite n: '); + n:= RdCard(); + WrStr('Unesite m: '); + m:= RdCard(); + IF (n < Max) AND (m < Max) THEN + FOR i:= 1 TO m DO + FOR j:= 1 TO n DO + WrStr('A['); + WrCard(i, 1); + WrStr(', '); + WrCard(j, 1); + WrStr('] = '); + A[i, j] := RdInt(); + END; + END; + END; + END Unos; + + PROCEDURE Resi; + VAR + i, j: CARDINAL; + BEGIN + B[1, 1]:= A[1, 1]; + FOR j:= 2 TO n DO + B[1, j]:= A[1, j] + B[1, j-1]; + END; + FOR i:= 2 TO m DO + B[i, 1]:= A[i, 1] + B[i-1, 1]; + END; + FOR i:= 2 TO m DO + FOR j:= 2 TO n DO + IF B[i, j - 1] < B[i - 1, j] THEN + B[i, j]:= A[i, j] + B[i - 1, j]; + ELSE + B[i, j]:= A[i, j] + B[i, j - 1]; + END; + END; + END; + END Resi; + + PROCEDURE Ispis(Vr, Ko: CARDINAL); + VAR + i: CARDINAL; + BEGIN + IF (Vr > 1) AND (Ko > 1) THEN + IF B[Vr - 1, Ko] > B[Vr, Ko - 1] THEN + Ispis(Vr - 1, Ko); + ELSE + Ispis(Vr, Ko - 1); + END; + WrStr('('); + WrCard(Vr, 1); + WrStr(', '); + WrCard(Ko, 1); + WrStr(')'); + ELSIF Vr = 1 THEN + FOR i:= 1 TO Ko DO + WrStr('(1, '); + WrCard(i, 1); + WrStr(')'); + END; + ELSE + FOR i:= 1 TO Vr DO + WrStr('('); + WrCard(i, 1); + WrStr(', 1)'); + END; + END; + END Ispis; + +BEGIN + Unos; + IF (n < Max) AND (m < Max) THEN + Resi; + WrStr('Maksimalni zbir je '); + WrInt(B[m, n], 1); + WrStr(' a postize se ovako:'); + WrLn; + Ispis(m, n) + ELSE + WrStr('Suvise velika matrica.') + END +END MaxZbir.