Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Program METODE_SIMPLEX;
- USES CRT;
- TYPE
- ARRAY_REAL = ARRAY [1..100] OF REAL;
- ARRAY_INT = ARRAY [1..100] OF INTEGER;
- VAR_REC = RECORD
- Kolom : INTEGER;
- Baris : INTEGER;
- END;
- VAR
- Cj : ARRAY [1..100] OF REAL;
- Var_Bas : ARRAY [1..100] OF ARRAY_REAL;
- Zj : ARRAY [1..100] OF REAL;
- Cj_Zj : ARRAY [1..100] OF REAL;
- Temp : ARRAY [1..100] OF REAL;
- Var_Koor : ARRAY [1..100] OF VAR_REC;
- Keuntungan : ARRAY [1..100] OF REAL;
- var_basic,var_nonbasic,fungsi_kendala : INTEGER;
- brs,kol : INTEGER;
- index_kuantitas : integer;
- index_var_koor : integer;
- Z : REAL;
- count_iterasi : INTEGER;
- PROCEDURE BikinGaris(x,y,count:INTEGER;kar:CHAR);
- VAR
- i:integer;
- BEGIN
- FOR i:=0 TO COUNT-1 DO
- BEGIN
- GOTOXY(x+i,y);
- WRITE(kar);
- END;
- END;
- PROCEDURE Cetak(ke:integer);
- VAR i,j:INTEGER;
- BEGIN
- clrscr;
- WRITELN('Iterasi Tabel ke-',ke);
- brs:=WHEREY;
- BikinGaris(1,brs,79,'=');
- GOTOXY(1,brs+1);WRITE('Cj');
- FOR i:=1 TO var_basic DO
- BEGIN
- GOTOXY(8*i,brs+1);
- WRITE(Cj[i]:1:2);
- END;
- GOTOXY(1,brs+2);WRITE('VarBsc');
- kol:=0;
- FOR i:=1 TO var_nonbasic DO
- BEGIN
- inc(kol,8);
- GOTOXY(kol,brs+2);
- WRITE('X',i);
- END;
- FOR i:=1 TO fungsi_kendala DO
- BEGIN
- inc(kol,8);
- GOTOXY(kol,brs+2);
- WRITE('S',i);
- END;
- inc(kol,8);
- GOTOXY(kol,brs+2);
- WRITE('kuantitas');
- BikinGaris(1,brs+3,79,'-');
- FOR i:=1 TO fungsi_kendala DO
- BEGIN
- GOTOXY(1,brs+i+3);WRITE('S',i);
- kol:=0;
- For j:=1 TO var_basic DO
- BEGIN
- inc(kol,8);
- GOTOXY(kol,brs+i+3);WRITE(Var_Bas[i,j]:1:2);
- END;
- inc(kol,8);
- GOTOXY(kol,brs+i+3);WRITE(Var_Bas[i,j+1]:1:2);
- END;
- brs:=brs+i+4;
- BikinGaris(1,brs,79,'-');
- GOTOXY(1,brs+1);WRITE('Zj');
- GOTOXY(1,brs+2);WRITE('Cj-Zj');
- FOR i:=1 TO var_basic DO
- BEGIN
- GOTOXY(8*i,brs+1);WRITE(Zj[i]:1:2);
- GOTOXY(8*i,brs+2);WRITE(Cj_Zj[i]:1:2);
- END;
- BikinGaris(1,brs+3,79,'-');
- GOTOXY(1,brs+4);WRITE('Z');
- GOTOXY(8,brs+4);WRITE(Z:1:2);
- BikinGaris(1,brs+5,79,'=');
- WRITELN;WRITELN('Press Any keys to continues.....!');
- END;
- FUNCTION FindMaxMinCj_Zj : INTEGER;
- VAR
- i,max:Integer;
- temp:real;
- BEGIN
- i:=1;
- temp:=0.0;
- max:=0;
- repeat
- if(Cj_Zj[i]>temp)then
- Begin
- temp:=Cj_Zj[i];
- max:=i;
- end;
- inc(i);
- until i>=var_basic;
- FindMaxMinCj_Zj:=max;
- END;
- FUNCTION FindMinBasic:INTEGER;
- VAR
- min,i,max:Integer;
- awal:real;
- BEGIN
- min:=1;
- awal:=temp[1];
- for i:=2 to fungsi_kendala do
- begin
- if temp[i]<awal then
- Begin
- awal:=temp[i];
- min:=i;
- End;
- end;
- findminbasic:=min;
- end;
- PROCEDURE IsiKeuntunganVarBasic;
- VAR I:Integer;
- BEGIN
- FOR i:=1 TO 100 Do
- keuntungan[i]:=0;
- FOR i:=1 TO index_Var_koor DO
- keuntungan[Var_koor[i].Baris]:=Cj[Var_koor[i].kolom];
- END;
- PROCEDURE Proses;
- VAR
- getBrs,getkol,i ,j:integer;
- elemen:real;
- getkol_temp:integer;
- BEGIN
- Cetak(count_iterasi);
- Readln;
- getkol_temp:=0;
- getkol:=FindMaxMinCj_Zj;
- WHILE(getkol>0) DO
- BEGIN
- FOR i:=1 TO fungsi_kendala DO
- BEGIN
- if Var_Bas[i,getkol]<>0 Then
- Temp[i]:=Var_Bas[i,index_kuantitas]/Var_Bas[i,getkol]
- else
- Temp[i]:=1.7e38;
- END;
- getBrs:=FindMinBasic;
- elemen:=Var_Bas[getBrs,getkol];
- FOR i:=1 TO var_basic+1 DO
- BEGIN
- Var_Bas[getBrs,i]:=Var_Bas[getBrs,i]/elemen;
- END;
- FOR i:=1 TO fungsi_kendala DO
- BEGIN
- IF i=getBrs THEN continue;
- elemen:=Var_bas[i,getkol];
- FOR j:=1 TO var_basic+1 Do
- Var_Bas[i,j]:=Var_Bas[i,j]-(elemen*Var_Bas[getBrs,j]);
- END;
- If getkol<>getkol_temp then INC(index_var_koor);
- Var_Koor[index_var_koor].Kolom:=getKol;
- Var_Koor[index_var_koor].Baris:=getBrs;
- getKol_Temp:=getKol;
- IsiKeuntunganVarBasic;
- For i:=1 TO var_basic DO
- BEGIN
- Zj[i]:=0;
- For j:=1 TO fungsi_kendala Do
- Zj[i]:=Zj[i]+(Var_Bas[j,i]*keuntungan[j]);
- Cj_Zj[i]:=Cj[i]-Zj[j];
- END;
- Z:=0;
- For i:=1 TO fungsi_Kendala DO
- Z:=Z+(Var_Bas[i,index_kuantitas]*Keuntungan[i]);
- inc(count_iterasi);
- Cetak(count_iterasi);
- readln;
- getKol:=FindmaxMinCj_Zj;
- End;
- WRITELN('Hasil Maksimasi Dari iterasi Ini Adalah:');
- For i:=1 To fungsi_kendala DO
- Begin
- For j:=1 to index_var_koor DO
- Begin
- if i=Var_koor[j].Baris Then
- begin
- WRITELN('HasilX',Var_Koor[j].kolom,'=',var_bas[i,index_kuantitas]:1:2);
- end;
- End;
- End;
- WRITELN('Dengan Hasil Keuntungan maksimal =',Z:1:2);
- WRITELN ('Proses maksimalisasi Selesai............');
- END;
- PROCEDURE INPUT;
- Var
- i,j:integer;
- BEGIN
- CLRSCR;
- WRITELN;
- WRITE('Masukan Jumlah variabel Non basic :');Readln(Var_nonbasic);
- FOR i:=1 to var_nonbasic DO
- BEGIN
- WRITE('Input Nilai Variabe X',i,'=');READLN(Cj[i]);
- END;
- WRITE('Masukkan Jumlah Fungsi KENDALA :');READLN(fungsi_kendala);
- {Mengisi Cj dengan variabel non basc(s)}
- FOR i:=1 TO fungsi_kendala DO
- Cj[var_nonbasic+i]:=0;
- var_basic:=fungsi_kendala+var_nonbasic;
- FOR i:=1 TO fungsi_kendala DO
- BEGIN
- WRITELN('mengisi variabel S',i,':');
- FOR j:=1 TO Var_basic DO
- BEGIN
- WRITE('input Nilai S',i,' kolom ke-',j,' +');READLN(var_Bas[i,j]);
- END;
- WRITE('Input Nilai Kuantitasnya +');READLN(Var_bas[i,j+1]);
- END;
- index_kuantitas:=j+1;
- FOR i:=1 TO Var_basic DO
- BEGIN
- Zj[i]:=0;
- Cj_Zj[i]:=Cj[i];
- END;
- END;
- Var
- tombol:char;
- BEGIN
- Repeat
- index_var_koor:=0;
- count_iterasi:=1;
- INPUT;
- Proses;
- WRITE('Lo mau input lagi Y/T:');
- readln(tombol);
- until tombol in['T','t'];
- END.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement