Anda di halaman 1dari 26

BAB VII PROSEDUR DAN FUNGSI

7.1 Standar Kompetensi

Setelah mengikuti perkuliahan ini diharapkan mahasiswa akan dapat:


1) Memahami pengertian prosedur, bentuk umum prosedur, variabel scope dan
mekanisme passing parameter,
2) Memahami pengertian fungsi, bentuk umum fungsi,
3) Dapat membuat aplikasi sederhana dengan menggunakan prosedur atau sub
program dan fungsi.

7.1 Dasar Teori


Suatu teknik yang biasa diterapkan dalam pemrograman terstruktur adalah dengan teknik
top-down design. Berdasarkan falsafah atas-bawah, maka suatu program yang komplek
dipecah menjadi beberapa bagian yang lebih kecil (sub program) dengan tugas khusus.
Setiap bagian ada kalanya dipecah-pecah lagi menjadi bagian yang lebih kecil, dengan
harapan bagian-bagian yang kecil menjadi lebih mudah dalam membuat programnya dan
lebih mudah dipahami oleh pemrogram. Bagian-bagian program seperti ini dikenal
dengan sebutan subprogram atau rutin (subrutin).

Program Utama

Subprogram Subprogram

Subprogram Subprogram

Gambar 7.1 Program dibagi-bagi menjadi beberapa subprogram

Keuntungan lain dengan adanya subprogram adalah penghematan kode program. Hal ini
terjadi karena setiap proses yang diperlukan dalam program utama cukup memanggil
nama dari suatu subprogram, jadi tidak lagi menuliskan kode yang sama dibeberapa
tempat guna proses yang sama pula. Suatu subprogram dapat ditulis dalam bentuk fungsi
atau prosedur, hal ini sangat tergantung dengan permasalahan yang akan diselesaikan.
74

7.2.1 Prosedur (Procedure)

Salah satu proses didalam suatu algoritma adalah prosedur (procedure). Ada beberapa hal
yang harus diketahui untuk pembuatan prosedur, antara lain :
1) Definisi Prosedur
2) Pemanggilan Prosedur
3) Parameter Prosedur

A. Definisi dan Pemanggilan Prosedur


Pernyataan Sub digunakan untuk menyatakan nama, parameter dan tubuh sub prosedur.
Sintaks untuk pernyataan Sub adalah:
[Modifiers] Sub SubName [(ParameterList)]
[Statements] End Sub

Keterangan :
Modifiers : menentukan tingkat akses prosedur, nilai yang mungkin adalah: Public,
Private, Protected, Friend, Protected Friend dan informasi mengenai overloading,
overriding, berbagi, dan shadowing.
Subname: menunjukkan nama Sub
ParameterList: menentukan daftar parameter

Contoh berikut menunjukkan sebuah CalculatePay prosedur Sub yang mengambil dua
parameter jam kerja dan upah dan menampilkan total gaji seorang karyawan:
Module mysub
Sub CalculatePay(ByVal hours As Double, ByVal wage As Decimal)
‘deklarasi variabel lokal
Dim pay As Double pay =
hours * wage
Console.WriteLine("Total Bayar: {0:C}", pay)
End Sub

Sub Main()
‘pemanggilan Sub prosedur CalculatePay
CalculatePay(25, 10)
CalculatePay(40, 20)
CalculatePay(30, 27.5)
Console.ReadLine()
End Sub
End Module

Ketika kode di atas dikompilasi dan dijalankan, menghasilkan hasil sebagai berikut:

Total Bayar: $250.00


Total Bayar: $800.00

Prosedur & Fungsi 76


Total Bayar: $825.00

B. Parameter Prosedur

Sebagian besar program memerlukan pertukaran informasi antara prosedur dan titik
dimana ia dipanggil, pertukaran parameter menawarkan mekanisme pertukaran informasi
tersebut. Tiap item data ditransfer antara parameter aktual (di titik pemanggil) dan
parameter formal ( di tubuh fungsi atau prosedur) yang bersesuaian. Berdasarkan maksud
penggunaannya, prosedur terdapat tiga macam parameter, yaitu

1) Parameter masukan (input parameter)


2) Parameter keluaran (output parameter)
3) Parameter masukan/keluaran (input/output parameter)

B.1 Parameter masukan (input parameter)

Parameter masukan terjadi karena nilai (value) parameter aktual diisikan (assign) ke
dalam parameter formal yang bersesuaian. Perhatikanlah ilustrasi Gambar 7.2 berikut ini :
Parameter Parameter
Aktual Formal

Copy
A X
Copy
B Y

} Input Parameter

Gambar 7.2 Mekanisme kerja parameter masukan

Dalam VB.Net, Anda menyatakan parameter referensi menggunakan kata kunci ByVal.
Contoh berikut menunjukkan konsep tersebut:

Module paramByval
Sub swap(ByVal x As Integer, ByVal y As Integer)
Dim temp As Integer
temp = x ' simpan nilai dari x
x = y ' tukar nilai y kedalam x
y = temp 'tukar nilai temp kedalam y
End Sub

Sub Main()

Prosedur & Fungsi 76


Dim b As Integer = 200
Console.WriteLine("Sebelum ditukar, Nilai dari a : {0}", a)
Console.WriteLine("Sebelum ditukar, Nilai dari b : {0}", b)
' pemanggilan prosedur swap '
swap(a, b)
Console.WriteLine()
Console.WriteLine("Sesudah ditukar, Nilai dari a : {0}", a)
Console.WriteLine("Sesudah ditukar, Nilai dari b : {0}", b)
Console.ReadLine()
End Sub
End Module

Ketika kode di atas dikompilasi dan dijalankan, menghasilkan hasil sebagai berikut:
Sebelum ditukar, Nilai dari a :100
Sebelum ditukar, Nilai dari b :200
Sesudah ditukar, Nilai dari a :100
Sesudah ditukar, Nilai dari b :200

B.2 Parameter masukan / keluaran (input/output parameter)

Pada kebanyakan aplikasi informasi harus juga dikirim dalam kedua arah, dimana saat
awal pemanggilan prosedur parameter formal akan menerima nilai (value) dari parameter
aktual, tetapi setelah selesai proses parameter formal mengirimkan balik nilai hasil proses
ke parameter aktual pemanggilnya. Perhatikanlah Parameter
Parameter ilustrasi Gambar 7.3 berikut ini :
Aktual Formal
1. Copy
A X

}
2. Copy Input/Output
1. Copy Parameter
B Y
2. Copy

Gambar 7.3 Mekanisme kerja parameter masukan-keluaran

Dalam VB.Net, Anda menyatakan parameter referensi menggunakan kata kunci ByRef.
Contoh berikut menunjukkan hal tersebut:

Prosedur & Fungsi 76


Module paramByRef
Sub swap(ByRef x As Integer, ByRef y As Integer)
Dim temp As Integer
temp = x ' simpan nilai dari x
x = y ' tukar nilai y kedalam x
y = temp 'tukar nilai temp kedalam y

Console.WriteLine()
Console.WriteLine("Nilai x dalam prosedur : {0}", x)
Console.WriteLine("Nilai y dalam prosedur : {0}", y)
End Sub

Sub Main()
' definisi variabel lokal
Dim a As Integer = 100
Dim b As Integer = 200
Console.WriteLine("Sebelum ditukar, Nilai dari a : {0}", a)
Console.WriteLine("Sebelum ditukar, Nilai dari b : {0}", b)
' pemanggilan prosedur swap '
swap(a, b)
Console.WriteLine()
Console.WriteLine("Sesudah ditukar, Nilai dari a : {0}", a)
Console.WriteLine("Sesudah ditukar, Nilai dari b : {0}", b)
Console.ReadLine()
End Sub
End Module
Ketika kode di atas dikompilasi dan dijalankan, menghasilkan hasil sebagai berikut:
Sebelum ditukar, Nilai dari a :100
Sebelum ditukar, Nilai dari b :200

Nilai x dalam prosedur :200


Nilai y dalam prosedur :100

Sesudah ditukar, Nilai dari a :200


Sesudah ditukar, Nilai dari b :100

7.2.2 Fungsi (Function)


Bentuk penulisan (syntax) procedure function :
[Public | Private] Function <nama_function> ([<argumen>]) As <tipe_data>

<isi fungsi>

End Function

Pernyataan [Public | Private] menentukan ruang lingkup (scope) fungsi. Sebuah fungsi
dengan scope public bisa digunakan dalam lingkup project. Sedangkan fungsi dengan
scope private hanya bisa digunakan dalam lingkup form saja.

<nama_function> dibuat sebagai pengenal fungsi saat di-‘panggil’. Aturan penamaan


sebuah fungsi sama dengan aturan penamaan sebuah variabel. Nama sebuah fungsi dibuat
unik, tidak boleh ada yang sama.

<argumen> merupakan serangkaian nilai dan tipe data yang dipakai oleh fungsi untuk
mengerjakan ‘tugas’-nya. Pernyataan As <tipe_data> pada procedure function

Prosedur & Fungsi 76


menentukan tipe data nilai yang akan dikembalikan (return value) setelah ‘tugas’-nya
selesai. contoh berikut menunjukkan menggunakan fungsi FindMax:
Module myfunctions
Function FindMax(ByVal num1 As Integer, ByVal num2 As Integer) As Integer
' deklarasi variabel lokal
Dim result As Integer
If (num1 > num2) Then
result = num1 Else
result = num2
End If
FindMax = result
End Function

Sub Main()
Dim a As Integer = 100
Dim b As Integer = 200
Dim res As Integer

' pemanggilan fungsi FindMax


res = FindMax(a, b)
Console.WriteLine("Nilai Maksimal adalah : {0}", res)
Console.ReadLine()
End Sub
End Module

Ketika kode di atas dikompilasi dan dijalankan, menghasilkan hasil sebagai berikut:
Nilai Maksimal adalah : 200

Sebuah fungsi dapat memanggil dirinya sendiri. Hal ini dikenal sebagai rekursi. Berikut
adalah contoh yang menghitung faktorial untuk angka menggunakan fungsi rekursif:
Module myfunctions
Function factorial(ByVal num As Integer) As Integer
' deklarasi variabel lokal
Dim result As Integer
If (num = 1) Then
Return 1
Else
result = factorial(num - 1) * num
Return result
End If
End Function

Sub Main()
‘pemanggilan fungsi factorial
Console.WriteLine("Factorial dari 6 : {0}", factorial(6))
Console.WriteLine("Factorial dari 7 : {0}", factorial(7))
Console.WriteLine("Factorial dari 8 : {0}", factorial(8))
Console.ReadLine()
End Sub
End Module

Ketika kode di atas dikompilasi dan dijalankan, menghasilkan hasil sebagai berikut:
Factorial dari 6 : 720
Factorial dari 7 : 5040
Factorial dari 8 : 40320

Prosedur & Fungsi 76


7.3 Contoh Soal
1) Buatlah program untuk menampilkan data berobat dengan desain tampilan sebagai
berikut :

Adapun beberapa property from tersebut harus diberi nilai sebagai berikut :

Object Properties Values


Form1 Name DataBerobat
Text DataBerobat
GroupBox1 Text Input Data Berobat
Label1 Text Kode Transaksi
Label2 Text Nama Pasien
Label3 Text Tanggal
TextBox1 Name txt_kdTransaksi
TextBoxt2 Name txt_nmPasien
DateTimePicker1 Name DateTimePicker1
Button1 Name btn_simpan Simpan
Text
Button2 Name btn_lihatData
Text Lihat Data
Button3 Name btn_keluar Keluar
Text
ListView1 Name ListView1
Column1, Kode Transaksi,
column2, Nama Pasien,
column3 Tanggal
GridLines True
View Details

Adapun untuk koding programnya adalah sebagai berikut:

Prosedur & Fungsi 76


Public Class DataBerobat
Private data_berobat(5, 3) As String
Private indeks_data As Byte = 0

Private Sub btn_simpan_Click(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles btn_simpan.Click
simpan_data()
End Sub

Private Sub simpan_data()


If (indeks_data >= 5) Then
MsgBox("List sudah penuh")
Else
data_berobat(indeks_data, 0) = txt_kdTransaksi.Text
data_berobat(indeks_data, 1) = txt_nmPasien.Text
data_berobat(indeks_data, 2) =
Format(DateTimePicker1.Value, "dd MMM yyyy").ToString
indeks_data = indeks_data + 1
txt_kdTransaksi.Text = "" txt_nmPasien.Text
= "" txt_kdTransaksi.Focus()
End If
End Sub

Private Sub btn_lihatData_Click(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles btn_lihatData.Click
lihat_data()
End Sub

Private Sub lihat_data()


Dim i As Byte

Dim listitem As ListViewItem


listitem = New ListViewItem

If indeks_data > 0 Then


ListView1.Items.Clear()
ListView1.Items.Clear()
ListView1.Items.Clear()

For i = 0 To indeks_data
listitem = ListView1.Items.Add(data_berobat(i, 0))
listitem.SubItems.Add(data_berobat(i, 1))
listitem.SubItems.Add(data_berobat(i, 2))
Next
End If
End Sub

Private Sub btn_keluar_Click(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles btn_keluar.Click
Me.Close()
End Sub
End Class

Hasil eksekusi kode program diatas adalah :

Prosedur & Fungsi 76


2) Buatlah program pencarian kelulusan siswa berdasarkan nilai rata-rata dengan
menggunakan fungsi.
Jawaban :
Module fungsiku
Function Grade(Rata As Integer) As String
Select Case Rata
Case 95 To 100
Ket = “Sangat Memuaskan”
Case 85 To 94
Ket = “Cukup Memuaskan”
Case 60 To 84
Ket = “Memuaskan”
Case 45 To 59
Ket = “Tidak Memuaskan”
Case Else
Ket = “Mengecewakan”
End Select
Grade = Ket
End Function

Sub Main()
‘deklarasi variabel lokal
Dim N As Integer N = 90
‘pemanggilan fungsi Grade
Console.WriteLine("Nilai Rata-rata : {0}", N)
Console.WriteLine("Keterangan : {0}", Grade(N))
Console.ReadLine()
End Sub
End Module

Hasil eksekusi kode program diatas adalah :


Nilai Rata-rata : 90
Keterangan : Cukup Memuaskan

Prosedur & Fungsi 76


3) Buatlah program untuk konversi angka ke terbilang dengan desain sebagai berikut :

Adapun beberapa property from tersebut harus diberi nilai sebagai berikut :
Object Properties Nilai

Name Form1
Form1
Text Konversi Angka ke Terbilang
Label1 Text Masukkan Angka
Label2 Text Terbilang

Textbox1 Name Textangka


Textbox2 Name Textterbilang
Name Cmd Konversi Konversi
Button1
Text
Name Text Cmd Exit
Button2
Exit
Jawaban :
a) tambahkan sebuah modul dengan cara klik menu Project → Add Module....

Prosedur & Fungsi 76


Kemudian ketikkan fungsi terbilang sebagai berikut :
Module Module1
Public Function Terbilang(x As Double) As String
Dim tampung As Double
Dim teks As String
Dim bagian As String
Dim i As Integer
Dim tanda As Boolean

Dim letak(5)
letak(1) = "ribu "
letak(2) = "juta "
letak(3) = "milyar "
letak(4) = "trilyun "

If (x = 0) Then
Terbilang = "nol"
Exit Function
End If

If (x < 2000) Then


tanda = True
End If
teks =
""

If (x >= 1.0E+15) Then


Terbilang = "Nilai terlalu besar"
Exit Function

Prosedur & Fungsi 76


End If

For i = 4 To 1 Step -1
tampung = Int(x / (10 ^ (3 * i)))
If (tampung > 0) Then
bagian = ratusan(tampung, tanda)
teks = teks & bagian & letak(i) End If
x = x - tampung * (10 ^ (3 * i))
Next

teks = teks & ratusan(x, False)


Terbilang = teks
End Function

Function ratusan(ByVal y As Double, ByVal flag As Boolean) As String


Dim tmp As Double
Dim bilang As String
Dim bag As String
Dim j As Integer

Dim angka(9)
angka(1) = "se"
angka(2) = "dua "
angka(3) = "tiga "
angka(4) = "empat "
angka(5) = "lima "
angka(6) = "enam "
angka(7) = "tujuh "
angka(8) = "delapan "
angka(9) = "sembilan "

Dim posisi(2)
posisi(1) = "puluh "
posisi(2) = "ratus "

bilang = ""
For j = 2 To 1 Step -1
tmp = Int(y / (10 ^ j))
If (tmp > 0) Then
bag = angka(tmp)
If (j = 1 And tmp = 1) Then
y = y - tmp * 10 ^ j If
(y >= 1) Then
posisi(j) = "belas "
Else
angka(y) = "se"
End If
bilang = bilang & angka(y) & posisi(j)
ratusan = bilang
Exit Function
Else
bilang = bilang & bag & posisi(j)
End If
End If
y = y - tmp * 10 ^ j
Next

If (flag = False) Then


angka(1) = "satu " End If
bilang = bilang & angka(y)

Prosedur & Fungsi 76


ratusan = bilang
End Function
End Module

Kemudian berikan event click pada CmdKonversi dengan kode program sebagai
berikut :
Private Sub Cmdkonversi_Click(sender As Object, e As EventArgs) Handles
Cmdkonversi.Click
Dim angka As Double
Dim teks As String
angka = Val(Textangka.Text)
teks = Terbilang(angka)
Textterbilang.Text = teks
End Sub

Kemudian berikan event click pada CmdExit dengan kode program sebagai
berikut :
Private Sub cmdExit_Click(sender As Object, e As EventArgs) Handles
cmdExit.Click
End
End Sub

Hasil eksekusi program tersebut dan masukkan suatu angka pada kotak teks
Angka, klik tombol Konversi, teks terbilang dari angka tersebut akan muncul
pada kotak teks Terbilang.

7.3 Rangkuman

Pernyataan [Public | Private] menentukan ruang lingkup (scope) procedure / function.


Sebuah procedure / function dengan scope public bisa digunakan dalam lingkup project.
Sedangkan procedure / function dengan scope private hanya bisa digunakan dalam
lingkup form saja.

Prosedur & Fungsi 76


<nama_function> dibuat sebagai pengenal procedure / function saat di-‘panggil’. Aturan
penamaan sebuah procedure / function sama dengan aturan penamaan sebuah variabel.
Nama sebuah procedure / function dibuat unik, tidak boleh ada yang sama.

<argumen> merupakan serangkaian nilai dan tipe data yang dipakai oleh procedure /
function untuk mengerjakan ‘tugas’-nya atau sering disebut sebagai paramater. Sebuah
procedure / function bisa saja tidak memakai argumen sama sekali.

Pernyataan As <tipe_data> pada function menentukan tipe data nilai yang akan
dikembalikan (return value) setelah ‘tugas’-nya selesai.

7.4 Soal Latihan


1) Buatlah program dengan penerapan prosedur dan fungsi dengan desain tampilan
seperti berikut :

Adapun untuk pengaturan propertinya sebagai berikut :


Object Properties Nilai

Form1 Name Form1 Function


Text
TexBox1 Name TxtVar1
TexBox2 Name TxtVar2
TexBox3 Name TxtHasil
GroupBox1 Text Operasi
RadioButton1 Name RdbAkar
Text Akar Kuadrad
RadioButton2 Name RdbPangkat Pangkat
Text

Prosedur & Fungsi 76


RadioButton3 Name RdbPembagian Pembagian
Text
RadioButton4 Name RdbPerkalian Perkalian
Text
RadioButton5 Name RdbPenjumlahan
Text Penjumlahan
RadioButton6 Name RdbPengurangan
Text Pengurangan
Button1 Name BtnHitung Hitung
Text
Button2 Name BtnExit Exit
Text
Sourcecode

Public Class Form1


Private Sub rumus()
If RdbAkar.Checked = True Then
Dim A As Integer = Math.Sqrt(Val(TxtVar1.Text) * Val(TxtVar2.Text))
TxtHasil.Text = A
ElseIf RdbPangkat.Checked = True Then
Dim A As Integer = Val(TxtVar1.Text) ^ Val(TxtVar2.Text)
TxtHasil.Text = A
ElseIf RdbPembagian.Checked = True Then
Dim A As Integer = Val(TxtVar1.Text) / Val(TxtVar2.Text)
TxtHasil.Text = A
ElseIf RdbPerkalian.Checked = True Then
Dim A As Integer = Val(TxtVar1.Text) * Val(TxtVar2.Text)
TxtHasil.Text = A
ElseIf RdbPenjumlahan.Checked = True Then
Dim A As Integer = Val(TxtVar1.Text) + Val(TxtVar2.Text)
TxtHasil.Text = A
ElseIf RdbPengurangan.Checked = True Then
Dim A As Integer = Val(TxtVar1.Text) - Val(TxtVar2.Text)
TxtHasil.Text = A
End If
End Sub
Private Sub BtnHitung_Click(sender As Object, e As EventArgs) Handles
BtnHitung.Click
Call rumus()
End Sub

Private Sub BtnExit_Click(sender As Object, e As EventArgs) Handles


BtnExit.Click
Close()
End Sub
End Class

Hasil Program
Prosedur & Fungsi 76
 Akar Kuadrat

 Pangkat

Prosedur & Fungsi 76


 Pembagian

 Perkalian

Prosedur & Fungsi 76


 Penjumlahan

Prosedur & Fungsi 76


 Pengurangan

Prosedur & Fungsi 76


2) Buatlah program dengan penerapan prosedur dan fungsi dengan desain tampilan
seperti berikut :

Adapun untuk pengaturan propertinya sebagai berikut :


Object Properties Nilai

Form1 Name Form1 Function


Text
Button1 Name Btnhitung Hitung
Text
Button2 Name BtnUlang Ulang
Text
Button2 Name BtnSelesai Selesai
Text
Sourcecode

Public Class Form1


Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs)
Handles ComboBox1.SelectedIndexChanged

End Sub

Private Sub BtnHitung_Click(sender As Object, e As EventArgs) Handles


BtnHitung.Click
Select Case ComboBox1.Text
Case "Persegi"
luas.Text = Val(sisi1.Text) ^ 2
keliling.Text = Val(sisi1.Text) * 4
Case "Persegi Panjang"
luas.Text = Val(panjang.Text) * Val(lebar.Text)
keliling.Text = (Val(panjang.Text) + Val(lebar.Text)) * 2
Case "Segitiga"
luas.Text = Val(alas.Text) * Val(tinggi.Text) / 2
keliling.Text = Val(sisi1.Text) + Val(sisi2.Text) + Val(alas.Text)
Case "Jajargenjang"
luas.Text = Val(alas.Text) * Val(tinggi.Text)
keliling.Text = (Val(sisi1.Text) + Val(sisi2.Text)) * 2
Case "Trapesium"
luas.Text = (Val(sisiA.Text) + Val(sisiB.Text)) *
Val(tinggi.Text) / 2
keliling.Text = Val(sisiA.Text) + Val(sisiB.Text) + Val(sisi1.Text)
+ Val(sisi2.Text)
Case "Layang-layang"
luas.Text = (Val(diagonal1.Text) * Val(diagonal2.Text)) / 2

Prosedur & Fungsi 76


keliling.Text = (Val(sisi1.Text) + Val(sisi2.Text)) * 2
Case "Belah Ketupat"
luas.Text = (Val(diagonal1.Text) * Val(diagonal2.Text)) / 2
keliling.Text = (Val(sisi1.Text) + Val(sisi2.Text)) * 2
Case "Lingkaran"
luas.Text = 3.14 * (Val(diameter.Text) ^ 2)
keliling.Text = 3.14 * Val(diameter.Text)
End Select

End Sub

Private Sub BtnUlang_Click(sender As Object, e As EventArgs) Handles


BtnUlang.Click
luas.Text = ""
keliling.Text = ""
panjang.Text = ""
lebar.Text = ""
tinggi.Text = ""
diameter.Text = ""
sisiA.Text = ""
sisiB.Text = ""
sisi1.Text = ""
sisi2.Text = ""
sisiB.Text = ""
alas.Text = ""
diagonal1.Text = ""
diagonal2.Text = ""
End Sub

Private Sub BtnSelesai_Click(sender As Object, e As EventArgs) Handles


BtnSelesai.Click
Close()
End Sub
End Class

Hasil Program
 Persegi

Prosedur & Fungsi 76


 Persegi Panjang

 Segitiga

Prosedur & Fungsi 76


 Jajargenjang

Prosedur & Fungsi 76


 Trapesium

 Layang-layang

Prosedur & Fungsi 76


 Belah Ketupat

Prosedur & Fungsi 76


 Lingkaran

Prosedur & Fungsi 76

Anda mungkin juga menyukai