Advertisement
denzfarid

SIMPLEX

Mar 31st, 2012
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 5.71 KB | None | 0 0
  1. Program METODE_SIMPLEX;
  2.  
  3. USES CRT;
  4. TYPE
  5.     ARRAY_REAL = ARRAY [1..100] OF REAL;
  6.     ARRAY_INT  = ARRAY [1..100] OF INTEGER;
  7.     VAR_REC    = RECORD
  8.         Kolom   :   INTEGER;
  9.         Baris   :   INTEGER;
  10.     END;
  11. VAR
  12.         Cj      : ARRAY [1..100] OF REAL;
  13.         Var_Bas     : ARRAY [1..100] OF ARRAY_REAL;
  14.         Zj      : ARRAY [1..100] OF REAL;
  15.         Cj_Zj       : ARRAY [1..100] OF REAL;
  16.         Temp        : ARRAY [1..100] OF REAL;
  17.         Var_Koor    : ARRAY [1..100] OF VAR_REC;
  18.         Keuntungan  : ARRAY [1..100] OF REAL;
  19.         var_basic,var_nonbasic,fungsi_kendala   : INTEGER;
  20.         brs,kol     : INTEGER;
  21.         index_kuantitas : integer;
  22.         index_var_koor  : integer;
  23.         Z       : REAL;
  24.         count_iterasi   : INTEGER;
  25.  
  26. PROCEDURE BikinGaris(x,y,count:INTEGER;kar:CHAR);
  27. VAR
  28.         i:integer;
  29. BEGIN
  30.         FOR i:=0 TO COUNT-1 DO
  31.         BEGIN
  32.                 GOTOXY(x+i,y);
  33.         WRITE(kar);
  34.             END;
  35. END;
  36. PROCEDURE Cetak(ke:integer);
  37. VAR i,j:INTEGER;
  38. BEGIN
  39.         clrscr;
  40.         WRITELN('Iterasi Tabel ke-',ke);
  41.         brs:=WHEREY;
  42.         BikinGaris(1,brs,79,'=');
  43.         GOTOXY(1,brs+1);WRITE('Cj');
  44.         FOR i:=1 TO var_basic DO
  45.         BEGIN
  46.                 GOTOXY(8*i,brs+1);
  47.                 WRITE(Cj[i]:1:2);
  48.         END;
  49.         GOTOXY(1,brs+2);WRITE('VarBsc');
  50.         kol:=0;
  51.         FOR i:=1 TO var_nonbasic DO
  52.         BEGIN
  53.                 inc(kol,8);
  54.                 GOTOXY(kol,brs+2);
  55.         WRITE('X',i);
  56.         END;
  57. FOR i:=1 TO fungsi_kendala DO
  58. BEGIN
  59.                 inc(kol,8);
  60.                 GOTOXY(kol,brs+2);
  61.         WRITE('S',i);
  62.         END;
  63.                 inc(kol,8);
  64.                 GOTOXY(kol,brs+2);
  65.         WRITE('kuantitas');
  66.         BikinGaris(1,brs+3,79,'-');
  67.  
  68. FOR i:=1 TO fungsi_kendala DO
  69. BEGIN
  70.         GOTOXY(1,brs+i+3);WRITE('S',i);
  71.         kol:=0;
  72.         For j:=1 TO var_basic DO
  73.         BEGIN
  74.                 inc(kol,8);
  75.         GOTOXY(kol,brs+i+3);WRITE(Var_Bas[i,j]:1:2);
  76.         END;
  77.                 inc(kol,8);
  78.         GOTOXY(kol,brs+i+3);WRITE(Var_Bas[i,j+1]:1:2);
  79.         END;
  80.         brs:=brs+i+4;
  81.         BikinGaris(1,brs,79,'-');
  82.         GOTOXY(1,brs+1);WRITE('Zj');
  83.         GOTOXY(1,brs+2);WRITE('Cj-Zj');
  84.  
  85. FOR i:=1 TO var_basic DO
  86. BEGIN
  87.                         GOTOXY(8*i,brs+1);WRITE(Zj[i]:1:2);
  88.                      GOTOXY(8*i,brs+2);WRITE(Cj_Zj[i]:1:2);
  89.                 END;
  90.                 BikinGaris(1,brs+3,79,'-');
  91.         GOTOXY(1,brs+4);WRITE('Z');
  92.         GOTOXY(8,brs+4);WRITE(Z:1:2);
  93.         BikinGaris(1,brs+5,79,'=');
  94.         WRITELN;WRITELN('Press Any keys to continues.....!');
  95.         END;
  96.  
  97.         FUNCTION FindMaxMinCj_Zj : INTEGER;
  98.         VAR
  99.                 i,max:Integer;
  100.                 temp:real;
  101.         BEGIN
  102.         i:=1;
  103.         temp:=0.0;
  104.         max:=0;
  105.         repeat
  106.             if(Cj_Zj[i]>temp)then
  107.             Begin
  108.                     temp:=Cj_Zj[i];
  109.                 max:=i;
  110.         end;
  111.         inc(i);
  112.         until i>=var_basic;
  113.         FindMaxMinCj_Zj:=max;
  114.     END;
  115.  
  116.     FUNCTION FindMinBasic:INTEGER;
  117.     VAR
  118.                 min,i,max:Integer;
  119.                 awal:real;
  120.     BEGIN
  121.         min:=1;
  122.         awal:=temp[1];
  123.         for i:=2 to fungsi_kendala do
  124.         begin
  125.             if temp[i]<awal then
  126.             Begin
  127.                 awal:=temp[i];
  128.                 min:=i;
  129.             End;
  130.                 end;
  131.         findminbasic:=min;
  132.         end;
  133.  
  134. PROCEDURE IsiKeuntunganVarBasic;
  135. VAR I:Integer;
  136. BEGIN
  137.         FOR i:=1 TO 100 Do
  138.                 keuntungan[i]:=0;
  139.         FOR i:=1 TO index_Var_koor DO
  140.                 keuntungan[Var_koor[i].Baris]:=Cj[Var_koor[i].kolom];
  141.     END;
  142.  
  143. PROCEDURE Proses;
  144. VAR
  145.     getBrs,getkol,i ,j:integer;
  146.     elemen:real;
  147.     getkol_temp:integer;
  148. BEGIN
  149.     Cetak(count_iterasi);
  150.     Readln;
  151.     getkol_temp:=0;
  152.     getkol:=FindMaxMinCj_Zj;
  153.     WHILE(getkol>0) DO
  154.     BEGIN
  155.             FOR i:=1 TO fungsi_kendala DO
  156.         BEGIN
  157.             if Var_Bas[i,getkol]<>0 Then
  158.             Temp[i]:=Var_Bas[i,index_kuantitas]/Var_Bas[i,getkol]
  159.             else
  160.             Temp[i]:=1.7e38;
  161.         END;
  162.         getBrs:=FindMinBasic;
  163.         elemen:=Var_Bas[getBrs,getkol];
  164.             FOR i:=1 TO var_basic+1 DO
  165.         BEGIN
  166.             Var_Bas[getBrs,i]:=Var_Bas[getBrs,i]/elemen;
  167.         END;
  168.             FOR i:=1 TO fungsi_kendala DO
  169.         BEGIN
  170.             IF i=getBrs THEN continue;
  171.         elemen:=Var_bas[i,getkol];
  172.             FOR j:=1 TO var_basic+1 Do
  173.         Var_Bas[i,j]:=Var_Bas[i,j]-(elemen*Var_Bas[getBrs,j]);
  174.         END;
  175.         If getkol<>getkol_temp then INC(index_var_koor);
  176.         Var_Koor[index_var_koor].Kolom:=getKol;
  177.         Var_Koor[index_var_koor].Baris:=getBrs;
  178.         getKol_Temp:=getKol;
  179.         IsiKeuntunganVarBasic;
  180.             For i:=1 TO var_basic DO
  181.         BEGIN
  182.         Zj[i]:=0;
  183.         For j:=1 TO fungsi_kendala Do
  184.                 Zj[i]:=Zj[i]+(Var_Bas[j,i]*keuntungan[j]);
  185.         Cj_Zj[i]:=Cj[i]-Zj[j];
  186.         END;
  187.         Z:=0;
  188.                 For i:=1 TO fungsi_Kendala DO
  189.         Z:=Z+(Var_Bas[i,index_kuantitas]*Keuntungan[i]);
  190.         inc(count_iterasi);
  191.         Cetak(count_iterasi);
  192.         readln;
  193.         getKol:=FindmaxMinCj_Zj;
  194.         End;
  195.         WRITELN('Hasil Maksimasi Dari iterasi Ini Adalah:');
  196.         For i:=1 To fungsi_kendala DO
  197.         Begin
  198.                 For j:=1 to index_var_koor DO
  199.         Begin
  200.                 if i=Var_koor[j].Baris Then
  201.         begin
  202.             WRITELN('HasilX',Var_Koor[j].kolom,'=',var_bas[i,index_kuantitas]:1:2);
  203.             end;
  204.             End;
  205.             End;
  206.             WRITELN('Dengan Hasil Keuntungan maksimal =',Z:1:2);
  207.             WRITELN ('Proses maksimalisasi Selesai............');
  208.             END;
  209.             PROCEDURE INPUT;
  210.             Var
  211.                     i,j:integer;
  212.             BEGIN
  213.                 CLRSCR;
  214.                 WRITELN;
  215.                 WRITE('Masukan Jumlah variabel Non basic :');Readln(Var_nonbasic);
  216.                         FOR i:=1 to var_nonbasic DO
  217.                     BEGIN
  218.                         WRITE('Input Nilai Variabe X',i,'=');READLN(Cj[i]);
  219.                 END;
  220.                 WRITE('Masukkan Jumlah Fungsi KENDALA :');READLN(fungsi_kendala);
  221.                 {Mengisi Cj dengan variabel non basc(s)}
  222.                     FOR i:=1 TO fungsi_kendala DO
  223.                 Cj[var_nonbasic+i]:=0;
  224.                 var_basic:=fungsi_kendala+var_nonbasic;
  225.                
  226.                     FOR i:=1 TO fungsi_kendala DO
  227.                 BEGIN
  228.                     WRITELN('mengisi variabel S',i,':');
  229.                         FOR j:=1 TO Var_basic DO
  230.                 BEGIN
  231.                 WRITE('input Nilai S',i,' kolom ke-',j,' +');READLN(var_Bas[i,j]);
  232.                 END;
  233.                 WRITE('Input Nilai Kuantitasnya +');READLN(Var_bas[i,j+1]);
  234.                 END;
  235.                     index_kuantitas:=j+1;
  236.                         FOR i:=1 TO Var_basic DO
  237.                         BEGIN
  238.                         Zj[i]:=0;
  239.                         Cj_Zj[i]:=Cj[i];
  240.                     END;
  241.                 END;
  242.                 Var
  243.                     tombol:char;
  244.                 BEGIN
  245.                     Repeat
  246.                     index_var_koor:=0;
  247.                     count_iterasi:=1;
  248.                     INPUT;
  249.                     Proses;
  250.                     WRITE('Lo mau input lagi Y/T:');
  251.                     readln(tombol);
  252.                     until tombol  in['T','t'];
  253.                 END.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement