• Tidak ada hasil yang ditemukan

Lampiran 1. Form 01. unit Skripsi; interface. uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, math;

N/A
N/A
Protected

Academic year: 2021

Membagikan "Lampiran 1. Form 01. unit Skripsi; interface. uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, math;"

Copied!
29
0
0

Teks penuh

(1)

Lampiran 1

Form 01

unit Skripsi;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, math; type TForm1 = class(TForm) Label1: TLabel; btnPilih: TButton; btnKeluar: TButton; ListData: TListBox; Label3: TLabel; btnProses: TButton; btnUji: TButton;

procedure btnPilihClick(Sender: TObject); procedure btnKeluarClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure btnProsesClick(Sender: TObject); procedure btnUjiClick(Sender: TObject); private

{ Private declarations } public

{ Public declarations } end;

(2)

var

Form1: TForm1;

jml_data,flag,jml_ramal : integer; hasil1,hasil2,hasil3 : array of double; data : array of integer;

implementation

{$R *.dfm}

uses unit3, Unit4;

procedure TForm1.btnPilihClick(Sender: TObject); var AmbilDialog : TOpenDialog; AmbilFile : TextFile; i : integer; AmbilLine : string; begin if flag = 1 then begin

if (MessageDlg('Data telah ada, apakah mau diubah??',mtConfirmation, [mbYes, mbNo], 0) = mrYes) then

begin

listdata.Clear; end;

(3)

// siapin dialog box untuk open file

AmbilDialog := TOpenDialog.Create(self); AmbilDialog.InitialDir := GetCurrentDir; AmbilDialog.Filter := 'textfile|*.txt';

//mulai ambil file

if AmbilDialog.execute then begin

AssignFile(AmbilFile, AmbilDialog.FileName); Reset(AmbilFile);

//mulai ambil data

ReadLn(AmbilFile,AmbilLine); jml_data := StrToInt(AmbilLine); if jml_data < 8 then

begin

showmessage('Data harus lebih dari 8, masukkan file yg baru!!!'); AmbilDialog.free; CloseFile(AmbilFile); exit; end; unit3.jml_data := jml_data; setlength(data,jml_data); for i:= 0 to jml_data - 1 do

begin

ReadLn(AmbilFile,AmbilLine); data[i] := StrToInt(AmbilLine);

listdata.AddItem('Periode - '+inttostr(i+1)+' : '+ambilline,listdata); end;

CloseFile(AmbilFile); flag := 1;

(4)

AmbilDialog.free; end;

procedure TForm1.btnKeluarClick(Sender: TObject); begin

application.Terminate; end;

procedure TForm1.FormCreate(Sender: TObject); begin

flag := 0; end;

procedure TForm1.btnProsesClick(Sender: TObject); var temp : string;

i,j,n,half,flg : integer; a,b,c,d,d3,S,avg,avg2,avg21,avg22,avg_dif : double; avg31,avg32,avg3,BT,ST,CT : double; alpha,gamma : double; begin if flag = 1 then begin flg := 0; while (flg <> 1) do begin

temp := InputBox('Silahkan Masukkan Data','Berapa periode yang mau diramalkan?','');

flg := 1;

for i := 1 to length(temp) do begin

(5)

if ((ord(temp[i])<48) or (ord(temp[i])>57)) then begin flg := 0; break; end; end; end; jml_ramal := strtoint(temp); unit3.jml_ramal := jml_ramal; setlength(hasil1,jml_ramal); setlength(unit3._single,jml_ramal); setlength(hasil2,jml_ramal); setlength(unit3._double,jml_ramal); setlength(hasil3,jml_ramal); setlength(unit3._triple,jml_ramal); n := jml_data; form3.PeriodBox.clear; for i := 0 to (jml_ramal-1) do begin form3.PeriodBox.AddItem('Periode - '+inttostr(i+1),form3.PeriodBox); //proses

//proses Single Exponential Smoothing alpha := 1/n; if i = 0 then begin d := data[n-1]; avg := 0; for j := 0 to (n-1) do begin

(6)

avg := avg + data[j]; end; avg := avg/n; end else begin d := hasil1[i-1]; avg := hasil1[i-1]; end;

hasil1[i] := alpha*d + (1-alpha)*avg; unit3._single[i] := hasil1[i];

//proses Double Exponential Smoothing if i = 0 then begin half := ceil(n / 2); avg21 := 0; avg22 := 0; for j := 0 to half-1 do begin

avg21 := avg21 + data[j]; end;

for j := half to n-1 do begin

avg22 := avg22 + data[j]; end;

avg21 := avg21/half; avg22 := avg22/(half-1); avg2 := (avg21 + avg22)/2; avg_dif := avg22-avg21; S := avg2 + avg_dif;

(7)

avg_dif := avg_dif/half; end;

hasil2[i] := S + (i+1)*avg_dif; unit3._double[i] := hasil2[i];

//proses Triple Exponential Smoothing alpha := 0.15;

gamma := 0.2; avg31 := 0; avg32 := 0;

for j := jml_data-8 to jml_data-5 do begin

avg31 := avg31+data[j]; end;

avg31 := avg31/4;

for j:= jml_data-4 to jml_data-1 do begin avg32 := avg32+data[j]; end; avg32 := avg32/4; BT := (avg32-avg31)/4; avg3 := (avg31+avg32)/2; if i = 0 then begin ST := avg3 + ((jml_data-1)/2)*BT; CT := data[jml_data-4]/(ST-BT*(3)); end else begin ST := alpha*(hasil3[i-1]/CT)+(1-alpha)*(ST+BT); CT := gamma*(hasil3[i-1]/ST)+(1-gamma)*CT;

(8)

end;

hasil3[i] := (ST+(i+1)*BT)*CT; unit3._triple[i] := hasil3[i];

n := n + 1; //menambahkan jumlah data end;

//siapin output textbox

form3.single_.text := inttostr(round(hasil1[0])); form3.double_.text := inttostr(round(hasil2[0])); form3.triple_.text := inttostr(round(hasil3[0])); form3.periodbox.ItemIndex := 0; //tampilkan form3 form3.Visible := true; form3.Height := 230; form1.Visible := false; end else begin

showmessage('Data belum diisi atau jumlah data terlalu sedikit!!'); end;

end;

procedure TForm1.btnUjiClick(Sender: TObject); var

d,i,j : integer;

alpha,avg,avg2,avg21,avg22,avg_dif : double; avg3,avg31,avg32,BT,ST,CT : double;

(9)

uji1,uji2,uji3 : array of double; begin if flag = 1 then begin setlength(uji1,jml_data-4); setlength(uji2,jml_data-4); setlength(uji3,jml_data-8); form4.Chartuji.Series[0].Clear; form4.Chartuji.Series[1].Clear; form4.Chartuji.Series[2].Clear; form4.Chartuji.Series[3].Clear; for i := 0 to jml_data-1 do begin form4.chartuji.Series[0].add(data[i],'Periode - ' + inttostr(i+1),clred); end; for i := 0 to 3 do begin form4.chartuji.Series[1].add(0,'Periode - ' + inttostr(i+1),0); form4.chartuji.Series[2].add(0,'Periode - ' + inttostr(i+1),0); end; for i := 0 to 7 do begin form4.chartuji.Series[3].add(0,'Periode - ' + inttostr(i+1),0); end; alpha := 0.25; err1 := 0; err2 := 0; err3 := 0; for i := 0 to jml_data-5 do

(10)

begin

//uji untuk Single Exponential d := data[i+3]; if i = 0 then begin avg := 0; for j := 0 to 3 do begin

avg := avg + data[j]; end; avg := avg/4; end else begin avg := uji1[i-1]; end;

uji1[i] := alpha*d + (1-alpha)*avg;

form4.chartuji.Series[1].add(uji1[i],'Periode - ' + inttostr(i+1),clblue);

//uji untuk Double Exponential avg21 := (data[i]+data[i+1])/2; avg22 := (data[i+2]+data[i+3])/2; avg2 := (avg21+avg22)/2;

avg_dif := (avg22-avg21);

uji2[i] := avg2 + avg_dif + avg_dif/2;

form4.chartuji.Series[2].add(uji2[i],'Periode - ' + inttostr(i+1),clyellow);

//hitung nilai error

temp1 := ((data[i+4]-uji1[i])/data[i+4]); temp2 := ((data[i+4]-uji2[i])/data[i+4]); //memutlakkan

(11)

if temp1 < 0 then begin temp1 := temp1*(-1); end; if temp2 < 0 then begin temp2 := temp2*(-1); end;

err1 := err1 + temp1; err2 := err2 + temp2;

end;

alpha := alpha/2;

for i := 0 to jml_data-9 do begin

//uji untuk Triple Exponential

avg31 := (data[i]+data[i+1]+data[i+2]+data[i+3])/4; avg32 := (data[i+4]+data[i+5]+data[i+6]+data[i+7])/4; BT := (avg32-avg31)/4; avg3 := (avg31+avg32)/2; ST := avg3 + (3.5)*BT; CT :=data[i+4]/(ST-BT*(3)); uji3[i] := (ST + BT)*CT; temp3 := ((data[i+8]-uji3[i])/data[i+8]); if temp3 < 0 then begin temp3 := temp3*(-1); end;

err3 := err3 + temp3;

form4.chartuji.Series[3].add(uji3[i],'Periode - ' + inttostr(i+1),clgreen); end;

(12)

err1 := (100/(jml_data-4))*err1; err2 := (100/(jml_data-4))*err2; err3 := (100/(jml_data-8))*err3; form4.txtSingle.text := inttostr(round(err1)); form4.txtDouble.text := inttostr(round(err2)); form4.txtTriple.text := inttostr(round(err3)); if (err1 < err2) and (err1 < err3) then

begin

form4.txtHasil.text := ('Untuk data ini paling tepat menggunakan Metode Single Exponential Smoothing');

end

else if (err2 < err1) and (err2 < err3) then begin

form4.txtHasil.text := ('Untuk data ini paling tepat menggunakan Metode Double Exponential Smoothing');

end

else if (err3 < err1) and (err3 < err2) then begin

form4.txtHasil.text := ('Untuk data ini paling tepat menggunakan Metode Triple Exponential Smoothing');

end else begin

form4.txtHasil.text := ('Ada lebih dari 1 metode yang tepat untuk meramalkan pola data ini'); end; form4.Visible := true; form1.Visible := false; end else begin

(13)

showmessage('Data belum diisi atau jumlah data terlalu sedikit !'); end; end; end.

Form 02

unit Unit2; interface uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm2 = class(TForm) Label1: TLabel; btnMulai: TButton; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel;

procedure btnMulaiClick(Sender: TObject); private

{ Private declarations } public

{ Public declarations } end;

(14)

var

Form2: TForm2;

implementation

uses Skripsi;

{$R *.dfm}

procedure TForm2.btnMulaiClick(Sender: TObject); begin form2.Visible := false; form1.visible := true; end; end.

Form 03

unit Unit3; interface uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, TeeProcs, TeEngine, Chart, StdCtrls, Series;

type

TForm3 = class(TForm) PeriodBox: TComboBox;

(15)

single_: TEdit; double_: TEdit; triple_: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; btnSingle: TButton; btnDouble: TButton; btnTriple: TButton; chart: TChart; btnKeluar: TButton; btnKembali: TButton; Series1: TLineSeries; btnTutup: TButton;

procedure btnKeluarClick(Sender: TObject); procedure PeriodBoxChange(Sender: TObject); procedure btnSingleClick(Sender: TObject); procedure btnDoubleClick(Sender: TObject); procedure btnTripleClick(Sender: TObject); procedure btnTutupClick(Sender: TObject); procedure btnKembaliClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form3: TForm3; jml_data,jml_ramal :integer;

(16)

implementation

{$R *.dfm}

uses skripsi;

procedure TForm3.btnKeluarClick(Sender: TObject); begin

application.Terminate; end;

procedure TForm3.PeriodBoxChange(Sender: TObject); begin

single_.text := inttostr(round(_single[periodbox.ItemIndex])); double_.text := inttostr(round(_double[periodbox.ItemIndex])); triple_.text := inttostr(round(_triple[periodbox.ItemIndex])); end;

procedure TForm3.btnSingleClick(Sender: TObject); var i : integer; begin chart.Series[0].Clear; for i := 0 to jml_data-1 do begin chart.Series[0].add(skripsi.data[i],'Periode - ' + inttostr(i+1),clred); end; for i := 0 to jml_ramal-1 do begin chart.Series[0].add(_single[i],'Periode - ' + inttostr(i+1),clblue); end;

(17)

form3.Height := 506; end;

procedure TForm3.btnDoubleClick(Sender: TObject); var i : integer; begin chart.Series[0].Clear; for i := 0 to jml_data-1 do begin chart.Series[0].add(skripsi.data[i],'Periode - ' + inttostr(i+1),clred); end; for i := 0 to jml_ramal-1 do begin chart.Series[0].add(_double[i],'Periode - ' + inttostr(i+1),clyellow); end; form3.Height := 506; end;

procedure TForm3.btnTripleClick(Sender: TObject); var i : integer; begin chart.Series[0].Clear; for i := 0 to jml_data-1 do begin chart.Series[0].add(skripsi.data[i],'Periode - ' + inttostr(i+1),clred); end; for i := 0 to jml_ramal-1 do begin chart.Series[0].add(_triple[i],'Periode - ' + inttostr(i+1),clgreen); end; form3.Height := 506;

(18)

end;

procedure TForm3.btnTutupClick(Sender: TObject); begin

form3.Height := 230; end;

procedure TForm3.btnKembaliClick(Sender: TObject); begin form1.Visible := true; form3.Visible := false; end; end.

Form 04

unit Unit4; interface uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, TeEngine, Series, ExtCtrls, TeeProcs, Chart;

type TForm4 = class(TForm) Label1: TLabel; Chartuji: TChart; Series1: TLineSeries; Series2: TLineSeries;

(19)

Series3: TLineSeries; Series4: TLineSeries; btnKeluar: TButton; btnKembali: TButton; Label2: TLabel; Label3: TLabel; Label4: TLabel; txtSingle: TEdit; txtDouble: TEdit; txtTriple: TEdit; Label5: TLabel; Label6: TLabel; Label7: TLabel; txtHasil: TEdit;

procedure btnKeluarClick(Sender: TObject); procedure btnKembaliClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form4: TForm4; implementation uses Skripsi; {$R *.dfm}

(20)

procedure TForm4.btnKeluarClick(Sender: TObject); begin

application.terminate; end;

procedure TForm4.btnKembaliClick(Sender: TObject); begin

form1.Visible := true; form4.Visible := false; end;

(21)

Lampiran 2

Pengujian pertama dilakukan dengan menggunakan data yang berpola stationer, seperti yang ditunjukkan pada gambar berikut :

Seperti yang terlihat pola data tersebut bersifat stationer karena data yang ada berkisar antara 130-170, tidak ada data yang berbeda jauh, pada teorinya hasil peramalan yang paling akurat adalah dengan menggunakan metode Single Exponential Smoothing. Lalu dapat kita lihat hasil pengujian nya pada gambar berikut :

(22)

Didapat hasil uji dalam bentuk grafik, nilai-nilai hasil peramalan ada yang mendekati dan menjauhi data aslinya, namun yang paling akurat adalah dengan menggunakan metode Single Exponential Smoothing. Hal ini juga dapat dilihat dari hasil pengukuran kesalahan dengan nilai yang terkecil pada bagian Single. Dianjurkan agar meramalkan data untuk pola data ini dengan menggunakan metode Single Exponential

Smoothing. Hasil peramalan untuk 5 periode ke depan dapat dilihat pada gambar

berikut :

Dari gambar di atas dapat dilihat hasil peramalan dengan metode Single Exponential

Smoothing tingkat penjualan untuk 1 periode ke depan adalah 155. Dapat dilihat juga

(23)
(24)

Pengujian kedua dilakukan dengan menggunakan data yang berpola trend, seperti yang ditunjukkan pada gambar berikut :

Seperti yang terlihat pola data tersebut bersifat trend karena data yang ada peningkatan yang signifikan per-periode , pada teorinya hasil peramalan yang paling akurat adalah dengan menggunakan metode Double Exponential Smoothing. Lalu dapat kita lihat hasil pengujian nya pada gambar berikut :

(25)

Didapat hasil uji dalam bentuk grafik, nilai-nilai hasil peramalan ada yang mendekati dan menjauhi data aslinya, namun yang paling akurat adalah dengan menggunakan metode Double Exponential Smoothing. Hal ini juga dapat dilihat dari hasil pengukuran kesalahan dengan nilai yang terkecil pada bagian Double. Dianjurkan agar meramalkan data untuk pola data ini dengan menggunakan metode Double

Exponential Smoothing. Hasil peramalan untuk 5 periode ke depan dapat dilihat pada

gambar berikut :

Dari gambar di atas dapat dilihat hasil peramalan dengan metode Double Exponential

Smoothing tingkat penjualan untuk 1 periode ke depan adalah 293. Dapat dilihat juga

(26)
(27)

Pengujian ketiga dilakukan dengan menggunakan data yang berpola kuadratis, seperti yang ditunjukkan pada gambar berikut :

Seperti yang terlihat pola data tersebut bersifat kuadratis karena data yang ada terdapat perubahan yang cukup mencolok setiap periodenya dengan perbedaan yang cukup besar membentuk pola seperti kurva, pada teorinya hasil peramalan yang paling akurat adalah dengan menggunakan metode Triple Exponential Smoothing. Lalu dapat kita lihat hasil pengujian nya pada gambar berikut :

(28)

Didapat hasil uji dalam bentuk grafik, nilai-nilai hasil peramalan ada yang mendekati dan menjauhi data aslinya, namun yang paling akurat adalah dengan menggunakan metode Triple Exponential Smoothing. Hal ini juga dapat dilihat dari hasil pengukuran kesalahan dengan nilai yang terkecil pada bagian Triple. Dianjurkan agar meramalkan data untuk pola data ini dengan menggunakan metode Triple Exponential Smoothing. Hasil peramalan untuk 5 periode ke depan dapat dilihat pada gambar berikut :

Dari gambar di atas dapat dilihat hasil peramalan dengan metode Triple Exponential

Smoothing tingkat penjualan untuk 1 periode ke depan adalah 98. Dapat dilihat juga

(29)

Referensi

Dokumen terkait

Algoritma Kumar-Hassebrook digunakan untuk menghasilkan keluaran (output) berupa dokumen teks bahasa jawa dalam pencarian informasi menggunakan STKI bahasa Jawa dengan

Akankah esok kembali ,aku masih kau beri kehidupan yang berarti?. Wahai dunia dan

Didalam penulisan laporan akhir ini, penulis ingin mengetahui bagaimana perencanaan yang baik dalam merencanakan desain geometrik dan tebal perkerasan pada jalan Lingkar

jantung pada dinding dada.Batas bawahnya adalah garis yang menghubungkan sendi kostosternalis ke-6 dengan apeks jantung... FISIK DIAGNOSTIK JANTUNG DAN

Berdasarkan hal tersebut penulis mengambil judul ANALISIS PENGARUH KINERJA KEUANGAN, GOOD CORPORATE GOVERNANCE, DAN CORPORATE SOCIAL RESPONSIBILITY TERHADAP NILAI

bahwa berat labur adalah banyaknya perekat yang diberikan pada permukaan kayu, berat labur yang terlalu tinggi selain dapat menaikkan biaya produksi juga akan mengurangi

Salah satu upaya peningkatan produktivitas perairan umum misalnya danau adalah kegiatan introduksi ikan, yaitu memindahkan atau menebarkan ikan dari suatu perairan ke perairan

Saat ini kerap terjadi pelanggaran privasi di media sosial berbasis ojek online, timbulnya pelanggaran privasi pada ojek online ini karena aplikasi