Anda di halaman 1dari 65

Tugas 1

Pada tugas ini diminta membuat program untuk mencari spidol terpendek dari sejumlah spidol yang
ada. Algoritma dari program ini adalah sebagai berikut.

START

IDENTIFIKASI VARIABEL
N, i, a,
spidolpendek, panjangspidol

INPUT
N dan i
panjangspidol(i)

INISIASI AWAL
a=0 ;
spidolpendek=panjangspidol(0) ;
i=0

IF CONDITIONAL spidolpendek = panjangspidol(i) ;


TIDAK
spidolpendek > panjangspidol(i+1) a=i

TIDAK YA

spidolpendek = panjangspidol(i+1) ;
a=(i+1)

i=(i+1)

IF CONDITIONAL
i=N

YA

END
Algoritma di atas dapat dijelaskan sebagai berikut :

1. Identifikasi variabel-variabel yang diperlukan dalam permasalahan ini.


a. N merupakan variabel yang menunjukkan jumlah spidol
b. i merupakan variabel yang menunjukkan identitas spidol
c. a merupakan variabel yang menunjukan identitas spidol terpendek
d. panjangspidol merupakan variabel yang menunjukkan panjang spidol. Panjangspidol
dibuat dalam bentuk array dengan dimensi sebesar N.
e. spidolpendek merupakan variabel yang menunjukkan panjang spidol terpendek
2. Input data yang diperlukan seperti jumlah spidol yang tersedia (N) dan panjang masing-masing
spidol. Data-data panjang tersebut kemudian disimpan sebagai panjangspidol(i).
3. Untuk menentukan mana spidol terpendek, perlu dilakukan penetapan statement awal yaitu
spidol terpendek sementara adalah spidol pertama. Maka, ditetapkan identitas spidol
terpendek (a) adalah 0 (spidol pertama) dengan panjang panjangspidol(0).
4. Dalam pengecekan panjang spidol terpendek terhadap panjang spidol yang tersedia, dibuat
pengkondisian dengan pernyataan spidol terpendek lebih besar dibandingkan spidol
selanjutnya (spidolpendek > panjangspidol(i+1)).
a. Jika kondisi terpenuhi, maka nilai spidol terpendek diganti menjadi panjang spidol
berikutnya (spidolpendek = panjangspidol(i+1) ; a=(i+1))
b. Jika kondisi tidak terpenuhi, maka tidak terjadi perubahan.
5. Jika telah dilakukan pengecekan terhadap spidol selanjutnya, lakukan langkah 4 kembali
terhadap spidol lainnya (selanjutnya).
6. Lakukan hingga mencapai spidol terakhir (i=N). Jika telah sampai pada spidol terakhir, maka
proses iterasi dihentikan.

Selanjutnya, algoritma yang telah dijelaskan di atas akan dibentuk ke dalam 3 bahasa program yang
berbeda yaitu C, Fortran, dan Pascal.
1. Bahasa C

#include <stdio.h>

#include <stdlib.h>

int main()

/*Identifikasi Variabel*/

int N,i,a;

float spidolpendek;

/*Input jumlah spidol*/

printf("Masukkan jumlah spidol :");

scanf("%d",&N);

printf("\n");

/*Identifikasi Array*/

float panjangspidol[N];

/*Input data panjang spidol*/

for(i=0;i<N;i++)

printf("Masukkan panjang spidol %d (dalam cm):",i+1);

scanf("%f",&panjangspidol[i]);

printf("\n");

/*Kesimpulan data yang di-input*/

printf("Jumlah spidol = %d buah \n",N);

for(i=0;i<N;i++)

printf("Panjang spidol %d adalah %f cm \n",i+1,panjangspidol[i]);


}

/*Inisiasi Awal*/

a=0;

spidolpendek=panjangspidol[0];

/*Algoritma Utama*/

for (i=0;i<N;i++)

if(spidolpendek>panjangspidol[i])

spidolpendek=panjangspidol[i];

a=i;

/*Output Algoritma*/

printf("Spidol terpendek adalah spidol %d dengan panjang %f cm \n",a+1,spidolpendek);

return 0;

Gambar 1 Hasil Pemrograman C


2. Bahasa Fortran

program main

implicit none

! Identifikasi Variabel

integer :: N

integer :: i

real :: spidolpendek

integer :: a

real,dimension(:),allocatable::panjangspidol

! Input jumlah spidol

write(*,*)"Masukkan jumlah spidol:"

read(*,*)N

! Identifikasi Array

allocate(panjangspidol(N))

! Input data panjang spidol

do i=1,N

write(*,*)"Masukkan panjang spidol",i,"(dalam cm) :"

read(*,*)panjangspidol(i)

end do

! Kesimpulan data yang di-input

write(*,*)"Jumlah spidol =",N,"buah"

do i=1,N

write(*,*)"Panjang spidol",i,"adalah",panjangspidol(i),"cm"

end do

! Inisiasi Awal
a=1

spidolpendek=panjangspidol(1)

! Algoritma Utama

do i=1,N

if(spidolpendek>panjangspidol(i)) then

spidolpendek=panjangspidol(i)

a=i

end if

end do

! Output Algoritma

write(*,*)"Spidol terpendek adalah spidol",a,"dengan panjang",spidolpendek,”cm”

end

Gambar 2 Hasil Pemrograman Fortran


3. Bahasa Pascal

program tugas1;

{Identifikasi Variabel dan Array}

var

N : integer;

spidolpendek : real;

i : integer;

a : integer;

panjangspidol : array[1..100] of real;

begin

{Input jumlah spidol}

writeln('Masukkan jumlah spidol (maks 100):');

readln(N);

writeln;

{Input data panjang spidol}

for i :=1 to N do

begin

writeln('Masukkan panjang spidol ',i,' (dalam cm):');

readln(panjangspidol[i]);

end;

{Kesimpulan data yang di-input}

writeln;

writeln('Jumlah spidol= ',N,' buah');

for i :=1 to N do

begin

writeln('Panjang spidol ',i,' adalah ',panjangspidol[i]:3:2, 'cm');

end;
{Inisiasi Awal}

spidolpendek:=panjangspidol[i];

a:=1;

{Algoritma Utama}

for i:= 1 to N do

begin

if(spidolpendek>panjangspidol[i]) then

begin

spidolpendek:=panjangspidol[i];

a:=i;

end;

end;

{Output Algoritma}

writeln;

writeln('Spidol terpendek adalah spidol ',a,' dengan panjang ',spidolpendek:3:2,' cm');

readln;

end.

Gambar 3 Hasil Pemrograman Pascal


Perbedaan Struktur Dasar Bahasa Pemrograman C, Fortran, dan Pascal

Komponen C Fortran Pascal


Identifikasi int N,i,a; integer :: N N : integer;
Variable dan float spidolpendek; integer :: i spidolpendek : real;
Array real :: spidolpendek i : integer;
integer :: a a : integer;

float panjangspidol[N]; real,dimension(:),allocatable::panjangspidol panjangspidol : array[1..100] of real;


Input Data printf("Masukkan jumlah spidol :"); write(*,*)"Masukkan jumlah spidol:" writeln('Masukkan jumlah spidol (maks
scanf("%d",&N); read(*,*)N 100):');
readln(N);
Output Data printf("Jumlah spidol = %d buah \n",N); write(*,*)"Jumlah spidol =",N,"buah" writeln('Jumlah spidol= ',N,' buah');
Iterasi (Looping) for(i=0;i<N;i++) do i=1,N for i :=1 to N do
{ write(*,*)"Panjang begin
printf("Panjang spidol %d adalah spidol",i,"adalah",panjangspidol(i),"cm" writeln('Panjang spidol ',i,' adalah
%f cm \n",i+1,panjangspidol[i]); end do ',panjangspidol[i]:3:2, 'cm');
} end;

Kondisional if(spidolpendek>panjangspidol[i]) if(spidolpendek>panjangspidol(i)) then if(spidolpendek>panjangspidol[i]) then


(If Statement) { spidolpendek=panjangspidol(i) begin
spidolpendek=panjangspidol[i]; a=i spidolpendek:=panjangspidol[i];
a=i; end if a:=i;
} end;
Komentar
/*Kesimpulan data yang di-input*/ ! Kesimpulan data yang di-input {Kesimpulan data yang di-input}
(Comments)
Tugas 2

Pada tugas ini diminta membuat program untuk mencari total delay yang melintasi suatu ruas jalan
apabila diterapkan kebijakan dilarang mendahului pada ruas jalan tersebut. Delay yang dimaksud
adalah perbedaan waktu tiba dari suatu kendaraan saat kebijakan tersebut tidak ada dan saat
kebijakan diterapkan. Algoritma dari program ini adalah sebagai berikut.

START A

IDENTIFIKASI VARIABLE
L, i, j, k, l, m, Nheadway, hmin, hmax, fh,
pk, vmin, vmax, mt, sum, stop, T, t, Ts, r1, ALGORITMA A
r2, r3, r4, h, d0, v, totaldelay, TA, Tbo,
TBx

ALGORITMA B

INPUT
L, Nheadway, hmin, hmax, fh, pk,
vmin, vmax, t LOOPING
ALGORITMA C
i = i +1

INISIASI AWAL
ALGORITMA D
mt[0] = 0 ; T = 0 ; d0[0] = 0 ;
r1[0] =0 ; r2[0] =0;
r3[0] =0 ; r4[0] =0;
h[0]=0 ; v[0]=0;
TA[0] =0 ; TBo[0] =0; T=TA[i]
TBx[0] =0; D[0]=0;
i = 1;

A
IF CONDITIONAL
YA
T < Ts

TIDAK

END

Gambar 4 Algoritma Program


START

INISIASI AWAL
generate r1, r2
stop = 0
k=0

IF CONDITIONAL
TIDAK k = k+1
r1[i] < fhcumx[k]

TIDAK

YA

h[i] = hmin[k] + (r2[i]*(hmax[k]-hmin[k]));


Stop = 1

IF CONDITIONAL
stop = 1

END

Gambar 5 Algoritma A
START

INISIASI AWAL
generate r3
j=0;

IF CONDITIONAL
TIDAK j = j+1
r3[i] < pkcumx[j]

YA

m = j;
mt [i] = j;

END

Gambar 6 Algoritma B

START

INISIASI AWAL
generate r4

v[i] = vmin[m] + (r4[i]*(vmax[m]-vmin[m]))

END

Gambar 7 Algoritma C
START

INISIASI AWAL
TBo[i] = (TA[i] + (L/v[i]))

IF CONDITIONAL
((v[i-1]<v[i])
dan
TIDAK TBx[i] = TBo[i]
(TBo[i]<TBo[i-1]))

YA

d0[i] = ((h[i])/((v[i]-v[i-1])/(v[i]*v[i-1])));
TBx[i] = (TA[i] + (d0[i]/v[i]) + ((L-d0[i])/v[i-1]));

D[i] = TBx[i] - TBo[i];

END

Gambar 8 Algoritma D

Algoritma di atas dapat dijelaskan sebagai berikut :

1. Identifikasi variabel-variabel yang diperlukan dalam permasalahan ini.


a. L, merupakan variabel yang menunjukkan panjang ruas jalan;
b. i, merupakan variabel yang menunjukkan penomoran kendaraan;
c. j, merupakan variabel yang menunjukkan penomoran proporsi kendaraan;
d. k, merupakan variabel yang menunjukkan penomoran kelas headway;
e. m, merupakan variabel yang menunjukkan karakteristik jenis kendaraan;
f. Nheadway, merupakan variabel yang menunjukkan jumlah kelas headway;
g. hmin, merupakan variabel yang menunjukkan headway minimal kendaraan;
h. hmax, merupakan variabel yang menunjukkan headway maksimal kendaraan;
i. fh, merupakan variabel yang menunjukkan frekuensi di setiap kelas headway;
j. fhcum, merupakan variabel yang menunjukkan frekuensi kumulatif dari kelas
headway;
k. fhcumx, merupakan variabel yang menunjukkan frekuensi kumulatif dari kelas
headway yang sudah disesuaikan antara rentang 0-1;
l. pk, merupakan variabel yang menunjukkan besar proporsi kendaraan;
m. pkcum, merupakan variabel yang menunjukka frekuensi kumulatif dari pk;
n. pkcumx, merupakan variabel yang menunjukkan frekuensi kumulatif dari pk yang
sudah disesuaikan antara rentang 0 - 1;
o. pktot, merupakan variabel pembantu dalam perhitungan pkcumx;
p. vmin, merupakan variabel yang menunjukkan kecepatan minimal kendaraan;
q. vmax, merupakan variabel yang menunjukkan kecepatan maksimal kendaraan;
r. mt, merupakan variabel yang menunjukkan karakteristik jenis kendaraan;
s. stop, merupakan variabel pembantu untuk mencari headway;
t. t dan Ts, merupakan variabel yang menunjukkan lama waktu studi (dalam jam dan
dalam detik);
u. r1, r2, r3, dan r4, merupakan variabel yang menunjukkan random number;
v. h, merupakan variabel yang menunjukkan headway kendaraan;
w. d0, merupakan variabel yang menunjukkan jarak dari titik A ke titik lokasi pertemuan
antara kendaraan ke i dengan kendaraan ke i+1;
x. v, merupakan variabel yang menunjukkan kecepatan kendaraan;
y. TA, merupakan variabel yang menunjukkan waktu di saat kendaraan melintas di titik
A;
z. TBex, merupakan variabel yang menunjukkan waktu di saat kendaraan melintas di
titik B pada kondisi free flow;
aa. TBre, merupakan variabel yang menunjukkan waktu di saat kendaraan melintas di titik
B pada kondisi sesunnguhnya;
bb. D, merupakan variabel yang menunjukkan waktu tundaan (delay) yang terjadi;
cc. totaldelay, merupakan variabel yang menunjukkan penjumlahan total delay.
2. Input data yang diperlukan seperti panjang ruas, jumlah kelas headway dengan nilai batas
atas-bawah serta frekuensi kejadian dari masing-masing kelas, proporsi masing-masing
kendaraan (dalam program ini hanya membagi klasifikasi kendaraan menjadi mobil
penumpang, bus, dan truk) serta data kecepatan masing-masing jenis kendaraan, dan lama
waktu studi.
3. Tetapkan kondisi awal, mt[0] = 0 ; T = 0 ; d0[0] = 0 ;r1[0] =0 ; r2[0] =0 ; r3[0] =0 ; r4[0] =0 ;
h[0]=0 ; v[0]=0 ; TA[0] =0 ; TBo[0] =0 ; TBx[0] =0; D[0]=0 ; i = 1.
4. Tentukan nilai i = 1 sebagai inisiasi untuk melakukan iterasi. Proses dilanjutkan ke algoritma A
dengan membangkitkan random number r1 dan r2 serta kondisi awal stop = 0 dan k = 0.
5. Dilakukan pengondisian dengan syarat r1[i] < fhcumx[k]. Jika :
a. Ya, maka hitung headway dengan rumus h[i] = hmin[k] + (r2[i]*(hmax[k]-hmin[k])),
lalu ubah nilai stop menjadi 1.
b. Tidak, maka nilai k menjadi k+1.
Apabila nilai stop = 0 maka ulangi proses 5. Apabila nilai stop = 1, looping selesai.
6. Kemudian dilanjutkan ke algoritma B dengan membangkitkan random number r3.
7. Dilakukan pengondisian dengan syarat r3[i] < pkcumx[j]. Jika :
a. Ya, maka nila m = j dan mt[i] = j;
b. Tidak, maka nilai j menjadi j+1.
8. Kemudian dilanjutkan ke algoritma C dengan membangkitkan random number r4. Lalu
tentukan kecepatan kendaraan dengan rumus v[i] = vmin[m] + (r4[i]*(vmax[m]-vmin[m])).
9. Selanjutnya, lakukan proses algoritma D. Hitung TBo kendaraan dengan rumus TBo[i] = (TA[i]
+ (L/v[i])).
10. Lakukan persyaratan kondisional terkait v[i-1] < v[i] dan TBo[i] < TBo[i-1], yaitu:
a. Jika ya, maka hitung d0[i] = (h[i]) / ((v[i]-v[i-1])/(v[i]*v[i-1])) dan TBx[i] = TA[i] +
(d0[i]/v[i]) + ((L-d0[i])/v[i-1]).
b. Jika tidak, maka TBx[i] = TBo[i].
11. Selanjutnya yaitu menghitung waktu tundaan (delay) dengan rumus D[i] = TBx[i] – TBo[i].
12. Proses iterasi diakhiri dengan menghitung T = TA[i].
13. Selanjutnya yaitu pengecekan nilai T. Jika nilai T masih lebih kecil dari Ts, maka iterasi
dilakukan kembali dengan menentukan i = i + 1. Namun apabila nilai T sudah tidak sesuai
dengan kondisi tersebut, maka proses iterasi selesai.
14. Dari nilai D[i] yang didapat, dilakukan iterasi penjumlahan sehingga didapatkan nilai
delaytotal.
Bahasa Pascal

program tugas2; TA : array[1..1000] of real;


TBo : array[1..1000] of real;
{$mode objfpc}{$H+} TBx : array[1..1000] of real;
D : array[1..1000] of real;
uses
{$IFDEF UNIX}{$IFDEF UseCThreads} begin
cthreads, {input data}
{$ENDIF}{$ENDIF} {panjang ruas}
Classes writeln('Masukkan panjang ruas studi (dalam
{ you can add units after this }; meter) :');
readln(Lr);
var writeln;
Lr,i,j,k,l,m,Nheadway,stop : integer;
T0,t,Ts,pktot,sum : real; {data headway}
totaldelay : double; writeln('Data headway');
pk : array[1..3] of real; writeln('Jumlah kelas data headway :');
pkcum : array[1..3] of real; readln(Nheadway);
pkcumx : array[1..3] of real; writeln;
vmin : array[1..3] of real;
vmax : array[1..3] of real; for i:=1 to Nheadway do
mt : array[1..1000] of integer; begin
hmin : array[1..1000] of real; writeln('Masukkan batas bawah headway
hmax : array[1..1000] of real; kelas ke-',i,' (dalam detik):');
fh : array[1..1000] of real; readln(hmin[i]);
fhcum : array[1..1000] of real; writeln('Masukkan batas atas headway kelas
fhcumx : array[1..1000] of real; ke-',i,' (dalam detik):');
r1 : array[1..1000] of real; readln(hmax[i]);
r2 : array[1..1000] of real; writeln('Masukkan jumlah kejadian :');
r3 : array[1..1000] of real; readln(fh[i]);
r4 : array[1..1000] of real; end;
h : array[1..1000] of real; writeln;
d0 : array[1..1000] of real;
v : array[1..1000] of real; {data kendaraan}
writeln('Masukkan proporsi mobil sum := 0;
penumpang:'); for k:=1 to Nheadway do
readln(pk[1]); begin
writeln('Masukkan kecepatan minimum sum := sum + fh[k];
mobil penumpang (dalam meter/detik) :'); end;
readln(vmin[1]);
writeln('Masukkan kecepatan maksimum fhcum[1] := fh[1];
mobil penumpang (dalam meter/detik) :'); fhcumx[1] := fhcum[1]/sum;
readln(vmax[1]); for k:=2 to Nheadway do
writeln('Masukkan proporsi bus:'); begin
readln(pk[2]); fhcum[k] := fhcum[k-1]+fh[k];
writeln('Masukkan kecepatan minimum bus fhcumx[k] := fhcum[k]/sum;
(dalam meter/detik) :'); end;
readln(vmin[2]);
writeln('Masukkan kecepatan maksimum bus pktot := 0;
(dalam meter/detik) :'); for j:=1 to 3 do
readln(vmax[2]); begin
writeln('Masukkan proporsi truk:'); pktot := pktot + pk[j];
readln(pk[3]); end;
writeln('Masukkan kecepatan minimum truk pkcum[j] := 0;
(dalam meter/detik) :'); pkcumx[j] := pkcum[1]/pktot;
readln(vmin[3]); for j:=2 to 3 do
writeln('Masukkan kecepatan maksimum begin
truk (dalam meter/detik) :'); pkcum[j] := pkcum[j-1]+pk[j];
readln(vmax[3]); pkcumx[j] := pkcum[j]/pktot;
writeln; end;

writeln; mt[1] := 0;
writeln('Lama waktu tinjauan (dalam jam):'); T0 := 0;
readln(t); d0[1] := 0;
r1[1] := 0;
Ts := t*3600; r2[1] := 0;
r3[1] := 0;
{inisiasi} r4[1] := 0;
h[1] := 0; mt[i] := 1;
v[1] := 0; end else if (r3[i]<pkcumx[2]) then begin
TA[1] := 0; m := 2;
TBo[1] := 0; mt[i] := 2;
TBx[1] := 0; end else begin
D[1] := 0; m := 3;
i := 2; mt[i] := 3;
totaldelay := 0; end;

while T0<Ts do {algoritma c}


begin r4[i] := (random(1000)/1000);
v[i] := vmin[m] + (r4[i]*(vmax[m]-vmin[m]));
{algoritma a}
r1[i] := (random(1000)/1000); {algoritma d}
r2[i] := (random(1000)/1000); TBo[i] := (TA[i] + (Lr/v[i]));
stop := 0; if ((v[i-1]<v[i]) and (TBo[i]<TBo[i-1])) then
k := 1; begin
d0[i] := ((h[i])/((v[i]-v[i-1])/(v[i]*v[i-1])));
while stop = 0 do TBx[i] := (TA[i] + (d0[i]/v[i]) + ((Lr-d0[i])/v[i-
begin 1]));
if (r1[i]<fhcumx[k]) then begin end else begin
h[i] := (hmin[k] + (r2[i]*(hmax[k]-hmin[k]))); TBx[i] := TBo[i];
stop := 1; end;
end else begin
k := k+1; D[i] := TBx[i] - TBo[i];
end; T := TA[i];
end; totaldelay := totaldelay+D[i];
i := i+1;
TA[i] := (TA[i-1] + h[i]); end;

{algoritma b} {output}
r3[i] := (random(1000)/1000); writeln('Total delay dari kasus ini adalah
if (r3[i]<pkcumx[1]) then begin ',totaldelay,' detik');
m := 1; readln;
end.
Bahasa Fortran

! A fortran95 program for G95


! By WQY
program main
implicit none

integer :: Lr,i,j,k,l,m,Nheadway,state
real :: T0,t,Ts,totaldelay,pktot,total

real,dimension(:),allocatable::pk,vmin,vmax,r1,r2,r3,r4,h,d0,v,TA,TBo,TBx,D,fhcum,fhcumx,pkcum,pk
cumx,hmin,hmax,fh
integer,dimension(:),allocatable::mt

! Input Data
! Panjang Ruas
write(*,*)"Masukkan panjang ruas studi (dalam meter) :"; read(*,*)Lr

! Data Headway
write(*,*)"Data Headway"
write(*,*)"Jumlah kelas data headway :" ; read(*,*)Nheadway

allocate(hmin(Nheadway))
allocate(hmax(Nheadway))
allocate(fh(Nheadway))

do i=1,Nheadway
write(*,*)"Masukkan batas bawah headway kelas ke-",i," (dalam detik) :"; read(*,*)hmin(i)
write(*,*)"Masukkan batas atas headway kelas ke-",i," (dalam detik) :"; read(*,*)hmax(i)
write(*,*)"Masukkan jumlah kejadian :"; read(*,*)fh(i)
end do

! Data Kendaraan
allocate(pk(3))
allocate(vmin(3))
allocate(vmax(3))

write(*,*)"Data Kendaraan"
write(*,*)"Masukkan proporsi mobil penumpang :"; read(*,*)pk(1)
write(*,*)"Masukkan kecepatan minimum mobil penumpang (dalam meter/detik) :";
read(*,*)vmin(1)
write(*,*)"Masukkan kecepatan maksimum mobil penumpang (dalam meter/detik) :";
read(*,*)vmax(1)
write(*,*)"Masukkan proporsi bus :"; read(*,*)pk(2)
write(*,*)"Masukkan kecepatan minimum bus (dalam meter/detik) :"; read(*,*)vmin(2)
write(*,*)"Masukkan kecepatan maksimum bus (dalam meter/detik) :"; read(*,*)vmax(2)
write(*,*)"Masukkan proporsi truk :"; read(*,*)pk(i)
write(*,*)"Masukkan kecepatan minimum truk (dalam meter/detik) :"; read(*,*)vmin(3)
write(*,*)"Masukkan kecepatan maksimum truk (dalam meter/detik) :"; read(*,*)vmax(3)

! Data Lama Waktu Studi fhcumx(k) = fhcum(k)/total


write(*,*)"Lama waktu tinjauan (dalam end do
jam) :"; read(*,*)t
! Kumulatif Proporsi Kendaraan
Ts = t*3600 allocate(pkcum(3))
allocate(pkcumx(3))
! Inisiasi
! Kumulatif Headway pktot = 0
allocate(fhcum(Nheadway)) do j=1,3
allocate(fhcumx(Nheadway)) pktot = pktot + pk(j)
total = 0 end do
do k=1,Nheadway pkcum(1) = 0
total = total+fh(k) pkcumx(1) = pkcum(1)/pktot
end do do j=2,3
fhcum(1) = 0 pkcum(j) = pkcum(j-1)+pk(j)
fhcumx(1) = fhcum(1)/total pkcumx(j) = pkcum(j)/pktot
do k=2,Nheadway end do
fhcum(k) = fhcum(k-1)+fh(k)
allocate(mt(1000))
allocate(d0(1000)) do while (state.EQ.0)
allocate(r1(1000)) if(r1(i)<fhcumx(k)) then
allocate(r2(1000)) h(i)=(hmin(k)+(r2(i)*(hmax(k)-
allocate(r3(1000)) hmin(k))))
allocate(r4(1000)) state=1
allocate(h(1000)) else
allocate(v(1000)) k = k+1
allocate(TA(1000)) end if
allocate(TBo(1000)) end do
allocate(TBx(1000)) TA(i) = (TA(i-1)+h(i))
allocate(D(1000))
! Algoritma B
mt(1) = 0 r3 = rand()
T0 =0 if(r3(i)<pkcumx(1)) then
d0(1) = 0 m=1
r1(1) = 0 mt(i) = 1
r2(1) = 0 else if (r3(i)<pkcumx(2)) then
r3(1) = 0 m=2
r4(1) = 0 mt(i) = 2
h(1) = 0 else
v(1) = 0 m=3
TA(1) = 0 mt(i) = 3
TBo(1) = 0 end if
TBx(1) = 0
D(1) = 0 ! Algoritma C
i=2 r4(i) = rand()
v(i) = vmin(m) + (r4(i)*(vmax(m)-
do while(T0<Ts) vmin(m)))
! Algoritma A
r1(i) = rand() ! Algoritma D
r2 (i) = rand() TBo(i) = (TA(i)+(Lr/v(i)))
state = 0 if ((v(i-1)<v(i)).AND.(TBo(i)<TBo(i-1)))
k=1 then
d0(i) = ((h(i))/((v(i)-v(i-1)/(v(i)*v(i-
1)))))
TBx(i) = (TA(i)+(d0(i)/v(i))+((Lr-
d0(i)/v(i-1))))
else
TBx(i) = TBo(i)
end if

D(i) = TBx(i) - TBo(i)


T = TA(i)
i = i+1
end do

! Output
totaldelay = 0
do l=0,i
totaldelay=totaldelay+D(l)
end do
write(*,*)"Total delay dari kasus ini
adalah",totaldelay," detik"
end
Bahasa C

#include<stdio.h> float TA[1000];


#include <stdlib.h> float TBo[1000];
#include <time.h> float TBx[1000];
int main() float D[1000];
{ srand(time(NULL));

/*IDENTIFIKASI VARIABLE*/ /*Input Data*/


int L; /*Panjang Ruas*/
int i; printf("Masukkan panjang ruas studi (dalam
int j; meter) :");
int k; scanf("%d",&L);
int l; printf("\n");
int m;
int Nheadway; /*Data Headway*/
float pk[3]; printf("Data Headway \n");
float vmin[3]; printf("Jumlah kelas data headway :");
float vmax[3]; scanf("%d",&Nheadway);
int mt[1000]; printf("\n");
int sum;
int stop; float hmin[Nheadway];
float T; float hmax[Nheadway];
float t; float fh[Nheadway];
float Ts;
float r1[1000]; for(i=0;i<Nheadway;i++)
float r2[1000]; {
float r3[1000]; printf("Masukkan batas bawah headway
float r4[1000]; kelas ke-%d (dalam detik):",i+1);
float h[1000]; scanf("%f",&hmin[i]);
float d0[1000]; printf("Masukkan batas atas headway
float v[1000]; kelas ke-%d (dalam detik):",i+1);
float totaldelay; scanf("%f",&hmax[i]);
printf("Masukkan jumlah kejadian:");
scanf("%f",&fh[i]);
} printf("\n");
printf("\n"); printf("Lama waktu tinjauan (dalam jam)
:");
/*Data Kendaraan*/ scanf("%f",&t);
printf("Data Kendaraan \n");
printf("Masukkan proporsi mobil Ts = t*3600;
penumpang:");
scanf("%f",&pk[0]); /*INISIALISASI*/
printf("Masukkan kecepatan minimum float fhcum[Nheadway];
mobil penumpang (dalam meter/detik) :"); float fhcumx[Nheadway];
scanf("%f",&vmin[0]); sum = 0;
printf("Masukkan kecepatan maksimum for (k=0;k<Nheadway;k++)
mobil penumpang (dalam meter/detik) :"); {
scanf("%f",&vmax[0]); sum = sum + fh[k];
printf("\n"); }
printf("Masukkan proporsi bus:"); fhcum[0]= fh[0];
scanf("%f",&pk[1]); fhcumx[0]= (float) fhcum[0]/sum;
printf("Masukkan kecepatan minimum bus for (k=1;k<Nheadway;k++)
(dalam meter/detik) :"); {
scanf("%f",&vmin[1]); fhcum[k] = fhcum[k-1] + fh[k];
printf("Masukkan kecepatan maksimum bus fhcumx[k] = (float) fhcum[k]/sum;
(dalam meter/detik) :"); }
scanf("%f",&vmax[1]);
printf("\n"); float pkcum[3];
printf("Masukkan proporsi truk :"); float pkcumx[3];
scanf("%f",&pk[2]); float pktot = 0;
printf("Masukkan kecepatan minimum truk for(j=0;j<3;j++)
(dalam meter/detik) :"); {
scanf("%f",&vmin[2]); pktot = pktot + pk[j];
printf("Masukkan kecepatan maksimum }
truk (dalam meter/detik) :"); pkcum[0] = 0;
scanf("%f",&vmax[2]); pkcumx[0] = (float) pkcum[0]/sum;
printf("\n"); for (j=1;j<3;j++)
{
pkcum[j] = pkcum[j-1]+pk[j]; stop = 1;
pkcumx[j] = (float) pkcum[j]/sum; }
} else
{
mt[0] = 0; k = k + 1;
T = (float) 0; }
d0[0] = (float) 0; } while (stop!=1);
r1[0] = (float) 0;
r2[0] = (float) 0; TA[i] = (float) (TA[i-1] + h[i]);
r3[0] = (float) 0;
r4[0] = (float) 0; /*ALGORITMA B*/
h[0] = (float) 0; r3[i] = (float) rand()/RAND_MAX;
v[0] = (float) 0; if (r3[i]<pkcumx[0])
TA[0] = (float) 0; {
TBo[0] = (float) 0; m = 0;
TBx[0] = (float) 0; mt[i] = 0;
D[0] = (float) 0; }
i = 1; else if (r3[i]<pkcumx[1])
{
while (T<Ts) m = 1;
{ mt[i] = 1;
}
/*ALGORITMA A*/ else
r1[i] = (float) rand()/RAND_MAX; {
r2[i] = (float) rand()/RAND_MAX; m = 2;
stop= 0; mt[i] = 2;
k = 0; }

do /*ALGORITMA C*/
{ r4[i] = (float) rand()/RAND_MAX;
if (r1[i]<fhcumx[k]) v[i] = (float) vmin[m] + (r4[i]*(vmax[m]-
{ vmin[m]));
h[i] = (float) (hmin[k] + (r2[i]*(hmax[k]-
hmin[k]))); /*ALGORITMA D*/
TBo[i] = (float) (TA[i] + (L/v[i])); i = i + 1;
if ((v[i-1]<v[i]) && (TBo[i]<TBo[i-1])) }
{
d0[i] = (float) ((h[i])/((v[i]-v[i-1])/(v[i]*v[i- /*OUTPUT*/
1]))); totaldelay = 0;
TBx[i] = (float) (TA[i] + (d0[i]/v[i]) + ((L- for(l=0;l<i;l++)
d0[i])/v[i-1])); {
} totaldelay=totaldelay+D[l];
else }
{ printf("Total delay dari kasus ini adalah %f
TBx[i] = (float) TBo[i]; detik", totaldelay);
} return 0;
D[i] = (float) TBx[i] - TBo[i]; }
T = (float) TA[i];
Tugas 3

Pada tugas ini diminta membuat program untuk mencari keuntungan per hari dari penjualan durian.
Keuntungan didapatkan dari pendapatan perhari hasil penjualan durian dikurangi dengan
pengeluaran. Algoritma dari program ini adalah sebagai berikut.

START A

k=4
IDENTIFIKASI VARIABLE
i,j,k,l,T,hargabeli,hargajual,state,xcum,
ycum,modal,biayatransport, biayasimpan,
oppcost,profit,fx,xmin,xmax,fxcum,fxcumx,
fy,ymin,ymax,fycum,fycumx,r1,r2,r3,r4,
stoko,stokx,totalpenjualan,kasB,kasC,order,
ALGORITMA A
intangibles,x,y,m,p

LOOPING ALGORITMA B
k = k +1
INPUT
T, fx, xmin, xmax, fy, ymin,
ymax, m, p
ALGORITMA C

INISIASI AWAL
hargajual = 65000;
hargabeli = 35000; IF CONDITIONAL
TIDAK
biayatransport = 200000; k=T
biayasimpan = 2500;
oppcost = 4000;
modal = 4500000; YA
stokx[3] = 100;
totalpenjualan[3] = 0;
profit = (kasC[l]-modal)/T)
order[1] = 100; order[2] = 50;
order[3] = 50;

A END

Gambar 9 Algoritma Program


START

INISIASI AWAL
generate r1,r2,r3,r4
l=k

stoko[k] = stokx[k-1] + order[k-3]

END

Gambar 10 Algoritma A

START

INISIASI AWAL
state = 0
j=1

IF CONDITIONAL
TIDAK j = j+1
r1[k]<fxcumx[j]

TIDAK

YA

x[k] = xmin[j] + (r2[k]*(xmax[j]-xmin[j]))

IF CONDITIONAL
stop = 1

END

Gambar 11 Algoritma B1
START

INISIASI AWAL
state = 0
j=1

IF CONDITIONAL
TIDAK j = j+1
r3[k]<fycumx[j]

TIDAK

YA

y[k] = ymin[j] + (r4[k]*(ymax[j]-ymin[j]))

IF CONDITIONAL
stop = 1

END

Gambar 12 Algoritma B2
START

IF CONDITIONAL
TIDAK
(x[k]*y[k]) < stoko[k]

YA

totalpenjualan[k] = stoko[k];
totalpenjualan[k] = x[k]*y[k];
intangibles[k] = ((x[k]*y[k]) - stoko[k])*oppcost;
stokx[k] = stoko[k] - (x[k]*y[k]);
stokx[k] = 0;

kasB[k] = kasC[k-1] + (totalpenjualan[k]*hargajual);

END

Gambar 13 Algoritma B3
START

IF CONDITIONAL
stokx[k] < m[1]

YA
TIDAK

IF CONDITIONAL
YA
stokx[k ]> m[2]

TIDAK

order[k+3] = p[3] order[k+3] =p[2] order[k+3] = p[1]

kasC[k] = kasB[k] - (order[k]*hargabeli) – biayatransport - (stokx[k]*biayasimpan - intangibles[k])

END

Gambar 14 Algortima C

Algoritma di atas dapat dijelaskan sebagai berikut :

1. Identifikasi variabel-variabel yang diperlukan dalam permasalahan ini.


a. i,j,k merupakan variabel yang menunjukkan penomoran hari;
b. l, merupakan variabel pembantu penomoran;
c. T, merupakan variabel yang menunjukkan lama hari waktu studi;
d. hargabeli, merupakan variabel yang menunjukkan besar harga beli durian;
e. hargajual, merupakan variabel yang menunjukkan besar harga jual durian;
f. state, merupakan variabel pembantu untuk menunjukkan kondisi;
g. modal, merupakan variabel yang menunjukkan besar uang sisa yang ada pada hari
sebelumnya sebelum studi dimulai;
h. biayatransport, merupakan variabel yang menunjukkan besar biaya transport durian;
i. biayasimpan, merupakan variabel yang menunjukkan besar biaya penyimpanan
durian;
j. oppcost, merupakan variabel yang menunjukkan besar kerugian diakibatkan
pelanggan yang tidak dapat terlayani;
k. profit, merupakan variabel yang menunjukkan besar keuntungan per hari;
l. x, merupakan variabel yang menunjukkan banyak pelanggan perhari;
m. xmin, merupakan variabel yang menunjukkan pelanggan minimal perhari;
n. xmax, merupakan variabel yang menunjukkan pelanggan maksimal perhari;
o. fx, merupakan variabel yang menunjukkan frekuensi di setiap kelas banyak pelanggan;
p. y, merupakan variabel yang menunjukkan banyak durian yang dibeli pelanggan
perhari;
q. ymin, merupakan variabel yang menunjukkan banyak durian yang dibeli minimal per
pelanggani;
r. ymax, merupakan variabel yang menunjukkan banyak durian yang dibeli maksimal per
pelanggan;
s. fy, merupakan variabel yang menunjukkan frekuensi di setiap kelas banyak durian
yang dibeli;
t. r1, r2, r3, dan r4, merupakan variabel yang menunjukkan random number;
u. stoko, merupakan variabel yang menunjukkan stok awal (stok buka toko);
v. stokx, merupakan variabel yang menunjukkan stok akhir (stok tutup toko);
w. totalpenjualan, merupakan variabel yang menunjukkan banyaknya durian yang terjual
perhari;
x. kasB, merupakan variabel yang menunjukkan besar pendapatan perhari ditambah
dengan sisa uang pada hari sebelumnya;
y. kasC, merupakan variabel yang menunjukkan pendapatan perhari dikurang dengan
pemesanan stok selanjutnya, biaya penyimpanan, dan biaya kehilangan (pendapatan
murni perhari);
z. order, merupakan variabel yang menunjukkan banyaknya pemesanan durian untuk
stok 3 hari kedepan;
aa. intangibles, merupakan variabel yang menunjukkan total kerugian akibat pelanggan
yang tidak terlayani;
bb. m, merupakan variabel yang menunjukkan batas stok;
cc. p, merupakan variabel yang menunjukkan besar stok yang harus dipesan sesuai batas;
2. Input data yang diperlukan seperti lama waktu studi, frekuensi di masing-masing kelas rata-
rata durian yang dibeli oleh setiap pembeli, frekuensi di masing-masing kelas jumlah pembeli
dalam satu hari, rata-rata durian yang dibeli oleh setiap pembeli minimum dan maksimum di
setiap kelas, jumlah pembeli minimum dan maksimum dalam satu hari di setiap kelas, batas
total stok saat tutup took di setiap kelas, dan total durian yang dipesan saat tutup took di
setiap kelas .
3. Tetapkan kondisi awal, hargajual = 65000, hargabeli = 35000, biayatransport = 200000,
biayasimpan = 2500, oppcost = 4000, modal = 4500000, stokx[3] = 100, totalpenjualan[3] = 0,
order[1] = 100; order[2] = 50, order[3] = 50.
4. Tentukan nilai k = 4 sebagai inisiasi untuk melakukan iterasi. K ditetapkan karena dianggap
studi dimulai setelah hari ke 4 (hari 1-3 untuk penyetokan saja). Proses dilanjutkan secara
looping dengan batas kondisi hingga T.
5. Selanjutnya dilanjutkan ke algoritma A. Diawali dengan membangkitkan bilangan acak r1, r2,
r3, dan r4 serta menetapkan l = k. Lalu stok yang tersedia dihitung dengan menggunakan
persamaan stoko[k] = stokx[k-1] + order[k-3].
6. Selanjutnya dilanjutkan ke algoritma B1 dengan kondisi awal state = 0 dan j = 1. Dilakukan
pengondisian dengan syarat r1[k]<fxcumx[j]. Jika :
a. Ya, maka hitung banyak pelanggan dengan rumus x[k] = xmin[j] + (r2[k]*(xmax[j]-
xmin[j])) lalu ubah nilai state menjadi 1.
b. Tidak, maka nilai j menjadi j+1.
Apabila nilai state masih 0 maka ulangi proses 6. Apabila nilai stop = 1, looping selesai.
7. Selanjutnya dilanjutkan ke algoritma B2 dengan kondisi awal state = 0 dan j = 1. Dilakukan
pengondisian dengan syarat r3[k]<fycumx[j]. Jika :
a. Ya, maka hitung banyak durian yang dibeli dengan rumus y[k] = ymin[j] +
(r4[k]*(ymax[j]-ymin[j])) lalu ubah nilai state menjadi 1.
b. Tidak, maka nilai j menjadi j+1.
Apabila nilai state masih 0 maka ulangi proses 7. Apabila nilai stop = 1, looping selesai.
8. Kemudian dilanjutkan ke algoritma B3. Dilakukan pengecekan terhadap totalpenjualan
dengan stok yang tersedia. Jika (x[k]*y[k]) < stoko[k] :
a. Ya, maka banyak durian yang terjual adalah totalpenjualan[k] = x[k]*y[k] dan stok sisa
adalah stokx[k] = stoko[k] - (x[k]*y[k]);
b. Tidak, maka banyak durian yang terjual adalah totalpenjualan[k] = stoko[k]. Namun
ada pelanggan yang tidak dapat dilayani sehingga terdapat intangibles[k] = ((x[k]*y[k])
- stoko[k])*oppcost, serta stok yang tersisa adalah stokx[k] = 0. .
9. Kemudian dilakukan perhitungan terhadap uang yang tersimpan sementara dengan
menggunakan rumus kasB[k] = kasC[k-1] + (totalpenjualan[k]*hargajual).
10. Selanjutnya, lakukan proses algoritma C. Dilakukan pengecekan terhadap stok yang tersedia
untuk menentukan berapa banyak durian yang akan dipesan untuk stok. Jika :
a. Stokx[k] < m[1] maka yang dipesan adalah sebesar order[k] = p[1];
b. m[1] < stokx[k] < m[2] maka yang dipesan adalah sebesar order[k] =p[2];
c. Stokx[k] > m[2] maka yang dipesan adalah sebesar order[k] = p[1];
11. Selanjutnya dilakukan perhitungan terhadap kas sisa dengan menggunakan rumus kasC[k] =
kasB[k] - (order[k]*hargabeli) – biayatransport - (stokx[k]*biayasimpan - intangibles[k]).
12. Tahap terakhir adalah menghitung total profit dibagi dengan jumlah waktu studi sehingga
didapatkan besar keuntungan perhari dengan menggunakan persamaan profit = (kasC[l]-
modal)/T) .
Bahasa Pascal

program tugas3; writeln('Masukkan lama waktu studi (dalam


hari) :');
var readln(T);
i,j,k,l,T,hargabeli,hargajual,state,xcum,ycum, writeln;
modal: integer;
biayatransport,biayasimpan,oppcost : integer; {Inisiasi}
profit : real; xcum := 0;
fx : array[1..6] of integer = for i:=1 to 6 do
(30,15,24,15,50,45); begin
xmin : array[1..6] of integer = xcum := xcum + fx[i];
(0,15,30,45,60,75); end;
xmax : array[1..6] of integer =
(15,30,45,60,75,90); fxcum[1]:= fx[1];
fxcum : array[1..6] of integer; fxcumx[1]:= fxcum[1]/xcum;
fxcumx : array[1..6] of real;
fy : array[1..6] of integer = for i:=2 to 6 do
(20,35,10,15,43,25); begin
ymin : array[1..6] of integer = (1,4,7,10,13,16); fxcum[i]:=fxcum[i-1]+fx[i];
ymax : array[1..6] of integer = fxcumx[i]:=fxcum[i]/xcum;
(4,7,10,13,16,19); end;
fycum : array[1..6] of integer;
fycumx : array[1..6] of real; ycum := 0;
r1,r2,r3,r4 : array[1..1000] of real; for i:=1 to 6 do
stoko,stokx : array[1..1000] of real; begin
totalpenjualan : array[1..1000] of real; ycum := ycum + fy[i];
kasB,kasC,order,intangibles : array[1..1000] end;
of real;
x,y : array[1..1000] of real; fycum[1]:=fy[1];
m : array[1..2] of integer =(10,50); fycumx[1]:= fycum[1]/ycum;
p : array[1..3] of integer =(100,50,25);
for i:=2 to 6 do
begin begin
{Input lama waktu studi} fycum[i]:=fycum[i-1]+fy[i];
fycumx[i]:=fycum[i]/ycum;
end; order[1] := 100;
order[2] := 50;
{Initial Condition} order[3] := 50;
hargajual := 65000;
hargabeli := 35000; for i:= 1 to 3 do
biayatransport := 200000; begin
biayasimpan := 2500; intangibles[i] := 0;
oppcost := 4000; end;
modal := 4500000;

for i:= 1 to 3 do for k:=4 to (T+3) do


begin begin
r1[i] := 0; l:=k;
r2[i] := 0; r1[k] := (random(1000)/1000);
r3[i] := 0; r2[k] := (random(1000)/1000);
r4[i] := 0; r3[k] := (random(1000)/1000);
end; r4[k] := (random(1000)/1000);

{Update stok}
stokx[3] := 100; stoko[k] := stokx[k-1]+order[k-3];
totalpenjualan[3] := 0;
{Transaksi}
for i:= 1 to 3 do state := 0;
begin j := 1;
x[i] := 0; while state = 0 do
y[i] := 0; begin
end; if (r1[k]<fxcumx[j]) then begin
x[k] := xmin[j]+(r2[k]*(xmax[j]-xmin[j]));
for i:= 1 to 3 do state := 1;
begin end else begin
kasB[i] := modal; j := j+1;
kasC[i] := modal; end;
end; end;
state := 0; kasC[k] := kasB[k]-(order[k]*hargabeli)-
j := 1; biayatransport-(stokx[k]*biayasimpan-
while state = 0 do intangibles[k]);
begin
if (r3[k]<fycumx[j]) then begin end;
y[k] := ymin[j]+(r4[k]*(ymax[j]-ymin[j]));
state := 1; profit:= round((kasC[l]-modal)/T);
end else begin
j := j+1;
end; {Output}
end; writeln('R1:');
writeln;
if ((x[k]*y[k])<stoko[k]) then begin for i:= 1 to l do
totalpenjualan[k] := x[k]*y[k]; begin
stokx[k] := stoko[k]-(x[k]*y[k]); writeln(r1[i]);
end else begin end;
totalpenjualan[k] := stoko[k]; writeln;
intangibles[k]:=((x[k]*y[k])- writeln('R2:');
stoko[k])*oppcost; for i:= 1 to l do
stokx[k] := 0; begin
end; writeln(r2[i]);
end;
kasB[k] := kasC[k- writeln;
1]+(totalpenjualan[k]*hargajual); writeln('R3:');
for i:= 1 to l do
{Tutup Toko} begin
if(stokx[k]<m[1]) then begin writeln(r3[i]);
order[k]:= p[1]; end;
end else if (stokx[k]>m[2]) then begin writeln;
order[k]:= p[3]; writeln('R4:');
end else begin for i:= 1 to l do
order[k]:=p[2]; begin
end; writeln(r4[i]);
end; begin
writeln; writeln(round(y[i]));
writeln('stok buka toko:'); end;
for i:= 1 to l do writeln;
begin writeln('Kas B:');
writeln(round(stoko[i])); for i:= 1 to l do
end; begin
writeln; writeln(round(kasB[i]));
writeln('stok tutup toko:'); end;
for i:= 1 to l do writeln;
begin writeln('Kas C:');
writeln(round(stokx[i])); for i:= 1 to l do
end; begin
writeln; writeln(round(kasC[i]));
writeln('Total Penjualan:'); end;
for i:= 1 to l do writeln;
begin writeln('order stok:');
writeln(round(totalpenjualan[i])); for i:= 1 to l do
end; begin
writeln; writeln(round(order[i]));
writeln('Total Order:'); end;
for i:= 1 to l do writeln;
begin writeln('Intangibles:');
writeln(round(order[i])); for i:= 1 to l do
end; begin
writeln; writeln(round(intangibles[i]));
writeln('x:'); end;
for i:= 1 to l do
begin writeln;
writeln(round(x[i])); writeln;
end; writeln('Profit:');
writeln; writeln(trunc(profit));
writeln('y:');
for i:= 1 to l do readln;
end.
Bahasa Fortran

! A fortran95 program for G95


! By WQY
program main
implicit none
!Identifikasi variabel
integer :: i,j,k,l,T,xcum,ycum,modal,profit
integer :: hargabeli,hargajual,state
integer :: biayatransport,biayasimpan,oppcost
real, dimension(:), allocatable :: r1,r2,r3,r4,stoko,stokx,totalpenjualan
integer, dimension(:), allocatable :: x,y,kasB,kasC,order,intangibles
integer, dimension(1:6) :: fx = (/ 30,15,24,15,50,45 /)
integer, dimension(1:6) :: xmin = (/ 0,15,30,45,60,75 /)
integer, dimension(1:6) :: xmax = (/ 15,30,45,60,75,90 /)
integer, dimension(1:6) :: fy = (/ 20,35,10,15,43,25 /)
integer, dimension(1:6) :: ymin = (/ 1,4,7,10,13,16 /)
integer, dimension(1:6) :: ymax = (/ 4,7,10,13,16,19 /)
integer, dimension(1:6) :: fxcum,fycum
real, dimension(1:6) :: fxcumx,fycumx
integer, dimension(1:2) :: m = (/ 10,50 /)
integer, dimension(1:3) :: p = (/ 100,50,25 /)

! Inisiasi end do
xcum = 0
do i=1,6 ycum = 0
xcum = xcum + fx(i) do i=1,6
end do ycum = ycum + fy(i)
end do
fxcum(1) = fx(1)
fxcumx(1) = fxcum(1)/xcum fycum(1) = fy(1)
do i=2,6 fycumx(1) = fycum(1)/ycum
fxcum(i) = fxcum(i-1)+fx(i) do i=2,6
fxcumx(i) = fxcum(i)/xcum fycum(i) = fycum(i-1)+fy(i)
fycumx(i) = fycum(i)/ycum
end do do k=4,(T+3)
l=k
! Initial Condition r1(k) = rand()
hargajual = 65000 r2(k) = rand()
hargabeli = 35000 r3(k) = rand()
biayatransport = 200000 r4(k) = rand()
biayasimpan = 2500 state = 0
oppcost = 4000
modal = 4500000 ! Update Stok
stoko(k) = stokx(k-1) + order(k-3)
do i=1,3
r1[i]= 0 ! Transaksi
r2[i]= 0 do j=1,6
r3[i]= 0 if (r1(k)<fxcumx(j)) then
r4[i]= 0 x(k) = xmin(j) + (r2(k)*(xmax(j)-xmin(j)))
end do state = 1
end if
do i=1,3
stokx[i]= 100 if (state==1) then
totalpenjualan[i]= 0 stop
end do end if
end do
do i=1,3
x[i]= 0 do j=1,6
y[i]= 0 if (r3(k)<fycumx(j)) then
kasB[i]= modal y(k) = ymin(j) + (r4(k)*(ymax(j)-ymin(j)))
kasC[i]= modal state = 1
intangibles[i]= 0 end if
end do
if (state==1) then
order[0]= 100 stop
order[1]= 50 end if
order[2]= 50 end do
write(*,*) r1(i)
if ((x(k)*y(k)) < stoko(k)) then end do
totalpenjualan(k) = x(k) * y(k) print '(/"")'
stokx(k) = stoko(k) - (x(k)*y(k))
else write(*,*) "/R2:"
totalpenjualan(k) = stoko(k) do i=1,l
intangibles(k) = ((x(k)*y(k)) - stoko(k)) * write(*,*) r2(i)
oppcost end do
stokx(i) = 0 print '(/"")'
end if
write(*,*) "/R3:"
kasB(k) = kasC(k-1) + do i=1,l
(totalpenjualan(k)*hargajual) write(*,*) r3(i)
end do
! Tutup Toko print '(/"")'
if (stokx(k) < m(1)) then
order(k) = p(1) write(*,*) "/R4:"
else if (stokx(k) > m(2)) then do i=1,l
order(k) = p(3) write(*,*) r4(i)
else end do
order(k) = p(2) print '(/"")'
end if
write(*,*) "/Stok Buka Toko:"
kasC(k) = kasB(k) - (order(k)*hargabeli) - do i=1,l
biayatransport - (stokx(k)*biayasimpan) - write(*,*) stoko(i)
intangibles(k) end do
print '(/"")'
end do
write(*,*) "/Stok Tutup Toko:"
profit = (kasC(l) - modal)/T do i=1,l
write(*,*) stokx(i)
! OUTPUT end do
write(*,*) "/R1:" print '(/"")'
do i=1,l
write(*,*) "/Total Penjualan:"
do i=1,l write(*,*) "/Kas C:"
write(*,*) totalpenjualan(i) do i=1,l
end do write(*,*) kasC(i)
print '(/"")' end do
print '(/"")'
write(*,*) "/x:"
do i=1,l write(*,*) "/Order:"
write(*,*) x(i) do i=1,l
end do write(*,*) order(i)
print '(/"")' end do
print '(/"")'
write(*,*) "/y:"
do i=1,l write(*,*) "/Intangibles:"
write(*,*) y(i) do i=1,l
end do write(*,*) intangibles(i)
print '(/"")' end do
print '(/"")'
write(*,*) "/Kas B:"
do i=1,l write(*,*) "/Profit:"
write(*,*) kasB(i) write(*,*) profit
end do
print '(/"")' end
Bahasa C

#include <stdio.h> int x[1000];


#include <stdlib.h> int y[1000];
#include <time.h> int m[2]={10,50};
int p[3]={100,50,25};
srand(time(NULL));
int main()
{
int /*Input lama waktu studi*/
i,j,k,l,T,hargabeli,hargajual,state,xcum,ycum, printf("Masukkan lama waktu studi (dalam
modal; hari) :");
int biayatransport,biayasimpan,oppcost; scanf("%d",&T);
int profit; printf("\n");
float r1[1000];
float r2[1000]; /*Inisiasi*/
float r3[1000]; xcum = 0;
float r4[1000]; for (i=0;i<6;i++)
int stoko[1000]; {
int stokx[1000]; xcum = xcum+fx[i];
int totalpenjualan[1000]; }
int fx[6]={30,15,24,15,50,45};
int xmin[6]={0,15,30,45,60,75}; fxcum[0]=fx[0];
int xmax[6]={15,30,45,60,75,90}; fxcum[0]=(float) fxcum[0]/xcum;
int fxcum[6];
float fxcumx[6]; for (i=1;i<6;i++)
int fy[6]={20,35,10,15,43,25}; {
int ymin[6]={1,4,7,10,13,16}; fxcum[i]=fxcum[i-1]+fx[i];
int ymax[6]={4,7,10,13,16,19}; fxcumx[i]=(float)fxcum[i]/xcum;
int fycum[6]; }
float fycumx[6];
int kasB[1000]; ycum = 0;
int kasC[1000]; for (i=0;i<6;i++)
int order[1000]; {
int intangibles[1000]; ycum = ycum+fy[i];
} for (i=0;i<3;i++)
{
fycum[0]=fy[0]; x[i]= (int) 0;
fycum[0]=(float)fycum[0]/ycum; y[i]= (int) 0;
}
for (i=1;i<6;i++)
{ for (i=0;i<3;i++)
fycum[i]=fycum[i-1]+fy[i]; {
fycumx[i]=(float)fycum[i]/ycum; kasB[i]= (int) modal;
} kasC[i]= (int) modal;
}
/*Initial Condition*/
hargajual = 65000; order[0]= (int) 100;
hargabeli = 35000; order[1]= (int) 50;
biayatransport = 200000; order[2]= (int) 50;
biayasimpan = 2500;
oppcost = 4000; for(i=0;i<3;i++)
modal = 4500000; {
intangibles[i]= (int) 0;
for(i=0;i<3;i++) }
{
r1[i]=(float) 0; for (k=3;k<(T+3);k++)
r2[i]=(float) 0; {
r3[i]=(float) 0; l=k;
r4[i]=(float) 0; r1[k]=(float)rand()/RAND_MAX;
} r2[k]=(float)rand()/RAND_MAX;
r3[k]=(float)rand()/RAND_MAX;
for(i=0;i<3;i++) r4[k]=(float)rand()/RAND_MAX;
{
stokx[i]= (int) 100; /*Update Stok*/
totalpenjualan[i]= (int) 0; stoko[k]=(int) stokx[k-1]+order[k-3];
}
/*Transaksi*/
state = 0;
j = 0; stokx[k] = (int) stoko[k] - (x[k]*y[k]);
do }
{ else
if(r1[k]<fxcumx[j]) {
{ totalpenjualan[k]=(int) stoko[k];
x[k]=(int) (xmin[j]+(r2[k]*(xmax[j]- intangibles[k]=(int)((x[k]*y[k])-
xmin[j]))); stoko[k])*oppcost;
state = 1; stokx[k] = 0;
} }
else
{ kasB[k] = (int) kasC[k-
j=j+1; 1]+(totalpenjualan[k]*hargajual);
}
}while(state!=1); /*Tutup Toko*/
if (stokx[k]<m[0])
state = 0; {
j = 0; order[k] = (int) p[0];
do }
{ else if (stokx[k]>m[1])
if(r3[k]<fycumx[j]) {
{ order[k] = (int) p[2];
y[k]=(int) (ymin[j]+(r4[k]*(ymax[j]- }
ymin[j]))); else
state = 1; {
} order[k] = (int) p[1];
else }
{
j=j+1; kasC[k] = (int) kasB[k]-
} (order[k]*hargabeli)- biayatransport -
}while(state!=1); (stokx[k]*biayasimpan) - intangibles[k];
}
if ((x[k]*y[k])<stoko[k])
{ profit = (int)(kasC[l]-modal)/T;
totalpenjualan[k] = (int) x[k]*y[k];
/*Output*/ printf("\n%d",stokx[i]);
printf("\n\nR1:"); }
for (i=0;i<(l+1);i++)
{ printf("\n\nTotal Penjualan:");
printf("\n%f",r1[i]); for (i=0;i<(l+1);i++)
} {
printf("\n%d",totalpenjualan[i]);
printf("\n\nR2:"); }
for (i=0;i<(l+1);i++)
{ printf("\n\nx:");
printf("\n%f",r2[i]); for (i=0;i<(l+1);i++)
} {
printf("\n%d",x[i]);
printf("\n\nR3:"); }
for (i=0;i<(l+1);i++)
{ printf("\n\ny:");
printf("\n%f",r3[i]); for (i=0;i<(l+1);i++)
} {
printf("\n%d",y[i]);
printf("\n\nR4:"); }
for (i=0;i<(l+1);i++)
{ printf("\n\nKas B:");
printf("\n%f",r4[i]); for (i=0;i<(l+1);i++)
} {
printf("\n%d",kasB[i]);
printf("\n\nStok buka toko:"); }
for (i=0;i<(l+1);i++)
{ printf("\n\nKas C:");
printf("\n%d",stoko[i]); for (i=0;i<(l+1);i++)
} {
printf("\n%d",kasC[i]);
printf("\n\nStok tutup toko:"); }
for (i=0;i<(l+1);i++)
{ printf("\n\nOrder stok:");
for (i=0;i<(l+1);i++) }
{
printf("\n%d",order[i]); printf("\n\nProfit:");
} printf("\n%d",profit);

printf("\n\nIntangibles:");
for (i=0;i<(l+1);i++) return 0;
{ }
printf("\n%d",intangibles[i]);
Tugas 4
Pada tugas ini diminta membuat program untuk mencari delay rata-rata yang dialami kapal saat akan
melakukan bongkat muat di sebuah dermaga. Delay yang dihitung merupakan perbedaan waktu
antara kondisi dermaga kosong dan terisi saat kapal bersangkutan datang. Algoritma dari program ini
adalah sebagai berikut.

START A

ALGORITMA A
IDENTIFIKASI VARIABLE
i, j, k, l, htotal, fh, hmin, hmax, fhcum, fhcumx,
h, tbmtotal, ftbm, tbmmin, tbmmax, ftbmcum, ALGORITMA B
ftbmcumx, tbm, state, Ts, T, DR, r1, r2, r3, r4,
TA, tAB, TB, Tout, D, TD LOOPING
ALGORITMA C
i = i +1

ALGORITMA D

INPUT T = TA[i]
fh, hmin, hmax, ftbm, tbmmin,
tbmmax, Ts
IF CONDITIONAL
YA
T < Ts

INISIASI AWAL
T[0] = 0; DR[0] = 0; r1[0] = 0; r2[0] = 0; TIDAK
r3[0] = 0; r4[0] = 0; h[0] = 0; tbm[0] = 0;
TA[0] = 0; tAB[0] = 0; TB[0] = 0; Tout[0] =
0; D[0] = 0; TD[0] = 0; I = 1;
DR = TD[j]/j

A END

Gambar 15 Algoritma Program


START

INISIASI AWAL
Generate r1, r2
state = 0 ; k = 0

IF CONDITIONAL
TIDAK k = k+1
r1[i]<fhcumx[k]

TIDAK

YA

h[i] = hmin[k] + (r2[i]*(hmax[k]-hmin[k]))


state = 1

IF CONDITIONAL
state = 1

YA

TA[i] = TA[i-1] + h[i]


tAB[i] = 0.05

END

Gambar 16 Algoritma A
START

IF CONDITIONAL
TIDAK
TA[i] > Tout[i-1]

YA

TB[i] = TA[i] + tAB[i] TB[i] = Tout[i-1] + tAB[i]

END

Gambar 17 Algoritma B

START

INISIASI AWAL
Generate r3, r4
state = 0 ; k = 0

IF CONDITIONAL
TIDAK k = k+1
r3[i]<ftbmcumx[k]

TIDAK

YA

tbm[i] = tbmmin[k] + (r4[i]*(tbmmax[k]-tbmmin[k]))


state = 1

IF CONDITIONAL
state = 1

YA

Tout[i] = TB[i] + tbm[i]

END

Gambar 18 Algoritma C
START

D[i] = TB[i] - TA[i] - tAB[i]


TD[i] = TD[i-1] + D[i]

END

Gambar 19 Algortima D

Algoritma di atas dapat dijelaskan sebagai berikut :

7. Identifikasi variabel-variabel yang diperlukan dalam permasalahan ini.


a. i, merupakan variabel yang menunjukkan penomoran kapal;
b. j, merupakan variabel pembantu berjalannya algoritma;
c. k, merupakan variabel yang menunjukkan penomoran kelas headway;
d. htotal, merupakan variabel yang menunjukkan penjumlahan seluruh kelas headway;
e. fh, merupakan variabel yang menunjukkan frekuensi di setiap kelas headway;
f. hmin, merupakan variabel yang menunjukkan headway minimal kapal;
g. hmax, merupakan variabel yang menunjukkan headway maksimal kapal;
h. fhcum, merupakan variabel yang menunjukkan frekuensi kumulatif dari kelas headway;
i. fhcumx, merupakan variabel yang menunjukkan frekuensi kumulatif dari kelas headway
yang sudah disesuaikan antara rentang 0 sampai 1;
j. h, merupakan variabel yang menunjukkan headway kapal;
k. tbmtotal, merupakan variabel yang menunjukkan penjumlahan seluruh kelas durasi
bongkar muat kapal;
l. ftbm, merupakan variabel yang menunjukkan frekuensi di setiap kelas durasi bongkar
muat kapal;
m. tbmmin, merupakan variabel yang menunjukkan durasi bongkar muat kapal minimal;
n. tbmmax, merupakan variabel yang menunjukkan durasi bongkar muat kapal maksimal;
o. ftbmcum, merupakan variabel yang menunjukkan frekuensi kumulatif dari kelas durasi
bongkar muat kapal;
p. ftbmcumx, merupakan variabel yang menunjukkan frekuensi kumulatif dari kelas durasi
bongkar muat kapal yang sudah disesuaikan antara rentang 0 sampai 1;
q. tbm, merupakan variabel yang menunjukkan durasi bongkar muat kapal;
r. state, merupakan variabel pembantu untuk penentuan kondisi;
s. T dan Ts, merupakan variabel yang menunjukkan waktu operasi dermaga;
t. r1, merupakan variabel yang menunjukkan random number ke-1;
u. r2, merupakan variabel yang menunjukkan random number ke-2;
v. r3, merupakan variabel yang menunjukkan random number ke-3;
w. r4, merupakan variabel yang menunjukkan random number ke-4;
x. TA, merupakan variabel yang menunjukkan waktu di saat kapal melintas di titik A;
y. tAB, merupakan variabel yang menunjukkan durasi saat kapal melintas dari titik A ke titik
B;
z. TB, merupakan variabel yang menunjukkan waktu di saat kapal melintas di titik B;
aa. Tout, merupakan variabel yang menunjukkan waktu di saat kapal melintas di titik keluar;
bb. D, merupakan variabel yang menunjukkan waktu tundaan (delay) yang terjadi;
cc. TD, merupakan variabel yang menunjukkan total waktu tundaan (delay) yang terjadi;
dd. DR, merupakan variabel yang menunjukkan rata-rata waktu tundaan (delay) yang terjadi.

8. Input data yang diperlukan seperti lama waktu studi, frekuensi di masing-masing kelas
headway, kelas durasi bongkar muat kapal, headway minimum dan maksimum di setiap kelas,
dan durasi bongkar muat kapal minimum dan maksimum di setiap kelas.
9. Tetapkan kondisi awal, T[0] = 0; DR[0] = 0; r1[0] = 0; r2[0] = 0; r3[0] = 0; r4[0] = 0; h[0] = 0;
tbm[0] = 0; TA[0] = 0; tAB[0] = 0; TB[0] = 0; Tout[0] = 0; D[0] = 0; TD[0] = 0; i = 1.
10. Tentukan nilai i = 1 sebagai inisiasi untuk melakukan iterasi. Proses dilanjutkan secara looping
dengan batas kondisi hingga Ts.
11. Selanjutnya dilanjutkan ke algoritma A. Diawali dengan membangkitkan bilangan acak r1, r2,
serta menetapkan state = 0 dan k = 0.
12. Selanjutnya dilakukan pengondisian dengan syarat r1[i] < fhcumx[k]. Jika :
a. Ya, maka hitung headway dengan rumus h[i] = hmin[k] + (r2[i]*(hmax[k]-hmin[k])),
dan tetapkan state = 1.
b. Tidak, maka nilai k menjadi k+1.
Apabila nilai state masih 0 maka ulangi proses 6. Apabila nilai state = 1, maka hitung nilai TA
dengan rumus TA[i] = TA[i-1] + h[i] dan juga menetapkan tAB[i] = 0.05.
13. Selanjutnya dilanjutkan ke algoritma B. Dilakuka pengondisian dengan syarat TA[i] > Tout[i-1].
Jika :
a. Ya, maka hitung TB[i] = TA[i] + tAB[i].
b. Tidak, maka TB[i] = Tout[i-1] + tAB[i].
14. Kemudian dilanjutkan ke algoritma C diawali dengan membangkitkan nilai acak r3 dan r4,
serta menetapkan state = 0 dan k = 0. Dilakukan pengondisian dengan syarat r3[i] <
ftbmcumx[k]. Jika :
a. Ya, maka hitung headway dengan rumus tbm[i] = tbmmin[k] + (r4[i]*(tbmmax[k]-
tbmmin[k])), dan tetapkan state = 1.
b. Tidak, maka k = k + 1.
Apabila nilai state masih 0 maka ulangi proses 8. Apabila nilai state = 1, maka hitung nilai Tout
dengan rumus Tout[i] = TB[i] + tbm[i].
15. Selanjutnya, lakukan proses algoritma D. Dilakukan perhitungan waktu delay dengan rumus
D[i] = TB[i] - TA[i] - tAB[i] dan juga menghitung total waktu tundaan (total delay) dengan rumus
TD[i] = TD[i-1] + D[i].
16. Proses iterasi diakhiri dengan menghitung T = TA[i].
17. Selanjutnya yaitu pengecekan nilai T. Jika nilai T masih lebih kecil dari 200, maka iterasi
dilakukan kembali dengan menentukan i = i + 1. Namun apabila nilai T sudah tidak sesuai
dengan kondisi tersebut, maka dilanjutkan menghitung delay rata-rata dengan rumus DR =
TD[j] / j. Perhitungan ini sekaligus menandakan bahwa iterasi simulasi selesai.
Bahasa Pascal

program tugas4; for k:=1 to 6 do


uses crt; begin
htotal := htotal + fh[k];
{Identifikasi Variabel} end;
var fhcum[1] := fh[1];
i,j,k,htotal,state,tbmtotal : integer; fhcumx[1] := fhcum[1]/htotal;
Ts,T,DR : real; for k:=1 to 6 do
fh : array [1..6] of integer = begin
(40,15,25,35,21,32); fhcum[k] := fhcum[k-1] + fh[k];
hmin : array [1..6] of real = (1,2,3,4,5,6); fhcumx[k] := fhcum[k]/htotal;
hmax : array [1..6] of real = (2,3,4,5,6,7); end;
fhcum : array [1..6] of integer;
fhcumx : array [1..6] of real; tbmtotal := 0;
ftbm : array [1..6] of integer = for k:=1 to 6 do
(46,21,15,30,10,4); begin
tbmmin : array [1..6] of real = (1,2,3,4,5,6); tbmtotal := tbmtotal + ftbm[k];
tbmmax : array [1..6] of real = (2,3,4,5,6,7); end;
ftbmcum : array [1..6] of integer; ftbmcum[1] := ftbm[1];
ftbmcumx : array [1..6] of real; ftbmcumx[1] := ftbmcum[1]/tbmtotal;
r1,r2,r3,r4,h,tbm,TA,tAB,TB,Tout,D,TD : array for k:=1 to 6 do
[1..1000] of real; begin
ftbmcum[k] := ftbmcum[k-1] + ftbm[k];
begin ftbmcumx[k] := ftbmcum[k]/tbmtotal;
end;
{Input lama waktu studi}
writeln('Masukkan lama waktu studi (dalam T := 0;
hari) :'); DR := 0;
readln(Ts); r1[1] := 0;
writeln; r2[1] := 0;
r3[1] := 0;
{Inisiasi} r4[1] := 0;
Randomize; h[1] := 0;
htotal := 0; tbm[1] := 0;
TA[1] := 0; {Algortima B}
tAB[1] := 0; if (TA[i] > Tout[i-1]) then begin
TB[1] := 0; TB[i] := TA[i] + tAB[i];
Tout[1] := 0; end else begin
D[1] := 0; TB[i] := Tout[i-1] + tAB[i];
TD[1] := 0; end;
i := 2;
{Algoritma C}
while T<Ts do state := 0;
begin k := 1;
repeat
{Algoritma A} if (r3[i]<ftbmcumx[k]) then begin
j := i; tbm[i] := tbmmin[k] +
r1[i] := (random(1000000))/1000000; (r4[i]*(tbmmax[k]-tbmmin[k]));
r2[i] := (random(1000000))/1000000; state := 1;
r3[i] := (random(1000000))/1000000; end else begin
r4[i] := (random(1000000))/1000000; k := k + 1;
end;
until state = 1;
state := 0;
k := 1; Tout[i] := TB[i] + tbm[i];
repeat
if (r1[i]<fhcumx[k]) then begin {Algoritma D}
h[i] := hmin[k] + (r2[i]*(hmax[k]- D[i] := TB[i] - TA[i] - tAB[i];
hmin[k])); TD[i] := TD[i-1] + D[i];
state := 1;
end else begin T := TA[i];
k := k + 1; i := i + 1;
end;
until state = 1; end;

TA[i] := (TA[i-1] + h[i]); DR := TD[j]/j;


tAB[i] := 0.05;
{Output}
writeln('R1:'); for i:=1 to j do
writeln(''); begin
for i:=1 to j do writeln(h[i]);
begin writeln('');
writeln(r1[i]); end;
writeln('');
end; writeln('TA:');
writeln('');
writeln('R2:'); for i:=1 to j do
writeln(''); begin
for i:=1 to j do writeln(TA[i]);
begin writeln('');
writeln(r2[i]); end;
writeln('');
end; writeln('tAB:');
writeln('');
writeln('R3:'); for i:=1 to j do
writeln(''); begin
for i:=1 to j do writeln(tAB[i]);
begin writeln('');
writeln(r3[i]); end;
writeln('');
end; writeln('TB:');
writeln('');
writeln('R4:'); for i:=1 to j do
writeln(''); begin
for i:=1 to j do writeln(TB[i]);
begin writeln('');
writeln(r4[i]); end;
writeln('');
end; writeln('tbm:');
writeln('');
writeln('h:'); for i:=1 to j do
writeln(''); begin
writeln(tbm[i]);
writeln('');
end;

writeln('Tout:');
writeln('');
for i:=1 to j do
begin
writeln(Tout[i]);
writeln('');
end;

writeln('D:');
writeln('');
for i:=1 to j do
begin
writeln(D[i]);
writeln('');
end;

writeln('TD:');
writeln('');
for i:=1 to j do
begin
writeln(TD[i]);
writeln('');
end;

writeln('DR:');
writeln(DR);

readkey;
end.
Bahasa Fortran
! A fortran95 program for G95 htotal = 0
! By WQY do k=1,6
htotal = htotal + fh(k)
program main end do
implicit none fhcum(1) = fh(1)
fhcumx(1) = fhcum(1)/htotal
! Identifikasi Variabel do k=2,6
integer :: i,j,k,htotal,state,tbmtotal fhcum(k) = fhcum(k-1)+fh(k)
real :: Ts,T,DR fhcumx(k) = fhcum(k)/htotal
integer, dimension(1:6) :: fh = (/ end do
40,15,25,35,21,32 /)
integer, dimension(1:6) :: hmin = (/ tbmtotal = 0
1,2,3,4,5,6 /) do k=1,6
integer, dimension(1:6) :: hmax = (/ tbmtotal = tbmtotal + ftbm(k)
2,3,4,5,6,7 /) end do
integer, dimension(1:6) :: fhcum ftbmcum(1) = ftbm(1)
real, dimension(1:6) :: fhcumx ftbmcumx(1) = ftbmcum(1)/tbmtotal
integer, dimension(1:6) :: ftbm = (/ do k=2,6
46,21,15,30,10,4 /) ftbmcum(k) = ftbmcum(k-1)+ftbm(k)
integer, dimension(1:6) :: tbmmin = (/ ftbmcumx(k) = ftbmcum(k)/tbmtotal
1,2,3,4,5,6 /) end do
integer, dimension(1:6) :: tbmmax = (/
2,3,4,5,6,7 /) T =0
integer, dimension(1:6) :: ftbmcum DR =0
real, dimension(1:6) :: ftbmcumx r1(1) = 0
real, dimension(:), allocatable :: r2(1) = 0
r1,r2,r3,r4,h,tbm,TA,tAB,TB,Tout,D,TD r3(1) = 0
r4(1) = 0
! Input Lama Waktu Studi h(1) = 0
write(*,*)"Masukkan lama waktu studi tbm(1) = 0
(dalam hari) :" ; read(*,*)Ts TA(1) = 0
tAB(1) = 0
! Inisiasi TB(1) = 0
Tout(1) = 0 else
D(1) = 0 TB(i) = Tout(i-1) + tAB(i)
TD(1) = 0 end if
i =2
! Algoritma C
do while (T<Ts) state = 0
k=1
! Algoritma A do k=1,6
j=i if (r3(i)<ftbmcumx(k)) then
r1(i) = rand() tbm(i) = tbmmin(k) +
r2(i) = rand() (r4(i)*(tbmmax(k)-tbmmin(k)))
r3(i) = rand() state = 1
r4(i) = rand() stop
end if
state = 0 if (state==1) then
k=1 stop
do k=1,6 end if
if (r1(i)<fhcumx(k)) then end do
h(i) = hmin(k) + (r2(i)*(hmax(k)-
hmin(k))) Tout(i) = TB(i) + tbm(i)
state = 1
stop ! Algoritma D
end if D(i) = TB(i) - TA(i) - tAB(i)
if (state==1) then TD(i) = TD(i-1) + D(i)
stop
end if T = TA(i)
end do i=i+1

TA(i) = TA(i-1) + h(i) end do


tAB(i) = 0.05
DR = TD(j)/j
! Algoritma B
if (TA(i) > Tout(i-1)) then ! Output
TB(i) = TA(i) + tAB(i)
write(*,*) "/R1:" print '(/"")'
do i=1,j
write(*,*) r1(i) write(*,*) "/tAB:"
end do do i=1,j
print '(/"")' write(*,*) tAB(i)
end do
write(*,*) "/R2:" print '(/"")'
do i=1,j
write(*,*) r2(i) write(*,*) "/TB:"
end do do i=1,j
print '(/"")' write(*,*) TB(i)
end do
write(*,*) "/R3:" print '(/"")'
do i=1,j
write(*,*) r3(i) write(*,*) "/tbm:"
end do do i=1,j
print '(/"")' write(*,*) tbm(i)
end do
write(*,*) "/R4:" print '(/"")'
do i=1,j
write(*,*) r4(i) write(*,*) "/Tout:"
end do do i=1,j
print '(/"")' write(*,*) Tout(i)
end do
write(*,*) "/h:" print '(/"")'
do i=1,j
write(*,*) h(i) write(*,*) "/D:"
end do do i=1,j
print '(/"")' write(*,*) D(i)
end do
write(*,*) "/TA:" print '(/"")'
do i=1,j
write(*,*) TA(i) write(*,*) "/TD:"
end do do i=1,j
write(*,*) TD(i) write(*,*) "/DR:"
end do write(*,*) DR
print '(/"")'
end
Bahasa C
#include<stdio.h> /*Input lama waktu studi*/
#include <stdlib.h> printf("Masukkan lama waktu studi (dalam
#include <time.h> hari) :");
int main() scanf("%f",&Ts);
{ printf("\n");

/*Identifikasi Variabel*/ /*Inisialisasi*/


int i,j,k,htotal,state,tbmtotal; htotal = 0;
int fh[6] = {40,15,25,35,21,32}; for (k=0;k<6;k++)
int hmin[6] = {1,2,3,4,5,6}; {
int hmax[6] = {2,3,4,5,6,7}; htotal = htotal + fh[k];
int fhcum[6]; }
float fhcumx[6]; fhcum[0]= fh[0];
float h[1000]; fhcumx[0]= (float) fhcum[0]/htotal;
int ftbm[6] = {46,21,15,30,10,4}; for (k=1;k<6;k++)
int tbmmin[6] = {1,2,3,4,5,6}; {
int tbmmax[6] = {2,3,4,5,6,7}; fhcum[k] = fhcum[k-1] + fh[k];
int ftbmcum[6]; fhcumx[k] = (float) fhcum[k]/htotal;
float ftbmcumx[6]; }
float tbm[1000];
float Ts,T,DR; tbmtotal = 0;
float r1[1000]; for (k=0;k<6;k++)
float r2[1000]; {
float r3[1000]; tbmtotal = tbmtotal + ftbm[k];
float r4[1000]; }
float TA[1000]; ftbmcum[0]= ftbm[0];
float tAB[1000]; ftbmcumx[0]= (float) ftbmcum[0]/tbmtotal;
float TB[1000]; for (k=1;k<6;k++)
float Tout[1000]; {
float D[1000]; ftbmcum[k] = ftbmcum[k-1] + ftbm[k];
float TD[1000]; ftbmcumx[k] = (float)
srand(time(NULL)); ftbmcum[k]/tbmtotal;
}
{
/*Kondisi Awal*/ if (r1[i]<fhcumx[k])
T = (float) 0; {
DR = (float) 0; h[i] = (float) (hmin[k] +
r1[0] = (float) 0; (r2[i]*(hmax[k]-hmin[k])));
r2[0] = (float) 0; state = 1;
r3[0] = (float) 0; }
r4[0] = (float) 0; else
h[0] = (float) 0; {
tbm[0] = (float) 0; k = k + 1;
TA[0] = (float) 0; }
tAB[0] = (float) 0; } while (state!=1);
TB[0] = (float) 0;
Tout[0] = (float) 0; TA[i] = (float) (TA[i-1] + h[i]);
D[0] = (float) 0; tAB[i] = (float) 0.05;
TD[0] = (float) 0;
/*Algoritma B*/
i = 1; if (TA[i]>Tout[i-1])
{
TB[i] = (float) TA[i] + tAB[i];
}
while (T<Ts) else
{ {
TB[i] = (float) Tout[i-1] + tAB[i];
/*Algoritma A*/ }
j = i;
r1[i] = (float) rand()/RAND_MAX; /*Algoritma C*/
r2[i] = (float) rand()/RAND_MAX; state = 0;
r3[i] = (float) rand()/RAND_MAX; k = 0;
r4[i] = (float) rand()/RAND_MAX; do
{
state = 0; if (r3[i]<ftbmcumx[k])
k = 0; {
do
tbm[i] = (float) (tbmmin[k] +
(r4[i]*(tbmmax[k]-tbmmin[k]))); printf("\n\nR3:");
state = 1; for (i=0;i<j+1;i++)
} {
else printf("\n%f",r3[i]);
{ }
k = k + 1;
} printf("\n\nR4:");
} while (state!=1); for (i=0;i<j+1;i++)
{
Tout[i] = (float) TB[i] + tbm[i]; printf("\n%f",r4[i]);
}
/*Algoritma D*/
D[i] = (float) TB[i] - TA[i] - tAB[i]; printf("\n\nh:");
TD[i] = (float) TD[i-1] + D[i]; for (i=0;i<j+1;i++)
{
T = (float) TA[i]; printf("\n%f",h[i]);
i = i + 1; }
}
printf("\n\nTA:");
DR = (float) TD[j]/j; for (i=0;i<j+1;i++)
{
/*Output*/ printf("\n%f",TA[i]);
printf("\n\nR1:"); }
for (i=0;i<j+1;i++)
{ printf("\n\ntAB:");
printf("\n%f",r1[i]); for (i=0;i<j+1;i++)
} {
printf("\n%f",tAB[i]);
printf("\n\nR2:"); }
for (i=0;i<j+1;i++)
{ printf("\n\nTB:");
printf("\n%f",r2[i]); for (i=0;i<j+1;i++)
} {
printf("\n%f",TB[i]); for (i=0;i<j+1;i++)
} {
printf("\n%f",D[i]);
printf("\n\ntbm:"); }
for (i=0;i<j+1;i++)
{ printf("\n\nTD:");
printf("\n%f",tbm[i]); for (i=0;i<j+1;i++)
} {
printf("\n%f",TD[i]);
printf("\n\nTout:"); }
for (i=0;i<j+1;i++)
{ printf("\n\nDR:");
printf("\n%f",Tout[i]); printf("\n%f",DR);
}
return 0;
printf("\n\nD:"); }

Anda mungkin juga menyukai