Anda di halaman 1dari 1098

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Daftar Isi

Bagian 1, Tentang Excel Bagian 2, Fasilitas Pada Excel Bagian 3, Formula Dan Fungsi Bantu Bagian 4, Tools Pada Excel Bagian 5, Pengolahan Data Dengan Excel

2 11 20 24 32

Indoprog

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Bagian 1
Tentang Excel Apa itu Excel Excel adalah salah satu software di keluarga Microsoft Office Excel merupakan software yang dikenal sebagai Spreadsheet. Apa itu Spreadsheet Suatu program interaktif yang berorientasi pada layar dimana memungkinkan pemakai untuk menempatkan data keuangan pada layar.

www.cogsci.princeton.edu/cgi-bin/webwn
Suatu type software aplikasi yang memungkinkan tulisan, angka dan fungsi-fungsi kompleks untuk dimasukan kedalam suatu matrix yang terdiri dari ribuan sel-sel tersendiri. Aplikasi tersebut akan mengubah hasil formula sebagaimana perubahan pada data angka. Menyediakan fungsi-fungsi matematika dan statistic, serta menghasilkan grafik.

www.pitt.edu/~document/glossary/glossary.html
Layar Excel

Cell

Menubar Standar toolbar Formatting toolbar Vertical scrollbar

Drawing toolbar Sheet tab

Horizontal scrollbar

Indoprog

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Worksheet pada Excel terdiri dari 256 kolom, dan 65536 baris. Penamaan kolom mulai dari A,B,C, , Z, AA, AB, AC AZ, IV. Beberapa Worksheet pada Excel membentuk satu Workbook. Cell adalah perpotongan antara kolom dan baris. Penamaan Cell pada Excel

Cell A1

Penamaan Cell pada worksheet yang sama adalah dengan menyebut <namakolom><namabaris>. Contoh : A1, sel yang terletak pada kolom A baris 1 IV65536, sel yang terletak pada kolom IV baris 65536

Cell IV65536

Penamaan Cell dari worksheet yang lain adalah dengan menyebut <namasheet>!<namakolom><namabaris> Contoh : Sheet2!A1, sel yang terletak pada Sheet2 kolom A baris 1 Sheet3!A1, sel yang terletak pada Sheet3 kolom A baris 1 Penamaan Cell dari workbook yang berbeda adalah dengan menyebut [<namafile>]<namasheet>!<namakolom><namabaris> Contoh : [Training2.xls]Sheet1!A1, sel yang berada pada file Training2.xls Sheet1 kolom A baris 1.

Indoprog

Analisa dan Pengolahan Data dengan Excel


Penamaan Range 2D pada Excel

Oleh : Hendra, ST.

Range A1:C10

Pada Worksheet yang sama Penamaan Range pada worksheet yang sama adalah dengan menyebut <namacell_kiriatas>:<namacell_kananbawah> Contoh : A1:C10, adalah range yang dimulai dari A1 s/d C10 Pada Worksheet yang berbeda Penamaan Range dari worksheet yang berbeda adalah dengan menyebut <namasheet>!<namacell_kiriatas>:<namacell_kananbawah> Contoh : Sheet2!A1..C10, adalah range yang berada di Sheet2 dari A1 s/d C10 Pada Workbook yang berbeda Penamaan Range dari workbook yang berbeda adalah dengan menyebut [namafile]<namasheet>!<namacell_kiriatas>:<namacell_kananbawah> Contoh : [Traning2.xls]Sheet1!A1..C10, adalah range yang berada di file Training2.xls, Sheet1 dari A1 s/d C10. Penamaan Range 3D pada Excel Pada umumnya kita terbiasa bekerja dengan range 2D, tetapi Excel juga menyediakan kemampuan range 3D, adapun penamaannya adalah sebagai berikut : <namasheet_awal>:<namasheet_akhir>!<namacell_kiriatas>:<namacell_kananba wah> Contoh : Sheet1:Sheet3!A1:C10, adalah range mulai dari Sheet1 s/d Sheet3 dari A1 s/d C10. Cukup rumit bukan ?

Indoprog

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Memindahkan Cell pointer Cara yang paling mudah untuk memindahkan Cell pointer adalah dengan menggunakan bantuan mouse. Anda dapat juga menggunakan tombol maupun kombinasi tombol berikut untuk memindahkan Cell pointer.

Tombol Up Down Left Right Ctrl+Home Ctrl+Left Ctrl+Down Ctrl+Up Ctrl+Right Ctrl+PgUp Ctrl+PgDn F5

Fungsi (Isi sendiri)

Gunakan tombol F5 untuk memunculkan dialogbox Goto

Isikan alamat cell yang dituju

Isikan alamat cell yang ingin dituju, dan klik pada Ok.

Indoprog

Analisa dan Pengolahan Data dengan Excel


Membuat range pada Excel

Oleh : Hendra, ST.

Dengan menggunakan mouse Klik pada drag tombol mouse mulai dari cell kiri atas range sampai dengan cell kanan bawah range. Dengan menggunakan keyboard Aktifkan ke cell kiri atas, tekan tombol shift (jangan dilepas), dan geser cell pointer sampai cell kanan bawah. Mengetik data di Excel Untuk mengetik data di Excel dapat dilakukan dengan memindahkan keaktifan Cell pointer ke Cell yang dimaksud, dan mengetikan data yang diinginkan serta diakhiri dengan Enter atau tombol arah. Type data pada Excel

Label
Excel mengenal empat type data yaitu : Label, Number, Logical dan Error. Pada saat anda melakukan Entri data, maka Excel secara otomatis akan menyesuaikan type data sesuai dengan jenis data yang anda ketik.

Number

Beberapa hal yang sering menyebabkan kesalahan dalam entry data di Excel : Mengetikan tanda Rp. dan pemisah ribuan untuk data numeric yang mewakili nilai uang sehingga mengakibatkan data tersebut menjadi type Label. Kesalahan pemakaian punctuation untuk data numeric yang memiliki decimal (pemakaian punctuation harus disesuaikan dengan regional setting anda) Format pengetikan tanggal harus disesuaikan dengan regional setting anda, apakah MM/DD/YY atau DD/MM/YY. Sesuatu hal yang perlu anda ketahui adalah Tanggal di Excel adalah berupa suatu data numeric yang format cellnya diset ke Date/Time. Tanggal di Excel dinyatakan sebagai jumlah hari sejak 1 January 1900.

Date merupakan numeric yang menunjukan jumlah hari sejak 1 january 1900
Waktu di Excel merupakan hasil bagi waktu terhadap 24 jam. Dalam hal ini instruktur perlu menunjukan apa yang dimaksud dengan pernyataan diatas.

Indoprog

Analisa dan Pengolahan Data dengan Excel


Menyimpan Data Excel

Oleh : Hendra, ST.

Penyimpanan data pada Excel dapat dilakukan dengan melakukan klik pada toolbar Save, dan selanjutnya akan muncul dialiog box Save As

Folder tujuan penyimpan

Nama file Type penyimpanan

Pada saat Save, hal yang perlu diperhatian adalah Save In (folder dimana file akan disimpan), dan Filename (Nama file), dan Save as type (Type penyimpanan). Memproteksi file dengan password Salah satu fasilitas yang disediakan oleh Excel untuk penyimpanan data yang sifatnya rahasia adalah proteksi dengan password terhadap file. Untuk melakukan proteksi dapat dilakukan dengan klik pada Tools, dan pilih Properties. Untuk menyimpan file dengan nama baru, dapat digunakan menu File, dan pilihan Save As.

Indoprog

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Berikan tanda Check pada Always create backup, kalau kita bertujuan menghasilkan backup file pada setiap penyimpanan data. Password to open, diisi dengan password untuk membuka file. Password to modify, diisi dengan password memodifikasi file Berikan tanda Check pada Read-only recommended kalau kita ingin memberikan pertanyaan readonly pada saat buka file. Jika isi file anda sangat rahasia, anda dapat melakukan klik pada Advanced untuk memiliki jenis metode enkripsi.

Teknologi Enkripsi

Sesuatu hal yang perlu anda perhatikan dalam melakukan proteksi file adalah pemilihan password. Dewasa ini diinternet tersedia berbagai software yang dapat membuka kembali file yang telah terproteksi dengan metode brute force. Langkah yang cukup bijaksana adalah memilih password dengan ukuran minimal 10 digit.

Indoprog

Analisa dan Pengolahan Data dengan Excel


Menyimpan Workspace

Oleh : Hendra, ST.

Pernahkan anda menggunakan Excel secara kompleks, artinya anda menggunakan formula yang berkaitan antara satu workbook dengan workbook lain. Sesuatu hal yang menjadi masalah adalah ketika kita ingin membuka kembali workbook tersebut satu per satu. Bagaimana kalau kita ingin sekali buka, maka semua workbook yang berkaitan juga ikut terbuka ? Jawabannya adalah menggunakan fasilitas Save Workspace pada Excel. Fasilitas ini dapat diaktifkan dengan menggunakan menu File, Save Workspace.

Workspaces file type

Berikan nama file workspace anda, dan klik pada Save. Sesuatu hal yang perlu diingat adalah bahwasannya file workspace WLW berisi informasi file-file yang membentuk workspace, sedangkan masing-masing workbook harus disimpan tersendiri dalam file XLS.

Indoprog

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Bagian 2
Fasilitas pada Excel Delete, Cut, Copy dan Paste Salah satu fasilitas yang paling banyak dilakukan pada spreadsheet adalah Copy dan Move. Secara sederhana proses copy dan move dapat dilakukan dengan menggunakan toolbar

Cut (memotong isi cell/range ke clipboard) Copy (menduplikasi isi cell/range ke clipboard) Paste (memindahkan isi clipboard ke posisi cell pointer) Format painter (menduplikasi format cell/range ke lokasi baru)

Ctrl X Ctrl C Ctrl V Del

Untuk mempercepat proses cut, copy dan paste, alangkah baiknya kalau anda menggunakan. Paste Special Salah satu fasilitas Paste yang jarang diketahui oleh pemakai adalah Paste Special. Fasilitas ini dapat diaktifkan dengan menu Edit, Paste Special.

Indoprog

10

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Fasilitas Clear Fasilitas ini dapat digunakan untuk melakukan clear terhadap semua, isi ataupun format saja.

Fasilitas Undo Fasilitas Undo dan Redo adalah fasilitas yang paling menyenangkan di Excel, bayangkan jika anda membuat kesilapan dan dapat kembali keposisi semula, alangkah indahnya hidup ini. Fasilitas ini dapat diaktifkan dengan toolbar :

Catatan : Anda hanya dapat melakukan Undo/Redo sampai titik terakhir penyimpanan anda. Fasilitas Find and Replace Mencari data adalah pekerjaan yang cukup membosankan, apalagi kalau data yang ingin dicari berada dalam daftar yang cukup panjang. Tapi jangan pesimis terlebih dahulu, karena Excel sudah mengetahui kebutuhan anda, Cukup aktifkan menu Edit, Find atau Replace

Fasilitas Klik Kanan Kebanyakan kebutuhan anda dalam pemakaian Excel dapat terpenuhi dengan melakukan klik kanan. Jadi jika anda mencari sesuatu fasilitas pada Excel, biasakan untuk klik kanan terlebih dahulu. Shortcut klik kanan pada Cell

Indoprog

11

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Cobalah menu Insert, Delete, Insert Comment, dan buatlah kesimpulan anda :

Jadi Ingat ! Apapun yang ingin anda lakukan, jika tidak tahu, maka klik kanan terlebih dahulu.
Toolbar Formatting Warna dan Cita rasa, itulah yang menjadi hidup ini indah. Dapatkah anda bayangkan kalau anda membuat laporan yang hanya terdiri dari data, alangkah membosankan bagi yang membacanya. Tetapi kalau anda mampu memberikan warna dan border, tentu saja laporan anda menjadi menarik bukan ?

Secara berturut-turut adalah sebagai berikut : Font Font Size Bold Italic Underline Align Left Center Align Right Merge and Center Currency Style Percent Style Comma Style Decrease Decimal Increase Desimal Decrease Indent Increase Indent Borders Fill Color Font Color Memilih jenis font Arial, Arial Black, Verdana, Times New Roman, dll Memilih ukuran font 10, 11, 12, 14, Cetak tebal (Ctrl B) Cetak Miring (Ctrl I) Garis bawah (Ctrl U) Rata kiri Rata tengah Rata kanan Pengabugan cell dan rata tengah Format uang $10,000,000.00 Format percent 10% Format koma 10,000,000.00 Mengurangi tempat decimal Menambah tempat desimal Mengurangi indent Manambah indent Membuat bingkai Membuat warna latar belakang Membuat warna tulisan

18, dst

Indoprog

12

Analisa dan Pengolahan Data dengan Excel


Tips Format mata uang

Oleh : Hendra, ST.

Saya yakin anda pernah melakukan format nilai uang dengan menggunakan tanda mata uang, dengan menggunakan format Currency, tetapi ternyata hasilnya tidak rata dikanan.

Untuk format mata uang biasanya digunakan Klik kanan, format Cell, kemudian pilih Currency, dan

Tips, gunakan format Accounting, akan menghasilkan format mata uang yang rapi.

Indoprog

13

Analisa dan Pengolahan Data dengan Excel


Conditional Formatting

Oleh : Hendra, ST.

Anda dapat melakukan format terhadap suatu cell berdasarkan kondisi tertentu, misalnya data negative dengan warna merah, data positif dengan warna hitam. Untuk menggunakan conditional format, anda dapat menggunakan menu Format, dan klik pada Conditional Formatting.

Pembuatan Grafik
Pembuatan grafik di Excel dapat dilakukan dengan mudah, karena Excel telah menyediakan suatu Wizard, artinya siapkan data anda, aktifkan Wizard, maka akan menghasilkan grafik sesuai dengan keinginan anda. Contoh :

Buat range dari A3:F7 Klik pada toolbar Chart, dan otomatis akan muncul suatu chart Wizard.

Indoprog

14

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Pilih jenis Chart yang diinginkan, misalnya Column dan klik pada Next

Selanjutnya anda dapat menentukan data range, dan series dan klik pada Next

Indoprog

15

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Isikan Chart title, Category (X) axis, dan Value (Y) axis. Anda dapat juga mengatur Axes, Gridlines, Legend, Data Labels, dan Data Table. Lalu klik Next.

Pilih penempatan Grafik pada satu sheet tersendiri atau sebagai object pada sheet tertentu.

Jika anda perhatikan chart diatas, maka untuk Series Proyeksi Unit tidak nampak, hal ini terjadi karena adanya perbedaan data antara Unit dengan rupiah. Jadi Bagaimana ? Dalam hal ini kita bisa menggunakan fasilitas Secondary Axis, caranya. Pada Menu View, pilih Toolbar, dan pilih Chart untuk mengaktifkan toolbar Chart.

Indoprog

16

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Klik pada seires Proyeksi Rupiah, sehingga penampilan dari toolbar Chart anda menjadi :

Pilih Series Proyeksi Unit

Klik format series

Pilih tab Axis, dan klik pada Secondary Axis, dan klik pada Ok

Pada Chart Type pilih Jenis Line

Indoprog

17

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Dan akhirnya menghasilkan Grafik dengan dua Sumbu, dengan kombinasi Batang dan Garis.

Indoprog

18

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Bagian 3
Formula dan Fungsi Bantu Membuat formula di Excel Formula merupakan salah satu fasilitas pada spreadsheet yang sangat mengagumkan. Pengetikan formula di Excel Formula di Excel dimulai dengan suatu tanda sama dengan (=), kemudian diikuti oleh suatu ekspresi. Contoh : =A1+A2, merupakan formula untuk menjumlahkan Cell A1 dan A2. Sesuatu hal yang penting dalam penulisan ekspresi adalah operator. Operator matematika ^ (pangkat), * (Kali), / (Bagi), + (Tambah), - (Kurang) Hal lain yang perlu diperhatikan adalah urutan operasi dan pemakaian kurung (). Pengaruh ekspresi formula terhadap Copy dan Move

Formula

Normalnya ekspresi formula yang mengandung alamat cell akan berubah secara relative terhadap proses Copy dan Move. Dalam hal ini instruktur perlu menunjukan apa yang dimaksud dengan pernyataan diatas.

Referensi Cell berubah relatif


Pemakaian tanda absolute Kadang-kadang kita membutuhkan alamat cell dalam formula yang tidak berubah secara relative terhadap proses Copy dan Move.

Referensi Cell Absolute

Untuk membuat tanda Absolute dapat digunakan tanda $, atau dengan menekan F4 pada alamat cell dalam formula.

Indoprog

19

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Contoh : $D$1, Nama cell tidak akan berubah pada operasi Copy maupun Move. $D1, Kolom cell tidak akan berubah, tetapi baris cell dapat berubah Fungsi Bantu pada Excel Excel merupakan alat Bantu kerja yang sangat efektif untuk pengolahan maupun analisa data. Beberapa fungsi Bantu yang sering digunakan : Fungsi Bantu Sum(Range) Average(Range) Count(Range) Max(Range) HyperLink(Link_location, Friendly_name) If(Logical_Test, Value if true, value if false) SumIf(Range, Criteria, Sum_Range) CountIf(Range, Criteria) AND(Logika1, Logika2, ) OR(Logika1, Logika2, ) Fungsi Mentotalkan data numeric dalam range Menghitung rata-rata data numeric dalam range Menghitung jumlah data numeric dalam range Mencari data numeric yang terbesar dalam range Membuat hyperlink ke alamat cell tertentu, dengan diwakili suatu nama Melakukan logika test, dan mengembalikan nilai sesuai dengan hasil logika test. Melakukan total terhadap Sum_Range dimana baris yang Range yang memenuhi Criteria. Menghitung jumlah baris di Range yang memenuhi Criteria. Menghasilkan operasi And terhadap Logika1, Logika2, , Logika N. Menghasilkan operasi Or terhadap Logika1, Logika2, , Logika N

Hasil pemakaian fungsi bantu

Dengan rincian formula sebagai berikut :

Indoprog

20

Analisa dan Pengolahan Data dengan Excel


Contoh Pemakaian IF untuk jenis Hutang Dagang

Oleh : Hendra, ST.

Dengan rincian formula sebagai berikut :

Fungsi Bantu Pencarian Data VLOOKUP Mencari suatu nilai berdasarkan nilai kolom yang paling kiri dari suatu tabel, dan mengembalikan nilai dari baris yang bersesuaian dengan nomor kolom yang anda tentukan. VLOOKUP(lookup_value,table_array,col_index_num,range_lookup) Contoh :

Indoprog

21

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Indoprog

22

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Bagian 4
Tools pada Excel Pemakaian Sheet Protection Sheet Protection adalah merupakan fasilitas pada Excel untuk melakukan proteksi terhadap sheet tertentu sehingga perubahan terhadap isi sheet tidak dapat dilakukan. Fasilitas ini dapat diaktifkan dengan menggunakan menu Tools, Protection, Protect Sheet. Isikan password yang akan digunakan untuk membebaskan kembali proteksi terhadap worksheet.

Isikan password sekali lagi.

Selanjutnya jika anda ingin melakukan perubahan terhadap sheet yang telah diproteksi akan ditampilkan pesan :

Indoprog

23

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Untuk menghilangkan proteksi terhadap suatu worksheet dapat menggunakan menu Tools, Protection, Unprotect Sheet.

Bagaimana kalau pada Sheet yang terproteksi kita ingin membuat beberapa Cell dapat diubah oleh pemakai ?

Bagaimana membuat Cell B2, B3, B6, dan B7 dapat diubah oleh pemakai, tetapi Cell lainnya terproteksi ? Klik kanan pada Cell B2, pilih format Cell, pada tab Protection hilangkan tanda Check pada Locked

Indoprog

24

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Lakukan cara yang sama untuk Cell B3, B6, dan B7. Selanjutnya lakukan proteksi terhadap Sheet tersebut. Maka Cell B2, B3, B6 dan B7 tidak ikut terproteksi.

Indoprog

25

Analisa dan Pengolahan Data dengan Excel


Pemakaian Goal Seek

Oleh : Hendra, ST.

Goal seek merupakan salah satu fasilitas pada Excel untuk melakukan analisa "What if" pada data yang anda berikan. Sebagai contoh anda dapat menghitung jumlah DP (uang muka) pembelian sepeda motor secara KDS (Kredit Dana Sendiri) untuk menyesuaikan nilai cicilan perbulan, jika bunga kredit dan jangka waktu cicilan diketahui. Contoh kasus :

Berapa jumlah DP yang harus dibayar, jika cicilan/perbulan yang diinginkan adalah 85000 ? Maka, gunakan menu Tools, Goal Seek, dan isikan parameter berikut : Set cell : Isikan dengan alamat cell yang ingin ditentukan nilai tujuannya. To value : Isikan nilai tujuan By changing cell : Isikan alamat cell yang dicari.

Dan klik pada Ok, selanjutnya akan ditampilkan hasil perhitungan secara iterasi.

Indoprog

26

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Indoprog

27

Analisa dan Pengolahan Data dengan Excel


Pemakaian Scenario

Oleh : Hendra, ST.

Scenario adalah suatu himpunan nilai yang disimpan oleh Microsoft Excel dan dapat disubsitusi secara otomatis kedalam worksheet. Anda dapat menggunakan scenario untuk memprediksi berbagai situasi yang berbeda dalam spreadsheet anda. Misalnya kita ingin membuat scenario perubahan tabel cicilan KDS, terhadap persentasi nilai DP, jika bunga kredit dan jangka waktu cicilan tetap.

Buatlah tiga scenario tabel cicilan untuk DP 50%, 40% dan 30% ! Maka pada menu Tools, pilih Scenarios

Indoprog

28

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Klik pada Add, untuk membuat scenario.

Isikan nama Scenario, dan nilai cell yang akan diubah.

Indoprog

29

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Isikan nilai cell berdasarkan scenario yang diinginkan. Lakukan langkah yang sama untuk DP 40% dan 30%, sehingga jendela Scenario Manager menghasilkan tampilan :

Selanjutnya anda dapat melakukan presentasi dengan menampilkan Scenario DP 50%, 40%, dan 30%, dengan melakukan klik pada Show.

Indoprog

30

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Bagian 5
Pengolahan data dengan Excel Excel menyediakan berbagai fasilitas untuk memudahkan entry data, pengurutan data dan analisa data yang berada dibawah kelompok menu Data. Tips pengetikan data Jika anda mengetikan data dalam bentuk tabel, biasanya setelah anda mengetikan isi cell kemudian diikuti dengan tombol arah kesamping atau kebawah untuk berpindah ke cell berikutnya. Tips : Gunakan tombol Tab untuk berpindah ke kolom berikutnya, dan tombol Enter untuk ke baris berikutnya, kolom pertama. Menginput Data dalam bentuk Form Untuk penginputan data dalam jumlah besar dalam Excel adalah lebih mudah dilakukan dalam bentuk form. Contoh : Klik pada salah satu Cell Data anda, dan pada menu Data, pilih Form

Selanjutnya anda dapat melakukan berbagai aktifitas seperti New, Delete, Find dan lain-lain.

Indoprog

31

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Mengurut Data Pengurutan data merupakan salah satu proses yang paling banyak digunakan dalam pengolahan data. Data yang berada dalam keadaan berurut akan memudahkan pencarian dan pengelompokan. Misalnya kita memiliki data DO dari AHM berikut ini yang berurut berdasarkan NomorDO:

Tampilkan data tersebut diatas dalam keadaan berurut berdasarkan KodeModel dan KodeWarna ? Select range data anda, kemudian pada menu Data, pilih Sort, dan isikan parameter berikut ini :

Indoprog

32

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Aktifkan option My list has Header row Sort by, diisi dengan KodeModel Then by, diisi dengan KodeWarna Keterangan : Ascending : diurut dari kecil ke besar Descending : diurut dari besar ke kecil

Klik pada Ok, dan selanjutnya data telah berurut berdasarkan KodeModel dan KodeWarna.

Indoprog

33

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Membatasi data (filter) Kadang-kadang kita ingin focus terhadap data dengan criteria tertentu saja, ataupun ingin melakukan pencarian data terhadap criteria tertentu, hal tersebut adalah mudah dilakukan dengan menggunakan Excel. Fasilitas AutoFilter. Fasilitas ini dapat diaktifkan dengan menu Data, Filter, dan AutoFilter. Batasi tampilan data untuk tanggal 1/10/2004 s/d 10/10/2004 untuk Kode Model BM0. Klik pada salah satu cell didalam range data. Pada Menu Data, Filter, pilih AutoFilter, sehingga akan ditampilkan AutoFilter pada masing-masing judul kolom data.

Klik pada filter untuk TanggalDO, dan pilih Custom

Selanjutnya akan muncul dialog custom AutoFilter

Isikan criteria yang diinginkan, dan klik Ok. Kemudian klik pada filter untuk kolom KodeModel dan pilih BM0.

Indoprog

34

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Untuk menghilangkan Filter, gunakan menu Data, Filter, dan klik lagi pada AutoFilter. Fasilitas Advanced Filter Fasilitas Advanced Filter digunakan jika criteria filter cukup rumit, misalnya kita ingin melakukan filter terhadap KodeModel BM0 dan BF2 yang memiliki kolom jumlah 5 sampai 10. Buatlah Tabel Kriteria dengan isi sebagai berikut :

Kemudian pada menu Data, pilih Filter, dan Advanced Filter Catatan : Khusus untuk data tanggal harus menggunakan format nomor hari dalam penulisan criteria.

Klik pada Ok, otomatis data anda akan terfilter berdasarkan criteria yang dimaksud. Untuk menghilangkan efek Filter, gunakan menu Data, Filter, ShowAll.

Indoprog

35

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Melakukan SubTotal Setelah pengurutan, maka kadang-kadang kita perlu melakukan total terhadap kolom numerik berdasarkan pengelompokan kolom tertentu. Totalkan kolom Jumlah, berdasarkan Kode Model dan Kode Warna ! Lakukan pengurutan terhadap data anda berdasarkan kolom KodeModel. Klik pada salah satu cell dalam range data anda. Pada Menu Data pilih Subtotal At each change in, di isikan dengan judul kolom pengelompokan data KodeModel Use function, pilih formula pengolahan data Sum Add subtotal to, berikan tanda check terhadap kolom yang akan dilakukan proses pengolahan. Beri tanda check pada Replace current subtotals Beri tanda check pada Summary below data.

Setelah anda klik pada Ok, maka akan ditampilkan sub total pada kolom Jumlah.

Selanjutnya adalah melanjutkan proses sub total berdasarkan KodeWarna. Klik pada salah satu cell dalam range data anda.

Indoprog

36

Analisa dan Pengolahan Data dengan Excel


Pada Menu Data pilih Subtotal

Oleh : Hendra, ST.

At each change in, di isikan KodeWarna Use function, pilih formula pengolahan data Sum Add subtotal to, berikan tanda check terhadap kolom yang akan dilakukan proses pengolahan. Buang tanda check pada Replace current subtotals Beri tanda check pada Summary below data.

Setelah klik pada Ok, maka Subtotal menjadi dua tingkat yaitu berdasarkan KodeModel Per KodeWarna.

Untuk menghilangkan Subtotal dapat menggunakan tombol RemoveAll pada dialog Subtotal.

Indoprog

37

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Membatasi pemasukan data Kadang-kadang kita merancang suatu form untuk diisi oleh orang lain, dan untuk mengurangi kesalahan operator, kita dapat membatasi type dan range data serta informasi yang dapat di masukkan pada suatu range tertentu.

Batasi data yang dapat dimasukan pada cell B2 adalah numeric antara 10% s/d 40%, dengan keterangan Bunga/bulan:Masukan bunga cicilan/perbulan, dan pesan kesalahan Periksa lagi:Nilai yang diperbolehkan adalah 10% s/d 40% Klik pada Cell B2. Pada menu Data, pilih Validation

Indoprog

38

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Akan memberi pesan petunjuk pada saat Cell B2 aktif

Indoprog

39

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Dan akan menampilkan pesan kesalahan kalau data yang dimasukan tidak memenuhi criteria yang telah ditentukan.

Membuat Drop Down List Pengisian pada Cell Misalnya anda memiliki ingin membuat drop down list pada saat pengetikan kolom status. Caranya : Select Range pada kolom status. Pada Menu Data, pilih validation Pada kolom Allow, pilih List Kemudian pada Source isikan A2:A9

Selanjutnya pada kolom status akan terbentuk Drop down list.

Indoprog

40

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Melakukan Analisa Data dengan Data Table Kadang-kadang kita ingin melakukan analisa data dengan kombinasi perubahan terhadap dua parameter. Misalnya kita ingin membuat analisa pengaruh Perubahan Hutang Pokok dan DP terhadap nilai cicilan bulanan dalam bentuk tabel sebagai berikut.

Isikan pada tabel B8 formula sebagai berikut : =((1-$B$4)*$B$3)*(1+B5*B6)/24

Kemudian lakukan select range B8:G12 Pada Menu Data, pilih Table Isikan Row input cell : B4 Isikan Column input cell : B3 Dan Klik pada Ok.

Indoprog

41

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Melakukan Analisa Data dengan Pivot Table Pivot table merupakan suatu fasilitas pada Excel yang sangat mengagumkan. Bagi pemakai yang sering melakukan analisa data berdasarkan pengelompokan data terhadap baris dan kolom, maka pivot table merupakan pilihan yang tepat. Lakukan analisa data DO berdasarkan KodeModel dan KodeWarna, dimana ditampilkan jumlah unit per tanggal !

Klik pada salah satu cell range data Pada Menu Data, pilih Pivot Table and Pivot Chart Report, dan selanjutnya akan muncul Pivot Table Wizard.

Indoprog

42

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Klik pada Next

Isikan range data, kalau sudah benar klik Next

Klik pada Layout

Indoprog

43

Analisa dan Pengolahan Data dengan Excel

Oleh : Hendra, ST.

Klik pada Ok, dan Klik pada Finish, dan selanjutnya akan ditampilkan Pivot Table pada suatu Sheet baru.

Indoprog

44

Bahasa pemrograman VB.NET

Hendra, S.T.

Bahasa Pemrograman VB.Net


Oleh : Hendra, ST.

Buku ini membahas tentang bahasa pemrograman Visual Basic .Net, dan ditujukan kepada siapa saja yang serius untuk mempelajari bahasa pemrograman VB.Net. Untuk memfokuskan pada bahasa VB.Net, buku ini akan menggunakan pendekatan program Console, sehingga fokus pembelajaran lebih terfokus kepada bahasa itu sendiri. Untuk mempelajari buku ini anda tidak perlu menginstalasi Visual Studio .Net, tetapi anda cukup menginstalasi .Net Framework yang dapat didownload secara gratis dari website Microsoft. Semua contoh dan latihan dibuku ini dapat dikompilasi langsung dari Dos prompt dengan menggunakan kompiler Visual Basic yang langsung tersedia setelah anda menginstalasi .Net Framework.

INDOPROG

Bahasa pemrograman VB.NET

Hendra, S.T.

Dasar program Visual Basic


Program VB.NET anda yang pertama.
Sebagaimana tradisi dari proses belajar pemrograman komputer adalah membuat sebuah program Hello World yang memiliki struktur yang paling sederhana sehingga kita dengan mudah dapat melihat struktur dasar program dari bahasa pemrograman tersebut.
Module Hello Sub Main() System.Console.WriteLine("Hello World !") End Sub End Module

Ketiklah program diatas dengan text editor (notepad pada Windows ataupun edit pada Dos Prompt), dan kemudian simpan dengan nama hello.vb (anda wajib menyimpannya dengan ekstension .vb).

Proses Kompilasi
Agar program yang kita buat diatas dapat dijalankan oleh komputer, maka diperlukan suatu kompiler untuk menterjemahkan perintah-perintah yang telah kita buat menjadi instruksi yang dapat dikenali oleh sistem komputer. Kompiler Visual Basic dapat diperoleh dengan melakukan instalasi Microsoft .NET framework sdk v1.1. Sesaat setelah instalasi .NET framework, maka kompiler VB telah tersedia pada komputer anda, dan proses kompilasi dapat dilakukan dengan : 1. Mengatur path environment pada Command Prompt path=%path%;c:\windows\microsoft.net\framework\v1.1.4322 2. Selanjutnya anda dapat mengkompilasi program anda dengan perintah : Vbc <nama file>.vb Pada saat kompilasi, anda wajib menulis lengkap nama file dan ekstension Contoh :
vbc hello.vb Microsoft (R) Visual Basic .NET Compiler version 7.10.3052.4

INDOPROG

Bahasa pemrograman VB.NET

Hendra, S.T.

for Microsoft (R) .NET Framework version 1.1.4322.573 Copyright (C) Microsoft Corporation 1987-2002. All rights reserved.

Jika proses kompilasi tidak menampilkan adanya kesalahan, maka akan terbentuk suatu hello.exe yang dapat dijalankan langsung pada Command Prompt. Sesuatu hal yang perlu anda pahami adalah file hello.exe hanya dapat dijalankan pada komputer yang sudah terinstalasi Microsoft .NET framework. Kemudian suatu hal yang perlu anda ketahui adalah file hello.exe bukanlah berisi binari yang merupakan kode mesin, melainkan merupakan binari yang berisi Intermediate Language (IL) yang pada saat dijalankan akan dikompilasi menjadi bahasa mesin oleh kompiler Just In Time (JIT) yang terdapat pada Common Language Runtime (CLR) yang merupakan salah satu komponen dari .NET framework.

Struktur program Visual Basic


Sebagai bahasa yang telah dirancang kembali dari awal, suatu program Visual Basic memiliki urutan berikut yang merupakan struktur dari program: 1. Option statements 2. Imports statements 3. Main procedure

Option Statements
Perintah Option akan menentukan aturan dasar penanganan kode dalam program pada saat kompilasi. Option Explicit Option Explicit On/Off, menentukan apakah variabel-varibel yang digunakan dalam program harus dideklarasikan terlebih dahulu atau tidak (defaultnya adalah On). Contoh :
Option Explicit Off Module Modmain Sub Main() a = 100000 End Sub End Module

Yang jika di kompilasi tidak menyebabkan kesalahan walaupun variabel a tidak pernah dideklarasikan.
Option Explicit On

INDOPROG

Bahasa pemrograman VB.NET

Hendra, S.T.

Module Modmain Sub Main() a = 100000 End Sub End Module

Yang jika dikompilasi akan menyebabkan kesalahan sebagai berikut :


Microsoft (R) Visual Basic .NET Compiler version 7.10.3052.4 for Microsoft (R) .NET Framework version 1.1.4322.573 Copyright (C) Microsoft Corporation 1987-2002. All rights reserved. D:\BELAJA~1\coba.vb(5) : error BC30451: Name 'a' is not declared. a = 100000

Agar terhindar dari kesalahan maka variabel a harus dideklarasikan terlebih dahulu sesuai dengan setting Option Explicit On.
Option Explicit On Module Modmain Sub Main() Dim a As Integer a = 100000 End Sub End Module

Option Strict Option Strict On/Off, menentukan apakah kompiler memperbolehkan konversi nilai implicit yang berpotensi menyebabkan kehilangan data (default adalah Off), misalnya kita memasukan nilai dari suatu variabel dengan tipe data yang lebih lebar ke variabel dengan tipe data yang lebih sempit (lihat pada kolom nominal storage allocation pada tabel tipe data). Contoh :
Option Option Module Sub Explicit On Strict On Hello Main() Dim a As Integer Dim b As Short a = 100000 b = a End Sub End Module

INDOPROG

Bahasa pemrograman VB.NET

Hendra, S.T.

Yang jika dikompilasi akan menyebabkan pesan kesalahan berikut ini karena variabel b yang bertipe short (16 bit), tidak dimungkinkan menampung nilai dari tipe integer (32 bit), yang memiliki potensi kehilangan data pada saat runtime, sehingga pemakaian Option Strict On akan menampilkan pesan kesalahan pada saat kompilasi.
Microsoft (R) Visual Basic .NET Compiler version 7.10.3052.4 for Microsoft (R) .NET Framework version 1.1.4322.573 Copyright (C) Microsoft Corporation 1987-2002. All rights reserved. D:\BELAJA~1\coba.vb(8) : error BC30512: Option Strict On disallows implicit conversions from 'Integer' to 'Short'. b = a ~

Sebaliknya jika digunakan Option Strict Off:


Option Option Module Sub Explicit On Strict Off Hello Main() Dim a As Integer Dim b As Short a = 100000 b = a End Sub End Module

Maka pada saat kompilasi tidak terjadi kesalahan, tetapi pada saat runtime akan menimbulkan runtime error (System.OverflowException), karena variabel a yang bertipe short hanya memiliki jangkauan daya tampung dari -32767 s/d 32768.

INDOPROG

Bahasa pemrograman VB.NET

Hendra, S.T.

Option Compare Perintah Option Compare Binary/Text akan menentukan bagaimana bertipe data string akan dibandingkan antara satu dengan lainnya (default adalah Binary). Adapun aturan perbandingan pada masing-masing setting adalah sebagai berikut : Pada Option Compare Binary : A < B < E < Z < a < b < e < z < < < < < < Pada Option Compare Text : (A=a) < (= ) < (B=b) < (E=e) < (= ) < ( = ) < (Z=z)

Contoh :
Option Compare Binary Module Hello Sub Main() Dim a,b As String a = "ABC" b = "abc" System.Console.WriteLine(a = b) End Sub End Module

'False

Yang jika dijalankan akan menghasilkan False, karena perbandingan data berdasarkan nilai biner dari masing-masing data string (lihat aturan untuk Binary).

INDOPROG

Bahasa pemrograman VB.NET

Hendra, S.T.

Tetapi jika :
Option Compare Text Module Hello Sub Main() Dim a,b As String a = "ABC" b = "abc" System.Console.WriteLine(a = b) End Sub End Module

'True

Yang jika dijalankan akan menghasikan True, karena sebagai text-nya "ABC" dianggap sama dengan "abc" tanpa melihat huruf besar atau kecil (lihat aturan untuk Text).

Imports Statements
Perintah Imports berfungsi memudahkan pengetikan tanpa harus mengetik nama class didalam namespace yang di import. Contoh :
Module Hello Sub Main() System.Console.WriteLine("Hello World !") End Sub End Module

Yang setelah adanya Imports System penulisan Console.WriteLine menjadi sebagai berikut.
Imports System Module Hello Sub Main() Console.WriteLine("Hello World !") End Sub End Module

Dalam hal ini kita tidak perlu lagi mengetik System.Console.WriteLine, tapi cukup Console.WriteLine, karena kita telah melakukan Imports System.

Main Procedure
Procedure Main merupakan titik awal dari program anda merupakan procedure yang pertama kali dieksekusi ketika anda menjalankan kode anda. Jadi apa yang ingin anda jalankan pertama kali pada program anda ditempatkan pada procedure main ini. Ada empat cara penulisan Main, yaitu sebagai Sub atau Function yang memiliki parameter atau tidak.

INDOPROG

Bahasa pemrograman VB.NET

Hendra, S.T.

Sub Main() Sub Main(ByVal CmdArgs() As String) Function Main() As Integer Function Main(ByVal CmdArgs() As String) As Integer

Bentuk procedure yang paling sering digunakan adalah Sub Main( ) seperti pada contoh yang sudah-sudah. Contoh Sub Main dengan parameter :
Imports System Module Hello Sub Main(ByVal CmdArgs() As String) Dim i As Integer Console.WriteLine("Jumlah Parameter :" & CmdArgs.Length()) For i = 0 to CmdArgs.Length()-1 Console.WriteLine("Parameter :" & i.ToString() & "adalah :" & CmdArgs(i)) Next End Sub End Module

Yang kalau dieksekusi dengan


Coba Hello World Jumlah Parameter :2 Parameter :0 adalah :Hello Parameter :1 adalah :World

Dalam hal ini kita menjalankan program Coba.exe pada command prompt dengan mengirim dua parameter yaitu kata Hello dan World yang dianggap sebagai array bertipe string. Catatan : Index Array dimulai dari 0, sehingga pada contoh diatas looping dimulai dari 0 s/d CmdArgs.Length()-1. Program yang menggunakan parameter jarang digunakan pada lingkungan Windows, dan sering digunakan pada program di lingkungan Console.

Pemberian komentar
Jika kita hari ini membuat program, dan pada saat yang sama semua logika serta rumusan dapat kita ingat dengan baik, tetapi bagaimana kalau kita membaca kembali program yang pernah kita buat untuk 3 bulan yang lalu, apakah anda masih mengingatnya ? Bagaimana kita membuat program kita mudah di pahami kembali ? Tentu saja dengan memberikan keterangan secukupnya.

INDOPROG

Bahasa pemrograman VB.NET

Hendra, S.T.

Pada Visual Basic pembuatan keterangan dapat menggunakan simbol ' (petik tunggal) maupun keyword REM. Contoh : ' Ini adalah keterangan REM Ini adalah keterangan

Type Data
Sebagaimana bahasa pemrograman lainnya, Visual Basic menyediakan berbagai type data yang dapat digunakan oleh pemrogram sesuai dengan konteks pemakaiannya. Type data pada Visual Basic dibagi atas dua kelompok besar yaitu Value Type (Tipe data primitif) dan Reference (String, Array dan Objek). Berikut ini adalah tabel tipe data pada VB disertai dengan alokasi storage yang dibutuhkan serta jangkauan nilai yang dapat ditampung oleh masing-masing tipe.
Visual Basic type Boolean Byte Char Date Decimal Common language runtime type structure System.Boolean System.Byte System.Char System.DateTime System.Decimal Nominal storage allocation 2 bytes 1 byte 2 bytes 8 bytes 16 bytes True or False. 0 through 255 (unsigned). 0 through 65535 (unsigned). 0:00:00 on January 1, 0001 through 11:59:59 PM on December 31, 9999. 0 through +/79,228,162,514,264,337,593,543,950,335 with no decimal point; 0 through +/7.9228162514264337593543950335 with 28 places to the right of the decimal; smallest nonzero number is +/-0.0000000000000000000000000001 (+/1E-28). -1.79769313486231570E+308 through -4.94065645841246544E-324 for negative values; 4.94065645841246544E-324 through 1.79769313486231570E+308 for positive values. -2,147,483,648 through 2,147,483,647. -9,223,372,036,854,775,808 through 9,223,372,036,854,775,807. Any type can be stored in a variable of type Object. -32,768 through 32,767. -3.4028235E+38 through -1.401298E-45 for negative values; 1.401298E-45 through 3.4028235E+38 for positive values. 0 to approximately 2 billion Unicode characters. Value range

Double System.Double (doubleprecision floating-point) Integer System.Int32

8 bytes

4 bytes 8 bytes 4 bytes 2 bytes 4 bytes

Long System.Int64 (long integer) Object Short System.Object (class) System.Int16

Single System.Single (singleprecision floating-point) String (variablelength) UserDefined Type System.String (class)

Depends on implementing platform Depends on implementing platform

(inherits from System.ValueType)

Each member of the structure has a range determined by its data type and independent of the ranges of the other members.

INDOPROG

Bahasa pemrograman VB.NET

Hendra, S.T.

(structure)

Walaupun dewasa ini, memori dan media penyimpanan data tidak menjadi masalah seperti pada awal kelahiran komputer, tetapi hendaklah programmer bijaksana dalam pemakaian type data berkaitan dengan perfomance yang dihasilkan.

Deklarasi Variabel
Pemrogram yang baik tentu saja menggunakan pendekatan yang terstruktur dalam pengembangan program, salah satu ciri dari program yang terstruktur adalah mendeklarasikan semua variabel yang digunakan dalam program. Pada Visual Basic printah Dim digunakan untuk mendeklarasikan variabel dan memberikan nilai awal kepadanya. Contoh :
Dim Dim Dim Dim Harga, Jumlah As Single Kuantitas As Integer = 10 Lanjutkan As Boolean = True Keterangan As String = "Visual Studio .NET"

Catatan : Pada Visual Basic pemakaian variabel harus dideklarasikan terlebih dahulu, jika tidak anda akan mendapatkan kesalahan kompiler, karena default setting Explicit pada Visual Basic adalah Option Explicit On. Kemudian Jika anda tidak memberikan nilai awal pada suatu variabel pada dideklarasikan, maka nilai berikut akan diberikan sebagai nilai awal variabel tersebut :

0 untuk semua tipe data numerik (termasuk Byte). Binary 0 untuk Char. Nothing untuk semua tipe reference (termasuk Object, String, dan semua array). False untuk Boolean. 12:00 AM pada 1 Januari 1 untuk Date.

Sesuatu hal yang perlu anda perhatikan adalah daya tampung variabel berdasarkan tipe yang ditentukan, jika anda memasukan nilai diluar dari daya tampung variabel, suatu kesalahan overflow exception akan terjadi.

Konversi Tipe
Konversi Tipe pada Visual Basic dapat dilakukan secara Implicit maupun Explicit, konversi secara Implicit dilakukan tanpa menggunakan fungsi bantu casting tertentu seperti Cbool, Cbyte, Cchar, Cdate, Cdec, CDbl, Cint, CLng, Cobj, Cshort, CSng, CStr. INDOPROG

10

Bahasa pemrograman VB.NET

Hendra, S.T.

Contoh :
Module Test Sub Main() Dim intValue As Integer = 123 Dim longValue As Long = intValue Console.WriteLine(intValue & " = " & longValue) End Sub End Module

Sedangkan secara Explicit dilakukan dengan menggunakan fungsi bantu casting.


Module Test Sub Main() Dim longValue As Long = 134 Dim intValue As Integer = CInt(longValue) Console.WriteLine(longValue & " = " & intValue) End Sub End Module

Pada konversi secara Implicit, setting Option Strict akan mempengaruhi apakah konversi dari tipe yang lebih lebar ke tipe yang lebih sempit (Misalnya dari Integer 32 bit ke Short 16 bit) diperbolehkan oleh kompiler atau tidak. Contoh berikut akan melakukan konversi dari Integer 32 bit ke Short 16 bit.
Option Strict On Option Explicit On Imports System Public Module ModKali Sub Main() Dim i, j As Byte Dim a As Integer = 40000 Dim b As Short b = a Console.WriteLine(b) End Sub End Module

Yang kalau dikompilasi akan menghasilkan error sebagai berikut


Microsoft (R) Visual Basic .NET Compiler version 7.10.3052.4 for Microsoft (R) .NET Framework version 1.1.4322.573 Copyright (C) Microsoft Corporation 1987-2002. All rights reserved. D:\BELAJA~1\kali.vb(10) : error BC30512: Option Strict On disallows

INDOPROG

11

Bahasa pemrograman VB.NET


implicit conversions from 'Integer' to 'Short'. b = a

Hendra, S.T.

~ Hal tersebut dapat diperbaiki dengan menggunakan fungsi ToInt16 yang terdapat pada System.Convert yang artinya konversi memang dikehendaki oleh programmer Contoh :
Option Strict On Option Explicit On Imports System Public Module ModKali Sub Main() Dim i, j As Byte Dim a As Integer = 40000 Dim b As Short b = System.Convert.ToInt16(a) Console.WriteLine(b) End Sub End Module

Tetapi karena nilai 40000 tidak dapat ditampung oleh type data short, maka akan menghasilkan error pada saat runtime : System.OverflowException. Konversi data secara Explicit dapat juga memanfaatkan fungsi bantu casting yang terdapat pada Objek System Convert sebagai berikut :
Function
ToBoolean ToByte ToChar ToDateTime ToDecimal ToDouble ToInt16 ToInt32 ToInt64 ToSByte ToSingle ToString ToUInt16 ToUInt32 ToUInt64

Purpose
Converts a value to a Boolean (True or False). Converts a value to an 8-bit Byte in the range 0 to 255. Converts a value to a 2-byte Unicode character. Converts a value to a DateTime object. Converts a value to a 12-byte Decimal. Converts a value to an 8-byte Double. Converts a value to a 2-byte Short. Converts a value to a 4-byte Integer. Converts a value to an 8-byte Integer. Converts a value to an 8-bit signed value in the range 128 to 127. Converts a value to a 4-byte Single. Converts a value to its String representation. Converts a value to a 2-byte unsigned Short in the range 0 to 65,535. Converts a value to a 4-byte unsigned Integer in the range 0 to 4,294,967,295. Converts a value to an 8-byte unsigned long Integer in the range 0 to 18,446,744,073,709,551,615.

Catatan : Berdasarkan uji coba yang dilakukan fungsi bantu konversi tipe seperti Cint, Cdate, CSng,CDbl, Cdec dan kadang-kadang fungsi bantu konversi memiliki unjuk kerja yang lebih baik seperti yang ditunjukan oleh tabel berikut ini adalah hasil konversi dengan Integer.Pars, Convert.ToInt32, dibandingkan dengan CInt INDOPROG

12

Bahasa pemrograman VB.NET

Hendra, S.T.

String "12,500" "12" "12500" "12500.00" "$12,500.00" "$12,500.10" "&HFF" Error 12 12500 Error Error Error

Integer.Parse

Convert.ToInt32 Error 12 12500 Error Error Error Error

Cint 12500 12 12500 12500 12500 12500 Error

(VB syntax for the hex value FF) 255

Operator
Berdasarkan pengalaman pemrograman, pemakaian operator tidak dapat dilepaskan dari pekerjaan pemrograman, adapun operator pada Visual Basic adalah sebagai berikut : Operator aritmatika : *, /, \, ^, Mod, +, dan Operator relasi : =, <>, <, >, <=, and >= Catatan : Pada tipe data string, prilaku perbandingan sangat dipengaruhi oleh setting dari Option Compare. (default adalah Option Compare Binary) Pada Option Compare Binary : A < B < E < Z < a < b < e < z < < < < < < Pada Option Compare Text : (A=a) < (= ) < (B=b) < (E=e) < (= ) < ( = ) < (Z=z) Operator logika And, AndAlso, Or, OrElse, and Xor Catatan :

Jika operand pertama pada suatu operasi AndAlso adalah False, maka hasil ekspresi tersebut adalah False. Sebaliknya, suatu operasi logika And dilakukan terhadap kedua operand. Jika operand pertama dari operasi OrElse adalah True, maka hasil ekspresi adalah True. Sebaliknya, suatu operasi logika Or akan dilakukan terhadap kedua operand.

Operator pengabungan : & Operator bit shift : << dan >> Contoh :
Dim Pattern As Short = 192 ' Bit pattern is 0000 0000 1100 0000. Dim Result1, Result2, Result3, Result4, Result5 As Short

INDOPROG

13

Bahasa pemrograman VB.NET


Result1 Result2 Result3 Result4 Result5 = = = = = Pattern Pattern Pattern Pattern Pattern << << << << << 0 4 9 17 -1 ' ' ' ' ' Result Result Result Result Result is is is is is 192 (0000 0000 1100 0000). 3072 (0000 1100 0000 0000). -32768 (1000 0000 0000 0000). 384 (0000 0001 1000 0000). 0 (shifted 15 places to left).

Hendra, S.T.

Dim Pattern As Short = 2560 ' Bit pattern is 0000 1010 0000 0000. Dim Result1, Result2, Result3, Result4, Result5 As Short Result1 = Pattern >> 0 ' Result is 2560 (0000 1010 0000 0000). Result2 = Pattern >> 4 ' Result is 160 (0000 0000 1010 0000). Result3 = Pattern >> 10 ' Result is 2 (0000 0000 0000 0010). Result4 = Pattern >> 18 ' Result is 640 (0000 0010 1000 0000). Result5 = Pattern >> -1 ' Result is 0 (shifted 15 places to right).

Operator bit shift bekerja pada tingkat bit, yang artinya jika 192 pada tipe data short (desimal/basis sepuluh) maka representasinya dalam bentuk biner adalah 0000 0000 1100 0000 (16 bit). Kemudian hal lain yang perlu diketahui adalah bit mask untuk masing-masing tipe data adalah berbeda, berikut ini adalah tabel bitmask : LeftOperand Type SizeMask 7 (&H7) Byte 15 (&HF) Short 31 (&H1F) Integer 63 (&H3F) Long Perhatikan kembali contoh diatas
Dim Pattern As Short = 2560 ' Bit pattern is 0000 1010 0000 0000.

Perintah shift right 18 untuk tipe Short akan menghasilkan operasi yang sama dengan shift right 2 ( hasil operasi 18 And 15 = 2).
Result4 = Pattern >> 18 ' Result is 640 (0000 0010 1000 0000).

Operator perbandingan Like, dengan aturan sebagai berikut :


Karakter ? mewakili satu karakter sembarang. Karakter * mewakili tidak ada karakter atau sekumpulan karakter sembarang. Karakter # mewakili satu sembarang digit (09). Suatu daftar karakter dalam kurung siku ([ab ]) mewakili salah satu karakter dalam daftar tersebut. Suatu daftar dari karakter dalam kurung siku dan diawali dengan suatu tanda ! ([!ab ]) mewakili satu karakter yang tidak ada dalam daftar tersebut.

Contoh :
Dim myCheck As Boolean myCheck = "F" Like "F" myCheck = "F" Like "f" myCheck = "F" Like "FFF" Does "F" match "F"? Returns True. Does "F" match "f"? Returns False. Does "F" match "FFF"? Returns False.

INDOPROG

14

Bahasa pemrograman VB.NET

Hendra, S.T.

myCheck = "aBBBa" Like "a*a"

myCheck = "F" Like "[A-Z]" myCheck = "F" Like "[!A-Z]" myCheck = "a2a" Like "a#a" myCheck = "aM5b" Like "a[L-P]#[!c-e]"

myCheck = "BAT123khg" Like "B?T*"

myCheck = "CAT123khg" Like "B?T*"

Does "aBBBa" have a "a" at the beginning, an "a" at the end, and any number of characters in between? Returns True. Does "F" occur in the set of characters from A to Z? Returns True. Does "F" NOT occur in the set of characters from A to Z? Returns False. Does "a2a" begin and end with an "a" and have any single-digit number inbetween? Returns True. Does "aM5b" fit the following pattern: Begins with "a", has and character from the set L through P, followed byb any single-digit number, and finally contains any character excluded from the character set c through e. Returns True. Does "BAT123khg" fit the following pattern: Begins with "B", followed by any single character, followed by a "T" and finally zero or more characters of any type. Returns True Does "CAT123khg" fit the following pattern: Begins with "B", followed by any single character, followed by a "T" and finally zero or more characters of any type. Returns False.

Operator assignment : =, ^=, *=, /=, \=, +=, -=, <<=, >>=, &= Contoh : Dim a As Integer = 2 Dim b As Integer = 3 a += b // akan menghasilkan 5 pada variabel a, atau sama dengan a = a+b Catatan : Sesuatu hal yang penting bagi programmer pemula adalah memahami urutan operasi dari operator, pada Visual Basic menggunakan urutan operasi berikut ini : Operator Aritmatika dan Pengabungan Exponentiation (^) Unary negation () Multiplication and division (*, /) Integer division (\) Modulus arithmetic (Mod) Addition and subtraction (+, ), string concatenation (+) String concatenation (&) Arithmetic bit shift (<<, >>) Operator Perbandingan All comparison operators (=, <>, <, <=, >, >=, Like, Is, TypeOf...Is) Operator Logika dan Bitwise Negation (Not) Conjunction (And, AndAlso) Disjunction (Or, OrElse, Xor)

INDOPROG

15

Bahasa pemrograman VB.NET

Hendra, S.T.

Contoh :
Dim A, B, C, D, E, F, G As Double A = 3.0 B = 6.0 C = 4.0 D = 2.0 E = 1.0 F = A + B - C / D * E ' The previous line sets F to 7.0. Because of natural operator ' precedence, it is exactly equivalent to the following line: F = (A + B) - ((C / D) * E) ' The following line overrides the natural operator precedence: G = A + (B - C) / (D * E) ' The previous line sets G to 4.0.

Dengan memahami urutan operasi akan sangat membantu untuk menghindari kesalahan dalam penulisan rumus yang dapat menyebabkan logika error.

Konstanta pada VB.NET


Pemakaian konstanta sangat membantu dalam pengembangan program yang terstruktur, dengan adanya konstanta, pemeliharaan program menjadi lebih sederhana, dan biasanya konstanta dideklarasikan pada awal program, sehingga jika terjadi perubahan besaran pada konstanta, kita cukup mengubahnya pada awal program tanpa harus memeriksa koding seperti yang harus dilakukan kalau kita tidak menggunakan fasilitas konstanta. Const GRAVITASI As Single = 9.8 Catatan : Sebaiknya konstanta diketik semuanya huruf besar untuk memudahkan pembedaan antara variabel dengan konstanta, dan penamaan konstanta hendaknya disesuaikan dengan konteks yang diwakili oleh konstanta tersebut.

Enumerated pada VB.NET


Pemakaian enumerated type akan sangat membantu dalam pekerjaan pemrograman sehingga menjadi lebih mudah ditulis, dibaca, dan dimaintain dari pada menggunakan tipe data primitif. Public Enum InterfaceColors MistyRose = &HE1E4FF& SlateGray = &H908070& DodgerBlue = &HFF901E& DeepSkyBlue = &HFFBF00& SpringGreen = &H7FFF00& ForestGreen = &H228B22& Goldenrod = &H20A5DA&

INDOPROG

16

Bahasa pemrograman VB.NET

Hendra, S.T.

Firebrick = &H2222B2& End Enum

Perintah input Output Console


Salah satu bentuk program yang dapat dikembangkan dengan menggunakan Visual Basic adalah program Console. Program Console adalah program yang menggunakan basis teks pada lingkungan Command Prompt (bentuk ini tidak tersedia pada Visual Basic versi sebelumnya). Program Console adalah salah satu fasilitas yang sangat memudahkan bagi pemula yang ingin mempelajari bahasa Visual Basic dengan baik, karena program Console menggunakan perintah I/O yang cukup sederhana dan bersih dari perintah input output yang rumit sehingga kita dapat lebih terfokus. System.Console.Write(ekspresi) System.Console.WriteLine(ekspresi) Variabel = System.Console.ReadLine() Jika anda melakukan imports namespace system, maka penulisan dapat disingkat menjadi Console.Write(ekspresi) Console.WriteLine(ekspresi) Variabel = Console.ReadLine() Catatan : Perbedaan antara Write dengan WriteLine adalah pada WriteLine pencetakan akan diakhiri dengan suatu Carriage Return.

Format pada WriteLine


Visual Basic telah melengkapi berbagai fasilitas format yang sangat berguna untuk melakukan pencetakan data, terutama data type numerik yang kadang-kadang perlu diformat sedemikian rupa untuk memudahkan pembacaan. Format pencetakan pada WriteLine dapat menggunakan place holder {x}, dimana x adalah nomor urutan dari parameter berikutnya yang dihitung mulai dari 0 (nol).. Contoh :
Console.WriteLine("The Console.WriteLine("The Console.WriteLine("See Console.WriteLine("See Console.WriteLine("The Console.WriteLine("The number is {0}", 3 + 7) result of {0} + {1} = {2}", 3, 7, 3+7) decimals {0, 12:f1}", 0.123456789) decimals {0, 12:f9}", 0.123456789) value is {0, 0:000.00}", 0.123456789) value is {0, 0:###.##}", 1234.56789)

INDOPROG

17

Bahasa pemrograman VB.NET

Hendra, S.T.

Masing-masing akan menghasilkan The The See See The The number is 10 result of 3 + 7 = 10 decimal 0.1 decimal 0.123456789 value is 001.23 value is 1234.57

Contoh Format String :


Format C C D D8 E E10 E e4 F F F0 F6 G G7 G G G2 G N N N4 P r x X X8 x Culture en-US de-DE en-US en-US en-US en-US fr-FR en-US en-US es-ES en-US en-US en-US en-US en-US en-US en-US en-US en-US sv-SE en-US en-US en-US en-US en-US en-US en-US Data type Double Double Int32 Int32 Double Double Double Double Double Double Double Double Double Double Double Double Double Double Double Double Double Double Double Int32 Int32 Int32 Int32 Value 12345.6789 12345.678 12345 12345 12345.6789 12345.6789 12345.6789 12345.6789 12345.6789 12345.6789 12345.6789 12345.6789 12345.6789 12345.6789 0.0000023 0.0023 1234 Math.PI 12345.6789 12345.6789 123456789 .126 Math.PI 0x2c45e 0x2c45e 0x2c45e 123456789 Output $12,345.68 12.345,68 DM 12345 00012345 1.234568E+004 1.2345678900E+004 1,234568E+004 1.2346e+004 12345.68 12345,68 123456 12345.678900 12345.6789 12345.68 2.3E-6 0.0023 1.2E3 3.14159265358979 12,345.68 12 345,68 123,456,789.0000 12.60 % 3.141592653589793 2c45e 2C45E 0002C45E 75bcd15

Latihan :
1. Buatlah program untuk menghitung luas persegi panjang. Jawab :
Option Explicit On Public Module modmain Sub Main() Dim Panjang As System.Int32 Dim Lebar As System.Int32 Dim Luas As System.Int64 System.Console.Write("Masukkan Panjang :")

INDOPROG

18

Bahasa pemrograman VB.NET


Panjang = System.Console.ReadLine() System.Console.Write("Masukan Lebar :") Lebar = System.Console.ReadLine() Luas = Panjang*Lebar System.Console.WriteLine("Luas Persegi Panjang adalah :" & Luas.ToString()) End Sub End Module

Hendra, S.T.

atau
Option Explicit On Imports System Public Module modmain Sub Main() Dim Panjang As Integer Dim Lebar As Integer Dim Luas As Long Console.Write("Masukkan Panjang :") Panjang = Console.ReadLine() Console.Write("Masukan Lebar :") Lebar = Console.ReadLine() Luas = Panjang*Lebar Console.WriteLine("Luas Persegi Panjang adalah :" & Luas.ToString()) End Sub End Module

Simpan dengan nama file persegi.vb


Set path=%path%;c:\windows\microsoft.net\framework\v1.1.4322 VBC persegi.vb Microsoft (R) Visual Basic .NET Compiler version 7.10.3052.4 for Microsoft (R) .NET Framework version 1.1.4322.573 Copyright (C) Microsoft Corporation 1987-2002. All rights reserved. Persegi

2. Buatlah program untuk menghitung luas lingkaran dengan pemakaian konstanta.


Option Explicit On Imports System Public Module lingkaran Const PI As Single = 3.14 Sub Main() Dim R As Single Dim Luas As Double

INDOPROG

19

Bahasa pemrograman VB.NET

Hendra, S.T.

Console.Write("Masukkan Jari-jari :") R = Console.ReadLine() Luas = PI * R^2 Console.WriteLine("Luas : {0, 10:f2}",Luas)'10 tempat 2 desimal End Sub End Module

INDOPROG

20

Bahasa pemrograman VB.NET

Hendra, S.T.

Struktur Keputusan dan Perulangan


Perintah If...Then...Else
Salah satu tujuan pemrograman komputer adalah mengambil tugas rutin manusia untuk dalam mengambil keputusan-keputusan yang dapat diprogram. Misalnya seorang Dosen dalam menentukan Grade (A,B,C,D, atau E) nilai akhir mahasiswa dengan kondisi sebagai berikut : Jika Nilai >= 85 Kemudian Cetak "A" Jika tidak dan Jika Nilai >= 70 Kemudian Cetak "B" Jika tidak dan Jika Nilai >= 60 Kemudian Cetak "C" Jika tidak dan Jika Nilai >= 25 Kemudian Cetak "D" Jika tidak Cetak "E" Akhir dari keputusan Logika keputusan diatas dapat diprogram pada Visual Basic dengan menggunakan syntax penulisan sebagai berikut :
If condition [ Then ] [ statements ] [ ElseIf elseifcondition [ Then ] [ elseifstatements ] ] [ Else [ elsestatements ] ] End If

Contoh :
Option Explicit On Imports System Module ModIf Sub Main() Dim Nilai As Single Console.Write("Masukkan Nilai Akhir :") Nilai = Console.ReadLine() If Nilai >= 85 Then Console.WriteLine("A") ElseIf Nilai >= 70 Then Console.WriteLine("B") ElseIf Nilai >= 60 Then Console.WriteLine("C") ElseIf Nilai >= 25 Then Console.WriteLine("D")

INDOPROG

21

Bahasa pemrograman VB.NET


Else Console.WriteLine("E") End If End Sub End Module

Hendra, S.T.

Perintah Select...Case
Jika statement If melakukan pemilihan berdasarkan kondisi, maka perintah Select melakukan pemilihan berdasarkan nilai ekspresi dengan syntax sebagai berikut :
Select [ Case ] testexpression [ Case expressionlist [ statements ] ] [ Case Else [ elsestatements ] ] End Select

Contoh :
Option Explicit On Imports System Module ModHari Sub Main() Dim Hari As Byte Console.Write("Masukkan No Hari :") Hari = Console.ReadLine() Select Case Hari Case 1 Console.WriteLine("Senin") Case 2 Console.WriteLine("Selasa") Case 3 Console.WriteLine("Rabu") Case 4 Console.WriteLine("Kamis") Case 5 Console.WriteLine("Jumat") Case 6 Console.WriteLine("Sabtu") Case 7 Console.WriteLine("Minggu") Case Else Console.WriteLine("No Hari tidak sah") End Select End Sub End Module

Contoh Lain :
Option Explicit On Imports System Module ModHari Sub Main()

INDOPROG

22

Bahasa pemrograman VB.NET


Dim Angka As Integer Console.Write("Masukkan Angka 1 s/d 9 :") Angka = Console.ReadLine() Select Case Angka Case Is < 1 Console.WriteLine("Terlalu kecil") Case 1 To 5 Console.WriteLine("Berada antara 1 dan 5") Case 6,7,8,9 Console.WriteLine("Berada antara 6 dan 9") Case Else Console.WriteLine("Terlalu besar") End Select End Sub End Module

Hendra, S.T.

Perintah For...Next
Salah satu keunggulan komputer dibandingkan dengan manusia adalah dapat mengerjakan sesuatu secara berulang-ulang tanpa mengalami penurunan kualitas terhadap hasil kerja. Salah satu perintah perulangan di Visual Basic ada ForNext Statements yang merupakan perulangan dengan menggunakan sistem counter dengan menggunakan syntax sebagai berikut :
For counter [ As datatype ] = start To end [ Step step ] [ statements ] [ Exit For ] [ statements ] Next [ counter ]

Contoh : Dim I As Integer For I = 1 To 100 Console.WriteLine(I) Next I Atau For I As Integer = 1 To 100 Console.WriteLine(I) Next I 'Defaultnya Step 1 'Defaultnya Step 1

Akan mencetak daftar bilangan 1 s/d 100 Catatan : Dari segi looping pemakaian : Dim I As Integer INDOPROG

23

Bahasa pemrograman VB.NET

Hendra, S.T.

For I = 1 To 100 Console.WriteLine(I) Next I Tidak berbeda dengan For I As Integer = 1 To 100 Console.WriteLine(I) Next I

'Defaultnya Step 1

'Defaultnya Step 1

Tapi jika ditinjau dari lingkup pemakaian variabel, maka variabel I pada contoh pertama adalah variabel local Sub Main, sedangkan variabel I pada contoh kedua adalah variable local untuk blok looping. Contoh : Dim I As Integer For I = 1 To 100 Console.WriteLine(I) Next I Console.WriteLine(I) Sedangkan For I As Integer = 1 To 100 Console.WriteLine(I) Next I Console.WriteLine(I) 'Defaultnya Step 1 'Terjadi error pada saat kompilasi 'Defaultnya Step 1 'Akan tercetak 101

Dimana pesan error adalah error BC30451: Name I is not declared. Dim I As Integer For I = 1 To 100 Step 2 Console.WriteLine(I) Next I Akan mencetak daftar bilangan ganjil 1 s/d 99 Catatan : Step tidak selamanya harus berupa bilangan bulat, tetapi juga dapat berupa bilangan floating point. For I As Single = 1 To 10 Step 0.1 Console.WriteLine(I) Next I Akan mencetak daftar bilangan 1, 1.1, 1.2, 1.3, ,10

INDOPROG

24

Bahasa pemrograman VB.NET

Hendra, S.T.

Bagaimana dengan perulangan dari besar ke kecil ? Perulangan dari besar ke kecil dapat dilakukan dengan menentukan nilai Step negatif. Contoh : For I As Integer = 100 To 1 Step -1 Console.WriteLine(I) Next I Akan mencetak daftar bilangan 100, 99. 98, , 1 Dapatkah anda menerangkan fungsi dan contoh pemakaian Exit For ? Exit For merupakan perintah keluar dari looping tanpa bersyarat, artinya kalau perintah Exit For ditemukan maka proses program dilanjutkan ke perintah dibawah Next. Adapun contoh pemakaian Exit For adalah misalnya kita ingin membuat password dengan jumlah kesempatan coba sebanyak 3 kali.
Option Explicit On Imports System Module ModPass Sub Main() Dim I As Integer Dim Pass As String For I = 1 To 3 Step 1 Console.Write("Password :") Pass = Console.ReadLine() If Pass.ToUpper() ="INDOPROG" Then 'Jika Password Benar Exit For 'Keluar dari Looping End If Next I If I > 3 Then Console.WriteLine("Proses Login Gagal !") Else Console.WriteLine("Welcome !") End If End Sub End Module

Perintah Do...Loop
Jika perintah For Next melakukan looping berdasarkan counter, maka perintah Do Loop melakukan looping berdasarkan kondisi, adapun tata cara penulisannya adalah sebagai berikut :
Do { While | Until } condition [ statements ] [ Exit Do ] [ statements ]

Loop

INDOPROG

25

Bahasa pemrograman VB.NET

Hendra, S.T.

Atau
Do [ statements ] [ Exit Do ] [ statements ] Loop { While | Until }

condition

Perbedaan antara kedua struktur perulangan diatas adalah posisi pemeriksaan kondisi yang akan diuji, pada struktur yang pertama pengujian kondisi dilakukan sebelum statements dikerjakan, sedangkan pada struktur yang kedua pengujuan dilakukan setelah statement dikerjakan. Sebagaimana dengan Exit For, perintah Exit Do akan mengakhiri Looping tanpa bersyarat, yang artinya jika perintah Exit Do ditemukan, maka proses Looping akan segera dihentikan dan dilanjutkan ke Statement dibawah Loop. Contoh :
Option Explicit On Imports System Module DoLoop Sub Main() Dim Dat() As Integer Dim Jd,DTemp As Integer Jd = 0 Do Console.Write("Data Ke-{0} :", Jd+1) DTemp = Console.ReadLine() If DTemp <> 0 Then ReDim Preserve Dat(Jd) Dat(Jd) = DTemp Jd+=1 End If Loop Until DTemp = 0 'Ulangi sampai Dtemp diisi 0 For I As Integer = 0 To Jd-1 Console.WriteLine("Data Ke-{0} adalah {1}",I+1, Dat(I)) Next I End Sub End Module

Pada contoh diatas, mula-mula kita mendeklarasikan suatu array tanpa diikuti dengan ukuran, kemudian proses akan dilanjutkan dengan pembacaan data ke variabel Dtemp, dab jika nilai Dtemp bukan 0 (nol), maka ukuran array akan dialokasi ulang dengan perintah ReDim Preserve yang akan mempertahankan isi array, dan pembacaan data akan terus diulang sampai Dtemp diisi dengan 0 (nol).

INDOPROG

26

Bahasa pemrograman VB.NET

Hendra, S.T.

Selain struktur DoLoop, juga tersedia perintah perulangan dengan tata cara penulisan sebagai berikut.
While condition [ statements ]

End While Pada prinsipnya struktur While End While sama dengan Do While Loop.

Perintah For Each...Next


Perintah For EachNext digunakan untuk melakukan iterasi berdasarkan collection tertentu, misalnya kita ingin mencetak semua elemen dalam suatu array, penulisan dengan perintah For Each dapat dilakukan sebagai berikut :
For Each element [ As datatype ] In group [ statements ] [ Exit For ] [ statements ]

Next [ element ] Contoh :


Option Explicit On Imports System Module DoLoop Sub Main() Dim Dat() As Integer Dim Jd,DTemp As Integer Jd = 0 Do Console.Write("Data Ke-{0} :", Jd+1) DTemp = Console.ReadLine() If DTemp <> 0 Then ReDim Preserve Dat(Jd) Dat(Jd) = DTemp Jd+=1 End If Loop Until DTemp = 0 For Each Data As Integer In Dat Console.WriteLine("Data pada array {0}", Data) Next End Sub End Module

Array pada Visual Basic merupakan collection pada System.Array, sehingga pemakaian perintah For Each akan mendapatkan elemen 0 s/d element terakhir dari array.

INDOPROG

27

Bahasa pemrograman VB.NET

Hendra, S.T.

Latihan :
1. Buatlah program mencetak tabel perkalian 1x1 = 1 s/d 10 x 10 = 100
Option Explicit On Imports System Public Module ModKali Sub Main() Dim i, j As Byte For i = 1 To 10 For j = 1 to 10 Console.WriteLine("{0,3} x {1,3} = {2,3}",i,j,i*j) Next j Next i End Sub End Module.

2. Buatlah program untuk konversi data desimal ke binary dengan pemakaian operator bit shift
Option Explicit On Imports System Module ModBiner Sub Main() Dim D As Integer Dim I As Short Console.Write("Bilangan Desimal :") D = Console.ReadLine() For I = 15 to 0 Step -1 If ((D >> I) And 1) = 1 Then Console.Write(1) Else Console.Write(0) End If Next End Sub End Module

3. Buatlah program yang menentukan bilangan bulat yang dimasukan pemakai Genap atau Ganjil. 4. Buatlah program yang menentukan tahun yang dimasukan pemakai termasuk tahun Kabisat atau bukan. 5. Buatlah program yang mencetak barisan bilangan fibonacci sesuai dengan jumlah suku yang ditentukan oleh pemakai. 6. Buatlah program yang menentukan bilangan bulat yang dimasukan pemakai Prima atau bukan.

INDOPROG

28

Bahasa pemrograman VB.NET

Hendra, S.T.

7. Buatlah program yang dapat mencetak faktor prima dari suatu bilangan bulat (Contoh 100 = 2 x 2 x 5 x 5)

INDOPROG

29

Bahasa pemrograman VB.NET

Hendra, S.T.

Array pada Visual Basic


Deklarasi variabel Array
Sebagaimana yang telah disinggung pada bagian 1 bahwa tipe data pada Visual Basic terbagai atas dua kelompok yaitu Value Type dan Reference. Suatu array merupakan Reference Type yang mengandung banyak variabel-variabel yang dapat diakses satu persatu sesuai dengan urutannya dalam array, dimana indexnya dimulai dari 0. Variabel-variabel yang terkandung dalam array disebut juga elemen dari array, dan semuanya harus memiliki tipe yang sama. Setiap tipe array mewarisi (inherits) semua member yang dideklarasikan pada System.Array. Pada contoh berikut ini mendeklarasikan suatu array integer berdimensi tunggal, memberi nilai pada masing-masing elemen array, dan mencetak-nya.:
Module Test Sub Main() Dim arr(5) As Integer Dim i As Integer For i = 0 To arr.GetUpperBound(0) arr(i) = i * i Next i For i = 0 To arr.GetUpperBound(0) Console.WriteLine("arr(" & i & ") = " & arr(i)) Next i End Sub End Module

Program diatas akan menghasilkan output:


arr(0) arr(1) arr(2) arr(3) arr(4) = = = = = 0 1 4 9 16

Array dapat juga diberi nilai awal pada saat deklarasi dengan penulisan sebagai berikut:
Private a As Integer() = { 0, 2, 4, 6, 8 }

Atau penulisan yang sama adalah dengan :


Private a As Integer() = new Integer() { 0, 2, 4, 6, 8 }

Pada contoh berikut membuat array dua dimensi 5 x 2 :

INDOPROG

30

Bahasa pemrograman VB.NET

Hendra, S.T.

Private b As Integer(,) = { { 0, 1 }, { 2, 3 }, { 4, 5 }, { 6, 7 }, { 8, 9 } }

Sama dengan deklarasi berikut:


Private b(4, 1) As Integer

Dan diikuti dengan pemberian nilai berikut :


b(0, b(1, b(2, b(3, b(4, 0) 0) 0) 0) 0) = = = = = 0 2 4 6 8 : : : : : b(0, b(1, b(2, b(3, b(4, 1) 1) 1) 1) 1) = = = = = 1 3 5 7 9

Member pada Class Array


Setiap array pada Visual Basic mewarisi member yang terdefinisi pada Class Array, adapun beberapa member tersebut adalah sebagai berikut ini :
Length LongLength Rank Mendapatkan jumlah elemen dalam Array (Integer 32-bit) Mendapatkan jumlah elemen dalam Array (Integer 64-bit) Mendapatkan jumlah dimensi dalam Array

Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module ModArr Public Arr(3,3) As Integer Sub Main() Console.WriteLine(Arr.Length()) Console.WriteLine(Arr.LongLength()) Console.WriteLine(Arr.Rank()) End Sub End Module

'16 '16 '2

GetLength GetLongLength

Mendapatkan jumlah elemen dalam Array pada dimensi tertentu (Integer 32-bit) Mendapatkan jumlah elemen dalam Array pada dimensi tertentu (Integer 64-bit)

Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module ModArr

INDOPROG

31

Bahasa pemrograman VB.NET


Public Arr(3,3) As Integer Sub Main() Console.WriteLine(Arr.GetLength(0)) Console.WriteLine(Arr.GetLongLength(0)) End Sub End Module

Hendra, S.T.

'4 '4

GetLowerBound GetUpperBound

Mendapatkan nilai index batas bawah Array pada dimensi tertentu. Mendapatkan nilai index batas atas Array pada dimensi tertentu.

Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module ModArr Public Arr(3,3) As Integer Sub Main() Console.WriteLine(Arr.GetLowerBound(0)) Console.WriteLine(Arr.GetUpperBound(0)) End Sub End Module IndexOf LastIndexOf Mendapatkan index paling awal dari nilai tertentu pada Array 1 dimensi. Mendapatkan index paling akhir dari nilai tertentu pada Array 1 dimensi.

'0 '3

Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module ModArr Public Arr() As Integer = {0,1,2,3,4,3,2,1,0} Sub Main() Console.WriteLine(Array.IndexOf(Arr,3)) Console.WriteLine(Array.LastIndexOf(Arr,3)) End Sub End Module Reverse Membalik urutan element dalam suatu Array 1 dimensi.

'3 '5

Option Explicit On

INDOPROG

32

Bahasa pemrograman VB.NET


Imports System Imports Microsoft.VisualBasic Public Module ModArr Public Arr() As Integer = {0,1,2,3,4}

Hendra, S.T.

Sub Main() Dim I As Integer For I = Arr.GetLowerBound(0) To Arr.GetUpperBound(0) Console.Write(Arr(I)) '01234 Next I Console.WriteLine() Array.Reverse(Arr,0,4) For I = Arr.GetLowerBound(0) To Arr.GetUpperBound(0) Console.Write(Arr(I)) '43210 Next I End Sub End Module Sort Mengurut elemen dalam suatu Array 1 dimensi.

Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module ModArr Public Arr() As Integer = {0,4,3,1,2} Sub Main() Dim I As Integer For I = Arr.GetLowerBound(0) To Arr.GetUpperBound(0) Console.Write(Arr(I)) '04312 Next I Console.WriteLine() Array.Sort(Arr,0,4) For I = Arr.GetLowerBound(0) To Arr.GetUpperBound(0) Console.Write(Arr(I)) '01234 Next I End Sub End Module

BinarySearch

Mencari Nilai tertentu pada suatu Array dengan algoritma Binary Search.

Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module ModArr Public Arr() As Integer = {0,4,3,1,2} Sub Main() Dim Nilai = 3

INDOPROG

33

Bahasa pemrograman VB.NET


Array.Sort(Arr,0,4) Console.WriteLine(Array.BinarySearch(Arr,Nilai)) End Sub End Module

Hendra, S.T.

'2

Perintah Visual Basic untuk Array


Visual Basic menyediakan berbagai perintah khusus untuk pengolahan string sebagai berikut ::

Perintah ReDim
Perintah ReDim digunakan untuk mendefinisi ulang jumlah elemen pada Array dengan atau tanpa mempertahankan data array sebelumnya. ReDim [ Preserve ] name(boundlist) Preserve Sifatnya optional, jika digunakan maka data pada array tersebut akan dipertahankan pada array ukuran baru Contoh : Pada contoh berikut menggunakan perintah ReDim untuk mengalokasi ualang ukuran variabel array.
Dim I, MyArray() As Integer ReDim MyArray(5) For I = 0 To UBound(MyArray) MyArray(I) = I Next I ' Declare variable and array variable. ' Allocate 6 elements. ' Initialize array.

Perintah berikut mengubah ukuran array tanpa mempertahankan isi elemennya..


ReDim MyArray(10) ' Resize to 11 elements. For I = 0 To UBound(MyArray) MyArray(I) = I ' Initialize array. Next I

Perintah berikut mengubah ukuran dari array dengan mempertahankan isi elementnya.
ReDim Preserve MyArray(15) ' Resize to 16 elements.

Contoh berikut mengalokasi ulang array sesuai dengan data yang dimasukan pemakai :
Option Explicit On Imports System Module DoLoop

INDOPROG

34

Bahasa pemrograman VB.NET


Sub Main() Dim Dat() As Integer Dim Jd,DTemp As Integer

Hendra, S.T.

Jd = 0 Do Console.Write("Data Ke-{0} :", Jd+1) DTemp = Console.ReadLine() If DTemp <> 0 Then ReDim Preserve Dat(Jd) Dat(Jd) = DTemp Jd+=1 End If Loop Until DTemp = 0 'Ulangi sampai Dtemp diisi 0 For I As Integer = 0 To Jd-1 Console.WriteLine("Data Ke-{0} adalah {1}",I+1, Dat(I)) Next I End Sub End Module

Perintah Erase
Perintah Erase digunakan untuk membebaskan array dan memory yang digunakan elemennya, dengan tata cara penulisan sebagai berikut :
Erase arraylist

Catatan Perintah Erase akan memberikan nilai Nothing ke variabel array. Contoh Pada contoh berikut menggunakan perintah Erase untuk membebaskan memori dua array (1000 dan 100 tempat elemen yang bersesuaian). Kemudian menggunakan perintah ReDim untuk memberikan ukuran baru untuk ketiga dimensi dari array.
Dim Int3DArray(9, 9, 9), Int2DArray(9, 9) As Integer ' ... Erase Int3DArray, Int2DArray ' ... ReDim Int3DArray(4, 4, 9)

Module Array pada Namespace Microsoft.VisualBasic

INDOPROG

35

Bahasa pemrograman VB.NET

Hendra, S.T.

Pengolahan data array dapat juga menggunakan beberapa fungsi bantu yang berkaitan dengan array yang tersedia pada Namespace Microsoft.VisualBasic, berikut ini adalah beberapa fungsi bantu tersebut :

Fungsi IsArray
Mengembalikan nilai Boolean yang menunjukan apakah suatu variabel menunjuk pada suatu array. Pada contoh ini fungsi IsArray memeriksa apakah variabel-variabel mengacu pada suatu array.
Dim MyArray(4), YourArray(3) As Integer Dim MyString As String Dim MyCheck As Boolean MyCheck = IsArray(MyArray) MyCheck = IsArray(YourArray) MyCheck = IsArray(MyString) ' Declare array variables.

' Returns True. ' Returns True. ' Returns False.

LBound Function
Mengembalikan index terendah untuk dimensi tertentu dari suatu array Pada contoh berikut menggunakan fungsi LBound untuk mendapatkan index terendah suatu dimensi dari array.
Dim Lowest, MyArray(10, 15, 20), AnyArray(6) as Integer Lowest = LBound(MyArray, 1) ' Returns 0. Lowest = LBound(MyArray, 3) ' Returns 0. Lowest = LBound(AnyArray) ' Returns 0.

Suatu Exception/Error akan terjadi kalau kondisi berikut ini ditemukan : Exception type ArgumentNullException RankException Error number 9 9 Condition Array is Nothing. Rank < 1 or Rank is greater than the rank of Array.

Fungsi UBound
Mengembalikan index yang terbesar dari suatu dimensi pada array. Pada contoh berikut menggunakan fungsi Ubound untuk menentukan index yang terbesar dari suatu dimensi pada array.
Dim Highest, MyArray(10, 15, 20), AnyArray(6) as Integer

INDOPROG

36

Bahasa pemrograman VB.NET


Highest = UBound(MyArray, 1) Highest = UBound(MyArray, 3) Highest = UBound(AnyArray) ' Returns 10. ' Returns 20. ' Returns 6.

Hendra, S.T.

Catatan : Untuk memanfaatkan fungsi IsArray, Lbound dan Ubound anda perlu mencantumkan Imports Microsoft.VisualBasic Pada awal program

Latihan :
1. Buatlah program yang menbaca sejumlah data dari pemakain, dan menampilkan kembali dalam keadaan berurut dari kecil ke besar, nilai total, rata-rata, nilai terbesar, dan nilai yang terkecil dengan pemanfaatan array. 2. Perbaiki program diatas untuk menampilkan kembali dalam keadaan berurut dari besar ke kecil. 3. Tambahkan kemampuan program untuk mencari suatu nilai yang dimasukan dan menampilkan posisinya dalam array. 4. Buatlah program yang mencetak suatu segitiga Pascal.

INDOPROG

37

Bahasa pemrograman VB.NET

Hendra, S.T.

Fungsi dan Sub


Perintah Function
Dalam pembuatan program yang besar, tentu saja harus dikembangkan secara terstruktur sehingga program menjadi lebih mudah dikembangkan dan dimaintenance. Salah satu usaha yang dapat dilakukan adalah memecah program menjadi kesatuan logika yang lebih kecil dimana proses yang sama dikelompokan menjadi sub program yang diberi nama, dan dapat dipanggil pada saat yang dibutuhkan. Pemakaian function digunakan untuk proses maupun rumus yang perlu mengembalikan nilai kepada pemanggil, adapun tata cara penulisan function adalah sebagai berikut :
Function name[(arglist)] [ As type ] [ statements ] [ Exit Function ] [ statements ] End Function

Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module GenapGanjil Function IsGenap(x As Long) As Boolean If (x Mod 2) = 0 Then Return True Else Return False End If End Function REM program utama Sub Main() Dim bil As Long Console.Write("Masukan Bilangan :") bil = Console.ReadLine() If IsGenap(bil) Then Console.WriteLine("Bilangan {0} adalah Genap",bil) Else Console.WriteLine("Bilangan {0} adalah Ganjil",bil) End If End Sub End Module

Defaultnya parameter pada function dikirim secara ByVal, kadang-kadang kita menginginkan proses yang dapat mengembalikan lebih dari satu nilai yang mana dapat dipenuhi dengan menggunakan parameter yang dikirim secara ByRef.

INDOPROG

38

Bahasa pemrograman VB.NET

Hendra, S.T.

Misalnya kita ingin menghitung akar persamaan kuadrat dengan menggunakan rumus ABC. Yang mana X1 dan X2 yang kemungkinan akar imaginier, dimana function akan mengembalikan suatu nilai true (ada solusi) atau false (tidak ada solusi). Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module AkarKuadrat Function CariAkar(A as Long, B as Long ,C As Long, _ ByRef X1 as single ,ByRef X2 as single) As Boolean Dim D as Long D = B^2 - 4*A*C If D < 0 Then 'Akar Imaginier Return False 'Tidak ada solusi Else X1 = (-B + Math.Sqrt(D))/(2*A) 'argumen X1 X2 = (-B - Math.Sqrt(D))/(2*A) 'argumen X2 Return True 'Ada solusi End If End Function REM program utama Sub Main() Dim A,B,C As Long Dim X1,X2 As Single Console.WriteLine("Mencari akar persamaan kuadrat") Console.Write("Masukan A :") A = Console.ReadLine() Console.Write("Masukan B :") B = Console.ReadLine() Console.Write("Masukan C :") C = Console.ReadLine() If CariAkar(A,B,C,X1,X2) Then Console.WriteLine("Akar X1={0} X2={1}",X1,X2) Else Console.WriteLine("Akar imaginier") End If End Sub End Module

Catatan : Perintah Return digunakan untuk mengembalikan nilai ke pemanggil, dan jika suatu Exit Function digunakan, maka function akan mengembali nilai defaut berupa 0 for Byte, Char, Decimal, Double, Integer, Long, Short, and Single; Nothing for Object, String, and all arrays; False for Boolean; and #1/1/0001 12:00 AM# for Date. Jika kita perlu melewatkan suatu array sebagai argumen pada function, maka dapat digunakan keyword ParamArray untuk melewatkan nilai array secara by value, contoh :

INDOPROG

39

Bahasa pemrograman VB.NET


Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module ModArr Function sumArray(ByVal Paramarray Dat() As Byte) Dim Total As Long = 0 For I As Integer = 0 To UBound(Dat) Total += Dat(I) Next I Return Total End Function Dim Digit() As Byte = {0,1,2,3,4,5} Sub Main() Console.WriteLine(sumArray(Digit)) End Sub End Module

Hendra, S.T.

Sub Statement
Pada bagian sebelumnya kita telah membahas tentang function dan pemakaiannya, selanjutnya kita akan melihat Sub yang menyerupai Function, dimana perbedaannya adalah jika function digunakan untuk proses yang mengembalikan nilai kepada pemanggil, sedangkan Sub cenderung digunakan untuk proses yang tidak mengembalikan nilai.
Sub name [(arglist)] [ statements ] [ Exit Sub ] [ statements ] End Sub

Catatan : Sebagaimana function, sebenarnya sub juga dapat digunakan untuk proses yang mengembalikan nilai melalui argumen yang dikirim secara ByRef. Jika Exit Sub digunakan, maka Sub akan kembali ke pemanggil secara tidak bersyarat. Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module ModArr Public Arr() As Integer Public Jd As Byte Sub BacaJd() Console.Write("Masukkan Jumlah Data :") Jd = Console.ReadLine() End Sub Sub BacaData()

INDOPROG

40

Bahasa pemrograman VB.NET


ReDim Arr(Jd-1) For I As Byte = 0 To UBound(Arr) Console.Write("Data Ke -{0} :",I+1) Arr(I) = Console.ReadLine() Next I End Sub Sub CariRataRata() Dim Total As Long = 0 For I As Byte = 0 To UBound(Arr) Total +=Arr(I) Next I Console.WriteLine("Nilai Rata-rata : {0}",Total/Jd) End Sub Sub Main() BacaJd() BacaData() CariRataRata() End Sub End Module

Hendra, S.T.

Teknik Rekursi pada Visual Basic Dalam matematika, kita sering menjumpai formula yang mengandung rekursi, misalnya pada perhitungan nilai faktorial dari suatu bilangan yang dapat diformulasikan sebagai berikut : N! = N x (N-1)! Dimana 1! = 1. Sehingga secara pemrograman komputer dapat ditulis sebagai berikut :
Option Explicit On Imports System Public Module modFak Function Fak(N as Byte) If (N > 1) Then Return N * Fak(N-1) Else Return 1 End If End Function Sub Main() Console.WriteLine("Faktorial dari {0} adalah {1}",5,Fak(5)) End Sub End Module

Latihan :
INDOPROG

41

Bahasa pemrograman VB.NET

Hendra, S.T.

1. Buatlah function IsKabisat yang akan mengembalikan nilai True jika tahun yang dikirim sebagai argumen adalah Kabisat, dan False jika sebaliknya. 2. Buatlah function IsPrima yang akan mendeteksi apakah suatu bilangan yang diberikan adalah Prima atau tidak. 3. Dengan pemanfaatan teknik rekursi, buatlah function yang dapat menghitung suku yang ke n dari barisan fibonacci. 4. Buatlah program yang mencetak faktor prima dari suatu bilangan dengan pemanfaatan Sub secara rekursi.

INDOPROG

42

Bahasa pemrograman VB.NET

Hendra, S.T.

String
Variabel string pada Visual Basic disimpan sebagai urutan dari angka 16-bit (2 byte) yang memiliki jangkauan dari 0 sampai 65535. Masing-masing angka merupakan suatu karakter tunggal Unicode. Suatu string dapat mengandung sampai dengan 2 Milyar (2^31) karakter Unicode. 128 kode pertama (0-127) dari Unicode berkaitan dengan huruf dan simbol pada keyboard standard U.S yang mana sama dengan karakter set yang terdefinisi pada ASCII, kemudian 128 karakter berikutnya (128255) merupakan karakter spesial, seperti huruf alphabet Latin, accent, simbol mata uang, dan pecahan. Kemudian karakter sisianya digunakan untuk berbagai simbol, termasuk karakter teksual didunia, dan simbol teknis, dan metematika. Pada dasarnya String pada Visual Basic mengacu pada String Class. Contoh :
Option Explicit On Imports System Public Module modStr Dim Nama As String = "Hendra Soewarno" Sub Main() Console.WriteLine(Nama.ToUpper()) Console.WriteLine(Nama.ToLower()) End Sub End Module

Pada contoh diatas akan mencetak HENDRA SOEWARNO dan hendra soewarno.

Member pada Class String


Semua string di Visual Basic memiliki member sebagai berikut yang dapat digunakan untuk melakukan pengolahan data String.

Public Properties
Chars Length Mendapatkan karakter pada posisi tertentu string. Mendapatkan jumlah character dalam string

Contoh :
Option Explicit On Imports System Public Module modStr

INDOPROG

43

Bahasa pemrograman VB.NET


Dim Nama As String = "Hendra Soewarno" Sub Main() Console.WriteLine(Nama.Chars(0)) Console.WriteLine(Nama.Chars(1)) Console.WriteLine(Nama.Chars(2)) Console.WriteLine(Nama.Length()) End Sub End Module

Hendra, S.T.

'Akan 'Akan 'Akan 'Akan

mencetak mencetak mencetak mencetak

H e n 12

Public Methods
PadLeft Mengisi spasi atau karakter lain disebelah kiri string sampai string mencapai panjang tertentu. Mengisi spasi atau karakter lain disebelah kanan string sampai string mencapai panjang tertentu. Mengembalikan string yang telah diubah ke huruf kecil

PadRight

ToLower

ToUpper

Mengembalikan string yang telah diubah ke huruf besar

Trim

Mengembalikan string dengan membuang spasi didepan dan belakang string Mengembalikan string dengan membuang spasi dibelakang string

TrimEnd

TrimStart

Mengembalikan string dengan membuang spasi didepan string

Substring

Mengembalikan bagian dari string

Contoh :
Option Explicit On Imports System Public Module modStr Dim Nama As String = "Hendra Soewarno" Dim Kota As String = " Medan " Sub Main() Console.WriteLine(Nama.PadLeft(20,"-")) Console.WriteLine(Nama.PadRight(20,"-")) Console.WriteLine(Nama.ToLower()) Console.WriteLine(Nama.ToUpper()) Console.WriteLine(Kota.TrimEnd()) Console.WriteLine(Kota.TrimStart())

'-----Hendra Soewarno 'Hendra Soewarno----'hendra soewarno 'HENDRA SOEWARNO '____Medan 'Medan_____

INDOPROG

44

Bahasa pemrograman VB.NET


Console.WriteLine(Kota.Trim()) Console.WriteLine(Nama.SubString(3,3)) End Sub End Module 'Medan 'dra

Hendra, S.T.

Insert Remove Replace

Menyisip string ke dalam string sekarang pada posisi tertentu. Menghapus sejumlah karakter dalam string Mengantu sejumlah karakter dengan string pada string sekarang

Contoh :
Option Explicit On Imports System Public Module modStr Dim Nama As String = "Santo" Sub Main() Console.WriteLine(Nama.Insert(1,"us")) 'Susanto Console.WriteLine(Nama.Remove(0,1)) 'anto Console.WriteLine(Nama.Replace("o","i")) 'Santi End Sub End Module IndexOf Mengembalikan posisi awal suatu string pada string sekarang mulai dari posisi tertentu Mengembalikan posisi awal suatu string pada string sekarang. Mengembalikan posisi akhir suatu string pada string sekarang sekarang mulai dari posisi tertentu Mengembalikan posisi akhir suatu string pada string sekarang. Mendapatkan apakah string dimulai dengan string tertentu. Mendapatkan apakah string diakhir dengan string tertentu.

IndexOfAny

LastIndexOf

LastIndexOfAny StartsWith EndsWith

Contoh :
Option Explicit On Imports System Public Module modStr ' 0 1 2 ' 012345678901234567890123456 Dim Nama As String = "ebook karya Hendra Soewarno"

INDOPROG

45

Bahasa pemrograman VB.NET


Sub Main() Console.WriteLine(Nama.StartsWith("e")) Console.WriteLine(Nama.StartsWith("a")) Console.WriteLine(Nama.EndsWith("o")) Console.WriteLine(Nama.EndsWith("i")) End Sub End Module

Hendra, S.T.

'True 'False 'True 'False

Option Explicit On Imports System Public Module modStr ' 0 1 2 ' 012345678901234567890123456 Dim Nama As String = "ebook karya Hendra Soewarno" Sub Main() Console.WriteLine(Nama.IndexOfAny("e")) Console.WriteLine(Nama.LastIndexOfAny("e")) Console.WriteLine(Nama.IndexOf("e",2)) Console.WriteLine(Nama.LastIndexOf("e",15)) End Sub End Module

'0 '21 '13 '13

Module String pada Namespace Microsoft.VisualBasic


Selain pengolahan data string dengan menggunakan String Member, Visual Basic juga menyediakan berbagai fungsi bantu yang terdefinisi pada Namespace Micorosoft.VisualBasic, berikut ini adalah beberapa fungsi bantu yang dapat digunakan untuk pengolahan data string. Asc(x), mengembalikan nilai ASCII dari huruf pertama dalam string x AscW(x), mengembalikan nilai ASCII dari huruf pertama dalam string x Chr(x), mengembalikan character dari suatu nilai ASCII x ChrW(x), , mengembalikan character dari suatu nilai ASCII x Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module modStr Sub Main() Console.WriteLine(Asc("H")) Console.WriteLine(AscW("H")) Console.WriteLine(Chr("72")) Console.WriteLine(ChrW("72")) End Sub End Module

'72 '72 'H 'H

INDOPROG

46

Bahasa pemrograman VB.NET

Hendra, S.T.

Len(x), mengembalikan panjang string x dalam karakter. Lcase(x), mengembalikan string yang telah diubah menjadi huruf kecil. Ucase(x), mengembalikan string yang telah diubah menjadi huruf besar. Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module modStr Sub Main() Dim Nama As String = "Hendra Soewarno" Console.WriteLine(Len(Nama)) Console.WriteLine(LCase(Nama)) Console.WriteLine(UCase(Nama)) End Sub End Module

'15 'hendra soewarno 'HENDRA SOEWARNO

GetChar(x,y), mendapatkan character posisi ke y dalam string x. Left(x,y), mengembalikan substring dari string x sebanyak y karakter dari depan. Right(x,y), mengembalikan substring dari string x sebanyak y karakter dari belakang. Mid(x,y,z) mengembalikan substring dari string x mulai posisi y sebanyak z karakter. Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module modStr Sub Main() Dim Nama As String = "Hendra Soewarno" Console.WriteLine(GetChar(Nama,1)) Console.WriteLine(Left(Nama,6)) Console.WriteLine(Right(Nama,8)) Console.WriteLine(Mid(Nama,4,3)) End Sub End Module

'H 'Hendra 'Soewarno 'dra

Space(x), mengembalikan string yang terdiri dari spasi sejumlah x karakter. Rset(x,y), mengembalikan string rapat kanan dengan panjang y dengan menambah spasi di depan string x.

INDOPROG

47

Bahasa pemrograman VB.NET

Hendra, S.T.

Lset(x,y), mengembalikan string rapat kiri dengan panjang y dengan menambah spasi dibelakang string x. Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module modStr Sub Main() Dim Nama1 As String = "Hendra" Dim Nama2 As String = "Soewarno" Console.WriteLine(Nama1 & Space(5) & Nama2) 'Hendra Console.WriteLine(RSet(Nama1,9)) '___Hendra Console.WriteLine(LSet(Nama1,9)) 'Hendra___ End Sub End Module

Soewarno

Ltrim(x), mengembalikan string dengan menghilangkan spasi didepan string x. Rtrim(x), mengembalikan string dengan menghilangkan spasi dibelakang string x. Trim(x), mengembalikan string dengan prilaku gabungan Ltrim dan Rtrim. StrReverse(x), mengembalikan string yang membalikan karakter dalam string x. Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module modStr Sub Main() Dim Nama As String = "Susan" Console.WriteLine(Nama) Console.WriteLine(StrReverse(Nama)) End Sub End Module

'Susan 'nasuS

InStr(y, x, z), mencari dari depan posisi keberadaan substring z dalam string x mulai posisi y. InStrRev(x, z, y), mencari dari belakang posisi keberadaan substring z dalam string x mulai posisi y. Contoh :

INDOPROG

48

Bahasa pemrograman VB.NET


Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module modStr Sub Main() Dim Nama As String = "Felicia Fortuna" Console.WriteLine(InStr(1,Nama,"i")) Console.WriteLine(InStr(5,Nama,"i")) Console.WriteLine(InStrRev(Nama,"F",10)) Console.WriteLine(InStrRev(Nama,"F",7)) End Sub End Module

Hendra, S.T.

'4 '6 '9 '1

StrDup(y, x), mengembalikan string yang merupakan duplikasi character x sebanyak y. StrComp(x,y,z), mengembalikan nilai -1, 0, atau 1 yang merupakan perbandingan antara string x dengan string y, dengan metode z, dimana -1 (x < y), 0 (x =y), dan 1 (x > y), dan metode z adalah CompareMethod.Text dan CompareMethod.Binary. Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module modStr Sub Main() Dim Nama1 As String = "felicia" Dim Nama2 As String = "FELICIA" Console.WriteLine(StrDup(10,"-")) '---------Console.WriteLine(StrComp(Nama1,Nama2,CompareMethod.Text)) '0 Console.WriteLine(StrComp(Nama1,Nama2,CompareMethod.Binary)) '1 End Sub End Module

Catatan : Pada metode Binary, perbandingan dilakukan berdasarkan nilai ASCII, dimana ASCII huruf kecil > dari huruf besar, contoh A = 65, dan a = 97. Split(x,y), mengembalikan array string yang merupakan hasil pemisahan dari string x dengan delimeter y
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module modStr Sub Main() Dim Nama As String = "Felicia Fortuna" Dim aNama() As String = Split(Nama," ") Console.WriteLine(aNama(0))

'Felicia

INDOPROG

49

Bahasa pemrograman VB.NET


Console.WriteLine(aNama(1)) End Sub End Module 'Fortuna

Hendra, S.T.

Join(x,y), mengembalikan string yang merupakan hasil gabungan array string x dengan delimeter y
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module modStr Sub Main() Dim aNama() As String = {"Felicia","Fortuna"} Console.WriteLine(Join(aNama,", ")) 'Felicia, Fortuna End Sub End Module

Replace(x,y,z,[1],[2],[3]), mengembalikan string yang merupakan pengantian string y dengan z dalam string x mulai posisi [1] sampai sejumlah karakter [2], dengan metode perbandingan [3]. Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module modStr Sub Main() Dim Nama As String = "Hendra" Console.WriteLine(Replace(Nama,"a","o")) 'Hendro End Sub End Module

StrConv(x,y), menghasilkan string yang merupakan hasil konversi dengan metode y dari string x, dimana y (VBStrConv.UpperCase, VBStrConv.LowerCase, VBStrConv.ProperCase) Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module modStr Sub Main() Dim Nama As String = "Hendra" Console.WriteLine(StrConv(Nama,VbStrConv.UpperCase)) 'HENDRA Console.WriteLine(StrConv(Nama,VbStrConv.LowerCase)) 'hendra Console.WriteLine(StrConv(Nama,VbStrConv.ProperCase)) 'Hendra End Sub

INDOPROG

50

Bahasa pemrograman VB.NET


End Module

Hendra, S.T.

FormatDateTime(x,y), menghasilkan string hasil konversi date x dengan format sesuai dengan setting pada komputer, dimana y (DateFormat.GeneralDate, DateFormat.LongDate, DateFormat.ShortDate, DateFormat.LongTime, DateFormat.ShortTime) Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module modStr Sub Main() Console.WriteLine(FormatDateTime(Now,DateFormat.LongDate)) 'Sunday, May 22, 2005 End Sub End Module

FormatCurrency(x,y), menghasilan string yang merupakan format currency dari angka x dengan jumlah desimal y. FormatPercent(x,y), menghasilkan string yang merupakan format percent dari angka x dengan jumlah desimal y. FormatNumber(x,y), menghasilkan string yang merupakan format angka dari angka x dengan jumlah desimal y. Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module modStr Sub Main() Dim Angka As Decimal = 100000 Dim PPN As Single = 0.1 Console.WriteLine(FormatCurrency(Angka,2)) Console.WriteLine(FormatNumber(Angka,2)) Console.WriteLine(FormatPercent(PPN,2)) End Sub End Module

'$100,000.00 '100,000.00 '10.00%

Format(x,y), menghasilkan string yang merupakan format dari argumen x dengan format y, dengan format yang dapat dilihat pada lampiran 1. Contoh :

INDOPROG

51

Bahasa pemrograman VB.NET

Hendra, S.T.

Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module modStr Sub Main() Console.WriteLine(Format(10000,"#,##0.00")) '10,000.00 Console.WriteLine(Format(Now,"dd/MM/yyyy HH:MM:SS")) '22-05-2005 20:15:01 End Sub End Module

Filter(x,y,[1],[2]), menghasilkan array yang berisi string dari array string x yang mana elemen yang mengandung substring y, dengan ketentuan [1] (true=contain, false = exclude), dengan compare method [2]. Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module modStr Sub Main() Dim aNama1() As String = {"Hendra","Susan","Felicia Fortuna"} Dim aNama2() As String = Filter(aNama1,"r",true,CompareMethod.Binary) For Each A As String In aNama2 Console.WriteLine(A) 'Hendra & Felicia Fortuna Next End Sub End Module

Latihan :
1. Buatlah program yang dapat menghasilkan terbilang dari suatu bilangan, contoh 123,456,789 (Seratus dua puluh tiga juta empat ratus lima puluh enam ribu tujuh ratus delapan puluh sembilan).

INDOPROG

52

Bahasa pemrograman VB.NET

Hendra, S.T.

Tipe data Date


Pada Visual Basic variabel date disimpan sebagai integer IEEE 64-bit (8-byte) yang mewakili tanggal dengan jangkauan dari 1 Januari tahun 1 sampai dengan 31 Desember tahun 9999, dan waktu dari 0:00:00 (tengah malam) sampai 23:59:59. Nilai tanggal harus diapit diantara tanda angka (#) dan diformat dalam M/d/yyyy, sebagai contoh #5/31/1993#. Anda dapat memberikan nilai awal pada variabel tipe Date dengan penulisan sebagai berikut :
Dim Tanggal As Date = New Date(2005, 5, 30, 8, 29, 59, 900)

Dimana akan memberikan nilai Tanggal 30 Mei 2005 Pukul 8:29:59.900 ke variabel Tanggal.

Member pada Class Date


Date
TimeOfDay Day Month Year Hour Minute Second Millisecond DayOfWeek DayOfYear Ticks Now Today UtcNow Mengambil komponen tanggal dari instance Mengambil komponen waktu dari instance Mengambil nomor hari (1-31) dalam bulan dari instance Mengambil komponen bulan (1-12) dari instance Mengambil komponen tahun dari instance Mengambil komponen jam (0-23) dari instance Mengambil komponen menit (0-59) dari instance Mengambil komponen detik (0-59) dari instance Mengambil komponen mili detik (0-999) dari instance Mengambil nomor hari (0-6) dalam minggu dari instance Mengambil nomor hari (1-366) dalam tahun dari instance Mengambil jumlah ticks dari instance Mendapatkan tanggal dan waktu komputer Mendapatkan mendapatkan tanggal komputer Mendapatkan tanggal dan wkatu komputer yang telah diknversi menjadi coordinated universal time (UTC).

Contoh :
Option Explicit On Imports System Public Module ModDate

INDOPROG

53

Bahasa pemrograman VB.NET

Hendra, S.T.

Sub Main() Dim Tanggal As Date = New Date(2005,5,30,8,29,40,900) Console.WriteLine(Tanggal.Date()) '30-05-2005 Console.WriteLine(Tanggal.TimeOfDay()) '08:29:40.9000000 Console.WriteLine(Tanggal.Day()) '30 Console.WriteLine(Tanggal.Month()) '5 Console.WriteLine(Tanggal.Year()) '2005 Console.WriteLine(Tanggal.Hour()) '8 Console.WriteLine(Tanggal.Minute()) '29 Console.WriteLine(Tanggal.Second()) '40 Console.WriteLine(Tanggal.MilliSecond()) '900 Console.WriteLine(Tanggal.DayOfWeek()) '1 Console.WriteLine(Tanggal.DayOfYear()) '150 Console.WriteLine(Tanggal.Ticks()) '632530385809000000 Console.WriteLine(DateTime.Now()) '30-05-2005 08:30:29 PM Console.WriteLine(Tanggal.Today()) '30-05-2005 Console.WriteLine(Tanggal.UTCNow()) '30-05-2005 1:37:20 PM End Sub End Module

Visual Basic menyediakan berbagai fungsi bantu yang merupakan member dari namespace Microsoft.VisualBasic
AddDays AddMonths AddYears AddHours AddMinutes AddSeconds AddMilliseconds Option Explicit On Imports System Public Module ModDate Sub Main() Dim Tanggal As Date = New Date(2005,5,30,8,29,40,900) Console.WriteLine(Tanggal.AddDays(-10)) '20-5-2005 8:29:40.900 End Sub End Module Parse Mengkonversi string dalam bentuk tanggal dan waktu ke DateTime. Menambah sejumlah hari (+/-) ke instance. Menambah sejumlah bulan (+/-) ke instance Menambah sejumlah tahun (+/-) ke instance Menambah sejumlah jam (+/-) ke instanace Menambah sejumkah menit (+/-) ke instance Menambah sejumlah detik (+/-) ke instance Menambah sejumlah millidetik (+/-) ke instance

Option Explicit On Imports System Public Module ModDate Sub Main() Dim Str As String = "30-5-2005 08:30:50.900"

INDOPROG

54

Bahasa pemrograman VB.NET


Dim Tanggal As Date Tanggal = DateTime.Parse(Str) Console.WriteLine(Tanggal) End Sub End Module

Hendra, S.T.

Compare

DaysInMonth IsLeapYear Option Explicit On Imports System

Membandingkan dua instance dari DateTime dam mengembalikan ( < 0 jika tanggal1 < tanggal2, = 0 jika tanggal1 = tanggal2, dan > 0 jika tanggal1 > tanggal2) Mengembalikan jumlah hari dalam tahun dan bulan tertentu. Mengembalikan indikasi apakah tahun yang diberikan kabisat

Public Module ModDate Sub Main() Dim Tanggal1 As Date = New Date(2005,5,30) Dim Tanggal2 As Date = New Date(2005,5,31) Console.WriteLine(DateTime.Compare(Tanggal1,Tanggal2)) Console.WriteLine(DateTime.DaysInMonth(2005,5)) Console.WriteLine(DateTime.IsLeapYear(2005)) End Sub End Module Subtract Option Explicit On Imports System Public Module ModDate Sub Main() Dim Tanggal1 As Date = New Date(2005,5,30) Dim Tanggal2 As Date = New Date(2005,5,31) Console.WriteLine(Tanggal1.Subtract(Tanggal2)) End Sub End Module

'-1 '31 'False

Menghasilkan selisih antara suatu datetime dengan instance

'-1 00:00:00

ToLocalTime

Konversi Instance ke LocalTime

ToLongDateString Konversi Instance ke String dengan format setting LongDateString ToLongTimeString Konversi Instance ke String dengan format setting LongTime ToShortDateString Konversi Instance ke String dengan format setting ShortDate ToShortTimeString Konversi Instance ke String dengan format setting ShortTime ToString ToUniversalTime Konversi Instance ke String Konversi Instance ke UTC

INDOPROG

55

Bahasa pemrograman VB.NET

Hendra, S.T.

Module Date pada Namespace Microsoft.VisualBasic


DateSerial(year,month,day), mengembalikan data tanggal sesuai dengan tahun, bulan dan hari yang ditentukan. TimeSerial(hour, minute, second), mengembalikan waktu sesuai dengan jam, menit dan detik. Now(), mengembalikan tanggal dan waktu komputer. Today(), mengembalikan tanggal komputer. TimeOfDay(), mengembalikan tanggal komputer dalam bentuk string. Timer(), mengembalikan data bertipe double yang menunjukan jumlah detik sejak tengah malam. DateString(), mengembalikan tanggal komputer dengan format MM-dd-yyyy dalam bentuk string. TimeString(), mengembalikan waktu komputer DateValue(string), mengembalikan tanggal dari hasil konversi string tanggal. Day(DateTime), mengembalikan bagian hari dari data tanggal Month(DateTime), mengembalikan bagian bulan dari data tanggal Year(DateTime), mengembalikan bagian tahun dari data tanggal Hour(DateTime), mengembalikan bagian jam dari data tanggal Minute(DateTime), mengembalikan bagian menit dari data tanggal Second(DateTime), mengembalikan bagian detik dari data tanggal Weekday(DateTime, DayofWeek), mengembalikan nomor hari dalam minggu dari DateTime (1 = minggu, 7 = sabtu). WeekdayName(WeekDay, Abbrev), mengembalikan nama hari berdasarkan nomor hari. (Abbrev = True, singkatan)

INDOPROG

56

Bahasa pemrograman VB.NET

Hendra, S.T.

DateAdd(Interval, Number, DateValue), mengembalikan tanggal dari hasil penjumlahan DateValue terhadap Number dalam arti interval tertentu
Enumeration value String Unit of time interval to add DateInterval.Day d Day; truncated to integral value DateInterval.DayOfYear y Day; truncated to integral value DateInterval.Hour h Hour; rounded to nearest millisecond DateInterval.Minute n Minute; rounded to nearest millisecond DateInterval.Month m Month; truncated to integral value DateInterval.Quarter q Quarter; truncated to integral value DateInterval.Second s Second; rounded to nearest millisecond DateInterval.Weekday w Day; truncated to integral value DateInterval.WeekOfYear ww Week; truncated to integral value DateInterval.Year yyyy Year; truncated to integral value

DateDiff(Interval, Date1, Date2), menghasilkan selisih antara Date2 terhadap Date1 berdasarkan interval tertentu. Returns a Long value specifying the number of time intervals between two Date values. DatePart(Interval, DateValue), mengembalikan nilai Integer yang berkaitan dengan interval dari DataValue Catatan : Visual Basic .NET telah mengantikan Date dan Time dengan Today dan TimeOfDay, kemudian fungsi Date$ dan Time$ dengan DateString dan TimeString.

INDOPROG

57

Bahasa pemrograman VB.NET

Hendra, S.T.

Structure pada Visual Basic


Visual Basic menyedia perintah Structure untuk pembentukan tipe data terstruktur, misalnya kita akan mengolah data ujian mahasiswa dengan tabel sebagai berikut : Nim Nama Tugas Mid Semester

Dimana dapat ditulis sebagai struktur berikut ini :


Structure Ujian <VBFixedString(10)> Public Nim As String <VBFixedString(30)> Public Nama As String Public Tugas, Mid, Semester As Single End Structure

Catatan : Sebagaimana telah dinyatakan sebelumnya bahwa secara default string pada Visual Basic adalah variable length, dan untuk membentuk string dengan fixed length kita membutuhkan vbFixedStringAttribute Class, dimana pada awal deklarasi string kita mencantumkan <VBFixedString(ukuran)> Salah satu keunggulan pada Structure di Visual Basic adalah kita dapat menambahkan koding kedalamnya untuk membuat metoda dan property, contoh misalnya kita akan menambah property Rata-rata untuk menghitung nilai rata-rata Tugas, Mid dan Semester, sehingga deklarasi Structure dapat ditulis menjadi :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module ModStruct Structure Ujian <VBFixedString(10)> Public Nim As String <VBFixedString(30)> Public Nama As String Public Tugas,Mid,Semester As Single Public ReadOnly Property RataRata() As Single Get Return (Tugas+Mid+Semester)/3 End Get End Property End Structure Dim DaftarUjian As Ujian Sub Main() DaftarUjian.Nim = "920403024"

INDOPROG

58

Bahasa pemrograman VB.NET


DaftarUjian.Nama = "Hendra Soewarno" DaftarUjian.Tugas = 90 DaftarUjian.Mid = 90 DaftarUjian.Semester = 90 Console.WriteLine(DaftarUjian.RataRata) End Sub End Module

Hendra, S.T.

Contoh program membaca data ke array structure dan mencetak kembali :


Option Explicit On Imports System Imports Microsoft.VisualBasic Public Module ModStruct Structure Ujian <VBFixedString(10)> Public Nim As String <VBFixedString(30)> Public Nama As String Public Tugas,Mid,Semester As Single Public ReadOnly Property RataRata() As Single Get Return (Tugas+Mid+Semester)/3 End Get End Property End Structure Dim Jd As Integer = 0 Dim DaftarUjian() As Ujian Private Sub BacaData Dim Nim As String Do Console.WriteLine("Record ke {0}",Jd+1) Console.Write("Nim : ") Nim = Console.ReadLine() If Nim.Trim.Length > 0 ReDim Preserve DaftarUjian(Jd) DaftarUjian(jd).Nim = Nim Console.Write("Nama : ") DaftarUjian(jd).Nama = Console.ReadLine() Console.Write("Tugas : ") DaftarUjian(jd).Tugas = Console.ReadLine() Console.Write("Mid : ") DaftarUjian(jd).Mid = Console.ReadLine() Console.Write("Semester : ") DaftarUjian(jd).Semester = Console.ReadLine() Jd = Jd + 1 End If Loop Until Len(Trim(Nim)) = 0 End Sub Private Sub CetakData() Dim Record As Ujian Console.WriteLine("Daftar Ujian Mahasiswa") Console.WriteLine
Console.WriteLine("Nim Nama T M S R ")

INDOPROG

59

Bahasa pemrograman VB.NET

Hendra, S.T.

Console.WriteLine("----------------------------------------------------------------------")

For Each Record In DaftarUjian Console.WriteLine("{0} {1} {2,6:f2} {3,6:f2} {4,6:f2} {5,6:f2}", _ Record.Nim.PadRight(10), _ Record.Nama.PadRight(30), _ Record.Tugas, _ Record.Mid, _ Record.Semester, _ Record.RataRata) Next End Sub Sub Main() Call BacaData Call CetakData End Sub End Module

Latihan :
1. Kembangkan program diatas untuk mencetak Daftar Ujian Mahasiswa, dimana ditampilkan nilai rata-rata diikuti dengan nilai Huruf (A, B, C, D, atau E), serta tampilkan jumlah yang Lulus (C Keatas), dan Rata-rata kelas, serta NIM mahasiswa peringkat pertama, dengan pendekatan terstruktur. Catatan : Kategori nilai Huruf dicetak dengan membuat Properti NilaiHuruf pada Structure Ujian.

INDOPROG

60

Bahasa pemrograman VB.NET

Hendra, S.T.

Pengolahan file stream pada Visual Basic


Sebagaimana bahasa pemrograman modern lainnya yang memperlakukan input/output data byte sebagai Streams. Streams meliputi tiga operasi yang mendasar: 1. Anda dapat membaca dari streams. Membaca dalam hal ini adalah mentransfer data dari suatu stream ke dalam suatu struktur data, seperti suatu array dari byte. 2. Anda dapat menulis ke streams. Menulis adalah mentransfer data dari suatu struktur data ke dalam suatu stream. 3. Stream mendukung pencarian. Pencarian adalah melakukan query dan modifikasi terhadap posisi dalam suatu stream. Kemampuan pencarian sangat tergantung pada jenis media penampung stream. Sebagai contoh FileStream mendukung perubahan posisi, sedangkan network stream tidak. Stream merupakan abstract base class untuk semua stream. Suatu stream adalah abstraction dari rangkain byte, seperti suatu file, peralatan input/output, inter-process communication pipe, atau suatu TCP/IP socket. Untuk pengolahan stream yang berkaitan dengan file perlu melakukan Imports System.IO, untuk menggunakan File Class.

File Class
Menyediakan metode-metode static untuk pembuatan, menduplikasi, menghapus, dan membuka file. Berikut ini adalah beberapa member File Class : File.Exists(namafile), mendeteksi keberadaan file File.Delete(namafile), menghapus file yang ditentukan File.Copy(asal,tujuan), menduplikasi file asal ke file tujuan File.Move(asal,tujuan), memindahkan file ke lokasi baru dengan nama baru File.GetAttributes(namafile), mendapatkan attribut dari file, dimana mengembalikan salah satu nilai dari member FileAttributes :
Member name Archive Description The file's archive status. Applications use this attribute to mark files for backup or removal. The file is compressed. 32 Value

Compressed

2048

Device

Reserved for future use.

64

Directory

The file is a directory.

16

INDOPROG

61

Bahasa pemrograman VB.NET

Hendra, S.T.

Encrypted

The file or directory is encrypted. For a file, this means that all data in the file is encrypted. For a directory, this means that encryption is the default for newly created files and directories. The file is hidden, and thus is not included in an ordinary directory listing.

16384

Hidden

Normal

The file is normal and has no other attributes set. This attribute is 128 valid only if used alone. The file will not be indexed by the operating system's content indexing service. 8192

NotContentIndexed

Offline

The file is offline. The data of the file is not immediately available. 4096

ReadOnly

The file is read-only.

ReparsePoint

The file contains a reparse point, which is a block of user-defined 1024 data associated with a file or a directory. The file is a sparse file. Sparse files are typically large files whose 512 data are mostly zeros. The file is a system file. The file is part of the operating system or 4 is used exclusively by the operating system. The file is temporary. File systems attempt to keep all of the data 256 in memory for quicker access rather than flushing the data back to mass storage. A temporary file should be deleted by the application as soon as it is no longer needed.

SparseFile

System

Temporary

File.GetCreationTime(namafile), mendapatkan tanggal dan waktu pembuatan file File.GetLastAccessTime(namafile), mendapatkan tanggal dan waktu file terakhir kali diakses. File.GetLastWriteTime(namafile), mendapatkan tanggal dan waktu file terakhir kali ditulisi. File.SetCreationTime(namafile, waktu) File.SetLastAccessTime(namafile, waktu) File.SetLastWriteTime(namafile,waktu)

Pengolahan Text File


Pengolahan text file secara Stream dapat menggunakan StreamWriter dan StreamReader dengan metode berikut ini : File.CreateText(namafile), membuat file baru sebagai streamwriter, selanjutnya kita dapat menggunakan metoda Write maupun WriteLine pada streamwriter untuk melakukan penulisan ke file. INDOPROG

62

Bahasa pemrograman VB.NET

Hendra, S.T.

File.OpenText(namafile), membuka file yang telah ada sebagai streamreader, dan selanjutnya kita dapat menggunakan metoda Read, ReadLine, kemudian untuk memeriksa keberadaan data untuk dibaca dapat menggunalan fungsi Peek File.AppendText(namafile), membuka file yang telah ada untuk streamwrite. Contoh :
Option Explicit On Imports System Imports System.IO Public Module ModTextFile Sub Main() Dim sw As StreamWriter = File.CreateText("c:\belajar.txt") sw.WriteLine("Buku Belajar Vb.net") sw.Flush() sw.Close() Dim sr As StreamReader = File.OpenText("c:\belajar.txt") Do While sr.Peek() >= 0 Console.WriteLine(sr.ReadLine()) Loop sr.Close() sw = File.AppendText("C:\belajar.txt") sw.WriteLine("Oleh : Hendra Soewarno") sw.Flush() sw.Close() sr = File.OpenText("c:\belajar.txt") Do While sr.Peek() >= 0 Console.WriteLine(sr.ReadLine()) Loop sr.Close() End Sub End Module

Pengolahan File Binary


Pengolahan BinaryFile secara Stream dapat menggunakan FileStream dengan metode berikut ini : File.Create(namafile), membuat file baru sebagai filestream, anda dapat menggunakan metode Write, WriteByte pada filestream untuk melakukan penulisan ke file. File.OpenRead(namafile), membuka file yang telah ada sebagai filestream, anda dapat menggunakan metoda Read, ReadByte pada filestream untuk melakukan pembacaan dari file. File.OpenWrite(namafile), membuka file yang telah ada sebagai filestream.

INDOPROG

63

Bahasa pemrograman VB.NET

Hendra, S.T.

Membaca dari FileStream


Kita dapat menggunakan metoda read untuk membaca data dari FileStream Terbaca = Fs.Read(buffer,index,count) dimana buffer adalah array dari byte atau karakter, kemudian index adalah posisi index pada array, dan count adalah jumlah byte yang ingin ditulis. Fungsi read akan mengembalikan jumlah byte yang berhasil dibaca (jumlah byte terbaca dapat lebih kecil dari count apabila EOF telah dicapai).

Menulis ke FileStream
Kemudian dapat digunakan metoda write untuk menulis data terhadap FileStream Tertulis = Fs.Write(buffer,index,count)

Menutup FileStream
Anda dapat menggunakan metoda Close untuk menutup FileStream yang terbuka. Fs.Close Contoh Program simulasi perintah copy pada dos:
Option Explicit On Imports System Imports System.IO Public Module ModFS Sub Main(ByVal CmdArgs() As String) Dim Buffer(511) As Byte If CmdArgs.Length < 2 Then Console.WriteLine("Pemakaian : duplikat <fileasal> <filetujuan>") End End If If File.Exists(CmdArgs(0)) Then Dim FSS As FileStream = File.OpenRead(CmdArgs(0)) Dim FST As FileStream = File.Create(CmdArgs(1)) Dim Terbaca As Integer = 0 Dim I As Integer Do Terbaca = FSS.Read(Buffer,0,Buffer.Length()) FST.Write(Buffer,0,Terbaca) Loop Until Terbaca < 512

INDOPROG

64

Bahasa pemrograman VB.NET

Hendra, S.T.

FSS.Close() FST.Close() Else Console.WriteLine("File asal tidak ditemukan !") End If End Sub End Module

Pembukaan File Binary dengan FileStream Constructor


Selain dengan menggunakan File.Create, FileOpenRead, dan FileOpenWrite, kita dapat juga membuka FileStream dengan menggunakan constructor : Syntax : FileStream Constructor(nama file, FileMode, FileAccess, FileShare) Dimana Enumeration member untuk FileMode adalah sebagai berikut :
Append Create CreateNew Open OpenOrCreate Truncate Membuka atau membuat filebaru, dan menempatkan posisi file pointer pada EOF (harus disertai dengan FileAccess.Write) Membuat file baru atau file lama akan ditimpa. Membuat file baru dan akan menyebabkan exception kalau file telah ada Membuka file dan akan menyebabkan exception kalau file belum ada Membuka atau membuat file baru jika belum ada Membuka file dan mengosongkan isi file tersebut

Dan Enumeration member untuk FileAccess adalah sebagai berikut :


Read ReadWrite Write Akses membaca data dari file Akses membaca dan menulis data ke file Akses menulis file

Dan Enumeration member untuk FileShare adalah sebagai berikut :


None Read ReadWrite Write Tidak memungkinkan pembukaan file oleh proses lain (Single User) Multiuser dengan pembatasan proses lain hanya dapat hak membaca Multiuser Multiuser dengan pembatasan proses lain hanya dapat hak menulis

Contoh Program simulasi perintah copy pada dos dengan constructor FileStream:
Option Explicit On Imports System Imports System.IO

INDOPROG

65

Bahasa pemrograman VB.NET


Public Module ModDup Sub Main(ByVal CmdArgs() As String) Dim Buffer(511) As Byte

Hendra, S.T.

If CmdArgs.Length < 2 Then Console.WriteLine("Pemakaian : duplikasi <fileasal> <filetujuan>") End End If If File.Exists(CmdArgs(0)) Then Dim FSS As FileStream = new FileStream(CmdArgs(0), _ FileMode.Open, _ FileAccess.Read) Dim FST As FileStream = new FileStream(CmdArgs(1), _ FileMode.Create, _ FileAccess.Write) Dim Terbaca As Integer = 0 Do Terbaca = FSS.Read(Buffer,0,Buffer.Length()) FST.Write(Buffer,0,Terbaca) Loop Until Terbaca < 512 FSS.Close() FST.Close() Else Console.WriteLine("File asal tidak ditemukan !") End If End Sub End Module

Pengolahan Random File


Secara Stream, Visual Basic tidak menyediakan metoda khusus untuk pengolahan random file untuk penyimpan data Structure, misalnya kita ingin menyimpan data hasil ujian mahasiswa sebagai berikut ini : Nim Nama Tugas Mid Semester

Dimana dapat ditulis sebagai struktur berikut ini :


Structure Ujian <VBFixedString(10)> Public Nim As String <VBFixedString(30)> Public Nama As String Public Tugas,Mid,Semester As Single Public ReadOnly Property RataRata() As Single

INDOPROG

66

Bahasa pemrograman VB.NET


Get Return (Tugas+Mid+Semester)/3 End Get End Property End Structure

Hendra, S.T.

Dan data tersebut diatas ingin kita simpan ke file.

Mendapatkan jumlah Record dalam file


Untuk mendapatkan jumlah record, kita dapat menggunakan ukuran FileStream dibagi dengan ukuran tiap record. Dim Record As Ujian JlhRec = Fs.Length()/Len(Record)

Memindahkan posisi stream pointer


Sesuai dengan istilah random file, tentu saja harus memiliki kemampuan untuk mengakses (membaca/menulis) ke record tertentu secara langsung, untuk keperluan tersebut kita dapat memindahkan posisi stream dengan perintah Seek. Fs.Seek(offset, origin) dimana offset adalah posisi (dalam ukuran byte) yang relatif terhadap SeekOrigin (begin, current, dan end) pada stream. Contoh : Fs.Seek(0,SeekOrigin.Begin) Fs.Seek(10,SeekOrigin.Current) Fs.Seek(-10,SeekOrigin.Current) 'Pindah ke posisi awal steam 'Pindah 10 byte ke belakang dari posisi sekarang 'Pindah 10 byte kedepan dari posisi sekarang

Pada pengolahan random file, kita dapat menggunakan formula berikut untuk menghitung offset pada stream : Offset = (recno 1) * ukuran tiap record Contoh : Fs.Seek((1-1)*Len(Record)) Fs.Seek((10-1)*Len(Record)) INDOPROG 'Pindah ke posisi record 1 'Pindah ke posisi record 10

67

Bahasa pemrograman VB.NET

Hendra, S.T.

Mendapatkan posisi Stream pointer


Untuk mendapatkan posisi Stream dapat digunakan property Position Contoh : Console.WriteLine(Fs.Position) Dan kita dapat menggunakan formula berikut untuk menghitung posisi record Norec = (Posisi Stream / Ukuran tiap record) + 1

Membaca/menulis record ke Stream


Untuk membaca dan menulis data ke stream kita perlu menggunakan BinaryFormatter, karena perintah Read dan Write yang tersedia pada FileStream membutuhkan struktur data array byte. Adapun BinaryFormatter berfungsi melakukan serialize dan deserialize terhadap objek menjadi format binary. Supaya suatu Structure dapat di serialize/deserialize, maka kita perlu menambahkan <Serializble> pada saat deklarasi structure tersebut. Contoh :
<Serializable> Structure Ujian <VBFixedString(10)> Public Nim As String <VBFixedString(30)> Public Nama As String Public Tugas,Mid,Semester As Single Public ReadOnly Property RataRata() As Single Get Return (Tugas+Mid+Semester)/3 End Get End Property End Structure

Untuk menulis ke FileStream, kita dapat menggunakan metoda Serialize pada BinaryFormatter, dan untuk membaca kita dapat menggunakan metoda DeSerialize, Contoh :
Option Explicit On Imports System Imports System.IO Imports Microsoft.VisualBasic Imports System.Runtime.Serialization.Formatters.Binary Public Module ModStruct <Serializable> Structure Ujian <VBFixedString(10)> Public Nim As String <VBFixedString(30)> Public Nama As String Public Tugas,Mid,Semester As Single Public ReadOnly Property RataRata() As Single

INDOPROG

68

Bahasa pemrograman VB.NET


Get Return (Tugas+Mid+Semester)/3 End Get End Property End Structure Dim Dim Dim Dim Jd As Integer = 0 Record As Ujian Ukuran As Integer = Len(Record) Fm As New BinaryFormatter

Hendra, S.T.

Sub Main() Dim Fs As FileStream = new FileStream("c:\ujian.dat",FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None) Record.Nim = "123" Fm.serialize(Fs,Record) 'Menulis record ke FileStream Record.Nim = "234" Fm.serialize(Fs,Record) 'Menulis record ke FileStream Fs.Seek(0,SeekOrigin.Begin) 'Pindah stream ke record 1 Record = Fm.deserialize(Fs) 'Membaca record Console.WriteLine(Record.Nim) Record = Fm.deserialize(Fs) 'Membaca record Console.WriteLine(Record.Nim) Fs.Close() End Sub End Module

Latihan :
1. Buatlah program yang dapat mengkonversi semua huruf dalam text file ke huruf besar. 2. Buatlah program yang dapat menghitung jumlah baris dan kata yang terdapat pada suatu text file. 3. Kembangkan program untuk melakukan enkripsi/dekripsi terhadap fileasal dan menghasilkan filetujuan yang sudah tersandi dengan suatu kata kunci (dengan menggunakan filestream). 4. Buatlah program yang dapat menyimpan data ujian mahasiswa berdasarkan input dari pemakai dalam bentuk record. 5. Buatlah program yang dapat membaca record dari file yang sudah dibuat pada soal nomor 4, dan mencetak kembali dalam bentuk laporan. Jawaban :
Option Explicit On Imports System Imports System.IO Imports Microsoft.VisualBasic Public Module ModFS Sub Main(ByVal CmdArgs() As String)

INDOPROG

69

Bahasa pemrograman VB.NET


Dim Buffer(511) As Byte

Hendra, S.T.

If CmdArgs.Length < 2 Then Console.WriteLine("Pemakaian : en <fileasal> <filetujuan>") End End If If File.Exists(CmdArgs(0)) Then Console.Write("Kata Kunci :") Dim KataKunci As String = Console.ReadLine() Dim Kalimat As String = KataKunci Do While Kalimat.Length() < 512 Kalimat = Kalimat + KataKunci Loop

Dim FSS As FileStream = new FileStream(CmdArgs(0), _ FileMode.Open, _ FileAccess.Read) Dim FST As FileStream = new FileStream(CmdArgs(1), _ FileMode.Create, _ FileAccess.Write) Dim Terbaca As Integer = 0 Dim I As Integer Do Terbaca = FSS.Read(Buffer,0,Buffer.Length()) For I = 0 to Terbaca-1 Buffer(I) = Buffer(I) XOR Asc(Kalimat.Chars(I)) Next I FST.Write(Buffer,0,Terbaca) Loop Until Terbaca < 512 FSS.Close() FST.Close() Else Console.WriteLine("File asal tidak ditemukan !") End If End Sub End Module

INDOPROG

70

Bahasa pemrograman VB.NET

Hendra, S.T.

Try...Catch...Finally Statements
TryCatchFinally merupakan cara baru penanganan error di Visual Basic pada saat runtime, adapun tata penulisannya adalah sebagai berikut :.
Try [ tryStatements ] [ Catch [ exception [ As type ] ] [ When expression ] [ catchStatements ] ] [ Exit Try ] ... [ Finally [ finallyStatements ] ] End Try

Contoh :
Option Explicit On Imports System Imports System.IO Public Module ModFS Sub Main(ByVal CmdArgs() As String) Dim Buffer(511) As Byte If CmdArgs.Length < 2 Then Console.WriteLine("Pemakaian : duplikat <fileasal> <filetujuan>") End End If Dim FSS As FileStream Try FSS = File.OpenRead(CmdArgs(0)) Catch ex As Exception Console.WriteLine("Gagal buka file " + CmdArgs(0)) End End Try Dim FST As FileStream = File.Create(CmdArgs(1)) Dim Terbaca As Integer = 0 Dim I As Integer Do Terbaca = FSS.Read(Buffer,0,Buffer.Length()) FST.Write(Buffer,0,Terbaca) Loop Until Terbaca < 512

INDOPROG

71

Bahasa pemrograman VB.NET

Hendra, S.T.

FSS.Close() FST.Close() End Sub End Module

INDOPROG

72

Bahasa pemrograman VB.NET

Hendra, S.T.

Lampiran 1

Predefined Numeric Formats (Format Function)


Format name General Number, G, or g Currency, C, or c Description Displays number with no thousand separator. Displays number with thousand separator, if appropriate; display two digits to the right of the decimal separator. Output is based on system locale settings. Displays at least one digit to the left and two digits to the right of the decimal separator. Displays number with thousand separator, at least one digit to the left and two digits to the right of the decimal separator. Displays number multiplied by 100 with a percent sign (%) appended immediately to the right; always displays two digits to the right of the decimal separator. Displays number with thousandths separator multiplied by 100 with a percent sign (%) appended to the right and separated by a single space; always displays two digits to the right of the decimal separator. Uses standard scientific notation, providing two significant digits. Uses standard scientific notation, providing six significant digits. Displays number as a string that contains the value of the number in Decimal (base 10) format. This option is supported for integral types (Byte, Short, Integer, Long) only. Displays number as a string that contains the value of the number in Hexadecimal (base 16) format. This option is supported for integral types (Byte, Short, Integer, Long) only. Displays No if number is 0; otherwise, displays Yes.

Fixed, F, or f Standard, N, or n

Percent

P, or p

Scientific E, or e D, or d

X, or x

Yes/No

INDOPROG

73

Bahasa pemrograman VB.NET

Hendra, S.T.

True/False On/Off

Displays False if number is 0; otherwise, displays True. Displays Off if number is 0; otherwise, displays On.

User-Defined Numeric Formats (Format Function)


Character Description None Displays the number with no formatting. (0) Digit placeholder. Displays a digit or a zero. If the expression has a digit in the position where the zero appears in the format string, display it; otherwise, displays a zero in that position. If the number has fewer digits than there are zeros (on either side of the decimal) in the format expression, displays leading or trailing zeros. If the number has more digits to the right of the decimal separator than there are zeros to the right of the decimal separator in the format expression, rounds the number to as many decimal places as there are zeros. If the number has more digits to the left of the decimal separator than there are zeros to the left of the decimal separator in the format expression, displays the extra digits without modification. Digit placeholder. Displays a digit or nothing. If the expression has a digit in the position where the # character appears in the format string, displays it; otherwise, displays nothing in that position. This symbol works like the 0 digit placeholder, except that leading and trailing zeros aren't displayed if the number has fewer digits than there are # characters on either side of the decimal separator in the format expression. Decimal placeholder. The decimal placeholder determines how many digits are displayed to the left and right of the decimal separator. If the format expression contains only # characters to the left of this symbol; numbers smaller than 1 begin with a decimal separator. To display a leading zero displayed with fractional numbers, use zero as the first digit placeholder to the left of the decimal separator. In some locales, a comma is used as the decimal separator. The actual character used as a decimal placeholder in the formatted output depends on the number format recognized by your system. Thus, You should use the period as the decimal placeholder in your formats even if you are in a locale that uses a comma as a decimal placeholder. The formatted string will appear in the format correct for the locale. Percent placeholder. Multiplies the expression by 100. The percent

(#)

(.)

(%) INDOPROG

74

Bahasa pemrograman VB.NET

Hendra, S.T.

(,)

character (%) is inserted in the position where it appears in the format string. Thousand separator. The thousand separator separates thousands from hundreds within a number that has four or more places to the left of the decimal separator. Standard use of the thousand separator is specified if the format contains a thousand separator surrounded by digit placeholders (0 or #). A thousand separator immediately to the left of the decimal separator (whether or not a decimal is specified) or as the rightmost character in the string means "scale the number by dividing it by 1,000, rounding as needed." For example, you can use the format string "##0,." to represent 100 million as 100,000. Numbers smaller than 1,000 but greater or equal to 500 are displayed as 1, and numbers smaller than 500 are displayed as 0. Two adjacent thousand separators in this position scale by a factor of 1 million, and an additional factor of 1,000 for each additional separator.

Multiple separators in any position other than immediately to the left of the decimal separator or the rightmost position in the string are treated simply as specifying the use of a thousand separator. In some locales, a period is used as a thousand separator. The actual character used as the thousand separator in the formatted output depends on the Number Format recognized by your system. Thus, You should use the comma as the thousand separator in your formats even if you are in a locale that uses a period as a thousand separator. The formatted string will appear in the format correct for the locale. (:) Time separator. In some locales, other characters may be used to represent the time separator. The time separator separates hours, minutes, and seconds when time values are formatted. The actual character used as the time separator in formatted output is determined by your system settings. (/) Date separator. In some locales, other characters may be used to represent the date separator. The date separator separates the day, month, and year when date values are formatted. The actual character used as the date separator in formatted output is determined by your system settings. (E- E+ e- e+) Scientific format. If the format expression contains at least one digit placeholder (0 or #) to the left of E-, E+, e-, or e+, the number is displayed in scientific format and E or e is inserted between the number and its exponent. The number of digit placeholders to the left determines the number of digits in the exponent. Use E- or e- to place a minus sign next to negative exponents. Use E+ or e+ to place a minus sign next to negative exponents and a plus sign next to positive exponents. You must also include digit placeholders to the right of this symbol to get correct formatting. -+$() Literal characters. These characters are displayed exactly as typed in the format string. To display a character other than one of those listed,

INDOPROG

75

Bahasa pemrograman VB.NET

Hendra, S.T.

(\)

precede it with a backslash (\) or enclose it in double quotation marks (" "). Displays the next character in the format string. To display a character that has special meaning as a literal character, precede it with a backslash (\). The backslash itself isn't displayed. Using a backslash is the same as enclosing the next character in double quotation marks. To display a backslash, use two backslashes (\\). Examples of characters that can't be displayed as literal characters are the date-formatting and time-formatting characters (a, c, d, h, m, n, p, q, s, t, w, y, /, and :), the numeric-formatting characters (#, 0, %, E, e, comma, and period), and the string-formatting characters (@, &, <, >, and !). Displays the string inside the double quotation marks (" "). To include a string in the style argument from within code, you must use Chr(34) to enclose the text (34 is the character code for a quotation mark (")).

("ABC")

Example The following table contains some sample format expressions for numbers. (These examples all assume that your system's locale setting is English-U.S.) The first column contains the format strings for the Style argument of the Format function; the other columns contain the resulting output if the formatted data has the value given in the column headings. Format (Style)
Zero-length string ("") 0 0.00 #,##0 $#,##0;($#,##0) $#,##0.00; ($#,##0.00) 0% 0.00% 0.00E+00 0.00E-00 5 5 5.00 5 $5 $5.00 500% 500.00% 5.00E+00 5.00E00

"5" formatted as

"-5" formatted as "0.5" formatted as


-5 -5 -5.00 -5 ($5) ($5.00) -500% -500.00% -5.00E+00 -5.00E00 0.5 1 0.50 1 $1 $0.50 50% 50.00% 5.00E-01 5.00E-01

Predefined Date/Time Formats (Format Function)


Format Name Description General Date, or Displays a date and/or time. For real numbers, display a date and

INDOPROG

76

Bahasa pemrograman VB.NET

Hendra, S.T.

Long Date, or D Medium Date Short Date, or d Long Time, or T Medium Time Short Time, or t F F G M, m R, r S U U Y, y

time; for example, 4/3/93 05:34 PM.If there is no fractional part, display only a date, for example, 4/3/93. If there is no integer part, display time only, for example, 05:34 PM. Date display is determined by your system's LocaleID value. Displays a date according to your locale's long date format. Displays a date using the medium date format appropriate for the language version of the host application. Displays a date using your locale's short date format. Displays a time using your locale's long time format; includes hours, minutes, seconds. Displays time in 12-hour format using hours and minutes and the AM/PM designator. Displays a time using the 24-hour format, for example, 17:45. Displays the long date and short time according to your locale's format. Displays the long date and long time according to your locale's format. Displays the short date and short time according to your locale's format. Displays the month and the day of a date. Formats the date and time as Greenwich Mean Time (GMT) Formats the date and time as a sortable index. Formats the date and time as a GMT sortable index. Formats the date and time with the long date and long time as GMT. Formats the date as the year and month.

User-Defined Date/Time Formats (Format Function)


Character Description (:) Time separator. In some locales, other characters may be used to represent the time separator. The time separator separates hours, minutes, and seconds when time values are formatted. The actual character used as the time separator in formatted output is determined by your system's LocaleID value. (/) Date separator. In some locales, other characters may be used to represent the date separator. The date separator separates the day, month, and year when date values are formatted. The actual character used as the date separator in formatted output is determined by your locale. (%) Used to indicate that the following character should be read as a singleletter format without regard to any trailing letters. Also used to indicate INDOPROG

77

Bahasa pemrograman VB.NET

Hendra, S.T.

d dd ddd dddd M

MM MMM MMMM gg h

hh H

HH m

mm s

ss F

that a single-letter format is read as a user-defined format. See below for further details Displays the day as a number without a leading zero (for example, 1). Use %d if this is the only character in your user-defined numeric format. Displays the day as a number with a leading zero (for example, 01). Displays the day as an abbreviation (for example, Sun). Displays the day as a full name (for example, Sunday). Displays the month as a number without a leading zero (for example, January is represented as 1). Use %M if this is the only character in your user-defined numeric format. Displays the month as a number with a leading zero (for example, 01/12/01). Displays the month as an abbreviation (for example, Jan). Displays the month as a full month name (for example, January). Displays the period/era string (for example, A.D.) Displays the hour as a number without leading zeros using the 12-hour clock (for example, 1:15:15 PM). Use %h if this is the only character in your user-defined numeric format. Displays the hour as a number with leading zeros using the 12-hour clock (for example, 01:15:15 PM). Displays the hour as a number without leading zeros using the 24-hour clock (for example, 1:15:15). Use %H if this is the only character in your user-defined numeric format. Displays the hour as a number with leading zeros using the 24-hour clock (for example, 01:15:15). Displays the minute as a number without leading zeros (for example, 12:1:15). Use %m if this is the only character in your user-defined numeric format. Displays the minute as a number with leading zeros (for example, 12:01:15). Displays the second as a number without leading zeros (for example, 12:15:5). Use %s if this is the only character in your user-defined numeric format. Displays the second as a number with leading zeros (for example, 12:15:05). Displays fractions of seconds. For example ff will display hundredths of seconds, whereas ffff will display ten-thousandths of seconds. You may use up to seven f symbols in your user-defined format. Use %f if this is the only character in your user-defined numeric format. Uses the 12-hour clock and displays an uppercase A for any hour before noon; displays an uppercase P for any hour between noon and 11:59 P.M. Use %t if this is the only character in your user-defined numeric format.

INDOPROG

78

Bahasa pemrograman VB.NET

Hendra, S.T.

tt

y yy yyy yyyy z zz zzz Example

Uses the 12-hour clock and displays an uppercase AM with any hour before noon; displays an uppercase PM with any hour between noon and 11:59 P.M. Displays the year number (0-9) without leading zeros. Use %y if this is the only character in your user-defined numeric format. Displays the year in two-digit numeric format with a leading zero, if applicable. Displays the year in four digit numeric format. Displays the year in four digit numeric format. Displays the timezone offset without a leading zero (for example, -8). Use %z if this is the only character in your user-defined numeric format. Displays the timezone offset with a leading zero (for example, -08) Displays the full timezone offset (for example, -08:00)

The following are examples of user-defined date and time formats for December 7, 1958, 8:50 PM, 35 seconds: Format Displays

M/d/yy 12/7/58 d-MMM 7-Dec d-MMMM-yy 7-December-58 d MMMM 7 December MMMM yy December 58 hh:mm tt 08:50 PM h:mm:ss t 8:50:35 P H:mm 20:50 H:mm:ss 20:50:35 M/d/yyyy H:mm 12/7/1958 20:50

INDOPROG

79

Bahasa pemrograman VB.NET

Hendra, S.T.

Daftar Pustaka .NET Framework SDK documentation, Microsoft Corporation

INDOPROG

80

Pemrograman Form pada VB.NET

Hendra, S.T.

Pemrograman Form pada VB.Net


Oleh : Hendra, ST.

Buku ini membahas tentang pembuatan program Windows Form dengan bahasa pemrograman Visual Basic .Net, dan ditujukan kepada siapa saja yang serius untuk mempelajari pembuatan form dan control dengan VB.NET secara koding (tanpa menggunakan fasilitas designer pada Visual Studio .NET). Bagi anda yang belum mengenal bahasa pemrograman VB.NET sebaiknya memulai proses belajar dengan buku Bahasa Pemrograman VB.NET. Untuk mempelajari buku ini anda tidak perlu menginstalasi Visual Studio .NET, tetapi anda cukup menginstalasi .Net Framework yang dapat didownload secara gratis dari website Microsoft. Semua contoh dan latihan dibuku ini dapat dikompilasi langsung dari Dos prompt dengan menggunakan kompiler Visual Basic yang langsung tersedia setelah anda menginstalasi .Net Framework. Dibandingkan dengan Visual Basic 6.0, maka VB.NET adalah benar-benar bahasa pemrograman, dimana pembuatan form dan control dapat dilakukan secara koding 100%, sedangkan pada Visual Basic 6.0 hal tersebut tidak dimungkinkan.

INDOPROG

Pemrograman Form pada VB.NET

Hendra, S.T.

Program Windows Form


Windows Forms merupakan platform pada .NET Framework untuk pengembangan program aplikasi yang berbasis Form pada Windows. Framework ini menyediakan berbagai class-class yang jelas, berorientasi objek, dan dapat dikembangkan, Windows Forms dapat bertindak sebagai interface local pada solusi client server maupun multi-tier terdistribusi. Catatan : Pada VB.NET, kita dapat melakukan pemrograman form tanpa menggunakan fasilitas designer sama sekali dan tentu saja cara ini cukup menyulitkan bagi programmer VB yang sudah terbiasa menggunakan IDE. Sebenarnya fasilitas IDE berbasis .NET dapat diperoleh dengan menginstalasi Visual Studio.NET, dan tentu saja membutuhkan suatu investasi yang besar untuk mempelajari bahasa pemrograman ini bagi mahasiswa maupun kalangan perguruan tinggi. Tutorial ini menggunakan pendekatan koding langsung yang dapat dilakukan dengan notepad maupun edit, dan hasil koding dapat dikompilasi dengan compiler Visual Basic yang tersedia begitu kita menginstalasi Microsoft .NET Framework yang dapat didownload gratis di situs Microsoft. Penulis yakin proses pembelajaran dengan pendekatan koding merupakan langkah yang sangat tepat untuk membawa anda menjadi professional yang menguasai VB.NET secara mendalam dan mengendalikan secara penuh program aplikasi anda.

Apa itu form ?


Form merupakan interface antara program dengan pemakai untuk proses input output. Pada Windows, form dapat berupa :

single-document interface (SDI) multiple-document interface (MDI) Explorer-style interface

Salah satu contoh dari interface SDI adalah aplikasi WordPad. Adapun program aplikasi Windows yang berbasis pada form yang paling sederhana adalah :
Option Explicit On Imports System Public Module MyModule

INDOPROG

Pemrograman Form pada VB.NET


Dim Form1 As New System.Windows.Forms.Form Sub Main() Form1.Text = "Belajar Buat Form" Form1.ShowDialog() End Sub End Module 'untuk title form 'form modal

Hendra, S.T.

Proses Kompilasi
Kemudian simpan dengan nama form.vb anda dapat melakukan kompilasi dengan perintah : Vbc <namafile> /r:System.dll /r:System.Windows.Forms.dll /r:System.Drawing.dll Contoh : Vbc form.vb /r:System.dll /r:System.Windows.Forms.dll Selanjutnya anda dapat menjalankannya sebagaimana program Windows dan menghasilkan tampilan berikut :

Membuat Form senantiasa diatas form lain


Form yang senantiasa berada diatas form lain maksudnya adalah form yang tidak dapat ditimpa oleh form lain diatas layar. Form-form sejenis ini biasanya digunakan pada aplikasi screen saver maupun aplikasi security untuk mengunci layar seperti pada Billing System pada warna, maupun program pada Front Desk, maupun POS untuk mencegah pemakai beralih ke layar lain.
Option Explicit On Imports System Public Module MyModule Dim Form1 As New System.Windows.Forms.Form Sub Main() Form1.Text = "Form ini senantiasa diatas form lainnya" Form1.TopMost = True Form1.ShowDialog() End Sub End Module

Membuat Form transparan


Kita dapat menggunakan properties Opacity yang dapat diset antara nilai double 0.0 (paling transparan) s/d 1.0

INDOPROG

Pemrograman Form pada VB.NET

Hendra, S.T.

Option Explicit On Imports System Imports System.Threading Public Module MyModule Dim Form1 As New System.Windows.Forms.Form Sub Main() Form1.Text = "Form ini Form1.Show() For I As Double = 1 To Form1.Opacity = I Form1.Refresh() Thread.Sleep(100) Next I End Sub End Module akan semakin transparan" 0 Step -0.01 'refresh form dengan setting baru 'memperlambat program 100 millidetik

Menampilkan Form Modal dan Modeless


Form Modal harus ditutup atau hidden sebelum program berikutnya dijalankan, sedangkan pada Modeless program akan dilanjutkan setelah form ditampilkan. Biasanya form Modal digunakan untuk menampilkan dialog box yang membutuhkan perhatian pemakai dan proses tidak boleh dialihkan sebelum mendapatkan keputusan dari pemakai. Untuk form Modal dapat digunakan metoda ShowDialog(), sedangkan untuk form Modeless dapat digunakan metoda Show().

Mengatur border pada form


Ada beberapa model border yang dapat diset pada properti FormBorderStyle, berikut ini adalah beberapa enumerasi pada FormBorderStyle.
Setting None Fixed3D FixedDialog FixedSingle FixedToolWindow Sizable Description Tidak ada border, biasanya digunakan untuk splash screen Menggunakan efek tiga dimensi. Ukuran form tidak dapat diubah. Dapat diikuti oleh tombol control-menu box, title bar, Maximize dan Minimize pada title bar. Digunakan untuk fixedDialog Tidak dapat diubah ukurannya Digunakan untuk tool windows, dan form tidak ditampilkan pada task bar Form default

SizableToolWindow Tools windows yang dapat diubah ukurannya

Option Explicit On Imports System Public Module MyModule Dim Form1 As New System.Windows.Forms.Form

INDOPROG

Pemrograman Form pada VB.NET

Hendra, S.T.

Sub Main() Form1.Text = "Form ini menggunakan border fixed 3D" Form1.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog Form1.ShowDialog() End Sub End Module

Kita dapat juga mengatur keberadaan button maximize dan minimize, dengan properti MinimizeBox dan MaximizeBox, contoh :
Option Explicit On Imports System Public Module MyModule Dim Form1 As New System.Windows.Forms.Form Sub Main() Form1.Text = "Form ini tanpa tombol Maximize dan Minimize" Form1.MinimizeBox = False Form1.MaximizeBox = False Form1.ShowDialog() End Sub End Module

Mengatur ukuran form


Untuk mengubah ukuran form pada saat runtime dapat menggunakan properti Height, dan Width, misalnya kita ingin mengubah ukuran form menjadi 500 x 500 pixel, Contoh :
Option Explicit On Imports System Public Module MyModule Dim Form1 As New System.Windows.Forms.Form Sub Main() Form1.Text = "Form ini berukuran 500 x 500 pixel" Form1.Width = 500 Form1.Height = 500 Form1.ShowDialog() End Sub End Module

Catatan : Jika kita tidak menentukan ukuran form, maka default suatu form adalah 300 x 300 pixel

INDOPROG

Pemrograman Form pada VB.NET

Hendra, S.T.

Ukuran form juga tergantung pada setting properti WindowState, yang mana dapat diset dengan enumerasi dari FormWindowState berikut :
Member name Maximized Minimized Normal Description Jendela maximized. Jendela minimize Jendela default

Option Explicit On Imports System Public Module MyModule Dim Form1 As New System.Windows.Forms.Form Sub Main() Form1.Text = "Form ini dalam state Maximize" Form1.WindowState = System.Windows.Forms.FormWindowState.Maximized Form1.ShowDialog() End Sub End Module

Mengatur lokasi form di layar


Untuk menentukan posisi form dilayar dapat digunakan properti Left, dan Top, serta StartPosition, contoh:
Option Explicit On Imports System Public Module MyModule Dim Form1 As New System.Windows.Forms.Form Sub Main() Form1.Text = "Form ini berada di posisi 0,0" Form1.Top = 0 Form1.Left = 0 Form1.ShowDialog() End Sub End Module Sedangkankan untuk pemakaian properti StartPosition kita dapat menggunakan enumerasi FormStartPosition sebagai berikut :
Member name CenterParent CenterScreen Manual WindowsDefaultBounds Description The form is centered within the bounds of its parent form. The form is centered on the current display, and has the dimensions specified in the form's size. The position of the form is determined by the Location property. The form is positioned at the Windows default location and has the bounds

INDOPROG

Pemrograman Form pada VB.NET

Hendra, S.T.

determined by Windows default. WindowsDefaultLocation The form is positioned at the Windows default location and has the dimensions specified in the form's size.

Contoh : Option Explicit On Imports System Public Module MyModule Dim Form1 As New System.Windows.Forms.Form Sub Main() Form1.Text = "Form ini berada ditengah layar" Form1.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen Form1.ShowDialog() End Sub End Module

Latihan :
Buatlah program aplikasi windows yang dapatkan menampilkan form dengan ketentuan sebagai berikut : 1. Judul Form : Form saya yang pertama 2. Ukuran : 450 x 450 pixel 3. Berada diposisi : 200,200 4. Bingkai : Fixed Single 5. Opacity : 0.5 Modifikasi program diatas untuk menampilkan form tersebut ditengah layar.

INDOPROG

Pemrograman Form pada VB.NET

Hendra, S.T.

OOP pada program Windows Form


Adapun teknik lain yang dapat digunakan untuk pembuatan program Windows Form adalah dengan pendekatan OOP, dimana kita membangun class baru yang di inherit dari System.Windows.Forms.Form, contoh :
Option Explicit On Imports System Public Class MyForm Inherits System.Windows.Forms.Form <System.STAThread()> _ Public Shared Sub Main() System.Windows.Forms.Application.Run(New MyForm) End Sub End Class

Pada program sebelumnya, kita senantiasa menggunakan Form1.ShowDialog() untuk menampilkan Form1 secara modal, sedangkan kalau kita menggunakan Form1.Show(), form hanya ditampilkan sebentar kemudian hilang karena program aplikasi kita segera berakhir sesaat setelah Form1 ditampilkan, dan konsekuensinya Form1 juga dibuang dari memori. Sedangkan perintah System.Windows.Forms.Application.Run(New MyForm), akan mengatur message dari sistem operasi ke program aplikasi, jika program anda tidak mencantumkan baris ini, maka program dapat dikompilasi dan dijalankan tanpa menghasilkan apa-apa. Catatan : Inheritance adalah salah satu ciri-ciri dari pemrograman berorientasi objek. Sebagaimana kita ketahui bahwa Class Form telah tersedia pada .NET terdefinisi pada namespace System.Windows.Forms. Selanjutnya jika kita membuat class baru dengan melakukan inherit dari class Form, maka secara otomatis akan mewarisi semua property, metoda, dan event yang sifatnya protected dan public pada class Form. Jadi kita tidak perlu perlu menulis ulang semua prilaku pada class baru, melainkan cukup melakukan inherit dari parent class yang secara otomatis akan mewariskan semua prilakunya ke child class. Inheritance Salah satu keunggulan dari OOP adalah isu pemanfaatan kembali. Dengan inheritance

INDOPROG

Pemrograman Form pada VB.NET

Hendra, S.T.

tugas pemrograman dapat dipemudah. Suatu class yang telah dikembangkan dapat diperbaharui dengan mengembangkan child class (sub class) yang merupakan inheritance dari parent class (super class). Inheritance menyerupai pengembangan produk baru pada suatu perusahaan, dimana engineer tidak perlu membuat produk baru dari awal, tetapi dengan mengacu pada produk yang telah ada, dan dilakukan penambahan dan perbaikan.

Mengatur setting Form dengan Constructor


Untuk pengaturan setting Form, kita dapat membuat suatu Constructor bagi Class MyForm. Constructor adalah metoda khusus suatu Class yang akan otomatis dijalankan begitu instance dari Class dibuat dimemori komputer. Catatan : Perintah New MyForm adalah membuat instance dari Class MyForm. Dalam OOP istilah Class sering dicampuradukan dengan Objek, pada hal sebenarnya Class merupakan cetak biru dari Objek.

Hubungan antara Object dan Class Object merupakan instance dari Class, beberapa object dapat berasal dari Class yang sama, tetapi memiliki properti yang berbeda-beda (dengan bahasa yang lebih sederhana dapat dikatakan bahwa class merupakan blue print dari objek-objek).

Misalnya dalam membangun rumah, maka sebelumnya dilakukan rancangan awal dengan mengambarkan detail dari rumah serta ukuran-ukurannya, kemudian oleh pengembang akan dibangun rumah-rumah yang nyata berdasarkan blue print tersebut. Pada pembuatan program OOP, dimulai dengan pembuatan Class, dan pada saat runtime akan dibuat instance dari Class sebagai Objek, jadi program tersebut berjalan sebagai objek-objek dimemori komputer. Pada Visual Basic, constructor untuk suatu Class ciptaan dapat menggunakan Public Sub New. Contoh :
Option Explicit On Imports System

INDOPROG

Pemrograman Form pada VB.NET

Hendra, S.T.

Public Class MyForm Inherits System.Windows.Forms.Form <System.STAThread()> _ Public Shared Sub Main() System.Windows.Forms.Application.Run(New MyForm) End Sub Public Sub New() Me.Text = "Dengan pendekatan OOP" End Sub End Class 'Constructor

Catatan : Konstruktor merupakan metode khusus pada class, dimana metoda ini otomatis akan dijalankan oleh computer sesaat instance dari class dibuat, misalnya (New MyForm):
System.Windows.Forms.Application.Run(New MyForm)

Pada dunia nyata, setiap objek mengalami kelahiran dan kematian, contoh sebuah rumah mengalai tahap pembuatan (pembangunan) dan akhirnya akan diruntuhkan demikian juga manusia juga mengalami kelahiran dan kematian, pada saat seorang bagi dilahirkan, maka akan membawa property seperti jenis kelamin, berat badan, dan panjang. Sebagaimana objek pada dunia nyata, objek dikomputer pada saat dibuat, tentu saja ada property-properti tertentu yang perlu disetting nilai awalnya, dan hal tersebut dapat dilakukan dengan membuat konstruktor untuk class tersebut.

INDOPROG

10

Pemrograman Form pada VB.NET

Hendra, S.T.

Penanganan Event pada form


Salah satu ciri dari pemrograman pada windows adalah bagaimana menangani event yang dibangkitan oleh sistem operasi dan aplikasi berdasarkan aksi yang dilakukan oleh pemakai terhadap form, misalnya melakukan klik pada mouse, ataupun penekanan tombol.

Event pada Form


Event Activated GotFocus Load Resize Move LostFocus Closing Closed Deactivate Terjadi pada saat Terjadi ketika form diaktifkan Terjadi ketika kontrol mendapatkan focus Terjadi ketika form ditampilkan untuk pertama kali Terjadi ketika kontrol mengalami perubahan ukuran Terjadi ketika kontrol berpindah Terjadi ketika kontrol kehilangan fokus Terjadi ketika form akan ditutup Terjadi ketika form ditutup Terjadi ketika form kehilangan keaktifan Argumen EventHandle EventHandle EventHandle EventHandle EventHandle EventHandle CancelEventHandle EventHandle EventHandle

Catatan : Penanganan Event menjadi salah satu permasalahan yang dihadapi pemrograman yang mengembangkan aplikasi mereka di lingkungan Windows, sebagaimana kita ketahui bahwa Windows merupakan system operasi multitasking yang mana komunikasi antara program aplikasi dengan system operasi dilakukan berdasarkan message. Pada lingkungan multitasking, berbagai aksi yang dilakukan oleh pemakai pada system operasi dapat mempengaruhi proses pada program kita, seperti klik pada mouse, penekanan pada tombol. Jika anda berasal dari pemrograman lingkungan DOS yang mana proses program berjalan berdasarkan alur yang kita buat dari baris awal sampai baris terakhir, tentu saja akan mengalami kesulitan untuk beralih ke pemrograman Windows dengan cepat, sebab program di Windows berjalan berdasarkan Event. Tetapi saya yakin dengan latihan yang intensif anda dapat dengan segera menyesuaikan diri.

System.EventHandle
Adapun tata cara penulisan event procedure untuk event yang menggunakan EventHandle adalahs sebagai berikut :
Private Sub NamaKontrol_NamaEvent(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.NamaEvent

INDOPROG

11

Pemrograman Form pada VB.NET

Hendra, S.T.

System.ComponentModel.CancelEventArgs
Private Sub Form_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing

Pada CancelEventArgs tersedia properti Cancel yang dapat diset ke nilai True/False dengan tujuan proses Closing dilanjutkan atau dibatalkan. Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Class MyForm Inherits System.Windows.Forms.Form Dim CatatEvent As String <System.STAThread()> _ Public Shared Sub Main() System.Windows.Forms.Application.Run(New MyForm) End Sub Public Sub New() Me.Text = "Mencoba Event pada Form" End Sub 'Constructor

Private Sub MyForm_Load(sender as Object, e As System.EventArgs) Handles MyBase.Load CatatEvent = "Terjadi Load" & vbCrlf End Sub Private Sub MyForm_Activated(sender as Object, e As System.EventArgs) Handles MyBase.Activated CatatEvent = CatatEvent & "Terjadi Activate" & vbCrlf End Sub Private Sub MyForm_GotFocus(sender as Object, e As System.EventArgs) Handles MyBase.GotFocus CatatEvent = CatatEvent & "Terjadi GotFocus" & vbcrlf End Sub Private Sub MyForm_Move(sender as Object, e As System.EventArgs) Handles MyBase.Move CatatEvent = CatatEvent & "Terjadi Move" & vbcrlf End Sub Private Sub MyForm_Resize(sender as Object, e As System.EventArgs) Handles MyBase.Resize CatatEvent = CatatEvent & "Terjadi Resize" & vbcrlf End Sub Private Sub MyForm_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing

INDOPROG

12

Pemrograman Form pada VB.NET


CatatEvent = CatatEvent & "Terjadi Closing" & vbCrlf e.Cancel = False End Sub Private Sub MyForm_Deactivate(sender as Object, e As System.EventArgs) Handles MyBase.Deactivate CatatEvent = CatatEvent & "Terjadi Deactivate" & vbCrlf Msgbox(CatatEvent) End Sub Private Sub MyForm_LostFocus(sender as Object, e As System.EventArgs) Handles MyBase.LostFocus CatatEvent = CatatEvent & "Terjadi LostFocus" & vbCrlf End Sub

Hendra, S.T.

Private Sub MyForm_Closed(sender as Object, e As System.EventArgs) Handles MyBase.Closed CatatEvent = CatatEvent & "Terjadi Closed" & vbCrlf End Sub End Class

Dimana kalau program dijalankan dan kemudian ditutup akan menampilkan kotak pesan yang berisi urutan event yang terjadi pada form mulai dari program dijalankan sampai ditutup.

Event pada Mouse


Event pada Mouse dibangkitkan pada saat pemakai melakukan aktifitas mouse terhadap form. Sesuai dengan urutan kejadiaannya adalah sebagai berikut :
Event MouseEnter MouseMove MouseHover MouseDown MouseWheel Click DoubleClick MouseUp MouseLeave Terjadi pada saat mouse pointer memasuki control mouse pointer bergerak diatas control mouse pointer melewati control penekanan button mouse diatas control pergerakan wheel pada mouse diatas control yang sedang focus Klik pada control Double klik pada control pelepasan button mouse diatas control Mouse meninggalkan control Argumen EventHandle MouseEventHandle EventHandle MouseEventHandle MouseEventHandle EventHandle EventHandle MouseEventHandle EventHandle

Dalam tata cara penulisan event procedure untuk event mouse terbagi atas dua jenis argumen yang dikirim ke procedure, yaitu EventHandle, dan MouseEventHandle.

INDOPROG

13

Pemrograman Form pada VB.NET

Hendra, S.T.

System.EventHandle
Adapun tata cara penulisan event procedure untuk event yang menggunakan EventHandle adalahs sebagai berikut :
Private Sub NamaKontrol_NamaEvent(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.NamaEvent

Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Class MyForm Inherits System.Windows.Forms.Form <System.STAThread()> _ Public Shared Sub Main() System.Windows.Forms.Application.EnableVisualStyles() System.Windows.Forms.Application.Run(New MyForm) End Sub Public Sub New() Me.Text = "Dengan pendekatan OOP" End Sub 'Constructor

Private Sub MyForm_MouseEnter(sender as Object, e As System.EventArgs) Handles MyBase.MouseEnter Msgbox("Terjadi Event MouseEnter") End Sub End Class

System.Windows.Forms.Form.MouseEventHandle
Adapun tata cara penulisan event procedure untuk event yang menggunakan MouseEventHandle adalah sebagai berikut :
Private Sub NamaKontrol_NamaEvent(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.NamaEvent

Informasi yang dapat diperoleh dari MouseEventHandle :


Property Button Clicks Delta X Y Description Mendapatkan tombol mouse yang ditekan (None, Left, Middle, Right, Xbutton1, Xbutton2) Mendapatkan jumlah klik Mendapatkan jumlah rotasi roda mouse Mendapatkan koordinat X mouse Mendapatkan koordinat Y mouse

Contoh :

INDOPROG

14

Pemrograman Form pada VB.NET


Option Explicit On Imports System Imports Microsoft.VisualBasic Public Class MyForm Inherits System.Windows.Forms.Form <System.STAThread()> _ Public Shared Sub Main() System.Windows.Forms.Application.EnableVisualStyles() System.Windows.Forms.Application.Run(New MyForm) End Sub Public Sub New() Me.Text = "Dengan pendekatan OOP" End Sub 'Constructor

Hendra, S.T.

Private Sub MyForm_MouseDown(sender as Object, e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown Msgbox("Terjadi Event MouseDown pada " & e.x.tostring() & "," &e.y.tostring()) End Sub End Class

Kalau kita menekan button mouse diatas MyForm, maka msgbox berikut akan ditampilkan.

Event pada Keyboard


Event pada keyboard terjadi pada saat pemakaian melakukan aksi penekanan tombol terhadap form, dan urutan event keyboard adalah sebagai berikut :
Event KeyDown KeyPressed KeyUp Terjadi pada saat Tombol ditekan ke bawah Tombol ditekan Tombol dilepas Argumen KeyEventHandle KeyPressEventHandle KeyEventHandle

System.Windows.Forms.KeyEventHandle
Adapun tata cara penulisan event procedure untuk event yang menggunakan KeyEventHandle adalah sebagai berikut :
Private Sub NamaKontrol_NamaEvent(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.NamaEvent

INDOPROG

15

Pemrograman Form pada VB.NET

Hendra, S.T.

Informasi yang dapat diperoleh dari KeyEventArgs


Property Alt Control Handled KeyCode KeyData KeyValue Modifiers Shift Description Mendapatkan apakah tombol ALT ada ditekan atau tidak Mendapatkan apakah tombol CTRL ada ditekan atau tidak Mendapatkan apakah event telah terhandle Mendapatkan key code Mendapatkan key data Mendapatkan keybiard value Medapatkan flag modifier apakah event mouse disertai dengan kombinasi tombol (CTRL, SHIFT, and ALT) Mendapatkan apakah tombol shift ditekan

Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Class MyForm Inherits System.Windows.Forms.Form <System.STAThread()> _ Public Shared Sub Main() System.Windows.Forms.Application.Run(New MyForm) End Sub Public Sub New() Me.Text = "Dengan pendekatan OOP" End Sub 'Constructor

Private Sub MyForm_KeyDown(sender as Object, e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown Msgbox("Nilai Alt " & e.Alt & vbCrLf & _ "Nilai Control " & e.Control & vbCrLf & _ "Nilai Handle " & e.Handled & vbCrLf & _ "Nilai KeyCode " & e.KeyCode & vbCrLf & _ "Nilai KeyValue " & e.KeyValue & vbCrLf & _ "Nilai Modifiers " & e.Modifiers & vbCrLf & _ "Nilai Shift " & e.Shift) End Sub End Class

Yang kalau kita tekan spasi akan menghasilkan msgbox berikut :

INDOPROG

16

Pemrograman Form pada VB.NET

Hendra, S.T.

System.Windows.Forms.KeyPressEventHandle
Adapun tata cara penulisan event procedure untuk event yang menggunakan KeyPressEventHandle adalah sebagai berikut :
Private Sub NamaKontrol_NamaEvent(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.NamaEvent

Informasi yang dapat diperoleh dari KeyEventArgs


Property Handled KeyChar Description Mendapatkan apakah event telah dihandle Mendapatkan karakter yang ditekan

Option Explicit On Imports System Imports Microsoft.VisualBasic Public Class MyForm Inherits System.Windows.Forms.Form <System.STAThread()> _ Public Shared Sub Main() System.Windows.Forms.Application.Run(New MyForm) End Sub Public Sub New() Me.Text = "Dengan pendekatan OOP" End Sub 'Constructor

Private Sub MyForm_KeyPress(sender as Object, e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress Msgbox("Nilai Handle " & e.Handled & vbCrLf & _ "Nilai KeyChar " & e.KeyChar & vbCrLf) End Sub End Class

INDOPROG

17

Pemrograman Form pada VB.NET

Hendra, S.T.

INDOPROG

18

Pemrograman Form pada VB.NET

Hendra, S.T.

Menempatkan kontrol diatas form


Membuat Label
Berikut ini adalah koding untuk menempatkan sebuah label diatas form
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Class MyForm Inherits System.Windows.Forms.Form Dim CatatEvent As String <System.STAThread()> _ Public Shared Sub Main() System.Windows.Forms.Application.Run(New MyForm) End Sub Dim MyLabel As New System.Windows.Forms.Label 'Deklarasi

Public Sub New() 'Constructor Me.Text = "Membuat kontrol pada Form" MyLabel.Text = "Ini adalah Label" MyLabel.Location = New System.Drawing.Point(100,100) 'Lokasi Me.Controls.Add(MyLabel) End Sub End Class

Membuat Textbox
Berikut ini adalah koding untuk menempatkan sebuah textbox diatas form INDOPROG

19

Pemrograman Form pada VB.NET

Hendra, S.T.

Option Explicit On Imports System Imports Microsoft.VisualBasic Public Class MyForm Inherits System.Windows.Forms.Form Dim CatatEvent As String <System.STAThread()> _ Public Shared Sub Main() System.Windows.Forms.Application.Run(New MyForm) End Sub Dim MyText As New System.Windows.Forms.Textbox 'Deklarasi

Public Sub New() 'Constructor Me.Text = "Membuat kontrol pada Form" MyText.Text = "Ini adalah Textbox" MyText.Location = New System.Drawing.Point(100,100) 'Lokasi MyText.Size = New System.Drawing.Size(140,250) 'Ukuran Me.Controls.Add(MyText) End Sub End Class

Validasi pada textbox


Untuk melakukan validasi terhadap input yang dilakukan oleh pemakai pada textbox kita dapat menggunakan event validating.

INDOPROG

20

Pemrograman Form pada VB.NET

Hendra, S.T.

Untuk menggunakan event pada kontrol, kita perlu mendeklarasikan variabel kontrol beserta WithEvents.
Private Sub NamaTextBox_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles NamaTextbox.Validating

Contoh :
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Class MyForm Inherits System.Windows.Forms.Form Dim CatatEvent As String <System.STAThread()> _ Public Shared Sub Main() System.Windows.Forms.Application.EnableVisualStyles() System.Windows.Forms.Application.Run(New MyForm) End Sub Dim WithEvents MyText As New System.Windows.Forms.Textbox Public Sub New() 'Constructor Me.Text = "Membuat kontrol pada Form" MyText.Text = "Ini adalah Textbox" MyText.Location = New System.Drawing.Point(100,100) MyText.Size = New System.Drawing.Size(140,250) Me.Controls.Add(MyText) End Sub Private Sub MyText_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyText.Validating Msgbox("Panjang Text : " & MyText.Text.Length()) End Sub End Class

Membuat button
Option Explicit On Imports System Imports Microsoft.VisualBasic Public Class MyForm Inherits System.Windows.Forms.Form Dim CatatEvent As String <System.STAThread()> _ Public Shared Sub Main() System.Windows.Forms.Application.Run(New MyForm) End Sub

INDOPROG

21

Pemrograman Form pada VB.NET

Hendra, S.T.

Dim MyButton As New System.Windows.Forms.Button

'Deklarasi

Public Sub New() 'Constructor Me.Text = "Membuat kontrol pada Form" MyButton.Text = "Ini adalah Button" MyButton.Location = New System.Drawing.Point(100,100) MyButton.Size = New System.Drawing.Size(120,25) Me.Controls.Add(MyButton) End Sub End Class

Event Click pada button


Pemakaian button umumnya adalah untuk proses klik oleh mouse, event procedure untuk Click penulisannya adalah sebagai berikut :
Private Sub NamaButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NamaButton.Click Option Explicit On Imports System Imports Microsoft.VisualBasic Public Class MyForm Inherits System.Windows.Forms.Form Dim CatatEvent As String <System.STAThread()> _ Public Shared Sub Main() System.Windows.Forms.Application.EnableVisualStyles()

Contoh :

INDOPROG

22

Pemrograman Form pada VB.NET


System.Windows.Forms.Application.Run(New MyForm) End Sub Dim WithEvents MyButton As New System.Windows.Forms.Button Public Sub New() 'Constructor Me.Text = "Membuat kontrol pada Form" MyButton.Text = "Ini adalah Button" MyButton.Location = New System.Drawing.Point(100,100) Me.Controls.Add(MyButton) End Sub

Hendra, S.T.

Private Sub MyButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyButton.Click Msgbox("Terjadi event button click") End Sub End Class

Yang kalau dijalankan, dan dilakukan klik pada button akan menampilkan pesan sebagai berikut :

Latihan :
Buatlah program Windows Form untuk menghitung luas persegi panjang !

INDOPROG

23

Pemrograman Form pada VB.NET

Hendra, S.T.

Membuat Aplikasi MDI Form


MDI Form
Untuk membuat MDI Form tidak jauh berbeda dengan pembuatan form biasanya, yang perlu anda lakukan adalah dengan menset property IsMDIContainer menjadi True, Contoh :
Option Explicit On Imports System Imports System.Windows.Forms Imports Microsoft.VisualBasic Public Class MyMDI Inherits Form <System.STAThread()> _ Public Shared Sub Main() Application.Run(New MyMDI) End Sub Public Sub New() Me.Text = "Membuat MDI Form" Me.IsMDIContainer = True End Sub End Class 'Constructor

MDI Child
Pada dasarnya form MDI Child adalah sama dengan form biasanya, yang kemudian akan ditamplkan oleh MDI Form.
Public Class MyForm Inherits Form Public Sub New() Me.Text = "MDI Child" End Sub End Class

Menampilkan MDI Child


Untuk menampilkan MDI Child pada MDI Form kita, adalah dengan : 1. Membuat instance dari Form yang akan dijadikan MDI Child

INDOPROG

24

Pemrograman Form pada VB.NET

Hendra, S.T.

2. Kemudian kita set property MDIParent ke Form MDI 3. Menampilkan Form MDI Child dengan metoda Show() Contoh :
Option Explicit On Imports System Imports System.Windows.Forms Imports Microsoft.VisualBasic Public Class MyMDI Inherits Form <System.STAThread()> _ Public Shared Sub Main() Application.Run(New MyMDI) End Sub Public Sub New() Me.Text = "Membuat MDI Form" Me.IsMDIContainer = True Dim MyChild As new MyForm MyChild.MdiParent = Me MyChild.Show() End Sub End Class Public Class MyForm Inherits Form Public Sub New() Me.Text = "MDI Child" End Sub End Class 'Constructor 'Instance dari myform 'set MDIParent 'tampilkan MDI Child

Pengaturan MDI Child pada MDI Form


Pengaturan susunan MDI Child pada MDI Form dapat dilakukan dengan menggunakan metoda LayoutMDI(MDI layout).
Member name ArrangeIcons Cascade TileHorizontal TileVertical Description All MDI child icons are arranged within the client region of the MDI parent form. All MDI child windows are cascaded within the client region of the MDI parent form. All MDI child windows are tiled horizontally within the client region of the MDI parent form. All MDI child windows are tiled vertically within the client region of the MDI parent form.

Contoh :

INDOPROG

25

Pemrograman Form pada VB.NET


Me.LayoutMDI(System.Windows.Forms.MDILayout.Cascade)

Hendra, S.T.

INDOPROG

26

Pemrograman Form pada VB.NET

Hendra, S.T.

Membuat Menu
Untuk membuat menu pada form, anda dapat menggunakan langkah-langkah berikut ini : 1. Membuat instance dari komponen MainMenu, dan set sebagai menu untuk form 2. Membuat MenuItem untuk MainMenu, dan tambahkan pada collection object dari MainMenu 3. Membuat SubMenuItem untuk MenuItem, dan tambahkan pada collection masing-masing object MenuItem. Contoh :
Option Explicit On Imports System Imports System.Windows.Forms Imports Microsoft.VisualBasic Public Class MyMDI Inherits Form <System.STAThread()> _ Public Shared Sub Main() Application.Run(New MyMDI) End Sub Public Sub New() Me.Text = "Membuat MDI Form" Me.IsMDIContainer = True AddMenu() End Sub 'Constructor

Private Sub AddMenu() 'Membuat instance dari MainMenu dan set sebagai menu form Dim mnuUtama As new MainMenu() Me.Menu = mnuUtama 'membuat menuitem Dim mnuFile As new MenuItem("&File") Dim mnuWindow As new MenuItem("&Window") mnuUtama.MenuItems.Add(mnuFile) mnuUtama.MenuItems.Add(mnuWindow) 'Tambahkan ke collection

'membuat submenuitem untuk sub menu File Dim mnuFileNew As new MenuItem("&New") Dim mnuFileClose As new MenuItem("&Close") Dim mnuFileExit As new MenuItem("&Exit") mnuFile.MenuItems.Add(mnuFileNew) mnuFile.MenuItems.Add(mnuFileClose) 'Tambahkan ke collection

INDOPROG

27

Pemrograman Form pada VB.NET


mnuFile.MenuItems.Add(mnuFileExit) End Sub End Class Public Class MyForm Inherits Form Public Sub New() Me.Text = "MDI Child" End Sub End Class

Hendra, S.T.

Dan hasil eksekusinya adalah sebagai berikut :

Men-disable menuitem
Untuk mendisable menuitem, kita dapat menggunakan property Enabled pada menuitem yang akan diatur keaktifannya. Contoh :
mnuFileClose.Enabled = False

atau
Me.Menu.MenuItems(0).MenuItems(2).Enabled = False

INDOPROG

28

Pemrograman Form pada VB.NET

Hendra, S.T.

Menyembunyikan menuitem
Untuk menyembunyikan menuitem, kita dapat menggunakan property Visible pada menuitem yang akan diatur kemunculannya. Contoh :
mnuFileClose.Visible = False

INDOPROG

29

Pemrograman Form pada VB.NET

Hendra, S.T.

Membuat garis pembatas pada menuitem


Untuk menbuat garis pembatas dan dapat membuat tanda sebagai text untuk menu. Contoh :
'membuat submenuitem untuk sub menu File Dim Dim Dim Dim mnuFileNew As new MenuItem("&New") mnuFileClose As new MenuItem("&Close") mnuGaris11 As new MenuItem("-") mnuFileExit As new MenuItem("&Exit") 'Tambahkan ke collection

mnuFile.MenuItems.Add(mnuFileNew) mnuFile.MenuItems.Add(mnuFileClose) mnuFile.MenuItems.Add(mnuGaris11) mnuFile.MenuItems.Add(mnuFileExit)

Membuat tanda check pada menuitem


Untuk menbuat tanda check pada menuitem dapat dilakukan dengan property Checked. Contoh :
mnuFileNew.Checked = True

INDOPROG

30

Pemrograman Form pada VB.NET

Hendra, S.T.

Menambah shortcut key pada menuitem


Untuk menbuat tanda check pada menuitem dapat dilakukan dengan property Shortcut. Contoh :
mnuFileNew.Shortcut = System.Windows.Forms.Shortcut.F2

INDOPROG

31

Pemrograman Form pada VB.NET

Hendra, S.T.

Enumeration pada Shortcut


Member name Alt0 Alt1 Alt2 Alt3 Alt4 Alt5 Alt6 Alt7 Alt8 Alt9 AltBksp AltF1 AltF10 AltF11 AltF12 AltF2 AltF3 AltF4 AltF5 AltF6 AltF7 AltF8 AltF9 Ctrl0 Ctrl1 Ctrl2 Ctrl3 Ctrl4 Ctrl5 Ctrl6 Ctrl7 Ctrl8 Ctrl9 CtrlA CtrlB CtrlC CtrlD CtrlDel CtrlE CtrlF CtrlF1 CtrlF10 CtrlF11 CtrlF12 CtrlF2 CtrlF3 CtrlF4 CtrlF5 CtrlF6 Description The shortcut keys ALT+0. The shortcut keys ALT+1. The shortcut keys ALT+2. The shortcut keys ALT+3. The shortcut keys ALT+4. The shortcut keys ALT+5. The shortcut keys ALT+6. The shortcut keys ALT+7. The shortcut keys ALT+8. The shortcut keys ALT+9. The shortcut keys ALT+BACKSPACE. The shortcut keys ALT+F1. The shortcut keys ALT+F10. The shortcut keys ALT+F11. The shortcut keys ALT+F12. The shortcut keys ALT+F2. The shortcut keys ALT+F3. The shortcut keys ALT+F4. The shortcut keys ALT+F5. The shortcut keys ALT+F6. The shortcut keys ALT+F7. The shortcut keys ALT+F8. The shortcut keys ALT+F9. The shortcut keys CTRL+0. The shortcut keys CTRL+1. The shortcut keys CTRL+2. The shortcut keys CTRL+3. The shortcut keys CTRL+4. The shortcut keys CTRL+5. The shortcut keys CTRL+6. The shortcut keys CTRL+7. The shortcut keys CTRL+8. The shortcut keys CTRL+9. The shortcut keys CTRL+A. The shortcut keys CTRL+B. The shortcut keys CTRL+C. The shortcut keys CTRL+D. The shortcut keys CTRL+DELETE. The shortcut keys CTRL+E. The shortcut keys CTRL+F. The shortcut keys CTRL+F1. The shortcut keys CTRL+F10. The shortcut keys CTRL+F11. The shortcut keys CTRL+F12. The shortcut keys CTRL+F2. The shortcut keys CTRL+F3. The shortcut keys CTRL+F4. The shortcut keys CTRL+F5. The shortcut keys CTRL+F6.

INDOPROG

32

Pemrograman Form pada VB.NET

Hendra, S.T.

CtrlF7 CtrlF8 CtrlF9 CtrlG CtrlH CtrlI CtrlIns CtrlJ CtrlK CtrlL CtrlM CtrlN CtrlO CtrlP CtrlQ CtrlR CtrlS CtrlShift0 CtrlShift1 CtrlShift2 CtrlShift3 CtrlShift4 CtrlShift5 CtrlShift6 CtrlShift7 CtrlShift8 CtrlShift9 CtrlShiftA CtrlShiftB CtrlShiftC CtrlShiftD CtrlShiftE CtrlShiftF CtrlShiftF1 CtrlShiftF10 CtrlShiftF11 CtrlShiftF12 CtrlShiftF2 CtrlShiftF3 CtrlShiftF4 CtrlShiftF5 CtrlShiftF6 CtrlShiftF7 CtrlShiftF8 CtrlShiftF9 CtrlShiftG CtrlShiftH CtrlShiftI CtrlShiftJ CtrlShiftK CtrlShiftL CtrlShiftM

The shortcut keys CTRL+F7. The shortcut keys CTRL+F8. The shortcut keys CTRL+F9. The shortcut keys CTRL+G. The shortcut keys CTRL+H. The shortcut keys CTRL+I. The shortcut keys CTRL+INSERT. The shortcut keys CTRL+J. The shortcut keys CTRL+K. The shortcut keys CTRL+L. The shortcut keys CTRL+M. The shortcut keys CTRL+N. The shortcut keys CTRL+O. The shortcut keys CTRL+P. The shortcut keys CTRL+Q. The shortcut keys CTRL+R. The shortcut keys CTRL+S. The shortcut keys CTRL+SHIFT+0. The shortcut keys CTRL+SHIFT+1. The shortcut keys CTRL+SHIFT+2. The shortcut keys CTRL+SHIFT+3. The shortcut keys CTRL+SHIFT+4. The shortcut keys CTRL+SHIFT+5. The shortcut keys CTRL+SHIFT+6. The shortcut keys CTRL+SHIFT+7. The shortcut keys CTRL+SHIFT+8. The shortcut keys CTRL+SHIFT+9. The shortcut keys CTRL+SHIFT+A. The shortcut keys CTRL+SHIFT+B. The shortcut keys CTRL+SHIFT+C. The shortcut keys CTRL+SHIFT+D. The shortcut keys CTRL+SHIFT+E. The shortcut keys CTRL+SHIFT+F. The shortcut keys CTRL+SHIFT+F1. The shortcut keys CTRL+SHIFT+F10. The shortcut keys CTRL+SHIFT+F11. The shortcut keys CTRL+SHIFT+F12. The shortcut keys CTRL+SHIFT+F2. The shortcut keys CTRL+SHIFT+F3. The shortcut keys CTRL+SHIFT+F4. The shortcut keys CTRL+SHIFT+F5. The shortcut keys CTRL+SHIFT+F6. The shortcut keys CTRL+SHIFT+F7. The shortcut keys CTRL+SHIFT+F8. The shortcut keys CTRL+SHIFT+F9. The shortcut keys CTRL+SHIFT+G. The shortcut keys CTRL+SHIFT+H. The shortcut keys CTRL+SHIFT+I. The shortcut keys CTRL+SHIFT+J. The shortcut keys CTRL+SHIFT+K. The shortcut keys CTRL+SHIFT+L. The shortcut keys CTRL+SHIFT+M.

INDOPROG

33

Pemrograman Form pada VB.NET

Hendra, S.T.

CtrlShiftN CtrlShiftO CtrlShiftP CtrlShiftQ CtrlShiftR CtrlShiftS CtrlShiftT CtrlShiftU CtrlShiftV CtrlShiftW CtrlShiftX CtrlShiftY CtrlShiftZ CtrlT CtrlU CtrlV CtrlW CtrlX CtrlY CtrlZ Del F1 F10 F11 F12 F2 F3 F4 F5 F6 F7 F8 F9 Ins None ShiftDel ShiftF1 ShiftF10 ShiftF11 ShiftF12 ShiftF2 ShiftF3 ShiftF4 ShiftF5 ShiftF6 ShiftF7 ShiftF8 ShiftF9 ShiftIns

The shortcut keys CTRL+SHIFT+N. The shortcut keys CTRL+SHIFT+O. The shortcut keys CTRL+SHIFT+P. The shortcut keys CTRL+SHIFT+Q. The shortcut keys CTRL+SHIFT+R. The shortcut keys CTRL+SHIFT+S. The shortcut keys CTRL+SHIFT+T. The shortcut keys CTRL+SHIFT+U. The shortcut keys CTRL+SHIFT+V. The shortcut keys CTRL+SHIFT+W. The shortcut keys CTRL+SHIFT+X. The shortcut keys CTRL+SHIFT+Y. The shortcut keys CTRL+SHIFT+Z. The shortcut keys CTRL+T. The shortcut keys CTRL+U The shortcut keys CTRL+V. The shortcut keys CTRL+W. The shortcut keys CTRL+X. The shortcut keys CTRL+Y. The shortcut keys CTRL+Z. The shortcut key DELETE. The shortcut key F1. The shortcut key F10. The shortcut key F11. The shortcut key F12. The shortcut key F2. The shortcut key F3. The shortcut key F4. The shortcut key F5. The shortcut key F6. The shortcut key F7. The shortcut key F8. The shortcut key F9. The shortcut key INSERT. No shortcut key is associated with the menu item. The shortcut keys SHIFT+DELETE. The shortcut keys SHIFT+F1. The shortcut keys SHIFT+F10. The shortcut keys SHIFT+F11. The shortcut keys SHIFT+F12. The shortcut keys SHIFT+F2. The shortcut keys SHIFT+F3. The shortcut keys SHIFT+F4. The shortcut keys SHIFT+F5. The shortcut keys SHIFT+F6. The shortcut keys SHIFT+F7. The shortcut keys SHIFT+F8. The shortcut keys SHIFT+F9. The shortcut keys SHIFT+INSERT.

INDOPROG

34

Pemrograman Form pada VB.NET

Hendra, S.T.

Lampiran

Kontrol pada System.Windows.Forms


Berikut ini adalah daftar control yang dapat ditempatkan diatas form menurut fungsinya :
Function Text edit Control TextBox Description Displays text entered at design time that can be edited by users at run time, or changed programmatically. Enables text to be displayed with formatting in plain text or rich-text format (RTF). Displays text that users cannot directly edit. Displays text as a Web-style link and triggers an event when the user clicks the special text. Usually the text is a link to another window or a Web site. Displays information about the application's current state using a framed window, usually at the bottom of a parent form. Displays a scrollable list of items, each accompanied by a check box. Displays a drop-down list of items. Displays a list of text items that users can scroll through with up and down buttons. Displays a list of text and graphical items (icons). Displays items in one of four different views. Views include text only, text with small icons, text with large icons, and a details view. Displays a list of numerals that users can scroll through with up and down buttons. Displays a hierarchical collection of node objects that can consist of text with optional check boxes or icons. Displays graphical files, such as bitmaps and icons, in a frame. Serves as a repository for images. ImageList controls and the images they contain can be reused from one application to the next. Displays a check box and a label for text. Generally used to set options. Displays a scrollable list of items, each accompanied by a check box. Displays a button that can be turned on or off. Allows users to set values on a scale by moving a "thumb" along a scale. Displays a graphical calendar to allow users to select a date or a time. Displays a graphical calendar to allow users to select a range of dates. Displays the color picker dialog box that allows users to set the color of an interface element. Displays a dialog box that allows users to set a font and its attributes. Displays a dialog box that allows users to navigate to and select a file.

RichTextBox Text display (read-only) Label LinkLabel

StatusBar

Selection from a list

CheckedListBox ComboBox DomainUpDown ListBox ListView

NumericUpDown TreeView

Graphics display Graphics storage

PictureBox ImageList

Value setting

CheckBox CheckedListBox RadioButton Trackbar

Date setting

DateTimePicker MonthCalendar

Dialog boxes

ColorDialog FontDialog OpenFileDialog

INDOPROG

35

Pemrograman Form pada VB.NET

Hendra, S.T.

PrintDialog PrintPreviewDialog SaveFileDialog Menu controls MainMenu ContextMenu Commands Button LinkLabel

Displays a dialog box that allows users to select a printer and set its attributes. Displays a dialog box that displays how a PrintDocument object will appear when printed. Displays a dialog box that allows users to save a file. Provides a design-time interface for creating menus. Implements a menu that appears when the user right-clicks an object. Used to start, stop, or interrupt a process. Displays text as a Web-style link and triggers an event when the user clicks the special text. Usually the text is a link to another window or a Web site. Displays an icon in the status notification area of the taskbar that represents an application running in the background. Contains a collection of button controls. Groups a set of controls on an unlabeled, scrollable frame. Groups a set of controls (such as radio buttons) on a labeled, nonscrollable frame. Provides a tabbed page for organizing and accessing grouped objects efficiently.

NotifyIcon

ToolBar Grouping other controls Panel GroupBox TabControl

INDOPROG

36

Pemrograman Form pada VB.NET

Hendra, S.T.

Keys Enumeration
Members
Member name A Supported by the .NET Compact Framework. Add Supported by the .NET Compact Framework. Alt Supported by the .NET Compact Framework. Apps Supported by the .NET Compact Framework. Attn Supported by the .NET Compact Framework. B Supported by the .NET Compact Framework. Back Supported by the .NET Compact Framework. BrowserBack BrowserFavorites BrowserForward BrowserHome BrowserRefresh BrowserSearch BrowserStop C Supported by the .NET Compact Framework. Cancel Supported by the .NET Compact Framework. Capital Supported by the .NET Compact Framework. CapsLock The CAPS LOCK key. 20 The CAPS LOCK key. 20 The CANCEL key. 3 The browser back key (Windows 2000 or later). The browser favorites key (Windows 2000 or later). The browser forward key (Windows 2000 or later). The browser home key (Windows 2000 or later). The browser refresh key (Windows 2000 or later). The browser search key (Windows 2000 or later). The browser stop key (Windows 2000 or later). The C key. 166 171 167 172 168 170 169 67 The BACKSPACE key. 8 The B key. 66 The ATTN key. 246 The application key (Microsoft Natural Keyboard). 93 The ALT modifier key. 262144 The add key. 107 The A key. Description 65 Value

INDOPROG

37

Pemrograman Form pada VB.NET

Hendra, S.T.

Supported by the .NET Compact Framework. Clear Supported by the .NET Compact Framework. Control Supported by the .NET Compact Framework. ControlKey Supported by the .NET Compact Framework. Crsel Supported by the .NET Compact Framework. D Supported by the .NET Compact Framework. D0 Supported by the .NET Compact Framework. D1 Supported by the .NET Compact Framework. D2 Supported by the .NET Compact Framework. D3 Supported by the .NET Compact Framework. D4 Supported by the .NET Compact Framework. D5 Supported by the .NET Compact Framework. D6 Supported by the .NET Compact Framework. D7 Supported by the .NET Compact Framework. D8 The 8 key. 56 The 7 key. 55 The 6 key. 54 The 5 key. 53 The 4 key. 52 The 3 key. 51 The 2 key. 50 The 1 key. 49 The 0 key. 48 The D key. 68 The CRSEL key. 247 The CTRL key. 17 The CTRL modifier key. 131072 The CLEAR key. 12

INDOPROG

38

Pemrograman Form pada VB.NET

Hendra, S.T.

Supported by the .NET Compact Framework. D9 Supported by the .NET Compact Framework. Decimal Supported by the .NET Compact Framework. Delete Supported by the .NET Compact Framework. Divide Supported by the .NET Compact Framework. Down Supported by the .NET Compact Framework. E Supported by the .NET Compact Framework. End Supported by the .NET Compact Framework. Enter Supported by the .NET Compact Framework. EraseEof Supported by the .NET Compact Framework. Escape Supported by the .NET Compact Framework. Execute Supported by the .NET Compact Framework. Exsel Supported by the .NET Compact Framework. F Supported by the .NET Compact Framework. F1 The F1 key. 112 The F key. 70 The EXSEL key. 248 The EXECUTE key. 43 The ESC key. 27 The ERASE EOF key. 249 The ENTER key. 13 The END key. 35 The E key. 69 The DOWN ARROW key. 40 The divide key. 111 The DEL key. 46 The decimal key. 110 The 9 key. 57

INDOPROG

39

Pemrograman Form pada VB.NET

Hendra, S.T.

Supported by the .NET Compact Framework. F10 Supported by the .NET Compact Framework. F11 Supported by the .NET Compact Framework. F12 Supported by the .NET Compact Framework. F13 Supported by the .NET Compact Framework. F14 Supported by the .NET Compact Framework. F15 Supported by the .NET Compact Framework. F16 Supported by the .NET Compact Framework. F17 Supported by the .NET Compact Framework. F18 Supported by the .NET Compact Framework. F19 Supported by the .NET Compact Framework. F2 Supported by the .NET Compact Framework. F20 Supported by the .NET Compact Framework. F21 Supported by the .NET Compact Framework. F22 The F22 key. 133 The F21 key. 132 The F20 key. 131 The F2 key. 113 The F19 key. 130 The F18 key. 129 The F17 key. 128 The F16 key. 127 The F15 key. 126 The F14 key. 125 The F13 key. 124 The F12 key. 123 The F11 key. 122 The F10 key. 121

INDOPROG

40

Pemrograman Form pada VB.NET

Hendra, S.T.

Supported by the .NET Compact Framework. F23 Supported by the .NET Compact Framework. F24 Supported by the .NET Compact Framework. F3 Supported by the .NET Compact Framework. F4 Supported by the .NET Compact Framework. F5 Supported by the .NET Compact Framework. F6 Supported by the .NET Compact Framework. F7 Supported by the .NET Compact Framework. F8 Supported by the .NET Compact Framework. F9 Supported by the .NET Compact Framework. FinalMode G Supported by the .NET Compact Framework. H Supported by the .NET Compact Framework. HanguelMode HangulMode HanjaMode Help Supported by the .NET Compact Framework. The IME Hanguel mode key. (maintained for compatibility; use HangulMode) The IME Hangul mode key. The IME Hanja mode key. The HELP key. 21 21 25 47 The H key. 72 The IME final mode key. The G key. 24 71 The F9 key. 120 The F8 key. 119 The F7 key. 118 The F6 key. 117 The F5 key. 116 The F4 key. 115 The F3 key. 114 The F24 key. 135 The F23 key. 134

INDOPROG

41

Pemrograman Form pada VB.NET

Hendra, S.T.

Home Supported by the .NET Compact Framework. I Supported by the .NET Compact Framework. IMEAceept IMEConvert IMEModeChange IMENonconvert Insert Supported by the .NET Compact Framework. J Supported by the .NET Compact Framework. JunjaMode K Supported by the .NET Compact Framework. KanaMode KanjiMode KeyCode Supported by the .NET Compact Framework. L Supported by the .NET Compact Framework. LaunchApplication1 LaunchApplication2 LaunchMail LButton Supported by the .NET Compact Framework. LControlKey Supported by the .NET Compact Framework. Left Supported by the .NET Compact Framework. LineFeed Supported by the .NET Compact Framework. LMenu

The HOME key.

36

The I key.

73

The IME accept key. The IME convert key. The IME mode change key. The IME nonconvert key. The INS key.

30 28 31 29 45

The J key.

74

The IME Junja mode key. The K key.

23 75

The IME Kana mode key. The IME Kanji mode key. The bitmask to extract a key code from a key value.

21 25 65535

The L key.

76

The start application one key (Windows 2000 or later). 182 The start application two key (Windows 2000 or later). 183 The launch mail key (Windows 2000 or later). The left mouse button. 180 1

The left CTRL key.

162

The LEFT ARROW key.

37

The LINEFEED key.

10

The left ALT key.

164

INDOPROG

42

Pemrograman Form pada VB.NET

Hendra, S.T.

Supported by the .NET Compact Framework. LShiftKey Supported by the .NET Compact Framework. LWin Supported by the .NET Compact Framework. M Supported by the .NET Compact Framework. MButton Supported by the .NET Compact Framework. MediaNextTrack MediaPlayPause MediaPreviousTrack MediaStop Menu Supported by the .NET Compact Framework. Modifiers Supported by the .NET Compact Framework. Multiply Supported by the .NET Compact Framework. N Supported by the .NET Compact Framework. Next Supported by the .NET Compact Framework. NoName Supported by the .NET Compact Framework. None Supported by the .NET Compact Framework. NumLock Supported by the .NET Compact Framework. The NUM LOCK key. 144 No key pressed. 0 A constant reserved for future use. 252 The PAGE DOWN key. 34 The N key. 78 The multiply key. 106 The bitmask to extract modifiers from a key value. -65536 The media next track key (Windows 2000 or later). The media play pause key (Windows 2000 or later). The media previous track key (Windows 2000 or later). The media Stop key (Windows 2000 or later). The ALT key. 176 179 177 178 18 The middle mouse button (three-button mouse). 4 The M key. 77 The left Windows logo key (Microsoft Natural Keyboard). 91 The left SHIFT key. 160

INDOPROG

43

Pemrograman Form pada VB.NET

Hendra, S.T.

NumPad0 Supported by the .NET Compact Framework. NumPad1 Supported by the .NET Compact Framework. NumPad2 Supported by the .NET Compact Framework. NumPad3 Supported by the .NET Compact Framework. NumPad4 Supported by the .NET Compact Framework. NumPad5 Supported by the .NET Compact Framework. NumPad6 Supported by the .NET Compact Framework. NumPad7 Supported by the .NET Compact Framework. NumPad8 Supported by the .NET Compact Framework. NumPad9 Supported by the .NET Compact Framework. O Supported by the .NET Compact Framework. Oem8 OemBackslash OemClear Supported by the .NET Compact Framework. OemCloseBrackets Oemcomma OemMinus

The 0 key on the numeric keypad.

96

The 1 key on the numeric keypad.

97

The 2 key on the numeric keypad.

98

The 3 key on the numeric keypad.

99

The 4 key on the numeric keypad.

100

The 5 key on the numeric keypad.

101

The 6 key on the numeric keypad.

102

The 7 key on the numeric keypad.

103

The 8 key on the numeric keypad.

104

The 9 key on the numeric keypad.

105

The O key.

79

OEM specific. The OEM angle bracket or backslash key on the RT 102 key keyboard (Windows 2000 or later). The CLEAR key.

223 226 254

The OEM close bracket key on a US standard keyboard 221 (Windows 2000 or later). The OEM comma key on any country/region keyboard 188 (Windows 2000 or later). The OEM minus key on any country/region keyboard 189

INDOPROG

44

Pemrograman Form pada VB.NET

Hendra, S.T.

(Windows 2000 or later). OemOpenBrackets OemPeriod OemPipe Oemplus OemQuestion OemQuotes OemSemicolon Oemtilde P Supported by the .NET Compact Framework. Pa1 Supported by the .NET Compact Framework. PageDown Supported by the .NET Compact Framework. PageUp Supported by the .NET Compact Framework. Pause Supported by the .NET Compact Framework. Play Supported by the .NET Compact Framework. Print Supported by the .NET Compact Framework. PrintScreen Supported by the .NET Compact Framework. Prior Supported by the .NET Compact Framework. ProcessKey Supported by the .NET Compact Framework. The PROCESS KEY key. 229 The PAGE UP key. 33 The PRINT SCREEN key. 44 The PRINT key. 42 The PLAY key. 250 The PAUSE key. 19 The PAGE UP key. 33 The PAGE DOWN key. 34 The PA1 key. 253 The OEM open bracket key on a US standard keyboard 219 (Windows 2000 or later). The OEM period key on any country/region keyboard (Windows 2000 or later). The OEM pipe key on a US standard keyboard (Windows 2000 or later). The OEM plus key on any country/region keyboard (Windows 2000 or later). The OEM question mark key on a US standard keyboard (Windows 2000 or later). The OEM singled/double quote key on a US standard keyboard (Windows 2000 or later). The OEM semicolon key on a US standard keyboard (Windows 2000 or later). The OEM tilde key on a US standard keyboard (Windows 2000 or later). The P key. 190 220 187 191 222 186 192 80

INDOPROG

45

Pemrograman Form pada VB.NET

Hendra, S.T.

Q Supported by the .NET Compact Framework. R Supported by the .NET Compact Framework. RButton Supported by the .NET Compact Framework. RControlKey Supported by the .NET Compact Framework. Return Supported by the .NET Compact Framework. Right Supported by the .NET Compact Framework. RMenu Supported by the .NET Compact Framework. RShiftKey Supported by the .NET Compact Framework. RWin Supported by the .NET Compact Framework. S Supported by the .NET Compact Framework. Scroll Supported by the .NET Compact Framework. Select Supported by the .NET Compact Framework. SelectMedia Separator Supported by the .NET Compact Framework. Shift Supported by the .NET Compact

The Q key.

81

The R key.

82

The right mouse button.

The right CTRL key.

163

The RETURN key.

13

The RIGHT ARROW key.

39

The right ALT key.

165

The right SHIFT key.

161

The right Windows logo key (Microsoft Natural Keyboard).

92

The S key.

83

The SCROLL LOCK key.

145

The SELECT key.

41

The select media key (Windows 2000 or later). The separator key.

181 108

The SHIFT modifier key.

65536

INDOPROG

46

Pemrograman Form pada VB.NET

Hendra, S.T.

Framework. ShiftKey Supported by the .NET Compact Framework. Snapshot Supported by the .NET Compact Framework. Space Supported by the .NET Compact Framework. Subtract Supported by the .NET Compact Framework. T Supported by the .NET Compact Framework. Tab Supported by the .NET Compact Framework. U Supported by the .NET Compact Framework. Up Supported by the .NET Compact Framework. V Supported by the .NET Compact Framework. VolumeDown VolumeMute VolumeUp W Supported by the .NET Compact Framework. X Supported by the .NET Compact Framework. XButton1 Supported by the .NET Compact Framework. XButton2 Supported by the .NET Compact Framework. The second x mouse button (five-button mouse). 6 The first x mouse button (five-button mouse). 5 The X key. 88 The volume down key (Windows 2000 or later). The volume mute key (Windows 2000 or later). The volume up key (Windows 2000 or later). The W key. 174 173 175 87 The V key. 86 The UP ARROW key. 38 The U key. 85 The TAB key. 9 The T key. 84 The subtract key. 109 The SPACEBAR key. 32 The PRINT SCREEN key. 44 The SHIFT key. 16

INDOPROG

47

Pemrograman Form pada VB.NET

Hendra, S.T.

Y Supported by the .NET Compact Framework. Z Supported by the .NET Compact Framework. Zoom Supported by the .NET Compact Framework.

The Y key.

89

The Z key.

90

The ZOOM key.

251

INDOPROG

48

Pemrograman Form pada VB.NET

Hendra, S.T.

Daftar Pustaka .NET Framework SDK documentation, Microsoft Corporation

INDOPROG

49

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Pemrograman GDI+ pada VB.Net


Oleh : Hendra, ST.

Buku ini membahas tentang pengolahan grafik pada VB.NET, dan ditujukan kepada siapa saja yang serius untuk mempelajari pemrogrman grafik dengan GDI+ secara koding (tanpa menggunakan fasilitas designer pada Visual Studio .NET). Bagi anda yang belum mengenal bahasa pemrograman VB.NET sebaiknya memulai proses belajar dengan buku Bahasa Pemrograman VB.NET dan Pemrogram Form pada VB.NET Untuk mempelajari buku ini anda tidak perlu menginstalasi Visual Studio .NET, tetapi anda cukup menginstalasi .Net Framework yang dapat didownload secara gratis dari website Microsoft. Semua contoh dan latihan dibuku ini dapat dikompilasi langsung dari Dos prompt dengan menggunakan kompiler Visual Basic yang langsung tersedia setelah anda menginstalasi .Net Framework. Pada akhir tutorial ini, penulisa memberikan contoh pemrograman GDI+ yang diaplikasikan pada pemrograman games Tetris.

INDOPROG

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Pemrograman Grafik pada VB.NET


Untuk pemrograman Grafik di VB.NET kita membutuhkan GDI+ (Graphic Device Interface) yang merupakan bagian dari system operasi XP. GDI+ yang memiliki kemampuan untuk mengolah grafik vector dua dimensi (garis), imaging (bitmap) dan typography (font) pada Layar maupun Printer. Dengan GDI, programmer tidak perlu mengetahui detail dari masing-masing peralatan untuk menampilkan grafik diatasnya, tetapi cukup menggunakan fasilitas yang telah disediakan oleh GDI+ class. Catatan : Pada pemrograman tradisional, menggambar garis ke layar akan sangat berbeda dengan menggambar garis ke printer.

System Koordinat pada GDI+


GDI+ menggunakan system koordinat dilayar x,y mulai dari 0,0.

Dan pada layar computer, koordinat tersebut, merupakan pixel pada layar.

Misalnya kita menggambar sebuah garis mulai dari koordinat 4,2 sampai 12, 8, maka tampilan dilayar adalah sebagai berikut :

INDOPROG

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Mengambar Garis pada Form


Pengambaran Graphics diatas form dapat dilakukan melalui Objek Graphics yang dapat dideklarasikan sebagai berikut : Dim MyGraphics As System.Drawing.Graphics = Me.CreateGraphics Objek Graphics menyediakan berbagai metode untuk menggambar seperti DrawLine, DrawRectangle, dll Dalam pengembaran, kita membutuhkan Objek Pen menyediakan atribut seperti Warna dan Ketebalan garis dalam ukuran pixel. Objek Pen dapat dideklarasikan sebagai berikut : Dim Pen As New System.Drawing.Pen(Warna,Tebal) Dimana Warna adalah warna yang diinginkan, dan Tebal adalah tebal pen dalam ukuran point. Contoh program GDI+ anda yang pertama :
Option Explicit On Imports System Imports System.Windows.Forms Imports Microsoft.VisualBasic Public Class MyForm : Inherits Form <System.STAThread()> _ Public Shared Sub Main() Application.Run(New MyForm) End Sub

Public Sub New() 'Constructor Me.Text = "Mengambar garis pada Form" End Sub Private Sub MyForm_Click(Sender As Object, e As System.EventArgs) _

INDOPROG

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Handles MyBase.Click Dim MyPen As New System.Drawing.Pen(System.Drawing.Color.Red,3) Dim MyGraphic As System.Drawing.Graphics = Me.CreateGraphics MyGraphic.DrawLine(MyPen,10,10,200,100) End Sub End Class

Kemudian simpan program diatas dengan mana grafik.vb

Proses kompilasi
Proses kompilasi dengan menggunakan perintah : Vbc grafik.vb /r:System.dll /r:System.Windows.Forms.dll /r:System.Drawing.dll Dan ketika anda jalankan, dan klik pada form akan menghasilkan tampilan :

Catatan : Mengenai pemrogram form pada VB.NET dapat anda baca di ebook pemrogram form pada VB.NET Salah satu kelemahan dari cara diatas adalah, kalau form mengalami refresh, maka garis yang telah digambarkan tersebut akan hilang (VB.NET tidak menyediakan property AutoRedraw seperti yang terdapat pada VB6) Untuk membuktikannya coba anda minimize dan maximize kembali form diatas, maka garis tersebut akan hilang.

INDOPROG

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Melakukan overriding terhadap Metoda OnPaint


OnPaint Event Handle adalah event yang akan dibangkitkan setiap kali form mengalami refresh (pada saat minimize, maximize maupun ditimpa oleh form lain), jadi jika kita melakukan overriding terhadap Event ini dan menempatkan perintah pengambaran garis didalamnya ini, maka garis tersebut akan digambar setiap proses refresh. Parameter PaintEventArgs pada Sub OnPaint merupakan objek Graphics, sehingga kita tidak perlu melakukan Me.CreateGraphics. Contoh :
Option Explicit On Imports System Imports System.Windows.Forms Imports Microsoft.VisualBasic Public Class MyForm Inherits Form

<System.STAThread()> _ Public Shared Sub Main() Application.Run(New MyForm) End Sub

Public Sub New() 'Constructor Me.Text = "Membuat garis pada Form dengan OnPaint" End Sub Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs) Dim MyPen As New System.Drawing.Pen(System.Drawing.Color.Red,3) MyBase.OnPaint(e) e.Graphics.DrawLine(MyPen,10,10,200,100) End Sub End Class

Kalau program diatas dijalankan, maka akan menampilkan garis pada form, dan tetap akan ada walaupun form direfresh. Catatan : Pada contoh diatas kita melakukan overriding terhadap metoda OnPaint yang ada pada Base class dengan Metoda baru yang kita buat dimana didalamnya akan mengambarkan garis, sehingga setiap kejadian OnPaint akan menjalankan Event baru tersebut. Kemudian dalam koding kita menulis MyBase.OnPaint(e), yang artinya kita menjalan kembali event OnPaint pada Base class yang telah kita overriding.

INDOPROG

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Mengambar grafik vector 2 dimensi


Grafik vector merupakan kemampuan menggambar bentuk-bentuk tradisional seperti garis, kurva dan bentuk berdasarkan sekumpulan titik tertentu. Untuk pengambaran grafik vector kita dapat menggunakan objek Pen dan Brush, dimana objek Pen untuk pengambaran bentuk garis, dan Brush untuk objek isian.

Mengambar garis dengan Pen


Perintah DrawLine(pen, x1,y1, x2,y2) digunakan untuk menggambar garis dari koordinat awal (x1,y1) ke koordinat akhir (x2,y2). Contoh :
Dim MyPen As New System.Drawing.Pen(System.Drawing.Color.Red,3) e.Graphics.DrawLine(MyPen,10,10,200,100)

Akan menghasilkan

Mengambar persegi dengan Pen


Kita dapat menggunakan metoda DrawRectangle(Pen, x,y,lebar,tinggi) pada objek grafik untuk mengambar persegi pada koordinat x,y dengan lebar dan tinggi tertentu. Contoh :

INDOPROG

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

e.Graphics.DrawRectangle(MyPen,10,10,200,100)

Akan menghasilkan :

Mengambar Ellipse pada Form dengan Pen


Kita dapat menggunakan metoda DrawEllipse(Pen,x,y,lebar,tinggi) pada objek grafik untuk mengambar ellipse pada koordinat x,y dengan ukuran lebar dan tinggi tertentu :

Contoh :
e.Graphics.DrawEllipse(MyPen,10,10,200,100)

Akan menghasilkan :

INDOPROG

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Mengambar Arc pada Form dengan Pen


Kita dapat menggunakan metoda DrawArc(Pen,x,y,lebar,tinggi,sudutawal,sudutakhir) untuk mengambar arcus, adapun perbedaan antara Ellipse dengan Arc adalah, kalau ellipse adalah gambar kurva tertutup, sedangkan Arc ditentukan oleh sudut awal dan akhir pengambaran kurva. Contoh :
e.Graphics.DrawArc(MyPen,10,10,200,100,0,270)

Akan menghasilkan :

INDOPROG

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Mengambar Pie pada Form dengan Pen


Kalau Arc adalah kurva dengan sudut awal dan akhir, demikian juga pie, bedanya adalah pie merupakan kurva tertutup. Untuk menggambar pie dapat digunakan metoda DrawEllipse(Pen,x,y,lebar,tinggi). Contoh :
e.Graphics.DrawPie(MyPen,10,10,200,100,0,90)

Akan menghasilkan :

Menggunakan structure Point


Kita juga dapat menggunakan structure point untuk penentuan koordinat (x,y) awal dan akhir pada perintah DrawLine(pen, point1, point2). Catatan : DrawLine(pen, point1, point2) merupakan metode overloading terhadap DrawLine(pen, x1,y1,x2,y2)

Contoh :
Dim Point1 As New System.Drawing.Point(10,10) Dim Point2 As New System.Drawing.Point(200,100) e.Graphics.DrawLine(MyPen,Point1,Point2)

INDOPROG

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

yang kalau dijalankan akan menghasilkan garis yang sama dengan perintah :
e.Graphics.DrawLine(MyPen,10,10,200,100)

Akan menghasilkan :

Menggambar poligon dengan array dari point


DrawPolygons(Pen,PointArray) merupakan kurva tertutup yang dibentuk oleh garis-garis, untuk menggambar poligon anda perlu menyediakan array yang berisi koordinat (x,y) dari sudut-sudut polygon.

Contoh :
Dim MyPen As New System.Drawing.Pen(System.Drawing.Color.Red, 3) Dim MyArr As System.Drawing.Point() = _ {new System.Drawing.Point(0,0), _ new System.Drawing.Point(250,130), _ new System.Drawing.Point(190,160)} e.Graphics.DrawPolygon(MyPen,MyArr)

Akan menghasilkan :

INDOPROG

10

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Menggambar cardinal splines dengan array dari point


Jika polygon merupakan kurva tertutup yang dihubungan oleh garis lurus pada setiap koordinat (x,y) sudutnya, maka DrawCurve(Pen, PointArray, Tangen) merupakan kurva terbuka yang dibentuk dengan garis lengkung yang memiliki nilai tangent tertentu, berikut ini adalah contoh gambar cardinal splines yang memiliki tiga titik dengan nilai tangent yang berbeda (0, 1, 1.5, dan 2).

Contoh :
Dim MyPen As New System.Drawing.Pen(System.Drawing.Color.Red, 3) Dim MyArr As System.Drawing.Point() = _ {new System.Drawing.Point(0,0), _ new System.Drawing.Point(250,130), _ new System.Drawing.Point(190,160)} e.Graphics.DrawCurve(MyPen,MyArr,1.5F)

Akan menghasilkan :

INDOPROG

11

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Kemudian kita dapat juga menggunakan DrawClosedCurve(pen, PointArray) untuk menghasilkan kurva tertutup. Contoh :
Dim MyPen As New System.Drawing.Pen(System.Drawing.Color.Red, 3) Dim MyArr As System.Drawing.Point() = _ {new System.Drawing.Point(0,0), _ new System.Drawing.Point(250,130), _ new System.Drawing.Point(190,160)} e.Graphics.DrawClosedCurve(MyPen,MyArr)

Akan menghasilkan :

INDOPROG

12

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Menggambar Bezier splines dengan array dari point


DrawBezier(pen, x1, y1, x2, y2, x3, y3, x4, y4) merupakan kurva dengan dari koordinat (x1,y1) awal ke koordinat (x2,y2), dengan dua koordinat control (x3,y3) dan (x4,y4).

Pada gambar diatas p1 awal koordinat awal, p2 adalah koordinat akhir, dan c1, c2 adalah koordinat control Bezier.
Dim MyPen As New System.Drawing.Pen(System.Drawing.Color.Red, 3) e.Graphics.DrawBezier(MyPen,0,0,200,200,70,50, 150, 40)

INDOPROG

13

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Menggunakan Path
Path dibentuk oleh kombinasi dari berbagai bentuk seperti :

Lines Rectangles Ellipses Arcs Polygons Cardinal splines Bzier splines

Dengan perintah AddLine, AddRectangle, AddEllipse, AddArc, AddPolygon, AddCurve, dan AddBezier. Contoh :
Dim MyPen As New System.Drawing.Pen(System.Drawing.Color.Red, 3) Dim MyPath As New System.Drawing.Drawing2D.GraphicsPath() MyPath.AddLine(0,0,65,20) MyPath.AddEllipse(30,20,100,50) MyPath.AddLine(130,45,200,50)

INDOPROG

14

Pemrograman GDI+ pada VB.NET


e.Graphics.DrawPath(MyPen,MyPath)

Hendra, S.T.

Akan menghasilkan :

Menggunakan structure rectangle


Sebagaimana dengan structure point, kita dapat juga menggunakan struktur rectangle untuk mengambar bentuk yang membutuhkan koordinat x,y dan ukuran lebar, tinggi, misalnya DrawRectangle(pen, rectangle), DrawArc(Pen,x,y,rectangle,sudutakhir), DrawEllipse(Pen,rectangle), DrawEllipse(Pen,rectangle), Contoh :
Dim Rect As New System.Drawing.Rectangle(10,10,200,100) e.Graphics.DrawRectangle(MyPen,Rect) yang hasilnya akan sama dengan : e.Graphics.DrawRectangle(MyPen,10,10,200,100)

INDOPROG

15

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Mengambar objek isian pada Form dengan Brush


Kalau kita mengambar bentuk dengan Pen, maka hasilnya tidak disertai dengan isian, sedangkan untuk menghasilkan gambar dengan isian kita membutuhkan Brush.

Menggunakan SolidBrush
SolidBrush(warna) dapat digunakan untuk menggambarkan objek isian seperti FillRectangle(brush, rectangle), FillEllipse(brush, rectangle), FillPie(brush, rectangle, sudutawal, sudutakhir), dengan warna yang ditentukan pada brush. Contoh :
Dim MyBrush As New System.Drawing.SolidBrush(System.Drawing.Color.Red) Dim Rect As New System.Drawing.Rectangle(10,10,200,100) e.Graphics.FillRectangle(MyBrush,Rect)

Yang kalau dijalankan akan menghasilkan suatu persegi yang diisi dengan warna merah penuh.

INDOPROG

16

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Menggunakan HatchBrush
HatchBrush(pola, warnagaris, warnalatarbelakang), dapat digunakan untuk menggambar objek isian dengan pola isian tertentu seperti :

HatchStyle.Horizontal HatchStyle.Vertical HatchStyle.ForwardDiagonal HatchStyle.HatchStyleBackwardDiagonal HatchStyle.HatchStyleCross HatchStyle.HatchStyleDiagonalCross

HatchBrush terdefinisi pada namespace System.Drawing.Drawing2D Contoh :


Dim MyBrush As New _ System.Drawing.Drawing2D.HatchBrush(_ System.Drawing.Drawing2D.HatchStyle.Horizontal, _ System.Drawing.Color.Red, _ System.Drawing.Color.White) Dim Rect As New System.Drawing.Rectangle(10,10,200,100) e.Graphics.FillRectangle(MyBrush,Rect)

INDOPROG

17

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Menggunakan TextureBrush
TextureBrush(gambar), dapat digunakan untuk mengambarkan objek isian yang diisi dengan gambar tertentu

. Contoh :
Dim MyImage As New System.Drawing.Bitmap("c:\windows\greenstone.bmp") Dim MyBrush As New System.Drawing.TextureBrush(MyImage) Dim Rect As New System.Drawing.Rectangle(10,10,200,100) e.Graphics.FillRectangle(MyBrush,Rect)

INDOPROG

18

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Menggunakan GradientBrush
GradientBrush digunakan untuk warna isian yang sifatnya gradual LinearGradientBrush LinierGradientBrush(Point1,Point2,warna1,warna2) akan membuat warna gradient mulai dari Point1 ke Point2 secara gradual dari warna1 ke warna2

LinearGradientBrush terdefinisi pada namespace System.Drawing.Drawing2D Contoh :


Dim Point1 As New System.Drawing.Point(10,10) Dim Point2 As New System.Drawing.Point(100,10) Dim MyBrush As New _ System.Drawing.Drawing2D.LinearGradientBrush(Point1,Point2, _ System.Drawing.Color.FromArgb(255,0,0), _ System.Drawing.Color.FromArgb(0,0,255)) Dim Rect As New System.Drawing.Rectangle(10,10,200,100) e.Graphics.FillRectangle(MyBrush,Rect)

INDOPROG

19

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Menggunakan GammaCorrection
Contoh :
Dim Point1 As New System.Drawing.Point(10,10) Dim Point2 As New System.Drawing.Point(100,10) Dim MyBrush As New _ System.Drawing.Drawing2D.LinearGradientBrush(Point1,Point2, _ System.Drawing.Color.FromArgb(255,0,0), _ System.Drawing.Color.FromArgb(0,0,255)) Dim Rect As New System.Drawing.Rectangle(10,10,200,100) MyBrush.GammaCorrection = True e.Graphics.FillRectangle(MyBrush,Rect)

Bandingkan dengan hasil sebelumnya yang tidak menggunakan gamma correction.

INDOPROG

20

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Mengambar tulisan pada Form dengan DrawString


Untuk menampilkan tulisan kita dapat menggunakan DrawString(tulisan, font, brush, pointF). Contoh :
Dim Fontname As New System.Drawing.FontFamily("Times New Roman") Dim MyFont As New System.Drawing.Font(FontName, 24, _ System.Drawing.FontStyle.Regular, _ System.Drawing.GraphicsUnit.Pixel) Dim MyBrush As New ystem.Drawing.SolidBrush(System.Drawing.Color.Black) Dim MyPoint As New System.Drawing.PointF(10.0,10.0) e.Graphics.DrawString("Hello World !",MyFont,MyBrush,MyPoint)

Catatan : PointF adalah point dalam type Float

INDOPROG

21

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Mengambar garis dengan texture


Untuk mengambar garis dengan texture, kita membutuhkan pen yang menggunakan TextureBrush. Contoh :
Dim MyImage As New System.Drawing.Bitmap("c:\windows\greenstone.bmp") Dim MyBrush As New System.Drawing.TextureBrush(MyImage) Dim MyPen As New System.Drawing.Pen(MyBrush, 10) e.Graphics.DrawLine(MyPen,10,10,200,100)

INDOPROG

22

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Menampilkan gambar
Jika pada bagian sebelumnya kita telah membahas pembuatan grafik vector dengan GDI+, maka pada bagian ini kita akan melihat bagaimana mengolah gambar.

Memuat dan menampilkan


Untuk memuat dan menampilkan gambar dari file ke layer, anda membutuhkan objek Bitmap dan objek Graphics. Class Bitmap mendukung beberapa format seperti BMP, GIF, JPEG, PNG dan TIFF. Contoh :
Dim bitmap As New Bitmap("Grapes.jpg") e.Graphics.DrawImage(bitmap, 60, 10)

Memuat dan menampilkan dengan ukuran lain


Untuk menampilkan gambar dengan ukuran yang berbeda dengan ukuran sebenarnya, kita harus menyediakan dua Rectangle, yaitu Rectangle Asal (crop terhadap gambar sebenarnya), dan Rectangle Tujuan (yang berisi koordinat dan ukuran yang diinginkan), contoh :
Dim image = New Bitmap("Apple.gif") ' menggambar bitmap di posisi (0, 0). e.Graphics.DrawImage(image, 0, 0) ' membuat Rectangle tujuan di koordinat (150,20), dan ' tinggi dan lebar diset 130% dari ukuran gambar semula Dim width As Integer = image.Width Dim height As Integer = image.Height Dim destinationRect As New RectangleF( _

INDOPROG

23

Pemrograman GDI+ pada VB.NET


150, _ 20, _ 1.3F * width, _ 1.3F * height)

Hendra, S.T.

' Membuat rectangle asal gambar dengan menggambil 75% gambar Dim sourceRect As New RectangleF(0, 0, 0.75F * width, 0.75F * height) e.Graphics.DrawImage( _ image, _ destinationRect, _ sourceRect, _ GraphicsUnit.Pixel)

Melakukan rotasi terhadap gambar


Untuk melakukan rotasi terhadap gambar kita membutuhkan tiga koordinat yaitu

Titik asal Titik tujuan Kiri atas (0, 0) (200, 20) Kanan atas (100, 0) (110, 100) Kiri bawah (0, 50) (250, 30)

INDOPROG

24

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Sehingga dalam program Visual Basic ditulis sebagai : 'Membuat array yang berisi ketiga titik tujuan Dim destinationPoints As Point() = { _ New Point(200, 20), _ New Point(110, 100), _ New Point(250, 30)} Memuat file Stripes.bmp Dim image = New Bitmap("Stripes.bmp") ' Tampilkan gambar dikoordinat 0,0 e.Graphics.DrawImage(image, 0, 0) ' Tampilkan gambar sekali lagi berdasarkan titik tujuan e.Graphics.DrawImage(image, destinationPoints)

Menggunakan interpolation pada saat mengubah ukuran gambar


Pemakaian interpolation akan menentukan kualitas gambar hasil pembesaran ataupun pengecilan. Perhatikan kualitas gambar berikut yang masing-masing menggunakan interpolation yang berbeda.

INDOPROG

25

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Dengan koding berikut : Dim image = New Bitmap("GrapeBunch.bmp") Dim width As Integer = image.Width Dim height As Integer = image.Height 'Menampilkan gambar apa adanya pada koordinat 0,0 e.Graphics.DrawImage( _ image, _ New Rectangle(10, 10, width, height), _ 0, _ 0, _ width, _ height, _ GraphicsUnit.Pixel, _ Nothing) ' Mengunakan interpolation kualitas rendah e.Graphics.InterpolationMode = InterpolationMode.NearestNeighbor ' Menampilkan gambar sebesar 60% ukuran semula e.Graphics.DrawImage( _ image, _ INDOPROG

26

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

New Rectangle(10, 250, CInt(0.6 * width), CInt(0.6 * height)), _ 0, _ 0, _ width, _ height, _ GraphicsUnit.Pixel) ' Menggunakan interpolation kualitas menengah e.Graphics.InterpolationMode = InterpolationMode.HighQualityBilinear ' Menampilkan gambar sebesar 60% ukuran semula e.Graphics.DrawImage( _ image, _ New Rectangle(150, 250, CInt(0.6 * width), _ CInt(0.6 * height)), _ 0, _ 0, _ width, _ height, _ GraphicsUnit.Pixel) ' Menggunakan interpolation kualitas tinggi e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic ' Menampilkan gambar sebesar 60% ukuran semula e.Graphics.DrawImage( _ image, _ New Rectangle(290, 250, CInt(0.6 * width), CInt(0.6 * height)), _ 0, _ 0, _ width, _ height, _ GraphicsUnit.Pixel)

INDOPROG

27

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Program Tetris
Oleh : Hendra Soewarno Contoh aplikasi pemrograman GDI+ untuk pembuatan games tetris dengan pendekatan berorientasi objek.

Untuk memahami program ini anda perlu mengerti pemrograman form, event handling, dan array, serta GDI+

INDOPROG

28

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Rancangan program
Program ini menggunakan pendekatan berorientasi objek dengan membuat dua class untuk objek Shape dan objek Grid

Class TShape
Class ini berfungsi menghasilkan bentuk-bentuk dengan system koordinat berikut :

{1,0},{1,1},{1,2},{1,3}

Dan rotasi ke kanan akan menjadi

{0,1},{1,1},{2,1},{3,1}

Berikut ini adalah rincian array untuk masing-masing Shape dan rotasinya
{1,0},{1,1},{1,2},{1,3} {0,1},{1,1},{2,1},{3,1} {1,0},{1,1},{1,2},{1,3} {0,1},{1,1},{2,1},{3,1} {0,0},{0,1},{1,0},{1,1} {0,0},{0,1},{1,0},{1,1} {0,0},{0,1},{1,0},{1,1} {0,0},{0,1},{1,0},{1,1} {0,0},{0,1},{0,2},{1,2} {0,0},{0,1},{1,0},{2,0} {0,0},{1,0},{1,1},{1,2} {0,1},{1,1},{2,0},{2,1} {0,0},{0,1},{0,2},{1,1} {0,0},{1,0},{1,1},{2,0} {1,0},{0,1},{1,1},{1,2} {0,1},{1,0},{1,1},{2,1} {0,0},{0,1},{1,1},{1,2} {0,1},{1,0},{1,1},{2,0} {0,0},{0,1},{1,1},{1,2} {0,1},{1,0},{1,1},{2,0}

INDOPROG

29

Pemrograman GDI+ pada VB.NET


{0,1},{0,2},{1,0},{1,1} {0,0},{1,0},{1,1},{2,1} {0,1},{0,2},{1,0},{1,1} {0,0},{1,0},{1,1},{2,1}

Hendra, S.T.

Contoh :

Yang memiliki rincian array sebagai berikut :


{0,0},{0,1},{0,2},{1,1} {0,0},{1,0},{1,1},{2,0} {1,0},{0,1},{1,1},{1,2} {0,1},{1,0},{1,1},{2,1}

Yang selanjutnya dipetakan menjadi suatu array 4 dimensi yang berisi koordinat dari masingmasing shape :
'Array 4 dimensi yang berisi nilai sel dari masing-masing bentuk 'serta bentuk rotasinya private sarr(,,,) as integer = {{{{1,0},{1,1},{1,2},{1,3}}, _ {{0,1},{1,1},{2,1},{3,1}}, _ {{1,0},{1,1},{1,2},{1,3}}, _ {{0,1},{1,1},{2,1},{3,1}}}, _ {{{0,0},{0,1},{1,0},{1,1}}, _ {{0,0},{0,1},{1,0},{1,1}}, _ {{0,0},{0,1},{1,0},{1,1}}, _ {{0,0},{0,1},{1,0},{1,1}}}, _ {{{0,0},{0,1},{0,2},{1,2}}, _ {{0,0},{0,1},{1,0},{2,0}}, _ {{0,0},{1,0},{1,1},{1,2}}, _ {{0,1},{1,1},{2,0},{2,1}}}, _ {{{0,0},{0,1},{0,2},{1,1}}, _ {{0,0},{1,0},{1,1},{2,0}}, _ {{1,0},{0,1},{1,1},{1,2}}, _ {{0,1},{1,0},{1,1},{2,1}}}, _ {{{0,0},{0,1},{1,1},{1,2}}, _ {{0,1},{1,0},{1,1},{2,0}}, _ {{0,0},{0,1},{1,1},{1,2}}, _ {{0,1},{1,0},{1,1},{2,0}}}, _ {{{0,1},{0,2},{1,0},{1,1}}, _ {{0,0},{1,0},{1,1},{2,1}}, _ {{0,1},{0,2},{1,0},{1,1}}, _ {{0,0},{1,0},{1,1},{2,1}}}}

Variabel pada Class TShape


private currentshape as integer 'menyimpan nomor current shape

INDOPROG

30

Pemrograman GDI+ pada VB.NET


private public public private nextshape as currentcolor nextcolor as currentstate integer as color color as integer

Hendra, S.T.

'menyimpan nomor next shape 'menyimpan warna current shape 'menyimpan warna next shape 'nomor rotasi shape

Konstruktor TShape Konstuktor TShape merupakan metoda yang otomatis dijalankan begitu instance dari TShape terbentuk. Misalnya :
private gtshape as new tshape 'instance class tshape

berfungsi menghasilkan bentuk Shape berikutnya yang akan dimunculkan setelah bentuk sekarang dengan memanggil metoda generateshape.
'konstrutor untuk class tshape public sub new() generateshape(nextshape, nextcolor) end sub

Metoda GenerateNextShape Metoda ini berfungsi memindahkan nextshape menjadi currentshape, serta membuat nextshape yang berikutnya.
'Membuat next shape berikutnya, dan menset current shape public sub generatenextshape() currentshape = nextshape currentcolor = nextcolor currentstate = 0 'rotasi ke 0 generateshape(nextshape, nextcolor) 'buat nextshape baru end sub

Sub GenerateShape Berfungsi menghasilkan shape secara random, dan warnanya


'Membuat bentuk dan mengembalikan melalui parameter shape dan shapecolor private sub generateshape(byref shape as integer, _ byref shapecolor as color) dim c as integer shape = int(rnd*6) 'random untuk shape c = int(rnd*8) 'random untuk shape color select case c case 0 : shapecolor = color.red case 1 : shapecolor = color.green case 2 : shapecolor = color.blue case 3 : shapecolor = color.orange case 4 : shapecolor = color.pink

INDOPROG

31

Pemrograman GDI+ pada VB.NET


case 5 : shapecolor = color.cyan case 6 : shapecolor = color.gray case else shapecolor = color.magenta end select end sub

Hendra, S.T.

Catatan : Parameter pada sub ini dilewatkan secara by refrence, sehingga nilai dapat dikembalikan ke variable shape dan shapecolor. Metoda Rotate Metode ini berfungsi menset nilai currentstate ke nilai rotasi berikutnya (0 ke 1, 1 ke 2, 2 ke 3, 3 ke 0).

'Rotasi ke bentuk berikutnya public sub rotate() currentstate = currentstate + 1 if currentstate = 4 then currentstate = 0 end sub

'Rotasi berikutnya 'Kembali ke bentuk awal

Metoda DeRotate Metode ini berfungsi menset nilai currentstate ke nilai rotasi sebelumnya (1 ke 0, 2 ke 1, 3 ke 2, 0 ke 3).
'Rotasi ke bentuk sebelumnya public sub derotate() currentstate = currentstate - 1 if currentstate = -1 then currentstate = 3 end sub

'Rotasi sebelumnya

Metoda CurrentShapeSel Properti ini berfungsi mengembalikan nilai sel yang ke i,j dari array shape yang tersimpan pada array 4 dimensi sarr.
'Mengembalikan sel i,j dari current shape public function currentshapesel(i as integer, j as integer) return sarr(currentshape,currentstate,i,j) end function

Nilai sel yang dikembalikan sangat tergantung pada nilai variable currentshape (bentuk shape), dan currentstate (nomor rotasi) INDOPROG

32

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Misalnya nilai currentshape = 4, dan nilai currentstate = 3

{1,0},{0,1},{1,1},{1,2}

Dan CurrentShapeSel(0,0) akan menghasilkan 1 CurrentShapeSel(0,1) akan menghasilkan 0 Property NextShapeSel Properti ini berfungsi mengembalikan nilai sel yang ke i,j dari array shape yang tersimpan pada array 4 dimensi sarr.
'Mengembalikan sel i,j dari next shape public function nextshapesel(i as integer, j as integer) return sarr(nextshape,0,i,j) 'Bentuk awal end function

Nilai sel yang dikembalikan sangat tergantung pada nilai variable nextshape (bentuk shape), dan currentstate defaultnya 0, karena nextshape belum mengalami rotasi.

Class TGrid
Class ini berfungsi menyediakan mekanisme Grid pada permainan Tetris, dimana pada memori computer diwakili dengan array dua dimensi, dengan gambaran sebagai berikut :

INDOPROG

33

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Variabel yang digunakan


public parr(15,25) as integer public carr(15,25) as color 'Array menyimpan isi sel pada grid 'Array menyimpan warna sel pada grid

Merupakan array yang mewakili grid dilayar, jika suatu sel terisi gambar, maka nilai parr(x,y) akan berisi nilai 1, dan carr(x,y) akan berisi nilai warna gambar. Kontruktor TGrid Begitu instance dari TGrid terbuat, maka akan mengisi awal array parr menjadi sebagai berikut, yang akan menjadi bingkai dari grid, sehingga area permainan mulai dari (3,0) s/d (12,22)

INDOPROG

34

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

'konstruktur class tgrid public sub new() dim i, j as integer for i = 0 to 15 for j = 0 to 25 parr(i,j) = 1 next j next i for i = 3 to 12 for j = 0 to 22 parr(i,j) = 0 next j next i end sub

'isi bingkai

'isi arena

Metoda TestShape Metoda ini berfungsi mengisi nilai dari shape ke posisi x,y dalam grid, dengan syarat parr(x,y) masih 0
'Menempatkan shape pada posisi x,y di grid public sub putshape(x as integer, y as integer, s as tshape) dim i as integer for i = 0 to 3

INDOPROG

35

Pemrograman GDI+ pada VB.NET


parr(x+s.currentshapesel(i,0), y+s.currentshapesel(i,1)) carr(x+s.currentshapesel(i,0), y+s.currentshapesel(i,1)) next i end sub _ = 1 _ = s.currentcolor

Hendra, S.T.

Misalnya putshape yang ke 4, keposisi 6,21 pada grid, yang akan mengisi nilai ke parr

Metoda TestShape Metoda ini berfungsi mencoba apakah shape dapat ditempatkan pada posisi x,y dalam grid, dengan syarat parr(x,y) masih 0
'Mengembalikan nilai yang menunjukan apakah 'shape dapat ditempatkan pada grid diposisi x,y public function testshape(x as integer, y as integer, s as tshape)_ as boolean dim i as integer for i = 0 to 3 'apakah sel pada grid telah terisi ( > 0 ) if parr(x+s.currentshapesel(i,0), _ y+s.currentshapesel(i,1)) > 0 then return false end if

INDOPROG

36

Pemrograman GDI+ pada VB.NET


next i return true end function

Hendra, S.T.

Metoda CheckGrid Metoda ini berfungsi memeriksa apakah ada baris dalam array parr yang berisi nilai 1 dari kolom 3 s/d 12.
'periksa apakah ada baris yang berhasil diselesaikan pemain public function checkgrid() as integer dim i,j as integer dim b,k as integer dim complete as integer complete = 0 i = 22 do while i > 3 j = 3 do while parr(j,i) <> 0 and j < 13 j=j+1 loop if j = 13 then beep 'sound beep complete = complete + 1 for b = i to 4 step -1 for k = 3 to 12 parr(k,b) = parr(k,b-1) carr(k,b) = carr(k,b-1) next k next b else i = i - 1 end if loop return complete end function end class

Misalnya array parr pada baris 22 berisi nilai 1 mulai baris 3 s/d 12, maka setelah metoda ChekGrid dijalankan akan menghapus baris 22 dan mengeser baris diatasnya ke bawah, dan mengembalikan nilai berapa baris yang berhasil diselesaikan.

INDOPROG

37

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Class Tetris
Class ini merupakan class utama permainan Tetris

Variabel yang digunakan


private private private private private private private private withevents gtimer as new system.windows.forms.timer labelscore as new label labelgameover as new label gtgrid as new tgrid 'instance class tgrid gtshape as new tshape 'instance class tshape g as graphics x,y as integer 'posisi x,y shape pada grid score as integer 'score permainan

Konstruktor Tetris
Berfungsi mempersiapkan tampilan form, seperti title form, ukuran form, menempatkan label untuk keterangan score dan gameover, membuat objek Graphics yang akan digunakan untuk menyediakan metoda pengambaran, serta mempersiapkan Shape berikutnya.
public sub new() me.text = "Program Tetris" me.size = new size(450, 600) labelscore.location = new point(61,30) me.controls.add(labelscore) labelgameover.location = new point(200,30) me.controls.add(labelgameover) g = me.creategraphics() score = 0 printscore() nextshape() 'persiapkan shape berikutnya end sub

Metoda NextShape
Metoda ini berfungsi mempersiapkan shape berikutnya, dan menset interval timer 200 millidetik, dan posisi awal shape mulai di posisi (7,0)
'metoda mempersiapkan shape berikutnya private sub nextshape() gtimer.interval = 200

'set interval 200 millidetik

INDOPROG

38

Pemrograman GDI+ pada VB.NET


gtimer.enabled = true gtshape.generatenextshape() redrawnextshape() x = 7 y = 0 end sub

Hendra, S.T.

'mengaktifkan timer 'cetak shape berikutnya 'koordinat awal di 7,0

Metoda MoveShape
Metoda ini berfungsi menggambarkan animasi pergerakan Shape pada posisi x,y sesuai dengan arah gerakan yang ditentukan pada dx dan dy, misalnya bergerak ke kiri, kama dx = -1, dy = 0
'memindahkan shape keposisi x,y private sub movexy(dx,dy) clearshape() x = x + dx y = y + dy drawshape() end sub

'hapus gambar sebelumnya 'ubah posisi x,y 'gambar diposisi baru

Metoda MoveShape
Metoda ini berfungsi memperbaharui nilai score di layar
'metoda untuk mencetak score dilayar private sub printscore() labelscore.text = "Score : " & score.tostring() end sub

Metoda MoveShape
Metoda ini berfungsi mengubah tulisan di labelgameover menjadi Game Over
'metoda untuk mencetak gameover private sub printgameover() labelgameover.text = "Game Over" end sub

Event Tick
Event ini secara otomatis akan dibangkitkan oleh Timer secara berkala untuk mengerakan Shape ke bawah, dengan senantiasa apakah Shape telah mencapai batas gerakan, jika ya, maka akan memanggil metoda putshape pada TGrid. Jika Shape tertahan dibaris < 3 artinya Game Over
'mengerakan shape ke bawah dengan interval waktu tertentu private sub gtimer_tick(sender as object, e as eventargs) _ handles gtimer.tick 'apakah shape masih bisa turun kebawah if gtgrid.testshape(x,y+1,gtshape) then

INDOPROG

39

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

movexy(0,1) 'jika ya pindah shape 1 baris ke bawah else gtgrid.putshape(x,y,gtshape) 'tempatkan shape kegrid score = score + gtgrid.checkgrid() 'periksa baris yang lengkap redrawgrid() 'cetak ulang grid printscore() 'cetak score 'jika shape tertahan di baris 3, artinya game over if y < 3 then gtimer.enabled = false 'matikan timer karena gameover printgameover() 'tampil pesan gameover else nextshape() 'persiapkan gambar berikutnya end if end if end sub

Event KeyDown
Event ini secara otomatis akan dibangkitkan apabila adanya penekanan tombol oleh pemakai, Jika panah atas akan merotasi shape jika panah kiri akan mengerakan shape ke kiri jika panah kanan akan mengerakan shape ke kanan jika panah bawah akan mempercepat turunya shape
'deteksi penekanan tombol dengan event keydown pada form private sub tetris_keydown(sender as object, e as keyeventargs) _ handles mybase.keydown select case e.keyvalue case 38, 104, 12,101 : 'Panah atas, 8, 5 gtshape.rotate() 'rotasi 'apakah hasil rotasi dapat ditempatkan diposisi x,y if gtgrid.testshape(x,y,gtshape) then 'kalau ya, rotasi balik kembali gtshape.derotate() clearshape() 'hapus animasi shape gtshape.rotate() 'rotasi drawshape() 'gambar shape ke layar else gtshape.derotate() end if case 37, 100 : 'Panah kiri, 4 'jika shape dapat ditempatkan kekiri if gtgrid.testshape(x-1,y,gtshape) then movexy(-1,0) 'pindah ke kiri end if case 39, 102 : 'Panah kanan, 6 if gtgrid.testshape(x+1,y,gtshape) then movexy(1,0) end if case 40, 98 : 'Panah bawah, 2 interval dipercepat gtimer.interval = 10 end select end sub

INDOPROG

40

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Metoda DrawSel
Metoda ini berfungsi menggambar sel Shape ke layar untuk animasi, metoda ini akan dipanggil oleh metoda drawshape dan OnPaint
'menggambar sel dari suatu shape private sub drawsel(pen as pen, brush as brush, _ x as integer, y as integer, _ w as integer, h as integer) if y > 2 then g.fillrectangle(brush,x*21,y*21,w,h) g.drawrectangle(pen,x*21,y*21,w,h) end if end sub

Metoda DrawShape
Metoda ini berfungsi menggambar Shape ke layar dengan memanggil metoda DrawSel untuk masing-masing sel
'mengambar shape secara sementara private sub drawshape() dim i as integer dim pen as new pen(color.white,1) dim brush as new solidbrush(gtshape.currentcolor) for i = 0 to 3 drawsel(pen,brush, _ x+gtshape.currentshapesel(i,0), _ y+gtshape.currentshapesel(i,1), _ 20,20) next i end sub

Metoda DrawShape
Metoda ini berfungsi menghapus Shape di layar dengan memanggil metoda DrawSel untuk masing-masing sel (warna hitam)
'menghapus shape sementara private sub clearshape() dim i as integer dim pen as new pen(color.black,1) dim brush as new solidbrush(color.black) for i = 0 to 3 drawsel(pen,brush, _ x+gtshape.currentshapesel(i,0), _ y+gtshape.currentshapesel(i,1),20,20) next i end sub

Metoda ReDrawNextShape
Metoda ini berfungsi menggambar NextShape di layar setiap adanya perubahan nextshape

INDOPROG

41

Pemrograman GDI+ pada VB.NET


'mengambar ulang nextshape private sub redrawnextshape dim i as integer dim pen as new pen(color.black,1) dim brush as new solidbrush(color.black) g.fillrectangle(brush,300,60,120,120) pen.color = color.white brush.color = gtshape.nextcolor for i = 0 to 3 drawsel(pen,brush, _ 16+gtshape.nextshapesel(i,0), _ 4+gtshape.nextshapesel(i,1), _ 20,20) next i end sub

Hendra, S.T.

Metoda ReDrawGrid
Metoda ini berfungsi menggambar ulang Grid dilayar
'mengambar ulang grid private sub redrawgrid dim i,j as integer dim pen as new pen(color.white,1) dim brush as new solidbrush(color.red) for i = 3 to 12 for j = 3 to 22 if gtgrid.parr(i,j) <> 0 then 'Menggambar ulang isi grid pen.color = color.white brush.color = gtgrid.carr(i,j) drawsel(pen,brush,i,j,20,20) else pen.color = color.black brush.color = color.black drawsel(pen,brush,i,j,20,20) end if next j next i pen.color = color.black g.drawrectangle(pen,3*21-1,3*21-1,10*21+1,20*21+1) end sub

Metoda OnPaint
Metoda OnPaint akan secara otomatis diaktifkan oleh windows setiap kali layar form Tetris digambar ulang (misalnya waktu Maximize dan Minimize)
'melakukan overide terhadap sub onpaint pada base class 'untuk menggambar isi grid setiap proses refresh pada form protected overrides sub onpaint(e as painteventargs) redrawgrid() redrawnextshape() end sub

INDOPROG

42

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

Program Kongkret
option explicit on imports system imports system.drawing imports system.windows.forms imports microsoft.visualbasic public class tetris : inherits system.windows.forms.form <system.STAThread> _ public shared sub main() randomize() application.run(new tetris) end sub private private private private private private private private withevents gtimer as new system.windows.forms.timer labelscore as new label labelgameover as new label gtgrid as new tgrid 'instance class tgrid gtshape as new tshape 'instance class tshape g as graphics x,y as integer 'posisi x,y shape pada grid score as integer 'score permainan

public sub new() me.text = "Program Tetris" me.size = new size(450, 600) labelscore.location = new point(61,30) me.controls.add(labelscore) labelgameover.location = new point(200,30) me.controls.add(labelgameover) g = me.creategraphics() score = 0 printscore() nextshape() 'persiapkan shape berikutnya end sub 'metoda mempersiapkan shape berikutnya private sub nextshape() gtimer.interval = 200 gtimer.enabled = true gtshape.generatenextshape() redrawnextshape() x = 7 y = 0 end sub 'memindahkan shape keposisi x,y private sub movexy(dx,dy) clearshape() x = x + dx y = y + dy drawshape() end sub

'set interval 200 millidetik 'mengaktifkan timer 'cetak shape berikutnya 'koordinat awal di 7,0

'hapus gambar sebelumnya 'ubah posisi x,y 'gambar diposisi baru

INDOPROG

43

Pemrograman GDI+ pada VB.NET


'metoda untuk mencetak score dilayar private sub printscore() labelscore.text = "Score : " & score.tostring() end sub 'metoda untuk mencetak gameover private sub printgameover() labelgameover.text = "Game Over" end sub

Hendra, S.T.

'mengerakan shape ke bawah dengan interval waktu tertentu private sub gtimer_tick(sender as object, e as eventargs) _ handles gtimer.tick 'apakah shape bisa turun kebawah if gtgrid.testshape(x,y+1,gtshape) then movexy(0,1) 'pindah shape 1 baris ke bawah else gtgrid.putshape(x,y,gtshape) 'tempatkan shape kegrid score = score + gtgrid.checkgrid() 'periksa baris yang lengkap redrawgrid() 'cetak ulang grid printscore() 'cetak score 'jika shape tertahan di baris 3, artinya game over if y < 3 then gtimer.enabled = false 'matikan timer karena gameover printgameover() 'tampil pesan gameover else nextshape() 'persiapkan gambar berikutnya end if end if end sub 'deteksi penekanan tombol dengan event keydown pada form private sub tetris_keydown(sender as object, e as keyeventargs) _ handles mybase.keydown select case e.keyvalue case 38, 104, 12,101 : 'Panah atas, 8, 5 gtshape.rotate() 'rotasi 'apakah hasil rotasi dapat ditempatkan diposisi x,y if gtgrid.testshape(x,y,gtshape) then 'kalau ya, rotasi balik kembali gtshape.derotate() clearshape() 'hapus animasi shape gtshape.rotate() 'rotasi drawshape() 'gambar shape ke layar else gtshape.derotate() end if case 37, 100 : 'Panah kiri, 4 'jika shape dapat ditempatkan kekiri if gtgrid.testshape(x-1,y,gtshape) then movexy(-1,0) 'pindah ke kiri end if case 39, 102 : 'Panah kanan, 6 if gtgrid.testshape(x+1,y,gtshape) then movexy(1,0) end if case 40, 98 : 'Panah bawah, 2 interval dipercepat

INDOPROG

44

Pemrograman GDI+ pada VB.NET


gtimer.interval = 10 end select end sub 'menggambar sel dari suatu shape private sub drawsel(pen as pen, brush as brush, _ x as integer, y as integer, _ w as integer, h as integer) if y > 2 then g.fillrectangle(brush,x*21,y*21,w,h) g.drawrectangle(pen,x*21,y*21,w,h) end if end sub 'mengambar shape secara sementara private sub drawshape() dim i as integer dim pen as new pen(color.white,1) dim brush as new solidbrush(gtshape.currentcolor) for i = 0 to 3 drawsel(pen,brush, _ x+gtshape.currentshapesel(i,0), _ y+gtshape.currentshapesel(i,1), _ 20,20) next i end sub 'menghapus shape sementara private sub clearshape() dim i as integer dim pen as new pen(color.black,1) dim brush as new solidbrush(color.black) for i = 0 to 3 drawsel(pen,brush, _ x+gtshape.currentshapesel(i,0), _ y+gtshape.currentshapesel(i,1),20,20) next i end sub 'mengambar ulang nextshape private sub redrawnextshape dim i as integer dim pen as new pen(color.black,1) dim brush as new solidbrush(color.black) g.fillrectangle(brush,300,60,120,120) pen.color = color.white brush.color = gtshape.nextcolor for i = 0 to 3 drawsel(pen,brush, _ 16+gtshape.nextshapesel(i,0), _ 4+gtshape.nextshapesel(i,1), _ 20,20) next i end sub

Hendra, S.T.

'mengambar ulang grid

INDOPROG

45

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

private sub redrawgrid dim i,j as integer dim pen as new pen(color.white,1) dim brush as new solidbrush(color.red) for i = 3 to 12 for j = 3 to 22 if gtgrid.parr(i,j) <> 0 then 'Menggambar ulang isi grid pen.color = color.white brush.color = gtgrid.carr(i,j) drawsel(pen,brush,i,j,20,20) else pen.color = color.black brush.color = color.black drawsel(pen,brush,i,j,20,20) end if next j next i pen.color = color.black g.drawrectangle(pen,3*21-1,3*21-1,10*21+1,20*21+1) end sub 'melakukan overide terhadap sub onpaint pada base class 'untuk menggambar isi grid setiap proses refresh pada form protected overrides sub onpaint(e as painteventargs) redrawgrid() redrawnextshape() end sub end class

public class tgrid public parr(15,25) as integer grid public carr(15,25) as color grid 'konstruktur class tgrid public sub new() dim i, j as integer for i = 0 to 15 for j = 0 to 25 parr(i,j) = 1 next j next i for i = 3 to 12 for j = 0 to 22 parr(i,j) = 0 next j next i end sub

'Array menyimpan isi sel pada 'Array menyimpan warna sel pada

'isi bingkai

'isi arena

'Mengembalikan nilai yang menunjukan apakah 'shape dapat ditempatkan pada grid diposisi x,y public function testshape(x as integer, y as integer, s as tshape) _ as boolean dim i as integer

INDOPROG

46

Pemrograman GDI+ pada VB.NET


for i = 0 to 3 'apakah sel pada grid telah terisi if parr(x+s.currentshapesel(i,0), _ y+s.currentshapesel(i,1)) > 0 then return false end if next i return true end function

Hendra, S.T.

'Menempatkan shape pada posisi x,y di grid public sub putshape(x as integer, y as integer, s as tshape) dim i as integer for i = 0 to 3 parr(x+s.currentshapesel(i,0), _ y+s.currentshapesel(i,1)) = 1 carr(x+s.currentshapesel(i,0), _ y+s.currentshapesel(i,1)) = s.currentcolor next i end sub 'periksa apakah ada baris yang berhasil diselesaikan pemain public function checkgrid() as integer dim i,j as integer dim b,k as integer dim complete as integer complete = 0 i = 22 do while i > 3 j = 3 do while parr(j,i) <> 0 and j < 13 j=j+1 loop if j = 13 then beep 'sound beep complete = complete + 1 for b = i to 4 step -1 for k = 3 to 12 parr(k,b) = parr(k,b-1) carr(k,b) = carr(k,b-1) next k next b else i = i - 1 end if loop return complete end function end class public class tshape private currentshape private nextshape as public currentcolor public nextcolor as

as integer integer as color color

'menyimpan 'menyimpan 'menyimpan 'menyimpan

nomor nomor warna warna

current shape next shape current shape next shape

private currentstate as integer

'nomor rotasi shape

INDOPROG

47

Pemrograman GDI+ pada VB.NET

Hendra, S.T.

'Array 4 dimensi yang berisi nilai sel dari masing-masing bentuk 'serta bentuk rotasinya private sarr(,,,) as integer = {{{{1,0},{1,1},{1,2},{1,3}}, _ {{0,1},{1,1},{2,1},{3,1}}, _ {{1,0},{1,1},{1,2},{1,3}}, _ {{0,1},{1,1},{2,1},{3,1}}}, _ {{{0,0},{0,1},{1,0},{1,1}}, _ {{0,0},{0,1},{1,0},{1,1}}, _ {{0,0},{0,1},{1,0},{1,1}}, _ {{0,0},{0,1},{1,0},{1,1}}}, _ {{{0,0},{0,1},{0,2},{1,2}}, _ {{0,0},{0,1},{1,0},{2,0}}, _ {{0,0},{1,0},{1,1},{1,2}}, _ {{0,1},{1,1},{2,0},{2,1}}}, _ {{{0,0},{0,1},{0,2},{1,1}}, _ {{0,0},{1,0},{1,1},{2,0}}, _ {{1,0},{0,1},{1,1},{1,2}}, _ {{0,1},{1,0},{1,1},{2,1}}}, _ {{{0,0},{0,1},{1,1},{1,2}}, _ {{0,1},{1,0},{1,1},{2,0}}, _ {{0,0},{0,1},{1,1},{1,2}}, _ {{0,1},{1,0},{1,1},{2,0}}}, _ {{{0,1},{0,2},{1,0},{1,1}}, _ {{0,0},{1,0},{1,1},{2,1}}, _ {{0,1},{0,2},{1,0},{1,1}}, _ {{0,0},{1,0},{1,1},{2,1}}}} 'konstrutor untuk class tshape public sub new() generateshape(nextshape, nextcolor) end sub 'Membuat next shape berikutnya, dan menset current shape public sub generatenextshape() currentshape = nextshape currentcolor = nextcolor currentstate = 0 'rotasi ke 0 generateshape(nextshape, nextcolor) 'buat nextshape baru end sub 'Membuat bentuk dan mengembalikan melalui parameter shape dan shapecolor private sub generateshape(byref shape as integer, _ byref shapecolor as color) dim c as integer shape = int(rnd*6) 'random untuk shape c = int(rnd*8) 'random untuk shape color select case c case 0 : shapecolor = color.red case 1 : shapecolor = color.green case 2 : shapecolor = color.blue case 3 : shapecolor = color.orange case 4 : shapecolor = color.pink case 5 : shapecolor = color.cyan case 6 : shapecolor = color.gray case else shapecolor = color.magenta

INDOPROG

48

Pemrograman GDI+ pada VB.NET


end select end sub 'Rotasi ke bentuk berikutnya public sub rotate() currentstate = currentstate + 1 if currentstate = 4 then currentstate = 0 end sub 'Rotasi ke bentuk sebelumnya public sub derotate() currentstate = currentstate - 1 if currentstate = -1 then currentstate = 3 end sub

Hendra, S.T.

'Rotasi berikutnya 'Kembali ke bentuk awal

'Rotasi sebelumnya

'Mengembalikan sel i,j dari current shape public function currentshapesel(i as integer, j as integer) return sarr(currentshape,currentstate,i,j) end function 'Mengembalikan sel i,j dari next shape public function nextshapesel(i as integer, j as integer) return sarr(nextshape,0,i,j) 'Bentuk awal end function end class

Kompilasi Program
Vbc tetris.vb /r:system.dll /r:system.drawing.dll /r:system.windows.forms.dll

INDOPROG

49

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Pemrograman Berorientasi Objek pada VB.Net


Oleh : Hendra, ST.

Buku ini membahas tentang konsep dasar pemrograman berorientasi objek (OOP) dan bagaimana melakukannya pada VB.NET, serta memberikan contoh-contoh keunggulan OOP dibandingkan dengan pendekatan konvensional. Penguasaan terhadap teknik pengembangan berorientasi objek merupakan suatu nilai tambah bagi programmer dewasa ini, karena trend bahasa pemrograman menuju kearah pendekatan OOP, terutama sejak kemunculan Java yang 100% menerapkan OOP. Penulis yakin bagian ini merupakan hal yang tersulit bagi programmer yang ingin melakukan migrasi dari VB6 ke VB.NET, karena OOP merupakan hal yang benar-benar baru. Untuk mempelajari buku ini anda tidak perlu menginstalasi Visual Studio .NET, tetapi anda cukup menginstalasi .Net Framework yang dapat didownload secara gratis dari website Microsoft. Semua contoh dan latihan dibuku ini dapat dikompilasi langsung dari Dos prompt dengan menggunakan kompiler Visual Basic yang langsung tersedia setelah anda menginstalasi .Net Framework.

INDOPROG

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Dasar OOP
Visual Basic merupakan bahasa yang Object-Based (komponen-komponen program dibuat dalam bentuk objek), sedangkan VB.NET adalah Object Oriented, hal ini berarti bahwa VB.NET merupakan bahasa yang benar-benar berorientasi object dengan mendukung empat pilar utama dari OOP yaitu Polymorphism, Inheritance, Abstraction dan Encapsulation. Kalau anda adalah programmer yang terbiasa dengan pendekatan procedural terstruktur, maka anda akan baru dengan beberapa istilah OOP yang kita sebutkan diatas, dan memang hal tersebut senantiasa menjadi masalah bagi programmer yang berasal dari VB dan ingin beralih ke VB.NET. Lalu timbul pertanyaan, apakah pada kita harus menguasai dan memahami semua istilah diatas baru dapat membuat program aplikasi dengan VB.NET ? Tentu saja jawabannya tidak, tetapi sebagai programmer VB.NET yang baik, maka konsep dari OOP tidak dapat diabaikan.

Mengapa harus pendekatan OOP?


Tujuan utama dari pengembangan pendekatan berorientasi objek (OOP) adalah untuk menghilangkan beberapa kelemahan yang terdapat pada pendekatan procedural. Pada OOP data diperlakukan sebagai elemen yang penting dan tidak boleh mengalir secara bebas dalam program. Data yang terikat kepada function dan harus dilindungi terhadap kemungkinan perubahan dari luar function. Catatan : Anda dapat melihat konsep OOP seperti suatu objek Televisi, dimana sebagai pemakai kita tidak perlu terlalu pusing dengan komponen apa saja yang bekerja didalam televise tersebut, tetapi sebagai pemakai kita cukup mengerti bagaimana menghidupkan, memilih channel, mengubah volume suara, dan beberapa setting dasar. OOP memungkinkan untuk pemecahan masalah kedalam sejumlah entitas yang disebut sebagai objek dan kemudian mengembangkan data dan fungsi disekitar objek tersebut. Salah satu manfaat yang terpenting dari OOP adalah pemanfaatan kembali. Beberapa kemampuan utama dari OOP adalah sebagai berikut :

Menekankan pada data dari pada procedure Program terbagi kedalam objek-objek Data disembunyikan dari akses oleh function-function eksternal Objek dapat berkomunikasi satu dengan yang lain melalui function Data baru dan function dapat dengan mudah ditambahkan pada saat dibutuhkan. Mengikuti pendekatan buttom up.

INDOPROG

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Konsep dari OOP:


Objects Classes Data Abstraction dan Encapsulation Inheritance Polymorphism

Objek
Objek merupakan dasar dari entitas run-time dalam suatu sistem berorientasi objek. Masalah pada pemrograman adalah menganalisa dalam arti objek dan komunikasi alamiah diantara mereka. Ketika suatu program dijalankan, objek berinteraksi satu dengan yang lain dengan saling mengirim message. Objek-objek yang berbeda berinteraksi satu dengan yang lain tanpa mengetahui detail data dari masing-masing data ataupun koding.

Class
Suatu class adalah suatu koleksi dari objek-objek yang bertipe sama. Setelah suatu class telah didefinisikan, sejumlah dari objek-objek dapat dibuat berdasarkan class tersebut.

Catatan : Istilah Class dan Objek sering dicampuradukan, pada objek merupakan instance dari suatu class pada saat runtime, jadi pada saat design, class merupakan cetak biru bagi objek-objek yang akan dibuat pada saat runtime. Anda dapat mengasosiasikan class dengan gambar denah dari rancangan rumah, dan selanjutnya berdasarkan denah ini akan dibangun rumah-rumah (objek) sebenarnya.

Data Abstraction dan Encapsulation


Abstraction mengacu pada usaha untuk menampilkan hal-hal yang penting tanpa mengikutsertakan detail latarbelakang ataupun penjelasan. Class-class menggunakan konsep dari abstraksi dan mendefinsikannya sebagai suatu daftar dari atribut-atribut abstrak.

INDOPROG

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Catatan : Sebagaimana contoh sebelumnya bahwa TV merupakan gambaran dari Abstraksi, dimana yang perlu ditonjolkan pada pemakai adalah hal-hal penting bagaimana menghidupkan dan mematikan serta berbagai setting dasar, sedangkan permasalahan teknis yang berada didalam kotak TV seperti rangkaian elektronik disembunyikan dari pemakai. Jadi dalam hal ini TV dianggap suatu black box. Menyimpan data dan fungsi-fungsi ke dalam suatu unit tunggal (class) adalah encapsulation. Data tidak dapat diakses oleh dunia luar dan hanya fungsi-fungsi yang mana berada dalam class tersebut dapat mengaksesnya.

Inheritance
Inheritance adalah proses yang mana objek-objek dapat mengusahakan member dari objek class lain. Pada OOP inheritance menyediakan pemakaian kembali, seperti, menambah kemampuan baru pada class yang telah ada dengan tanpa melakukan modifikasi langsung terhadap class tersebut. Hal ini dilakukan dengan menurunkan suatu class baru dari yang class telah ada. Class baru tersebut memiliki kombinasi dari keduanya. Catatan : Pendekatan inheritance dapat dipahami sebagai pengembangan produk, dimana engineer tidak perlu merancang produk dari awal, tetapi dengan melakukan modifikasi terhadap produk yang telah ada untuk menghasilkan suatu produk baru.

Polymorphism
Polymorphism adalah kemampuan untuk memiliki lebih dari satu bentuk. Suatu operasi dapat menunjukan prilaku yang berbeda pada instance yang berbeda. Prilaku tersebut tergantung kepada tipe data yang digunakan dalam operasi. Polymorphism secara ekstensif digunakan dalam implementasi Inheritance. Dengan polymorphism kita dapat membuat beberapa fungsi dengan nama yang sama tetapi memiliki daftar argument yang berbeda baik dari segi jumlah maupun tipe datanya (Overloading), sehingga dalam implementasinya fungsi akan dioperasikan berdasarkan argumen yang diberikan, sehingga program dapat bereaksi secara tepat sesuai dengan jenis tipe data dan jumlah argument. Kemudian polymorphism juga memiliki fungsi dimana pemanfaatan variable dengan tipe base class untuk menampung instance dari class turunannya dan menjalankan metoda class turunannya.

Keunggulan dari OOP

INDOPROG

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

OOP memiliki keunggulan berikut diatas pendekatan konvensional:

OOP menyediakan struktur modular yang jelas untuk program, yang mana cocok untuk mendefinisikan tipe data abstrak yang merupakan detail dari implementasi disembunyikan serta unit memiliki interface yang telah didefinisikan dengan jelas. OOP memudahkan maintenance dan modifikasi terhadap kode yang telah sebagai objek baru yang dapat dibuat dengan perubahan yang minimal OOP menyediakan suatu kerangka kerja yang baik untuk kode library yang mana menyediakan komponen software yang secara mudah dapat disesuaikan dan dimodifikasi oleh programmer. Hal ini khususnya sangat berguna untuk pengembangan user interface secara grafik.

Catatan : Setelah anda membaca uraian tersebut diatas, awalnya anda akan merasa kesulitan untuk memahami dan menerapkan beberapa konsep-konsep diatas pada program anda, dan hal tersebut adalah wajar. Untuk mentransformasi gaya pemrograman anda dari pendekatan procedural terstruktur menjadi OOP membutuhkan waktu dan usaha. Sebab pada pendekatan procedural terstruktur focus programmer langsung kepada logika dan koding untuk pencapaian hasil, sedangkan pada OOP kita harus melakukan abstraksi terhadap data dan fungsi yang berkaitan menjadi class, dan selanjutnya class-class tersebut berinteraksi dengan message untuk mencapai tujuan akhir. Untuk membantu pengertian dan menunjukan keunggulan konsep OOP, penulis akan memberikan beberapa contoh keunggulan pemanfaatan OOP pada bagian-bagian selanjutnya.

INDOPROG

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

OOP pada Visual Basic


Membuat Class
Pemrograman OOP pada Visual Basic dapat dilakukan dengan merancang class dari objek dengan menggunakan struktur class sebagai berikut : Class nama 'member [variable, property, method and event declarations] End Class Contoh : Misalnya kita ingin membuat program animasi bola pantul yang memanfaatkan GDI+ dengan pendekatan berorientasi objek, maka sebagai langkah awal adalah merancang Class untuk bola pantul. Pada tahap rancangan, kita harus dapat mendefinisikan aksi apa saja yang harus dapat dilakukan oleh objek bola pantul yaitu bergerak (move) yang tentu saja memiliki koordinat awal (x,y) yang bergerak kearah tertentu (dx, dy). Dalam pergerakan dilayar, tentu saja dibatasi oleh area tertentu (sx,sy). Kemudian sebagai wujud dari animasi gerakan bola dilayar, kita perlu menyediakan aksi draw dan clear. Adapun rancangan class tersebut diatas dalam bentuk terprogram adalah sebagai berikut :
Class Pantul Protected x As Single Protected y As Single Private sx As Single Private sy As Single Private dx As Single Private dy As Single Public Sub New(f as form) sx = f.width \ 30 sy = f.height \ 30 x = rnd*(sx-2) + 2 y = rnd*(sy-2) + 2 dx = 1 dy = 1 Draw(f) End Sub 'posisi x dilayar 'posisi y dilayar 'jumlah kolom x 'jumlah baris y 'arah bola terhadap x 'arah bola terhadap y 'constructor 'lebar form dibagi 30 'tinggi form dibagi 30 'posisi awal random 'arah diagonal ke bawah

Public Sub Draw(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3) MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30)

INDOPROG

Pemrograman Berorientasi Objek pada VB.NET


End Sub

Hendra, S.T.

Public Sub Clear(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna latar belakang form Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3) MyGraphic.DrawEllipse(MyPen, x*30,y*30,30,30) End Sub Public Sub Move(f as form) 'metoda 'hapus gambar bola sebelumnya Clear(f) 'gerakan bola dengan mengubah x, y sesuai dengan arah x = x + dx y = y + dy 'jika mengenai daerah bingkai If x < 2 or x > (sx-2) Then dx = -dx If y < 2 or y > (sy-2) Then dy = -dy 'gambar bola diposisi baru Draw(f) End Sub End Class

Catatan : Jika anda perhatikan perhatikan rancangan class diatas, maka konsep dari data abstraction akan nampak, dimana sebagai interface keluar hanya terdiri metoda New, Draw, Clear, dan Move, sedangkan pengkodean tersembunyi dari program yang akan memanfaatkan Objek dari Class Pantul Kemudian konsep dari data encapsulation, dimana variable x,y,sx,sy,dx, dan dy disatukan beserta fungsi New, Draw, Clear, dan Move didalam satu Class Pantul.

Ruang Lingkup member pada suatu class


Pada saat pendeklarasian member pada class anda dapat menggunakan keyword seperti Friend, Private, Protected, Protected Friend, dan Public, dimana masing-masing memiliki kendali akses yang berbeda. Friend, member hanya tersedia bagi kode pada lingkup project yang sama. Private, member hanya tersedia bagi class itu sendiri Protected, member tersedia bagi class dan class turunannya. Protected Friend, member tersedua bagi kode pada lingkup project yang sama, dan class turunannya. Public, member tersedia bagi semua kode program. Jika anda tidak menentukan jenis kendali akses bagai suatu member, maka defaultnya adalah Public.

INDOPROG

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Constructors
Suatu constructor adalah anggota function yang mana memiliki tugas untuk menginisialisasi objek dari classnya. Suatu constructor akan dijalankan ketika objek dari class tersebut diciptakan. Kita dapat mengirim data kepada konstruktor dengan mencantumkannya didalam kurung. Pada Visual Basic suatu konstruktor harus dibuat dengan suatu Sub procedure dengan nama New pada class. Koding berikut mendemonstrasikan pemakaian dari konstruktor di Visual Basic.
Public Sub New(f as form) sx = f.width \ 30 sy = f.height \ 30 x = rnd*(sx-2) + 2 y = rnd*(sy-2) + 2 dx = 1 dy = 1 Draw(f) End Sub 'constructor 'lebar form dibagi 30 'tinggi form dibagi 30 'posisi awal random 'arah diagonal ke bawah

Pada contoh diatas, konstruktor digunakan untuk menginisialisasi nilai awal untuk variable pada Objek seperti sx, sy, x, y, dx, dan dy. Untuk konstruktor diatas, pada saat kita membuat instance dari Class dengan
Dim Bola As Pantul Bola = New Pantul(Me)

Dimana Me mengacu pada form yang sedang aktif.

Destructors
Destructors akan dijalankan ketika suatu objek dimusnahkan. Didalam suatu destructor kita dapat menempatkan koding untuk membersihkan objek setelah digunakan. Kita menggunakan metode Finalize di Visual Basic untuk membuat destructor yang otomatis akan dijalankan ketika runtime .NET menemukan bahwa objek tidak dibutuhkan lagi. Contoh implementasi pemakaian destructor adalah misalnya pada konstruktor kita membuka data maupun file, sehingga pada saat destructor kita perlu menutup data maupun file yang terbuka. Catatan: Setiap objek didunia nyata memiliki fase awal yaitu kelahiran, dan fase akhir yaitu kematian. Pada saat suatu objek dilahirkan tentu saja telah memiliki nilai property bawaan, seperti seorang bayi yang baru dilahirkan telah memiliki jenis kelamin, berat badan, dan tinggi. Demikian juga objek dalam konsep OOP, yang kadang-kadang membutuhkan pemberian nilai awal kepada beberapa property begitu instance dari class dibuat. Tindakan pemberian nilai awal (inisialisasi) ini dapat dilakukan dengan menggunakan metoda

INDOPROG

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

khusus yang dikenal sebagai Constructor.

Contoh Keunggulan OOP (Bagian 1)


Jika sekilas kita melihat uraian yang telah disebutkan diatas seakan-akan segala sesuatu yang dilakukan dengan pendekatan OOP dapat juga dilakukan dengan teknik pemrograman biasanya. Tetapi misalnya anda bayangkan kita ingin membuat program bola pantul yang terdiri dari 15 buah bola pantul dilayar yang masing-masing bergerak tanpa pendekatan OOP. Berikut ini saya akan membuat contoh dengan pendekatan OOP, dan anda bandingkan sendiri. Pertama kita akan membuat variable array untuk bola pantul sebagai array 15 elemen :
Dim Bola(14) As Pantul

Kemudian kita buat instance dari Class Pantul


For I As Integer = 0 To 14 Bola(I) = New Pantul(Me) Next I

Selanjutnya kita gerakan masing-masing objek dengan looping :


For I As Integer = 0 To 14 Bola.Move(Me) Next I

Dari hal ini jelaslah bahwa dengan pendekatan OOP kita tidak melakukan perubahan terhadap rancangan Class Pantul sama sekali, melainkan kita membuat 15 instance dari Class Pantul. Listing lengkap dari program 15 ola pantul dengan pendekatan OOP.
Option Explicit On Imports Sistem Imports Sistem.Windows.Forms Imports Microsoft.VisualBasic Public Class MyForm : Inherits Form Dim WithEvents MyTimer as New Timer Dim Bola(14) As Pantul <Sistem.STAThread()> _ Public Shared Sub Main() Application.Run(New MyForm) End Sub Public Sub New() 'Constructor

Me.BackColor = Sistem.Drawing.Color.Black Me.FormBorderStyle = FormBorderStyle.None

INDOPROG

Pemrograman Berorientasi Objek pada VB.NET


Me.Width = Screen.PrimaryScreen.Bounds.Width Me.Height = Screen.PrimaryScreen.Bounds.Height For I As Integer = 0 to 14 Bola(I) = New Pantul(Me) Next I MyTimer.Interval = 150 '150 millidetik MyTimer.Enabled = True End Sub

Hendra, S.T.

'Mengerakan objek dengan event tick pada objek MyTimer Private Sub MyTimer_Tick(sender as object, e as eventargs) _ handles MyTimer.Tick For I As Integer = 0 to 14 Bola(I).Move(Me) Next I End Sub End Class Class Pantul Protected x As Single Protected y As Single Private sx As Single Private sy As Single Private dx As Single Private dy As Single Public Sub New(f as form) sx = f.width \ 30 sy = f.height \ 30 x = rnd*(sx-2) + 2 y = rnd*(sy-2) + 2 dx = 1 dy = 1 Draw(f) End Sub

'posisi x dilayar 'posisi y dilayar 'jumlah kolom x 'jumlah baris y 'arah bola terhadap x 'arah bola terhadap y 'constructor 'lebar form dibagi 30 'tinggi form dibagi 30 'posisi awal random 'arah diagonal ke bawah

Overridable Public Sub Draw(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3) MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30) End Sub Overridable Public Sub Clear(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna latar belakang form Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3) MyGraphic.DrawEllipse(MyPen, x*30,y*30,30,30) End Sub Public Sub Move(f as form) 'metoda 'hapus gambar bola sebelumnya Clear(f) 'gerakan bola dengan mengubah x, y sesuai dengan arah x = x + dx y = y + dy

INDOPROG

10

Pemrograman Berorientasi Objek pada VB.NET


'jika mengenai daerah bingkai If x < 2 or x > (sx-2) Then dx = -dx If y < 2 or y > (sy-2) Then dy = -dy 'gambar bola diposisi baru Draw(f) End Sub End Class

Hendra, S.T.

INDOPROG

11

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Inheritance
Pemanfaatan Kembali
Kunci dari kemampuan OOP adalah pemakaian kembali. Yang secara nyata akan menghemat waktu jika kita dapat memanfaatkan kembali pada yang pernah kita buat. Pemakaian kembali akan menurunkan pekerjaan untuk testing dan debugging terhadap bagian yang digunakan kembali, karena telah dilakukan sebelumnya. Proses inheritance dilakukan dengan menurunkan suatu class baru dari class yang telah ada. Class yang lama disebut sebagai base class dan class yang baru disebut derived class. Class turunan akan mewarikan semua atau sebagian dari segala sesuatu yang terdapat pada base class. Pada Visual Basic kita menggunakan keyword Inherits untuk menurunkan suatu class: Misalnya kita telah memiliki Class Pantul
Class Pantul member End Class

Selanjutnya misalnya kita ingin mengembangkan Class baru dengan menurunkannya dari Class Pantu
Class Pantul1 : Inherits Pantul member End Class

Maka Class Pantul1 akan mewarisi semua member Pantul yang dideklarasikan sebagai Protected maupun Public.

Overriding
Pada derived class kadang-kadang kita perlu mendefinisikan ulang fungsi maupun sub yang ada pada base class, dalam hal inilah istilash Overriding muncul, dimana kita dapat mendefinisikan ulang fungsi maupun sub pada derived class. Misalnya pada Class Pantul1 gambar yang ingin kita hasilkan adalah persegi, maka kita perlu melakukan Overiding terhadap Sub Draw dan Clear yang ada pada base class. Catatan : Sub maupun Function pada base class harus dideklarasikan sebagai Overridable baru dapat di Overrides pada derived class. Pada Class pantul kita perlu mencantumkan keyword Overridable
Overridable Public Sub Draw(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3) MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30)

INDOPROG

12

Pemrograman Berorientasi Objek pada VB.NET


End Sub

Hendra, S.T.

Overridable Public Sub Clear(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna latar belakang form Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3) MyGraphic.DrawEllipse(MyPen, x*30,y*30,30,30) End Sub

Selanjutnya pada class turunannya kita dapat melakukan Overriding terhadap metoda yang dimaksud :
Class Pantul1 : Inherits Pantul Public Sub New(f as form) MyBase.New(f) End Sub 'constructor

Overrides Public Sub Draw(f as form) 'metoda 'gambar persegi ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3) MyGraphic.DrawRectangle(MyPen,x*30,y*30,30,30) End Sub Overrides Public Sub Clear(f as form) 'metoda 'gambar persegi ukuran 30x30 dengan warna latar belakang form Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3) MyGraphic.DrawRectangle(MyPen, x*30,y*30,30,30) End Sub End Class

Shadowing
Jika pada Overriding kita membutuhkan permisi dari base class untuk melakukan overriding dengan keyword Overridable, selain itu kita juga dapat melakukan Shadowing terhadap metoda pada base class yang tidak memberikan permisi Overridable. Contoh : Pada base class :
Public Sub Draw(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3) MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30) End Sub

Pada class turunannya :

INDOPROG

13

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Public Shadows Sub Draw(f as form) 'metoda 'gambar persegi ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3) MyGraphic.DrawRectangle(MyPen,x*30,y*30,30,30) End Sub

Catatan : Pemakaian cara Shadowing menyebabkan konsep polymorphism tidak dapat berfungsi sebagaimana pada cara Overriding.

OOP pada Pemrograman Form


Untuk pemrograman program Windows yang berbasis form, .NET telah menyediakan class Form yang terdefinisi pada namespace Sistem.Windows.Forms, kemudian didalam pemakaiannya kita dapat melakukan inheritance dari class form ke program kita dengan menbuat class baru :
Public Class MyForm : Inherits Form

Selanjutnya kita dapat membuat konstruktor (sub New) untuk menginisialisasi keadaan awal dari form kita (misalnya mengatur warna, ukuran, menambah control timer dll)
Public Sub New() 'Constructor

Me.BackColor = Sistem.Drawing.Color.Black Me.FormBorderStyle = FormBorderStyle.None Me.Width = Screen.PrimaryScreen.Bounds.Width Me.Height = Screen.PrimaryScreen.Bounds.Height For I As Integer = 0 to 14 Bola(I) = New Pantul(Me) Next I '150 millidetik MyTimer.Interval = 150 MyTimer.Enabled = True End Sub

Pada class MyForm kita dapat juga melakukan overriding terhadap metoda yang telah terdefinisi pada class Form, misalnya untuk metoda paint.
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs) Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3) MyBase.OnPaint(e) e.Graphics.DrawLine(MyPen,10,10,200,100) End Sub

Contoh Keunggulan OOP (Bagian 2)


Misalnya kita akan membuat program yang terdiri dari 2 objek pantul yang satu berbentuk bola dan satu berbentuk persegi.

INDOPROG

14

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Pada pendekatan OOP, misalnya kita telah memiliki class Pantul yang menampilkan bentuk lingkaran, selanjutnya adalah membuat class Pantul1 yang akan menampilkan bentuk persegi, tetapi kita tidak perlu merancang class Pantul1 dari awal melainkan cukup menurunkannya dari class Pantul dengan melakukan override terhadap metoda draw dan clear. Jadi dalam hal ini kita tidak perlu merancang class dari awal, tetapi cukup memperbaharui maupun mengembangkan class yang telah ada, sehingga waktu pemrograman dapat dipersingkat dan proses debug dapat dikurangi. Listing program menampilkan bola dan persegi pantul dilayar :
Option Explicit On Imports Sistem Imports Sistem.Windows.Forms Imports Microsoft.VisualBasic Public Class MyForm : Inherits Form Dim WithEvents MyTimer as New Timer Dim Bola As Pantul Dim Persegi As Pantul1 <Sistem.STAThread()> _ Public Shared Sub Main() Application.Run(New MyForm) End Sub

Public Sub New()

'Constructor

Me.BackColor = Sistem.Drawing.Color.Black Me.FormBorderStyle = FormBorderStyle.None Me.Width = Screen.PrimaryScreen.Bounds.Width Me.Height = Screen.PrimaryScreen.Bounds.Height Bola = New Pantul(Me) Persegi = New Pantul1(Me) MyTimer.Interval = 150 MyTimer.Enabled = True End Sub Private Sub MyTimer_Tock(sender as object, e as eventargs) _ handles MyTimer.Tick Bola.Move(Me) Persegi.Move(Me) End Sub End Class

Class Pantul Protected x As Single Protected y As Single Private sx As Single Private sy As Single

'posisi 'posisi 'jumlah 'jumlah

x dilayar y dilayar kolom x baris y

INDOPROG

15

Pemrograman Berorientasi Objek pada VB.NET


Private dx As Single Private dy As Single Public Sub New(f as form) sx = f.width \ 30 sy = f.height \ 30 x = rnd*(sx-2) + 2 y = rnd*(sy-2) + 2 dx = 1 dy = 1 Draw(f) End Sub 'arah bola terhadap x 'arah bola terhadap y 'constructor 'lebar form dibagi 30 'tinggi form dibagi 30 'posisi awal random 'arah diagonal ke bawah

Hendra, S.T.

Overridable Public Sub Draw(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3) MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30) End Sub Overridable Public Sub Clear(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna latar belakang form Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3) MyGraphic.DrawEllipse(MyPen, x*30,y*30,30,30) End Sub Public Sub Move(f as form) 'metoda 'hapus gambar bola sebelumnya Clear(f) 'gerakan bola dengan mengubah x, y sesuai dengan arah x = x + dx y = y + dy 'jika mengenai daerah bingkai If x < 2 or x > (sx-2) Then dx = -dx If y < 2 or y > (sy-2) Then dy = -dy 'gambar bola diposisi baru Draw(f) End Sub End Class Class Pantul1 : Inherits Pantul Public Sub New(f as form) MyBase.New(f) End Sub 'constructor 'menjalankan constructor base class

Overrides Public Sub Draw(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3) MyGraphic.DrawRectangle(MyPen,x*30,y*30,30,30) End Sub Overrides Public Sub Clear(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna latar belakang form Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics

INDOPROG

16

Pemrograman Berorientasi Objek pada VB.NET


Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3) MyGraphic.DrawRectangle(MyPen, x*30,y*30,30,30) End Sub End Class

Hendra, S.T.

INDOPROG

17

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Polymorphism
Polymorphism merupakan salah satu fasilitas yang krusial pada OOP, yang memiliki arti "satu nama, banyak bentuk". Hal ini disebut juga sebagai Overloading yang berarti menggunakan hal yang sama untuk tujuan yang berbeda. Dengan menggunakan Polymorphism kita dapat membuat banyak fungsi dengan nama yang sama tetapi memiliki daftar argument yang berbeda. Fungsi tersebut dijalankan berdasarkan daftar argument yang digunakan untuk menjalankan fungsi. Misalnya kita memperbaharui class Pantul dimana pada konstruktor kita dapat menentukan warna dari lingkaran.
Class Pantul Protected x As Single 'posisi x dilayar Protected y As Single 'posisi y dilayar Private sx As Single 'jumlah kolom x Private sy As Single 'jumlah baris y Private dx As Single 'arah bola terhadap x Private dy As Single 'arah bola terhadap y Private clr As Sistem.Drawing.Color Public Sub New(f as form) 'constructor me.New(f,Sistem.Drawing.Color.Red) End Sub Public Sub New(f as form, w as sistem.drawing.color) 'constructor sx = f.width \ 30 'lebar form dibagi 30 sy = f.height \ 30 'tinggi form dibagi 30 x = rnd*(sx-2) + 2 'posisi awal random y = rnd*(sy-2) + 2 dx = 1 'arah diagonal ke bawah dy = 1 clr = w Draw(f) End Sub Overridable Public Sub Draw(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Clr,3) MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30) End Sub Overridable Public Sub Clear(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna latar belakang form Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3) MyGraphic.DrawEllipse(MyPen, x*30,y*30,30,30) End Sub Public Sub Move(f as form) 'metoda 'hapus gambar bola sebelumnya Clear(f) 'gerakan bola dengan mengubah x, y sesuai dengan arah

INDOPROG

18

Pemrograman Berorientasi Objek pada VB.NET


x = x + dx y = y + dy 'jika mengenai daerah bingkai If x < 2 or x > (sx-2) Then dx = -dx If y < 2 or y > (sy-2) Then dy = -dy 'gambar bola diposisi baru Draw(f) End Sub End Class

Hendra, S.T.

Dalam hal ini class pantul memiliki dua konstruktor yang masing-masing memiliki daftar argument yang berbeda yaitu :
Public Sub New(f as form) 'constructor

Dan
Public Sub New(f as form, w as sistem.drawing.color)

Sehingga ketika kita membuat instance dari Class Pantul dapat dilakukan dengan :
Bola = New Pantul(Me)

Ataupun :
Bola = New Pantul(Me, Sistem.Drawing.Color.Blue)

Polymorphism juga dapat berupa pemanfaatan variable yang bertype base class untuk mengimplementasikan metoda pada class-class turunannya. Misalnya kita mendeklarasikan variable array bola yang terdiri dari dua elemen Dim Bola(1) As Pantul Bola(0) = New Pantul(Me) Bola(1) = New Pantul1(Me) Dimana variable Bola(n) sebenarnya merupakan variable type Pantul, tetapi dalam pemakaiannya kita gunakan untuk instance Pantul1, selanjutnya : Bola(0).Move(Me) Bola(1).Move(Me) Akan menjalankan metoda Move dari Class yang bersesuaian dengan instance objek yang dibuat.

Contoh Keunggulan OOP (Bagian 3)


Misalnya kita ingin membuat program animasi bola pantul di layar yang memberi kebebasan kepada pemakai untuk menentukan jumlah objek masing-masing bentuk dilayar : INDOPROG

19

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Dim JlhBola As Integer = Val(Inputbox("Jumlah Bola")) Dim JlhPersegi As Integer = Val(Inputbox("Jumlah Persegi"))

Selanjutnya kita membuat instance dari masing-masing class sesuai dengan jumlah yang ditentukan :
Dim Bola(14) As Pantul Dim Jlh As Integer Dim I As Integer = 0 Do While I < JlhBola Bola(I) = new Pantul(Me) I+=1 Loop Do While I < JlhBola+JlhPersegi Bola(I) = new Pantul1(Me) I+=1 Loop Jlh = JlhBola+JlhPersegi

Dalam hal ini kita mendeklarasikan variable array Bola yang bertipe Pantul, padahal dalam pemakaiannya kita gunakan juga untuk menampung instance untuk class Pantul1. Kemudian untuk mengerakan objek kita gunakan looping :
For I As Integer = 0 To Jlh-1 Bola(I).Move(Me)

INDOPROG

20

Pemrograman Berorientasi Objek pada VB.NET


Next I

Hendra, S.T.

Selanjutnya metoda move yang dijalankan sangat tergantung pada jenis instance dari variable objek. Dapatkah anda bayangkan bagaimana kalau tanpa menggunakan Polymorphism ? Listing program menampilkan bola dan persegi pantul dilayar sesuai dengan jumlah yang diinginkan pemakai :
Option Explicit On Imports Sistem Imports Sistem.Windows.Forms Imports Microsoft.VisualBasic Public Class MyForm : Inherits Form Dim WithEvents MyTimer as New Timer Dim Bola(14) As Pantul Dim Jlh As Integer <Sistem.STAThread()> _ Public Shared Sub Main() Application.Run(New MyForm) End Sub Public Sub New() 'Constructor

Me.BackColor = Sistem.Drawing.Color.Black Me.FormBorderStyle = FormBorderStyle.None Me.Width = Screen.PrimaryScreen.Bounds.Width Me.Height = Screen.PrimaryScreen.Bounds.Height Dim JlhBola As Integer = Val(Inputbox("Jumlah Bola")) Dim JlhPersegi As Integer = Val(Inputbox("Jumlah Persegi")) Dim I As Integer = 0 Do While I < JlhBola Bola(I) = new Pantul(Me) I+=1 Loop Do While I < JlhBola+JlhPersegi Bola(I) = new Pantul1(Me) I+=1 Loop Jlh = JlhBola+JlhPersegi MyTimer.Interval = 150 MyTimer.Enabled = True End Sub Private Sub MyTimer_Tock(sender as object, e as eventargs) _ handles MyTimer.Tick For I As Integer = 0 To Jlh-1

INDOPROG

21

Pemrograman Berorientasi Objek pada VB.NET


Bola(I).Move(Me) Next I End Sub End Class

Hendra, S.T.

Class Pantul Protected x As Single 'posisi x dilayar Protected y As Single 'posisi y dilayar Private sx As Single 'jumlah kolom x Private sy As Single 'jumlah baris y Private dx As Single 'arah bola terhadap x Private dy As Single 'arah bola terhadap y Private clr As Sistem.Drawing.Color Public Sub New(f as form) 'constructor me.New(f,Sistem.Drawing.Color.Red) End Sub Public Sub New(f as form, w as sistem.drawing.color) 'constructor sx = f.width \ 30 'lebar form dibagi 30 sy = f.height \ 30 'tinggi form dibagi 30 x = rnd*(sx-2) + 2 'posisi awal random y = rnd*(sy-2) + 2 dx = 1 'arah diagonal ke bawah dy = 1 clr = w Draw(f) End Sub Overridable Public Sub Draw(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Clr,3) MyGraphic.DrawEllipse(MyPen,x*30,y*30,30,30) End Sub Overridable Public Sub Clear(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna latar belakang form Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3) MyGraphic.DrawEllipse(MyPen, x*30,y*30,30,30) End Sub Public Sub Move(f as form) 'metoda 'hapus gambar bola sebelumnya Clear(f) 'gerakan bola dengan mengubah x, y sesuai dengan arah x = x + dx y = y + dy 'jika mengenai daerah bingkai If x < 2 or x > (sx-2) Then dx = -dx If y < 2 or y > (sy-2) Then dy = -dy 'gambar bola diposisi baru Draw(f)

INDOPROG

22

Pemrograman Berorientasi Objek pada VB.NET


End Sub End Class Class Pantul1 : Inherits Pantul Public Sub New(f as form) MyBase.New(f) End Sub 'constructor

Hendra, S.T.

Overrides Public Sub Draw(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna merah Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(Sistem.Drawing.Color.Red,3) MyGraphic.DrawRectangle(MyPen,x*30,y*30,30,30) End Sub Overrides Public Sub Clear(f as form) 'metoda 'gambar bola ukuran 30x30 dengan warna latar belakang form Dim MyGraphic As Sistem.Drawing.Graphics = f.CreateGraphics Dim MyPen As New Sistem.Drawing.Pen(f.BackColor,3) MyGraphic.DrawRectangle(MyPen, x*30,y*30,30,30) End Sub

End Class

Catatan : Konsep Polymorphism tidak berlaku untuk metoda Shadowing.

INDOPROG

23

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Interfaces
Interfaces memungkinkan kita untuk membuat definisi untuk interaksi komponen. Interface juga menyediakan cara lain untuk mengimplementasikan polymorphism. Melalui interface, kita dapat menentukan metoda yang mana suatu komponen harus miliki tanpa menentukan bagaimana metoda tersebut diimplementasikan (koding detail untuk metoda tersebut). Jadi dalam hal ini interface menyerupai prototype bagi class lain yang akan dikembangkan. Anda bisa membayangkan interface sebagai suatu standard pengembangan berbagai fasilitas dalam objek yang dibakukan, jika class mendukung standard interface tersebut, maka wajib memenuhi tata cara penulisan yang telah didefinisikan dalam interface. Misalnya kita membuka pusat layanan pelanggan dimana semua pelayan diwajibkan melakukan sapaan pembukan kepada para tamu yang dating berkunjung, dan kata pembuka sapaan telah distandarisasi untuk pagi, sore, dan malam.
Public Sub Sub Sub Interface Sapaan Pagi() Sore() Malam()

End Interface

Kita menggunakan keyword Interface untuk membuat suatu interface dan keyword implements untuk mengimplementasikan interface tersebut. Selanjutnya sapaan akan disampaikan dalam dua bahasa sesuai dengan asal pengunjung, sehingga kita dapat memgembangkan class dengan mengimplementasikan interface sapaan yang telah dibuat :
Public Class Indonesia : Implements Sapaan Sub Pagi() Implements Sapaan.Pagi Console.WriteLine("Selamat Pagi") End Sub Sub Sore() Implements Sapaan.Sore Console.WriteLine("Selamat Sore") End Sub Sub Malam() Implements Sapaan.Malam Console.WriteLine("Selamat Malam") End Sub End Class Public Class English : Implements Sapaan Sub Pagi() Implements Sapaan.Pagi Console.WriteLine("Good Morning") End Sub Sub Sore() Implements Sapaan.Sore

INDOPROG

24

Pemrograman Berorientasi Objek pada VB.NET


Console.WriteLine("Good Afternoon") End Sub Sub Malam() Implements Sapaan.Malam Console.WriteLine("Good Evening") End Sub End Class

Hendra, S.T.

Dan listing konkret untuk contoh pemakaian interface :


Option Explicit On Imports Sistem Public Module MyModule Sub Main() Dim Domestik As New Indonesia Dim Internasional As New English Domestik.Pagi() Internasional.Pagi() End Sub Public Interface Sapaan Sub Pagi() Sub Sore() Sub Malam() End Interface Public Class Indonesia : Implements Sapaan Sub Pagi() Implements Sapaan.Pagi Console.WriteLine("Selamat Pagi") End Sub Sub Sore() Implements Sapaan.Sore Console.WriteLine("Selamat Sore") End Sub Sub Malam() Implements Sapaan.Malam Console.WriteLine("Selamat Malam") End Sub End Class Public Class English : Implements Sapaan Sub Pagi() Implements Sapaan.Pagi Console.WriteLine("Good Morning") End Sub Sub Sore() Implements Sapaan.Sore Console.WriteLine("Good Afternoon") End Sub Sub Malam() Implements Sapaan.Malam Console.WriteLine("Good Evening") End Sub

INDOPROG

25

Pemrograman Berorientasi Objek pada VB.NET


End Class End Module

Hendra, S.T.

Dan kalau dijalankan akan menghasilkan tampilan berikut

INDOPROG

26

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Abstract Classes
Suatu class abstrak tidak dapat digunakan untuk membuat objek. Suatu class abstrak dirancang untuk berlaku sebagai suatu base class (untuk diwariskan ke class lain). Suatu abstrak class digunakan sebagai konsep design yang menjadi acuan pengembangan bagi class-class yang akan dikembangkan. Class abstrak menyerupai interface. Setelah suatu class abstrak dideklarasikan, dia tidak dapat di buat objek instancenya, melainkan harus diturunkan.

Membuat class Abstrak


Pada Visual Basic .NET kita dapat membuat abstrak class dengan menggunakan keyword MustInherit.
MustInherit Public Class Sapaan MustOverride Sub Pagi() MustOverride Sub Sore() MustOverride Sub Malam() End Class

Kemudian pada contoh diatas pada masing-masing metoda sapaan kita menambahkan keyword MustOverride bahwa metoda Pagi, Sore, dan Malam harus di override pada class turunannya.
Option Explicit On Imports Sistem Public Module MyModule Sub Main() Dim Domestik As New Indonesia Dim Internasional As New English Domestik.Pagi() Internasional.Pagi() End Sub MustInherit Public Class Sapaan MustOverride Sub Pagi() MustOverride Sub Sore() MustOverride Sub Malam() End Class Public Class Indonesia : Inherits Sapaan Overrides Sub Pagi() Console.WriteLine("Selamat Pagi") End Sub Overrides Sub Sore() Console.WriteLine("Selamat Sore") End Sub Overrides Sub Malam()

INDOPROG

27

Pemrograman Berorientasi Objek pada VB.NET


Console.WriteLine("Selamat Malam") End Sub End Class Public Class English : Inherits Sapaan Overrides Sub Pagi() Console.WriteLine("Good Morning") End Sub Overrides Sub Sore() Console.WriteLine("Good Afternoon") End Sub Overrides Sub Malam() Console.WriteLine("Good Evening") End Sub End Class End Module

Hendra, S.T.

INDOPROG

28

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Program Tetris
Oleh : Hendra Soewarno Contoh aplikasi pemrograman GDI+ untuk pembuatan games tetris dengan pendekatan berorientasi objek.

Untuk memahami program ini anda perlu mengerti pemrograman form, event handling, dan array, serta GDI+

INDOPROG

29

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Rancangan program
Program ini menggunakan pendekatan berorientasi objek dengan membuat dua class untuk objek Shape dan objek Grid

Class TShape
Class ini berfungsi menghasilkan bentuk-bentuk dengan sistem koordinat berikut :

{1,0},{1,1},{1,2},{1,3}

Dan rotasi ke kanan akan menjadi

{0,1},{1,1},{2,1},{3,1}

Berikut ini adalah rincian array untuk masing-masing Shape dan rotasinya
{1,0},{1,1},{1,2},{1,3} {0,1},{1,1},{2,1},{3,1} {1,0},{1,1},{1,2},{1,3} {0,1},{1,1},{2,1},{3,1} {0,0},{0,1},{1,0},{1,1} {0,0},{0,1},{1,0},{1,1} {0,0},{0,1},{1,0},{1,1} {0,0},{0,1},{1,0},{1,1} {0,0},{0,1},{0,2},{1,2} {0,0},{0,1},{1,0},{2,0} {0,0},{1,0},{1,1},{1,2} {0,1},{1,1},{2,0},{2,1} {0,0},{0,1},{0,2},{1,1} {0,0},{1,0},{1,1},{2,0} {1,0},{0,1},{1,1},{1,2} {0,1},{1,0},{1,1},{2,1} {0,0},{0,1},{1,1},{1,2} {0,1},{1,0},{1,1},{2,0} {0,0},{0,1},{1,1},{1,2} {0,1},{1,0},{1,1},{2,0}

INDOPROG

30

Pemrograman Berorientasi Objek pada VB.NET


{0,1},{0,2},{1,0},{1,1} {0,0},{1,0},{1,1},{2,1} {0,1},{0,2},{1,0},{1,1} {0,0},{1,0},{1,1},{2,1}

Hendra, S.T.

Contoh :

Yang memiliki rincian array sebagai berikut :


{0,0},{0,1},{0,2},{1,1} {0,0},{1,0},{1,1},{2,0} {1,0},{0,1},{1,1},{1,2} {0,1},{1,0},{1,1},{2,1}

Yang selanjutnya dipetakan menjadi suatu array 4 dimensi yang berisi koordinat dari masingmasing shape :
'Array 4 dimensi yang berisi nilai sel dari masing-masing bentuk 'serta bentuk rotasinya private sarr(,,,) as integer = {{{{1,0},{1,1},{1,2},{1,3}}, _ {{0,1},{1,1},{2,1},{3,1}}, _ {{1,0},{1,1},{1,2},{1,3}}, _ {{0,1},{1,1},{2,1},{3,1}}}, _ {{{0,0},{0,1},{1,0},{1,1}}, _ {{0,0},{0,1},{1,0},{1,1}}, _ {{0,0},{0,1},{1,0},{1,1}}, _ {{0,0},{0,1},{1,0},{1,1}}}, _ {{{0,0},{0,1},{0,2},{1,2}}, _ {{0,0},{0,1},{1,0},{2,0}}, _ {{0,0},{1,0},{1,1},{1,2}}, _ {{0,1},{1,1},{2,0},{2,1}}}, _ {{{0,0},{0,1},{0,2},{1,1}}, _ {{0,0},{1,0},{1,1},{2,0}}, _ {{1,0},{0,1},{1,1},{1,2}}, _ {{0,1},{1,0},{1,1},{2,1}}}, _ {{{0,0},{0,1},{1,1},{1,2}}, _ {{0,1},{1,0},{1,1},{2,0}}, _ {{0,0},{0,1},{1,1},{1,2}}, _ {{0,1},{1,0},{1,1},{2,0}}}, _ {{{0,1},{0,2},{1,0},{1,1}}, _ {{0,0},{1,0},{1,1},{2,1}}, _ {{0,1},{0,2},{1,0},{1,1}}, _ {{0,0},{1,0},{1,1},{2,1}}}}

Variabel pada Class TShape


private currentshape as integer private nextshape as integer 'menyimpan nomor current shape 'menyimpan nomor next shape

INDOPROG

31

Pemrograman Berorientasi Objek pada VB.NET


public currentcolor as color public nextcolor as color private currentstate as integer

Hendra, S.T.

'menyimpan warna current shape 'menyimpan warna next shape 'nomor rotasi shape

Konstruktor TShape Konstuktor TShape merupakan metoda yang otomatis dijalankan begitu instance dari TShape terbentuk. Misalnya :
private gtshape as new tshape 'instance class tshape

berfungsi menghasilkan bentuk Shape berikutnya yang akan dimunculkan setelah bentuk sekarang dengan memanggil metoda generateshape.
'konstrutor untuk class tshape public sub new() generateshape(nextshape, nextcolor) end sub

Metoda GenerateNextShape Metoda ini berfungsi memindahkan nextshape menjadi currentshape, serta membuat nextshape yang berikutnya.
'Membuat next shape berikutnya, dan menset current shape public sub generatenextshape() currentshape = nextshape currentcolor = nextcolor currentstate = 0 'rotasi ke 0 generateshape(nextshape, nextcolor) 'buat nextshape baru end sub

Sub GenerateShape Berfungsi menghasilkan shape secara random, dan warnanya


'Membuat bentuk dan mengembalikan melalui parameter shape dan shapecolor private sub generateshape(byref shape as integer, _ byref shapecolor as color) dim c as integer shape = int(rnd*6) 'random untuk shape c = int(rnd*8) 'random untuk shape color select case c case 0 : shapecolor = color.red case 1 : shapecolor = color.green case 2 : shapecolor = color.blue case 3 : shapecolor = color.orange case 4 : shapecolor = color.pink case 5 : shapecolor = color.cyan

INDOPROG

32

Pemrograman Berorientasi Objek pada VB.NET


case 6 : shapecolor = color.gray case else shapecolor = color.magenta end select end sub

Hendra, S.T.

Catatan : Parameter pada sub ini dilewatkan secara by refrence, sehingga nilai dapat dikembalikan ke variable shape dan shapecolor. Metoda Rotate Metode ini berfungsi menset nilai currentstate ke nilai rotasi berikutnya (0 ke 1, 1 ke 2, 2 ke 3, 3 ke 0).

'Rotasi ke bentuk berikutnya public sub rotate() currentstate = currentstate + 1 if currentstate = 4 then currentstate = 0 end sub

'Rotasi berikutnya 'Kembali ke bentuk awal

Metoda DeRotate Metode ini berfungsi menset nilai currentstate ke nilai rotasi sebelumnya (1 ke 0, 2 ke 1, 3 ke 2, 0 ke 3).
'Rotasi ke bentuk sebelumnya public sub derotate() currentstate = currentstate - 1 if currentstate = -1 then currentstate = 3 end sub

'Rotasi sebelumnya

Metoda CurrentShapeSel Properti ini berfungsi mengembalikan nilai sel yang ke i,j dari array shape yang tersimpan pada array 4 dimensi sarr.
'Mengembalikan sel i,j dari current shape public function currentshapesel(i as integer, j as integer) return sarr(currentshape,currentstate,i,j) end function

Nilai sel yang dikembalikan sangat tergantung pada nilai variable currentshape (bentuk shape), dan currentstate (nomor rotasi)

INDOPROG

33

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Misalnya nilai currentshape = 4, dan nilai currentstate = 3

{1,0},{0,1},{1,1},{1,2}

Dan CurrentShapeSel(0,0) akan menghasilkan 1 CurrentShapeSel(0,1) akan menghasilkan 0 Property NextShapeSel Properti ini berfungsi mengembalikan nilai sel yang ke i,j dari array shape yang tersimpan pada array 4 dimensi sarr.
'Mengembalikan sel i,j dari next shape public function nextshapesel(i as integer, j as integer) return sarr(nextshape,0,i,j) 'Bentuk awal end function

Nilai sel yang dikembalikan sangat tergantung pada nilai variable nextshape (bentuk shape), dan currentstate defaultnya 0, karena nextshape belum mengalami rotasi.

Class TGrid
Class ini berfungsi menyediakan mekanisme Grid pada permainan Tetris, dimana pada memori computer diwakili dengan array dua dimensi, dengan gambaran sebagai berikut :

INDOPROG

34

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Variabel yang digunakan


public parr(15,25) as integer public carr(15,25) as color 'Array menyimpan isi sel pada grid 'Array menyimpan warna sel pada grid

Merupakan array yang mewakili grid dilayar, jika suatu sel terisi gambar, maka nilai parr(x,y) akan berisi nilai 1, dan carr(x,y) akan berisi nilai warna gambar. Kontruktor TGrid Begitu instance dari TGrid terbuat, maka akan mengisi awal array parr menjadi sebagai berikut, yang akan menjadi bingkai dari grid, sehingga area permainan mulai dari (3,0) s/d (12,22)

INDOPROG

35

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

'konstruktur class tgrid public sub new() dim i, j as integer for i = 0 to 15 for j = 0 to 25 parr(i,j) = 1 next j next i for i = 3 to 12 for j = 0 to 22 parr(i,j) = 0 next j next i end sub

'isi bingkai

'isi arena

Metoda TestShape Metoda ini berfungsi mengisi nilai dari shape ke posisi x,y dalam grid, dengan syarat parr(x,y) masih 0
'Menempatkan shape pada posisi x,y di grid public sub putshape(x as integer, y as integer, s as tshape) dim i as integer for i = 0 to 3

INDOPROG

36

Pemrograman Berorientasi Objek pada VB.NET


parr(x+s.currentshapesel(i,0), y+s.currentshapesel(i,1)) carr(x+s.currentshapesel(i,0), y+s.currentshapesel(i,1)) next i end sub _ = 1 _ = s.currentcolor

Hendra, S.T.

Misalnya putshape yang ke 4, keposisi 6,21 pada grid, yang akan mengisi nilai ke parr

Metoda TestShape Metoda ini berfungsi mencoba apakah shape dapat ditempatkan pada posisi x,y dalam grid, dengan syarat parr(x,y) masih 0
'Mengembalikan nilai yang menunjukan apakah 'shape dapat ditempatkan pada grid diposisi x,y public function testshape(x as integer, y as integer, s as tshape)_ as boolean dim i as integer for i = 0 to 3 'apakah sel pada grid telah terisi ( > 0 ) if parr(x+s.currentshapesel(i,0), _ y+s.currentshapesel(i,1)) > 0 then return false end if

INDOPROG

37

Pemrograman Berorientasi Objek pada VB.NET


next i return true end function

Hendra, S.T.

Metoda CheckGrid Metoda ini berfungsi memeriksa apakah ada baris dalam array parr yang berisi nilai 1 dari kolom 3 s/d 12.
'periksa apakah ada baris yang berhasil diselesaikan pemain public function checkgrid() as integer dim i,j as integer dim b,k as integer dim complete as integer complete = 0 i = 22 do while i > 3 j = 3 do while parr(j,i) <> 0 and j < 13 j=j+1 loop if j = 13 then beep 'sound beep complete = complete + 1 for b = i to 4 step -1 for k = 3 to 12 parr(k,b) = parr(k,b-1) carr(k,b) = carr(k,b-1) next k next b else i = i - 1 end if loop return complete end function end class

Misalnya array parr pada baris 22 berisi nilai 1 mulai baris 3 s/d 12, maka setelah metoda ChekGrid dijalankan akan menghapus baris 22 dan mengeser baris diatasnya ke bawah, dan mengembalikan nilai berapa baris yang berhasil diselesaikan.

INDOPROG

38

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Class Tetris
Class ini merupakan class utama permainan Tetris

Variabel yang digunakan


private private private private private private private private withevents gtimer as new sistem.windows.forms.timer labelscore as new label labelgameover as new label gtgrid as new tgrid 'instance class tgrid gtshape as new tshape 'instance class tshape g as graphics x,y as integer 'posisi x,y shape pada grid score as integer 'score permainan

Konstruktor Tetris
Berfungsi mempersiapkan tampilan form, seperti title form, ukuran form, menempatkan label untuk keterangan score dan gameover, membuat objek Graphics yang akan digunakan untuk menyediakan metoda pengambaran, serta mempersiapkan Shape berikutnya.
public sub new() me.text = "Program Tetris" me.size = new size(450, 600) labelscore.location = new point(61,30) me.controls.add(labelscore) labelgameover.location = new point(200,30) me.controls.add(labelgameover) g = me.creategraphics() score = 0 printscore() nextshape() 'persiapkan shape berikutnya end sub

Metoda NextShape
Metoda ini berfungsi mempersiapkan shape berikutnya, dan menset interval timer 200 millidetik, dan posisi awal shape mulai di posisi (7,0)
'metoda mempersiapkan shape berikutnya private sub nextshape() gtimer.interval = 200

'set interval 200 millidetik

INDOPROG

39

Pemrograman Berorientasi Objek pada VB.NET


gtimer.enabled = true gtshape.generatenextshape() redrawnextshape() x = 7 y = 0 end sub

Hendra, S.T.

'mengaktifkan timer 'cetak shape berikutnya 'koordinat awal di 7,0

Metoda MoveShape
Metoda ini berfungsi menggambarkan animasi pergerakan Shape pada posisi x,y sesuai dengan arah gerakan yang ditentukan pada dx dan dy, misalnya bergerak ke kiri, kama dx = -1, dy = 0
'memindahkan shape keposisi x,y private sub movexy(dx,dy) clearshape() x = x + dx y = y + dy drawshape() end sub

'hapus gambar sebelumnya 'ubah posisi x,y 'gambar diposisi baru

Metoda MoveShape
Metoda ini berfungsi memperbaharui nilai score di layar
'metoda untuk mencetak score dilayar private sub printscore() labelscore.text = "Score : " & score.tostring() end sub

Metoda MoveShape
Metoda ini berfungsi mengubah tulisan di labelgameover menjadi Game Over
'metoda untuk mencetak gameover private sub printgameover() labelgameover.text = "Game Over" end sub

Event Tick
Event ini secara otomatis akan dibangkitkan oleh Timer secara berkala untuk mengerakan Shape ke bawah, dengan senantiasa apakah Shape telah mencapai batas gerakan, jika ya, maka akan memanggil metoda putshape pada TGrid. Jika Shape tertahan dibaris < 3 artinya Game Over
'mengerakan shape ke bawah dengan interval waktu tertentu private sub gtimer_tick(sender as object, e as eventargs) _ handles gtimer.tick 'apakah shape masih bisa turun kebawah if gtgrid.testshape(x,y+1,gtshape) then

INDOPROG

40

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

movexy(0,1) 'jika ya pindah shape 1 baris ke bawah else gtgrid.putshape(x,y,gtshape) 'tempatkan shape kegrid score = score + gtgrid.checkgrid() 'periksa baris yang lengkap redrawgrid() 'cetak ulang grid printscore() 'cetak score 'jika shape tertahan di baris 3, artinya game over if y < 3 then gtimer.enabled = false 'matikan timer karena gameover printgameover() 'tampil pesan gameover else nextshape() 'persiapkan gambar berikutnya end if end if end sub

Event KeyDown
Event ini secara otomatis akan dibangkitkan apabila adanya penekanan tombol oleh pemakai, Jika panah atas akan merotasi shape jika panah kiri akan mengerakan shape ke kiri jika panah kanan akan mengerakan shape ke kanan jika panah bawah akan mempercepat turunya shape
'deteksi penekanan tombol dengan event keydown pada form private sub tetris_keydown(sender as object, e as keyeventargs) _ handles mybase.keydown select case e.keyvalue case 38, 104, 12,101 : 'Panah atas, 8, 5 gtshape.rotate() 'rotasi 'apakah hasil rotasi dapat ditempatkan diposisi x,y if gtgrid.testshape(x,y,gtshape) then 'kalau ya, rotasi balik kembali gtshape.derotate() clearshape() 'hapus animasi shape gtshape.rotate() 'rotasi drawshape() 'gambar shape ke layar else gtshape.derotate() end if case 37, 100 : 'Panah kiri, 4 'jika shape dapat ditempatkan kekiri if gtgrid.testshape(x-1,y,gtshape) then movexy(-1,0) 'pindah ke kiri end if case 39, 102 : 'Panah kanan, 6 if gtgrid.testshape(x+1,y,gtshape) then movexy(1,0) end if case 40, 98 : 'Panah bawah, 2 interval dipercepat gtimer.interval = 10 end select end sub

INDOPROG

41

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Metoda DrawSel
Metoda ini berfungsi menggambar sel Shape ke layar untuk animasi, metoda ini akan dipanggil oleh metoda drawshape dan OnPaint
'menggambar sel dari suatu shape private sub drawsel(pen as pen, brush as brush, _ x as integer, y as integer, _ w as integer, h as integer) if y > 2 then g.fillrectangle(brush,x*21,y*21,w,h) g.drawrectangle(pen,x*21,y*21,w,h) end if end sub

Metoda DrawShape
Metoda ini berfungsi menggambar Shape ke layar dengan memanggil metoda DrawSel untuk masing-masing sel
'mengambar shape secara sementara private sub drawshape() dim i as integer dim pen as new pen(color.white,1) dim brush as new solidbrush(gtshape.currentcolor) for i = 0 to 3 drawsel(pen,brush, _ x+gtshape.currentshapesel(i,0), _ y+gtshape.currentshapesel(i,1), _ 20,20) next i end sub

Metoda DrawShape
Metoda ini berfungsi menghapus Shape di layar dengan memanggil metoda DrawSel untuk masing-masing sel (warna hitam)
'menghapus shape sementara private sub clearshape() dim i as integer dim pen as new pen(color.black,1) dim brush as new solidbrush(color.black) for i = 0 to 3 drawsel(pen,brush, _ x+gtshape.currentshapesel(i,0), _ y+gtshape.currentshapesel(i,1),20,20) next i end sub

Metoda ReDrawNextShape
Metoda ini berfungsi menggambar NextShape di layar setiap adanya perubahan nextshape

INDOPROG

42

Pemrograman Berorientasi Objek pada VB.NET


'mengambar ulang nextshape private sub redrawnextshape dim i as integer dim pen as new pen(color.black,1) dim brush as new solidbrush(color.black) g.fillrectangle(brush,300,60,120,120) pen.color = color.white brush.color = gtshape.nextcolor for i = 0 to 3 drawsel(pen,brush, _ 16+gtshape.nextshapesel(i,0), _ 4+gtshape.nextshapesel(i,1), _ 20,20) next i end sub

Hendra, S.T.

Metoda ReDrawGrid
Metoda ini berfungsi menggambar ulang Grid dilayar
'mengambar ulang grid private sub redrawgrid dim i,j as integer dim pen as new pen(color.white,1) dim brush as new solidbrush(color.red) for i = 3 to 12 for j = 3 to 22 if gtgrid.parr(i,j) <> 0 then 'Menggambar ulang isi grid pen.color = color.white brush.color = gtgrid.carr(i,j) drawsel(pen,brush,i,j,20,20) else pen.color = color.black brush.color = color.black drawsel(pen,brush,i,j,20,20) end if next j next i pen.color = color.black g.drawrectangle(pen,3*21-1,3*21-1,10*21+1,20*21+1) end sub

Metoda OnPaint
Metoda OnPaint akan secara otomatis diaktifkan oleh windows setiap kali layar form Tetris digambar ulang (misalnya waktu Maximize dan Minimize)
'melakukan overide terhadap sub onpaint pada base class 'untuk menggambar isi grid setiap proses refresh pada form protected overrides sub onpaint(e as painteventargs) redrawgrid() redrawnextshape() end sub

INDOPROG

43

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

Program Kongkret
option explicit on imports sistem imports sistem.drawing imports sistem.windows.forms imports microsoft.visualbasic public class tetris : inherits sistem.windows.forms.form <sistem.STAThread> _ public shared sub main() randomize() application.run(new tetris) end sub private private private private private private private private withevents gtimer as new sistem.windows.forms.timer labelscore as new label labelgameover as new label gtgrid as new tgrid 'instance class tgrid gtshape as new tshape 'instance class tshape g as graphics x,y as integer 'posisi x,y shape pada grid score as integer 'score permainan

public sub new() me.text = "Program Tetris" me.size = new size(450, 600) labelscore.location = new point(61,30) me.controls.add(labelscore) labelgameover.location = new point(200,30) me.controls.add(labelgameover) g = me.creategraphics() score = 0 printscore() nextshape() 'persiapkan shape berikutnya end sub 'metoda mempersiapkan shape berikutnya private sub nextshape() gtimer.interval = 200 gtimer.enabled = true gtshape.generatenextshape() redrawnextshape() x = 7 y = 0 end sub 'memindahkan shape keposisi x,y private sub movexy(dx,dy) clearshape() x = x + dx y = y + dy drawshape() end sub

'set interval 200 millidetik 'mengaktifkan timer 'cetak shape berikutnya 'koordinat awal di 7,0

'hapus gambar sebelumnya 'ubah posisi x,y 'gambar diposisi baru

INDOPROG

44

Pemrograman Berorientasi Objek pada VB.NET


'metoda untuk mencetak score dilayar private sub printscore() labelscore.text = "Score : " & score.tostring() end sub 'metoda untuk mencetak gameover private sub printgameover() labelgameover.text = "Game Over" end sub

Hendra, S.T.

'mengerakan shape ke bawah dengan interval waktu tertentu private sub gtimer_tick(sender as object, e as eventargs) _ handles gtimer.tick 'apakah shape bisa turun kebawah if gtgrid.testshape(x,y+1,gtshape) then movexy(0,1) 'pindah shape 1 baris ke bawah else gtgrid.putshape(x,y,gtshape) 'tempatkan shape kegrid score = score + gtgrid.checkgrid() 'periksa baris yang lengkap redrawgrid() 'cetak ulang grid printscore() 'cetak score 'jika shape tertahan di baris 3, artinya game over if y < 3 then gtimer.enabled = false 'matikan timer karena gameover printgameover() 'tampil pesan gameover else nextshape() 'persiapkan gambar berikutnya end if end if end sub 'deteksi penekanan tombol dengan event keydown pada form private sub tetris_keydown(sender as object, e as keyeventargs) _ handles mybase.keydown select case e.keyvalue case 38, 104, 12,101 : 'Panah atas, 8, 5 gtshape.rotate() 'rotasi 'apakah hasil rotasi dapat ditempatkan diposisi x,y if gtgrid.testshape(x,y,gtshape) then 'kalau ya, rotasi balik kembali gtshape.derotate() clearshape() 'hapus animasi shape gtshape.rotate() 'rotasi drawshape() 'gambar shape ke layar else gtshape.derotate() end if case 37, 100 : 'Panah kiri, 4 'jika shape dapat ditempatkan kekiri if gtgrid.testshape(x-1,y,gtshape) then movexy(-1,0) 'pindah ke kiri end if case 39, 102 : 'Panah kanan, 6 if gtgrid.testshape(x+1,y,gtshape) then movexy(1,0) end if case 40, 98 : 'Panah bawah, 2 interval dipercepat

INDOPROG

45

Pemrograman Berorientasi Objek pada VB.NET


gtimer.interval = 10 end select end sub 'menggambar sel dari suatu shape private sub drawsel(pen as pen, brush as brush, _ x as integer, y as integer, _ w as integer, h as integer) if y > 2 then g.fillrectangle(brush,x*21,y*21,w,h) g.drawrectangle(pen,x*21,y*21,w,h) end if end sub 'mengambar shape secara sementara private sub drawshape() dim i as integer dim pen as new pen(color.white,1) dim brush as new solidbrush(gtshape.currentcolor) for i = 0 to 3 drawsel(pen,brush, _ x+gtshape.currentshapesel(i,0), _ y+gtshape.currentshapesel(i,1), _ 20,20) next i end sub 'menghapus shape sementara private sub clearshape() dim i as integer dim pen as new pen(color.black,1) dim brush as new solidbrush(color.black) for i = 0 to 3 drawsel(pen,brush, _ x+gtshape.currentshapesel(i,0), _ y+gtshape.currentshapesel(i,1),20,20) next i end sub 'mengambar ulang nextshape private sub redrawnextshape dim i as integer dim pen as new pen(color.black,1) dim brush as new solidbrush(color.black) g.fillrectangle(brush,300,60,120,120) pen.color = color.white brush.color = gtshape.nextcolor for i = 0 to 3 drawsel(pen,brush, _ 16+gtshape.nextshapesel(i,0), _ 4+gtshape.nextshapesel(i,1), _ 20,20) next i end sub

Hendra, S.T.

'mengambar ulang grid

INDOPROG

46

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

private sub redrawgrid dim i,j as integer dim pen as new pen(color.white,1) dim brush as new solidbrush(color.red) for i = 3 to 12 for j = 3 to 22 if gtgrid.parr(i,j) <> 0 then 'Menggambar ulang isi grid pen.color = color.white brush.color = gtgrid.carr(i,j) drawsel(pen,brush,i,j,20,20) else pen.color = color.black brush.color = color.black drawsel(pen,brush,i,j,20,20) end if next j next i pen.color = color.black g.drawrectangle(pen,3*21-1,3*21-1,10*21+1,20*21+1) end sub 'melakukan overide terhadap sub onpaint pada base class 'untuk menggambar isi grid setiap proses refresh pada form protected overrides sub onpaint(e as painteventargs) redrawgrid() redrawnextshape() end sub end class

public class tgrid public parr(15,25) as integer grid public carr(15,25) as color grid 'konstruktur class tgrid public sub new() dim i, j as integer for i = 0 to 15 for j = 0 to 25 parr(i,j) = 1 next j next i for i = 3 to 12 for j = 0 to 22 parr(i,j) = 0 next j next i end sub

'Array menyimpan isi sel pada 'Array menyimpan warna sel pada

'isi bingkai

'isi arena

'Mengembalikan nilai yang menunjukan apakah 'shape dapat ditempatkan pada grid diposisi x,y public function testshape(x as integer, y as integer, s as tshape) _ as boolean dim i as integer

INDOPROG

47

Pemrograman Berorientasi Objek pada VB.NET


for i = 0 to 3 'apakah sel pada grid telah terisi if parr(x+s.currentshapesel(i,0), _ y+s.currentshapesel(i,1)) > 0 then return false end if next i return true end function

Hendra, S.T.

'Menempatkan shape pada posisi x,y di grid public sub putshape(x as integer, y as integer, s as tshape) dim i as integer for i = 0 to 3 parr(x+s.currentshapesel(i,0), _ y+s.currentshapesel(i,1)) = 1 carr(x+s.currentshapesel(i,0), _ y+s.currentshapesel(i,1)) = s.currentcolor next i end sub 'periksa apakah ada baris yang berhasil diselesaikan pemain public function checkgrid() as integer dim i,j as integer dim b,k as integer dim complete as integer complete = 0 i = 22 do while i > 3 j = 3 do while parr(j,i) <> 0 and j < 13 j=j+1 loop if j = 13 then beep 'sound beep complete = complete + 1 for b = i to 4 step -1 for k = 3 to 12 parr(k,b) = parr(k,b-1) carr(k,b) = carr(k,b-1) next k next b else i = i - 1 end if loop return complete end function end class public class tshape private currentshape private nextshape as public currentcolor public nextcolor as

as integer integer as color color

'menyimpan 'menyimpan 'menyimpan 'menyimpan

nomor nomor warna warna

current shape next shape current shape next shape

private currentstate as integer

'nomor rotasi shape

INDOPROG

48

Pemrograman Berorientasi Objek pada VB.NET

Hendra, S.T.

'Array 4 dimensi yang berisi nilai sel dari masing-masing bentuk 'serta bentuk rotasinya private sarr(,,,) as integer = {{{{1,0},{1,1},{1,2},{1,3}}, _ {{0,1},{1,1},{2,1},{3,1}}, _ {{1,0},{1,1},{1,2},{1,3}}, _ {{0,1},{1,1},{2,1},{3,1}}}, _ {{{0,0},{0,1},{1,0},{1,1}}, _ {{0,0},{0,1},{1,0},{1,1}}, _ {{0,0},{0,1},{1,0},{1,1}}, _ {{0,0},{0,1},{1,0},{1,1}}}, _ {{{0,0},{0,1},{0,2},{1,2}}, _ {{0,0},{0,1},{1,0},{2,0}}, _ {{0,0},{1,0},{1,1},{1,2}}, _ {{0,1},{1,1},{2,0},{2,1}}}, _ {{{0,0},{0,1},{0,2},{1,1}}, _ {{0,0},{1,0},{1,1},{2,0}}, _ {{1,0},{0,1},{1,1},{1,2}}, _ {{0,1},{1,0},{1,1},{2,1}}}, _ {{{0,0},{0,1},{1,1},{1,2}}, _ {{0,1},{1,0},{1,1},{2,0}}, _ {{0,0},{0,1},{1,1},{1,2}}, _ {{0,1},{1,0},{1,1},{2,0}}}, _ {{{0,1},{0,2},{1,0},{1,1}}, _ {{0,0},{1,0},{1,1},{2,1}}, _ {{0,1},{0,2},{1,0},{1,1}}, _ {{0,0},{1,0},{1,1},{2,1}}}} 'konstrutor untuk class tshape public sub new() generateshape(nextshape, nextcolor) end sub 'Membuat next shape berikutnya, dan menset current shape public sub generatenextshape() currentshape = nextshape currentcolor = nextcolor currentstate = 0 'rotasi ke 0 generateshape(nextshape, nextcolor) 'buat nextshape baru end sub 'Membuat bentuk dan mengembalikan melalui parameter shape dan shapecolor private sub generateshape(byref shape as integer, _ byref shapecolor as color) dim c as integer shape = int(rnd*6) 'random untuk shape c = int(rnd*8) 'random untuk shape color select case c case 0 : shapecolor = color.red case 1 : shapecolor = color.green case 2 : shapecolor = color.blue case 3 : shapecolor = color.orange case 4 : shapecolor = color.pink case 5 : shapecolor = color.cyan case 6 : shapecolor = color.gray case else shapecolor = color.magenta

INDOPROG

49

Pemrograman Berorientasi Objek pada VB.NET


end select end sub 'Rotasi ke bentuk berikutnya public sub rotate() currentstate = currentstate + 1 if currentstate = 4 then currentstate = 0 end sub 'Rotasi ke bentuk sebelumnya public sub derotate() currentstate = currentstate - 1 if currentstate = -1 then currentstate = 3 end sub

Hendra, S.T.

'Rotasi berikutnya 'Kembali ke bentuk awal

'Rotasi sebelumnya

'Mengembalikan sel i,j dari current shape public function currentshapesel(i as integer, j as integer) return sarr(currentshape,currentstate,i,j) end function 'Mengembalikan sel i,j dari next shape public function nextshapesel(i as integer, j as integer) return sarr(nextshape,0,i,j) 'Bentuk awal end function end class

Kompilasi Program
Vbc tetris.vb /r:sistem.dll /r:sistem.drawing.dll /r:sistem.windows.forms.dll

INDOPROG

50

C/C++ Programming

Hendra, S.T.

Kata Pengantar
Bahasa pemrograman C/C++ merupakan bahasa yang popular didalam pengajaran pada computer sains maupun pada kalangan programmer yang mengembangkan system software maupun aplikasi. Bahasa C/C++ sifatnya portable, karena compilernya tersedia hampir pada semua arsitektur computer maupun system operasi, sehingga investasi waktu dan tenaga yang anda lakukan dalam mempelajari bahasa pemrograman ini memiliki nilai strategis yang sangat menjanjikan. Bahasa C/C++ merupakan bahasa yang sangat ketat dalam pemakaian type data maupun penulisannya yang case sensitif, hal ini berarti programmer di tuntut kedisiplinannya dalam penulisan program. Sesuatu fasilitas yang tersedia dalam C/C++ yang tidak ditemukan pada bahasa pemrogaman lainnya adalah pointer, dengan pemanfaatan pointer programmer dapat melakukan manipulasi memori secara langsung. Dewasa ini beberapa bahasa yang memiliki syntax penulisan yang menyerupai C/C++ adalah Java, Javascript dan PHP, yang artinya bahwa kemampuan pemrograman dengan C/C++ akan mempermudah anda untuk mempelajari bahasa modern seperti Java maupun C# (dibaca C sharp). Akhirnya penulis mengucapkan selamat belajar dan semoga buku ini dapat memberi manfaat yang sebesarnya dalam pembelajaran mata kuliah C/C++ Programming. Medan, 1 Maret 2004

Hendra, ST. Website : http://www.hendrasoewarno.com Email : hendra.seowarno@gmail.com

Indoprog

C/C++ Programming

Hendra, S.T.

Daftar Isi
Section 0 Section 1 Section 2 Section 3 Section 4 Section 5 Section 6 Section 7 Section 8 Section 9 Section 10 Section 11 Section 12 Section 13 Section 14 Section 15 Section 16 Section 17 Section 18 Appendix A Appendix B Appendix C Appendix D History of programming language .........................................................3 Software development and the sofware life cycle ...............................11 Structured programming ......................................................................15 Structure of a C++ program .................................................................24 Comunication throught console ...........................................................38 Control structures.................................................................................42 Function (I) ..........................................................................................53 Function (II) .........................................................................................59 Array ....................................................................................................67 Strings of characters.............................................................................76 Pointers ................................................................................................82 Advanced pointers ...............................................................................89 Dynamic memory.................................................................................93 Structures ...........................................................................................100 Input/output with files........................................................................109 Classes................................................................................................118 C++ and Object oriented programming .............................................130 Exception handing .............................................................................143 User defined type ...............................................................................147 Preprocessor directives C++ formatting and documentation Programming patterns Tips & Tricks

Indoprog

C/C++ Programming

Hendra, S.T.

Section 0

History of programming language


Bahasa komputer telah melalui evolusi yang dramatis sejak komputer yang pertama dibuat untuk bantuan dalam kalkulasi sejak perang dunia ke dua. Awalnya programmer bekerja dengan instruksi komputer yang sangat primitif yaitu machine language (bahasa mesin). Pada bahasa mesin instruksi-instruksi terdiri dari suatu kalimat yang panjang yang berupa tulisan 1 (satu) dan 0 (nol). Selanjutnya assembler digunakan untuk memetakan instruksi mesin ke mnemoniscs yang dapat dibaca dan ditangani oleh manusia seperti ADD dan MOV. Kemudian, lahirlah bahasa tingkat tinggi seperti BASIC dan COBOL. Bahasa ini memungkinkan orang bekerja dengan sejumlah kata dan kalimat tertentu dalam seperti Let I=100. Instruksi ini akan diterjemahkan kembali menjadi bahasa mesin dengan mengunakan suatu interpreter ataupun compiler. Suatu interpreter bekerja dengan menterjemahkan baris program sesaat dibaca, mengubahnya menjadi bahasa mesin, dan menjalankannya. Compiler bekerja dengan menterjemahkan program menjadi suatu bentuk intermediasi. Tahap ini disebut sebagai Compiling dan menghasilkan suatu file object. Kemudian compiler akan membangkitkan linker, yang mana akan mengubah file object menjadi suatu program yang executable (dapat dijalankan langsung). Karena interpreter membaca kode sambil menjalankan baris per baris, maka interpreter terasa lebih mudah oleh programmer dalam menggunakannya. Dengan adanya tambahan langkah pada Compiler seperti tahap compiling dan lingking pada kode, sehingga terasa kurang nyaman. Compiler akan menghasilkan suatu program yang sangat cepat pada saat dijalankan karena waktu untuk menterjemahkan program telah dihilangkan. Keuntungan dari suatu Compiler adalah menghasilkan program executable yang tidak tergantung kepada program sumber. Sedangkan pada interpreter anda harus menjalankannya dengan menggunakan program sumber. Untuk beberapa tahun, prinsip utama dari programmer komputer adalah menulis suatu kode yang sependek mungkin, dan dapat dijalankan dengan cepat. Program tersebut harus berukuran kecil karena memori komputer sangat mahal, dan harus cepat karena tenaga pemrosesesan (CPU) sangat mahal. Setelah komputer menjadi semakin kecil, murah dan cepat, dan harga dari memori telah jatuh. Prioritas ini telah berubah. Sekarang biaya tenaga programmer jauh lebih mahal dibandingkan dengan harga komputer yang digunakan dalam bisnis. Program yang ditulis dengan baik dan mudah ditangani adalah suatu yang bernilai tinggi. Mudah ditangani

Indoprog

C/C++ Programming

Hendra, S.T.

artinya adalah pada saat kebutuhan bisnis berubah, program dengan mudah dapat dikembangkan tanpa adanya biaya yang sangat besar.

C programming language
C adalah bahasa pemrograman yang dikembangkan oleh Dennis Ritchie pada tahun 1970 untuk pemakaian pada sistem operasi UNIX, dan sampai sekarang bahasa ini telah dipergunakan secara praktis pada hampir semua sistem operasi. Bahasa C merupakan bahasa yang paling populer untuk menulis sistem software, dan aplikasi. serta banyak digunakan dalam pelajaran Komputer Sains.

Features
C adalah bahasa yang lebih low-level dibandingkan dengan bahasa pemrograman lainnya. Walaupun kadang-kadang disebutkan sebagai "high-level-language", sebenarnya ia hanya lebih high-level dibandingkan dengan bahasa assembly. C memiliki dua keunggulan utama dibandingkan dengan assembly. Pertama, kodenya lebih mudah dibaca dan ditulis, terutama untuk program yang panjang. Kedua, kode assembly biasanya hanya bisa diterapkan pada arsitektur komputer yang tertentu saja, sedangkan program C dapat di pindahkan ke berbagai arsitektur dimana kalau compiler dan librarynya tersedia. Sebaliknya efisiensi dari kode C adalah sangat bergantung pada kemampuan dari compiler untuk mengoptimisasi bahasa mesin yang dihasilkan, yang mana hal ini berada diluar kendali programmer. Demikian juga keunggulan dan kelemahan antara C dengan bahasa high-level lainnya dimana efisiensi yang dihasilkan oleh kode C dapat lebih terkontrol, dan konsekuensinya adalah lebih sulit dibaca dan ditulis, tetapi perlu dicatat bahwa C adalah bahasa tingkat tinggi yang portabel, karena sampai saat ini hampir semua arsitektur komputer menyediakan compiler C dan librarynya. Sesuatu fasilitas dari C yang perlu menjadi perhatian programmer adalah kemampuan dalam mengatur isi memori komputer. C Standar tidak menyediakan fasilitas array bounds checking yang dengan mudah akan menyebabkan bug dalam kaitannya dengan operasi memori, seperti buffer overflows, serta computer insecurity. Beberapa fasilitas C adalah:

Suatu bahasa dengan (kernel) inti yang sederhana, dimana fungsi-fungsi yang kurang penting tersedia sebagai kumpulan rutin-rutin pustaka (library) yang di standarisasi. Terfokus pada paradigma pemrograman procedural, dengan fasilitas pemrograman yang terstruktur.

Indoprog

C/C++ Programming

Hendra, S.T.

Memiliki suatu bahasa preprocessor Memiliki perfomance O(1) untuk semua operator. Akses secara Low-level pada memori komputer melalui pointer. Parameter selalu dilewatkan ke function secara by value, bukan by reference.

History
Early developments
Pengembangan C mula-mula dilakukan di laboratoriun AT&T Bell antara tahun 1969 dan 1973; menurut Ritchie, periode yang paling kreatif adalah 1972. Namanya C karena banyak fasilitasnya diambil dari bahasa sebelumnya yang disebut sebagai "B". Pada tahun 1973, bahasa C menjadi cukup powerfull dimana biasanya kernel UNIX aslinya ditulis dengan menggunakan bahasa assembly PDP-11/20, telah ditulis kembali dengan menggunakan C. Ini merupakan pertama kali kernel suatu sistem operasi yang ditulis dengan bahasa selain assembly.

K&R C
Pada tahun 1978, Ritchie dan Brian Kerhighan mempubikasikan suatu buku edisi pertama dengan judul The C Programming Language. Buku ini dikenal oleh para programmer C sebagai "K&R". K&R mengenalkan fasilitas berikut pada bahasa tersebut :

Type data struktur (struc) Type data long int Type data unsigned int Operator =+ diganti dengan +=, karena (=+ membingungkan lexical analyzer Compiler C).

Pada tahun setelah publikasi K&R C, beberapa fasilitas tambahan seperti :


function dan void * data type fungsi pengembalian struct atau union type nama field struct dipisahkan dengan sebuah spasi setelah type struct. assignment untuk type data struct const qualifier untuk membuat suatu object read-only suatu standard library yang terdiri dari banyak fungsi yang di sediakan oleh berbagai vendor. enumerations type single-precision float
void

ANSI C and ISO C

Indoprog

C/C++ Programming

Hendra, S.T.

Sejak tahun 1970, C mulai mengantikan BASIC sebagai pemimpin bahasa pemrograman mikrokomputer. Sejak 1980 mulai diadopsi pemakaiannya pada IBM PC, dan popularitasnya mulai bertambah secara nyata. Pada saat yang bersamaan Bjarne Stroustrup pada Bell Labs mulai bekerja untuk menambah konstruksi object-oriented pada C. Bahasa yang mereka produksi disebut sebagai C++, dan sekarang merupakan bahasa yang banyak dipergunakan pada sistem operasi Microsoft Windows; sedangkan C tetap merupakan bahasa yang poluler di Unix. Pada tahun 1983, American National Standards Institute (ANSI) membentuk suatu komite, X3J11, untuk mengembangkan suatu spesifikasi standard untuk C. Melalui proses yang panjang, standard tersebut berhasil diselesaikan pada tahun 1989 (satu tahun setelah standard ANSI pertama untuk C++!) dan diratifikasikan sebagai ANSI X3.1591989 "Programming Language C". Versi bahasa ini sering disebut sebagai ANSI C. Pada tahun 1990, ANSI C standard (dengan beberapa modifikasi kecil) telah diadopsi oleh International Standards Organization (ISO) sebagai ISO/IEC 9899:1990. ANSI C didukung oleh kebanyakan compiler. Banyak kode C yang ditulis sekarang didasarkan pada ANSI C. Semua program yang ditulis dengan standard C dijamin akan berfungsi dengan baik pada platform lain yang memiliki C. Tetapi banyak juga program C yang hanya dapat di kompilasi pada platform tertentu dengan compiler tertentu sehubungan dengan library non standard, misalnya untuk graphic.

C99
Setelah proses standarisasi oleh ANSI, sepesikasi bahasa C masih relatif statis untuk beberapa saat, sedangkan C++ terus berevolusi. (Normalnya penyempurnaan 1 telah menghasilkan suatu versi C yang baru pada tahun 1995, tetapi versi yang ini jarang diketahui.) Sedangkan, revisi standard tahun 1990, mengawali publikasi sebagai ISO 9899:1999 pada tahun 1999. Standard ini disebut sebagai "C99" telah diadopsi sebagai ANSI standard pada 2000. Kemampuan baru C99 meliputi:

fungsi inline function membebaskan pembatasan terhadap tempat deklarasi variabel (seperti pada C++) menambah beberapa type data baru, termasuk long long int (untuk mengurangi kesulitan transisi 32-bit ke 64-bit), type data boolean, dan suatu yang baru untuk bilangan complex. array variable-length dukungan resmi terhadap one-line comment yang dimulai dengan //, dipinjam dari C++ beberapa fungsi library baru, seperti snprintf() beberapa header file baru, seperti stdint.h

Dukungan terhadap C99 cukup beragam, dimana GCC dan beberapa compiler lainnya mendukung fasilitas C99, tetapi compiler yang dibuat oleh Microsoft dan Borland tidak.

Indoprog

C/C++ Programming

Hendra, S.T.

"Hello, World!" in C
Berikut ini adalah aplikasi sederhana untuk mencetak "Hello, World!" ke suatu standard output file (yang biasanya berupa screen, tetapi bisa saja berupa suatu file atau peralatan hardware lainnya). Versi dari program ini muncul pertama kali di K&R.
#include <stdio.h> int main(void) { printf("Hello, World!\n"); return 0; }

Undefined behaviors
Sesuatu yang menarik (walaupun tidak selamanya persis) aspek dari standard C adalah prilaku dari beberapa kode yang disebut sebagai "undefined". Dalam praktek, hal ini berarti program yang dihasilkan dari kode ini tidak dapat diprediksi, dari (secara tidak sengaja) dimana akan membuat sistem macet setiap kali di run Sebagai contoh, kode berikut menghasilkan prilaku undefined, karena variabel b dioperasikan lebih dari sekali dalam ekspresi a = b + b++;:
#include <stdio.h> int main (void) { int a, b = 1; a = b + b++; printf ("%d\n", a); return 0; }

Indoprog

C/C++ Programming

Hendra, S.T.

C Plus Plus
C++ (dibaca sebagai "see plus plus"; aslinya dikenal sebagai: C with Classes) adalah suatu bahasa pemrograman komputer yang telah diperluas dengan kemampuan object oriented. Sejak 1990, C++ merupakan bahasa pemrograman komersil yang paling populer.

History of C++
Stroustrup mulai bekerja dengan bahasa ini pada tahun 1979, diinspirasi oleh Simula67. AT&T pertama kali menggunakan bahasa tersebut pada Agustus 1983. Compiler aslinya adalah C front. Dikomersialisasikan pertama kali pada bulan Oktober. Suatu gabungan komite standarisasi C++ ANSI-ISO, pada tahun 1998 (ISO/IEC 14882-1998). ANSI standard adalah suatu usaha untuk memastikan bahwa C++ adalah portable dimana kode yang anda tulis pada Microsoft compiler akan dapat dikompilasi tanpa kesalahan dengan menggunakan kompiler dari vendor lain pada platform yang berbeda seperti Mac, Window dan Alpha.

Technical Overview
Pada tahun 1998 C++ Standard terdiri dari dua bagian yaitu: Core Language dan Standard Library; yang meliputi Standard Template Library dan C Standard Library.

History of the Name "C++"


Nama ini bermula dari Rick Mascitti (pertengahan tahun 1983) dan pertama kali digunakan pada Desember 1983. Awalnya, sejak periode riset, disebut sebagai "C with Classes". Nama akhirnya diambil dari C's "++" operator (yang berarti menambah nilai dari suatu variabel) dan suatu konvensi penamaan umum menggunakan "+" untuk menunjukan pengembangan program komputer, misalnya "dBase3+".

Ownership of C++
Tidak ada yang memiliki C++. Stroustrup dan AT&T tidak menerima royalti dari pemakaian C++.

C++ Examples
Contoh 1 Berikut ini adalah sebuah contoh dari program dimana tidak melakukan apa-apa. Terdiri dari satu hal yaitu: sebuah main() fungsi. main() merupakan awal dari program C++.

Indoprog

C/C++ Programming
int main() { return 0; }

Hendra, S.T.

Standard C++ membutuhkan main() mengembalikan type int, dalam hal ini 0 artinya program berakhir normal.

Example 2 Berikut ini adalah contoh dari program Hello world


#include <iostream> // needed for std::cout int main() { std::cout << "Hello World !\n"; return 0; }

C++ Library
[[C++ standard library]] umumnya berupa superset dari C standard library. Sebagian besar bagian dari library C++ adalah terdiri dari Standard Template Library (STL). STL menyediakan fasilitas berguna seperti iterators (merupakan high-level dari pointer) dan containers (menyerupai array yang dapat bertumbuh secara otomatis pada saat penambahan elemen baru). Sebagaimana dalam C, fasilitas dari library dapat diakses dengan menggunakan direktif #include untuk memasukan suatu standard header. C++ menyediakan enam puluh sembilan header standard. C++ merupakan superset dari C artinya semua program C yang legal juga merupakan program C++ yang legal, perkembangan dari C ke C++ adalah sangat nyata. C++ memetik banyak keuntungan dari hubungannya dengan C, dimana programmer C dapat dengan mudah menggunakan C++. Untuk dapat menggunakan keunggulan C++, banyak programmer menemukan bahwa mereka tidak perlu mempelajari hal-hal yang mendasar, tetapi cukup mengembangkan diri dengan mempelajari konsep baru (OOP) dalam pemecahan masalah pemrograman.

Future Development
C++ terus berevolusi untuk memenuhi kebutuhan masa depan, ketika pembuat-pembuat compiler masih berjuang untuk mendukung semua fasilitas C++, situasi tersebut berkembang persisnya dari tahun 1998 sampai 2003.

Pertanyaan
1. Tuliskan pengertian tentang High Level Language dan Low Level Language. 2. Berikan contoh bahasa komputer yang tergolong kepada High Level Language dan Low Level Language. 3. Tuliskan perbedaan cara kerja Interpreter dan Compiler. Indoprog

C/C++ Programming

Hendra, S.T.

4. 5. 6. 7. 8.

Tuliskan pengertian bahasa C adalah bahasa yang portabel. Sebutkan tujuan penetapan standard C oleh ANSI. Tuliskan pengertian bahasa C++ merupakan superset dari bahasa C. Tuliskan struktur program C dan C++ yang paling sederhana. Dengan pemanfaatan fasilitas search engine di internet, carilah jenis-jenis compiler C/C++ yang tersedia oleh berbagai vendor, dan platform.

Latihan
1. Buatlah program C anda yang pertama untuk mencetak "Hello World !" ke layar, dan bagaimana melakulannya dalam C++. 2. Tulis suatu program C++ yang mana membaca dua nilai berjenis float, dan mencetak hasil sum (penjumlahan), product (perkalian) dan quotient (hasil bagi). Tambahkan informasi hasil pencetakan yang jelas.

Indoprog

10

C/C++ Programming

Hendra, S.T.

Section 1

Software Development and the Software Life Cycle


Banyak model telah dikembangkan para ahli untuk menggambarkan proses dari pengembangan software. Suatu pengetahuan akan software life cycle akan membuat pengembangan software yang terstruktur, mudah dikomunikasikan dan mudah diawasi. Suatu model waterfall (air terjun) ditunjukkan oleh gambar dibawah ini mengalir mulai dari Requirements specification, System analyst, Detailed design, Implementation & unit testing, Integration & system testing, dan Operation & maintenance. Software developement dapat memiliki bagian yang sama dengan software life cycle kecuali pada tahapan akhir.

Requirements specification (spesifikasi kebutuhan) mengacu pada layanan apa saja yang harus disediakan oleh software dan di berada dibawah atasan apa sotfware tersebut dioperasikan. Kebutuhan yang akurat sering kali sulit ditentukan karena bidang komputer sangat berkaitan dengan kompleksnya sosial manusia dan dunia secara organisasi. Proses dari systems analysis and design (analisa dan perancangan sistem) akan menentukan fungsi-fungsi akurat yang dibutuhkan untuk memenuhi kebutuhan dan hardware (perangkat keras) yang dibutuhkan untuk mengoperasionalkannya. Hal ini mungkin meliputi sub system yang tidak berkaitan dengan komputer-komputer, bersama dengan suatu definisi lengkap dari (human role) peranan manusia. Bayangkan contoh sebuah aircraft system (system angkutan udara) : disana akan terdiri dari sejumlah komputer monitoring (pemantau) dan controlling (pengendali) aspek dari penerbangan dengan banyak alat display (peraga), dan berinteraksi dengan ground systems (sistem di daratan); peran dari pilot juga menentukan. Indoprog

11

C/C++ Programming

Hendra, S.T.

Detailed design akan berkaitan dengan pemecahan system atau subsystem kedalam modul-modul definisi yang lebih jelas. Perulangan subdivision (pembagian kepada bagian-bagian) atau secara fungsi akan penting sampai suatu keterangan yang jelas dapat dipenuhi oleh modul-modul yang mana menjadi blok bangunan dari system. Kita akan melihat pada beberapa teknik untuk mengambarkan detail dari program pada level ini. Implementation and testing berkaitan dengan penulisan kode untuk menghasilkan suatu program yang dapat dijalankan untuk pada modul (penerapan) dan percobaan pada program untuk memastikan program dapat bekerja. Hal ini biasanya berkaitan dengan perbaikan pada kode (debugging) sampai program berjalan dengan benar. Ini adalah area pekerjaan programmer. Integration and testing berkaitan dengan membawa program kedalam subsystem, dengan dengan berbagai interface (antar muka) antar program, dan demikian juga subsystem kedalam system. Testing dibutuhkan untuk memastikan bahwa programprogram berjalan dengan benar ketika mereka digabungkan, dan fungsi dari system benar. Pada saat testing ditemukan kesalahan, rancangan ulang atau pengkodean ulang mungkin dibutuhkan. Ketika software tersebut telah sempurna haruslah diinstalasi dan pemakai harus dilatih. Sebagaimana ketika digunakan pada lingkungan target kesalahan baru mungkin akan timbul. Juga oleh waktu kebutuhan tersebut dapat berubah. Jika perangkat lunak telah memasuki tahap ini disebut sebagai maintenance (pemeliharaan). Pada saat yang sama siklus manfaat dari software telah berlalu dan suatu system baru dibutuhkan.

Preparing a Computer Program


Ada beberapa langkah untuk membuat suatu program komputer untuk aplikasi tertentu. Langkah-langkah ini tidak tergantung pada komputer ataupun bahasa pemrograman yang digunakan, langkah-langkahnya adalah sebagai berikut: 1. Pelajari requirement specification (spesifikasi kebutuhan) dari aplikasi tersebut. Adalah sangat penting kebutuhan dari aplikasi tersebut dapat ditentukan dengan benar. Sebelum mulai merancang program untuk aplikasi tersebut, adalah perlu bahwa requirement specification telah lengkap dan konsisten. Sebagai contoh suatu requirement specification menyebutkan `buat sebuah program untuk menghitung sebuah persamaan' adalah belum lengkap, anda harus bertanya untuk informasi selanjutnya seperti `Jenis persamaan?', `berapa banyak persamaan?', `sampai berapa akurat?' dll. 2. Analisa masalah tersebut dan putuskan bagaimana untuk memecahkannya. Pada tahap ini anda harus menentukan suatu metode agar masalah tersebut dapat dipecahkan, metode tersebut sering disebut sebagai Algorithm. 3. Terjemahkan algoritma tersebut menjadi suatu program dalam dengan high-level language. Bentuk tertulis dari program disebut sebagai source program atau Indoprog

12

C/C++ Programming

Hendra, S.T.

source code. Pada tahap ini desk-check untuk memeriksa kebenarannya, dan diperbaiki, pada tahap ini anda membutuhkan Editor. 4. Compile program tersebut menjadi machine-language. Bahasa mesin yang dihasilkan disebut sebagai object code. Pada tahap ini compiler akan mencari Syntax errors dalam program. 5. Object code yang dihasilkan oleh compiler akan di link dengan berbagai function library disediakan oleh system. Pada tahap ini diperlukan suatu program linker yang akan mengabung object code yang dimuat kememori oleh sebuah program yang disebut sebagai loader. 6. Jalankan hasil link, dan periksalah apakah adanya Logical errors. Kesalahan lain yang dapat saja terjadi adalah run-time error.

Gambar 1.4 Tahapan kompilasi Jika ada kesalahan pada tahap ini, maka program harus diperbaiki kembali mulai dari langkah (3), (4) dan (5), sampai hasilnya memuaskan. 7. Sekarang program telah dapat digunakan, dan perlu adanya documentation untuk keperluan perbaikan dikemudian hari

Pertanyaan
1. Tuliskan langkah-langkah yang harus dilakukan mulai dari spesifikasi permasalahan untuk menghasilkan suatu program yang dapat berjalan untuk pemecahan masalah tersebut. 2. Jenis kesalahan apa saja yang dapat timbul dalam tahapan produksi program ? 3. Ketika program sedang berjalan dan menghasilkan suatu bilangan yang terlalu besar untuk ditempatkan pada tempat yang telah dialokasi dalam memori, sebutkan kategori jenis kesalahan tersebut?

Indoprog

13

C/C++ Programming

Hendra, S.T.

4. Sebuah program yang berjalan tanpa kesalahan, tetapi menghasilkan output yang tidak benar, jenis kesalahan apa yang menyebabkan hal tersebut? 5. Sebutkan pengertian dari source code, object code dan executable code. 6. Tuliskan pengertian tentang istilah Editor, Compile, Linker dan Libraries.

Indoprog

14

C/C++ Programming

Hendra, S.T.

Section 2

Structured programming
Secara garis besar, kita dapat mengidentifikasi kurva belajar dari seseorang yang mempelajari pemrograman adalah sebagai berikut : Pemrograman tidak terstruktur Pemrograman procedural Pemrograman modular dan Pemrograman berorientasi objek

Unstructured programming
Biasanya orang mulai belajar pemrograman dengan menulis sebuah program kecil dan sederhana yang terdiri dari hanya satu program utama, pada program utama ini rangkaian perintah-perintah yang secara langsung melakukan modifikasi data global dalam program.

Teknik pemrograman ini memiliki berbagai kelemahan, terutama ketika program tersebut berkembang menjadi lebih besar. Sebagai contoh, jika sejumlah perintah yang sama dibutuhkan pada beberapa bagian program yang sama, maka perintah-perintah tersebut harus diduplikasi ke bagian yang membutuhkannya. Hal ini menimbulkan suatu ide bagaimana kalau kita keluarkan rangkaian perintah tersebut menjadi suatu program kecil (dikenal sebagai istilah procedure) yang memiliki nama, kemudian program kecil tersebut akan dipanggil oleh bagian program yang membutuhkannya.

Procedural programming
Pada pemrograman prosedural, anda dapat mengelompokan rangkaian perintah-perintah yang sering digunakan pada satu tempat menjadi suatu procedure, kemudian suatu procedure call dapat digunakan untuk membangkitkan procedure tersebut. Setelah procedure tersebut diproses, aliran kendali proses akan dikembalikan ke posisi baris perintah setelah perintah call (pemanggilan).

Indoprog

15

C/C++ Programming

Hendra, S.T.

Salah satu keunggulan dari pemrograman prosedural adalah program menjadi lebih terstruktur dan tingkat kesalahan dapat ditekan. Sebagai contoh, ketika suatu procedure telah benar, maka setiap kali procedure tersebut digunakan akan tetap menghasilkan hasil yang benar. Konsekuensinya adalah ketika kita melakukan pencarian kesalahan, maka area pencarian dapat dipersempit ke daerah yang belum terbukti kebenarannya. Pada pemrograman prosedural, program dapat dilihat sebagai rangkaian dari procedure calls. Program utama akan melewatkan data ke procedure, dan data tersebut akan diproses oleh procedure, dan setelah prosedure selesai, data hasil telah tersedia. Selanjutnya aliran dari data dapat diilustrasikan sebagai suatu hierarchical graph (grafik hirarki), suatu tree (pohon), sebagaimana yang ditunjukan gambar berikut :

Sekarang kita telah memiliki suatu program yang mana terbagi atas potongan-potongan kecil yang disebut sebagai procedure

Modular programming
Pada pemrograman modular, Procedure dengan fungsi yang umum dikelompokan menjadi suatu modul secara terpisah, sehingga suatu program tidak hanya terdiri dari satu bagian, tetapi terpisah menjadi beberapa bagian yang lebih kecil secara terpisah yang berinteraksi satu sama yang lain dengan melalui procedure call yang membentuk keseluruhan program.

Indoprog

16

C/C++ Programming

Hendra, S.T.

Masing-masing modul memiliki data tersendiri. Hal ini memungkinkan masing-masing modul mengatur status internal yang mana dimodifikasi oleh pemanggilan procedure dalam modul tersebut.

Structured programming
Pemrograman terstruktur dapat dipandang sebagai bagian atau sub-disiplin dari procedural programming, satu dari paradigma besar (dan mungkin yang paling popular) untuk pemrograman komputer. Berdasarkan sejarah, beberapa teknik terstruktur telah dikembangkan untuk menulis program yang terstruktur. Dua diantaranya yang paling umum adalah Jackson Structured Programming, yang mana didasarkan pada pemerataan struktur dengan struktur program. dan Dijkstra's structured programming, yang mana didasarkan pada pemisahan program kedalam sub-sections, dimana masing-masing terdiri dari satu titik masuk dan satu titik keluar Sejak 1970 ketika pemrograman terstruktur mulai populer sebagai suatu teknik pemrograman, banyak bahasa pemrograman procedural yang menambah fasilitas untuk mendukung pemrograman terstruktur, (dan beberapa diantaranya telah meninggalkan fasilitas yang dapat membuat pemrograman menjadi tidak terstruktur). Bahasa pemrograman terstruktur yang terkenal baik adalah

Pascal Ada

Pada program yang pendek, pemrograman terstruktur secara sederhana menekankan pada hirarki struktur aliran program. Hal ini dapat dilakukan pada hampir semua bahasa modern dengan menggunakan konstruksi looping terstruktur seperti "while", "repeat",

Indoprog

17

C/C++ Programming

Hendra, S.T.

"for". Juga disarankan agar setiap looping hanya ada satu titik masuk dan satu titik keluar, dan pada beberapa bahasa telah menekankan hal ini. Pada pemrograman terstruktur, programmer harus memecahkan kode yang besar kedalam sub rutin yang lebih pendek sebagai kesatuan logika yang lebih kecil (procedure dan function), sehingga dapat dimengerti secara mudah. Pada pemrograman terstruktur diusahakan untuk menggunakan variabel global sedikit mungkin; dan sebagai gantinya, sub rutin harus menggunakan variabel lokal serta menggunakan argumen (parameter) sebagai referensi data diantaranya. Catatan: Pada saat program anda menjadi besar dan kompleks, adalah semakin susah untuk mencari bugs (kesalahan) yang kemungkinan terkandung didalamnya. Pemakaian variabel global yang terlalu banyak akan mempersulit penanganan bugs, karena data global dapat diubah oleh seluruh fungsi/prosedur dalam program. Berdasarkan pengalaman bertahun-tahun dianjurkan kepada programmer untuk menangani data secara lokal sebisa mungkin Pemrograman terstruktur sering (tidak selamanya) berkaitan dengan perancangan dengan pendekatan "top-down". Dengan cara ini perancang memetakan garis besar struktur program kedalam operasi-operasi yang lebih kecil, menerapkan dan mencoba operasi yang lebih kecil, dan mengikat mereka kedalam suatu program secara keseluruhan. Pada akhir abad ke 20, umumnya programmer professional menganut konsep pemrograman prosedural terstruktur. Beberapa diantaranya menyatakan lebih mudah untuk mengerti program terstruktur, lebih reliabel dan lebih mudah di tangani (maintanance). Bahasa tidak terstruktur mendefinisikan aliran program dengan pemakaian perintah GOTO yang mana memindahkan titik eksekusi ke suatu label tertentu dalam kode, sedangkan bahasa pemrograman terstruktur menyediakan konstruksi (sering disebut sebagai "if-then-else", "unless", "while", "until", dan "for") untuk menciptakan berbagai variasi loop (perulangan) dan percabangan kondisi. Perlu ditekankan bahwa pada suatu bahasa pemrograman terstruktur, di setiap struktur kode harus memiliki satu titik masuk dan satu titik keluar, banyak bahasa seperti C memungkinkan banyak cara untuk keluar dari suatu struktur (seperti "continue", "break", dan "return"), yang mana dapat memberikan keuntungan dan kerugian dalam pembacaan dan penulisan program.

Top down design


Dalam merancang program secara top-down structured, langkah pertama adalah kenalilah komponen-komponen utama yang membentuk solusi pemecahan masalah, kemudian komponen-komponen tersebut disusun berurutan menjadi langkah-langkah

Indoprog

18

C/C++ Programming

Hendra, S.T.

pemecahan solusi, dan kemudian lanjutkan dengan mengembangkan detail dari masingmasing komponen tersebut dengan cara yang sama, dan seterusnya. Misalnya kita akan membuat sebuah program untuk menghitung luas (area) dan keliling (perimeter) dari suatu persegi panjang (rectangle), dimana panjang (length) dan lebar (width) dimasukan akan oleh pamakai. Suatu algoritma awal yang mungkin adalah sebagai berikut :
1. Masukan panjang dan lebar dari persegi panjang. 2. Hitung luas dan keliling dari persegi panjang. 3. Cetak luas dan keliling.

Selanjutnya masing-masing garis besar tersebut diatas dapat di kembangkan menjadi langkah-langkah yang lebih rinci sebagai berikut :
1. Masukkan 1.1 Tampilkan pesan untuk memasukan panjang 1.2 Terima data panjang 1.3 Tampilkan pesan untuk memasukan lebar 1.4 Terima data lebar 2. Menghitung 2.1 Menghitung keliling sebagai dua kali panjang tambah lebar 2.2 Menghitung luas sebagai perkalian panjang dan lebar 3. Keluaran 3.1 Cetak keliling 3.2 Cetak luas

Sampai pada tahap ini, masalah tersebut telah dipecahkan secara sempurna tanpa tergantung pada bahasa pemrograman yang akan digunakan.

Structured Design. Top-down design of algorithms using sequence and selection only.
Perhatikan masalah berikut: Buatlah sebuah program yang menerima jumlah jam kerja dalam satu minggu dan upah perjam untuk seorang karyawan. Program harus mampu mencetak upah mingguan (wage) dari karyawan tersebut. Karyawan dibayar dengan tarif normal untuk 40 (empat puluh) jam pertama, dan satu setengah dari tarif normal untuk setiap kelebihannya. Solusi untuk masalah diatas dapat langsung dimodelkan sebagai berikut :
1. Masukan jumlah jam kerja dan upah per-jam.

Indoprog

19

C/C++ Programming
2. Hitung upah mingguan. 3. Cetak upah mingguan.

Hendra, S.T.

Tetapi usaha untuk mengembangkan langkah 2, tidak sederhana seperti mengalikan jam kerja dengan upah per-jam, tetapi kita perlu memeriksa apakah jam kerja yang dimasukan tidak lebih dari 40 jam. Sehingga dalam mengembangkannya kita perlu menggunakan pernyataan kondisi seperti berikut ini :
1. Masukan 1.1 Tanyakan user untuk memasukan jumlah jam kerja. 1.2 Baca jumlah jam kerja. 1.3 Tanyakan user untuk memasukan upah per-jam. 1.4 Baca upah per-jam. 2. Hitung upah mingguan 2.1 Jika jumlah kerja lebih atau sama dengan 40 jam kemudian 2.1.1 hitung upah mingguan normal. otherwise 2.1.2 hitung upah mingguan normal dan kelebihannya. 3. Cetak upah mingguan

Structured Design. Top-down design of algorithms using repetition


Algoritma berikut mengilustrasikan berbagai teknik. Dimana program akan menerima sejumlah data positif dan akan menampilkan nilai minimum, nilai maximum dan ratarata. Program akan terus menanyakan data sampai pemakai memasukan suatu nilai negatif. Adapun spesifikasi program tersebut adalah sebagai berikut: Menampilkan pesan agar user memasukan nilai real positif dari keyboard, dan menampilkan informasi untuk mengakhiri proses input dengan nilai negatif. Sesaat proses input selesai, program akan menampilkan nilai positif minimum dan nilai positif maximum serta nilai rata-rata dari nilai positif yang dimasukan. Jika tidak ada data (pemakai langsung memasukan nilai negatif pada awal program) kemudian program harus menampilkan pesan tidak ada data yang dimasukan. Berikut ini adalah langkah-langkah solusi pemecahannya :
tahap awal. terima nilai pertama. ketika (nilai adalah positif) kerjakan { proses nilai.

Indoprog

20

C/C++ Programming
terima nilai berikutnya. } jika tidak ada nilai yang dimasukan kemudian cetak `tidak ada data yang dimasukan' jika tidak { hitung rata-rata. cetak hasilnya. }

Hendra, S.T.

Berikutnya kita akan mengembangkan bagian proses nilai:


proses nilai: tambahkan nilai ke akumulasi jumlah. tambahkan satu pada jumlah. jika nilai lebih besar dari maximum yang tersimpan kemudian simpan nilai sebagai maximum. jika nilai lebih kecil dari minimum yang tersimpan kemudian simpan nilai sebagai minimum.

Berdasarkan ekspansi proses nilai diatas, maka hal yang perlu dilakukan sebelum masuk ke perulangan adalah: 1. sebuah variabel untuk akumulasi jumlah harus dimulai dari (0) nol. 2. sebuah variabel untuk jumlah data harus dimulai dari (0) nol. 3. variabel untuk menyimpan maximum dan minimum pada awalnya berisi nilai yang pertama kali dimasukkan. Selanjutnya bagian tahap awal dari program dapat dikembangkan menjadi:
set nol ke akumulasi. set nol ke jumlah. terima nilai yang pertama. set minimum dan maksimum dengan nilai pertama.

Jika tidak ada data yang dimasukan, maka hal ini dapat diketahui dengan nilai jumlah yang berisi 0. Sehingga secara keseluruhan solusi menjadi:
set nol ke akumulasi. set nol ke jumlah. terima nilai yang pertama. set minimum dan maksimum dengan nilai pertama. terima nilai pertama. ketika (nilai adalah positif) kerjakan { tambahkan nilai ke akumulasi. tambahkan satu ke jumlah. tambahkan nilai ke akumulasi jumlah. tambahkan satu pada jumlah.

Indoprog

21

C/C++ Programming
jika nilai lebih besar dari maximum yang tersimpan kemudian simpan nilai sebagai maximum. jika nilai lebih kecil dari minimum yang tersimpan kemudian simpan nilai sebagai minimum. terima nilai berikutnya. } jika tidak ada nilai yang dimasukan kemudian cetak `tidak ada data yang dimasukan' jika tidak { hitung rata-rata. cetak hasilnya. }

Hendra, S.T.

Top-down design using Functions


Pada contoh kasus sebelumnya kita telah melihat pemecahan masalah untuk perhitungan upah mingguan berdasarkan jumlah jam kerja dan upah per-jam. Misalnya kita kembangkan program tersebut menjadi dapat menerima data untuk beberapa karyawan dan mencetak upah mingguan. Algoritma yang sesuai untuk masalah tersebut adalah:
ulangi terima jumlah jam kerja dan upah per-jam. proses upah mingguan. tanyakan user `ada data yang lain?' baca jawaban sampai jawaban tidak Selanjutnya kita

akan memodulkan proses upah mingguan menjadi suatu sub program yang lebih kecil, sehingga algoritma dapat ditulis menjadi :
ulangi terima jumlah jam kerja dan upah per-jam. Panggil function hitungUpah(jam kerja, upah per-jam, upah mingguan). cetak upah mingguan. tanyakan user `ada data yang lain?' baca jawaban sampai jawaban tidak

Pertanyaan
1. Sebutkan tahapan kurva belajar seseorang yang mempelajari teknik pemrograman. 2. Sebutkan garis besar ide dasar dari masing-masing teknik pemrogram tersebut pada soal nomor 1. 3. Sebutkan fasilitas yang biasanya disediakan oleh suatu bahasa pemrograman yang menyediakan fasilitas pemrograman terstruktur, dan berikan pendapat anda tentang pemakaian GOTO. Indoprog

22

C/C++ Programming

Hendra, S.T.

4. Sebutkan ide dasar dari teknik pemrograman terstruktur dengan pendekatan Top Down Design.

Latihan
Rancanglah sebuah program dengan pendekatan terstruktur top-down untuk pemecahan masalah berikut : 1. Buatlah sebuah program untuk menghitung jumlah konsumsi bahan bakar suatu mobil, dengan input kilometer awal dan akhir perjalanan, isi awal dan akhir tangki dalam liter, kemudian program mencetak jarak tempuh, jumlah konsumsi, dan konsumsi per kilometer. 2. Modifikasi program diatas dimana input tetap dalam kilometer dan liter, tetapi menghasilkan perhitungan dalam gallon dan mil. ( gunakan konstanta) 3. Buatlah sebuah program yang mana menerima jumlah jam kerja dalam minggu dan upah perjam seorang tenaga kerja. Program tersebut harus menghitung penghasilan dari pekerja tesebut. Pekerja tersebut dibayar secara normal untu 40 jam pertama, dan satu setengah kali upah normal untuk kelebihan jam berikutnya. Petunjuk 1 US gallon = 3.7854118 litres, 1 mile = 1.6093 kilometres

Indoprog

23

C/C++ Programming

Hendra, S.T.

Section 3

Structure of a C++ program


Sebagaimana tradisi dalam belajar bahasa komputer adalah dimulai dengan membuat program Hello World, perhatikan koding berikut :
// my first program in C++ #include <iostream.h> int main () { cout << "Hello World!"; return 0;

} Simpan program anda ke file dengan nama first.cpp, lakukan kompilasi (dalam hal ini menggunakan Borland free C++ compiler, dapat di download pada http://www.borland.com) BCC32 First Jalankan program anda : First Dan di layar akan tercetak tulisan "Hello World!", Marilah kita analisa bagian program tersebut satu per satu.
// my first program in C++

Ini adalah baris comment (komentar/keterangan). Semua baris yang dimulai dengan tanda (//) dianggap sebagai comment.
#include <iostream.h>

Perintah yang dimulai dengan tanda (#) adalah directives (petunjuk) untuk preprocessor. Baris ini tidak akan dieksekusi, tapi merupakan directives bagi compiler. Dalam hal ini kalimat #include <iostream.h> memberitahukan kepada preprocessor compiler untuk include (memasukan) header file standar iostream. File ini berisi deklarasi input-output standar library didalam C++ yang diperlukan pada bagian berikutnya dalam program ini.
int main ()

Baris ini merupakan deklarasi main function (fungsi utama). Main function merupakan titik dimana dimana program akan mulai dijalankan. selalu diikuti oleh tanda kurung () karena merupakan sebuah function. Pada C++ semua function. Isi dari function main diapit dengan tanda kurawal ({}), sebagai berikut :
main

Indoprog

24

C/C++ Programming
cout << "Hello World"; Cout merupakan standard

Hendra, S.T.

output stream pada C++ (biasanya ke layar), yang dalam hal ini akan mencetak tulisan "Hello World". Cout dideklarasikan dalam header file iostream.h, sehingga untuk memanfaatkannya perlu di #include. Catatan : setiap perintah C++ diakhiri dengan karakter semicolon (;).

return 0;

Perintah return menyebabkan selesainya function main() dan mengembalikan suatu nilai, dalam hal ini 0. Dalam hal ini berarti eksekusi selesai tanpa kesalahan.

Comments (Komentar/keterangan).
Ketika anda sedang menulis sebuah program, segalanya adalah jelas tentang pada yang sedang anda kerjakan. Tetapi setelah satu bulan, anda kembali melihat program tersebut, mungkin saja anda telah lupa dan merasa bingung. Untuk mengurangi keraguan tersebut, anda perlu membuat komentar secukupnya pada kode anda. Komentar adalah bagian dari source code yang akan diabaikan oleh compiler. Ada dua cara penulisan komentar pada C++:
// line comment /* block comment */

Yang pertama adalah mengawali setiap baris komentar dengan tanda (//), sedangkan bentuk kedua mengawali komentar dengan /* dan diakhiri dengan */ , jenis komentar ini cocok untuk komentar/keterangan yang lebih dari satu baris. Perhatikan contoh berikut :
/* my second program in C++ with more comments */ #include <iostream.h> int main () { cout << "Hello World! "; // says Hello World! cout << "I'm a C++ program"; // says I'm a C++ program return 0;

} Catatan: Indoprog

25

C/C++ Programming

Hendra, S.T.

Adalah praktek yang baik untuk senantiasa membuat komentar pada awal dari setiap program yang anda buat. Mengenai bentuk komentar tersebut diserahkan kepada masingmasing individu, tetapi setiap header program harus memiliki informasi berikut ini: Nama dari fungsi atau program Nama file Apa yang dikerjakan oleh fungsi atau program Keterangan tentang bagaimana program bekerja Nama pengarang Sejarah revisi (catatan pada setiap perubahan dilakukan) Jenis kompiler, linker, dan tools yang digunakan untuk membuat program tersebut. Catatan tambahan secukupnya.

Berikut ini adalah contoh komentar yang mungkin pada program Hello World :
/************************************************************ Program: Hello World File: Hello.cpp Function: Main (complete program listing in this file) Description: Prints the words "Hello world" to the screen Author: Jesse Liberty (jl) Environment: Turbo C++ version 4, 486/66 32mb RAM, Windows 3.1 DOS 6.0. EasyWin module. Notes: This is an introductory, sample program. Revisions: 1.00 10/1/94 (jl) First release 1.01 10/2/94 (jl) Capitalized "World" ************************************************************/

Variables. Data types. Constants.


Coba bayangkan kalau saya meminta anda untuk mengingat angka 8, dan angka 2, kemudian saya meminta anda untuk menjumlahkan angka pertama dengan 1, sehingga menjadi 9 (8+1), dan akhirnya hasilnya dikurangi dengan bilangan kedua (2). Proses diatas secara komputer dapat ditulis sebagai berikut :
a = 8; b = 2; a = a + 1; result = a - b;

dalam hal ini a dan b adalah variable, jadi variable di program komputer menyerupai variable pada matematika. Sehingga, kita dapat mendefinsikan variable sebagai bagian dari memori untuk menyimpan nilai, dalam hal ini a dan b disebut sebagai identifier (pengenal)

Indoprog

26

C/C++ Programming

Hendra, S.T.

Identifiers
Suatu identifier harus memenuhi syarat berikut : 1. Terdiri dari huruf, angka dan symbol garis bawah ( _ ). 2. Untuk compiler tertentu maksimum 32 karakter. 3. Tidak boleh pakai spasi atau tanda baca lainnya . 4. Boleh diawali dengan symbol garis bawah ( _ ), tetapi biasanya dicadangkan untuk external link. 5. Tidak boleh sama dengan keyword (kata kunci) Key word standar menurut ANSI-C++ yang tidak boleh anda gunakan sebagai identifier:
asm, auto, bool, break, case, catch, char, class, const, const_cast, continue, default, delete, do, double, dynamic_cast, else, enum, explicit, extern, false, float, for, friend, goto, if, inline, int, long, mutable, namespace, new, operator, private, protected, public, register, reinterpret_cast, return, short, signed, sizeof, static, static_cast, struct, switch, template, this, throw, true, try, typedef, typeid, typename, union, unsigned, using, virtual, void, volatile, wchar_t

Operator lainnya yang tidak boleh digunakan sebagai identifier:


and, and_eq, bitand, bitor, compl, not, not_eq, or, or_eq, xor, xor_eq

Sangat penting diingat: Bahasa C++ language adalah "case sensitive", hal ini berarti bahwa identifier yang ditulis dengan huruf besar dan kecil adalah tidak sama. Jadi, variable HASIL tidak sama dengan variable hasil ataupun variable Hasil.

Data types
Dalam pemrograman, kita menggunakan variable sebagai fasilitas untuk menyimpan dan mengambil nilai di memori komputer. Data pada memory komputer diorganisasikan dalam bentuk byte (8 bit) 0 s/d 255, dan oleh bahasa pemrograman C++ data tersebut dapat dinyatakan menjadi berbagai data type sebagai berikut : DATA TYPES
Name char short long Bytes* Description 1 2 4 character or integer 8 bits length. integer 16 bits length. integer 32 bits length. Range* signed: -128 to 127 unsigned: 0 to 255 signed: -32768 to 32767 unsigned: 0 to 65535 signed:-2147483648 to 2147483647

Indoprog

27

C/C++ Programming

Hendra, S.T.
unsigned: 0 to 4294967295

int

Integer. Its length traditionally depends on the length of the system's Word type, thus in MSDOS it is 16 bits long, whereas in 32 bit systems (like See short, long Windows 9x/2000/NT and systems that work under protected mode in x86 systems) it is 32 bits long (4 bytes). floating point number. double precision floating point number. long double precision floating point number. Boolean value. It can take one of two values: true or false NOTE: this is a type recently added by the ANSI-C++ standard. Not all compilers support it. Consult section bool type for compatibility information. 3.4e + / - 38 (7 digits) 1.7e + / - 308 (15 digits) 1.2e + / - 4932 (19 digits)

float double long double

4 8 10

bool

true or false

wchar_t 2

Wide character. It is designed as a type to store international characters of a two-byte character set. NOTE: this is a wide characters type recently added by the ANSI-C++ standard. Not all compilers support it.

Declaration of variables
Pada C++ suatu variabel adalah tempat untuk menyimpan informasi. Suatu variabel adalah suatu lokasi pada memori komputer anda yang mana dapat menyimpan sebuah nilai dan dari sana anda dapat mengambil kembali nilai yang tersimpan. Sebagaimana dengan Pascal, setiap variable dalam C++, kita harus mendeklarasikannya terlebih dahulu. Adapun tata cara pendeklarasian variabel pada C++ adalah menuliskan type data yang diinginkan (misalnya int, short, float...) kemudian diikuti dengan identifier variable yang sah (lihat bagian identifier). Sebagai contoh:
int a; float mynumber;

Dapat juga mendeklarasikan beberapa variable dengan data type yang sama :
int a, b, c;

Khusus variable type Integer (char, short, long dan int) dapat ditentukan apakah signed dan unsigned (defaultnya adalah signed). Sebagai contoh:
unsigned short NumberOfSons; signed int MyAccountBalance;

Indoprog

28

C/C++ Programming

Hendra, S.T.

Catatan: Kebanyakan programmer yang berpengalaman menggunakan notasi Hungarian untuk identifier variabel yang digunakan. Adapun dasar ide notasi Hungarian adalah mengawali setiap identifier variabel dengan sejumlah karakter yang menerangkan type variabel, seperti i untuk integer, l untuk long. Notasi lain yang mungkin adalah untuk membedakan variabel global, pointer dan lainnya.

Initialization of variables
Pada C++, nilai awal suatu variable adalah tidak tertentu. Anda dapat memberikan nilai awal pada saat deklarasi dengan penulisan :
int a = 0; int a (0); // Cara deklarasi di C // atau cara deklarasi di C++

Kedua cara tersebut diatas dapat dilakukan pada C++.

Constants: Literals.
Suatu konstanta adalah ekspresi yang memiliki nilai tetap yang dapat berupa data type Integer, Floating-Point, Character dan String Integer Numbers
75 0113 0x4b // decimal // octal // hexadecimal

Floating Point Numbers


3.14159 6.02e23 1.6e-19 3.0 // // // // 3.14159 6.02 x 1023 1.6 x 10-19 3.0

Characters and strings


'z' 'p' "Hello world" "How do you do?"

Perhatikan pemakaian single quote (), dan double quotes (").

Indoprog

29

C/C++ Programming

Hendra, S.T.

Konstanta karakter memiliki beberapa pengecualian, seperti kode escape, yang merupakan karakter spesial yang tidak dapat diekspresikan kecuali dalam source code, seperti newline (\n) atau tab (\t). Berikut ini adalah daftar dari kode escape :
\n \r \t \v \b \f \a \' \" \? \\

newline carriage return tabulation vertical tabulation backspace page feed alert (beep) single quotes (') double quotes (") question (?) inverted slash (\)

Contoh :
'\n' '\t' "Left \t Right" "one\ntwo\nthree"

Sebagai tambahannya, anda dapat menulis karakter dengan menggunakan ASCII code seperti \23 atau \40, atau secara hexadesimal seperti \x20 atau \x4A. Konstanta string dapat dibagi menjadi lebih dari satu baris dengan mengakhirinya dengan slash (\):
"string expressed in \ two lines"

Anda juga dapat mengabungkan beberapa konstanta string dengan spasi:


"we form" "a single" "string" "of characters"

Defined constants (#define)


Anda dapat mendefinisikan nama tertentu pada konstanta yang sering anda gunakan dengan menggunakan prepocessor directive #define preprocessor directive yang memiliki syntax berikut :
#define identifier value

Indoprog

30

C/C++ Programming

Hendra, S.T.

Sebagai contoh:
#define PI 3.14159265 #define NEWLINE '\n' #define WIDTH 100

Setelah definisi diatas, kita dapat memakainya seperti berikut:


circle = 2 * PI * r; cout << NEWLINE;

Sesuatu yang haris diingat adalah bahwa directive #define bukan merupakan baris perintah, tetapi merupakan directive untuk preprocessor, sehingga anda tidak perlu memberikan semicolon (;) pada akhirannya.

declared constants (const)


Anda dapat juga menggunakan awalan const untuk mendeklarasikan konstanta dengan type tertentu sebagaimana anda lakukan pada variabel:
const int width = 100; const char tab = '\t'; const zip = 12440;

Dalam hal ini, jika type tidak ditentukan (seperti pada contoh terakhir), maka compiler akan mengasumsikan type-nya sebagai int.

Operators.
Sebagaimana pada Pascal untuk mengoperasikan variable dan konstanta kita membutuhkan operator, adapun operator yang disediakan oleh C++ adalah sebagai berikut : Assignation (=). Operator assignation berfungsi memberikan nilai pada suatu variabel. Contoh :
int a = b = a = b = a, b; 10; 4; b; 7; // // // // // a:? b:? a:10 b:? a:10 b:4 a:4 b:4 a:4 b:7

Salah satu fasilitas C++ yang tidak terdapat pada bahasa pemrograman lainnya adalah operation assignation, Contoh:

Indoprog

31

C/C++ Programming
a = 2 + (b = 5);

Hendra, S.T.

adalah sama dengan penulisan:


b = 5; a = 2 + b;

dan contoh :
a = b = c = 5;

memberikan nilai lima ke variable a, b dan c. Arithmetic operators ( +, -, *, /, % ) Adapun operasi yang dilakukan adalah: + addition - subtraction * multiplication / division % module Saya yakin operasi seperti penjumlahan, pengurangan, perkalian,pembagian dan module sudah jelas bagi anda. Compound assignation operators (+=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=) Salah satu fasilitas C++ yang cukup ditakuti adalah pemakaian operator compound assignation (+=, -=, *= and /= among others) :
value += increase; adalah sama dengan value = value + increase; a -= 5; adalah sama dengan a = a - 5; a /= b; adalah sama dengan a = a / b; price *= units + 1; adalah sama dengan price = price * (units + 1);

Increase and decrease. Contoh lain dari penyingkatan penulisan operator adalah pemakaian increase operator (++) dan decrease operator (--). Mereka menambahkan atau mengurangi variable dengan 1. Contoh :
a++; a+=1; a=a+1; a--; a-=1; a=a-1;

Indoprog

32

C/C++ Programming

Hendra, S.T.

Salah satu karakteristik dari pemakaian operator ini adalah dapat digunakan sebagai prefix atau sebagai suffix. Yang berarti dapat dituliskan sebelum dan sesudah variabel (++a) atau (a++). Pada dasarnya a++ atau ++a memiliki arti yang sama, Cuma bedanya adalah urutan operasi, contoh: Example 1 Example 2

B=3; B=3; A=++B; A=B++; // A is 4, B is 4 // A is 3, B is 4

Pada contoh 1, nilai B ditambah satu sebelum diberikan ke A. Sedangkan pada contoh 2, nilai dari B diberikan ke A dan selanjutnya nilai B di tambah satu. Relational operators ( = =, !=, >, <, >=, <= ) Untuk evaluasi perbandingan antara dua ekspresi, kita dapat menggunakan operator Relational operators yang akan menghasilkan true atau false. Berikut ini adalah operator Relational pada C++: Equal != Different > Greater than < Less than >= Greater or equal than <= Less or equal than Contoh : (7 == 5) akan menghasilkan false. (5 > 4) akan menghasilkan true. (3 != 2) akan menghasilkan true. (6 >= 6) akan menghasilkan true. (5 < 5) akan menghasilkan false.
==

Logic operators ( !, &&, || ). Operator ! adalah sama dengan operator boolean NOT, dan hanya memiliki satu operand yang berada dikanannya. Contoh : mengembalikan false karena ekspresi (5 == 5) !(5 == 5) menghasilkan true. !(6 <= 4) mengembalikan true. !true mengembalikan false. !false mengembalikan true. Operator Logical && (AND) || (OR), dengan hasil operasi berikut:

Indoprog

33

C/C++ Programming
First Operand a true true false false true false true false Second Operand b Result a && b true false false false Result a || b true true true false

Hendra, S.T.

Contoh:
( (5 == 5) && (3 > 6) ) ( (5 == 5) || (3 > 6) )

returns false ( true && false ). returns true ( true || false ).

Conditional operator ( ? ). Operator conditional melakukan evaluasi dan mengembalikan nilai yang berbeda tergantung kepada hasil evaluasi, apakah true atau false. Dengan format:
condition ? result1 : result2

Jika condition adalah true ekspresi akan mengembalikan result1, jika tidak akan mengembalikan result2. returns 3 since 7 is not equal to 5. 7==5+2 ? 4 : 3 returns 4 since 7 is equal to 5+2. 5>3 ? a : b returns a, since 5 is greater than 3. a>b ? a : b returns the greater one, a or b.
7==5 ? 4 : 3

Bitwise Operators ( &, |, ^, ~, <<, >> ). Operator Bitwise melakukan modifikasi terhadap variable yang didasarkan kepada nilai bit yang tersimpan .
op & | ^ ~ << >> asm AND OR XOR NOT SHL SHR Description Logical AND Logical OR Logical exclusive OR Complement to one (bit inversion) Shift Left Shift Right

Explicit type casting operators Operator Type casting memungkinkan anda untuk melakukan konversi terhadap suatu data ke type yang lain. Cara yang paling baik adalah mengawali data dengan nama type baru yang ditulis dalam kurung ():

Indoprog

34

C/C++ Programming
int i; float f = 3.14; i = (int) f;

Hendra, S.T.

Kode diatas mengubah angka 3.14 ke suatu nilai integer (3). sizeof() Operator ini memiliki satu parameter, dapat berupa variable maupun type variable, dan mengembalikan ukurannya dalam byte:
a = sizeof (char);

Contoh diatas akan mengembalikan 1 karena char adalah berukuran 1 byte.

Priority of operators
Ketika membuat ekspresi yang kompleks dengan beberapa operand, kita akan ragu operand mana yang akan dievaluasi terlebih dahulu, sebagai contoh :
a = 5 + 7 % 2

kita akan meragukan, apakah :


a = 5 + (7 % 2) a = (5 + 7) % 2

with result 6, or with result 0

Jawaban yang benar adalah ekspresi yang kedua Berikut ini adalah prioritas tertinggi sampai prioritas yang terendah:
Priority 1 2 Operator :: () [ ] -> . sizeof ++ -~ ! 3 &* (type) +4 5 6 7 8 */% +<< >> < <= > >= == != increment/decrement Complement to one (bitwise) unary NOT Reference and Dereference (pointers) Type casting Unary less sign arithmetical operations arithmetical operations bit shifting (bitwise) Relational operators Relational operators Left Left Left Left Left Right Description scope Associativity Left Left

Indoprog

35

C/C++ Programming
9 10 11 12 13 &^| && || ?: = += -= *= /= %= >>= <<= &= ^= |= , Bitwise operators Logic operators Conditional Assignation Comma, Separator Left Left Right Right Left

Hendra, S.T.

Pertanyaan
1. Tuliskan pengertian bahasa C/C++ merupakan bahasa case sensitif. 2. Tuliskan dasar ide pengunaan notasi Hungarian. 3. Tuliskan pengertian keyword, dan mengapa keyword tidak boleh digunakan sebagai identifier. 4. Tuliskan fungsi #include paga program C/C++. 5. Tuliskan perbedaan pemakaian komentar // dengan /* */. 6. Tuliskan pengertian escape code, dan rincikan daftar escape code dalam C/C++. 7. Tuliskan perbedaan antara integer dan float, bagaimana dengan unsigned short int dengan long int. 8. Tuliskan ekspresi dalam bahasa C++ untuk formula berikut ini :

9. Tuliskan hasil evaluasi perhitungan dari ekspresi-ekspresi berikut ini :


17/3 17%3 1/2 1/2*(x+y)

10. Berdasarkan deklarasi berikut ini


float x; int k, i = 5, j = 2;

Tuliskan nilai variabel k dan x berdasarkan penugasan (assigment) berikut :


o o o o k x k x = = = = i/j; i/j; i%j; 5.0/j;

11. Type data apa yang sesuai untuk mewakili hasl berikut ini? o Jumlah mahasiswa dalam ruang kelas. o Nilai huruf hasil ujian mahasiswa. o Nilai rata-rata kelas. o Jarak antara dua titik o Jumlah populasi suatu kota o Berat dari suatu surat

Indoprog

36

C/C++ Programming

Hendra, S.T.

12. Tuliskan deklarasi yang sesuai untuk pertanyaan nomor 4. Pilihkan identifiers yang sesuai. 13. Tuliskan perbedaan antara int dengan unsigned integer.

Latihan
1. Tuliskan deklarasi konstanta untuk menyimpan jumlah hari dalam satu minggu, dan jumlah minggu dalam satu tahun. Secara terpisah deklarasikan juga konstanta untuk pi sebagai 3.1415927. 2. Tuliskan deklarasi variabel integer I dan j, variabel float x dan y. Kembangkan deklarasi variabel I dan j dengan nilai awal 1, dan 10.0 untuk y. 3. Ketik dan jalankan program berikut, dan analisa hasil outputnya. #include <iostream.h> int main() { cout << "The size of an int is:\t\t" << sizeof(int) << " bytes.\n"; cout << "The size of a short int is:\t" << sizeof(short) << " bytes.\n"; cout << "The size of a long int is:\t" << sizeof(long) << " bytes.\n"; cout << "The size of a char is:\t\t" << sizeof(char) << " bytes.\n"; cout << "The size of a float is:\t\t" << sizeof(float) << " bytes.\n"; cout << "The size of a double is:\t" << sizeof(double) << " bytes.\n"; return 0; }

Indoprog

37

C/C++ Programming

Hendra, S.T.

Section 4

Communication through console.


Console adalah dasar dari interface komputer, normalnya adalah keyboard dan screen. Keyboard adalah standard input device dan screen adalah standard output device. Dalam library iostream C++, operasi standar input dan output untuk sebuah program didukung oleh dua data streams: cin untuk input dan cout untuk output. Tambahannya adalah, cerr dan clog yang mana merupakan stream khusus untuk menampilkan error messages. Mereka dapat di redirected ke standard output atau ke suatu log file.

Output (cout)
Stream cout digunakan dalam hubungannya dengan overloaded operator << (sepasangan tanda "less than" ).
cout << "Output sentence"; // prints Output sentence on screen // prints number 120 on screen cout << 120; cout << x; // prints the content of variable x on screen

Operator insertion (<<) dapat digunakan lebih dari sekali pada kalimat yang sama:
cout << "Hello, " << "I am " << "a C++ sentence";

Anda dapat menggunakan endl untuk membuat baris baru, contoh:


cout << "First sentence." << endl; cout << "Second sentence." << endl;

hasil cetak:
First sentence. Second sentence.

Input (cin).
Menangani standard input pada C++ dilakukan dengan menerapkan operator overloaded operator atau extraction (>>) pada stream cin. Hal ini harus diikuti oleh variable yang akan menyimpan data yang akan dibaca, sebagai contoh :
int age; cin >> age;
// i/o example

Please enter an integer value: 702

Indoprog

38

C/C++ Programming
#include <iostream.h> int main () { int i; cout << "Please enter an integer value: "; cin >> i; cout << "The value you entered is " << i; cout << " and its double is " << i*2 << ".\n"; return 0; }

Hendra, S.T. The value you entered is 702 and its double is 1404.

Anda dapat juga menggunakan cin untuk menanyakan lebih dari satu data:
cin >> a >> b;

adalah sama dengan:


cin >> a; cin >> b;

Dalam hal diatas, anda perlu memasukan dua data, satu untuk variabel a dan variable b yang harus dipisahkan dengan spasi kosong atau baris baru.

iostream Manipulators
iomanip merupakan bagian dari Standard C++ I/O Library yang digunakan untuk memanipulasi tampilan I/O pada perintah cout. Berikut ini adalah beberapa contoh pemakaian iomanip dan hasil outputnya.
// setprecision example #include <iostream> #include <iomanip> using namespace std; int main () { double f =3.14159; cout << setprecision (5) << f << endl; cout << setprecision (9) << f << endl; return 0; }

The execution of this example shall display:


3.1416 3.14159 // setw example #include <iostream> #include <iomanip> using namespace std;

Indoprog

39

C/C++ Programming
int main () { cout << setw (10); cout << 77 << endl; return 0; }

Hendra, S.T.

This code uses setw to set the field width to 10 characters.


// setfill example #include <iostream> #include <iomanip> using namespace std; int main () { cout << setfill ('x') << setw (10); cout << 77 << endl; return 0; }

This code uses setfill to set the fill character to 'x'. The output of this example shall be similar to:
xxxxxxxx77 // setbase example #include <iostream> #include <iomanip> using namespace std; int main () { cout << setbase (16); cout << 100 << endl; return 0; } This code uses setbase manipulator to

set hexadecimal as the basefield. The output of this example is the hexadecimal value of 100, i.e. 64.
// resetiosflags example #include <iostream> #include <iomanip> using namespace std; int main () { cout << hex << setiosflags (ios_base::showbase); cout << 100 << endl; cout << resetiosflags (ios_base::showbase); cout << 100 << endl; return 0; }

This code first sets flag showbase and then resets it using resetiosflags manipulator. The execution of this example shall display:
0x64 64

Indoprog

40

C/C++ Programming

Hendra, S.T.

Pertanyaan
1. Tuliskan perintah C++ untuk menanyakan tiga buah bilangan yang akan disimpan kedalam variabel integer first, second dan third. 2. Tuliskan perintah C++ untuk menghasilkan output dari variabel x dengan tampilan sebagai berikut :
Nilai dari x adalah .....

3. Tuliskan perintah C++ untuk menghasilkan output sebagai berikut:


A circle of radius (jari-jari) ..... has area ..... and circumference (keliling) .....

dimana nilai dari , area dan circumference disimpan dalam variabel rad, area, dan circum.

4. Perbaiki syntax errors dalam program C++ berikut ini:


include iostream.h Main(); { Float x,y,z; cout < "Enter two numbers "; cin >> a >> b cout << 'The numbers in reverse order are' << b,a; }

Latihan
1. Buatlah program yang menghasilkan tampilan berikut dengan menggunakan cout:
XXXXX X X XXX X X XXXXX

2. Buatlah program yang membaca empat karakter dan mencetak kembali pada masing-masing baris dengan diapit oleh tanda petik tunggal. 3. Buatlah sebuh program yang menampilkan pesan kepada pemakai untuk memasukan dua bilangan integer dan satu float serta mencetak kembali ke layar. Indoprog

41

C/C++ Programming

Hendra, S.T.

Section 5

Control Structures
Suatu program biasanya tidak hanya berupa suatu urutan linear dari instruksi-instruksi. Dalam prosesnya mungkin bercabang, berulangan atau membuat keputusan. Untuk keperluan tersebut, C++ menyediakan struktur kendali yang ditujukan untuk menentukan apa yang akan dilakukan pada program kita.

Conditional structure: if and else


Digunakan untuk menjalankan suatu instruksi atau blok dari instruksi kalau kondisi terpenuhi, penulisannya adalah sebagai berikut :
if (condition) statement

dimana condition adalah ekspresi yang akan di evaluasi. Jika kondisi ini true, statement akan dieksekusi. Jika false, statement akan diabaikan (tidak dieksekusi) dan program berlanjut ke instruksi berikutnya setelah struktur conditional. Sebagai contoh, potongan program berikut akan mencetak x is 100 hanya jika nilai yang tersimpan dalam variabel x adalah 100:
if (x == 100) cout << "x is 100";

Jika anda menginginkan lebih dari satu instruksi dijalankan kalau condition adalah true , anda dapat memberikan blok instruksi dengan mengunakan kurung kurawal { }:
if (x == 100) { cout << "x is "; cout << x; }

Kita dapat menentukan apa yang akan dilakukan kalau condition tidak terpenuhi dengan menggunakan keyword else. Bentuk penulisannya adalah:
if (condition) statement1 else statement2

Contoh:
if (x == 100) cout << "x is 100"; else cout << "x is not 100";

mencetak pada layar x is 100 jika x bernilai 100, dan x is not 100 jika sebaliknya.

Indoprog

42

C/C++ Programming

Hendra, S.T.

Struktur if + else dapat digabungkan untuk memeriksa sejumlah nilai seperti contoh berikut :.
if (x > 0) cout << "x else if (x < cout << "x else cout << "x is positive"; 0) is negative"; is 0";

Ingat, jika instruksi yang akan dijalankan lebih dari satu, kita harus mengelompokannya dengan menggunakan kurung kurawal { }. Catatan : Didalam penulisan perintah terstruktur kita perlu melakukan Indentasi, dimana untuk memudahkan pembacaan program, berikut ini adalah beberapa contoh style yang sering dilakukan oleh programmer * Menempatkan tanda kurawal pembuka pada baris yang sama dengan if. if (expression){ statements } * Menempatkan tanda kurawal pada baris baru tetapi sejajar dengan if if (expression) { statements } * Menempatkan tanda kurawal pada baris baru dan sejajar dengan statement.. if (expression) { statements } Pemilihan Indentasi Style diserahkan kepada programmer, sepanjang pemakaiannya konsisten.

Repetitive structures or loops


Loops memiliki tujuan untuk mengulangi suatu statement untuk sejumlah kali tertentu ketika condition terpenuhi. The while loop. Indoprog

43

C/C++ Programming

Hendra, S.T.

Formatnya adalah:
while (expression) statement

dan secara sederhananya fungsi ini akan mengulangi statement ketika expression adalah benar.

Sebagai contoh, kita akan membuat program untuk menghitung dengan suatu while loop:
// custom countdown using while #include <iostream.h> int main () { int n; cout << "Enter the starting number > "; cin >> n; while (n>0) { cout << n << ", "; --n; } cout << "FIRE!"; return 0; }

Enter the starting number > 8 8, 7, 6, 5, 4, 3, 2, 1, FIRE!

The do-while loop. Format:


do statement while (condition);

Fungsinya hampir sama dengan while loop kecuali bahwa condition pada dowhile di evaluasi setelah eksekusi statement

Indoprog

44

C/C++ Programming

Hendra, S.T.

Contoh:
// number echoer #include <iostream.h> int main () { unsigned long n; do { cout << "Enter number (0 to end): "; cin >> n; cout << "You entered: " << n << "\n"; } while (n != 0); return 0; }

Enter number You entered: Enter number You entered: Enter number You entered:

(0 to end): 12345 12345 (0 to end): 160277 160277 (0 to end): 0 0

The for loop. Format penulisannya adalah sebagai berikut:


for (initialization; condition; increase) statement;

dan fungsi utamanya adalah mengulangi statement ketika condition masih benar, menyerupai while loop. Tetapi tambahannya adalah, for menyediakan tempat untuk menentukan suatu instruksi initialization dan suatu increase instruction. Jadi loop ini khusus dirancang untuk melakukan suatu aksi perulangan berdasarkan counter.

Indoprog

45

C/C++ Programming

Hendra, S.T.

Cara kerjanya adalah sebagai berikut: 1, initialization dijalankan. Umumnya adalah menentukan nilai awal untuk variable counter. Bagian ini hanya dieksekusi sekali. 2, condition diperiksa, jika true maka loop dilanjutkan, selain itu loop berakhir dan statement diloncati. 3, statement dijalankan. Pada umumnya dapat berupa instruksi tunggal atau sekumpulan instruksi yang diapit dengan kurung kurawal { }. 4, akhirnya, sebagaimana yang dinyatakan field increase akan dijalankan dan loop kembali ke langkah 2 Berikut ini adalah contoh of countdown dengan menggunakan for loop.
// countdown using a for loop #include <iostream.h> int main () { for (int n=10; n>0; n--) { cout << n << ", "; } cout << "FIRE!"; return 0;

10, 9, 8, 7, 6, 5, 4, 3, 2, 1, FIRE!

Indoprog

46

C/C++ Programming
}

Hendra, S.T.

Field initialization dan increase adalah bersifat optional. Mereka dapat diabaikan dengan semicolon diantaranya. Sebagai contoh anda dapat menulis: for (;n<10;) jika tidak ingin menentukan initialization dan increase; atau for (;n<10;n++) jika kita ingin menggunakan increase tetapi tidak untuk initialization. Secara optinal, pemakaian operator comma (,) kita dapat menentukan lebih dari satu instruksi dalam field didalam suatu for loop, Contoh :
for ( n=0, i=100 ; n!=i ; n++, i-- ) { // whatever here... } ini akan dijalankan 50 kali, jika n atau i tidak dimodifikasi

Loop

dalam loop:

Bifurcation (percabangan) of control and jumps.


Perhatian, fasilitas-fasilitas berikut bisa saja membuat program anda menjadi tidak terstruktur karena akan menyebabkan titik keluar dari structure lebih dari satu, tetapi anda tetap dapat menggunakannya kalau menguntungkan secara logika. The break instruction. Dengan menggunakan break kita dapat meninggalkan suatu loop walaupun condition masih terpenuhi.
// break loop example #include <iostream.h> int main () { int n; for (n=10; n>0; n--) { cout << n << ", "; if (n==3) { cout << "countdown aborted!"; break; } } return 0; }

10, 9, 8, 7, 6, 5, 4, 3, countdown aborted!

The continue instruction.

Indoprog

47

C/C++ Programming

Hendra, S.T.

Instruksi continue menyebabkan program loncat ke akhir dari loop, dan melanjutkan ke iterasi berikutnya, contoh :
// break loop example #include <iostream.h> int main () { for (int n=10; n>0; n--) { if (n==5) continue; cout << n << ", "; } cout << "FIRE!"; return 0; }

10, 9, 8, 7, 6, 4, 3, 2, 1, FIRE!

The goto instruction. Perintah ini memungkinkan anda untuk melakukan loncatan absolut ke suatu bagian program tertentu. Anda harus menggunakan fasilitas ini secara hati-hati dalam kaitannya dengan struktur program anda. Titik tujuan diidentifikasi oleh suatu label, dimana digunakan sebagai argumen untuk instruksi goto. Penulisan label yang benar diikuti dengan sebuah colon (:). Berikut ini adalah contoh pemakaian goto untuk melakukan perulangan yang tidak terstruktur :
// goto loop example #include <iostream.h> int main () { int n=10; loop: cout << n << ", "; n--; if (n>0) goto loop; cout << "FIRE!"; return 0; }

10, 9, 8, 7, 6, 5, 4, 3, 2, 1, FIRE!

The exit function. exit terdefinisi dalam library cstdlib (stdlib.h). Tujuan dari exit adalah untuk menghentikan program yang berjalan dengan kode exit tertentu. Prototypenya adalah sebagai berikut:
void exit (int exit code);

digunakan oleh system operasi tertentu yang mana memanggil program tersebut. Secara konvensi, suatu exit code 0 berarti program berakhir secara normal dan nilai lain berarti suatu kesalahan telah terjadi.
Kode exit

Indoprog

48

C/C++ Programming

Hendra, S.T.

The selective Structure: switch.


Syntax penulisan dari perintah switch agak aneh. Fungsinya adalah untuk memeriksa beberapa nilai konstanta dari suatu ekspresi, dan melakukan sesuatu, berikut ini adalah bentuk penulisan switch:
switch (expression) { case constant1: block of instructions 1 break; case constant2: block of instructions 2 break; . . . default: default block of instructions }

Cara kerjanya adalah sebagai berikut: switch mengevaluasi expression dan memeriksa jika nilainya ekuivalen dengan constant1, jika ya, jalankan block of instructions 1 sampai menemukan keyword break, kemudian program meloncat ke akhir dari struktur seleksi switch. Jika expression tidak sama dengan constant1 , maka pemeriksaan dilakukan pada constant2. Jika ya, block of instructions 2 akan dijalankan sampai ditemukan keyword break. Akhirnya, jika nilai dari expression tidak sama dengan konstanta-konstanta sebelumnya, maka bagian default: akan dijalankan. Kedua koding berikut menghasilkan hal yang sama: switch example
switch (x) { case 1: cout << "x is 1"; break; case 2: cout << "x is 2"; break; default: cout << "value of x unknown"; }

if-else equivalent
if (x == 1) { cout << "x is 1"; } else if (x == 2) { cout << "x is 2"; } else { cout << "value of x unknown"; }

Pertanyaan
1. Tuliskan fungsi blok { dan } dalam C/C++. Indoprog

49

C/C++ Programming

Hendra, S.T.

2. Jika x memliki nilai 3.5 ketika perintah berikut ini dijalankan, nilai berapa yang akan disimpan ke y?
if (x + 1 <= 3.6) y = 1.0; else y = 2.0;

3. Jelasnkan fungsi pernyatan berikut ? Mengapa secara sintaksisnya salah? Bagaimana memperbaikinya sehingga menjadi benar?
if (x >= y) sum += x; cout << "x is bigger" << endl; else sum += y; cout << "y is bigger" << endl;

4. Tuliskan suatu pernyataan if-else yang mana akan menambah suatu variabel x ke variabel possum jika x adalah positif dan akan menambahkan x ke negsum jika varibel x bernilai negatif. 5. Kembangkan solusi pertanyaan sebelumnya sehingga jika x adakah positif, maka suatu variabel poscount ditambah 1 dan sebaliknya variable negcount yang akan ditambah 1. 6. Seorang mahasiswa diberi nilai dari `A' ke `F' dalam suatu ujian. Sehingga ratarata dapat dihitung berdasarkan nilai yang diberikan pada grade tersebut sebagaimana, `A' adalah 10, `B' adalah 8, `C' adalah 6, `D' adalah 4, `E' adalah 2 dan `F' adalah 0. Pada C++ ada dua metode untuk melakukan hal tersebut, apakah itu? Tuliskan perintah yang bersesuaian untuk metoda yang anda pilih. Seorang mahasiswa memiliki suatu penilaian berdasarkan kriteria berikut ::
>=70 60-69 50-59 40-49 30-39 <30 `A' `B' `C' `D' `E' `F'

Dapatkah suatu perintah switch digunakan untuk penentuan kriteria penilaian tersebut? Jika tidak bisa, bagaimana melakukan tersebut? Dan tuliskan perintah untuk penanganan masalah diatas.

Latihan
Untuk setiap latihan berikut, gambarkan algoritma yang digunakan dalam bentuk flowchart, baru dilanjutkan dengan penulisan program.

Indoprog

50

C/C++ Programming

Hendra, S.T.

1. Buatlah sebuah program yang mana menghasilkan selisih nilai absolut dari dua bilangan integer (bulat) x dan y, dimana (x-y) atau (y-x) adalah positif. Pikirkan segala kemungkinan yang dapat terjadi, dan buatlah solusi untuk menangani semua kemungkinan tersebut. 2. Penilaian terhadap nilai ujian mahasiswa ditampilkan dalam kriteria Pass (lulus) atau Fail (gagal) berdasarkan tiga nilai yang dimasukan. Adapun kriteria untuk lulus adalah sebagai berikut: Seorang siswa lulus kalau ketiga nilai tersebut bernilai >= 60, atau hanya gagal disalah satu mata kuliah dengan nilai rata-rata >= 60. 3. Buatlah sebuah program C++ yang mana dapat menghitung luas dari suatu

persegi ( ) atau segitiga ( ) setelah menampilkan pertanyaan jenis perhitungan yang akan dilakukan (persegi atau segitiga). 4. Tuliskan suatu program yang akan menghasilkan jumlah nilai dari barisan:

Dimana n adalah jumlah suku yang dimasukan oleh pemakai. Jawaban :


#include <conio.h> #include <iostream.h> int main() { int n; clrscr(); cout << "jumlah suku :"; cin >> n; float result = 1; for (int i=2;i<=n;i++) result = result + (float) 1/i; cout << "hasil :" << result << endl; return 0; }

Ubahlah program anda untuk menghitung barisan berikut

Indoprog

51

C/C++ Programming

Hendra, S.T.

dari hasil perhitungan, jika nilai n cukup besar, maka ankan menghasilkan nilai yang mendekati 0.7854 ( /4). 7. Buatlah suatu program yang menghasilkan suatu tabel perkalian n x n ( dimana nilai n lebih kecil atau sama dengan 10). Sebagai contoh, jika n bernilai 4 (empat), maka akan ditampilkan tabel perkalian berikut :
1 2 3 4 1 1 2 3 4 2 2 4 6 8 3 3 6 9 12 4 4 8 12 16

Indoprog

52

C/C++ Programming

Hendra, S.T.

Section 6

Functions (I)
Pemakaian function akan membuat program anda menjadi lebih terstruktur (baca kembali section 2 jika anda tidak mengerti pernyataan ini). Sebuah function adalah blok dari instruksi-instruksi yang akan dijalankan ketika dipanggil dari bagian lain program, berikut ini adalah formatnya:
type name ( argument1, argument2, ...) statement

dimana:
type adalah type data yang akan dikembalikan oleh function. name adalah nama yang digunakan untuk memanggil function. arguments. Masing-masing argument terdiri dari type data yang diikuti oleh identifier, seperti dalam deklarasi variabel (sebagai contoh, int x) dan perlakuannya

dalam function menyerupai variabel. statement adalah badan dari function. Dapat berupa satu instruksi tunggal atau blok dari instruksi-instruksi. Berikut ini adalah contoh function:
// function example #include <iostream.h> int addition (int a, int b) { int r; r=a+b; return (r); } int main () { int z; z = addition (5,3); cout << "The result is " << z; return 0; }

The result is 8

Catatan : Ketika program anda melakukan pemanggilan terhadap function, maka posisi alamat pemangilan (alamat register ip) akan di push ke stack, dan ketika function berakhir, maka alamat tersebut akan di pop kembali dari stack ke register ip, sehingga program dapat kembali ke proses berikutnya.

Indoprog

53

C/C++ Programming

Hendra, S.T.

Functions with no types. The use of void.


Jika anda melihat syntax deklarasi function :
type name ( argument1, argument2 ...) statement

anda akan melihat bahwa, penulisannya harus diawali dengan suatu type, yang mana merupakan type data yang akan dikembalikan oleh function dengan perintah return. Tetapi bagaimana kalau kita tidak ingin mengembalikan suatu nilai? Bayangkan misalnya kita ingin membuat function yang hanya mencetak pesan ke layar. Kita tidak memerlukan pengembalian suatu nilai, dan juga tidak membutuhkan parameter. Dalam hal ini dapat digunakan type void. Perhatikan contoh berikut:
// void function example #include <iostream.h> void dummyfunction (void) { cout << "I'm a function!"; } int main () { dummyfunction (); return 0; }

I'm a function!

Sesuatu hal yang perlu diperhatikan adalah kita memanggil function tersebut harus mengakhiri nama function dengan kurung :
dummyfunction ();

Hal ini untuk membedakan function, terhadap nama variable ataupun hal yang lain.

Scope of variables
Pada C, variable harus dideklarasikan pada awal setiap function (untuk variable local) atau pada bagian badan program diluar function (untuk variable global). Suatu perbedaan antara C dan C++ adalah variable dapat dideklarasikan pada saat dibutuhkan.

Indoprog

54

C/C++ Programming

Hendra, S.T.

Pada C++, jangkauan dari variable local adalah berada di blok dimana ia dideklarasikan (suatu blok adalah kumpulan instruksi yang dikelompokan dalam tanda kurawal {}). Jika dideklarasikan dalam function, maka jangkauan variable itu adalah dalam function tersebut, sedangkan kalau dalam loop, maka jangkauannya hanya dalam loop tersebut. Variable Global dapat digunakan pada seluruh program, didalam function, dimanapun setelah deklarasi. Jangkauan dari local variables adalah terbatas pada bagian dimana mereka dideklarasikan. Jika mereka dideklarasikan pada awal dari suatu function (seperti pada main) jangkauan mereka adalah pada keseluruhan function main. Catatan : Programmer pemula sering sekali mendeklarasikan semua variabel yang dibutuhkan dalam program menjadi variabel global. Hal ini akan menyebabkan sulitnya pengendalian nilai variabel pada program yang besar, karena variabel global dapat dimanipulasi oleh semua bagian dalam program.

Math.h library in C++


Beberapa fungsi matematika yang terdapat di C++ mathematics library adalah sebagai berikut :
acos(x)

inverse cosine, -1 <= x <= +1, returns value in radians in range 0 to PI asin(x) inverse sine, -1 <= x <= +1, returns value in radians in range 0 to PI atan(x) inverse tangent, returns value in radians in range -PI/2 to PI/2 cos(x) mengembalikan nilai cosinus x, x dalam radianin radians

Indoprog

55

C/C++ Programming

Hendra, S.T.

returns sine of x, x in radians tan(x) returns tangent of x, x in radians exp(x) exponential function, e to power x log(x) natural log of x (base e), x > 0 sqrt(x) square root of x, x >= 0 fabs(x) absolute value of x floor(x) largest integer not greater than x ceil(x) smallest integer not less than x rand() an integer value between 0 to RAND_MAX srand(x) initialize a random seed
sin(x)

Contoh
/* rand/srand example */ #include <stdio.h> #include <stdlib.h> #include <time.h> int main () { /* initialize random generator */ srand ( time(NULL) ); /* generate some random numbers */ printf ("A number between 0 and 100: %d\n", rand()%100); printf ("A number between 20 and 30: %d\n", rand()%10+20); return 0; }

Output:
A number between 0 and 100: 93 A number between 20 and 30: 21

Semua function diatas menggunakan parameter x yang bernilai floating point. Berikut beberapa contoh pemakaian fungsi yang dimaksud diatas:
y = sin(3.14159); z = cos(a) + sin(a); factor = sin(theta)/(sin(delta) - sin(delta-theta)); theta = acos(1.0/sqrt(1 - x*x)); if (sin(x) > 0.7071) cout << "Angle is greater than 45 degrees"; cout << "The value is " << exp(-a*t)*sin(a*t);

Indoprog

56

C/C++ Programming

Hendra, S.T.

Sesuatu hal yang perlu diingat bahwa anda perlu memasukan file math.h kedalam program, Library math.h juga telah mendefinisikan beberapa konstanta seperti M_PI untuk dan M_E untuk .

Stdlib.h Library in C++


Beberapa fungsi matematika pada Stdlib.h C++ adalah sebagai berikut : absolute value of integer div(x,y) divide two integer value ldiv(x,y) divide two long integer value labs(x) absolute value of long integer
abs (x)

Pertanyaan
1. Sebutkan fungsi pemakaian function? 2. Apa peran parameter pada suatu function? 3. Tuliskan perbedaan antara variabel global dan variabel local. 4. Apa fungsi dari function berikut ini?
void example(int n) { int i; for (i=0; i<n; i++) cout << '*'; cout << endl; }

Bagaimana anda memanggil function ini dalam program? Bagaimana anda mengunakan fungsi tersebut untuk menghasilkan output berikut ini ke layar?

* ** *** ****

5. Apa yang menjadi output dari program berikut? a)


void change(void) { int x; x = 1;

Indoprog

57

C/C++ Programming
} void main() { int x; x = 0; change(); cout << x << endl; }

Hendra, S.T.

b)
void change(int x) { x = 1; } void main() { int x; x = 0; change(x); cout << x << endl; }

6. Tuliskan suatu function prototype untuk suatu function yang memiliki dua paramter dengan type float dan mengembalikan true (1) jika parameter perta lebih besar dari paramater yang kedua, dan sebaliknya mengembalikan false (0). 7. Suatu function dengan nama ex1 memiliki sebuah variabel local dengan nama i dan function lainnya ex2 juga memiliki suatu variabel local bernama i. Kedua function tersebut digunakan bersama dalam suatu program utama yang memiliki sebuah variabel bernama i. Andaikan tidak adalah kesalahan lainnya. Apakah program ini dapat dikompilasi dengan tanpa kesalahan? Akankah program tersebut dijalankan tanpa kesalahan waktu run-time?

Latihan
1. Buatlah sebuah function yang akan mencetak suatu barisan sejumlah n tanda asterisk, n akan dilewatkan sebagai parameter ke function tersebut. Tuliskan suatu program yang akan menampilkan blok m x n tanda asterik berdasarkan nilai input m dan n oleh pemakai. 2. Kembangkan function pada soal nomor satu, sehingga jika nilai n melewati 80, maka tidak ada yang dicetak, dan function akan mengembalikan nilai false, dan sebaliknya true. Kemudian program utama akan memeriksa nilai pengembalian dari function, serta menampilkan pesan kesalahan overflow jika nilai false. 3. Buatlah suatu function yang dapat menghitung nilai simpanan di bank dengan parameter, present value, term, dan rate.

Indoprog

58

C/C++ Programming

Hendra, S.T.

Section 7

Functions (II). Arguments passed by value and by reference.


Sampai saat ini, semua function yang telah dibahas, melewatkan parameter ke function secara by value. Hal ini berarti ketika kita memanggil suatu function yang memiliki parameter, apa yang kita lewatkan ke function adalah values jadi bukan variable tersebut. Sebagai contoh, bayangkan misalnya kita memanggil function addition dengan menggunakan kode berikut:
int x=5, y=3, z; z = addition ( x , y );

Tetapi dalam kasus-kasus tertentu, anda perlu memanipulasi nilai dari dalam function terhadap variable external. Untuk keperluan diatas kita perlu menggunakan arguments passed by reference, sebagaimana yang ditunjukan pada contoh function duplicate berikut ini :
// passing parameters by reference #include <iostream.h> void duplicate (int& a, int& b, int& c) { a*=2; b*=2; c*=2; } int main () { int x=1, y=3, z=7; duplicate (x, y, z); cout << "x=" << x << ", y=" << y << ", z=" << z; return 0; }

x=2, y=6, z=14

Default values in arguments.


Kita kita mendeklarasikan suatu function, kita dapat menentukan nilai default untuk masing-masing parameter. Nilai ini akan digunakan ketika parameter tidak diberikan pada saat pemanggilan function, contoh :
// default values in functions #include <iostream.h> int divide (int a, int b=2)

6 5

Indoprog

59

C/C++ Programming
{ int r; r=a/b; return (r); } int main () { cout << divide (12); cout << endl; cout << divide (20,4); return 0; }

Hendra, S.T.

Overloaded functions.
Dua function yang berbeda dapat memiliki nama yang sama kalau prototype dari argumen-argumenya berbeda, hal ini berarti bahwa anda dapat memberikan nama yang sama pada lebih dari satu function jika memiliki jumlah argumen atau type yang berbeda pada argumennya, contoh :
// overloaded function #include <iostream.h> int divide (int a, int b) { return (a/b); } float divide (float a, float b) { return (a/b); } int main () { int x=5,y=2; float n=5.0,m=2.0; cout << divide (x,y); cout << "\n"; cout << divide (n,m); cout << "\n"; return 0;
}

2 2.5

Dalam hal ini kita telah mendefinisikan dua function dengan nama yang sama, tetapi salah satu darinya menerima dua argumen type int dan yang lainnya menerima type float. Compiler akan mengetahui yang mana akan dipanggil dengan menganalisa type ketika pemanggilan function.

inline functions.
Indoprog

60

C/C++ Programming

Hendra, S.T.

Directive inline dapat diikutsertakan sebelum deklarasi dari function untuk menentukan function mana yang harus di kompilasi sebagai kode sebagaimana ketika mereka dipanggil. Hal ini adalah sama dengan deklarasi sebuah makro. Hal ini bermanfaat kalau function tersebut sangat pendek. Format dari deklarasi tersebut adalah:
inline type name ( arguments ... ) { instructions ... }

dan dalam pemakaiannya adalah sama dengan function lainnya.

Recursivity.
Recursivity adalah kemampuan function untuk memanggil dirinya sendiri. Hal ini berguna untuk tugas-tugas seperti sorting dan factorial, sebagai contoh untuk mendapatkan factorial dari bilangan (n), dimana formula matematikanya adalah:
n! = n * (n-1) * (n-2) * (n-3) ... * 1

kongkritnya adalah, 5! (factorial dari 5) adalah:


5! = 5 * 4 * 3 * 2 * 1 = 120

dan contoh programnya adalah:


// factorial calculator #include <iostream.h> long factorial (long a) { if (a > 1) return (a * factorial (a-1)); else return (1); } int main () { long l; cout << factorial(3); }

Indoprog

61

C/C++ Programming

Hendra, S.T.

Catatan : Salah satu permasalahan yang sering timbul pada program yang mana functionnya yang menggunakan teknik rekursif adalah kehabisan tempat stack (Stack Overflow). dan contoh program fibonacci adalah:
// fibonacci calculator #include <iostream.h> long fib(int n) { if ((n == 0) || (n == 1)) return 1; else return fib(n - 1) + fib(n - 2); } int main () { long l; cout << fib(4); }

Indoprog

62

C/C++ Programming

Hendra, S.T.

Analisis : Processing fib(4)... Call fib(2) and fib(3). Processing fib(2)... Call fib(0) and fib(1). Processing fib(0)... Return 1! Processing fib(1)... Return 1! Processing fib(3)... Call fib(1) and fib(2). Processing fib(1)... Return 1! Processing fib(2)... Call fib(0) and fib(1). Processing fib(0)... Return 1! Processing fib(1)... Return 1! Catatan : Sesuatu hal yang penting untuk diketahui adalah ketika suatu function memangil dirinya (rekursif), maka suatu duplikasi dari fungsi tersebut akan dijalankan. Variabel local dari fungsi tersebut adalah terpisah antara satu sama yang lainnya dan tidak dapat mempengaruhi yang lain secara langsung.

Prototyping functions.

Indoprog

63

C/C++ Programming

Hendra, S.T.

Sampai saat ini, kita mendefinisikan function sebelum pemanggilannya Tetapi ada cara lain untuk menghindari penulisan semua kode function sebelum function main, yaitu dengan melakukan prototyping functions. Bentuk prototyping:
type name ( argument_type1, argument_type2, ...);

Hal ini adalah sama persis dengan header dari suatu function, kecuali:

Tidak diikuti oleh statement untuk function tersebut. Diakhir dengan tanda semicolon (;).

For example:
// prototyping #include <iostream.h> void odd (int a); void even (int a); int main () { int i; do { cout << "Type a number: (0 to exit)"; cin >> i; odd (i); } while (i!=0); return 0; } void odd (int a) { if ((a%2)!=0) cout << "Number is odd.\n"; else even (a); } void even (int a) { if ((a%2)==0) cout << "Number is even.\n"; else odd (a); }

Type a Number Type a Number Type a Number Type a Number

number (0 is odd. number (0 is even. number (0 is even. number (0 is even.

to exit): 9 to exit): 6 to exit): 1030 to exit): 0

Banyak programmer menyarankan anda untuk melakukan prototyped terhadap semua function. Karena dengan prototyped akan memudahkan kita untuk melihat bagaimana penulisan untuk memanggil suatu function.

Pertanyaan
1. Tuliskan tujuan pemakaian prototype pada function. Indoprog

64

C/C++ Programming

Hendra, S.T.

2. Tuliskan perbedaan antara variabel global, dan local. 3. Tuliskan pengertian function overloading. 4. Bagaimana suatu informasi dijadikan sebagai input ke suatu function? Bagaimana suatu informasi dapat dikembalikan ke program yang memanggilnya? 5. Apa yang akan menjadi output dari program berikut ini?
void change(int& y) { y = 1; } void main() { int x; x = 0; change(x); cout << x << endl; }

Latihan
1. Tuliskan suatu function void timetopart(float t, int& h, int& m) dimana akan mengkonversi waktu menjadi komponen jam dan menit, contoh jika nilai t adalah 2.5, maka akan dikembalikan 2 pada parameter h dan 30 pada parameter m. 2.5 = 2 jam 30 menit. 2. Kembangkan program berikut untuk kemampuan membaca terbilang sampai nilai triliunan
//Program baca angka //Oleh : Hendra Soewarno //Dengan memanfaatkan fasilitas function #include <iostream.h> #include <conio.h> #include <string.h> void bacaratusan(int n, char kata[]); int main() { char *kata; clrscr(); bacaratusan(101,kata); cout << kata; return 0; } // pada type array, variabel dilewatkan secara by reference // prototype fungsi

Indoprog

65

C/C++ Programming

Hendra, S.T.

void bacaratusan(int n, char kata[]) { char angka[20][20] = {"nol","satu","dua","tiga","empat","lima", "enam","tujuh","delapan","sembilan","sepuluh", "sebelas","duabelas","tigabelas","empatbelas","limabelas", "enambelas","tujuhbelas","delapanbelas","sembilanbelas"}; int ratusan,puluhan,satuan,sisa; char hasil[255]=""; ratusan = n/100; // ambil digit ratusan if (ratusan > 0) if (ratusan == 1) strcat(hasil,"seratus"); else { strcat(hasil,angka[ratusan]); strcat(hasil,"ratus"); } sisa = n - (ratusan*100); // ambil sisa if (sisa < 20 && sisa > 0) // jika bernilai 0 s/d 19 strcat(hasil,angka[sisa]); // langsung dibaca dari array else { puluhan = sisa/10; // ambil digit puluhan if (puluhan > 0) { strcat(hasil,angka[puluhan]); strcat(hasil,"puluh"); } satuan = sisa - (puluhan*10); // ambil sisa if (satuan > 0) strcat(hasil,angka[satuan]); } strcpy(kata,hasil); // duplikasi ke return variabel }

3. Kembangkan program soal no 2 untuk kemampuan membaca angka yang mengandung Sen. 4. Contoh Pemanfaatan teknik rekursif untuk mencari faktor dari suatu bilangan :
#include <iostream.h> void printfactor(int n); int main() { cout << "faktor dari 100 adalah" << endl; printfactor(100); return 0; } void printfactor(int n) { int factor = 2; while (factor<n && n % factor) factor++; cout << factor << " " << n / factor<<endl; if (factor < n) printfactor(n/factor); }

Indoprog

66

C/C++ Programming

Hendra, S.T.

Section 8

Arrays
Arrays adalah serial dari elemen-elemen (variable-variabel) yang memiliki type yang sama dan ditempatkan secara berurutan pada memory sehingga dapat dinyatakan dengan menambah index pada nama variable tersebut. Hal ini berarti bahwa, sebagai contoh, kita dapat menempatkan 5 nilai yang bertype int tampa harus mendeklarasikan 5 variabel yang berbeda untuk masing-masing nilai. Sebagai gantinya kita dapat menggunakan array untuk menyimpan kelima nilai tersebut. Sebagai contoh, suatu array mengandung lima nilai type int yang bernama billy dapat digambarkan sebagai berikut:

dimana setiap kotak kosong mewakili element dari array, dimana dalam hal ini adalah nilai integer dari type int. Index array tersebut dimulai dari 0 sampai 4. Sama seperti variable lainnya, suatu array harus dideklarasikan terlebih dahulu sebelum pemakaiannya, deklarasi array pada C++:
type name [elements];

dima type adalah type data (int, float...), name adalah nama variabel dan elements adalah jumlah element yang diinginkan, dalam hal ini diapit oleh brackets (kurung siku) []. Selanjutnya, contoh penulisan deklarasi:
int billy [5];

CATATAN: Elements harus berupa nilai constant (konstanta), karena array merupakan blok dari memory static yang harus diberikan, sehingga compiler dapat mengetahui jumlah memory yang diperlukan array sebelum instruksi.

Initializing arrays.
Ketika kita mendeklarasi suatu array local (berada didalam function), jika kita tidak menentukannya nilai awalnya, maka isinya adalah tak tentu.

Indoprog

67

C/C++ Programming

Hendra, S.T.

Jika kita mendeklarasi array global (diluar dari function), nilai awalnya adalah nol. Maka jika kita mendeklarasikan array global berikut:
int billy [5];

setiap elemen dari billy adalah 0:

Kita juga dapat mendeklarasikan suatu Array, berikut dengan nilainya dengan menuliskan nilainya dalam tanda kurawal { }. Sebagai contoh:
int billy [5] = { 16, 2, 77, 40, 12071 };

Deklarasi diatas akan menghasilkan array sebagai berikut :

Atau pada C++, boleh juga ditulis sebagai berikut :


int billy [] = { 16, 2, 77, 40, 12071 };

Access to the values of an Array.


Dalam hal ini, setiap element array yang ada dapat diakses satu persatu nilainya dengan format penulisan berikut:
name[index]

Sebagai contoh, untuk menyimpan nilai 75 pada elemen kelima pada billy, penulisan yang sesuai adalah:
billy[2] = 75;

dan, untuk menyimpan nilai elemen ketiga dari variable billy ke variable a, kita dapat menulis:
a = billy[2];
// arrays example #include <iostream.h> int billy [] = {16, 2, 77, 40, 12071}; int n, result=0;

12206

Indoprog

68

C/C++ Programming
int main () { for ( n=0 ; n<5 ; n++ ) { result += billy[n]; } cout << result; return 0; }

Hendra, S.T.

Multidimensional Arrays
Array multidimensional dapat digambarkan sebagai array dari array.

adalah suatu bidimensional array 3 baris 5 kolom dengan type int. Cara deklarasinya adalah sebagai berikut:
Misalnya jimmy int jimmy [3][5];

dan, cara untuk menyebutkan elemen baris kedua, kolom keempat adalah dengan ekspresi berikut :
jimmy[1][3]

(sesuatu yang harus anda ingat adalah index dari array selalu dimulai dengan 0). Array Multidimensional tidak hanya terbatas pada dua dimensi saja. Mereka dapat memiliki dimensi sesuai dengan kebutuhan, walaupun sebenarnya jarang melebihi 3 dimensi. Contoh:
char century [100][365][24][60][60];

Indoprog

69

C/C++ Programming

Hendra, S.T.

Menentukan type char untuk setiap detik dalam satu abad, yang terdiri lebih dari 3 milyar chars! Hal ini akan menggunakan memory sebesar 3000 megabytes dari RAM jika kita mendeklarasikannya.

Arrays as parameters
Jika anda perlu melewatkan suatu array ke sebuah function sebagai parameter. Untuk hal ini kita perlu mendeklarasikan function ini sebagai array berdasarkan type, contoh:
void procedure (int arg[])

Memungkinkan suatu parameter dengan type "Array of int" yang bernama arg. Untuk dilewatkan kedalam function ini suatu array dideklarasikan sebagai berikut:
int myarray [40];

Kita cukup menuliskan sebagai berikut:


procedure (myarray);

Berikut ini adalah contoh konkritnya:


// arrays as parameters #include <iostream.h> void printarray (int arg[], int length) { for (int n=0; n<length; n++) cout << arg[n] << " "; cout << "\n"; } int main () { int firstarray[] = {5, 10, 15}; int secondarray[] = {2, 4, 6, 8, 10}; printarray (firstarray,3); printarray (secondarray,5); return 0; }

5 10 15 2 4 6 8 10

Dalam deklarasi suatu function, jika dimungkinkan untuk mengikutsertakan suatu array multidimensi. Format untuk array tiga dimensi adalah sebagai berikut:
base_type[][depth][depth]

sebagai contoh, suatu function dengan array tiga dimensi sebagai parameternya :
void procedure (int myarray[][3][4])

Indoprog

70

C/C++ Programming
Contoh Program : //Program permainan tic tac toe //Oleh : Hendra Soewarno //Dengan memanfaatkan fasilitas array dan graphic #include <graphics.h> #include <conio.h> int matrix[3][3] = {{0,0,0},{0,0,0},{0,0,0}}; // function prototype int checkgame(int x) void drawarena() void drawcircle(int i,int j) void drawcross(int i,int j) void drawselector(int i,int j) void clearselector(int i,int j) void think() // program utama int main() { int gdriver, gmode; int gameover; int row =0; int col = 0; char key; detectgraph(&gdriver,&gmode); initgraph(&gdriver,&gmode,"egavga.bgi"); drawarena(); gameover = 0; while (!gameover) { drawselector(row,col); key = getch(); if (key==0) key = getch(); clearselector(row,col); switch (key) { case 27 : gameover = 3; break; case 32 : drawcross(row,col); gameover = checkgame(1); think(); if (gameover ==0) gameover = checkgame(9); break; case 72 : row--; if (row < 0) row = 0; case 80 : row++; if (row > 2) row = 2; case 75 : col--; if (col < 0) col = 0; case 77 : col++; if (col > 2) col = 2; } } setcolor(15);

Hendra, S.T.

//matrix permainan

//memeriksa apakah permainan selesai //mengambar kotak 3 x 3 dilayar //mengambar lingkaran di posisi i,j //mengambar tanda silang di posisi i,j //mengambar kotak seleksi //menghapus kotak seleksi //komputer berpikir menyerang/bertahan

//jika scan code //baca nilai extended //periksa nilai key //esc //space (manusia) //manusia menang ? //giliran komputer //jika belum game //komputer menang ? break; break; break; break; //up //down //left //right

Indoprog

71

C/C++ Programming
if (gameover==1) outtextxy(20,20,"Permainan dimenangkan oleh manusia"); else if (gameover==9) outtextxy(20,20,"Permaiaan dimenangkan oleh komputer"); else outtextxy(20,20,"Berakhir tanpa pemenang"); getch(); closegraph(); return 0; } int checkgame(int x) { if (matrix[0][0] == x return x; else if (matrix[1][0] return x; else if (matrix[2][0] return x; else if (matrix[0][0] return x; else if (matrix[0][1] return x; else if (matrix[0][2] return x; else if (matrix[0][0] return x; else if (matrix[0][2] return x; else return 0; }

Hendra, S.T.

&& matrix[0][1] == x && matrix[0][2] == x) == x && matrix[1][1] == x && matrix[1][2] == x) == x && matrix[2][1] == x && matrix[2][2] == x) == x && matrix[1][0] == x && matrix[2][0] == x) == x && matrix[1][1] == x && matrix[2][1] == x) == x && matrix[1][2] == x && matrix[2][2] == x) == x && matrix[1][1] == x && matrix[2][2] == x) == x && matrix[1][1] == x && matrix[2][0] == x)

void drawarena() { setcolor(15); for (int i=0;i<3;i++) for (int j=0;j<3;j++) rectangle(250+j*50,50+i*50,250+(j+1)*50,50+(i+1)*50); } void drawcircle(int i,int j) { setcolor(15); circle(250+j*50+25,50+i*50+25,20); matrix[i][j] = 9; } void drawcross(int i,int j) { setcolor(15); line(250+j*50+2,50+i*50+2,250+(j+1)*50-2,50+(i+1)*50-2); line(250+j*50+2,50+(i+1)*50-2,250+(j+1)*50-2,50+i*50+2); matrix[i][j] = 1;

Indoprog

72

C/C++ Programming
} void drawselector(int i,int j) { setcolor(4); rectangle(250+j*50+2,50+i*50+2,250+(j+1)*50-2,50+(i+1)*50-2); }

Hendra, S.T.

void clearselector(int i,int j) { setcolor(0); rectangle(250+j*50+2,50+i*50+2,250+(j+1)*50-2,50+(i+1)*50-2); } void think() { // algoritma berpikir ini telah dioptimasi sehingga komputer tidak pernah kalah (kecerdasan yang terprogram) int r[3]; int c[3]; int d[2]; int i,j,ok; r[0] = matrix[0][0]+matrix[0][1]+matrix[0][2]; r[1] = matrix[1][0]+matrix[1][1]+matrix[1][2]; r[2] = matrix[2][0]+matrix[2][1]+matrix[2][2]; c[0] = matrix[0][0]+matrix[1][0]+matrix[2][0]; c[1] = matrix[0][1]+matrix[1][1]+matrix[2][1]; c[2] = matrix[0][2]+matrix[1][2]+matrix[2][2]; d[0] = matrix[0][0]+matrix[1][1]+matrix[2][2]; d[1] = matrix[2][0]+matrix[1][1]+matrix[0][2]; ok = 0; //bertahan atau menyerang pada masing-masing kolom dan baris for (i=0;i<3;i++) for (j=0;j<3;j++) if (matrix[i][j]==0 && (r[i]==2 || c[j]==2 || r[i]==18 || c[j]==18)) { drawcircle(i,j); ok = 1; } //bertahan atau menyerang pada masing-masing diagonal if (!ok) { if (matrix[0][0]==0 && (d[0]==2 || d[0]==18)) {drawcircle(0,0); ok=1;} else if (matrix[2][0]==0 && (d[1]==2 || d[1]==18)) {drawcircle(2,0); ok=1;} else if (matrix[0][2]==0 && (d[1]==2 || d[1]==18)) {drawcircle(0,2); ok=1;} else if (matrix[2][2]==0 && (d[0]==2 || d[0]==18)) {drawcircle(2,2); ok=1;} }

Indoprog

73

C/C++ Programming

Hendra, S.T.

//menyerang pada posisi kosong, dengan prioritas titik tengah if (!ok) { if (matrix[1][1]==0) drawcircle(1,1); else if (matrix[0][0]==0 && (r[0]==1 || c[0]==1 || d[0]==1 || d[0]==9)) {drawcircle(0,0); ok=1;} else if (matrix[2][0]==0 && (r[2]==1 || c[0]==1 || d[1]==1 || d[1]==9)) {drawcircle(2,0); ok=1;} else if (matrix[0][2]==0 && (r[0]==1 || c[2]==1 || d[1]==1 || d[1]==9)) {drawcircle(0,2); ok=1;} else if (matrix[2][2]==0 && (r[2]==1 || c[2]==1 || d[0]==1 || d[0]==9)) {drawcircle(2,2); ok=1;} else if (matrix[1][0]==0 && (r[1]==1 || c[0]==1)) {drawcircle(1,0); ok=1;} else if (matrix[0][1]==0 && (r[0]==1 || c[1]==1)) {drawcircle(0,1); ok=1;} else if (matrix[2][1]==0 && (r[2]==1 || c[1]==1)) {drawcircle(2,1); ok=1;} else if (matrix[1][2]==0 && (r[1]==1 || c[2]==1)) {drawcircle(1,2); ok=1;} } }

Pertanyaan
1. Jika suatu array memiliki 100 element, sebutkan range subscript yang diperbolehkan! 2. Apa perbedaan dari ekspresi a4 dan a[4]? 3. Tuliskan sebuah deklarasi untuk suatu array float 100 elemen. Termasuk memberikan nilai awal untuk 4 elemen pertama yaitu 1.0, 2.0, 3.0 dan 4.0. 4. Suatu array dengan nama day dideklarasikan sebagai berikut:
int day[] = {mon, tue, wed, thu, fri};

Berapa banyak element dari array day ? Bagaimana kalau deklarasi diganti menjadi
int day[7] = {mon, tue, wed, thu, fri};

5. Apa yang akan menjadi output dari potongan program C++ berikut ini?
int A[5] = {1 , 2, 3, 4}; int i; for (i=0; i<5; i++) { A[i] = 2*A[i]; cout << A[i] << " "; }

Indoprog

74

C/C++ Programming

Hendra, S.T.

6. Tuliskan kesalahan dari bagian program berikut!


int A[10], i; for (i=1; i<=10; i++) cin >> A[i];

Latihan
1. Salah satu metoda penyajian data adalah dengan Histogram. Suatu histogram menghitung jumlah data yang jatuh pada interval tertentu, dan menampilkannya dalam bentuk barchart. Buatlah suatu program yang menghasilkan n bilangan bulat random yang berada dalam jangkauan 0-99 dan menghasilkan suatu Histogram dari data tersebut. Asumsikan bahwa kita kita akan membagi data tersebut menjadi interval 0-9, 1019, 20-29, ........., 90-99. Kemudian cetak Histrogram yang bersesuaian
0 - 9 10 - 19 20 - 29 dll. 16 13 17 XXXXXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXXXXXXX

2. Kembangkan function pencarian dengan pendekatan binary search dengan memanfaatkan teknik pemrograman rekursif pada function.

Indoprog

75

C/C++ Programming

Hendra, S.T.

Section 9

Strings of Characters.
Dalam semua program yang telah kita buat, kita hanya menggunakan variable numeric, dan menggunakan ekspresi numeric. Selain numeric sebenarnya masih ada karakter string Pada C untuk menyimpan karakter string kita dapat menggunakan type char, yang mana merupakan urutan dari elemen char Sebagai contoh, array berikut (atau karakter string):
char jenny [20];

dapat menyimpan 20 karakter. Anda dapat membayangkannya sebagai:

Ukuran maksimum dari 20 karakter tidak selamanya akan digunakan secara keseluruhan. Dapat saja hanya berisi tulisan "Hello" ataupun "Merry christmas", sehingga perlu diakhiri dengan suatu karakter null, yang ditulis sebagai 0 atau '\0'. Sehingga dapat digambarkan sebagai berikut :

Initialization of strings
Karena sebenarnya karakter string adalah array, sehingga cara mengisinya sama dengan array biasanya, contoh :
char mystring[] = { 'H', 'e', 'l', 'l', 'o', '\0' };

Dalam hal ini, kita akan mendeklarasikan suatu karakter string (array) yang terdiri dari 6 elemen type char dengan nilai Hello diikuti dengan suatu karakter null '\0'. Berikut ini adalah cara lain untuk deklarasi karakter string dengan nama mystring dengan hasil yang sama :

Indoprog

76

C/C++ Programming
char mystring [] = { 'H', 'e', 'l', 'l', 'o', '\0' }; char mystring [] = "Hello";

Hendra, S.T.

Assigning values to strings


Karena merupakan suatu array, untuk memberikan nilai kepada karakter string kita dapat menggunakan metode berikut:
mystring[0] mystring[1] mystring[2] mystring[3] mystring[4] mystring[5] = = = = = = 'H'; 'e'; 'l'; 'l'; 'o'; '\0';

Tetapi tentu saja cara demikian adalah sangat tidak praktis. Umumnya untuk memberikan nilai pada suatu array, khususnya untuk karakter string kita dapat menggunakan fungsi seperti strcpy. strcpy (string copy) dimana didefinisikan dalam library cstring (string.h) yang dapat digunakan dengan penulisan berikut:
strcpy (string1, string2);

Hal ini akan menduplikasi isi dari string2 kedalam string1. string2 dapat berupa suatu array, suatu pointer, atau suatu constant string, contoh :
strcpy (mystring, "Hello");

Contoh :
// setting value to string #include <iostream.h> #include <string.h> int main () { char szMyName [20]; strcpy (szMyName,"J. Soulie"); cout << szMyName; return 0; }

J. Soulie

Perhatikan bahwa kita perlu melakukan include <string.h> pada bagian header agar dapat digunakan function strcpy. Walaupun kita juga dapat menulis suatu fungsi sederhana seperti setstring berikut dengan operasi yang menyerupai strcpy:
// setting value to string #include <iostream.h>

J. Soulie

Indoprog

77

C/C++ Programming

Hendra, S.T.

void setstring (char szOut [], char szIn []) { int n=0; do { szOut[n] = szIn[n]; } while (szIn[n++] != '\0'); } int main () { char szMyName [20]; setstring (szMyName,"J. Soulie"); cout << szMyName; return 0; }

Metode lain yang sering dipergunakan untuk memasukan nilai ke suatu array adalah dengan langsung memasukannya melalui input stream (cin). Dalam hal ini nilai string diberikan oleh user pada saat eksekusi program. Ketika cin digunakan dengan string atau karakter biasanya menggunakan metode getline, yang dapat dipanggil dengan prototype berikut:
cin.getline ( char buffer[], int length, char delimiter = ' \n');

dimana buffer adalah alamat untuk menyimpan input (dalam hal ini adalah array), length adalah panjang maksimum dari buffer (ukuran dari array) dan delimiter adalah karakter yang digunakan untuk mengakhiri user input, dimana defaultnya adalah newline character ('\n'). Berikut ini adalah contoh sederhana pemakaian cin.getline pada string:
// cin with strings #include <iostream.h> int main () { char mybuffer [100]; cout << "What's your name? "; cin.getline (mybuffer,100); cout << "Hello " << mybuffer << ".\n"; cout << "Which is your favourite team? "; cin.getline (mybuffer,100); cout << "I like " << mybuffer << " too.\n"; return 0; }

What's your name? Juan Hello Juan. Which is your favourite team? Inter Milan I like Inter Milan too.

Indoprog

78

C/C++ Programming

Hendra, S.T.

Sebenarnya kita dapat saja menggunakan perintah berikut untuk membaca string ke suatu variable array:
cin >> mybuffer;

Tetapi jika dibandingkan dengan cin.getline, perintah diatas memiliki keterbatasan:


Hanya dapat menerima satu kata tunggal (bukan kalimat lengkap) karena metode ini menggunakan karakter kosong sebagai delimeternya, seperti spasi, tabulator,. Tidak dimungkinkan untuk membatasi ukuran buffer. Hal ini akan membuat program anda menjadi tidak stabil jikalau input oleh user melebihi ukuran array.

Untuk alas an ini, kami menyarankan anda untuk menggunakan cin.getline sebagai penganti dari cin >>.

Converting strings to other types


Kadang-kadang kita perlu melakukan konversi string ke type numerik. Misalnya suatu string seperti "1977", dan kita ingin mengkonversinya ke suatu type data integer, untuk keperluan tersebut kita membutuhkan library cstdlib (stdlib.h) yang mengandung tiga fungsi untuk keperluan ini :

atoi: melakukan konversi string ke type int. atol: melakukan konversi string ke type long. atof: melakukan konversi string ke type float.

Semua fungsi diatas membutuhkan satu parameter dan mengembalikan suatu nilai berdasarkan tyoe yang dikehendaki (int, long or float). contoh:
// cin and ato* functions #include <iostream.h> #include <stdlib.h> int main () { char mybuffer [100]; float price; int quantity; cout << "Enter price: "; cin.getline (mybuffer,100); price = atof (mybuffer); cout << "Enter quantity: "; cin.getline (mybuffer,100); quantity = atoi (mybuffer); cout << "Total price: " << price*quantity; return 0; }

Enter price: 2.75 Enter quantity: 21 Total price: 57.75

Functions to manipulate strings


Indoprog

79

C/C++ Programming

Hendra, S.T.

Library cstring (string.h) mendefinisikan banyak fungsi untuk melakukan operasi manipulasi terhadap string pada C (seperti yang diterangakan pada strcpy). Berikut ini adalah ringkasan fungsi yang sering digunakan: strcat: char* strcat (char* dest, const char* src); Menambahkan src string pada akhir dari dest string. Mengembalikan dest. strchr: char* strchr (const char* string, int c ); Mengembalikan pointer pada karakter pertama ditemukan dan null jika tidak ditemukan. strcspn: size_t strcspn ( const char * string1, const char * string2 ); Mencari dalam string1 character demi character, mengembalikan posisi pertama yang mengandung salah satu character pada string 2, fungsi akan mengembalikan nilai panjang dari string1 kalau tidak ada character string2 didalam string1, karena masing-masing diakhiri dengan null. Example.
/* strcspn example */ #include <stdio.h> #include <string.h> int main () { char str1[] = "fcba73"; char str2[] = "1234567890"; int i; i = strcspn (str1,str2); printf ("The first number in str1 is str1[%d]\n",i); return 0; }

Output:
The first number in str1 is str1[4]

strcmp: int strcmp (const char* string1, const char* string2); Membandingkan string string1 dan string2. Mengembalikan 0 jika keduanya serupa. strcpy: char* strcpy (char* dest, const char* src); Menduplikasi isi dari src ke dest. Mengembalikan dest. strlen: size_t strlen (const char* string); Mengembalikan panjang dari string. CATATAN: char* adalah sama dengan char[]

Latihan
1. Buatlah program untuk mengkonversi Desimal ke Biner, Octal dan Hexa dengan menggunakan C null terminated character string. Indoprog

80

C/C++ Programming
//Program konversi Descimal ke Hexa //Oleh : Hendra Soewarno //Dengan memanfaatkan C null terminated character string #include <iostream.h> #include <string.h> #include <conio.h> void dectohex(int dec, char hex[]); int main() { char hex[10]=""; clrscr(); dectohex(1000,hex); cout << hex; return 0; }

Hendra, S.T.

void dectohex(int dec, char *hex) { char digit[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D', 'E','F'}; while (dec > 0) { *hex = digit[dec%16]; dec = dec / 16; hex++; }

*hex = \0; }

//character null terminate

2. Buatlah program untuk mengkonversi bilangan Binary, Octal dan Hexa ke Desimal.

Indoprog

81

C/C++ Programming

Hendra, S.T.

Section 10

Pointers
Kita telah melihat bagaimana variable-variable yang berada dalam sel di memory dapat kita akses dengan suatu identifier (nama variabel). Secara fisik variabel tersebut i disimpan pada tempat tertentu di memori. Suatu contoh dari memori komputer adalah suatu jalan didalam kota. Pada semua rumah diatas jalan tersebut dinomori secara unik, jika kita ingin ke alamat Jl. Jurung No. 6, maka kita dapat dengan mudah menemukannya. Demikian juga sistem operasi akan mengorganisasikan memori dengan nomor berurutan secara unik, jika kita berbicara tentang lokasi 1234 dalam memori, maka hanya ada satu lokasi dengan nomor tersebut.

Address (dereference) operator (&).


Ketika kita mendeklarasikan suatu variabel, kita tidak menentukan dimana variabel tersebut akan ditempatkan dimemori. Hal tersebut akan dilakukan oleh compiler dan sistem operasi pada saat runtime. Kadang-kadang kita ingin mengetahui alamat dimana variabel kita ditempatkan, hal tersebut dapat dilakukan dengan mengawali identifier variabel tersebut dengan suatu ampersand sign (&), dimana dibaca sebagai "address of". contoh:
ted = &andy;

akan mengisi variabel ted dengan alamat dari variabel andy. Misalnya variabel andy ditempatkan pada alamat memori 1776 dan penulisan berikut:
andy = 25; fred = andy; ted = &andy;

akan menghasilkan seperti diagram berikut :

Indoprog

82

C/C++ Programming

Hendra, S.T.

Variabel yang menyimpan alamat dari variabel lain (seperti ted pada contoh sebelumnya) kita sebut sebagai pointer. Pointer pada C++ memiliki beberapa keunggulan dan sering digunakan.

Reference operator (*)


Dengan menggunakan suatu pointer kita dapat langsung mengakses nilai dari alamat yang tersimpan pada variabel dengan mengawalinya dengan operator asterisk (*), yang dibaca sebagai "value pointed by". lanjutan dari contoh sebelumnya:
beth = *ted;

(dimana dapat dibaca sebagai: "beth sama dengan value pointed by ted") beth akan berisi nilai 25, karena ted adalah 1776, dan nilai yang ditunjuk oleh 1776 adalah 25.

Operator of address or dereference (&) Digunakan untuk mengawali suatu variabel dan di baca sebagai "address of", sehingga: &variable1 dapat dibaca sebagai "address of variable1" Operator of reference (*) Menunjukan apa yang terdapat pada alamat yang ditunjuk oleh suatu variabel. Dibaca sebagai "value pointed by".

Declaring variables of type pointer


Sehubungan dengan kemampuan suatu pointer untuk secara langsung menunjuk pada nilai yang ditunjuk, sehingga perlu ditentukan jenis data type yang ditunjuk oleh sebuah pointer ketika mendeklareasikannya. Adalah tidak sama pointer pada suatu char sebagaimana pointer pada int dan float. Deklarasi pointer mengikuti bentuk berikut:

Indoprog

83

C/C++ Programming
type * pointer_name;

Hendra, S.T.

dimana type adalah type dari data yang ditunjuk, bukan type dari pointer itu sendirinya, contoh:
int * number; char * character; float * greatnumber;

Perlu ditekankan bahwa pemakaian asterisk (*) pada saat deklarasi pointer menunjukan bahwa itu adalah pointer Berikut ini adalah contoh pemakaian pointer :
// more pointers #include <iostream.h> int main () { int value1 = 5, value2 = 15; int *p1, *p2; p1 = &value1; // p1 = address of value1 p2 = &value2; // p2 = address of value2 *p1 = 10; // value pointed by p1 = 10 *p2 = *p1; // value pointed by p2 = value pointed by p1 p1 = p2; // p1 = p2 (value of pointer copied) *p1 = 20; // value pointed by p1 = 20 cout << "value1==" << value1 << "/ value2==" << value2; return 0; }

value1==10 / value2==20

Pointers and arrays


Suatu array dapat juga diakses dengan menggunakan pointer, perhatikan contoh berikut :
int numbers [20]; int * p;

dan penulisan berikut:


p = numbers;

Dalam hal ini p akan menunjuk pada akan menunjuk pada elemen pertama dari numbers sehingga pada contoh berikut dapat dilakukan hal berikut :

Indoprog

84

C/C++ Programming
// more pointers #include <iostream.h> int main () { int numbers[5]; int * p; p = numbers; *p = 10; p++; *p = 20; p = &numbers[2]; *p = 30; p = numbers + 3; *p = 40; p = numbers; *(p+4) = 50; for (int n=0; n<5; n++) cout << numbers[n] << ", "; return 0; }

Hendra, S.T. 10, 20, 30, 40, 50,

Pointer initialization
Ketika mendeklarasikan pointer, kita dapat melakukan secara explicit dengan langsung menunjuk pada variabel yang kita inginkan,
int number; int *tommy = &number;

hal ini sama dengan penulisan:


int number; int *tommy; tommy = &number;

Sebagaimana array, compiler juga memungkinkan kasus special dimana kita ingin menginisialisasi isi dari ponter pada saat deklarasi variabel pointer:
char * terry = "hello";

dalam hal ini static storage dicadangkan untuk menyimpan "hello" dan suatu pointer pada char pertama dari memori blok (dalam hal ini adalah 'h') di assign ke terry. Perhatikan gambar berikut :

Dan kedua penulisan berikut adalah sah :

Indoprog

85

C/C++ Programming
terry[4] = '!'; *(terry+4) = '!';

Hendra, S.T.

dalam hal ini penulisan terry[4] adalah sama dengan menulis *(terry+4):

Arithmetic of pointers
Operasi aritmatika yang dilakukan terhadap suatu pointer akan berbeda berdasarkan type datanya, hal ini sangat tergantung pada ukuran byte dari masing-masing type data. Misalnya :
char *mychar; short *myshort; long *mylong;

dan bayangkan masing-masing menunjuk pada lokasi memori 1000, 2000 dan 3000 secara berurutan. operasi berikut :
mychar++; myshort++; mylong++; akan menyebabkan mychar menjadi nilai 1001, myshort mylong menjadi 3004.

menjadi 2002, dan

Indoprog

86

C/C++ Programming

Hendra, S.T.

Hal ini juga berlaku untuk penulisan dalam bentuk :


mychar = mychar + 1; myshort = myshort + 1; mylong = mylong + 1;

Pointers to pointers
C++ juga memungkinkan pemakaian pointer untuk menunjuk pada pointer, dalam hal ini berarti menunjuk pada data. Dalam hal ini kita perlu menambah tanda asterisk (*) pada setiap tingkat referensi:
char a; char * b; char ** c; a = 'z'; b = &a; c = &b;

Dalam hal ini bayangkan memori dari masing-masing variabel adalah 7230, 8092 dan 10502, dapat digambarkan berikut:

(didalam sel terdapat isi dari variabel) Sesuatu yang baru dari contoh ini adalah variabel c, dimana kita dapat membicarakannya dalam tiga cara yang berbeda, dimana masing-masing dari nilainya akan bersesuaian dengan nilai yang berbeda:
c adalah variabel type (char **) dengan nilai 8092 *c adalah varibel type (char*) dengan nilai 7230 **c adalah variabel type (char) dengan suatu nilai'z'

Pertanyaan
1. Operator apa yang digunakan untuk mendapatkan alamat dari suatu variabel? 2. Operator apa yang digunakan untuk mendapatkan nilai yang tersimpan pada alamat yang tersimpan dalam pointer? 3. Apa yang dimaksud dengan pointer? 4. Apa perbedaan antara alamat yang tersimpan pada suatu pointer dengan nilai pada alamat tersebut?

Indoprog

87

C/C++ Programming

Hendra, S.T.

5. Apa perbedaan antara indirection operator dan address of operator? 6. Apa perbedaan antara const int * ptrOne dan int * const ptrTwo?

Latihan
1. Buatlah sebuah function untuk menghitung jumlah kata dari string yang diberikan dengan fasilitas pointer. 2. Buatlah function untuk membuat setiap huruf pertama dari string yang diberikan menjadi huruf besar dengan fasilitas pointer. 3. Buatlah program yang menyimpan nilai yang dimasukan oleh pemakai, urut nilai tersebut secara descending, dan coba temukan nilai yang dimasukan oleh pemakai.

Indoprog

88

C/C++ Programming

Hendra, S.T.

Section 11

Advanced pointers void pointers


Pointer type void adalah suatu pointer type khusus. void pointers dapat menunjuk pada sembarang type data, dari suatu nilai integer ke suatu string characters. Kelemahannya adalah data yang ditunjuk tidak dapat mengacu secara langsung (kita tidak dapat menggunakan referensi asterisk * untuk mengoperasikan mereka), karena panjangnya tidak tertentu, dan oleh sebab itu kita akan selalu menggunakan type casting atau assignations untuk mengubah void pointer kita ke suatu pointer dari suatu concrete data type dimana kita dapat mengacu padanya. Perhatikan contoh berikut:
// integer increaser #include <iostream.h> void increase (void* data, int type) { switch (type) { case sizeof(char) : (*((char*)data))++; break; case sizeof(short): (*((short*)data))++; break; case sizeof(long) : (*((long*)data))++; break; } } int main () { char a = 5; short b = 9; long c = 12; increase (&a,sizeof(a)); increase (&b,sizeof(b)); increase (&c,sizeof(c)); cout << (int) a << ", " << b << ", " << c; return 0; }

6, 10, 13

adalah suatu operator yang integrasi dalam bahasa C++ yang akan mengembalikan suatu nilai konstanta dengan ukuran byte dari parameternya, maka, sizeof(char) adalah 1, karena type char panjangnya 1 byte.
sizeof

Pointers to functions
C++ memungkinkan operasi pointer terhadap function. Pemakaian yang paling umum adalah untuk melewatkan suatu function sebagai parameter pada fungsi lain. Untuk mendeklarasikan suatu pointer ke suatu function kita harus mendeklarasikannya seperti

Indoprog

89

C/C++ Programming

Hendra, S.T.

prototype dari function, cuma nama function diapit dengan tanda parenthesis () dan sebuah pointer asterisk (*) disisipkan sebelum nama tersebut :
// pointer to functions #include <iostream.h> int addition (int a, int b) { return (a+b); } int subtraction (int a, int b) { return (a-b); } int (*minus)(int,int) = subtraction; int operation (int x, int y, int (*functocall)(int,int)) { int g; g = (*functocall)(x,y); return (g); } int main () { int m,n; m = operation (7, 5, addition); n = operation (20, m, minus); cout <<n; return 0; } 8

Pada contoh diatas, minus adalah sebuah variabel global pointer pada suatu function yang memiliki dua parameter type int, hal itu langsung menunjuk pada function subtraction, semuanya dalam satu baris tunggal:
int (* minus)(int,int) = subtraction;

Stdlib for sorting and searching


QSort : void qsort ( void * base, size_t num, size_t width, int (*fncompare)(const void *, const void *) ); Function ini menggunakan implementasi algoritma QuickSort untuk mengurut elemen yang berada dalam suatu array pada pointer base, masing-masing elemen harus memiliki ukuran sama. lsearch : void*
lsearch ( const void * key, void * base, size_t num, size_t width, int (*fncompare)(const void *, const void * ) );

Mencari key dalam array pada pointer base dengan metode linier search, dan akan mengembalikan alamat pertama elemen yang berhasil ditemukan.

Indoprog

90

C/C++ Programming

Hendra, S.T.

bsearch : void*

bsearch ( const void * key, const void * base, size_t num, size_t width, int (*fncompare)(const void *, const void * ) );

Mencari key dalam array pada pointer base dengan metode binary search, dan akan mengembalikan alamat pertama elemen yang berhasil ditemukan. Adapun paramater dari masing-masing function diatas adalah : key Pointer ke objek sebagai key yang akan dicari. base Pointer ke base dari array dimana pencarian akan dilakukan. num Jumlah elemen dalam array yang di tunjuk base. width Ukuran dalam byte masing-masing elemen dari array tersebut. fncompare Function untuk membandingkan dua elemen. Hal ini harus disediakan oleh programmer dengan deklarasi sebagai berikut : int fncompare (const void * elem1, const void * elem2 ); Function ini akan menerima dua parameter (elem1 dan elem2) yang menunjuk pada elemen, dan harus mengembalikan suatu nilai integer sebagai hasil perbandingan: return value description
<0 0 >0 *elem1 < *elem2 *elem1 == *elem2 *elem1 > elem2

Contoh :
/* qsort, lsearch, and bsearch example */ #include <stdio.h> #include <stdlib.h> int values[] = { 40, 10, 100, 90, 20, 25 }; int compare (const void * a, const void * b) { return ( *(int*)a - *(int*)b ); } int main () { int * pItem;

Indoprog

91

C/C++ Programming
int n; qsort (values, 6, sizeof(int), compare); for (n=0; n<6; n++) { printf ("%d ",values[n]); }

Hendra, S.T.

pItem = (int*) lsearch (&key, values, 6, sizeof (int), compare); if (pItem!=NULL) printf ("%d using linear search is in the array",*pItem); else printf ("%d is not in the array",key);

int key = 40; pItem = (int*) bsearch (&key, values, 6, sizeof (int), compare); if (pItem!=NULL) printf ("%d using binary search is in the array",*pItem); else printf ("%d is not in the array",key); return 0; }

Output:
10 20 25 40 90 100 40 using linear search is in the array 40 using binary search is in the array

Indoprog

92

C/C++ Programming

Hendra, S.T.

Section 12

Dynamic memory.
Kadang-kadang kita membutuhkan variabel dengan ukuran yang baru dapat ditentukan pada saat runtime, misalnya kita menanyakan jumlah data pada user, mengalokasikan memori untuk menyimpan data. Dalam hal ini kita membutuhkan dynamic memory, dimana pada C++ dapat digunakan operator new dan delete. Operator new dan delete adalah khusus untuk C++.

Operators new and new[ ] Dalam usaha untuk memesan dynamic memory, digunakan operator new. new diikuti dengan suatu data type dan secara optional jumlah elemen yang diperlukan dalam brackets []. Akan mengembalikan suatu pointer pada awal dari blok memori yang berhasil dialokasi. Bentuknya adalah:
pointer = new type // deklarasi 1 elemen

atau
pointer = new type [elements] // deklarasi array

Contoh:
int * bobby; bobby = new int [5];

dalam hal ini, akan dialokasi 5 elemen dengan type int pada suatu heap dan mengembalikan sebuah pointer yang menunjuk pada alamat awal ke variabel bobby.

Sesuatu hal yang perlu diperhatikan bahwa dynamic memori tidak selamanya akan berhasil dialokasi karena kehabisan memori. Jika hal ini terjadi maka permintaan operator new, akan mengembalikan suatu null pointer. Untuk alasan tersebut, maka disarankan untuk selalu memeriksa apakah pointer yang dikembalikan adalah NULL setelah pemanggilan new.

Indoprog

93

C/C++ Programming
int * bobby; bobby = new int [5]; if (bobby == NULL) { // error assigning memory. Take measures. };

Hendra, S.T.

Operator delete. Jika dynamic memory yang dialokasi tidak dibutuhkan lagi, maka dapat dihapus dari memori dengan menggunakan operator delete:
delete pointer;

or
delete [] pointer;

Contoh Program :
//Program mencari rata-rata //Oleh : Hendra Soewarno //Dengan memanfaatkan fasilitas alokasi dinamis new dan delete #include <iostream.h> #include <stdlib.h> int *pdat; int jd; void void void void void tanyajd(); alokasimemory(); bacadata(); hitungrata(); dealokasimemory();

int main() { tanyajd(); alokasimemory(); bacadata(); hitungrata(); dealokasimemory(); return 0; } void tanyajd() { cout << "jumlah data :"; cin >> jd; } void alokasimemory() { pdat = new int[jd]; if (pdat == NULL)

Indoprog

94

C/C++ Programming
{ cout << "gagal alokasi memory"<<endl; exit(0); } } void bacadata() { for (int i=0;i<jd;i++) { cout << "data ke -" << i+1 << " : "; cin >> pdat[i]; } } void hitungrata() { float rata; rata = 0; for (int i=0;i<jd;i++) rata = rata + (float) pdat[i]/jd; cout << "nilai rata-rata :"<<rata<<endl; } void dealokasimemory() { delete pdat; }

Hendra, S.T.

Dynamic memory in ANSI-C


Operator new dan delete hanya terdapat pada C++ dan tidak tersedia pada C language. Pada C language, untuk mengalokasi dynamic memory kita dapat menggunakan library stdlib.h. Kita dapat juga menggunakannya dalam C++. The function malloc Ini adalah fungsi generic untuk alokasi dynamic memory pada pointer. Adapun prototype-nya adalah:
void * malloc (size_t nbytes);

dimana nbytes adalah jumlah byte yang akan diberikan ke pointer. Function ini akan mengembalikan sebuah pointer dengan type void*, oleh karena itu kita perlu melakukan type cast terhadap nilai pointer yang ingin dihasilkan, contoh:
char * ronny; ronny = (char *) malloc (10);

Hal ini akan memberikan pada pointer ronny suatu blok 10 byte yang dapat digunakan.

Indoprog

95

C/C++ Programming

Hendra, S.T.

Jika kita ingin memberikan suatu blok data dengan type data yang bukan char (berukuran lebih dari 1 byte) kita harus mengalikan jumlah elemen yang diinginkan dengan ukuran elemen dari tiap-tiap elemen, dalam hal ini kita dapat menggunakan operator sizeof :
int * bobby; bobby = (int *) malloc (5 * sizeof(int));

Kode ini akan memberikan pada bobby sebuah pointer yang terdiri dari 5 data integer. The function calloc. calloc hampir menyerupai operasi malloc, perbedaan utamanya adalah pada prototype:
void * calloc (size_t nelements, size_t size);

menggunakan dua parameter, yang pertama (nelements) adalah jumlah elemen dan kedua (size) adalah ukuran masing-masing elemen. Alokasi untuk bobby dapat ditulis menjadi:
int * bobby; bobby = (int *) calloc (5, sizeof(int));

Perbedaan lain antara malloc dan calloc adalah calloc menginisialisasi semua elemennya menjadi 0. The function realloc. Mengubah ukuran dari suatu blok memori yang telah diberikan pada suatu pointer.
void * realloc (void * pointer, size_t size);

parameter menerima sebuah pointer yang telah diberikan suatu blok memori atau null pointer, dan size menentukan ukuran baru dari memori blok yang diinginkan. Dalam hal ini isi pointer lama tidak akan berubah. Jika proses alokasi tambahan gagal akan mengembalikan suatu null pointer, sedangkan isi pointer sebelumnya tidak berubah.
pointer

The function free. Membebaskan blok dynamic memory yang sebelumnya telah diberikan dengan malloc, calloc atau realloc.
void free (void * pointer);

Fungsi ini hanya dapat digunakan untuk membebaskan memori yang diberikan dengan fungsi malloc, calloc dan realloc. Contoh program :
//Program mencari rata-rata //Oleh : Hendra Soewarno

Indoprog

96

C/C++ Programming

Hendra, S.T.

//Dengan memanfaatkan fasilitas alokasi dinamis malloc dan free #include <iostream.h> #include <stdlib.h> int *pdat; int jd; void void void void void tanyajd(); alokasimemory(); bacadata(); hitungrata(); dealokasimemory();

int main() { tanyajd(); alokasimemory(); bacadata(); hitungrata(); dealokasimemory(); return 0; } void tanyajd() { cout << "jumlah data :"; cin >> jd; } void alokasimemory() { pdat = (int*) malloc(jd * sizeof(int)); //pdat = (int*) calloc(jd, sizeof(int)); if (pdat == NULL) { cout << "gagal alokasi memory"<<endl; exit(0); } } void bacadata() { for (int i=0;i<jd;i++) { cout << "data ke -" << i+1 << " : "; cin >> pdat[i]; } } void hitungrata() { float rata; rata = 0; for (int i=0;i<jd;i++) rata = rata + (float) pdat[i]/jd; cout << "nilai rata-rata :"<<rata<<endl; }

Indoprog

97

C/C++ Programming

Hendra, S.T.

void dealokasimemory() { free(pdat); } //Program mencari rata-rata //Oleh : Hendra Soewarno //Dengan memanfaatkan fasilitas alokasi dinamis realloc dan free #include <iostream.h> #include <stdlib.h> int *pdat; int jd; void bacadata(); void hitungrata(); void dealokasimemory(); int main() { bacadata(); hitungrata(); dealokasimemory(); return 0; } void bacadata() { int dat; jd = 0; do { cout << "data ke -" << jd+1 << " : "; cin >> dat; if (!dat==0) { if (realloc(pdat,dat*sizeof(int)) == NULL) { cout << "gagal alokasi memory !"<<endl; exit(0); } else { pdat[jd] = dat; jd++; } } } while (!dat==0); } void hitungrata() { float rata; rata = 0; for (int i=0;i<jd;i++) rata = rata + (float) pdat[i]/jd; cout << "nilai rata-rata :"<<rata<<endl; }

Indoprog

98

C/C++ Programming
void dealokasimemory() { free(pdat); }

Hendra, S.T.

Pertanyaan
1. 2. 3. 4. Bagaimana mengalokasikan memory dinamis ? Bagaimana kita mengetahui suatu alokasi memori berhasil atau tidak ? Terangkan perbedaan cara untuk alokasi memori dinamis pada C dan C++! Bagaimana kita mengetahui ukuran dari suatu data type ?

Latihan
1. Buatlah suatu program untuk menyimpan data yang dimasukan oleh pemakai, urut data tersebut dalam urutan descending, kemudian coba cari data yang dimasukan oleh pemakai. Petunjuk : Tanyakan jumlah data terlebih dahulu dengan memanfaatkan alokasi memori dinamis.

Indoprog

99

C/C++ Programming

Hendra, S.T.

Section 13

Structures
Suatu structure adalah suatu himpunan dari berberapa type data yang berbeda dikelompokan menjadi satu deklarasi yang unik. Bentuknya adalah sebagai berikut:
struct model_name { type1 element1; type2 element2; type3 element3; . . } object_name;

dimana model_name adalah nama untuk model structure type dan object_name bersifat optional sebagai variabel dengan structure object tersebut. Diantara curly brackets { } adalah type dan sub-identifiers yang bersesuaian dengan elemen-elemen yang membentuk structure tersebut. Contoh :
struct products { char name [30]; float price; } ; products apple; products orange, melon;

Dimana apple, orange, dan melon adalah variabel yang memiliki structure products. atau dapat juga ditulis :
struct products { char name [30]; float price; } apple, orange, melon;

Dalam hal ini masing-masing variabel (apple, orange and melon) memiliki member name dan price., dimana penulisannya adalah nama variabel dan nama member dipisahkan dengan suatu point (.) :
apple.name apple.price orange.name orange.price melon.name melon.price

Indoprog

100

C/C++ Programming

Hendra, S.T.

Contoh program :
//Program data terstruktur //Oleh : Hendra Soewarno //Dengan memanfaatkan fasilitas struct. #include #include #include #include <iostream.h> <iomanip.h> <string.h> <conio.h>

struct siswa { char nim[10]; char nama[20]; float teori,praktek; } dsiswa[100]; int jd; void tanyajd(); void bacadata(); void cetakdata(); int main() { clrscr(); tanyajd(); bacadata(); cetakdata(); return 0; } void tanyajd() { cout << "jumlah data :"; cin >> jd; } void bacadata() { int i; char nim[10]; cin.ignore(); for (i=0;i<jd;i++) { cout << "Record ke -" << i+1 << endl; cout << "Nim : "; cin.getline(nim,10); if (nim[0] != 0) { strcpy(dsiswa[i].nim,nim); cout << "Nama : "; cin >> dsiswa[i].nama; cout << "Teori : "; cin >> dsiswa[i].teori; cout << "Praktek: "; cin >> dsiswa[i].praktek; cin.ignore(); } } // global variabel

Indoprog

101

C/C++ Programming
}

Hendra, S.T.

void cetakdata() { int i; cout << "--------------------------------"<< endl; cout << " Nim Nama Teori Praktek "<< endl; cout << "--------------------------------"<< endl; for (i=0;i<jd;i++) { cout << setw(5) << dsiswa[i].nim; cout << setw(20) << dsiswa[i].nama; cout << setw(5) << setprecision(2) << dsiswa[i].teori; cout << setw(5) << setprecision(2) << dsiswa[i].praktek<<endl; }

Pointers to structures
Menyerupai type lain, structure dapat ditunjuk dengan menggunakan pointer. Aturannya adalah sama dengan type data lainnya, yaitu Pointer tersebut perlu dideklarasikan sebagai pointer pada structure tersebut:
struct siswa { char nim[10]; char nama[20]; float teori,praktek; } dsiswa[100]; siswa *psiswa;

Dalam hal ini amovie adalah suatu obejk dari structure movies_t dan pmovie adalah sebuah pointer ke objek type movies_t. Maka penulisan berikut adalah sah:
psiswa = &siswa[0];

Ok, perhatikan contoh berikut :


//Program data terstruktur //Oleh : Hendra Soewarno //Dengan memanfaatkan fasilitas struct dan pointer. #include #include #include #include <iostream.h> <iomanip.h> <string.h> <conio.h>

struct siswa { char nim[10]; char nama[20]; float teori,praktek; } dsiswa[100];

Indoprog

102

C/C++ Programming

Hendra, S.T.

siswa *psiswa; int jd;

void tanyajd(); void bacadata(); void cetakdata(); int main() { clrscr(); tanyajd(); bacadata(); cetakdata(); return 0; } void tanyajd() { cout << "jumlah data :"; cin >> jd; } void bacadata() { int i; char nim[10]; cin.ignore(); for (i=0;i<jd;i++) { psiswa = &dsiswa[i]; cout << "Record ke -" << i+1 << endl; cout << "Nim : "; cin.getline(nim,10); if (nim[0] != 0) { strcpy(psiswa->nim,nim); cout << "Nama : "; cin >> psiswa->nama; cout << "Teori : "; cin >> psiswa->teori; cout << "Praktek: "; cin >> psiswa->praktek; cin.ignore(); } } } void cetakdata() { int i; cout << "--------------------------------"<< endl; cout << " Nim Nama Teori Praktek "<< endl; cout << "--------------------------------"<< endl; for (i=0;i<jd;i++) { psiswa = &dsiswa[i]; cout << setw(5) << psiswa->nim; cout << setw(20) << psiswa->nama; cout << setw(5) << setprecision(2) << psiswa->teori; cout << setw(5) << setprecision(2) << psiswa->praktek<<endl;

Indoprog

103

C/C++ Programming
} }

Hendra, S.T.

Pada contoh diatas kita menemukan operator ->. Operator ini digunakan khusus oleh pointer untuk menunjuk ke member dari suatu structure, contoh :
psiswa->nim

atau dapat diterjemahkan menjadi:


(*psiswa).nim

baik psiswa->nim dan (*psiswa).nim adalah sah yang berarti kita ingin mengevaluasi field nim dari structure yang ditunjuk oleh psiswa.

Nesting structures
Structures dapat juga di nested yang berarti bahwa suatu structure dapat memiliki elemen yang berupa structure
struct ujian { float teori,praktek; }; struct siswa { char nim[10]; char nama[20]; ujian nilai; } dsiswa[100]; siswa *psiswa;

Setelah deklarasi diatas, kita dapat menggunakan ekspresi berikut:


dsiswa[0].nim dsiswa[0].nilai.teori psiswa->nilai.praktek

Contoh Program
//Program data terstruktur //Oleh : Hendra Soewarno //Dengan memanfaatkan fasilitas nested struct dan pointer. #include #include #include #include <iostream.h> <iomanip.h> <string.h> <conio.h>

Indoprog

104

C/C++ Programming

Hendra, S.T.

struct ujian { float teori,praktek; }; struct siswa { char nim[10]; char nama[20]; ujian nilai; } dsiswa[100]; int jd; siswa *psiswa; void tanyajd(); void bacadata(); void cetakdata(); int main() { clrscr(); tanyajd(); bacadata(); cetakdata(); return 0; } // program utama

void tanyajd() { cout << "jumlah data :"; cin >> jd; } void bacadata() { int i; char nim[10]; cin.ignore(); for (i=0;i<jd;i++) { psiswa = &dsiswa[i]; cout << "Record ke -" << i+1 << endl; cout << "Nim : "; cin.getline(nim,10); if (nim[0] != 0) { strcpy(psiswa->nim,nim); cout << "Nama : "; cin >> psiswa->nama; cout << "Teori : "; cin >> psiswa->nilai.teori; cout << "Praktek: "; cin >> psiswa->nilai.praktek; cin.ignore(); } } } void cetakdata() {

Indoprog

105

C/C++ Programming

Hendra, S.T.

int i; cout << "--------------------------------"<< endl; cout << " Nim Nama Teori Praktek "<< endl; cout << "--------------------------------"<< endl; for (i=0;i<jd;i++) { psiswa = &siswa[i]; cout << setw(5) << psiswa->nim; cout << setw(20) << psiswa->nama; cout << setw(5) << setprecision(2) <<psiswa->nilai.teori; cout << setw(5) << setprecision(2) <<psiswa->nilai.praktek<<endl; } } //Program data terstruktur //Oleh : Hendra Soewarno //Dengan memanfaatkan fasilitas nested struct dan dynamic memory allocation. #include #include #include #include <iostream.h> <iomanip.h> <string.h> <conio.h>

struct ujian { float teori,praktek; }; struct siswa { char nim[10]; char nama[20]; ujian nilai; } *dsiswa; int jd; siswa *psiswa; void void void void void tanyajd(); alokasimemory(); bacadata(); cetakdata(); dealokasimemory(); // program utama

int main() { clrscr(); tanyajd(); alokasimemory(); bacadata(); cetakdata(); dealokasimemory(); return 0; }

Indoprog

106

C/C++ Programming
void tanyajd() { cout << "jumlah data :"; cin >> jd; } void alokasimemory() { dsiswa = new siswa[jd]; } void bacadata() { int i; char nim[10]; cin.ignore(); for (i=0;i<jd;i++) { psiswa = &dsiswa[i]; cout << "Record ke -" << i+1 << endl; cout << "Nim : "; cin.getline(nim,10); if (nim[0] != 0) { strcpy(psiswa->nim,nim); cout << "Nama : "; cin >> psiswa->nama; cout << "Teori : "; cin >> psiswa->nilai.teori; cout << "Praktek: "; cin >> psiswa->nilai.praktek; cin.ignore(); } } }

Hendra, S.T.

void cetakdata() { int i; cout << "--------------------------------"<< endl; cout << " Nim Nama Teori Praktek "<< endl; cout << "--------------------------------"<< endl; for (i=0;i<jd;i++) { psiswa = &dsiswa[i]; cout << setw(5) << psiswa->nim; cout << setw(20) << psiswa->nama; cout << setw(5) << setprecision(2) << psiswa->nilai.teori; cout << setw(5) << setprecision(2) << psiswa>nilai.praktek<<endl; } } void dealokasimemory() { delete dsiswa; }

Pertanyaan
Indoprog

107

C/C++ Programming

Hendra, S.T.

1. Apa yang dimaksud dengan suatu struct ? 2. Bagaimana mendeklarasikannya ? 3. Tulis suatu deklarasi struct untuk menyimpan alamat teman anda.

Latihan
1. Tuliskan suatu program untuk menyimpan alamat dari teman anda, sediakan fasilitas tambah, perbaiki, hapus, tampil, dan cari (berdasarkan nama). Petunjuk : gunakan pendekatan pemrograman terstruktur.

Indoprog

108

C/C++ Programming

Hendra, S.T.

Section 14

Input/Output with files


C++ mendukung proses input dan output file dengan menggunakan class-class berikut:
ofstream: File class untuk operasi menulis (diturunkan dari ostream) ifstream: File class untuk operasi membaca (diturunkan dari istream) fstream: File class untuk operasi membaca dan menulis (diturunkan dari iostream)

Open a file
Operasi pertama yang dilakukan pada object ini adalah mengasosiasikannya dengan suatu file, yang mana disebutkan sebagai membuka file. File yang terbuka dinyatakan dalam program sebagai suatu objek stream (suatu instant dari salah satu class diatas) dan setiap input atau output pada object stream tersebut akan dilakukan terhadap file fisiknya Untuk membuka suatu file dengan suatu object strean, kita dapat menggunakan fungsi open():
void open (const char * filename, openmode mode);

dimana filename adalah suatu karakter string dari nama file yang akan dibuka dan mode adalah kombinasi dari flag berikut :
ios::in ios::out

Open file for reading Open file for writing

Indoprog

109

C/C++ Programming
ios::ate ios::app ios::trunc ios::binary

Hendra, S.T.

Initial position: end of file Every output is appended at the end of file If the file already existed it is erased Binary mode

Flag-flag ini dapat dikombinasikan dengan menggunakan operator bitwise OR: |. Sebagai contoh, jika kita ingin membuka file "example.bin" dalam mode binary untuk menambah data, kita dapat melakukannya dengan memanggil fungsi open:
ofstream file; file.open ("example.bin", ios::out | ios::app | ios::binary);

Berikut adalah default mode yang akan digunakan pada masing-masing class ofstream, ifstream dan fstream : class default mode to parameter

ofstream ios::out | ios::trunc ifstream ios::in fstream ios::in | ios::out

Default value hanya diaplikasikan jika fungsi dibuka tanpa menyebutkan suatu parameter mode. Kita dapat juga menggunakan konstruktor dari masing-masing class dengan penulisan berikut :
ofstream file ("example.bin", ios::out | ios::app | ios::binary);

Kita dapat memeriksa apakah file telah terbuka dengan benar dengan menggunakan fungsi is_open():
bool is_open();

yang mana akan mengembalikan suatu nilai bool dengan nilai true jika object berasosiasi dengan suatu file yang terbuka dan sebaliknya false.

Closing a file
Ketika kita telah selesai membaca, dan menulis maka file tersebut harus ditutup dengan memanggil fungsi close(), hal ini akan mencurahkan seluruh isi buffer yang tertahan ke file yang ditutup. Bentuknya cukup sederhana:

Indoprog

110

C/C++ Programming
void close ();

Hendra, S.T.

Begitu anggota dari fungsi ini dipanggil, objek stream dapat digunakan untuk membuka file lain, dan file tersebut juga dapat dibuka oleh proses lain. Dalam hal ini, jika objek dihapus dengan masih adanya asosiasi file yang terbuka, maka destructor akan secara otomatis memanggil fungsi close.

Text mode files


Class-class ofstream, ifstream dan fstream adalah inheritance dari ostream, istream dan iostream. Oleh sebab itu objek fstream dapat menggunakan member yang terdapat pada class parentnya. Umumnya, ketika menggunakan text file kita akan menggunakan member seperti pada console ( yaitu cin dan cout). Pada contoh berikut kita akan menggunakan overloaded insertion operator <<:
// writing on a text file #include <fstream.h> int main () { ofstream examplefile ("example.txt"); if (examplefile.is_open()) { examplefile << "This is a line.\n"; examplefile << "This is another line.\n"; examplefile.close(); } return 0; }

file example.txt This is a line. This is another line.

Data input dari file dapat juga dilakukan dengan cara yang sama seperti yang kita lakukan pada cin:
// reading a text file #include <iostream.h> #include <fstream.h> #include <stdlib.h> int main () { char buffer[256]; ifstream examplefile ("example.txt"); if (! examplefile.is_open()) { cout << "Error opening file"; exit (1); } while (! examplefile.eof() ) { examplefile.getline (buffer,100);

This is a line. This is another line.

Indoprog

111

C/C++ Programming
cout << buffer << endl; } return 0; }

Hendra, S.T.

Binary files
Pada binary file proses input/ouput data tidak dapat menggunakan operator seperti << dan >> serta fungsi seperti getline. Untuk binary file class fstream memiliki prototype write dan read berikut :
write ( char * buffer, streamsize size ); read ( char * buffer, streamsize size );

Contoh :
file.write((char*)&x, sizeof(x)); file.read((char*)&x, sizeof(x));

Dimana buffer adalah alamat dari memory block yang menyimpan data hasil pembacaan atau yang akan ditulis.
// reading binary file #include <iostream.h> #include <fstream.h> const char * filename = "example.txt"; int main () { char * buffer; long size; ifstream file (filename, ios::in|ios::binary|ios::ate); size = file.tellg(); file.seekg (0, ios::beg); buffer = new char [size]; file.read (buffer, size); file.close(); cout << "the complete file is in a buffer"; delete[] buffer; return 0; }

the complete file is in a buffer

Verification of state flags


Selain fungsi eof() untuk memeriksa posisi end of file, juga disediakan beberapa member function untuk memeriksa status dari stream (semuanya akan menghasilkan nilai bool): Indoprog

112

C/C++ Programming

Hendra, S.T.

bad()

Mengembalikan true kalau ada kegagalan dalam operasi membaca atau menulis
fail()

Mengembalikan true dalam kasus yang sama pada bad() khususnya dalam kasus dimana terjadi format error, seperti mencoba membaca suatu nilai integer dan yang diterima adalah character.
eof()

Mengembalikan true jika sebuah file yang terbuka untuk dibaca telah mencapai end of file.
good()

Seperti namanya, mengembalikan false atau true berdasarkan hasil operasi terakhir. Untuk melakukan reset terhadap state flags dapat digunakan function clear().

get and put stream pointers


Pada semua objek i/o stream memiliki minimal satu stream pointer:

demikian juga istream, memiliki get pointer yang menunjuk pada lokasi elemen berikutnya yang akan dibaca. ofstream, demikian juga ostream, memiliki put pointer yang menunjuk pada lokasi penulisan elemen berikutnya. Akhirnya fstream, demikian juga iostream, memiliki get and put

ifstream,

Pointer-pointer Stream ini dapat dimanipulasi dengan beberapa member function berikut : dan tellp() Mengembalikan nilai integer yang menunjukan posisi dari get stream pointer dan put stream pointer. seekg() dan seekp() Member function ini untuk mengatur posisi get stream pointer dan put stream pointer dengan prototypes:
tellg() seekg ( pos_type position ); seekp ( pos_type position );

dengan nilai relatif terhadap begin of file. atau


seekg ( off_type offset, seekdir direction ); seekp ( off_type offset, seekdir direction );

dengan nilai relatif terhadap nilai argumen parameter direction berikut :

Indoprog

113

C/C++ Programming
ios::beg ios::cur ios::end

Hendra, S.T.

offset specified from the beginning of the stream offset specified from the current position of the stream pointer offset specified from the end of the stream

Contoh berikut menggunakan member fungsi diatas untuk mendapatkan ukuran dari suatu binary file:
// obtaining file size #include <iostream.h> #include <fstream.h> const char * filename = "example.txt"; int main () { long l,m; ifstream file (filename, ios::in|ios::binary); l = file.tellg(); file.seekg (0, ios::end); m = file.tellg(); file.close(); cout << "size of " << filename; cout << " is " << (m-l) << " bytes.\n"; return 0; }

size of example.txt is 40 bytes.

Buffers and Synchronization


Ketika kita bekerja dengan file streams, kita sebenarnya bekerja pada suatu buffer dari type streambuf. Buffer ini merupakan suatu memory block yang berlaku sebagai intermediasi antara stream dengan file secara fisik. Misalnya ketika function put (menulis sebuah karakter tunggal) dipanggil, karakter tersebut tidak secara langsung ditulis ke file fisik, tetapi disisipkan pada buffer untuk stream tersebut Ketika buffer dicurahkan, semua data yang terkandung didalamnya akan ditulis ke media fisik (jika merupakan out stream) atau dihapus (jika merupakan in stream). Proses ini disebut sebagai synchronization dan terjadi dengan kondisi berikut:

Ketika file di tutup: sebelum suatu file ditutup semua buffer akan di sinkron Ketika buffer telah penuh: Buffer memiliki ukuran tertentu, ketika telah penuh secara otomatis akan di sinkron. Ditegaskan dengan perintah: Ketika perintah perintah seperti flush dan endl yang menyebabkan proses sinkron. Ditegaskan dengan function sync(): Pemanggilan function sync() (tanpa parameter) menyebabkan sinkron dilakukan.

Indoprog

114

C/C++ Programming

Hendra, S.T.

Reading and Writing Complex Data


Walaupun metode read dan write methods mengunakan suatu char* pointer, tetapi tidak selamanya data yang akan dibaca atau ditulis harus berupa char array. Anda dapat membaca dan menulis data struct dengan menggunakan simple type casting of pointers:
#include "fstream.h" struct { char nama[20]; int age; }teman; int main() { ofstream fout; fout.open("teman.rec",ios::out || ios::binary); strcpy(teman.nama,"hendra soewarno"); teman.age = 31; fout.seekp(0); fout.write((char*)&teman, sizeof(teman)); strcpy(teman.nama,"susan dewichan"); teman.age = 30; fout.seekp(sizeof(teman)); fout.write((char*)&teman, sizeof(teman)); fout.close(); return 0; }

#include "iostream.h" #include "fstream.h" struct { char nama[20]; int age; }teman; int main() { ifstream fin; fin.open("teman.rec",ios::in || ios::binary); fin.seekg(0); fin.read((char*)&teman, sizeof(teman)); cout << teman.nama << endl; cout << teman.age << endl; fin.seekg(sizeof(teman)); fin.read((char*)&teman, sizeof(teman)); cout << teman.nama << endl; cout << teman.age << endl; fin.close(); return 0; }

Contoh Program : Indoprog

115

C/C++ Programming

Hendra, S.T.

//Program random access file //Oleh : Hendra Soewarno //Dengan memanfaatkan fasilitas fstream. #include #include #include #include <iostream.h> <iomanip.h> <fstream.h> <string.h>

struct siswa { char nim[10]; char nama[20]; float teori,praktek; } dsiswa; fstream fsource; void void void void bukafile(char namafile[]); bacadata(); cetakdata(); tutupfile();

int main() { bukafile("c:\siswa.dat"); bacadata(); cetakdata(); tutupfile(); return 0; } void bukafile(char namafile[]) { fsource.open(namafile,ios::in | ios::out | ios::binary); } void bacadata() { float recno; char nim[10]; fsource.seekg(0,ios::end); do { recno = fsource.tellg()/sizeof(dsiswa); cout << "Record ke -" << recno+1 << endl; cout << "Nim : "; cin.getline(nim,10); if (nim[0] != 0) { strcpy(dsiswa.nim,nim); cout << "Nama : "; cin >> dsiswa.nama; cout << "Teori : "; cin >> dsiswa.teori; cout << "Praktek: "; cin >> dsiswa.praktek; cin.ignore(); fsource.write((char*) &dsiswa,sizeof(dsiswa)); }

Indoprog

116

C/C++ Programming
} while (nim[0] != 0); }

Hendra, S.T.

void cetakdata() { fsource.seekg(0,ios::beg); cout << "--------------------------------"<< endl; cout << " Nim Nama Teori Praktek "<< endl; cout << "--------------------------------"<< endl; while (!fsource.eof()) { fsource.read((char *) &dsiswa,sizeof(dsiswa)); if (fsource.gcount() == 0) break; cout << setw(10) << dsiswa.nim; cout << setw(20) << dsiswa.nama; cout << setw(5) << setprecision(2) << dsiswa.teori; cout << setw(5) << setprecision(2) << dsiswa.praktek<<endl; } } void tutupfile() { fsource.close(); }

Pertanyaan
1. Apa tujuan pemakaian fungsi open pada suatu stream? 2. Tuliskan suatu deklarasi untuk suatu input stream dan hubungkan dengan suatu file yang disebut 'datain.txt'. Bagaimana anda membaca suatu nilai real dari stream ini ke suatu vairabel float? 3. Tuliskan suatu deklarasi untuk suatu output stream dan hubungkan dengan suatu file yang disebut sebagai result 'results'. Andaikan telah tersedia variabel float x dan y, bagaimana anda mencetak pesan nilai dari x dan y adalah kedalam file tersebut?

Latihan
1. Tuliskan sebuah program untuk menyimpan data teman anda ke dalam suatu binary file, sediakan fasilitas tambah, perbaiki, hapus, tampil, cari (dengan nama), dan fasilitas cetak ke printer. Petunjuk : gunakan suatu pendekatan pemrograman terstruktur.

Indoprog

117

C/C++ Programming

Hendra, S.T.

Section 15

Classes
Class merupakan fasilitas baru yang diperkenalkan sejak C++ untuk mendukung pemrograman berorientasi objek. Sebuah class adalah suatu metode secara logika untuk mengorganisasi data dan fungsi dalam struktur yang sama (encapsulation). Mereka dideklarasikan dengan menggunakan keyword class, yang mana akan berfungsi sama seperti keyword struct, pada C tetapi dengan kemungkinan untuk mengikutkan function sebagai member, daripada hanya data. Bentuknya adalah:
class class_name { permission_label_1: member1; permission_label_2: member2; ... } object_name;

dimana class_name adalah nama dari class (user defined type) dan field optional adalah object_name, atau beberapa, suatu identifier objek yang sah. Badan dari deklarasi dapat mengandung members, dimana dapat berupa deklarasi data atau function, dan secara optional permission labels, dimana dapat berupa salah satu keyword berikut: private:, public: atau protected:. Mereka membuat acuan pada permission yang mana dapat diperoleh pada members

member-member dari suatu class yang hanya dapat diakses oleh anggota dari class yang sama atau dari class-class "friend" mereka. protected member-member yang dapat diakses akses oleh anggota dari class yang sama atau dari class-class friend mereka, dan juga oleh anggota class-class dari class-class derived. Akhirnya, public member-member yang dapat diakses dari semua tempat dimana class tersebut nampak.
private

Jika kita mendeklarasikan member-member dari suatu class tanpa mengawalinya dengan suatu permission label, maka defaultnya member-member tersebut dianggap sebagai private. Pemakaian private maupun protected merupakan suatu konsep data hiding dimana untuk menghindari akses langsung terhadap member dari class yang dapat merusak integritas class. Sebagai contoh:
class CRectangle { int x, y;

Indoprog

118

C/C++ Programming
public: void set_values (int,int); int area (void); } rect;

Hendra, S.T.

Mendeklarasikan class CRectangle dan sebuah objek dengan nama rect. Class ini mengandung empat member: dua variabel type int (x dan y) pada bagian private (karena private adalah default permission) dan dua function pada bagian public: set_values() dan area(), dimana kita hanya mencantumkan prototype-nya. Dan untuk mengakses member-member public dari objek rect dapat digunakan penulisan berikut :
rect.set_value (3,4); myarea = rect.area();

tetapi harus diingat kita tidak dapat mengakses x atau y karena mereka adalah member private, contoh kongkret dari CRectangle:
// classes example #include <iostream.h> class CRectangle { int x, y; public: void set_values (int,int); int area (void) {return (x*y);} }; void CRectangle::set_values (int a, int b) { x = a; y = b; } int main () { CRectangle rect; rect.set_values (3,4); cout << "area: " << rect.area(); } area: 12

Pada contoh diatas kita menemui scope operator baru :: yang digunakan untuk deklarasi suatu member diluar dari class-nya Penulisannya diawali dengan nama class yang memiliki member tersebut diikuti oleh scope operator (::) dan nama member yang bersesuaian. Anda dapat juga dapat melengkapi member didalam class secara langsung, contoh:
// class example #include <iostream.h> rect area: 12 rectb area: 30

Indoprog

119

C/C++ Programming
class CRectangle { int x, y; public: void set_values (int,int); int area (void) {return (x*y);} }; void CRectangle::set_values (int a, int b) { x = a; y = b; } int main () { CRectangle rect, rectb; rect.set_values (3,4); rectb.set_values (5,6); cout << "rect area: " << rect.area() << endl; cout << "rectb area: " << rectb.area() << endl; }

Hendra, S.T.

Pada contoh diatas ukuran rect.area() dan rectb.area() akan menghasilkan ukuran yang berbeda karena mereka adalah dua objek yang berbeda dan memiliki variables x dan y masing-masing.

Catatan : Sesuatu hal yang sering dikacaukan adalah perbedaan antara Class dan Object. Pada dasarnya Object merupakan Instance dari suatu Class. Dan Class merupakan cetak biru dari suatu Object.

Constructors and destructors


Kita dapat menggunakan Constructor untuk menginisialisasi variabel maupun dynamic memory pada saat suatu objek dibuat. Dalam class, suatu function constructor mengunakan nama yang sama dengan nama class-nya. Constructor ini akan secara otomatis dijalankan ketika suatu instance baru (objek) dari class dibuat, contoh :
// classes example #include <iostream.h> class CRectangle { int width, height; public: CRectangle (int,int); int area (void) {return (width*height);} }; CRectangle::CRectangle (int a, int b) { width = a; height = b;

rect area: 12 rectb area: 30

Indoprog

120

C/C++ Programming
} int main () { CRectangle rect (3,4); CRectangle rectb (5,6); cout << "rect area: " << rect.area() << endl; cout << "rectb area: " << rectb.area() << endl; }

Hendra, S.T.

Sehingga pada saat kita melakukan instance terhadap class tersebut menjadi:
CRectangle rect (3,4); CRectangle rectb (5,6);

Sedangkan Destructor akan otomatis dipanggil pada saat suatu objek di release dari memory, atau ketika keberadaanya telah selesai (misalnya jika kita mendefinisikan objek sebagai suatu variabel lokal dalam suatu function dan function tersebut berakhir) atau di release dengan operator delete. Destructor memiliki nama yang sama dengan class dan diawali dengan sebuah tilde (~) dan tidak mengembalikan nilai. Pemakaian destructor cocok kalau pada object ada menggunakan dynamic memory during, sehingga perlu dimusnahkan pada saat objek tersebut di release dari memory.
// example on constructors and destructors #include <iostream.h> class CRectangle { int *width, *height; public: CRectangle (int,int); ~CRectangle (); int area (void) {return (*width * *height);} }; CRectangle::CRectangle (int a, int b) { width = new int; height = new int; *width = a; *height = b; } CRectangle::~CRectangle () { delete width; delete height; } int main () { CRectangle rect (3,4), rectb (5,6); cout << "rect area: " << rect.area() << endl; cout << "rectb area: " << rectb.area() << endl;

rect area: 12 rectb area: 30

Indoprog

121

C/C++ Programming
return 0; }

Hendra, S.T.

Contoh program :
//Program bola pantul //Oleh : Hendra Soewarno //Hanya berjalan di Turbo C++ 3.0 //Dengan pendekatan OOP dan memanfaatkan fasilitas Graphics. #include #include #include #include <graphics.h> <stdlib.h> <conio.h> <dos.h>

class bola { private : int x,y,dx,dy,c; public : bola(int cl); ~bola(); void paint(int cl); void move(); } bola::bola(int cl) { x = random(640); y = random(480); dx = 10; dy = 10; c = cl; paint(c); } bola::~bola() { } void bola::paint(int cl) { setfillstyle(1,cl); bar(x-5,y-5,x+5,y+5); }

// properties

// constructor // destructor // metoda

void bola::move() { paint(0); x = x + dx; y = y + dy; if (x < 10) { x = 10; dx = -dx; }

Indoprog

122

C/C++ Programming
if (x > 630) { x = 630; dx = -dx; } if (y < 10) { y = 10; dy = -dy; } if (y > 470) { y = 470; dy = -dy; } paint(c); } int main() { int gd,gm; detectgraph(&gd,&gm); initgraph(&gd,&gm,"egavga.bgi"); bola *obola[5]; int i; for (i=0;i<5;i++) obola[i] = new bola(i); do { for (i=0;i<5;i++) obola[i]->move(); delay(100); } while (!kbhit()); for (i=0;i<5;i++) delete obola[i]; closegraph(); return 0; } //Program snake //Oleh : Hendra Soewarno //Hanya berjalan di Turbo C++ 3.0 //Dengan pendekatan OOP dan memanfaatkan fasilitas Graphics. #include #include #include #include <graphics.h> <stdlib.h> <conio.h> <dos.h>

Hendra, S.T.

class snack { private : int x,y,life; public : snack(); void paint(); int hmm(int sx,int sy); }; snack::snack() { x = random(30)*20+25; y = random(22)*20+25; life = 1; paint(); } void snack::paint() {

Indoprog

123

C/C++ Programming
setfillstyle(1,7); bar(x-5,y-5,x+5,y+5); } int snack::hmm(int sx,int sy) { if (life) { if (x==sx && y==sy) { life = 0; sound(1000); delay(100); nosound(); return 1; } else return 0; } else return 0; } class snake { private : int x[255],y[255],len; int dx,dy; void paint(int x,int y,int cl); void checklife(); public : int life; snake(); void move(); void eat(snack void up() { void down() { void left() { void right() { };

Hendra, S.T.

*target); if (dy==0) if (dy==0) if (dx==0) if (dx==0)

{dy=-10; {dy= 10; {dx=-10; {dx= 10;

dx=0;}} dx=0;}} dy=0;}} dy=0;}}

snake::snake() { len = 1; life = 1; x[0] = 325; y[0] = 245; for(int i=1;i<255;i++) { x[i]=0;y[i]=0; } dx = 10; dy = 0; paint(x[0],y[0],2); } void snake::paint(int x,int y,int cl) { setfillstyle(1,cl);

Indoprog

124

C/C++ Programming
bar(x-5,y-5,x+5,y+5); } void snake::move() { if (!x[len-1]==0) paint(x[len-1],y[len-1],0); for (int i=len-1;i>0;i--) { x[i]=x[i-1]; y[i]=y[i-1]; } x[0]+=dx; y[0]+=dy; checklife(); paint(x[0],y[0],2); }

Hendra, S.T.

void snake::checklife() { life = life && (x[0]>10) && (x[0]<630) && (y[0]>10) && (y[0]<470); for (int i=1;i<len;i++) life = life && !(x[0]==x[i] && y[0]==y[i]); } void snake::eat(snack *target) { len = len+target->hmm(x[0],y[0]); }

void initcanvas() { setfillstyle(1,7); bar(0,0,getmaxx(),getmaxy()); setfillstyle(1,0); bar(10,10,getmaxx()-9,getmaxy()-9); } int main() { int gd,gm; detectgraph(&gd,&gm); initgraph(&gd,&gm,"egavga.bgi"); initcanvas(); snack *osnack[50]; snake *osnake = new snake; for (int i=0;i<50;i++) osnack[i] = new snack; do { if (!kbhit()) { osnake->move(); for (i=0;i<50;i++) osnake->eat(osnack[i]); delay(100); } else {

Indoprog

125

C/C++ Programming
if (!getch()) switch (getch()) { case 72: osnake->up(); break; case 75: osnake->left(); break; case 77: osnake->right(); break; case 80: osnake->down(); break; } } } while(osnake->life); for (i=0;i<50;i++) delete osnack[i]; closegraph(); return 0; }

Hendra, S.T.

Pertanyaan
1. 2. 3. 4. 5. Apa fungsi dari operator titik (dot)? Apa perbedaan antara public dan private data member? Dapatkah suatu member function (method) dibuat menjadi private? Dapatkah data member (property) dibuat menjadi public? Jika anda mendeklarasikan dua object Cat, dapatkah mereka memiliki nilai yang berbeda pada property itsAge? 6. Apa nama function yang digunakan untuk menginitialisasi suatu class?

Latihan
1. Develop and use the following class
//Program object random file //Oleh : Hendra Soewarno //Hanya berjalan di Turbo C++ 3.0 //Dengan pendekatan OOP dan memanfaatkan fasilitas Graphics. #include "iostream.h" #include "fstream.h" class rs { public : rs(); // constructor rs(char *fname, char *structure, int rsize); //constructor overloading ~rs(); //desctructor void open(char *fname, char *structure, int rsize); int endoffile(); long reccount(); long recno(); void addnew(); void update();

Indoprog

126

C/C++ Programming

Hendra, S.T.

protected : fstream fsource; char *fields; int recsize; long absoluteposition; long filesize(); void refresh(); }; //constructor rs::rs() { } rs::rs(char *fname, char *structure, int rsize) { fsource.open(fname,ios::in | ios::out | ios::binary); fields = structure; recsize = rsize; absoluteposition = 0; refresh(); } //destructor rs::~rs() { fsource.close(); } void rs::open(char *fname, char *structure, int rsize) { rs(fname,structure,rsize); } int rs::endoffile() { return fsource.eof(); } long rs::filesize() { long nfilesize; absoluteposition = fsource.tellg(); fsource.seekg(0,ios::end); nfilesize = fsource.tellg(); fsource.seekg(absoluteposition,ios::beg); return nfilesize; } long rs::recno() { return fsource.tellg()/recsize; } long rs::reccount() {

Indoprog

127

C/C++ Programming
return filesize()/recsize; } void rs::refresh() { if (!endoffile()) { absoluteposition = fsource.tellg(); fsource.read(fields,recsize); fsource.seekg(absoluteposition,ios::beg); } } void rs::addnew() { absoluteposition = filesize(); } void rs::update() { fsource.seekg(absoluteposition,ios::beg); fsource.write(fields,recsize); fsource.seekg(absoluteposition,ios::beg); }

Hendra, S.T.

Sample program using clssiswa :


//Program Entry data siswa //Oleh : Hendra Soewarno //Hanya berjalan di Turbo C++ 3.0 //Dengan pendekatan OOP dan memanfaatkan fasilitas Graphics. #include "objrs.cpp" #include "iostream.h" #include "string.h" struct siswa { char nim[10]; char nama[30]; float nilai; } rsiswa; int main() // program utama { char nim[10]; rs *ors = new rs("c:\csiswa.rec", (char *) &rsiswa, sizeof(rsiswa)); do { cout << "Data ke-" << ors->reccount() + 1<< endl; cout << "Nim :"; cin.getline(nim,10,'\n'); if (nim[0]) { ors->addnew(); strcpy(rsiswa.nim,nim); cout << "Nama :"; cin.ignore(); cin.getline(rsiswa.nama,50,'\n');

Indoprog

128

C/C++ Programming
cout << "Nilai :"; cin >> rsiswa.nilai; cin.ignore(); ors->update(); } } while (nim[0]); delete ors; return 0; }

Hendra, S.T.

Indoprog

129

C/C++ Programming

Hendra, S.T.

Section 16

C++ and Object-Oriented Programming (OOP)


C++ secara penuh mendukung konsep OOP, termasuk empat pilar dari pengembangan OOP yaitu : encapsulation, data hiding, inheritance, and polymorphism. OPP berkaitan erat dengan Abstract Data Type (ADT). Pada konsep pengembangan OOP, awal dari pengembangan program adalah mencoba memodelkan permasalahan yang dikenal sebagai abstraction yang digambarkan sebagai berikut :

Pada model merupakan suatu pandangan abstrak terhadap permasalahan. Dalam hal ini model hanya terfokus pada permasalahan dimana : Data apa saja yang terpengaruh Operasi apa yang perlu dilakukan

Misalnya ketika seorang dosen ingin membuat laporan hasil ujian, maka data yang perlu adalah Nim, Nama, Nilai, dan operasi yang dilakukan adalah mentotalkan, dan menghitung nilai rata-rata. Suatu ADT terdiri dari suatu struktur data abstrak dan operasi-operasi, hanya operasioperasi yang dapat dilihat dari luar sebagai interface (antar muka), sedangkan detail proses disembunyikan dari pemakai.

Indoprog

130

C/C++ Programming

Hendra, S.T.

Encapsulation dan Data Hiding Prinsip menyembunyikan dengan mengunakan struktur data dan hanya menyediakan operasi-operasi untuk interface dengan luar dikenal sebagai encapsulation dan data hiding. Data hiding merupakan karakteristik yang bernilai tinggi dari yang dapat digunakan oleh suatu objek tanpa diketahui oleh user bagaimana kerja internal dari objek tersebut. Anda dapat membayangkan objek itu sebagai suatu mobil, dimana untuk bisa mengendari mobil, anda tidak perlu mengetahui bagaimana kerja internal dari mobil tersebut, yang penting anda dapat menyetir, masuk gigi, menambah kecepatan, dan menghentikan. Class pada C++ mengambarkan suatu ADT, dimana terdiri dari properti dan metoda sebagai interface. Hubungan antara Object dan Class Object merupakan instance dari Class, beberapa object dapat berasal dari Class yang sama, tetapi memiliki properti yang berbeda-beda. Pada pembuatan program OOP, dimulai dengan pembuatan Class, dan pada saat runtime akan dibuat instance dari Class sebagai Objek, jadi program tersebut berjalan sebagai objek-objek dimemori komputer.

Indoprog

131

C/C++ Programming

Hendra, S.T.

Objek-objek dalam program akan berkomunikasi antara satu dengan yang lain menggunakan pengiriman message. Inheritance Salah satu keunggulan dari OOP adalah isu pemanfaatan kembali. Dengan inheritance tugas pemrograman dapat dipemudah. Suatu class yang telah dikembangkan dapat disempurnakan dengan mengembangkan child class (sub class) yang merupakan inheritance dari parent class (super class). Pada inheritance semua properti dan metode dari super class akan tersedia untuk diakses oleh sub class. Inheritance menyerupai pengembangan produk baru pada suatu perusahaan, dimana engineer tidak perlu membuat produk baru dari awal, tetapi dengan mengacu pada produk yang telah ada, dan dilakukan penambahan dan perbaikan. Overriding Dalam melakukan inheritance terhadap suatu parent class, kadang-kadang pada sub class kita perlu mendefinisi ulang metoda. Dari hal inilah istilah overriding muncul, dimana overriding adalah mengubah implementasi suatu metoda pada super class di sub class. Polymorphyms Pada polymorphyms, suatu variabel dengan type super class dapat digunakan untuk mengacu terhadap sub class yang merupakan inheritance dari super class tersebut. Contoh :
//Program inheritance class rs //Oleh : Hendra Soewarno //Hanya berjalan di Turbo C++ 3.0 //Dengan pendekatan OOP dan memanfaatkan fasilitas Graphics. #include "objrs.cpp" class rse : public rs { public : rse(); rse(char *fname, char *structure, int rsize); void open(char *fname, char *structure, int rsize); // overiding void movefirst(); void movelast(); void moveprevious(); void movenext(); }; rse::rse(char *fname, char *structure, int rsize) {

Indoprog

132

C/C++ Programming
open(fname,structure,rsize); } void rse::open(char *fname, char *structure, int rsize) { rs::open(fname,structure,rsize); }

Hendra, S.T.

void rse::movefirst() { fsource.seekg(0,ios::beg); refresh(); } void rse::movelast() { fsource.seekg(-recsize,ios::end); refresh(); } void rse::moveprevious() { if (fsource.tellg()-recsize > 0) fsource.seekg(fsource.tellg()-recsize,ios::beg); else movefirst(); refresh(); } void rse::movenext() { if (fsource.tellg()+recsize < filesize()) fsource.seekg(fsource.tellg()+recsize,ios::beg); else fsource.seekg(0,ios::end); refresh(); }

Contoh pemanfaatan rse :


//Program print data siswa //Oleh : Hendra Soewarno //Hanya berjalan di Turbo C++ 3.0 //Dengan pendekatan OOP dan memanfaatkan fasilitas Graphics. #include "objrse.cpp" #include "iostream.h" #include "string.h" struct siswa { char nim[10]; char nama[30]; float nilai; } rsiswa;

Indoprog

133

C/C++ Programming

Hendra, S.T.

int main() { char nim[10]; rse *ors = new rse("c:\csiswa.rec", (char *) &rsiswa, sizeof(rsiswa)); while (!ors->endoffile()) { cout << "Data ke-" << ors->recno() + 1<< endl; cout << "Nim :" << rsiswa.nim; cout << "Nama :" << rsiswa.nama; cout << "Nilai:" << rsiswa.nilai; ors->movenext(); } delete ors; return 0; }

Pembuatan program permainan Tetris dengan konsep OOP.


//file header Shape.hpp //mendefinisikan bentuk-bentuk pada game tetris //pada bagian ini kita akan membuat suatu superclass Shape //dan mengembangkannya menjadi Shape1,Shape2,Shape3,Shape4 //dengan inheritance //pada shape2 dan shape4 //kita akan melakukan overriding terhadap metoda rotate const block1[5][6] = {{0,0,0,0,0,0}, {0,0,1,0,0,0}, {0,0,1,0,0,0}, {0,0,1,0,0,0}, {0,0,1,0,0,0}}; const block2[5][6] = {{0,0,0,0,0,0}, {0,0,1,1,0,0}, {0,0,1,1,0,0}, {0,0,0,0,0,0}, {0,0,0,0,0,0}}; const block3[5][6] = {{0,0,0,0,0,0}, {0,1,0,0,0,0}, {0,1,1,0,0,0}, {0,0,1,0,0,0}, {0,0,0,0,0,0}}; const block4[5][6] = {{0,0,0,0,0,0}, {0,0,1,0,0,0}, {0,0,1,0,0,0}, {0,0,1,1,0,0}, {0,0,0,0,0,0}}; const rblock4[5][6]= {{0,0,0,0,0,0}, {0,0,1,1,0,0}, {0,0,0,1,0,0}, {0,0,0,1,0,0}, {0,0,0,0,0,0}}; class shape

Indoprog

134

C/C++ Programming
{ protected: int nrotate; void savematrix(); public: int matrix[5][6], lmatrix[5][6], umatrix[5][6],color; shape(); virtual void rotate(); //polymorphys void unrotate(); }; shape::shape() { nrotate=1; color=random(6)+9; } //shape constructor

Hendra, S.T.

void shape::savematrix() { memcpy(umatrix,matrix,sizeof(umatrix)); } void shape::rotate() { int i,j; savematrix(); if (nrotate == 1) memcpy(lmatrix,matrix,sizeof(lmatrix)); for (i=1;i<5;i++) for(j=1;j<5;j++) if (nrotate == 1) matrix[i][j] = lmatrix[j][5-i]; else matrix[i][j] = lmatrix[i][j]; nrotate = -nrotate; } void shape::unrotate() { memcpy(matrix,umatrix,sizeof(matrix)); } //buat shape1 dimana merupakan inherit dari shape class shape1: public shape { public : shape1() {memcpy(matrix,block1,sizeof(matrix));} }; //buat shape2 dimana merupakan inherit dari shape class shape2: public shape { public : shape2() {memcpy(matrix,block2,sizeof(matrix));}

Indoprog

135

C/C++ Programming
void rotate() {savematrix();} }; //overiding

Hendra, S.T.

//buat shape3 dimana merupakan inherit dari shape class shape3: public shape { public : shape3() {memcpy(matrix,block3,sizeof(matrix));} }; //buat shape2 dimana merupakan inherit dari shape class shape4: public shape { public : shape4() {memcpy(matrix,block4,sizeof(matrix));} void rotate(); // overiding }; void shape4::rotate() { int i,j; savematrix(); switch (nrotate) { case 1: memcpy(lmatrix,matrix,sizeof(lmatrix)); for (i=1;i<5;i++) for(j=1;j<5;j++) matrix[i][j] = lmatrix[j][5-i]; break; case 2: memcpy(matrix,rblock4,sizeof(matrix)); break; case 3: memcpy(lmatrix,rblock4,sizeof(lmatrix)); for (i=1;i<5;i++) for(j=1;j<5;j++) matrix[i][j] = lmatrix[j][5-i]; break; default: memcpy(matrix,block4,sizeof(matrix)); nrotate=0; } nrotate++; } //header file score.hpp class scoreboard { private: int score; void paint(); public: scoreboard(); void addscore(int value) { score +=value; paint();} };

Indoprog

136

C/C++ Programming

Hendra, S.T.

scoreboard::scoreboard() { score = 0; paint(); }

//constructor

void scoreboard::paint() { char temp1[20]; char temp2[10]; strcpy(temp1,"score :"); itoa(score,temp2,10); strcat(temp1,temp2); setfillstyle(1,0); bar(1,1,100,50); // clear scoreboard setcolor(15); outtextxy(10,15,temp1); // print new score } //program tetris.cpp //pada bagian ini akan memanfaatkan virtual dan polymorphyms #include #include #include #include #include #include #include <graphics.h> <string.h> <stdlib.h> <conio.h> <dos.h> <shape.hpp> <score.hpp>

// mengkalkulasi titik koordinat game ke layar void maptoscreen(int x, int y, int &x1, int &y1, int &x2, int &y2) { x1 = x*20; y1 = y*20; x2 = (x+1)*20-1; y2 = (y+1)*20-1; } // mengambar 1 sel void drawcell(int x, int y, int c) { int x1,y1,x2,y2; maptoscreen(x,y,x1,y1,x2,y2); setfillstyle(1,c); bar(x1,y1,x2,y2); // membuat efek 3 D setcolor(15); line(x1,y1,x1,y2);line(x1,y1,x2,y1); setcolor(8); line(x2,y1,x2,y2);line(x1,y2,x2,y2); } // menghapus 1 sel void clearcell(int x, int y) { int x1,y1,x2,y2; maptoscreen(x,y,x1,y1,x2,y2); setfillstyle(1,0); bar(x1,y1,x2,y2);

// bingkai kiri atas // bingkai kanan bawah

Indoprog

137

C/C++ Programming
} // class untuk menampilkan bentuk berikutnya class shapeboard { private : shape *cshape; void paint(); public : void setshape(shape *nextshape) {cshape = nextshape; paint();} void getshape(shape *currentshape) {currentshape = cshape;} }; void shapeboard::paint() { int i,j; for(i=0;i<5;i++) for(j=0;j<6;j++) if (cshape->matrix[i][j]) drawcell(j+23,i+1,cshape->color); else clearcell(j+23,i+1); } // class cell, visibel dan warna class cell { public: int visible,color; }; // tempat permainan class gameboard { private: cell matrix[24][16]; void paint(); public: gameboard(); int testshape(int row,int col, shape *shapex); void pasteshape(int row,int col, shape *shapex); void clearshape(int row,int col, shape *shapex); void putshape(int row,int col, shape *shapex); int checkcomplete(); } gameboard::gameboard() { int i,j; for (i=0; i<24; i++) for (j=0; j < 15; j++) matrix[i][j].visible = 1; for (i=0; i<21; i++) for (j=2; j < 12; j++)

Hendra, S.T.

Indoprog

138

C/C++ Programming
matrix[i][j].visible = 0; paint(); } void gameboard::paint() { int i,j; setcolor(15); line(10*20-1,1*20,10*20-1,(1+20)*20); line((10+10)*20+1,1*20,(10+10)*20+1,(1+20)*20); line(10*20-1,(1+20)*20+1,(10+10)*20+1,(1+20)*20+1); for (i=0; i<21; i++) for (j=2; j < 12; j++) if (matrix[i][j].visible==1) drawcell(10+j-2,i,matrix[i][j].color); else clearcell(10+j-2,i); }

Hendra, S.T.

int gameboard::testshape(int row,int col, shape *shapex) { int i,j; for (i=0;i<5;i++) for (j=0;j<6;j++) if(matrix[i+row][j+col].visible + shapex->matrix[i][j] > 1) return 0; return 1; } void gameboard::pasteshape(int row,int col, shape *shapex) { int i,j; for (i=0;i<5;i++) for (j=0;j<6;j++) { if (shapex->matrix[i][j] !=0) drawcell(10+j+col-2,i+row,shapex->color); } } void gameboard::clearshape(int row,int col, shape *shapex) { int i,j; for (i=0;i<5;i++) for (j=0;j<6;j++) { if (shapex->matrix[i][j] !=0) clearcell(10+j+col-2,i+row); } } void gameboard::putshape(int row,int col, shape *shapex) { int i,j; for (i=0;i<5;i++) for (j=0;j<6;j++) if (shapex->matrix[i][j]==1) { matrix[i+row][j+col].visible = 1;

Indoprog

139

C/C++ Programming
matrix[i+row][j+col].color = shapex->color; } } int gameboard::checkcomplete() { int lineok,score; score = 0; for (int i=20; i>0; i--) { lineok = 1; for (int j=2; j < 12 && lineok; j++) lineok = matrix[i][j].visible; if (!lineok==0) { sound(500); delay(100); nosound(); for (int k=i; k>0; k--) for (int l=2;l<12;l++) matrix[k][l] = matrix[k-1][l]; for (int m=1;m<11; m++) matrix[0][m].visible = 0; score+=10; i++; } } paint(); return score; } class gametetris { private: int row,col,finish,next,second; char key; gameboard *gb; scoreboard *sb; shapeboard *sh; shape *s0,*s1; public: gametetris(); ~gametetris(); void play(); } gametetris::gametetris() { gb = new gameboard(); sb = new scoreboard(); sh = new shapeboard(); finish = 0; next = 1; }

Hendra, S.T.

Indoprog

140

C/C++ Programming

Hendra, S.T.

gametetris::~gametetris() { delete(gb); delete(sb); delete(sh); delete(s1); } void gametetris::play() { s0 = new shape1; do { if (next==1) { switch (random(4)+1) { case 1: s1 = new shape1; break; case 2: s1 = new shape2; break; case 3: s1 = new shape3; break; default: s1 = new shape4; break; } sh->setshape(s1); row = 0; col = 4; second=250; next = 0; } if (kbhit()) { key = getch(); if (key==0) key = getch(); switch (key) { case 27:finish=1;break; case 76:s0->rotate(); if (!gb->testshape(row,col,s0)) s0->unrotate(); break; case 75:if (gb->testshape(row,col-1,s0)) col--; break; case 77:if (gb->testshape(row,col+1,s0)) col++; break; case 80:second=0; break; } } else if (gb->testshape(row,col,s0)) { gb->pasteshape(row,col,s0); delay(second); if (gb->testshape(row+1,col,s0)) { gb->clearshape(row,col,s0); row++; } else { gb->putshape(row,col,s0); sb->addscore(gb->checkcomplete()); delete s0; s0 = s1;

// esc // 5

// left

// right

// down

Indoprog

141

C/C++ Programming
next = 1; if (row < 2) finish = 1; } } else finish = 1; } while (!finish==1); } //program utama int main() { int gdriver,gmode; randomize(); detectgraph(&gdriver,&gmode); initgraph(&gdriver,&gmode,""); gametetris *gt = new gametetris; gt->play(); delete(gt); closegraph(); return 0; }

Hendra, S.T.

// create game // play // end game

Indoprog

142

C/C++ Programming

Hendra, S.T.

Section 17

Exception handling
Exception handling merupakan fasilitas baru yang diperkenalkan pada ANSI-C++ standard. Jika anda menggunakan compiler C++ yang tidak mendukung fasilitas ini, maka anda tidak dapat memanfaatkan fasilitas ini. Pengembangan program tidak terlepas dari kesalahan dan kesilapan, untuk menangani masalah tersebut diperlukan suatu Exception handling. Untuk keperluan tersebut C++ menyediakan operator baru untuk membantu kita yaitu: try, throw and catch. Adapun bentuk strukturnya adalah sebagai berikut:
try { // code to be tried throw exception; } catch (type exception) { // code to be executed in case of exception }

dan secara operational: - Kode didalam blok try akan dijalankan secara normal. Dalam hal ini kalau suatu exception (pengecualian) terjadi, kode ini harus menggunakan keyword throw (lempar) suatu parameter ke suatu exception. - Jika suatu exception terjadi, maka instruksi throw didalam blok try akan dijalankan, blok catch dijalankan dengan menerima parameter yang dilewatkan oleh throw. Sebagai contoh:
// exceptions #include <iostream.h> int main () { char myarray[10]; try { for (int n=0; n<=10; n++) { if (n>9) throw "Out of range"; myarray[n]='z'; } } catch (char * str) {

Exception: Out of range

Indoprog

143

C/C++ Programming
cout << "Exception: " << str << endl; } return 0; }

Hendra, S.T.

Pada contoh diatas, didalam n loop, saat nilai n lebih besar dari pada 9 maka suatu exception akan dilempar. Ketika throw dijalankan, blok try akan berakhir dan setiap objek yang dibuat didalam blok try akan dimusnahkan. Setelah itu, kendali di lewatkan ke blok catch yang bersesuian. Akhirnya program akan dilanjutkan ke program setelah blok catch. Blok catch dapat dioverloaded menurut type dari parameternya, contoh :
// exceptions: multiple catch blocks #include <iostream.h> int main () { try { char * mystring; mystring = new char [10]; if (mystring == NULL) throw "Allocation failure"; for (int n=0; n<=100; n++) { if (n>9) throw n; mystring[n]='z'; } } catch (int i) { cout << "Exception: "; cout << "index " << i << " is out of range" << endl; } catch (char * str) { cout << "Exception: " << str << endl; } return 0; }

Exception: index 10 is out of range

Kita dapat juga dapat mendefinisikan suatu blok catch yang akan menangkap semua exception tanpa tergantung pada type yang digunakan untuk memperhatikan type yang digunakan pada saat memanggil throw. Dalam hal ini kita cukup menulis tiga buah titik ( ...) sebagai penganti dari nama type, contoh :
try { // code here } catch (...) { cout << "Exception occurred"; }

Indoprog

144

C/C++ Programming

Hendra, S.T.

Kita dapat juga membuat nested try-catch seperti blok berikut :


try { try { // code here } catch (int n) { throw; } } catch (...) { cout << "Exception occurred"; }

Exceptions not caught


Jika suatu execption tidak tertangkap oleh semua catch statement karena tidak ada type yang sesuai, maka suatu function special terminate akan di panggil. Function ini umumnya telah terdefinisi sehingga akan menghentikan proses saat ini seketika dan menampilkan "Abnormal termination" sebagai pesan kesalahan. Formatnya adalah sebagai berikut:
void terminate();

Standard exceptions
Beberapa function dalam bahasa C++ standard library mengirim exception-exception yang dapat ditangkap kalau kita mengikutkannya dalam blok try. Exception ini akan dikirim dengan suatu class yang diturunkan dari std::exception sebagai type. Class ini (std::exception) didefinisikan dalam C++ standard header file <exception> dan melayani sebagai suatu pola untuk hirarki standard dari exception-exception berikut:
exception bad_alloc bad_cast bad_exception bad_typeid logic_error domain_error invalid_argum ent length_error out_of_range runtime_error overflow_erro r range_error (thrown by new) (thrown by dynamic_cast when fails with a referenced type) (thrown when an exception doesn't match any catch) (thrown by typeid)

Indoprog

145

C/C++ Programming
underflow_err or ios_base::failu (thrown by ios::clear) re

Hendra, S.T.

Karena class ini adalah hirarki, jika anda mengikutkan suatu blok catch untuk menangkap salah satu dari exception tersebut gunakan argumen dengan reference (tambahkan suatu ampersand & setelah type) anda juga dapat menangkap semua turunannya (aturan dari inheritanceance di C++). Contoh berikut akan menangkap (catch) suatu bad_typeid exception (diturunkan dari exception):
// standard exceptions #include <iostream.h> #include <exception> #include <typeinfo> class A {virtual f() {}; }; int main () { try { A * a = NULL; typeid (*a); } catch (std::exception& e) { cout << "Exception: " << e.what(); } return 0; }

Exception: Attempted typeid of NULL pointer

Indoprog

146

C/C++ Programming

Hendra, S.T.

Section 18

User defined data types


Kita telah melihat suatu data type yang didefinisikan oleh pemakai (programmer): yaitu type data structures. Pada dasarnya masih ada beberapa jenis user defined data types:

Definition of own types (typedef).


C++ memperbolehkan kita untuk mendefinisikan kita sendiri berdasarkan type data yang telah ada. Untuk melakukan hal ini kita akan menggunakan keyword typedef, yang mana memiliki bentuk:
typedef existing_type new_type_name ;

Contoh pemakaian:
typedef typedef typedef typedef char C; unsigned int WORD; char * string_t; char field [50];

Sekarang kita telah mendefinisikan empat type data baru yaitu: C, WORD, string_t sehingga dapat digunakan untuk deklarasi variable:
C achar, anotherchar, *ptchar1; WORD myword; string_t ptchar2; field name;

dapat berguna untuk type-type yang sering digunakan, khususnya yang memiliki nama yang panjang.
typedef

Unions
Union memperbolehkan suatu bagian dari memory diakses sebagai type data yang berbeda, dimana masing-masing dari mereka memiliki lokasi yang sama di memori. Deklarasi dan pemakaiannya sama dengan suatu structure, tetapi fungsinya berbeda sama sekali :
union model_name { type1 element1; type2 element2; type3 element3; . . } object_name;

Indoprog

147

C/C++ Programming

Hendra, S.T.

Semua elemen dari deklarasi union menggunakan tempat memory yang sama. Ukurannya sama dengan elemen yang terbesar. Contoh :
union mytypes_t { char c; int i; float f; } mytypes;

mendefinisikan tiga elemen:


mytypes.c mytypes.i mytypes.f

masing-masing memiliki type data yang berbeda, tetapi sama-sama menggunakan lokasi memori yang sama, modifikasi terhadap suatu elemen akan mempengaruhi nilai dari elemen lain. Salah satu kegunaan union adalah untuk menyatukan suatu type yang lebih panjang dari elemen-elemen type lainnya. Contoh :
union mix_t{ long l; struct { short hi; short lo; } s; char c[4]; } mix;

mendefinisikan tiga nama yang memungkinkan kita mengakses group yang sama dari 4 byte: mix.l, mix.s dan mix.c, dimana gambaran masing-masing field dimemori adalah sebagai berikut

Anonymous unions
Pada C++ kita memiliki option bahwa union dapat berupa anonymous. Jika kita mengikutkan suatu union dalam structure tanpa nama object (biasaya ditempatkan setelah tanda curly brackets { }) union akan menjadi anonymous dan kita akan dapat mengakses

Indoprog

148

C/C++ Programming

Hendra, S.T.

elemen secara langsung dengan berdasarkan namanya. Sebagai contoh, perhatikan perbedaan antara dua deklarasi berikut: union
struct { char title[50]; char author[50]; union { float dollars; int yens; } price; } book;

anonymous union
struct { char title[50]; char author[50]; union { float dollars; int yens; }; } book;

Perbedaan satu-satunya antara kedua potongan kode diatas adalah yang pertama kita memberi satu nama pada union (price) dan pada yang kedua kita tidak Perbedaannya adalah ketika kita mengakses anggota dari dollars dan yens dari objek book. Pada kasus pertama adalah:
book.price.dollars book.price.yens

dan pada kasus kedua adalah:


book.dollars book.yens

Satu hal lagi yang perlu anda ingat adalah, field dollars dan yens menggunakan tempat yang sama dimemory sehingga tidak dapat digunakan untuk menyimpan dua nilai yang berbeda.

Enumerations (enum)
Enumerations digunakan untuk membuat data types untuk mengandung sesuatu yang berbeda baik numeric, character ataupun konstanta true dan false. Memiliki bentuk sebagai berikut:
enum model_name { value1, value2, value3, . . } object_name;

Sebagai contoh, kita dapat membuat suatu type baru yang bernama color untuk menyimpan warna-warna dengan deklarasi berikut:
enum colors_t {black, blue, green, cyan, red, purple, yellow, white};

Indoprog

149

C/C++ Programming

Hendra, S.T.

Selanjutnya kita dapat menggunakannya untuk deklarasi variable seperti biasanya:


colors_t mycolor; mycolor = blue; if (mycolor == green) mycolor = red;

Pada kenyataannya enumerated data type dikompilasi sebagai suatu integer dan nilai yang mungkin. Jika tidak ditentukan, nilai integer yang ekuivalen pertama yang mungkin adalah 0 and berikutnya adalah a +1. Kita dapat juga melengkapi suatu nilai integer untuk enumerated type (misalnya untuk elemen yang pertama), contoh ::
enum months_t { january=1, february, march, april, may, june, july, august,

september, october, november, december} y2k;

Indoprog

150

C/C++ Programming

Hendra, S.T.

Appendix A

Preprocessor directives
Preprocessor directives are orders that we include within the code of our programs that are not instructions for the program itself but for the preprocessor. The preprocessor is executed automatically by the compiler when we compile a program in C++ and is in charge of making the first verifications and digestions of the program's code. All these directives must be specified in a single line of code and they do not have to include an ending semicolon ;.

#define
At the beginning of this tutorial we have already spoken about a preprocessor directive: #define, that serves to generate what we called defined constantants or macros and whose form is the following:
#define name value

Its function is to define a macro called name that whenever it is found in some point of the code is replaced by value. For example:
#define MAX_WIDTH 100 char str1[MAX_WIDTH]; char str2[MAX_WIDTH];

It defines two strings to store up to 100 characters.


#define

can also be used to generate macro functions:

#define getmax(a,b) a>b?a:b int x=5, y; y = getmax(x,2);

after the execution of this code y would contain 5.

#undef
#undef

fulfills the inverse functionality of #define. It eliminates from the list of defined constants the one that has the name passed as a parameter to #undef:
#define MAX_WIDTH 100 char str1[MAX_WIDTH]; #undef MAX_WIDTH #define MAX_WIDTH 200 char str2[MAX_WIDTH];

Indoprog

151

C/C++ Programming

Hendra, S.T.

#ifdef, #ifndef, #if, #endif, #else and #elif


These directives allow to discard part of the code of a program if a certain condition is not fulfilled.
#ifdef allows that a section of a program is compiled only if the defined constant that is specified as the parameter has been defined, independently of its value. Its operation is: #ifdef name // code here #endif

For example:
#ifdef MAX_WIDTH char str[MAX_WIDTH]; #endif

In this case, the line char str[MAX_WIDTH]; is only considered by the compiler if the defined constant MAX_WIDTH has been previously defined, independently of its value. If it has not been defined, that line will not be included in the program. serves for the opposite: the code between the #ifndef directive and the #endif directive is only compiled if the constant name that is specified has not been defined previously. For example:
#ifndef #ifndef MAX_WIDTH #define MAX_WIDTH 100 #endif char str[MAX_WIDTH];

In this case, if when arriving at this piece of code the defined constant MAX_WIDTH has not yet been defined it would be defined with a value of 100. If it already existed it would maintain the value that it had (because the #define statement won't be executed). The #if, #else and #elif (elif = else if) directives serve so that the portion of code that follows is compiled only if the specified condition is met. The condition can only serve to evaluate constant expressions. For example:
#if MAX_WIDTH>200 #undef MAX_WIDTH #define MAX_WIDTH 200 #elsif MAX_WIDTH<50 #undef MAX_WIDTH #define MAX_WIDTH 50 #else #undef MAX_WIDTH

Indoprog

152

C/C++ Programming
#define MAX_WIDTH 100 #endif char str[MAX_WIDTH];

Hendra, S.T.

Notice how the structure of chained directives #if, #elsif and #else finishes with #endif.

#line
When we compile a program and errors happen during the compiling process, the compiler shows the error that happened preceded by the name of the file and the line within the file where it has taken place. The #line directive allows us to control both things, the line numbers within the code files as well as the file name that we want to appear when an error takes place. Its form is the following one:
#line number "filename"

Where number is the new line number that will be assigned to the next code line. The line number of successive lines will be increased one by one from this. is an optional parameter that serves to replace the file name that will be shown in case of error from this directive until another one changes it again or the end of the file is reached. For example:
filename #line 1 "assigning variable" int a?;

This code will generate an error that will be shown as error in file "assigning variable", line 1.

#error
This directive aborts the compilation process when it is found returning the error that is specified as the parameter:
#ifndef __cplusplus #error A C++ compiler is required #endif

This example aborts the compilation process if the defined constant __cplusplus is not defined.

#include
Indoprog

153

C/C++ Programming

Hendra, S.T.

This directive has also been used assiduously in other sections of this tutorial. When the preprocessor finds an #include directive it replaces it by the whole content of the specified file. There are two ways to specify a file to be included:
#include "file" #include <file>

The only difference between both expressions is the directories in which the compiler is going to look for the file. In the first case where the file is specified between quotes, the file is looked for in the same directory that includes the file containing the directive. In case that it is not there, the compiler looks for the file in the default directories where it is configured to look for the standard header files. If the file name is enclosed between angle-brackets <> the file is looked for directly where the compiler is configured to look for the standard header files.

#pragma
This directive is used to specify diverse options to the compiler. These options are specific for the platform and the compiler you use. Consult the manual or the reference of your compiler for more information on the possible parameters that you can define with #pragma.

Indoprog

154

C/C++ Programming

Hendra, S.T.

Appendix B

Programming Patterns
A lot of programming is based on using existing patterns. This section presents a number of simple, but commonly used, programming patterns. If you are working on a problem that fits one of these, pull it out and use it, adapting it as needed. This is usually much faster than trying to invent something new.

Skip Guard Plan


Often one needs to skip over a section of code when certain conditions arise. For example, you may need to skip over a computation when it would result in an attempt to divide by zero:
if (Count > 0) { Average = Total / Count; cout << "Average: " << Average << endl; } else cout << "No data. The average cannot be computed." << endl;

In general, the pattern is given by the following outline, which is written in a mixture of English and C++.
if (All is OK) Action to sometimes skip; else Output a warning message;

Count-Controlled Loop Plan


This is used to read in and process a sequence of data items when you know in advance the number of items to be read. The outline looks like the following. Of course, in a real program one would add messages to the user, code for the Process function, etc.
int k; Get the Count of how many data items should be processed; for (k = 0; k < Count; k++) { Read one data item into Item; Process(Item); }

Input Checking Plan


Indoprog

155

C/C++ Programming

Hendra, S.T.

This plan forces the user to enter an acceptable data item. For instance, the acceptable items might be Y, y, N, and n. The Unacceptable function shown below might, of course, be replaced by a simple condition. There is no need to write a function here unless the algorithm for determining unacceptable items is fairly complex.
cout << "Enter an item: "; cin >> Item; while (Unacceptable(Item)) { cout << "Re-enter: "; cin >> Item; }

Sentinel-Controlled Loop Plan


Here the idea is to enter a special item (the sentinel) to indicate the end of the sequence of data items to be processed. The sentinel itself is not one of the data items. One might, for example, have data consisting of a string of positive integers and use 0 to signal the end of the data. Or, one might tell the user to press CTRL z to indicate the end of the data. This uses EOF (end of file) as a sentinel. The outline is as follows:
cin >> Item; while (Item != Sentinel) { Process(Item); cin >> Item; }

As an example, let's write out more detail of how to use EOF as a sentinel. Suppose we want to enter and process a sequence of integers, with CTRL z used to indicate the end of data entry. Then we would use something like this:
int Item; cin >> Item; while (! cin.fail()) { Process(Item); cin >> Item; }

The fail function returns true whenever the previous stream operation failed to input an integer. The usual reasons for such failure are that the user pressed CTRL z or that the user entered something (such as abcd) that could not be interpreted as an integer. Although the code shown above reads data from the keyboard, it could easily be adapted to read the data from a file. The most general form of this pattern is as follows. Again, we use part English and part C++.

Indoprog

156

C/C++ Programming
Get a data item. while (we haven't reached the sentinel) { Process the data item; Get another data item; }

Hendra, S.T.

Do a Problem Until the User Wants to Quit


Often you want to allow the user to do some task repeatedly. A simple way to allow this is to ask the user whether or not to do another of whatever the task at hand might be.
char Reply; do { OneProblem(); cout << "Do another (y/n)? "; cin >> Reply; } while (Reply == 'y');

Menu-Driven Plan
This is similar to the previous plan, but adds a menu that is printed to show the user possible commands, here assumed to be the letters a, b, c, and q. The letter q is used as the signal that the user wants to quit. Of course, you can use integers or whatever is convenient. After getting the user's choice the plan picks out the proper task to execute. Then, as long as the choice is not to quit, loop around and present the menu again, etc.
do { PrintMenu(); cin >> Choice; if (Choice == 'a') DoA(); else if (Choice == 'b') DoB(); else if (Choice == 'c') DoC(); else if (Choice != 'q') cout << "Invalid choice" << endl; } while (Choice != 'q');

Adding a Counter to a Sentinel-Controlled While Loop


We have already seen how to create a sentinel-controlled while loop. This type of loop is used to read in data until the sentinel is reached. Often we want to count the number of data items read in (not including the sentinel itself). All you need is an integer Count

Indoprog

157

C/C++ Programming

Hendra, S.T.

variable that is initialized to zero and incremented each time a new data item is read. Here is how this is done:
int Count; Count = 0; cin >> Item; while (Item != Sentinel) { Count++; Process(Item); cin >> Item; }

Adding a Running Total to a Sentinel-Controlled While Loop


We can also add a running total to a sentinel-controlled while loop. The following example finds the total of all of the data items entered. Of course, the data items must be of a type that can be added, perhaps integers of floats, and the variable Total must have the same type. This example assumes that finding the total is the only processing that is needed on the data items.
Total = 0; cin >> Item; while (Item != Sentinel) { Total = Total + Item; cin >> Item; }

Finding an Average in a Sentinel-Controlled While Loop


Since we know how to total and count the data items read in by a sentinel-controlled while loop, we can easily find the average of these data items.
int Count; Count = 0; Total = 0; cin >> Item; while (Item != Sentinel) { Count++; Total = Total + Item; cin >> Item; } if (Count > 0) { Average = Total / Count;

Indoprog

158

C/C++ Programming

Hendra, S.T.

cout << "Average: " << Average << endl; } else cout << "No data. The average cannot be computed." << endl;

Indoprog

159

C/C++ Programming

Hendra, S.T.

Appendix C

C++ Formatting and Documentation


CIS Departmental Guidelines
Formatting
Although a program should first of all meet its specifications, there are important considerations other than correctness. Programs are written not just to be run, but also for others to read. Pity the poor maintenance program who is going to have to read and decipher your work several years from now! Make this person's job easier through good use of indentation, spacing, descriptive identifiers, and general neatness. It is typical, for example, to vertically align opening and closing braces, although there are a few authors who do not do this. One also should put blank lines between major sections of the program, such as between functions. It also helps a lot to put spaces after most types of punctutation, such as commas, and on both sides of binary operators, such as +. Indenting properly can do much to improve the ease of reading a program. It is typical to indent the "loop body" of a loop by about 3 spaces. Similarly, one should indent the body of a function about 3 spaces as well as the choices inside of an if/else. Look at the short example below as a guide.

Documentation
If you provide good documentation, that maintenance programmer is going to bless you, not curse you! There is both internal and external documentation. The internal documentation is contained within the program file(s) and includes a description at the top giving the inputs, overall processing, and outputs of the program. This section of documentation is essentially a brief user manual. A stranger who reads this section should know what your program does as well as how to set it up and run it. The documentation at the top of a program file should list the date, the name of the author, the names of any other people who contributed to it, and any references used in any significant way (books, web sites, etc.). This allows both you and others to know at a glance what sources were used in producing this program. Internal documentation also includes a comment section for each function, listing what is being passed into it via the parameters, what the function's main task is, and what values are being passed back out via the parameters or function name. (For object-oriented programming, the implicit object is also used to send values in and out.) The Given/Task/Return style of function comments is suggested. In this, the "Given" section lists each parameter that is used to send a value into the function. Beside the name of the parameter, a description of its meaning is listed. The "Task" section describes the overall

Indoprog

160

C/C++ Programming

Hendra, S.T.

task of this function. It tells the reader what this function does if the function is called. Always describe the task in terms of the parameters. Try NOT to use items outside of the function in this description. The "Return" section lists each parameter (and its meaning) that is used to send a value back out of the function. It also lists any value returned in the function name and its meaning. Internal documentation also includes a description of each user-defined class. External documentation is separate from the program and may consist of items like the specifications, various diagrams, a record of testing, etc.

Example
/* Filename: Author: area3.cpp Br. David Carlson None

Other Contributors: References: Date:

C++ from the Ground Up, 2nd ed., by Herbert Schildt

January 4, 2000 June 26, 2000

Revised:

This program asks the user to enter the length and width of a rectangle. It then computes and prints the area of the rectangle. A warning is printed if the user enters a width larger than the length, but the program still prints the area in such a case. */ #include <iostream> using namespace std;

// Function prototypes: void Explanation(void); void GetValues(float & Length, float & Width); float ComputeArea(float Length, float Width); void PrintArea(float Area);

int main(void) { float Length, Width, Area; Explanation(); GetValues(Length, Width); if (Width > Length)

Indoprog

161

C/C++ Programming

Hendra, S.T.

{ cout << "Warning: the width you entered is larger than the length."; cout << endl << "The area will still be found." << endl; } Area = ComputeArea(Length, Width); PrintArea(Area); return 0; }

/* Given: Task: insisting the

Nothing. To ask the user for the length and width of a rectangle, on positive values for both, and to return these values via

two parameters. Return: Length The length entered by the user. Width The width entered by the user. */ void GetValues(float & Length, float & Width) { cout << "Enter the rectangle's length: "; cin >> Length; while (Length <= 0) { cout << "Error: Length must be positive. cin << Length; } cout << "Enter the rectangle's width: "; cin >> Width; while (Width <= 0) { cout << "Error: Width must be positive. cin >> Width; } }

Re-enter: ";

Re-enter: ";

/* Given:

Length The length of the rectangle. Width The width of the rectangle. Task: To compute the area of this rectangle. Return: The area in the function name.

*/ float ComputeArea(float Length, float Width) { return Length * Width; }

/* Given: Task:

Nothing. To print an explanation of what the program does.

Indoprog

162

C/C++ Programming

Hendra, S.T.

Return: Nothing. */ void Explanation(void) { cout << "This program computes the area of a rectangle." << endl; cout << "You will be prompted to enter both the length and width."; cout << endl << "Enter a real number for each." << endl; cout << "The program will then compute and print the area."; cout << endl << endl; }

/* Given: Area The area of a rectangle. Task: To print Area. Return: Nothing. */ void PrintArea(float Area) { cout << "The area is: " << Area << endl << endl; }

Other Concerns
Efficiency is also of some importance. Don't needlessly waste computer time or memory space. In particular, don't waste a lot of it. If there is a tradeoff between efficiency and a clear design, having a clear design is probably better (unless you would waste a lot of time or space to get it). Of course, it also does not make sense to waste a lot of your own time (or your employer's) to make minor speed improvements to a program that will be rarely used and runs fast enough as is. Here are some "thou shalt not" rules of thumb: Don't use an obscure method when clear methods are available. Do not have a variable do double duty, as in using a variable called Total to hold both the total of some data items, and later the average of these data items. (The name Total indicates that it should hold a sum, not an average. Don't confuse the readers of your program!) Do not have a section of program do double duty in a non-obvious way. The intention of each section of code should be reasonably clear.

Indoprog

163

C/C++ Programming

Hendra, S.T.

Appendix D

Tips & Tricks Clearing the Screen


To clear the entire output window of a program, you must use a system function found in the stdlib.h include file. First, include stdlib.h at the top of your program. Then, just insert the following call whenever you want to clear the screen:
system("CLS");

The program below is an example of how to use this method of clearing the screen.
#include <iostream.h> #include <stdlib.h> int main() { cout << "Text before the clear screen." << endl; system("CLS"); cout << "Text following the clear screen." << endl; return 0; }

Sending Output to the Printer


How you print is now a function of your operating system. To print using Windows 95/98 or NT, you have to get your output to a print manager in the operating system. To direct output to a printer, you must first open a file stream to send output to. You can do this using the same method that you use to send output to a file. First, declare a variable of type fstream. Then open the stream using the member function, open. Instead of opening the stream using the name of a file, use the name of your printer port, for example, "LPT1." Once a file stream is open, you can print using the name of the stream variable followed by the << operator and the data you want to send to the printer. Be sure to close the stream when you no longer need to use it. The example program below will send text to a printer on port LPT1.
#include <fstream.h>

Indoprog

164

C/C++ Programming
int main() { ofstream print; // stream variable declaration print.open("LPT1"); // open stream // Print Text (the character \f will produce a form feed) print << "This text will print on the printer.\f"; print.close(); // close stream return 0; }

Hendra, S.T.

Important Note:
Blindly directing text to a printer port assumes some things are true. 1. It assumes that you have a printer attached to the specified port or that the port is being captured and redirected to a printer. 2. It assumes that the printer is capable of accepting plain text. For example, a PostScript printer will not print unless the data comes through a PostScript printer driver. The code above does not make use of any drivers.

Indoprog

165

C/C++ Programming
Object Oriented Programming: An Introduction
Magazine Archives - Technologies Object Oriented Programming: An Introduction By Shailesh Khanal Jan/Feb, 1994-CORE

Hendra, S.T.

Object oriented programming is not just another buzz word of software developers. Object-oriented programming is a relatively new method for designing and implementing software systems. We see them in literature, we hear about them and many of us actually use them without knowing what object oriented software really is. Nowadays softwares based on this concept is pretty ubiquitous, Microsoft's Windows is one of them. Its major goals are to improve programmer productivity by increasing software extensibility and reusability and to control the complexity and cost of software maintenance. It rewards the development of generic functions which can be used with different data types e.g. integer, real etc.. The conventional method of programming using languages as Pascal, basic, C etc. is called imperative or declarative programming. A fundamental flaw of imperative programming is that global variables can potentially be accessed (and updated) by every part of the program. Large programs that lack any discipline tend to be unmanageable. The reason for this is that no module (a group of program codes) that accesses a global variable can be developed and understood independent of other modules that also access that global variable. Object-oriented programming enables us to create software that can be readily comprehended and shared with others. Unlike more traditional programming methods that are based on concepts such as data flow or mathematical logic, object-oriented programming directly models the application. There are as many different views of what object-oriented programming is as there are computer scientists and programmers. But basically a language must have following four elements to support object-oriented programming : encapsulation message passing inheritance and late biding. What is an object An object is a logical entity that contains both data and code that manipulates that data within an object, some of the code and/or data may be private to the object and inaccessible to anything outside the object. Thus an object is a variable equipped with operations that have the exclusive rights to access it. Programs perform computations by passing messages between active objects, which are computer analogy of entities in the real world. For example an object oriented financial application might see Customer objects sending debit and credit messages to Accounts objects. Objects can be reused in similar applications in the same area. Reusing, rather than reinventing software speeds the development and maintenance of large applications. What is a class Object and class are fundamental concepts of object oriented programming. An object class is a set of objects that share the same operations. In most object-oriented languages, a class definition describes the behavior of the underlying abstract data type by defining the interface to all the operations that can be performed on the underlying type. Each class definition also specifies the implementation details or data structure of the type. The data structure which are accessible only within the scope of the class is called a private type. And the one which are accessible outside the class are called public. The operations that are defined on the type are also generally classified as either public or private. The public operations are those that are accessible outside the scope of the class. The private operations are accessible only within the scope of the class. Methods and message Passing In object-oriented programming, the operations that are defined for a class

Indoprog

166

C/C++ Programming

Hendra, S.T.

are called methods. These methods are analogous to procedures and functions in non-object oriented languages. Actions may be performed on an object by invoking one or more of the methods defined in the class definition. The process of invoking a method is called sending a message to the object. Such a message typically contains parameters just as in a procedure or functions call invocation in a non-object-oriented languages. The invocation of a method (sending a message to an object) typically modifies the data stored in the particular object. Encapsulation Encapsulation is the technical name for information hiding. An object in object oriented programming allows some part of its code and/data to be inaccessible outside the object. In this way, an object provides a significant of protection against some other, unrelated part of the program accidentally modifying or incorrectly using the private parts of the object. This linkage of code and data is often referred to as encapsulation. Instead of organizing programs into procedures that share global data, the data is packaged with the procedures that access data. This concept is often called data abstraction or modular programming. The goal here is to separate the user of the object from its implementer. The user is no longer aware of how the object is implemented. Users can only operate on an object using those messages that the implementer provides. This has the obvious benefit that you can change the implementation of the encapsulated object without affection the applications using it. Inheritance Inheritance is the major feature distinguishing an OOPS from other programming systems.Every OOPS provides simple inheritance in one form or another. Inheritance increases code sharing by allowing the language rather than the programmer to reuse code form one class in another related class. Inheritance enables programmers to create classes and, therefore, objects that are specializations of other objects. For example, we might create an object, vehicle, that is a specialization of a car, which is a specialization of sports car. A sports car inherits behavior that is appropriate for car, and vehicle. Creating a specialization of an existing class is called subclass.The new class is a subclass of the existing class, and the existing class is the superclass of the new class. The subclass inherits instance variables,class variables and methods from its superclass. The subclass may add instance variables, class variables and methods that are appropriate to more specialized objects. Late binding and Polymorphism It is quite common in object-oriented systems to code multiple classes of an object that respond to the same messages. The ability of different objects to respond differently to the same message is known as polymorphism. This approach is clearly superior to using a huge case statement for all the known graphical data types in a single global draw procedure. Polymorphism is partly responsible for a well-known characteristic of object-oriented systems, a style of programming sometimes referred to as differential programming or programming by modifications. At the design level, when a software engineer is deciding what type of action is appropriate for a given object, he or she should not be concerned about how the object interprets the action (message) and implements the methods but only what the effect of the action is on the object. Object-oriented languages like C++ and Smalltalk allow a programmer to send identical messages to dissimilar but related objects and achieve identical actions while letting the software system decide how to achieve the required action for the given object. A key issue associated with polymorphism is the timing of the software system's implementations decision. If the system decides how to implement an action at compile time, this is called early binding. If the decision is made dynamically at run-time,it is called late biding. Generally late biding offers the advantages of flexibility and a high level of problem abstraction. C++ and Object-Oriented Programming C++ is based on C and is a superset of C. C++ retains C's power and flexibility to deal with the hardware-software interface and low-level systems programming. The efficiency, economy, and power of expression of C are retained in C++. More importantly, however, C++ provides a platform to support object-oriented programming and high-level problem abstraction. C++ goes further than ADA in its support for object-oriented programming and is similar to MODULAR-2 in its simplicity and support for modularity,while retaining the cutting-edge efficiency and compactness of C. C++ is a hybrid language. The object-oriented paradigm can be exploited fully to produce a purely objectoriented solution to a problem, or C++ can be treated as a procedural language that contains some additional constructs beyond C. In practice, C++ software reflects both the procedural programming

Indoprog

167

C/C++ Programming

Hendra, S.T.

paradigm as well as the newer object-oriented paradigm. This duality in C++ presents a special challenge to the beginning C++ programmer. Not only is there a new language to learn, but there is also a new way of problem solving and thinking. C++ was developed by Bjarne Stroustrup at Bell Labs in the early 1980s. C++ is designed to support software development on a large scale. The most significant aspect of the C++ language is its support for the object-oriented programming . Classes are what make C++ suitable for developing object-oriented programs. The class structure meets the requirements for creating objects. However, object-oriented programming is also supported by C++'s strong typing, operator overloading, and less reliance on the preprocessor. In a more formal definition, a class defines the properties and attributes that depict the actions of an object that is an instance of that class. Object-Oriented Design Methods At the current stage of evolution, OOD methodology combines elements of all three design categories : data design, architectural design, and procedural design. By identifying objects, data abstractions are created. By defining operations, modules are specified and a structure for the software is established. The steps for OOD are as follows : Define the problem. Develop an informal strategy for the software realization of the real-world problem domain. Formalize the strategy using the following substeps : a. Identify objects and their attributes b. Identify operations that may be applied to objects c. Establish interfaces by showing the relationship between objects and operations. d. Decide on detailed design issues that will provide an implementation description for objects. Mapping from real-world domain to software domain. Although object oriented system design is the design method for the future, its effect can be hardly felt on smaller programs (less than 3000 lines). For large applications like Windows you know the effect. You might have noticed that in Windows every pop up menu have similar options e.g. move, size. etc., this means the code is being reused many times which reduces the program length and execution time. And that's what object oriented programming is all about.

Indoprog

168

C/C++ Programming

Hendra, S.T.

Daftar Pustaka http://www.cplusplus.com, The C++ resources network http://www.research.att.com/~bs/C++.html, Stroustrup: C++ http://cis.stvincent.edu/carlsond/swdesign/swd.html, software design using C++

Indoprog

169

Dasar Pemrograman

Oleh : Hendra, ST.

KATA PENGANTAR
Selamat datang di dunia pemrograman komputer. Dewasa ini, jurusan komputer telah menjadi salah satu jurusan favorit bagi lulusan SMU untuk melanjutkan pendidikannya di perguruan tinggi. Sebagai salah satu mahasiswa jurusan komputer, tentu saja topik algoritma dan pemrograman merupakan mata kuliah wajib, karena kesuksesan sebagai seorang mahasiswa jurusan komputer adalah kemampuan pemanfaatan komputer dan kemampuan menghasilkan berbagai aplikasi yang dapat bermanfaat bagi perusahaan maupun masyarakat. Sesuatu yang harus disadari para mahasiswa adalah dalam mempelajari pemrograman komputer bukanlah sesuatu yang mudah, karena sangat membutuhkan minat dan bakat, dan buku ini memcoba membimbing anda secara step-by-step menuju ke dunia pemrograman komputer. Akhirnya, selamat belajar dan berlatih. Medan, 17 Agustus 2003

Hendra, ST.

Indoprog

Dasar Pemrograman

Oleh : Hendra, ST.

Modul 1, PROGRAM KOMPUTER dan ALGORITMA


PROGRAM KOMPUTER
Program komputer adalah suatu himpunan dari instruksi yang memberitahukan kepada komputer apa yang harus dilakukan. Instruksi tersebut mungkin memberitahukan kepada komputer untuk menambah, membandingkan, dan membuat keputusan berdasarkan hasilnya.

BAHASA KOMPUTER
Agar suatu komputer dapat mengenali instruksi yang anda berikan, instruksi tersebut perlu ditulis dalam bahasa yang dimengerti oleh komputer.

HIGH-LEVEL dan LOW-LEVEL


Pada dasarnya orang mengolongkan Bahasa komputer menjadi dua golongan besar yaitu HighLevel dan Low-Level. Bahasa pemrograman seperti BASIC, PASCAL, FORTRAN dan C, memungkinkan programmer untuk menulis program yang tidak begitu tergantung pada jenis komputer. Berdasarkan hal inilah bahasa-bahasa ini dapat dikategorikan sebagai high-level karena lebih dekat kepada manusia. Sebaliknya, bahasa assembly dikategorikan sebagai low-level karena mereka sangat dekat kepada hardware. Keuntungan utama dari bahwa high-level dibandingkan dengan low level adalah lebih mudah dibaca, ditulis, dan ditangani. Selanjutnya program yang ditulis dengan bahasa high-level harus diterjemahkan menjadi bahasa mesin melalui suatu compiler atau interpreter.

INTERPRETER dan COMPILER


Ketika anda menggunakan suatu interpreter, ia akan membaca perintah source code baris perbaris, kemudian menterjemahkannya menjadi perintah mesin yang bersesuaian (kode mesin) dan menjalankannya seketika. Kode mesin ini tidak disimpan; sehingga ketika anda mencoba menjalankan program yang sama pada kesempatan berikutnya, anda membutuhkan source code dan interpreter untuk menjalankannya. 2

Indoprog

Dasar Pemrograman

Oleh : Hendra, ST.

Ketika anda menggunakan suatu compiler, ia akan membaca perintah source code ... dan menulis kode mesin. Setelah selesai keseluruhan kode mesin akan disimpan untuk pemakaian selanjutnya. Ketika anda ingin menjalankan program tersebut, system operasi akan menjalankan kode mesin yang telah disimpan dalam hal ini source code tidak diperlukan lagi. Eksekusi menjadi lebih cepat, dan dapat dijalankan dikomputer lain (dalam hal ini pada komputer dan system operasi yang sama)

KOMPUTER dan ALGORITMA


Untuk membuat komputer melakukan sesuatu, anda perlu untuk menulis program komputer. Dalam menulis suatu program komputer, kita perlu memberitahukan kepada komputer, langkah-langkah persis apa yang harus ia lakukan. Ketika komputer menjalankan program tersebut, ia akan melakukan setiap langkah secara mesin untuk mencapai tujuan akhir. Ketika anda memberitahu kepada komputer apa yang harus dilakukan, anda perlu memilih bagaimana hal tersebut dilakukan. Dari sinilah Algoritma Komputer muncul. Algoritma adalah teknik dasar untuk menyelesaikan suatu pekerjaan. Perhatikan contoh berikut untuk membantu pengertian anda tentang konsep dari algoritma. Katakanlah misalnya anda mempunyai teman yang baru tiba di airport, dan teman anda ingin berangkat dari airport ke rumah anda. Berikut ini adalah empat algoritma yang berbeda yang mungkin dilakukan teman anda: Algoritma taxi: Pergi ke pemberhentian taxi. Masuk ke taxi. Berikan alamat rumah anda. Algoritma Telepon untuk dijemput: Ketempat pemberhentian, telepon ke handphone anda. Menunggu saja ditempat pengambilan bagasi. Algoritma Bus: Keluar dari tempat pengambilan bagasi, naik bus nomor 70. Turun dan naik bus nomor 14 pada jalan utama. Turun di jalan pada jalan AB. Jalan kaki dua blok arah utara ke rumah anda. Ketiga algoritma diatas memiliki tujuan yang sama, tetapi masing-masing melakukannya dengan cara yang berbeda. Masing-masing algoritma diatas juga menghabiskan waktu dan biaya yang berbeda. Naik taxi, adalah contoh yang paling cepat, tetapi paling mahal. Naik bus mungkin adalah paling hemat, tetapi lambat. Tentu saja anda perlu memilih algortima sesuai dengan situasi dan kondisi. Dalam pemrograman komputer, juga terdapat banyak cara algoritma -- yang berbeda. Masingmasing algoritma memiliki keuntungan dan kerugian untuk situasi yang berbeda

Indoprog

Dasar Pemrograman

Oleh : Hendra, ST.

PSEUDOCODE
PSEUDOCODE adalah cara sederhana untuk menggambarkan algoritma tanpa salah satu bahasa pemrograman. Pseudocode sering digunakan pada buku-buku Computer science dalam contoh mereka sehingga dapat dimengerti oleh para programmer dengan bahasa komputer yang berbeda. Contoh notasi pseudocode: <variable> = <expression> Berhubungan dengan kondisi: if <condition> lakukan sesuatu else lakukan hal yang lain Berhubungan dengan looping: while <condition> lakukan sesuatu for <variable> from <nilai awal> to <nilai akhir> by <step> lakukan sesuatu Pemanggilan fungsi: <function>(<arguments>) Deklarasi fungsi: function <function name>(<arguments>) lakukan sesuatu dengan arguments return sesuatu (optional) Deklarasi variabel: declare <variable-name> as <type> Deklarasi array: declare <array-name>[<lower-bound> to <upper-bound>] of <type> Struktur data: struct <name_of_new_type> <declaration(s) of internal variables> Mengakses field yang terdapat pada struktur: <structure variable name>.<field name>

FLOWCHART
FLOWCHART adalah salah satu cara menggambarkan algoritma dengan menggunakan simbol. Start dan End

Indoprog

Dasar Pemrograman

Oleh : Hendra, ST.

Input dan Output

Proses

Kondisi

Konektor

Aliran
Tugas : 1. Tuliskan pengertian anda tentang Program Komputer, Bahasa Komputer, dan Algoritma ! 2. Tuliskan algoritma yang anda lakukan dari rumah menuju ke tempat kuliah ! 3. Apa perbedaan menurut anda antara Program Komputer dan Pseudocode ? 4. Apa persamaan dan perbedaan antara pseudocode dengan flowchart ? Tugas rumah : Carilah nama-nama bahasa komputer dan pembuatnya, minimal 10.

Indoprog

Dasar Pemrograman

Oleh : Hendra, ST.

Modul 2, BAHASA PEMROGRAMAN BASIC


SEJARAH BAHASA BASIC
Bahasa BASIC (standing for Beginner's All Purpose Symbolic Instruction Code) dibuat oleh John G.Kemmeny dan Thomas E.Kurtz di Dartmouth College pada tahun 1964 merupakan bahasa tingkat tinggi yang relatif mudah dipelajari dan dimengerti. Adapun tokoh yang berperan penting dalam kepopularan bahasa BASIC adalah Bill Gates dan Paul Allen (Microsoft Corporation), dimana mereka membuat intepreter BASIC untuk Altair PC (dengan menggunakan memori sebesar 4KB meliputi programd dan source code). Dalam perkembangan selanjutnya, mereka juga membuat intepreter BASIC untuk Apple, Commodore, dan Atari PC. Pada IBM-PC, Bahasa BASIC dikembangkan dalam dua jenis, yaitu Interpreter dan compiler. Interpreter seperti GW-BASIC pada sistem operasi MS-DOS, maupun BASICA pada system operasi PC-DOS, sedangkan salah satu compilernya yang terkenal adalah BASIC yang dilengkapi dengan sistem pemrograman yang terstruktur, Library, on-line help yang terpadu, editor yang efisien (bisa merapikan teks serta memberitahukan kesalahan syntax penulisan suatu perintah). Dalam perkembangan bahasa BASIC, juga dikembangkan Turbo Basic oleh Robert S. Zale (Borland International), dan untuk versi Power Basic oleh dirinya sendiri. Pada dasarnya bahasa BASIC dirancang untuk : 1. Be easy for beginners to use 2. Be a general-purpose language 3. Allow advanced features to be added for experts (while keeping the language simple for beginners) 4. Be interactive 5. Provide clear and friendly error messages 6. Respond fast for small programs 7. Not require an understanding of computer hardware 8. Shield the user from the operating system Unstructured original BASIC
10 INPUT "What is your name: "; A$ 20 PRINT "Hello "; A$ 30 INPUT "How many stars do you want: "; S 35 S$ = "" 40 FOR I = 1 TO S 50 S$ = S$ + "*" 55 NEXT I 60 PRINT S$ 70 INPUT "Do you want more stars? "; Q$ 80 IF LEN(Q$) = 0 GOTO 70 90 Q$ = LEFT$(Q$, 1) 100 IF (Q$ = "Y") OR (Q$ = "y") THEN GOTO 30

Indoprog

Dasar Pemrograman
110 120 130 140 150 PRINT "Goodbye "; FOR I = 1 TO 200 PRINT A$; " "; NEXT I PRINT

Oleh : Hendra, ST.

Modern Structured BASIC


INPUT "What is your name"; UserName$ PRINT "Hello "; UserName$ DO INPUT "How many stars do you want"; NumStars Stars$ = "" Stars$ = REPEAT$("*", NumStars) '<-ANSI BASIC 'Stars$ = STRING$(NumStars, "*") '<-MS BASIC PRINT Stars$ DO INPUT "Do you want more stars"; Answer$ LOOP UNTIL Answer$ <> "" LOOP WHILE UCASE$(LEFT$(Answer$, 1)) = "Y" PRINT "Goodbye "; FOR A = 1 TO 200 PRINT UserName$; " "; NEXT A PRINT

LIMA LANGKAH DASAR PEMBUATAN PROGRAM


1. 2. 3. 4. Recognizing the need for a program to solve a problem. Planning the program and selecting the tools to solve the problem. Writing the program in the programming language of choice. Compiling: translating the human-readable source code into machine-readable executable code, which is done by compilers and other tools.

5. Testing the program to make sure it works; if not, return to step 3 (see code and fix).

TYPE DATA
Data Type Strings Integers Long Integers Single Double User defined Suffix $ % & ! # Maximum 32,767 chars 32,767 2,147,483,647 +-3.402823 E+38 +-1.7976931 D+308 Minimum 0 chars -32,767 -2,147,483,648 +-1.401298 E-45 +-4.940656 D-324 Size 2 4 4 8

OPERATOR
Arithmetic operators : melakukan tugas perhitungan Operator Kegunaan Operator Kegunaan

Indoprog

Dasar Pemrograman ^ * / Pangkat Negatif Perkalian Pembagian \ Mod + -

Oleh : Hendra, ST. Pembagian Integer Sisa bagi Penjumlahan Pengurangan

Relational operators : membandingkan strings dan nilai numerik Operator = <> < > <= >= Kegunaan Sama dengan Tidak sama dengan Lebih kecil Lebih besar Lebih kecil atau sama dengan Lebih besar atau sama dengan

Logical operators : test kondisi dan manipulasi bits Expresi1 Expresi2 Not And T T F T T F F F F T T F F F T F

Or T T T F

Xor F T T F

Eqv T F F T

Imp T F T T

String operators: mengabung (+), dan membandingkan String

LABEL dan VARIABEL


Penulisan label pada Basic harus memenuhi ketentuan : Maksimum 40 character, dimulai dengan huruf A..Z huruf besar/kecil sama, tidak sama dengan reserved word, dan tidak pakai spasi Nama variabel juga memiliki ketentuan antara lain : Maksimum 40 character, diawali dengan huruf A..Z, diakhiri dengan $, %, &, !, # untuk menunjukan type Tidak boleh sama dengan reserved word, tidak boleh pakai spasi dan spesial character.

PERINTAH DASAR INPUT OUTPUT


Komputer hanya melaksanakan apa yang diperintahkan pemrogram. Jadi, dalam membuat program untuk menyelesaikan suatu masalah, kita harus tahu cara penyelesaiannya. Untuk itu diperlukan tahap-tahap dalam menyelesaikan masalah tersebut. INPUT dan OUTPUT merupakan awal dan akhir pengolahan suatu data. Tanpa proses INPUT, kita tidak dapat memperoleh data untukdiolah dan data-data yang telah selesai diolah tidak akan berarti tanpa proses OUTPUT.

Indoprog

Dasar Pemrograman
Contoh 1 : REM Program mencari Isi Bujursangkar INPUT "MASUKKAN SISI BUJURSANGKAR :",S ISI = S * S PRINT "ISI DARI BUJURSANGKAR ADALAH :",ISI END Contoh 2 : REM Program Isi Data INPUT "MASUKKAN NAMA ANDA ";NM$ INPUT "MASUKKAN UMUR ANDA ";UR% INPUT "MASUKKAN TGL,BLN,THN HARI INI ";TG%,BL%,TH% PRINT "NAMA : ";NM$ PRINT "UMUR : ";UR% PRINT "TANGGAL : ";TG% PRINT "BULAN : ";BL% PRINT "TAHUN : ";TH% END

Oleh : Hendra, ST.

Catatan : Untuk memberi keterangan pada program dapat digunakan REM atau '
LATIHAN 1. Tuliskan hasil evaluasi ekspresi berikut Ekspresi : 1 + 2 2 - 1 2 * 3 5 / 2 5 \ 2 5 Mod 2 3^2 1+2*6^2/4-1 (1+2)*6^2/4-1 Hasilnya ? _____ _____ _____ _____ _____ _____ _____ _____ _____ Penjumlahan Pengurangan Perkalian Pembagian mengapa ? ____________ Pembagian bulat mengapa ? ____________ Sisa bagi Pangkat Urutan operasi Prioritas operasi

Tuliskan kesimpulan anda tentang : 1. Pembagian bulat ____________________________________________ 2. Sisa bagi __________________________________________________ 3. Urutan operasi _____________________________________________ 4. Prioritas operasi __________________________________________ 1 1 2 2 1 3 > 2 < 1 = 2 >= 2 <= 2 <> 3 _____ _____ _____ _____ _____ _____ lebih besar lebih kecil sama dengan lebih besar atau sama lebih kecil atau sama tidak sama dengan

Mengapa True (-1) dan False (0) ? (1 > 2) (1 > 2) (1 < 2) and (2 = 2) and (1 < 2) and (2 = 2) _____ Operasi And _____ Operasi And _____ Operasi And

Indoprog

Dasar Pemrograman
(3 <> 2) and (1 > 2) (1 (1 (1 (3 (1 (1 (1 (3 (1 (1 (1 (3 (1 (1 (1 (3 > 2) > 2) < 2) <> 2) > 2) > 2) < 2) <> 2) > 2) > 2) < 2) <> 2) > 2) > 2) < 2) <> 2) and and and and Xor Xor Xor Xor Eqv Eqv Eqv Eqv Imp Imp Imp Imp (2 (1 (2 (1 (2 (1 (2 (1 (2 (1 (2 (1 (2 (1 (2 (1 = < = > = < = > = < = > = < = > 2) 2) 2) 2) 2) 2) 2) 2) 2) 2) 2) 2) 2) 2) 2) 2) _____ Operasi And _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ Operasi Operasi Operasi Operasi Operasi Operasi Operasi Operasi Operasi Operasi Operasi Operasi Operasi Operasi Operasi Operasi Or Or Or Or Xor Xor Xor Xor Eqv Eqv Eqv Eqv Imp Imp Imp Imp

Oleh : Hendra, ST.

Not (1 > 2) Not (2 > 2)

_____ Operasi Imp _____ Operasi Imp

Not (1 > 2) Or (2 = 2) And (3 < 2) ______ Urutan operasi Tuliskan kesimpulan anda tentang urutan operasi pada operator logika. 2. Ketiklah ekspresi berikut pada jendela immedietly : A = 123 B = 1234567890 C% = 32767 D% = 100000 D& = 100000 E$ = "Indoprog" F$ = 123 G = "hendra" H_1 = 123 nilai ujian = 90 next = 5 cls = 6 A% A% = 1.2 = 1.5

Overflow, mengapa ? Type mismatch, mengapa ? Type mismatch, mengapa ? expected : end-of-statement, mengapa ? Syntax error, mengapa ? expected : variable or end-of-statement ? expected : variable or end-of-statement ? Berapa nilai A% ? Berapa nilai A% ?

Tuliskan kesimpulan anda tentang variabel dan nama variabel 1 + 1 1 + "100" "A" + "B" ______ Type mismatch, mengapa ? ______

Tuliskan kesimpulan anda operator pada type data. Print "Untuk kemajuan Indonesia"

Indoprog

10

Dasar Pemrograman

Oleh : Hendra, ST.

Hasilnya : __________________________________ Print "Untuk","kemajuan","Indonesia" Hasilnya : __________________________________ Print "Untuk";"kemajuan";Indonesia" Hasilnya : __________________________________ Print "Untuk" Print "Kemajuan" Print "Indonesia" Hasilnya : _____________ _____________ _____________ Print "Untuk"; Print "Kemajuan"; Print "Indonesia" Hasilnya : __________________________________ Print 1,2,3 Hasilnya : __________________________________, mengapa ? Print 1;2;3 Hasilnya : __________________________________, mengapa ? Print tab(10),"Hendra";tab(30);"Soewarno" Hasilnya : __________________________________, mengapa ?

Input nama$ print nama$ Hasilnya :? Hendra __________________________________ Input "Masukkan nama :", nama$ print nama$ Hasilnya :Masukkan nama : Hendra __________________________________

Indoprog

11

Dasar Pemrograman

Oleh : Hendra, ST.

Input "Masukkan nama "; nama$ print nama$ Hasilnya :Masukkan nama ? Hendra __________________________________ Input "Masukkan nama "; nama print nama Hasilnya : Masukkan nama ? Hendra Redo from start, mengapa ? 2. Program anda yang pertama Aktifkan ke jendela Editor Ketiklah CODE berikut : REM Program saya yang pertama CLS PRINT "Hello semua" END Simpan CODE diatas ke file Bab1F.Bas (gunakan menu File Save) Jalankan program diatas (gunakan menu Run Start atau tekan F5) 3. Program dengan proses input/output Gunakan menu File New untuk memulai program baru Ketiklah CODE berikut : REM Program menghitung luas persegi panjang CLS INPUT "Masukkan sisi panjang :", panjang INPUT "Masukkan sisi lebar :", lebar LUAS = panjang * lebar PRINT "Luas persegi panjang :", LUAS END Simpan CODE diatas ke file Bab1G.Bas Tugas 4. Buatlah program menghitung luas lingkaran. 5. Buatlah program konversi suhu Celcius ke Farenheit, Kelvin, Reamur. Jawaban :
REM DIM DIM DIM DIM CLS Program Konversi Celcius ke Reamur, Kelvin dan Fahrenheit c AS SINGLE r AS SINGLE k AS SINGLE f AS SINGLE

Indoprog

12

Dasar Pemrograman
INPUT "Masukkan Derajat Celcius ? ", c r = 4 / 5 * c k = 273 + c f = 9 / 5 * c + 32 PRINT "Derajat Reamur : ", r PRINT "Derajat Kelvin : ", k PRINT "Derajat Fahrenheit : ", f END

Oleh : Hendra, ST.

Indoprog

13

Dasar Pemrograman

Oleh : Hendra, ST.

Modul 3, STRUKTUR KENDALI IF


Struktur Kendali memegang peranan yang sangat penting dalam pembuatan program dengan komputer, tanpa adanya struktur kendali kita hanya dapat membuat program yang sederhana dimana prosesnya hanya dijalankan dari baris pertama sampai selesai. Pada kasus-kasus tertentu, ada kalanya baris tertentu tidak boleh dilaksanakan apabila kondisi tidak dipenuhi, ataupun barisbaris tertentu harus diulang sampai suatu kondisi terpenuhi.

PILIH TAMBAHAN
If ekspresi logika Then Statement ... End If

Contoh :
PTKP = 240000 If Nikah$ = "Y" Then PTKP = PTKP + 120000 End If

Keterangan : Jika status nikah adalah "Y" (Ya), maka PTKP (Penghasilan Tidak Kena Pajak) ditambah 120000

PILIH ANTARA DUA


IF ekspresi logika Then Statement1 ... Else Statement2 ... End If

Contoh :
If JlhAnak > 3 Then PTKP = PTKP + (3 * 120000) Else PTKP = PTKP + (JlhAnak * 120000) End If

Keterangan : Jika Jumlah Anak diatas 3 Orang, maka PTKP ditambah 360000, sebaliknya adalah JlhAnak dikali 120000.

PILIH ANTARA BANYAK


IF ekspresi logika 1 Then Statement1 ...

Indoprog

14

Dasar Pemrograman
ElseIF ekspresi logika 2 Then Statement2 ... Else Endif

Oleh : Hendra, ST.

Berfungsi menentukan Block statement yang mana akan dijalankan oleh komputer sesuai dengan ekspresi logika yang menghasilkan nilai benar. Contoh :
PKP = Penghasilan - PTKP PKPT = PKP * 12 ' Penghasilan Kena Pajak 1 Bulan ' Penghasilan Kena Pajak 1 Tahun

If PKPT <= Then PPH = 0 ElseIF PKPT <= 25000000 Then PPH = PKP * 0.05 ElseIF PKPT <= 50000000 Then PPH = 1250000 + (PKPT-25000000)* 0.1 ElseIF PKPT <= 100000000 Then PPH = 1250000 + 2500000 + (PKPT-50000000)*0.25 ElseIF PTKP <= 200000000 Then PPH = 1250000 + 2500000 + 7500000 + (PKPT-100000000)*0.25 Else PPH = 1250000 + 2500000 + 7500000 + 25000000 + (PKPT-100000000)*0.35 End If PPHB = PPH / 12 ' Pajak Penghasilan Bulan Tersebut

Keterangan : PPH dihitung berdasarkan PKPT atau


Select Case Variabel Case ekspresi 1 Statement1 ... Case ekspresi 2 Statement2 ... ... Case Else ... End Select

Contoh :
Select Case PKPT Case <= 0 PPH = 0 Case <= 25000000 PPH = PKP * 0.05 Case <= 50000000 PPH = 1250000 + (PKPT-25000000)* 0.1

Indoprog

15

Dasar Pemrograman

Oleh : Hendra, ST.

Case <= 100000000 PPH = 1250000 + 2500000 + (PKPT-50000000)*0.15 Case <= 200000000 PPH = 1250000 + 2500000 + 7500000 + (PKPT-100000000)*0.25 Case ELSE PPH = 1250000 + 2500000 + 7500000 + 25000000 + (PKPT- 100000000)*0.35 End Select

Latihan Buatlah program perhitungan Pajak Penghasilan Perorangan untuk penghasilan bulanan ! Tugas 1. Buatlah program untuk mencetak kata sesuai dengan bilangan yang dimasukan oleh pemakai ( 1 s/d 9 ) Contoh : Input : 1 Output : Satu 2. Buatlah program untuk menentukan bilangan yang dimasukan pemakai genap atau ganjil. Jawaban :
REM Program memeriksa bilangan Genap atau Ganjil DIM bil AS INTEGER INPUT "Masukkan Bilangan ?", bil IF bil MOD 2 = 0 THEN PRINT "Genap" ELSE PRINT "Ganjil" END IF END

3. Buatlah program untuk menentukan tahun yang dimasukan pemakai kabisat atau bukan.

Indoprog

16

Dasar Pemrograman

Oleh : Hendra, ST.

Modul 5, STRUKTUR KENDALI PERULANGAN


Salah satu kelebihan komputer daripada manusia adalah ia tidak pernah bosan terhadap tugas-tugas rutin. Inilah yang menyebabkan komputerisasi selalu diterapkan terhadap tugas-tugas yang rutin.

LOOPING COUNTER
Digunakan untuk proses berulang yang jumlah perulangannya ditentukan berdasarkan perhitungan (sistem counter). FOR counter = mulai TO selesai [STEP selisih] Statement ... NEXT [counter] Contoh : Mencetak bilangan 0123456789
For I = 0 To 9 Step 1 Print I Next I

LOOPING TRAPPING
Perulangan jenis ini ditentukan berdasarkan kondisi tertentu. Pemeriksaan diawal
DO [{WHILE | UNTIL} ekspresi logika] Statement ... LOOP Contoh : Mencari KPK dari dua bilangan Input "Bilangan pertama :", pertama Input "Bilangan kedua :", kedua If pertama Lipat = Bagi = Else Lipat = Bagi = End IF N = 1 Do While ((Lipat*N) Mod Bagi) <> 0 'Kelipatan dinaikan jika > kedua Then pertama kedua kedua pertama 'Jika bilangan pertama lebih besar

Indoprog

17

Dasar Pemrograman
N = N + 1 Loop 'sisa bagi belum nol

Oleh : Hendra, ST.

Print "KPK kedua bilangan adalah :", (Lipat*N) END

NB : operator matematika MOD adalah untuk sisa bagi Pemeriksaan diakhir


DO [statementblock] LOOP [{WHILE | UNTIL} ekspresi logika]

Contoh : Program password, program akan terus menanyakan password sampai jawabannya benar.
password$ = "INDOPROG" DO Color 7,0 Print "Password"; Color 0,0 Input pass$ LOOP until pass$ = password$ Print "Selamat bergabung !" END

Perintah EXIT DO dapat digunakan untuk meninggalkan proses DO - LOOP Contoh :


N = 1 password$ = "INDOPROG" DO Color 7,0 If N > 3 Then EXIT DO End IF Print "Password"; Color 0,0 Input pass$ N = N + 1 LOOP until pass$ = password$ If N > 3 Then Print "Akses ditolak !" Else Print "Selamat bergabung !" End IF END Latihan : 1. Buatlah program mencetak

Indoprog

18

Dasar Pemrograman
11111 22222 33333 44444 55555 12345 1234 123 12 1 Jawaban A: REM Jawaban soal A
DIM i AS INTEGER DIM j AS INTEGER FOR i = 1 TO 5 STEP 1 FOR j = 1 TO 5 STEP 1 PRINT j; NEXT j PRINT NEXT i Jawaban B: REM DIM DIM FOR Jawaban Soal B i AS INTEGER j AS INTEGER i = 5 TO 1 STEP -1 FOR j = 1 TO i STEP 1 PRINT j; NEXT j PRINT NEXT i

Oleh : Hendra, ST.

12345 12345 12345 12345 12345 12345 2345 345 45 5

2. Buatlah program mencetak barisan fibonacci : 1 1 2 3 5 8 13 Jawaban :


REM DIM DIM DIM DIM DIM Program Cetak barisan Fibonacci i AS INTEGER n AS INTEGER f1 AS LONG f2 AS LONG fi AS LONG

INPUT "Jumlah Suku ?", i f1 = 1 f2 = 1 FOR n = 1 TO i STEP 1 IF n = 1 THEN PRINT f1; ELSEIF n = 2 THEN PRINT f2; ELSE fi = f1 + f2 PRINT fi; f1 = f2 f2 = fi

Indoprog

19

Dasar Pemrograman
END IF NEXT n END

Oleh : Hendra, ST.

Tugas 1. Buatlah program menentukan bilangan yang dimasukkan merupakan bilangan PRIMA atau tidak. Jawaban :
REM Menentukan bilangan prima atau bukan DIM bil AS LONG DIM bagi AS INTEGER DIM akar AS SINGLE INPUT "Bilangan yang akan diperiksa ?", bil IF bil < 2 THEN PRINT "Bukan Prima" ELSEIF bil < 4 THEN PRINT "Prima" ELSE akar = sqrt(bil) bagi = 2 WHILE bagi <= akar AND bil MOD bagi <> 0 bagi = bagi + 1 WEND IF bagi <= akar THEN PRINT "Bukan Prima" ELSE PRINT "Prima" END IF END IF END

2. Buatlah program mencetak tabel pertumbuhan simpanan anda di bank. Jumlah simpanan ? Suku bunga bank/tahun ? Lama simpanan ? Tabel pertumbuhan -----------------------------------------------------------Tahun Awal Tahun Bunga/tahun Pajak Akhir Tahun -----------------------------------------------------------1 2 . . . Awal Tahun 1 = Jumlah simpanan Bunga/tahun = Awal Tahun * Suku bunga bank/100 Pajak dihitung berdasarkan : Jika Awal Tahun + Bunga/tahun > 7500000 Pajak = 20% dari Bunga/tahun Jika tidak Pajak = 0 Akhir Tahun = Awal Tahun + Bunga/tahun - Pajak Awal Tahun ke n = Akhir Tahun n - 1

Indoprog

20

Dasar Pemrograman

Oleh : Hendra, ST.

Modul 6, VARIABEL ARRAY


Array adalah sekumpulan data yang menggunakan nama variabel yang sama. Tiap-tiap nilai dari array disebut sebagai elemen dan memiliki index. Setiap elemen array adalah sebuah variabel juga.

MENCIPTAKAN VARIABEL ARRAY


Untuk menciptakan variabel array dapat menggunakan perintah :
DIM variable[(subscripts)] [AS type]

Contoh :
DIM A(20) As Integer

Akan menciptakan variabel array yang bernama A yang memiliki 20 elemen (mulai dari index 0 s/d 19), yang masing-masing dapat menampung data integer, dan memiliki nilai awal 0 (nol).

MENGGUNAKAN VARIABEL ARRAY


Penggunakan Variabel Array sama saja dengan variabel biasa, Cuma kita perlu menyebutkan nomor index elemen yang diinginkan. Contoh :
A(0) = 100 A(1) = 200 A(2) = 300

Akan mengisi nilai 100 ke elemen pertama, 200 ke elemen kedua,dan 300 ke elemen ketiga. Catatan : Elemen pertama dari array dimulai dengan nomor index 0 Contoh lain :
For I = 0 To 19 Step 1 Input "Masukkan Nilai :",A(I) Next I

Akan menanyakan kepada pemakai untuk mengisi elemen pertama s/d elemen keduapuluh. Contoh lain :
Total = 0 For I = 0 To 19 Step 1 Total = Total + A(I) Next I Print "Total :",Total

'A(0), A(1), ..., A(19)

Indoprog

21

Dasar Pemrograman

Oleh : Hendra, ST.

Akan menjumlahkan nilai elemen pertama s/d elemen keduapuluh ke variabel total. Dalam Basic, kita mengenal dua jenis variabel array, yakni dynamic array dan static array. Static array dapat kita bentuk tanpa perintah khusus, tetapi terbatas sampai nomor index ke 10 saja tanpa dipengaruhi jumlah dimensi. Contoh :
For I = 0 To 10 Step 1 Input "Masukkan Nilai :",B(I) Next I Total = 0 For I = 0 To 10 Step 1 Total = Total + B(I) Next I Print "Total :",Total

Program diatas dapat dijalankan tanpa kesalahan walaupun variabel array B tidak dideklarasikan sebagai variabel array. Hal ini karena kita menggunakan Static array yang otomatis disediakan oleh Basic, tetapi hanya terbatas sampai nomor index ke 10 saja. Pada defaultnya index awal dari variabel array adalah dimulai dari 0, tetapi hal ini bisa diubah dengan perintah OPTION BASE 1.
Contoh : OPTION BASE 1 DIM A(30) For I = 1 To 30 Input "Masukkan Nilai :",A(I) Next I

Index awal dari variabel array dapat juga ditentukan pada saat deklarasi. Contoh :
DIM C(5 To 15) For I = 5 To 15 Step 1 Input "Masukkan Nilai :",A(I) Next I

Akan menghasilkan variabel array C, dengan elemen pertama memiliki nomor index 5, dan elemen terakhir memiliki nomor index 15. Anda dapat juga menggunakan fungsi LBound dan UBound untuk mendapatkan index awal dan index akhir dari suatu array. Contoh :
DIM C(5 To 15)

Indoprog

22

Dasar Pemrograman
For I = LBound(C) To UBound(C) Step 1 Input "Masukkan Nilai :",A(I) Next I Latihan

Oleh : Hendra, ST.

1. Susun sebuah program dengan ketentuan berikut : - program menanyakan jumlah data - program menerima data sesuai dengan jumlah data satu persatu - program mengurut data tersebut secara ascending - program menghitung : 1. data terbesar 2. data terkecil 3. rata-rata 4. median
DIM jd AS INTEGER DIM i AS INTEGER DIM j AS INTEGER INPUT "Masukkan Jumlah Data ?", jd DIM dat(jd) AS INTEGER 'Baca Data FOR i = 1 TO jd STEP 1 PRINT "Masukan data ke-"; i; INPUT dat(i) NEXT i 'Urut Data FOR i = jd - 1 TO 1 STEP -1 FOR j = 1 TO i STEP 1 IF dat(j) > dat(j + 1) THEN temp = dat(j) dat(j) = dat(j + 1) dat(j + 1) = temp END IF NEXT j NEXT i 'Menghitung Total DIM Total AS LONG Total = 0 FOR i = 1 TO jd STEP 1 Total = Total + dat(i) NEXT i DIM rata AS SINGLE rata = Total / jd DIM median AS INTEGER IF jd MOD 2 = 0 THEN median = (dat(jd \ 2) + dat(jd \ 2 + 1)) / 2 ELSE median = dat(jd \ 2 + 1) END IF PRINT "Data Terbesar :", dat(i) PRINT "Data Terkecil :", dat(jd) PRINT "Ratat-rata :", rata PRINT "Median :", median END

REM Pengolahan Data

Indoprog

23

Dasar Pemrograman

Oleh : Hendra, ST.

Tugas 1. Buatlah program faktur sederhana dengan ketentuan : - program menanyakan Tanggal dan Penjual - program menanyakan 1. Jumlah 2. Satuan 3. Nama barang secara berulang sampai jumlah yang dimasukkan 0 (nol) - hasil menghasilkan tampilan faktur berikut : FAKTUR PENJUALAN Tanggal : 01-Jan-1995 Penjual : Hendra Soewarno -------------------------------------------------------No. Jlh Satuan Nama Barang Harga @ Jumlah ======================================================== 1. 30 Kotak Diskette 3M 15,000.00 450,000.00 2. 10 Buah Pita printer 7,000.00 70,000.00 ======================================================== Total : 520,000.00 --------------------------------------------------------

Indoprog

24

Dasar Pemrograman

Oleh : Hendra, ST.

Modul 7, FUNGSI BANTU BAWAAN


Fungsi bantu adalah fasilitas yang disediakan untuk membantu programmer dalam mengembangkan program. Dengan adanya fungsi bantu bawaan programmer tidak perlu mengembangkan program untuk melakukan hal yang sama. Contoh : Pada Basic telah tersedia fungsi bantu Sinus yang dapat digunakan untuk mendapatkan nilai sinus dari suatu sudut dalam radian.
Dim B As Double B = Sin(30 * 3.14/180)

Akan mengisi nilai sinus sudut 30 derajat ke variabel B Tanpa mengunakan fungsi bantu Sinus, programmer dapat mengembangkan program sendiri untuk melakukan hal yang sama, tetapi hal ini tentu saja menuntut pengetahuan yang lebih mendalam. Contoh : Dengan menggunakan Ekspansi Trigonometris, suatu nilai Sinus dapat diturunkan.
DIM S AS DOUBLE DIM Sinus AS DOUBLE S = 30 * 3.14 / 180 ' Sudut 30 derajat F = 1 Tanda = 1 Sinus = S FOR I = 2 TO 11 F = F * I ' Menghitung nilai IF I MOD 2 = 1 THEN ' Suku 3, 5, 7, 9, Tanda = -Tanda ' Tanda -1, 1, -1, Sinus = Sinus + (S ^ I / F * Tanda) END IF NEXT I B = Sinus

dalam radian

faktorial 11 1, dst

Potongan program diatas akan menghasilkan nilai Sinus 30 derajat ke variabel B. Dengan menggunakan fungsi bantu bawaan yang telah tersedia pekerjaan programmer akan lebih terfokus pada program yang akan dikembangkan.

FUNGSI BANTU STRING


LEFT$ (stringexpression,n) Mengembalikan sejumlah karakter string dari suatu data string dari sebelah kiri. Contoh :
Print Left$("IndoProg",4) ' Akan mencetak Indo

Indoprog

25

Dasar Pemrograman

Oleh : Hendra, ST.

RIGHT$ (stringexpression,n) Mengembalikan sejumlah karakter string dari suatu data string dari sebelah kanan. Contoh :
Print Right$("IndoProg",4) ' Akan mencetak Prog

MID$(stringexpression,start[,length]) Mengembalikan sejumlah karakter string dari suatu string mulai posisi tertentu. Contoh :
Print Mid$("1234567890",3,4) Print Mid$("1234567890",3) ' Akan mencetak 3456 ' Akan mencetak 34567890

LTRIM$(stringexpression) Mengembalikan string dengan menghilangkan spasi sebelah kiri. Contoh :


A$ = " 100" B$ = LTRIM$(A$) Print A$ Print B$

'Akan mencetak 100 'Akan mencetak 100

RTRIM$(stringexpression) Mengembalikan string dengan menghilangkan spasi sebelah kanan. INSTR([start,]stringexpression1,stringexpression2) Mencari posisi suatu string pada string lain (0 jika tidak ditemukan). Contoh :
Print INSTR("ABCD","B") Print INSTR(4,"ABCDABCD","A") Print INSTR("ABCD","a") 'Akan mencetak 2 'Akan mencetak 5 'Akan mencetak 0

LCASE$(stringexpression) Mengembalikan suatu string yang telah diubah ke huruf kecil. Contoh :
Print LCase$("IndoProg") 'Akan mencetak indoprog

UCASE$(stringexpression) Mengembalikan string yang telah dibuat huruf besar. Contoh :


Print UCase$("IndoProg") 'Akan mencetak INDOPROG

SPACE$(n) Mengembalikan string yang berisi sejumlah spasi. Contoh : 26

Indoprog

Dasar Pemrograman
Print Space$(30), "IndoProg"

Oleh : Hendra, ST.

STRING$(m,n) atau STRING$(m,stringexpression) Mengembalikan string yang mengandung sejumlah character yang berulang. Contoh :
Print String$(10,65) Print String$(10,"A") ' Akan mencetak AAAAAAAAAA ' Akan mencetak AAAAAAAAAA

LEN(stringexpression) Mengembalikan jumlah huruf suatu data string. Contoh :


Print Len("Indonesia Programmer") ' Akan mencetak 20

FUNGSI BANTU KONVERSI


STR$(numeric-expression) Mengembalikan string dari suatu expresi numeric Contoh :
A = 100 B$ = Str$(A)

'B berisi "100"

VAL(stringexpression) Mengembalikan numeric dari suatu expresi string Contoh :


B$ A C D = = = = "100" Val(B) "IndoProg" Val(C)

'A berisi 100 'D berisi 0

ASC(stringexpression) Mengembalikan nilai ASCII dari suatu character. Contoh :


Print Asc("A") 'Akan mencetak 65

CHR$(n) Mengembalikan character ASCII n. Contoh :


Print Chr$(65) 'Akan mencetak "A"

FUNGSI BANTU ARITMATIKA


SIN(numeric-expression)

Indoprog

27

Dasar Pemrograman COS(numeric-expression) TAN(numeric-expression) ATN(numeric-expression) Mengembalikan nilai trigonometri. numeric-expression dinyatakan dalam radian (sudut*3.14/180). Cukup jelas EXP(numeric-expression) Mengembalikan nilai exponential. Cukup jelas LOG(numeric-expression) Mengembalikan nilai logaritma natural. Cukup jelas SQR(numeric-expression) Mengembalikan nilai akar pangkat dua. Contoh :
Print Sqr(9) 'Akan mencetak 3

Oleh : Hendra, ST.

INT(numeric-expression) Mengembalikan nilai bulat dari suatu desimal. Contoh :


Print Int(3.5) 'Akan mencetak 3

FUNGSI BANTU RANDOM


RANDOMIZE [integer-expression] RANDOMIZE TIMER Memberikan bibit kepada nilai random. RND Mengembalikan nilai pseudo random antara 0 s/d < 1 Contoh :
Randomize Timer Print Int(RND*100)

'Akan mencetak suatu bilangan 'random 0 s/d 99

FUNGSI BANTU WAKTU

Indoprog

28

Dasar Pemrograman DATE$ Mengembalikan tanggal system dalam string dengan format mm-dd-yyyy. TIME$ Mengembalikan waktu komputer dalam string dengan format hh:mm:ss. TIMER Mengembalikan jumlah detik sejak pukul 00:00:00 TIMER dapat digunakan pada perintah RANDOMIZE TIMER. Contoh :
PROGRAM TEBAK ANGKA CLS RANDOMIZE TIMER :HASIL = INT(RND*100)+1 N = 0 DO N = N + 1 INPUT "MASUKKAN TEBAKAN ANDA (1-100)";TEBAK IF TEBAK > HASIL THEN PRINT "TERLALU BESAR" IF TEBAK < HASIL THEN PRINT "TERLALU KECIL" LOOP UNTIL HASIL=TEBAK PRINT "TEBAKAN ANDA SEBANYAK ";N;" KALI" END

Oleh : Hendra, ST.

Latihan : 1. Bandingkan hasil Sinus dengan fungsi bantu Sin dan Ekspansi Trigonometris. 2. Buatlah program putar String "Indonesia Programmer" dari kiri ke kanan.
REM Tulisan Putar DIM tulisan AS STRING CLS INPUT "Tulisan anda :", tulisan DO LOCATE 13, (80 - LEN(tulisan)) \ 2 PRINT tulisan tulisan = RIGHT$(tulisan, 1) + LEFT$(tulisan, LEN(tulisan) - 1) LOOP UNTIL INKEY$ <> "" END

3. Bagaimana kalau putar dari kanan ke kiri. 4. Cobalah program tebak angka, berapa kali anda mampu selesai menebaknya?

Indoprog

29

Dasar Pemrograman

Oleh : Hendra, ST.

Modul 8, FUNGSI CIPTAAN DAN SUB RUTIN


FUNGSI CIPTAAN
Fungsi-fungsi bawaan yang disediakan oleh Basic adalah bersifat umum, sehingga kadang-kadang programmer harus membuat fungsi sendiri sesuai dengan kebutuhannya. Misalnya : Dalam mengembangkan program keuangan, seorang programmer akan banyak membutuhkan fungsi-fungsi Time Value of Money seperti Present Value, Future Value, Depresiasi dll. Basic menyediakan fasilitas bagi programmer yang ingin mengembangkan fungsi ciptaannya sendiri. Adapun tata cara penulisannya adalah sebagai berikut :
FUNCTION namafungsi[(parameterlist)] [STATIC] [statementblock] namafungsi = expression [statementblock] END FUNCTION

type data yang dikembalikan ditentukan oleh akhiran pada nama tersebut(%, &, !, #, atau $) yang masing-masing adalah INTEGER, LONG, SINGLE, DOUBLE dan STRING. Contoh :
FUNCTION SLN#(cost AS double, salvage AS double, life AS single) SLN# = (cost-salvage)/life END FUNCTION

Fungsi diatas adalah fungsi ciptaan untuk menghitung depresiasi dengan metode garis lulus. Contoh Lain :
FUNCTION FV#(pv AS double, rate AS single, term AS integer) Dim npv as double, i as integer npv = pv FOR i = 1 TO term STEP 1 npv = npv + npv*rate 'nilai akhir = pokok + bunga NEXT i FV# = npv END FUNCTION atau dengan rumus pertumbuhan FUNCTION FV#(pv AS double, rate AS single, term AS integer) FV# = np*(1+rate)^term END FUNCTION

Fungsi diatas adalah fungsi ciptaan untuk menghitung Future Value dari suatu nilai uang, jika diketahui suku bunga per periode dan jumlah periode yang diinginkan.

Indoprog

30

Dasar Pemrograman

Oleh : Hendra, ST.

Contoh : Misalnya anda memiliki uang Rp. 1.000.000 (satu juta), anda menyimpannya ke Bank dengan suku bunga 10% per tahun, berapa uang anda setelah disimpan 3 tahun ? Catatan : Pada Basic, fungsi ciptaan disimpan pada lokasi yang berlainnan dengan program utama, untuk beralih ke program utama maupun fungsi ciptaan anda dapat menggunakan tombol F2 Anda dapat menggunakan perintah EXIT FUNCTION untuk keluar dari fungsi. Contoh :
FUNCTION PRIMA! (bilangan AS LONG) DIM i AS INTEGER IF bilangan < 2 THEN PRIMA! = 0 'semua bilangan < 2 bukan prima ELSEIF bilangan < 4 THEN PRIMA! = 1 'bilangan 2 dan 3 adalah prima ELSE i = 2 'bagi bilangan tersebut mulai DO WHILE i <= SQR(bilangan) 'dari 2 s/d Akar dari bilangan IF (bilangan MOD i) = 0 THEN PRIMA! = 0 'jika habis dibagi, bukan prima EXIT FUNCTION END IF i = i + 1 LOOP PRIMA! = 1 'jika tidak habis dibagi, prima END IF END FUNCTION

MENGGUNAKAN FUNGSI CIPTAAN


Cara menggunakan fungsi ciptaan sama saja dengan fungsi bawaan, contoh :
DIM I AS LONG FOR I = 1 To 30 If PRIMA!(I) = 1 Then Print I End If NEXT I Akan mencetak bilangan prima antara 1 s/d 30

SUB RUTIN
Sub Rutin merupakan sebagian dari program. Adapun keuntungan dari pembentukan adalah menghindari pengetikan yang berulang-ulangterhadap bagian program yang sama, dan membuat program lebih terstruktur. Pada Basic tata cara penulisan Sub Rutin adalah sebagai berikut:
SUB namasub [(Parameterlist)] [STATIC] [statementblock]

Indoprog

31

Dasar Pemrograman
END SUB

Oleh : Hendra, ST.

Contoh : Sub KOTAK(Y1%,X1%,Y2%,X2%) posisiX% = POS(0) 'Simpan posisi kursor sekarang posisiY% = CRSLIN LOCATE Y1%,X1% PRINT Chr$(218);String$(X2-X1-2,196);Chr$(191) FOR I%=Y1% TO Y2% STEP 1 LOCATE I%,X1% : PRINT Chr$(179) LOCATE I%,X2% : PRINT Chr$(179) NEXT I% LOCATE Y2%,X1% PRINT Chr$(192);String$(X2-X1-2,196);Chr$(217) LOCATE POSISIY%,POSISIX% END SUB

Sub diatas akan mengambar suatu kotak ASCII single berdasarkan koordinat yang diberikan. Contoh :
CALL KOTAK(5,10,20,70)

pengiriman argumen pada Sub Procedure terdapat dua cara antara lain : Secara referensi, Argumen yang diberikan dengan cara ini kepada procedure dan diolah, kemudian hasil akhirnya akan didefinisikan pada variabel tersebut pada main program. Dengan Value/Nilai, Argumen ini hanya berupa nilai yang dipergunakan oleh procedure pada saat pengolahan. Contoh :
SUB contoh(A as INTEGER) A = 10 END SUB

Pengiriman argumen secara Referensi :


DIM Nilai As INTEGER Nilai = 1 Call contoh(Nilai) Print Nilai

' Call ' Akan tercetak 10

Pengiriman argumen secara Value :


DIM Nilai As INTEGER Nilai = 1 contoh(Nilai) Print Nilai

' Tanpa Call ' Akan tercetak 1

Jadi anda perlu berhati-hati dalam pemakaian Variabel yang digunakan sebagai parameter pada saat pemanggilan SUB RUTIN. static, menyatakan nilai variabel local dalam function tidak dibuang ketika fungsi atau sub berakhir.

Indoprog

32

Dasar Pemrograman

Oleh : Hendra, ST.

Dalam Basic anda dapat menentukan tingkatan/sifat variabel yang mengatur dimana variabel itu digunakan(level of access). Inilah tingkatan tersebut : Variabel Local, hanya bisa digunakan pada Sub Procedure atau function tersebut telah selesai dikerjakan, maka variabel lokal tersebut dibuang dari memory dan tidak lagi dipergunakan oleh bagian program lain. Variabel Shared, atau variabel global bisa digunakan pada seluruh bagian program maupun Sub Procedure tertentu. Nilai variabel ini dapat berubah selama program tersebut berjalan. Variabel Static, adalah variabel local, tetapi variabel ini nilainya tetap dipertahankan sampai pemanggilan berikutnya.
Latihan : 1. Buatlah sub kotak double dan contoh pemakaiannya. 2. Buatlah fungsi ciptaan angka yang akan mencetak nama dari suatu angka yang diberikan. (0 = nol, 1 = satu, 2 = dua, , 9 = sembilan). 3. Kembangkan fungsi yang dapat menghasilkan terbilang sampai angka ribuan. (1250 = Seribu duaratus limapuluh rupiah). Tugas 1. Kembangkan fungsi yang dapat menghasilkan terbilang sampai triliunan rupiah, serta kemampuan SEN.

Indoprog

33

Dasar Pemrograman

Oleh : Hendra, ST.

MODUL 9, TYPE DATA RECORD


Record Type merupakan type ciptaan yang dibuat oleh pemakai sesuai dengan tuntutan program. Record Type merupakan type variabel yang terdiri dari kumpulan type-type standar Basic.

MENDEKLARASIKAN SUATU RECORD TYPE


Pada Basic Record Type dapat dideklarasikan dengan penulisan berikut :
Syntax : Type nama <nama elemen 1> AS <typedata> <nama elemen 2> AS <typedata> ... End Type

Contoh :
Type PESERTA Nomor AS String*10 Nama AS String*20 Email AS String*30 Umur AS Integer End Type

Mendeklarasikan type data PESERTA yang merupakan kumpulan dari data Nomor, Nama, Email, dan Umur.

MENDEKLARASIKAN VARIABEL RECORD TYPE


Untuk mendeklarasikan variabel berdasarkan Record Type tertentu dengan menggunakan perintah DIM. Contoh :
Dim DataPeserta As PESERTA

Mendeklarasikan variabel DataPeserta yang memiliki type PESERTA, sehingga variabel DataPeserta memiliki komponen Nomor, Nama, Email dan Umur.

MENGGUNAKAN VARIABEL RECORD TYPE


Pemakaian variabel Record Type sama saja dengan variabel biasa, dan kita juga dapat menyatakan masing-masing komponennya. Contoh :
Dim Peserta1 As PESERTA Dim Peserta2 As PESERTA

Indoprog

34

Dasar Pemrograman
Dim Temp As PESERTA = = = = = = = = 9224 "Hendra Soewarno" "hendra@indoprog.com" 27 9241 "Limada" "limada@hsbc.com" 26 'komponen 'komponen 'Komponen 'Komponen 'komponen 'komponen 'Komponen 'Komponen Nomor Nama Email Umur Nomor Nama Email Umur

Oleh : Hendra, ST.

Peserta1.Nomor Peserta1.Nama Peserta1.Email Peserta1.Umur Peserta2.Nomor Peserta2.Nama Peserta2.Email Peserta2.Umur

Record Type banyak digunakan dalam pengolahan data, dan random file karena menawarkan fleksibilitas dan kemudahan dalam pemakaiannya. Contoh :
Temp = Peserta1 Peserta1 = Peserta2 Peserta2 = Temp

atau
SWAP Peserta1, Peserta2

Menukar data Peserta1 dengan Peserta2 dan sebaliknya, tanpa perlu menyebutkan sub komponennya. Dapatkah saudara bayangkan kalau hal tersebut tidak menggunakan Record Type ? Contoh :
'Program isi data siswa dan sortir 'DEKLARASI Type SISWA NOINDUK NAMA TEORI PRAKTEK RATA End Type RECORD TYPE SISWA AS AS AS AS AS STRING * 10 STRING * 15 SINGLE SINGLE SINGLE

Input "Masukkan jumlah siswa ";JS Dim DSiswa(JS) AS SISWA 'MENGISI DATA For I = 1 TO JS STEP Print "RECORD KE Input "NO.INDUK Input "NAMA Input "TEORI Input "PRAKTEK DSISWA(I).RATA = NEXT I 'Deklarasi Array DSiswa 'berdasarkan Record Type SISWA

1 -";I :",DSISWA(I).NOINDUK :",DSISWA(I).NAMA :",DSISWA(I).TEORI :",DSISWA(I).PRAKTEK (DSISWA(I).TEORI+DSISWA(I).PRAKTEK)/2

Indoprog

35

Dasar Pemrograman
'MENGURUT DATA BERDASARKAN NILAI RATA-RATA For I = (JS-1) TO 1 STEP -1 Sempurna = 1 For J = 1 TO I If DSISWA(J).RATA < DSISWA(J+1).RATA THEN SWAP DSISWA(J),DSISWA(J+1) Sempurna = 0 End If Next J If Sempurna = 1 I = 0 End If Next I

Oleh : Hendra, ST.

CLS Print " HASIL UJIAN SISWA" Print " BASIC PROGRAMMING MEI 2001" Print Print "-------------------------------------------------------------------" Print "NO.INDUK NAMA TEORI PRAKTEK RATA-RATA LULUS " Print "-------------------------------------------------------------------" POLA$="\ \ \ \ ###.## ###.## ###.## \ \ " VIEW PRINT 4 TO 23 For I = 1 TO JS IF DSISWA(I).RATA < 60 THEN LULUS$="TIDAK" ELSE LULUS$ = "YA" PRINT USING POLA$;DSISWA(I).NOINDUK;DSISWA(I).NAMA;DSISWA(I).TEORI; DSISWA(I).PRAKTEK;DSISWA(I).RATA;LULUS$ Next I END LATIHAN 1. Buatlah program untuk mengisi data berikut. NAMA SURYAJAYA SUTIMAN JUSMAN WIJAYA YUSNI TUTI GOL A C B A B A JAM KERJA 50 48 60 50 48 45

menghasilkan laporan dengan ketentuan. - Gaji Pokok PEGAWAI ditentukan sebagai berikut : Golongan Gaji Pokok/Bulan A Rp. 175.000,00 B Rp. 220.000,00 C Rp. 350.000,00 - jika jam kerja > 48 jam diberikan Bonus = (jam kerja - 48) * 5000/jam - jika jam kerja < 48 jan dikenakan Potongan = (48 - jam kerja) * 1000/jam - Total Gaji = Gaji Pokok + Bonus - Potongan Output yang diharapkan (berurut berdasarkan nama):

Indoprog

36

Dasar Pemrograman
P.T. JAYA WIJAYA JL. Kemerdekaan Barat No. 12 ============================

Oleh : Hendra, ST.

LAPORAN GAJI PEGAWAI ======================================================== Nama Gol Jam Gaji Bonus Potongan Total Pegawai Kerja Pokok (Rp) (Rp) (Rp) -------------------------------------------------------Suryajaya C 50 350,000 10,000 360,000 Sutiman B 48 200,000 200,000 ======================================================== Total : 560,000 ========================================================

Indoprog

37

Dasar Pemrograman

Oleh : Hendra, ST.

Modul 10, PENGOLAHAN SEQUENTIAL FILE


File merupakan fasilitas penyimpanan data pada external storage yang bersifat permanen, jika dibandingkan dengan penyimpanan ke RAM yang sifatnya sementara. Dengan pemakaian file kita dapat menghemat pemakaian RAM komputer yang memiliki jumlah yang terbatas serta dapat melakukan dokumentasi untuk jangka waktu yang panjang. Pada Basic pengolahan file dapat dibagi atas tiga jenis, yaitu : 1. SEQUENTIAL FILE 2. RANDOM FILE 3. BINARY FILE Pada Sequential file (file urut) proses pengolahannya dilakukan secara linier dari awal sampai akhir, tanpa bisa kembali kebagian sebelumnya, kecuali proses dimulai lagi dari awal. Jadi dalam pengolahan datanya bersifat first in first out, artinya pembacaan data dari file ini harus dimulai dari data yang paling awal. Pada umumnya pengolahan data yang menggunakan file sebagai media INPUT maupun OUTPUT memiliki tiga tahap, yaitu : 1. Tahap membuka file (OPEN) 2. Tahap memproses (INPUT/OUTPUT) 3. Dan yang terakhir adalah tahap menutup file (CLOSE)

MEMBUKA FILE SEQUENTIAL


Untuk membuka file sequential yang akan diproses dapat digunakan penulisan sebagai berikut : Syntax :
Open filename [FOR mode] AS [#]filenum

dimana mode terdiri dari : INPUT, membuka file untuk proses INPUT OUTPUT, membuka file baru untuk proses OUTPUT APPEND, membuka file untuk untuk proses OUTPUT dimana data baru bagian akhir. Contoh :
Open "Siswa.Dat" For Append AS #1

ditambahkan pada

Akan membuka Siswa.Dat sebagai OUPUT dimana data baru ditambahkan pada bagian akhir. Jika file Siswa.Dat belum ada, maka akan dibuat yang baru.

PROSES INPUT/OUTPUT
Perintah proses INPUT/OUTPUT pada sequential file sangat tergantung kepada bentuk perlakuan terhadap data. Untuk penulisan yang berorientasi pada baris, anda dapat menggunakan perintah Indoprog 38

Dasar Pemrograman

Oleh : Hendra, ST.

PRINT, dan pembacaanya dapat menggunakan LINEINPUT. Penulisan yang berorientasi kepada data, anda dapat menggunakan perintah WRITE dan INPUT untuk proses pembacaannya. Syntax :
PRINT #filenumber,[USING stringexpressin;]expression list WRITE #filenumber[,expressionlist] INPUT #filenumber, variablelist LINEINPUT #filenumber, variable-string

Contoh :
Write #1, "920403024","Hendra Soewarno",80,90

menulis ke file nomor 1, dan data dapat dibaca kembali dengan perintah :
Input #1,Nim$,Nama$,Teori,Praktek

Catatan : Anda dapat menggunakan fungsi bantu EOF(filenumber) untuk memeriksa apakah berada diposisi akhir file.

PROSES CLOSE
Untuk menutup file dapat digunakan perintah CLOSE. Syntax :
CLOSE #filenumber

Contoh :

CLOSE #1

menutup file nomor 1. Contoh :


'PROGRAM MENGISI DATA KE FILE SISWA.DAT OPEN "SISWA.DAT" FOR APPEND AS #1 DO PRINT "DATA SISWA KE -";I INPUT "NO.INDUK :",NOINDUK$ IF NOINDUK$ <> "" THEN INPUT "NAMA :",NAMA$ INPUT "TEORI :",TEORI INPUT "PRAKTEK :",PRAKTEK WRITE #1,NOINDUK$,NAMA$,TEORI ENDIF LOOP UNTIL NOINDUK$ = "" CLOSE #1 END 'PROGRAM BACA DATA DARI SISWA.DAT DAN MENCETAK KE LAYAR CLS

Indoprog

39

Dasar Pemrograman

Oleh : Hendra, ST.

OPEN "SISWA.DAT" FOR INPUT AS #1 PRINT "-------------------------------------------------------------------" PRINT "NO.INDUK NAMA TEORI PRAKTEK RATA-RATA LULUS " PRINT "-------------------------------------------------------------------" POLA$="\ \ \ \ ###.## ###.## ###.## \ \ " VIEW PRINT 4 TO 23 WHILE NOT EOF(1) INPUT #1, NO_INDUK$,NAMA$,TEORI,PRAKTEK RATA = (TEORI+PRAKTEK)/2 IF RATA < 60 THEN LULUS$="TIDAK" ELSE LULUS$ = "YA" ENDIF PRINT USING POLA$;NO_INDUK$;NAMA$;TEORI;PRAKTEK;RATA;LULUS$ WEND CLOSE #1 END Latihan

Buatlah program yang dapat menyimpan data latihan Modul 10 ke Siswa.dat.

Indoprog

40

Dasar Pemrograman

Oleh : Hendra, ST.

Modul 11, PENGOLAHAN FILE ACAK


Pada file sequential pengolahan datanya bersifat FIFO, tetapi dalam pengolahan data kadangkadang diperlukan proses pengolahan yng sifatnya acak sehingga pengolahannya dapat dilakukan dengan cepat dan sederhana. File sequential banyak digunakan pada ekspor/impor data antar sistem dimana format pada sistem yang satu tidak dikenali oleh sistem lain, sehingga data dari suatu sistem perlu diekspor dalam bentuk teks, kemudian diimpor kembali oleh sistem lain. Pada pengolahan seperti ini tentu saja proses pengolahannya bersifat FIFO. Pengolahan data yang membutuhkan pencarian, pengurutan dan perbaikan data tentu saja sulit menggunakan proses pengolahan FIFO, karena akan menggunakan sumber daya yang besar dan menjadi rumit. Pada pengolahan data seperti ini sangat dibutuhkan proses pemasukan maupun pengambilannya berdasarkan alamat data tersebut. Agar data dapat diambil dengan cepat, tentu saja dalam penyimpannannya membutuhkan keteraturan, yaitu setiap data memiliki ukuran yang sama, sehingga alamat data dapat didapatkan dengan cepat.

FILE ACAK
File acak didalam pengolahannya data ditempatkan dalam bentuk record yang memiliki panjang yang tertentu. Dengan sistem pengolahan yang demikian suatu record data dapat langsung dibaca ataupun ditulis tanpa harus memproses record sebelumnya. Dalam hal ini type data record akan berperan. Contoh :
TYPE SISWA NOINDUK NAMA TEORI PRAKTEK RATA END TYPE Dim DAT As AS AS AS AS AS STRING * 10 STRING * 15 SINGLE SINGLE SINGLE

SISWA

PERINTAH MEMBUKA FILE ACAK


Sebelum suatu file randon dapat digunakan harus dibuka, jika file tersebut belum ada, maka akan dibuat yang baru. Adapun perintah membuka file ACAK adalah sebagai berikut :
OPEN namafile FOR RANDOM AS [#]filenum [LEN=reclen]

Contoh :
OPEN "SISWA.REC" FOR RANDOM AS #1 LEN = LEN(DAT)

Membuka file "siswa.rec" untuk diolah secara acak sebagai file nomor 1 dan ukuran tiap record adalah sama dengan ukuran variabel DAT. Indoprog 41

Dasar Pemrograman

Oleh : Hendra, ST.

Mendapatkan jumlah record pada file ACAK yang telah terbuka.


JlhRec = LOF(1)/LEN(DAT)

Jumlah record dalam file ACAK adalah ukuran keseluruhan file ACAK dibagi dengan ukuran tiap record.

PERINTAH INPUT/OUTPUT PADA FILE ACAK


Perintah menulis data
PUT [#]filenum[,nomorrecord][,variable] Contoh : DAT.NOINDUK DAT.NAMA DAT.TEORI DAT.PRAKTEK DAT.RATA = = = = = "920403024" "Hendra" 70 80 (DAT.TEORI+DAT.PRAKTEK)/2

PUT #1,JlhRec+1,DAT

Menyimpan data dari variabel DAT ke file ACAK nomor 1, sebagai (JlhRec+1).

record baru pada akhir file

PERINTAH MEMBACA DATA


GET [#]filenum[,nomorrecord][,variabel]

Contoh :
GET #1,1,DAT

Membaca data record nomor 1 dari file ACAK nomor 1 ke variabel DAT.

PERINTAH MENUTUP FILE ACAK


Setelah selesai digunakan, file ACAK perlu ditutup untuk memastikan semua data ditulis ke media penyimpanan, dan memberikan indikator EOF. Contoh :
CLOSE #1

Menutup file acak nomor 1. Contoh sederhana program pengolahan data dengan file ACAK.
'PROGRAM MENGISI DATA KE FILE SISWA.REC

Indoprog

42

Dasar Pemrograman
TYPE SISWA NOINDUK AS STRING * 10 NAMA AS STRING * 15 TEORI AS SINGLE PRAKTEK AS SINGLE RATA AS SINGLE END TYPE DIM DAT AS SISWA DIM NOINDUK AS STRING OPEN "SISWA.REC" FOR RANDOM AS #1 LEN = LEN(DAT) RECNO = LOF(1)/LEN(DAT) DO PRINT "DATA SISWA KE -";I INPUT "NO.INDUK :",NOINDUK IF NOINDUK <> "" THEN DAT.NOINDUK = NOINDUK INPUT "NAMA :",DAT.NAMA INPUT "TEORI :",DAT.TEORI INPUT "PRAKTEK :",DAT.PRAKTEK DAT.RATA = (DAT.TEORI+DAT.PRAKTEK)/2 PUT #1,RECNO+1,DAT RECNO = RECNO + 1 ENDIF LOOP UNTIL NOINDUK = "" CLOSE #1 END 'PROGRAM MENGURUT DATA DI FILE SISWA.REC TYPE SISWA NOINDUK AS STRING * 10 NAMA AS STRING * 15 TEORI AS SINGLE PRAKTEK AS SINGLE RATA AS SINGLE END TYPE DIM DAT1 AS SISWA DIM DAT2 AS SISWA OPEN "SISWA.REC" FOR RANDOM AS #1 LEN = LEN(DAT) JD = LOF(1)/LEN(DAT) FOR I = (JD-1) TO 1 STEP -1 Sempurna = 1 FOR J = 1 TO I STEP 1 GET #1,J,DAT1 GET #1,J+1,DAT2 IF DAT1.NAMA > DAT2.NAMA THEN PUT #1,J,DAT2 PUT #1,J+1,DAT1 Sempurna = 0 ENDIF NEXT J If Sempurna = 1 Then I = 0 End IF NEXT I CLOSE #1 END

Oleh : Hendra, ST.

Indoprog

43

Dasar Pemrograman

Oleh : Hendra, ST.

PROGRAM BACA DATA DARI SISWA.REC DAN MENCETAK KE LAYAR CLS TYPE SISWA NOINDUK AS STRING * 10 NAMA AS STRING * 15 TEORI AS SINGLE PRAKTEK AS SINGLE RATA AS SINGLE END TYPE DIM DAT AS SISWA OPEN "SISWA.REC" FOR RANDOM AS #1 LEN = LEN(DAT) JD = LOF(1)/LEN(DAT) PRINT -------------------------------------------------------------------" PRINT "NO.INDUK NAMA TEORI PRAKTEK RATA-RATA ULUS " PRINT "-------------------------------------------------------------------" POLA$="\ \ \ \ ###.## ###.## ###.## \ \ " VIEW PRINT 4 TO 23 FOR I = 1 TO JD STEP 1 GET #1,I,DAT IF DAT.RATA < 60 THEN LULUS$="TIDAK" ELSE LULUS$ = "YA" PRINT USING POLA$;DAT.NOINDUK;DAT.NAMA$;DAT.TEORI; DAT.PRAKTEK;DAT.RATA;LULUS$ NEXT I CLOSE #1 END LATIHAN Buatlah program yang dapat menyimpan data latihan Modul 10 ke Siswa.rec.

Indoprog

44

Dasar Pemrograman

Oleh : Hendra, ST.

Modul 12, PENGOLAHAN FILE BINARY


Selain pengolahan data Sequential dan Random, Basic juga menyediakan pengolahan yang bersifat Binary. Pada pengolahan yang bersifat Binary, file dapat dibaca/ditulis secara per-Byte pada posisi yang diinginkan, sehingga tidak terikat kepada urutan maupun struktur data. Pengolahan yang bersifat Binary banyak digunakan untuk keperluankeperluan khusus yang membutuhkan akses langsung ke satuan data di tingkat Byte. Misalnya membuat program Enkripsi dan Dekripsi file, pada proses Enkripsi, isi suatu file disandikan byte-per-byte sehingga tidak dapat dikenali lagi secara normal oleh sistem yang membuatnya. Agar isi file tersebut dapat dikenali kembali, maka diperlukan proses Dekripsi yang mengembalikannya ke keadaan semula. Pengolahan yang bersifat Binary juga banyak digunakan pada pembuatan program AntiVirus, Crack, Game Cheat yang membutuhkan akses ke byte level.

PERINTAH MEMBUKA FILE BINARY


Seperti pada pengolahan file umumnya, sebelum digunakan file binary harus dibuka dengan perintah sebagai berikut :
OPEN namafile FOR BINARY AS [#]filenum

Contoh :
OPEN "Sandi.bin" FOR BINARY AS #1

Membuka file "Sandi.bin" untuk diolah secara binary sebagai file nomor 1. Mendapatkan jumlah byte pada file binary yang telah terbuka.
JlhByte = LOF(1)

Fungsi LOF (Length Of File) akan mengembalikan ukuran file binary dalam ukuran byte.
Catatan : 1 KB = 1024 Byte, 1 MB = 1024*1024

PERINTAH INPUT/OUTPUT PADA FILE BINARY


Perintah menulis data
PUT [#]filenum[,posisi][,variable]

Contoh :
MyData = 10 PUT #1, 101, MyData Menulis karakter ASCII 10 (line feed) pada posisi byte ke 101 dalam file nomor 1.

Contoh Lain : Indoprog 45

Dasar Pemrograman

Oleh : Hendra, ST.

Dim MyChar As String*1 MyChar = Chr$(10) Put #1, 101, MyChar

Perintah membaca data


GET [#]filenum[,posisi][,variabel]

Contoh :
Dim MyChar As String*1 GET #1, 101, MyChar

Membaca data byte posisi ke dari file nomor 1 ke variabel MyChar.

PERINTAH MENUTUP FILE BINARY


Setelah selesai digunakan, file Binary perlu ditutup untuk memastikan semua data ditulis ke media penyimpanan, dan memberikan indikator EOF. Nb. Untuk mempercepat proses I/O, sistem operasi menyediakan memory buffer sebagai tempat pembacaan dan penulisan sementara. Perintah Close untuk memastikan semua data dari buffer benar-benar ditulis ke media penyimpanan. Contoh :
CLOSE #1

Menutup file binary nomor 1. Contoh :


'Program Enkripsi dan Dekripsi dengan kunci NOT DIM Source AS STRING DIM Target AS STRING DIM FSize AS LONG DIM MyChar AS STRING * 1 CLS PRINT "Program Enkripsi/Dekripsi Data" PRINT "Menggunakan operator NOT" PRINT "------------------------" INPUT "Masukkan Source :", Source INPUT "Masukkan Target :", Target IF Source = Target THEN PRINT "Nama file source tidak boleh sama dengan target" ELSE OPEN Source FOR BINARY AS #1 'Buka source sebagai 1 OPEN Target FOR BINARY AS #2 'Buka target sebagai 2 FSize = LOF(1) 'Mendapatkan ukuran file 1

Indoprog

46

Dasar Pemrograman
FOR I = 1 TO FSize GET #1, I, MyChar

Oleh : Hendra, ST.

'Baca byte posisi ke i 'dari source MyChar = CHR$(255 - ASC(MyChar)) 'Enkripsi dengan NOT PUT #2, I, MyChar 'Tulis ke posisi ke i 'Pada Target

NEXT I CLOSE #1 CLOSE #2 PRINT PRINT "Proses Selesai" END IF END

Indoprog

47

Dasar Pemrograman

Oleh : Hendra, ST.

Modul 13, PENANGANAN ERROR


Sebagai manusia normal tidak akan terlepas dari berbagai kesilapan, demikian juga seorang programmer dalam pengembangan program dapat saja berbuat berbagai kesalahan maupun kesilapan. Berdasarkan jenisnya kesalahan dalam pemrograman terbagi menjadi tiga yaitu : 1. Syntax Error, adalah kesalahan yang disebabkan oleh kesalahan tata cara penulisan tanda baca, kesalahan pemakaian operator dan nilai. Kesalahan jenis ini akan dengan mudah dideteksi oleh kompiler maupun interpreter. 2. Logical Error, adalah kesalahan yang disebabkan oleh kesalahan logika maupun model atau metode yang digunakan untuk pemrosesan data, sehingga menyebabkan informasi yang dihasilkan menjadi salah. Kesalahan ini tidak dapat dideteksi oleh kompiler maupun interpreter, kesalahan ini disadari setelah melihat penyimpanan pada saat proses maupun hasil proses. Contoh :
N = 1 Do Print N N = N + 2 Loop Until N = 10

Program diatas tidak pernah berhenti. karena nilai N tidak pernah sama dengan 10. Kesalahan Logika dapat juga terjadi karena kesalahan pengetikan nama variabel, dan ini merupakan salah satu kelemahan bahasa pemrograman Basic, jika dibandingan dengan Pascal muapun C Language dimana variabel harus dideklarasikan terlebih dahulu. Contoh :
GajiPokok = 1000000 Bonus = 10000 GajiBersih = GajiPokol + Bonus Print GajiBersih

'Hasilnya 10000, bukan 1010000

3. Runtime Error, adalah kesalahan yang disebabkan oleh tidak tersedianya sumber daya atau kondisi yang normal bagi program untuk berjalan dengan baik, misalnya kekurangan memori komputer, disk full, atau pintu drive tidak terkunci, dll. Sebagai programmer yang baik, tentu saja harus mampu menghasilkan program dengan tingkat kesalahan yang minimal, dan usaha untuk meminimalisasi tingkat kesalahan program disebut proses debug. Pada Basic tersedia berbagai fasilitas untuk menangani kesalahan yang mungkin dilakukan oleh programmer, misalnya :

Indoprog

48

Dasar Pemrograman

Oleh : Hendra, ST.

4. Fasilitas Syntax Checking pada menu Option yang sangat berguna untuk mendeteksi kesalahan jenis "Syntax Error". 5. Menu Debug, yang memiliki fasilitas yang sangat bermanfaat untuk melacak Logical Error, tetapi keberhasilannya sangat tergantung kepada pemahaman programmer akan masalah yang terjadi. Adapun fasilitas pada menu Debug adalah sebagai berikut : Step atau F8, digunakan untuk menjalankan program baris per baris, sehingga programmer dapat mengamati alur program secara baris perbaris sambil mengevaluasi hasil output yang dihasilkan. Procedure Step atau F10, digunakan untuk menjalankan program baris per baris tanpa masuk ke bagian sub rutin, artinya sub rutin dianggap sebagai satu baris dari program. Fasilitas ini digunakan jika programmer telah yakin pada kebenaran sub rutin yang dibuat, sehingga proses pencarian lebih terfokus pada bagian tertentu. Trace On, digunakan untuk memberikan sorotan pada baris yang sedang dijalankan. Toggle BreakPoint, digunakan untuk menandai baris dimana proses eksekusi Pause dan masuk ke modus Step, fasilitas ini dapat digunakan programmer untuk memperkecil jangkauan pencarian kesalahan dengan modus Step karena tidak perlu melakukan Step dari awal, tetapi Step dilakukan mulai pada baris dimana sumber kesalahan dicurigai. Clear Breakpoint, digunakan untuk menghapus semua Breakpoint. On Error Goto label, digunakan untuk error handling, dimana jika terjadi kesalahan, maka proses program dialihkan ke label tertentu, dan jenis kesalahan dapat ditelusuri dari fungsi ERR yang akan mengembalikan nomor kesalahan, dan proses dapat diulangi dengan RESUME atau RESUME NEXT , dan anda dapat juga menggunakan On Error Resume Next untuk mengabaikan kesalahan. Fasilitas ini cocok untuk mengatasi Run Time Error, Contoh :
ON ERROR GOTO Salah OPEN "A:Sumber.Dat" FOR INPUT AS #1 DO WHILE NOT EOF(1) LINE INPUT #1, Baris$ PRINT Baris$ LOOP END Salah: SELECT CASE ERR CASE 53 PRINT "File Sumber.Dat tidak ada" END CASE 71 PRINT "Drive tidak siap, [U]lang, [B]atal"; INPUT tanya$ IF tanya$ = "U" OR tanya$ = "u" THEN RESUME ELSE END END IF

Indoprog

49

Dasar Pemrograman
END SELECT END

Oleh : Hendra, ST.

Catatan : Nomor Error dapat dilihat pada bagian Help Basic "Runtime Error Code"

Indoprog

50

Dasar Pemrograman Visual Basic

Hendra, S.T.

Modul 1, Pengenalan Visual Basic


Visual Basic adalah salah suatu development tools untuk membangun aplikasi dalam lingkungan Windows. Dalam pengembangan aplikasi, Visual Basic menggunakan pendekatan Visual untuk merancang user interface dalam bentuk form, sedangkan untuk kodingnya menggunakan dialek bahasa Basic yang cenderung mudah dipelajari. Visual Basic telah menjadi tools yang terkenal bagi para pemula maupun para developer dalam pengembangan aplikasi skala kecil sampai ke skala besar. Dalam lingkungan Window's User-interface sangat memegang peranan penting, karena dalam pemakaian aplikasi yang kita buat, pemakai senantiasa berinteraksi dengan Userinterface tanpa menyadari bahwa dibelakangnya berjalan instruksi-instruksi program yang mendukung tampilan dan proses yang dilakukan. Pada pemrograman Visual, pengembangan aplikasi dimulai dengan pembentukkan user interface, kemudian mengatur properti dari objek-objek yang digunakan dalam user interface, dan baru dilakukan penulisan kode program untuk menangani kejadiankejadian (event). Tahap pengembangan aplikasi demikian dikenal dengan istilah pengembangan aplikasi dengan pendekatan Bottom Up.

IDE Visual Basic


Langkah awal dari belajar Visual Basic adalah mengenal IDE (Integrated Developement Environment) Visual Basic yang merupakan Lingkungan Pengembangan Terpadu bagi programmer dalam mengembangkan aplikasinya. Dengan menggunakan IDE programmer dapat membuat user interface, melakukan koding, melakukan testing dan debuging serta menkompilasi program menjadi executable. Penguasaan yang baik akan IDE akan sangat membantu programmer dalam mengefektifkan tugas-tugasnya sehingga dapat bekerja dengan efisien.

Menjalankan IDE
Salah satu cara untuk mengaktifkan IDE Visual Basic adalah menjalankannya dari Menu Start, pilih menu Command, dan pilih Microsoft Visual Basic 6.0 dan akhirnya Microsoft Visual Basic 6.0.

Gambar 1-1. Mengaktifkan IDE Visual Basic 6.0

Indoprog

Dasar Pemrograman Visual Basic

Hendra, S.T.

Catatan : Seperti aplikasi Windows umumnya, anda dapat juga mengaktifkan IDE Visual Basic dengan melakukan open terhadap file yang berkaitan dengan Visual Basic, misalnya file *.vbp yang merupakan file project dari Visual Basic.

Memilih jenis Project


Sesaat anda aktif di IDE Visual Basic, maka anda akan dihadapkan kepada suatu pilihan terhadap jenis Project yang ingin anda buat sebagaimana yang ditunjukan oleh Gambar 1-2. Sebagai langkah awal dari proses belajar adalah memilih project Standard EXE.

Gambar 1-2. Dialog box New Project ditampilkan sesaat anda menjalankan IDE Visual Basic 6.

Jendela IDE
IDE Visual Basic 6 menggunakan model MDI (Multiple Document Interface). Berikut ini adalah gambar yang menunjukan bagian-bagian dan nama-nama jendela yang dapat tampil pada IDE Visual Basic. Mungkin pada IDE anda hanya ditampilkan sebagian

Indoprog

Dasar Pemrograman Visual Basic

Hendra, S.T.

jendela dibandingkan dengan Gambar 1-3 anda tidak perlu terkejut, karena penampilan dari jendela-jendela tersebut dapat diatur dengan perintah pada menu View. Sebagai langkah awal dari proses belajar, tidak semua jendela akan kita gunakan, tetapi hanya beberapa yang penting, sedangkan yang lainnya bersifat khusus.

Gambar 1-3. IDE Visual Basic dengan jendela-jendela yang terbuka. Sebagaimana dengan proses belajar ini, kita akan fokus pada beberapa jendela yang penting terlebih dahulu sehingga konsentrasi tidak menjadi pecah, dan peserta belajar menjadi bingung. Adapun jendela-jendela yang perlu anda perhatikan adalah sebagai berikut :

Menu Bar, digunakan untuk memilih tugas-tugas tertentu seperti menyimpan project, membuka project, dll

Indoprog

Dasar Pemrograman Visual Basic


Hendra, S.T.

Main Toolbar, digunakan untuk melakukan tugas-tugas tertentu dengan cepat. Jendela Project, jendela ini berisi gambaran dari semua modul yang terdapat dalam aplikasi anda. Anda dapat menggunakan icon Toggle Folders untuk menampilkan modul-modul dalam jendela tersebut secara di group atau berurut berdasarkan nama. Anda dapat menggunakan Ctrl+R untuk menampilkan jendela project, ataupun menggunakan icon Project Explorer. Jendela Form Designer, jendela ini merupakan tempat anda untuk merancang user interface dari aplikasi anda. Jadi jendela ini menyerupai kanvas bagi seorang pelukis. Jendela Toolbox, jendela ini berisi komponen-komponen yang dapat anda gunakan untuk mengembangkan user interface. Jendela Code, merupakan tempat bagi anda untuk menulis koding. Anda dapat menampilkan jendela ini dengan menggunakan kombinasi Shift-F7. Jendela Properties, merupakan daftar properti-properti object yang sedang terpilih. Sebagai contohnya anda dapat mengubah warna tulisan (foreground) dan warna latarbelakang (background). Anda dapat menggunakan F4 untuk menampilkan jendela properti. Jendela Color Palette, adalah fasilitas cepat untuk mengubah warna suatu object. Jendela Form Layout, akan menunjukan bagaimana form bersangkutan ditampilkan ketika runtime.

Jika jendela-jendela tersebut tidak ada, anda dapat memunculkannya dengan Menu View dan pilih :
Project Explorer (Ctrl+R) Properties Windows (F4) Form Layout Windows Property Pages (Shift+F4) Toolbox Color Pallete Toolbars

Toolbox
Jendela Toolbox merupakan jendela yang sangat penting bagi anda. Dari jendela ini anda dapat mengambil komponen-komponen (object) yang akan ditanamkan pada form untuk membentuk user interface.

Indoprog

Dasar Pemrograman Visual Basic

Hendra, S.T.

Gambar 1-3. Toolbox Visual Basic 6 dengan semua kontrol intrinsic. Adapun secara garis besar fungsi dari masing-masing intrinsic kontrol tersebut adalah sebagai berikut :

Pointer bukan merupakan suatu kontrol; gunakan icon ini ketika anda ingin memilih kontrol yang sudah berada pada form. PictureBox adalah kontrol yang digunakan untuk menampilkan image dengan format: BMP, DIB (bitmap), ICO (icon), CUR (cursor), WMF (metafile), EMF (enhanced metafile), GIF, dan JPEG. Label adalah kontrol yang digunakan untuk menampilkan teks yang tidak dapat diperbaiki oleh pemakai.

Indoprog

Dasar Pemrograman Visual Basic


Hendra, S.T.

TextBox adalah kontrol yang mengandung string yang dapat diperbaiki oleh pemakai, dapat berupa satu baris tunggal, atau banyak baris. Frame adalah kontrol yang digunakan sebagai kontainer bagi kontrol lainnya. CommandButton merupakan kontrol hampir ditemukan pada setiap form, dan digunakan untuk membangkitkan event proses tertentu ketika pemakai melakukan klik padanya. CheckBox digunakan untuk pilihan yang isinya bernilai yes/no, true/false. OptionButton sering digunakan lebih dari satu sebagai pilihan terhadap beberapa option yang hanya dapat dipilih satu. ListBox mengandung sejumlah item, dan user dapat memilih lebih dari satu (bergantung pada property MultiSelect). ComboBox merupakan konbinasi dari TextBox dan suatu ListBox dimana pemasukkan data dapat dilakukan dengan pengetikkan maupun pemilihan. HScrollBar dan VScrollBar digunakan untuk membentuk scrollbar berdiri sendiri. Timer digunakan untuk proses background yang diaktifkan berdasarkan interval waktu tertentu. Merupakan kontrol non-visual. DriveListBox, DirListBox, dan FileListBox sering digunakan untuk membentuk dialog box yang berkaitan dengan file. Shape dan Line digunakan untuk menampilkan bentuk seperti garis, persegi, bulatan, oval. Image berfungsi menyerupai image box, tetapi tidak dapat digunakan sebagai kontainer bagi kontrol lainnya. Sesuatu yang perlu diketahui bahwa kontrol image menggunakan resource yang lebih kecil dibandingkan dengan PictureBox Data digunakan untuk data binding OLE dapat digunakan sebagai tempat bagi program eksternal seperti Microsoft Excel, Word, dll.

Mengatur Lingkungan Kerja Visual Basic


Pengaturan IDE Visual Basic dapat dilakukan dengan menu Tools, Option, pengaturan dapat dilakukan sesuai dengan selera dan kebiasaan programmer sehingga dapat bekerja dengan baik dan efektif. Mulai Visual Basic 5.0, IDE Visual Basic memperkenalkan MDI Developement Environment, dan beberapa hal dapat diatur dengan menggunakan menu Tools, Option adalah sebagai berikut :

Mengatur Editor

Indoprog

Dasar Pemrograman Visual Basic

Hendra, S.T.

Catatan penulis: Sebagai programmer pemula, penulis menyarankan agar senantiasa mengaktifkan Require Variable Declaration yang berarti bahwa setiap variabel yang dipakai dalam program yang akan kita buat harus dideklarasikan terlebih dahulu.

Mengatur Format Editor

Mengatur hal-hal yang General

Indoprog

Dasar Pemrograman Visual Basic

Hendra, S.T.

Mengatur Docking Jendela

Mengatur Environment

Indoprog

Dasar Pemrograman Visual Basic

Hendra, S.T.

Mengatur SDI Development Environment atau MDI

Indoprog

Dasar Pemrograman Visual Basic

Hendra, S.T.

Catatan Penulis : Pada latihan berikut ini mengandung pembelajaran step by step, tetapi sebelum anda memulai latihan ini sebaiknya anda membaca semua tulisan modul ini. Penulis tidak akan berpanjang lebar dengan teori-teori pemrograman, tetapi sebaiknya kita dapat langsung bekerja dan memahami dasar-dasar dari Visual Basic. Semua latihan ini dirancang berdasarkan pengalaman penulis dalam pengajaran untuk proses pembelajaran yang efektif

Latihan 1
Judul : Mengenal IDE Visual Basic
Petunjuk, sebaiknya lembar latihan ini anda cetak ke printer. 1. Aktifkan IDE Visual Basic anda dengan memilih Start, kemudian Programs, kemudian Microsoft Visual Basic 6, dan Microsoft Visual Basic 6.

2. Pada dialog box New Project, pilihlah Standard EXE, kemudian klik pada Open

3. Pada hadapan anda akan muncul IDE Visual Basic, dan kenali masing-masing bagian berikut : Indoprog

10

Dasar Pemrograman Visual Basic


Hendra, S.T.

Menu Bar Main Toolbar Jendela Toolbox Jendela Form Jendela Project Explorer Jendela Properties

4. Sekarang Perhatikan Jendela Toolbox, dan kenali kontrol-kontrol berikut : Pointer PictureBox Label Textbox Frame CommandButton Checkbox OptionButton Combobox Listbox Image

Indoprog

11

Dasar Pemrograman Visual Basic

Hendra, S.T.

5. Sekarang Perhatikan Jendela Project Explorer Perhatikan Icon-icon berikut : Icon Fungsi View Code View Object Toggle Forder Lakukan klik pada Form1 (Form1), dan klik pada icon View Code, maka akan ditampilkan Jendela Code

Lakukan klik pada icon View Object, maka akan ditampilkan Form1

6. Periksalah setting IDE Visual Basic, dan aktifkan hal-hal berikut pada menu Tools, Option :

Auto Syntax Check, secara otomatis memeriksa kebenaran pengetikan program. Require Variable Declaration, secara otomatis menambahkan perintah Option Explicit pada form dan module.

Indoprog

12

Dasar Pemrograman Visual Basic

Hendra, S.T.

Auto List Member, secara otomatis menampilkan syntax penulisan perintah dan fungsi

Keluar dari IDE Visual Basic, dengan memilih menu File, pilih Exit, atau menekan Alt+Q

Indoprog

13

Dasar Pemrograman Visual Basic

Hendra, S.T.

Modul 2, Bahasa Visual Basic Aplication


Dasar dari pemrograman pada Visual Basic adalah VBA yang menggunakan dialek Basic. Bagi anda yang pernah belajar bahasa Basic, tidak akan sulit untuk belajar VBA. Jadi penguasaan terhadap VBA merupakan syarat mutlak bagi programmer yang ingin mendalami pemrograman Visual Basic.

Type Variabel
Dibandingkan dengan type data yang terdapat pada bahasa basic, maka pada VBA, type data yang disediakan lebih banyak, seperti type Currency, Decimal, Object, dan Variant.. Variant merupakan type variabel yang istimewa, karena dapat berubah dari satu type ke type yang lain, sesuai dengan evaluasi ekspresi oleh Visual Basic. Ketepatan pemilihan type variabel akan sangat menentukan pemakaian resources oleh aplikasi yang dihasilkan, adalah tugas programmer untuk memilih type yang sesuai untuk menghasilkan program yang efisien dan berperfomance tinggi.
Type Data Byte Boolean Integer Long Single Double Currency Decimal Date Object String (panjang variabel) String (panjang tetap) Variant (dengan angka) Ukuran Storage 1 byte 2 byte 2 byte 4 byte 4 byte 8 byte 8 byte 14 byte 8 byte 4 byte panjang dari string 16 byte Jangkuan 0 s/d 255 True atau False -32,768 s/d 32767 -2,147,483,648 s/d 2,147,483,647 -3.402823E38 s/d -1.401298E-45 (-) 1.401298E-45 s/d 3.402823E38 (+) -1.79769313486232E308 s/d -4.94065645841247E-324 (-) -922,337,203,685,477.5808 s/d 922,337,203,685,477.5807 +/-79,228,162,514,264,337,593,543,950,335 1 Januari 100 s/d 31 Desember 9999 Mengacu pada objek tertentu 1 sampai lebih kurang 65,400 Sembarang angka sampai jangkauan jenis Double

10 byte + panjang string 0 sampai lebih kurang 2 milyar

Variant (dengan karakter) 22 byte + panjang string Sama dengan jangkauan variabel String

Tabel 1-1. Type variabel, pemakaian storage dan jangkauan masing-masing Catatan penulis : Sebagai awal proses belajar, anda tidak perlu terlalu dipusingkan oleh banyaknya tipe data yang disediakan oleh Visual Basic, yang penting adalah kalau anda membutuhkan tipe data berupa kondisi benar (true) atau salah (false), anda dapat menggunakan tipe Boolean. Kalau anda membutuhkan bilangan bulat (integer), anda dapat memilih salah satu dari byte, integer, long sesuai dengan jangkauan yang dibutuhkan, sedangkan kalau anda membutuhkan tipe pecahkan (floating point) anda dapat memilih single, double, dan decimal sesuai dengan ketelitian yang dibutuhkan. Khusus untuk uang dapat digunakan Indoprog

14

Dasar Pemrograman Visual Basic

Hendra, S.T.

currency, khusus untuk tanggal dan waktu dapat digunakan date, dan untuk kalimat dapat digunakan string. Ada apa dengan Variant ? Variant merupakan tipe data khusus yang sangat digemari oleh programmer pemula, karena variabel dengan tipe data ini dapat menampung data dari semua tipe variabel yang ada tanpa menyebabkan kesalahan pada saat kompilasi maupun runtime. Tetapi penulis menyarankan untuk tidak terlena dengan tipe data ini, karena pada pengembangan selanjutnya (VB.net), tipe data ini tidak didukung lagi, karena tipe ini dapat menyebabkan bugs jika program telah berkembang menjadi besar.

Operator Pada Visual Basic dan urutan operasinya


Visual basic meyediakan operator aritmatika, komparasi dan logika, salah satu hal yang harus dipahami oleh programmer adalah tata urutan operasi dari masing-masing operator tersebut sehingga mampu membuat ekspresi yang akan menghasilkan nilai yang benar, Tabel 1-2, menunjukkan operator dan urutan operasinya dari atas kebawah. Contoh : A=1+2*3 B = (1 + 2) * 3
Aritmatika Pangkat (^) Negatif (-) Kali dan Bagi (*, /) Pembagian bulat (\) Sisa Bagi (Mod) Tambah dan Kurang (+,-) Pengabungan String (&)

'Akan menghasilkan 7 'Akan menghasilkan 9


Komparasi Sama (=) Tidak sama (<>) Kurang dari (<) Lebih dari (>) Kurang dari atau sama (<=) Lebih dari atau sama (>=) Like Logika Not And Or Xor Eqv Imp

Tabel 1-2. Operator pada Visual Basic dan urutan operasi dari atas ke bawah Catatan penulis : Salah satu bugs yang sering terjadi pada programmer pemula adalah kesalahan dalam pemakaian operator karena kurangnya memahami urutan operasi.

Operator Like
Salah satu operator yang menarik untuk dibahas adalah operator like, karena operator ini tidak tersedia pada bahasa BASIC. Operator digunakan untuk operasi pencocokan pola pada string yang akan sangat membantu programmer. Indoprog

15

Dasar Pemrograman Visual Basic

Hendra, S.T.

Syntax : result = string Like pattern


Karakter dalam pola ? * # [charlist] [!charlist] Penyamaan dalam string Sembarang karakter tunggal Nol atau lebih karakter Sembarang digit tunggal (0-9) Sembarang karakter yang berada dalam charlist Sembarang karakter yang tidak berada dalam charlist

Tabel 1-3. Character dalam pencocokan pola pada operator Like Contoh :

MyCheck = "aBBBa" Like "a*a" MyCheck = "F" Like "[A-Z]" MyCheck = "F" Like "[!A-Z]" MyCheck = "a2a" Like "a#a" MyCheck = "aM5b" Like "a[L-P]#[!c-e]" MyCheck = "BAT123khg" Like "B?T*" MyCheck = "CAT123khg" Like "B?T*"

' Returns True. ' Returns True. ' Returns False. ' Returns True. ' Returns True. ' Returns True.

Deklarasi Variabel
Visual Basic memungkinkan kita untuk menggunakan variabel tanpa deklarasi. Tetapi hal ini adalah kurang baik untuk praktek pemrograman yang terstruktur dan menghindari kesalahan pengolahan yang diakibatkan oleh kesalahan dalam pengetikkan nama variabel. Agar setiap variabel yang digunakan harus dideklarasikan, dapat digunakan perintah : Option Explicit Pada setiap awal module, atau pada menu Tools, pilih Option, pilih tab Editor, buat tanda check pada Require Variable Declaration. Deklarasi variabel pada Visual Basic dapat dilakukan dengan Keyword berikut :
Keyword Public Private Dim Static Digunakan pada Berlaku pada level modul Berlaku pada level modul Berlaku pada level modul dan level procedure Berlaku pada level procedure

Tabel 1-4. Keyword pada deklarasi variabel

Indoprog

16

Dasar Pemrograman Visual Basic

Hendra, S.T.

Syntax : <keyword> NamaVariabel [As TypeVariabel] Contoh : Dim Nama As String Catatan penulis : Penjelasan tentang Public, Private, dan Static akan menjadi lebih mudah setelah anda mempelajari topik Module, Sub dan Function.

Konvensi penamaan dalam Visual Basic


Ketika anda menulis Code Visual Basic, anda mendeklarasikan banyak elemen (Sub dan Function procedures, variables, constants,dan lainnya). Nama dari procedure, variabel, dan konstanta yang mana anda deklarasi pada Visual Basic harus mengikuti petunjuk berikut :

Harus dimulai dengan suatu Huruf Tidak dapat mengandung titik atau spesial karakter Tidak dapat lebih dari 255 huruf, nama dari kontrol, form, class, dan module tidak dapat melebihi 40 karakter. Tidak dapat sama dengan keywords yang tercadang.

Keyword yang tercadang adalah kata yang Visual Basic gunakan sebagai bagian dari bahasanya. Ini terdiri dari predefined statements (seperti If dan Loop), function (seperti Len dan Abs), dan operator (seperti Or dan Mod).

Deklarasi Variabel

Deklarasi variabel pada bagian deklarasi (general declaration) di suatu form, standard, atau class module, dari pada dalam suatu procedure, membuat variabel itu berlaku untuk semua procedure dan function dalam module tersebut Deklarasi variabel dengan menggunakan keyword Public membuatnya berlaku pada keseluruhan aplikasi anda. Deklarasi suatu variabel lokal dengan menggunakanan keyword Static akan menyimpan nilainya ketika suatu procedure berakhir.

Deklarasi Implicit
Anda tidak perlu mendeklarasikan suatu variabel sebelum menggunakan, tetapi fasilitas ini tidak disarankan oleh penulis, karena dapat mengakibatkan bug-bug tersembunyi

Indoprog

17

Dasar Pemrograman Visual Basic

Hendra, S.T.

karena pemakaian variabel yang tidak konsisten dan kemungkinan kesalahan pengetikan nama variabel. Defaultnya Visual Basic menggunakan Deklarasi Implicit.

Deklarasi Explicit
Untuk mencegah kesalahan mengetik variabel, dan Visual Basic akan selalu memberikan peringatan jika menemukan nama yang tidak dideklarasikan terlebih dahulu sebagai suatu variabel. Catatan : Pernyataan Option Explicit hanya bekerja per-module, sehingga harus diletakkan pada bagian deklarasi pada setiap form, dan class module yang mana anda ingin Visual Basic memaksakan suatu explicit variabel deklarasi

Mengenal Struktur Kendali


Struktur kendali memungkinkan anda untuk mengatur jalannya program anda, Jika membiarkan tanpa di periksa oleh statement control-flow, suatu logika program akan berjalan dari kiri ke kanan dan dari atas kebawah. Hanya program yang sangat sederhana dapat ditulis tanpa statement control-flow.

Struktur Keputusan
Struktur keputusan yang didukung oleh Visual Basic adalah sebagai berikut :

If...Then
Gunakan suatu struktur If...Then untuk menjalankan suatu pernyataan secara kondisional. Anda dapat menggunakan syntax satu baris ataupun syntax banyak baris : If kondisi Then pernyataan atau If kondisi Then pernyataan-pernyataan End If Kondisi biasanya berupa suatu perbandingan, maupun ekspresi yang menghasilkan nilai numerik. Visual Basic menginterpretasikan False sebagai nol (0), dan True sebagai bukan nol.

Indoprog

18

Dasar Pemrograman Visual Basic

Hendra, S.T.

If...Then...Else
Gunakan IfThenElse untuk mendefinisikan beberapa blok pernyataan yang akan dijalankan salah satu berdasarkan kondisi yang memenuhi syarat If kondisi1 Then [blok pernyataan-1] [ElseIf kondisi2 Then [blok pernyataan-2]] ... [Else [blok pernyataan-n]] End If Visual Basic awalnya akan mencoba kondisi1. Jika False, maka Visual Basic akan memeriksa kondisi2, dan seterusnya sampai menemukan suatu kondisi True untuk dijalankan blok pernyataannya. Contoh :
If JlhRec > 0 Then Posisi = 1 Else Posisi = 0 End If

Select Case
Visual Basic menyediakan struktur Select Case sebagai suatu alternatif terhadap If...Then...Else. Suatu Select Case statement memiliki kemampuan yang sama dengan IfThenElse, tetapi membuat code lebih mudah dibaca. Struktur Select Case bekerja dengan suatu percobaan tunggal yang hanya dievaluasi satu kali pada bagian atas struktur. Visual Basic then membandingkan hasil ekspresi dengan nilai pada setiap Case didalam struktur tersebut, jika ada yang sesuai, akan dijalankan blok statement yang sesuai Select Case ekspresiyangdicoba [Case ekspresi1 [blokpernyataan-1]] [Case ekspresi2 [blokpernyataan-2]] [Case Else [blokpernyataan-n]] End Select Indoprog

19

Dasar Pemrograman Visual Basic

Hendra, S.T.

Contoh :
Select Case x Case 0: angka = "Nol" Case 1: If posisi = 1 Then angka = "Satu " Else angka = "Se" End If Case 2: angka = "Dua " Case 3: angka = "Tiga " Case 4: angka = "Empat " Case 5: angka = "Lima " Case 6: angka = "Enam " Case 7: angka = "Tujuh " Case 8: angka = "Delapan " Case 9: angka = "Sembilan " Case 10: angka = "Sepuluh " Case 11: angka = "Sebelas " Case 12: angka = "Duabelas " Case 13: angka = "Tigabelas " Case 14: angka = "Empatbelas " Case 15: angka = "Limabelas " Case 16: angka = "Enambelas " Case 17: angka = "Tujuhbelas " Case 18: angka = "Delapanbelas " Case 19: angka = "Sembilanbelas " End Select

Deklarasi Konstanta
Anda sering menjumpai suatu kode yang mengandung nilai yang berulang-ulang ataupu nilai yang memiliki arti khusus, atau anda menemukan bahwa angka tersebut susah diingat. Dalam hal ini anda dapat membuat code anda menjadi lebih mudah dibaca-lebih mudah ditangani-dengan menggunakan suatu konstanta. Suatu konstanta adalah nama yang menyimpan dari suatu nilai yang tidak dapat berubah. Ada dua sumber dari suatu konstanta :

Intrinsic atau System-defined konstanta yang disediakan oleh suatu aplikasi atau control. Konstanta Visual Basic terdaftar pada Visual Basic (VB), Visual Basic for Application (VBA), dan Data Access (DAO). Symbolic atau User-defined konstanta adalah dideklarasikan dengan menggunakan statement Const.

Membuat Konstanta Anda Sendiri Syntax untuk deklarasi konstanta adalah :

Indoprog

20

Dasar Pemrograman Visual Basic

Hendra, S.T.

[Public|Private] Const constantname [As type] = expression Contoh :


Const Pi = 3.12159265358979 Public Const Planet As Integer= 9 Const ReleaseDate = #7/1/95#

Scope dari suatu user-defined konstanta


Membuat suatu konstanta yang mana hanya ada dalam suatu procedure, deklarasikan di dalam procedure tersebut Membuat suatu konstanta berlaku pada semua procedure dalam suatu module, deklarasikan dia pada bagian deklarasi di module tersebut Membuat suatu konstanta berlaku pada semua aplikasi, deklarasikan dia dengan keyword Public sebelum kata Const.

Struktur Perulangan
Struktur loop memperbolehkan anda untuk melaksanakan sekelompok baris lebih dari satu kali :

Do...Loop
Gunakan Do loop untuk mengeksekusi suatu blok statement dengan jumlah perulangan yang tak terhingga, ada beberapa Do...Loop statement, tetapi masing-masing mengevaluasi suatu kondisi untuk menentukan apakah melanjutkan eksekusi Berikut ini adalah statement DoLoop, yang dijalankan selama kondisi benar :
Do While condition statements Loop

Ketika Visual menjalankan Do loop ini, pertama kali akan di coba kondisinya, jika kondisi False (zero), akan diloncati semua statements yang mengikuti kondisi tersebut. Visual Basic akan menjalankan statements jika kondisi benar dan kembali ke DoLoop berikutnya.
Function Faktorial (x) Dim Hasil As Double Dim Count As Long Hasil = 1 count = 2 Do While Count <= x Hasil = Hasil * count count = count + 1 Loop

Indoprog

21

Dasar Pemrograman Visual Basic


Faktorial = count End Function

Hendra, S.T.

Variasi lain dari statement DoLoop, yang menjamin minimal satu kali statement dijalankan :
Do statements Loop While condition

Dua variasi yang analog dengan dua contoh sebelumnya adalah perulangan minimal satu kali. Dan berikut ini adalah berulang atau tidak sama sekali :
Do Until condition statements Loop Do statements Loop Until condition

For...Next
Do loops bekerja dengan baik, ketika anda tidak tahu berapa bayak kali untuk butuhkan untuk menjalankan statement. Ketika anda mengetahui harus menjalankan statement sejumlah kali, bagaimanapun ForNext adalah pilihan yang lebih baik. Tidak seperti Do Loop, Forloop menggunakan suatu variabel yang disebut counter yang mana akan bertambah atau berkurang pada setiap perulangan. Syntaxnya adalah :
For counter = start To end [Step increment] statements Next [counter]

Argumen counter, start, end, dan increment semuanya adalah numerik 1. Dalam melakukan For loop, Visual Basic : 2. Menset nilai counter sama dengan start 3. Mencoba apakah counter lebih besar dari end. Jika ya, Visual Basic meninggalkan looping tersebut. 4. Menjalankan statements tersebut. 5. Menaikkan counter dengan 1 atau dengan nilai step yang ditentukan 6. Mengulangi langkah 2 sampai 4 Code berikut akan mencetak semua item yang terdapat pada suatu daftar list.
Private Sub Form_Click () Dim I As Integer For i = 0 To List1.ListCount-1 Print List1.List(I) Next End Sub

Indoprog

22

Dasar Pemrograman Visual Basic

Hendra, S.T.

Struktur Kendali Nested


Anda dapat meletakkan suatu struktur kendali didalam struktur kendali lainnya, yang dikenal dengan istilah nested. Struktur kendali pada Visual Basic dapat nested sebanyak level yang anda inginkan.

Meninggalkan suatu Struktur Kendali


Statement Exit memperbolehkan anda untuk keluar langsung dari suatu For loop, Do Loop, syntax untuk statement Exit adalah sederhana : Exit For dapat muncul sebanyak mungkin dalam suatu For. Loop, demikian juga Exit Do untuk Do loop.
For counter = start To end [Step increment] [statementblock] [Exit For] [statementblock] Next [counter[, counter] [,...]] Do [{While | Until} condition] [statementblock] [Exit Do] [statementblock] Loop

Statement Exit Do bekerja pada semua versi syntax Do loop. Exit For dan Exit Do adalah kadang-kadang perlu untuk keluar dari suatu loop dengan segera, tanpa melakukan iterasi yang berikutnya.

Module Pada Visual Basic


Visual Basic menyediakan module yang dapat digunakan untuk memuat fungsi,subrutin, konstanta, variabel dan type ciptaan yang akan disediakan bagi keseluruhan project. Untuk membuat module dalam project anda dapat menggunakan perintah Project, Add Module.

Sesaat setelah anda menambahkan module, maka pada Jendela Project Explorer akan nampak Module1

Indoprog

23

Dasar Pemrograman Visual Basic

Hendra, S.T.

Untuk melakukan koding, anda dapat melakukan double klik pada Module tersebut.

Deklarasi Variabel Pada Module


Pada Module anda dapat mendeklarasikan variabel dengan awalan DIM, PRIVATE maupun PUBLIC, dimana awalan DIM dan PRIVATE anda membentuk variabel Module Level (hanya berlaku didalam pemakaian module bersangkutan), sedangkan awalan PUBLIC akan menghasilkan variabel Global yang akan berfungsi bagi keseluruhan Program. Contoh :
Dim A as Integer Private B as Integer Public C as Integer keseluruhan 'Variabel A adalah Module Level 'Variabel B adalah Module Level 'Variabel C dapat digunakan oleh program

Deklarasi Fungsi dan Sub


Sub dan Function yang dideklarasikan dalam suatu Module bersifat Global bagi keseluruhan program, kecuali kalau diawali dengan awalan PRIVATE.

Indoprog

24

Dasar Pemrograman Visual Basic

Hendra, S.T.

Contoh :
Sub Tengah(x) x.Move (Screen.Width - x.Width) \ 2, _ (Screen.Height - x.Height) \ 2 End Sub

Sub Tengah diatas berlaku untuk program secara keseluruhan.

Mengenal Procedure
Procedure digunakan untuk memadatkan tugas-tugas berulang ataupun proses yang digunakan bersama, seperti perhitungan yang sering dilakukan, text dan manipulasi kontrol, serta operasi database. Secara umum ada dua keuntungan dengan pemakaian procedure dalam program : Procedure memungkinkan anda untuk memecahkan program anda pada unit logika yang lebih kecil, sehingga anda dapat dengan mudah melakukan proses debug dari pada jika keseluruhan program tanpa menggunakan procedure. 2. Procedure yang digunakan dalam suatu program dapat bertindak sebagai suatu blok yang dibangun untuk program lain dengan sedikit perubahan atau tanpa perubahan sama sekali.
1.

Ada beberapa jenis procedure yang digunakan dalam Visual Basic


Sub procedure yang tidak menggembalikan nilai Function procedure yang mengembalikan nilai Property procedure yang dapat mengembalikan nilai dan diisi nilai yang mengacu pada suatu objek.

Sub Procedure
Syntax penulisan Sub procedure: [Private|Public][Static]Sub namaprosedur (argumen-argumen) pernyataan-pernyataan End Sub Setiap kali procedure dipanggil, maka pernyataan-pernyataan yang berada di antara Sub dan End Sub akan dijalankan. Argumen pada procedure adalah nilai yang akan dilewatkan saat pemanggilan procedure.

Indoprog

25

Dasar Pemrograman Visual Basic

Hendra, S.T.

Di Visual Basic Sub Procedure dapat dibagi atas dua yaitu :

General Procedure , procedure yang diaktifkan oleh aplikasi

Event Procedure , Procedure yang diaktifkan oleh system sebagai respon terhadap event.

Contoh, sub Tengah yang dapat digunakan untuk menampilkan form ketengah Layar, dimana x adalah parameter yang merupakan form yang akan dibuat ketengah layar.
Sub Tengah(x As Form) x.Top = (Screen.Height - x.Height) \ 2 x.Left = (Screen.Width - x.Width) \ 2 End Sub Private Sub Form_Load() Call Tengah(Me) End Sub

Function Procedure
Pada Visual Basic telah tersedia berbagai fungsi bawaan seperti Sqr, Cos, dan Chr, tetapi fungsi-fungsi yang tersedia tersebut bersifat umum dan kandang-kadang tidak memenuhi kebutuhan programer, untuk keperluan tersebut anda dapat menciptakan fungsi-fungsi sendiri yang dikenal dengan Function procedure. Adapun syntax penulisan function procedure : [Private|Public][Static]Function namaprocedure (argumen-argumen) [As type] statements End Function Ada tiga perbedaan antara function dan procedure :

Umumnya anda dapat memanggil suatu function dengan mengikutkan nama function sisi kanan dari statement atau ekspresi. (returnvalue = function()). Function memiliki type data seperti suatu variabel. Ini menentukan type yang dari nilai yang dikembalikan. Nilai kembali dimasukkan ke namafunction itu sendirinya, dan suatu function dapat menjadi bagian dari suatu ekspresi yang panjang.

Contoh Fungsi ciptaan untuk mengembalikan nama bulan dari suatu tanggal dalam bahasa Indonesia.

Indoprog

26

Dasar Pemrograman Visual Basic


Function Bulan(x As Date) Dim sRet As String Select Case Case Case Case Case Case Case Case Case Case Case Case Case Case Month(x) 1: sRet = "Januari" 2: sRet = "Februari" 3: sRet = "Maret" 4: sRet = "April" 5: sRet = "Mei" 6: sRet = "Juni" 7: sRet = "Juli" 8: sRet = "Agustus" 9: sRet = "September" 10: sRet = "Oktober" 11: sRet = "Nopember" 12: sRet = "Desember" Else sRet = "tidak sah" End Select

Hendra, S.T.

Bulan = sRet End Function

Indoprog

27

Dasar Pemrograman Visual Basic

Hendra, S.T.

Latihan 2
Judul : Project anda yang pertama
Petunjuk, sebaiknya lembar latihan ini anda cetak ke printer. 1. Aktifkan IDE Visual Basic dan pilih Standard EXE. 2. Pada form1 tanamkan kontrol label (Label1, Label2, Label3) dan kontrol text (Text1, Text2, Text3), serta CommandButton (Command1 dan Command2)

Caranya : Pada jendela toolbox, klik pada kontrol label, kemudian gambarkan pada Form1, lakukan hal sama untuk Label2 dan Label3, demikian juga untuk Textbox dan CommandButton. Anda dapat juga melakukan dengan cara double klik pada kontrol label pada toolbox dan kemudian dengan drag & drop memindahkan posisinya pada form1

Catatan : Kontrol, kontrol tersebut ditanamkan satu per satu, dan jangan menggunakan cara Copy dan Paste karena akan menyebabkan kontrol-kontrol tersebut menjadi kontrol array. 3. Aturlah properti-properti dari masing-masing kontrol sehingga menjadi sebagai berikut:

Indoprog

28

Dasar Pemrograman Visual Basic

Hendra, S.T.

Caranya : Klik pada form1, kemudian pada jendela properti cari baris name, kemudian ketik nilainya MyForm, kemudian cari baris caption, kemudian ketik nilainya menjadi Program Menghitung Luas Persegi. Klik pada Label1, kemudian pada jendela properti cari baris caption, kemudian ketik nilainya &Panjang. Lakukan juga untuk kontrol lainnya berdasarkan tabel berikut. Catatan : Untuk menampilkan jendela properties, anda dapat menggunakan F4

Objek/Kontrol Form1 Label1 Label2 Label3 Text1 Text2 Text3 Command1

Properti Name Caption Caption Caption Caption Name Text Name Text Name Text Name Caption

Nilai Myform Program Menghitung Luas Persegi &Panjang &Lebar Lu&as txtPanjang "" txtLebar "" txtLuas "" cmdHitung &Hitung

Command2

Name Caption

cmdSelesai &Selesai

Catatan : tanda ampersand & pada Visual Basic digunakan sebagai penanda kunci akses penekanan Alt oleh pemakai. 4. Lakukan koding untuk menghitung Luas, ketika pemakai melakukan klik atau Alt H, pada cmdHitung

Caranya :

Indoprog

29

Dasar Pemrograman Visual Basic

Hendra, S.T.

Lakukan double klik pada kontrol cmdHitung, sehingga akan muncul jendela koding dan procedure event cmdHitung_Click : Private Sub cmdHitung_Click() End Sub procedure event, adalah subrutin yang akan dibangkitkan oleh aplikasi, ketika pemakai melakukan klik pada kontrol cmdHitung. Perintah-perintah yang anda ketik diantara Sub dan End Sub akan dijalankan. Cara lain : Tekan F7 untuk menampilkan jendela koding, kemudian pilih nama kontrol dari daftar kontrol seperti gambar berikut :

kemudian pilih daftar kejadian (event) seperti yang ditunjukkan pada gambar berikut :

Catatan : sebaiknya anda senantiasa menggunakan salah satu cara diatas untuk melakukan koding untuk menjamin kebenaran penulisan pada masing-masing event procedure.

Lakukan juga koding untuk cmdSelesai : Private Sub cmdSelesai_Click() Unload Me End Sub 5. Tampilkan kembali MyForm dengan klik View Object pada jendela Project Explorer

Indoprog

30

Dasar Pemrograman Visual Basic

Hendra, S.T.

6. Menyimpan project : Buatlah bernama C:\VB2 Klik pada icon save atau gunakan menu File, dan pilih

Pilih Save in pada folder Vb2, dan nama form MyForm.frm, dan klik Save

Simpan project sebagai MyProject1.vbp

Pada proses penyimpanan diatas akan menghasilkan file berikut : MyForm.frm, MyProject1.vbp, dan MyProject1.vbw. Coba periksa ini folder C:\VB2

7. Jalankan program anda dengan klik pada atau tekan pada tombol F5. 9. Tutup aplikasi Visual Basic anda.

, atau

10. Atur tab index masing-masing kontrol, dimana Label1 (0), txtPanjang (1), Label2 (2), txtLebar (3), Label3 (4), txtLuas(5), cmdHitung (6), cmdSelesai (7).

Indoprog

31

Dasar Pemrograman Visual Basic


Caranya :

Hendra, S.T.

Klik pada cmdSelesai, atau properti tabindexnya menjadi 0, kemudian klik pada cmdHitung, atur properti indexnya menjadi 0, kemudian txtLuas, Label3, txtLebar, Label2, txtPanjang, Label1, masing-masing menjadi 0, sekarang semua kontrol telah berurut sesuai dengan yang kita inginkan. (Ini adalah salah satu trik untuk menomori tabindex dengan mudah)

11. Jalankan kembali program anda, sekarang coba tekan Alt+P, Alt+L, sekarang anda dapat mengaktifkan textbox Panjang dengan Alt+H (akses key dari Label1), dst. 12. Atur properti project anda, dengan menu Project, kemudian Project Properties, akan muncul dialog sebagai berikut

13. Simpan project anda, dan keluar dari Visual Basic 14. Aktifkan kembali Visual Basic anda, dan klik pada tab Recent, dan pilih kembali MyProject1.

Indoprog

32

Dasar Pemrograman Visual Basic

Hendra, S.T.

Bagaimana kalau program Visual Basic tanpa form ?


1. Buatlah sebuah project baru dengan pilihan Standard Exe 2. Pada jendela Project Explorer, klik kanan pada form1, dan pilih Remove Form1

3. Pada Project1, klik kanan dan pilih Add, Module

Pilih Module dan klik pada Open

Indoprog

33

Dasar Pemrograman Visual Basic

Hendra, S.T.

Selanjutnya akan muncul jendela koding untuk Module1, dan ketikan program berikut

Tekan F5 untuk menjalankannya. Simpanlah program diatas dengan nama MyProject2, dan analisa file apa saja yang terbentuk berkaitan dengan project diatas. Catatan penulis: Saya yakin anda lebih familiar dengan alur program kedua dimana program berjalan mulai dari masukkan panjang, kemudian lebar, menghitung luas, serta mencetaknya. Hal tersebut sesuai dengan program konvensional, sedangkan pada program yang menggunakan form, eksekusi perhitungan baru dilakukan setelah pemakai melakukan klik pada tombol Hitung. Disinilah letak tantangan bagi anda yang berasal dari latar belakang pemrograman seperti Basic, Pascal, C/C++ maupun Clipper yang mulai belajar Visual Basic, dimana eksekusi program ditentukan oleh Event yang terjadi sehingga menuntut ketelitian untuk mengantisipasi segala aksi yang mungkin dilakukan pemakai, yang kalau tidak dapat menyebabkan bug pada program. Kesulitan yang sama juga terjadi pada sisi pengajar, dimana dalam menerangkan alur program menjadi agak susah.

Indoprog

34

Dasar Pemrograman Visual Basic

Hendra, S.T.

Latihan 3
Judul : Memahami operator pada VBA
Petunjuk, sebaiknya lembar latihan ini anda cetak ke printer. 1. Aktifkan jendela Immedietly dengan menggunakan menu View, Immedietly Window atau menekan Ctrl + G

dan cobalah beberapa ekspresi berikut :


?1+2 ? "1" + "2" ? 1 + "2" ? "1" + 2 ?1&2 ? "1" & "2" ? "1" & 2

Catatan : Operator + dapat digunakan untuk penjumlahan maupun pengabungan string, tetapi untuk pengabungan string lebih disarankan untuk menggunakan Operator &.

? #18 May 2001# + 31 ? #19 June 2001# - 1 ? #19 June 2001# - #17 June 2001# ? #05/18/2001# + 31 ? #06/19/2001# - 1 ? #06/19/2001# - #06/17/2001# ? #01:01:01# + 0.25 'Mengapa ? ? #06:01:01# - 0.25 ? #06:01:01# - #05:30:30#

Catatan : Pada Visual Basic data date/time ditulis dengan #tanggal#, Operator + digunakan untuk menambah sejumlah hari, Operator - digunakan untuk mengurangi sejumlah hari atau selisih hari.

? True + 0

Indoprog

35

Dasar Pemrograman Visual Basic


Hendra, S.T.

? True + "0" ? False ? False + 0 ? True = -1 ? False = 0

Catatan : Pada Visual Basic nilai True adalah sama dengan -1, dan nilai False adalah 0

? "indoprog" like "i*" ? "Indoprog" like "i*" ? "Indoprog" like "[iI]*" ? "a" like "[a-z]" ? "A" like "[!a-z]" ? "A1" like "A?" ? "A1" like "A#" ? "Aa" like "A#"

Lengkapilah daftar berikut : a True True False False c True False True False a and b a or b a xor b a eqv b a imp b

Dengan mencoba satu persatu, misalnya :


? True and True dst ? 1 and 3 ? 1 or 4 ? 2 xor 2 'Mengapa ?

Catatan : Operator and, or, xor, eqv, imp, dan not dapat digunakan untuk operasi bitwise 2. Tanamkan sebuah kontrol CommandButton pada Form1, dan atau properti name : cmdCoba, dan caption : &Coba, seperti berikut ini :

Indoprog

36

Dasar Pemrograman Visual Basic

Hendra, S.T.

Lakukan koding pada event cmdCoba_Click, sebagai berikut : Private Sub MyCoba_Click() Dim a As Integer Dim b As Integer Dim c As String Dim d As String a = 1.2 + 2.2 'Berapa nilai a b = 1.3 + 2.3 'Berapa nilai b c = "100" 'Berapa nilai c d = c + 200 'Berapa nilai d Print a Print b Print c Print d End Sub Jalankan program, dan klik pada tombol Coba, dan perhatikan hasilnya, apakah sesuai dengan perkiraan anda?

Indoprog

37

Dasar Pemrograman Visual Basic

Hendra, S.T.

Modul 3, Memahami Objek pada Visual Basic


Apa yang dimaksud dengan Objek
Objek merupakan suatu kombinasi dari kode dan data yang dapat diperlakukan sebagai satu kesatuan. Suatu Objek dapat merupakan bagian dari aplikasi seperti suatu kontrol atau suatu form. Secara keseluruhan dari aplikasi dapat juga berupa suatu objek. Catatan Penulis : Sebagai pemula anda jangan terlalu dibingungkan/berkonsentrasi tentang istilah objek, yang penting adalah ada memahami bagaimana menggunakan objek-objek yang tersedia untuk membuat suatu program yang dapat bermanfaat. Sesuatu yang perlu ditekankan disini adalah belajar bahasa pemrograman Visual Basic tidak sama dengan belajar pemrograman berorientasi objek, lagi pula sesuatu hal yang harus disadari adalah Visual Basic tidak mendukung konsep OOP secara murni seperti C++ maupun Java.

Dari mana datangnya Objek


Setiap objek pada Visual Basic didefinisikan oleh suatu class. Untuk memahami hubungan antara objek dengan class-nya, perhatikan contoh berikut :

Kontrol-kontrol yang barada pada jendela Toolbox pada Visual Basic merupakan class-class. Objek tersebut dikenal sebagai kontrol tidak akan ada sampai anda menanamkannya pada suatu form. Ketika anda menanamkan suatu kontrol, anda telah membuat suatu duplikasi atau instance dari class kontrol tersebut. Form dimana anda bekerja pada saat desain adalah suatu class. Pada saat run time, Visual Basic menciptakan suatu instance dari class form.

Gambar 2-1, kontrol Text1 yang ditanam diatas form berasal dari class Textbox Misalnya anda menamkan sebuah textbox diatas form1, coba perhatikan jendela properti kontrol tersebut akan menampilkan Text1 (nama dari kontrol textbox tersebut) dan Textbox (nama dari class kontrol tersebut). Indoprog

38

Dasar Pemrograman Visual Basic

Hendra, S.T.

Gambar 2-2, jendela property menunjukkan nama kontrol dan jenis Class-nya Semua objek merupakan duplikasi dari class mereka. Sesaat setelah menjadi objek berdiri sendiri, masing-masing dapat memiliki properti yang berbeda-beda. Misalnya anda menanam tiga buah command button pada suatu form, masing-masing command button merupakan instance dari class CommandButton sehingga memiliki sejumlah karakteristik dan kemampuan (properti-properti, metode-metode, dan eventevent) yang sama, dimana yang terdefinisi pada class-nya. Tetapi, masing-masing dapat memiliki Name, Caption, BackColor, Style yang berbeda sesuai dengan pengaturan pada masing-masing properti.

Gambar 2-3, masing-masing kontrol dapat memiliki properti masing-masing Catatan penulis : Jadi tombol Tambah, Perbaiki dan Simpan berasal dari Class yang sama yaitu Command Button, tetapi setelah mereka ditanam diatas form, masing-masing tombol merupakan objek yang berdiri sendiri dan memiliki properti yang berbeda. Dalam istilah OOP tombol Tambah, Perbaiki dan Simpan adalah objek yang merupakan instance dari Class Command Button.

Bekerja dengan objek

Indoprog

39

Dasar Pemrograman Visual Basic

Hendra, S.T.

Objek-objek Visual Basic memiliki properti-properti, metode-metode, dan event-event. Pada Visual Basic, suatu data dari objek (setting dan atribut) disebut sebagai properti, sedangkan berbagai subrutin yang dapat beroperasi pada objek tersebut disebut sebagai metodenya. Dan suatu event adalah aksi yang dikenali oleh suatu objek, seperti klik pada mouse atau penekanan tombol, sehingga anda dapat menulis kode untuk menangani event tersebut.

Mengatur Nilai properti


Anda dapat langsung mengatur nilai properti suatu kontrol pada jendela properti, maupun pada saat runtime dengan menggunakan bentuk penulisan berikut : Objek.properti = ekspresi Contoh :

Gambar 2-4, pengaturan properti dapat dilakukan melalui jendela properti pada waktu desain atau
Private Sub Form_Load() MyForm.Caption = "Pemakai Telepon" End Sub

Mengambil nilai dari Properti


Anda dapat mengambil nilai dari properti suatu objek dengan penulisan sebagai berikut : Variabel = Objek.properti Contoh :
Private Sub cmdProses_Click() Nama = txtNama.Text End Sub

Indoprog

40

Dasar Pemrograman Visual Basic

Hendra, S.T.

Menggunakan Metode dalam Kode


Ketika anda mengunakan suatu metode dalam kode anda, hal tersebut tergantung kepada bagaimana kaitan perintah dan berapa argumen yang diperlukan, dan apakah metode tersebut mengembalikan suatu nilai. Ketika suatu metode tidak membutuhkan argumen anda dapat menulisnya sebagai berikut :: Objek.Metode Contoh :
Private Sub cmdBuka_Click() frmPemakai.show End Sub

Catatan penulis : Salah satu kesulitan programmer yang menggunakan bahasa konvensional seperti Basic, Pascal, maupun Clipper yang mempelajari Visual Basic adalah dalam memahami topik tentang objek dan event programming, karena merupakan hal yang tidak ada pada bahasa tersebut. Jika anda memikirkan kembali istilah properti, metode dan event, maka properti merupakan ciri-ciri yang membedakan, misalnya si Budi dan si Amat yang sama-sama merupakan instance dari Class manusia, tetapi properti mereka dapat berbeda Properti Tinggi Berat Rambut Warna kulit si Budi 160 cm 60 kg Lurus Kuning langsat Si Amat 170 cm 70 kg Kriting Sawo mata

Sedangkan metode merupakan aksi yang dapat dilakukan oleh si Budi dan si Amat seperti berjalan, berlari, berbicara, ketawa, dll Sedangkan event merupakan reaksi terhadap suatu kejadian, contoh kalau dipukul maka apa yang harus dilakukan ? Program pada Visual Basic akan berjalan berdasarkan event-event yang terjadi, baik yang event dibangkitkan oleh sistem operasi maupun event yang dibangkitkan karena aksi oleh pemakai.

Beberapa properti yang umum pada kontrol

Indoprog

41

Dasar Pemrograman Visual Basic

Hendra, S.T.

Berikut ini akan dibahas beberapa properti yang umum yang hampir terdapat pada semua intrinsic kontrol pada Visual Basic.

Properti Left, Top, Width dan Height


Semua objek yang visible memiliki properti yang menentukan letak dan ukurannya. Nilai properti Left dan Top sifatnya relatif terhadap kontainernya (misalnya suatu textbox yang ditanamkan diatas form, maka form tersebut disebut sebagai kontainer bagi textbox tersebut), sedangkan Width dan Height menentukan ukuran dari objek tersebut.

Gambar 2-5, Form1 merupakan kontainer bagi Text1 Nb. Pada defaultnya nilai properti ini dinyatakan dalam twips ( 1 inch = 1440 twips; 1 cm = 576 twips) Perhatian : Properti Width dan Height pada control Combobox sifatnya readonly. Catatan penulis : Tidak semua objek pada Visual Basic dapat menjadi kontainer bagi objek lainnya, kontrol standar yang dapat berlaku sebagai kontainer adalah form, frame, picturebox.

Properti Forecolor dan BackColor


Umumnya objek yang visible memiliki properti Forecolor dan Backcolor, yang mempengaruhi warna tulisan dan warna latarbelakang, tetapi beberapa diantaranya tidak ada (misalnya control scroll-bars), pada command button tidak terdapat properti Forecolor, dan Backcolornya hanya berfungsi jika anda menganti properti style menjadi 1 - Graphical.

Indoprog

42

Dasar Pemrograman Visual Basic

Hendra, S.T.

Gambar 2-6, form dengan pemakaian backcolor dan forecolor Nb. Setting properti Backcolor menjadi tidak berfungsi jika anda menset properti BackStyle menjadi 0 - transparent.

Gambar 2-7, pengaturan Backcolor dan ForeColor melalui jendela properti Ketika anda menentukan nilai untuk properti ini, anda dapat menggunakan suatu warna standard, atau warna custom (saya menyarankan anda untuk menggunakan warna standard untuk menjaga nilai rasa pemakai integrasi dengan sistem operasi)

Indoprog

43

Dasar Pemrograman Visual Basic

Hendra, S.T.

Properti Font
Pada waktu desain, anda dapat menentukan properti Font dengan dialog box, tetapi pada saat runtime, hal tersebut harus dilakukan dengan properti Name, Size, Bold, Italic, Underline, and Strikethrough, karena sebenarnya Font adalah suatu objek campuran. Contoh :
Text1.Font.Name = "Tahoma" Text1.Font.Size = 12 Text1.Font.Bold = True Text1.Font.Underline = True

Properti Caption dan Text


Caption adalah tulisan yang tampil dalam suatu control (atau title pada objek form) yang mana pemakai tidak dapat melakukan modifikasi langsung (control Label, CommandButton, Checkbox, Optionbutton, Data, dan Frame), sebaliknya Text adalah tulisan yang dapat dimodifikasi oleh pemakai (control Textbox, Listbox dan Combobox).

Gambar 2-8, pengaturan Font melalui dialog box Font dari jendela properti Nb. Pada properti Caption, kita dapat menggunakan tanda & (ampersand) untuk menyatakan hotkey bagi control tersebut. Properti Text dapat diabaikan, karena merupakan properti default bagi suatu control. Contoh :

Indoprog

44

Dasar Pemrograman Visual Basic


' Kedua perintah ini adalah sama Text2.Text = Text1.Text Text2 = Text1 'tanpa properti text

Hendra, S.T.

Properti Enabled dan Visible


Pada defaultnya semua control dan form adalah Enabled dan Visible. Anda dapat menyembunyikan suatu kontrol dengan menggunakan properti Visible = False. Kontrol yang properti Enabled = False tidak dapat diakses oleh pemakai, tetapi dapat diakses secara kode. Programmer dapat juga menggunakan properti Locked = True untuk membuat suatu kontrol read only.

Properti TabStop dan TabIndex


Suatu kontrol yang dapat menerima fokus input memiliki properti TabStop. Kontrol yang memiliki properti TabStop juga memiliki properti TabIndex. Properti TabStop menentukan apakah suatu kontrol dapat menerima fokus pada penekanan tombol Tab oleh pemakai, defaultnya adalah true, sedangkan properti TabIndex menentukan urutan fokus pada saat pemakai menekan Tab.

Properti MousePointer dan MouseIcon


Properti ini akan menentukan bentuk kursor mouse ketika berada diatas kontrol tersebut. Windows memperbolehkan kita mengatur tampilan mouse untuk setiap form dan kontrol dengan mengikuti aturan berikut :

Jika properti Screen.MousePointer di set ke nilai yang bukan 0-vbDefault, kursor mouse akan mengikuti nilai ini, tetapi ketika mouse berada diatas aplikasi lain (atau pada desktop), tampilan kursor akan bergantung kepada kondisi aplikasi bersangkutan, bukan pada aplikasi anda. Jika Screen.MousePointer adalah 0 dan kursor mouse berada diatas suatu kontrol, Visual Basic akan memeriksa nilai properti MousePointer kontrol tersebut; jika nilainya bukan 0-vbDefault, kursor mouse akan di set ke nilai tersebut. Jika Screen.MousePointer adalah 0 dan mouse berada diatas permukaan suatu form atau berada diatas kontrol yang properti MousePointer adalah 0, Visual Basic akan menggunakan nilai yang tersimpan pada properti Mousepointer pada form.

Properti MouseIcon dapat digunakan untuk menampilkan bentuk pointer mouse sesuai dengan keinginan pemakai, tetapi sebelumnya properti MouseIcon harus di set ke 99vbCustom, dan kemudian set suatu icon pada properti MouseIcon.

Indoprog

45

Dasar Pemrograman Visual Basic

Hendra, S.T.

Gambar 2-9, pengaturan Mouse Pointer dan Mouse Pointer melalui jendela properti

Properti Tag
Semua kontrol mendukung properti Tag, tanpa kecuali, karena properti ini disediakan oleh Visual Basic, bukan oleh kontrol. Properti Tag digunakan sebagai kontainer untuk bagi data dari kontrol yang anda ingin simpan (misalnya anda dapat mengunakannya untuk menyimpan nilai awal dari textbox, sehingga pemakai dapat melakukan Undo dengan mengembalikan nilai awal tersebut dari properti Tag).

Beberapa Metode-metode umum


Berikut ini akan dibahas beberapa metode yang umum yang hampir terdapat pada semua intrinsic kontrol pada Visual Basic.

Metode Move
Jika suatu kontrol mendukung properti Left, Top, Width, dan Height, juga mendukung metode Move, dengannya dimana anda dapat mengubah beberapa atau semua properti dalam satu operasi tunggal. Contoh berikut mengubah tiga properti: Left, Top, dan Width. Contoh :
'Mendoublekan lebar form, dan memindahkan ke sudut kiri atas layar 'Syntaxnya adalah: Move Left, Top, Width, Height. Form1.Move 0, 0, Form1.Width * 2

Indoprog

46

Dasar Pemrograman Visual Basic

Hendra, S.T.

Metode Refresh
Metode refresh menyebabkan suatu form akan digambar ulang. Pada dasarnya Visual Basic otomatis memanggil metode ini setiap ada kesempatan, tetapi anda dapat menggunakannya untuk mengupdate tampilan seketika. Contoh :
For n = 1000 To 1 Step -1 Label1.Caption = CStr(i) Label1.Refresh ' Mengupdate label seketika. Next

Metode SetFocus
Metode ini memindahkan fokus input ke kontrol tertentu. Sesuatu masalah yang sering terjadi adalah metode ini akan menyebabkan error ketika diterapkan pada kontrol yang sedang di Disable atau dalam keadaan Invisible. Untuk menhindari hal ini, metode SetFocus jangan digunakan pada bagian Form Load. Contoh :
Private Sub cmdAdd_Click() Aksi = flAdd Call Buka Call Kosong txtCCode.SetFocus End Sub

'Memindahkan fokus ke kontrol txtCCode

Metode ZOrder
Metode ZOrder memberikan efek tampilan kontrol yang saling menimpa. Anda menggunakan metode ini untuk memindahkan kontrol keatas kontrol yang lain. Gunakan argumen satu untuk sebaliknya. Contoh :
Label1.ZOrder Label1.ZOrder 1 'Memindahkan ke atas 'Memindahkan ke bawah

Pada saat design, anda dapat menggunakan Ctrl+J untuk memindahkan kontrol ke depan, dan Ctrl+K untuk memindahkan form ke belakang.

Indoprog

47

Dasar Pemrograman Visual Basic

Hendra, S.T.

Gambar 2-10, contoh pemakaian metode ZOrder

Beberapa Event yang umum


Berikut ini akan dibahas beberapa metode yang umum yang hampir terdapat pada semua intrinsic kontrol pada Visual Basic.

Event Click dan DblClick


Event click terjadi ketika pemakai melakukan klik pada tombol kiri mouse. demikian juga Event DblClick terjadi karena pemakai melakukan klik dua kali.
Private Sub cmdUpdate_Click() JlhRec = JlhRec + 1 DatPemakai.CCode = txtCCode.Text DatPemakai.Nama = txtNama.Text DatPemakai.Ekstension = txtEkstension.Text DatPemakai.Local = optLocal.Value DatPemakai.SLJJ = optSLJJ.Value DatPemakai.SLI = optSLI.Value Put #1, JlhRec, DatPemakai Posisi = JlhRec End Sub

Pada kontrol-kontrol seperti Checkbox dan OptionButton, event Click juga dibangkitkan kalau terjadi perubahan nilai properti Value secara koding. ListBox dan Combobox juga melakukan hal yang sama kalau properti ListIndex-nya berubah. Adalah penting untuk menghindari pemakaian Event Click dan DblClick pada satu kontrol yang sama, karena tidak menjamin Event DblClick dibangkitkan setelah Event Click terjadi.

Indoprog

48

Dasar Pemrograman Visual Basic

Hendra, S.T.

Event Change
Event Change dibangkitkan ketika isi dari suatu kontrol berubah. Tetapi pada CheckBox, dan OptionButton Event Click yang dibangkitkan. Pada kontrol TextBox dan ComboBox dibangkitkan ketika pemakai mengetik sesuatu. (Tetapi pada kontrol ComboBox, kontrol membangkitkan event Click kalau pemakai memilih item dari list dari pada mengetiknya). Pada kontrol Scroll bar event Change terjadi ketika pemakai melakukan klik baik pada panah maupun scroll box. Event Change juga terdapat pada PictureBox, DriveListBox, dan kontrol DirListBox. Event Change juga dibangkitan oleh isi kontrol yang diubah melalui koding.

Event GotFocus dan LostFocus


GotFocus dibangkitkan ketika kontrol menerima fokus, dan LostFocus dibangkitkan ketika fokus meninggalkannya dan beralih ke kontrol lain. Pada awalnya event ini banyak digunakan untuk mekanisme validasi ketika kontrol kehilangan fokus. Pada Visual Basic 6 telah diperkenalkan suatu event Validate event, yang lebih sesuai untuk masalah yang sama.

Event KeyPress, KeyDown, dan KeyUp


Event-event ini dibangkitkan ketika pemakai menekan tombol pada keyboard pada kontrol yang memiliki fokus. Urutan eventnya adalah : KeyDown (ketika pemakai menekan tombol), KeyPress (Visual Basic menterjemahkan tombol ke numerik ANSI code), dan KeyUp (ketika pemakai melepas tombol). Hanya tombol yang berkaitan dengan tombol kontrol (Ctrl+x, BackSpace, Enter, dan Escape) serta karakter yang dapat dicetak membangkitkan event KeyPress event. Tombol lainnya--termasuk tombol panah, tombol fungsi, kombinasi Alt+x, tidak menyebabkan event ini, hanay membangkitkan event KeyDown dan KeyUp. Event KeyPress melewatkan ANSI code dari tombol yang ditekan. Anda dapat memanipulasinya untuk keperluan tertentu.

Objek Browser
Anda dapat melihat properti-properti, metode-metode, dan event-event pada suatu objek dengan menggunakan fasilitas Objek Browser yang dapat diaktifkan dengan menggunakan menu View, Object Browser.

Indoprog

49

Dasar Pemrograman Visual Basic

Hendra, S.T.

Gambar 2-11, jendela objek browser untuk melihat isi suatu objek

Indoprog

50

Dasar Pemrograman Visual Basic

Hendra, S.T.

Modul 4, Mengenal Form


Form merupakan objek pertama yang anda hadapi begitu membuat suatu project dan merupakan tempat kita membentuk user interface. Pada form kita dapat menanamkan berbagai Kontrol seperti label, textbox, combobox, listbox, optionbutton, dll untuk membuat user interface.

Gambar 2-12, user interface form dengan berbagai kontrol diatasnya Catatan penulis : Secara default Visual Basic akan memberikan nomor Tab Index pada setiap kontrol berdasarkan urutan penempatannya pada saat design. Urutan tab index ini akan menentukan urutan fokus pada saat keaktifan Form pertama kali, dan fokus berikutnya pada setiap penekanan tombol Tab. Anda dapat mengubah urutan Tab Index pada masing-masing kontrol dengan mengatur properti TabIndex. Untuk memudah anda dalam menempatkan kontrol-kontrol pada form, periksalah option seperti Show Grid dan ukurannya, serta Align Control to Grid, pengaturan ini dapat dilakukan dengan menu Tools, Option, kemudian memilih tab General.

Indoprog

51

Dasar Pemrograman Visual Basic

Hendra, S.T.

Gambar 2-13, jendela option untuk pengaturan form Untuk memudahkan anda mengatur ukuran, jarak antar kontrol maupun pemerataan kontrol-kontrol yang anda tempatkan diatas form, anda dapat menggunakan kelompok menu format

Gambar 2-14, menu format

Struktur kode pada Form


Memahami struktur kode pada jendela kode di suatu form akan sangat membantu programmer untuk menulis kode yang terstruktur. Adapun struktur kode pada form dapat dibagi atas tiga bagian yaitu :

Bagian General Declaration, bagian ini digunakan untuk deklarasi Option Explicit, Option Base, Type, dan variabel yang dapat digunakan pada form level (dikenal oleh semua subrutin pada form tersebut) baik pada tingkat Public

Indoprog

52

Dasar Pemrograman Visual Basic

Hendra, S.T.

maupun Private. Bagian ini biasanya terletak pada bagian teratas pada jendela koding.

Gambar 2-15, bagian general declaration pada jendela koding form

Bagian General Procedure, bagian ini merupakan subrutin maupun fungsi yang dibuat oleh pemakai. Bagian ini ditandai dengan (General), dan nama subrutin.

Gambar 2-16, bagian general procedure pada jendela koding form

Bagian Event Procedure, bagian ini merupakan subrutin yang digunakan untuk menangani kejadian yang diakibatkan oleh aksi pemakai terhadap kontrol tertentu. Ditandai dengan nama kontrol dan jenis eventnya.

Indoprog

53

Dasar Pemrograman Visual Basic

Hendra, S.T.

Gambar 2-17, bagian event procedure pada jendela koding form

Beberapa Event, Metoda, dan Perintah pada Form


Supaya anda dapat bekerja baik dengan objek form, anda perlu mengetahui dan mengerti Event-Event, Metode-Metode serta perintah yang berhubungan dengan pemakaian form.

Event Initialize
Event ini terjadi pertama kali ketika Form dibuat dari Class-nya dan hanya sekali selama keberadaan form tersebut, Event ini digunakan untuk menginisialisasi nilai awal variabel.

Event Terminate
Event ini terjadi ketika objek Form akan dimusnahkan dari memori.

Event Load
Event ini terjadi ketika suatu form di Load. Pada Event procedure ini anda letakkan statement yang digunakan untuk mengatur setting awal form anda, misalnya membuka file, menginisialisasi nilai awal variabel, dan mengatur properti kontrol-kontrol pada form. Contoh :
Private Sub Form_Load() Open "C:\Pemakai.Dat" For Random As #1 Len=Len(DatPemakai) JlhRec = LOF(1) / Len(DatPemakai) If JlhRec > 0 Then Posisi = 1 Else

Indoprog

54

Dasar Pemrograman Visual Basic


Posisi = 0 End If Call Tampil End Sub

Hendra, S.T.

Event QueryUnload
Event ini terjadi ketika suatu form akan tutup, dan dapat mempelajari bagaimana pemakai menutup form tersebut dengan mempelajari parameter UnloadMode. Contoh :
Private Sub Form_QueryUnload(Cancel As Integer, _ UnloadMode As Integer) Select Case UnloadMode Case vbFormControlMenu ' = 0 ' From diclose oleh pemakai. Case vbFormCode ' = 1 ' Form diclose dengan kode. Case vbAppWindows ' = 2 ' Session windows berakhir. Case vbAppTaskManager ' = 3 ' Task manager mengakhiri program ini. Case vbFormMDIForm ' = 4 ' From ditutup oleh MDI. Case vbFormOwner ' = 5 ' From ditutup oleh Owner. End Select End Sub

Parameter Cancel dapat digunakan untuk menentukan apakah proses dilanjutkan ke Event UnLoad atau tidak. (0 berarti proses dihentikan, 1 berarti proses dilanjutkan ke Event Unload)

Event UnLoad
Event ini terjadi ketika suatu form di unload dengan menggunakan command Close pada Control menu atau dengan statement UnLoad. Event ini terjadi setelah Event QueryUnload. Anda dapat mengetikkan kode-kode untuk menutup file-file yang terbuka pada Event ini. Contoh :
Private Sub Form_Unload(Cancel As Integer) Close #1 End Sub

Parameter Cancel dapat digunakan untuk menentukan apakah proses UnLoad dilakukan atau tidak. (0 berarti proses UnLoad dilakukan, 1 berarti proses Unload dibatalkan)

Indoprog

55

Dasar Pemrograman Visual Basic

Hendra, S.T.

Contoh :
Private Sub Form_Unload(Cancel As Integer) Dim nPil As Integer nPil = MsgBox("Apakah Anda Yakin", vbYesNo) If nPil = vbYes Then Close #1 Cancel = 0 Else Cancel = 1 End If End Sub

Event Resize
Event ini terjadi ketika form pertama kali ditampilkan atau ukuran dari suatu object berubah. Contoh :
Private Sub Form_Resize () 'Mengubah ukuran PictureBox menjadi sama dengan ukuran form yang diresize. Picture1.Move 0,0, ScaleWidth, ScaleHeight End Sub

Catatan : ScaleWidth, properti yang mengembalikan nilai ukuran lebar interior dari suatu kontrol ScaleHeight, properti yang mengembalikan nilai ukuran lebar interior dari suatu kontrol

Event Activate
Event Activate terjadi ketika suatu form menjadi jendela aktif, ketika user melakukan klik pada form, atau menggunakan metode SHOW atau SETFOCUS.

Event DeActivate
Event DeActivate terjadi ketika suatu form menjadi jendela yang tidak aktif, dimana ketika focus bergeser ke form lain. Event ini tidak terjadi pada saat UNLOAD.

Perintah Load
Melakukan Load Form, tetapi tidak membuatnya menjadi Visibel Syntax :

Indoprog

56

Dasar Pemrograman Visual Basic

Hendra, S.T.

Load form Contoh :


Private Sub cmdLoad_Click() Load Form2 End Sub

Metoda Show
Melakukan Load suatu Form, dan membuatnya menjadi Visible. Syntax : object.Show Contoh :
Private Sub cmdShow_Click() Form2.Show End Sub

Metoda Hide
Menyembunyikan form, tetapi tidak melakukan unload Syntax : object.Hide Contoh :
Private Sub cmdHide_Click() Form2.Hide End Sub

Perintah UnLoad
Melakukan UnLoad Form Syntax : UnLoad form Contoh :
Private Sub cmdUnload_Click() Unload Form2

Indoprog

57

Dasar Pemrograman Visual Basic


End Sub

Hendra, S.T.

Urutan Event pada Form


Secara garis besar Event pada Form adalah sebagai berikut : Initialize, hanya sekali yaitu ketika form pertama kali dibuat dari Class-nya Load, Activate Deactivate Terminate, hanya sekali yaitu ketika form dimusnahkan dari memori.

Indoprog

58

Dasar Pemrograman Visual Basic

Hendra, S.T.

Latihan 4
Judul : Memahami urutan event, metoda, dan perintah pada Form
1. Tambahkan Form2 ke dalam project anda (caranya : Pada menu Project, pilih Add Form), Kemudian tanamkan Command1 pada Form2, sehingga menjadi sebagai berikut :

2. Aktifkan jendela koding Form2 dengan menekan F7, atau pada Menu View, pilih Code, atau klik icon View Code pada jendela Project Explorer. Pada DropDownList object, pilih Form, dan pada DropDownList procedure pilih Initialize.

Dan lakukan koding untuk Event Initialize untuk form2, sebagai berikut : Private Sub Form_Initialize() MsgBox "Ini adalah initialize form2" End Sub Indoprog

59

Dasar Pemrograman Visual Basic

Hendra, S.T.

Dan dengan cara yang sama lakukan juga koding untuk Event-Event berikut : Private Sub Form_Load() MsgBox "Ini adalah Load Form2" End Sub Private Sub Form_Activate() MsgBox "Ini adalah Activate Form2" End Sub Private Sub Form_Deactivate() MsgBox "Ini adalah Deactivate Form2" End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) MsgBox "Ini adalah QueryUnload Form2" End Sub Private Sub Form_Unload(Cancel As Integer) MsgBox "Ini adalah Unload Form2" End Sub Private Sub Form_Terminate() MsgBox "Ini adalah terminate form2" End Sub Dan akhirnya lakukan juga koding untuk Command1 pada Form2 Private Sub Command1_Click() Unload Me End Sub 3. Tampilkan kembali Form1. (caranya : Double Klik pada Form1 di jendela Project Explorer), dan kemudian tanamkan Command1 s/d 4 diatasnya, dan lakukan koding berikut :

Indoprog

60

Dasar Pemrograman Visual Basic

Hendra, S.T.

Kemudian atur properti masing-masing menurut tabel berikut :


Kontrol Command1 Command2 Command3 Command4 Properti Name Caption Name Caption Name Caption Name Caption Value cmdShow &Show cmdHide &Hide cmdLoad &Load cmdUnLoad &UnLoad

Lakukan koding untuk masing-masing Command Private Sub cmdShow_Click() Form2.Show End Sub

Indoprog

61

Dasar Pemrograman Visual Basic

Hendra, S.T.

Private Sub Form_Resize() MsgBox "Ini adalah Resize Form2" End Sub Private Sub cmdHide_Click() Form2.Hide End Sub Private Sub cmdLoad_Click() Load Form2 End Sub Private Sub cmdUnload_Click() Unload Form2 End Sub 4. Simpan Project anda FormEvent.vbp, Form1.frm, Form2.frm 5. Jalankan project anda

Lakukan klik pada Show, dan perhatikan tulisan pada message box, yang menunjukkan urutan Event pada Form2, klik Ok untuk menutup masing-masing MsgBox. Alih keaktifan ke Form1 tanpa menutup Form2, perhatikan tulisan pada message box, yang menunjukkan Event yang terjadi. Aktifkan kembali ke Form2 dengan klik pada Form2 (bukan klik pada Command1 di Form1), perhatikan Event yang terjadi. Tutup Form2, dengan klik pada Command1, dan perhatikan urutan Event yang terjadi. Buka kembali Form2, dengan klik pada Command1 diatas Form1, dan perhatikan urutan Event yang terjadi (apakah Event Initialize dijalankan ?) Tutup Form2 Tutup Form1, dan perhatikan Event yang terjadi (mengapa Event Terminate Form2 terjadi ?)

6. Jalankan project anda

Lakukan klik pada Load, dan perhatikan tulisan pada message box, yang menunjukkan urutan Event pada Form2, klik Ok untuk menutup masing-masing MsgBox. Lakukan klik pada Show, dan perhatikan Event yang terjadi.

7. Lakukan percobaan sendiri untuk menambah pengertian anda

Indoprog

62

Dasar Pemrograman Visual Basic

Hendra, S.T.

Latihan 5
Judul : Pengaturan Form, Properti, dan Event yang diterapkan pada pengolahan Random File
1. Buatlah suatu project baru, dan periksalah setting grid pada form anda, dengan menu Tools, Option, General. Adapun hal yang perlu diperhatikan adalah keaktifan Show Grid, dan Align Control to Grid

Kemudian tanamkan kontrol-kontrol berikut pada form1 sehingga membentuk tampilan sebagai berikut, anda harus menanamkan kontrol Frame terlebih dahulu baru diikuti dengan Option1 s/d 3 diatasnya, dalam hal ini Kontrol Frame1 bertindak sebagai kontainer bagi Option1 s/d 3.

cc

Indoprog

63

Dasar Pemrograman Visual Basic

Hendra, S.T.

Pilihlah kontrol Label1, Label2, dan Label3 (caranya : klik pada Label1, kemudian tekan tombol Ctrl dan jangan di lepas, klik pada Label2, dan klik pada Label3, akhirnya tombol Ctrl di lepas), kemudian pada menu Format Pilih Align pilih Left.

Pilih Text1, Text2, dan Text3, dan, kemudian pada menu Format, pilih Make Same Size, pilih Both, dan juga dibuat rata Kiri. Lakukan juga proses diatas untuk Option1 s/d 3, Command1 s/d 7 2. Aturlah properti dari masing-masing kontrol sehingga menjadi sebagai berikut, dan jangan lupa untuk mengatur tabindex dengan urutan txtCCode, txtNama,txtEkstension, fraAkses, optLokal, optSLJJ, optSLI, baru kemudian urutan untuk commandbutton :

Kontrol Form1

Properti Name Caption

Nilai frmPemakai Pemakaian Telepon

Indoprog

64

Dasar Pemrograman Visual Basic


Icon Label1 Label2 Label3 Text1 Text2 Text3 Frame1 Option1 Option2 Option3 Command1 Command2 Command3 Command4 Command5 Command6 Command7 Caption Caption Caption Text Name Text Name Text Name Caption Name Caption Name Caption Name Caption Name Caption Name Caption Name Caption Name Caption Name Caption Name Caption Name Caption Name CCode Nama Ekstension txtCCode txtCCode txtNama txtNama txtEkstension txtEkstension &Akses fraAkses &Lokal cmdLokal &SLJJ cmdSLJJ SL&I cmdSLI &First cmdFirst &Prev cmdPrev &Next cmdNext &Last cmdLast &Add cmdAdd &Edit cmdEdit &Update cmdUpdate

Hendra, S.T.

3. Aktifkan ke jendela Koding, dengan menekan tombol F7, atau pada jendela Project Explorer, klik pada frmPemakai, dan klik pada icon View Code, dan pilih General, Declaration

Indoprog

65

Dasar Pemrograman Visual Basic

Hendra, S.T.

dan ketikkan kode berikut : Option Explicit 'Deklarasi enumerated type Private Enum Flag flNone = 0 flAdd = 1 flEdit = 2 End Enum

'Tambah data 'Perbaiki data

'Struktur data untuk random file Private Type Pemakai CCode As String * 4 'Password PABX Nama As String * 30 'Nama Pemakai Ekstension As String * 3 'Ekstension Local As Boolean 'Akses Lokal SLJJ As Boolean 'Akses SLJJ SLI As Boolean 'Akses SLI End Type 'Deklarasi variabel Form Level Dim DatPemakai As Pemakai Dim Posisi As Integer ditampilkan Dim JlhRec As Integer Dim Aksi As Integer

'Variabel untuk menampung data Pemakai 'Untuk mencatat nomor record yang sedang 'Untuk mencatat jumlah record dalam random file 'Untuk flag Tambah Data, Perbaiki Data, atau None

Sub Kunci() 'Mengunci kontrol Text, dan OptionButton txtCCode.Locked = True Indoprog

66

Dasar Pemrograman Visual Basic

Hendra, S.T.

txtNama.Locked = True txtEkstension.Locked = True FraAkses.Enabled = False diakses End Sub Sub Buka() txtCCode.Locked = False txtNama.Locked = False txtEkstension.Locked = False FraAkses.Enabled = True End Sub

'Kalau framenya disable, maka isinya tidak dapat

Sub Tampil() 'Sub rutin ini digunakan untuk menampilkan isi record ke 'Masing-masing kontrol yang bersesuaian If Posisi > 0 Then 'Jika posisi record lebih besar dari 0 Get #1, Posisi, DatPemakai 'Baca record berdasarkan posisi txtCCode.Text = DatPemakai.CCode txtNama.Text = DatPemakai.Nama txtEkstension.Text = DatPemakai.Ekstension optLocal.Value = DatPemakai.Local optSLJJ.Value = DatPemakai.SLJJ optSLI.Value = DatPemakai.SLI Else Call Kosong End If Aksi = flNone 'Tandai Flag Aksi adalah None Call Kunci 'Buat semua kontrol tidak dapat diperbaki End Sub Sub Kosong() 'Subrutin ini akan mengosongkan semua nilai pada masing-masing kontrol txtCCode.Text = "" txtNama.Text = "" txtEkstension.Text = "" optLocal.Value = False optSLJJ.Value = False optSLI.Value = False End Sub 4. Kembali ke tampilan Form1 (gunakan Shift-F7 atau icon view Object pada Project Explorer), dan double klik pada frmPemakai, sehingga muncul Event Procedure Form_Load, dan ketiklah kode berikut :

Indoprog

67

Dasar Pemrograman Visual Basic

Hendra, S.T.

Private Sub Form_Load() 'Subrutin ini akan dijalankan ketika form di load 'ke memory Open "C:\Pemakai.Dat" For Random As #1 Len=Len(DatPemakai) 'Membuka random file sebagai file nomor 1 JlhRec = LOF(1) / Len(DatPemakai) 'Menghitung jumlah record If JlhRec > 0 Then 'Jika jumlah record > 0 Posisi = 1 'Posisi menunjuk ke record 1 Else Posisi = 0 End If Call Tampil End Sub Beralih ke Event Procedure Unload, perhatikan gambar berikut

dan ketiklah kode berikut : Private Sub Form_Unload(Cancel As Integer) Dim nPil As Integer nPil = MsgBox("Apakah Anda Yakin", vbYesNo) 'Konfirmasi penutupan If nPil = vbYes Then 'Jika di jawab Yes Close #1 'Tutup file 1 Cancel = 0 'Proses tutup form dilakukan Else Cancel = 1 'Proses tutup form dibatalkan End If End Sub dan lakukan juga koding untuk kontrol masing-masing : Private Sub cmdFirst_Click() If JlhRec > 0 Then Posisi = 1 Call Tampil Indoprog

68

Dasar Pemrograman Visual Basic

Hendra, S.T.

End If End Sub Private Sub cmdPrev_Click() If Posisi > 1 Then Posisi = Posisi - 1 Call Tampil End If End Sub Private Sub cmdNext_Click() If Posisi < JlhRec Then Posisi = Posisi + 1 Call Tampil End If End Sub Private Sub cmdLast_Click() Posisi = JlhRec Call Tampil End Sub Private Sub cmdAdd_Click() Aksi = flAdd Call Buka Call Kosong txtCCode.SetFocus End Sub Private Sub cmdEdit_Click() Aksi = flEdit Call Buka txtCCode.SetFocus End Sub Private Sub cmdUpdate_Click() If Aksi = flAdd Or Aksi = flEdit Then If Aksi = flAdd Then JlhRec = JlhRec + 1 Posisi = JlhRec End If DatPemakai.CCode = txtCCode.Text DatPemakai.Nama = txtNama.Text DatPemakai.Ekstension = txtEkstension.Text DatPemakai.Local = optLocal.Value DatPemakai.SLJJ = optSLJJ.Value

Indoprog

69

Dasar Pemrograman Visual Basic

Hendra, S.T.

DatPemakai.SLI = optSLI.Value Put #1, Posisi, DatPemakai Call Kunci End If End Sub 5. Gunakan menu Format, Lock Controls, untuk mengunci semua kontrol yang berada pada form agar ditidak dapat digeser dan diubah ukurannya, hal ini cocok dilakukan pada form yang telah selesai. 6. Simpan project diatas sebagai Pemakai.vbp, dan Pemakai.frm 7. Aktifkan Objek browser, dan amati objek-objek yang ada pada Project1, dengan menu View, Object Browser, kemudian pilih Project1.

Indoprog

70

Dasar Pemrograman Visual Basic

Hendra, S.T.

Latihan 6
Judul : Tantangan pemrograman
Lengkapi program diatas dengan fasilitas Find, dimana jika tombol Find ditekan akan muncul suatu InputBox yang menanyakan nama yang dicari, jika ketemu, akan ditampilkan, dan jika tidak ketemu akan muncuk message box data tidak ada.
Private Sub cmdFind_Click() Dim nama As String nama = InputBox("Masukkan nama :", "Pencarian") If nama <> "" Then 'lengkapi bagian ini End If End Sub

Indoprog

71

Dasar Pemrograman Visual Basic

Hendra, S.T.

Modul 5, Kontrol Standard (bagian 1)


Kontrol standard terdapat pada semua versi Visual Basic, baik pada Learning Edition, Profesional Edition, maupun Enterprised Edition. Kontrol-kontrol standard ini akan sering anda gunakan untuk pembentukkan user interface pada setiap project yang anda buat. Pada bagian ini kita akan membahas beberapa kontrol standard beserta properti-properti, event-event dan metoda-metoda yang bekerja pada masing-masing kontrol. Dengan memahami properti, event dan metoda akan sangat membantu anda dalam memanfaatkan kontrolkontrol tersebut secara efektif dan efisien. Pada Modul ini kita akan membahas Label, Textbox, Option, Check, Frame dan Command.

Label

Digunakan untuk menampilkan text tanpa bisa diubah oleh pemakai pada saat runtime. Beberapa properti pada label :
Properti Fungsi Digunakan untuk menentukan pemerataan tulisan pada kontrol label (0 - Left Justify, 1 Right Justify, 2 - Center)

Alignment

Appearance AutoSize BackColor

Digunakan untuk menentukan tampilan dari kontrol label di cat atau tidak (0 - Flat, 1 - 3D) Digunakan untuk menentukan apakah ukuran kontrol otomatis disesuaikan dengan ukuran tulisan (False, True) Digunakan untuk menentukan warna latar belakang (properti ini saling berkaitan dengan properti Appearance) Digunakan untuk menentukan prilaku latar belakang kontrol label (0 - Transparent, 1 Opaque), kalau transparan, maka BackColor menjadi tidak berarti, demikian juga Appearance.

BackStyle

Indoprog

72

Dasar Pemrograman Visual Basic

Hendra, S.T.

Digunakan untuk menentukan bentuk border, apakah (0- None, 1 - Fixed Single)

BorderStyle

Caption DragIcon DragMode Enabled Font ForeColor Height Index Left MouseIcon

Digunakan untuk menentukan tulisan pada kontrol label, mungkin ini adalah properti yang paling sering anda gunakan. Digunakan untuk menentukan icon yang digunakan pada operasi drag-n-drop pada kontrol label Menentukan modus drag-n-drop (0 - manual, 1 - automatic) Menentukan apakah kontrol label dapat menerima event yang dibuat oleh pemakai, misalnya event Click, MouseDown, MouseUp, dll. Digunakan untuk menentukan jenis font, ukuran, style, dll Digunakan untuk menentukan warna tulisan Digunakan untuk menentukan tinggi dari kontrol Digunakan untuk menentukan nomor index, jika kontrol tersebut merupakan kontrol array. Digunakan untuk menentukan jarak kiri kontrol dari kontainernya. Digunakan untuk menentukan icon mouse yang digunakan ketika pointer mouse berada diatas kontrol label tersebut, properti ini berarti bila properti MousePointer diset menjadi (99 - Custom) Digunakan untuk menentukan bentuk pointer yang digunakan ketika mouse pointer berada diatas kontrol label tersebut. Properti ini dapat digunakan sebagai tempat menyimpan data sementara yang berkaitan dengan kontrol label tersebut Digunakan untuk menentukan tip tulisan ketika mouse pointer berada diatas kontrol Digunakan untuk menentukan jarak atas kontrol dari kontainernya. Digunakan untuk menentukan perlakuan terhadap tanda & ampersand sebagai access key, atau sebagai simbol & (False, True) Digunakan untuk menentukan apakah kontrol label tersebut Visible atau tidak (False, True) Digunakan untuk menentukan lebar kontrol label Digunakan untuk menentukan apakah tulisan dalam kontrol label dapat dilipat menjadi beberapa baris.

MousePointer Tag ToolTipText Top UseMnenomic Visible Width WordWrap

Indoprog

73

Dasar Pemrograman Visual Basic

Hendra, S.T.

Gambar 3-1, Contoh properti pada kontrol Label Adapun event-event yang efektif pada kontrol label adalah :
Event Change Click DblClick Keterangan Event ini terjadi ketika nilai properti Caption dari kontrol Event ini terjadi ketika pemakai melakukan klik pada kontrol, event ini terjadi dengan urutan (MouseDown, MouseUp, Click) Event ini terjadi ketika pemakai melakukan double klik pada kontrol, event ini terjadi dengan urutan (MouseDown, MouseUp, Click, MouseDown, DblClick, MouseUp) Event ini terjadi ketika pemakai melakukan penekanan tombol mouse pada kontrol, parameter yang dapat digunakan adalah Button (1 - Tombol kiri, 2 - Tombol kanan), Shift (1 - Shift, 2 - Ctrl, 3 - Alt), X (posisi kolom pointer), Y (posisi baris pointer) Event ini terjadi ketika pamakai mengerakan mouse pada kontrol, parameter yang dapat digunakan adalah Button (1 - Tombol kiri, 2 - Tombol kanan), Shift (1 - Shift, 2 - Ctrl, 3 Alt), X (posisi kolom pointer), Y (posisi baris pointer) Event ini terjadi ketika pemakai melepaskan penekanan tombol mouse pada kontrol, parameter yang dapat digunakan adalah Button (1 - Tombol kiri, 2 - Tombol kanan), Shift (1 - Shift, 2 - Ctrl, 3 - Alt), X (posisi kolom pointer), Y (posisi baris pointer)

MouseDown

MouseMove

MouseUp

Adapun metoda yang efektif pada kontrol label adalah :


Metoda Move Refresh ZOrder Keterangan Metoda ini digunakan untuk memindahkan letak (koordinat Left, Top) dari kontrol label maupun ukurannya (ukuran Height, Width) Metoda ini digunakan untuk mencetak ulang kontrol label. Metoda ini digunakan untuk menentukan order kontrol, apakah diatas atau dibawah kontrol lain.

Textbox

Indoprog

74

Dasar Pemrograman Visual Basic

Hendra, S.T.

Digunakan untuk menampilkan text yang dapat diubah oleh pemakai pada saat runtime
Properti Alignment Appearance BackColor BorderStyle CauseValidation DragIcon DragMode Enabled Font ForeColor Height HideSelection Index Left Locked MaxLength Fungsi sda sda sda sda Digunakan untuk menentukan apakan event Validate di aktifkan ketika kontrol akan kehilangan fokus (False, True) sda sda sda sda sda sda Digunakan untuk menentukan apakah selection disembunyikan ketika kontrol kehilangan fokus sda Digunakan untuk menentukan jarak kiri kontrol dari kontainernya. Digunakan untuk menentukan apakah text dalam kontrol textbox dapat di perbaharui oleh pemakai atau tidak (False, True) Digunakan untuk menentukan jumlah huruf maksimal yang dapat diketikkan dalam textbox (0 s/d 65535), 0 tidak dibatasi. Digunakan untuk menentukan icon mouse yang digunakan ketika pointer mouse berada diatas kontrol label tersebut, properti ini berarti bila properti MousePointer diset menjadi (99 - Custom) Digunakan untuk menentukan bentuk pointer yang digunakan ketika mouse pointer berada diatas kontrol label tersebut. Digunakan untuk menentukan apakah tulisan dalam textbox dapat ditampilkan dalam bentuk beberapa baris, dan mengenali Enter untuk memasuki baris baru. (False, True)

MouseIcon

MousePointer

MultiLine

PasswordChar

Digunakan untuk menentukan karakter yang digunakan untuk menyandikan tampilan huruf yang diketik oleh pemakai. Biasanya digunakan untuk pengisian password, dimana huruf yang ditekan ditampilkan dalam bentuk *

ScrollBars

Digunakan untuk menentukan penampilan ScrollBar pada textbox, properti ini efektif jika setting properti MultiLine adalah True (0 - None, 1 - Horizontal, 2 - Vertical, 3 - Both)

Indoprog

75

Dasar Pemrograman Visual Basic

Hendra, S.T.

TabIndex TabStop Tag Text ToolTipText Top Width

Digunakan untuk menentukan urutan tabindex, 0 adalah kontrol yang pertama mendapat fokus jika form dijalankan. Properti ini efektif jika setting properti TabStop adalah True Digunakan untuk menentukan apakah textbox dapat menerima fokus karena penekanan tombol TAB oleh pemakai (False, True) sda Properti ini berisi tulisan yang berada dalam textbox sda sda sda

Gambar 3-2, Contoh properti pada kontrol Text Adapun event-event yang efektif pada kontrol Textbox adalah :
Event Change Click DblClick GotFocus KeyDown Keterangan Event ini terjadi ketika nilai properti Text dari kontrol mengalami perubahan sda sda Event ini terjadi ketika kontrol mendapatkan fokus Event ini terjadi ketika pemakai mengetik karakter pada kontrol Event ini terjadi setelah event KeyDown ketika pemakai mengetik karakter pada kontrol, parameter yang dapat digunakan adalah KeyAscii. Anda dapat memanipulasi tombol yang diketik dengan melakukan perubahan pada nilai KeyAscii. KeyPress Contoh : Private Sub txtNama_KeyPress(KeyAscii As Integer)

Indoprog

76

Dasar Pemrograman Visual Basic


If KeyAscii = 13 Then SendKeys "{Tab}" End If End Sub KeyUp LostFocus MouseDown MouseMove MouseUp Validate

Hendra, S.T.

Event ini terjadi setelah event KeyPress ketika pemakai mengetik karakter pada kontrol dengan urutan (KeyDown, KeyPress, KeyUp, Change) Event ini terjadi ketika kontrol kehilangan fokus sda sda sda Event ini terjadi ketika kontrol akan kehilangan fokus.

Adapun metoda yang efektif pada kontrol Textbox adalah :


Metoda Move Refresh Setfocus ZOrder Keterangan sda sda Metoda ini digunakan untuk menimdahkan fokus ke kontrol yang bersangkutan sda

Option

Digunakan untuk menampilkan beberapa pilihan yang hanya dapat dipilih salah satu dalam suatu form, untuk
Properti Alignment Appearance BackColor Caption Fungsi sda sda sda sda

CauseValidation sda DisablePicture DownPicture DragIcon DragMode Enabled Font ForeColor Height Index Left MaskColor Digunakan untuk menentukan gambar yang ditampilkan ketika kontrol Option disable (properti Enabled = False), properti ini efektif jika setting properti Style adalah (1- Graphical) Digunakan untuk menentukan gambar yang ditampilkan ketika kontrol Option dipilih (properti Value = True), properti ini efektif jika setting properti Style adalah (1- Graphical) sda sda sda sda sda sda sda Digunakan untuk menentukan jarak kiri kontrol dari kontainernya. Digunakan untuk warna pada bitmap yang akan dijadikan transparan, properti ini efektif jika picture yang masukkan adalah (*.bmp), dan setting properti UseMaskColor adalah True

Indoprog

77

Dasar Pemrograman Visual Basic


MouseIcon MousePointer Picture Style TabIndex TabStop Tag ToolTipText Top UseMaskColor Value Visible Width sda sda

Hendra, S.T.

Digunakan untuk menentukan gambar yang digunakan, properti ini efektif jika setting properti Style adalah (1 - Graphical) Digunakan untuk menentukan jenis style pada kontrol option (0 - Standard, 1 - Graphical) sda sda sda sda sda Digunakan akan warna yang ditentukan pada MaskColor efektif atau tidak (False, True) Adalah nilai kontrol option button (True - terpilih, False - tidak terpilih) Digunakan untuk menentukan apakah kontrol Visibel atau tidak. sda

Gambar 3-3, Contoh properti pada kontrol Option Adapun event-event yang efektif pada kontrol option adalah :
Event Click DblClick GotFocus KeyDown KeyPress KeyUp LostFocus MouseDown MouseMove Keterangan sda, pada option event ini juga dibangkitkan ketika kontrol menerima fokus, maupun ketika pemakai menekan space pada kontrol bersangkutan. sda sda sda sda sda sda sda sda

Indoprog

78

Dasar Pemrograman Visual Basic


MouseUp Validate sda

Hendra, S.T.

sda

Adapun metoda yang efektif pada kontrol Option adalah :


Metoda Move Refresh Setfocus ZOrder Keterangan sda sda sda, pada kontrol option, metoda ini akan membangkitkan event Click. sda

Check

Digunakan untuk menampilkan beberapa pilihan yang dapat dipilih lebih dari satu

Gambar 3-4, Contoh properti pada kontrol Check Properti kontrol Check, maupun event dapat dilihat pada properti Option

Frame

Digunakan untuk mengelompokan sekelompok kontrol. Pemakaian kontrol frame yang paling nyata adalah untuk mengelompokan sejumlah option, sebagaimana kita ketahui,

Indoprog

79

Dasar Pemrograman Visual Basic

Hendra, S.T.

pada suatu form, hanya 1 option yang dapat dipilih setiap saat, hal ini dapat diatasi dengan pemakaian frame, sehingga option dapat dipilih sesuai dengan konteks yang diwakili.
Properti Appearance BackColor BorderStyle Caption CauseValidation DragIcon DragMode Enabled Font ForeColor Height Index Left MouseIcon MousePointer TabIndex Tag ToolTipText Top Visible Width Fungsi sda sda sda sda sda sda sda sda sda sda sda sda Digunakan untuk menentukan jarak kiri kontrol dari kontainernya. sda sda sda sda sda sda Digunakan untuk menentukan apakah kontrol Visibel atau tidak, jika Visible false, maka semua kontrol yang berada diatasnya menjadi tidak kelihatan. sda

Gambar 3-5, Contoh properti pada kontrol Frame Adapun event-event yang efektif pada kontrol frame adalah :

Indoprog

80

Dasar Pemrograman Visual Basic


Event Click DblClick MouseDown MouseMove MouseUp Keterangan sda sda sda sda sda

Hendra, S.T.

Adapun metoda yang efektif pada kontrol Frame adalah :


Metoda Move Refresh ZOrder Keterangan sda sda sda

CommandButton

Digunakan untuk mendapatkan konfirmasi pemakai untuk pelaksanaan fungsi tertentu.


Properti Alignment Appearance BackColor Cancel Caption CauseValidation Default DragIcon DragMode Enabled Font ForeColor Height Index Left MaskColor MouseIcon MousePointer Picture Style Fungsi sda sda sda Digunakan untuk menentukan apakah command button merupakan perintah Cancel untuk form tersebut , jika properti ini True, maka ketika pemakai menekan ESC, akan membangkitkan event Click untuk kontrol tersebut. sda sda Digunakan untuk menentukan apakan command button merupakan Default command untuk form tersebut, jika properti ini True, maka ketika pemakai menekan Enter, akan membangkitkan event Click untuk kontrol tersebut. sda sda sda sda sda sda sda Digunakan untuk menentukan jarak kiri kontrol dari kontainernya. Digunakan untuk warna pada bitmap yang akan dijadikan transparan, properti ini efektif jika picture yang masukkan adalah (*.bmp), dan setting properti UseMaskColor adalah True sda sda sda sda

Indoprog

81

Dasar Pemrograman Visual Basic


TabIndex TabStop Tag ToolTipText Top UseMaskColor Visible Width sda sda sda sda sda sda Digunakan untuk menentukan apakah kontrol Visibel atau tidak. sda

Hendra, S.T.

Gambar 3-6, Contoh properti pada kontrol Command Adapun event-event yang efektif pada kontrol commandbutton adalah :
Event Click GotFocus KeyDown KeyPress KeyUp LostFocus MouseDown MouseMove MouseUp Keterangan sda, pada commandbutton, event ini juga dibangkitkan ketika pemakai menekan space pada kontrol tersebut. sda sda sda sda sda sda sda sda

Adapun metoda yang efektif pada kontrol CommandButton adalah :


Metoda Move Refresh Setfocus ZOrder Keterangan sda sda sda sda

Indoprog

82

Dasar Pemrograman Visual Basic

Hendra, S.T.

Latihan 7
Judul : Mengenal Properti Label, Text, Option, Check, Frame dan Command
1. Buatlah project baru yang berisi form, form berikut : Form 1

Form 2

Form 3

Indoprog

83

Dasar Pemrograman Visual Basic

Hendra, S.T.

Form 4

Form 5

Indoprog

84

Dasar Pemrograman Visual Basic

Hendra, S.T.

Form 6

Form 7 (diset sebagai startup object)

Dengan fungsi masing-masing tombol untuk mengaktifkan masing-masing form yang bersesuaian.

Indoprog

85

Dasar Pemrograman Visual Basic

Hendra, S.T.

Latihan 8
Judul : Memahami beberapa event yang umum pada kontrol.
1. Buatlah project baru, dengan Form1

Kontrol Text1 Text2 Text3 Command1

Properti Name CauseValidation Name Name Name Caption Default Name Caption Cancel

Value txtUmur True txtCoba1 txtCoba2 cmdDefault &Default True True cmdCancel &Cancel True True

Command2

2. Lakukan Koding berikut :


Private Sub cmdCancel_Click() MsgBox "cmdCancel Event Click" End Sub Private Sub cmdDefault_Click() MsgBox "cmdDefault Event Enter" End Sub Private Sub txtCoba2_KeyDown(KeyCode As Integer, Shift As Integer) Debug.Print "txtCoba2 Event Keydown dengan KeyCode :" & KeyCode & " Shift : " & Shift End Sub Private Sub txtCoba2_KeyPress(KeyAscii As Integer)

Indoprog

86

Dasar Pemrograman Visual Basic

Hendra, S.T.

Debug.Print "txtCoba2 Event KeyPressed dengan KeyAscii : " & KeyAscii End Sub Private Sub txtCoba2_KeyUp(KeyCode As Integer, Shift As Integer) Debug.Print "txtCoba2 Event Keyup dengan KeyCode : " & KeyCode & " Shift : " & Shift End Sub Private Sub txtCoba3_Click() Debug.Print "txtCoba3 Event Click" End Sub Private Sub txtCoba3_DblClick() Debug.Print "txtCoba3 Event DblClick" End Sub Private Sub txtCoba3_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Debug.Print "txtCoba3 Event MouseDown dengan Button : " & Button & " Shift : " & Shift & " X : " & X & " Y : " & Y End Sub Private Sub txtCoba3_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Debug.Print "txtCoba3 Event MouseMove dengan Button : " & Button & " Shift : " & Shift & " X : " & X & " Y : " & Y End Sub Private Sub txtCoba3_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Debug.Print "txtCoba3 Event MouseUp dengan Button : " & Button & " Shift : " & Shift & " X : " & X & " Y : " & Y End Sub

Private Sub txtCoba1_GotFocus() MsgBox "txtCoba1 menerima fokus" End Sub Private Sub txtCoba1_LostFocus() MsgBox "txtCoba1 kehilangan fokus" End Sub Private Sub txtCoba2_Change() Debug.Print "txtCoba2 Change" End Sub Private Sub txtUmur_Validate(Cancel As Boolean) If (Val(txtUmur) < 5) Or (Val(txtUmur) > 125) Then MsgBox "Masukkan umur 5 s/d 125" & vbCrLf & _ "Event Validate" Cancel = True End If End Sub

Indoprog

87

Dasar Pemrograman Visual Basic

Hendra, S.T.

Latihan 9
Judul : Tantangan melengkapi program data pemakai Telepon Latihan Bab2
1. Aktifkan program Latihan 2-2, modul sebelumnya.

Lengkapi program tersebut dengan beberapa hal sebagai berikut : 1. txtCCode, maksimal pengetikkan 4 huruf, dan tidak boleh kurang dari 4 huruf, dan yang dapat diketik hanya digit (0 s/d 9) 2. txtNama, maksimal pengetikkan 30 huruf, dan huruf pertama setiap suku kata otomatis besar, misalnya Hendra Wijaya, Susan Dewichan 3. txtEkstension, maksimal pengetikkan 3 huruf, dan yang dapat diketik hanya digit (0 s/d 9), dan nomor ekstension terkecil 100, terbesar 600. 4. Penekanan Enter dapat digunakan untuk berpindah antar textbox 5. Option SLI, hanya bisa dipilih untuk ekstension 100 s/d 199, SLJJ, hanya dipilih untuk ekstension 200 s/d 299 6. txtCCode, txtNama, txtEkstension, dan Akses tidak boleh kosong.

Indoprog

88

Dasar Pemrograman Visual Basic

Hendra, S.T.

Modul 6, Kontrol Standard (bagian 2)


ListBox
Digunakan untuk menampilkan daftar pilihan yang dapat bergeser. Suatu listbox digunakan jika jumlah pilihan cukup banyak, sehingga menjadi tidak efektif kalau menggunakan Option maupun Check.
Properti Appearance BackColor CauseValidation Fungsi Digunakan untuk menentukan tampilan dari kontrol (0 - Flat, 1 - 3D) Digunakan untuk menentukan warna latar belakang. Digunakan untuk menentukan apakan event Validate di aktifkan ketika kontrol akan kehilangan fokus (False, True) Digunakan untuk menentukan apakah daftar pilihan dalam listbox ditampilkan 1 kolom vertikal kebawah (0), atau kebawah dan menyamping sesuai dengan jumlah kolom yang ditentukan jika daftar pilihan cukup panjang.

Column

DragIcon DragMode Enabled Font ForeColor Height Index

Digunakan untuk menentukan icon yang digunakan pada operasi drag-n-drop pada kontrol label Menentukan modus drag-n-drop (0 - manual, 1 - automatic) Menentukan apakah kontrol label dapat menerima event yang dibuat oleh pemakai, misalnya event Click, MouseDown, MouseUp, dll. Digunakan untuk menentukan jenis font, ukuran, style, dll Digunakan untuk menentukan warna tulisan Digunakan untuk menentukan tinggi dari kontrol Digunakan untuk menentukan nomor index, jika kontrol tersebut merupakan kontrol array. Digunakan untuk menentukan tinggi dari kontrol (Height) sedemikian rupa sehingga tidak ada item yang ditampilkan sebagian ( False, True)

IntegralHeight

ItemData Left List MouseIcon

Adalah daftar yang dapat digunakan untuk menyimpan nilai numerik yang berkaitan dengan item-item yang terdapat dalam listbox. Berkoresponden satu-satu. Digunakan untuk menentukan jarak kiri kontrol dari kontainernya. Merupakan properti yang berisi pilihan dalam Listbox, untuk mengetik itemnya anda harus menggunakan Ctrl-Enter untuk memasukki item yang berikutnya. Digunakan untuk menentukan icon mouse yang digunakan ketika pointer mouse berada

Indoprog

89

Dasar Pemrograman Visual Basic

Hendra, S.T.

diatas kontrol label tersebut, properti ini berarti bila properti MousePointer diset menjadi (99 - Custom) MousePointer Digunakan untuk menentukan bentuk pointer yang digunakan ketika mouse pointer berada diatas kontrol label tersebut. Digunakan untuk menentukan apakah item dalam listbox dapat dipilih lebih dari satu atau tidak (0 - None, 1 - Simple, 2 - Extended) Perbedaan antara 1 - Simple dengan 2 Extended, adalah pada Simple pemilihan beberapa item sekaligus tidak dapat menggunakan bantuan Shift.

MultiSelect

Sorted

Digunakan untuk menentukan apakah item dalam listbox otomatis diurut berdasarkan aphabetik atau tidak (False, True) Digunakan untuk menentukan bentuk tampilan item yang digunakan (0 - Standard, 1 Checkbox)

Style

TabIndex TabStop Tag ToolTipText Top Visible Width

Digunakan untuk menentukan urutan tabindex, 0 adalah kontrol yang pertama mendapat fokus jika form dijalankan. Properti ini efektif jika setting properti TabStop adalah True Digunakan untuk menentukan apakah textbox dapat menerima fokus karena penekanan tombol TAB oleh pemakai (False, True) Properti ini dapat digunakan sebagai tempat menyimpan data sementara yang berkaitan dengan kontrol label tersebut Digunakan untuk menentukan tip tulisan ketika mouse pointer berada diatas kontrol Digunakan untuk menentukan jarak atas kontrol dari kontainernya. Digunakan untuk menentukan apakah kontrol label tersebut Visible atau tidak (False, True) Digunakan untuk menentukan lebar kontrol label

Menentukan isi ListBox


Untuk menentukan isi listbox anda dapat mengetikkannya pada waktu design dengan mengisinya di properti List. Misalnya daftar pilihan yang diinginkan adalah Satu, Dua, Tiga ..., Lima, maka :

klik pada properti List, ketikkan Satu, tekan Ctrl-Enter ketikkan Dua, tekan Ctrl-Enter dst

Indoprog

90

Dasar Pemrograman Visual Basic

Hendra, S.T.

Cara lain adalah dengan menggunakan metoda AddItem(string, index) pada Event Load pada Form, dimana string adalah item yang ingin ditambahkan ke ListBox, sedangkan index adalah posisi dimana item akan disisip, defaultnya adalah posisi terakhir. Contoh :
Private Sub Form_Load() LstAngka.AddItem("Satu") LstAngka.AddItem("Dua") LstAngka.AddItem("Tiga") LstAngka.AddItem("Empat") LstAngka.AddItem("Lima") End Sub

Mendapatkan jumlah item dalam Listbox


Untuk mendapatkan jumlah item dalam Listbox anda dapat menggunakan properti ListCount.

Menggambil item yang dipilih oleh pemakai


Pada Listbox jenis Multiselect = False, maka item yang dapat dipilih oleh pemakai hanya satu, sehingga hal tersebut efektif diambil dengan menggunakan properti Text dari Listbox. Contoh berikut akan menampilkan item yang diklik oleh pemakai.
Private Sub LstAngka_Click() MsgBox LstAngka.Text End Sub

Jika pada Listbox dengan Multiselect = True, maka pekerjaan menjadi sedikit lebih rumit, dimana kita perlu memeriksa item pada listbox satu persatu untuk memeriksa apakah item tersebut dalam keadaan terpilih (diperiksa dengan properti selected(index) atau tidak. Contoh berikut akan menampilkan kotak pesan yang berisi item-item yang terpilih.
Private Sub cmdPeriksa_Click() For i = 0 To LstAngka.ListCount - 1 If LstAngka.Selected(i) Then 'Jika True artinya terpilih MsgBox LstAngka.List(i) 'Tampilkan item tersebut dari List End If Next i End Sub

Sesuatu hal yang perlu diingat bahwa nomor index item pada Listbox dimulai dari 0 s/d ListCount - 1

Mendapatkan nomor posisi item yang sedang difokus


Untuk mendapatkan posisi item yang sedang difokus pada Listbox dapat digunakan properti ListIndex

Indoprog

91

Dasar Pemrograman Visual Basic

Hendra, S.T.

Menghapus Item pada Listbox


Untuk menghapus item pada Listbox, anda dapat menggunakan metoda RemoveItem(index), dimana index adalah nomor index yang akan dihapus. Contoh : Untuk memindahkan item yang terpilih pada ListBox kiri ke listbox kanan, dimana setting properti pada Listbox kiri Multiselect = False.

Gambar 4-1, Contoh program yang menggunakan ListIndex dan RemoveItem


Private Sub cmdPindah_Click() If LstAngka.ListIndex > -1 Then LstPindah.AddItem (LstAngka.List(LstAngka.ListIndex)) LstAngka.RemoveItem (LstAngka.ListIndex) End If End Sub

Pada Listbox yang MultiSelect = False, properti ListIndex menunjukkan nomor index (mulai dari 0) item yang sedang terpilih, dan jika tidak ada yang terpilih nilainya -1.

Mengosongkan isi seluruh Listbox


Untuk mengosongkan isi seluruh Listbox, anda dapat menggunakan Metoda Clear. Adapun event-event yang efektif pada Listbox adalah sebagai berikut :
Event Click DblClick GotFocus ItemCheck KeyDown KeyPress Keterangan Event ini terjadi ketika pemakai melakukan klik pada kontrol, event ini terjadi dengan urutan (MouseDown, MouseUp, Click) Event ini terjadi ketika pemakai melakukan double klik pada kontrol, event ini terjadi dengan urutan (MouseDown, MouseUp, Click, MouseDown, DblClick, MouseUp) Event ini terjadi ketika kontrol mendapatkan fokus Event ini terjadi ketika pemakai melakukan klik untuk menandai checkbox pada item Listbox, Event ini efektif pada ListBox yang Style = Checkbox Event ini terjadi ketika pemakai mengetik karakter pada kontrol Event ini terjadi setelah event KeyDown ketika pemakai mengetik karakter pada kontrol,

Indoprog

92

Dasar Pemrograman Visual Basic

Hendra, S.T.

parameter yang dapat digunakan adalah KeyAscii. Anda dapat memanipulasi tombol yang diketik dengan melakukan perubahan pada nilai KeyAscii. KeyUp LostFocus MouseDown Event ini terjadi setelah event KeyPress ketika pemakai mengetik karakter pada kontrol dengan urutan (KeyDown, KeyPress, KeyUp, Change) Event ini terjadi ketika kontrol kehilangan fokus Event ini terjadi ketika pemakai melakukan penekanan tombol mouse pada kontrol, parameter yang dapat digunakan adalah Button (1 - Tombol kiri, 2 - Tombol kanan), Shift (1 - Shift, 2 - Ctrl, 3 - Alt), X (posisi kolom pointer), Y (posisi baris pointer) Event ini terjadi ketika pamakai mengerakan mouse pada kontrol, parameter yang dapat digunakan adalah Button (1 - Tombol kiri, 2 - Tombol kanan), Shift (1 - Shift, 2 - Ctrl, 3 Alt), X (posisi kolom pointer), Y (posisi baris pointer) Event ini terjadi ketika pemakai melepaskan penekanan tombol mouse pada kontrol, parameter yang dapat digunakan adalah Button (1 - Tombol kiri, 2 - Tombol kanan), Shift (1 - Shift, 2 - Ctrl, 3 - Alt), X (posisi kolom pointer), Y (posisi baris pointer) Event ini terjadi ketika Listbox mengalami scroll. Event ini terjadi ketika kontrol akan kehilangan fokus.

MouseMove

MouseUp Scroll Validate

Combo Box
Jika dibandingkan dengan Listbox, maka ComboBox lebih menghemat pemakaian tempat pada form, dimana hasil pilihan pemakai ditempilkan dalam suatu textbox, dimana pilihan-pilihan dapat di drop-down dalam bentuk listbox. Pada Combobox pemakai juga dapat mengetik langsung pilihannya, tetapi hal ini sangat bergantung pada Style yang digunakan. Jika pada Listbox dimungkinkan pemakai melakukan MultiSelect, tetapi pada Combobox hal tersebut tidak dapat dilakukan.
Properti BackColor CauseValidation DragIcon DragMode Enabled Font ForeColor Height Index IntegralHeight ItemData Left Locked MouseIcon MousePointer Sorted Fungsi sda sda sda sda sda sda sda sda sda sda sda sda sda sda sda sda Digunakan untuk menentukan bentuk tampilan combo yang digunakan (0 - Dropdown Combo, 1 - Simple Combo, 2 - Dropdown List), pada Dropdown Combo, pemakai diperbolehkan mengetik tulisan yang tidak ada di list, pada Simple Combo, pemakai boleh mengetik atau memilih dengan tombol keatas atau kebawah dan daftar tidak bisa terbuka, pada Dropdown List, tulisan hanya dapat dipilih dari daftar.

Style

Indoprog

93

Dasar Pemrograman Visual Basic

Hendra, S.T.

TabIndex TabStop Tag Text ToolTipText Top Visible Width

sda sda sda sda sda sda sda sda

Untuk pengolahan ComboBox tidak jauh berbeda dengan Listbox, untuk itu perhatikan kembali contoh-contoh pengolahan Listbox diatas dengan sedikit perbedaan karakteristik antara Listbox dan ComboBox. Adapun event-event yang efektif pada ComboBox adalah sebagai berikut
Event Click DblClick GotFocus KeyDown KeyPress KeyUp LostFocus MouseDown MouseMove MouseUp Validate Keterangan sda sda sda sda sda sda sda sda sda sda sda

Indoprog

94

Dasar Pemrograman Visual Basic

Hendra, S.T.

Latihan 10
Judul : Memahami kontrol Listbox yang diaplikasikan untuk pengolahan nama negara dan propinsi
1. Buatlah program yang menyimpan nama-nama negara didalam sebuah text file Negara.txt, dimana setiap kali form diaktifkan, maka isi file Negara.txt akan dibaca dan ditampilkan dalam suatu listbox, kemudian pemakai dapat melakukan tambah, perbaiki maupun hapus item dalam listbox, dan isi daftar akan disimpan kembali ke file Negara.txt setiap pemakai melakukan klik pada Simpan ke file.
Kontrol Listbox1 Text1 Command1 Command2 Command3 Command4 Command5 Properti Name MultiSelect Sorted Name Name Caption Name Caption Name Caption Name Caption Name Caption Nilai lstNegara 0 - None True lstItem cmdTambah &Tambah cmdPerbaiki &Perbaiki cmdHapus &Hapus cmdSimpankeFile &Simpan ke file cmdSimpan &Simpan

Koding yang akan dilakukan : Membuat deklarasi type dan variabel pada bagian General Declaration
Option Explicit 'Deklarasi enumerated type Private Enum Flag flNone = 0 flAdd = 1 flEdit = 2 End Enum 'Setiap variabel harus dideklarasikan

'Tambah data 'Perbaiki data

'Deklarasi variabel form level Dim Aksi As Integer 'Digunakan untuk menandai aksi yang dibuat pemakai

Membaca dari file Negara.txt dan mengisikannya kedalam lstNegara, serta membuat setting awal variabel pada Event Form Load

Indoprog

95

Dasar Pemrograman Visual Basic


Private Sub Form_Load() Dim sItem As String If Dir("Negara.Txt") <> "" Then ada Open "Negara.txt" For Input As #1 Do While Not EOF(1) Input #1, sItem LstNegara.AddItem (sItem) Loop Close #1 End If Aksi = flNone melakukan aksi End Sub

Hendra, S.T.

'Jika file Negara.Txt telah

'Buka text file untuk input 'Looping s/d Eof 'baca 1 item 'tambahkan ke Listbox

'Tutup text file

'Mula-mula pemakai belum

Melakukan koding untuk menangani event klik pada kontrol cmdTambah, adapun hal yang perlu dilakukan adalah menandai Aksi sebagai flAdd dan mimindahkan fokus ke txtItem.
Private Sub cmdTambah_Click() Aksi = flAdd txtItem.SetFocus End Sub 'Aksi adalah flAdd 'pindah fokus ke txtItem

Melakukan koding untuk menangani event klik pada kontrol cmdPerbaiki, adapun hal yang perlu dilakukan adalah memeriksa apakah pemakai ada memilih item yang diperbaiki, kemudian memasukkan item yang diperbaiki ke txtItem, kemudian menandai Aksi sebagai flEdit, kemudian memindahkan fokus ke txtItem.
Private Sub cmdPerbaiki_Click() If LstNegara.Text = "" Then MsgBox "Anda harus memilih Item" & vbCrLf & _ "yang akan diperbaiki", vbOKOnly + vbInformation Else txtItem = LstNegara.Text txtItem.SetFocus Aksi = flEdit End If End Sub

Indoprog

96

Dasar Pemrograman Visual Basic

Hendra, S.T.

Melakukan koding untuk menangani event klik pada kontrol cmdHapus, adapauh hal yang perlu dilakukan adalah memeriksa Aksi, apakah flAdd atau flEdit, jika flAdd, maka tulisan dalam txtItem ditambahkan ke listbox, kalau flEdit maka item pada listbox dihapus, dan tulisan pada txtItem ditambahkan, kemudian Aksi di set ke flNone dan isi txtItem dikosongkan
Private Sub cmdSimpan_Click() Dim Posisi As Integer If Aksi = flAdd Then LstNegara.AddItem (txtItem.Text) ElseIf Aksi = flEdit Then Posisi = LstNegara.ListIndex LstNegara.RemoveItem (Posisi) LstNegara.AddItem (txtItem.Text) End If Aksi = flNone txtItem.Text = "" End Sub 'Aksi diset ke flNone 'kosongkan txtItem 'Jika Aksi adalah flAdd 'Tambahkan txtItem ke Listbox 'Jika Aksi adalah flEdit 'Ambil posisi aktif 'Hapus item posisi tersebut 'Tambahkan txtItem ke Listbox

Melakukan koding untuk menangani event klik pada cmdHapus, dengan memeriksa apakah ada item yang dipilih, kalau ada remove item tersebut,dan reset flag Aksi
Private Sub cmdHapus_Click() If LstNegara.ListIndex < 0 Then 'Jika tidak ada yang dipilih

MsgBox "Anda harus memilih Item" & vbCrLf & _ "yang akan dihapus", vbOKOnly + vbInformation Else 'Hapus item tersebut

LstNegara.RemoveItem LstNegara.ListIndex End If Aksi = flNone End Sub

Melakukan koding untuk menangani event klik pada cmdSimpankeFile, dengan looping dari item 0 s/d Listcount -1.
Private Sub cmdSimpanKeFile_Click() Dim i As Integer Open "Negara.txt" For Output As #1 'Buka file untuk ditulis

Indoprog

97

Dasar Pemrograman Visual Basic

Hendra, S.T.

For i = 0 To LstNegara.ListCount - 1 Print #1, LstNegara.List(i) Next i Close #1

'Dari item 0 s/d Listcount - 1 'tulis ke textfile

'tutup text file

MsgBox "Proses simpan selesai", vbOKOnly + vbInformation End Sub

2. Buatlah program yang menyimpan nama-nama propinsi didalam sebuah text file Indonesia.txt, dimana setiap kali form diaktifkan, maka isi file Indonesia.txt akan dibaca dan ditampilkan dalam suatu listbox, kemudian pemakai dapat melakukan tambah, perbaiki maupun hapus item dalam listbox, dan isi daftar akan disimpan kembali ke file Indonesia.txt setiap pemakai melakukan klik pada Simpan ke file.

Indoprog

98

Dasar Pemrograman Visual Basic

Hendra, S.T.

Latihan 11
Judul : Memahami kontrol ComboBox yang diaplikasikan untuk pengolahan data Peserta Indoprogvb
1. Buatlah program untuk menyimpan data perserta indoprog-vb kesebuah random file Peserta.Dat yang memiliki struktur sebagai berikut :
'Struktur data untuk random file Private Type Peserta Email As String * 30 nama As String * 30 Alamat As String * 40 Kota As String * 20 Propinsi As String * 20 Negara As String * 20 Tempat As String * 20 TglLahir As Date Pria As Integer End Type

Pada masing-masing textbox dibatasi panjang pengetikkan terbatas sesuai dengan ukuran masing-masing field, seperti tampilan berikut : Isi ComboBox cboNegara diisi dari file Negara.txt, dan Propinsi dari file Propinsi.txt, sehingga menghasilkan tampilan sebagai berikut :

Indoprog

99

Dasar Pemrograman Visual Basic

Hendra, S.T.

Petunjuk, lakukan hal tersebut pada Event Form_Load, adapun potongan programnya adalah sebagai berikut :
Private Sub Form_Load() Dim Item As String file 'Variabel untuk membaca isi text

'Isi cboNegara dengan file Negara.txt Open "Negara.txt" For Input As #1 'Buka text file Negara.txt Do While Not EOF(1) Input #1, Item 'Baca ke item cboNegara.AddItem (Item) 'Tambahkan item ke cboNegara Loop Close #1 'Tutup text file 'Isi cboPropinsi dengan file Propinsi.txt Open "Propinsi.txt" For Input As #1 Do While Not EOF(1) Input #1, Item cboPropinsi.AddItem (Item) Loop Close #1 'Buka Random file Peserta.Dat Open "Peserta.Dat" For Random As #1 Len=Len(DatPeserta) JlhRec = LOF(1) / Len(DatPeserta) If JlhRec > 0 Then Posisi = 1 Else Posisi = 0 End If

Indoprog

100

Dasar Pemrograman Visual Basic

Hendra, S.T.

Call Tampil End Sub

'Jalankan Sub Tampil

Untuk koding pada event-event tombol harus anda buat sendiri dengan mempelajari dan mencontoh Latihan pada Modul-modul sebelumnya untuk kemajuan anda sendiri. Catatan : Fasilitas Find adalah mencari berdasarkan Nama

Indoprog

101

Dasar Pemrograman Visual Basic

Hendra, S.T.

Latihan 12
Judul : Tantangan penyempurnaan Program Peserta Indoprog-vb
1. Buka kembali program Latihan1 diatas, jalankan program diatas, dan carilah kelemahan-kelemahan yang ada, serta lengkapi program diatas untuk menutupi lubang kelemahan tersebut. 2. Lengkapi program Latihan2 dengan kemampuan memeriksa apakah data yang dimasukkan telah ada pada random file atau tidak, adapun kunci yang digunakan adalah alamat Email pada saat penyimpanan. 3. Lengkapi program Latihan2 dengan kemampuan Find Next, dimana mencari data memenuhi syarat yang berikutnya.

4. Buatlah semua form-form diatas ditampilkan ditengah layar pada saat di jalankan.

Indoprog

102

Dasar Pemrograman Visual Basic

Hendra, S.T.

Modul 7, Kontrol Standard (bagian 3)


Image
Digunakan untuk menampilkan gambar dalam format bitmaps (BMP), device independent bitmaps (DIB), metafiles (WMF), enhanced metafiles (EMF), GIF dan JPEG compressed files, dan icons (ICO dan CUR).
Properti Fungsi Digunakan untuk menentukan jenis border yang digunakan (0 - None, 1 - Fixed Single)

BorderStyle

DragIcon DragMode Enabled Height Index Left MouseIcon

Digunakan untuk menentukan icon yang digunakan pada operasi drag-n-drop pada kontrol label Menentukan modus drag-n-drop (0 - manual, 1 - automatic) Menentukan apakah kontrol dapat menerima event yang dibuat oleh pemakai, misalnya event Click, MouseDown, MouseUp, dll. Digunakan untuk menentukan tinggi dari kontrol Digunakan untuk menentukan nomor index, jika kontrol tersebut merupakan kontrol array. Digunakan untuk menentukan jarak kiri kontrol dari kontainernya. Digunakan untuk menentukan icon mouse yang digunakan ketika pointer mouse berada diatas kontrol label tersebut, properti ini berarti bila properti MousePointer diset menjadi (99 - Custom) Digunakan untuk menentukan bentuk pointer yang digunakan ketika mouse pointer berada diatas kontrol label tersebut. Digunakan untuk menentukan apakah gambar disesuaikan dengan ukuran kontrol (gambar dapat menggalami pengecilan maupun pembesaran)

MousePointer Stretch

Indoprog

103

Dasar Pemrograman Visual Basic

Hendra, S.T.

Picture Tag ToolTipText Top Visible Width

Digunakan untuk menentukan gambar dalam image, atau mengambil gambar dalam image. Properti ini dapat digunakan sebagai tempat menyimpan data sementara yang berkaitan dengan kontrol picture tersebut Digunakan untuk menentukan tip tulisan ketika mouse pointer berada diatas kontrol Digunakan untuk menentukan jarak atas kontrol dari kontainernya. Digunakan untuk menentukan apakah kontrol label tersebut Visible atau tidak (False, True) Digunakan untuk menentukan lebar kontrol label

Menampilkan gambar kedalam kontrol image


Pada saat design anda dapat mengisikan gambar kedalam image box dengan menggunakan properti Picture, sedangkan pada runtime anda dapat menggunakan fungsi LoadPicture(namafile) untuk memuat gambar ke properti Picture dari kontrol image, contoh : MyImage.Picture = LoadPicture("C:\Grafik\Indoprog.gif") Catatan : Fungsi LoadPicture(namafile) digunakan untuk memuat file grafik dengan format grafik bitmap (.bmp), icon (.i