0% menganggap dokumen ini bermanfaat (0 suara)
548 tayangan126 halaman

Modul Pemrogram Komputer

Modul ini membahas tentang pemrograman komputer menggunakan bahasa C++. Modul ini terdiri dari 6 bab yang mencakup pengantar bahasa C++, pemrograman dasar, pernyataan bersyarat, fungsi matematika dan string, loop, serta fungsi. Modul ini disusun untuk mata kuliah pemrograman komputer di Program Studi Teknik Mesin Kilang Politeknik Energi dan Mineral.
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
548 tayangan126 halaman

Modul Pemrogram Komputer

Modul ini membahas tentang pemrograman komputer menggunakan bahasa C++. Modul ini terdiri dari 6 bab yang mencakup pengantar bahasa C++, pemrograman dasar, pernyataan bersyarat, fungsi matematika dan string, loop, serta fungsi. Modul ini disusun untuk mata kuliah pemrograman komputer di Program Studi Teknik Mesin Kilang Politeknik Energi dan Mineral.
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 126

1

MODUL PRAKTIKUM

PEMROGRAMAN KOMPUTER
TM 2202

Disusun oleh:
1. Nama : Hafid Suharyadi, M.Sc.
NIP : 19850518 201801 1 002

PROGRAM STUDI TEKNIK MESIK KILANG


POLITEKNIK ENERGI DAN MINERAL
(PEM Akamigas)

Cepu, 02 Januari 2020


KATA PENGANTAR

Modul Praktikum ini disusun sebagai bahan ajar Mata Kuliah Pemrograman Komputer di
Teknik Mesin Kilang PEM Akamigas. Saat ini Modul dalam tahap pengembangan dan
perbaikan. Segala saran dan kritik dapat disampaikan ke hafi[email protected].

Edisi: Revisi 02

ii
DAFTAR ISI

Halaman
HALAMAN JUDUL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i
KATA PENGANTAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ii
DAFTAR ISI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ii
DAFTAR TABEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii
DAFTAR GAMBAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii
I PENGANTAR BAHASA C++ . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 Tujuan Pembelajaran dan Pokok Bahasan . . . . . . . . . . . . . . . . . 1
1.2 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.3 Komputer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.4 Bahasa Pemrograman . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4.1 Bahasa Mesin . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4.2 Bahasa Assembly . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4.3 Bahasa tingkat Tinggi . . . . . . . . . . . . . . . . . . . . . . . . 5
1.5 Sekilas tentang C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.6 Kebutuhan Compiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.7 Struktur Dasar Bahasa C++ . . . . . . . . . . . . . . . . . . . . . . . . 7
1.8 Siklus Pengembangan Program C++ . . . . . . . . . . . . . . . . . . . . 9
1.9 Gaya Pemrograman dan Dokumentasi . . . . . . . . . . . . . . . . . . . 11
1.10 Kesalahan Pemrograman . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.10.1 Syntax Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.10.2 Runtime Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.10.3 Logic Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.11 Tugas Modul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
II PEMROGRAMAN DASAR . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.1 Tujuan Pembelajaran dan Pokok Bahasan . . . . . . . . . . . . . . . . . 16

iii
DAFTAR ISI iv

2.2 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.3 Pembacaan Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.4 Identifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.5 Variabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.6 Pernyataan dan Ekspresi Penugasan . . . . . . . . . . . . . . . . . . . . 24
2.7 Konstanta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.8 Evaluasi Ekspresi dan Prioritas Operator . . . . . . . . . . . . . . . . . . 26
2.9 Operator Penugasan Bertambah . . . . . . . . . . . . . . . . . . . . . . 27
2.10 Operator Penjumlahan dan Pengurangan . . . . . . . . . . . . . . . . . . 27
2.11 Tugas Modul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
III PERNYATAAN BERSYARAT . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.1 Tujuan Pembelajaran dan Pokok Bahasan . . . . . . . . . . . . . . . . . 30
3.2 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.3 Tipe Data bool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.4 Pernyataan if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.5 Pernyataan if-else . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.6 Pernyataan nested if . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.7 Pernyataan switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.8 Produksi Bilangan Acak . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.9 Perhitungan Pangkat dan Akar Pangkat 2 . . . . . . . . . . . . . . . . . 41
3.10 Operator Logika . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.11 Prioritas dan Asosiasi Operator . . . . . . . . . . . . . . . . . . . . . . . 43
3.12 Tugas Modul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
IV FUNGSI MATEMATIKA, KARAKTER, DAN STRING . . . . . . . . . . . . 48
4.1 Tujuan Pembelajaran dan Pokok Bahasan . . . . . . . . . . . . . . . . . 48
4.2 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.3 Fungsi Matematika . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.3.1 Fungsi Trigonometri . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.3.2 Fungsi Eksponen . . . . . . . . . . . . . . . . . . . . . . . . . . 50
DAFTAR ISI v

4.3.3 Fungsi Pembulatan . . . . . . . . . . . . . . . . . . . . . . . . . 51


4.3.4 Fungsi min, max, dan abs . . . . . . . . . . . . . . . . . . . . . . 51
4.4 Tipe Data dan Operasi Menggunakan char . . . . . . . . . . . . . . . . 52
4.4.1 Kode ASCII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.4.2 Escape Sequences untuk Karakter Khusus . . . . . . . . . . . . . 53
4.4.3 Perbandingan dan Uji Karakter . . . . . . . . . . . . . . . . . . . 54
4.4.4 Fungsi Karakter . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.5 Tipe Data dan Operasi Menggunakan string . . . . . . . . . . . . . . . 56
4.5.1 Indeks string dan Operator Subscript . . . . . . . . . . . . . . . 57
4.5.2 Menggabungkan string . . . . . . . . . . . . . . . . . . . . . . 58
4.5.3 Membandingkan string . . . . . . . . . . . . . . . . . . . . . . 58
4.5.4 Membaca string . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.6 Memformat cout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.6.1 Manipulator setprecision(n) . . . . . . . . . . . . . . . . . . 62
4.6.2 Manipulator fixed . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.6.3 Manipulator showpoint . . . . . . . . . . . . . . . . . . . . . . 63
4.6.4 Manipulator setw(width) . . . . . . . . . . . . . . . . . . . . . 64
4.6.5 Manipulator left dan right . . . . . . . . . . . . . . . . . . . . 65
4.7 Input dan Output Dokumen Sederhana . . . . . . . . . . . . . . . . . . . 65
4.7.1 Menulis pada Sebuah Dokumen . . . . . . . . . . . . . . . . . . . 65
4.7.2 Membaca pada Sebuah Dokumen . . . . . . . . . . . . . . . . . . 67
4.8 Tugas Modul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
V LOOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.1 Tujuan Pembelajaran dan Pokok Bahasan . . . . . . . . . . . . . . . . . 73
5.2 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.3 Pernyataan while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.4 Pernyataan do-while . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5.5 Pernyataan for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
5.6 Loop Mana Yang Sebaiknya Digunakan . . . . . . . . . . . . . . . . . . 81
DAFTAR ISI vi

5.7 Nested Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82


5.8 Tugas Modul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
VI FUNGSI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
6.1 Tujuan Pembelajaran dan Pokok Bahasan . . . . . . . . . . . . . . . . . 88
6.2 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.3 Mendefinisikan Fungsi . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
6.4 Memanggil Fungsi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
6.5 Fungsi void . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
6.6 Pemberian Nilai ke Argumen . . . . . . . . . . . . . . . . . . . . . . . . 97
6.7 Modularisasi Kode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
6.8 Fungsi Overloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
6.9 Prototipe Fungsi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
6.10 Argumen Default . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
6.11 Fungsi inline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
6.12 Variabel Lokal, Global, dan Lokal Statis . . . . . . . . . . . . . . . . . . 108
6.12.1 Ruang Lingkup Variabel untuk Loop for . . . . . . . . . . . . . . 110
6.12.2 Variabel Lokal Statis . . . . . . . . . . . . . . . . . . . . . . . . 110
6.13 Tugas Modul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
DAFTAR TABEL

Halaman

1.1 Karakter Khusus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2.1 Operator Penugasan Bertambah . . . . . . . . . . . . . . . . . . . . . . 27

3.1 Operator terkait Pernyataan Bersyarat . . . . . . . . . . . . . . . . . . . 32


3.2 Tabel kebenaran untuk operator && (AND) . . . . . . . . . . . . . . . . 42
3.3 Tabel kebenaran untuk operator || (OR) . . . . . . . . . . . . . . . . . . . 42
3.4 Tabel kebenaran untuk operator ! (NOT) . . . . . . . . . . . . . . . . . . 43
3.5 Prioritas dan asosiasi operator (dari tertinggi ke terendah) . . . . . . . . . 43

4.1 Fungsi Trigonometri pada header cmath . . . . . . . . . . . . . . . . . . 50


4.2 Fungsi Eksponen pada header cmath . . . . . . . . . . . . . . . . . . . . 50
4.3 Fungsi Pembulatan pada header cmath . . . . . . . . . . . . . . . . . . . 51
4.4 Kode ASCII untuk beberapa karakter . . . . . . . . . . . . . . . . . . . . 52
4.5 Escape Sequences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.6 Fungsi Karakter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.7 Fungsi Objek string . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.8 Beberapa stream manipulator yang sering digunakan . . . . . . . . . . . 61

vii
DAFTAR GAMBAR

Halaman

1.1 Sebuah komputer terdiri dari CPU, memori, perangkat penyimpanan, perangkat
input, perangkat output, dan perangkat komunikasi . . . . . . . . . . . . 3
1.2 Proses pengembangan program C++ terdiri dari membuat/memodifikasi
source code, compiling, linking, dan executing program. . . . . . . . . . . 10

3.1 Diagram alir pernyataan if . . . . . . . . . . . . . . . . . . . . . . . . . 33


3.2 Diagram alir pernyataan if else . . . . . . . . . . . . . . . . . . . . . 35
3.3 Diagram alir pernyataan switch . . . . . . . . . . . . . . . . . . . . . . 37
3.4 Grafik suhu versus waktu yang diambil dari alat penukar kalor tipe A dan
tipe B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

4.1 Wilayah terpilih di Kecamatan Cepu . . . . . . . . . . . . . . . . . . . . 49


4.2 Karakter pada objek string dapak diambil dengan at(index) . . . . . . 57
4.3 Tampilan output menggunakan fungsi setw(width) . . . . . . . . . . . 64
4.4 Tampilan output menggunakan fungsi left . . . . . . . . . . . . . . . . 65
4.5 Tampilan output menggunakan fungsi right . . . . . . . . . . . . . . . 65
4.6 Tampilan output file numbers.txt . . . . . . . . . . . . . . . . . . . . . . 67
4.7 Segitiga dengan A, B, C adalah sudut-sudut yang terletak di titik-titik
koordinat tertentu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

5.1 Diagram alir pernyataan while . . . . . . . . . . . . . . . . . . . . . . . 75


5.2 Diagram alir pernyataan do-while . . . . . . . . . . . . . . . . . . . . . 78
5.3 Diagram alir pernyataan for . . . . . . . . . . . . . . . . . . . . . . . . 80

6.1 Contoh mendefinisikan dan memanggil sebuah fungsi . . . . . . . . . . . 91


6.2 Contoh memanggil fungsi dengan pengalihan kontrol program ke fungsi
yang dipanggil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

viii
DAFTAR GAMBAR ix

6.3 Contoh aliran program pada sebuah fungsi . . . . . . . . . . . . . . . . . 95


6.4 Variabel yang dideklarasikan di bagian initial-action dari header loop for
memiliki cakupan di seluruh loop . . . . . . . . . . . . . . . . . . . . . . 110
MODUL I
PENGANTAR BAHASA C++

1.1 Tujuan Pembelajaran dan Pokok Bahasan


Tujuan pembelajaran:
1. Untuk mendeskripsikan secara singkat sejarah C++.
2. Untuk menuliskan sebuah program C++ sederhana untuk menampilkan output.
3. Untuk memahami siklus pengembangan sebuah program C++.
4. Untuk mengetahui gaya dan dokumentasi pemrograman.
5. Untuk menjelaskan perbedaan antara syntax error, runtime error, dan logic error.
Pokok bahasan:
1. Jenis-jenis bahasa pemrograman.
2. Sejarah bahasa pemrograman C++.
3. Penulisan program sederhana C++.
4. Siklus pengembangan sebuah program C++.
5. Gaya dan dokumentasi pemrograman.
6. Jenis-jenis kesalahan pemrograman.
Referensi:
1. Capper, D. M. C++ for Scientists, Engineers and Mathematicians. London: Springer-
Verlag, 1994.
2. Delores M. Etter and Jeanine A. Ingber. Engineering Problem Solving With C++ (4th
Edition). Boston:Pearson, 2016.

1.2 Pendahuluan
Pemrograman komputer secara umum berarti membuat dan/atau mengembangkan sebuah
perangkat lunak (software) yang kemudian disebut sebagai sebuah program. Perangkat
lunak tersebut berisi sejumlah perintah (instructions) yang memerintahkan komputer atau
mesin yang terkomputerisasi untuk melakukan sesuatu.

1
MODUL I. PENGANTAR BAHASA C++ 2

Penggunaan perangkat lunak ada di sekitar Anda. Tentu saja, Anda mudah mene-
mukan dan menggunakan perangkat lunak pada komputer pribadi. Selain itu, perangkat
lunak juga dapat ditemukan dan digunakan dalam menjalankan pesawat terbang, mobil,
ponsel, dan pemanggang roti. Di komputer pribadi, Anda menggunakan pengolah kata
untuk menulis dokumen, Web browser untuk menjelajahi Internet, dan surel (email) un-
tuk mengirim pesan. Program-program ini adalah contoh perangkat lunak. Pengembang
perangkat lunak membuat sebuah perangkat lunak dengan bantuan alat yang kuat yang
disebut bahasa pemrograman (programming languages).
Setiap bahasa diciptakan untuk tujuan tertentu untuk membangun kekuatan dari ba-
hasa sebelumnya, misalnya, atau untuk memberi programmer satu set alat baru dan khusus.
Saat ini tersedia banyak bahasa pemrograman, dan akan alami bagi Anda untuk bertanya
mana yang terbaik. Namun, sebenarnya tidak ada bahasa "terbaik". Masing-masing ba-
hasa memiliki kelebihan dan kekurangan. Programmer berpengalaman tahu bahwa satu
bahasa mungkin berfungsi dengan baik dalam beberapa situasi, dan bahasa lain mungkin
lebih tepat pada situasi yang berbeda.

1.3 Komputer
Komputer mencakup perangkat keras dan perangkat lunak. Secara umum, perangkat keras
terdiri dari elemen fisik dari komputer, dan perangkat lunak memberikan instruksi yang
tidak terlihat dalam mengendalikan perangkat keras dan membuatnya melakukan tugas
tertentu. Mengetahui perangkat keras komputer tidak krusial untuk belajar bahasa pemro-
graman, tetapi ini dapat membantu Anda memahami efek dari suatu program instruksi ada
di komputer dan komponennya. Secara singkat, sebuah komputer terdiri dari komponen
perangkat keras utama sebagai berikut (lihat Gambar 1.1):
1. Central processing unit (CPU).
2. Memori (main memory).
3. Perangkat penyimpanan (seperti disk dan CD).
4. Perangkat input (seperti mouse dan keyboard).
5. Perangkat output (seperti monitor dan printer).
MODUL I. PENGANTAR BAHASA C++ 3

6. Perangkat komunikasi (seperti modem dan network interface cards).

Gambar 1.1: Sebuah komputer terdiri dari CPU, memori, perangkat penyimpanan,
perangkat input, perangkat output, dan perangkat komunikasi

1.4 Bahasa Pemrograman


Komputer tidak memahami bahasa manusia. Program komputer harus ditulis dalam ba-
hasa yang dapat dipahami oleh mesin komputer. Secara umum, terdapat 3 jenis bahasa
pemrograman:
1. Bahasa Mesin (Machine Language).
2. Bahasa Assembly (Assembly Language).
3. Bahasa tingkat Tinggi (High-level Language).
MODUL I. PENGANTAR BAHASA C++ 4

1.4.1 Bahasa Mesin


Bahasa asli komputer, yang berbeda di antara berbagai jenis komputer, adalah bahasa
mesinnya seperangkat instruksi bawaan yang sifatnya primitif. Instruksi-instruksi ini
dalam bentuk kode biner, jadi jika Anda ingin memberikan instruksi pada komputer dalam
bahasa aslinya, Anda harus memasukkan instruksi tersebut sebagai kode biner. Misalnya,
untuk menambahkan dua angka, Anda mungkin harus menulis instruksi dalam kode biner,
sebagai berikut:

1101101010011010

1.4.2 Bahasa Assembly


Pemrograman dalam bahasa mesin adalah proses yang membosankan. Selain itu, program
yang ditulis dalam bahasa mesin sangat sulit dibaca dan dimodifikasi. Untuk alasan ini,
bahasa rakitan dibuat pada masa awal komputasi sebagai alternatif dari bahasa mesin. Ba-
hasa assembly menggunakan kata deskriptif pendek, yang dikenal sebagai mnemonic, un-
tuk mewakili masing-masing instruksi bahasa mesin. Sebagai contoh, mnemonic add bi-
asanya berarti menambah angka dan sub sarana untuk mengurangi angka. Untuk menam-
bahkan angka 2 dan 3 dan mendapatkan hasilnya, Anda mungkin menulis instruksi dalam
kode assembly seperti ini:

add 2, 3, result

Bahasa assembly dikembangkan untuk mempermudah pemrograman. Namun, karena


komputer tidak dapat menjalankan bahasa rakitan, program lain - disebut assembler -
digunakan untuk menerjemahkan program bahasa rakitan ke dalam kode mesin.
Menulis kode dalam bahasa assembly lebih mudah daripada dalam bahasa mesin. Na-
mun, masih membosankan untuk menulis kode dalam bahasa assembly. Instruksi dalam
bahasa assembly pada dasarnya sesuai dengan instruksi dalam kode mesin. Menulis
dalam perakitan mengharuskan Anda tahu cara kerja CPU. Bahasa assembly disebut se-
bagai bahasa tingkat rendah, karena bahasa assembly sifatnya dekat dengan bahasa mesin
dan bergantung pada mesin.
MODUL I. PENGANTAR BAHASA C++ 5

1.4.3 Bahasa tingkat Tinggi


Pada tahun 1950-an, generasi baru bahasa pemrograman yang dikenal sebagai bahasa
tingkat tinggi muncul. Mereka adalah platform-independen, yang berarti bahwa sebuah
program dapat ditulis dalam bahasa tingkat tinggi dan dijalankan di berbagai jenis mesin.
Bahasa tingkat tinggi mudah dipelajari dan digunakan. Instruksi dalam bahasa pemro-
graman tingkat tinggi disebut pernyataan. Di sini, misalnya, adalah pernyataan bahasa
tingkat tinggi yang menghitung penjumlahan dua angka:

result = 2 + 3;

Ada banyak bahasa pemrograman tingkat tinggi, dan masing-masing dirancang untuk
tujuan tertentu. Tabel 1.1 mencantumkan beberapa bahasa yang populer. Program yang
ditulis dalam bahasa tingkat tinggi disebut kode sumber (source code). Karena komputer
tidak dapat menjalankan source code, sebuah source code harus diterjemahkan ke dalam
kode mesin untuk dieksekusi. Terjemahan dapat dilakukan dengan menggunakan alat
pemrograman lain yang disebut interpreter atau compiler.
Interpreter membaca satu pernyataan dari source code, menerjemahkannya ke kode
mesin atau kode mesin virtual, dan kemudian segera mengeksekusi, seperti yang ditun-
jukkan pada Gambar 1.9a. Perhatikan bahwa pernyataan dari kode sumber dapat diter-
jemahkan ke dalam beberapa instruksi mesin. Kompiler menerjemahkan seluruh instruksi
pada source code ke dalam bentuk bahasa mesin dan selanjutnya bahasa mesin dieksekusi.

1.5 Sekilas tentang C++


Dalam praktikum pemrograman komputer kali ini, bahasa C++ (MATLAB akan dibahas
kemudian) yang akan digunakan untuk menyusun program komputer berdasarkan algo-
ritma. Bahasa C++ adalah pengembangan dari bahasa C. Bahasa C++ dikembangkan
oleh Bjarne Stroustrup di AT&T Bell Labs pada tahun 1980s. Bahasa C++ dikembangkan
untuk mengatasi beberapa keterbatasan yang ada di bahasa C. Bahasa C++ juga sudah
memiliki sifat pemrograman yang berorientasi pada objek (Object Oriented Program-
ming).
MODUL I. PENGANTAR BAHASA C++ 6

Keunggulan bahasa C++ adalah sebagai berikut:


1. Conciseness: bahasa pemrograman memungkinkan kita untuk mengekspresikan uru-
tan perintah dengan lebih ringkas. C ++ menyediakan beberapa shortcut yang power-
ful.
2. Maintainability: memodifikasi kode lebih mudah dengan melakukan pengeditan teks,
daripada mengatur ulang ratusan instruksi prosesor. C ++ berorientasi objek, yang
selanjutnya meningkatkan maintainability.
3. Portability: prosesor yang berbeda menyediakan instruksi yang berbeda. Program
yang ditulis sebagai teks dapat diterjemahkan ke dalam instruksi berbeda untuk pros-
esor yang berbeda; salah satu kekuatan C ++ adalah dapat digunakan untuk menulis
program untuk hampir semua prosesor.
Untuk menyusun tiogram komputer dalam bahasa C++ dan dapat menjalankannya,
ada beberapa hal yang diperlukan: pengetahuan mengenai struktur bahasa C, text edi-
tor, dan compiler. Text editor digunakan untuk menuliskan kode program (disebut juga
source-code). Aplikasi Notepad dapat juga digunakan sebagai text editor, bahkan aplikasi
Notepad++ memiliki fitur syntax highlighting.
Agar kode program yang ditulis dapat dimengerti oleh komputer, maka kode tersebut
harus diterjemahkan (compile) ke dalam bahasa mesin oleh compiler. Salah satu compiler
yang tersedia bebas (bahkan gratis) adalah CodeBlocks. CodeBlocks juga memiliki text
editor yang terintegrasi.

1.6 Kebutuhan Compiler


Untuk menyusun sebuah program dalam C++ dan dapat menjalankannya, ada beberapa
hal yang diperlukan: pengetahuan mengenai struktur bahasa C++, i, dan compiler. Text
editor digunakan untuk menuliskan kode program. Aplikasi Notepad dapat juga digu-
nakan sebagai text editor, bahkan aplikasi Notepad++ memiliki fitur syntax highlighting.
Agar kode program yang ditulis dapat dimengerti oleh komputer, maka kode tersebut
harus diterjemahkan (compile) ke dalam bahasa mesin oleh compiler. Salah satu compiler
yang tersedia bebas (bahkan gratis) adalah CodeBlocks. CodeBlocks juga memiliki text
MODUL I. PENGANTAR BAHASA C++ 7

editor yang terintegrasi.

1.7 Struktur Dasar Bahasa C++


Kita mulai dengan program C ++ sederhana yang menampilkan pesan Hello World di
tampilan output C++. Console input berarti menerima input dari keyboard dan console
output berarti menampilkan output ke monitor (Nomor baris bukan bagian dari program,
tetapi ditampilkan sebagai bantuan referensi. Sehingga jangan mengetikkan nomor baris
di program Anda).

1 # include <iostream > /* preprocessor directive as header line */


2 /* to process the code before actual compilation */
3 using namespace std; // add a prefix std to the start of every function
4 // name
5
6 int main () // the entry point of the program
7 {
8 cout << " Hello world !" << endl; //to print statement
9 return 0; // exit status , return an integer value
10 } // the end of the program

Pada monitor tampil:

Hello world !

Baris ke-1 pada program

# include <iostream >

adalah kompiler preprocessor directive yang memberitahu kompiler untuk memasukkan


pustaka iostream dalam program ini, yang diperlukan untuk mendukung input dan out-
put. Pustaka C ++ berisi kode yang telah ditentukan untuk mengembangkan program
C++. Pustaka seperti iostream disebut header file di C++, karena biasanya dimasukkan
di awal (kepala) dari program.
Pernyataan di baris 2

using namespace std;


MODUL I. PENGANTAR BAHASA C++ 8

memberitahu kompiler untuk menggunakan standard namespace. std adalah singkatan


dari standard. Namespace adalah mekanisme untuk menghindari konflik penamaan dalam
program besar. Fungsi cout, cin, dan endl di baris 7 didefinisikan di pustaka iostream
di standard namespace. Agar kompiler menemukan nama-nama ini, pernyataan pada
baris 2 harus digunakan. Untuk saat ini, yang perlu Anda lakukan adalah menulis baris 2
di program Anda untuk melakukan operasi input dan output.
Setiap program C++ dijalankan dari fungsi utama. Fungsi adalah bentuk yang berisi
pernyataan. Fungsi utama yang didefinisikan dalam baris 610 berisi dua pernyataan.
Mereka terlampir di blok yang dimulai dengan kurung kurawal buka , (baris 5) dan
berakhir dengan kurung kurawal tutup , (baris 10). Setiap pernyataan dalam C++ harus
diakhiri dengan tanda titik koma (;), yang dikenal sebagai statement terminator.
Pernyataan di baris 7 menampilkan pesan ke output. cout singkatan dari console out-
put. Operator «, disebut sebagai operator penyisipan streaming, mengirimkan string ke
console. Sebuah string harus dilampirkan dalam tanda kutip. Pernyataan pada baris 7
pertama-tama menampilkan string Hello world! ke console, kemudian menampilkan
endl. Perhatikan bahwa endl singkatan dari end line. Mengirim endl ke console men-
gakhiri sebuah garis dan memerah buffer output untuk memastikan bahwa output-nya
adalah segera ditampilkan.
Pernyataan di baris 9

return 0;

ditempatkan di akhir setiap fungsi utama untuk keluar dari program. Nilai 0 menunjukkan
bahwa program telah diakhiri dengan jalan keluar yang berhasil. Beberapa kompiler akan
berfungsi dengan baik jika pernyataan ini dihilangkan; Namun, kompiler lain tidak akan
melakukannya. Pada praktik, langkah yang baik untuk selalu menyertakan pernyataan ini
agar program Anda bekerja dengan semua kompiler C++.
Pernyataan di baris 1, 2, 3, 4, 6, 8, 9, dan 10 (berwarna hijau) adalah komentar yang
mendokumentasikan apa program itu dan bagaimana program itu dibangun. Komentar
membantu programmer untuk berkomunikasi dan memahami program. Komentar akan
diabaikan oleh kompiler. Dalam C ++, komentar didahului oleh dua garis miring // pada
MODUL I. PENGANTAR BAHASA C++ 9

baris, disebut komentar baris, atau diapit antara /* dan */ pada satu atau beberapa baris,
disebut komentar blok atau komentar paragraf.
Kata kunci atau keywords memiliki arti khusus untuk kompiler dan tidak dapat digu-
nakan dalam program untuk tujuan lain. Ada empat kata kunci dalam program ini: using,
namespace, int, dan return.
Tabel 1.1 memberikan penjelasan singkat tentang beberapa karakter khusus yang ser-
ing digunakan pada setiap program C++.

Tabel 1.1: Karakter Khusus.

Karakter Uraian
# digunakan dalam #include untuk menunjukkan preprocessor directive
<> lampirkan nama library saat digunakan dengan #include
() digunakan pada fungsi, misalnya main()
{} menandakan sebuah blok dari sebuah pernyataan atau beberapa perny-
ataan
// mengawali sebuah komentar
« operator penyisipan stream, output ke console
" " membungkus sebuah string
; tanda akhir dari sebuah pernyataan

1.8 Siklus Pengembangan Program C++


Anda harus membuat program dan mengompilasinya sebelum dapat dijalankan. Proses
ini berulang, seperti yang ditunjukkan pada Gambar 1.11. Jika program Anda memi-
liki compile error atau syntax error, Anda harus memodifikasinya untuk memperbaikinya
dan kemudian kompilasi ulang. Jika program Anda memiliki runtime error atau tidak
menghasilkan hasil yang benar, Anda harus memodifikasinya, mengkompilasi ulang, dan
menjalankannya lagi. Perintah kompiler C++ melakukan tiga tugas secara berurutan: pre-
processing, compiling, dan linking. Tepatnya, kompiler C++ berisi tiga program terpisah:
preprocessor, compiler, dan linker.
• Preprocessor adalah program yang memproses source file sebelum diturunkan ke
kompiler. Preprocessor memproses directive yang dimulai dengan tanda #. Seba-
gai contoh, #include pada baris 1 adalah directive untuk memberi tahu kompiler untuk
MODUL I. PENGANTAR BAHASA C++ 10

memasukkan library. Preprocessor menghasilkan sebuah file perantara.


• Compiler kemudian menerjemahkan file perantara ke dalam file kode mesin, file terse-
but juga dikenal sebagai object file.
• Linker menghubungkan file kode mesin dengan file library pendukung untuk mem-
bentuk file yang dapat dieksekusi. Pada Windows, file kode mesin disimpan pada disk
dengan ekstensi .obj, dan file yang dapat dieksekusi disimpan dengan ekstensi .exe.

Gambar 1.2: Proses pengembangan program C++ terdiri dari membuat/memodifikasi


source code, compiling, linking, dan executing program.

Anda dapat mengembangkan program C++ dari jendela perintah atau dari sebuah
IDE (integrated developed environment). IDE adalah perangkat lunak yang menyediakan
lingkungan pengembangan terintegrasi untuk mengembangkan program C++. Melakukan
editing, compiling, debugging, dan bantuan online terintegrasi dalam satu user interface.
MODUL I. PENGANTAR BAHASA C++ 11

Contoh populer dari IDE adalah Microsoft Visual C++, Dev-C++, Code::Blocks, Eclipse,
dan NetBeans.

1.9 Gaya Pemrograman dan Dokumentasi


Gaya pemrograman yang baik dan dokumentasi yang tepat membuat program mudah
dibaca dan membantu programmer melakukan kesalahan. Suatu program dapat dikom-
pilasi dan dijalankan dengan benar bahkan jika Anda menulisnya pada satu baris saja,
tetapi menulis dengan cara itu akan menjadikan program anda sulit dibaca. Dokumen-
tasi adalah penjelasan berupa komentar yang berkaitan dengan suatu program. Gaya dan
dokumentasi pemrograman terlihat sederhana namun manfaatnya sangat penting.
Selalu sertakan ringkasan di awal program untuk menjelaskan tujuan utama yang di-
lakukan oleh program. Dalam program yang panjang dan kompleks, Anda juga harus
memasukkan komentar yang memperkenalkan setiap langkah utama dan menjelaskan apa
pun yang sulit dibaca.
Gaya indentasi yang konsisten membuat program lebih mudah dibaca dan diperbaiki.
Indentasi digunakan untuk menggambarkan hubungan struktural antara komponen pro-
gram atau pernyataan. Kompiler C++ dapat membaca program bahkan jika semua perny-
ataan dalam garis lurus baris. Indentasi setiap subkomponen atau pernyataan sejauh dua
spasi dari bagian dimana subkomponen atau pernyatan bersarang. Satu baris ruang harus
digunakan untuk memisahkan segmen kode. Ruang tunggal juga harus ditambahkan di
kedua sisi sebuah operator, seperti contoh berikut ini:

cout << a+b-c; // bad style

cout << a + b - c; // good style

1.10 Kesalahan Pemrograman


Kesalahan pemrograman (programming error) dapat muncul selama penyusunan, mod-
ifikasi, kompilasi, dan eksekusi program. Tiga jenis kesalahan yang umumnya terjadi
di pemrograman: kesalahan sintaks (syntax error), kesalahan runtime (runtime error),
kesalahan logika (logic error), dan kesalahan umum (common error).
MODUL I. PENGANTAR BAHASA C++ 12

1.10.1 Syntax Error


Kesalahan yang terdeteksi oleh kompiler disebut syntax error. Kesalahan sintaksis di-
hasilkan dari kesalahan dalam pembuatan kode, seperti salah ketik kata kunci, menghi-
langkan tanda baca yang diperlukan, atau menggunakan tanda kurung pembuka tanpa
tanda kurung penutup yang sesuai. Contohnya sebagai berikut.

1 # include <iostream >


2 using namespace std
3
4 int main (){
5 cout << " Programming is fun << endl;
6
7 return 0;
8 }

Secara umum, syntax error mudah ditemukan dan mudah dikoreksi, karena kompiler
menunjukkan di mana letak kesalahan itu dan mengapa mereka salah.

1.10.2 Runtime Error


Runtime error menyebabkan program berakhir secara tidak normal. Ini terjadi saat ap-
likasi sedang berjalan jika program mendeteksi operasi yang tidak mungkin dilakukan.
Kesalahan input biasanya menyebabkan runtime error. Runtime error terjadi ketika pro-
gram sedang menunggu pengguna untuk memasukkan nilai, tetapi pengguna memasukkan
nilai yang tidak bisa ditangani oleh program. Misalnya, jika program mengharapkan un-
tuk membaca angka, tetapi sebaliknya pengguna memasukkan string, ini menyebabkan
kesalahan tipe data terjadi. Sumber runtime error lainnya adalah pembagian dengan nol.
Ini terjadi ketika pembagi adalah nol untuk divisi bilangan bulat. Contohnya sebagai
berikut.

1 # include <iostream >


2 using namespace std;
3
4 int main (){
5 int i = 4;
MODUL I. PENGANTAR BAHASA C++ 13

6 int j = 0;
7
8 cout << i / j << endl;
9
10 return 0;
11 }

Runtime error tidak sulit ditemukan karena alasan dan lokasi kesalahan ditampilkan
pada konsol ketika program dibatalkan.

1.10.3 Logic Error


Kesalahan logika terjadi ketika suatu program tidak melakukan seperti yang dimaksud-
kan. Kesalahan semacam ini terjadi karena berbagai alasan. Misalnya, misalkan Anda
menulis program untuk mengonversi 35◦ C ke ◦ F.

1 # include <iostream >


2 using namespace std;
3
4 int main (){
5 cout << " Celsius 35 is Fahrenheit degree " << endl;
6 cout << (9 / 5) * 35 + 32 << endl;
7
8 return 0;
9 }

Anda akan mendapatkan nilai yang salah, 67◦ F. Seharusnya 95◦ F. Logic error semacam
ini cukup sulit untuk diidentifikasi langsung.

1.11 Tugas Modul


1. Jawab pertanyaan-pertanyaan berikut ini:
(a) Apa yang dimaksud dengan hardware dan software?
(b) Sebutkan lima nama komponen hardware pada sebuah komputer?
(c) Jelaskan secara singkat masing-masing komponen?
2. Jawab pertanyaan-pertanyaan berikut ini:
MODUL I. PENGANTAR BAHASA C++ 14

(a) Apa perbedaan antara bahasa pemrograman tingkat rendah dengan bahasa pem-
rograman tingkat tinggi? Sebutkan contoh dari jenis masing-masing bahasa pem-
rograman!
(b) Apa perbedaan antara interpreter dengan compiler?
(c) Apa yang dimaksud dengan kode sumber?
3. Buat matriks timeline pengembangan bahasa pemrograman C++ yang dimulai dari
bahasa pemrograman basic (BCPL)!
4. Tulislah sebuah program sederhana tentang perhitungan luas atau volume sebuah benda!
Jelaskan setiap pernyataan dengan menggunakan komentar!
5. Jawab pertanyaan-pertanyaan berikut ini:
(a) Apakah penulisan program di C++ bersifat case sensitive? Jelaskan!
(b) Apa nama ekstensi source file C++ dan apa nama ekstensi executable file C++
di OS Windows?
(c) Apa itu komentar? Tuliskan contoh penulisan komentar di C++?
6. Misalkan Anda menulis program untuk menghitung keliling persegi panjang dan Anda
keliru menulis program Anda sehingga menghitung luas persegi panjang. Termasuk
kesalahan tipe apa ini? Jelaskan!
7. Kenapa program ini tidak berhasil dikompilasi? Apa yang harus dilakukan untuk
memperbaikinya?

1 # include <iostream >


2 using namespace std;
3
4 int main (){
5
6 cout << ’I cannot get this program to work!’ << << endl;
7
8 return 0;
9 }

8. Kenapa program ini tidak menghasilkan output apapun? Apa yang harus dilakukan
untuk memperbaikinya?
MODUL I. PENGANTAR BAHASA C++ 15

1 # include <iostream >


2 Using Namespace Std;
3
4 int main () {
5
6 return 0;
7 cout << "John Jones successfully made this" << endl;
8
9 }
MODUL II
PEMROGRAMAN DASAR

2.1 Tujuan Pembelajaran dan Pokok Bahasan


Tujuan pembelajaran:
1. Untuk menulis program C++ yang melakukan perhitungan sederhana.
2. Untuk membaca input dari keyboard.
3. Untuk menggunakan identifiers dalam menamai variabel dan fungsi.
4. Untuk menggunakan variabel dalam penyimpanan data.
5. Memprogram menggunakan pernyataan penugasan dan ekspresi penugasan
6. Memberi nama konstanta menggunakan kata kunci const.
7. Untuk mendeklarasikan variabel menggunakan tipe data numerik.
8. Untuk melakukan operasi menggunakan berbagai macam operator.
9. Untuk menulis dan mengevaluasi ekspresi.
10. Untuk menggunakan operator penugasan bertambah.
11. Untuk membedakan antara postincrement dan preincrement dan di antara postdecre-
ment dan predecrement.
Pokok bahasan:
1. Pembacaan input.
2. Identifiers.
3. Variabel.
4. Statement dan ekspresi penugasan.
5. Konstanta.
6. Evaluasi ekspresi dan prioritas operator.
7. Operator penugasan bertambah.
8. Operator penjumlahan dan pengurangan.
Referensi:
1. Capper, D. M. C++ for Scientists, Engineers and Mathematicians. London: Springer-

16
MODUL II. PEMROGRAMAN DASAR 17

Verlag, 1994.
2. Delores M. Etter and Jeanine A. Ingber. Engineering Problem Solving With C++ (4th
Edition). Boston:Pearson, 2016.

2.2 Pendahuluan
Pada Modul I, Anda belajar cara membuat, menyusun, dan menjalankan program seder-
hana. Sekarang Anda akan belajar bagaimana menyelesaikan masalah dengan menulis
sebuah program sederhana. Melalui masalah ini, Anda akan belajar dasar pemrograman
menggunakan tipe data, variabel, konstanta, operator, ekspresi, dan input-output. Selain
itu, anda akan mempelajari langkah-langkah dasar yang diperlukan ketika menganalisis
masalah, merancang solusi, dan mengimplementasikan solusi dengan membuat sebuah
program.
Menulis sebuah program melibatkan merancang algoritma dan menerjemahkannya ke
dalam instruksi pemrograman, atau kode. Algoritma menjelaskan bagaimana masalah
diselesaikan dengan menyusun daftar tindakan yang harus diambil dan urutan pelak-
sanaannya. Algoritma dapat membantu programmer merencanakan program sebelum
menulisnya dalam bahasa pemrograman. Algoritma bisa dijelaskan dalam bahasa alami
atau pseudocode (bahasa alami dicampur dengan beberapa kode pemrograman). Algo-
ritma untuk menghitung luas (area) lingkaran dapat dijelaskan sebagai berikut:
1. Baca radius lingkaran.
2. Hitung area lingkaran dengan rumus berikut.

area = radius × radius × π (2.1)

3. Tampilkan hasilnya.
Kode pemrograman C++ untuk menghitung area lingkaran akan muncul seperti berikut
ini.

int main ()
{
MODUL II. PEMROGRAMAN DASAR 18

// Step 1: Read in radius


// Step 2: Compute area
// Step 3: Display the area
}

Untuk menyimpan radius, program perlu mendeklarasikan simbol yang disebut vari-
abel (variable). Variabel mewakili nilai yang disimpan dalam memori komputer. Agar
kompiler mengetahui apa itu radius dan area, Anda harus menentukan tipe datanya,
misalnya tipe bilangan bulat (integer), desimal (floating-point), karakter (char), atau Boolean.
Di dalam C++, tipe-tipe ini dikenal sebagai tipe data dasar (primitive/fundamental data
types).
Langkah berikutnya, nyatakan radius dan area lingkaran sebagai angka dengan tipe
data floating-point dengan presisi ganda atau double. Programnya bisa diperluas sebagai
berikut.

int main ()
{
double radius ;
double area;
// Step 1: Read in radius
// Step 2: Compute area
// Step 3: Display the area
}

Program mendeklarasikan radius dan area sebagai variabel. Tipe data double me-
nunjukkan radius dan area tersebut adalah nilai dengan tipe data double yang disimpan
di memori komputer.
Langkah pertama adalah meminta pengguna untuk menetapkan radius. Selanjutnya,
adalah menghitung are dengan menetapkan hasil dan menyimpan dari perkalian radius,
radius dan π ke dalam area. Pada langkah terakhir, program akan menampilkan nilai
area pada konsol (console) dengan menggunakan cout « area (Lihat Listing 2.1).

Listing 2.1: ComputeArea.cpp

1 # include <iostream >


MODUL II. PEMROGRAMAN DASAR 19

2 using namespace std;


3
4 int main ()
5 {
6 double radius ;
7 double area;
8
9 radius = 20; // Step 1: Read in radius
10
11 area = radius * radius * 3. 14159 ; // Step 2: Compute area
12
13 cout << "The area is " << area << endl; // Step 3: Display the area
14
15 return 0;
16 }

The area is 1256.64

Variabel seperti radius dan area berhubungan dengan lokasi memori. Setiap vari-
abel memiliki nama, tipe (type), ukuran (size), dan nilai (value). Baris 6 menyatakan
bahwa radius disimpan dengan tipe data double. Nilai variabelnya tidak ditentukan
sampai Anda menetapkan nilai. Baris 9 menetapkan 20 ke dalam radius. Demikian
pula, baris 7 mendeklarasikan variabel area dengan tipe data double dan baris 11 mem-
berikan nilai ke area.
Baris 16 mengirimkan string "Area is" ke konsol output. Ini juga mengirimkan nilai
area ke konsol output. Perhatikan bahwa tanda kutip tidak ditempatkan di sekitar area.
Jika ya, string "area" akan dikirim ke konsol output.

2.3 Pembacaan Input


Untuk menggunakan radius yang berbeda, Anda harus memodifikasi kode sumber dan
mengkompilasi ulang program. Ini bisa dilakukan namun tidak nyaman. Anda dapat
menggunakan objek cin untuk membaca input dari keyboard (lihat Listing 2.2).
MODUL II. PEMROGRAMAN DASAR 20

Listing 2.2: ComputeAreaWithConsoleInput.cpp

1 # include <iostream >


2 using namespace std;
3
4 int main ()
5 {
6 double radius ;
7 cout << "Enter a radius : ";
8 cin >> radius ; // Step 1: Read in radius
9
10 double area = radius * radius * 3. 14159 ; // Step 2: Compute area
11
12 cout << "The area is " << area << endl; // Step 3: Display the area
13
14 return 0;
15 }

Enter a radius : 23
The area is 1661.9

Baris 7 menampilkan string "Enter a radius:" ke konsol input. Program Anda


harus selalu memberi tahu pengguna apa yang harus dimasukkan ketika mengharapkan
sebuah input dari keyboard. Baris 8 menggunakan cin untuk membaca nilai dari key-
board.
Simbol » disebut sebagai stream extraction operator atau sederhananya disebut in-
put stream, memberikan input ke variabel. Seperti yang ditunjukkan dalam Listing 2.2,
program menampilkan pesan yang diminta "Enter a radius:", pengguna kemudian
memasukkan angka 2, yang disimpan di dalam variabel radius. Objek cin menye-
babkan program menunggu hingga data dimasukkan pada keyboard dan tombol Enter
ditekan. C++ secara otomatis mengkonversi data yang dibaca dari keyboard ke tipe data
dari variabel.
Anda dapat menggunakan satu pernyataan untuk membaca banyak input. Misalnya,
MODUL II. PEMROGRAMAN DASAR 21

pernyataan berikut membaca tiga nilai menjadi variabel x1, x2, dan x3.

cin >> x1 >> x2 >> x3;

Listing 2.3 memberikan contoh membaca beberapa input dari keyboard.

Listing 2.3: ComputeAverage.cpp

1 # include <iostream >


2 using namespace std;
3
4 int main ()
5 {
6 // Prompt the user to enter three numbers
7 double number1 , number2 , number3 ;
8 cout << "Enter three numbers : ";
9 cin >> number1 >> number2 >> number3 ;
10
11 // Compute average
12 double average = ( number1 + number2 + number3 ) / 3;
13
14 // Display result
15 cout << "The average of " << number1 << " " << number2
16 << " " << number3 << " is " << average << endl;
17
18 return 0;
19 }

Enter three numbers : 1 2 3


The average of 1 2 3 is 2

Enter three numbers : 10.5


11
11.5
The average of 10.5 11 11.5 is 11
MODUL II. PEMROGRAMAN DASAR 22

2.4 Identifiers
Seperti yang Anda lihat pada Listing 2.3, main, number1, number2, number3, dan seba-
gainya adalah nama-nama hal yang dikelompokkan sebagai Identifiers.
Semua Identifiers harus memenuhi aturan berikut ini.
• Identifiers adalah urutan karakter yang terdiri dari huruf, angka, dan garis bawah.
• Identifiers harus dimulai dengan huruf atau garis bawah; tidak dapat dimulai dengan
angka.
• Identifiers harus berbeda dengan Keywords.
• Identifiers bisa berapa pun panjang karakternya, tetapi compiler C++ dapat menerap-
kan batasan jumlah karakter, yaitu maksimal 32 karakter atau kurang.
Karena C++ adalah case-sensitive, nama variabel untuk area, Area, danAREA adalah
Identifiers yang berbeda. Identifiers memberi nama variabel, konstanta, fungsi, dan label.
Identifiers dibuat deskriptif agar mudah dibaca. Hindari menggunakan singkatan untuk
Identifiers, misalnya, numberOfStudents lebih baik daripada numStuds, numOfStuds,
atau numOfStudents.

2.5 Variabel
Variabel (variables) digunakan untuk menyimpan nilai yang akan digunakan dalam suatu
program. Mereka disebut variabel karena nilainya dapat diubah.
Pada Listing 2.2, radius dan area adalah variabel dengan tipe double. Anda dapat
menetapkan nilai numerik apa pun ke radius dan area, dan nilai-nilai radius dan area
dapat diatur kembali. Pada contoh di Listing, radius awalnya bernilai 1.0 dan kemu-
dian diubah menjadi 2.0. Sehingga nilai area diatur ke 3.14159 dan kemudian diubah
kembali menjadi 12.56636.

1 // Compute the first area


2 radius = 1.0;
3 area = radius * radius * 3. 14159 ;
4 cout << "The area is " << area << " for radius " << radius ;
5
MODUL II. PEMROGRAMAN DASAR 23

6 // Compute the second area


7 radius = 2.0;
8 area = radius * radius * 3. 14159 ;
9 cout << "The area is " << area << " for radius " << radius ;

Untuk menggunakan variabel, Anda mendeklarasikannya dengan memberi tahu com-


piler namanya serta jenis data yang dapat disimpannya. Deklarasi variabel memberitahu
kompiler untuk mengalokasikan ruang memori yang sesuai untuk variabel berdasarkan
tipe datanya. Sintaks untuk deklarasi variabel adalah

datatype variableName ;

Berikut ini adalah contoh-contoh deklarasi variabel.

int count ; // Declare count to be an integer variable


double radius ; // Declare radius to be a double variable
double interestRate ; // Declare interestRate to be a double variable

Jika variabel dari tipe data yang sama, mereka dapat dideklarasikan bersama, sebagai
berikut:

datatype variable1 , variable2 ,..., variablen ;

Berikut ini adalah contoh deklarasi variabel dengan tipe data yang sama.

int i, j, k; // Declare i, j, and k as int variables

Variabel sering memiliki nilai awal (initialization). Anda dapat mendeklarasikan vari-
abel dan menginisialisasi dalam satu langkah.

int count = 1;

Deklarasi di atas sama dengan dua pernyataan berikut ini.

int count ;
count = 1;

Anda juga bisa menyederhanakan deklarasi dan inisialisasi variabel dari tipe yang
sama secara bersamaan.

int i = 1, j = 2;
MODUL II. PEMROGRAMAN DASAR 24

Setiap variabel memiliki cakupan (scope). Ruang lingkup suatu variabel adalah bagian
dari program di mana variabel dapat dirujuk.

2.6 Pernyataan dan Ekspresi Penugasan


Setelah variabel dideklarasikan, Anda dapat menetapkan nilai untuk itu dengan menggu-
nakan pernyataan penugasan (assignment statements). Dalam C++, tanda = digunakan
sebagai operator penugasan (assignment operators). Sintaks untuk pernyataan penugasan
adalah sebagai berikut.

variable = expression ;

Ekspresi mewakili perhitungan yang melibatkan nilai, variabel, dan operator yang,
jika digabungkan, mengevaluasi suatu nilai.

int y = 1; // Assign 1 to variable y


double radius = 1.0; // Assign 1.0 to variable radius
int x = 5 * (3 / 2); // Assign the value of the expression to x
x = y + 1; // Assign the addition of y and 1 to x
area = radius * radius * 3. 14159 ; // Compute area

Anda bisa menggunakan variabel dalam ekspresi. Variabel juga dapat digunakan di
kedua sisi = operator.

x = x + 1;

Dalam pernyataan penugasan ini, hasil x + 1 ditugaskan ke x. Jika x adalah 1 se-


belum pernyataan dieksekusi, maka itu menjadi 2 setelah pernyataan dieksekusi.
Untuk menetapkan nilai ke variabel, Anda harus menempatkan nama variabel di se-
belah kiri operator penugasan. Dengan demikian, pernyataan berikut ini salah.

1 = x; // Wrong

Dalam C++, pernyataan penugasan pada dasarnya adalah ekspresi yang mengevaluasi
nilai yang akan diberikan ke variabel di sisi kiri operator penugasan. Karena alasan ini,
pernyataan penugasan juga dikenal sebagai ungkapan penugasan (assignment expression).
Misalnya berikut ini pernyataan itu benar.

cout << x = 1;
MODUL II. PEMROGRAMAN DASAR 25

Pernyataan tersebut ekuivalen dengan pernyataan berikut ini.

x = 1;
cout << x;

Jika sebuah nilai yang sama diberikan kepada beberapa variabel, Anda dapat meng-
gunakan sintaks berikut ini.

i = j = k = 1;

Pernyataan tersebut ekuivalen dengan pernyataan berikut ini.

k = 1;
j = k;
i = j;

2.7 Konstanta
Nilai variabel dapat berubah selama eksekusi suatu program, tetapi konstanta dapat mewak-
ili data permanen yang tidak pernah berubah. Pada Listing 2.2, Anda tidak ingin terus
mengetik 3.14159. Sebagai gantinya, Anda dapat mendeklarasikan konstanta untuk π
(lihat Listing 2.4). Berikut ini sintaks untuk mendeklarasikan konstanta.

const datatype CONSTANTNAME = value ;

Konstanta harus dideklarasikan dan diinisialisasi dalam pernyataan yang sama. const
adalah kata kunci C++ untuk mendeklarasikan konstanta.

Listing 2.4: ComputeAreaWithConstant.cpp

1 # include <iostream >


2 using namespace std;
3
4 int main ()
5 {
6 const double PI = 3. 14159 ;
7
8 // Step 1: Read in radius
9 double radius ;
MODUL II. PEMROGRAMAN DASAR 26

10 cout << "Enter a radius : ";


11 cin >> radius ;
12
13 // Step 2: Compute area
14 double area = radius * radius * PI;
15
16 // Step 3: Display the area
17 cout << "The area is ";
18 cout << area << endl;
19
20 return 0;
21 }

2.8 Evaluasi Ekspresi dan Prioritas Operator


Ketika lebih dari satu operator digunakan dalam ekspresi, aturan prioritas operator berikut
digunakan untuk menentukan urutan evaluasi ekspresi tersebut.
• Ekspresi yang berada di dalam tanda kurung, diterapkan pertama kali. Jika ekspresi
memiliki tanda kurung bersarang (nested brackets), mereka diterapkan prioritas dari
bagian paling dalam (the innermost).
• Operator perkalian, pembagian, dan sisa diterapkan berikutnya. Jika ekspresi berisi
beberapa operator perkalian, pembagian, dan sisa, mereka diterapkan prioritas dari
kiri ke kanan.
• Operator penjumlahan dan pengurangan diterapkan terakhir. Jika ekspresi berisi be-
berapa operator penjumlahan dan pengurangan, mereka diterapkan prioritas dari kiri
ke kanan.
Berikut ini adalah contoh bagaimana sebuah ekspresi dievaluasi.

3 + 4 * 4 + 5 * (4 + 3) - 1
3 + 4 * 4 + 5 * 7 - 1
3 + 16 + 5 * 7 - 1
3 + 16 + 35 - 1
19 + 35 - 1
MODUL II. PEMROGRAMAN DASAR 27

54 - 1
53

2.9 Operator Penugasan Bertambah


Nilai variabel dapat digunakan, dimodifikasi, dan kemudian dipindahkan kembali ke vari-
abel yang sama. Misalnya, pernyataan berikut meningkatkan variabel count sebesar 1:

count = count + 1;

C++ memungkinkan Anda untuk menggabungkan operator penugasan dan penam-


bahan menggunakan operator penugasan bertambah. Misalnya, pernyataan sebelumnya
dapat ditulis sebagai berikut.

count += 8;

+= disebut operator penugasan bertambah (augmented assignment operators) (Lihat Tabel


2.1)
Tabel 2.1: Operator Penugasan Bertambah.

Operator Uraian Contoh Ekuivalen


*= Perkalian a *= b a = a*b
/= Pembagian a /= b a = a/b
+= Penjumlahan a += b a = a+b
-= Pengurangan a -= b a = a-b
%= Sisa a %= b a = a%b

2.10 Operator Penjumlahan dan Pengurangan


++ dan −− adalah dua operator singkatan untuk menambah dan mengurangi variabel
dengan 1. Misalnya, kode berikut ini menambah i oleh 1 dan mengurangi j oleh 1.

int i = 3, j = 3;
i++; // i becomes 4
j--; // j becomes 2

i++ dan i−− masing-masing disebut sebagai postincrement dan postdecrement karena
operator ++ dan −− ditempatkan setelah variabel.
Operator-operator ini juga dapat ditempatkan sebelum variabel. Sebagai contoh,
MODUL II. PEMROGRAMAN DASAR 28

int i = 3, j = 3;
++i; // i becomes 4
--j; // j becomes 2

++i dan −−i masing-masing disebut sebagai preincrement dan predecrement.

2.11 Tugas Modul


1. Tunjukkan apakah pernyataan berikut ini benar (T) atau salah (F)
(a) Eksekusi program C++ dimulai dengan fungsi main. T/F
(b) Menulis Number, NUMBER, atau number adalah sama di dalam program C++.
T/F
(c) Deklarasi dapat diletakkan di mana saja di dalam program C++. T/F
(d) Pernyataan (statements) dan deklarasi (declaration) harus diakhiri dengan tanda
titik koma. T/F
(e) Hasil dari pembagian sebuah angka dengan angka lain tipe integer adalah
angka tipe floating-point. T/F
2. Tunjukkan apakah pernyataan pernyataan berikut ini benar atau salah. Jika pernyataan
itu salah, perbaiki sehingga menjadi pernyataan yang benar.
(a) Poin a

int i, j, k,

(b) Poin b

float f1 (11) , f2 (202.00);

(c) Poin c

DOUBLE D1 , D2 , D3;

(d) Poin d

float a1(a2);

(e) Poin e

int n, m_m;

3. Tulis program untuk menghitung area A dari permukaan bola dengan radius r.
MODUL II. PEMROGRAMAN DASAR 29

4. Tulis program yang membaca angka positif dan kemudian hitung dan cetak hasil
pangkat 3 dari angka tersebut!
5. Tulis program yang membaca angka dalam satuan feet, ubah menjadi meter, dan
tampilkan hasilnya. 1 feet adalah 0,305 meter. Berikut ini contoh proses.

Enter a value for feet: 16.5


16.5 feet is 5.032 meters

6. Percepatan rata-rata didefinisikan sebagai perubahan kecepatan dibagi dengan waktu


yang dibutuhkan untuk melakukan perubahan, seperti yang ditunjukkan dalam rumus
berikut.
v1 − v0
a= (2.2)
t

Tulis program yang meminta pengguna untuk memasukkan kecepatan awal v0 dalam
m/s, kecepatan akhir v1 dalam m/s, dan rentang waktu t dalam s, dan menampilkan
percepatan rata-rata. Berikut ini contoh proses.

Enter v0 , v1 , and t: 5.5 50.9 4.5


The average acceleration is 10.0889

7. Tulis program yang menghitung energi yang dibutuhkan untuk memanaskan air dari
suhu awal ke suhu akhir. Program Anda harus mendorong pengguna untuk mema-
sukkan jumlah air dalam kilogram dan suhu awal dan akhir air. Rumus untuk menghi-
tung energi adalah:

Q = M ∗ ( f inalT emperature − initialT emperature) ∗ 4184 (2.3)

di mana M adalah berat air dalam kg, suhu dalam derajat ◦ C, dan energi Q diukur
dalam J. Berikut ini contoh proses.

Enter the amount of water in kilograms : 55.53


Enter the initial temperature : 3.5
Enter the final temperature : 10.5
The energy needed is 1626362.64
MODUL II. PEMROGRAMAN DASAR 30

8. Tulis program untuk hitung dan cetak berat molekul (Molecular Weight) dari senyawa
Oktana (C8 H18 )
MODUL III
PERNYATAAN BERSYARAT

3.1 Tujuan Pembelajaran dan Pokok Bahasan


Tujuan pembelajaran:
1. Untuk mendeklarasikan variabel bool dan menulis ekspresi Boolean menggunakan
operator relasional.
2. Untuk menerapkan kontrol seleksi menggunakan pernyataan if.
3. Untuk menerapkan kontrol seleksi menggunakan pernyataan if else.
4. Untuk menerapkan kontrol seleksi menggunakan pernyataan nested if dan kombi-
nasi dengan if else.
5. Untuk menerapkan kontrol seleksi menggunakan pernyataan switch.
6. Untuk menggabungkan kondisi menggunakan operator logika AND (&&), OR (||),
dan NOT (!).
7. Untuk menguji aturan yang mengatur prioritas dan asosiasi operator.
Pokok bahasan:
1. Tipe data bool
2. Pernyataan if
3. Pernyataan if else
4. Pernyataan nested if dan kombinasi dengan if else.
5. Pernyataan switch.
6. Produksi bilangan acak.
7. Operator logika AND (&&), OR (||), dan NOT (!).
8. Prioritas dan asosiasi operator.
Referensi:
1. Capper, D. M. C++ for Scientists, Engineers and Mathematicians. London: Springer-
Verlag, 1994.
2. Delores M. Etter and Jeanine A. Ingber. Engineering Problem Solving With C++ (4th

31
MODUL III. PERNYATAAN BERSYARAT 32

Edition). Boston:Pearson, 2016.

3.2 Pendahuluan
Jika Anda memasukkan nilai radius dengan bilangan negatif di Listing 2.2, program
menampilkan hasil yang tidak valid. Jika radius bernilai negatif, Anda ingin program
tersebut tidak melakukan perhitungan area. Untuk mengatasi hal tersebut, semua bahasa
pemrograman tingkat tinggi termasuk C++ menyediakan pernyataan bersyarat: perny-
ataan yang memungkinkan Anda memilih atau menyeleksi tindakan dengan beberapa al-
ternatif.
Adapun jenis-jenis pernyataan bersyarat di dalam C++ adalah sebagai berikut ini.
1. Pernyataan if
2. Pernyataan if-else
3. Pernyataan if bersarang (nested if)
4. Pernyataan switch
Semua pernyataan bersyarat tersebut menggunakan kondisi dengan ekspresi Boolean.

3.3 Tipe Data bool


Ekspresi Boolean adalah ekspresi yang mengevaluasi ke nilai Boolean: true atau false.
Variabel yang mengandung nilai Boolean disebut dengan variabel Boolean. Tipe data
bool digunakan untuk mendeklarasikan variabel Boolean. Sebagai contoh, pernyataan
berikut memberikan true ke variabel lightsOn:

bool lightsOn = true;

Bila Anda membandingkan dua nilai, misalnya apakah radius lebih besar dari 0,
sama dengan 0, atau kurang dari 0, C++ menyediakan 6 (enam) operator, ditunjukkan
pada Tabel 3.1, yang dapat digunakan dalam ekspresi Boolean. true dan false adalah
Keywords dan tidak dapat digunakan sebagai Identifiers dalam program Anda. C++
menggunakan 1 untuk mewakili true dan 0 untuk false. Jika Anda menampilkan nilai
bool ke konsol, 1 ditampilkan jika nilainya true dan 0 jika false.

cout << (4 <5); // menampilkan 1, karena 4 <5 benar


MODUL III. PERNYATAAN BERSYARAT 33

cout << (4> 5); // menampilkan 0, karena 4> 5 salah .

Tabel 3.1: Operator terkait Pernyataan Bersyarat.

Operator Simbol Matematika Uraian Contohϵ Hasil


< < kurang dari radius < 0 false
<= ≤ kurang dari atau sama dengan radius =< 0 false
> > lebih dari radius > 0 true
>= ≥ lebih dari atau sama dengan radius >= 0 true
== = sama dengan radius == 0 false
!= , tidak sama dengan radius != 0 true
ϵ
radius = 5 cm

3.4 Pernyataan if
Pernyataan if mengeksekusi tindakan jika dan hanya jika syaratnya benar (condition
= true). Syntax spernyataan if adalah sebagai berikut.

if( condition )
{
action
}

Diagram alir (flowchart) pada Gambar 3.1 menggambarkan bagaimana C++ mengek-
sekusi sintaks pernyataan if. Diagram alir adalah sebuah jenis diagram yang menggam-
barkan algoritma dan proses yang menunjukkan langkah-langkah dalam simbol grafis
dengan berbagai bentuk dan urutannya ditandai dengan panah. Operasi proses ditun-
jukkan dalam bentuk-bentuk simbol grafis dan panah yang menghubungkannya mewakili
aliran kontrol. Bentuk belah ketupat (diamond) menunjukkan kondisi yang disyaratkan
atau ekspresi Boolean dan kotak persegi panjang mewakili pernyataan yang akan diek-
sekusi bila kondisinya bersifat true.
Anda dapat menggunakan pernyataan bersyarat berikut untuk mengganti baris 8-12
pada Listing 2.2:

if ( radius < 0)
{
cout << " Incorrect input " << endl;
MODUL III. PERNYATAAN BERSYARAT 34

Gambar 3.1: Diagram alir pernyataan if.

}
else
{
area = radius * radius * PI;
cout << "The area for the circle of radius " << radius
<< " is " << area << endl;
}

Jika nilai radius lebih besar dari atau sama dengan 0, maka area tersebut dihitung dan
hasilnya ditampilkan; jika sebaliknya, nilai radius lebih kecil dari 0, konsol output akan
menampilkan pernyataan berupa Incorrect input.
Ekspresi Boolean wajib dinyatakan di dalam tanda kurung.

if i > 0 // incorrect expression


{
cout << "i is positive " << endl;
}

if (i > 0) // correct expression


{
cout << "i is positive " << endl;
MODUL III. PERNYATAAN BERSYARAT 35

Kurung kurawal dapat dihilangkan jika hanya satu pernyataan yang dilampirkan sete-
lah ekspresi Boolean.

if (i > 0)
cout << "i is positive " << endl;

Listing 3.1 berisi program yang meminta Anda untuk memasukkan bilangan bulat.
Jika angkanya adalah kelipatan 5, tampilkan HiFive. Jika angkanya genap, tampilkan
HiEven.

Listing 3.1: SimpleIfDemo.cpp

1 # include <iostream >


2 using namespace std;
3
4 int main ()
5 {
6 // Prompt the user to enter an integer
7 int number ;
8 cout << "Enter an integer : ";
9 cin >> number ;
10
11 if ( number % 5 == 0)
12 cout << " HiFive " << endl;
13
14 if ( number % 2 == 0)
15 cout << " HiEven " << endl;
16
17 return 0;
18 }

3.5 Pernyataan if-else


Pernyataan if mengeksekusi tindakan jika kondisi yang disyaratkan bernilai true. Jika
kondisinya salah, tidak ada yang dilakukan. Bila Anda ingin ada tindakan alternatif di-
MODUL III. PERNYATAAN BERSYARAT 36

mana bila pernyataan if bernilai false, maka pernyataan if-else dapat digunakan.
Dengan kata lain, pernyataan if-else mengeksekusi sebuah pernyataan jika ekspresi
Boolean bernilai true; jika tidak, pernyataan lainnya dari ekspresi yang bernilaifalse
yang akan dieksekusi. Berikut ini adalah syntax untuk pernyataan if-else.

if ( condition )
{
statement (s)-for -the -true -case;
}
else
{
statement (s)-for -the -false -case;
}

Diagram alir if-else ditunjukkan pada Gambar 3.2.

Gambar 3.2: Diagram alir pernyataan if else.

Jika ekspresi boolean bernilai true, pernyataan untuk true-case yang dieksekusi; jika
tidak, pernyataan untuk false-case yang dieksekusi. Perhtikan contoh kode berikut ini.

if ( radius >= 0)
{// true -case statements
MODUL III. PERNYATAAN BERSYARAT 37

area = radius * radius * PI;


cout << "The area for the circle of radius " <<
radius << " is " << area;
}
else
{// false -case statements
cout << " Negative radius ";
}

Jika radius >= 0 bernilai benar, area dihitung dan ditampilkan; jika salah, pesan "Negative
radius" ditampilkan.
Seperti yang sudah dijelaskan sebelumnya, penggunaan kurung kurawal dapat dia-
baikan jika hanya satu pernyataan yang dilampirkan. Perhatikan contoh kode berikut ini.

if ( number % 2 == 0)
cout << number << " is even.";
else
cout << number << " is odd.";

3.6 Pernyataan nested if


Sebuah pernyataan if atau if-else dapat mengandung pernyataan if atau if-else lain-
nya. Pernyataan seperti ini disebut dengan pernyataan if bersarang (nested if). Berikut
ini adalah syntax untuk pernyataan nested if.

if <condition 1 exists >


{
if <condition 2 exists >
{
if <condition 3 exists >
{
<action A>
}
<action B>
}
<action C>
MODUL III. PERNYATAAN BERSYARAT 38

Perhatikan contoh kode berikut ini.

if (i > k)
{
if (j > k)
cout << "i and j are greater than k" << endl;
}
else
cout << "i is less than or equal to k" << endl;

3.7 Pernyataan switch


Pernyataan if membuat pilihan berdasarkan kondisi tunggal, true atau false. Bila akan
membuat beberapa kondisi, kombinasi if-else dan nested if bisa digunakan. Namun
hal tersebut lebih rumit. C++ menyediakan pernyataan switch untuk menyederhanakan
kode yang mensyaratkan beberapa kondisi.
Diagram alir pernyataan switch dapat dilihat pada Gambar 3.3.

Gambar 3.3: Diagram alir pernyataan switch.

Pernyataan ini memeriksa untuk melihat apakah statusnya cocok dengan nilai label_1,
MODUL III. PERNYATAAN BERSYARAT 39

label_2, atau sampai dengan label_n, sesuai urutan. Jika ada kecocokan, pernyataan
terkait akan dieksekusi. Jika tidak, pernyataan setelah default ditampilkan. Berikut ini
syntax lengkap untuk pernyataan switch:

switch (<selector expression >){


case <label_1 >:
<sequence of statements >;
break ;
case <label_2 >:
<sequence of statements >;
break ;
.
.
case <label_n >:
<sequence of statements >;
break ;
default :
<sequence of statements >;
break ;}

Pernyataan switch mematuhi aturan-aturan berikut:


1. Ekspresi switch harus menghasilkan nilai integral dan selalu tertutup dalam tanda
kurung.
2. label_1,. . . , dan label_n adalah ekspresi konstanta, yang ditulis sebagai satu
kesatuan kata dan tidak terpisah, seperti 1 + x. Nilai-nilai ini adalah bilangan bulat
dan tidak dapat berupa bilangan desimal.
3. Ketika nilai dalam pernyataan case cocok dengan nilai ekspresi switch, pernyataan
setelah case terkait dieksekusi sampai pernyataan break atau akhir dari pernyataan
switch tercapai.
4. default bersifat opsional dan dapat digunakan untuk mengeksekusi pernyataan terkait
dimana tidak ada case yang cocok dengan nilai ekspresi switch.
5. Keyword break bersifat opsional. break mengakhiri pernyataan switch.
MODUL III. PERNYATAAN BERSYARAT 40

3.8 Produksi Bilangan Acak


Untuk menghasilkan bilangan acak, gunakan fungsi rand() yang ada di file header cstdlib.
Fungsi ini menghasilkan bilangan bulat acak antara 0 dan RAND_MAX. Dalam beberapa
compiler, termasuk CodeBlocks, RAND_MAX adalah 32767.
Angka-angka yang dihasilkan rand() adalah pseudorandom. Artinya, setiap kali
dieksekusi pada sistem yang sama, rand() menghasilkan urutan angka yang sama. Di
mesin Anda, misalnya, eksekusi pernyataan ini akan selalu menghasilkan angka 41.

int random = rand ();


/* No srand () calls before rand (), so seed = 1*/
cout << "Seed = 1, Random number = " << random << endl;

Algoritma fungsi rand() menggunakan nilai yang disebut seed untuk mengontrol cara
menghasilkan angka-angka. Secara default, nilai seed adalah 1.
Jika Anda mengubah seed ke nilai yang berbeda, urutan angka acak akan berbeda.
Untuk mengganti seed, gunakan srand(seed) pada file header cstdlib. Perhatikan
contoh kode berikut ini.

Listing 3.2: RandomNumber.cpp

1 # include <iostream >


2 # include <cstdlib >
3 using namespace std;
4
5 int main ()
6 {
7 int random = rand ();
8 /* No srand () calls before rand (), so seed = 1*/
9 cout << "Seed = 1, Random number = " << random << endl;
10
11 srand (7);
12 /* Seed = 7 */
13 random = rand ();
14 cout << "Seed = 7, Random number = " << random << endl;
15
MODUL III. PERNYATAAN BERSYARAT 41

16 return 0;
17 }

Seed = 1, Random number = 41


Seed = 5, Random number = 61

Praktisnya, Anda dapat menggunakan hasil dari panggilan time(0) sebagai seed.
Fungsi time() pada header ctime mengembalikan jumlah detik sejak jam 00:00, 1 Jan-
uari 1970 UTC. Nilai seed berubah seiring waktu. Jadi setiap kali kita menjalankan
program, satu set bilangan acak baru akan dihasilkan.

Listing 3.3: SeedTime.cpp

1 # include <iostream >


2 # include <cstdlib >
3 # include <ctime >
4 using namespace std;
5
6 int main ()
7 {
8 srand (time (0));
9 int random = rand ();
10
11 cout << "Seed = " << time (0) << endl;
12 cout << " Random number = " << random << endl;
13
14 return 0;
15 }

Seed = 1588897829
Random number = 22886

Untuk mendapatkan bilangan bulat acak mulai 0 sampai dengan 9, gunakan

rand () % 10
MODUL III. PERNYATAAN BERSYARAT 42

3.9 Perhitungan Pangkat dan Akar Pangkat 2


Untuk menghitung pangkat, C++ meyediakan fungsi pow(x,y) yang menghitung x pangkat
y. Bilangan x dan y dapat berupa bilangan bulat positif, bilangan bulat negatif, nol, bi-
langan rasional, dan bilangan riil. Fungsi pow(x,y) didefinisikan di file header cmath.
Perhatikan contoh kode berikut ini.

Listing 3.4: XpowerY.cpp

1 # include <iostream >


2 # include <cmath >
3 using namespace std;
4
5 int main ()
6 {
7 double x=2.2, y=-3;
8
9 cout << pow(x,y);
10
11 return 0;
12 }

0.0939144

Demikian juga, untuk menghitung akar pangkat 2 dari sebuah bilangan, C++ menye-
diakan sqrt(x) yang menghitung akar pangkat 2 dari x. Seperti halnya pow(x,y), fungsi
sqrt(x) didefinisikan di file header cmath. Perhatikan contoh kode berikut ini.

Listing 3.5: squarerootX.cpp

1 # include <iostream >


2 # include <cmath >
3 using namespace std;
4
5 int main ()
6 {
7 int x=144;
MODUL III. PERNYATAAN BERSYARAT 43

8
9 cout << sqrt(x);
10
11 return 0;
12 }

12

3.10 Operator Logika


Anda dapat menggunakan operator logika untuk menggabungkan beberapa kondisi yang
akan menentukan apakah suatu pernyataan dieksekusi atau tidak. Operator logika berop-
erasi dengan kombinasi nilai-nilai Boolean untuk menciptakan nilai Boolean baru. Tabel
3.2 mendefinisikan operator AND (&&). Operator AND (&&) dari dua operan Boolean
benar jika dan hanya jika kedua operan itu benar. Tabel 3.3 mendefinisikan operator OR
(||). Operator OR (||) dari dua operan Boolean benar jika setidaknya salah satu operan
benar. Tabel 3.4 mendefinisikan operator NOT (!). Operator NOT (!) meniadakan dari
true ke false dan sebaliknya.

Tabel 3.2: Tabel kebenaran untuk operator && (AND).

Operand 1 Operand 2 Operand 1 && Operand 2


true true true
true false false
false true false
false false false

Tabel 3.3: Tabel kebenaran untuk operator || (OR).

Operand 1 Operand 2 Operand 1 || Operand 2


true true true
true false true
false true true
false false false
MODUL III. PERNYATAAN BERSYARAT 44

Tabel 3.4: Tabel kebenaran untuk operator ! (NOT).

Operand !Operand
true false
false true

3.11 Prioritas dan Asosiasi Operator


Prioritas dan asosiasi operator menentukan urutan operator mana yang dievaluasi lebih
dahulu dibandingkan dari yang lain. Aturan-aturan tentang hal tersebut ditunjukkan pada
Tabel 3.5. Operator yang ada diurutkan berdasarkan prioritas dari atas ke bawah. Ek-
spresi yang ada di dalam tanda kurung dievaluasi paling awal. Operator logika memiliki
prioritas lebih rendah dari operator relasional dan operator relasional memiliki prioritas
lebih rendah daripada operator aritmatika. Operator dengan prioritas yang sama muncul
di grup yang sama.

Tabel 3.5: Prioritas dan asosiasi operator (dari tertinggi ke terendah).

Precedence Operators Name Associates


1 () Parentheses innermost first
2 ++ - - + - ! (type) Unary operators right to left (unary)
3 */% Multiplicative operators left to right
4 +- Additive operators left to right
5 <6>> Relational ordering left to right
6 == != Relational equality left to right
7 && Logical and left to right
8 || Logical or left to right
9 = += -= *= /= %= Assignment right to left

3.12 Tugas Modul


1. Tunjukkan apakah pernyataan berikut ini benar (T) atau salah (F):
(a) Jika nilai sebuah kondisi adalah nol, maka kondisi tersebut dievaluasi sebagai
false. T/F
(b) Jika nilai sebuah kondisi tidak nol atau 1, maka kondisi tersebut menjadi tidak
valid. T/F
(c) Ekspresi a == 2 digunakan untuk menentukan apakah nilai objek a sama den-
gan 2, dan ekspresi a = 2 memberikan nilai 2 ke objek a. T/F
MODUL III. PERNYATAAN BERSYARAT 45

(d) Operator logika && dan || memiliki tingkat prioritas yang sama. T/F
(e) Keyword else selalu dikaitkan dengan pernyataan if terdekat kecuali tanda ku-
rung digunakan untuk mendefinisikan blok pernyataan. T/F
2. Dengan definisi variabel berikut, apa hasil pengujian dari masing-masing kondisi
berikut? Tandai setiap hasil dengan T (untuk True atau 1) atau F (untuk False atau
0).

int x = 10, y = 5, z = 42;

(a) if (x > 0)
(b) if (x > y)
(c) (x == 0)
(d) if (x == z)
(e) if (x + y > z)
(f) if (x / y == z)
(g) if (x > z / y)
(h) if (x > 0 && z < 10)
(i) if (x > 0 && z >= 10)
(j) if (x > 0 || z < 10)
(k) if (x > 0 || z >= 10)
(l) if (x)
(m) if (!x)
3. Anda memiliki satu set data pengukuran suhu dalam rentang waktu tertentu yang di-
ambil dari alat penukar kalor (HE) tipe A dan tipe B. Data-data ini diplot seperti pada
Gambar 3.4.
Saat ini Anda ingin menginterpolasi suhu sedemikian sehingga tepat dengan:
(a) nilai 1,4 min untuk HE A (K1),
(b) nilai 2,4 min untuk HE A (K2),
(c) nilai 3,4 min untuk HE A (K3),
(d) nilai 2,5 min untuk HE B (K4),
(e) nilai 3,5 min untuk HE B (K5), dan
MODUL III. PERNYATAAN BERSYARAT 46

Gambar 3.4: Grafik suhu versus waktu yang diambil dari alat penukar kalor tipe A dan
tipe B.

(f) nilai 4,5 min untuk HE B (K6).


Gunakan rumus interpolasi sebagai berikut.

b−a[ ]
f (b) = f (a) + f (c) − f (a) (3.1)
c−a

Dengan menggunakan C++, hitung suhu hasil interpolasi dengan memunculkan se-
mua alternatif output bila slope grafik dalam rentang data yang diamati adalah:
(a) Positive.
(b) Negative.
(c) Zero.
4. Anda dapat menggunakan aturan Cramer untuk menyelesaikan sistem persamaan lin-
ear 2×2 sebagai berikut:
ax + by = e (3.2)

cx + dy = f (3.3)
MODUL III. PERNYATAAN BERSYARAT 47

Kombinasi Persamaan 3.2 dan 3.3,

ed − b f
x= (3.4)
ad − bc

a f − ec
y= (3.5)
ad − bc

Tulis program C++ yang meminta Anda untuk memasukkan nilai a, b, c, d, e, dan
f , dan kemudian memunculkan hasilnya. Bila ad-bc sama dengan 0, tuliskan The
equation has no solution.
• Berikut ini adalah contoh input dan output:

Enter a, b, c, d, e, f: 9.0 4.0 3.0 -5.0 -6.0 -21.0


x is -2.0 and y is 3.0

• Berikut ini adalah contoh input dan output lainnya:

Enter a, b, c, d, e, f: 1.0 2.0 2.0 4.0 4.0 5.0


The equation has no solution

5. Berikut ini ditampilkan potongan kode program. Perbaiki kesalahan-kesalahan yang


ada dalam pengkodean berikut ini (bila ada).

if (s1 == s2 == s3);
{
cout << " equilateral triangle \n";
}
else;
cout >> "not an equilateral triangle \n";

Tujuan dari program di atas adalah untuk menampilkan equilateral triangle jika
ketiga sisi segitiga sama. Bila panjang salah satu sisi berbeda, tampilkan not an
equilateral triangle. Sebelumnya, Anda diminta untuk memasukkan nilai s1,
s2, dan s3. Tambahkan juga dengan perhitungan luas dan keliling segitiga!
6. Tulis sebuah program yang menampilkan akar-akar persamaan kuadrat ax2 + bx + c,
dimana nilai a, b dan c yang dimasukkan oleh pengguna. Anda dapat menggunakan
MODUL III. PERNYATAAN BERSYARAT 48

persamaan berikut ini.


−b ± b2 − 4ac
x1,2 = (3.6)
2a

Ada 3 kemungkinan penyelesaian yang muncul sebagai ouput, sebagai berikut.


(a) Kedua akarnya riil dan sama.
(b) Kedua akarnya riil dan berbeda.
(c) Kedua akarnya tidak riil.

Anda dapat menggunakan pow(x, 0,5) atau sqrt(x) untuk menghitung x di C++;
jangan lupa tambahkan header include <cmath> pada program.
Masukkan nilai-nilai a, b, c berikut ini sebagai pengujian.
(a) a, b, c: 1.0 3.0 1.0.
(b) a, b, c: 1.0 2.0 1.0.
(c) a, b, c: 1.0 2.0 3.0.
MODUL IV
FUNGSI MATEMATIKA, KARAKTER, DAN STRING

4.1 Tujuan Pembelajaran dan Pokok Bahasan


Tujuan pembelajaran:
1. Untuk memecahkan masalah matematika dengan menggunakan fungsi matematika
C++.
2. Untuk mempelajari operasi menggunakan tipe data char.
3. Untuk mempelajari operasi menggunakan tipe data string.
4. Untuk memformat cout dengan menggunakan stream manipulator.
5. Untuk membaca dan/atau menulis data dari dan/atau ke file.
Pokok bahasan:
1. Fungsi Matematika di C++.
2. Tipe Data dan Operasi Menggunakan char.
3. Tipe Data dan Operasi Menggunakan string.
4. Format cout Menggunakan Stream Manipulator.
5. Input dan Output File.
Referensi:
1. Capper, D. M. C++ for Scientists, Engineers and Mathematicians. London: Springer-
Verlag, 1994.
2. Delores M. Etter and Jeanine A. Ingber. Engineering Problem Solving With C++ (4th
Edition). Boston:Pearson, 2016.

4.2 Pendahuluan
Misalkan Anda perlu memperkirakan area yang dilingkupi oleh empat kota, mengingat
lokasi GPS (lintang dan bujur) dari kota-kota ini, seperti yang ditunjukkan pada diagram
berikut. Bagaimana Anda menulis program untuk menghitung luas wilayah yang diarsir
(lihat Gambar 4.1).

49
MODUL IV. FUNGSI MATEMATIKA, KARAKTER, DAN STRING 50

Gambar 4.1: Wilayah terpilih di Kecamatan Cepu.

4.3 Fungsi Matematika


Fungsi adalah kelompok pernyataan yang melakukan tugas tertentu. Bagian ini mem-
perkenalkan fungsi yang berguna melakukan perhitungan matematika secara umum. Mereka
dapat dikategorikan sebagai fungsi trigonometri, fungsi eksponen, dan fungsi layanan.
Fungsi layanan sendiri mencakup fungsi pembulatan, minimum, maksimum, dan absolut.

4.3.1 Fungsi Trigonometri


C++ menyediakan fungsi matematika untuk sin, cos, tan, asin, acos, dan atan pada
header <cmath> (lihat Tabel 4.1).
Parameter untuk sin, cos, dan tan adalah sudut dalam radian. Demikian juga, pa-
rameter untuk asin, acos, dan atan adalah sudut dalam radian antara -π/2 dan π/2. 1◦
sama dengan π/180 dalam radian, 90◦ sama dengan π/2 dalam radian, dan 30◦ sama den-
gan π/6 dalam radian. Asumsikan PI (π) adalah konstan dengan nilai 3.14159. Berikut ini
adalah contoh-contoh penggunaan fungsi-fungsi trigonometri.

sin (0); // returns 0.0


MODUL IV. FUNGSI MATEMATIKA, KARAKTER, DAN STRING 51

Tabel 4.1: Fungsi Trigonometri pada header cmath.

Fungsi Deskripsi
sin(radian) Mengembalikan sin dari sudut dalam radian
cos(radian) Mengembalikan cos dari sudut dalam radian
tan(radian) Mengembalikan tan dari sudut dalam radian
asin(a) Mengembalikan sudut dalam radian untuk kebalikan dari sin
acos(a) Mengembalikan sudut dalam radian untuk kebalikan dari cos
atan(a) Mengembalikan sudut dalam radian untuk kebalikan dari tan

sin (270 * PI / 180); // returns -1.0


sin(PI / 6); // returns 0.5
sin(PI / 2); // returns 1.0
cos (0); // returns 1.0
cos(PI / 6); // returns 0.866
cos(PI / 2); // returns 0
asin (0.5); // returns 0. 523599 (same as PI /6)
acos (0.5); // returns 1.0472 (same as PI /3)
atan (1.0); // returns 0. 785398 (same as PI /4)

4.3.2 Fungsi Eksponen


Fungsi eksponen pada header <cmath> dapat dilihat pada Tabel 4.2.

Tabel 4.2: Fungsi Eksponen pada header cmath.

Fungsi Deskripsi
exp(x) Mengembalikan nilai e pangkat x (e x )
log(x) Mengembalikan logaritma natural dari x (ln(x) = loge (x))
log10(x) Mengembalikan logaritma basis 10 dari x (log10 (x))
pow(x, y) Mengembalikan nilai x pangkat y (xy ) √
sqrt(x) Mengembalikan nilai akar pangkat 2 dari x ( x) untuk x > 0

Berikut ini adalah contoh penggunaan fungsi eksponen (asumsi E adalah konstan den-
gan nilai 2.71828).

exp (1.0); // Menghasilkan nilai 2. 71828


log(E); // Menghasilkan nilai 1.0
log10 (10.0); // Menghasilkan nilai 1.0
pow (2.0, 3); // Menghasilkan nilai 8.0
MODUL IV. FUNGSI MATEMATIKA, KARAKTER, DAN STRING 52

sqrt (4.0); // Menghasilkan nilai 2.0


sqrt (10.5); // Menghasilkan nilai 3.24

4.3.3 Fungsi Pembulatan


Fungsi pembulatan pada header <cmath> dapat dilihat pada Tabel 4.3.

Tabel 4.3: Fungsi Pembulatan pada header cmath.

Fungsi Deskripsi
ceil(x) x dibulatkan ke atas ke bilangan bulat terdekat. Bilangan bulat
tersebut dikembalikan dengan tipe data double.
floor(x) x dibulatkan ke bawah ke bilangan bulat terdekat. Bilangan bulat
tersebut dikembalikan dengan tipe data double.

Berikut ini adalah contoh penggunaan fungsi pembulatan.

ceil (2.1); // Menghasilkan nilai 3.0


ceil (2.0); // Menghasilkan nilai 2.0
ceil(-2.0); // Menghasilkan nilai -2.0
ceil(-2.1); // Menghasilkan nilai -2.0
floor (2.1); // Menghasilkan nilai 2.0
floor (2.0); // Menghasilkan nilai 2.0
floor (-2.0); // Menghasilkan nilai -2.0
floor (-2.1); // Menghasilkan nilai -3.0

4.3.4 Fungsi min, max, dan abs


Fungsi min dan max pada header <cstdlib> mengembalikan angka minimum dan mak-
simum dari dua pilihan angka (int, long, float, atau double). Fungsi abs pada header
<cstdlib> mengembalikan nilai absolut dari sebuah angka (int, long, float, atau
double).
Berikut ini adalah contoh penggunaan fungsi min, max, dan abs.

max (2, 3); // Menghasilkan nilai 3


max (2.5, 3.0); // Menghasilkan nilai 3.0
min (2.5, 4.6); // Menghasilkan nilai 2.5
abs(-2); // Menghasilkan nilai 2
abs(-2.1); // Menghasilkan nilai 2.1
MODUL IV. FUNGSI MATEMATIKA, KARAKTER, DAN STRING 53

4.4 Tipe Data dan Operasi Menggunakan char


Selain memformat nilai numerik, Anda dapat memformat karakter dalam C++. Tipe
data karakter adalah char dan digunakan untuk mewakili satu karakter. Huruf karakter
dilampirkan dalam tanda kutip tunggal. Perhatikan kode program berikut ini.

char letter = ’A’;


char numChar = ’4’;

Pernyataan pertama memberikan karakter A ke variabel letter dengan tipe data


char. Pernyataan kedua memberikan karakter 4 ke variabel numChar dengan tipe data
char.

4.4.1 Kode ASCII


Komputer menggunakan nomor biner (binary) dimana karakter disimpan dengan kombi-
nasi angka 0 dan 1. Memetakan karakter ke representasi binernya disebut encoding. Ada
berbagai cara untuk melakukan encoding karakter. Cara bagaimana karakter dikodekan
disebut dengan skema encoding (encoding scheme)
Sebagian besar komputer menggunakan ASCII (American Standard Code for Infor-
mation Interchange), skema encoding 8-bit untuk mewakili semua huruf besar dan kecil,
angka, tanda baca, dan karakter lainnya. Tabel 4.4 menunjukkan kode ASCII untuk be-
berapa karakter yang umum digunakan. Ukuran 1 data tipe char adalah 1 byte.

Tabel 4.4: Kode ASCII untuk beberapa karakter.

Karakter Kode ASCII


’0’ to ’9’ 48 to 57
’A’ to ’Z’ 65 to 90
’a’ to ’z’ 97 to 122

Operator kenaikan dan penurunan juga dapat digunakan pada variabel char untuk
mendapatkan karakter kode ASCII berikutnya atau sebelumnya. Sebagai contoh, perny-
ataan berikut menampilkan karakter b.

char ch = ’a’;
cout << ++ ch;
MODUL IV. FUNGSI MATEMATIKA, KARAKTER, DAN STRING 54

4.4.2 Escape Sequences untuk Karakter Khusus


Misalkan Anda ingin mencetak sebuah pesan dengan tanda kutip di tampilan monitor.
C++ akan menampilkan kesalahan syntax bila program berikut ini dieksekusi.

cout << "He said " Programming is fun"" << endl;

Pernyataan di atas akan memiliki kesalahan kompilasi. Compiler berpikir karakter


kutipan kedua adalah akhir dari string dan tidak tahu apa yang harus dilakukan dengan
karakter lainnya. Untuk mengatasi masalah ini, C++ menggunakan notasi khusus untuk
mewakili karakter khusus, seperti yang ditunjukkan pada Tabel 4.5. Notasi khusus ini,
disebut escape sequence, terdiri dari garis miring terbalik (\) diikuti oleh karakter atau
kombinasi angka. Sebuah escape sequence dihitung sebagai satu karakter tunggal.

Tabel 4.5: Escape Sequences.

Notasi Escape Sequence Nama Kode ASCII


\a Alert Bell 7
\b Backspace 8
\t Tab 9
\n Linefeed 10
\f Formfeed 12
\r Carriage Return 13
\\ Backslash 92
\" Double Quote 34

cout << " Refinery \ aUnit " << endl;


cout << " Refinery \ bUnit " << endl;
cout << " Refinery \ tUnit " << endl;
cout << " Refinery \ nUnit " << endl;
cout << " Refinery \ fUnit " << endl;
cout << " Refinery \ rUnit " << endl;

RefineryUnit
RefinerUnit
Refinery Unit
MODUL IV. FUNGSI MATEMATIKA, KARAKTER, DAN STRING 55

Refinery
Unit
Refinery

Unit
Unitnery

4.4.3 Perbandingan dan Uji Karakter


Dua karakter dapat dibandingkan dengan menggunakan operator relasional seperti mem-
bandingkan dua angka. Prinsipnya perbandingan ini dilakukan dengan membandingkan
kode ASCII dari dua karakter. Perhatikan contoh berikut ini.

’a’ < ’b’; // is true , ASCII code for ’a’ (97) is less than
// the ASCII code for ’b’ (98).

’a’ < ’A’; // is false the ASCII code for ’a’ (97) is greater than
// the ASCII code for ’A’ (65).

’1’ < ’8’; // is true ASCII code for ’1’ (49) is less than
// the ASCII code for ’8’ (56).

Dalam pemrograman, Anda seringkali perlu menguji apakah sebuah karakter adalah
angka, huruf, huruf besar, atau huruf kecil. Misalnya, kode program berikut menguji
apakah karakter ch adalah huruf besar, huruf kecil, atau angka.

if (ch >= ’A’ ch <= ’Z’)


cout << ch << " is an uppercase letter " << endl;
else if (ch >= ’a’ ch <= ’z’)
cout << ch << " is a lowercase letter " << endl;
else if (ch >= ’0’ ch <= ’9’)
cout << ch << " is a numeric character " << endl;
MODUL IV. FUNGSI MATEMATIKA, KARAKTER, DAN STRING 56

4.4.4 Fungsi Karakter


C++ menyediakan beberapa fungsi untuk menguji karakter dan untuk mengkonversi karak-
ter dalam file header <cctype>, seperti yang ditunjukkan pada Tabel 4.6. Fungsi pengu-
jian menguji satu karakter dan mengembalikan true (1) atau false (0).

Tabel 4.6: Fungsi Karakter.

Fungsi Deskripsi
isdigit(ch) Mengembalikan nilai true bila karakter adalah angka.
isalpha(ch) Mengembalikan nilai true bila karakter adalah huruf.
isalnum(ch) Mengembalikan nilai true bila karakter adalah angka atau huruf.
islower(ch) Mengembalikan nilai true bila karakter adalah huruf kecil.
isupper(ch) Mengembalikan nilai true bila karakter adalah huruf besar.
isspace(ch) Mengembalikan nilai true bila karakter adalah spasi.
tolower(ch) Mengembalikan kode ASCII dari huruf kecil dari sebuah karakter.
toupper(ch) Mengembalikan kode ASCII dari huruf besar dari sebuah karak-
ter.

Perhatikan contoh kode program berikut ini.

Listing 4.1: CharacterFunctions.cpp

1 # include <iostream >


2 # include <cctype >
3 using namespace std;
4
5 int main ()
6 {
7 cout << "Enter a character : ";
8 char ch;
9 cin >> ch;
10
11 cout << "You entered " << ch << endl;
12
13 if ( islower (ch ))
14 {
15 cout << "It is a lowercase letter " << endl;
16 cout << "Its equivalent uppercase letter is " <<
MODUL IV. FUNGSI MATEMATIKA, KARAKTER, DAN STRING 57

17 static_cast <char >( toupper (ch )) << endl;


18 }
19 else if ( isupper (ch ))
20 {
21 cout << "It is an uppercase letter " << endl;
22 cout << "Its equivalent lowercase letter is " <<
23 static_cast <char >( tolower (ch )) << endl;
24 }
25 else if ( isdigit (ch ))
26 {
27 cout << "It is a digit character " << endl;
28 }
29
30 return 0;
31 }

Enter a character : T
You entered T
It is an uppercase letter
Its equivalent lowercase letter is t

4.5 Tipe Data dan Operasi Menggunakan string


Untuk mewakili kumpulan dari beberapa karakter, Anda dapat menggunakan tipe data
string. Misalnya, kode berikut menyatakan pesan dengan nilai Programming is fun
sebagai string.

string message = " Programming is fun";

Di sini pesan tersebut mewakili objek string dengan konten Programming is fun.
string adalah objek yang telah didefinisikan pada file header <string>. Cara menggu-
nakan objek string ditunjukkan pada Tabel 4.7.
Anda bisa menggunakan fungsi size() di kelas string untuk mengembalikan uku-
ran objek string dan menggunakan fungsi at(index) untuk mengembalikan karakter
pada indeks yang ditentukan, seperti yang ditunjukkan dalam kode berikut ini.
MODUL IV. FUNGSI MATEMATIKA, KARAKTER, DAN STRING 58

Tabel 4.7: Fungsi Objek string.

Fungsi Deskripsi
length() Mengembalikan jumlah karakter yang ada di objek string.
size() Mengembalikan ukuran byte dari objek string.
at(index) Mengembalikan karakter pada indeks yang ditentukan dari string.

string message = "ABCD";


cout << message . length () << endl;
cout << message .at (0) << endl;
string s = " Bottom ";
cout << s. length () << endl;
cout << s.at (1) << endl;

4
A
6
o

Memanggil message.length() mengembalikan 4 dan memanggil message.at(0)


mengembalikan karakter A. Memanggil s.length() mengembalikan 6 dan memanggil
s.at(1) mengembalikan karakter o.

4.5.1 Indeks string dan Operator Subscript


Fungsi s.at(index) dapat digunakan untuk mengambil karakter tertentu dalam string
s, di mana indeks berada di antara 0 dan s.length()-1. Misalnya, message.at(0)
mengembalikan karakter W, seperti yang ditunjukkan pada Gambar . Perhatikan bahwa
nomor indeks untuk karakter pertama dalam string adalah 0.

Gambar 4.2: Karakter pada objek string dapak diambil dengan at(index).
MODUL IV. FUNGSI MATEMATIKA, KARAKTER, DAN STRING 59

C++ juga menyediakan operator subscript untuk mengakses dan memodifikasi karak-
ter pada indeks yang ditentukan dalam string menggunakan syntax stringName[index].
Sebagai contoh, kode berikut menetapkan karakter P baru pada indeks 0 menggunakan
s[0] = ’P’ dan menampilkannya.

string s = "ABCD";
s[0] = ’P’;
cout << s[0] << endl;

4.5.2 Menggabungkan string


C++ menyediakan operator + untuk menggabungkan dua string. Pernyataan yang di-
tunjukkan di bawah ini, misalnya, menggabungkan string s1 dan s2 menjadi s3:

string s3 = s1 + s2;

Operator penugasan bertambah += juga dapat digunakan untuk penggabungan string.


Misalnya, kode berikut menambahkan string " and programming is fun" dengan
string "Welcome to C++" di pesan.

message += " and programming is fun";

Welcome to C++ and programming is fun

Anda juga dapat menggabungkan karakter dengan string. Perhatikan contoh berikut
ini.

string s = "ABC";
s += ’D’;

ABCD

4.5.3 Membandingkan string


Anda dapat menggunakan operator relasional ==,!=, <, <=, >, >= Untuk membandingkan
dua string. Ini dilakukan dengan membandingkan karakter yang sesuai satu per satu
dari kiri ke kanan. Perhatikan contoh berikut ini.
MODUL IV. FUNGSI MATEMATIKA, KARAKTER, DAN STRING 60

string s1 = "ABC";
string s2 = "ABE";
cout << (s1 == s2) << endl; // Displays 0 ( means false )
cout << (s1 != s2) << endl; // Displays 1 ( means true)
cout << (s1 > s2) << endl; // Displays 0 (means false )
cout << (s1 >= s2) << endl; // Displays 0 ( means false )
cout << (s1 < s2) << endl; // Displays 1 (means true)
cout << (s1 <= s2) << endl; // Displays 1 ( means true)

Berikut ini adalah analisis evaluasi s1 > s2. Dua karakter pertama (A versus A) dari
s1 dan s2 dibandingkan. Karena A dan A sama, dua karakter berikutnya (B versus B)
dibandingkan. Karena B dan B juga sama, dua karakter terakhir (C versus E) dibandingkan.
Karena karakter C kurang dari E berdasarkan kode ASCII, perbandingan mengembalikan
0.

4.5.4 Membaca string


Sebuah string dapat dibaca dari keyboard menggunakan objek cin. Misalnya, lihat kode
berikut:

1 string city;
2 cout << " Enter a city: ";
3 cin >> city; // Read to string city
4 cout << "You entered " << city << endl;

Membaca string pada baris ke-3 terlihat sederhana, tetapi akan bermasalah ketika in-
put diakhiri dengan karakter spasi. Jika Anda ingin input New York, Anda harus menggu-
nakan pendekatan alternatif. C++ menyediakan fungsi getline dalam header <string>,
yang membaca string dari keyboard menggunakan syntax berikut ini.

getline (cin , s, delimitCharacter )

Fungsi berhenti membaca karakter ketika karakter pembatas (delimiter character)


ditemui. Pembatas karakter dibaca tetapi tidak disimpan ke dalam string. Argumen de-
limitCharacter memiliki nilai default (’ n’). Kode berikut menggunakan fungsi getline
untuk membaca string.

1 string city;
MODUL IV. FUNGSI MATEMATIKA, KARAKTER, DAN STRING 61

2 cout << " Enter a city: ";


3 getline (cin , city , ’\n’);
4 cout << "You entered " << city << endl;

Karena nilai default untuk argumen ketiga dalam fungsi getline adalah ’ n’, baris
ke-3 dapat diganti dengan

getline (cin , city); // Read a string

Berikut ini adalah contoh program yang meminta pengguna menginput 2 nama pe-
rusahaan dan menampilkan mereka menurut urut abjad.

Listing 4.2: OrderTwoCompanies.cpp

1 # include <iostream >


2 # include <string >
3 using namespace std;
4
5 int main ()
6 {
7 string company1 , company2 ;
8
9 cout << "Enter the first company : ";
10 getline (cin , company1 );
11 cout << "Enter the second company : ";
12 getline (cin , company2 );
13
14 cout << "The cities in alphabetical order are ";
15
16 if ( company1 < company2 )
17 cout << company1 << " " << company2 << endl;
18 else
19 cout << company2 << " " << company1 << endl;
20
21 return 0;
22 }
MODUL IV. FUNGSI MATEMATIKA, KARAKTER, DAN STRING 62

Enter the first company : Perusahaan Gas Negara


Enter the second company : Pertamina
The companies in alphabetical order are
Pertamina Perusahaan Gas Negara

4.6 Memformat cout


Menampilkan konsol output konsol menggunakan objek cout adalah hal yang biasa bagi
Anda yang sudah belajar sampai bab ini. Namun, seringkali Anda ingin menampilkan
angka dengan format tertentu. C++ menyediakan fungsi tambahan untuk memformat
bagaimana suatu nilai ditampilkan. Fungsi-fungsi ini disebut stream manipulator dan
termasuk dalam file header <iomanip>. Misalnya, angka desimal dengan hanya dua digit
setelah titik desimal yang ditampilkan. Untuk melakukannya, Anda dapat menggunakan
fungsi setprecission() dan fixed yang didefiniskan pada header <iomanip>, seperti
dalam contoh kode program berikut ini.

double amount = 12618 .98;


double interestRate = 0.0013;
double interest = amount * interestRate ;
cout << " Interest is " << fixed << setprecision (2)
<< interest << endl;

Interest is 16.40

Tabel 4.8 merangkum beberapa stream manipulator yang sering digunakan.

4.6.1 Manipulator setprecision(n)


Anda dapat menentukan jumlah total digit yang ditampilkan untuk sebuah bilangan desi-
mal menggunakan manipulator setprecision(n), di mana n adalah jumlah angka pent-
ing (jumlah total digit yang muncul sebelum dan setelah titik desimal). Jika angka yang
ditampilkan memiliki angka penting lebih banyak daripada presisi yang ditentukan, angka
itu akan dibulatkan.

double number = 12. 34567 ;


MODUL IV. FUNGSI MATEMATIKA, KARAKTER, DAN STRING 63

Tabel 4.8: Beberapa stream manipulator yang sering digunakan.

Fungsi Deskripsi
setprecission() Mengatur jumlah angka penting pada sebuah bilangan desimal.
fixed Mengatur jumlah digit setelah titik desimal pada sebuah bilangan
desimal.
showpoint Mengatur jumlah digit tetap yang ditampilkan pada sebuah bilangan
desimal.
setw(width) Mengatur jumlah kolom minimum untuk diisu sejumlah karakter
pada output.
left Mengatur tampilan menjadi rata kiri.
right Mengatur tampilan menjadi rata kanan.

cout << setprecision (3) << number << " "


<< setprecision (4) << number << " "
<< setprecision (5) << number << " "
<< setprecision (6) << number << endl;

12.3 12.35 12.346 12.3457

Manipulasi setprecision tetap berlaku sampai presisi diubah. Presisi diatur ke 3 untuk
nilai pertama, dan tetap efektif untuk dua nilai berikutnya, karena belum diubah.

double number = 12. 34567 ;


cout << setprecision (3) << number << " ";
cout << 9. 34567 << " " << 121.3457 << " " << 0.2367 << endl;

12.3 9.35 121 0.237

Jika argumen n yang ditentukan lebih kurang dari untuk sebuah bilangan, manipulator
setprecision menampilkan hanya sejumlahn angka penting saja.

cout << setprecision (3) << 23456 << endl;

2.35e+004

4.6.2 Manipulator fixed


Perhatikan contoh paling akhir di atas, komputer secara otomatis menampilkan angka
desimal dalam notasi ilmiah. Perhatikan juga contoh berikut ini.

cout << 232123434 .357;


MODUL IV. FUNGSI MATEMATIKA, KARAKTER, DAN STRING 64

2.32123 e+08

Anda dapat menggunakan manipulator fixed untuk memaksa angka ditampilkan den-
gan jumlah digit tetap setelah titik desimal. Secara default, jumlah digit tetap setelah titik
desimal adalah 6.

cout << fixed << 232123434 .357;

232123434.357000

Anda dapat menentukan jumlah digit setelah titik desimal menggunakan manipulator
fixed dan setprecision.

double monthlyPayment = 345.4567;


double totalPayment = 78676 . 887234 ;
cout << fixed << setprecision (2)
<< monthlyPayment << endl
<< totalPayment << endl;

345.46
78676.89

4.6.3 Manipulator showpoint


Secara format, yang bukan merupakan angka penting tidak ditampilkan pada contoh-
contoh manipulator di atas. Bila sebuah bilangan desimal ingin ditampilkan dengan jum-
lah digit yang tetap (angka penting dan bukan angka penting), Anda dapat menggunakan
manipulator showpoint dan setprecision.

cout << setprecision (6);


cout << 1.23 << endl;
cout << showpoint << 1.23 << endl;
cout << showpoint << 123.0 << endl;

1.23
1.23000
123.000
MODUL IV. FUNGSI MATEMATIKA, KARAKTER, DAN STRING 65

4.6.4 Manipulator setw(width)


Secara default, cout hanya menggunakan jumlah posisi yang dibutuhkan untuk sebuah
output. Anda dapat menggunakan setw(width) untuk menentukan jumlah kolom mini-
mum untuk output. Jumlah kolom yang diisi sejumlah karakter yang ada mulai dari kolom
yang paling kanan (tampilan output di Gambar 4.3).

cout << setw (8) << "C++" << setw (6) << 101 << endl;
cout << setw (8) << "Java" << setw (6) << 101 << endl;
cout << setw (8) << "HTML" << setw (6) << 101 << endl;

Gambar 4.3: Tampilan output menggunakan fungsi setw(width).

Perhatikan bahwa manipulator setw hanya memengaruhi output berikutnya. Manipu-


lasi setw(8) hanya memengaruhi output "C++", bukan 101.

cout << setw (8) << "C++" << 101 << endl;

C++101

Jika suatu item membutuhkan lebih banyak ruang dari lebar yang ditentukan, lebar
tersebut secara otomatis bertambah.

cout << setw (8) << " Programming " << "#" << setw (2) << 101;

Programming #101

Lebar kolom yang ditentukan untuk "Programming" adalah 8, yang lebih kecil dari
ukuran sebenarnya 11. Lebar kolom secara otomatis bertambah menjadi 11. Lebar yang
ditentukan untuk 101 adalah 2, yang lebih kecil dari ukuran sebenarnya 3. Lebar kolom
secara otomatis bertambah menjadi 3.
Sebagai catatan bahwa argumen n untuk setw(n) dan setprecision(n) dapat berupa
variabel, ekspresi, atau konstanta bilangan bulat.
MODUL IV. FUNGSI MATEMATIKA, KARAKTER, DAN STRING 66

4.6.5 Manipulator left dan right


Manipulator setw(width) secara default mengisi kolom yang paling kanan terlebih dahulu.
Anda dapat menggunakan manipulator left untuk output kolom rata kiri (left-justify) (li-
hat Gambar 4.4) dan menggunakan manipulator right untuk output kolom rata kanan
(right-justify) (lihat Gambar 4.5).

cout << left;


cout << setw (8) << 1.23;
cout << setw (8) << 351.34 << endl;

Gambar 4.4: Tampilan output menggunakan fungsi left.

cout << right ;


cout << setw (8) << 1.23 << endl;
cout << setw (8) << 351.34 << endl;

Gambar 4.5: Tampilan output menggunakan fungsi right.

4.7 Input dan Output Dokumen Sederhana


4.7.1 Menulis pada Sebuah Dokumen
Untuk menulis data ke sebuah file, langkah pertama deklarasikan variabel tipe ofstream.
Karena ofstream didefinisikan dalam file header <fstream>, jangan lupa untuk meny-
ertakan file header tersebut.

ofstream output ;

Untuk menentukan file output yang akan dibuat, gunakan fungsi open dari objek
output sebagai berikut:

output .open (" numbers .txt");


MODUL IV. FUNGSI MATEMATIKA, KARAKTER, DAN STRING 67

Pernyataan ini membuat file bernama numbers.txt. Jika file dengan nama dan jenis
yang sama sudah ada, file tersebut dihapuskan dan file baru akan dibuat.
Anda dapat membuat file dan membuka file output dalam satu pernyataan seperti
berikut ini.

ofstream output (" numbers .txt");

Untuk menulis data di dalam file output, gunakan operator penyisipan aliran (stream
insertion), «, dengan cara yang sama seperti Anda mengirim data ke objek cout. Perny-
ataan ini menulis angka 95, 56, dan 34 ke file output. Masing-masing angka dipisahkan
spasi.

output << 95 << " " << 56 << " " << 34 << endl;

Setelah Anda selesai dengan file output, gunakan fungsi close dari output sebagai
berikut:

output . close ();

Menggunakan fungsi close penting untuk memastikan data ditulis ke file sebelum
program keluar.
Listing 4.3 memberikan program lengkap untuk menulis data ke file output dan Gam-
bar 4.6 memberikan tampilan hasilnya.

Listing 4.3: SimpleFileOutput.cpp

1 # include <iostream >


2 # include <fstream >
3 using namespace std;
4
5 int main ()
6 {
7 ofstream output ;
8
9 // Create a file
10 output .open(" numbers .txt");
11
MODUL IV. FUNGSI MATEMATIKA, KARAKTER, DAN STRING 68

12 // Write numbers
13 output << 95 << " " << 56 << " " << 34;
14
15 // close file
16 output . close ();
17
18 cout << "Done" << endl;
19
20 return 0;
21 }

Gambar 4.6: Tampilan output file numbers.txt.

4.7.2 Membaca pada Sebuah Dokumen


Untuk membaca data dari sebuah file, pertama deklarasikan variabel dari tipe ifstream.
Karena ifstream didefinisikan dalam file header <fstream>, jangan lupa untuk meny-
ertakan file header tersebut.

input ifstream ;

Untuk menentukan file output yang akan dibuka, aktifkan fungsi open dari objek
input sebagai berikut:

input .open (" numbers .txt");

Pernyataan ini membuka file bernama numbers.txt untuk input. Jika file yang Anda
coba buka tidak tidak ada, kesalahan runtime (logic runtime) dapat muncul.
MODUL IV. FUNGSI MATEMATIKA, KARAKTER, DAN STRING 69

Secara opsional, Anda dapat membuat objek input file dan membuka file dalam satu
pernyataan seperti ini:

input ifstream (" numbers .txt");

Untuk membaca data, gunakan operator ekstraksi aliran (stream extraction), », dengan
cara yang sama membaca data dari objek cin.

input >> score1 ;


input >> score2 ;
input >> score3 ;

Setelah selesai dengan file, gunakan fungsi close dari input sebagai berikut ini.

input . close ();

Listing 4.4 memberikan program lengkap untuk membaca data dari sebuah file:

Listing 4.4: SimpleFileInput.cpp

1 # include <iostream >


2 # include <fstream >
3 using namespace std;
4
5 int main ()
6 {
7 ifstream input ;
8
9 // Open a file
10 input .open(" numbers .txt");
11
12 int score1 , score2 , score3 ;
13
14 // Read data
15 input >> score1 ;
16 input >> score2 ;
17 input >> score3 ;
18
19 cout << "Total score is " << score1 + score2 + score3 << endl;
MODUL IV. FUNGSI MATEMATIKA, KARAKTER, DAN STRING 70

20
21 // Close file
22 input .close ();
23
24 cout << "Done" << endl;
25
26 return 0;
27 }

Total score is 185


Done

4.8 Tugas Modul


1. Tulis sebuah program yang meminta pengguna untuk memasukkan koordinat x dan
y dari tiga titik koordinat dari sudut sebuah segitiga (lihat Gambar 4.7), kemudian
tampilkan besar sudut segitiga dengan menggunakan persamaan berikut ini.

b2 + c2 − a2
cos(A) = (4.1)
2bc

c2 + a2 − b2
cos(B) = (4.2)
2ca

a2 + b2 − c2
cos(C) = (4.3)
2ab

Gambar 4.7: Segitiga dengan A, B, C adalah sudut-sudut yang terletak di titik-titik koor-
dinat tertentu.

Untuk menghitung panjang sisi-sisi segitiga, gunakan rumus berikut ini.


MODUL IV. FUNGSI MATEMATIKA, KARAKTER, DAN STRING 71


a= (x3 − x2 )2 + (y3 − y2 )2 (4.4)


b= (x3 − x1 )2 + (y3 − y1 )2 (4.5)


c= (x2 − x1 )2 + (y2 − y1 )2 (4.6)

Urutkan sudut-sudut tersebut berdasarkan nilai yang paling besar ke nilai yang paling
kecil.

Masukkan titik -titik koordinat sudut: 1 1 6.5 1 6.5 2.5


Besar sudut A, B, C: 15.2551 90.0001 74.7449
Urutan besar sudut : B, C, A

2. Tulis program yang menerima kode ASCII (bilangan bulat antara 0 dan 127) dan
tampilkan karakternya. Gunakan char(1) untuk menampilkan karakter dari kode
ASCII 1. Berikut ini contoh tampilan proses.

Enter an ASCII code: 69


The character is E

3. Tulis program yang menerima sebuah karakter dan tampilkan kode ASCII-nya. Gu-
nakan int(x) untuk menampilkan kode ASCII dari karakter x. Berikut ini contoh
tampilan proses.

Enter a character : E
The ASCII code for the character is 69

4. Huruf A/a, E/e, I/i, O/o, dan U/u adalah huruf-huruf vokal (vowel). Sisanya adalah
huruf-huruf konsonan. Tulis sebuah program yang meminta pengguna untuk mema-
sukkan huruf dan memeriksa apakah huruf itu adalah huruf vokal atau konsonan.
Berikut ini contoh tampilan proses.

Enter a letter : B
MODUL IV. FUNGSI MATEMATIKA, KARAKTER, DAN STRING 72

B is a consonant

Enter a letter grade: a


a is a vowel

Enter a letter grade: 7


7 is an invalid input

5. Tampilkan output proses dari kode berikut ini.

1 # include <iostream >


2 using namespace std;
3
4 int main ()
5 {
6 char x = ’a’;
7 char y = ’c’;
8
9 cout << ++x << endl;
10 cout << y++ << endl;
11 cout << (x - y) << endl;
12
13 return 0;
14 }

6. Tampilkan output proses dari kode berikut ini.

string s1 = "West Badik ";


string s2 = "West Pangkah ";
cout << s1 [4] << endl;
cout << s2 [8] << endl;
cout << (s1 == s2) << endl;
cout << (s1 != s2) << endl;
cout << (s1 > s2 ? "true": " false ") << endl;
cout << (s1 >= s2 ? "true": " false ") << endl;
cout << (s1 < s2 ? "true": " false ") << endl;
cout << (s1 <= s2 ? "true": " false ") << endl;
MODUL IV. FUNGSI MATEMATIKA, KARAKTER, DAN STRING 73

7. Lakukan pembacaan sekumpulan data dari sebuah file (terlampir).


(a) Buat sebuah program yang menampilkan hasil perkalian dari 2 data pertama saja.
(b) Buat sebuah program yang menampilkan hasil penjumlahan dari 2 data terakhir
saja.
MODUL V
LOOP

5.1 Tujuan Pembelajaran dan Pokok Bahasan


Tujuan pembelajaran:
1. Untuk menulis loop menggunakan pernyataan while.
2. Untuk menulis loop menggunakan pernyataan do-while.
3. Untuk menulis loop menggunakan pernyataan for.
4. Untuk menemukan persamaan dan perbedaan dari tiga jenis loop pernyataan while,
do-while, dan for.
5. Untuk menulis loop bersarang (nested loop).
Pokok bahasan:
1. Pernyataan while.
2. Pernyataan do-while.
3. Pernyataan for.
4. Persamaan dan perbedaan tiga jenis loop pernyataan while, do-while, dan for.
5. Loop bersarang (nested loop).
Referensi:
1. Capper, D. M. C++ for Scientists, Engineers and Mathematicians. London: Springer-
Verlag, 1994.
2. Delores M. Etter and Jeanine A. Ingber. Engineering Problem Solving With C++ (4th
Edition). Boston:Pearson, 2016.

5.2 Pendahuluan
C++ memberikan sebuah konstruksi pemrograman yang memungkinkan Anda yang men-
gontrol berapa kali operasi atau urutan operasi dilakukan secara berurutan. Konstruksi
tersebut disebut dengan loop. Dengan menggunakan pernyataan loop, Anda cukup mem-
beri tahu komputer untuk menampilkan string 100 kali tanpa harus menulis objek cout

74
MODUL V. LOOP 75

100 kali. Perhatikan potongan kode program sebagai berikut:

int count = 0;

while ( count < 100)


{
cout << " Welcome to C++!\n";
count ++;
}

Jumlah variabel awal dari count adalah 0. loop memeriksa apakah count < 100
bernilai true. Jika demikian, program menjalankan loop body yang menampilkan pesan
Welcome to C++! dan setiap iterasi dihitung dengan kenaikan nilai count sebanyak 1
(count++. Loop ini akan berulang mengeksekusi loop body sampai nilai count < 100
menjadi false (misalnya ketika count mencapai 100). Pada titik ini, loop berakhir dan
program akan keluar dari loop body.
C++ menyediakan tiga jenis pernyataan loop sebagai berikut.
1. Pernyataan while,
2. Pernyataan do-while, dan
3. Pernyataan for.

5.3 Pernyataan while


Berikut ini adalah syntax dari pernyataan while.

while (loop -continuation -condition )


{
// Loop body
Statement (s);
}

Gambar 5.1 menunjukkan diagram alir pernyataan while. Bagian dari loop yang
berisi pernyataan yang akan diulang disebut loop body. Eksekusi loop body sebanyak 1
kali disebut iterasi (atau pengulangan) dari loop. Setiap loop berisi loop-continuation-
condition, ekspresi Boolean yang mengontrol loop body. Setiap iterasi, kondisi dari ek-
MODUL V. LOOP 76

spresi Boolean tersebut dievaluasi untuk menentukan apakah loop body dieksekusi. Jika
nilai hasil evaluasi bernilai true, loop body dieksekusi; namun jika sebaliknya, nilai hasil
evaluasi bernilai false, loop berakhir dan kontrol program akan keluar dari loop body.

Gambar 5.1: Diagram alir pernyataan while.

Sebelumnya pada loop untuk menampilkan Welcome to C++! sebanyak 100 kali
(lihat Subbab 5.2), loop body adalah bagian yang dibatasi dengan kurung kurawal dan
loop-continuation-condition adalah count < 100.
Berikut ini adalah contoh kode program lain untuk memahami penyataan while.

int sum = 0, i = 1;

while (i < 10)


{
sum = sum + i;
i++;
}

Jika i < 10 bernilai true, program menambahkan i ke sum. Variabel i mula-mula diatur
ke 1, kemudian bertambah menjadi 2, 3, dan hingga 10. Ketika i sama dengan 10, i <
10 bernilai false, loop akan berakhir dan program keluar dari loop body. Oleh karena
itu, nilai akhir sum adalah 1 + 2 + 3 + ... + 9 = 45.
Apa yang terjadi jika loop ditulis seperti berikut ini?
MODUL V. LOOP 77

int sum = 0, i = 1;

while (i < 10)


{
sum = sum + i;
}

Listing 5.1 memuat cntohprogram yang meminta pengguna memasukkan jawaban un-
tuk pertanyaan tentang pengurangan. Menggunakan loop, Anda dapat menulis ulang pro-
gram untuk membiarkan pengguna memasukkan jawaban sampai benar.

Listing 5.1: RepeatSubtractionQuiz.cpp

1 # include <iostream >


2 # include <ctime > // for time function
3 # include <cstdlib > // for rand and srand functions
4 using namespace std;
5
6 int main ()
7 {
8 // 1. Generate two random single -digit integers
9 srand (time (0));
10 int number1 = rand () % 10;
11 int number2 = rand () % 10;
12
13 // 2. If number1 < number2 , swap number1 with number2
14 if ( number1 < number2 )
15 {
16 int temp = number1 ;
17 number1 = number2 ;
18 number2 = temp;
19 }
20
21 // 3. Prompt the student to answer "What is number1 - number2 "
22 cout << "What is " << number1 << " - " << number2 << "? ";
23 int answer ;
MODUL V. LOOP 78

24 cin >> answer ;


25
26 // 4. Repeatedly ask the user the question until it is correct
27 while ( number1 - number2 != answer )
28 {
29 cout << "Wrong answer . Try again . What is "
30 << number1 << " - " << number2 << "? ";
31 cin >> answer ;
32 }
33
34 cout << "You got it!" << endl;
35
36 return 0;
37 }

What is 4 - 3? 4
Wrong answer . Try again. What is 4 - 3? 5
Wrong answer . Try again. What is 4 - 3? 1
You got it!

5.4 Pernyataan do-while


Berikut ini adalah syntax dari pernyataan do-while.

do
{
// Loop body
Statement (s);
}
while (loop -continuation -condition )

Loop body dieksekusi terlebih dahulu. Kemudian loop-continuation-condition dievalu-


asi. Jika evaluasi itu bernilai true, loop body dijalankan lagi; jika sebaliknya, hasil
evaluasi bernilai false, loop do-while berakhir. Perbedaan utama antara loop while
dan do-while adalah urutan di mana kondisi loop-continuation dievaluasi dan loop body
MODUL V. LOOP 79

dieksekusi. Loop while dan do-while memiliki kekuatan ekspresif yang sama. Terkadang
yang satu lebih nyaman dari yang lain. Misalnya, Anda dapat menulis ulang loop while
di Listing 5.5 menggunakan loop do-while, seperti yang ditunjukkan pada Listing 5.2.

Gambar 5.2: Diagram alir pernyataan do-while.

Listing 5.2: TestDoWhile.cpp

1 # include <iostream >


2 using namespace std;
3
4 int main ()
5 {
6 // Keep reading data until the input is 0
7 int sum = 0;
8 int data = 0;
9
10 do
11 {
12 sum += data;
13
14 // Read the next data
15 cout << "Enter an integer (the input ends " <<
16 "if it is 0): ";
17 cin >> data;
MODUL V. LOOP 80

18 }
19 while (data != 0);
20
21 cout << "The sum is " << sum << endl;
22
23 return 0;
24 }

Enter an integer (the input ends if it is 0): 3


Enter an integer (the input ends if it is 0): 5
Enter an integer (the input ends if it is 0): 6
Enter an integer (the input ends if it is 0): 0
The sum is 14

5.5 Pernyataan for


Pernyataan for dapat digunakan untuk simplifikasi pernyataan while. Berikut ini adalah
syntax pernyataan for.

for (i = initialValue ; i < endValue ; i++)


{
// Loop body;
Statement (s);
}

Atau secara umum, syntax pernyataan for dapat ditulis sebagai berikut.

for ( initial -action ; loop -continuation -condition ; action -after -each -iteration )
{
// Loop body;
Statement (s);
}

Diagram alir pernyataan for dapat dilihat pada Gambar.


Pernyataan for dimulai dengan kata kunci for, diikuti oleh sepasang tanda kurung yang
mengandung tindakan awal (initial-action), kondisi kelanjutan loop (loop-continuation-
MODUL V. LOOP 81

condition), dan iterasi setelah eksekusi (action-after-each-iteration), diikuti oleh loop body
yang tertutup di dalam kurung kurawal.

Gambar 5.3: Diagram alir pernyataan for.

Pernyataan for umumnya menggunakan variabel untuk mengontrol berapa kali loop
body dieksekusi dan kapan loop berakhir. Ini disebut variabel kontrol. initial-action sering
menginisialisasi variabel kontrol, action-after-each-iteration biasanya meningkatkan atau
mengurangi variabel kontrol, dan loop-continuation-condition menguji apakah variabel
kontrol telah mencapai batas nilai terminasi. Misalnya, berikut ini untuk loop menampilkan
Selamat Datang di C ++! 100 kali:
Diagram alur pernyataan tersebut ditunjukkan pada Gambar 5.3b. Untuk loop mengin-
isialisasi i ke 0, kemudian berulang kali mengeksekusi pernyataan output dan mengeval-
uasi i ++ ketika saya kurang dari 100.
Aksi awal, i = 0, menginisialisasi variabel kontrol, i. Loop-continuation-condition,
i <100, adalah ekspresi Boolean. Ekspresi dievaluasi tepat setelah inisialisasi dan pada
awal setiap iterasi. Jika kondisi ini benar, tubuh loop dijalankan. Jika salah, loop berakhir
dan kontrol program beralih ke baris setelah loop.
Tindakan-setelah-setiap-iterasi, i ++, adalah pernyataan yang menyesuaikan variabel
kontrol. Pernyataan ini dieksekusi setelah setiap iterasi. Itu menambah variabel kontrol.
MODUL V. LOOP 82

Akhirnya, nilai variabel kontrol harus memaksa kondisi kelanjutan loop menjadi salah.
Jika tidak, loop tidak terbatas.
Variabel kontrol loop dapat dideklarasikan dan diinisialisasi dalam loop for.Jika hanya
ada satu pernyataan di badan loop, seperti dalam contoh ini, kawat gigi dapat dihilangkan.

for (int i = 0; i < 100; i++)


cout << " Welcome to C++!\n";

5.6 Loop Mana Yang Sebaiknya Digunakan


Loop while dan for disebut pretest loop karena kondisi kelanjutan diperiksa sebelum
loop body dieksekusi. Loop do-while disebut posttest loop karena kondisinya diperiksa
setelah loop body dieksekusi. Tiga bentuk pernyataan loop while, do-while, dan for
sifatnya setara; Anda dapat memilih menggunakan salah satu dari ketiga bentuk loop
tersebut.

initial -action ;
while (loop -continuation -condition )
{
// Loop body;
action -after -each -iteration ;
}

for ( initial -action ; loop -continuation -condition ; action -after -each -iteration )
{
// Loop body;
}

Secara umum, loop for dapat digunakan jika jumlah pengulangan diketahui sebelum-
nya, misalnya, ketika Anda perlu menampilkan pesan sebanyak 100 kali. Loop while
dapat digunakan jika jumlah pengulangan tidak diketahui secara pasti, misalnya dalam
kasus membaca angka sampai inputnya adalah 0. Loop do-while dapat digunakan untuk
mengganti loop while jika loop body harus dieksekusi sebelum kondisi kelanjutan diuji.
MODUL V. LOOP 83

5.7 Nested Loop


Loop bersarang (nested loop) terdiri dari satu loop luar dan satu atau lebih loop dalam.
Setiap kali loop luar dieksekusi pertama kali dan dieksekusi ulang, loop dalam selalu
dieksekusi dari awal. Listing 5.8 menyajikan program yang menggunakan nested for
loop untuk menampilkan tabel perkalian.

Listing 5.3: MultiplicationTable.cpp

1 # include <iostream >


2 # include <iomanip >
3 using namespace std;
4
5 int main ()
6 {
7 cout << " Multiplication Table \n";
8 cout << "--------------------------------\n";
9
10 // Display the number title
11 cout << " | ";
12 for (int j = 1; j <= 9; j++)
13 cout << setw (3) << j;
14
15 cout << "\n";
16
17 // Display table body
18 for (int i = 1; i <= 9; i++)
19 {
20 cout << i << " | ";
21 for (int j = 1; j <= 9; j++)
22 {
23 // Display the product and align properly
24 cout << setw (3) << i * j;
25 }
26 cout << "\n";
27 }
MODUL V. LOOP 84

28
29 return 0;
30 }

Multiplication Table
--------------------------------
| 1 2 3 4 5 6 7 8 9
1 | 1 2 3 4 5 6 7 8 9
2 | 2 4 6 8 10 12 14 16 18
3 | 3 6 9 12 15 18 21 24 27
4 | 4 8 12 16 20 24 28 32 36
5 | 5 10 15 20 25 30 35 40 45
6 | 6 12 18 24 30 36 42 48 54
7 | 7 14 21 28 35 42 49 56 63
8 | 8 16 24 32 40 48 56 64 72
9 | 9 18 27 36 45 54 63 72 81

5.8 Tugas Modul


1. Tulis sebuah program yang membaca bilangan bulat yang tidak ditentukan jumlah dan
nilainya. Tentukan:
(a) Berapa banyak bilangan positif dan negatif yang dibaca.
(b) Hitung total penjumlahan dan rata-rata nilai input (tidak termasuk nol)
(c) Program berakhir bila inputnya adalah 0.
Tampilkan nilai rata-rata dalam bilangan desimal dengan 2 digit di belakang titik des-
imal. Berikut ini contoh tampilan proses.

Enter an integer , the input ends if it is 0: 1 2 -1 3 0


The number of positives is 3
The number of negatives is 1
The total is 5
MODUL V. LOOP 85

The average is 1.25

Contoh tampilan proses lainnya:

Enter an integer , the input ends if it is 0: 0


No numbers are entered except 0

2. Tulis sebuah program yang menampilkan tabel berikut ini (1 meter = 3,280 feet).

Meters Feet | Feet Meters


1 3.280 | 3 0.915
2 6.560 | 6 1.829
...
14 45.920 | 42 12.805
15 49.200 | 45 13.720

3. Biaya sewa untuk sebuah mobile crane adalah USD 10000 per tahun dan meningkat
3% setiap tahun. Tulis sebuah program yang menghitung sewa crane tersebut untuk
setiap tahun dalam 5 tahun mendatang dan total akumulasi sewa tahun ke-1 sampai
dengan tahun ke-5.
4. Analisis kode program berikut ini. Apakah nilai count < 100 selalu true, selalu
false, atau kadang-kadang true atau kadang-kadang false di Titik A, Titik B, dan
Titik C?

int count = 0;
while (count < 100)
{
// Point A
cout << " Welcome to C++!\n";
count ++;
// Point B
}
// Point C

5. Apa perbedaan antara loop while dan loop do-while? Ubah loop while berikut
menjadi loop do-while.
MODUL V. LOOP 86

int sum = 0;
int number ;

cin >> number ;

while ( number != 0)
{
sum += number ;
cin >> number ;
}

6. Apakah ada kesalahan dalam program berikut ini? Bila iya, temukan kesalahannya
dan perbaiki bagian tersebut.

int total = 0, num = 0;

do
{
// Read the next data
cout << " Enter an int value , " <<
"\ nexit if the input is 0: ";

int num;
cin >> num;
total += num;
}
while (num != 0);

cout << " Total is " << total << endl;}

7. Misalkan input program adalah 2 3 4 5 0. Apa output dari kode berikut ini.

1 # include <iostream >


2 using namespace std;
3
4 int main ()
5 {
MODUL V. LOOP 87

6 int number , sum = 0, count ;


7 for (count = 0; count < 5; count ++)
8 {
9 cin >> number ;
10 sum += number ;
11 }
12
13 cout << "sum is " << sum << endl;
14 cout << " count is " << count << endl;
15
16 return 0;
17 }

8. Hitung jumlah iterasi dalam loop berikut ini.


(a) Program-1

int count = 0;
while ( count < n)
{
count ++;
}

(b) Program-2

for (int count = 0; count <= n; count ++)


{
}

(c) Program-3

int count = 5;
while ( count < n)
{
count ++;
}

(d) Program-4

int count = 5;
MODUL V. LOOP 88

while ( count < n)


{
count = count + 3;
}
MODUL VI
FUNGSI

6.1 Tujuan Pembelajaran dan Pokok Bahasan


Tujuan pembelajaran:
1. Untuk mendefinisikan fungsi dengan parameter formal.
2. Untuk mendefinisikan dan menjalankan fungsi dengan pengembalian nilai.
3. Untuk mendefinisikan dan menjalankan fungsi void.
4. Untuk memberikan nilai ke parameter atau argumen.
5. Untuk mengembangkan kode yang dapat digunakan kembali yang bersifat modular,
mudah dibaca, mudah didebug, dan mudah dipelihara.
6. Untuk menggunakan fungsi overloading.
7. Untuk menggunakan prototipe fungsi untuk mendeklarasikan header fungsi.
8. Untuk mendefinisikan fungsi dengan argumen default.
9. Untuk meningkatkan efisiensi runtime menggunakan fungsi inline.
10. Untuk menentukan ruang lingkup variabel global dan lokal.
Pokok bahasan:
1. Definisi dan Panggilan Fungsi.
2. Fungsi void.
3. Pemberian Nilai ke Argumen.
4. Modularisasi Kode.
5. Fungsi Overloading.
6. Prototipe Fungsi.
7. Argumen Default.
8. Fungsi inline.
9. Variabel Global dan Lokal.
Referensi:
1. Capper, D. M. C++ for Scientists, Engineers and Mathematicians. London: Springer-

89
MODUL VI. FUNGSI 90

Verlag, 1994.
2. Delores M. Etter and Jeanine A. Ingber. Engineering Problem Solving With C++ (4th
Edition). Boston:Pearson, 2016.

6.2 Pendahuluan
Misalnya Anda ingin melakukan perhitungan jumlah bilangan bulat dengan rentang dari
1 sampai dengan 10, dari 20 sampai dengan 37, dan dari 35 sampai dengan 49, Anda
mungkin menulis kode program sebagai berikut:

int sum = 0;
for (int i = 1; i <= 10; i++)
sum += i;
cout << "Sum from 1 to 10 is " << sum << endl;

sum = 0;
for (int i = 20; i <= 37; i++)
sum += i;
cout << "Sum from 20 to 37 is " << sum << endl;

sum = 0;
for (int i = 35; i <= 49; i++)
sum += i;
cout << "Sum from 35 to 49 is " << sum << endl;

Dari contoh program di atas terlihat bahwa ada pola yang sama untuk melakukan
3 tugas penjumlahan dengan rentang angka yang berbeda. Bagaimana C++ mengatasi
masalah seperti ini sedemikian sehingga pengguna cukup menulis sebuah kode program
yang dapat digunakan berkali-kali? Kita dapat melakukannya dengan fungsi, seperti pada
kode program berikut.

1 int sum(int i1 , int i2)


2 {
3 int sum = 0;
4 for (int i = i1; i <= i2; i++)
5 sum += i;
MODUL VI. FUNGSI 91

6
7 return sum;
8 }
9
10 int main ()
11 {
12 cout << "Sum from 1 to 10 is " << sum (1, 10) << endl;
13 cout << "Sum from 20 to 37 is " << sum (20 , 37) << endl;
14 cout << "Sum from 35 to 49 is " << sum (35 , 49) << endl;
15
16 return 0;
17 }

Baris 1-8 mendefinisikan fungsi yang bernama sum dengan dua parameter i1 dan i2.
Pernyataan dalam fungsi utama memanggil sum(1, 10) untuk menghitung jumlah dari
1 sampai dengan 10, dan sum(20, 37) untuk menghitung jumlah dari 20 sampai dengan
37, dan sum(35, 49) untuk menghitung jumlah dari 35 sampai dengan 49 .
Fungsi adalah kumpulan pernyataan yang dikelompokkan bersama untuk melakukan
operasi. Dalam bab-bab sebelumnya, Anda belajar tentang fungsi-fungsi seperti pow(a,
b), rand(), srand(seed), time(0), dan main(). Ketika Anda memanggil fungsi pow(a,
b), misalnya, sistem sebenarnya mengeksekusi pernyataan dalam fungsi dan mengemba-
likan hasilnya. Dalam bab ini, Anda akan belajar cara mendefinisikan dan menggunakan
fungsi untuk memecahkan masalah yang kompleks.

6.3 Mendefinisikan Fungsi


Syntax untuk mendefinisikan sebuah fungsi adalah sebagai berikut.

returnValueType functionName (list of parameters )


{
// Function body;
}

Misalnya Anda ingin menemukan bilangan yang lebih besar dari dua bilangan bulat.
Selain menggunakan fungsi max pada bab 4.3.4, Anda bisa mendefiniskan sendiri fungsi
MODUL VI. FUNGSI 92

tersebut seperti yang terlihat pada Gambar 6.1. Fungsi ini, dinamakan max dengan 2 (dua)
parameter int, num1 dan num2, dimana nilai yang lebih besar yang akan dikembalikan
oleh fungsi.

Gambar 6.1: Contoh mendefinisikan dan memanggil sebuah fungsi.

Header fungsi (function header) menentukan tipe nilai pengembalian (function re-
turn value type), nama (function name), dan parameter (function parameter) dari sebuah
fungsi.
Fungsi dapat mengembalikan sebuah atau beberapa nilai. ReturnValueType adalah
tipe data dari nilai tersebut. Beberapa fungsi melakukan operasi yang diinginkan tanpa
mengembalikan nilai. Dalam hal ini, returnValueType adalah keyword void. Misalnya,
returnValueType dalam fungsi srand adalah void. Sehingga fungsi dapat dibagi atas
2 kelompok: fungsi yang mengembalikan nilai disebut fungsi pengembalian nilai (value-
returning function) dan fungsi yang tidak mengembalikan nilai disebut fungsi void (void
function).
Variabel yang dideklarasikan dalam header fungsi dikenal sebagai parameter formal
(formal parameter). Ketika suatu fungsi dipanggil, Anda meneruskan nilai ke param-
eter. Nilai ini disebut sebagai parameter atau argumen aktual (actual parameter/actual
argument). Daftar parameter (parameter list )mengacu pada jenis (type), urutan (order),
dan jumlah (number) parameter dari sebuah fungsi. Nama fungsi dan daftar parameter
bersama-sama membentuk function signature. Parameter bersifat opsional; artinya, suatu
fungsi mungkin tidak mengandung parameter.
MODUL VI. FUNGSI 93

Badan fungsi (function body) berisi kumpulan pernyataan yang mendefinisikan fungsi
tersebut. Misalnya, badan fungsi dari fungsi max menggunakan pernyataan if untuk
menentukan angka mana yang lebih besar dan mengembalikan nilai angka tersebut. Perny-
ataan pengembalian dengan keyword return diperlukan untuk mengembalikan hasil dari
fungsi tersebut. Fungsi selesai ketika pernyataan return dieksekusi.

6.4 Memanggil Fungsi


Setelah mendefinisikan sebuah fungsi, Anda harus memanggil fungsi untuk dapat meng-
gunakan fungsi tersebut. Ada dua cara untuk memanggil sebuah fungsi, tergantung pada
apakah fungsi mengembalikan sebuah nilai atau tidak.
Jika fungsi mengembalikan nilai, panggilan ke fungsi itu biasanya diperlakukan seba-
gai nilai. Perhatikan contoh berikut ini.

int larger = max (3, 4);

yang memanggil fungsi max(3, 4) dan memberikan hasil fungsi ke variabel larger.
Anda dapat juga menggunakan konsol output seperti berikut ini untuk memanggil fungsi.

cout << max (3, 4);

yang mencetak nilai kembali dari panggilan fungsi max(3,4).


Ketika sebuah program memanggil sebuah fungsi, kontrol program beralih ke fungsi
yang dipanggil (calee). Setelah fungsi dieksekusi, fungsi yang dipanggil mengembalikan
kontrol ke pemanggil (caller) tepat ketika pernyataan return dieksekusi atau ketika ku-
rung kurawal tutup dari sebuah fungsi tercapai.
Listing 6.1 menunjukkan program lengkap yang digunakan untuk menguji fungsi
max.

Listing 6.1: TestMax.cpp

1 # include <iostream >


2 using namespace std;
3
4 // Return the max between two numbers
5 int max(int num1 , int num2)
MODUL VI. FUNGSI 94

6 {
7 int result ;
8
9 if (num1 > num2)
10 result = num1;
11 else
12 result = num2;
13
14 return result ;
15 }
16
17 int main ()
18 {
19 int i = 5;
20 int j = 2;
21 int k = max(i, j);
22 cout << "The maximum between " << i <<
23 " and " << j << " is " << k << endl;
24
25 return 0;
26 }

Program ini terdiri atas 2 bagian: fungsi max dan fungsi main. Fungsi main dipang-
gil oleh sistem operasi untuk menjalankan program. Semua fungsi, termasuk fungsi max,
harus dijalankan oleh pernyataan yang memanggil fungsi. Suatu fungsi harus didefin-
isikan sebelum dipanggil. Oleh karena fungsi max dipanggil oleh fungsi main, fungsi
tersebut harus ditentukan sebelum fungsi main.
Ketika fungsi max dipanggil (baris 21), nilai 5 dari variabel i diteruskan ke num1 dan
nilai 2 dari variabel j diteruskan ke num2 di fungsi max. Aliran kontrol program berpindah
ke fungsi max. Fungsi max dieksekusi. Ketika pernyataan return dalam fungsi max
dieksekusi, fungsi max mengembalikan kontrol program ke caller, dalam hal ini adalah
fungsi fungsi main. Proses ini dapat dilihat di Gambar .
Setiap kali sebuah fungsi dipanggil, sistem membuat rekaman aktivasi (activatoin
MODUL VI. FUNGSI 95

Gambar 6.2: Contoh memanggil fungsi dengan pengalihan kontrol program ke fungsi
yang dipanggil.

frame/record) yang menyimpan argumen dan variabel dari fungsi dan menempatkan reka-
man aktivasi di area memori yang dikenal sebagai call stack. Saat sebuah fungsi memang-
gil fungsi lain, rekaman aktivasi caller tetap utuh dan rekaman aktivasi baru dibuat untuk
panggilan fungsi baru. Ketika suatu fungsi menyelesaikan tugasnya dan mengembalikan
kontrol ke caller, rekaman aktivasi dihapus dari call stack.
Call stack menyimpan rekaman aktivasi dengan prinsip masuk terakhir dan keluar
pertama. Rekaman aktivasi untuk fungsi yang dipanggil terakhir dihapus terlebih dahulu
dari tumpukan. Misalkan fungsi m1 memanggil fungsi m2, dan kemudian fungsi m2 me-
manggil fungsi m3. Sistem mendorong rekaman aktivasi m1 ke dalam call stack, lalu m2,
dan kemudian m3. Setelah m3 selesai, rekaman aktivasi dihapus dari call stack. Setelah
m2 selesai, catatan aktivasi dihapus dari call stack. Setelah m1 selesai, catatan aktivasi
dihapus dari call stack.
Pemahaman akan call stack membantu Anda mengerti bagaimana sebuah fungsi di-
panggil. Variabel yang didefinisikan dalam fungsi utama adalah i, j, dan k. Variabel
yang didefinisikan dalam fungsi max adalah num1, num2, dan result. Variabel num1 dan
num2 didefinisikan dalam signature fungsi dan merupakan parameter fungsi. Nilai-nilai
num1 dan num2 dilewatkan melalui pemanggilan fungsi. Gambar 6.3 memberi ilustrasi
proses rekaman aktivasi di call stack.
MODUL VI. FUNGSI 96

Gambar 6.3: Contoh aliran program pada sebuah fungsi.

6.5 Fungsi void


Bagian sebelumnya memberikan contoh fungsi dengan pengembalian nilai. Bagian ini
menunjukkan cara mendefinisikan dan menjalankan fungsi tanpa pengembalian nilai atau
dikenal juga dengan fungsi void. Listing 6.2 memberikan contoh program yang mendefin-
isikan dan memanggil fungsi bernama printGrade untuk mencetak nilai untuk skor yang
diberikan.

Listing 6.2: TestVoidFunction.cpp

1 # include <iostream >


2 using namespace std;
3
4 // Print grade for the score
5 void printGrade ( double score )
6 {
7 if ( score >= 90.0)
8 cout << ’A’ << endl;
9 else if (score >= 80.0)
10 cout << ’B’ << endl;
11 else if (score >= 70.0)
12 cout << ’C’ << endl;
13 else if (score >= 60.0)
14 cout << ’D’ << endl;
15 else
16 cout << ’F’ << endl;
17 }
18
MODUL VI. FUNGSI 97

19 int main ()
20 {
21 cout << "Enter a score : ";
22 double score ;
23 cin >> score ;
24
25 cout << "The grade is ";
26 printGrade ( score );
27
28 return 0;
29 }

Enter a score : 78.5


The grade is C

Fungsi printGrade adalah sebuah fungsi void. Fungsi tersebut tidak mengemba-
likan nilai apa pun. Panggilan ke fungsi void harus berupa pernyataan.
Untuk melihat perbedaan antara fungsi void yang mengembalikan nilai dan yang tidak
mengembalikan nilai, Anda bisa mendesain ulang fungsi printGrade untuk mengemba-
likan nilai, seperti yang ditunjukkan pada Listing 6.3.

Listing 6.3: TestReturnGradeFunction.cpp

1 # include <iostream >


2 using namespace std;
3
4 // Return the grade for the score
5 char getGrade ( double score )
6 {
7 if ( score >= 90.0)
8 return ’A’;
9 else if (score >= 80.0)
10 return ’B’;
11 else if (score >= 70.0)
12 return ’C’;
13 else if (score >= 60.0)
MODUL VI. FUNGSI 98

14 return ’D’;
15 else
16 return ’F’;
17 }
18
19 int main ()
20 {
21 cout << "Enter a score : ";
22 double score ;
23 cin >> score ;
24
25 cout << "The grade is ";
26 cout << getGrade ( score ) << endl;
27
28 return 0;
29 }

Enter a score : 78.5


The grade is C

6.6 Pemberian Nilai ke Argumen


Kekuatan fungsi adalah kemampuannya untuk bekerja dengan parameter. Anda dapat
menggunakan fungsi max untuk menemukan maksimum antara dua nilai int. Saat me-
manggil fungsi, Anda perlu memberikan argumen, yang harus diberikan dalam urutan
yang sama dengan parameter masing-masing dalam signature fungsi. Ini dikenal sebagai
asosiasi urutan parameter (parameter order association). Perhatikan contoh berikut ini.

void nPrint (char ch , int n)


{
for (int i = 0; i < n; i++)
cout << ch;
}

Anda dapat menggunakan nPrint(’a’, 3) untuk mencetak ’a’ tiga kali. Perny-
MODUL VI. FUNGSI 99

ataan nPrint(’a’, 3) memberikan parameter ’a’ ke ch dengan tipe data char dan
memberikan 3 ke n dengan tipe data int;. Hasilnya adalah program mencetak ’a’ se-
banyak tiga kali. Namun bila urutan parameter dibalik, pernyataan nPrint(3, ’a’)
memiliki arti yang berbeda dan memberikan hasil yang berbeda juga.

6.7 Modularisasi Kode


Fungsi dapat digunakan untuk mengurangi penulisan kode yang berulang dan memu-
ngkinkan sebuah kode digunakan berulang kali. Fungsi juga dapat digunakan untuk mem-
odularisasi kode dan meningkatkan kualitas program. Pengguna dapat membagi tugas
besar menjadi dua atau lebih tugas-tugas kecil. Hasilnya, program dari tugas besar ter-
diri atas program-program untuk tugas-tugas kecil yang lebih mudah dibaca, lebih mudah
di-debug, dan digunakan kembali oleh program lain.
Program pada Listing 6.4 mendefinisikan dua fungsi baru isPrime dan printPrime-
Numbers. Fungsi isPrime memeriksa apakah suatu bilangan prima dan fungsi print-
PrimeNumbers yang mencetak bilangan prima.

Listing 6.4: PrimeNumberFunction.cpp

1 # include <iostream >


2 # include <iomanip >
3 using namespace std;
4
5 // Check whether number is prime
6 bool isPrime (int number )
7 {
8 for (int divisor = 2; divisor <= number / 2; divisor ++)
9 {
10 if ( number % divisor == 0)
11 {
12 // If true , number is not prime
13 return false ; // number is not a prime
14 }
15 }
MODUL VI. FUNGSI 100

16
17 return true; // number is prime
18 }
19
20 void printPrimeNumbers (int numberOfPrimes )
21 {
22 const int NUMBER_OF_PRIMES = 50; // Number of primes to display
23 const int NUMBER_OF_PRIMES_PER_LINE = 10; // Display 10 per line
24 int count = 0; // Count the number of prime numbers
25 int number = 2; // A number to be tested for primeness
26
27 // Repeatedly find prime numbers
28 while ( count < numberOfPrimes )
29 {
30 // Print the prime number and increase the count
31 if ( isPrime ( number ))
32 {
33 count ++; // Increase the count
34
35 if (count % NUMBER_OF_PRIMES_PER_LINE == 0)
36 {
37 // Print the number and advance to the new line
38 cout << setw (4) << number << endl;
39 }
40 else
41 cout << setw (4) << number ;
42 }
43
44 // Check if the next number is prime
45 number ++;
46 }
47 }
48
49 int main ()
MODUL VI. FUNGSI 101

50 {
51 cout << "The first 50 prime numbers are \n";
52 printPrimeNumbers (50);
53
54 return 0;
55 }

The first 50 prime numbers are


2 3 5 7 11 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97 101 103 107 109 113
127 131 137 139 149 151 157 163 167 173
179 181 191 193 197 199 211 223 227 229

6.8 Fungsi Overloading


Fungsi max yang digunakan sebelumnya hanya bekerja dengan tipe data int. Bagaimana
jika Anda perlu menentukan mana dari dua angka desimal yang memiliki nilai lebih be-
sar? Solusinya adalah membuat fungsi lain dengan nama yang sama tetapi parameter (tipe
data) yang berbeda, seperti yang ditunjukkan dalam kode berikut:

int max(int num1 , int num2)


{
if (num1 > num2)
return num1;
else
return num2;
}

double max( double num1 , double num2)


{
if (num1 > num2)
return num1;
else
MODUL VI. FUNGSI 102

return num2;
}

Jika Anda memanggil fungsi max dengan parameter int, fungsi max yang mengan-
dung parameter int akan dipanggil. Jika Anda memanggil fungsi max dengan parameter
double, fungsi max yang mengandung parameter double akan dipanggil. Ini disebut
sebagai fungsi overloading, dimana dua fungsi memiliki nama yang sama tetapi daftar
parameter berbeda dalam satu file. Compiler C++ menentukan fungsi mana yang digu-
nakan berdasarkan signature fungsi.
Program dalam Listing 6.5 berisi tiga fungsi bernama max: yang pertama menemukan
bilangan bulat maksimum, yang kedua menemukan bilangan desimal maksimum, dan
yang ketiga menemukan maksimum di antara tiga bilangan desimal.

Listing 6.5: TestFunctionOverloading.cpp

1 # include <iostream >


2 using namespace std;
3
4 // Return the max between two int values
5 int max(int num1 , int num2)
6 {
7 if (num1 > num2)
8 return num1;
9 else
10 return num2;
11 }
12
13 // Find the max between two double values
14 double max( double num1 , double num2)
15 {
16 if (num1 > num2)
17 return num1;
18 else
19 return num2;
20 }
MODUL VI. FUNGSI 103

21
22 // Return the max among three double values
23 double max( double num1 , double num2 , double num3)
24 {
25 return max(max(num1 , num2), num3);
26 }
27
28 int main ()
29 {
30 // Invoke the max function with int parameters
31 cout << "The maximum between 3 and 4 is " << max (3, 4) << endl;
32
33 // Invoke the max function with the double parameters
34 cout << "The maximum between 3.0 and 5.4 is "
35 << max (3.0, 5.4) << endl;
36
37 // Invoke the max function with three double parameters
38 cout << "The maximum between 3.0, 5.4, and 10.14 is "
39 << max (3.0, 5.4, 10.14) << endl;
40
41 return 0;
42 }

Bisakah Anda memanggil fungsi max mengandung parameter nilai int dan double,
seperti max(2, 2.5) pada baris ke-35? Jawabannya, ya Anda bisa. Kemudian, jika
Anda bisa, manakah dari fungsi max yang dipanggil? Fungsi max dengan parameter ni-
lai double yang dipanggil. Nilai argumen 2 secara otomatis dikonversi menjadi nilai
double.
Terkadang ada dua atau lebih kesamaan pada parameter fungsi yang menyebabkan
compiler tidak dapat menentukan kesamaan yang paling spesifik di antara 2 fungsi. Am-
bigu semacam ini dapat menyebabkan kesalahan kompilasi. Perhatikan contoh program
berikut ini.

# include <iostream >


MODUL VI. FUNGSI 104

using namespace std;


int maxNumber (int num1 , double num2)
{
if (num1 > num2)
return num1;
else
return num2;
}

double maxNumber ( double num1 , int num2)


{
if (num1 > num2)
return num1;
else
return num2;
}

int main ()
{
cout << maxNumber (1, 2) << endl;
return 0;
}

MaxNumber (int, double) dan maxNumber (double, int) adalah pasangan fungsi
yang cocok dengan maxNumber (1, 2). Karena tidak ada yang lebih spesifik, per-
mintaan itu bersifat ambigu, menghasilkan kesalahan runtime.

6.9 Prototipe Fungsi


Sebelum suatu fungsi dipanggil, header fungsi harus dideklarasikan. Salah satu cara un-
tuk memastikan ini adalah dengan menempatkan definisi fungsi sebelum semua fungsi
dipanggil. Pendekatan lain adalah mendefinisikan prototipe fungsi (function prototypes)
sebelum fungsi dipanggil. Prototipe fungsi, juga dikenal sebagai deklarasi fungsi, adalah
header fungsi tanpa implementasi. Implementasi diberikan setelah fungsi main. Per-
MODUL VI. FUNGSI 105

hatikan contoh implementasi prototipe fungsi pada Listing 6.6.

Listing 6.6: TestFunctionPrototype.cpp

1 # include <iostream >


2 using namespace std;
3
4 // Function prototype
5 int max(int num1 , int num2);
6 double max( double num1 , double num2);
7 double max( double num1 , double num2 , double num3);
8
9 int main ()
10 {
11 // Invoke the max function with int parameters
12 cout << "The maximum between 3 and 4 is " <<
13 max (3, 4) << endl;
14
15 // Invoke the max function with the double parameters
16 cout << "The maximum between 3.0 and 5.4 is "
17 << max (3.0, 5.4) << endl;
18
19 // Invoke the max function with three double parameters
20 cout << "The maximum between 3.0, 5.4, and 10.14 is "
21 << max (3.0, 5.4, 10.14) << endl;
22
23 return 0;
24 }
25
26 // Return the max between two int values
27 int max(int num1 , int num2)
28 {
29 if (num1 > num2)
30 return num1;
31 else
32 return num2;
MODUL VI. FUNGSI 106

33 }
34
35 // Find the max between two double values
36 double max( double num1 , double num2)
37 {
38 if (num1 > num2)
39 return num1;
40 else
41 return num2;
42 }
43
44 // Return the max among three double values
45 double max( double num1 , double num2 , double num3)
46 {
47 return max(max(num1 , num2), num3);
48 }

Dalam prototipe fungsi, Compiler C++ mengabaikan nama parameter sehingga Anda
tidak perlu mencantumkan nama parameter. Prototipe memberitahu compiler nama fungsi,
tipe return, jumlah parameter, dan tipe data setiap parameter. Jadi baris 5-7 bisa diganti
dengan mencantumkan tipe data parameter sebagai berikut.

int max(int , int);


double max(double , double );
double max(double , double , double );

6.10 Argumen Default


C++ memungkinkan Anda untuk mendeklarasikan fungsi dengan nilai argumen default.
Nilai default diteruskan ke parameter saat sebuah fungsi dipanggil tanpa argumen. Listing
6.7 menunjukkan cara mendeklarasikan fungsi dengan nilai argumen default dan cara
menjalankan fungsi tersebut.

Listing 6.7: DefaultArgumentDemo.cpp

1 # include <iostream >


MODUL VI. FUNGSI 107

2 using namespace std;


3
4 // Display area of a circle
5 void printArea ( double radius = 1)
6 {
7 double area = radius * radius * 3. 14159 ;
8 cout << "area is " << area << endl;
9 }
10
11 int main ()
12 {
13 printArea ();
14 printArea (4);
15
16 return 0;
17 }

area is 3.14159
area is 50.2654

Ketika suatu fungsi berisi campuran parameter dengan dan tanpa nilai default, pa-
rameter yang memiliki nilai default harus dinyatakan paling akhir. Misalnya, deklarasi
berikut ini adalah ilegal.

void t1(int x, int y = 0, int z); // Ilegal


void t2(int x = 0, int y = 0, int z); // Ilegal

Perbaikan kode program di atas menjadi sebagai berikut.

void t3(int x, int y = 0, int z = 0); // Legal


void t4(int x = 0, int y = 0, int z = 0); // Legal

Ketika sebuah parameter dari argumen dibiarkan kosong, semua parameter yang datang
setelah itu harus dibiarkan kosong juga. Misalnya, panggilan berikut ini adalah ilegal.

t3(1, , 20);
t4(, , 20);

Perbaikan kode program di atas menjadi sebagai berikut.


MODUL VI. FUNGSI 108

t3 (1); // Parameter y dan z diberikan nilai default


t4(1, 2); // Parameter z diberikan nilai default

6.11 Fungsi inline


Penggunaan fungsi membuat program mudah dibaca dan mudah dipelihara, tetapi pang-
gilan fungsi dapat menyebabkan runtime overhead. C++ menyediakan fungsi inline
untuk menghindari panggilan fungsi. Fungsi inline tidak dipanggil (callee); melainkan,
compiler menyalin kode fungsi yang sebaris pada titik yang dituju. Untuk menggunakan
fungsi inline, awali deklarasi fungsi dengan keyword inline, seperti yang ditunjukkan
pada Listing 6.8.

Listing 6.8: InlineDemo.cpp

1 # include <iostream >


2 using namespace std;
3
4 inline void f(int month , int year)
5 {
6 cout << "month is " << month << endl;
7 cout << "year is " << year << endl;
8 }
9
10 int main ()
11 {
12 int month = 10, year = 2008;
13 f(month , year); // Invoke inline function
14 f(9, 2010) ; // Invoke inline function
15
16 return 0;
17 }

month is 10
year is 2008
month is 9
MODUL VI. FUNGSI 109

year is 2010

Hasil eksekusi program pada baris 13-14 ekuivalen dengan kode program berikut ini.

int month = 10, year = 2008;

cout << "month is " << month << endl;


cout << "year is " << year << endl;
cout << "month is " << 9 << endl;
cout << "year is " << 2010 << endl;

6.12 Variabel Lokal, Global, dan Lokal Statis


Seperti dijelaskan pada subbab 2.5 tentang Variabel, ruang lingkup suatu variabel adalah
bagian dari program di mana variabel dapat dirujuk. Variabel yang didefinisikan di dalam
suatu fungsi disebut sebagai variabel lokal. C++ juga memungkinkan Anda untuk meng-
gunakan variabel global. Mereka dinyatakan di luar semua fungsi dan dapat diakses oleh
semua fungsi dalam ruang lingkup mereka. Variabel lokal tidak memiliki nilai default,
tetapi variabel global dapat memiliki nilai default ke nol.
Suatu variabel harus dideklarasikan sebelum dapat digunakan. Ruang lingkup variabel
lokal dimulai dari deklarasi dan berlanjut ke akhir blok yang berisi variabel. Cakupan
variabel global dimulai dari deklarasi dan berlanjut hingga akhir program.
Parameter dalam fungsi adalah variabel lokal. Cakupan parameter fungsi mencakup
seluruh bagian di dalam fungsi tersebut.
Listing 6.9 menunjukkan ruang lingkup variabel lokal dan global.

Listing 6.9: VariableScopeDemo.cpp

1 # include <iostream >


2 using namespace std;
3
4 void t1 (); // Function prototype
5 void t2 (); // Function prototype
6
7 int main ()
MODUL VI. FUNGSI 110

8 {
9 t1();
10 t2();
11
12 return 0;
13 }
14
15 int y; // Global variable , default to 0
16
17 void t1 ()
18 {
19 int x = 1; // local variable
20 cout << "x is " << x << endl;
21 cout << "y is " << y << endl;
22 x++;
23 y++;
24 }
25
26 void t2 ()
27 {
28 int x = 1; // local variable
29 cout << "x is " << x << endl;
30 cout << "y is " << y << endl;
31 }

x is 1
y is 0
x is 1
y is 1

Variabel global y dideklarasikan di baris 15 dengan nilai default 0. Variabel ini dapat
diakses di fungsi t1 dan t2, tetapi tidak di fungsi main, karena fungsi main dideklarasikan
sebelum y dideklarasikan.
Ketika fungsi utama memanggil t1() di baris 9, variabel global y bertambah (baris
MODUL VI. FUNGSI 111

23) dan menjadi 1 di t1. Ketika fungsi main memanggil t2() pada baris 10, variabel
global y sekarang 1.
Variabel lokal x dideklarasikan pada t1 pada baris 19 dan variabel x lain dideklarasikan
pada t2 pada baris 28. Meskipun kedua variabel tersebut dinamai sama (x), kedua vari-
abel ini independen. Jadi, penambahan x dalam t1 tidak memengaruhi variabel x yang
didefinisikan dalam t2.
Ketika sebuah fungsi memiliki variabel lokal dengan nama yang sama dengan variabel
global, hanya variabel lokal yang dapat dilihat dari fungsi tersebut.

6.12.1 Ruang Lingkup Variabel untuk Loop for


Variabel yang dideklarasikan di bagian initial-action dari header for memiliki cakupan di
seluruh loop. Namun, variabel yang dideklarasikan di dalam loop body dari for memiliki
cakupan terbatas di loop body dari deklarasi ke akhir blok yang berisi variabel, seperti
yang ditunjukkan pada Gambar 6.4.

Gambar 6.4: Variabel yang dideklarasikan di bagian initial-action dari header loop for
memiliki cakupan di seluruh loop.

6.12.2 Variabel Lokal Statis


Setelah fungsi menyelesaikan eksekusi, semua variabel lokal di dalam fungsi tersebut
dihapuskan. Variabel-variabel ini juga dikenal sebagai variabel otomatis (automatic vari-
ables). Untuk mempertahankan nilai yang disimpan dalam variabel lokal sehingga nilai
tersebut dapat digunakan dalam panggilan berikutnya, C++ memungkinkan Anda untuk
mendeklarasikan variabel lokal statis. Variabel lokal statis dialokasikan secara perma-
nen dalam memori selama program dieksekusi. Untuk mendeklarasikan variabel statis,
MODUL VI. FUNGSI 112

gunakan keyword static. Listing 6.10 memperlihatkan penggunaan variabel lokal statis.

Listing 6.10: StaticVariableDemo.cpp

1 # include <iostream >


2 using namespace std;
3
4 void t1 (); // Function prototype
5
6 int main ()
7 {
8 t1();
9 t1();
10
11 return 0;
12 }
13
14 void t1 ()
15 {
16 static int x = 1;
17 int y = 1;
18 x++;
19 y++;
20 cout << "x is " << x << endl;
21 cout << "y is " << y << endl;
22 }

x is 2
y is 2
x is 3
y is 2

Variabel lokal statis x dinyatakan pada baris 16 dengan nilai awal 1. Inisialisasi vari-
abel statis hanya terjadi satu kali dalam panggilan pertama. Ketika t1() dipanggil untuk
pertama kalinya di baris 8, variabel statis x diinisialisasi ke 1 (baris 16). x bertambah
menjadi 2 (baris 18). Karena x adalah variabel lokal statis, x disimpan dalam memori
MODUL VI. FUNGSI 113

setelah panggilan ini. Ketika t1() dipanggil lagi pada baris 9, x adalah 2 dan bertambah
menjadi 3 (baris 18).
Variabel lokal y dideklarasikan di baris 17 dengan nilai awal 1. Ketika t1() dipanggil
untuk pertama kali di baris 8, y ditambahkan ke 2 (baris 19). Karena y adalah variabel
lokal, nilainya hilang (dihapus) setelah panggilan ini. Ketika t1() dipanggil lagi pada
baris 9, y diinisialisasi ke 1 dan bertambah menjadi 2 (baris 19).

6.13 Tugas Modul


1. Tulis dua fungsi berikut ini:

// Convert from millimeters to inches


double millimetersToInches ( double millimeters )

// Convert from inches to millimeters


double inchesToMillimeters ( double inches )

Gunakan persamaan konversi berikut ini.

millimeter = 0.39 ∗ inches (6.1)

Tulis program yang memanggil fungsi-fungsi ini untuk menampilkan tabel berikut:

Millimeters Inches | Inches Millimeters


2 0.078 | 1 65.574
4 0.156 | 2 81.967
...
98 3.822 | 49 1256.41
100 3.900 | 50 1282.05

2. Tulis fungsi berikut yang menampilkan angka genap dalam sebuah digit/beberapa
digit dari sebuah bilangan bulat.

void displayEven (int number )

Contoh, displayEven(345) menampilkan 4 atau displayEven(6789) menampilkan


MODUL VI. FUNGSI 114

6 dan 8.
3. Apakah ada kesalahan dalam program berikut ini? Bila iya, temukan kesalahannya
dan perbaiki bagian tersebut.

1 int function1 (int n)


2 {
3 cout << n;
4 }
5
6 function2 (int n, m)
7 {
8 n += m;
9 function1 (3.4);
10 }

4. Apakah ada kesalahan dalam program berikut ini? Bila iya, temukan kesalahannya
dan perbaiki bagian tersebut.

1 void nPrintln ( string message , int n)


2 {
3 int n = 1;
4 for (int i = 0; i < n; i++)
5 cout << message << endl;
6 }
7
8 int main ()
9 {
10 nPrintln (7, " Welcome to Wetar Island ");
11 }

5. Apakah ada kesalahan dalam program berikut ini? Bila iya, temukan kesalahannya
dan perbaiki bagian tersebut.

1 void p(int i)
2 {
3 cout << i << endl;
4 }
MODUL VI. FUNGSI 115

5
6 int p(int j)
7 {
8 cout << j << endl;
9 }

6. Identifikasi variabel global, variabel lokal, dan variabel lokal statis dalam program
berikut. Apa yang akan menjadi output dari kode program tersebut?

1 # include <iostream >


2 using namespace std;
3
4 int j = 40;
5 void p()
6 {
7 int i = 5;
8 static int j = 5;
9 i++;
10 j++;
11
12 cout << "i is " << i << endl;
13 cout << "j is " << j << endl;
14 }
15
16 int main ()
17 {
18 p();
19 p();
20
21 return 0;
22 }

7. Tulis sebuah fungsi/beberapa fungsi untuk menghitung seri berikut ini:

1 1 1 1
f (n) = + + + ... + (6.2)
3 8 15 n(n + 2)
MODUL VI. FUNGSI 116

Tampilkan dalam bentuk tabel berikut ini.

n f(n)
2 0.458333
4 0.566667
...
12 0.675824
14 0.685417

Anda mungkin juga menyukai