Tuesday, December 13, 2016

Bab 3. Dasar Pemrograman Visual C#




Loop



3.1 Lebih Lanjut Tentang ListBox
KONSEP: Kontrol ListBox memiliki sejumlah metode dan properti yang dapat dipakai di dalam kode untuk memanipulasi isi ListBox.

Pada bab sebelumnya, Anda telah mengenal kontrol ListBox, yang menampilkan sejumlah item dan user dapat memilih satu atau lebih item dari list yang ada. Pada bab ini, Anda menggunakan kontrol ListBox untuk menampilkan keluaran. Banyak algoritma yang akan Anda lihat pada bab ini menghasilkan daftar data dan kemudian menampilkannya pada kontrol ListBox.

Ingat bahwa Anda menambahkan item-item ke properti Items dari kontrol ListBox, dan item-item itu akan ditampilkan pada ListBox. Pada saat perancangan, Anda dapat menggunakan jendela Properties untuk menambahkan item-item ke properti Items dari kontrol. Anda dapat pula menuliskan kode yang menambahkan item-item ke suatu ListBox. Untuk menambahkan sebuah item pada suatu kontrol ListBox dengan kode, Anda perlu memanggil metode Items.Add dari kontrol itu. Berikut adalah bentuk umum dari metode:

NamaListBox .Items.Add( Item );

NamaListBox adalah nama dari kontrol ListBox. Item adalah nilai yang akan ditambahkan pada properti Items. Sebagai contoh, di dalam CD yang menyertai buku ini, Anda akan menjumpai sebuah projek dengan nama List Nama. Gambar 3.1 menunjukkan form aplikasi. Seperti ditunjukkan pada gambar di sisi kiri, nama dari kontrol ListBox adalah kotakListNama dan nama dari kontrol Button adalah tombolTambah. Pada saat aplikasi dijalankan, ketika Anda mengklik tombolTambah, nama-nama yang ditunjukkan pada gambar di sebelah kanan pada kontrol kotakListNama.


Gambar 3.1 Aplikasi List Nama

Berikut adalah kode untuk event handler tombolTambah_Click:

1
2
3
4
5
6
7
private void tombolTambah_Click(object sender, EventArgs e)
{
   kotakListNama.Items.Add("Kris");
   kotakListNama.Items.Add("Alisia");
   kotakListNama.Items.Add("Justin");
   kotakListNama.Items.Add("Holi");
}

Anda juga dapat menambahkan nilai-nilai dengan tipe lain. Di dalam CD yang menyertai buku ini, Anda akan menjumpai sebuah projek dengan nama List Nilai. Gambar 3.2 menunjukkan form aplikasi. Seperti ditunjukkan pada gambar di sebelah kiri, nama dari ListBox adalah kotakListNilai dan nama dari kontrol Button adalah tombolTambah. Pada saat aplikasi dijalankan, ketika Anda mengklik kontrol tombolTambah, nilai-nilai yang ditunjukkan pada gambar di sebelah kanan akan ditambahkan pada kontrol kotakListNilai.


Gambar 3.2 Aplikasi List Nilai

Berikut adalah kode untuk event handler tombolTambah_Click:

1
2
3
4
5
6
7
private void tombolTambah_Click(object sender, EventArgs e)
{
   kotakListNama.Items.Add(10);
   kotakListNama.Items.Add(20);
   kotakListNama.Items.Add(30);
   kotakListNama.Items.Add(40);
}


Properti Items.Count
Kontrol ListBox memiliki properti Items.Count yang melaporkan banyak item yang disimpan pada ListBox. Jika ListBox kosong, properti Items.Count bernilai 0. Sebagai contoh, asumsikan bahwa suatu aplikasi memiliki sebauh kontrol ListBox dengan nama kotakListKaryawan. Statemen if berikut menampilkan sebuah kotak pesan jika tidak ada item pada ListBox:

if (kotakListKaryawan.Items.Count == 0)
{
   MessageBox.Show("Tidak ada item di dalam list!");
}

Properti Items.Count memuat sebuah nilai integer. Asumsikan bahwa banyakKaryawan merupakan suatu variabel int, statemen berikut menugaskan banyak item pada kotakListKaryawan kepada variabel banyakKaryawan:

banyakKaryawan = kotakListKaryawan.Items.Count;


Metode Items.Clear
Kontrol ListBox memiliki metode Items.Clear yang menghapus semua item pada properti Items. Berikut adalah bentuk umum dari metode ini:

NamaListBox.Items.Clear();

Sebagai contoh, asumsikan suatu aplikasi memiliki sebuah kontrol ListBox dengan nama kotakListKaryawan. Statemen berikut menghapus semua item dari list:

kotakListKaryawan.Items.Clear();



3.2 Loop while
KONSEP: Loop while menyebabkan sebuah statemen atau beberapa statemen dieksekusi secara berulang sepanjang suatu ekspresi Boolean bernilai true.

Loop while memiliki dua bagian: (1) sebuah ekspresi Boolean yang diuji untuk mendapat nilai true atau false dan (2) sebuah statemen atau beberapa statemen yang dieksekusi secara berulang sepanjang ekspresi Boolean bernilai true. Gambar 3.3 menunjukkan logika dari sebuah loop while.

Gambar 3.3 Logika dari sebuah loop while

Simbol diamond merepresentasikan ekspresi Boolean yang diuji. Perhatikan apa yang terjadi jika ekspresi bernilai true: Satu atau lebih statemen dieksekusi dan eksekusi program mengalir kembali ke titik tepat di atas simbol diamond. Ekspresi Boolean diuji kembali, dan jika masih bernilai true, maka proses akan berulang. Jika ekspresi Boolean bernilai false, program akan keluar dari loop. Setiap kali loop mengeksekusi statemennya atau statemen-statemennya, Anda dapat mengatakan bahwa loop beriterasi, atau melakukan iterasi.

Berikut adalah bentuk umum dari loop while:

while (EkspresiBoolean)
{
   statemen;
   statemen;
   dan seterusnya
}

Baris pertama disebut dengan klausa while. Klausa while diawali dengan kata while, yang diikuti dengan sebuah ekspresi Boolean yang diapit di dalam kurung. Awal dari baris kedua adalah kurung kurawal pembuka. Blok statemen yang ada setelah kurung kurawal pembuka dikenal dengan tubuh loop.

Ketika loop while dieksekusi, ekspresi Boolean akan diuji. Jika ekspresi Boolean bernilai true, maka setiap statemen yang ada di dalam tubuh loop akan dieksekusi, dan kemudian loop dimulai kembali. Jika ekspresi Boolean bernilai false, maka loop akan berakhir dan program memulai eksekusi pada statemen yang ada setelah loop.

Anda mengatakan bahwa statemen-statemen di dalam tubuh loop secara kondisional dieksekusi karena ia dieksekusi bila kondisi terpenuhi (ekspresi Boolean berniali true). Jika Anda menuliskan sebuah loop while yang hanya memiliki satu statemen di dalam tubuhnya, Anda tidak perlu menggunakan kurung kurawal. Loop semacam itu dapat dituliskan dengan bentuk umum berikut:

while (EkspresiBoolean)
   statemen;

Ketika sebuah loop while yang dituliskan seperti format ini dieksekusi, ekspresi Boolean akan diuji. Jika ia bernilai true, satu-satunya statemen yang ada pada baris berikutnya akan dieksekusi, dan kemudian loop akan dimulai lagi. Jika ekspresi Boolean bernilai false, maka loop akan berhenti.

Meskipun kurung kurawal tidak diharuskan ketika hanya ada satu statemen di dalam tubuh loop, adalah hal baik untuk menggunakannya, seperti ditunjukkan dalam bentuk umum berikut:

while (EkspresiBoolean )
{
   statemen;
}

Ketika Anda mempelajari sejumlah statemen if pada bab sebelumnya, Anda mengetahui bahwa ini merupakan gaya pemrograman yang baik karena bisa menghindarkan dari kebingungan. Jika Anda memiliki lebih dari satu statemen di dalam tubuh loop, statemen-statemen itu harus diapit di dalam kurung kurawal. Jika Anda terbiasa mengapit statemen-statemen yang dieksekusi secara kondisonal menggunakan kurung kurawal, maka Anda semakin terbiasa menggunakannya meski bila hanya ada satu statemen di dalam tubuh loop.

Anda tentu memerhatikan bahwa statemen-statemen di dalam tubuh loop diindentasi. Sama seperti statemen if, indentasi ini membuat kode lebih mudah dibaca dan didebug. Dengan mengidentasi statemen-statemen di dalam tubuh loop, Anda dapat memisahkannya secara visual dari kode yang lain.

Lihat contoh berikut. Di dalam CD yang menyertai buku ini, Anda akan menemukan sebuah projek dengan nama Demo Loop while. Gambar 3.4 menunjukkan form aplikasi. Seperti ditunjukkan pada gambar kiri, nama kontrol Button adalah tombolGo. Saat aplikasi dijalankan, ketika Anda mengklik kontrol tombolGo, kotak pesan akan ditampilkan seperti ditunjukkan pada gambar kanan. Ketika Anda mengklik tombol OK untuk menutup kotak pesan tersebut, pesan kotak lain ditampilkan. Kotak pesan seperti ini ditampilkan lima kali. Berikut adalah kode untuk event handler tombolGo_Click:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void tombolGo_Click(object sender, EventArgs e)
{
   //Mendeklarasikan sebuah variabel untuk mencacah iterasi loop
   int cacah = 1;

   //Menampilkan “Halo” pada sebuah kotak pesan lima kali
   while (cacah <= 5)
   {
      //Menampilkan kotak pesan
      MessageBox.Show("Halo");

      //Menambahkan 1 pada cacah
      cacah = cacah + 1;
   }
}

Amati kode lebih dekat. Pada baris 4, sebuah variabel int dengan nama cacah dideklarasikan dan diinisialisasi dengan nilai 1. Sebuah loop while diawali pada baris 7. Perhatikan bahwa loop while menguji ekspresi cacah <= 5. Statemen-statemen di dalam tubuh loop while dieksekusi secara berulang sepanjang variabel cacah bernilai kurang dari 5. Di dalam tubuh loop, baris 10 menampilkan “Halo” pada sebuah kotak pesan, dan kemudian baris 13 menambahkan satu pada variabel cacah. Ini merupakan statemen terakhir di dalam tubuh loop. Jadi, setelah statemen tersebut dieksekusi, loop akan diawali kembali. Ia menguji ekspresi Boolean kembali, dan jika masih bernilai true, statemen-statemen di dalam tubuh loop akan dieksekusi. Siklus ini berulang sampai ekspresi Boolean, cacah <= 5 bernilai false, seperti diilustrasikan pada Gambar 3.5. Diagram alir untuk loop ini ditampilkan pada Gambar 3.6.


Gambar 3.4 Aplikasi Demo Loop while


Gambar 3.5 Loop while


Gambar 3.6 Diagram alir untuk loop while


Loop while adalah Loop Prauji
Loop while dikeal sebagai loop prauji, yang berarti bahwa ia menguji kondisinya sebelum melakukan iterasi. Karena pengujian dilakukan di awal loop, Anda perlu melakukan beberapa langkah sebelum loop dieksekusi untuk memastikan loop dieksekusi sedikitnya sekali. Perhatikan deklarasi dari variabel cacah di dalam program Demo Loop while:

int cacah = 1;

Variabel cacah diinisialisasi dengan nilai 1. Jika cacah telah diinisialisasi dengan sebuah nilai yang lebih besar dari 5, seperti ditunjukkan pada contoh berikut, loop tidak akan pernah dieksekusi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void tombolGo_Click(object sender, EventArgs e)
{
   //Mendeklarasikan sebuah variabel untuk mencacah iterasi loop
   int cacah = 6;

   //Loop ini tidak akan pernah dieksekusi
   while (cacah <= 5)
   {
      //Menampilkan kotak pesan
      MessageBox.Show("Halo");

      //Menambahkan 1 pada cacah
      cacah = cacah + 1;
   }
}

Karakteristik penting dari loop while ini adalah bahwa loop tidak akan pernah beriterasi jika ekspresi Boolean bernilai false pada awalnya. Jika Anda ingin memastikan bahwa loop while dieksekusi minimal sekali, Anda perlu menginisialisasinya dengan data relevan sedemikian rupa sehingga ekspresi Boolean diawali dengan nilai true.


Variabel Pencacah
Pada aplikasi Demo Loop while, variabel cacah diinisialisasi dengan nilai 1, dan kemudian 1 ditambahkan pada variabel cacah pada tiap iterasi. Loop dieksekusi sepanjang cacah bernilai kurang dari atau sama dengan 5. Variabel cacah dipakai sebagai variabel pencacah, yang berarti bahwa ia secara reguler diinkremen pada tiap iterasi loop. Pada dasarnya, variabel cacah menjejak jumlah iterasi loop yang telah dilakukan. Variabel pencacah umumnya dipakai untuk mengendalikan banyak iterasi dari loop.

Tutorial 3.1 akan memberikan latihan penulisan loop dan penggunaan variabel pencacah. Dalam tutorial ini, Anda akan menuliskan sebuah loop while yang menghitung besar bunga yang dihasilkan tiap bulannya pada suatu akun bank untuk sejumlah bulan tertentu.


Tutorial 3.1: Menggunakan Loop untuk Menghitung Saldo Akun
Pada tutorial, Anda menyelesaikan aplikasi Saldo Akhir. Projek telah diciptakan bagi Anda dan ditempatkan di dalam CD yang menyertai buku ini. Form aplikasi ditampilkan pada Gambar 3.7a.

Ketika Anda menyelesaikan aplikasi, user dapat memasukkan saldo awal dari akun ke dalam kontrol teksSaldoAwal dan jumlah bulan dari akun untuk menerima bunga ke dalam kontrol teksBulan. Ketika user mengklik kontrol tombolHitung, aplikasi akan menghitung saldo akun di akhir periode. Suku bunga bulanan yang diberikan adalah 0.005, dan bunga uang dihitung tiap bulan.

Langkah 1: Awali Visual Studio (atau Visual Studio Express). Buka projek dengan nama Saldo Akhir di dalam CD yang menyertai buku ini.

Langkah 2: Buka forn Form1 pada mode Designer. Form ditunjukkan, berikut dengan nama-nama dari kontrol-kontrol penting, pada Gambar 3.7.

Langkah 3: Sekarang, Anda akan menciptakan event handler Click untuk kontrol-kontrol Button. Di akhir tutorial ini, Program 3.1. menunjukkan kode utuh untuk form. Pada mode Designer, klik ganda pada kontrol tombolHitung. Ini akan membuka editor kode, dan Anda akan melihat sebuah event handler kosong dengan nama tombolHitung_Click. Sempurnakan kode event handler ini dengan menuliskan kode yang ditunjukkan pada baris 22-59 pada Program 3.1. Amati kode lebih dekat:

Baris 23: Statemen ini mendeklarasikan sebuah konstanta decimal dengan nama SUKU_BUNGA, yang ditetapkan dengan nilai 0.05. Ini adalah suku bunga bulanan.

Baris 26-28: Statemen-statemen ini mendeklarasikan variabel-variabel berikut:
·    saldo: sebuah variabel decimal untuk memuat saldo akun.
·   bulan: sebuah variabel int untuk memuat banyak bulan dimana akun akan menerima bunga tiap bulannya.
·   cacah: sebuah variabel int yang dipakai untuk menjejak bulan ketika loop beriterasi. Perhatikan bahwa variabel cacah diinisialisasi dengan nilai 1.

Baris 31: Statemen if ini mencoba untuk mengkonversi teksSaldoAwal.Text menjadi sebuah decimal. Jika konversi berhasil, hasilnya disimpan di dalam variabel saldo, dan program berlanjut mengeksekusi baris 33. Jika konversi tidak berhasil, program akan melompat ke klausa else pada baris 55, dan baris 58 menampilkan pesan error Nilai tak valid untuk saldo awal.

Baris 34: Statemen if ini mencoba untuk mengkonversi teksBulan.Text menjadi sebuah int. Jika konversi berhasil dilakukan, hasilnya akan disimpan di dalam variabel bulan, dan program berlanjut mengeksekusi baris 36. Jika konversi tidak berhasil, program melompat ke klausa else pada baris 49, dan baris 52 menampilkan pesan error Nilai tak valid untuk bulan.

Baris 37: Ini adalah awal dari sebuah loop while. Loop dieksekusi sepanjang ekspresi cacah <= bulan bernilai true.

Baris 39-43: Statemen-statemen ini adalah tubuh loop. Baris 40 menghitung bunga bulanan dan menambahkannya pada variabel saldo. Baris 43 menambahkan 1 pada variabel cacah.

Baris 47: Statemen ini dieksekusi setelah loop menyelesaikan semua iterasinya. Ia mengkonversi  nilai dari variabel saldo menjadi suatu string dan menugaskan string yang dihasilkan kepada properti Text dari kontrol labelSaldoAkhir.

Langkah 4: Kembali ke mode Designer dan mengklik ganda kontrol tombolBersih. Pada editor kode, Anda akan mendapati sebuah event handler kosong dengan nama tombolBersih_Click. Sempurnakan event handler ini dengan menuliskan kode yang ditunjukkan pada baris 64-70 pada Program 3.1.

Langkah 5: Kembali ke mode Designer dan klik ganda pada kontrol tombolKeluar. Pada editor kode, Anda akan melihat sebuah event handler kosong dengan nama tombolKeluar_Click. Sempurnakan event handler ini dengan menuliskan kode yang ditunjukkan pada baris 75-76 pada Program 3.1.

Langkah 6: Simpan projek dan jalankan aplikasi. Masukkan suatu nilai sebagai saldo awal dan masukkan banyak bulan. Klik tombol Hitung untuk mendapatkan saldo akhir. Selanjutnya, klik tombol Bersih untuk membersihkan kontrol-kontrol TextBox dan uji kembali aplikasi dengan nilai-nilai lain.

Gambar 3.7a Form Saldo Akhir

Program 3.1 Kode utuh untuk Form1 pada aplikasi Saldo Akhir
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Saldo_Akhir
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void tombolHitung_Click(object sender, EventArgs e)
        {
            //Konstanta untuk suku bunga bulanan
            const decimal SUKU_BUNGA = 0.005m;

            //Variabel-variabel lokal
            decimal saldo;  //Saldo akun
            int bulan;      //Banyak bulan
            int cacah = 1;  //Pencacah loop, diinisialisasi dengan 1

            //Mendapatkan saldo awal
            if (decimal.TryParse(teksSaldoAwal.Text, out saldo))
            {
                //Memabaca jumlah bulan
                if (int.TryParse(teksBulan.Text, out bulan))
                {
                    //Loop berikut menghitung saldo akhir
                    while (cacah <= bulan)
                    {
                        //Menambahkan bunga bulan ini pada saldo
                        saldo = saldo + (SUKU_BUNGA * saldo);

                        //Menambah satu pada pencacah loop
                        cacah = cacah + 1;
                    }

                    //Menampilkan saldo akhir
                    labelSaldoAkhir.Text = "Rp. " + saldo.ToString("n2");
                }
                else
                {
                    //Jumlah bulan tak valid dimasukkan
                    MessageBox.Show("Nilai tak valid untuk bulan.");
                }
            }
            else
            {
                //Saldo awal tak valid dimasukkan
                MessageBox.Show("Nilai tak valid untuk saldo awal.");
            }
        }

        private void tombolBersih_Click(object sender, EventArgs e)
        {
            //Membersihkan kontrol TextBox dan label
            teksSaldoAwal.Text = "";
            teksBulan.Text = "";
            labelSaldoAkhir.Text = "";

            //Membuat fokus ke kontrol teksSaldoAwal
            teksSaldoAwal.Focus();
        }

        private void tombolKeluar_Click(object sender, EventArgs e)
        {
            //Menutup form
            this.Close();
        }
    }
}

Keluaran program saat aplikasi dijalankan ditampilkan pada Gambar 3.7b.

Gambar 3.7b Form Saldo Akhir saat dijalankan


Tutorial 3.2: Memperbaiki Apliksi Saldo Akhir
Pada tutorial ini, Anda akan memperbaiki aplikasi Saldo Akhir yang telah Anda ciptakan pada Tutorial 3.1. Pertama, tambahkan sebuah kontrol ListBox pada form aplikasi, seperti ditunjukkan pada Gambar 3.8. Kemudian modifikasi even handler tombolHitung_Click sehingga ia menampilkan saldo akhir tiap bulan pada ListBox. Gambar 3.9 menunjukkan suatu contoh bagaimana form akan ditampilkan ketika user telah memasukkan 1000 untuk saldo awal dan 8 untuk banyak bulan.

Gambar 3.9 Contoh keluaran projek Saldo Akhir Diperbaiki

Langkah 1: Awali Visual Studio (atau Visual Studio Express) dan buka projek dengan nama Saldo Akhir Diperbaiki.

Langkah 2: Besarkan form sehingga tampak seperti ditunjukkan pada Gambar 3.8.

Langkah 3: Ciptakan sebuah kontrol ListBox dengan nama kotakListDetil. Ubah ukuran ListBox seperti ditunjukkan pada Gambar 3.8.

Langkah 4: Kembali kode editor kode dan sisipkan kode yang ditunjukkan pada baris 42-45 pada Program 3.2. Baris-baris baru ditebalkan. Statemen pada baris 43-45 menambahkan sebuah string pada kontrol kotakListDetil. Jika Anda memeriksa statemen dengan hati-hati, Anda akan melihat bahwa ia menggunakan penyambungan untuk menciptakan sebuah string.

Langkah 5: Temukan event handler tombolBersih_Click pada editor kode. Perbarui komentar seperti ditunjukkan pada baris 69-70, dan sisipkan kode seperti ditunjukkan pada baris 74. Statemen pada baris 74 membersihkan isi dari kontrol kotakListDetil.

Langkah 6: Simpan projek dan jalankan aplikasi. Seperti ditunjukkan pada Gambar 3.9, masukkan 1000 sebagai saldo awal dan 8 sebagai banyak bulan. Klik tombol Hitung. Keluaran akan ditunjukkan seperti pada Gambar 3.9.

Program 3.2 Kode utuh untuk Form1 pada aplikasi Saldo Akhir Diperbaiki
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Saldo_Akhir
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void tombolHitung_Click(object sender, EventArgs e)
        {
            //Konstanta untuk suku bunga bulanan
            const decimal SUKU_BUNGA = 0.005m;

            //Variabel-variabel lokal
            decimal saldo;  //Saldo akun
            int bulan;      //Banyak bulan
            int cacah = 1;  //Pencacah loop, diinisialisasi dengan 1

            //Mendapatkan saldo awal
            if (decimal.TryParse(teksSaldoAwal.Text, out saldo))
            {
                //Memabaca jumlah bulan
                if (int.TryParse(teksBulan.Text, out bulan))
                {
                    //Loop berikut menghitung saldo akhir
                    while (cacah <= bulan)
                    {
                        //Menambahkan bunga bulan ini pada saldo
                        saldo = saldo + (SUKU_BUNGA * saldo);

                        // Menampilkan saldo akhir bulan ini
                        kotakListDetil.Items.Add("Saldo akhir " +
                            "untuk bulan " + cacah + " adalah Rp. " +
                            saldo.ToString("n1"));

                        //Menambah satu pada pencacah loop
                        cacah = cacah + 1;
                    }

                    //Menampilkan saldo akhir
                    labelSaldoAkhir.Text = "Rp. " + saldo.ToString("n2");
                }
                else
                {
                    //Jumlah bulan tak valid dimasukkan
                    MessageBox.Show("Nilai tak valid untuk bulan.");
                }
            }
            else
            {
                //Saldo awal tak valid dimasukkan
                MessageBox.Show("Nilai tak valid untuk saldo awal.");
            }
        }

        private void tombolBersih_Click(object sender, EventArgs e)
        {
            //Membersihkan kontrol TextBox, Label
            //dan ListBox
            teksSaldoAwal.Text = "";
            teksBulan.Text = "";
            labelSaldoAkhir.Text = "";
            kotakListDetil.Items.Clear();

            //Membuat fokus ke kontrol teksSaldoAwal
            teksSaldoAwal.Focus();
        }

        private void tombolKeluar_Click(object sender, EventArgs e)
        {
            //Menutup form
            this.Close();
        }
    }
}



3.3 Operator ++ dan --
KONSEP: Menginkremen sebuah variabel berarti menambah nilainya, dan mendekremen suatu variabel berarti mengurangi nilainya. C# menyediakan operator untuk menginkremen dan operator untuk mendekremen variabel.

Menginkremen sebuah variabel berarti menambah nilainya, dan mendekremen suatu variabel berarti mengurangi nilainya. Kedua statemen berikut menginkremen variabel angka sebesar 1:

angka = angka + 1;
angka += 1;

Dan angka didekremen sebesar 1 pada kedua statemen berikut:

angka = angka - 1;
angka -= 1;

Penginkremenan dan pendekremenan begitu sering dijumpai pada banyak program C#. C# menyediakan beberapa operator unary yang dirancang untuk menginkremen dan mendekremen variabel. Operator inkremen adalah ++, dan operator dekremen adalah --. Statemen berikut menggunakan operator ++ untuk menambahkan 1 pada angka:

angka++;

Setelah statemen ini dieksekusi, nilai dari angka ditambah sebesar 1. Statemen berikut menggunakan operator – untuk mengurangkan 1 dari angka:

angka--;

Pada contoh-contoh ini, Anda telah menuliskan operator ++ dan -- yang ditempatkan setelah operand (atau di sisi kanan dari operandnya). Ini dinamakan dengan mode postfiks. Oprator-operator dapat pula dituliskan sebelum (atau di sisi kiri) dari operandnya, yang dinamakan dengan mode prefiks.

++angka;
−−angka;

Ketika Anda menuliskan sebuah statemen sederhana untuk menginkremen atau mendekremen suatu variabel, seperti yang ditunjukkan di sini, adalah tidak masalah jika Anda menggunakan mode prefiks atau mode postfiks. Operator akan melakukan hal yang sama untuk kedua mode tersebut. Namun, jika Anda menuliskan statemen yang mencampur operator ini dengan operator lain, maka ada perbedaan dalam cara bagaimana kedua mode bekerja. Kode kompleks dapat lebih susah dipahami dan didebug. Ketika Anda menggunakan operator inkremen dan dekremen, Anda akan melakukannya hanya untuk cara-cara yang mudah dan sederhana untuk dipahami, seperti statemen-statemen yang telah ditunjukkan.

Operator inkremen dan dekremen sangat umum digunakan di dalam loop. Segmen kode berikut menunjukkan salah satu contoh. Pada kode, variabel cacah diinisialisasi dengan nilai 1. Loop while yang diawali pada baris 5 beriterasi sepanjang cacah bernilai kurang dari atau sama dengan 5. Statemen pada baris 11 menginkremen cacah. Loop akan beriterasi 5 kali.

1
2
3
4
5
6
7
8
9
10
11
12
//Mendeklarasikan sebuah variabel untuk menghitung iterasi loop
int cacah = 1;

//Menampilkan “Halo” pada suatu kotak pesan lima kali
while (cacah <= 5)
{
   //Menampilkan kotak pesan
   MessageBox.Show("Halo");

   //Menginkremen cacah
   cacah++;
}



3.4 Loop for
KONSEP: Loop for adalah loop ideal untuk melakukan sejumlah tertentu iterasi dengan banyak iterasi telah diketahui sebelumnya.

Loop for secara spesifik dirancang untuk situasi-situasi yang mengharuskan suatu variabel pencacah untuk mengendalikan banyak iterasi dari loop. Ketika Anda menuliskan sebuah loop for, Anda akan menetapkan tiga aksi:
·    Inisialisasi: Aksi ini dilakukan ketika loop dimulai. Ia hanya terjadi sekali.
·   Pengujian: Sebuah ekspresi Boolean diuji. Jika ekspresi ini bernilai true, maka loop beriterasi. Jika bernilai false, loop akan berhenti.
·    Pembaruan: Aksi ini terjadi di akhir dari tiap iterasi loop.

Gambar 3.10 menunjukkan bagaimana ketiga aksi ini dipakai pada logika dari suatu loop for. Berikut adalah bentuk umum dari loop for:

for (EkspresiInisialisasi; EkspresiPengujian; EkspresiPembaruan)
{
  statemen;
  statemen;
  dan seterusnya…
}

Statemen-statemen yang ada di dalam kurung kurawal adalah tubuh loop. Statemen-statemen ini dieksekusi setiap kali loop beriterasi. Seperti struktur kendali, kurung kurawal bersifat opsional jika tubuh loop hanya memuat satu statemen, seperti ditunjukkan pada bentuk umum berikut:

for (EkspresiInisialisasi; EkspresiPengujian; EkspresiPembaruan)
   statemen;

Baris pertama dari loop adalah header loop. Setelah katakunci for, ada tiga ekspresi di dalam kurung, yang dipisahkan dengan titik-koma. (Perhatikan bahwa tidak ada titik-koma setelah ekspresi ketiga.)


Gambar 3.10 Logika dari sebuah loop for


Ekspresi pertama adalah ekspresi inisialisasi. Ia biasanya dipakai untuk menginisialisasi suatu variabel pencacah untuk nilai awalnya. Ini adalah aksi pertama yang dilakukan loop, dan hanya dilakukan sekali. Ekspresi kedua adalah ekspresi pengujian. Ini adalah sebuah ekspresi Boolean yang mengendalikan eksekusi loop. Sepanjang ekspresi ini bernilai true, tubuh loop for adakan dieksekusi. Loop for merupakan loop prauji, jadi ekspresi pengujian dievaluasi sebelum tiap iterasi dilakukan. Ekspresi ketiga adalah ekspresi pembaruan, yang dieksekusi di akhir tiap iterasi. Umumnya, ini merupakan sebuah statemen yang menginkremen variabel pencacah dari loop.

Asumsikan bahwa cacah adalah sebuah variabel int yang telah dideklarasikan. Berikut adalah sebuah contoh sederhana dari loop for yang menampilkan “Halo” pada sebuah kotak pesan sebanyak lima kali:

for (cacah = 1; cacah <= 5; cacah++)
{
   MessageBox.Show("Healo");
}

Pada loop ini, ekspresi inisialisasi adalah cacah = 1, ekspresi pengujian adalah cacah <= 5, dan ekspresi pembaruan adalah cacah++. Tubuh dari loop memiliki satu statemen, yaitu pemanggilan terhadap metode MessageBox.Show. Ini merupakan simpulan dari apa yang terjadi ketika loop dieksekusi:
1.      Ekspresi inisialisasi cacah = 1 dieksekusi. Ini menugaskan 1 kepada variabel cacah.
2.      Ekspresi cacah <= 5 diuji. Jika ekspresi bernilai true, lanjut ke Langkah 3. Jika ekspresi bernilai false, loop selesai dieksekusi.
3.      Statemen MessageBox.Show(“Halo”) dieksekusi.
4.      Statemen pembaruan cacah++ dieksekusi. Ini menambahkan 1 pada variabel cacah.
5.      Kembali ke Langkah 2.

Gambar 3.11 mengilustrasikan runtun event ini. Perhatikan bahwa Langkah 2-4 diulangi sepanjang ekspresi pengujian bernilai true. Gambar 3.12 menunjukkan logika loop sebagai suatu diagram alir.


Gambar 3.11 Runtun event pada loop for



Gambar 3.12 Logika dari sebuah loop for


Lihat sebauh aplikasi yang menggunakan suatu loop for berikut. Pada CD yang menyertai buku ini, Anda akan mendapati sebuah projek dengan nama Kuadrat. Tujuan dari aplikasi ini adalah untuk menampilkan nilai 1 – 10 dan kuadratnya. Gambar 3.13 menunjukkan form aplikasi. Seperti ditunjukkan pada gambar kiri, nama ListBox adalah kotakListKeluaran dan nama dari kontrol Button adalah tombolGo. Saat aplikasi dijalankan, ketika Anda mengklik kontrol tombolGo, kontrol kotakListKeluaran menampilkan keluaran program, seperti ditunjukkan pada gambar di kanan.

Berikut adalah kode untuk event handler tombolGo_Click:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void tombolGo_Click(object sender, EventArgs e)
{
   //Konstanta untuk nilai maksimum
   const int NILAI_MAKS = 10;

   //Pencacah loop
   int nilai;

   //Menampilkan daftar nilai dan kuadratnya
   for (nilai = 1; nilai <= NILAI_MAKS; nilai++)
   {
      kotakListKeluaran.Items.Add("Kuadrat dari " +
         nilai + " adalah " + (nilai * nilai));
   }
}

Amati kode ini lebih dekat:
·   Baris 4 mendeklarasikan sebuah konstanta int dengan nama NILAI_MAKS, yang ditetapkan menjadi nilai 10. Ini adalah nilai maksimum yang akan dipakai untuk menghitung kuadrat.
·    Baris 7 mendeklarasikan sebuah variabel int dengan nama nilai. Variabel ini dipakai baik sebagai variabel pencacah maupun pada perhitungan kuadrat.
·   Baris 10 merupakan awal dari loop for. Anda dapat melihat dari baris ini bahwa loop bekerja dengan cara berikut:
Inisialisasi: Variabel nilai diinisialisasi dengan nilai 1.
Pengujian: Ekspresi nilai <= NILAI_MAKS diuji diawal dari tiap iterasi.
Pembaruan: Ekspresi nilai++ dieksekusi di akhir dari tiap iterasi.

·   Karena konstanta NILAI_MAKS ditetapkan nilai 10, variabel nilai akan ditugasi nilai 1 sampai 10 ketika loop beriterasi.
·  Baris 12 dan 13: Statemen ini menambahkan satu baris pada ListBox yang menunjukkan nilai sekarang dari variabel nilai, dan kuadrat dari nilai itu.



Loop for Adalah Loop Prauji
Karena loop for menguji ekspresi Booleannya sebelum ia memulai iterasi, loop for dikatakan sebagai loop prauji. Adalah dimungkinkan untuk menuliskan sebuah loop for dengan cara sehingga ia tidak akan pernah beriterasi. Berikut adalah salah satu contohnya:

for (cacah = 6; cacah <= 5; cacah++)
{
   MessageBox.Show("Halo");
}

Karena variabel cacah diinisialisasi dengan suatu nilai yang membuat ekspresi Boolean bernilai false sebelum loop dieksekusi, loop ini berhenti ketika ia baru saja dimulai.

Mendeklarasikan Variabel Pencacah Pada Ekspresi Inisialisasi
Variabel pencacah tidak hanya bisa diinisialisasi pada ekspresi inisialisasi, tetapi ia juga bisa dideklarasikan di sana. Kode berikut menunjukkan salah satu contoh:

for (int cacah = 1; cacah <= 5; cacah++)
{
   MessageBox.Show("Halo");
}

Pada loop ini, variabel cacah dideklarasikan dan diinisialisasi pada ekspresi inisialisasi. Jika variabel hanya digunakan di dalam loop, adalah masuk akal untuk mendefinisikannya pada header loop. Ini membuat tujuan dari variabel lebih jelas.

Ketika sebuah variabel dideklarasikan para ekspresi inisialisasi dari sebuah loop for, skop dari variabel itu dibatasi hanya untuk loop. Ini berarti Anda tidak dapat mengakses variabel itu pada statemen di luar loop. Sebagai contoh, kode berikut akan menyebabkan error kompilasi karena statemen pada baris 6 tidak dapat mengakses variabel cacah.

1
2
3
4
5
6
for (int cacah = 1; cacah <= 5; cacah++)
{
    MessageBox.Show("Halo");
}

MessageBox.Show("Nilai dari cacah adalah " + cacah);



Bentuk Lain dari Ekspresi Pembaruan
Pada ekspresi pembaruan, variabel cacah umumnya diinkremen sebesar 1. Ini membuatnya lebih mudah untuk menggunakan operator ++ pada ekspresi inkremen. Ini bukanlah keharusan. Anda bisa menuliskan ekspresi apa saja yang Anda inginkan sebagai ekspresi pembaruan. Sebagai contoh, loop berikut menginkremen cacah sebesar 10:

for (int cacah = 0; cacah <= 100; cacah += 10)
{
   MessageBox.Show(cacah.ToString());
}

Perhatikan bahwa pada contoh ini, ekspresi inkremen adalah cacah += 10. Ini berarti bahwa di akhir tiap iterasi, 10 ditambahkan pada cacah. Selama iterasi pertama, cacah ditetapkan 0, selama iterasi kedua cacah ditetapkan 10, selama iterasi ketiga cacah ditetapkan 20, dan seterusnya.



Mencacah Mundur Dengan Mendekremen Variabel Pencacah
Meskipun variabel pencacah umumnya diinkremen pada sebuah loop terkendali-cacah, secara alternatif Anda bisa mendekremen variabel pencacah. Sebagai contoh, lihat kode berikut:

for (int cacah = 10; cacah >= 0; cacah--)
{
   MessageBox.Show(cacah.ToString());
}
MessageBox.Show("Keluar loop!");

Pada loop ini, variabel cacah diinisialisasi dengan nilai 10. Loop ini beriterasi sepanjang cacah lebih besar dari atau sama dengan 0. Di akhir tiap iterasi, cacah didekremen sebesar 1.

Selama iterasi pertama, cacah bernilai 10, selama iterasi kedua cacah bernilai 9, dan seterusnya.



Menghindari Pemodifikasian Variabel Pada Tubuh Loop for
Anda perlu hati-hati agar tidak menempatkan statemen yang memodifikasi variabel pencacah di dalam tubuh loop for. Semua modifikasi dari variabel kendali harus dilakukan pada ekspresi pembaruan, yang secara otomatis dieksekusi di akhir dari tiap iterasi. Jika sebuah statemen di dalam tubuh loop juga memodifikasi variabel pencacah, maka loop bisa saja tidak akan pernah berhenti ketika Anda mengharapkannya berhenti. Loop berikut, misalnya, menginkremen cacah dua kali untuk tiap iterasi:

for (int cacah = 1; cacah <= 10; cacah++)
{
   MessageBox.Show(cacah.ToString());
   cacah++;    //Salah!
}

Anda telah melihat beberapa contoh loop for. Tutorial 3.3 memberikan Anda kesempatan untuk menuliskannya sendiri dalam projek. Pada tutorial, Anda akan menciptakan suatu aplikasi yang menggunakan loop for untuk mengkonversi sejumlah pengukuran dari sistem metrik ke sistem English.


Tutorial 3.3: Menggunakan Loop for
Teman Anda dibelikan mobil sport Eropa oleh pamannya yang ada di sana. Teman itu ingin memodifikasi speedometernya agar dibaca dari kilometer per jam menjadi mil per jam. Anda diminta untuk menuliskan sebuah program untuk menampilkan tabel konversi dalam km per jam dengan nilai ekivalennya dalam mil per jam. Formula untuk mengkonversi km per jam menjadi mil per jam adalah:

MPJ = KPJ * 0.6214

Pada formula, MPJ adalah kecepatan dalah mil per jam dan KPJ adalah kecepatan dalam km per jam.

Tabel yang akan ditampilkan oleh program Anda herus menunjukkan kecepatan dari 60 kilometer per jam sampai 130 kilometer per jam, dengan inkremen 10, berikut dengan nilai-nilai yang dikonversi menjadi mil per jam. Tabel akan ditampilkan seperti berikut:

KPJ
MPJ
60
70
80
dan seterusnya
37.284
43.498
49.712
         
Setelah melihat tabel ini, Anda memutuskan bahwa Anda akan menuliskan sebuah loop for yang menggunakan suatu variabel pencacah untuk memuat kecepatan km per jam. Nilai awal pencacah adalah 60, nilai akhirnya adalah 130, dan Anda akan menginkremen nilainya sebesar 10 pada ekspresi pembaruan. Di dalam loop, Anda akan menggunakan variabel pencacah untuk menghitung kecepatan dalam mil per jam.

Projek, yang diberi nama Konverter Kecepatan, telah disediakan bagi Anda. Form aplikasi ditunjukkan pada Gambar 3.14. Gambar di kiri menunjukkan nama dari tiap kontrol pada form. Gambar di kanan menunjukkan bagaimana form ditampilkan setelah user mengklik tombol Tampilkan Kecepatan.

Langkah 1: Awali Visual Studio (atau Visual Studio Express). Buka projek dengan nama Konverter Kecepatan yang ada di dalam CD yang menyertai buku ini.

Langkah 2: Buka form Form1 pada mode Designer.

Langkah 3: Pada Designer, klik ganda pada kontrol tombolTampil. Ini akan membuka editor kode, dan Anda akan melihat sebuah event handler kosong dengan nama tombolTampil_Click. Sempurnakan event handler ini dengan menuliskan kode yang ditunjukkan pada baris 22-41 pada Program 3.3 (di akhir dari tutorial ini).


Gambar 3.14 Form Konverter Kecepatan

Langkah 4: Kembali ke mode Designer dan klik ganda pada kontrol tombolKeluar. Pada editor kode, Anda akan melihat sebuah event handler kosong dengan nama tombolKeluar_Click. Sempurnakan event handler ini dengan menuliskan kode yang ditunjukkan pada baris 46-67 pada Program 3.3.

Langkah 5: Simpan projek dan jalankan aplikasi. Klik tombol Tampilkan Kecepatan dan Anda akan melihat keluaran yang ditunjukkan pada gambar kanan pada Gambar 3.14. Klik tombol Keluar untuk mengakhiri aplikasi.

Program 3.3 Kode utuh untuk Form1 pada aplikasi Konverter Kecepatan
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Konverter_Kecepatan
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void tombolTampil_Click(object sender, EventArgs e)
        {
            //Konstanta-konstanta
            const int KECEPATAN_AWAL = 60;
            const int KECEPATAN_AKHIR = 130;
            const int INTERVAL = 10;
            const double FAKTOR_KONVERSI = 0.6214;

            //Variabel-variabel
            int kpj;        //Kilometer per jam
            double mpj;     //Mil per jam

            //Menampilkan tabel kecepan
            for (kpj = KECEPATAN_AWAL; kpj <= KECEPATAN_AKHIR; kpj += INTERVAL)
            {
                //Menghitung mil per jam
                mpj = kpj * FAKTOR_KONVERSI;

                //Menampilkan konversi
                kotakListKeluaran.Items.Add(kpj + " KPJ sama dengan " +
                    mpj + " MPJ");
            }
        }

        private void tombolKeluar_Click(object sender, EventArgs e)
        {
            //Menutup form
            this.Close();
        }

    }
}




No comments:

Post a Comment