Anda di halaman 1dari 19

KU-1072

PENGENALAN TEKNOLOGI
INFORMASI B
(PTI – B)

2008
MATERI I

EKSPRESI DAN PERCABANGAN

Materi Praktikum Ekspresi dan Percabangan


Durasi 180 menit
TIU/TIK 1. Pendahuluan
2. Operator
3. Manipulasi Data dengan Operator
4. Struktur Percabangan (IF CONDITIONAL)
5. Contoh Kasus
Referensi 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 <iostream>
#include <conio.h>
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;

cout << "\nHasil penjumlahan, a + b = " << tambah;


cout << "\nHasil pengurangan, a - b = " << kurang;
cout << "\nHasil perkalian, a * b = " << kali;
cout << "\nHasil pembagian, a / b = " << bagi;
cout << "\nHasil modulus, a mod b = " << a%b;

getch();
return 0;
}
OUTPUT:

Masukkan bilangan bulat a : 17


Masukkan bilangan bulat b : 8

Hasil penjumlahan, a + b = 25
Hasil pengurangan, a - b = 9
Hasil perkalian, a * b = 136
Hasil pembagian, a / b = 2.125
Hasil modulus, a mod b = 1

Dalam contoh di atas dapat dilihat bagaimana operator aritmatika bekerja. Satu hal yang perlu
diperhatikan adalah statement berikut :

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.

INPUT:
// Operator Aritmatika

#include <iostream>
#include <conio.h>
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;
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’:


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; // A = 5
int X;
X = A + 2; // X = 7
A = X; // A = 7 ; X = 7

METODE #2
int A = 5; // A = 5
A = A + 2; // A = 7

METODE #3
int A = 5; // A = 5
A += 2; // A = 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 <iostream>
#include <conio.h>
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 : 15 tahun.


Umur kamu : 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)

Sebelum masuk ke dalam struktur percabangan, ingatlah kembali macam-macam operator yang telah
dibahas pada bagian sebelumnya. Untuk memudahkan, berikut Precedence dari Operator :

Operators Order of evaluation Remarks

[] ( ) -> Left to right Array subscript, function call

− + sizeof( ) ! ++ −−

& * ~ (cast) Right to left Unary

*/% Left to right Binary Multiplicative

+- Left to right Binary Additive

>> << Left to right Shift operators

< <= > >= Left to right Relational operators

== != Left to right Equality operators

& Left to right Bitwise And operator

^ Left to right Bitwise Xor operator

| Left to right Bitwise Or operator

&& Left to right Logical And operator

|| Left to right Logical Or operator

?: Left to right Conditional operator

= += -= *= /= %=

&= -= |= <<= >>= Right to left Assignment

, Right to left Comma


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 tidak


pernyataan_relasi

ya

Instruksi yang dilakukan

jika pernyataan_relasi

Instruksi selanjutnya

INPUT:
// IF TUNGGAL

#include <iostream>
#include <conio.h>
using namespace std;

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.

Penggunaan IF TUNGGAL dapat dilakukan secara berturutan. Perhatikan contoh berikut ini:

INPUT:
// IF TUNGGAL (BERTURUTAN)

#include <iostream>
#include <conio.h>
using namespace std;

int main ()
{
float nilai;
cout << "Masukkan nilai ujian Anda : "; cin >> nilai;
cout << "Predikat Anda : ";

if ((nilai >= 0) && (nilai <= 50))


cout << "BURUK ";
if ((nilai > 50) && (nilai <= 70))
cout << "CUKUP";
if ((nilai > 70) && (nilai <= 85))
cout << "BAIK";
if ((nilai > 85) && (nilai <= 100))
cout << "ISTIMEWA";
if ((nilai < 0) || (nilai > 100))
cout << "Maaf, Data tidak valid ";

getch();
return 0;
}

OUTPUT:

Masukkan nilai ujian Anda : 80


Predikat Anda : BAIK
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 a bilangan ganjil

end
Contoh penggunaan IF MAJEMUK :

INPUT:
// IF MAJEMUK
#include <iostream>
#include <conio.h>
using namespace std;

int main ()
{
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 <iostream>
#include <conio.h>
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 <iostream>
#include <conio.h>
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
Hasil Capaian
1. Mahasiswa mengetahui dan memahami jenis-jenis operator dan fungsinya
2. Mahasiswa mampu menuliskan operator untuk mencapai hasil yang tepat
3. Mahasiswa mengetahui jenis-jenis IF CONDITIONAL
4. Mahasiswa mampu menerjemahkan permasalahan dalam bentuk struktur percabangan dalam
bahasa C++.

Analisa/Tugas
Perhatikan angka-angka di bawah ini :

10, 30, 60, 20, 80, 20, 60, 40, 50, 90, 90, 20, 60, 30, 80, 100, 10, 20, 90, 30.

Tugas Anda adalah :


a. Hitunglah total penjumlahan dari angka-angka tersebut.
NOTE: Angka-angka tersebut harus dimasukkan oleh user (tidak boleh dideklarasikan di awal)

b. Hitunglah berapa kali setiap angka itu berulang, misal :


Angka 10 : 2 kali
Angka 20 : 4 kali
.
.
.
Angka 100 : 1 kali

c. Buatlah Algoritma untuk program yang akan Anda buat (dalam bentuk flowchart)

d. Kreativitas Anda dalam membuat program ini akan menjadi nilai bonus untuk Anda
- Menggunakan operator-operator yang Anda ketahui
- Mengguunakan Increment/Decrement
- Menggunakan IF CONDITIONAL

Kesimpulan & Laporan


Tugas dikumpulkan kepada asisten (format file *.cpp. Berikan Nama dan NIM anda pada bagian atas
program)

Anda mungkin juga menyukai