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