bab6 tatasusunan
TRANSCRIPT
BAB ENAM: TATASUSUNAN
KAWALAN TATASUSUNAN
Apabila butang pilihan (option button) atau kotak pilihan (check box) dikumpulkan di dalam
satu kumpulan, ini bermaksud anda membina suatu kawalan tatasusunan. Kawalan Tatasusunan
adalah suatu kumpulan kawalan yang mempunyai nama yang sama. Kebaikan menggunakan
kawalan tatasusunan berbanding kawalan yang berasingan, ialah kawalan tatasusunan akan
berkongsi suatu Event Click. Di dalam tatasusunan event click, struktur Case digunakan bagi
menentukan butang atau kotak pilihan yang dipilih.
Contoh : Katakan kita ingin membuat pilihan warna pada butang pilihan. Untuk memudahkan
penulisan aturcara kita gunakan objek yang sama dan nama yang sama. Apabila diberikan nama
yang sama, satu mesej akan dipaparkan untuk memberi pilihan untuk membina kawalan
tatasusunan. Apabila butang `Yes' diklik, satu kawalan tatasusunan bernama optWarna telah
dibina.
Kawalan tatasusunan menggunakan index untuk mewakilkan objek. Berdasarkan contoh, kita
telah membina optWarna(0) untuk objek yang pertama, optWarna(1) bagi yang kedua dan
seterusnya optWama(2), optWarna(3). Index bermula dengan 0 sekiranya tidak diberi nilai
awal. Nilai (?) akan bergantung kepada bilangan butang pilihan atau kotak pilihan yang dibina.
Struktur Case
Dalam Bab 5, pernyataan If digunakan bagi pengujian pemilihan dan keputusan. Apabila
ingin menguji pembolehubah tunggal dengan pelbagai nilai, struktur Case akan
digunakan kerana ianya fleksibel dan mudah. Dengan kata lain, Case membolehkan suatu
proses dilakukan mengikut cabang tindakan yang ditetapkan.
Tatasusunan
Mohd Farid JaafarJSM, FSKTM, UPM
78
Sebarang pengujian bagi pemilihan dan keputusan dengan pengekodan struktur Case
juga boleh dikodkan menggunakan pernyataan If, tetapi penggunaan struktur Case adalah
lebih mudah dan lebih jelas.
Bentuk am:
Select Case Ungkapan
Case constant list 1
Tindakan 1
Case constant list 2
Tindakan2
.
.
.
Case Else
Tindakan seterusnya
End Select
Ungkapan bagi struktur Case terdiri daripada pembolehubah atau properti yang akan diuji.
Constant list pula adalah nilai yang akan disepadankan; yang mungkin terdiri daripada
pembolehubah atau pemalar tetap bagi numerik atau string, operator perbandingan, suatu
lingkungan nilai dan mungkin juga penggabungan nilai-nilai tersebut. Tiada had ditentukan
bagi bilangan Case ini.
Pengujian Butang Pilihan dengan Struktur Case
Struktur Case sangat sesuai digunakan apabila hendak membuat pengujian untuk memilih
butang pilihan. Apabila suatu butang dipilih ini akan menyebabkan event Click
dilaksanakan. Berdasarkan contoh berikut, Visual Basic mengumpukkan Index yang
berjenis data Integer kepada event Click. Index memegang nombor butang yang dipilih
(0, l, 2 atau 3). Nilai bagi Index ini boleh digunakan di dalam struktur Case.
Tatasusunan
Mohd Farid JaafarJSM, FSKTM, UPM
79
Contoh:
Private Sub optWarna_Click (Index As Integer)
’Setkan warna berdasarkan butang yang akan dipilih
Select Case Index
Case 0 ‘Butang pertama dipilih
lblMesej.Caption = "Warna yang dipilih ialah" & _
UCase(optWarna(0).Caption)
lbIMesej.ForeColor = vbRed
Case 1 ‘Butang kedua dipilih
lbIMesej.Caption = "Warna yang dipilih ialah" & _
UCase(optWama(1).Caption)
lblMesej.ForeColor = vbBlue
Case 2 ‘Butang ketiga dipilih
lblMesej.Caption = "Warna yang dipilih ialah" & _
UCase(optWama(2).Caption)
lbIMesej.ForeColor = vbYellow
Case 3 ‘Butang keempat dipilih
lbIMesej.Caption = "Warna yang dipilih ialah" & _
UCase(optWarna(3).Caption)
lbIMesej.ForeColor = vbBlack
End Select
End Sub
TATASUSUNAN 1 DIMENSI
Kita telah mempelajari bagaimana tatasusunan telah digunakan pada kawalan. Sekarang kita ingin
membina tatasusunan pada pembolehubah. Pembolehubah tatasusunan boleh mengandungi
beberapa nilai, sama seperti list box atau combo box. Bagi list box atau combo box, Visual Basic
telah menyimpan nilai di dalam Property List menggunakan tatasusunan. Dengan menggunakan
konsep yang sama, kita ingin membina tatasusunan bagi pembolehubah.
Tatasusunan
Mohd Farid JaafarJSM, FSKTM, UPM
80
Sebagai contoh, kita ingin menyimpan senarai kod kursus. Di sini, kita boleh menggunakan
tatasusunan bagi menyimpan senarai tersebut. Tatasusunan merupakan senarai nilai yang
diwakilkan dengan nama yang sama, juga dikenali sebagai jadual (table) atau subscripted
variables. Katakan kita menggunakan nama strKodKursus, setiap data dalam tatasusunan akan
dirujuk menggunakan nama strKodKursus(0), strKodKursus(2) dan seterusnya.
Setiap pembolehubah tersebut dipanggil elemen bagi tatasusunan, Subscript (juga
dipanggil index) mewakilkan kedudukan elemen di dalam tatasusunan. Rajah dibawah
menunjukkan tatasusunan yang mengandungi 10 elemen dengan subscript dari 0-9.
Tatasusunan strKodKursus
(0) SAK 1110
(1) SAK 1111
(2) SAK 2401
(3) SAK 2309
(4) MGM 1191
(5) MGM 2191
(6) POL 2409
(7) FAL 2221
(8) MTK 1111
(9) MTK 2111
Penisytiharan Tatasusunan
Dim ArrayName ([LowerSubscript To] UpperSubscript) [As DataType]
Contoh:
Dim strKodKursus (0 To 10) As String
Dim strNama (0 To 25) As String
Dim curBalance (10) As Currency
Dim mintValue (-10 To 10) As Integer
Tatasusunan
Mohd Farid JaafarJSM, FSKTM, UPM
81
Tatasusunan juga boleh didimensikan dengan kurungan tanpa nilai (empty parenthesis)
Public strNama 0 As String
Sekiranya diisytiharkan seperti di atas, tatasusunan dipanggil dynamic array kerana bilangan
elemen akan berubah setiap kali program dilarikan menggunakan pernyataan Redim.
Redim strNama (1 To 10)
Subscript
Penggunaan tatasusunan tidak akan bermakna sehingga kita menggunakan subscript bagi
mencapai elemen. Subscript boleh terdiri daripada constant, variables dan pemyataan numerik.
Contoh:
Option Explicit
Dim strKodKursus(0 To 9) As String
Dim num As Integer
Private Sub DaftarKursus()
For num = 0 To 9
strKodKursus(num) = InputBox ("Masukkan Kod Kursus")
lstKursus.Addltem strKodKursus(num)
Next num
End Sub
Private Sub cmdDaftarKursus_Click()
DaftarKursus
End Sub
Private Sub cmdKeluar_Click()
End
End Sub
Tatasusunan
Mohd Farid JaafarJSM, FSKTM, UPM
82
Private Sub lstKursus_Click()
lblKursus.Caption = "Subscript bagi Kursus " &
strKodKursus(1stKursus.Listlndex) & " yang dipilih ialah strKodKursus (" &
1stKursus.Listlndex & “)”
End Sub
Pernyataan For Each / Next
Bagi merujuk kepada setiap elemen yang terdapat di dalam tatasusunan, pernyataan For
Each/Next amat sesuai digunakan. Kelebihan menggunakan pernyataan ini ialah kita tidak
perlu memanipulasi subscript bagi tatasusunan.
Bentuk am:
For Each ElementName In ArrayAame
`laksanakan arahan di dalam loop
Next [ElementName]
Visual Basic secara automatik akan merujuk setiap elemen yang terdapat di dalam tatasusunan.
Arahan yang biasa diberikan seperti memberi nilai kepada setiap elemen. Sekiranya
tatasusunan mengandungi 12 elemen, gegelung akan dilaksanakan sebanyak 12 kali. Jenis data
bagi ElementName mestilah berjenis Variant. Berikut ialah contoh pernyataan For Each/ Next
bagi tatasusunan strName dan intTotal yang telah diisytiharkan dan mengandungi data.
Dim vntOneName As Variant
For Each vntOneName In strName
Printer.Print vntOneName 'Cetak data bagi setiap elemen
Next vntOneName
Dim vntTotal As Variant
For Each vntTotal In intTotal
vntTotal = 0 `Beri nilai awal (0) pada setiap elemen
Next vntTotal
**Sekiranya ingin keluar awal dari pernyataan For, gunakan pemyataan Exit For.
Tatasusunan
Mohd Farid JaafarJSM, FSKTM, UPM
83
TATASUSUNAN 2 DIMENSI DAN MULTI-DIMENSI
Tatasusunan 2 dimensi atau lebih, membenarkan kita untuk merujuk kepada lebih daripada 2
data. Bagi tatasusunan 2 dimensi, 2 subscript akan digunakan bagi mewakili satu elemen, dimana
data di atur dalam bentuk baris dan lajur.
Aplikasi yang biasa menggunakan tatasusunan 2 dimensi ialah aplikasi menggunakan jadual
untuk mewakilkan data seperti jadual Taburan Hujan, jadual Cukai dan jadual Kadar Insurans.
Untuk menghasilkan tatasusunan 2 dimensi, pernyataan Dim akan menentukan bilangan baris dan
lajur. Contoh di bawah merupakan jadual yang mengandungi 3 baris dan 4 lajur.
Pengisytiharan Tatasusunan 2 Dimensi
Dim ArrayName ([LowerLimit To] UpperLimit, [LowerLimit To] UpperLimit) [As DataType]
Contoh:
Dim strNama (2, 3) As String
Dim strNama (0 To 2, 0 To 3) As String
Kedua-dua contoh di atas akan menghasilkan tatasusunan yang mengandungi 12 elemen, dengan
3 baris dan 4 lajur.
(0,0) (0,1) (0,2) (0,3)
(1,0) (1,1) (1,2) (1,3)
(2,0) (2,1) (2,2) (2,3)
Tatasusunan
Mohd Farid JaafarJSM, FSKTM, UPM
84
Apabila ingin merujuk elemen di dalam tatasusunan, kita mesti menentukan kedua-dua subscript
elemen tersebut. Subscript yang pertama ialah baris (row) dan subscript kedua ialah lajur
(column). Berikut ialah contoh rujukan yang sah:
strName (1,2) = "Value"
strName(intRowlndex, intCollndex) = "Value"
lblDisplay.Caption = strName (1,2)
Printer.Print strName (intRowlndex, intCollndex)
Rujukan kepada elemen adalah tidak sah sekiranya (bagi contoh strName) nilai subscript pertama
lebih dari 2 dan subscript kedua lebih dari 3.
Memberi nilai awal Kepada Tatasusunan 2-Dimensi
Biasanya nilai awalan elemen bagi tatasusunan numerik ialah 0 dan elemen string disetkan
kepada string kosong, tetapi bagi sesetengan kes, kita perlu memberi nilai awal kepada
tatasusunan. Bagi tujuan ini, pernyataan For/Next Tersarang atau For Each/Next boleh digunakan.
Contoh:
Dim intRow As Integer
Dim intCol As Integer
For intRow = 1 To 3
For intColumn = 1 To 4
strName (intRow, intColumn) = “” ‘Initialize each element
Next intColumn
Next intRow
Dim vntName As Variant
For Each vntName In strName
vntName 'Initialize each element
Next vntName
Tatasusunan
Mohd Farid JaafarJSM, FSKTM, UPM
85
Mencetak Jadual 2 Dimensi
Apabila ingin mencetak kandungan jadual 2 dimensi, kita juga boleh menggunakan pernyataan
gegelung For Each/Next.
Dim vntName As Variant
For Each vntName In strName
Printer.Print vntName
Next vntName
Jika ingin mencetak keseluruhan baris pada satu garisan, gunakan gegelung For/Next dan
setkan arahan print untuk multi elemen.
For intRowlndex = 0 To 2
Printer.Print strName(intRowIndex,0); Tab(15); strName(intRowIndex,1); _
Tab(30); strName(intRowIndex,2), Tab(45); strName(intRowlndex,3)
Next intRowIndex
Menambah nilai elemen bagi Tatasusunan 2 Dimensi
Berikut merupakan contoh untuk menambah nilai elemen tatasusunan. Bagi menambah nilai
kesemua elemen, setiap lajur mestilah mempunyai satu medan jumlah dan setiap baris juga
mempunyai medan jumlah.
Contoh:
Dim curAmount (1 To 4, 1 To 6) As Currency
Dim curRowTotal (1 To 4) As Currency
Dim curColTotal (I To 6) As Currency
Dim intRowIndex As Integer
Dim intCollndex As Integer
Tatasusunan
Mohd Farid JaafarJSM, FSKTM, UPM
86
For intRowIndex = 1 To 4
For intCollndex = 1 To 6
curRowTotal(intRowlndex) = curRowTotal(intRoxlndex) + _
curAmount(intRowIndex, intCollndex)
curRowTotal(intRowlndex) = curRowTotal(intRoxlndex) + _
curAmount(intRowlndex, intCollndex)
Next intCollndex
Next intRowIndex
Contoh:
Option Explicit
Dim mcPrice(0 To 2, 0 To 2) As Currency 'Table to store coffee prices
Private Type CoffeeSale
stType As String
stQuantity As String
cPrice As Currency
End Type
Dim mTransaction(20) As CoffeeSale 'Store transactions for report
Dim miNumberTransactions As Integer
Dim mlWeight As Long
Private Sub cmdClear_Click()
'Remove the selection from the lists and clear the price
Dim iIndex As Integer
cboType.ListIndex = -1 'Clear selection
lblPrice.Caption = “”
mlWeight = 0
Tatasusunan
Mohd Farid JaafarJSM, FSKTM, UPM
87
For ilndex = 0 To 2
optWeight(ilndex).Value = False
Next iIndex
End Sub
Private Sub cmdExit_Click()
'Print report and terminate the project
Dim iIndex As Integer
Dim stPrintPrice As String
Printer.Print Tab(45); "Sales Report"
Printer.Print ""
Printer.Print Tab(15); "Type"; Tab(40); "Quantity"; Tab(60); "Price"
Printer.Print ""
For iIndex = 0 To miNumberTransactions – 1
stPrintPrice = Format$(mTransaction(iIndex).cPrice, "Currency")
Printer.Print Tab(10); mTransaction(ilndex).stType; Tab(35); _
mTransaction(ilndex).stQuantity; Tab(65 - Len(stPrintPrice)); _
stPrintPrice
Next iIndex
End Sub
Private Sub cmdFindPrice_Click()
'Lookup the price using the quantity and type
Dim iRow As Integer
Dim iCol As Integer
Dim cPrice As Currency
iRow = mlWeight
Tatasusunan
Mohd Farid JaafarJSM, FSKTM, UPM
88
If miNumberTransactions <= 20 Then 'Allow only 20 transactions
If cboType.Listlndex <> -1 Then
iCol = cboType.Listlndex
Select Case mlWeight
Case 0
mTransaction(miNumberTransactions).stQuantity = "Quarter Pound"
Case 1
mTransaction(miNumberTransactions).stQuantity = "Half Pound"
Case 2
mTransaction(miNumberTransactions).stQuantity = "Full Pound"
Case Else
'Default to quarter pound
mTransaction(miNumberTransactions).stQuantity = "Quarter Pound"
End Select
cPrice = mcPrice(iRow,iCol)
lblPrice.Caption = Format$(cPrice, "Currency")
mTransaction(miNumberTransactions).stType = cboType.List(iCol)
mTransaction(miNumberTransactions).cPnce = cPrice
miNumberTransactions = miNumberTransactions + 1
Else
MsgBox "Select a type and quantity", vbExclamation, "Entry Error"
End If
End If
End Sub
Private Sub Form_Load()
'Load prices into the table
mcPrice(0, 0) = 2.6
mcPrice(0, 1) = 2.9
mcPrice(0. 2) = 3.25
mcPrice(1, 0) = 4.9
mcPrice(1, 1) = 5.6
Tatasusunan
Mohd Farid JaafarJSM, FSKTM, UPM
89
mePrice(l., 2) = 6.1
mcPrice(2. 0) = 8.75
mcPrice(-2- 1) = 9.75
mcPrice(2. 2) = 11.25
End Sub
Private Sub optWeight_Click(Index As Integer)
'Find the selected weight
mlWeight = Index
End Sub