1 CLS 10 REM *********** 20 REM 30 REM 40 REM 50 REM 60 REM 100 PRINT "------------------------------------------------------" 101 PRINT " LABORATORIJ M-R-A" 102 PRINT " Zavod za procesno inzenjerstvo" 103 PRINT " Prehrambeno biotehnoloski fakultet Zagreb" 104 PRINT "------------------------------------------------------" 105 PRINT : PRINT 110 REM 120 PRINT "SIMPLEKS POSTUPAK" 130 PRINT "*******************" 131 PRINT 132 PRINT "M JE BROJ OGRANI^ENJA" 133 PRINT "N JE BROJ VARIJABLI" 134 PRINT : PRINT : 135 PRINT "OGRANI^ENJA SE MORAJU OBAVEZNO POREDATI PO REDU <=, =,>=" 140 INPUT "M="; M 141 INPUT "N="; N 142 INPUT "BR.OGRANI^ENJA TIPA="; M1 143 INPUT "BR.OGRANI^ENJA TIPA>="; M2 150 IF M1 > M OR M2 > M THEN PRINT "GRESKA U UNOSU PODATAKA": GOTO 120 180 INPUT "@ELITE MINIMUM ILI MAKSIMUM (OTKUCAJTE MIN ILI MAX) "; G$ 190 M7 = 10000000 200 DIM C(N + M2): DIM B(M): DIM A(M, N + M2) 260 DIM U(N + M2): DIM V(M + N + M2) 280 DIM Q(M): DIM P(N) 290 DIM K(M, N + M2): DIM D(M): DIM O$(M): DIM R(N + M + M2) 300 INPUT "SLOBODAN ^LAN U FUNKCIJI CILJA "; C0 P0 = C0 310 IF G$ = "MAX" THEN LET C0 = -C0 320 FOR K = 1 TO N 321 PRINT "C("; K; ")="; 322 INPUT C(K) 323 P(K) = C(K) 324 IF G$ = "MAX" THEN C(K) = -C(K) 330 NEXT K: CLS 340 FOR K = 1 TO N + M2 341 U(K) = K 342 NEXT K 350 FOR L = 1 TO M 360 PRINT "OBLIK "; L; "-OGRANI^ENJA" 361 INPUT "<=, =, >= "; R$ 362 O$(L) = R$ 400 FOR K = 1 TO N 450 PRINT "A("; L; ","; K; ">=" 470 INPUT A(L, K) 475 K(L, K) = A(L, K) 480 IF R$ = ">=" OR R$ = "=" THEN C(K) = C(K) - A(L, K) * M7 500 NEXT K 520 PRINT "B("; L; ")=" 550 INPUT B(L) 560 D(L) = B(L) 570 IF R$ = ">=" OR R$ = "=" THEN C0 = C0 - M7 * B(L) 580 V(L) = L + N + M2 600 NEXT L 610 INPUT "DA LI SE TRAZI ISPIS U SVIM ITERACIJAMA (DA/NE)?"; W$ 630 M3 = M - (M2 + M1) 631 CLS 660 IF M3 = M THEN GOTO 800 690 FOR L = M3 + 1 TO M 700 FOR K = N + 1 TO N + M2 701 A(L, K) = 0 702 NEXT K 703 NEXT L 750 FOR L = 1 TO M2 751 A(M - M2 + L, N + L) = -1 752 NEXT L 760 FOR K = N + 1 TO N + M2 761 C(K) = M7 762 NEXT K 800 N = N + M2 801 LS = 0 810 REM 820 REM POCETAK ITERACIJE 830 REM ------------------ 840 IP = 1 850 IF IP > 1 THEN PRINT "OTKLANJAJU SE CIKLUSI": GOTO 880 870 IP = 1 871 IQ = 1 880 LS = LS + 1 881 IF W$ = "NE" THEN GOTO 900 882 INPUT "DA LI ZELITE ISPIS SLIJEDECE ITERACIJE (NE/*)"; Z$: CLS 885 IF Z$ = "NE" THEN STOP 890 PRINT "ITERACIJA BR. "; LS: PRINT "---------------------" 900 FOR K = 1 TO M 910 IF W$ = "NE" THEN GOTO 960 920 PRINT "X("; V(K); ")="; B(K) 930 REM 940 REM NEMA RJESENJA 950 REM --------------- 960 IF B(K) >= 0 THEN GOTO 1000 970 IF IP = 1 THEN PRINT "BAZNO RJESENJE NIJE DOPUSTIVO": STOP 980 IQ = IQ + 1 990 I = Q(IQ) 991 GOTO 2050 1000 NEXT K 1050 IF W$ = "NE" THEN GOTO 1400 1070 IF G$ = "MAX" THEN F1 = -C0 1080 F1 = C0 1100 PRINT "TEKUCE RJESENJE "; F1 1200 REM 1210 REM KOJA VARIJABLA 1220 REM IDE U BAZU (J)? 1230 REM --------------- 1240 REM 1400 D = -1000000 1500 FOR K = 1 TO N 1530 IF C(K) >= 0 THEN GOTO 1750 1600 IF ABS(C(K)) <= D THEN GOTO 1750 1650 L = L + 1 1651 D = ABS(C(K)) 1652 J = K 1750 NEXT K 1800 IF L = 0 THEN PRINT "RJESENJE JE TRIVIJALNO": STOP 1810 REM 1820 REM KOJA VARIJABLA NAPUSTA BAZU ? 1830 REM ------------------------------- 1840 REM 1850 D = -1000000 1851 LL = 0 1900 FOR K = 1 TO M 1910 IF A(K, J) <= 0 THEN LL = LL + 1: GOTO 1990 1930 BB = B(K) 1931 IF BB = 0 THEN BB = .000001 1950 IF A(K, J) / BB = D THEN IP = IP + 1: Q(IP) = K: GOTO 1990 1960 IF D > A(K, J) / BB THEN GOTO 1990 1970 D = A(K, J) / BB 1971 I = K 1990 NEXT K 2000 IF LL = M THEN PRINT "RJESENJE JE BESKONACNO": STOP 2010 IF W$ = "NE" THEN GOTO 2050 2020 PRINT "X("; U(J); ") IDE U BAZU" 2021 PRINT "X("; V(I); ") POSTAJE SLOBODNA VARIJABLA" 2022 PRINT "GLAVNI CLAN JE A("; I; ","; J; ")="; A(I, J) 2030 REM 2040 REM PROMJENA MJESTA VARIJABLI 2050 REM ------------------------- 2060 REM 2070 JJ = V(I): V(I) = U(J): U(J) = JJ 2080 LL = 0 2100 REM 2110 REM NOVA SIMPLEKS TABELA 2120 REM -------------------------- 2130 REM 2150 IF K = J THEN X = -C(K) / A(I, J): GOTO 2305 2160 FOR K = 1 TO N 2180 IF K = J THEN X = -C(K) / A(I, J): GOTO 2300 2200 C(K) = (C(K) * A(I, J) - A(I, K) * C(J)) / A(I, J) 2250 IF C(K) < 0 THEN LL = LL + 1 2300 NEXT K 2305 REM NASTAVAK 2350 FOR L = 1 TO M 2400 IF L = I THEN Y = B(I) / A(I, J): GOTO 2500 2450 B(L) = (A(I, J) * B(L) - A(L, J) * B(I)) / A(I, J) 2500 NEXT L 2550 C0 = (C0 * A(I, J) - B(I) * C(J)) / A(I, J) 2650 FOR L = 1 TO M 2651 FOR K = 1 TO N 2700 IF I = L OR K = J THEN GOTO 2800 2750 A(L, K) = (A(L, K) * A(I, J) - A(L, J) * A(I, K)) / A(I, J) 2800 NEXT K 2801 NEXT L 2810 FOR K = 1 TO N 2820 IF K = J THEN GOTO 2840 2830 A(I, K) = A(I, K) / A(I, J) 2840 NEXT K 2850 FOR L = 1 TO M 2860 IF L = I THEN GOTO 2880 2870 A(L, J) = -A(L, J) / A(I, J) 2880 NEXT L 2900 A(I, J) = 1 / A(I, J) 3000 C(J) = X 3020 B(I) = Y 3050 IF LL = 0 THEN GOTO 4000 3100 GOTO 850 3110 REM 3120 REM KRAJ ITERATIVNOG CIKLUSA 3130 REM--------------------------- 3140 REM 3200 REM DA LI IMA RJESENJA? 3210 REM--------------------------- 3220 REM 4000 FOR L = 1 TO M 4050 IF B(L) > 0 AND V(L) > N + M - M2 THEN PRINT "NEMA RJESENJA": END 4100 NEXT L 4200 REM 4210 REM STAMPANJE RJESENJA 4220 REM---------------------------- 4230 REM 5000 IF G$ = "MIN" THEN C0 = -C0 5020 S = 0 5030 FOR K = 1 TO N - M2 5050 FOR L = 1 TO M 5060 IF V(L) = K THEN S = S + P(K) * B(L): GOTO 5080 5070 NEXT L 5080 NEXT K 5085 PRINT : PRINT : PRINT : INPUT "ISPIS RJESENJA (*.*)"; Z$: CLS 5086 PRINT "===================================" 5087 PRINT : PRINT 5090 PRINT "OPTIMALNA VRIJEDNOST ="; P0 + S 5091 PRINT "-----------------------------------" 5100 PRINT "RJESENJE" 5150 FOR L = 1 TO M 5200 PRINT "X("; V(L); ")="; B(L) 5210 R(V(L)) = B(L) 5250 NEXT L 5300 FOR K = 1 TO N 5350 PRINT "X("; U(K); ")=0" 5400 NEXT K 5500 REM --------------------- 5505 REM --------data--------- 5506 NPOD = N 8000 PRINT : PRINT : INPUT " TEST REZULTATA (NE/*) "; Z$: IF Z$ = "NE" THEN END 8002 CLS : PRINT " PROVJERA REZULTATA " 8004 PRINT " VRIJEDNOSTI ORIGINALNIH VARIJABLI " 8005 PRINT "-----------------------------------------": PRINT : PRINT 8006 FOR I = 1 TO NPOD 8007 PRINT "X"; I; "="; R(I) 8008 NEXT I 8009 PRINT : PRINT : INPUT " PROVJERA OGRANICENJA (NE/*)"; Z$: IF Z$ = "NE" THEN END 8010 CLS : PRINT " LIJEVA I DESNA STRANA OGRANICENJA" 8012 PRINT "--------------------------------------------" 8013 FOR I = 1 TO NPOD: PRINT "X"; I; "="; R(I): NEXT I 8015 FOR I = 1 TO M 8020 S = 0 8030 FOR J = 1 TO N 8040 S = S + K(I, J) * R(J) 8050 NEXT J 8060 PRINT "OGRANICENJE "; I; " "; S; " "; O$(I); " "; D(I) 8070 NEXT I 8100 END