KU‐1072 PENGENALAN TEKNOLOGI INFORMASI B (PTI – B)
2008
MATERI II EKSPRESI DAN PERCABANGAN Materi Praktikum Durasi TIU/TIK
Referensi
Ekspresi dan Percabangan 180 menit [60 menit penjelasan + 120 menit praktikum] 1. Pendahuluan 2. Operator 3. Manipulasi Data dengan Operator 4. Struktur Percabangan (IF CONDITIONAL) 1. Diktat dan Literatur 2. Schildt, C++: The Complete Reference Third Edition, McGraw‐Hill, 1998
1. PENDAHULUAN Operator dan Ekspresi Operator dapat didefinisikan sebagai suatu simbol yang menyebabkan kompiler melakukan suatu kegiatan/aksi dimana operator tersebut melakukan aksi tersebut atas operand. Perlu diketahui bahwa operand dalam bahasa C++ merupakan ekspresi. Lingkup dari operator sebenarnya cukup luas, namun dalam kesempatan ini pembahasan akan lebih difokuskan pada operator‐operator utama dan operator assignment. Selain pembahasan mengenai operator, dalam sesi ini juga akan dibahas mengenai struktur percabangan, atau biasa dikenal dengan istilah if conditional. Bentuk dari percabangan ini bisa bermacam‐macam tergantung kebutuhan misalnya hanya if, if‐else, if‐elseif, dan lain sebagainya. Jenis‐ jenis tersebut dapat digunakan berdasarkan bentuk dari permasalahan kita yang akan dipecahkan. NOTE : Prioritas pertama yang dipelajari adalah bagaimana cara untuk memecahkan masalah, kemudian baru bagaimana menuliskannya dalam bentuk program.
2. OPERATOR Operator Aritmatika Sebelumnya perlu untuk diketahui bahwa dalam menggunakan suatu operator biasanya kita juga melibatkan suatu operator assignment. Untuk lebih jelasnya, perhatikan statement di bawah ini: A = x + y Dalam contoh ini, operator assignment (=) menyebabkan operand yang terletak di sisi kiri operator assignment (A) berubah menjadi nilai yang dihasilkan dari operator aritmatika di sisi kanan operator assignment (x+y). Singkat kata, yang terjadi pada statement di atas adalah nilai penjumlahan dari x dan y di‐assign ke operand A. Sesuai dengan penamaannya, operator aritmatika terdiri dari operator‐operator yang membantu kita dalam menyelesaikan proses aritmatika, seperti penjumlahan, pengurangan, perkalian, dan lainnya. Namun tidak semua proses aritmatika menggunakan operator ini. Untuk itu diperlukan tambahan suatu library yang akan membantu kita untuk memudahkan permasalahan.
Berikut adalah jenis‐jenis operator aritmatika yang terdapat dalam bahasa C++ : Operator
Fungsi
Contoh Penggunaan
+
Penjumlahan
A = 17 + 8; A bernilai 25
‐
Pengurangan
A = 17 ‐8; A bernilai 9
*
Perkalian
A = 17 * 8; A bernilai 136
/
Pembagian
A = 17 / 8; A bernilai 2.125
%
Sisa bagi (modulus)
A = 17 % 8; A bernilai 1
Untuk lebih jelasnya, mari kita mulai melakukan suatu pemrograman: INPUT: // Operator Aritmatika #include #include using namespace std; int main () { int a,b; float tambah,kurang,kali,bagi; cout << "Masukkan bilangan bulat a : "; cin >> a; cout << "Masukkan bilangan bulat b : "; cin >> b; tambah = a + b; kurang = a - b; kali = a * b; bagi = (float)a / b; // maksud dari (float)a => variabel a diubah tipenya menjadi float
cout cout cout cout cout
<< << << << <<
"\nHasil "\nHasil "\nHasil "\nHasil "\nHasil
penjumlahan, a pengurangan, a perkalian, a * pembagian, a / modulus, a mod
+ b b b
b b = = =
= = " " "
" << tambah; " << kurang; << kali; << bagi; << a%b;
getch(); // menunggu tombol apapun di keyboard ditekan return 0; }
OUTPUT: Masukkan bilangan bulat a : 17 Masukkan bilangan bulat b : 8 Hasil Hasil Hasil Hasil Hasil
penjumlahan, a pengurangan, a perkalian, a * pembagian, a / modulus, a mod
+ b b b
b b = = =
= 25 = 9 136 2.125 1
Dalam contoh di atas dapat dilihat bagaimana operator aritmatika bekerja. Satu hal yang perlu diperhatikan adalah statement berikut : bagi = (float)a / b; atau bagi = float(a) / b; Proses yang terjadi pada baris ini membuat hasil bagi menjadi suatu nilai float kemudian di‐ assign pada variabel(operand) bagi. Mengapa demikian? Tipe variabel a dan b adalah integer (sesuai dengan deklarasi awal). Apabila kita tidak mengikutsertakan (float) pada baris ini, maka hasil yang keluar bukanlah 2.125 melainkan 2. cara yang digunakan diatas disebut dengan konversi tipe atau dalam istilah pemrograman disebut dengan casting. Konversi ini dapat mengubah tipe dari tipe satu ke tipe lainnya. Misal dari integer ke float, dari double ke float, dan yang lainnya. INPUT: // Operator Aritmatika #include #include using namespace std; int main () { int a,b; float X, Y, Z; cout << "Masukkan bilangan bulat a : "; cin >> a; cout << "Masukkan bilangan bulat b : "; cin >> b; X = a / b; Y = float(a / b); Z = (float)a / b; cout << "\nHasil pembagian, a / b = " << X; cout << "\nHasil pembagian, float(a / b) = " << Y; cout << "\nHasil pembagian, (float)a / b = " << Z;
getch(); return 0; }
OUTPUT: Masukkan bilangan bulat a : 17 Masukkan bilangan bulat b : 8 Hasil pembagian, a / b = 2 Hasil pembagian, float(a / b) = 2 Hasil pembagian, (float)a / b = 2.125
X = a / b; Dikarenakan tipe a dan b berupa integer. Maka hasil pembagian tersebut tetap menjadi integer (meskipun tipe Y adalah float). Y = float(a / b); Proses yang berada di dalam kurung didahulukan, sehingga proses a/b dieksekusi duluan. Seperti halnya pada statement sebelumnya, hasilnya adalah 2. Kemudian nilai 2 dikonversi dalam bentuk float menjadi 2.000000 = 2. Z = (float)a / b; Atau Z = float(a) / b;
Pada statement ini kata ’float’ diletakkan dalam kurung sehingga nilai a/b langsung dihitung dalam bentuk float kemudian di‐assign ke variabel Z. Berikut contoh konversi tipe variabel secara ‘default’:
Jadi, untuk mengkonversi sebuah variabel, kita dapat gunakan sintaks seperti yang sudah dijelaskan diatas. Misal ada variabel a bertipe double, jika kita ingin mengubahnya menjadi tipe integer kita tinggal gunakan cara seperti berikut ini. Y = int (a); // dengan variabel sudah didefinisikan sebelumnya bertipe integer. Hal lain yang perlu diperhatikan adalah jika kita ingin membuat suatu ekspresi aritmatika, semua operand‐nya haruslah bertipe sama. Hal ini menandakan sebuah program yang baik dan bersih. Misal, A = B + C; Tipe dari A, B, dan C adalah sama. Baik itu adalah integer, float, double, atau char. Jika ada satu operand yang tidak sama maka operand tersebut harus dikonversi terlebih dahulu dengan cara yang sudah dijelaskan diatas.
Operator Relasi Hasil dari operator relasi adalah nilai true atau false, dimana hasil tersebut ditentukan dari hasil logika statement yang dieksekusi. Operator Fungsi Contoh Penggunaan ==
Persamaan
17 == 8
!=
Pertidaksamaan
17 != 8
>
Perbandingan lebih besar dari
17 > 8
<
Perbandingan lebih kecil dari
17 < 8
>=
Perbandingan lebih besar dari atau sama dengan
17 >= 8
<=
Perbandingan lebih kecil dari atau sama dengan
17 <= 8
Selanjutnya, perhatikan tabel berikut:
Case
a
b
a = b
a = = b
1
5
3
a = 3 (true)
false
2
7
0
a = 0 (false)
false
3
0
0
a = 0 (false)
true
Sebelum membahas satu per satu kasus diatas, kita lihat dua kolom terakhir dari kanan. Terdapat bentuk “a = b” dan bentuk “a = = b”. a = b : pada statement terjadi proses assigning dimana nilai dari b disimpan dalam variabel a. Kemudian dilihat apabila nilai a bukan 0 (nol), maka hasil yang dikeluarkan adalah true. Sebaliknya apabila nilai a adalah 0 (nol), maka hasilnya adalah false. a = = b : Ini adalah pernyataan relasi. Nilai a dan nilai b dicek apakah sama atau tidak. Apabila sama, maka nilai kembalian adalah true. Jika tidak, maka nilai kembalian adalah false. Sekarang perhatikan setiap kasus diatas. Lebih mudah dipahami sekarang?
Operator Logika Operator logika digunakan untuk menggabungkan satu atau lebih pernyataan relasi. Hasilnya berupa logika true atau false. Operator logika umumnya digunakan bersamaan operator relasi untuk melakukan suatu kondisi/persyaratan agar permasalahan dapat dipecahkan dengan lebih efektif. Perhatikan kedua tabel di bawah ini: Operator Fungsi Contoh Penggunaan &&
AND
(20 == 3) && (5<7) Î false AND true = FALSE
||
OR
(20 == 3) || (5<7) Î false AND true = TRUE
!
NOT
!(20 < 3) Î NOT (false) = TRUE
R1
R2
R1 && R2
R1 || R2
! R1
T
T
T
T
F
T
F
F
T
F
F
T
F
T
T
F
F
F
F
T
Perlu diingat bahwa Operator Aritmatika, Operator Relasi dan Operator Logika dapat dikatakan operator utama yang banyak dipakai dalam berbagai bahasa pemrograman, dalam hal ini Bahasa C++. Maka dari itu, cobalah untuk dipahami sebaik‐baiknya karena pada sesi‐sesi selanjutnya, operator‐operator akan banyak digunakan.
3. MANIPULASI DATA dengan OPERATOR Manipulasi data adalah proses untuk mengubah isi suatu variabel dengan nilai yang baru. Nilai baru yang dimaksud dapat berupa suatu nilai mutlak yang telah didefinisikan ataupun nilai yang merupakan hasil dari proses aritmatika. Dasar dari proses manipulasi ini sebenarnya sangat mudah. Akan tetapi ada beberapa teknik yang harus diketahui agar proses manipulasi ini dapat berjalan sesuai yang kita inginkan. Salah satu hal utama yang perlu diingat adalah dalam proses membaca statement, kita membaca dari ”kanan ke kiri”. Mari kita lihat contoh berikut ini: METODE #1 int A = 5; int X; X = A + 2; A = X;
// A = 5 // X = 7 // A = 7 ;
METODE #2 int A = 5; A = A + 2;
// A = 5 // A = 7
METODE #3 int A = 5; A += 2;
// A = 5 // A = 7
X = 7
Ketiga metode diatas sebenarnya menghasilkan hasil yang sama, namun terjadi perbedaan pada proses manipulasinya. METODE #1 Baris 1 : variabel A dideklarasi dengan tipe int. Nilai 5 disimpan ke dalam variabel A. Baris 2 : variabel X dideklarasi dengan tipe int. Baris 3 : variabel A (bernilai 5) ditambahkan dengan nilai 2, kemudian disimpan ke dalam variabel X. Pada akhir statement ini nilai X menjadi 7. Baris 4 : Nilai X disimpan pada variabel A. Pada akhir statement ini, nilai A telah dimanipulasi dari 5
menjadi 7. METODE #2 Baris 1 : variabel A dideklarasi dengan tipe int. Nilai 5 disimpan ke dalam variabel A. Baris 2 : variabel A (bernilai 5) ditambahkan dengan 2 sehingga menghasilkan nilai 7, kemudian di‐ assign ke variabel A. Variabel A sekarang bernilai 7 (INGAT! : membaca dari kanan ke kiri). METODE #3 Baris 1 : variabel A dideklarasi dengan tipe int. Nilai 5 disimpan ke dalam variabel A. Baris 2 : Operator (+=) menambahkan nilai di sisi kanan ke sisi kiri dan meng‐assign kembali ke sisi kiri operator. Dalam hal ini prosesnya sama persis dengan baris 2 pada Metode #2. Selain operator penjumlahan (+=), ada operator sejenis yang membantu kita dalam proses manipulasi data, yakni pengurangan (‐=), perkalian (*=), dan pembagian (/=).
Increment dan Decrement Sesuai dengan namanya, operator increment (++) adalah operator yang berfungsi menambahkan nilai 1 pada nilai suatu variabel. Sebaliknya, operator decrement (‐‐) adalah operator yang berfungsi mengurangi nilai 1 pada nilai suatu variabel. METODE #1 i++; METODE #2 i = i + 1; METODE #3 i += 1;
Ketiga metode tersebut memiliki proses yang sama, yaitu menambahkan nilai 1 ke variabel i lalu meng‐ assign hasilnya kembali ke variabel i.
Prefix dan Postfix Operator increment dan decrement pada pembahasan sebelumnya memiliki atribut prefiks dan postfix. Operator prefiks (++x) dievaluasi/diproses sebelum assignment dilakukan sedangkan operator postfix (x++) diproses setelah assignment dilakukan. INPUT: // Contoh Prefiks-Postfiks
#include #include using namespace std; int main () { int Aku = 15; int Kamu; cout << "Masukkan Umur Anda : "; cin >> Kamu; cout << "\n Umur saya : " << Aku << " tahun.\n"; cout << "Umur kamu : " << Kamu << " tahun.\n"; Aku ++; //postfix increment ++ Kamu; //prefix increment cout << "Setelah satu tahun...\n"; cout << "Umur saya : " << Aku << " tahun.\n"; cout << "Umur kamu : " << Kamu << " tahun.\n\n"; cout << "Tahun Berikutnya...\n"; cout << "Umur saya : " << Aku ++ << " tahun. \n"; cout << "Umur kamu : " << ++ Kamu << " tahun. \n\n"; cout << "Mari kita lihat lagi...\n"; cout << "Umur saya : " << Aku << " tahun. \n"; cout << "Umur kamu : " << Kamu << " tahun. \n"; getch(); return 0; }
OUTPUT: Masukkan Umur Anda : 22 Umur saya : Umur kamu :
15 tahun. 22 tahun.
Setelah satu tahun... Umur saya : 16 tahun. Umur kamu : 23 tahun. Tahun Berikutnya... Umur saya : 16 tahun. Umur kamu : 24 tahun. Mari kita lihat lagi... Umur saya : 17 tahun. Umur kamu : 24 tahun.
Coba kita perhatikan baik‐baik penggunaan postfix dan prefiks. Bandingkan hasil setelah satu tahun, tahun berikutnya, dan hasil akhir. Pada hasil setelah satu tahun, proses postfix dan prefiks telah selesai. Sehingga saat variabel dikeluarkan
nilainya, maka variabel Aku dan Kamu telah bertambah nilai masing‐masing 1. Pada hasil tahun berikutnya, variabel Aku mendapat postfix, sehingga nilai Aku ditampilkan sebelum increment terjadi. Sedangkan pada variabel Kamu, nilai telah mengalami increment kemudian ditampilkan. Pada hasil akhir, nilai Aku dan Kamu telah dilakukan increment dan telah di‐assign, sehingga kedua nilai telah bertambah 1. NOTE: Operator prefix (++/‐‐ var) digunakan untuk menambahkan atau mengurangkan variabel sebelum digunakan. Dan operator postfix (var++/‐‐) digunakan untuk menambahkan atau mengurangkan variabel setelah digunakan.
4. STRUKTUR PERCABANGAN (IF – CONDITIONAL) Dalam memecahkan suatu masalah, seringkali kita menemui berbagai pilihan. Kondisi‐kondisi yang berbeda akan memberikan kita alternatif untuk menyelesaikan masalah. Dalam pemrograman, instruksi if digunakan untuk memilih kondisi‐kondisi tersebut hingga pada akhirnya sampai pada alternatif terbaik untuk menyelesaikan masalah. Namun disini kita berkomunikasi dengan komputer dimana perangkat ini hanya mengerti apabila kita menjawab dengan ya (TRUE) atau tidak (FALSE). Untuk membantu kita mendeskripsikan masalah, bahasa C++ memiliki beberapa bentuk untuk memudahkan kita menjalankannya. Akan tetapi, bentuk standar daripada IF Conditional adalah sebagai berikut : if (expression) { statement1; } else {
statement2;
} statement2 di atas digunakan untuk memberikan pilihan aksi lain jika ekspresi pada statement if bernilai salah (FALSE).
Bentuk IF TUNGGAL Bentuk dari instruksi if tunggal adalah sebagai berikut: if ([!]pernyataan_relasi [&&/|| [!]pernyataan_relasi…]) { …..instruksi jika hasil logika bernilai true… } Keterangan: Nilai kembalian if yang berupa TRUE ataupun FALSE diperoleh dari hasil keluaran ekspresi yang kita definisikan. Ekspresi/pernyataan relasi ini diawalan dengan kurung buka dan diakhiri dengan kurung tutup. Apabila kita memiliki lebih dari satu pernyataan relasi, maka dibutuhkan operator logika untuk menggabungkan beberapa pernyataan relasi tersebut hingga akhirnya kita mendapat hasil berupa TRUE atau FALSE. Andaikata nilai yang dihasilkan adalah TRUE, maka program selanjutnya akan mengeksekusi intruksi‐ intruksi yang berada di antara tanda ”{” dan tanda ”}”. Jika hasil yang dikeluarkan bernilai FALSE, maka intruksi tersebut akan dilewati (tidak dieksekusi). Jika masih bingung, mungkin algoritma ini akan dapat membantu pemahaman Anda:
Fungsi dari perintah IF
Cek hasil pernyataan_relasi
ya
Instruksi yang dilakukan
Instruksi selanjutnya
INPUT: // IF TUNGGAL #include #include using namespace std;
tidak
int main () { int a; cout << "Tebak umur saya : "; cin >> a; if (a == 17) { cout << "\nWOW! Tebakan Anda benar! Umur saya = " << a << " tahun\n\n"; } cout << "Terimakasih telah menebak umur saya :) "; getch(); return 0; }
OUTPUT: Tebak umur saya : 17 WOW! Tebakan Anda benar! Umur saya = 17 tahun Terimakasih telah menebak umur saya :)
Coba kembali program di atas, namun masukkan angka kecuali angka 17. Apa yang terjadi ? OUTPUT: Tebak umur saya : 99 Terimakasih telah menebak umur saya :)
Bisa Anda lihat perbedaannya ?
Apabila Anda benar ekspresi bernilai TRUE (dimana a = = 17 ), maka intruksi didalam tanda “{“ dan “}” akan dieksekusi. Lalu mengapa saat kita salah memasukkan angka, kalimat “Terimakasih...” masih tetap dieksekusi ? Hal ini dikarenakan statement tersebut tidak berada didalam tanda bracket, sehingga apapun nilai yang keluar, statement tersebut tetap akan dieksekusi.
Bentuk IF MAJEMUK Bentuk dari instruksi if majemuk adalah sebagai berikut: if ([!] pernyataan_relasi [&&/|| [!] pernyataan_relasi….]]) { ….instruksi jika hasil logika bernilai benar
} else { ….instruksi jika hasil logika bernilai false }
Hal yang membedakan dengan IF TUNGGAL adalah pada IF MAJEMUK terdapat intruksi yang harus dieksekusi apabila hasil keluaran bernilai FALSE. Intruksi tersebut harus diletakkan setelah perintah else dieksekusi. Perlu diingat, perintah else tidak dapat berdiri sendiri. Artinya, untuk menggunakan perintah ini harus didahului dengan perintah if pada awal statement.
Start
int a
Masukkan sebuah bilangan
a%2 == 0?
tidak
ya
a bilangan bulat
end
Contoh penggunaan IF MAJEMUK : INPUT: // IF MAJEMUK #include #include using namespace std; int main () {
a bilangan ganjil
int a; cout << "Masukkan suatu bilangan bulat : "; cin >> a; if (a%2 == 0) { cout << "Anda memasukkan bilangan GENAP "; }else { cout << "Anda memasukkan bilangan GANJIL "; } getch(); return 0; }
OUTPUT: Masukkan suatu bilangan bulat : 35 Anda memasukkan bilangan GANJIL
INPUT: // IF MAJEMUK #2 #include #include using namespace std; int main () { int a; cout << "Masukkan suatu bilangan bulat : "; cin >> a; if ((a>=0) && (a<=50)) { cout << "Nilai diantara 0 - 50 "; }else if ((a>50) && (a<=100)) { cout << "Nilai diantara 51-100 "; }else { cout << "Nilai adalah negatif atau diatas 100"; } getch(); return 0; } OUTPUT: Masukkan suatu bilangan bulat : 70 Nilai diantara 51-100
Bentuk IF BERTINGKAT (BERSARANG) Bentuk yang lebih kompleks namun sering digunakan adalah Bentuk IF BERTINGKAT (BERSARANG). Singkatnya, terdapat instruksi if didalam blok if. Lalu berapa instruksi if yang dapat disimpan didalam instruksi if ? Jawabannya adalah tak terhingga. Contoh bentuk IF BERTINGKAT : if (Ekspresi A) {
if (Ekspresi B) { if (Ekspresi C) { ...instruksi jika hasil logika A, B dan C bernilai benar } } } Berikut adalah listing program yang menerjemahkan algoritma di atas: INPUT: // IF BERTINGKAT #include #include using namespace std; int main () { int x; cout << "Masukkan suatu bilangan bulat : "; cin >> x; if (x%2 == 0) { if (x >= 100) { cout << "Anda memasukkan bilangan GENAP dan lebih dari 100"; } else { cout << "Bilangan GENAP Anda dibawah nilai 100"; } } else { cout << "Anda memasukkan bilangan GANJIL"; } getch(); return 0; }
OUTPUT: Masukkan suatu bilangan bulat : 78 Bilangan GENAP Anda dibawah nilai 100