6.
Array
Array
Array adalah sekelompok lokasi memori
yang bertetangga yang memiliki nama sama dan tipe sama. Untuk merujuk ke lokasi
tertentu dalam memori atau sebuah elemen di dalam suatu array, Anda perlu
menspesifikasi nama array dan nomor posisi elemen yang ditunjuk. Nomor posisi
adalah nilai yang mengindikasikan lokasi spesifik di dalam array.
Gambar 6.1 menampilkan sebuah array
integer bernama arrayAngka. Array
ini memuat 12 elemen, yang semuanya dapat dirujuk dengan memberikan nama
diikuti dengan nomor posisi elemen (diapit dalam kurung). Elemen pertama di
dalam setiap array adalah elemen ke nol. Jadi, elemen pertama pada array arrayAngka dirujuk sebagai arrayAngka(0), elemen kedua sebagai arrayAngka(1), array ketujuh sebagai arrayAngka(6), dan seterusnya. Elemen
ke-i arrayAngka dinyatakan sebagai arrayAngka(i-1).
Gambar 6.1 Sebuah array
yang memuat 12 elemen
Nomor posisi di dalam kurung secara
formal dinamakan dengan indeks (atau subskript). Indeks adalah sebuah integer
atau ekspresi integer. Jika program menggunakan ekspresi sebagai indeks, maka
ekspresi tersebut dievaluasi terlebih dahulu untuk menentukan indeks. Sebagai
contoh, jika variabel nilai1 sama
dengan 5, dan variabel nilai2 sama
dengan 6, maka statemen
arrayAngka(nilai1 + nilai2) +=
2
menambahkan dua pada elemen array arrayAngka(11). Perhatikan bahwa nama
array yang diindeks (nama array diikuti dengan sebuah indeks di dalam kurung)
merupakan sebuah lvalue, yang dapat
digunakan di sisi kiri sebuah statemen penugasan.
Akan dibahas array arrayAngka pada Gambar 6.1 dengan lebih dekat. Nama array adalah arrayAngka. Dua belas elemen array
tersebut dirujuk sebagai arrayAngka(0)
sampai arrayAngka(11). Nilai dari arrayAngka(0) adalah -45, nilai dari arrayAngka(1) adalah 6, nilai dari arrayAngka(7) adalah 62, dan nilai dari
ArrayAngka(11) adalah 78.
Nilai-nilai yang disimpan di dalam array dapat digunakan dalam berbagai
kalkulasi dan aplikasi. Sebagai contoh, untuk menentukan penjumlahan atas semua
nilai di dalam tiga elemen pertama pada arrayAngka
dan kemudian menyimpan hasilnya di dalam variabel jum, akan dituliskan
jum = arrayAngka(0) + arrayAngka
(1) + arrayAngka (2)
Untuk membagi nilai dari elemen ketujuh
arrayAngka dengan 2 dan menugaskan
hasilnya pada variabel hasil, akan
dituliskan
hasil = arrayAngka (6) \ 2
Setiap array dalam Visual Basic
“mengetahui” panjangnya sendiri. Panjang array (pada kasus ini, 12) ditentukan
dengan ekspresi berikut:
arrayAngka.Length
Semua array memiliki akses terhadap
metode dan properti dari kelas System.Array,
termasuk properti Length. Sebagai
contoh, metode GetUpperBound
menghasilkan nilai balik berupa indeks dari elemen terakhir di dalam suatu
array. Metode GetUpperBound
memerlukan satu argumen yang mengindikasikan dimensi array. Untuk array satu
dimensi, seperti arrayAngka, argumen
yang dilewatkan pada GetUpperBound
adalah 0. Sebagai contoh, ekspresi
arrayAngka.GetUpperBound(0)
akan memberikan nilai balik 11. Perhatikan bahwa nilai yang
dijadikan nilai balik oleh metode GetUpperBound
adalah lebih rendah 1 dari nilai properti Length
pada array tersebut. Kelas, objek, dan metode kelas akan didiskusikan lebih
detil pada Bab 7.
Mendeklarasikan
dan Mengalokasikan Array
Setiap array menempati ruang di dalam
memori. Jumlah memori yang diperlukan sebuah array tergantung pada panjang
array dan ukuran tipe data elemen array. Deklarasi atas sebuah array
menciptakan suatu variabel yang dapat menyimpan referensi yang menunjuk ke
suatu array tetapi tidak menciptakan array di dalam memori. Untuk
mendeklarasikan sebuah array, programer perlu memberikan nama array dan tipe
data. Statemen berikut mendeklarasikan array pada Gambar 6.1:
Dim arrayAngka As Integer()
Kurung yang mengikuti tipe data
mengindikasikan bahwa arrayAngka
adalah sebuah array. Array dapat dideklarasikan untuk menampung sembarang tipe
data. Di dalam sebuah array bertipe data primitif, setiap elemen array memuat
satu nilai bertipe data yang dideklarasikan. Sebagai contoh, setiap elemen dari
array Integer memuat sebuah nilai Integer.
Sebelum digunakan, array harus
menspesifikasi ukuran array dan mengalokasikan memori untuk array tersebut,
menggunakan katakunci New. Nilai
yang disimpan di dalam variabel array sebenarnya adalah referensi yang menunjuk
ke lokasi di dalam memori komputer dimana objek array diciptakan. Semua
variabel tipe tak-primitif adalah variabel referensi (biasanya hanya dinamakan
dengan referensi). Untuk mengalokasikan memori untuk arrayAngka setelah ia dideklarasikan, statemen
arrayAngka = New Integer(11)
{}
yang digunakan. Pada contoh sebelumnya,
angka 11 mendefinisikan batas atas (upper
bound) array. Batas array menentukan nomor indeks yang dapat dipakai untuk
mengakses sebuah elemen di dalam array. Di sini, batas array adalah 0 (secara
implisit pada statemen tersebut) dan 11, yang berarti bahwa indeks di luar
batas itu tidak dapat digunakan untuk mengakses elemen dalam array. Perhatikan
bahwa ukuran aktual array adalah satu lebih besar dari batas atas yang
dispesifikasi dalam statemen alokasi.
Kurung kurawal ({ dan }) pada statemen
alokasi array tersebut dinamakan dengan daftar penginisialisasi (initializer list) yang dipakai untuk
menspesifikasi nilai-nilai awal elemen dalam array. Ketika daftar
penginisialisasi kosong, elemen-elemen array diinisialisasi dengan nilai
default. Nilai default 0 diberikan
untuk variabel tipe data primitif, False
untuk variabel Boolean, dan Nothing untuk tipe referensi. Katakunci
Nothing menandakan sebuah referensi
kosong (nilai yang mengindikasikan bahwa sebuah variabel referensi tidak
ditugasi suatu alamat memori komputer). Daftar penginisialisasi juga dapat
memuat daftar nilai awal elemen array yang dipisahkan dengan koma. Sebagai
contoh,
Dim angka As Integer()
angka = New Integer()
{1, 2, 3, 6}
mendeklarasikan dan mengalokasikan
sebuah array yang memuat empat nilai Integer.
Visual Basic dapat menentukan batas array dari jumlah elemen pada daftar
penginisialisasi. Jadi, Anda tidak perlu menspesifikasi ukuran array ketika
daftar penginisialisasi tak-kosong digunakan.
Alokasi sebuah array dapat digabungkan
ke dalam deklarasi, seperti dalam statemen
Dim arrayAngka As Integer() = New Integer(11) {}
Beberapa array dapat dideklarasikan
dengan satu statemen; statemen berikut mendeklarasikan dua variabel array
bertipe Double():
Dim array1, array2 As Double()
Contoh:
Mengalokasikan Array
Program pada kode 6.1 menggunakan
katakunci New untuk mengalokasikan
sebuah array dengan 10 elemen Integer,
yang diinisialisasi dengan nol (nilai default untuk array bertipe Integer). Program menampilkan
elemen-elemen array dalam format tabular pada dialog.
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
|
' Kode 6.1: MenciptakanArray.vb
' Mendeklarasikan dan mengalokasikan sebuah array.
Imports System.Windows.Forms
Module modCiptakanArray
Sub Main()
Dim keluaran As String
Dim i As Integer
Dim array As Integer() ' mendklarasikan
variabel array
array = New Integer(9) {} ' mengalokasikan memori untuk array
keluaran &= "Subskript " & vbTab &
"Nilai" & vbCrLf
' menampilkan nilai-nilai
dalam array
For i = 0 To
array.GetUpperBound(0)
keluaran &= i
& vbTab & array(i) & vbCrLf
Next
keluaran &= vbCrLf
& "Array memuat "
& _
array.Length & " elemen."
MessageBox.Show(keluaran,
"Array dengan Nilai-Nilai Integer",
_
MessageBoxButtons.OK,
MessageBoxIcon.Information)
End Sub ' Main
End Module ' modCiptakanArray
|
Gambar 6.2 Keluaran
program pada kode 6.1
Baris 12 mendeklarasikan array, sebuah
variabel yang dapat menyimpan referensi yang menunjuk ke sebuah array dengan
elemen-elemen Integer. Baris 13
mengalokasikan sebuah array dengan 10 elemen menggunakan New dan menugaskannya pada array.
Program menghasilkan keluaran di dalam String
keluaran.
Baris 18-20 menggunakan sebuah struktur
For untuk menghasilkan nomor indeks
(yang direpresentasikan oleh i) dan
nilai tiap elemen array (array(i))
pada keluaran. Perhatikan bahwa pada
header struktur For, ekspresi array.GetUpperBound(0) digunakan untuk
mencari batas atas array. Properti Length
(baris 22-23) menghasilkan nilai balik berupa jumlah elemen di dalam array.
Menginisialisasi
Array
Program pada kode 6.2 menciptakan dua
array, masing-masing dengan 10 elemen, dan menetapkan nilai-nilai elemen
menggunakan daftar penginisialisasi. Program juga menggunakan sebuah struktur For. Kedua array ditampilkan dalam
format tabular pada dialog pesan.
Baris 12 menggunakan satu statemen
untuk mendeklarasikan array1 dan array2. Baris 16-17 mengalokasikan 10
elemen dari array1 menggunakan New dan menginisialisasi array tersebut
menggunakan sebuah daftar penginisialisasi. Baris 20 mengalokasikan array2, dengan ukuran yang ditentukan
oleh ekspresi array1.GetUpperBound(0).
Ini berarti bahwa array1 dan array2, pada program ini, memiliki
batas atas yang sama.
Struktur For pada baris 23-25 menginisialisasi setiap elemen dalam array2. Setiap elemen dalam array2 diinisialisasi (baris 24) dengan
integer-integer genap 2, 4, 6, ..., 20. Struktur For pada baris 31-34 menggunakan semua nilai di dalam array untuk
membangun String keluaran, yang
ditampilkan pada sebuah MessageBox
(baris 36-37).
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
|
' Kode 6.2: InisialisasiArray.vb
' Menginisialisasi array.
Imports System.Windows.Forms
Module modInisialisasiArray
Sub Main()
Dim keluaran As String
Dim i As Integer
Dim array1, array2 As
Integer() ' mendeklarasikan dua array
' daftar penginisialisasi
menspesifikasi jumlah elemen
' dan nilai tiap elemen
array1 = New Integer() {32, 27, 64, 18, 95, _
14, 90, 70, 60, 37}
' mengalokasikan array2
berdasarkan panjang array1
array2 = New Integer(array1.GetUpperBound(0))
{}
' menetapkan nilai-nilai
di dalam array2 dengan perhitungan
For i = 0 To array2.GetUpperBound(0)
array2(i) = 2 + 2 * i
Next
keluaran &= "Subskript " & vbTab &
"Array1" & vbTab
& _
"Array2" & vbCrLf
' menampilkan nilai-nilai
kedua array
For i = 0 To array1.GetUpperBound(0)
keluaran &= i
& vbTab & array1(i) & vbTab & array2(i) & _
vbCrLf
Next
MessageBox.Show(keluaran,
"Array dengan Nilai-Nilai Integer",
_
MessageBoxButtons.OK,
MessageBoxIcon.Information)
End Sub ' Main
End Module ' modInisialisasiArray
|
Gambar 6.3 Keluaran
program pada kode 6.2
Menjumlahkan
Elemen Array
Seringkali, elemen-elemen sebuah array
merepresentasikan sederet angka yang diperlukan dalam perhitungan. Sebagai
contoh, jika setiap elemen sebuah array merepresentasikan nilai ujian
mahasiswa, maka pengajar perlu untuk mencari total penjumlahan elemen array,
kemudian menghitung rerata kelas. Program pada kode 6.3 menjumlahan nilai-nilai
yang dimuat di dalam array integer 10 elemen.
Baris 9-10 mendeklarasikan,
mengalokasikan, dan menginisialisasi array 10 elemen, array. Baris 16, di dalam tubuh struktur For, melakukan penjumlahan.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
' Kode 6.3: JumElemenArray.vb
' Menghitung penjumlahan atas elemen-elemen array.
Imports System.Windows.Forms
Module JumElemenArray
Sub Main()
Dim array As Integer()
= New Integer() _
{1, 2, 3, 4, 5, 6, 7, 8,
9, 10}
Dim total As Integer =
0, i As Integer = 0
' penjumlahan nilai-nilai
elemen array
For i = 0 To
array.GetUpperBound(0)
total += array(i)
Next
MessageBox.Show("Total elemen-elemen array: "
& total, _
"Penjumlahan elemen-elemen Array", MessageBoxButtons.OK, _
MessageBoxIcon.Information)
End Sub ' Main
End Module ' JumElemenArray
|
Gambar 6.4 Keluaran
program pada kode 6.3
Menggunakan
Array untuk Menganalisa Hasil Survey
Contoh selanjutnya menggunakan array
untuk menyimpulkan data yang dikoleksi dalam sebuah survey. Perhatikan statemen
permasalah berikut:
Empat puluh mahasiswa diminta untuk memberikan nilai dengan
skala 1 sampai 10. Pertanyaan yang diberikan adalah mengenai kualitas makanan
di kantin kampus. Interpretasi skala 1 adalah kualitas makanan sangat buruk dan
skala 10 berarti makanan sangat baik. Tempatkan 40 respon tersebut di dalam
sebuah array integer dan tentukan frekuensi dari tiap skala.
Anda diminta untuk menyimpulkan jumlah
respon untuk tiap tipe atau skala. Array respon
(baris 14-16) merupakan sebuah array integer 40 elemen yang memuat respon
mahasiswa terhadap survey. Dengan menggunakan array 11 elemen, frekuensi, Anda dapat menghitung jumlah
respon untuk tiap skala. Anda mengabaikan elemen pertama, frekuensi(0), karena adalah sangat logis untuk memiliki respon
survey dinomori mulai dari 1.
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
|
' Kode 6.4: SurveyMahasiswa.vb
' Menggunakan array untuk menampilkan hasil survey.
Imports System.Windows.Forms
Module modSurveyMahasiswa
Sub Main()
Dim jawaban, skala As
Integer
Dim keluaran As String
' array respon
Dim respon As Integer()
respon = New Integer() {1, 2, 6, 4, 8, 5, 9,
7, _
8, 10, 1, 6, 3, 8, 6, 10, 3, 8, 2, 7, 6,
5, 7, 6, _
8 , 6, 7, 5, 6, 6, 5, 6, 7, 5, 6, 4, 8, 6,
8, 10}
' array frekuensi (indeks
0 sampai 10)
Dim frekuensi As Integer()
= New Integer(10) {}
' menghitung frekuensi
For jawaban = 0 To
respon.GetUpperBound(0)
frekuensi(respon(jawaban)) += 1
Next
keluaran &= "Skala " & vbTab & "Frekuensi " & vbCrLf
For skala = 1 To frekuensi.GetUpperBound(0)
keluaran &= skala
& vbTab & frekuensi(skala) & vbCrLf
Next
MessageBox.Show(keluaran,
"Program Survey Mahasiswa",
_
MessageBoxButtons.OK,
MessageBoxIcon.Information)
End Sub ' Main
End Module ' modSurveyMahasiswa
|
Gambar 6.5 Keluaran
program pada kode 6.4
Stuktur For (baris 22-24) membaca respon dari array respon dan menginkremen salah satu dari 10 kounter dalam array frekuensi (frekuensi(1) sampai frekuensi(10)).
Statemen kunci dalam loop ada pada baris 23. Statemen ini menginkremen kounter frekuensi sesuai dengan nilai respon(jawaban).
Akan dijelaskan tentang beberapa
iterasi pada struktur For. Ketika
kounter jawaban bernilai 0, respon(jawaban) memiliki nilai respon(0). Oleh karena itu, frekuensi(respon(jawaban)) sebenarnya
diinterpretasikan sebagai frekuensi(1),
yang berarti bahwa kounter pertama di dalam array frekuensi diinkremen sebesar satu. Dalam mengevaluasi ekspresi frekuensi(respon(jawab-an)), Visual Basic
memulai dengan nilai yang berada di dalam kurung terdalam (jawaban, sekarang bernilai 0). Nilai dari jawaban diberikan ke dalam ekspresi, dan Visual Basic mengevaluasi
apa yang ada di dalam kurung lebih luar, (respon(jawaban)).
Nilai tersebut digunakan sebagai indeks untuk array frekuensi dalam menentukan kounter mana yang akan diinkremen.
Ketika jawaban bernilai 1, respon(jawaban)
adalah nilai dari respon(1).
Hasilnya, frekuensi(respon(jawaban))
sebenarnya diinterpretasikan sebagai frekuensi(2),
menyebabkan elemen ketiga dari array frekuensi
diinkremen.
Ketika jawaban bernilai 2, respon(jawaban)
adalah nilai dari respon(2),
sehingga frekuensi(res-pon(jawaban))
diinterpretasikan sebagai frekuensi(6),
menyebabkan elemen ketujuh dari array frekuensi
diinkremen.
Menggunakan
Histogram untuk Menampilkan Data Array
Banyak program menyajikan data kepada
pengguna dalam format grafis atau visual. Sebagai contoh, nilai-nilai numerik
seringkali ditampilkan sebagai grafik batang, dimana batang yang lebih panjang
merepresentasikan nilai numerik yang lebih besar. Kode 6.5 menampilkan data
numerik secara grafis dengan menciptakan sebuah histogram yang menggambarkan
setiap nilai numerik sebagai batang asterisk (*).
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 6.5: Histogram.vb
' Menggunakan data untuk menciptakan histogram.
Imports System.Windows.Forms
Module modHistogram
Sub Main()
Dim keluaran As String
' string keluaran
Dim i, j As Integer '
kounter
' menciptakan array data
Dim array1 As Integer()
= New Integer() _
{19, 3, 15, 7, 11, 9, 13, 5, 17, 1}
keluaran &= "Elemen " & vbTab &
"Nilai " & vbTab
& _
"Histogram"
For i = 0 To array1.GetUpperBound(0)
keluaran &= vbCrLf
& i & vbTab & array1(i) & vbTab
For j = 1 To array1(i)
keluaran &=
"*" ' menambah satu asterisk
Next
Next
MessageBox.Show(keluaran,
"Program Menampilkan Histogram",
_
MessageBoxButtons.OK,
MessageBoxIcon.Information)
End Sub ' Main
End Module ' modHistogram
|
Program
membaca setiap nilai dari array dan menampilkan informasi dalam format
grafik batang atau histogram. Setiap angka dan sebuah batang yang memuat
sejumlah asterisk terkait ditampilkan. Loop For bersarang (baris 19-26) menempelkan atau menyambung grafik
batang tersebut ke dalam String yang
akan ditampilkan pada MessageBox.
Perhatikan nilai akhir (array1(i))
dari struktur For sebelah dalam pada
baris 22. Setiap kali struktur For
sebelah dalam diraih (baris 22), dihitung mulai dari 1 sampai array1(i), menggunakan sebuah nilai di
dalam array1 untuk menentukan nilai
akhir dari variabel kendali j
(jumlah asterisk yang akan ditampilkan).
Pada Bab 5, digunakan sederet kounter
dalam progam pelemparan dadu untuk menjejak jumlah kemunculan setiap sisi dari
sebuah dadu enam-sisi dalam 12 kali pelemparan. Sekarang ditemukan bahwa
terdapat cara yang lebih elegan dalam melakukannya. Cara ini menggunakan array,
seperti ditunjukkan pada kode 6.6.
Gambar 6.6 Keluaran program pada kode 6.5
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
' Kode 6.6: LemparDadu.vb
' Pelemparan dadu dengan
grafik frekuensi.
' Perhatian:
Directory.GetCurrentDirectory menghasilkan direktori
' folder dimana projek
sekarang berada plus
' "bin/". Ini
adalah dimana citra dadu ditempatkan
' untuk contoh ini.
Imports System.IO
Imports
System.Windows.Forms
Public Class
LemparDadu
Inherits
System.Windows.Forms.Form
Dim
angkaAcak As Random = New Random()
Dim
frekuensi As Integer() = New Integer(6) {}
' PictureBox
Friend
WithEvents lblDadu1 As PictureBox
Friend
WithEvents lblDadu2 As PictureBox
Friend
WithEvents lblDadu3 As PictureBox
Friend
WithEvents lblDadu4 As PictureBox
Friend
WithEvents lblDadu5 As PictureBox
Friend
WithEvents lblDadu6 As PictureBox
Friend
WithEvents lblDadu7 As PictureBox
Friend
WithEvents lblDadu8 As PictureBox
Friend
WithEvents lblDadu9 As PictureBox
Friend
WithEvents lblDadu10 As PictureBox
Friend
WithEvents lblDadu11 As PictureBox
Friend
WithEvents lblDadu12 As PictureBox
' kotak teks
Friend
WithEvents txtTampil As TextBox
' tombol
Friend
WithEvents cmdLempar As Button
' kode yang dibangkitkan oleh Visual
Studio .NET
' event handler untuk tombol cmdLempar
Private
Sub cmdLempar_Click(ByVal sender
As System.Object, _
ByVal
e As System.EventArgs) Handles cmdLempar.Click
' melewatkan label kepada sebuah
metode yang
' secara acak menugaskan sebuah sisi
ke setiap dadu
LemparDadu(lblDadu1)
LemparDadu(lblDadu2)
LemparDadu(lblDadu3)
LemparDadu(lblDadu4)
LemparDadu(lblDadu5)
LemparDadu(lblDadu6)
LemparDadu(lblDadu7)
LemparDadu(lblDadu8)
LemparDadu(lblDadu9)
LemparDadu(lblDadu10)
LemparDadu(lblDadu11)
LemparDadu(lblDadu12)
Dim
total As Double = 0
Dim
i As Integer
For
i = 1 To
frekuensi.GetUpperBound(0)
total += frekuensi(i)
Next
txtTampil.Text = "Sisi" & vbTab & vbTab
& "Frekuensi" &
_
vbTab & vbTab & vbTab
& "Persen" &
vbCrLf
' menampilkan nilai-nilai frekuensi
For
i = 1 To
frekuensi.GetUpperBound(0)
txtTampil.Text &= i &
vbTab & vbTab & frekuensi(i) & _
vbTab & vbTab & vbTab
& String.Format("{0:N}",
_
frekuensi(i) / total * 100) &
"%" & vbCrLf
Next
End
Sub ' cmdLempar_Click
' mensimulasikan pelemparan, menampilkan
' citra dan menginkremen frekuensi
Sub
LemparDadu(ByVal lblDadu As
PictureBox)
Dim
sisi As Integer = 1 +
angkaAcak.Next(6)
lblDadu.Image = _
Image.FromFile(Directory.GetCurrentDirectory & _
"\Citra\dadu" & sisi & ".png")
frekuensi(sisi) += 1
End
Sub ' LemparDadu
End Class
|
Pelewatan
Array kepada Prosedur
Untuk melewatkan argumen array kepada
sebuah prosedur, Anda perlu menspesifikasi nama array tanpa menggunakan kurung.
Sebagai contoh, jika array suhuPerJam
telah dideklarasikan sebagai
Dim suhuPerJam As Integer() = New Integer(24) {}
Pemanggilan prosedur
DataHarian(suhuPerJam)
akan melewatkan array suhuPerJam kepada prosedur DataHarian.
Gambar 6.7 Keluaran program pada kode 6.6
Setiap objek array “mengetahui” batas
atasnya sendiri (nilai balik yang diberikan oleh metode GetUpperBound), jadi, ketika Anda melewatkan sebuah objek array
kepada suatu prosedur, Anda tidak perlu melewatkan batas atas array sebagai
suatu argumen terpisah.
Agar prosedur bisa menerima array
melalui pemanggilan prosedur, daftar parameter prosedur harus menspesifikasi
bahwa sebuah array akan diterima. Sebagai contoh, header prosedur untuk DataHarian yang ditulis sebagai
Sub DataHarian(ByVal DataSuhu As Integer())
mengindikasikan bahwa DataHarian akan menerima sebuah array Integer di dalam parameter DataSuhu. Dalam Visual Basic, array
selalu dilewatkan dengan referensi, tetapi normalnya tidak digunakan katakunci ByRef di dalam header definisi
prosedur.
Meskipun keseluruhan array selalu
dilewatkan dengan referensi, elemen array dapat dilewatkan dengan cara yang
sama seperti variabel bertipe primitif. Sebagai contoh, nilai elemen array
bertipe primitif, seperti Integer,
dapat dilewatkan dengan nilai atau dengan referensi, tergantung dari definisi
prosedur. Untuk melewatkan sebuah elemen array kepada prosedur, digunakan nama
berindeks dari elemen array sebagai argumen di dalam pemanggilan prosedur.
Program pada kode 6.7 mendemonstrasikan perbedaan antara pelewatan sebuah array
utuh dengan pelewatan sebuah elemen array.
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
' Kode 6.7:
PelewatanArray.vb
' Melewatkan array dan
elemen array kepada prosedur.
Imports
System.Windows.Forms
Module
modPelewatanArray
Dim
keluaran As String
Sub Main()
Dim
array1 As Integer() = New Integer() {1, 2, 3, 4, 5}
Dim
i As Integer
keluaran = "EFEK PELEWATAN ARRAY SECARA UTUH " & _
"DENGAN REFERENSI:" & vbCrLf & vbCrLf & _
"Nilai-nilai dari array asli adalah:" & vbCrLf
' menampilkan elemen-elemen dari array1
For
i = 0 To array1.GetUpperBound(0)
keluaran &= " "
& array1(i)
Next
ModifikasiArray(array1) ' array
dilewatkan dengan referensi
keluaran &= vbCrLf & _
"Nilai-nilai dari array termodifikasi adalah:" & vbCrLf
' menampilkan elemen-elemen
termodifikasi dari array1
For
i = 0 To array1.GetUpperBound(0)
keluaran &= " "
& array1(i)
Next
keluaran &= vbCrLf & vbCrLf
& _
"EFEK PELEWATAN ELEMEN ARRAY " & _
"DENGAN NILAI:" & vbCrLf & vbCrLf & "array1(3) " & _
"sebelum ModifikasiElemenDgnNil: " & array1(3)
' elemen array dilewatkan dengan
nilai
ModifikasiElemenDgnNil(array1(3))
keluaran &= vbCrLf & "array1(3) setelah " & _
"ModifikasiElemenDgnNil: " & array1(3)
keluaran &= vbCrLf & vbCrLf
& "EFEK PELEWATAN "
& _
"ELEMEN ARRAY DENGAN REFERENSI: " & vbCrLf & vbCrLf
& _
"array1(3) sebelum ModifikasiDgnRef: " & array1(3)
' elemen array dilewatkan dengan
referensi
ModifikasiDgnRef(array1(3))
keluaran &= vbCrLf & "array1(3) setelah " & _
"ModifikasiDgnRef: " & array1(3)
MessageBox.Show(keluaran, "Pelewatan Array", _
MessageBoxButtons.OK,
MessageBoxIcon.Information)
End
Sub ' Main
' prosedur memodifikasi array yang
diterima (perhatikan ByVal)
Sub
ModifikasiArray(ByVal parameterArray As Integer())
Dim
j As Integer
For
j = 0 To parameterArray.GetUpperBound(0)
parameterArray(j) *= 2
Next
End
Sub ' ModifikasiArray
' prosedur memodifikasi integer yang
dilewatkan kepadanya
' yang asli tidak termodifikasi
(perhatikan ByVal)
Sub
ModifikasiElemenDgnNil(ByVal
elemen As Integer)
keluaran &= vbCrLf & "Nilai yang diterima di dalam "
& _
"ModifikasiElemenDgnNil: " & elemen
elemen *= 2
keluaran &= vbCrLf & "Nilai yang dihitung di dalam "
& _
"ModifikasiElemenDgnNil: " & elemen
End
Sub ' ModifikasiElemenDgnNil
' prosedur memodifikasi integer yang
dilewatkan kepadanya
' yang asli tidak termodifikasi
(perhatikan ByRef)
Sub
ModifikasiDgnRef(ByRef elemen As Integer)
keluaran &= vbCrLf & "Nilai yang diterima di dalam "
& _
"ModifikasiDgnRef: " & elemen
elemen *= 2
keluaran &= vbCrLf & "Nilai yang dihitung di dalam "
& _
"ModifikasiDgnRef: " & elemen
End
Sub ' ModifikasiDgnRef
End Module '
modPelewatanArray
|
Struktur For/Next pada baris 18-20 menyambung lima elemen array integer array1 (baris 10) dengan String keluaran. Baris 22 melewatkan array1 kepada prosedur ModifikasiArray (baris 58), yang
kemudian mengalikan setiap elemennya dengan 2 (baris 62). Untuk
mengilustrasikan bahwa elemen-elemen array1
telah dimodifikasi dalam prosedur terpanggil (akibat pelewatan dengan
referensi), struktur For/Next pada
baris 28-30 menyambungkan lima elemen dari array1
dengan keluaran. Seperti yang
ditunjukkan pada keluaran, elemen-elemen array1
dimodifikasi oleh ModifikasiArray.
Untuk menunjukkan nilai array1(3) sebelum pemanggilan ModifikasiElemenDgnNil, baris 32-35
menyambungkan nilai array1(3) dengan
String keluaran. Baris 38 memanggil
prosedur ModifikasiElemenDgnNil dan
melewatkan array1(3). Ketika array1(3) dilewatkan dengan nilai,
nilai Integer di dalam posisi keempat
pada array1 (sekarang bernilai 8)
disalin dan dilewatkan kepada prosedur ModifikasiElemenDgnNil,
dimana ia menjadi nilai dari argumen elemen.
Prosedur ModifikasiElemenDgnNil
kemudian mengalikan elemen dengan 2
(baris 73). Parameter dari ModifikasiElemenDgnNil
adalah sebuah variabel lokal yang dihancurkan ketika prosedur berhenti
dieksekusi. Jadi, ketika kendali program kembali kepada Main, nilai tak-termodifikasi dari array1(3) disambungkan ke variabel string keluaran (baris 40-41).
Baris 43-51 mendemonstrasikan efek dari
prosedur ModifikasiELemenDgnRef
(baris 80-87). Prosedur ini melakukan perhitungan yang sama dengan ModifikasiElemenDgnNil, mengalikan elemen dengan 2. Pada kasus ini,
array1(3) dilewatkan dengan referensi.
Gambar 6.8 Keluaran program pada kode 6.7
Pelewatan
Array: ByVal versus ByRef
Dalam Visual Basic .NET, sebuah
variabel yang “menyimpan” sebuah objek, seperti array, sebenarnya tidak
menyimpan objek tersebut. Yang terjadi adalah bahwa variabel tersebut menyimpan
sebuah referensi yang menunjuk ke objek tersebut (lokasi dalam memori komputer
dimana objek disimpan). Perbedaan antara variabel referensi dan variabel tipe
primitif sangat penting diketahui para programer.
Ketika digunakan untuk mendeklarasikan
sebuah parameter tipe nilai, katakunci ByVal
menyebabkan nilai argumen disalin ke sebuah variabel lokal di dalam prosedur.
Perubahan yang terjadi pada variabel lokal hanya terjadi pada salinan dari
variabel, bukan pada variabel asli di dalam program pemanggil. Namun, jika
argumen dilewatkan menggunakan katakunci ByRef, nilai yang disalin adalah referensi yang
menunjuk ke objek asli dalam memori komputer. Jadi, tipe referensi (seperti
array dan objek lainnya) dilewatkan dengan katakunci ByVal sebenarnya dilewatkan dengan referensi, yang berarti bahwa
perubahan yang terjadi di dalam prosedur yang dipanggil mempengaruhi objek asli
di dalam pemanggil.
Visual Basic mengijinakan prosedur
untuk melewatkan referensi dengan katakunci ByRef. Ini merupakan kapabilitas
yang kompleks, yang, jika disalah-gunakan, dapat mengakibatkan masalah. Sebagai
contoh, ketika sebuah objek tipe referensi seperti array dilewatkan dengan
ByRef, prosedur terpanggil sebenarnya memiliki kuasa atau kendali atas
referensi yang dilewatkan kepadanya, mengijinkan prosedur terpanggil untuk
mengganti referensi asli di dalam pemanggil dengan sebuah objek yang berbeda
atau bahkan dengan Nothing. Tindakan
semacam itu dapat menyebabkan hasil yang tak diduga. Program pada kode 6.8 mendemonstrasikan
perbedaan antara pelewatan referensi ByVal
versus byRef.
Baris 11-12 mendeklarasikan dua
variabel integer, arrayPertama dan salinanArrayPertama. Baris 15
mengalokasikan sebuah array yang memuat nilai-nilai Integer 1, 2, dan 3, dan menyimpan referensi array di dalam
variabel arrayPertama. Statemen
penugasan pada baris 16 menyalin referensi arrayPertama
kepada variabel salinanArrayPertama,
menyebabkan kedua variabel ini mereferensi (menunjuk) ke objek array yang sama.
Struktur For/Next pada baris 24-26
menampilkan isi arrayPertama sebelum
dilewatkan kepada prosedur DoublePertama
pada baris 29 sehingga Anda dapat memverifikasi bahwa array ini dilewatkan
dengan referensi (yaitu, metode terpanggil melakukan perubahan terhadap isi
array).
Struktur For/Next di dalam prosedur DoublePertama
(baris 94-96) mengalikan nilai semua elemen array dengan 2. Baris 99
mengalokasikan sebuah array baru yang memuat nilai 11, 12, dan 13; referensi
untuk array ini kemudian ditugaskan kepada parameter array. Setelah prosedur DoublePertama
dieksekusi, struktur For/Next pada
baris 35-37 menampilkan isi arrayPertama,
mendemonstrasikan bahwa nilai setiap elemen telah diubah oleh prosedur.
Struktur If pada baris 40-46
menggunakan operator Is untuk
membandingkan referensi arrayPertama
dan salinan-ArrayPertama. Visual
Basic menyediakan operator Is untuk
membandingkan dua referensi apakah menunjuk ke objek yang sama atau tidak.
Ekspresi pada baris 40 bernilai true jika kedua operand dari operator Is merupakan referensi yang menunjuk ke
objek yang sama.
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
' Kode 6.8:
UjiReferensiArray.vb
' Menguji pengaruh
pelewatan referensi array menggunakan
' ByVal dan ByRef.
Module
modUjiReferensiArray
Sub
Main()
Dim
i As Integer
' mendeklarasikan referensi array
Dim
arrayPertama As Integer()
Dim
salinanArrayPertama As Integer()
' mengalokasikan arrayPertama dan
menyalin referensinya
arrayPertama = New Integer() {1, 2, 3}
salinanArrayPertama = arrayPertama
Console.WriteLine("Menguji pelewatan referensi array
" & _
"menggunakan ByVal.")
Console.Write("Isi dari arrayPertama sebelum "
& _
"pemanggilan DoublePertama: ")
' menampilkan isi arrayPertama
For
i = 0 To
arrayPertama.GetUpperBound(0)
Console.Write(arrayPertama(i)
& " ")
Next
' melewatkan arrayPertama menggunakan
ByVal
DoublePertama(arrayPertama)
Console.Write(vbCrLf & "Isi dari arrayPertama setelah "
& _
"pemanggilan DoublePertama: ")
' menampilkan isi dari arrayPertama
For
i = 0 To
arrayPertama.GetUpperBound(0)
Console.Write(arrayPertama(i)
& " ")
Next
' menguji apakah referensi diubah
oleh DoublePertama
If
arrayPertama Is
salinanArrayPertama Then
Console.WriteLine(vbCrLf &
"Kedua referensi " &
_
"sama.")
Else
Console.WriteLine(vbCrLf &
"Kedua referensi " &
_
"tidak sama.")
End If
' mendeklarasikan referensi array
Dim
arrayKedua As Integer()
Dim
salinanArrayKedua As Integer()
' mengalokasikan arrayKedua dan
menyalin referensinya
arrayKedua = New Integer() {1, 2, 3}
salinanArrayKedua = arrayKedua
Console.WriteLine(vbCrLf & "Menguji pelewatan referensi "
& _
"array menggunakan ByRef.")
Console.Write("Isi dari arrayKedua sebelum "
& _
"pemanggilan DoubleKedua: ")
' menampilkan isi dari arrayKedua
sebelum pemanggilan prosedur
For
i = 0 To
arrayKedua.GetUpperBound(0)
Console.Write(arrayKedua(i) &
" ")
Next
' melewatkan arrayKedua menggunakan
ByRef
DoubleKedua(arrayKedua)
Console.Write(vbCrLf & "Isi dari arrayKedua " & _
"setelah pemanggilan DoubleKedua: ")
' menampilkan isi dari arrayKedua
setelah pemanggilan prosedur
For
i = 0 To
arrayKedua.GetUpperBound(0)
Console.Write(arrayKedua(i) &
" ")
Next
' mengujia apakah referensi diubah
oleh DoubleKedua
If
arrayKedua Is salinanArrayKedua Then
Console.WriteLine(vbCrLf &
"Kedua referensi " &
_
"sama.")
Else
Console.WriteLine(vbCrLf &
"Kedua referensi " & _
"tidak sama.")
End
If
End
Sub ' Main
' prosedur memodifikasi elemen-elemen
array dan menugaskan
' referensi baru (perhatikan ByVal)
Sub
DoublePertama(ByVal array As Integer())
Dim
i As Integer
' menggandakan setiap nilai elemen
For
i = 0 To array.GetUpperBound(0)
array(i) *= 2
Next
' menciptakan referensi baru dan
menugaskannya kepada array
array = New Integer() {11, 12, 13}
End
Sub ' DoublePertama
' prosedur memodifikasi elemen-elemen
array dan menugaskan
' referensi baru (perhatkan ByRef)
Sub
DoubleKedua(ByRef array As Integer())
Dim
i As Integer
' menggandakan isi array
For
i = 0 To array.GetUpperBound(0)
array(i) *= 2
Next
' menciptakan referensi baru dan
menugaskannya kepada array
array = New Integer() {11, 12, 13}
End
Sub ' DoubleKedua
End Module '
modUjiReferensiArray
|
Menguji pelewatan referensi array menggunakan ByVal.
Isi dari arrayPertama sebelum pemanggilan DoublePertama: 1 2 3
Isi dari arrayPertama setelah pemanggilan DoublePertama: 2 4 6
Kedua referensi sama.
Menguji pelewatan referensi array menggunakan ByRef.
Isi dari arrayKedua sebelum pemanggilan DoubleKedua: 1 2 3
Isi dari arrayKedua setelah pemanggilan DoubleKedua: 11 12 13
Kedua referensi tidak sama.
|
Pengurutan
Array
Pengurutan data (menata data dengan
urutan tertentu, seperti urutan menaik atau menurun) merupakan salah satu
aplikasi komputasi yang populer. Module pada kode 6.9 memuat beberapa prosedur
untuk mengurutkan nilai-nilai dari sebuah array integer agar menjadi urutan
menaik. Teknik yang digunakan adalah pengurutan bubble, dimana nilai-nilai yang
lebih kecil secara bertahap ditempatkan ke atas array (ke arah elemen pertama).
Teknik ini menggunakan beberapa loop bersarang untuk melakukan beberapa
pelewatan melalui array. Setiap pelewatan akan membandingkan pasangan elemen.
Jika pasangan tersebut dalam urutan menaik (atau kedua nilai sama), maka
pengurutan bubble akan membiarkannya. Jika pasangan dalam urutan menurun, maka
pengurutan bubble akan saling menukarkannya.
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
|
' Kode 6.9: PengurutanBubble.vb
' Beberapa prosedur untuk mengurutkan sebuah array integer.
Module modPengurutanBubble
' mengurutkan array
menggunakan algoritma pengurutan bubble
Sub PengurutanBubble(ByVal
arrayUrut As Integer())
Dim pass, i As Integer
For pass = 1 To
arrayUrut.GetUpperBound(0)
For i = 0 To
arrayUrut.GetUpperBound(0) - 1
If arrayUrut(i) > arrayUrut(i + 1)
Then
Tukar(arrayUrut, i)
End If
Next
Next
End Sub ' PengurutanBubble
' menukar dua elemen array
Sub Tukar(ByVal
arrayTukar As Integer(), _
ByVal pertama As Integer)
Dim tampung As Integer
tampung =
arrayTukar(pertama)
arrayTukar(pertama) =
arrayTukar(pertama + 1)
arrayTukar(pertama + 1) =
tampung
End Sub ' Tukar
End Module ' modPengurutanBubble
|
Module memuat prosedur PengurutanBubble dan Tukar. Prosedur PengurutanBubble (baris 7-22) mengurutkan elemen-elemen dari
parameternya, arrayUrut. Prosedur PengurutanBubble memanggil prosedur Tukar (baris 25-33) untuk
saling-menukar elemen-elemen. Aplikasi Windows
pada kode 6.10 mendemonstrasikan prosedur PengurutanBubble
dengan mengurutkan array 10 elemen.
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
|
' Kode 6.10:
UjiPengurutanBubble.vb
' Program menciptakan
angka-angka acak dan mengurutkannya.
Imports
System.Windows.Forms
Public Class
FrmPengurutanBubble
Inherits
System.Windows.Forms.Form
' tombol
Friend
WithEvents cmdCiptakan As
Button
Friend
WithEvents cmdUrutkan As
Button
' label
Friend
WithEvents lblAsli As Label
Friend
WithEvents lblTerurut As Label
' textboxe
Friend
WithEvents txtAsli As TextBox
Friend
WithEvents txtTerurut As
TextBox
' kode yang dibangkitkan oleh Visual
Studio .NET
Dim
array As Integer() = New Integer(9) {}
‘ menciptakan angka-angka acak
Private
Sub cmdCiptakan_Click(ByVal
sender As System.Object, _
ByVal
e As System.EventArgs) Handles cmdCiptakan.Click
Dim
keluaran As String
Dim
angkaAcak As Random = New Random()
Dim
i As Integer
txtTerurut.Text = ""
' menciptakan 10 angka acak dan menempelkannya
ke keluaran
For
i = 0 To array.GetUpperBound(0)
array(i) = angkaAcak.Next(100)
keluaran &= array(i) &
vbCrLf
Next
txtAsli.Text = keluaran ' menampilkan
angka-angka
cmdUrutkan.Enabled = True ' mengaktifkan tombol cmdUrutkan
End
Sub ' cmdCiptakan_Click
Private
Sub cmdUrutkan_Click(ByVal
sender As System.Object, _
ByVal
e As System.EventArgs) Handles cmdUrutkan.Click
Dim
keluaran As String
Dim
i As Integer
' mengurutkan array
modPengurutanBubble.PengurutanBubble(array)
' menciptakan string dengan
angka-angka terurut
For
i = 0 To array.GetUpperBound(0)
keluaran &= array(i) &
vbCrLf
Next
txtTerurut.Text = keluaran '
menampilkan angka-angka
cmdUrutkan.Enabled = False
End
Sub ' cmdUrutkan_Click
End Class
|
Program memuat metode cmdCiptakan_Click dan cmdUrutkan_Click. Metode cmdCiptakan_Click (baris 26-43) menugaskan 10 nilai acak kepada
tiap elemen array dan menampilkan
isi array di dalam textAsli. Metode cmdUrutkan_Click (baris 46-62)
mengurutkan array dengan memanggil prosedur PengurutanBubble dari modPengurutanBubble.
Gambar 6.9 Keluaran program pada kode 6.10
Prosedur PengurutanBubble menerima array sebagai parameter arrayUrut. Struktur For/Next bersarang pada baris 10-20
pada kode 6.9. Loop sebelah luar mengendalikan jumlah pass. Loop sebelah dalam
(baris 12-18) mengendalikan pembandingan dan penukaran elemen-elemen pada tiap
pass.
Prosedur PengurutanBubble pertama-tama
membandingkan arrayUrut(0) dengan arrayUrut(1), kemudian arrayUrut(1) dengan arrayUrut(2), dan seterusnya sampai arrayUrut(8) dengan arrayUrut(9). Meskipun terdapat 10
elemen, loop hanya memerlukan sembilan operasi perbandingan.
Jika perbandingan atas dua elemen
menyatakan urutan menurun, PengurutanBubble
akan memanggil prosedur Tukar untuk
saling-menukar kedua elemen, sehingga menjadi tatanan menaik. Prosedur Tukar menerima arrayTukar dan indeks elemen pertama array. Penukaran dilakukan
dalam tiga statemen
tampung
= arrayTukar(pertama)
arrayTukar(pertama)
= arrayTukar(pertama + 1)
arrayTukar(pertama
+ 1) = tampung
dimana variabel ekstra tampung secara temporer menyimpan salah
satu nilai yang sedang ditukar. Penukaran tidak dapat dilakukan hanya dengan
dua statemen
arrayTukar(pertama)
= arrayTukar(pertama + 1)
arrayTukar(pertama
+ 1) = arrayTukar(pertama)
Jika tukarArray(pertama) adalah 7 dan tukarArray(pertama+1) adalah 5, setelah penugasan pertama kedua elemen array akan memuat 5, dan nilai 7
akan hilang. Inilah mengapa dibutuhkan variabel ekstra tampung.
Pencarian
Array dengan Pencarian Linier
Module modPencarianLinier pada kode 6.11 memuat sebuah prosedur untuk
melakukan pencarian linier. Prosedur PencarianLinier
(baris 7-22) menggunakan sebuah struktur For/Next
yang memuat struktur If (baris
15-17) untuk membandingkan setiap elemen array dengan sebuah kunci pencarian.
Jika kunci ditemukan, maka prosedur akan menghasilkan nilai balik berupa indeks
elemen tersebut, mengindikasikan posisi kunci pencarian di dalam array. Jika
kunci pencarian tidak ditemukan, prosedur menghasilkan nilai balik -1. (Nilai
-1 merupakan pilihan yang baik karena tidak valid untuk nomor indeks).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
' Kode 6.11: PencarianLinier.vb
' Pencarian linier atas sebuah array.
Module modPencarianLinier
' beriterasi melalui array
Function PencarianLinier(ByVal
kunci As Integer, _
ByVal angka As Integer())
As Integer
Dim n As Integer
' struktur beriterasi
secara linier melalui array
For n = 0 To angka.GetUpperBound(0)
If angka(n) = kunci Then
Return n
End If
Next
Return -1
End Function ' PencarianLinier
End Module ' modPencarianLinier
|
Program pada kode 6.12 menggunakan
module modPencarianLinier untuk
melakukan pencarian atas sebuah array 20 elemen, yang memuat nilai-nilai acak
yang diciptakan ketika pengguna mengklik cmdCiptakan.
Pengguna kemudian mengetikkan sebuah kunci pencarian di dalam sebuah TextBox (bernama txtMasukan) dan mengklik cmdCari
untuk memulai pencarian.
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 6.12: UjiPencarianLinier.vb
' Pencarian linier atas
sebuah array.
Imports
System.Windows.Forms
Public Class
UjiPencarianLinier
Inherits
System.Windows.Forms.Form
' tombol
Friend
WithEvents cmdCari As Button
Friend
WithEvents cmdCiptakan As
Button
' kotak teks
Friend
WithEvents txtMasukan As
TextBox
Friend
WithEvents txtData As TextBox
' label
Friend
WithEvents lblMasukan As Label
Friend
WithEvents lblHasil As Label
' kode yang dihasilkan Visual Studio .NET
Dim
array1 As Integer() = New Integer(19) {}
‘ menciptakan data acak
Private Sub cmdCiptakan_Click(ByVal
sender As System.Object, _
ByVal
e As System.EventArgs) Handles cmdCiptakan.Click
Dim
keluaran As String
Dim
angkaAcak As Random = New Random()
Dim
i As Integer
keluaran = "Indeks" & vbTab & "Nilai" & vbCrLf
' menciptakan string yang memuat 11
angka acak
For
i = 0 To array1.GetUpperBound(0)
array1(i) = angkaAcak.Next(1000)
keluaran &= i & vbTab
& array1(i) & vbCrLf
Next
txtData.Text = keluaran ' menampilkan
angka-angka
txtMasukan.Text = "" '
mengosongkan kotak teks kunci
cmdCari.Enabled = True ' mengaktifkan tombol Cari
End
Sub ' cmdCiptakan_Click
‘ mencari kunci elemen
Private
Sub cmdCari_Click(ByVal sender
As System.Object, _
ByVal
e As System.EventArgs) Handles cmdCari.Click
' jika kotak teks kunci pencarian
kosong,
' tampilkan pesan dan keluar dari
prosedur
If
txtMasukan.Text = "" Then
MessageBox.Show("Anda harus memasukkan sebuah kunci
pencarian.")
Exit Sub
End
If
Dim
kunciPencarian As Integer =
Convert.ToInt32(txtMasukan.Text)
Dim
elemen As Integer =
PencarianLinier(kunciPencarian, array1)
If
elemen <> -1 Then
lblHasil.Text = "Nilai ditemukan dalam indeks "
& elemen
Else
lblHasil.Text = "Nilai Tidak Ditemukan"
End
If
End
Sub ' cmdCari_Click
End Class ' UjiPencarianLinier
|
Gambar 6.10 Keluaran program pada kode 6.12
Pencarian
Array Terurut dengan Pencarian Biner
Metode pencarian linier cocok untuk
array kecil yang tak-terurut. Namun, untuk array besar, pencarian linier
menjadi tidak efisien. Jika array telah diurutkan, teknik pencarian biner dapat
dilakukan.
Setelah tiap perbandingan, algoritma
pencarian biner mengeliminiasi setengah bagian array yang sedang dicari.
Algoritma mencari lokasi elemen array tengah dan membandingkannya dengan kunci
pencarian. Jika elemen tengah sama dengan kunci, maka kunci pencarian telah
ditemukan, dan indeks elemen tersebut dijadikan nilai balik. Sebaliknya,
masalah direduksi dengan melakukan pencarian pada setengah bagian array.
Jika kunci pencarian bernilai kurang
dari elemen tengah array, maka setengah bagian kedua dari array dieliminasi
dari pencarian, dan pencarian berlanjut pada setengah bagian pertama dari
array; sebaliknya, pencarian dilakukan pada setengah bagian kedua dari array.
Hal ini dilakukan secara berulang sampai kunci pencarian sama dengan elemen
tengah subarray, atau sampai subarray hanya memuat satu elemen yang tidak sama
dengan kunci pencarian (kunci pencarian tidak ditemukan).
Pada skenario terburuk, pencarian atas
sebuah array terurut yang memuat 1024 elemen menggunakan pencaruan biner hanya
memerlukan 10 perbandingan. Pembagian 1024 dengan 2 secara berulang ( setelah
tiap perbandingan, setengah bagian array dieliminasi) menghasilkan nilai-nilai
512, 256, 128, 64, 32, 16, 8, 4, 2, 1.
Kode 6.13 merepresentasikan versi
iterasi dari metode PencarianBiner
(baris 60-86). Metode tersebut menerima dua argumen, array integer array1 (array yang akan dicari), dan
integer kunciPencarian. Array
tersebut dilewatkan kepada PencarianBiner,
meskipun array tersebut merupakan sebuah variabel instans.
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
' Kode 6.13: UjiPencarianBiner.vb
' Mendemonstrasikan
pencarian biner atas sebuah array.
Imports
System.Windows.Forms
Public Class
FrmPencarianBiner
Inherits
System.Windows.Forms.Form
' label
Friend
WithEvents lblMasukKunci As
Label
Friend
WithEvents lblHasil As Label
Friend
WithEvents lblKeluaranHasil As
Label
Friend
WithEvents lblTampil As Label
Friend
WithEvents lblIndeks As Label
Friend
WithEvents lblIndeks2 As Label
' tombol
Friend
WithEvents cmdCariKunci As
Button
' kotak teks
Friend
WithEvents txtMasukan As
TextBox
' kode yang dibangkitkan Visual Studio
.NET
Dim
array1 As Integer() = New Integer(14) {}
' FrmPencarianBiner menginisialisasi
array1 dengan nilai-nilai
' 0, 2, 4, 6, ..., 28 (urutan menaik)
Private
Sub FrmPencarianBiner_Load(ByVal
sender As System.Object, _
ByVal
e As System.EventArgs) Handles MyBase.Load
Dim
i As Integer
For
i = 0 To array1.GetUpperBound(0)
array1(i) = 2 * i
Next
End
Sub ' FrmPencarianBiner_Load
Private
Sub cmdCariKunci_Click(ByVal
sender As System.Object, _
ByVal
e As System.EventArgs) Handles cmdCariKunci.Click
Dim
kunciPencarian As Integer =
Convert.ToInt32(txtMasukan.Text)
lblTampil.Text = ""
' melakukan pencarian biner
Dim
elemen As Integer =
PencarianBiner(array1, kunciPencarian)
If
elemen <> -1 Then
lblKeluaranHasil.Text = "Nilai ditemukan di dalam elemen " &
elemen
Else
lblKeluaranHasil.Text = "Nilai tidak ditemukan"
End
If
End
Sub ' cmdCariKunci_Click
' melakukan pencarian biner
Function
PencarianBiner(ByVal array As Integer(), _
ByVal
kunci As Integer) As Integer
Dim
bawah As Integer = 0 ' indeks
bawah
Dim
atas As Integer =
array.GetUpperBound(0) ' indeks atas
Dim
tengah As Integer ' indeks tengah
While
bawah <= atas
tengah = (bawah + atas) \ 2
' baris berikut menampilkan
bagian
' dari array yang sedang
dimanipulasi selama
' tiap iterasi loop
BangunKeluaran(bawah, tengah,
atas)
If kunci = array(tengah) Then
' cocok
Return tengah
ElseIf kunci < array(tengah) Then ' mencari ke bawah
atas = tengah - 1 ' dari
array
Else
bawah = tengah + 1
End If
End
While
Return
-1 ' kunci pencarian tidak ditemukan
End
Function ' KunciPencarian
Sub
BangunKeluaran(ByVal bawah As Integer, _
ByVal
tengah As Integer, ByVal atas As Integer)
Dim
i As Integer
For
i = 0 To array1.GetUpperBound(0)
If i < bawah OrElse i > atas Then
lblTampil.Text &= "
"
ElseIf i = tengah Then ' menandai elemen tengah
lblTampil.Text &=
String.Format("{0:D2}", _
array1(i)) & "*
"
Else
lblTampil.Text &=
String.Format("{0:D2}", _
array1(i)) & "
"
End If
Next
i
lblTampil.Text &= vbCrLf
End
Sub ' BangunKeluaran
End Class
|
Array
Persegi-Panjang dan Array Jagged
Sejauh ini, yang telah dipelajari
adalah array satu dimensi, yaitu array yang hanya memiliki satu baris nilai.
Pada bagian ini, akan dikenalkan array multidimensi, yang memerlukan dua atau
lebih indeks untuk mengidentifikasi elemen tertentu. Pada bab ini, hanya akan
difokuskan pada array dua dimensi atau array memiliki banyak baris. Ada dua
jenis array multidimensi, array persegi-panjang dan array jagged. Array
persegi-panjang dengan dua indeks seringkali merepresentasikan tabel nilai yang
memuat informasi yang ditata dalam baris dan kolom. Setiap baris berukuran
sama, dan setiap kolom juga berukuran sama. Untuk mengidentifikasi elemen tabel
tertentu, diperlukan dua indeks, indeks pertama untuk baris dan indeks kedua
untuk kolom. Gambar 6.11 mengilustrasikan array persegi-panjang dua dimensi, a, yang memuat tiga baris dan empat
kolom. Array persegi-panjang dua dimensi dengan m baris dan n kolom
dikenal dengan array m-kali-n; Array pada Gambar 6.11 disebut dengan
array 3-kali-4.
Setiap elemen di dalam array a diidentifikasi pada Gambar 6.11 dengan
nama elemen dalam format a(i,j),
dimana a adalah nama array, dan i dan j adalah indeks baris dan kolom setiap elemen di dalam a. Perhatikan bahwa, karena indeks
array ditentukan berdasarkan penghitungan mulai dari nol, nama-nama elemen
dalam baris pertama memiliki indeks pertama 0; nama-nama elemen dalam kolom
keempat memiliki indeks kedua 3.
Array multidimensi diinisialisasi dalam
deklarasi menggunakan proses dan notasi yang sama seperti untuk array satu
dimensi. Sebagai contoh, array persegi-panjang dua dimensi, angka, dengan dua baris dan dua kolom
dapat dideklarasikan dan diinisialisasi dengan
Dim angka As Integer(,) = New Integer(1,1) {}
angka(0, 0) = 1
angka(0, 1) = 2
angka(1, 0) = 3
angka(1, 1) = 4
Sebagai alternatif, inisialisasi dapat
ditulis pada satu baris, sebagai berikut:
Dim angka As Integer(,) = New Integer(,) {{1, 2}, {3, 4}}
Gambar 6.11 Array dua
dimensi dengan tiga baris dan empat kolom
Nilai-nilai dikelompokkan baris per
baris di dalam kurung kurawal, dengan 1 dan 2 menginisialisasi angka(0,0) dan angka(0,1), dan 3 dan 4 menginisialisasi angka(1,0) dan angka(1,1).
Kompiler menentukan jumlah baris dengan
menghitung jumlah daftar sub-penginisialisasi (direpresentasikan oleh himpunan
kurung kurawal) di dalam daftar penginisialisasi utama. Kemudian, kompiler
menentukan jumlah kolom dalam setiap baris dengan menghitung jumlah nilai-nilai
penginisialisasi pada daftar sub-penginisialisasi untuk baris tersebut. Pada
array persegit-panjang, setiap baris memiliki jumlah nilai yang sama.
Array jagged dipandang sebagai array
yang memuat array. Tidak seperti array persegi-panjang, baris dalam array
jagged dapat berbeda panjang satu sama lain. Statemen
Dim array2 As Integer()() ' mendeklarasikan
array jagged
array2 = New Integer(1)() {} ' mengalokasikan
dua baris
' mengalokasikan kolom-kolom untuk baris 0
array2(0) = New Integer() {1, 2}
' mengalokasikan kolom-kolom untuk baris 1
array2(1) = New Integer() {3, 4, 5}
menciptakan array Integer, array2, dengan
baris 0 memuat dua elemen (1 dan 2),
dan baris 1 memuat tiga elemen (3,
4, dan 5). Perhatikan bahwa nama array, diikuti dengan indeks tunggal (seperti,
array2(0)), berperilaku persis
seperti variabel array satu dimensi.
Program pada kode 6.14
mendemonstrasikan penginisialisasian sebuah array persegi-panjang (array1) dan sebuah array jagged (array2) dalam deklarasi dan penggunaan
beberapa loop For/Next bersarang
untuk menjelajahi array (juga untuk memanipulasi setiap elemen array).
Program mendeklarasikan dua array dalam
metode Main. Alokasi dari array1 (baris 14) menyediakan enam
penginisialisasi dalam dua sub-daftar. Sub-daftar pertama menginisialisasi
baris pertama (baris 0) dari array dengan nilai 1, 2, dan 3; sub-daftar kedua
menginisialisasi baris kedua (baris 1) dari array dengan nilai 4, 5, dan 6.
Deklarasi dan alokasi dari array2
(baris 17) menciptakan sebuah array jagged yang memuat 3 array (dispesifikasi
dengan 2 dalam kurung setelah katakunci Integer).
Baris 18-20 menginisialisasi setiap subarray sehingga subarray pertama memuat
nilai 1 dan 2, dan subarray kedua memuat nilai 3 dan subarray ketiga memuat
nilai 4, 5, dan 6.
Struktur For/Next bersarang pada baris 24-31 menempatkan elemen-elemen dari array1 pada string keluaran. Struktur For/Next bersarang dipakai untuk
menjelajahi array dalam dimensi dua. Struktur For/Next sebelah luar menjelajahi baris; struktur For/Next sebelah dalam menjelajahi
kolom di dalam sebuah baris. Setiap struktur For/Next memanggil metode GetUpperBound
untuk mendapatkan batas atas dimensi yang dijelajahi. Perhatikan bahwa dimensi
array adalah berbasis nol, yang berarti bahwa baris adalah dimensi 0 dan kolom adalah dimensi 1.
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
|
' Kode 6.14:
ArrayMultiDimensi.vb
' Menginisialisasi array
multidimensi.
Imports
System.Windows.Forms
Module
modArrayMultiDimensi
Sub
Main()
Dim
keluaran As String
Dim
i, j As Integer
' menciptakan array dua dimensi
persegi-panjang
Dim
array1 As Integer(,)
array1 = New Integer(,) {{1, 2, 3}, {4, 5, 6}}
' menciptakan array jagged dua
dimensi
Dim
array2 As Integer()() = New
Integer(2)() {}
array2(0) = New Integer() {1, 2}
array2(1) = New Integer() {3}
array2(2) = New Integer() {4, 5, 6}
keluaran = "Nilai-nilai dalam array1 baris per baris: " & vbCrLf
For
i = 0 To array1.GetUpperBound(0)
For j = 0 To
array1.GetUpperBound(1)
keluaran &= array1(i, j)
& " "
Next
keluaran &= vbCrLf
Next
keluaran &= vbCrLf & "Nilai-nilai dalam array2 baris per baris:
" & _
vbCrLf
For
i = 0 To array2.GetUpperBound(0)
For j = 0 To
array2(i).GetUpperBound(0)
keluaran &= array2(i)(j)
& " "
Next
keluaran &= vbCrLf
Next
MessageBox.Show(keluaran, _
"Menginisialisasi array dua-dimensi", _
MessageBoxButtons.OK,
MessageBoxIcon.Information)
End Sub ' Main
End Module '
ArrayMultiDimensi
|
Gambar 6.12 Keluaran program pada kode 6.14
Banyak manipulasi array yang umum
dijumpai menggunakan struktur repetisi For/Next.
Bayangkan sebuah array jagged, yang memuat 3 baris, atau 3 array. Struktur For/Next berikut menetapkan semua
elemen dalam baris ketiga arrayJagged
menjadi nol:
For kolom = 0 To arrayJagged(2).GetUpperBound(0)
arrayJagged(2)(kolom) = 0
Next
Yang dispesifikasi adalah baris ketiga;
oleh karena itu, diketahui bahwa indeks pertama selalu 2 (0 untuk baris pertama
dan 1 untuk baris kedua). Loop For/Next
hanya memvariasi indeks kolom. Perhatikan kegunaan arrayJagged(2).GetUpperBound(0) sebagai nilai akhir dari struktur For/Next. Dalam ekspresi ini, metode GetUpperBound dipanggil pada array yang
dimuat dalam baris ketiga dari arrayJagged.
Statemen ini mendemonstrasikan bahwa setiap baris dari arrayJagged adalah sebuah array. Struktur For/Next tersebut ekivel dengan beberapa statemen penugasan
berikut:
arrayJagged (2)(0)
= 0
arrayJagged (2)(1)
= 0
arrayJagged (2)(2)
= 0
arrayJagged (2)(3)
= 0
Struktur For/Next bersarang berikut menentukan total semua elemen di dalam arrayJagged. Digunakan metode GetUpperBound pada header struktur For/Next untuk menentukan jumlah baris
dalam arrayJagged dan jumlah kolom
pada setiap baris.
Dim total, baris, kolom As Integer
For baris = 0 To jaggedArray.GetUpperBound(0)
For kolom = 0 To jaggedArray(baris).GetUpperBound(0)
total += jaggedArray(baris)(kolom)
Next
Next
Program pada kode 6.15 melakukan
beberapa manipulasi array yang lain pada sebuah array 3-kali-4, skor. Setiap baris merepresentasikan
seorang mahasiswa, dan setiap kolom merepresentasikan skor salah satu dari
empat ujian dalam satu semester. Manipulasi array dilakukan oleh empat
prosedur: Prosedur Minimum (bairs
44) menentukan skor terendah dari semua mahasiswa selama satu semester.
Prosedur Maksimum (bairs 66)
menentukan skor tertinggi dari semua mahasiswa selama satu semester. Prosedur Rerata (baris 89) menentukan rerata.
Prosedur BangunString (baris 103)
menempatkan array dua dimensi pada string keluaran
dalam format tabular.
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
' Kode 6.15:
ArrayJagged.vb
' Contoh array dua
dimensi.
Imports
System.Windows.Forms
Module modArrayJagged
Dim
siswaAkhir, ujianAkhir As Integer
Dim
keluaran As String
Sub
Main()
Dim
i As Integer
' array jagged dengan 3 baris yang
memuat skor ujian
Dim
arraySkor As Integer()() = New Integer(2)() {}
' mengalokasikan setiap baris dengan
4 skor mahasiswa
arraySkor(0) = New Integer() {77, 68, 86, 73}
arraySkor(1) = New Integer() {98, 87, 89, 81}
arraySkor(2) = New Integer() {70, 90, 86, 81}
' batas atas untuk manipulasi array
siswaAkhir =
arraySkor.GetUpperBound(0)
ujianAkhir =
arraySkor(0).GetUpperBound(0)
keluaran = "Mahasiswa \ Ujian" & vbCrLf
' membangun string keluaran
BangunString(arraySkor)
keluaran &= vbCrLf & vbCrLf
& "Skor terendah: "
& _
Minimum(arraySkor) & vbCrLf &
"Skor tertinggi: " &
_
Maksimum(arraySkor) & vbCrLf
' menghitung rerata setiap mahasiswa
For
i = 0 To siswaAkhir
keluaran &= vbCrLf &
"Rerata untuk mahasiswa " & _
i & " adalah "
& Rerata(arraySkor(i))
Next
MessageBox.Show(keluaran, "Array jagged dua dimensi", _
MessageBoxButtons.OK,
MessageBoxIcon.Information)
End
Sub ' Main
' mencari skor minimum
Function
Minimum(ByVal skor As Integer()()) _
As
Integer
Dim
skorBawah As Integer = 100
Dim
i, j As Integer
For
i = 0 To siswaAkhir
For j = 0 To
ujianAkhir
If skor(i)(j) < skorBawah Then
skorBawah = skor(i)(j)
End If
Next
Next
Return
skorBawah
End
Function ' Minimum
' mencari skor maksimum
Function
Maksimum(ByVal skor As Integer()()) _
As
Integer
Dim
skorAtas As Integer = 0
Dim
i, j As Integer
For
i = 0 To siswaAkhir
For j = 0 To
ujianAkhir
If skor(i)(j) > skorAtas Then
skorAtas = skor(i)(j)
End If
Next
Next
Return
skorAtas
End
Function ' Maksimum
' menentukan rerata skor untuk mahasiswa
' (atau sekumpulan skor)
Function
Rerata(ByVal himpunanSkor As Integer()) _
As
Double
Dim
i As Integer, total As Integer = 0
' mencari jumlah skor mahasiswa
For
i = 0 To ujianAkhir
total += himpunanSkor(i)
Next
Return
total / himpunanSkor.Length
End
Function ' Rerata
' menciptakan String untuk menampilkan
array
Sub
BangunString(ByVal skor As Integer()())
Dim
i, j As Integer
' menyejajarkan kepala kolom
keluaran &= " "
For
i = 0 To ujianAkhir
keluaran &= "("
& i & ") "
Next
For
i = 0 To siswaAkhir
keluaran &= vbCrLf &
" (" & i & ") "
For j = 0 To
ujianAkhir
keluaran &= skor(i)(j)
& " "
Next
Next
End
Sub ' BangunString
End Module '
modArrayJagged
|
Prosedur Minimum, Maksimum, dan BangunString menggunakan array skor dan variabel siswaAkhir (batas atas untuk baris di dalam array) dan ujianAkhir (batas atas untuk kolom di
dalam array). Setiap prosedur menggunakan struktur For/Next untuk beriterasi melalui array skor. Perhatikan struktur For/Next
bersarang di dalam prosedur Minimum
(baris 50-60). Struktur For/Next
sebelah luar menetapkan i (baris
indeks) menjadi 0 sehingga
elemen-elemen baris pertama dapat dibandingkan dengan variabel skorBawah di dalam struktur For/Next sebelah dalam (baris 54).
Struktur For/Next sebelah dalam
beriterasi melalui empat skor pada baris tertentu dan membandingkan setiap skor
dengan skorBawah. Jika skor lebih
rendah dari skorBawah, maka skorBawah ditugaskan pada skor
tersebut. Struktur For/Next sebelah
luar kemudian menginkremen indeks baris menjadi 1. Elemen-elemen baris kedua
dibandingkan dengan variabel skorBawah.
Struktur For/Next sebelah luar
kemudian menginkremen indeks baris menjadi 2. Elemen-elemen baris ketiga
dibandingkan dengan variabel skorBawah.
Ketika eksekusi terhadap struktur bersarang selesai (baris 62), skorBawah memuat nilai terkecil di
dalam array dua dimensi. Prosedur Maksimum
berperilaku sama seperti prosedur Minimum.
Gambar 6.13 Keluaran program pada kode 6.15
Prosedur Rerata mengambil satu argumen, sebuah array satu dimensi yang
memuat semua skor untuk mahasiswa tertentu. Rerata dipanggil (baris 36) dengan argumen arraySkor(i), yang merupakan baris i dari array jagged dua dimensi skor. Sebagai contoh, argumen skor(1)
merepresentasikan empat skor mahasiswa 1. Ingat bahwa array jagged dua dimensi
adalah sebuah array dengan setiap elemen merupakan array satu dimensi. Prosedur
Rerata menghitung jumlah elemen
array, membagi total dengan jumlah hasil ujian (yang didapatkan menggunakan
properti Length) dan kemudian
menghasilkan nilai balik bertipe Double (baris 89).
Daftar
Parameter Panjang Tak Tentu
Adalah memungkinkan untuk menciptakan
prosedur yang meneriman sejumlah tak-tentu argumen, menggunakan katakunci ParamArray. Program pada kode 6.16
prosedur SembarangJumlah-Argumen
sebanyak tiga kali, melewatkan pelbagai jumlah nilai setiap kali pemanggilan.
Nilai-nilai yang dilewatkan kepada prosedur SembarangJumlahArgumen disimpan di dalam array satu dimensi Integer, array1, yang dideklarasikan menggunakan ParamArray.
Prosedur SembarangJumlahArgumen pada baris 7-9, melewatkan sejumlah tak
tentu argumen pada setiap pemanggilan. Prosedur ini didefinisikan pada baris
14-34 dan menerapkan katakunci ParamArray
di dalam array1 pada baris 14.
Struktur If pada baris 20-32
menentukan apakah banyak argumen yang dilewatkan kepada prosedur nol (tidak ada
argumen) atau tidak. Jika tidak, baris 24-31 akan menampilkan setiap elemen array1 dan penjumlahannya.
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
|
' Kode 6.16: UjiParamArray.vb
' Menggunakan ParamArray untuk menciptakan daftar parameter panjang tak
tentu.
Module modUjiParamArray
Sub Main()
SembarangJumlahArgumen()
SembarangJumlahArgumen(2,
3)
SembarangJumlahArgumen(7,
8, 9, 10, 11, 12)
End Sub ' Main
' menerima sembarang jumlah
argumen di dalam array
Sub SembarangJumlahArgumen(ByVal
ParamArray array1 _
As Integer())
Dim i, total As
Integer
total = 0
If array1.Length = 0 Then
Console.WriteLine("Prosedur
SembarangJumlahArgumen" & _
" menerima 0 argumen.")
Else
Console.Write("Total dari ")
For i = 0 To
array1.GetUpperBound(0)
Console.Write(array1(i) & " ")
total += array1(i)
Next
Console.WriteLine("adalah
{0}.", total)
End If
End Sub ' SembarangJumlahArgumen
End Module ' modUjiParamArray
|
Prosedur SembarangJumlahArgumen menerima 0 argumen.
Total dari 2 3 adalah 5.
Total dari 7 8 9 10 11 12 adalah 57.
|
Latihan
1.
Modifikasi kode 6.11 dan 6.12 agar menggunakan
prosedur PencarianLinier rekursif.
Prosedur ini harus menerima sebuah array integer, sebuah pencarian kunci,
indeks awal, dan indeks akhir sebagai argumen. Jika kunci ditemukan, maka
indeks array dijadikan nilai balik; sebaliknya, dihasilkan -1.
2.
Modifikasi kode 6.13 agar menggunakan prosedur PencarianBiner rekursif. Prosedur ini
harus menerima sebuah array integer, sebuah pencarian kunci, indeks awal, dan
indeks akhir sebagai argumen. Jika kunci ditemukan, maka indeks array dijadikan
nilai balik; sebaliknya, dihasilkan -1.
No comments:
Post a Comment