PRAKTIKUM 4 ARRAY DAN SUB ROUTINE
I.
TUJUAN Tujuan praktikum 4 adalah mahasiswa bisa membuat program yang menggunakan variabel arrray dan menyusun program terstruktur yang terbagi dalam beberapa sub routine atau sub program untuk melaksanakan tugas tertentu. Pada praktikum 4 ini akan dibuat 2 program yang berkaitan dengan sejumlah data yang disimpan dalam variabel array. Proses pembacaan data dibuat dalam bentuk prosedur tersendiri dan proses perhitungan dibuat dalam bentuk fungsi. II.
PROGRAM 1
A. DESAIN TAMPILAN Program 1 dibuat untuk menghitung rata-rata dan standar deviasi sampel dari sejumlah data yang diinputkan langsung. Input data dilakukan langsung melalui kotak TextBox dan data secara keseluruhan ditampilkan dalam kotak ListBox. Desain tampilan dibuat seperti pada gambar 4.1.
Form1
Label1 Text1
Label3
Label2
Label4 Label5
Frame1 Command1
ListBox1
Command2 Command2 Gambar 4.1. Desain tampilan program 1. Rubahlah nilai-nilai property form dan kontrol yang telah dipasang pada form sebagai berikut : Form1 Property Caption
Nilai Array
28
Praktikum 4 : Array Dan Sub Routine 29 Label1 Property Alignment Caption Font Fore color
Nilai 2 – Center MENGHITUNG RATA-RATA DAN STANDAR DEVIASI Font : Arial, Font style : Bold, Size : 16 Pilih dalam tabulasi Palette : warna merah
Frame1 Property Caption
Nilai Data :
Label2 Property Caption
Nilai Input :
Text1 Property Name Text
Nilai TInput
ListBox1 Property Name
Nilai LBData
Label3 Property Name Caption
Nilai LJumlah Jumlah data = 0
Label4 Property Name Caption
Nilai LRata
Label5 Property Name Caption
Nilai LSD
Praktikum 4 : Array Dan Sub Routine 30 Command1 Property Name Caption
Nilai CBHapus HAPUS SEMUA
Command2 Property Name Caption
Nilai CBHitung HITUNG
Command3 Property Name Caption
Nilai CBSelesai SELESAI
B. DESAIN PROGRAM Pada desain tampilan program seperti gambar 4.1, kontrol TextBox TInput digunakan untuk memasukkan data berupa angka-angka dengan cara mengetikkan angkanya diikuti dengan menekan tombol ENTER. Secara otomatis angka yang diinputkan akan masuk dalam kotak ListBox LBData. Kontrol TextBox TInput bisa juga digunakan untuk mengedit data angka yang telah ada dalam kotak LBData dengan cara memilih datan yang akan diedit dalam kotak LBData, kotak TInput akan langsung terisi angka sesuai dengan data yang dipilih kemudian edit angkanya diikuti dengan tombol ENTER. Untuk menghapus sebagian data dilakukan dengan memilih data pada kotak LBData kemudian tekan tombol DELETE. Ada tiga buah tombol yang akan memberikan respon berbeda jika user meng-klik tombol terdebut : • Tombol HAPUS SEMUA digunakan untuk menghapus semua data. • Tombol HITUNG digunakan untuk menghitung rata-rata dan standar deviasi sampel dari data angka-angka yang telah dimasukkan. Rumus-rumus yang digunakan adalah sebagai berikut : n
∑ xi
Rata-rata :
x = i =1 n
n
Standar deviasi sampel : SD = •
∑ (xi − x )2 i =1
n −1
Tombol SELESAI digunakan untuk mengakhiri program dan menutup jendela program.
C. LISTING PROGRAM Kode program yang dituliskan pada program 1 adalah untuk menangani event-event yang terjadi pada saat proses input data, edit data, hapus data, proses menghitung dan mengakhiri program. Kode program disusun menjadi beberapa sub routine atau sub program yang berupa prosedur dan fungsi. Listing program yang dicantumkan dalam panduan
Praktikum 4 : Array Dan Sub Routine 31 praktikum ini hanya yang berkaitan dengan input, edit dan penghapusan data. Buatlah program dalam bentuk sub routine untuk menghitung rata-rata dan standar deviasi. Sebagian listing program dari program 1 adalah sebagai berikut : Sub Baca_Data(n As Integer, x() As Single) Dim i As Integer ReDim x(1 To n) For i = 1 To n x(i) = LBData.List(i - 1) Next i End Sub Private Sub CBHitung_Click() Dim n As Integer, x() As Single, Rata As Single, SD As Single n = LBData.ListCount If n = 0 Then Exit Sub Call Baca_Data(n, x()) If n = 1 Then LRata.Caption = "Rata-rata = " + Format(x(1), "0.###") LSD.Caption = "Standar deviasi = tidak ada" Exit Sub End If Rata = Rata_Rata(n, x()) LRata.Caption = "Rata-rata = " + Format(Rata, "0.###") SD = Std_Dev(n, Rata, x()) LSD.Caption = "Standar deviasi = " + Format(SD, "0.###") Erase x() End Sub Private Sub CBHapus_Click() LBData.Clear TInput.Text = "" LJumlah.Caption = "Jumlah data = 0" LRata.Caption = "" LSD.Caption = "" TInput.SetFocus End Sub Private Sub CBSelesai_Click() End End Sub Private Sub LBData_Click() Dim Pilih As Byte, Indeks As Integer Pilih = LBData.SelCount Indeks = LBData.ListIndex If Pilih = 1 Then TInput.Text = LBData.List(Indeks) End Sub Sub Input_Data() Dim Pilih As Byte, Indeks As Integer, Jml_data As Integer Pilih = LBData.SelCount Indeks = LBData.ListIndex If Pilih = 1 Then LBData.Selected(Indeks) = False If IsNumeric(TInput.Text) Then If Pilih = 1 Then
Praktikum 4 : Array Dan Sub Routine 32 LBData.List(Indeks) = TInput.Text Else LBData.AddItem (TInput.Text) End If Else MsgBox "Input salah" & vbCrLf & "Masukkan angka", "Peringatan" End If TInput.Text = "" LJumlah.Caption = "Jumlah data = " + Str(LBData.ListCount) If LRata.Caption <> "" Then LRata.Caption = "" If LSD.Caption <> "" Then LSD.Caption = "" End Sub
vbExclamation,
Private Sub LBData_KeyUp(KeyCode As Integer, Shift As Integer) Dim Pilih As Byte, Indeks As Integer Pilih = LBData.SelCount Indeks = LBData.ListIndex If (KeyCode = vbKeyDelete) And (Pilih = 1) Then LBData.RemoveItem (Indeks) TInput.Text = "" LJumlah.Caption = "Jumlah data = " + Str(LBData.ListCount) LRata.Caption = "" LSD.Caption = "" End If End Sub Private Sub TInput_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case 45, 46, vbKey0 To vbKey9 Case vbKeyBack Case vbKeyReturn Call Input_Data Case Else KeyAscii = 0 End Select End Sub
D. EKSEKUSI PROGRAM DAN PELACAKAN KESALAHAN Jalankan program 1, lakukan beberapa kali memasukkan input data dan ujilah apakah program sudah sesuai dengan yang diinginkan. Hasil program seperti ditunjukkan pada gambar 4.2. Lakukan pelacakan kesalahan jika hasil program dari nilai yang dimasukkan tidak seperti yang diinginkan dan betulkan kesalahan. Lakukan terus proses pelacakan kesalahan sampai tidak ada kesalahan lagi.
Praktikum 4 : Array Dan Sub Routine 33
Gambar 4.2. Hasil eksekusi dari program 1 setelah tombol Hitung di-klik. III. PROGRAM 2 A. DESAIN TAMPILAN Program 2 digunakan untuk mencari nilai maksimum dan nilai minimum dari sejumlah data serta dapat mengurutkan data (sortir) dari nilai terkecil sampai nilai terbesar. Pada program kedua, data dapat disimpan kedalam file text dan dibaca kembali dari file tersebut. Kendali program tidak lagi menggunakan tombol, tapi dengan menggunakan menu. Tampilan program 2 dibuat mirip dengan program 1. Panggillah prorgam 1 kemudian lakukan beberapa perubahan tampilan pada program 1. Hilangkan atau hapuslah semua tombol pada program 1 dan tambahkan beberapa menu yang diperlukan. Simpanlah terlebih dahulu program 1, baik project maupun formnya dengan nama lain. Desain tampilan program 2 dibuat seperti pada gambar 4.3.
Form1
Common Dialog1
Label1
Text1 Label2 Label3 Frame1 Label4 ListBox1
Gambar 4.3. Desain tampilan program 2.
Praktikum 4 : Array Dan Sub Routine 34 Rubahlah nilai-nilai property form dan kontrol yang telah dipasang pada form sebagai berikut : Form1 Property Caption
Nilai Array
CommonDialog1 Property Name
Nilai CDOpenSave
Label1 Property Alignment Caption Font Fore color
Nilai 2 – Center MENGURUTKAN DATA DAN MENCARI NILAI MAKSIMUM - MINIMUM Font : Arial, Font style : Bold, Size : 16 Pilih dalam tabulasi Palette : warna merah
Frame1 Property Caption
Nilai Data :
Label2 Property Caption
Nilai Input :
Text1 Property Name Text
Nilai TInput
ListBox1 Property Name
Nilai LBData
Label3 Property Name Caption
Nilai LJumlah Jumlah data = 0
Praktikum 4 : Array Dan Sub Routine 35 Label4 Property Name Caption
Nilai LMaxmin
Tambahkan menu-menu yang diperlukan pada form dengan cara memilih menu Tools kemudian pilih Menu Editor… atau dengan menekan tombol Ctrl+E atau bisa juga dengan memilih icon pada bagian Toolbars. Akan muncul window Menu Editor seperti pada gambar 4.4.
Gambar 4.4. Tampilan window Menu Editor. Buatlah menu-menu seperti pada tabel berikut ini : Menu Caption &File Open Save Exit &Proses Urut Maksimum Minimum Hapus Data
Nama MnFile MnOpen MnSave MnGrs1 MnExit MnProses MnUrut MnMax MnMin MnGrs2 MnHapus
Posisi Menu utama Sub menu File Sub menu File Sub menu File Sub menu File Menu utama Sub menu Proses Sub menu Proses Sub menu Proses Sub menu Proses Sub menu Proses
Shortcut
Ctrl+E
Ctrl+D
Praktikum 4 : Array Dan Sub Routine 36 B. DESAIN PROGRAM Program 2 dibuat hampir sama dengan program 1 dalam hal input data dengan tambahan fasilitas input dan output data bisa melalui file. Jadi input data bisa melalui kontrol TextBox TInput atau dengan melalui file text yang sudah disiapkan sebelumnya. Program 2 dikendalikan melalui menu-menu yang telah dibuat sebelumnya dengan respon sebagai berikut jika user memilih salah satu menu : • Menu Open digunakan untuk memanggil file text untuk input data dan menempatkan data pada kotak LBData. • Menu Save digunakan untuk menyimpan data yang ada dalam kotak LBData kedalam file text. • Menu Exit atau tombol Ctrl+E digunakan untuk mengakhiri dan keluar dari program. • Menu Urut digunakan untuk mengurutkan data secara ascending (urut dari nilai terkecil sampai nilai terbesar) dan data yang sudah urut ditampilkan pada kotak LBData. • Menu Maksimum digunakan untuk mendapatkan nilai maksimum dari data yang ada pada kotak LBData. • Menu Minimum digunakan untuk mendapatkan nilai minimum dari data yang ada pada kotak LBData. • Menu Hapus Data atau tombol Ctrl+D digunakan untuk menghapus seluruh data pada kotak LBData. C. LISTING PROGRAM Kode program yang pada program 2 sebagian sama dengan program 1 yaitu pada bagian input data, edit data, dan hapus data. Kode program juga disusun menjadi beberapa sub routine atau sub program yang berupa prosedur dan fungsi. Listing program yang dicantumkan dalam panduan praktikum ini hanya yang berkaitan dengan input, edit, penghapusan data dan proses dalam penanganan membuka dan menyimpan dalam bentuk file text. Buatlah program dalam bentuk sub routine untuk mengurutkan data (sortir), mendapatkan nilai maksimum dan nilai minimum. Sebagian listing program dari program 2 adalah sebagai berikut : Sub Baca_Data(n As Integer, x() As Single) Dim i As Integer ReDim x(1 To n) For i = 1 To n x(i) = LBData.List(i - 1) Next i End Sub Private Sub LBData_Click() Dim Pilih As Byte, Indeks As Integer Pilih = LBData.SelCount Indeks = LBData.ListIndex If Pilih = 1 Then TInput.Text = LBData.List(Indeks) End Sub Sub Input_Data() Dim Pilih As Byte, Indeks As Integer, Jml_data As Integer Pilih = LBData.SelCount Indeks = LBData.ListIndex If Pilih = 1 Then LBData.Selected(Indeks) = False If IsNumeric(TInput.Text) Then
Praktikum 4 : Array Dan Sub Routine 37 If Pilih = 1 Then LBData.List(Indeks) = TInput.Text Else LBData.AddItem (TInput.Text) End If Else MsgBox "Input salah" & vbCrLf & "Masukkan angka", "Peringatan" End If TInput.Text = "" LJumlah.Caption = "Jumlah data = " + Str(LBData.ListCount) If LMaxmin.Caption <> "" Then LMaxmin.Caption = "" End Sub Private Sub LBData_KeyUp(KeyCode As Integer, Shift As Integer) Dim Pilih As Byte, Indeks As Integer Pilih = LBData.SelCount Indeks = LBData.ListIndex If (KeyCode = vbKeyDelete) And (Pilih = 1) Then LBData.RemoveItem (Indeks) TInput.Text = "" End If End Sub Private Sub MnExit_Click() End End Sub Private Sub MnHapus_Click() LBData.Clear TInput.Text = "" LJumlah.Caption = "Jumlah data = 0" LMaxmin.Caption = "" TInput.SetFocus End Sub Private Sub MnMax_Click() Dim n As Integer, x() As Single, Maks As Single n = LBData.ListCount If n = 0 Then Exit Sub Call Baca_Data(n, x()) Maks = Maksimum(n, x()) LMaxmin.Caption = "Maksimum = " + Format(Maks, "0.###") Erase x() End Sub Private Sub MnMin_Click() Dim n As Integer, x() As Single, Min As Single n = LBData.ListCount If n = 0 Then Exit Sub Call Baca_Data(n, x()) Min = Minimum(n, x()) LMaxmin.Caption = "Minimum = " + Format(Min, "0.###") Erase x() End Sub
vbExclamation,
Praktikum 4 : Array Dan Sub Routine 38 Private Sub MnOpen_Click() Dim NmFile As String, Dir As String, x As Single, i As Integer, n As Integer LBData.Clear TInput.Text = "" CDOpenSave.Filter = "All Files (*.*)|*.*|Text Files(*.txt)|*.txt" CDOpenSave.FilterIndex = 2 Dir = CurDir CDOpenSave.InitDir = Dir On Error GoTo Keluar CDOpenSave.ShowOpen NmFile = CDOpenSave.FileName Open NmFile For Input As #1 i=0 Do While Not EOF(1) Input #1, x LBData.List(i) = x i=i+1 Loop Close #1 LJumlah.Caption = "Jumlah data = " + Str(LBData.ListCount) LMaxmin.Caption = "" Keluar: End Sub Private Sub MnSave_Click() Dim NmFile As String, Dir As String, i As Integer, n As Integer n = LBData.ListCount If n = 0 Then MsgBox "Tidak ada data", vbInformation, "Informasi" Exit Sub End If CDOpenSave.Filter = "All Files (*.*)|*.*|Text Files(*.txt)|*.txt" CDOpenSave.FilterIndex = 2 Dir = CurDir CDOpenSave.InitDir = Dir On Error GoTo Keluar CDOpenSave.ShowSave NmFile = CDOpenSave.FileName Open NmFile For Output As #2 For i = 0 To n - 1 Write #2, Val(LBData.List(i)) Next i Close #2 LMaxmin.Caption = "" Keluar: End Sub Private Sub MnUrut_Click() Dim n As Integer, x() As Single n = LBData.ListCount If n = 0 Then Exit Sub Call Baca_Data(n, x()) Call Sort(n, x()) Erase x() End Sub
Praktikum 4 : Array Dan Sub Routine 39 Private Sub TInput_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case 45, 46, vbKey0 To vbKey9 Case vbKeyBack Case vbKeyReturn Call Input_Data Case Else KeyAscii = 0 End Select End Sub
D. EKSEKUSI PROGRAM DAN PELACAKAN KESALAHAN Jalankan program 2, lakukan beberapa kali memasukkan input data dan ujilah apakah program sudah sesuai dengan yang diinginkan. Hasil program seperti ditunjukkan pada gambar 4.5. Lakukan pelacakan kesalahan jika hasil program dari nilai yang dimasukkan tidak seperti yang diinginkan dan betulkan kesalahan. Lakukan terus proses pelacakan kesalahan sampai tidak ada kesalahan lagi.
(a)
(b)
(c) (d) Gambar 4.5. Hasil eksekusi dari program 2, (a) setelah proses input data, (b) setelah menu Maksimum dipilih, (c) setelah menu Minimum dipulih, (d) setelah menu Urut dipilih.
Praktikum 4 : Array Dan Sub Routine 40 IV. DISKUSI Buatlah algoritma dan flowchart untuk sub program yang anda buat sendiri yaitu : 1. Pada program 1 : • Sub program untuk menghitung rata-rata. • Sub program untuk menghitung standar deviasi sampel. 2. Pada program 2 : • Sub program untuk mengurutkan data. • Sub program untuk mendapatkan nilai maksimum. • Sub program untuk mendapatkan nilai minimum.