Saturday, December 24, 2016

Bab 4. Visual Basic .NET Belajar Dari Contoh


4. Struktur Kendali Bagian 2







Pengantar

Sebelum menulis sebuah program untuk menyelesaikan masalah tertentu, adalah hal yang esensial untuk memiliki pemahaman yang dalam terhadap masalah dan secara hati-hati merancang pendekatan untuk menyelesaikannya. Pada bab ini, akan didiskusikan beberapa isu yang terkait dengan teori dan prinsip pemrograman terstruktur. Teknik yang akan dieksplorasi dapat diterapkan pada semua bahasa pemrograman tingkat tinggi, termasuk Visual Basic. Pada Bab 7, Pemrograman Berbasis Objek, akan ditunjukkan bagaimana mengendalikan semua struktur yang disajikan pada bab ini agar berguna dalam konstruksi dan pemanipulasian objek.


Esensi-Esensi Repetisi Terkendali Kounter
Pada bab sebelumnya, telah diintroduksi konsep repetisi terkendali kounter. Pada bagian ini, akan diformalisasi elemen-elemen yang dibutuhkan pada repetisi terkendali kounter, yaitu:
1.       Nama dari variabel kendali (atau kounter loop) yang dipakai untuk menentukan apakah loop harus berlanjut atau berhenti beriterasi.
2.       Nilai awal variabel kendali.
3.       Inkremen (atau dekremen) yang dipakai untuk memodifikasi variabel kendali pada tiap iterasi loop.
4.       Kondisi untuk menguji nilai akhir variabel kendali (apakah loop harus berlanjut atau berhenti beriterasi).

Contoh pada kode 4.1 menggunakan empat elemen repetisi terkendali kounter untuk menampilkan dijit-dijit genap dari 2 sampai 10.

Deklarasi pada baris 8 menamai variabel kendali (kounter), mengindikasikan bahwa variabel tersebut bertipe Integer, meminta memori untuknya, dan menetapkan nilai awal sebesar 2. Deklarasi ini mencakup inisialisasi.

Perhatikan struktur While (baris 10-13). Baris 11 menampilkan nilai sekarang dari kounter, dan baris 12 menginkremen variabel kendali sebesar 2 pada tiap iterasi loop. Kondisi kontinuasi-loop pada struktur While (baris 10) menguji apakah nilai dari variabel kendali kurang dari atau sama dengan 10, yang berarti bahwa 10 adalah nilai akhir dimana kondisi bernilai true. Tubuh While ini tetap dieksekusi pada saat variabel kendali bernilai 10. Loop akan berhenti ketika variabel kendali bernilai lebih dari 10 (ketika kounter menjadi 12 karena loop menginkremen sebesar 2 pada tiap iterasi).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
' Kode 4.1: KounterWhile.vb
' Menggunakan struktur While untuk mendemonstrasikan
' repetisi terkendali kounter.

Module modKounterWhile

    Sub Main()
        Dim kounter As Integer = 2 ' inisialisasi

        While kounter <= 10 ' kondisi repetisi
            Console.Write(kounter & " ")
            kounter += 2 ' menginkremen kounter
        End While

    End Sub ' Main

End Module ' modKounterWhile
2 4 6 8 10


Struktur Repetisi For/Next
Struktur repetisi For/Next menangani detil-detil repetisi terkendali kounter. Untuk mengilustrasikan kekuatan dari For/Next, Anda sekarang dapat menulis-ulang kode 4.1. Hasilnya ditampilkan pada kode 4.2.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
' Kode 4.2: KounterFor.vb
' Menggunakan struktur For/Next untuk mendemonstrasikan
' repetisi terkendali kounter.

Module modKounterFor

    Sub Main()
        Dim kounter As Integer

        ' inisialisasi, kondisi repetisi, dan
        ' penginkremenan dicakup dalam struktur For
        For kounter = 2 To 10 Step 2
            Console.Write(kounter & " ")
        Next

    End Sub ' Main

End Module ' modKounterFor
2 4 6 8 10

Prosedur Main pada program beroperasi sebagai berikut: Ketika struktur For/Next (baris 12-14) mulai dieksekusi, variabel kendali kounter diinisialisasi dengan 2, jadi menuntaskan dua elemen esensial pada repetisi terkendali kounter, yaitu nama variabel kendali dan nilai awalnya. Berikutnya, kondisi kontinuasi yang terimplikasi, kounter <= 10, diuji. Katakunci To diperlukan pada struktur For/Next. Katakunci Step menentukan besar inkremen pada kounter, setiap kali tubuh For/Next dieksekusi. Inkremen pada struktur For/Next bisa negatif, dimana, pada kasus itu merupakan dekremen dan loop akan melakukan penghitungan mundur. Jika Step dan nilai yang mengikutinya diabaikan, maka nilai inkremen menjadi default 1. Programer umumnya mengabaikan porsi Step untuk kasus inkremen sebesar 1.

Karena nilai awal dari kounter adalah 2, kondisi terimplikasi terpenuhi (True), dan nilai kounter, 2, ditampilkan pada baris 13. Katakunci Next diperlukan untuk menandai akhir dari struktur repetisi For/Next. Ketika katakunci Next dicapai, variabel kounter diinkremen sebesar nilai yang dispesifikasi, 2, dan loop menguji kembali kondisi kontinuasi-loop.

Pada titik ini, variabel kendali bernilai 4. Nilai ini tidak melebihi nilai akhir, jadi program mengeksekusi statemen tubuh kembali. Proses ini berlanjut sampai nilai kounter 10 ditampilkan dan variabel kendali kounter diinkremen menjadi 12, menyebabkan evaluasi terhadap pengujian kontinuasi-loop bernilai false dan repetisi berhenti. Selanjutnya, program mengeksekusi statemen pertama yang berada setelah struktur For/Next. (Pada kasus ini, prosedur Main berhenti, karena program meraih statemen End Sub pada baris 16).

Pada Gambar 4.1, struktur For/Next dapat ditengok lebih dekat. Baris pertama dari struktur For/Next kadangkala dipanggil dengan header For/Next. Perhatikan bahwa header For/Next menspesifikasi setiap item yang dibutuhkan untuk melakukan repetisi terkendali kounter dengan sebuah variabel kendali.




Gambar 4.1 Komponen-komponen header For/Next


Pada banyak kasus, struktur For/Next dapat direpresentasikan dengan struktur repetisi lain. Sebagai contoh, struktur While ekivalen dapat dibuat menjadi bentuk

variabel = awal

While variabel <= akhir
    statemen
    variabel += inkremen
End While

Sebagai contoh, baris 8-13 pada kode 4.1 ekivalen dengan baris 8-14 pada kode 4.2.

Nilai awal, nilai akhir, dan inkremen pada suatu struktur For/Next dapat memuat sembarang ekspresi aritmatik. Ekspresi tersebut dievaluasi sekali (ketika struktur For/Next mulai dieksekusi) dan bisa digunakan sebagai nilai awal, nilai akhir, dan inkremen pada header For/Next. Sebagai contoh, asumsikan bahwa nilai1 = 2 dan nilai2 = 10. Header

For j = nilai1 To 4 * nilai1 * nilai2 Step nilai2 \ nilai1

ekivalen dengan header

For j = 2 To 80 Step 5

Jika kondisi kontinuasi-loop awalnya bernilai false (yaitu, jika nilai awal lebih besar dari nilai akhir dan bahwa inkremen positif), maka tubuh For/Next tidak akan pernah dieksekusi. Yang terjadi adalah eksekusi akan dilanjutkan terhadap statemen yang berada setelah struktur For/Next.

Variabel kendali seringkali ditampilkan atau digunakan dalam perhitungan pada tubuh For/Next, tetapi tidak harus seperti itu. Adalah hal umum untuk menggunakan variabel kendali secara eksklusif untuk mengendalikan repetisi dan tidak memakainya dalam tubuh For/Next.

Grafik-alir untuk struktur For/Next sama dengan grafik-alir untuk struktur While. Sebagai contoh, grafik-alir untuk struktur

For kounter = 1 To 10
    Console.WriteLine(kounter * 10)
Next

ditampilkan pada Gambar 4.2. Grafik-alir ini menerangkan bahwa inisialisasi terjadi hanya sekali dan bahwa penginkremenan terjadi setelah statemen tubuh dieksekusi. Perhatikan bahwa, di samping simbol lingkaran kecil dan anak-panah, grafik-alir hanya memuat simbol persegi-panjang dan simbol diamond. Simbol persegi-panjang dan simbol diamond diisi dengan aksi dan keputusan yang sesuai dengan algoritma yang sedang diimplementasikan.



Gambar 4.2 Grafik-alir struktur repetisi For/Next


Beberapa Contoh Penggunaan Struktur For/Next
Beberapa contoh berikut mendemonstrasikan beragam cara dalam memvariasikan variabel kendali pada struktur For/Next. Pada tiap kasus, akan dituliskan header For/Next yang sesuai.

a)       Memvariasikan variabel kendali dari 1 sampai 100 dengan inkremen sebesar 1.

For i = 1 To 100 atau For i = 1 To 100 Step 1
b)      Memvariasikan variabel kendali dari 100 sampai 1 dengan inkremen sebesar -1 (dekremen sebesar 1).

For i = 100 To 1 Step -1

c)       Memvariasikan variabel kendali dari 7 sampai 77 dengan inkremen sebesar 7.

For i = 7 To 77 Step 7

d)      Memvariasikan variabel kendali dari 20 sampai 2 dengan inkremen sebesar -2 (dekremen sebesar 2).

For i = 20 To 2 Step -2

e)       Memvariasikan variabel kendali dengan runtun nilai berikut: 2, 5, 8, 11, 14, 17, 20.

For i = 2 To 20 Step 3

f)        Memvariasikan variabel kendali dengan runtun nilai berikut: 99, 88, 77, 66, 55, 44, 33, 22, 11, 0.

For i = 99 To 0 Step -11

Dua contoh berikut mendemonstrasikan aplikasi sederhana atas struktur repetisi For/Next. Program pada kode 4.3 menggunakan struktur For/Next untuk menjumlahkan semua integer genap dalam rentang 2 sampai 100. Ingat bahwa penggunaan kelas MessageBox memerlukan penambahan sebuah referensi ke System.Windows.Forms.dll.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
' Kode 4.3: Penjumlahan.vb
' Menggunakan struktur For/Next untuk mendemonstrasikan penjumlahan.

Imports System.Windows.Forms

Module modJumlah

    Sub Main()
        Dim jum = 0, angka As Integer

        ' menjumlahkan semua integer genap dari 2 sampai 100
        For angka = 2 To 100 Step 2
            jum += angka
        Next

        MessageBox.Show("Hasil Penjumlahan sebesar " & jum, _
            "Penjumlahan semua integer genap dari 2 sampai 100", _
            MessageBoxButtons.OK, MessageBoxIcon.Information)

    End Sub ' Main

End Module ' modJumlah

Versi dari metode MessageBox.Show dipanggil pada kode 4.3 (baris 16-18) berbeda dari versi yang telah didiskusikan pada beberapa contoh terdahulu, yang memerlukan empat argumen bukan dua argumen. Dialog yang ditampilkan pada Gambar 4.3 diberi label untuk menekankan empat argumen. Dua argumen pertama adalah String yang ditampilkan pada dialog dan judul dialog. Argumen ketiga dan keempat merupakan dua konstanta yang merepresentasikan tombol dan ikon. Argumen ketiga mengindikasikan tombol mana yang akan ditampilkan, dan argumen keempat mengindikasikan sebuah ikon yang muncul di sisi kiri dialog. Dokumentasi MSDN menyediakan penjelasan tentang semua konstanta MessageBoxButtons dan MessageBoxIcon. Ikon dialog pesan dideskripsikan pada Gambar 4.4; tombol dialog pesan dideskripsikan pada Gambar 4.5, termasuk di dalamnya bagaimana menampilkan tombol jamak.


Gambar 4.3 Keluaran program pada kode 4.3


Gambar 4.4 Konstanta-konstanta ikon dialog pesan


Konstanta MessageBoxButtons
Deskripsi
MessageBoxButtons.OK



MessageBoxButtons.OKCancel




MessageBoxButtons.YesNo


MessageBoxButtons.YesNoCancel



MessageBoxButtons.RetryCancel




MessageBoxButtons.AbortRetryIgnore
Tombol OK. Mengijinkan pengguna untuk menyetujui sebuah pesan. Dicantumkan secara default.

Tombol OK dan Cancel. Mengijinkan pengguna untuk melanjutkan atau membatalkan sebuah operasi.

Tombol Yes dan No. Mengijinkan pengguna untuk merespon sebuah pertanyaan.

Tombol Yes, No, dan Cancel. Mengijinkan pengguna untuk merespon sebuah pertanyaan atau membatalkan sebuah operasi.

Tombol Retry dan Cancel. Secara umum digunakan untuk mengijinkan pengguna untuk mencoba-kembali atau membatalkan sebuah operasi yang gagal.

Tombol Abort, Retry, dan Ignore. Ketika salah satu dari serangkaian operasi telah gagal, tombol ini mengjinkan pengguna untuk membatalkan keselurutan operasi, mencoba-kembali operasi yang gagal, dan mengabaikan operasi yang gagal dan melanjutkan operasi berikutnya.

Gambar 4.5 Konstanta-konstanta tombol dialog Pesan

Contoh berikut menghitung investasi menggunakan struktur For/Next. Perhatikan statemen permasalahan berikut:

Seseorang menginvestasikan $ 1000 di sebuah akun bank dengan suku bunga 5%. Diasumsikan bahwa semua bunga ditempatkan pada deposit. Penghitungan dan pencetakan jumlah uang pada akun dilakukan di akhir setiap tahun selama periode 10 tahun. Untuk menentukan jumlah uang pada akun, digunakan formula:

 

dimana
p adalah jumlah awal yang diinvestasikan (prinsipal)
r adalah laju suku bunga tahunan (0.05 untuk 5%)
n adalah jumlah tahun
a adalah jumlah uang pada deposit di akhir tahun ke-n.

Permasalahan ini melibatkan sebuah loop untuk melakukan perhitungan yang diperlukan setiap tahun selama 10 tahun. Program Visual Basic untuk permasalahan ini ditampilkan pada kode 4.4.

Baris 9 mendeklarasikan dua variabal Decimal. Tipe Decimal dipakai untuk perhitungan moneter. Baris 10 mendeklarasikan laju bertipe Double dan baris 14-15 menginisialisasi prinsipal dengan 1000.00 dan laju dengan 0.05.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
' Kode 4.4: Bunga.vb
' Menghitung investasi.

Imports System.Windows.Forms

Module modBunga

    Sub Main()
        Dim jumlah, prinsipal As Decimal ' jumlah rupiah
        Dim laju As Double ' suku bunga
        Dim tahun As Integer ' kounter tahun
        Dim total As String ' jumlah total investasi setiap tahun

        prinsipal = 1000.0
        laju = 0.05

        total = "Tahun" & vbTab & "Uang pada deposit" & vbCrLf

        ' Menghitung investasi setiap tahun
        For tahun = 1 To 10
            jumlah = prinsipal * (1 + laju) ^ tahun
            total &= tahun & vbTab & _
                String.Format("{0:C}", jumlah) & vbCrLf
        Next

        ' menampilkan total
        MessageBox.Show(total, "Menghitung Investasi", _
            MessageBoxButtons.OK, MessageBoxIcon.Information)

    End Sub ' Main

End Module ' modBunga



Gambar 4.6 Keluaran program pada kode 4.4

Tubuh struktur For/Next dieksekusi sebanyak 10 kali, memvariasi variabel kendali tahun dari 1 sampai 10 dengan inkremen sebesar 1. Baris 21 melakukan perhitungan dari statemen permasalahan

 

dimana a adalah jumlah, p adalah prinsipal, r adalah laju, dan n adalah tahun.

Baris 22-23 menempelkan teks di akhir String total. Teks tersebut mencakup nilai tahun saat ini, sebuah karakter tab (vbTab) untuk memposisikan ke kolom kedua, hasil dari pemanggilan terhadap metode String.Format(“{0:C}”, jumlah) dan, sebuah karakter garis-baru (vbCrLf) untuk memulai keluaran pada baris berikutnya. Argumen pertama yang dilewatikan kepada Format adalah string format. Anda telah melihat String yang memuat {0}, {1}, dan seterusnya, dimana dijit di dalam kurung kurawal mengindikasikan argumen yang sedang ditampilkan. Pada Bab 3, Anda telah menggunakan string format yang cukup kompleks untuk menampilkan angka titik-mengambang dengan dua dijit setelah titik desimal. Pada format string ini, “{0:C}”, dijit pertama (0) berperan sama. Informasi yang dispesifikasi setelah titik-dua (:) dikenal dengan kode pemformatan. Kode pemformatan C (singkatan untuk “currency”) mengindikasikan bahwa argumen terkait (jumlah) harus ditampilkan dalam format moneter. Gambar 4.7 menunjukkan beberapa kode pemformatan dari dokumentasi MSDN. Semua kode pemformatan tidak sensitif terhadap perubahan huruf besar dan huruf kecil. Perhatikan bahwa kode D dan X hanya dapat dipakai dengan nilai integer.

Kode Format
Deskripsi
C


E




F

G


D


N


X
Currency. Diawali dengan simbol $, memisahkan setiap tiga dijit dengan koma dan menetapkan dua dijit setelah titik desimal.

Notasi saintifik. Menampilkan satu dijit di sisi kiri titik desimal dan enam dijit di sisi kanan titik desimal, diikuti dengan karakter E dan sebuah integer tiga-dijit yang merepresentasikan eksponen. Sebagai contoh, 956.2 diformat sebagai 9.562000E+002.

Titik tetap (fixed-point). Menetapkan dua dijit di belakang (di sisi kanan) titik desimal.

General. Visual Basic memilihkan E atau F untuk Anda, tergantung dari representasi mana yang akan menghasilkan string yang lebih pendek.

Titik desimal. Menampilkan sebuah integer sebagai bilangan bulat dengan format basis standar 10.

Bilangan atau number. Memisahkan setiap tiga dijit dengan sebuah koma dan menetapkan dua dijit di belakang titik desimal.

Integer heksadesimal. Menampilkan integer dalam notasi heksadesimal (basis 16).

Gambar 4.7 Beberapa kode pemformatan untuk String


Struktur Seleksi-Jamak Select Case
Pada bab sebelumnya, telah didiskusikan struktur seleksi-tunggal If/Then dan struktur seleksi-ganda If/Then/Else. Kadangkala, sebuah algoritma memuat serangkaian keputusan dimana di dalamnya algoritma menguji sebuah variabel atau ekspresi secara terpisah untuk tiap nilai asumsi dari variabel atau ekspresi. Algoritma kemudian mengambil beragam aksi berdasarkan nilai-nilai tersebut. Visual Basic menyediakan struktur seleksi-jamak Select Case untuk menangani pembuatan keputusan semacam ini. Program pada kode 4.5 menggunakan Select Case untuk menghitung beragam nilai huruf pada sebuah ujian. Diasumsikan bahwa ujian digradasi sebagai berikut: 90 dan lebih diberikan A, 80-89 adalah B, 70-79 adalah C, 60-69 adalah D, dan 0-59 adalah F. Pengajar yang baik ini memberikan nilai minimum 10 kepada mahasiswa yang hadir pada ujian. Mahasiswa yang tidak hadir ujian diberikan nilai 0.

Baris 7 pada kode 4.5 mendeklarasikan variabel nilai bertipe Integer. Variabel ini menyimpan setiap nilai yang dibaca. Baris 8-12 mendeklarasikan lima variabel yang menyimpan total jumlah setiap jenis nilai huruf. Baris 18-57 menggunakan loop While untuk repetisi terkendali sentinel.

Baris 20

Select Case nilai

memulai struktur Select Case. Ekspresi yang mengikuti katakunci Select Case dipanggil dengan ekspresi pengendali. Ekspresi pengendali (nilai dari nilai) dibandingkan secara sekuensial dengan tiap Case. Jika ditemukan Case yang cocok, kode pada Case tersebut akan dieksekusi, kemudian kendali program akan berlanjut ke statemen pertama yang berada setelah struktur Select Case (baris 55).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
' Kode 4.5: UjiSelect.vb
' Menggunakan strukture Select Case.

Module modBacaNilai

    Sub Main()
        Dim nilai As Integer = 0 ' satu nilai
        Dim aKount As Integer = 0 ' jumlah A
        Dim bKount As Integer = 0 ' jumlah B
        Dim cKount As Integer = 0 ' jumlah C
        Dim dKount As Integer = 0 ' jumlah D
        Dim fKount As Integer = 0 ' jumlah F

        Console.Write("Masukkan sebuah nilai, -1 untuk keluar: ")
        nilai = Console.ReadLine()

        ' membaca dan memproses nilai-nilai
        While nilai <> -1

            Select Case nilai ' memeriksa nilai mana yang dibaca

                Case 100 ' mahasiswa skor 100
                    Console.WriteLine("Skor sempurna!" & vbCrLf & _
                        "Nilai huruf: A" & vbCrLf)
                    aKount += 1

                Case 90 To 99 ' mahasiswa skor 90-99
                    Console.WriteLine("Nilai huruf: A" & vbCrLf)
                    aKount += 1

                Case 80 To 89 ' mahasiswa skor 80-89
                    Console.WriteLine("Nilai huruf: B" & vbCrLf)
                    bKount += 1

                Case 70 To 79 ' mahasiswa skor 70-79
                    Console.WriteLine("Nilai huruf: C" & vbCrLf)
                    cKount += 1

                Case 60 To 69 ' mahasiswa skor 60-69
                    Console.WriteLine("Nilai huruf: D" & vbCrLf)
                    dKount += 1

                    ' mahasiswa skor 0 atau 10-59 (10 poin untuk kehadiran)
                Case 0, 10 To 59
                    Console.WriteLine("Nilai huruf: F" & vbCrLf)
                    fKount += 1

                Case Else

                    ' mengingatkan pengguna bahwa nilai tak-valid telah dibaca
                    Console.WriteLine("Masukan tak-valid. " & _
                        "Silahkan masukkan nilai valid." & vbCrLf)
            End Select

            Console.Write("Masukkan sebuah nilai, -1 untuk keluar: ")
            nilai = Console.ReadLine()
        End While

        ' menampilkan jumlah setiap jenis nilai huruf
        Console.WriteLine(vbCrLf & _
            "Total untuk tiap jenis nilai huruf: " & vbCrLf & _
            "A: " & aKount & vbCrLf & "B: " & bKount _
            & vbCrLf & "C: " & cKount & vbCrLf & "D: " & _
            dKount & vbCrLf & "F: " & fKount)

    End Sub ' Main

End Module ' modBacaNilai
Masukkan sebuah nilai, -1 untuk keluar: 84
Nilai huruf: B

Masukkan sebuah nilai, -1 untuk keluar: 100
Skor sempurna!
Nilai huruf: A

Masukkan sebuah nilai, -1 untuk keluar: 3000
Masukan tak-valid. Silahkan masukkan nilai valid.

Masukkan sebuah nilai, -1 untuk keluar: 95
Nilai huruf: A

Masukkan sebuah nilai, -1 untuk keluar: 78
Nilai huruf: C

Masukkan sebuah nilai, -1 untuk keluar: 64
Nilai huruf: D

Masukkan sebuah nilai, -1 untuk keluar: 10
Nilai huruf: F

Masukkan sebuah nilai, -1 untuk keluar: 54
Nilai huruf: F

Masukkan sebuah nilai, -1 untuk keluar: -1

Total untuk tiap jenis nilai huruf:
A: 2
B: 1
C: 1
D: 1
F: 2

Statemen Case pertama (baris 22) menentukan jika nilai dari nilai persis sama dengan 100. Statemen Case berikutnya (baris 27) menentukan jika nilai berada di antara 90 dan 99. Katakunci To menspesifikasi rentang. Baris 31-44 menggunakan katakunci ini untuk menyajikan serangkaian Case.

Ketika beberapa nilai sekaligus diuji dalam sebuah statemen Case, masing-masing nilai dipisahkan dengan koma (baris 44). Apakah 0 atau sembarang nilai dalam rentang 10 sampai 59 yang cocok dengan Case ini. Baris 48 memuat Case Else opsional, yang dieksekusi manakala masukan tidak cocok dengan semua Case sebelumnya. Case Else secara umum dipakai untuk memeriksa masukan yang tak valid. Ketika digunakan, Case Else harus ditempatkan sebagai Case terakhir.

Katakunci End Select diperlukan untuk menghentikan struktur Select Case. Perhatikan bahwa tubuh struktur Select Case diidentasi (diberikan beberapa spasi) untuk menekankan dan memperbaiki kemudahan dalam pembacaan program.

Statemen Case dapat pula menggunakan operator relasional untuk menentukan apakah ekspresi pengendali memenuhi kondisi atau tidak. Sebagai contoh,

Case Is < 0

menggunakan katakunci Is berikut dengan operator relasional, <, untuk menguji nilai-nilai yang kurang dari 0. Gambar 4.8 menggambarkan grafik-alir struktur Select Case.



Gambar 4.8 Grafik-alir struktur seleksi-jamak Select Case


Struktur Repetisi Do/Loop While
Struktur repetisi Do/Loop While sama dengan struktur While dan struktur Do While/Loop. Pada struktur While dan Do While/Loop, kondisi kontinuasi-loop diuji di awal loop, sebelum tubuh loop dieksekusi. Struktur Do/Loop While menguji kondisi kontinuasi-loop setelah tubuh loop selesai dieksekusi. Oleh karena itu, pada struktur Do/Loop While, tubuh loop selalu dieksekusi minimum sekali. Ketika struktur Do/Loop While berhenti, eksekusi berlanjut ke statemen yang berada setelah klausa Loop While. Program pada kode 4.6 menggunakan sebuah struktur Do/Loop While untuk menampilkan nilai 1 sampai 5.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
' Kode 4.6: DoWhile.vb
' Mendemonstrasikan struktur repetisi Do/Loop While.

Module modDoWhile

    Sub Main()
        Dim kounter As Integer = 1

        ' menampilkan nilai 1 sampai 5
        Do
            Console.Write(kounter & " ")
            kounter += 1
        Loop While kounter <= 5

    End Sub ' Main

End Module ' modDoWhile
1 2 3 4 5

Baris 10-13 mendemonstrasikan struktur Do/Loop While. Pertama kali struktur tersebut dijumpai, baris 11-12 dieksekusi, menampilkan nilai dari kounter (pada titik ini, 1) kemudian menginkremen kounter sebesar 1. Kemudian, kondisi pada baris 13 dievaluasi. Variabel kounter sekarang bernilai 2, yang masih kurang dari atau sama dengan 5; karena kondisi dipenuhi, struktur Do/Loop While dieksekusi kembali. Kelima kali struktur tersebut dieksekusi, baris 11 menampilkan nilai 5, dan, pada baris 12, kounter diinkremen menjadi 6. Pada titik ini, kondisi pada baris 13 dievaluasi bernilai false, dan program keluar dari struktur Do/Loop While.

Grafik alir Do/Loop While (Gambar 4.9) mengilustrasikan fakta bahwa kondisi kontinuasi-loop tidak dievaluasi sampai tubuh struktur dieksekusi sebanyak minimal sekali. Grafik alir hanya memuat simbol persegi-panjang dan simbol diamond.



Gambar 4.9 Grafik alir struktur repetisi Do/Loop While


Struktur Repetisi Do/Loop Until
Struktur repetisi Do/Loop Until sama dengan struktur Do Until/Loop, kecuali fakta bahwa kondisi kontinuasi-loop diuji setelah tubuh loop selesai dieksekusi; oleh karena itu, tubuh loop dieksekusi minimal sekali. Ketika Do/Loop Until berhenti, eksekusi berlanjut ke statemen pertama yang berada setelah klausa Loop Until. Kode 4.7 menggunakan sebuah struktur Do/Loop Until untuk menampilkan angka 1 sampai 5.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
' Kode 4.7: LoopUntil.vb
' Menggunakan struktur repetisi Do/Loop Until.

Module modLoopUntil

    Sub Main()
        Dim kounter As Integer = 1

        ' menampilkan nilai 1 sampai 5
        Do
            Console.Write(kounter & " ")
            kounter += 1
        Loop Until kounter > 5

    End Sub ' Main

End Module ' modLoopUntil
1 2 3 4 5

Grafik alir Do/Loop Until (Gambar 4.10) mengilustrasikan fakta bahwa kondisi kontinuasi-loop tidak dievaluasi sampai tubuh struktur dieksekusi sebanyak minimal sekali. Grafik alir hanya memuat simbol persegi-panjang dan simbol diamond.



Gambar 4.10 Grafik alir struktur repetisi Do/Loop Until


Menggunakan Katakunci Exit
Statemen Exit Do, Exit While, dan Exit For dapat dipakai untuk mengubah aliran kendali, yang menyebabkan kendali program keluar dari suatu struktur repetisi secara mendadak. Statemen Exit Do dapat dieksekusi pada struktur Do/While Loop, Do/Loop While, Do Until/Loop, atau Do/Loop Until, menyebabkan program keluar secara mendadak dari struktur repetisi tersebut. Sama halnya, statemen Exit For dan Exit While menyebabkan kendali program keluar secara mendadak dari loop For/Next dan While. Eksekusi berlanjut ke statemen pertama yang berada setelah struktur repetisi.

Kode 4.8 mendemonstrasikan statemen Exit For, Exit Do, dan Exit While pada pelbagai struktur repetisi.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
' Kode 4.8: UjiExit.vb
' Menggunakan katakunci Exit pada pelbagai struktur repetisi.

Imports System.Windows.Forms

Module modUjiExit

    Sub Main()
        Dim keluaran As String
        Dim kounter As Integer

        For kounter = 1 To 10

            ' melompati sisa kode pada loop hanya jika kounter = 3
            If kounter = 3 Then
                Exit For
            End If

        Next

        keluaran = "kounter = " & kounter & _
            " setelah keluar dari struktur For/Next" & vbCrLf

        Do Until kounter > 10

            ' melompati sisa kode pada loop hanya jika kounter = 5
            If kounter = 5 Then
                Exit Do
            End If

            kounter += 1
        Loop

        keluaran &= "kounter = " & kounter & _
            " setelah keluar dari struktur Do Until/Loop" & vbCrLf

        While kounter <= 10

            ' melompati sisa kode pada loop hanya jika kounter = 7
            If kounter = 7 Then
                Exit While
            End If

            kounter += 1
        End While

        keluaran &= "kounter = " & kounter & _
            " setelah keluar dari struktur While"

        MessageBox.Show(keluaran, "Uji Exit", _
            MessageBoxButtons.OK, MessageBoxIcon.Information)
    End Sub ' Main

End Module ' modUjiExit



Gambar 4.11 Katakunci Exit pada pelbagai struktur


Header pada struktur For/Next (baris 12) mengindikasikan bahwa tubuh loop harus dieksekusi sebanyak sepuluh kali. Selama tiap iterasi, struktur If/Then (baris 15-17) memeriksa apakah variabel kendali, kounter, sama dengan 3 atau tidak. Jika ya, statemen Exit For (baris 16) akan dieksekusi. Jadi, setelah tubuh struktur For/Next dieksekusi untuk ketiga kalinya (kounter bernilai 3), statemen Exit For menghentikan eksekusi terhadap loop. Kendali program kemudian berlanjut ke statemen penugasan (baris 21-22).

Header pada struktur Do Until/Loop (baris 24) mengindikasikan bahwa loop harus dieksekusi sampai kounter bernilai lebih besar dari 10. Perhatikan bahwa kounter bernilai 3 ketika struktur Do Until/Loop mulai dieksekusi. Ketika kounter bernilai 3 dan 4, tubuh struktur If/Then (baris 27-29) tidak akan dieksekusi, dan kounter diinkremen (baris 31). Tetapi, ketika kounter bernilai 5, statemen Exit Do (baris 28) akan dieksekusi, dan menghentikan loop. Statemen penugasan (baris 34-35) kemudian dieksekusi. Perhatikan bahwa program tidak menginkremen kounter (baris 31) setelah statemen Exit Do dieksekusi.

Struktur While (baris 37-45) berperilaku sama seperti Do While/Loop. Pada kasus ini, kounter bernilai 5 ketika loop ini mulai dieksekusi. Ketika kounter bernilai 7, statemen Exit While (baris 41) akan dieksekusi, menghentikan eksekusi terhadap struktur While.


Operator Logikal
Sejauh ini, Anda hanya mempelajari beberapa kondisi sederhana, seperti kounter <= 10, total > 100, dan angka <> nilaiSentinel. Setiap struktur repetisi dan struktur seleksi hanya mengevaluasi satu kondisi menggunakan salah satu dari operator-operator <, >, <=, >=, =, dan <>. Untuk membuat keputusan yang bersandar pada evaluasi terhadap kondisi jamak, Anda perlu melakukan pengujian terhadap beberapa statemen atau pada struktur If/Then atau If/Then/Else bersarang.

Untuk menangani kondisi jamak secara efisien, Visual Basic menyediakan beberapa operator logikal yang bisa dipakai untuk membentuk kondisi-kondisi yang lebih kompleks dengan menggabungkan beberapa kondisi sederhana. Operator-operator logikal yang disediakan Visual Basic adalah AndAlso, And, OrElse, Or, Xor, dan Not. Kegunaan tiap operator ini akan disajikan dalam contoh.

Dimisalkan Anda ingin memastikan bahwa dua kondisi bernilai true pada sebuah program sebelum jalur eksekusi tertentu dipilih. Pada kasus semacam itu, Anda dapat menggunakan operator logikal AndAlso sebagai berikut:

If gender = "P" AndAlso usia >= 65 Then
    wanitaUsiaLanjut += 1
End If

Statemen If/Then ini memuat dua kondisi sederhana. Kondisi gender = “P” menentukan apakah seseorang adalah perempuan dan kondisi usia >=65 menentukan apakah seseorang telah berusia sama dengan atau lebih dari 65 tahun. Dua kondisi sederhana tersebut lebih dahulu dievaluasi, karena derajat keutamaan = dan >= keduanya lebih tinggi dari keutamaan AndAlso. Statemen If/Then kemudian mengevaluasi kondisi gabungan

gender = "P" AndAlso usia >= 65

Kondisi ini dievaluasi sebagai true jika dan hanya jika kedua kondisi sederhana bernilai true. Ketika kondisi gabungan bernilai true, kounter wanitaUsiaLanjut akan diinkremen sebesar 1. Namun, jika salah satu atau kedua kondisi sederhana bernilai false, maka program akan melompati statemen inkremen dan berlanjut ke statemen yang berada setelah struktur If/Then. Kemudahan pembacaan dari kondisi gabungan tersebut dapat ditingkatkan dengan menambahkan kurung (meskipun sebenarnya kurang diperlukan):

(gender = "P") AndAlso (usia >= 65)

Gambar 4.12 mengilustrasikan efek penggunaan operator AndAlso dengan dua ekspresi. Tabel tersebut mencantumkan empat kemungkinan kombinasi atas nilai true dan false untuk ekspresi1 dan ekspresi2. Tabel seperti itu dikenal dengan tabel kebenaran. Visual Basic memberikan hasil evaluasi true atau false terhadap ekspresi yang memuat operator logikal, operator relasional, dan operator ekualitas.

ekspresi1
ekspresi2
ekspresi1 AndAlso ekspresi2
False

False

True

True
False

True

False

True
False

False

False

True

Gambar 4.12 Tabel kebenaran operator AndAlso

Sekarang akan dibahas tentang operator OrElse. Dimisalkan bahwa Anda ingin memastikan salah satu atau kedua kondisi bernilai true sebelum memilih jalur eksekusi tertentu. Anda dapat menggunakan operator OrElse pada segmen program berikut:

If (rerataSemester >= 90 OrElse ujianAkhir >= 90) Then
    Console.WriteLine("Nilai mahasiswa adalah A")
End If

Statemen ini juga memuat dua kondisi sederhana. Kondisi rerataSemester >= 90 dievaluasi untuk menentukan apakah mahasiswa layak mendapatkan “A” pada sebuah matakuliah karena pencapaian yang unggul selama semester perkuliahan. Kondisi ujianAkhir >= 90 dievaluasi untuk menentukan apakah mahasiswa layak mendapatkan “A” pada ujian akhir. Statemen If/Then kemudian mengevaluasi kondisi gabungan

(rerataSemester >= 90 OrElse ujianAkhir >= 90)

dan mengganjar mahasiswa dengan nilai “A” jika salah satu atau kedua kondisi bernilai true. Perhatikan bahwa teks “Nilai mahasiswa adalah A” selalu ditampilkan, kecuali jika kedua kondisi bernilai false. Gambar 4.13 menyediakan tabel kebenaran untuk operator OrElse.

Operator AndAlso memiliki derajat keutamaan lebih tinggi daripada operator OrElse. Sebuah ekspresi yang memuat operator AndAlso atau OrElse akan dievaluasi hanya jika kebenaran atau ke-tak-benar-an telah diketahui. Sebagai contoh, evaluasi terhadap ekspresi

 (gender = "P" AndAlso usia >= 65)

akan berhenti jika gender tidak sama dengan “P” (keseluruhan ekspresi bernilai false); evaluasi terhadap ekspresi kedua tak-relevan karena kondisi pertama bernilai false. Evaluasi terhadap kondisi kedua terjadi jika dan hanya jika gender sama dengan “P” (keseluruhan ekspresi bisa bernilai true jika kondisi usia >= 65 benilai true). Fitur untuk mengevaluasi ekspresi AndAlso dan OrElse ini dikenal dengan evaluasi hubung-singkat.

ekspresi1
ekspresi2
ekspresi1 OrElse ekspresi2
False

False

True

True
False

True

False

True
False

True

True

True

Gambar 4.13 Tabel kebenaran operator OrElse

Operator logikal AND tanpa evaluasi hubung-singkat (And) dan operator OR tanpa evaluasi hubung-singkat (Or) sama dengan operator AndAlso dan operator OrElse, dengan satu pengecualian bahwa operator And dan Or selalu mengevaluasi kedua operadnya. Tidak ada fitur hubung-singkat yang terjadi ketika And dan Or dipakai. Sebagai contoh, ekspresi

(gender = "P" And usia >= 65)

akan tetap mengevaluasi usia >= 65, meskipun jika gender tidak sama dengan “P”.

Normalnya, tidak ada alasan menggunakan And dan Or menggantikan AndAlso dan OrElse. Namun, beberapa programer menggunakan And dan Or ketika operand kanan dari sebuah kondisi menghasilkan efek samping (seperti modifikasi atas nilai variabel) atau jika operand kanan mencantumkan pemanggil metode yang diperlukan, seperti pada segmen program berikut:


Console.WriteLine("Berapa usia Anda?")
If (gender = "P" And Console.ReadLine() >= 65) Then
    Console.WriteLine("Anda adalah seorang perempuan berusia lanjut.")
End If

Di sini, operator And menjamin bahwa kondisi Console.ReadLine() >= 65 dievaluasi, sehingga ReadLine dipanggil meskipun keseluruhan ekspresi bernilai true atau false.

Sebuah kondisi yang memuat operator logikal Xor bernilai true jika dan hanya jika salah satu operandnya bernilai true dan operand lainnya bernilai false. Jika kedua operandnya bernilai false atau keduanya bernilai true, maka keseluruhan kondisi bernilai false. Gambar 4.14 menyajikan tabel kebenaran untuk operator Xor. Operator ini selalu mengevaluasi kedua operandnya (tidak ada fitur evaluasi hubung-singkat).

ekspresi1
ekspresi2
ekspresi1 Xor ekspresi2
False

False

True

True
False

True

False

True
False

True

True

False

Gambar 4.14 Tabel kebenaran operator Xor

Operator Not pada Visual Basic memampukan seorang programer untuk membalikkan makna sebuah kondisi. Tidak seperti operator logikal AndAlso, And, OrElse, Or, dan Xor, bahwa masing-masing menggabungkan dua kondisi (semuanya merupakan operator biner), operator logikal negasi (Xor) merupakan operator unary, yang hanya memerlukan satu operand. Operator negasi logikal ditempatkan sebelum kondisi. Operator negasi logikal didemonstrasikan pada segmen program berikut:

If Not (nilai = nilaiSentinel) Then
    Console.WriteLine("Nilai berikutnya adalah " & nilai)
End If

Kurung yang mengapit kondisi nilai = nilaiSentinel diperlukan, karena operator negasi logikal (Not) mempunyai derajat keutamaan lebih tinggi daripada operator ekualitas. Gambar 4.15 menyajikan tabel kebenaran untuk operator negasi logikal.

ekspresi
Not ekspresi
False

True
True

False

Gambar 4.15 Tabel kebenaran operator Not

Pada banyak kasus, programer dapat menghindari penggunaan negasi logikal dengan mengekspresikan kondisi secara berbeda menggunakan operator relasional atau operator ekualitas. Sebagai contoh, statemen sebelumnya dapat ditulis-ulang sebagai berikut:

If nilai <> nilaiSentinel Then
    Console.WriteLine("Nilai berikutnya adalah " & nilai)
End If

Aplikasi Windows pada kode 4.9 mendemonstrasikan kegunaan semua operator logikal dengan menampilkan tiap tabel kebenarannya.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
‘ Kode 4.9: OperatorLogikal.vb
‘ Menggunakan operator logikal

Public Class FormOperatorLogikal
    Inherits System.Windows.Forms.Form

    ‘ IDE Visual Studio .NET

    Private Sub FormOperatorLogikal_Load(_
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles MyBase.Load

        lblAndAlso.Text = "AndAlso" & vbCrLf & vbCrLf & _
            "False AndAlso False: " & (False AndAlso False) & _
            vbCrLf & "False AndAlso True: " & _
            (False AndAlso True) & vbCrLf & _
            "True AndAlso False: " & (True AndAlso False) & _
            vbCrLf & "True AndAlso True: " & (True AndAlso True)

        lblOrElse.Text = "OrElse" & vbCrLf & vbCrLf & _
            "False OrElse False: " & (False OrElse False) & _
            vbCrLf & "False OrElse True: " & (False OrElse True) & _
            vbCrLf & "True OrElse False: " & (True OrElse False) & _
            vbCrLf & "True OrElse True: " & (True OrElse True)

        lblAnd.Text = "And" & vbCrLf & vbCrLf & _
            "False And False: " & (False And False) & vbCrLf & _
            "False And True: " & (False And True) & vbCrLf & _
            "True And False: " & (True And False) & vbCrLf & _
            "True And True: " & (True And True)

        lblOr.Text = "Or" & vbCrLf & _
            vbCrLf & "False Or False: " & (False Or False) & _
            vbCrLf & "False Or True: " & (False Or True) & _
            vbCrLf & "True Or False: " & (True Or False) & _
            vbCrLf & "True Or True: " & (True Or True)

        lblXor.Text = "Xor" & vbCrLf & _
            vbCrLf & "False Xor False: " & (False Xor False) & _
            vbCrLf & "False Xor True: " & (False Xor True) & _
            vbCrLf & "True Xor False: " & (True Xor False) & _
            vbCrLf & "True Xor True: " & (True Xor True)

        lblNot.Text = "Not" & vbCrLf & vbCrLf & _
            "Not False: " & (Not False) & vbCrLf & "Not True: " & _
            (Not True)

    End Sub

End Class




Gambar 4.16 Keluaran program pada kode 4.9


Baris 4 memulai kelas FormOperatorLogikal. Ingat bahwa Visual Studio menciptakan sendiri kode awal untuk sebuah aplikasi Windows. Programer kemudian mengembangkan kode tersebut untuk menciptakan aplikasinya sendiri. Pada Bab 11, akan dijelaskan secara detil tentang kode yang dibangkitkan oleh Visual Studio. Baris 9 memulai definisi prosedur FormOperatorLogikal_Load. Sebuah definisi prosedur kosong untuk aplikasi Windows dapat diperoleh dengan mengklik dua kali form pada jendela View. Pada kasus ini, prosedur menciptakan beberapa String untuk merepresentasikan tabel kebenaran dari beberapa operator logikal dan menampilkannya pada enam label menggunakan properti Text. Baris 13-18 mendemonstrasikan operator AndAlso; baris 20-24 mendemonstrasikan operator OrElse. Sisa yang lain mendemonstrasikan operator And, Or, Xor, dan Not. Digunakan katakunci True dan False pada program untuk menspesifikasi nilai bertipe Boolean.


Latihan
1.       Tulislah sebuah statemen Visual Basic atau sehimpunan statemen Visual Basic untuk melakukan tiap pekerjaan berikut:
a)       Jumlahkan semua integer ganjil antara 1 sampai 99 menggunakan struktur For/Next. Asumsikan bahwa variabel integer jum dan kount telah dideklarasikan.
b)      Tulislah sebuah statemen yang dapat ditempatkan di dalam sebuah loop While.
c)       Tampilkanlah semua integer dari 1 sampai 20, menggunakan sebuah loop Do/Loop While dan variabel kounter x. Asumsikan bahwa variabel x telah dideklarasikan, tetapi tidak diinisialisasi. Tampilkan hanya lima integer per baris. (Gunakan perhitungan x Mod 5. Ketika nilai dari ekspresi tersebut adalah 0, tampilkan sebuah karakter garis-baru; sebaliknya, tampilkan sebuah karakter tab. Panggil Console.WriteLine untuk menampilkan karakter garis-baru dan panggil Console.Write(vbTab) untuk menampilkan karakter tab).
d)      Ulangi bagian c), menggunakan struktur For/Next.

2.       Tulislah dua program yang masing-masing menampilkan tabel biner, oktal dan heksadesimal dari angka desimal mulai 1 sampai 256.
a)       Untuk program pertama, tampilkan keluaran pada konsol tanpa menggunakan sembarang format String.
b)      Untuk program kedua, tampilkan hasil pada konsol menggunakan format String heksadesimal dan desimal.

3.       Tulislah sebuah program untuk menampilkan beberapa pola berikut. Gunakan beberapa loop For/Next untuk membangkitkan pola tersebut.





4.       Tulislah sebuah program untuk menampilkan pola diamond berikut. Gunakan beberapa loop For/Next untuk membangkitkan pola tersebut. 








No comments:

Post a Comment