Anda di halaman 1dari 597

BAHASA PEMROGRAMAN

KATA PENGANTAR

ii
 
DAFTAR ISI

HALAMAN JUDUL ....................................................................................... i


KATA PENGANTAR .................................................................................... ii
DAFTAR ISI ................................................................................................ iii
BAB 1. DASAR-DASAR PEMROGRAMAN KOMPUTER
1.1. Pendahuluan .................................................................................... 1
1.2. Perangkat Keras Komputer .............................................................. 3
1.3. Arsitektur Komputer .......................................................................... 6
1.4. Kerja Komputer ................................................................................. 16
1.5. Sistem Bilangan ................................................................................ 19
1.6. Pemrograman Komputer .................................................................. 28
1.7. Bahasa Pemrograman ...................................................................... 30
1.8. Penulisan Bahasa Pemrograman ..................................................... 34
1.9. Element Bahasa Pemrograman ....................................................... 38
1.10. Bahasa C++ ...................................................................................... 40
1.11. Struktur Bahasa C++ ........................................................................ 42
1.12. Input/output ....................................................................................... 45
1.13. Soal Latihan ...................................................................................... 46

BAB 2. BAHASA DAN ALGORITMA PEMROGRAMAN


2.1. Bahasa Pemrograman ...................................................................... 47
2.2. Compiler dan Inteprete ..................................................................... 50
2.3. Tipe Pemrograman ........................................................................... 50
2.4. Algoritma .......................................................................................... 52
2.5. Ciri Algoritma .................................................................................... 53
2.6. Penerapan Algoritma ........................................................................ 54
2.7. Notasi Algoritma ............................................................................... 55
2.8. Deskriptif Algoritma .......................................................................... 55
2.9. Flow chart ......................................................................................... 56
2.10. Pseudo code ..................................................................................... 60
2.11. Penerjemahan ke kode sumber ........................................................ 61
2.12. Latihan Soal ...................................................................................... 87

BAB 3. TIPE DATA DAN OPERATOR


3.1. Pengertian Data ................................................................................ 89
3.2. Indentifier ......................................................................................... 90
3.3. Konstanta ......................................................................................... 92
3.4. Variabel ............................................................................................ 96
3.5. Tipe Data .......................................................................................... 101
3.6. Operator Bahasa C++ ...................................................................... 110
3.7. Operator Unary ................................................................................. 112
3.8. Operator Binary ................................................................................ 117
3.9. Operator Ternary .............................................................................. 126
3.10. Ungkapan (Ekspresi) ........................................................................ 128
3.11. Soal Latihan ...................................................................................... 129

iii
 
BAB 4. STRUKTUR PERULANGAN
4.1. Perulangan ....................................................................................... 131
4.2. Operator Increment dan Decrement ................................................. 132
4.3. Ekspresi Matematika ++ dan -- ........................................................ 133
4.4. Penghitung ....................................................................................... 134
4.5. Pernyataan FOR ............................................................................... 136
4.6. Pernyataan NESTED – FOR ............................................................ 149
4.7. Pernyataan WHILE .......................................................................... 151
4.8. Pernyataan NESTED-WHILE .......................................................... 155
4.9. Perulangan DO-WHILE .................................................................... 158
4.10. Pernyataan NESTED DO-WHILE ..................................................... 161
4.11. Perulangan Tidak Berhingga ............................................................ 163
4.12. Pernyataan Break ............................................................................. 165
4.13. Pernyataan Continue ........................................................................ 167
4.14. Pernyataan Goto .............................................................................. 169
4.15. Latihan Soal ...................................................................................... 170

BAB 5. STATEMENT KENDALI


5.1. Pengertian Statement ....................................................................... 171
5.2. Operator Relasi ................................................................................ 172
5.3. Statement IF ..................................................................................... 176
5.4. Pernyataan IF/ELSE ......................................................................... 184
5.5. Pernyataan IF/ELSE IF ..................................................................... 188
5.6. Pernyataan IF/ELSE Majemuk ......................................................... 196
5.7. Pernyataan NESTED IF ................................................................... 198
5.8. Operator Logika ................................................................................ 202
5.9. Operator Kondisional ........................................................................ 208
5.10. Statement SWITCH .......................................................................... 211
5.11. Pernyataan Switch … Case .............................................................. 212
5.12. IF...THEN, IF...THEN...ELSE dan Nested IF .................................... 218
5.13. Aplikasi Pernyataan IF pada Menu ................................................... 220
5.14. Soal Latihan ...................................................................................... 222

BAB 6. PROSEDUR DAN SUBROUTIN


6.1. Prosedur ........................................................................................... 223
6.2. Parameter Prosedur ......................................................................... 224
6.3. Pemanggilan Prosedur ..................................................................... 225
6.4. Sub Rutin ......................................................................................... 228
6.5. Sub Rutin dalam Bahasa Pemrograman .......................................... 229
6.6. Function yang Mengembalikan Nilai ................................................. 233
6.7. Function yang Tidak Mengembalikan Nilai ....................................... 236
6.8. Function Call Function ...................................................................... 239
6.9. Call by Value dan Call by References .............................................. 241
6.10. Parameter dengan Nilai Default ....................................................... 244
6.11. Overloading ...................................................................................... 246
6.12. Latihan Soal ...................................................................................... 251

iv
 
BAB 7 FUNGSI
7.1. Pendahuluan .................................................................................... 253
7.2. Fungsi Void ....................................................................................... 255
7.3. Pemanggilan Fungsi ......................................................................... 255
7.4. Prototipe Fungsi ............................................................................... 262
7.5. Pengiriman data pada Fungsi ........................................................... 264
7.6. Passing Data by Value ..................................................................... 269
7.7. Pernyataan Kembali ......................................................................... 271
7.8. Mengembalikan Nilai dari Fungsi ..................................................... 272
7.9. Pengembalian Nilai Boolean ............................................................ 276
7.10. Menggunakan Fungsi dalam program menu .................................... 277
7.11. Variabel Lokal dan Global ............................................................... 279
7.12. Variabel Static Local ......................................................................... 284
7.13. Soal Latihan ...................................................................................... 287

BAB 8. OPERASI STRING


8.1. String pada bahasa C ....................................................................... 289
8.2. Pointer pada Operasi String ............................................................. 294
8.3. Library String Bahasa C++ ............................................................... 295
8.4. Membandingkan string ..................................................................... 298
8.5. Operator Logika NOT ....................................................................... 302
8.6. Pengurutan String ............................................................................. 302
8.7. Fungsi konversi String/Numeric ........................................................ 306
8.8. Menguji sebuah Karakter .................................................................. 309
8.9. Deskripsi Fungsi Karakter ................................................................ 311
8.10. Konversi Karakter ............................................................................. 314
8.11. Menulis string ................................................................................... 316
8.12. Pointer untuk menguraikan String .................................................... 319
8.13. Class String pada C++ ..................................................................... 321
8.14. Membuat Class String Sendiri .......................................................... 327
8.15. Studi Kasus ...................................................................................... 330
8.16. Soal Latihan ...................................................................................... 332

BAB 9. ARRAY
9.1. Pengertian Array ............................................................................... 333
9.2. Deklarasi Array ................................................................................. 339
9.3. Inisialisasi Array ................................................................................ 342
9.4. Array multi dimensi ........................................................................... 342
9.5. Mengurutkan element Array ............................................................. 346
9.6. Contoh program array ...................................................................... 350
9.7. Soal Latihan ...................................................................................... 353

BAB 10. REKURSIF


10.1. Pengertian Rekursif .......................................................................... 355
10.2. Pengertian Teknik Iteratif .................................................................. 361
10.3. Perbandingan Teknik Rekursif dan Teknik Iteratif ............................ 361

v
 
10.4. Algoritma Teknik Rekursif ................................................................. 364
10.5. Algoritma Teknik Iteratif .................................................................... 365
10.6. Penerapan Algoritma Rekursif .......................................................... 366
10.7. Penerapan Algoritma Iteratif ............................................................. 368
10.8. Soal Latihan ...................................................................................... 372

BAB 11. GRAFIK


11.1. Pengertian Grafik .............................................................................. 373
11.2. Grafik Library .................................................................................... 374
11.3. Grafik Sederhana ............................................................................. 375
11.4. Animasi Grafik .................................................................................. 382
11.5. Dasar-dasar Game ........................................................................... 392
11.6. Soal Latihan ...................................................................................... 398

BAB 12. OPERASI FILE


12.1. Pengertian File ................................................................................. 399
12.2. Class stream ..................................................................................... 401
12.3. Hirarki class stream .......................................................................... 402
12.4. File Input/Output C++ ....................................................................... 404
12.5. Pembacaan String ............................................................................ 407
12.6. Routin-routin konversi File ................................................................ 409
12.7. File Binary dan ASCII ....................................................................... 412
12.8. Binary I/O ......................................................................................... 414
12.9. Buffer ................................................................................................ 414
12.10. Rutin-rutin pada C++ ........................................................................ 420
12.11. File sekuensial .................................................................................. 422
12.12. Program Operasi FiIe ...................................................................... 425
12.13. Soal Latihan ...................................................................................... 431

BAB 13. POINTER


13.1 Pemrograman pointer ....................................................................... 433
13.2 Deklarasi variabel bertipe pointer ..................................................... 436
13.3 Inisialisasi Pointer ............................................................................. 439
13.4 Pointer untuk fungsi .......................................................................... 442
13.5 Mengakses dan Mengubah isi Pointer.............................................. 447
13.6 Array dan Pointer .............................................................................. 450
13.7 Pointer dalam Fungsi ........................................................................ 459
13.8 Fungsi Pointer ke Static Class Member Function ............................. 466
13.9 Fungsi Pointer pada Class anggota Fungsi Non-static..................... 468
13.10 Soal Latihan ...................................................................................... 470

BAB 14. CLASS


14.1. Obyek dan Class .............................................................................. 471
14.2. Tipe Class ......................................................................................... 472
14.3. Deklarasi Class ................................................................................ 474
14.4. Struktur dan kelas ............................................................................. 479
14.5. Constructor dan destructor ............................................................... 486

vi
 
14.6. Overloading Constructor ................................................................... 488
14.7. Menulis Class ................................................................................... 489
14.8. Reference this .................................................................................. 495
14.9. Overloading Method ......................................................................... 495
14.10. Access Modifier ................................................................................ 500
14.11. Contoh Program Class ..................................................................... 501
14.12. Soal Latihan ...................................................................................... 505

BAB 15. PEMROGRAMAN BERORIENTASI OBYEK


15.1. Pemrograman Object-Oriented dan Prosedural ............................... 505
15.2. Perbedaan Object-Oriented dan Prosedural .................................... 506
15.3. Pemrograman berorientasi objek ..................................................... 506
15.4. Immutable obyek .............................................................................. 510
15.5. Modularitas dan Abstraksi Data ........................................................ 512
15.6. Modularitas dan Penyebunyian Informasi ........................................ 517
15.7. Interface ............................................................................................ 518
15.8. Interface dan Class ........................................................................... 519
15.9. Hubungan dari Interface ke Class .................................................... 521
15.10. Pewarisan Antar Interface ................................................................ 522
15.11. Soal Latihan ...................................................................................... 522

BAB 16. S INHERITANCE, FRIENDS, POLYMORPHISM DAN


OVERLOADING
16.1. Menggunakan Obyek dan Class ...................................................... 523
16.2. Realisasi Prosedur dan Fungsi dalam Class .................................... 530
16.3. Class Private , Class Public, dan Class Protected ........................... 534
16.4. Friend ............................................................................................... 541
16.5. Friend class ...................................................................................... 554
16.6. Inheritance ........................................................................................ 557
16.7. Class basis virtual ............................................................................. 565
16.8. Inheritance between class ................................................................ 569
16.9. Multiple inheritance ........................................................................... 571
16.10. Polymorphism ................................................................................... 572
16.11. Overloading ...................................................................................... 579
16.12. Soal Latihan ...................................................................................... 583

LAMPIRAN ................................................................................................... 585

vii
 
Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

BAB 1
DASAR-DASAR PEMROGRAMAN KOMPUTER

1.1. Pendahuluan
1.2. Perangkat Keras Komputer
1.3. Arsitektur Komputer
1.4. Kerja Komputer
1.5. Sistem Bilangan
1.6. Pemrograman Komputer
1.7. Bahasa Pemrograman
1.8. Penulisan Bahasa Pemrograman
1.9. Element Bahasa Pemrograman
1.10. Bahasa C++
1.11. Struktur Bahasa C++
1.12. Input/output
1.13. Soal Latihan

1.1. Pendahuluan
Setiap orang yang bekerja digunakan oleh orang lain selain ahli
biasanya membutuhkan alat bantu bedah.
untuk menyelesaikan pekerjaannya Ada beberapa peralatan yang
supaya menjadi lebih mudah. digunakan oleh beberapa profesi,
Seorang tukang kayu misalnya misalnya: obeng digunakan oleh ahli
membutuhkan palu, gergaji dan mesin, tukang kayu, tukang listrik dan
pengukur. Ahli mesin membutuhkan lain sebagainya. Selain obeng,
kunci pas dan obeng. Seorang teknisi komputer juga merupakan sebuah
elektronika membutuhkan multimeter, peralatan yang digunakan oleh
oscilloscope dan solder untuk banyak profesi, sehingga hal tersebut
menyelesaikan pekerjaannya. sangat sulit dikategorikan pada
Beberapa peralatan bantu bidang apa.
tersebut dapat dikategorikan sesuai Selain seperti dijelaskan diatas
dengan jenis pekerjaannya, misalnya komputer juga mencakup banyak
seorang ahli bedah, maka orang pekerjaan yang berbeda atau boleh
tersebut harus mempunyai peralatan jadi dapat dikatakan menjadi
yang didesain secara khusus untuk peralatan yang paling serbaguna
melakukan operasi. Peralatan yang pernah dibuat.
tersebut tentunya tidak biasa Pemanfaatan komputer oleh
seorang akuntan, digunakan untuk
1
 
Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

menganalisis keuntungan, untuk instruksi secara logic, Procedure


membuat laporan keuangan, tetapi matematik, Tampilan yang akan
pada sebuah pabrik komputer muncul pada layar monitor, Informasi
digunakan sebagai kendali mesin- yang ditampilkan oleh user, Program
mesin produksi, sedangkan pada harus “user friendly”, serta Petunjuk
seorang mekanik digunakan untuk penggunaan maupun bentuk
menganalisis berbagai sistem pada dokumen tertulis lainnya.
mesin dan permasalahan lainnya. Pemprograman berkaitan
Mengapa komputer menjadi dengan aspek ilmu pengetahuan
peralatan yang sangat serbaguna?. berkaitan dengan ilmu teknik karena
Jawabanya sangat sederhana, jarang sekali program dapat berjalan
komputer dapat mengerjakan tugas- baik pada saat program pertama kali
tugas yang bervariasi karena ditulis. Biasanya perlu banyak
komputer dapat diprogram. Komputer dilakukan percobaan, pembetulan
merupakan sebuah mesin yang dari kesalahan maupun dirancang
khusus hanya mengikuti instruksi ulang sesuai dengan kebutuhan.
yang diberikan padanya.Karena Dengan adanya hal tersebut diatas
komputer bersifat programmable, maka dibutuhan seorang programmer
sehingga komputer tidak hanya milik yang memahami dua kemampuan
satu profesi saja. Komputer yaitu seni dan ilmu pengetahuan.
dirancang untuk mengerjakan Seorang programmer harus
pekerjaan yang sesuai program- menguasai bahasa yang dimiliki oleh
program yang diberikannya padanya. komputer seperti bahasa C++, Java
Pekerjaan sebagai programmer atau bahasa pemrograman lainnya.
merupakan pekerjaan yang sangat Bahasa tersebut merupakan cara
penting karena merekalah yang komputer supaya bisa memahami
membuat perangkat lunak yang apa yang diperintahkan karena
digunakan untuk menginstruksikan komputer tidak paham bahasa
komputer sebagai peralatan yang Indonesia atau bahasa manusia
sesuai dengan yang diinginkan. manusia, sehingga programmerlah
Tanpa programmer, pengguna yang harus menyesuaikan dengan
komputer tidak mempunyai perangkat komputer.
lunak, dan tanpa perangkat lunak Bahasa komputer mempunyai
komputer tidak akan bisa aturan-aturan yang harus diikuti.
mengerjakan apapun. Dalam menulis program komputer
Dalam pemrograman komputer yang meliputi seni dan ilmu
ada dua kombinasi yang tidak pengetahuan tersebut seperti halnya
terpisahkan yaitu seni dan ilmu dalam merancang sebuah mobil,
pengetahuan. Dikatakan dalam seni dimana mobil tersebut harus
karena setiap aspek dalam program mempunyai tingkat fungsional yang
harus dirancang dengan hati-hati. tinggi, efficient, bertenaga maksimal,
Hal-hal yang perlu diperhatikan mudah digunakan, dan amat
dalam mendesain sebuah komputer menyenangkan jika dilihat.
adalah sebagai berikut: Aliran

2
 
Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

1.2. Perangkat Keras Komputer


Komputer merupakan sebuah perkalian maupun pembagian. Hasil
mesin yang bekerja untuk manipulasi angka tersebut ditunjukan
memproses, menyimpan, serta dalam bentuk gambar pada monitor
mendapatkan data. Data-data serta deretan angka-angka pada
tersebut berupa angka, karakter, titik memori video, dimana masing-
warna, gelombang bunyi atau suatu masing angka atau sejumlah angka
kondisi sebuah sistem, seperti akan mewakili suatu pixel warna.
pendingin atau CD player. Semua Untuk memainkan sebuah MP3,
data disimpan dalam bentuk angka- komputer akan membaca deretan
angka. angka-angka dari disk dan
Angka tersebut dalam bentuk memindahkannya kedalam memori.
bilangan biner yang diwakili oleh Selanjutnya komputer menggerakkan
angka 1 dan 0 yang sering disebut angka-angka tersebut untuk
bit. Supaya mudah dalam dikonversi menjadi data audio yang
mengingatnya, maka komputer dimampatkan. Dan yang terakhir
mengelompokan data biner tersebut adalah data audio yang dimampatkan
menjadi nible, byte dan word. tersebut akan dikirim ke chip audio.
Dengan mengelompokan tersebut, Semua hal yang dikerjakan oleh
selain mudah diingat, juga akan komputer, mulai dari web browsing
memudahkan pengguna dalam sampai mencetak, melibatkan
menuliskan sebuah program berupa perpindahan dan pemprosesan
kode yang dimengerti oleh mesin, angka. Secara elektronis komputer
merancang sebuah struktur data dan tak lain hanya suatu sistem atau
algoritma yang komplek. benda yang hanya dirancang untuk
Komputer memanipulasi data menyimpan, dan memindahkan,
dengan melakukan operasi, baik menggerakkan, serta merubah
penjumlahan, pengurangan, angka-angka.

3
 
Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

Gambar 1.1. Bagian-bagian komputer

Komputer terdiri dari beberapa menyimpan program ketika prosesor


komponen, yang secara garis besar sedang bekerja. Komputer juga
dibagi menjadi dua yaitu: berupa mempunyai piranti untuk
perangkat keras dan perangkat menyimpanan dan mempertukarkan
lunak. Komponen utama pada data dengan dunia luar atau yang
perangkat keras, terletak pada pusat sering disebut I/O.
komputer adalah prosesor, prosesor Piranti I/O akan mempertukarkan
ini berfungsi mengeksekusi program data, seperti: masukan teks melalui
komputer. keyboard serta mendisplaykannya
Selain prosesor, komputer juga pada layar monitor. I/O juga
mempunyai memori. Dalam sebuah digunakan untuk memindahkan data
komputer biasanya terdapat maupun program ke atau dari suatu
beberapa memori yang berbeda- disk drive, modem, printer, mouse
beda. Memori ini digunakan untuk dan lain-lain.

4
 
Da
asar-dasar Pemro
ograman Kompu
uter Bahasa Pemro
orgraman

Ga
ambar. 1.2. Perangkat
P K
Keras Sebuah Sistem Ko
omputer

Perangkaat lunak me engendalikann dalam komputer. Secara umum


fungsi dan opperasi sebuaah komputerr. lapisan akan saling berhubbungan
Adda beberaapa lapisan (layerr) dengan layer diatas atau
peerangkat lun
nak yang digunakan di dibawahhnya.

Gamb
bar. 1.3. Lap
pisan Perang
gkat Lunak

Pada perrangkat luna


ak tingkatan
n Perangkkat lunak ini mela akukan
ya
ang paling reendah, peraangkat lunakk inisialisa
asi perangkkat keras sistem
dijjalankan oleh
o proseesor ketikaa tersebutt untuk me engetahui kondisi
k
ko
omputer pertama kali dihidupkan. dan mengatur komp puter pada operasi
o
5
 
Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

yang benar. Perangkat lunak ini aplikasi dan mengakses file memori
bersifat permanen dan disimpan luar seperti Compact Disk (CD).
dalam memori komputer. Perangkat Sistem operasi, secara umum
lunak inilah yang dikenal sebagai menyediakan satu set tool untuk
firmware program aplikasi, melakukan suatu
Firmware digunakan untuk mekanisme pengaksesan monitor,
meletakan program bootloader. disk drive, dan seterusnya.
Bootloader adalah sebuah program Kenyataan dilapangan sebuah
khusus dan dijalankan oleh prosesor komputer tidak semua menggunakan
ketika membaca sistem operasi dari sistem operasi. Sering juga komputer
disk atau memori nonvolatile yang bersifat sangat sederhana dan
kemudian menempatkannya di dalam langsung menjalankan tugasnya.
memori. Bootloader biasanya dimiliki Pada permasalahan tertentu, seperti
komputer desktop dan workstation. router jaringan, perangkat lunaknya
Lapisan perangkat lunak diatas terintegrasi dan sangat sederhana
firmware, adalah sistem operasi. proses pengembangan.
Perangkat lunak ini berfungsi Perangkat lunak pada lapisan
mengendalikan operasi komputer, paling tinggi adalah perangkat lunak
mengorganisir penggunaan memori aplikasi yang merupakan program
dan mengendalikan peralatan seperti yang langsung berhubungan dengan
keyboard, mouse, monitor, disk drive, kemampuan sebuah komputer.
dan sebagainya. Sistem operasi juga Kemampuan sebuah komputer
memberikan fsilitas kepada user sangat tergantung pada aplikasi
untuk melakukan antarmuka dengan perangkat lunak sistem.
piranti lain, menjalankan program

1.3. Arsitektur Komputer


Sebuah prosesor atau yang Mikroprosesor adalah suatu
sering disebut dengan central pengolah yang dibentuk oleh sebuah
Procesing Unit (CPU) pada sebuah chip tunggal atau sering disebut
komputer tidak bisa bekerja sendiri integrated circuit. Mikroprosesor ini
dalam melakukan kerja sebagai sering ditemukan pada sebuah
pemroses. CPU memerlukan superkomputer, komputer PC, atau
komponen-komponen pendukung sekarang ini hampir semua pengolah
seperti memori untuk menyimpan data modern adalah mikroprosesor.
data dan program, serta piranti I/O Mikroprosesor yang paling
(Input/Output) yang digunakan untuk banyak digunakan saat ini adalah:
memindahkan data antara komputer seri Intel Pentium, Freescale/IBM
dan dunia luar. PowerPC, MIPS, ARM, and the Sun
Selain itu juga komputer SPARC, dan lain-lain.
memerlukan clock (detak) sebagai Blok diagram sebuah sistem
penggerak prosesor dalam komputer dapat ditunjukkan pada
memproses data. Gambar dibawah.

6
 
Da
asar-dasar Pemro
ograman Kompu
uter Bahasa Pemro
orgraman

Gambarr. 1.4. Diagra


am blok siste
em kompute
er

Pada gambar dia agram blokk instrukssi ataupu


un berupa data.
se
ebuah siste em kompu uter diatas, Instrukssi diambil dan dibaca a dari
memori berisi instruksi da
an bersama-- memori menuju pro osesor, sedaangkan
sa
ama proses sor melaksa anakan dann data dibaca dari dan dituliss oleh
menggerakkan data. Me emori suatu
u proseso or ke memori,
m haal ini
sisstem kompu
uter tidak pernah kosong
g ditunjukkan pada gambar
g dib
bawah:
da
an selalu terisi apakkah berupa a

Gambar.1..5. Aliran Da
ata pada seb
buah Kompu
uter

7
 
Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

Bentuk aliran data arsitektur Pada komputer arsitektur Von


komputer tersebut diatas dikenal Neumann langkah-langkahnya diatur
dengan arsitektur Von Neumann, oleh kendali suatu program. Dengan
dimana nama tersebut diambil dari kata lain, komputer mengikuti suatu
penemunya yaitu: Yohanes Von langkah-langkah program yang
Neumann. Hampir semua komputer memerintahkan operasinya.
modern sekarang ini mengikuti format
arsitektur ini.

1.3.1. Central Processing Unit (CPU)


CPU atau yang sering disebut adalah sesuatu yang mendasari
prosesor merupakan bagian sebuah program.
terpenting pada sebuah komputer. Instruksi pada sebuah komputer
Dalam sistem komputer, prosesor adalah berupa angka-angka. Angka
menjadi bagian yang menjalankan yang berbeda, ketika dibaca dan
komputasi dari komputer tersebut. yang dieksekusi oleh suatu prosesor,
Prosesor adalah suatu piranti akan menyebabkan sesuatu hal yang
elektronik yang mampu melakukan berbeda pula. Instruksi pada sebuah
manipulasi data dengan cara yang mesin menyesuaikan dengan
disesuaikan oleh suatu urutan machine code yang sesuai, ini artinya
instruksi. Instruksi tersebut berfungsi bahwa setiap prosesor mempunyai
sebagai opcode atau kode mesin. instruksi masing-masing sesuai
Urutan instruksi ini dapat diubah dan industri yang memproduksinya. Suatu
disesuaikan dengan aplikasi, hal ini instruksi yang berbeda mempunyai
dikarenakan sifat komputer yang arti bahwa mesin yang diprogram
programmable. Urutan instruksi juga berbeda.

1.3.2. Memori
Memori digunakan untuk diputus, dan jenis memori ini sering
menyimpan perangkat lunak yang disebut dengan Volatail memory.
berupa data maupun obcode sebuah Kedua jenis memori tersebut
prosesor. Memori dapat mempunyai kelebihan serta
dikategorikan menjadi memori yang kelemahan masing-masing, sehingga
dapat menyimpan data secara penggunaannyapun disesuaikan
permanen walaupun listrik yang dengan kebutuhan masing-masing.
mengalir pada memori tersebut Memori diimplementasikan
diputus dan memori ini sering disebut dalam bentuk chip yang didalamnya
Nonvolatail memory (tidak mudah berisi ribuan komponen elektronika.
berubah isinya), dan memori yang Memori ini dapat digambarkan dalam
bersifat sementara atau data yang blok diagram seperti gambar
disimpan dalam memori tersebut dibawah:
akan hilang jika listrik yang mengalir

8
 
Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

Gambar. 1.6. Memori 8 bit data x 10 bit alamat

Gambar tersebut diatas adalah lokasi memori, dimana banyaknya


memori yang terdiri dari bus alamat lokasi pada tiap blok memori adalah
yang dikodekan dengan A0 – A9. Bus 2n,, jika n = 10 maka jumlah lokasi
alamat ini bersifat satu arah yaitu memori yang mungkin adalah 210 =
sebagai masukan sja. Selain bus 1024 bit.
alamat terdapat juga bus data Setiap bit data tersimpan dalam
sebanyak 8 bit yang bersifat dua arah memori dalam bentuk biner 0 atau 1.
sebagai masukan maupun keluaran. Jika banyaknya lokasi dikalikan
Bus yang dimiliki memori selain dengan jumlah banyaknya bit dalam
bus alamat dan data adalah bus tiap lokasi, untuk 10 alamat bit maka
kendali. Bus alamat digunakan untuk akan memperoleh kapasistas memori
memilih data yang disimpan pada 1024x8 bit.

1.3.2.1. Random Access Memory (RAM)


RAM adalah memori yang dapat harus ditulis kembali setiap beberapa
diakses secara Acak. Nama ini waktu tertentu, walaupun ada RAM
sebenarnya sebenarnya kurang Nonvolatile khusus yang
tepat, karena kebanyakan memori mengintegrasikan battery backup
komputer dapat diproses secara pada sistem.
akses acak. RAM menjadi memori RAM dapat dikategorikan
aktif didalam sistem komputer, menjadi dua yaitu: RAM statis yang
dimana CPU dapat dengan mudah sering dikenal sebagai SRAM dan
menulis data pada memori jenis ini. RAM dinamik yang sering dikenal
Data pada memori RAM mudah sebagai DRAM. RAM statis
hilang, jika aliran listriknya terputus. menggunakan gerbang logika yang
Informasi apapun yang disimpan berpasangan untuk menjaga
didalam RAM harus ditahan atau masing-masing bit data. SRAM

9
 
Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

mempunyai keuntungan mempunyai DRAM menggunakan kapasitor


proses yang lebih cepat dan mudah sebagai komponen utamanya untuk
digunakan, memerlukan rangkaian mempertahankan data tiap-tiap bit.
pendukung eksternal yang sedikit, Deretan kapasitor akan menjaga data
dan dengan konsumsi daya yang hanya dalam waktu yang sangat
relatif rendah. Kelemahan SRAM pendek, selanjutnya data tersebut
adalah pada kapasitas memori akan hilang sesuai dengan sifat
SRAM sangat kecil dibandingkan kapasitor.
DRAM, serta teknologinya jauh lebih DRAM memerlukan penyegaran
mahal. berlanjut, tiap-tiap penyegaran
Dengan kapasitas SRAM yang tersebut sedikitnya seperseribu detik.
rendah, memerlukan lebih banyak Penyegaran ini dilakukan secara
chip untuk digunakan pada terus-menerus. Penyegaran tersebut
penerapan yang sama. Pada memerlukan komponen pendukung
rancangan PC modern penggunaan tambahan yaitu komponen eksternal.
SRAM hanya pada mesin yang DRAM mempunyai kelebihan yaitu
membutuhkan kinerja yang sangat dapat mempuyai kapasitas yang
cepat seperti pada Cache Memory tinggi.
Prosesor.

1.3.2.2. Read Only Memory (ROM)


Read Only Memory (ROM) burning ROM. Pengisian data ini
adalah memori yang hanya dapat dilakukan dengan mengubah data
dibaca saja. ROM bersifat Nonvolatile yang berada dalam ROM yang
memory, karena memori ini dapat semuanya berupa data 1 dengan
mempertahankan muatannya. ROM menciptakan data nol pada
biasanya lebih lambat dibanding penempatan bit. Suatu piranti yang
RAM, dan sangat lebih lambat digunakan untuk memindahkan data
dibanding RAM statis. disebut ROM downloader atau sering
Fungsi ROM yang utama di juga disebut dengan ROM
dalam suatu sistem adalah menjaga Programmer.
kode atau data yang diperlukan, ROM biasanya disebut juga
seperti untuk inisialisasi pada saat dengan One Time Programmable
start. Perangkat lunak tersebut (OTP), karena sesuai namanya
biasanya dikenal sebagai firmware. ROM yang hanya bisa dibaca saja.
Firmware berisi perangkat lunak Pada Industri komputer ROM
inisialisasi komputer dan penempatan biasanya digunakan sebagai
sarana Input/Output (I/O) ke dalam firmware. Mask Programmable ROM
suatu status yang dapat dikenal. juga merupakan ROM yang hanya
Standard ROM dibuat oleh suatu sekali diprogram, tetapi tidak sama
deretan diode yang sangat banyak. dengan OTP, karena Mask
Ketika datanya kosong, semua data Programmable ROM diprogram oleh
ROM dalam kondisi berlogika 1, ini industri pembuatnya sebelum
artinya data ROM pada 8 bit adalah dipasarkan. Sedangkan OTP
0FFH. Ketika mengisikan data biasanya diprogram oleh pengguna
kedalam ROM sering dikenal dengan sesuai dengan keinginan dan setelah
10
 
Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

diprogram tidak bisa diprogram ulang.

1.3.2.3. Erasable Read Only Memory (EPROM)


OTP ROM mempunyai sifat EPROM banyak digunakan
hanya diprogram sekali, dan hal ini dalam pengembangan sistem karena
menyebabkan pemborosan karena kepraktisanya serta lebih hemat
jika data telah dimasukan dalam OTP dibandingkan dengan OTP ROM.
ROM dan terdapat kesalahan tidak Biasanya OTP ROM dan EPROM
bisa dihapus lagi, dan harus ganti mempunyai kapasitas yang sangat
dengan yang baru serta yang lama kecil dibandingkan dengan kapasitas
harus dibuang. Hal ini jelas memori yang ada sekarang ini.
merupakan kelemahan dari ROM Kapasitas ini biasanya hanya
tersebut. Dengan demikian perlu beberapa kilobyte saja, tetapi
adanya ROM yang baru yang bisa walaupun begitu memori ini tetap
diprogram ulang, jika data yang digunakan pada berbagai peralatan
dimasukan dalam ROM terdapat tertentu, hal ini dikarenakan berbagai
kesalahan. pertimbangan yang tidak mungkin
ROM yang muncul setelah OTP digantikan oleh memori jenis lain.
ROM adalah jenis ROM yang Kelemahan jenis memori
Erasable Read Only Memory yang EPROM ini adalah bahwa chip harus
sering disebut dengan EPROM. ROM dipindahkan dari rangkaian ketika
ini sangat cocok untuk akan melakukan penghapusan data
pengembangan sistem. Cara yang ada didalamnya. Selain itu
menghapus data yang berada dalam dalam melakukan hapus,
EPROM adalah dengan memberikan memerlukan waktu beberapa menit.
cahaya ultraungu melalui jendela Dalam melakukan penulisan program
kecil yang terdapat pada chip dengan ke dalam chip juga harus
waktu tertentu. Setelah berapa saat memindahkannya ke memori
data yang berada dalam chip EPROM programer. Hal tersebut
tersebut akan terhapus dan menjadi jelas sangat menyulitkan dan
data berlogika tinggi semua. memakan waktu, sehingga dengan
Setelah data yang berada pada munculnya teknologi memori
EPROM terhapus memungkinkan sekarang ini, jenis EPROM mulai
untuk dapat memprogram kembali. ditinggalkan dan jarang digunakan.

1.3.2.4. Electrically Erasable ROM (EEROM)


EEROM adalah memori yang sehingga menjadi sangat praktis dan
dapat dihapus/tulis secara elektris, effisien.
atau Electrically Erasable Pemrograman dan penghapusan
Programmable Read Only Memory data pada EEPROM dapat dilakukan
dan sering dikenal dengan sebutan dengan cepat dibandingkan dengan
sebagai EEPROM. EEPROM dapat memori ROM sebelumnya. Hal inilah
dihapus dan ditulis ulang dengan yang membuat alasan mengapa
tidak perlu dilepas dari rangkaiannya, EEPROM berkembang pesat.

11
 
Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

Kapasitas memori EEPROM digunakan untuk menyimpan


biasanya hanya beberapa kilobyte informasi atau data sistem, sehingga
saja. Memori ini tidak cocok sebagai ketika listrik terputus, datanya tidak
firmware, biasanya memori ini akan hilang.

1.3.2.5. Memori Flash


Flash merupakan teknologi ROM Flash memori secara umum
yang terbaru, dan sekarang ini paling diatur menjadi beberapa sektor
banyak digunakan. Flash Memori memori, dan hal ini akan
merupakan EEROM yang dapat menguntungkan, karena pada tiap-
ditulis dan hapus ulang berkali-kali. tiap sektor memungkinkan dihapus
Flash memori mempunyai kapasitas dan ditulis ulang tanpa
yang sangat besar diatas ROM mempengaruhi isi sektor lain.
standard. Hal yang khusus pada flash
Flash Chip ini sering juga dikenal memori adalah sebelum ditulisi,
sebagai flash ROM atau Flash RAM. sektor akan dihapus terlebih dahulu,
Karena ROM tersebut tidak seperti sehingga hal tersebut tidak akan
standard ROM atau standard RAM terjadi overwrite seperti pada RAM.
sebelumnya, maka hal tersebut dapat Ada beberapa perbedaan-
juga disebut dengan flash saja untuk perbedaan teknologi flash terutama
menghindari kekacauan penyebutan pada penghapusan dan penulisan
antara RAM dan ROM sebelumnya. yang dibutuhkan oleh piranti tersebut.

1.3.3. Input/Output
Dalam sebuah komputer, piranti tersebut terdapat piranti
prosesor dan memori berhubungan perekaman informasi berbentuk disk
dengan berbagai piranti luar yang atau disket. Piranti tersebut sering
dihubungkannya. Karena berbagai dikenal dengan pheriperal. Biasanya
piranti tersebut merupakan suatu peripheral dibuat oleh berbagai
yang ditambahkan dengan prosesor, perusahaan untuk berbagai
maka piranti tersebut sering dikenal kegunaan.
sebagai piranti peripheral. Piranti Pada piranti tertentu, bagian
tersebut melakukan komunikasi sistem pengelolaan piranti itu dibuat
dengan prosesor yang diatur juga oleh perusahaan pembuat
melalui protocol tertentu. piranti bersangkutan. Tentunya
Selanjutnya, berbagai piranti tersebut pembuatan bagian sistem operasi
memerlukan pengaturan yang dalam pengelolaan piranti itu telah
hal ini dilakukan oleh sistem operasi. disesuaikan dengan sistem operasi
Sesuai dengan arah yang pada umumnya ada di dalam
penyalurannya, dalam komputer sistem komputer.
dikenal sebagai piranti Input Bagian sistem operasi untuk
(masukan), piranti output (keluaran), pengelolaan piranti peripheral itu
dan piranti input output (masukan secara khusus, diatur oleh
keluaran). Diantara berbagai jenis pengendali piranti secara umum,

12
 
Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

diatur oleh piranti lunak pengatur penggerak piranti, serta kelima


piranti (driver). adalah protocol transfer data bebas
Arah komunikasi masukan piranti.
keluaran bersangkutan dengan Kerjasama antara penggerak
alamat. Mereka menunjukan dari piranti dengan protocol transfer data
alamat mana ke alamat mana, memungkinkan prosesor
masukkan dan keluaran itu mengendalikan piranti peripheral.
mengarah. Masuk ke suatu alamat Biasanya, pengendali piranti telah
dapat berarti keluar dari alamat disiapkan oleh perusahaan pembuat
yang lain, dan demikian pula piranti peripheral serta disesuaikan
sebaliknya. dengan sistem komputer dimana
Dalam hal ini prosesor dijadikan piranti peripheral itu dipasang.
sebagai alamat acuan untuk masuk Adakalanya, bersama-sama dengan
atau keluar. Masukan berarti masuk piranti penghubung lainnya,
menuju prosesor atau menuju piranti pengendali piranti terpasang pada
yang sedang dikelola oleh prosesor. kartu antar muka (interface card).
Keluaran artinya keluar dari prosesor Dengan memasang kartu antar muka
atau dari piranti yang sedang dikelola ke sistem komputer, maka telah
oleh prosesor. Dengan demikian, dapat memasang juga pengendali
dapat dinamakan sebagai suatu piranti yang siap diperintah oleh
piranti masukan manakala piranti itu pengendali aplikasi atau oleh
memasukan informasi ke prosesor pemakai komputer.
atau memori kerja. Cara serupa, Biasanya piranti peripheral
dapat dinamakan sebagai piranti terdiri atas bagian mekanik dan
keluaran manakala piranti itu bagian elektronika. Kalau bagian
menerima informasi dari prosesor mekanik adalah piranti peripheral itu
atau memori kerja. sendiri, maka bagian elektronika
Selain tahu dimana saja letak yang mengatur kerja piranti mekanik
peripheral, prosesor juga harus dapat itu, atau biasanya dinamakan
mengendalikan piranti peripheral itu. penggerak piranti (device controller)
Pengendalian itu terdiri atas dua atau adapter. Dengan demikian,
bagian. Bagian pertama adalah pada sejumlah piranti yang memiliki
pengaturan perangkat keras yang penggerak piranti tersebut berbentuk
berupa penggerak piranti (device rangkaian elektronika. Bahkan
controller) serta bagian kedua adalah dalam banyak hal, rangkaian
pengaturan perangkat lunak berupa elektronika itu disusun dalam suatu
protocol transfer data (data transfer papan rangkaian tercetak (printed
protocol). circuit). Dengan adanya rangkaian
Protocol transfer data dikenal ini, maka sistem operasi selalu
ada lima macam protocol data. berurusan dengan penggerak piranti
Pertama adalah protocol transfer serta tidak berurusan langsung
data pengendali, kedua adalah dengan pirantinya.
protocol transfer data serta Salah satu sebab mengapa
pengendali dengan interupsi, ketiga sistem operasi selalu berhubungan
adalah protocol transfer data dengan dengan penggerak piranti dan tidak
akses memori langsung , keempat dengan piranti itu sendiri, adalah
adalah protocol transfer data dengan karena pada umumnya, piranti
13
 
Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

perangkat keras merupakan piranti dengan melalui sebuah protocol


yang cukup kasar. Penggunaan transfer data pengendali. Protocol ini
piranti memerlukan kegiatan yang dikenal juga sebagai programmed
cukup rumit sehingga dengan data transfer protocol. Sesuai dengan
membebankan kerumitan iti pada namanya, pada protokol ini, transfer
penggerak piranti, sistem operasi data diatur oleh pengendali. Pada
tidak perlu terjun ke dalam kerumitan saat data akan ditransfer dari
itu. prosesor kepiranti atau dari piranti ke
Setiap penggerak piranti memiliki prosesor, pengendali membuat
register untuk mencatat data serta sehingga semua permohonan
melalui bus, penggerak piranti interupsi diabaikan. Setelah itu,
berhubungan dengan prosesor. transfer data dilaksanakan.
Dengan register tersebut, penggerak Dengan demikian, pada protocol
piranti memonitor status piranti, tersebut, tidak dapat mengenal
mengendalikan pengendali piranti interupsi melalui permintaan. Sekali
pada motor, melaksanakan transfer data dilaksanakan, maka
pemeriksaan data serta mengetahui pelaksanaan akan berlangsung
format data dari piranti. Selanjutnya, sampai selesai, kecuali tentunya
penggerak diperlukan untuk kalau muncul interupsi dan jenis
mengubah perintah prosesor ke interupsi yang tak terabaikan.
dalam pulsa listrik yang sepadan Protokol transfer data pengendali ini
untuk diterapkan kepiranti. sering memanfaatkan pustaka
Sebaliknya, penggerak piranti juga (library) dan spool (simultameous
mengubah informasi tentang status peripheral operation on line). Pada
piranti ke dalam bentuk yang dapat pustaka, dapat dilakukan
dipahami oleh prosesor. pemanggilan rutin masukan keluaran
Dengan demikian, penggerak tertentu dan bahkan dapat mengatur
piranti menggerakkan piranti secara format masukan keluaran itu. Pada
elektronika. Pada piranti perekam spool, dapat dilakukan pengaturan
berbentuk disk atau disket, piranti yang tak dapat dipakai
penggerak piranti mengatur bersama yakni piranti seperti
pemutaran disk atau disket itu melalui pencetak atau panel kunci ketik.
motor listrik serta mengatur pula Protokol transfer data
gerakan head tulis baca (read write pengendali dengan interupsi.
head) pada disk atau disket itu. Pada Protokol ini juga dikenal dengan
pencetak, penggerak piranti nama programmed interrupt data
melaksanakan gerakan head cetak transfer protocol. Sesuai dengan
sesuai dengan arah yang ditentukan. namanya, protocol ini masih
Dan demikian seterusnya, penggerak mengenal interupsi melalui
piranti menggerakan piranti permintaan. Dengan demikian, setiap
peripheral yang bersangkutan terjadi interupsi, maka interupsi itu
dengan penggerak piranti itu. dilayani. Pada saat itu, transfer data
Setelah piranti itu digerakan oleh terputus, untuk kemudian
penggerak piranti, maka kerja piranti dilanjutkan lagi setelah interupsi
itu selanjutnya perlu diatur melalui selesai. Selama tiada interupsi, maka
suatu pengendali atau subrutin. transfer data dapat terus
Salah satu cara pengaturan adalah
14
 
Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

berlangsung, sampai pada saat Protokol transfer data dengan


transfer data itu selesai. penggerak piranti. Penggerak piranti
Dengan menerima interupsi, juga dikenal sebagai devide driver.
maka proses yang tadinya sudah Penggerak piranti ini berbentuk
terhenti, kini memiliki peluang piranti lunak yang menghubungkan
melanjutkan kembali. cara prosesor dengan alat, tentunya
melanjutkan proses yang sudah melalui penggerak alat. Bahkan
terhenti itu adalah melalui interupsi. register pada penggerak alat
Protokol transfer data dengan akses dimanfaatkan oleh penggerak alat
memori langsung (direct memory untuk menyalurkan informasi dari
access) merupakan suatu proses prosesor kealat dan demikian pula
yang cukup rumit. Mula-mula sebaliknya.
penggerak piranti membaca data di Dalam keadaan tertentu, satu
dalam blok secara berurutan. Setelah alat dapat berhubungan dengan
itu, penggerak piranti perlu beberapa penggerak piranti sejenis.
memeriksa apakah data yang dibaca Satu piranti disk atau disket, misalnya
itu tidak mengandung kekeliruan. Jika dapat berhubungan dengan satu atau
tidak terdapat kekeliruan, maka lebih penggerak piranti disk atau
prosesor akan membaca semua data disket. Pada saat kegiatan,
dari atau ke memori kerja melalui penggerakan piranti berbentuk
penampung (buffer). Karena prosesor proses yang mengendalikan kerja
harus terlihat dalam pembacaan piranti peripheral. Di antaranya,
data, maka selama pembacaan dan proses tersebut menerima
penulisan itu berlangsung, prosesor permintaan piranti masukan keluaran
tidak dapat mengerjakan pekerjaan (ada kalanya berbentuk suatu
lain. Untuk membebaskan prosesor antrian), memulai kerja masukan
dari aktifitas ini, maka diciptakan keluaran, menata kekeliruan umum
penggerak yang dapat mendukung pada penyaluran informasi,
protocol transfer data akses memori melaksanakan interupsi, serta
langsung (direct memory access). mengirim berita selesai kembali ke
Pada protokol ini, prosesor proses.
diinterupsi pada saat transfer data Ada yang mengatakan bahwa
dimulai. Setelah itu, prosesor tidak tugas utama proses pada penggerak
lagi ikut mencampuri kegiatan piranti mencakup mencegah
transfer data itu. Kemudian, pada permintaan dari satu proses,
saat transfer data selesai, barulah melaksanakan kerja tertentu pada
prosesor diinterupsi sekali lagi. prose situ, serta memberitahukan
Dengan demikian, di antara saat awal proses yang meminta itu tentang
dan saat akhir transfer data itu, hasil kerja yang telah terlaksana.
prosesor dapat melaksanakan Proses yang meminta itu adalah
pekerjaan lain. proses umum yang tidak tergantung
Karena protocol transfer data kepada piranti (tidak khas piranti
melalui akses memori ini tertentu). Dengan demikian,
membebaskan prosesor untuk penggerak piranti menerima perintah
melaksanakan pekerjaan lain, maka umum serta melaksnakan perintah iti
protocol ini lebih unggul dari kedua pada piranti peripheral.
protocol lainnya.
15
 
Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

Rincian dari proses itu sendiri Penggerak piranti bekerja sama


berbeda dari piranti menuju alat, secara erat dengan penggerak
misal, penggerak disk (disk driver) piranti. Karena itu, ada orang yang
merupakan bagian satu-satunya menamakan kedua-duanya sebagai
pada sistem operasi yang penggerak piranti saja (device
mengetahui berapa register yang controller) atau sebagai penggerak
dimiliki oleh penggerak disk serta apa piranti (device driver) saja. Di sini,
gunanya register itu. Pelaksana disk mereka tetap kita pisahkan yakni
itu adalah satu-satunya yang sebagai penggerak piranti dan
mengetahui seluk beluk sector, lintas sebagai penggerak piranti,
(track), silinder, hulu, gerak tangkai sedangkan secara bersama-sama,
hulu, factor seling (interleave), waktu mereka kita namakan sebagai
pengaturan hulu, serta segala pengendali piranti.
sesuatu yang dapat membuat disk itu
bekerja secara benar.

1.4. Kerja Komputer


Komputer yang merupakan Data-data yang biasa dijumpai
mesin penghitung sekarang ini mesin sehari-hari memiliki banyak bentuk,
tersebut banyak dipakai untuk antara lain: suara, huruf, angka, dan
pemroses data. Fungsinya sangat karakter lain (tulisan tangan atau
sederhana yaitu digunakan untuk dicetak), foto, gambar, film dan lain
memproses data, kemudian hasil sebagainya. Suatu sistem yang dapat
prosesnya diselesaikan secara memproses nilai yang kontinyu
elektronis didalam Central berbanding terhadap waktu
Processing Unit (CPU) dan dinamakan sistem analog. Pada
komponen lainnya yang menyusun sistem analog, nilainya biasa diwakili
sebuah komputer personal. oleh tegangan, arus dan kecepatan.
Suatu sinyal yang dikirimkan dari Berikut ini adalah gambar grafik nilai
suatu pemancar (transmitter) ke tegangan analog terhadap waktu.
penerima (receiver) untuk
berkomunikasi adalah berupa data.

16
 
Da
asar-dasar Pemro
ograman Kompu
uter Bahasa Pemro
orgraman

Gam
mbar 1.7 Gra
afik Nilai Teg
gangan Analog Terhada
ap Waktu

Sistem yang
y memp proses nilaai menggu unakan An nalog to Digital
disskrit (langgkah demi langkah) Convertter (ADC). ADC men ngubah
dinnamakan diggital. Pada sistem
s digita
al sinyal kontinyu
k menjadi sinyal diskrit
un
ntuk menu unjukkan suatu
s nila
ai dengan menyampllingnya tiap p detik
diggunakan simbol yang dinamakan n (tiap satuan
s waaktu). Perhhatikan
diggit. Sinyal pada gam mbar diatass gambarr dibawah inii.
da
apat “didigitalkan” dengann

Gambar 1.8. Sinyyal Diskrit Dengan Penyyamplingan Tiap


T Detik

Komputerr adalah
h sebuah
h direpressentasikan oleh
o sinyal listrik.
pe
erangkat elektronik.
e Data yangg Sinyal yang d
digunakan bisa
da
apat diolah
h adalah data yang g dianaloggikan denggan saklar listrik,
17
 
Ba
ahasa Pemrogram
man Dasar-dasarr Pemrograman Komputer
K

ya
aitu tombol off (matii) atau on n hidup, maka kom mputer membaca
(hidup). Jika saklar pada
a kondisi offf, sebagaii angka 1. Perhatikan
P g
gambar
maka kompu uter memba aca sebaga ai berikut:
da
ata 0, jika saklar dalam kondissi

Gambar 1.9
9. Saklar Dalam Kondisi Hidup Dan Mati

Sebuah komputer terdiri darri Settiap angka 0 dan 1 biasa


saaklar-saklar yang banya ak jumlahnya
a disebut Bit. Bit ada
alah singkata
an dari
saaklar-saklar ini menggunakan n Binary Digit.
D Kata Binary
B diambil dari
koomponen elektronikk berupaa nama Sistem
S Bilan
ngan Biner (Binary
(
tra
ansistor. Ju umlah transistor yang g Numberr Sistem). Tabel dibawah
diggunakan bisab samp pai jutaan, berikut menunjukka
m an tentang biit:
seehingga dapat memprosses data darri
juttaan angka 0 dan 1.

Tabel 1.1 Bilangan Biiner dengan besar bit da


ata

0 1 bit 
1
1 1
1 bit 
0110 4
4 bit 
10011101 8
8 bit 

Sistem bilangan
b bin
ner disusun
n Pen
ngolahan data
d yang paling
da
ari angka-a angka, sam ma sepertti sering digunakan saat ini adalah
sisstem bilan ngan desim mal (sistemm pengolaah kata (w word processsing)..
billangan 10) yang sering g digunakan
n Ketika melakukan
m suatu pengolahan
sa
aat ini. Tetapi
T untuuk desima al kata, komputer bekerja dengan d
menggunakan n angka 0 sampai 9, keyboarrd. Ada 101 tombol yang
sisstem bila
angan bin
ner hanya
a mewakili karakter alphabet
a A, B, C,
menggunakan n angka 0 daan 1. dan setterusnya. Se
elain itu juga
a akan

1
18
 
Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

ditemui karakter angka 0 sampai dapat diwakili, sehingga pada 8 bit


dengan 9, dan karakter-karakter lain biner, dapat mewakili 28=256
yang diperlukan, antara lain: , . - ; ( ) : kombinasi maksimal.
_?!"#*%&. Ketika mengetik kata “digital”
Seluruh karakter yang ada pada simbol yang digunakan adalah 6
keyboard harus didigitalkan. huruf, saat komputer mengolahnya, 6
Karakter-karakter tersebut diwakili huruf tersebut didigitalkan menjadi 6
oleh angka-angka 0 dan 1. Bit yang bytes, yang kemudian disimpan pada
digunakan adalah 8 bit biner. 8 bit RAM komputer saat mengetik, dan
biner dinamakan Byte. kemudian disimpan pada harddisk,
Pada sistem bilangan biner, jika disimpan. Tabel seperti dibawah
banyaknya kombinasi dihitung menunjukkan perbandingan ukuran
dengan 2n ≤ m, dimana n adalah unit data.
jumlah bit, m adalah kombinasi yang

Tabel 1.2. Perbandingan Ukuran Unit Data

UNIT  DEFINISI  BYTE  BIT  CONTOH APLIKASI 


Bit (b)  Binary Digit, 0 dan 1 1 1 On/Off, buka/tutup 
Byte (B)  8 bit  1 8 Kode ASCII 
Ukuran email biasa = 2 KB 
Kilobyte 
1.024 byte  1000 8000 10 halaman dokumen= 10 
(KB) 
KB 
Megabyte  1.024 kilobyte  Floppy disks = 1,44 MB 
1 juta 8 juta
(MB)  1.048.576 byte  CDROM = 650 MB 
Gigabyte  1.024 megabyte 
1 milyar 8 milyar Hard drive = 40 GB 
(GB)  1.073.741.824 byte 
Data yang dapat dikirim 
Terrabyte 
1.024 gigabyte  1 trilyun 8 trilyun pada fiber optik selama 1 
(TB) 
detik. 

1.5. Sistem Bilangan


Sistem bilangan yang paling sistem digital karena sistem bilangan
umum digunakan adalah sistem ini secara langsung dapat mewakili
bilangan desimal, biner, oktal, dan logika yang ada, sedangkan sistem
heksadesimal. Sistem bilangan bilangan oktal dan heksadesimal
desimal merupakan sistem bilangan biasanya banyak digunakan dalam
yang paling banyak digunakan oleh sistem digital untuk memperpendek
manusia karena berbagai penyajian suatu bilangan yang
kemudahannya untuk dipergunakan tadinya disajikan dalam sistem
sehari-hari. Sistem bilangan biner bilangan biner, sehingga lebih mudah
merupakan sistem bilangan yang dipahami atau dihafalkan.
paling banyak digunakan dalam

19
 
Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

Secara umum bilangan dapat (floating-point number). Dilihat dari


dibagi menjadi beberapa kategori. dari segi tanda, bilangan dapat dibagi
Ditinjau dari segi koma desimal menjadi bilangan tak bertanda
(point), bilangan dapat dibagi menjadi (unsigned number) dan bilangan
bilangan bulat (integer number/fixed- bertanda (signed number).
point number) dan bilangan pecahan

1.5.1. Bilangan Desimal


Sistem bilangan desimal disusun Ciri bilangan yang menggunakan
oleh 10 angka atau lambang. Dengan sistem bilangan desimal adalah
menggunakan lambang-lambang adanya tambahan subskrip des atau
tersebut sebagai digit pada sebuah 10 atau tambahan D di akhir suatu
bilangan, maka akan dapat bilangan.
mengekspresikan suatu kuantitas.
Kesepuluh lambang tersebut adalah: 357des = 35710= 357D. 

D = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }  Namun karena bilangan desimal


sudah menjadi bilangan yang
Sistem bilangan desimal disebut digunakan sehari-hari, subskrip
juga sistem bilangan basis 10 atau tersebut biasanya dihilangkan.
radiks 10 karena mempunyai 10 digit. Sistem bilangan desimal merupakan
Sistem bilangan ini bersifat alamiah sebuah sistem nilai posisi.
karena pada kenyataannya manusia
mempunyai 10 jari. Kata digit itu Bilangan 357. 
sendiri diturunkan dari kata bahasa
Latin finger. Pada bilangan tersebut, digit 3
berarti 3 ratusan, 5 berarti 5 puluhan,
dan 7 berarti 7 satuan. Sehingga, 3
mempunyai arti paling besar di antara
tiga digit yang ada. Digit ini bertindak
sebagai digit paling berarti (Most
Significant Digit, MSD). Sedangkan 7
mempunyai arti paling kecil di antara
tiga digit yang ada dan disebut digit
paling tidak berarti (Least Significant
Digit, LSD).

Bilangan 35,27 

Bilangan ini mempunyai arti 3


puluhan ditambah 5 satuan ditambah
2 per sepuluhan. Koma desimal
memisahkan pangkat positif dari 10
dengan pangkat negatifnya.
Gambar 1.10. Bilangan desimal

20
 
Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

Secara umum dapat dikatakan, nilai


35,2 = 3 X 101 + 5 X 100 + 2 X 10‐1  suatu bilangan desimal merupakan
penjumlahan dari perkalian setiap
digit dengan nilai posisinya.

1.5.2. Bilangan Biner


Sistem sistem digital hanya kode alfanumerik. Format kode ASCII
mengenal dua logika, yaitu 0 dan 1. (American Standard Code for
Logika 0 biasanya mewakili kondisi Information Interchange)
mati dan logika 1 mewakili kondisi menggunakan format data tujuh bit
hidup. Pada sistem bilangan biner, untuk mewakili semua karakter yang
hanya dikenal dua lambang, yaitu 0 ada termasuk tanda baca dan
dan 1. Karena itu, sistem bilangan penanda kontrol. Dengan
biner paling sering digunakan untuk menggunakan format tujuh 7 bit
merepresentasikan kuantitas dan tersebut, maka ASCII dapat
7
mewakili keadaan dalam sistem menanpung 2 = 128 data. Sistem
digital maupun sistem komputer. bilangan biner merupakan sistem
Digit bilangan biner disebut bilangan basis dua. Pada sistem
binary digit atau bit. Empat bit bilangan ini hanya dikenal dua
dinamakan nibble dan delapan bit lambang, yaitu:
dinamakan byte. Sejumlah bit yang
dapat diproses komputer untuk B = { 0, 1 } 
mewakili suatu karakter (dapat
berupa huruf, angka atau lambang Ciri suatu bilangan yang
khusus) dinamakan word. Sebuah menggunakan sistem bilangan biner
komputer dapat memproses data adalah adanya tambahan subskrip
satu word yang terdiri dari 4 sampai bin atau 2 atau tambahan huruf B di
64 bit. Sebagai contoh, sebuah akhir suatu bilangan.
komputer yang menggunakan
mikroprosesor 32 bit dapat 1010011bin = 10100112 = 1010011B. 
menerima, memproses, menyimpan
dan mengirim data atau instruksi Bit paling kiri dari suatu bilangan
dalam format 32 bit. biner bertindak sebagai bit paling
Pada komputer yang digunakan berarti (Most Significant Bit, MSB),
untuk memproses karakter, maka sedangkan bit paling kanan bertindak
karakter (yang meliputi huruf, angka, sebagai bit paling tidak berarti (Least
tanda baca dan karakter kontrol) Significant Bit, LSB).
tersebut harus diformat dalam bentuk

1.5.3. Bilangan Oktal


Sistem bilangan oktal
merupakan sistem bilangan basis
delapan. Pada sistem bilangan ini O = { 0, 1, 2, 3, 4, 5, 6, 7 } 
terdapat delapan lambang, yaitu:

21
 
Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

Ciri suatu bilangan menggunakan tambahan huruf O di akhir suatu


sistem bilangan oktal adalah adanya bilangan.
tambahan subskrip okt atau 8 atau
1161okt = 11618= 1161O 

1.5.4. Bilangan Heksadesimal


Sistem bilangan heksadesimal dan kode yang merepresentasikan
merupakan sistem bilangan basis alfanumerik dan karakter
enambelas. Meskipun operasi pada nonnumerik. Pada sistem bilangan ini
sistem digital dan komputer secara terdapat enam belas lambang, yaitu:
fisik dikerjakan secara biner, namun
untuk merepresentasikan data H = { 0,1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F } 
menggunakan format bilangan
heksadesimal karena format ini lebih Ciri suatu bilangan menggunakan
praktis, mudah dibaca dan sistem bilangan heksadesimal adalah
mempunyai kemungkinan timbul adanya tambahan subskrip heks atau
kesalahan lebih kecil. 16 atau tambahan huruf H di akhir
Penerapan format bilangan suatu bilangan.
heksadesimal banyak digunakan
pada penyajian lokasi memori, 271heks  = 27116  = 271H. 
penyajian isi memori, kode instruksi

1.5.5. Konversi Bilangan


Sistem bilangan dapat dilakukan disingkat baik penulisan maupun
konversi menjadi bilangan yang pembacaannya dalah hal ini
diinginkan. Tujuan konversi ini adalah menggunakan bilangan hexadecimal
untuk menjembatani antara manusia atau oktal. Karena komputer hanya
dan mesin dalam hal ini komputer paham terhadap sat bilangan yaitu
supaya dapat berkomunikasi. biner maka manusia dituntut untuk
Manusia lebih mudah memahami bisa memahami bagaimana konversi
bilangan decimal karena memang antara bilangan-bilangan tersebut.
bilangan decimal merupakan Konversi bilangan biner ke desimal
bilangan yang digunakan manusia dilakukan dengan menjumlahkan
sehari-hari, sedangkan komputer hasil perkalian semua bit biner
bekerja dengan bilangan biner. dengan beratnya.
Komputer yang bekerja dengan
bilangan biner tentunya harus bisa

22
 
Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

Konversi bilangan desimal bulat cara memisahkan antara bagian bulat


ke biner dilakukan dengan membagi dan bagian pecahannya. Konversi
bilangan desimal dengan 2 secara bagian bulat dapat dilakukan seperti
berulang-ulang sehingga akan dapat pada gambar diatas. Sedangkan
diketahui sisa tiap operasi konversi bagian pecahan dilakukan
pembagian. Sisa yang dihasilkan dengan mengalikan pecahan tersebut
setiap pembagian merupakan bit dengan 2, kemudian bagian pecahan
yang didapat. Dengan cara dari hasil perkalian tersebut dikalikan
mengurutkan bit-bit tersebut dari dengan 2. Langkah tersebut diulang-
bawah keatas maka dapat diketahui ulang sehingga mendapatkan hasil
hasil konversi yang telah dilakukan. akhir 0. Bagian bulat dari setiap hasil
perkalian merupakan bit yang
didapat.

Sebuah bilangan desimal real


dapat pula dikonversi ke bilangan
real biner. Konversi dilakukan dengan

23
 
Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

hampir sama dengan konversi


bilangan desimal pecahan ke biner,
yaitu dengan mengalikan suatu
bilangan desimal pecahan dengan 8.
Bagian pecahan dari hasil perkalian
ini dikalikan dengan 8. Langkah ini
diulang hingga didapat hasil akhir 0.
Bagian bulat dari setiap hasil
perkalian merupakan digit yang
didapat.
Konversi bilangan oktal ke biner
lebih mudah dibandingkan dengan
Konversi bilangan oktal ke konversi bilangan oktal ke desimal.
desimal dilakukan dengan Satu digit oktal dikonversi ke 3 bit
menjumlahkan hasil perkalian semua biner.
digit oktal dengan beratnya.

Konversi bilangan bulat desimal


ke oktal dilakukan dengan membagi
secara berulang-ulang suatu bilangan Konversi bilangan biner ke oktal
desimal dengan 8. Sisa setiap lebih mudah dibandingkan konversi
pembagian merupakan digit oktal bilangan desimal ke oktal. Untuk
yang didapat. bagian bulat, kelompokkan setiap tiga
bit biner dari paling kanan, kemudian
konversikan setiap kelompok ke satu
digit oktal. Dan untuk bagian
pecahan, kelompokkan setiap tiga bit
biner dari paling kiri, kemudian
konversikan setiap kelompok ke satu
digit oktal. Proses ini merupakan
kebalikan dari proses konversi
bilangan oktal ke biner.

Konversi bilangan desimal pecahan


ke oktal dilakukan dengan cara

24
 
Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

Konversi bilangan desimal


pecahan ke heksadesimal dilakukan
dengan cara hampir sama dengan
konversi bilangan desimal pecahan
ke biner, yaitu dengan mengalikan
suatu bilangan desimal pecahan
dengan 16. Bagian pecahan dari
Konversi bilangan heksadesimal hasil perkalian ini dikalikan dengan
ke desimal dilakukan dengan 16. Langkah ini diulang hingga
menjumlahkan hasil perkalian semua didapat hasil akhir 0. Bagian bulat
digit heksadesimal dengan beratnya. dari setiap hasil perkalian merupakan
digit yang didapat.

Konversi bilangan desimal bulat


ke heksadesimal dilakukan dengan
membagi secara berulang-ulang
suatu bilangan desimal dengan 16. Konversi bilangan heksadesimal
Sisa setiap pembagian merupakan ke biner lebih mudah dibandingkan
digit heksa-desimal yang didapat. konversi bilangan heksadesimal ke
desimal. Satu digit heksadesimal
dikonversi ke 4 bit.

25
 
Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

271hex = 1001110001bin
Sehingga menjadi 
1  = 0001  1001110001bin 
7  = 0111 
2  = 0010 

Konversi bilangan biner ke Pada bagian bilangan pecahan,


heksadesimal lebih mudah kelompokkan setiap empat bit biner
dibandingkan konversi bilangan dari paling kiri, kemudian konversikan
desimal ke heksadesimal. Untuk setiap kelompok ke satu digit
bagian bulat, kelompokkan setiap heksadesimal. Proses ini merupakan
empat bit biner dari paling kanan, kebalikan dari proses konversi
kemudian konversikan setiap bilangan heksadesimal ke biner.
kelompok ke satu digit heksadesimal.

1001110001bin = 271hex 
Jika dipecah menjadi   
  0001  = 1  271hex 
  0111  = 7 
  0010  = 2 

1.5.6. Data Karakter


Beberapa aplikasi menggunakan Information Interchange) dan
data yang bukan hanya bilangan EBCDIC (Extended Binary Coded
tetapi juga huruf dari alfabet dan Decimal Interchange Code). ASCII
karakter khusus lainnya. Data merupakan kode 7-bit dan EBCDIC
semacam ini disebut dengan data berupa kode 8 bit. Jika suatu
alfanumerik dan mungkin dapat komputer menangani 8-bit (1-byte)
ditunjukkan dengan kode numerik. kode lebih efisien, versi 8-bit, disebut
Jika bilangan-bilangan dimasukkan dengan ASCII-8 juga telah
dalam data, maka bilangan-bilangan dikembangkan.
tersebut juga dapat ditunjukkan Selain itu ada juga beberapa
dengan kode khusus. kode spesial didalam penambahan
Set karakter alfanumerik secara set karakter alfanumerik. Kode
khusus mencakup 26 huruf alfabet simpanan ini digunakan sebagai
(termasuk huruf besar dan huruf signal komunikasi dalam aplikasi
kecil), angka dalam digit sepuluh dimana data transfer terjadi antara
desimal, dan sejumlah simbol seperti komputer yang dihubungkan melalui
+, =, *, $, …, dan !. Dua kode alfabet baris komunikasi. Misalnya, LF (line
yang paling umum dipakai adalah feed) dan CR (carriage return)
ASCII (American Standard Code for dihubungkan dengan printer, BEL

26
 
Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

digunakan untuk mengaktifitaskan EBCDIC’. Di luar ASCII dan EBCDIC,


bell; ACK (acknowledge), NAK besar kemungkinan anda paling tidak
(negative acknowledge), dan DLE pernah mendengar istilah-istilah lain
(data link escape) berupa signal yang seperti berikut ini: ISO-8859-1, UCS-
dapat diubah dalam baris 2, UTF-8, UTF-16, atau windows-
komunikasi. 1252. Kode-kode apakah itu? ASCII,
Orang yang sudah cukup lama EBCDIC, ISO-8859-X, UCS-2, UTF-
berkecimpung di dunia komputer, X, dan windows-x merupakan
pasti pernah bekerja dengan ‘kode sebagian dari kumpulan character set
ASCII’. Dan bagi yang bekerja (set karakter) yang ada di dunia
dengan mesin-mesin mainframe IBM, komputer.
pasti pernah menjumpai ‘kode

1.5.7. Kode BCD


Sebelum ASCII dan EBCDIC harus juga disertakan pada kode
berkembang terlebih dahulu lengkap masing-masing pada grup
dikembangkan Binary Coded Decimal ini.
(BCD). Metode ini awalnya Grup alfabetik kedua adalah J
digunakan pada komputer mainframe hingga R, ditetapkan kode awalnya
IBM. Pada grup ini karakter diwakili 10, yang juga posisi masing-masing
huruf ditentukan oleh angkanya
oleh 64 - ( 26) lambang. Dengan kode
masing-masing. Huruf S hingga Z
ini, setiap huruf/angka diberikan kode dibentuk dengan menambahkan
yang terdiri dari enam bit, dua untuk angka bit 0010 hingga 1001
zone dan empat untuk angka. Huruf berurutan pada kode 01 dimana pada
A sampai dengan I diberikan tanda grup ini hanya ada delapan huruf.
11 pada tempat zone. Karena A Angka-angka 0 hingga sembilan
adalah huruf pertama dalam diberikan kode 00 di depannya diikuti
oleh angka itu sendiri dalam sistim
kelompok ini, maka kodenya adalah:
binary. Angka 0 (nol) harus
0001, B sebagai huruf kedua dengan dibedakan dengan tanda kosong
kode: 0010, C adalah 0011 dan (spasi) guna mempermudah cara
seterusnya. Dengan perkataan lain, penggunaan kode.
zone bit yang mempunyai formasi 11

1.5.8. Kode EBCDIC


Sistim Extended Binary Coded dikodekan pada punch card yang
Decimal Interchange Code (EBCDIC) pada tahun 1960-an masih jamak
merupakan set karakter yang digunakan.
merupakan ciptaan dari IBM. Salah Penggunaan EBCDIC pada
satu penyebab IBM menggunakan mainframe IBM masih terbawa
set karakter di luar ASCII sebagai hingga saat ini, walaupun punch card
standar pada komputer ciptaan IBM sudah tidak digunakan lagi. Seperti
adalah karena EBCDIC lebih mudah halnya ASCII, EBCDIC juga terdiri
27
 
Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

dari 128 karakter yang masing- Hampir semua karakter pada ASCII
masing berukuran 7-bit. Bila juga terdapat pada set karakter
menggunakan ukuran 8-bit maka EBCDIC.
karakternya menjadi 256 atau 28.

1.5.9. Kode ASCII


ASCII (Sistem American 7-bit? Karena komputer pada
Standard Code for Information awalnya memiliki ukuran memori
Interchange) dan EBCDIC yang sangat terbatas, dan 128
merupakan awal dari set karakter karakter dianggap memadai untuk
lainnya. ASCII merupakan set menampung semua huruf Latin
karakter yang paling umum dengan tanda bacanya, dan
digunakan hingga sekarang. Set beberapa karakter kontrol. ASCII
karakter ASCII terdiri dari 128 – (27) telah dibakukan oleh ANSI
buah karakter yang masing-masing (American National Standards
memiliki lebar 7-bit atau gabungan Institute) menjadi standar ANSI X3.4-
tujuh angka 0 dan 1, dari 0000000 1986.
sampai dengan 1111111. Mengapa

1.6. Pemrograman Komputer


Komputer sebuah mesin yang data per jam bekerja dan setelah
dirancang untuk mengikuti instruksi. ditekan ENTER maka komputer
Program komputer merupakan akan memasukan data ke dalam
sebuah instruksi yang digunakan oleh memory
komputer untuk memecahkan 5. Komputer melakukan perkalian
masalah atau tugas-tugas yang antara jumlah jam dengan gaji
diberikan padanya. Misalnya jika perjam
menggunakan komputer untuk 6. Komputer menampilkan hasil
menghitung pembayaran pada perhitungan gaji pegawai yang
seorang pegawai maka langkah- harus dibawa pulang.
langkah yang dilakukan adalah Sekumpulan instruksi-instruksi
sebagai berikut: tersebut diatas disebut dengan
1. Menampilkan pesan pada layar “ algoritma. Algoritma merupakan
berapa jam kamu bekerja?” kumpulan instruksi yang terdefinisi
2. Menunggu pengguna memasukan langkah demi langkah secara baik
data jam bekerja dan setelah dengan tujuan untuk menyelesaikan
ditekan ENTER maka komputer masalah. Catatan langkah-langkah
akan memasukan data ke dalam ini diurutkan secara sekensial. Dalam
memory. algoritma langkah pertama harus
3. Menampilkan pesan pada layar “ dilakukan lebih dahulu sebelum
berapa besarnya gaji tiap langkah kedua dan seterusnya.
jamnya?” Langkah-langkah komputer tidak bisa
4. Menunggu pengguna memasukan terbalik. Pada langkah-langkah

28
 
Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

diatas, komputer diinstruksikan untuk bahasa pemrograman komputer


menghitung besarnya gaji pegawai, menjadi lebih mudah maka
untuk dapat bekerja maka langkah- digunakan bahasa aras tinggi yang
langkah tersebut harus dikonversi bahasanya sudah mendekati bahasa
bahasa yang bisa diproses oleh manusia. Dengan bahasa inilah
komputer, karena kenyataannya programer dapat menulis instruksi-
prosesor hanya dapat memproses instruksi yang akan dilakukan oleh
instruksi yang ditulis dalam bahasa komputer. Pemrograman dengan
mesin. Prosesor hanya mengetahui menggunakan C++ misalnya akan
penggunaan bilangan sebagai menjadi lebih mudah dan C++ inilah
perintah yang harus dilakukan, oleh yang akan mengkonversi bahasa
karena itu algoritma tersebut harus program yang ditulis menjadi bahasa
dikodekan menjadi bahasa mesin. mesin. Dibawah ini merupakan
Penulisan bahasa mesin secara program sederhana yang ditulis
langsung akan sangat sulit dan dengan bahasa C++.
membosankan. Supaya penulisan

Program 1.1
#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
int main() 

    double jam, besar, bayar; 
    cout << "Berapa Jam Kamu bekerja? "; 
    cin >> jam; 
    cout << "Berapa besar gaji tiap jamnya? "; 
    cin >> besar; 
    bayar  = jam * besar; 
    cout << "Kamu mendapatkan Gaji (Rp)" << bayar << endl; 
    getch(); 
    return 0; 

Keluaran program diatas adalah:


Berapa Jam Kamu bekerja? 10 
Berapa besar gaji tiap jamnya? 15000[enter] 
Kamu mendapatkan Gaji (Rp)150000 

Dengan bahasa pemrograan mudah. Seperti program diatas yang


tersebut diatas, maka instruksi digunakan untuk menghitung gaji
komputer dapat dibuat dengan pegawai, jika diminta memasukan

29
 
Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

data jumlah jam kerja kemudian diisi menghitung dengan mengalikan data
10 dan memasukan gaji tiap jamnya tersebut sehingga data keluaran akan
150000 maka komputer akan muncul 150000.

1.7. Bahasa pemrograman


Bahasa pemrograman adalah dipahami. Bahasa ini tidak tergantung
notasi yang digunakan untuk menulis pada arsitektur mesin tetapi
program (komputer). Bahasa ini memerlukan penterjemah berupa
dibagi menjadi tiga tingkatan yaitu compiler atau interpreter.
bahasa mesin, bahasa tingkat rendah Secara garis besar ada dua
dan bahasa tingkat tinggi. kategori bahasa pemrograman yaitu:
Bahasa mesin (machine bahasa pemrograman aras rendah
language) berupa microinstruction (low level) dan bahasa pemrograman
atau hardwire. Programnya sangat level tinggi (high level). Bahasa
panjang dan sulit dipahami. Di pemrograman aras rendah
samping itu sangat tergantung pada cenderung mendekati level komputer,
arsitektur mesin. Keunggulannya ini artinya bahwa bahasanya ditulis
adalah prosesnya sangat cepat dan mendekati atau sama dengan bahasa
tidak perlu interpreter atau mesin komputer, hal ini sangat sulit
penterjemah Bahasa tingkat rendah ditulis karena bahasanya jauh dari
(low level language) berupa bahasa manusia yang digunakan
macroinstruction (assembly). Seperti sehari-hari.
halnya bahasa mesin, bahasa tingkat Bahasa pemrograman yang lebih
rendah tergantung pada arsitektur mudah dipelajari adalah bahasa
mesin. Programnya panjang dan sulit pemrograman aras tinggi. Disebut
dipahami walaupun prosesnya cepat. aras tinggi karena bahasanya
Jenis bahasa tingkat ini perlu mendekati level bahasa manusia
penterjemah berupa assembler. sehingga lebih mudah dipahami.
Bahasa tingkat tinggi (high level Gambar dibawah ini merupakan
language) menyerupai struktur gambaran antara bahasa aras tinggi
bahasa manusia sehingga mudah dengan aras rendah.

30
 
Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

Gambar 1.11. Bahasa aras tinggi

Gambar 1.12. Bahasa aras rendah

31
 
Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

Dengan gambar tersebut diatas, numerik ataupun dengan sintak yang


maka dapat dilihat bahwa menulis sangat pendek sehingga sulit sekali
program dengan bahasa aras tinggi dipahami. Untuk lebih jelasnya
akan lebih mudah dan dapat beberapa jenis bahasa pemrograman
dipahami dibandingkan dengan aras tinggi yang digunakan dapat
bahasa aras rendah karena dilihat pada tabel dibawah ini:
bahasanya ditulis dengan kode

Tabel 1.3. bahasa pemrograman aras tinggi

NAMA  PENJELASAN 
BASIC Beginners  All‐purpose  Symbolic  Instruction  Code,  bahasa  pemrograman 
yang  biasa  digunakan  untuk  merancang  program  sederhana  pada 
programer pemula 
FORTRAN Formula  Translator,  Bahasa  pemrograman  yang  dirancang  untuk 
menyelesaikan algoritma matematika yang kompleks 
COBOL Common  Business‐Oriented  Language.  Bahasa  pemrograman  yang 
dirancang pada aplikasi bisnis 
Pascal Pemrograman  terstruktur,    bersifat  umum,  dan  biasanya  bahasa 
pemrogram ini banyak diajarkan  
C Pemrogram  terstruktur,  bersifat  umum.  Bahasa  ini  dikembangkan  oleh 
bell laboratories. Bahasa C ini dapat digunakan sebagai bahasa aras tinggi 
dan aras rendah.   
C++ Dasar pengembangan C. C++ dapat digunakan sebagai bahasa berorientasi 
objek, yang tidak ditemukan pada bahasa C. Bahasa ini juga dikembangkan 
oleh laboratorium Bell 
C# C#  atau  “C  sharp”.  Bahasa  ini  ditemukan  oleh  microsoft  untuk 
mengembangkan aplikasi pada aplikasi microsoft .NET 
Java Bahasa ini merupakan bahasa berorientasi objek yang dikembangkan oleh 
Sum  Microsistem.  Dengan  java  memungkinkan  untuk  pengembangan 
program yang berjalan pada jaringan internet atau pada web browser. 
VISUAL BASIC Bahasa  pemrograman  microsoft  dimana  bahasa  ini  bertujuan  untuk 
pengembangan  perangkat  lunak  yang  dapat  memudahkan  programmer 
dalam membuat aplikasi berbasis windows.  

Dalam memilih bahasa dari bahasa C, selain itu C++ juga


pemrograman harus memperhatikan mendukung bahasa pemrograman
hal-hal yang dimiliki oleh bahasa berorientasi objek. Sebenarnya
tersebut, dan tentunya setiap bahasa bahasa ini ari awal dikembangkan
pasti mempunyai kekurangan dan untuk menulis program sistem
kelebihan yang harus kita operasi sebuah komputer maupun
pertimbangan dalam memilihnya. compiler. Karena bahasa C++
Pada bahasa C++ mempunyai mengembangkan C sebelumnya
kemampuan pada bahasa aras tinggi maka kemampuannya C++ diperbaiki
maupun bahasa aras rendah. Bahasa dan ditingkatkan daripada bahasa C.
C++ basisnya adalah pengembangan
32
 
Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

C++ sangat populer, tidak hanya program. Kesalahan sintak adalah


karena gabungan antara aras tinggi penggunaan kata yag salah atau
dan aras rendah, tetapi juga karena tidak sesuai, atau penggunaan
sifat portabilitas yang dimilikinya, ini operator, tanda baca, atau elemen
artinya C++ dapat ditulis pada satu bahasa yang lainnya. Jika program
jenis komputer dan dapat dijalankan telah terbebas dari kesalahan sintak
pada jenis komputer lain yang yang terjadi, maka compiler akan
berbeda. Hal ini biasanya menyimpan instruksi bahasa mesin
membutuhkan compiler ulang pada yang disebut dengan kode objeck
jenis sistem komputer yang akan (objeck code) dalam bentuk object
digunakan, tetapi program yang file
ditulis tersebut tidak ada perubahan. Meskipun sebuah objeck file
Salah satu sistem operasi yang ditulis terdiri dari instruksi bahasa mesin,
dengan menggunakan C++ adalah X- tetapi hal tersebut bukan sebuah
Window sistem dan sistem operasi program yang lengkap. C++ telah
yang dimiliki oleh Macintosh. menyediakan berbagai kelengkapan
Ketika progam C++ ditulis, hal dengan library yang kodenya telah
tersebut harus disesuaikan dengan ada dan biasanya atau kadang-
komputer dan disimpan dalam bentuk kadang digunakan untuk
file. Editor text yang digunakan mengerjakan tugas-tugas yang sulit.
seperti halnya program pengolah Sebagai contoh saja library
kata. Melalui editor ini, statement digunakan untuk menangani kode
ditulis oleh seorang programmer perangkat keras khusus seperti
yang disebut dengan kode sumber menampilkan pada layar, menangani
(source code) dan file yang disimpan masukan dari keyboard. Selain itu
disebut dengan file sumber (source juga menyediakan routin fungsi
file). Setelah kode sumber disimpan matematika seperti operasi kwadrat,
dalam bentuk file maka proses perakaran bilangan. Kumpulan kode
translasi (terjemahan) menuju ini disebut dengan run-time library.
bahasa mesin dapat dimulai. Selama Hampir semua program
fase ini diproses, sebuah program menggunakan bagian tersebut.
yang dinamakan dengan preprosesor Ketika compiler membangkitkan file
membaca kode sumber. object, meskipun hal tersebut tidak
Preprosesor mencari baris termasuk dalam code mesin untuk
khusus yang terdapat simbol. Baris setiap routin run-time library yang
ini terdiri dari instruksi yang mungkin digunakan oleh seorang
menyebabkan preprosesor programmer. Selama phase akhir
mengubah kode sumber dalam dari proses translasi, program lain
beberapa langkah atau perubahan yang disebut dengan linker
yang dikehendaki oleh programmer. mengkombinasikan file object dengan
Selama terjadi phase lanjut, compiler routin-routin library yang penting.
melangkah melalui preproses kode Lingker akan menghentian langkah
sumber. Translasi tiap instruksi kode setelah file executable telah selesai
sumber menjadi instruksi bahasa dibuat. File executable terdiri dari
mesin yang sesuai. Proses ini akan instruksi bahasa mesin atau kode
dibuka oleh beberapa kesalahan instruksi dan siap dijalankan pada
sintak yang mungkin terjadi pada sebuah komputer. Gambar dibawah
33
 
Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

ini menunjukan proses translasi dari compiler dan linker yang hal tersebut
file sumber menjadi file executable. dilakukan dengan satu aksi tunggal.
Seluruh proses pada gambar
tersebut dilakukan oleh preprosesor,

Gambar 1.13. proses translasi dari file sumber menjadi file executable

1.8. Penulisan Bahasa pemrograman


Secara umum, bahasa program. Yang memiliki dua bagian
pemrograman yang berbasiskan utama yaitu: Bagian deklarasi dan
prosedur terdiri dari blok atau sub Bagian Statement.

34
 
Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

1.8.1. Bagian Deklarasi digunakan untuk memberi nilai awal


Bagian deklarasi merupakan suatu variable. Dengan kata lain,
bagian program untuk mendefinisikan deklarasi digunakan untuk
tipe data suatu variable, konstanta, memperkenalkan suatu nama kepada
serta fungsi dan prosedur yang akan Compiler program. Berikut contoh
digunakan pada program. Selain itu, deklarasi:
bagian deklarasi dapat juga

a. Deklarasi Variable:
Perhatikan deklarasi antara dua word var, kemudian diikuti dengan
buah program yang berbeda. nama variable (identifier) yang ingin
Dibawah ini merupakan deklarasi digunakan, dan kemudian tipe data
dari variable tersebut. Sedangkan
program yang digunakan oleh
pada C, deklarasi diawali dengan tipe
bahasa pascal dan bahasa C. data variable baru diikuti dengan
perhatikan perbedaan antara dua nama variable (identifier). Suatu
bahasa tersebut. identifier harus diawali oleh karakter
bukan angka, tetapi tidak boleh
Bahasa Pascal mengandung karakter khusus seperti
Var  I,i2  : Integer;  * , - + / \ = < > . ? & dan sebagainya.
Pada bahasa Pascal, identifier tidak
  s  : String;   bersifat case sensitive, maksudnya,
huruf besar ataupun huruf kecil
Bahasa C dianggap sama. Sebaliknya pada
Int  1,12;  Bahasa C, identifier bersifat case
Char   s[100];  sensitive, sehingga variable s dan S
akan dianggap dua identifier yang
Untuk mendeklarasikan variable berbeda.
pada Pascal, digunakan reserved

b. Deklarasi Konstanta:
Dalam melakukan deklarasi nilai const phi = 3.14; 
konstanta atau nilai tetap, dilakukan
dengan cara menulis const. Konstanta yaitu nilai yang tetap. Jadi
perhatikan contoh penulisan program jika mengacu pada contoh di atas,
dibawah ini: maka nilai phi tidak dapat diubah-
ubah dan akan selalu 3.14

c. Deklarasi Tipe Data.


Perhatikan deklarasi antara seperti terlihat dibawah ini:
kedua program antara C dan pascal

35
 
Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

Bahasa C
struct datasiswa { 
  char    nama[30]; 
  char    alamat[30]; 
  char    telp[20]; 

 
enum hari = (senin,selasa,rabu,kamis,jumat,Sabtu,mingu); 
 
Bahasa Pascal
Type Tdatasiswa = ^dataSiswa 
  Datasiswa  = record 
  Nama  : String[30]; 
  Alamat  : String[30]; 
  Telp   : String[20]; 
end; 
 
type hari = (senin,selasa,rabu,kamis,jumat,Sabtu,mingu); 

a) Tipe Data sederhana data yang berbeda). Pada contoh di


Tipe data sederhana merupakan atas, DataSiswa termasuk tipe data
tipe data yang paling kecil, yang terstruktur.
hanya melibatkan satu item data,
misalnya tipe data integer, string, c) Tipe Data Pointer
real, Boolean, dan sebagainya. Kita Tipe data pointer digunakan
dapat juga mendefinisikan sendiri tipe untuk menunjuk pada alamat memory
data ini. Tipe data yang didefinisikan suatu data yang lain. Jadi tipe data
sendiri tersebut diistilahkan pointer pada dasarnya tidak
enumerated data type (pada contoh menyimpan nilai data secara
adalah type hari). langsung, melainkan hanya
menyimpan alamat dimana data
b) Tipe Data terstruktur berada. Untuk contoh pada bahasa
Tipe data terstruktur merupakan Pascal, TDataSiswa merupakan tipe
tipe data yang terdiri dari beberapa data pointer. Pada Bahasa C, untuk
item data. Bentuk dari tipe data ini mendeklarasikan pointer untuk tipe
dapat berupa array (terdiri dari item- data DataSiswa pada variable yang
item yang memiliki tipe data yang bernama TDataSiswa, dapat
sama) ataupun record (terdiri dari dituliskan sebagai berikut:
item-item yang boleh memiliki tipe
DataSiswa *TDataSiswa; 

d. Deklarasi Procedure/Function:
Untuk membahas masalah funsi pada C Perhatikan potongan
procedure pada bahasa Pascal dan program dibawah ini:

36
 
Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

Pada bahasa pascal


procedure cetak (kal: string); 
function Tambah (a,b: integer): Integer; 

Pada bahasa C
void cetak (char 8string); 
int Tambah (int a, int b); 

Jika melihat pada contoh mengembalikan suatu nilai.


deklarasi pada bahasa C, mungkin Sebaliknya fungsi adalah suatu
timbul pertanyaan apa beda prosedur prosedur yang mengembalikan nilai.
dengan fungsi? Pada Bahasa C, Apabila mengacu pada contoh di
semua sub program dianggap fungsi, atas, maka fungsi tambah akan
berbeda dengan Pascal yang mengembalikan suatu nilai yang
menyertakan reserved word bertipe integer, sedangkan prosedur
procedure dan function untuk Cetak tidak mengembalikan nilai apa-
membedakan antara keduanya. apa. Pada Bahasa C, procedure
Sebenarnya, perbedaan utama pada dasarnya adalah function yang
antara prosedur dan fungsi yaitu: mengembalikan void alias tidak
prosedur adalah fungsi yang tidak mengembalikan nilai apa-apa.

1.8.2. Statement
Bagian statement merupakan bukan blok utama program maka
bagian program yang berisi perintah reserved word end diakhiri dengan
yang akan dieksekusi /dijalankan. tanda titik koma (;). Sebaliknya pada
Pada bahasa Pascal, bagian bahasa C, dimulai dari deklarasi
statement selalu diawali dengan variable hingga akhir statement
reserved word begin dan end. diawali dan diakhiri dengan tanda
Apabila blok statement adalah blok kurung kurawal { dan }. Berikut
utama program, maka reserved word adalah contoh potongan kode untuk
end harus diakhiri dengan tanda implementasi menghitung luas
titik(.), sebaliknya jika blok statement lingkaran dengan Bahasa.

Program 1.2
#include <stdio.h> 
 
void main() 
{    
      const phi = 3.24; 
  float diameter,radius,luas; 
  scanf ("%f", &diameter); 
   radius = diameter/2.0; 
  luas = phi * radius * radius; 
  printf ("%f",Luas); 

37
 
Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

Berikut adalah penjelasan baris demi 4. float diameter, radius, Luas;


baris dari potongan kode Bahasa C Baris keempat ini digunakan untuk
untuk contoh di atas. mendeklarasikan variable
1. #include <stdio.h> diameter, radius, dan luas dengan
Baris di awal program ini tipe data float (bilangan pecahan)
mengincludekan header library 5. scanf(“%f”, &diameter);
stdio ke dalam program. Seperti Baris kelima berisi perintah yang
halnya Pascal, Bahasa C juga berfungsi untuk meminta input
memiliki cukup banyak library bertipe float dari user, dan
standar yang dapat digunakan. kemudian nilainya disimpan ke
2. void main() variable diameter.
Baris kedua ini menandakan awal 6. radius = diameter / 2.0;
dari blok statement utama. Pada 7. Luas = phi * radius * radius;
bahasa C, blok program utama Baris keenam dan ketujuh
merupakan suatu fungsi/sub melakukan operasi matematika
program yang diberi nama ‘main’. untuk menghitung luas lingkaran.
3. { const phi = 3.14; 8. printf(“%f”,Luas);
Pada awal baris ketiga ini, Baris ini digunakan untuk
terdapat tanda kurung kurawal mencetak isi variable luas yang
sebagai pembuka blok statement. bertipe float.
Kemudian reserved word const 9. }
digunakan untuk mendeklarasikan Baris ini menandakan akhir dari
konstanta phi. blok statement.

1.9. Element Bahasa Pemrograman


Ketika kita mempelajari suatu utuh. Aturan ini meliputi beberapa
bahasa pemrograman, kita akan element antara lain:
menjumpai element-element yang a. Token
pada dasarnya serupa antara satu b. Komentar
bahasa dengan bahasa yang lain. c. Identifier
Hal itu dikarenakan element-element d. Keywords (Reserved Words)
tersebut merupakan bagian dari tata e. Operator
bahasa pemrograman yang Dibawah ini akan dibahas satu
bersangkutan. Berikut adalah per satu element-element tersebut di
element-element pada bahasa atas.
pemrograman: Aturan Leksikal, Tipe a. Token
data, Expression, Statement, serta Token yaitu element terkecil
Function dan Procedure. pada bahasa pemrograman yang
Aturan leksikal yaitu aturan yang memiliki arti penting bagi compiler.
digunakan dalam membentuk suatu Yang termasuk token antara lain:
deklarasi, definisi, maupun statement identifier, keywords(reserved words),
hingga menjadi satu program yang operator, dan sebagainya. Token
yang satu dengan yang lain

38
 
Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

dipisahkan dengan satu atau lebih sendiri maupun orang lain yang
spasi, tab, baris baru, atau komentar. membaca kode program tersebut.
Pada bahasa Pascal, teks yang
b. Komentar berada di antara kurung kurawal
Komentar yaitu teks (kumpulan pembuka {dan kurung kurawal tutup }
karakter) yang diabaikan oleh akan dianggap sebagai komentar.
Compiler. Komentar sangat berguna Selain itu, dapat pula menggunakan
untuk memberi catatan mengenai tanda (* sebagai pembuka komentar,
bagian program tertentu sebagai dan tanda *) sebagai penutup.
referensi baik bagi programmer itu Perhatikan contoh program dibawah:

begin 
{ Cetak hello World Oleh Saya} 
Writeln (‘Hello World’); 
end. 

Pada bahasa C, teks yang berada di juga akan dianggap komentar satu
antara tanda /* dan tanda */ akan baris. Berikut adalah contoh
dianggap sebagai komentar. Dan penggunaan komentar pada bahasa
untuk teks yang ada setelah tanda // C:

void main() { 
// Cetak hello World 
// Oleh Saya 
printf(“Hello World”); 

c. Identifier
Identifier merupakan kumpulan A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 
karakter yang digunakan sebagai
penanda untuk nama variable, nama Selanjutnya boleh menggunakan
tipe data, fungsi, prosedur, dan karakter angka ( 0 1 2 3 4 5 6 7 8 9 )
sebagainya. Aturan penulisan maupun karakter non angka tersebut
identifier pada bahasa Pascal dan di atas, namun tidak boleh
bahasa C dapat dikatakan serupa. menggunakan karakter khusus
Yaitu: suatu identifier harus diawali seperti + - * / ? ! { } [ ] dan
oleh karakter non angka sebagai sebagainya. Berikut adalah contoh-
berikut: contoh identifier yang benar maupun
salah.
_a b c d e f g h i j k l m n o p q r s t u v w x y z  

39
 
Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

Tabel 1.4. Identifier benar maupun salah

_nama  Benar 
no_Telpon  Benar 
bilangan2  Benar 
4data  Salah, karena diawali oleh karakter angka: 4data 
teks?  Salah, karena mengandung karakter khusus/special: Teks? 

Catatan yang perlu diingat, d. Keywords (Reserved Words)


identifier pada bahasa Pascal bersifat Keywords atau Reserved words
case insensitive (huruf besar dan merupakan kata-kata yang telah
huruf kecil dianggap sama), ada/didefinisikan oleh bahasa
sedangkan pada bahasa C, identifier pemrograman yang bersangkutan.
bersifat case sensitive (huruf besar Kata-kata tersebut telah memiliki
dan huruf kecil dibedakan). Sebagai definisi yang sudah tetap dan tidak
contoh, identifier No_Telpon dan dapat diubah. Karena telah memiliki
no_telpon pada bahasa Pascal definisi tertentu, maka kata-kata ini
dianggap sama, sedangkan pada tidak dapat digunakan sebagai
bahasa C, dianggap sebagai dua identifier.Pada bahasa Pascal, yang
identifier yang berbeda. termasuk reserved words antara lain:

and   array   asm   begin   case   const   div  


do   downto   else   end   file   for   forward 
function  goto   if   In   label   mod   nil 
not   of   or   packed   procedure   program  record 
repeat   set   string   then   to  type   unit 
until   uses   var   while   with 

Pada bahasa C, yang termasuk reserved words antara lain:


break   case   char   const   continue   default   do 
double   else   enum  float   for   goto   if 
inline   int   long   return   short   signed   sizeof 
static   struct   switch   type  def   union   void 
unsigned   while 

1.10. Bahasa C++


Bahasa C++ diciptakan oleh kelas. Bahasa tersebut disebut C
Bjarne Stroustrup di AT&T Bell dengan kelas ( C wih class). Selama
Laboratories awal tahun 1980-an tahun 1983-1984, C dengan kelas
berdasarkan C ANSI (American disempurnakan dengan menambah
National Standard Institute). Pertama fasilitas pembeban lebihan operator
kali, prototype C++ muncul sebagai C dan fungsi yang kemudian
yang dipercanggih dengan fasilitas melahirkan apa yang disebut C++.

40
 
Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

Symbol ++ merupakan operator C Bedanya, Borland C++ selain


untuk operasi penaikan, muncul dapat digunakan dibawah lingkungan
untuk menunjukkan bahwa bahasa DOS, juga dapat digunakan untuk
baru ini merupakan versi yang lebih pemrograman Windows. Selain
canggih dari C. Borland International, beberapa
Borland International merilis perusahaan lain juga merilis compiler
compiler Borland C++ dan Turbo C++, seperti Topspeed C++ dan
C++. Kedua compiler tersebut sama- Zortech C++. Perhatikan dan
sama dapat digunakan untuk bandingkan program dibawah ini:
mlakukan kompilasi kode C++.

Program 1.3. Contoh program dalam bahasa C


#include <stdio.h> 
 
int main() 

    double jam, besar, bayar; 
    printf ( "Berapa Jam Kamu bekerja? "); 
    scanf ( jam); 
    printf ( "Berapa besar gaji tiap jamnya? "); 
    scantf( besar); 
    bayar  = jam * besar; 
    printf ("Kamu mendapatkan Gaji (Rp)", bayar << endl; 
    return 0; 

Program 1.4. Contoh program dalam bahasa C++


#include <iostream> 
 
int main() 

    double jam, besar, bayar; 
    cout << "Berapa Jam Kamu bekerja? "; 
    cin >> jam; 
    cout << "Berapa besar gaji tiap jamnya? "; 
    cin >> besar; 
    bayar  = jam * besar; 
    cout << "Kamu mendapatkan Gaji (Rp)" << bayar << endl; 
    return 0; 

C++ diciptakan untuk Oriented Pragramming/OOP) yang


mendukung pemrograman tidak dimiliki C. sementara C
berorientasi pada objek (Object merupakan bahasa pemrograman

41
 
Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

terbaik dilingkungannya, bahasa ini Dibandingkan compiler C++ yang


tidak memiliki kemampuan OOP. lain, Borland C++ memiliki
Reputasi C tidak diragukan lagi keunggulan terutama dalam hal
dalam menghasilkan program .EXE kecepatan dan efisiensi kompilasi.
berukuran kecil, eksekusi yang cepat, Disamping itu, Borland C++
antarmuka (interfacing) yang mendukung beberapa sistem operasi
sederhana dengan bahasa lain dan yaitu DOS, Windows 16bit (Window
fleksibilitas pemrograman. Apa yang 3.0) dan windows 32 bit (Windows
membuat C tampak sukar dipelajari NT). Meskipun demikian compiler
mungkin karena tiadanya Borland C++ juga memiliki
pemeriksaan tipe. Sebagai contoh, kelemahan bila dibandingkan
dapat mencampur bilangan bulat compiler C++ yang lain, misalnya :
dengan string untuk menghasilkan pemrograman dengan Borland C++
karakter. Namun, justru dsitu letak terutama yang menyangkut tampilan
fleksibilitas C, dapat mengolah data jauh lebih sulit daripada
C sebebas mengolah data dalam pemrograman dengan Microsoft
bahasa assembly. Visual C++.

1.11. Struktur Bahasa C++


Program C maupun C++ selalu membantu orang lain maupun
tersusun dari 4 (empat) bagian pembuat program itu untuk
utama, yaitu : bagian komentar yang memahami program yang dibuat.
ditandai dengan simbol // dan Dalam C atau C++ setiap tulisan
pasangan /* … */, bagian pengarah yang diapit oleh symbol /* … */ atau
compiler yang ditandai dengan setiap baris yang dimulai dengan
symbol #, bagian deklarasi dan symbol // dianggap komentar.
bagian definisi Bahasa C++ tidak mengizinkan
komentar bersarang (nested
1.11.1. Bagian Komentar comment), namun Borland C++ lebih
Program yang baik pada fleksibel dalam hal ini.
umumnya diberi komentar yang akan

Program 1.5
#include <iostream> 
 
int main() 

    double jam, besar, bayar;                      // tipe data double     
    cout << "Berapa Jam Kamu bekerja? ";  // tampilkan kata tersebut 
    cin >> jam;                                        // masukan jam  
    cout << "Berapa besar gaji tiap jamnya? ";  // tampilkan kata tersebut 
    cin >> besar;                                    // masukan besar gaji tiap jam   
    bayar  = jam * besar;                            // kalikan jam dengan gaji tiap jam 
    cout << "Kamu mendapatkan Gaji (Rp)" << bayar << endl; // jumlah gaji total 
    return 0; 
42
 
Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

Pada Borland C++ dapat pada menu Options/Compiler/Source


menggunakan komentar bersarang dipilih.
asalkan opsi cek Nested comments

1.11.2. Bagian Pengarah Kompiler


Supaya lebih jelas mengenai bahasa C++ perhatikan program dibawah ini:

Program 1.6
# include <iostream.h> 
 
void main ( ) 

char pesan [ ] = "Hello, C++ programmers!" ; 
cout << pesan ; 
return 0 ; 

Merupakan statement pre- Beberapa pengarah compiler


prosesor, disebut juga pengarah antara lain: # define, # include, # if,
compiler karena berfungsi mengatur # else, # elif, # endif, # ifdef, # ifndef
proses kompilasi. iostream.h
merupakan file program yang a. Pengarah kompiler # define
mengandung deklarasi kelaskelas Untuk mendefinisikan suatu
yang diperlukan oleh objek cout. File- pengenal / konstanta yang nantinya
file dengan ekstensi .h yang berisi akan digantikan oleh praprosesor
deklarasi fungsi-fungsi standar C ini, saat program dikompilasi. Perhatikan
disebut secara umum sebagai file contoh Program dibawah ini:
header.

# define SIZE 30 
 
int array [SIZE] ; 
for (register int i = 0 ; i < SIZE ; i++) 

  cout << array [ i ] ; 

b. Pengarah Kompiler # Include


Berfungsi membaca file program Nama file yang dimaksud harus diapit
tertentu dan mengikutsertakan file symbol ‘ < ‘ dan ‘ > ‘ atau tanda kutip
tersebut dalam proses kompilasi. dua ( “ … “).

43
 
Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

c. Pengarah Kompiler # If, # Else, # Elif, # Endif


Digunakan untuk memilih bagian bersyarat dan program yang baik
program yang akan dikompilasi. biasanya memanfaatkan teknik ini.
Kompilasi cari ini disebut kompilasi

d. Pengarah Kompiler # Ifdef, # Ifndef


Digunakan juga dalam kompilasi Pengarah compiler ini sering
bersyarat. # Ifdef dapat dibaca: ‘jika digunakan untuk menandai bahwa
didefinisikan’ dan # ifndef dapat suatu file sudah diikutsertakan dalam
dibaca: ‘jika tidak didefinisikan’. kompilasi.

1.11.3. Deklarasi Dan Definisi


Semua program C pada objek dan biasanya digunakan untuk
dasarnya tersusun dari rangkaian mengatur alur program), dan
pemanggilan fungsi yang bekerja statement yang dapat dieksekusi /
atas sekelompok data. Selain executable (bila dikompilasi akan
pemanggilan fungsi, program C menghasilkan kode objek).
mengandung komponen lain yang Setiap pemanggilan fungsi
disebut statement. maupun statement executable dalam
Statement C ada dua, yaitu : C harus diakhiri dengan tanda titik
statement yang tidak dapat koma (;). Perhatikan Contoh program
dieksekusi / non executable ( bila C++:
dikompilasi tidak menghasilkan kode

Program 1.7
#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
int main() 

  char pesan [ ] = "Hello, Programmer C++ !" ; 
  cout << pesan; 
      getch(); 
  return 0 ; 

Keluaran programnya adalah:


Hello, Programmer C++ ! 

Dalam contoh program C++ statement executable yang


diatas, return merupakan contoh menginstruksikan agar suatu fungsi
44
 
Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

mengembalikan nilai balik tertentu. yang harus disediakan untuk data


Contoh statement non executable yang bersangkutan, sedangkan
adalah: If, else, dan while. Main () fungsi perlu dideklarasikan agar
merupakan contoh fungsi, sedangkan compiler dapat memeriksa ketepatan
pesan adalah contoh data. Baik data pemanggilan fungsi yang
maupun fungsi harus dideklarasikan. bersangkutan. Deklarasi fungsi sering
Data perlu dideklarasikan agar disebut pula prototype fungsi.
compiler tahu berapa byte memori

1.12. Input Dan Output


Di ANSI C, operasi input dan seperti strstrea.h, fstream.h, dan
output dilakukan dengan constrea.h.
menggunakan fungsi-fungsi yang ada Stream adalah suatu logika
di header file stdio.h. contohnya device (peralatan logika) yang
untuk input dan output ke layer menghasilkan dan menerima
monitor digunakan perintah seperti informasi atau sebagai tempat yang
printf, scanf, putch, dan sebagainya. digunakan untuk menampung
Instruksi input dan output ke file keluaran dan menampung aliran
digunakan perintah seperti fread, data. Stream adalah nama umum
fwrite, fputc, dan sebagainya. untuk menampung aliran data
Bahasa C++ mempunyai teknik (contoh: file, keyboard, mouse),
input dan output yang baru, yaitu: maupun untuk keluaran (contoh:
menggunakan stream. Header file layer, printer). Dalam bahasa C++,
untuk input dan output stream adalah input berarti membaca dari stream
iostream.h dan beberapa file lain, dan output berarti menulis ke stream.
Bentuk umum operator output adalah Dalam C++, menggunakan
sebagai berikut: escape sequences untuk
merepresentasikan suatu karakter
cout << ekspresi ;  yang tidak terdapat dalam tradisional
simbol. Beberapa diantaranya :
Bentuk umum operator Input adalah
sebagai berikut: \ n : linefeed / baris baru 
\ b : back space 
cin >> variable ;  \ “ : petik ganda 

Program 1.8. contoh program versi ANSI C :


# include <stdio.h> 
 
void main ( ) 

  int x ; 
  printf ( "Masukkan sebuah bilangan : \n" ) ; 
  scanf ( " %d ", &x ) ; 
  printf ( "Bilangan yang dimasukkan adalah %d\n ", x ) ; 
45
 
Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

Program 1.9 contoh program versi C++ :


# include <iostream.h> 
 
void main ( ) 

  int x ; 
  cout << "Masukkan sebuah bilangan : " << endl ; 
  cin >> x ; 
  cout << "Bilangan yang dimasukkan adalah " << x << endl ; 

Program 1.10 contoh program input dan output pada C++:


# include <iostream.h> 
 
void main ( ) 

  int a ; 
  cout << "masukkan suatu bilangan :" ; 
  cin >> a ; 
  cout << "nilai tersebut ditambah 1 = ' << a+1 ; 
  return 0 ; 

1.15. Soal Latihan


Jawablah soal latihan dibawah ini dengan baik dan benar.
1. Sebutkan bagian-bagian perangkat keras komputer
2. Sebutkan lapisan perangkat lunak komputer personal
3. Sebutkan berbagai macam memori yang digunakan pada komputer
4. Apa yang dimaksud dengan piranti Input dan output (I/O).
5. Jelaskan sistem bilangan yang digunakan oleh komputer
6. Jelaskan proses translasi dari file sumber menjadi file executable
7. Jelaskan struktur bahasa C++
8. Sebutkan perbedan bahasa C dan C++

46
 
Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

BAB 2
BAHASA DAN ALGORITMA PEMROGRAMAN

2.1. Bahasa Pemrograman


2.2. Compiler dan Intepreter
2.3. Tipe Pemrograman
2.4. Algoritma
2.5. Ciri Algoritma
2.6. Penerapan Algoritma
2.7. Notasi Algoritma
2.8. Kalimat deskriptif pada Algoritma
2.9. Flow chart
2.10. Pseudo code
2.11. Penerjemahan ke kode sumber
2.12. Soal Latihan

 
 
2.1. Bahasa pemrograman Berbeda dengan bahasa alamiah,
Bahasa atau dalam bahasa mis. Bahasa Indonesia, Inggris dsb.
inggris language adalah suatu sistim yang merupakan bahasa
untuk berkomunikasi. Bahasa tertulis alamiah(natural language), sintaks
menggunakan simbol (yaitu huruf) dan semantik bahasa pemrograman
untuk membentuk kata. Dalam ilmu (komputer) ditentukan secara kaku,
komputer,bahasa manusia disebut sehingga bahasa pemrograman juga
bahasa alamiah (natural languages), disebut sebagai bahasa formal
dimana komputer tidak bisa (formal language). Jadi, dalam
memahaminya, sehingga diperlukan bahasa pemrograman yang
suatu bahasa komputer. Komputer digunakan sebagai alat komunikasi
mengerjakan transformasi data untuk memberikan perintah kepada
berdasarkan kumpulan perintah - komputer tidak berlaku kebebasan
program - yang telah dibuat oleh berekspresi seperti laiknya dalam
pemrogram. Kumpulan perintah ini bahasa alamiah.
harus dimengerti oleh komputer, Pemrograman dalam pengertian
berstruktur tertentu (syntax) dan luas meliputi seluruh kegiatan yang
bermakna. tercakup dalam pembuatan program,
Bahasa pemrograman termasuk analisis kebutuhan
merupakan notasi untuk memberikan (requirement's analysis) dan
secara tepat program komputer. keseluruhan tahapan dalam
perencanaan (planning) ,
47
 
Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

perancangan (design) dan (kode mesin), yaitu kode operasi


pewujudannya (implementation). suatu mesin tertentu. Bahasa ini
Dalam pengertian yang lebih sempit, bersifat khusus untuk mesin tertentu
pemrograman merupakan dan "dimengerti" langsung oleh
pengkodean (coding atau program mesin, sehingga pelaksanaan proses
writing = penulisan program) dan sangat cepat. Bahasa mesin
pengujiannya (testing) berdasarkan kelompok komputer tertentu
rancangan tertentu. berlainan dengan bahasa mesin
Pemahaman yang lebih sempit kelompok komputer yang lain.
ini sering digunakan dalam Abstraksi bahasa ini adalah
pembuatan program-program terapan kumpulan kombinasi kode biner "0"
komersial yang membedakan antara dan "1" yang sangat tidak alamiah
system analyst yang bertanggung bagi kebanyakan orang - kecuali
jawab dalam menganalisa insinyur pembuat mesin komputer.
kebutuhan, perencanaan dan Karena tidak alamiah bagi
perancangan program dengan kebanyakan orang, bahasa mesin
pemrogram (programmer) yang juga disebut bahasa tingkat rendah.
bertugas membuat kode program dan
menguji kebenaran program.
Generasi bahasa pemrograman: 2.1.3. Bahasa Assembly
 Generasi I: machine language Bahasa rakitan (assembly
 Generasi II: assembly language : language) merupakan notasi untuk
Asssembler menyajikan bahasa mesin yang lebih
 Generasi III: high-level mudah dibaca dan dipahami oleh
programming language: C, manusia. Bahasa ini sudah
PASCAL, dan sebagainya. menggunakan simbol alpabet yang
 Generasi IV: 4 GL (fourth- bermakna (mnemonic). Contoh “MOV
generation language): SQL AX 1111”, pindahkan ke register AX
nilai 1111.Proses data oleh komputer
berdasarkan perintah bahasa rakitan
2.1.1. Bahasa Tingkat Rendah adalah cepat. Meski demikian masih
Merupakan bahasa assembly merepotkan-bahkan bagi kebanyakan
atau bahasa mesin. Bahasa ini lebih pemrogram, karena masih harus
dekat ke mesin (hardware), dimana mengingat-ingat tempat
pada high-level programming penyimpanan data. Bahasa rakitan
languages, suatu bahasa yang sudah juga bersifat khusus untuk mesin
dekat pada bahasa manusia. Pada tertentu. Contoh: Assembler
bahasa ini akan lebih cepat dipahami
oleh programmer karena sifatnya
yang dekat dengan bahasa manusia 2.1.4. Bahasa Tingkat Tinggi
Adalah bahasa pemrograman
yang dekat dengan bahasa manusia,
2.1.2. Bahasa Mesin kelebihan utama dari bahasa ini
Bahasa mesin merupakan adalah mudah untuk di baca, tulis,
representasi tertulis machine code maupun diperbaharui, sebelum bisa

48
 
Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

dijalankan program harus terlebih dibuat menggunakan bahasa tingkat


dahulu di-compile. Contoh Ada, Algol, tinggi pada suatu mesin komputer
BASIC, COBOL, C, C++, FORTRAN, bersistem operasi tertentu, hampir
LISP, dan Pascal, dsb. Pada 100% bisa digunakan pada berbagai
generasi bahasa pemrograman mesin dengan aneka sistem operasi.
terakhir sekarang ini, kedua cara Kalaupun ada perbaikan sifatnya
interpretasi dan kompilasi kecil sekali.
digabungkan dalam satu lingkungan
pengembangan terpadu 2.1.5. Bahasa Generasi 3 & 4
(IDE=integrated development Lebih dekat ke bahasa manusia
environ-ment). dibandingkan dengan high-level
Cara interpretasi memudahkan programming languages. Biasanya
dalam pembuatan program secara dipakai untuk mengakses database.
interaktif dan cara kompilasi Contoh perintah pada bahasa SQL:
menjadikan eksekusi program lebih FIND ALL RECORDS WHERE
cepat. Pertama program NAME IS "JOHN".
dikembangkan interaktif, kemudian
setelah tidak ada kesalahan 2.1.6. Bahasa Pemrograman
keseluruhan program dikompilasi. untuk tujuan tertentu
Contoh bahasa program seperti ini Dibawah ini merupakan Tabel
adalah Visual BASIC yang berbasis Bahasa Pemrograman untuk tujuan
BASIC dan Delphi yang berbasis tertentu. (Mc. Connell, h 46)
PASCAL. Bahasa tingkat tinggi
bersifat portable. Program yang

Tabel 2.1. Bahasa Pemrograman

JENIS PROGRAM  BAHASA TERBAIK  BAHASA TERBURUK 


Data terstruktur  ADA, C /C++, PASCAL  Assembler, BASIC 
Proyek cepat  BASIC  PASCAL, ADA, Assembler 
Eksekusi cepat  Assembler, C  BASIC,Intrepreter 
Language 
Kalkulasi matematika  FORTRAN  PASCAL 
Menggunakan memori  PASCAL, C  BASIC  
dinamis 
Lingkungan memori terbatas   BASIC, Assembler, C  FORTRAN 
Program real‐time  ADA, Assembler, C  BASIC, FORTRAN 
Manipulasi string  BASIC, PASCAL  C 
Program mudah dikelola  PASCAL, ADA  C, FORTRAN 

Tabel Rasio pernyataan bahasa tingkat tinggi dengan kode bahasa rakitan
yang setara. (Mc. Connell, h 46)

49
 
Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

Tabel 2.2. Rasio bahasa tingkat tinggi dengan kode bahasa rakitan

BAHASA  RASIO 
Assembler  1:  1 
ADA  1 : 4.5  
Quick / Turbo / Basic  1 : 5  
C   1 : 2.5  
FORTRAN  1 : 3  
PASCAL  1 : 3.5 
 
 
2.2. Compiler dan Intepreter
Compiler Adalah suatu program 2.2.2.Interpreter
yang menterjemahkan bahasa Berbeda dengan compiler,
program (source code) ke dalam Interpreter menganalisis dan
bahasa objek (object code). Compiler mengeksekusi setiap baris dari
menggabungkan keseluruhan bahasa program tanpa melihat program
program dikumpulkan kemudian secara keseluruhan. Keuntungan dari
disusun kembali. Interpreter adalah dalam eksekusi
yang bisa dilakukan dengan segera.
2.2.1. Tahapan Kompilasi: Tanpa melalui tahap kompilasi, untuk
Dalam melakukan penulisan alasan ini interpreter digunakan pada
bahasa pemrograman komputer ada saat pembuatan program berskala
beberapa tahapan-tahapan yang besar.
harus dilakukan antara lain:
Pertama source code ( program yang 2.3. Tipe Pemrograman
ditulis) dibaca ke memory komputer. Dalam Bahasa pemrograman
 Source code tersebut diubah komputer terdapat tipe
menjadi object code (bahasa pemrograman. Tipe pemrograman
assembly) yang pertama adalah pemrograman
 Object code dihubungkan terstruktur dan prosedural.
dengan library yang dibutuhkan
untuk membentuk file yang bisa 2.3.1. Pemrograman Terstruktur
di eksekusi. Pemrograman terstruktur adalah
Compiler memerlukan waktu untuk cara pemrosesan data yang
membuat suatu program yang dapat terstuktur. Terstruktur dalam: analisa,
dieksekusi oleh komputer. Tetapi, cara dan penulisan program. Prinsip
program yang diproduksi oleh pemrograman terstruktur adalah
Compiler bisa berjalan lebih cepat mempunyai ciri sebagai berikut:
dibandingkan dengan yang  Menggunakan rancangan
diproduksi oleh Interpreter, dan pendekatan dari atas ke bawah
bersifat independen. (top down design),

50
 
Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

 Membagi program ke dalam  Menekankan fungsionalitas.


modul-modul logika yang sejenis,  Cocok untuk sistem yang banyak
 Menggunakan sub-program untuk mempunyai fungsi independen.
proses-proses sejenis yang sering Gaya penulisan program
digunakan, terstruktur: Menggunakan
 Menggunakan pengkodean indentasi sehingga jelas struktur
terstruktur: IF ........... THEN, dan kontrol program.
DO ........ WHILE dan lain-lainnya, Memudahkan pembacaan,
 Menghindari penggunaan perintah pemahaman, penelusuran
GO TO bila tidak diperlukan, kesalahan dan pembuatan
 Gunakan nama-nama bermakna koreksi.
(mnemonic names), dan
 Membuat dokumentasi yang
akurat dan berarti. 2.3.2. Pemrograman procedural
Dalam perencanaan dan dan terstruktur
perancangan dari atas ke bawah, Bahasa pemrograman
kategori dan penyelesaian masalah prosedural adalah bahasa
dimulai dari bagian yang utama pemrograman yang mendukung
kemudian dibagi menjadi bagian pembuatan program sebagai
yang lebih kecil. Rancangan cara ini kumpulan prosedur. Prosedur-
memudahkan penulisan, pengujian, prosedur ini dapat saling memanggil
koreksi dan dokumentasi program. dan dipanggil dari manapun dalam
Tahapan rancangan atas ke bawah program dan dapat menggunakan
dalam pemrograman: parameter yang berbeda-beda untuk
 Tentukan keluaran (output) yang setiap pemanggilan. Prosedur adalah
diminta, masukan (input) yang bagian dari program untuk
diperlukan dan proses-proses melakukan operasi-operasi yang
utama yang diperlukan untuk sudah ditentukan dengan
transformasi data. menggunakan parameter tertentu.
 Membagi proses utama ke dalam Bahasa pemrograman terstruktur
modul-modul fungsional. adalah pemrograman yang
 Buat algoritma msing-masing mendukung abstraksi data,
modul, dari modul utama ke sub- pengkodean terstruktur dan kontrol
sub modul. program terstruktur. Kontrol program
Setiap modul dalam proses terstruktur adalah sebagai berikut:
rancangan atas ke bawah biasanya 1. Runtun - urut (sequence)
dibatasi dalam isi maupun batasan- 2. Pilihan (selection)
batasan berikut: 3. Pengulangan (repetition - loop)
 Setiap modul hanya mempunyai 4. Batasan Masalah Merencanakan
satu masukan dan keluaran sistim dan spesifikasi program:
 Setiap modul hanya mewakili satu Siapa yang akan menggunakan
fungsi program. program dan untuk apa? dengan
Rancangan (design) terstruktur: cara:
 Membagi program menjadi  Menentukan tujuan dan hasil
subprogram yang akan dicapai

51
 
Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

 Menentukan hal-hal yang bagaimana algoritma penyelesaian


diperlukan oleh sistim masalahnya. Sebelum mengetahui
 Pengumpulan data lebih lanjut apa yang dimaksud
5. Pengembangan Model Pembuatan dengan algoritma pemrograman, kita
model dari sistim yang akan kita bahas dahulu apa yang dimaksud
bangun, model adalah suatu dengan pemrograman komputer atau
gambaran sederhana dari sistim program komputer.
yang kita buat. Dengan Definisi program komputer
pembuatan model akan terlihat adalah sederetan perintah-perintah
dengan jelas hubungan antara (instruksi) yang harus dikerjakan oleh
objek-objek dalam sistim yang komputer untuk menyelesaikan
akan kita bangun. Untuk masalah. Deretan perintah-perintah
penyelesaian aritmatik, biasanya tersebut tidak bisa kita tulis secara
model dibuat dalam bentuk rumus sembarangan atau semau kita tetapi
matematik. Contoh: untuk harus teratur agar komputer dapat
membuat program luas_lingkaran memahami dan memprosesnya
kita membuat model matematis dengan baik sehingga permasalahan
c = axb yang ada dapat diselesaikan dengan
6. Rancangan algoritma Pembuatan baik pula.
urutan instruksi yang akan ditulis Untuk itulah diperlukan algoritma
pada program ( dijelaskan lebih karena definisi dari algoritma itu
lanjut) sendiri menurut Microsoft Press
7. Pemrograman Implementasi Computer and Internet Dictionary
algoritma ke dalam program (1998) adalah urutan langkah logis
(algoritma sendiri dalam komputer tertentu untuk memecahkan suatu
adalah merupakan program). masalah. Yang ditekankan adalah
8. Uji dan Validasi Pengujian urutan langkah logis, yang berarti
terhadap program : seperti algoritma harus mengikuti suatu
kesalahan penulisan (syntax error) urutan tertentu, tidak boleh
, kesalahan saat eksekusi (runtime melompat-lompat dan disusun secara
error) kesalahan logika program sistematis. Sedangkan yang
(program berjalan tapi dimaksud dengan langkah-langkah
menghasilkan output yang salah- logis adalah kita harus dapat
fatal error). mengetahui dengan pasti setiap
Dokumentasi Pembuatan catatan langkah yang kita buat.
pada program terutama pada modul- Menurut Sjukani (2005),
modul yang rumit. algoritma adalah alur pemikiran
dalam menyelesaikan suatu
2.4. Algoritma pekerjaan yang dituangkan secara
Pemrograman komputer dan tertulis. Yang ditekankan pertama
algoritma pemrograman adalah dua adalah alur pikiran, sehingga
hal yang tidak dapat dipisahkan algoritma seseorang dapat berbeda
karena pembuatan program dari algoritma orang lain. Sedangkan
komputer akan lebih sulit dan lama penekanan kedua adalah tertulis,
tanpa mengetahui dengan pasti yang artinya dapat berupa kalimat,
gambar, atau tabel tertentu. Jadi
52
 
Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

dapat disimpulkan bahwa algoritma Demikian juga dengan pemrograman


lebih merupakan alur pemikiran untuk komputer, kita juga tidak harus
menyelesaikan suatu pekerjaan atau mengikuti algoritma yang sudah ada,
suatu masalah daripada pembuatan tetapi kita dapat menambah ataupun
program komputer. Algoritma inilah mengurangi bahkan membuat
yang kemudian dijadikan landasan algoritma yang baru asalkan
(pedoman) untuk membuat program permasalahan yang ada dapat
komputer. terpecahkan dengan baik.
Meskipun algoritma tidak dapat
dipisahkan dengan pemrograman
komputer tetapi jika anda 2.5. Ciri Algoritma
beranggapan bahwa algoritma identik Oleh karena algoritma digunakan
dengan pemrograman komputer, untuk memecahkan suatu
anda salah besar. Hal ini dikarenakan permasalahan maka algoritma
dalam kehidupan sehari-haripun tersebut harus menghasilkan suatu
seringkali kita berhadapan dengan jawaban atas permasalahan tersebut.
masalah-masalah yang kalau kita Dengan kata lain algoritma harus
cermati mengikuti kaidah-kaidah memiliki paling tidak satu keluaran.
penyelesaian secara algoritma. Sedangkan masukan dari algoritma
Misalkan saja cara-cara memasak dapat nol (tidak ada) atau banyak
mie instan, membuat kopi atau teh, masukan (data). Yang dimakdud
memasak makanan yang dinyatakan dengan nol masukan adalah jika
dalam bentuk resep, dan masih algoritma itu hanya untuk
banyak lagi yang semuanya itu dapat menampilkan suatu informasi saja.
kita sebut sebagai algoritma. Pada Misalnya output “Hello  World” yang
mie instan misalnya, biasanya pada sering kita temukan pada tutorial-
bungkusnya terdapat urutan langkah- tutorial saat kita baru belajar
langkah bagaimana cara memasak membuat program dari suatu bahasa
atau menyajikannya. Bila langkah- pemrograman tertentu. Kedua hal
langkah tersebut tidak logis, maka diatas, memiliki paling sedikit satu
dapat dipastikan bahwa kita akan keluaran dan dapat memiliki nol atau
memperoleh hasil yang tidak sesuai banyak masukan, merupakan dua
dengan yang diharapkan. Kita harus dari beberapa ciri algoritma.
membaca satu demi satu langkah- Tugas algoritma dikatakan
langkah pembuatannya kemudian selesai kalau algoritma tersebut
mengikutinya agar memperoleh hasil sudah menghasilkan satu atau lebih
yang baik. jawaban atas permasalahan yang
Yang harus diingat disini adalah ada. Dengan demikian setelah
kita tidak harus mengikuti langkah- mengerjakan langkah-langkah
langkah yang sudah diberikan, tetapi penyelesaian masalah, maka
kita dapat memodifikasinya atau algoritma tersebut harus berhenti
bahkan membuat resep atau cara tidak melakukan proses apapun.
baru yang lebih baik tetapi Berhenti di sini artinya adalah jika
menghasilkan hal yang sama diterjemahkan ke dalam bentuk
(mempunyai tujuan yang sama), yaitu program dan program dijalankan,
dapat menikmati hasil masakan.
53
 
Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

maka setelah menghasilkan suatu ember B ke ember A? Apakah


output, program dapat langsung permasalahan dapat diselesaikan
berhenti atau menunggu instruksi dengan cara (algoritma) tersebut?
lebih lanjut dari pengguna program Jawabannya adalah tidak, karena
seperti mengulang perhitungan lagi, algoritma tersebut tidak logis dan
keluar program (menghentikan hasilnyapun tidak sesuai dengan
program), dan lain sebagainya. yang diinginkan karena algoritma
Dengan demikian ciri ketiga dari tersebut akan menghasilkan ember A
algoritma adalah setelah selesai akan berisi campuran air dan minyak
mengerjakan langkah-langkah tanah sedangkan ember B akan
penyelesaian masalah, algoritma kosong.
harus berhenti. Bagaimanakah cara (algoritma)
Ciri keempat dari algoritma yang benar dari permasalahan
adalah setiap langkah yang dibuat tersebut? Algoritma yang benar
harus dibuat sesederhana mungkin adalah pindahkan dahulu isi ember A
tetapi efektif agar dapat dipahami ke ember lain (misal ember C),
oleh pemroses (manusia maupun kemudian setelah ember A kosong
komputer) sehingga dapat pindah isi ember B ke ember A.
diselesaikan dalam waktu yang Langkah terakhir adalah mengisi
singkat serta masuk akal. Sedangkan ember B dengan minyak tanah yang
ciri yang terakhir adalah setiap ada di ember C. Inilah algoritma yang
langkah dalam algoritma harus paling logis dan menghasilkan
didefinisikan dengan tepat dan jelas jawaban yang benar atas
sehingga tidak berarti-dua permasalahan tersebut.
(ambiguitas) sehingga menimbulkan Seperti yang telah dikemukakan
kesalahan dalam penafsiran oleh sebelumnya, setiap orang
pemroses mempunyai cara pemecahan sendiri-
sendiri sehingga setiap orang
dimungkinkan mempunyai algoritma
2.6. Penerapan Algoritma yang berbeda-beda untuk
Berikut adalah contoh memecahkan suatu permasalahan
pemecahan masalah (algoritma) yang sama. Contohnya adalah
yang diambil dari permasalahan yang permasalahan di atas. Langkah
mungkin sering kita hadapi dalam pertama bisa saja yang dipindah
kehidupan kita sehari-hari. Diketahui bukan isi ember A ke ember C dulu,
dua buah ember A dan B dimana tetapi isi ember B yang dipindahkan
ember A berisi air dan ember B berisi ke dalam ember C terlebih dahulu.
minyak tanah. Jika diinginkan isi Setelah itu baru memindahkan isi
kedua ember itu saling ditukar ember A ke dalam ember B dan
sehingga ember A berisi minyak terakhir memindah isi ember C ke
tanah dan ember B berisi air, ember A. Algoritma ini sedikit
bagaimanakah caranya? Apakah berbeda tetapi tetap menghasilkan
cukup dengan cara (membuat jawaban yang sama atas persoalan
algoritma), tuangkan isi ember A ke yang ada.
ember B dan kemudian tuangkan isi

54
 
Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

2.7. Notasi Algoritma tiga buah bilangan yang dimasukkan.


Algoritma mempunyai aturan Bagaimanakah algoritmanya?
penulisan sendiri yang disebut
dengan notasi algoritma. Notasi
algoritma ini tidak tergantung dari 2.8. Deskriptif Algoritma
spesifikasi bahasa pemrograman Algoritma dengan uraian kalimat
tertentu dan komputer yang deskriptif adalah notasi algoritma
mengeksekusinya. Hal ini yang paling sederhana karena
dikarenakan notasi algoritma algoritma ini menggunakan bahasa
bukanlah notasi bahasa sehari-hari. Untuk permasalahan
pemrograman. Notasi algoritma yang sederhana penggunaan notasi
merupakan bahasa universal yang ini sangatlah mudah, akan tetapi
dapat diterima oleh semua bahasa untuk permasalahan yang lebih
pemrograman yang ada. Oleh sebab komplek dan rumit, penggunaan
itu algoritma yang baik harus dapat notasi ini akan lebih sulit dan sering
diterjemahkan ke dalam bentuk kali terjadi ambigu dalam langlah-
source code dari semua bahasa langkah penyelesaian masalah. Oleh
pemrograman yang ada. karena itulah untuk kasus-kasus yang
Untuk membuat algoritma dari lebih komplek, penggunaan notasi ini
suatu permasalahan, biasanya jarang sekali bahkan tidak digunakan.
digunakan salah satu dari tiga buah Permasalahan di atas, yaitu
notasi algoritma yang dikenal, yaitu mencari bilangan terbesar dari tiga
uraian kalimat deskriptif, flow chart, buah bilangan yang dimasukkan,
atau pseudo code. Sebagai contoh tergolong permasalahan yang
permasalahan, jika diinginkan sebuah sederhana, jadi algoritmanya masih
program komputer yang dapat mudah dan dapat dijelaskan dengan
mengetahui bilangan terbesar dari uraian kalimat deskriptif sebagai
berikut:

1. Masukkan sembarang bilangan sebanyak tiga buah. 
2. Ambil bilangan pertama dan set maksimum‐nya sama dengan bilangan pertama. 
3. Ambil bilangan kedua dan bandingkan dengan maksimum. 
4. Apabila  bilangan  kedua  lebih  besar  dari  maksimum  maka  ubah  maksimum‐nya 
menjadi sama dengan bilangan kedua. 
5. Ambil bilangan ketiga dan bandingan dengan maksimum. 
6. Apabila  bilangan  ketiga  lebih  besar  dari  maksimum  maka  ubah  lagi  maksimum‐
nya menjadi sama dengan bilangan ketiga.
7. Variabel maksimum akan berisi bilangan yang terbesar dan tampilkan hasilnya.
 
Algoritma dengan uraian kalimat kalimat deskriptif) yang ditulis secara
deskriptif seperti di atas sudah jarang lebih sistematis dan efisien sehingga
sekali kita temukan karena kadang lebih mudah untuk memahaminya.
kala agak sulit untuk memahaminya. Algoritma tersebut adalah sebagai
Yang paling banyak kita temukan berikut:
adalah algoritma (dengan uraian
55
 
Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

1. Masukkan a, b, dan c. 
2. mak  a. 
3. Jika b > mak, kerjakan langkah ke‐4. Jika tidak, kerjakan langkah ke‐5. 
4. mak  b. 
5. Jika c > mak, kerjakan langkah ke‐6. Jika tidak, kerjakan langkah ke‐7. 
6. mak  c. 
7. Tulis mak. 
 
Dalam notasi algoritma, baik sehingga penerjemahannya adalah
menggunakan notasi algoritma mak = a
dengan uraian kalimat deskriptif, flow
chart maupun pseudo code, kita tidak
menggunakan tanda = (sama 2.9. Flow Chart
dengan) tetapi menggunakan simbol Notasi algoritma yang paling
anak panah ke arah kiri () seperti banyak digunakan adalah flow chart
yang terlihat pada langkah ke-2, 4, karena bentuknya yang sederhana
dan 6. Sebagai contoh pada langkah dan mudah dipahami. Flow chart
ke-2, arti dari notasi tersebut adalah (diagram alir) adalah penggambaran
nilai variabel a (yang ada di sebelah secara grafik dari langkah-langkah
kanan anak panah) diberikan kepada pemecahan masalah yang harus
variabel mak (yang ada di sebelah diikuti oleh pemroses. Flow chart
kiri anak panah). Dengan demikian terdiri atas sekumpulan simbol,
jika nilai variabel a adalah 10, maka dimana masing-masing simbol
nilai mak juga 10 atau dalam menggambarkan suatu kegiatan
penulisan secara matematis mak = a. tertentu. Flow chart diawali dengan
Penggunaan anak panah ini penerimaan masukan (input),
dikarenakan, seperti yang telah pemrosesan masukan, dan diakhiri
dikemukakan sebelumnya, algoritma dengan menampilkan hasilnya
tidak diperuntukkan untuk suatu (output).
bahasa pemrograman tertentu, tetapi Adapun simbol-simbol yang
dapat diaplikasikan atau sering digunakan untuk menyusun
diterjemahkan ke dalam bentuk flow chart (dalam microsoft visio)
source code dari semua bahasa adalah sebagai berikut :
pemrograman yang ada. Dalam
pascal misalnya, notasi yang 1) Masukan
digunakan untuk tanda = (sama Masukan merupakan kegiatan
dengan) adalah := (titik dua penerimaan data yang
dilanjutkan dengan tanda sama disimbolkan dengan jajaran
dengan) sehingga langkah ke-2 akan genjang. Kita dapat menuliskan
diterjemahkan menjadi mak := a. masukan yang diperlukan pada
Akan tetapi dalam bahasa C++ suatu waktu secara satu per satu
maupun Java, tanda = (sama maupun secara keseluruhan,
dengan) masih tetap digunakan akan tetapi untuk alasan efisiensi
ruang gambar biasanya masukan
56
 
Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

dituliskan bersamaan secara


keseluruhan.

Gambar 2.3. Simbol proses

4) Keluaran
Keluaran adalah hasil dari
Gambar 2.1. Simbol masukan pemrosesan data dan merupakan
jawaban atas permasalahan yang
2) Masukan manual ada. Keluaran ini harus
Untuk masukan secara manual ditampilkan pada layar monitor
yang dimasukkan melalui agar dapat dibaca oleh pengguna
keyboard, atau perangkat input program. Sama seperti aturan
lainnya seperti barcode reader, pada simbol-simbol sebelumnya,
kita dapat menggunakan simbol penulisan hasil pemrosesan data
masukan secara manual. Sama dapat dilakukan secara satu per
dengan simbol masukan, pada satu maupun secara keseluruhan.
simbol masukan manual ini untuk
alasan efisiensi ruang gambar
biasanya masukan juga dituliskan
bersamaan secara keseluruhan.

Gambar 2.4. Simbol keluaran

5) Percabangan
Yang dimaksud dengan
Gambar 2.2. Simbol masukan percabangan disini adalah suatu
manual kegiatan untuk mengecek atau
memeriksa suatu keadaan
3) Proses apakah memenuhi suatu kondisi
Data yang dimasukan kemudian tertentu atau tidak. Jadi dalam
diproses untuk menghasilkan percabangan ini, kita harus
jawaban atas persoalan yang menuliskan kondisi apa yang
ingin dipecahkan. Kegiatan harus dipenuhi oleh suatu
memproses data ini disimbolkan keadaan. Hasil dari pemeriksaan
dengan persegi panjang. Sama keadaan ini adalah YA atau
seperti simbol pada masukan, TIDAK. Jika pemeriksaan
penulisan operasi-operasi pada keadaan menghasilkan kondisi
data dapat dilakukan secara satu yang benar, maka jalur yang
per satu maupun secara dipilih adalah jalur yang berlabel
keseluruhan. YA, sedangkan jika pemeriksaan
keadaan menghasilkan kondisi
yang salah, maka jalur yang

57
 
Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

dipilih adalah jalur yang berlabel suatu sub rutin pada program
TIDAK. Berbeda dengan aturan utama (main program) yang akan
pada simbol-simbol sebelumnya, anda pelajari pada bagian atau
penulisan kondisi harus dilakukan bab lain pada buku ini. Aturan
secara satu per satu (satu notasi penulisan simbol sub rutin sama
percabangan untuk satu kondisi). dengan simbol percabangan,
yaitu penulisan nama sub rutin
dilakukan secara satu per satu.

Gambar 2.5. Simbol percabangan

6) Sub rutin
Gambar 2.6. Simbol sub rutin
Sub rutin adalah suatu bagian
dalam program yang dapat
7) Arah aliran
melakukan (atau diberi) tugas
Arah aliran merupakan jalur yang
tertentu. Jadi sub rutin
harus diikuti dan merupakan garis
merupakan “program kecil” yang
penghubung yang
menjadi bagian dari suatu
menghubungkan setiap langkah
program yang besar. Sub rutin
pemecahan masalah yang ada
ada dua macam, yaitu prosedur
dalam flow chart. Arah aliran ini
(procedure) dan fungsi (function).
disimbolkan dengan anak panah
Perbedaan antara keduanya
adalah setelah dipanggil prosedur
tidak mengembalikan suatu nilai
sedangkan fungsi selalu
mengembalikan suatu nilai.
Dalam bahasa C++ kedua sub
rutin tersebut dijadikan satu yaitu
Gambar 2.7. Simbol arah aliran
function, sedangkan untuk Java
menggunakan class dimana
8) Terminator
keduanya bisa diatur untuk dapat
Terminator berfungsi untuk
mengembalikan nilai atau tidak
menandai titik awal dan titik akhir
dapat mengembalikan nilai. Sub
dari suatu flow chart. Simbol
rutin ini akan didiskusikan pada
terminator ini diberi label MULAI
bab tersendiri.
untuk menandai titik awal dari
Sub rutin memiliki suatu flow
flow chart dan label SELESAI
chart yang berdiri sendiri diluar
untuk menandai titik akhir dari
flow chart utama. Jadi dalam
flow chart. Jadi dalam sebuah
simbol sub rutin, kita cukup
flow chart harus ada dua simbol
menuliskan nama sub rutinnya
terminator, yaitu simbol
saja, sama seperti jika kita
terminator untuk MULAI dan
melakukan pemanggilan terhadap
SELESAI.
58
 
Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

Gambar 2.8. Simbol terminator (a) (b)

9) Konektor Gambar 2.9. Simbol konektor on


Konektor berfungsi untuk page (a) dan off page (b)
menghubungkan suatu langkah
dengan langkah lain dalam 10) Dokumen
sebuah flow chart dengan Dokumen merupakan tampilan
keadaan on page atau off page. data secara fisik yang dapat
Yang dimaksud dengan konektor dibaca oleh manusia. Data ini
on page adalah konektor yang biasanya merupakan hasil
digunakan untuk menghubungkan pemecahan masalah (informasi)
suatu langkah dengan langkah yang telah dicetak (print out).
lain dalam satu halaman.
Sedangkan konektor off page
adalah konektor untuk
menghubungkan suatu langkah
dengan langkah lain dalam
halaman yang berbeda. Konektor
ini digunakan apabila ruang Gambar 2.10. Simbol dokumen
gambar yang kita gunakan untuk
menggambar flow chart tidak Berikut adalah flow chart untuk
cukup luas untuk memuat flow permasalahan yang diberikan
chart secara utuh, jadi perlu (mencari bilangan terbesar dari tiga
dipisahkan atau digambar di bilangan acak yang dimasukkan)
halaman yang berbeda.

59
 
Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

Mulai 

a, b, c 
Ya
Maksimum < b Maksimum    b

Maksimum     a  Tidak

Ya
Maksimum < c Maksimum    c

Tidak

Maksimum

Selesai

Gambar 2.11. Flowchart

 
2.10. Pseudo code pemrograman sangatlah mudah
Pseudo code adalah algoritma meskipun penggunaannya tidak
yang bentuknya (strukturnya) sangat sepopuler flow chart.
mirip dengan bahasa pemrograman Dalam penulisannya, pseudo
khususnya bahasa pemrograman code harus terdiri dari tiga bagian,
terstruktur seperti pascal. Kemiripan yaitu :
ini merupakan keuntungan dari
pseudo code karena implementasi 1. Judul algoritma
atau penerjemahan algoritma ke Bagian yang terdiri atas nama
dalam source code suatu bahasa algoritma dan penjelasan

60
 
Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

(spesifikasi) dari algoritma 3. Deskripsi


tersebut. Nama sebaiknya Bagian ini berisi uraian langkah-
singkat dan menggambarkan langkah penyelesaian masalah
apa yang dapat dilakukan oleh yang ditulis dengan
algoritma tersebut. menggunakan aturan-aturan yang
akan dijelaskan selanjutnya.
2. Deklarasi Algoritma untuk permasalahan di
Bagian untuk mendefinisikan atas yaitu mencari bilangan terbesar
semua nama yang digunakan di dari tiga bilangan acak yang
dalam program. Nama tersebut dimasukkan dengan menggunakan
dapat berupa nama tetapan, pseudo code adalah:
peubah atau variabel, tipe,
prosedur, dan fungsi.

Algoritma bilangan_terbesar
{algoritma ini mencari bilangan terbesar dari tiga bilangan yang dimasukkan} 
deklarasi 
  a,b,c,mak : integer 
deskripsi 
  read(a,b,c) 
  mak  a 
  if (mak<b) 
    mak  b 
  else if(mak<c) 
    mak  c 
  end if 
  write(mak) 
 

Dalam pseudo code, garis C++ atau bahasa lainnya seperti


bawah harus digunakan untuk kata Java maka sebaiknya kita
algoritma (yang diikuti oleh judul dari mengetahui lebih dahulu langkah-
algoritma), kata deklarasi, kata langkah yang biasa dilakukan untuk
deskripsi, tipe data, read, write, if, membuat suatu program komputer.
else, end if, for, end for, while, end Langkah-langkah tersebut adalah :
while, do while, dan end do while 1. Mendefinisikan permasalahan
Ini merupakan langkah pertama
yang sering dilupakan orang.
2.11. Penerjemahan ke kode Menurut hukum Murphy (Henry
sumber Ledgard): “Semakin cepat
Sebelum membahas mengenai menulis program, akan semakin
penerjemahan algoritma ke dalam lama kita dapat
bentuk source code bahasa menyelesaikannya”. Hal ini
pemrograman (program komputer) terutama dirasakan apabila kita
membuat program untuk
61
 
Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

permasalahan yang komplek. perangkat keras dan platform


Oleh karena itu sebelum kita (sistem operasi) lainnya.
menulis source code suatu 5. Menguji program
program sebaiknya kita Setelah selesai menulis source
menentukan atau code (program sudah jadi), ujilah
mengidentifikasi terlebih dahulu program tersebut dengan segala
inti dari permasalahannya, macam kemungkinan yang ada,
kemudian apa saja yang dapat termasuk error-handling, sehing-
dan harus dipecahkan dengan ga program tersebut benar-benar
bantuan komputer, dan yang handal dan layak untuk
terakhir adalah apa masukan digunakan.
untuk programnya dan 6. Menulis dokumentasi
bagaimana nanti keluarannya. Dokumentasi sangatlah penting
2. Menemukan solusi agar pada suatu saat jika kita
Setelah mendefinisikan masalah, ingin mengembangkan program,
maka langkah berikutnya adalah kita tidak mengalami kesulitan
menentukan solusinya. Jika dalam membaca source code
permasalahan terlalu komplek, yang sudah kita tulis. Cara paling
maka ada baiknya masalah mudah dan sederhana dalam
tersebut dipecah menjadi membuat suatu dokumentasi
beberapa modul kecil dapat adalah dengan menuliskan
berupa prosedure, fungsi, atau komentar-komentar kecil pada
class sehingga akan lebih mudah suatu baris (atau suatu bagian
untuk diselesaikan. Penggunaan dari source code) tentang apa
modul ini akan membuat program maksud dari kode-kode tersebut
utamanya menjadi lebih singkat, dan apa kegunaannya, kemudian
mudah untuk dilihat dan dianalisis variabel apa saja yang digunakan
untuk tujuan debuging serta untuk dan untuk apa, serta parameter-
pengembangan dari program. parameter yang ada pada suatu
3. Memilih algoritma prosedur dan fungsi.
Pilihlah (atau buatlah) algoritma 7. Merawat program
yang benar-benar sesuai dan Program yang sudah jadi
efisien untuk permasalahan yang sebaiknya juga dilakukan
diberikan. perawatan untuk mencegah
4. Memilih bahasa pemrograman munculnya bug yang sebelumnya
dan menulis source code tidak terdeteksi. Selain itu juga
program berguna untuk menambah
Bahasa pemrograman yang fasilitas-fasilitas baru yang dahulu
digunakan hendaknya bahasa sewaktu dibuat belum ada.
yang memang sudah anda kuasai
dengan baik. Atau jika masih Pada bab ini kita hanya fokus
dalam tahap belajar, pilihlah pada langkah pertama sampai
bahasa pemrograman yang dengan langkah keempat saja.
mudah dipelajari dan digunakan Sedangkan untuk dapat
serta memiliki tingkat menerjemahkan notasi algoritma
kompatibilitas tinggi dengan yang telah dibuat ke dalam bentuk
62
 
Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

source code suatu bahasa 1. Sequence Process, merupakan


pemrograman, seharusnya kita instruksi yang dikerjakan secara
mamahami terlebih dahulu bahasa sekuensial (berurutan).
pemrograman yang akan kita 2. Selection Process, adalah
gunakan, seperti aturan tata instruksi yang dikerjakan jika
bahasanya, intruksi-instruksi yang memenuhi suatu kriteria atau
digunakan, tipe data, dan masih kondisi (keadaan) tertentu.
banyak lagi. Semua itu akan kita 3. Iteration Process, yaitu instruksi
pelajari satu persatu dibagian lain yang dikerjakan selama
pada buku ini. Oleh karena kita baru memenuhi suatu kriteria atau
akan mempelajari bahasa kondisi (keadaan) tertentu.
pemrograman yaitu C++ atau 4. Concurrent Process, beberapa
program lainnya seperti java, maka instruksi dikerjakan secara
untuk mempermudah pemahaman bersama.
tentang algoritma akan diberikan
contoh-contoh permasalahan Berikut merupakan contoh-
sederhana yang sering dijumpai contoh permasalahan, algoritma
dalam pemrograman, bagaimana penyelesaian dalam tiga notasi
algoritmanya dalam bentuk tiga algoritma serta penerjemahannya
notasi algoritma yang telah diberikan, dalam bahasa pemrograman C++
dan kemudian bagaimana atau program lainnya seperti java.
mengimplementasikan atau 1. Masalah penukaran isi ember
menerjemakan algoritma tersebut ke (contoh sequence process).
dalam bentuk source code bahasa Masalah penukaran isi ember
pemrograman C++ atau program dapat kita aplikasikan untuk
lainnya seperti java. masalah berikut ini. Mula-mula A
Untuk membantu penerjemahan bernilai 19 dan B bernilai 33. Jika
algoritma kita juga harus nilai kedua variabel A dan B
memperhatikan jenis-jenis proses tersebut ditukar, A menjadi 33
yang biasanya kita temukan dalam dan B menjadi 19, maka
algoritma. Dalam algoritma ada algoritmanya adalah :
empat jenis proses yang dikenal,
yaitu :

Menggunakan uraian kalimat deskriptif


1) Set nilai variabel A  19 dan B  33 
2) Set nilai dari variabel C menjadi sama dengan variabel A. 
3) Set nilai variabel A menjadi sama dengan B. 
4) Set nilai variabel B menjadi sama dengan C. 
5) Tampilkan nilai variabel A dan B. 

Algoritma diatas dapat juga ditulis seperti dibawah ini:


1) A  19 dan B  33 
2) C  A 
3) A  B 
63
 
Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

4) B  C 
5) Tulis A dan B 

Jika algoritma tersebut diatas digambar menggunakan flow chart adalah


sebagai berikut: 
 
 

Mulai

A  19
B  33

 
 

C  A
A  B
B  C

A, B

Selesai

 
 

Gambar 2.12. Gambar flowchart

64
 
Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

a) Menggunakan pseudo code

Algoritma tukar_data
{algoritma ini digunakan untuk menukarkan dua buah data } 
deklarasi 
  a,b,c : integer 
deskripsi 
  a  19 
  b  33 
  c  a 
  a  b 
  b  c 
  write(a,b) 
 
Dari ketiga notasi algoritma di karena itu penerjemahan notasi
atas dapat disimpulkan bahwa algoritma ke dalam bentuk source
langkah-langkah pemecahan code bahasa pemrograman juga
masalah yang telah dibuat dapat harus mengikuti langkah-langkah
dibagi dalam tiga kelompok, yaitu yang diberikan dalam ketiga
memberi nilai variabel A dan B, algoritma. Berikut adalah
menukarkan nilainya, dan terakhir penerjemahan algoritma ke dalam
adalah menampilkannya. Oleh bahasa C++.

1. #include <iostream> 
2. using namespace std; 
3. int main() { 
4.    int a = 19, b = 33; 
5.   int c = a; 
6.    a = b; 
7.    b = c; 
8.   cout << “a = “ << a << endl; 
9.    cout << “b = “ << b; 
10.   return 0; 
11.} 

Langkah ke-4 merupakan menampilkan data yang telah ditukar,


pemberian nilai variabel A dan B. ada dalam langkah ke-8 dan 9.
Langkah selanjutnya, langkah ke-5 Langkah-langkah yang lainnya
sampai dengan langkah ke-7, merupakan aturan tata bahasa dalam
merupakan proses penukaran data. bahasa C++ yang akan dijelaskan
Dan langkah terakhir, yaitu dalam bab-bab selanjutnya.

65
 
Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

Sedangkan penerjemahan algoritma- Java adalah sebagai berikut:


algoritma tersebut dalam bahasa

1. class tukarData { 
2. public static void main(String[ ] args) { 
3.      int a=19, b=33; 
4.      int c = a; 
5.      a = b; 
6.      b = c; 
7.      System.out.println("a = " + a); 
8.      System.out.println("b = " + b); 
9.    } 
10. } 
 
Langkah ke-3 merupakan dari algoritma tersebut ke dalam
pemberian nilai variabel A dan B, bentuk source code bahasa C++
langkah ke-4 sampai dengan atau program lainnya seperti java,
langkah ke-6 merupakan proses kita harus menggunakan klausa
penukaran data, dan langkah ke- if().
7 dan 8 merupakan kode untuk Sedangkan pada algoritma
menampilkan data yang telah dengan flow chart, proses
ditukar. Sedangkan langkah yang pemeriksaan keadaan
lainnya merupakan aturan tata disimbolkan dengan simbol
bahasa Java yang akan percabangan dimana kalau
dijelaskan dalam bab-bab jalurnya kita telusuri, baik jalur YA
selanjutnya. maupun TIDAK, akan terhubung
dengan langkah penyelesaian
2. Masalah mencari bilangan masalah selanjutnya, tidak
terbesar dari tiga bilangan yang kembali ke langkah sebelumnya
dimasukkan (contoh selection ataupun kembali ke simbol
process). percabangan semula karena jika
Algoritma pada permasalahan ini terjadi kita tidak bisa
ini sudah diberikan, silakan lihat menggunakan klausa if() dalam
kembali sub bab notasi algoritma. penerjemahan ke bentuk source
Dari ketiga notasi algoritma code bahasa C++ atau program
tersebut dapat kita ketahui bahwa lainnya seperti java (lihat contoh
ada dua proses pemeriksaan permasalahan berikutnya, yaitu
keadaan (data). Pada algoritma contoh ke-3 dan ke-4).
dengan uraian kalimat deskriptif, Untuk algoritma dengan
proses pemeriksaan ini dapat kita pseudo code, penerjemahan
identifikasi dengan adanya kata akan jauh lebih mudah karena
kunci JIKA. Dengan demikian seperti yang telah dikemukakan
pada saat menerjemahkan sebelumnya bahwa pseudo code
langkah ke-3 dan langkah ke-5 ini strukturnya sangat mirip
66
 
Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

dengan penulisan source code adalah (perhatikan source code baris


bahasa pemrograman. ke-12 dan 13):
Dengan demikian penerjemahan
algoritma ke dalam bahasa C++

1. #include <iostream> 
2. using namespace std; 
3. int main() { 
4.   int a,b,c,mak; 
5.   cout << "Bilangan pertama = "; 
6.   cin >> a; 
7.   cout << "Bilangan kedua   = "; 
8.   cin >> b; 
9.   cout << "Bilangan ketiga  = "; 
10.   cin >> c; 
11.   mak = a; 
12.   if (mak < b) mak = b; 
13.   else if (mak < c) mak = c; 
14.   cout << "Bilangan terbesarnya = " << mak; 
15.   return 0; 
16. } 
 
Sedangkan penerjemahan dalam (perhatikan source code baris ke-
bahasa lain misalnya bahasa 14 dan 15)
Java adalah sebagai berikut

1. import java.util.Scanner; 
2. import java.io.*; 
3. class bilTerbesar { 
4. public static void main(String[ ] args) { 
5.      int a,b,c; 
6. Scanner input = new Scanner(System.in); 
7. System.out.print("Bilangan pertama = "); 
8.      a = input.nextInt(); 
9. System.out.print("Bilangan kedua   = "); 
10.      b = input.nextInt(); 
11. System.out.print("Bilangan ketiga  = "); 
12.      c = input.nextInt(); 
13.      int mak = a; 
14.      if (mak < b) mak = b; 
15.      else if (mak < c) mak = c; 
16. System.out.print("Bilangan terbesarnya  = " + mak); 

67
 
Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

17.    } 
18. } 

Pada permasalahan ini, kita juga a) Menggunakan uraian kalimat


dapat menggunakan algoritma deskriptif
lain, yaitu :

1) Masukkan a, b, dan c. 
2) Jika a > b, maka kerjakan langkah ke‐3. Jika tidak, kerjakan langka ke‐5. 
3) Jika a > c, maka kerjakan langkah ke‐4. Jika tidak, kerjakan langka ke‐7. 
4) mak  a. 
5) Jika b > c, kerjakan langkah ke‐6. Jika tidak, kerjakan langkah ke‐7. 
6) mak  b. 
7) mak  c. 
8) Tulis mak. 

68
 
Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

b) Menggunakan flow chart


 
Mulai

a, b, c

Ya Ya
a>b a>c Maksimum  a

Tidak Tidak

Ya
Maksimum  b b>c

Tidak

Maksimum  c

Maksimum

Selesai

Gambar 2.13. Flowcart


 
 
a) Menggunakan pseudo code

Algoritma bilangan_terbesar
{algoritma  ini  mencari  bilangan  terbesar  dari  tiga  bilangan  yang  dimasukkan 
secara acak} 

69
 
Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

deklarasi 
   a,b,c,mak : integer 
deskripsi 
   read(a,b,c) 
   if (a > b) 
  if (a > c) 
    mak  a 
  else mak  c 
  end if 
   else  
  if(b > c) 
  mak  b 
  else mak  c 
  end if 
   end if 
write(mak 
 
Pada algoritma dengan uraian pertama (langkah ke-2).
kalimat deskriptif kita dapat Sedangkan penggunaan klausa
mengidentifikasi bahwa terdapat if() yang ketiga (langkah ke-5)
tiga buah pemeriksaan keadaan, juga ada dalam klausa if() yang
yaitu langkah ke-2, 3, dan 5. pertama pada bagian else. Hal ini
Pada langkah ke-2, jika kondisi dinamakan percabangan
terpenuhi, langkah selanjutnya, bersarang, yaitu percabangan
yaitu langkah ke-3, adalah yang ada dalam percabangan
merupakan pemeriksaan lainnya.
keadaan lagi. Demikian pula jika Keberadaan percabangan
kondisi yang telah ditentukan bersarang ini juga dapat diidentifikasi
tidak terpenuhi, langkah dari simbol percabangan yang
berikutnya, yaitu langkah ke-5, terhubung dengan simbol
adalah merupakan pemeriksaan percabangan lainnya. Identifikasi ini
keadaan kembali. Dari sini dapat lebih jelas terlihat pada algoritma
disimpulkan bahwa nantinya dengan pseudo code. Dengan
penggunaan klausa if() yang demikian penerjemahan algoritma ke
kedua (langkah ke-3) akan dalam bahasa C++ adalah:
berada di dalam klausa if() yang

1. #include <iostream> 
2. using namespace std; 
3. int main() { 
4.    int a,b,c,mak; 
5.    cout << "Bilangan pertama = "; 
6.    cin >> a; 

70
 
Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

7.    cout << "Bilangan kedua   = "; 
8.    cin >> b; 
9.    cout << "Bilangan ketiga  = "; 
10.    cin >> c; 
11.    if (a > b) { 
12.      if (a > c) 
13.        mak = a; 
14.      else mak = c; 
15.    } 
16.    else { 
17.      if (b > c)  
18.        mak = b; 
19.      else mak = c; 
20.    } 
21. cout << "Bilangan terbesarnya = " << mak; 
22.    return 0; 
23. } 

Klausa if() pada source code di dalam klausa if() (baris ke-11)
baris ke-12 sampai dengan baris ke- bagian else (baris ke-16). Sedangkan
14 ada di dalam klausa if() baris ke- penerjemahan algoritma ke dalam
11. Sedangkan klausa if() baris ke-17 bahasa Java adalah (perhatikan baris
sampai dengan baris ke-19 juga ada ke-13 sampai dengan baris ke-22) :

 
1. import java.util.Scanner; 
2. import java.io.*; 
3. class bilBesar { 
4. public static void main(String[ ] args) { 
5.      int a,b,c,mak; 
6. Scanner input = new Scanner(System.in); 
7. System.out.print("Bilangan pertama = "); 
8.      a = input.nextInt(); 
9. System.out.print("Bilangan kedua   = "); 
10.      b = input.nextInt(); 
11. System.out.print("Bilangan ketiga  = "); 
12.      c = input.nextInt(); 
13.      if (a > b) { 
14.        if (a > c)  
15.          mak = a; 
16.        else mak = c; 
17.      } 

71
 
Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

18.      else { 
19.        if (b > c) 
20.          mak = b; 
21.        else mak = c; 
22.      } 
23. System.out.print("Bilangan terbesarnya  = " + mak); 
24.    } 
25. } 
 
3. Diminta suatu program dimana  Bilangan 4 untuk hari Rabu.
jika dimasukkan suatu bilangan (1  Bilangan 5 untuk hari Kamis.
sampai dengan 7) maka akan  Bilangan 6 untuk hari Jumat.
menampilkan nama hari, yaitu :  Bilangan 7 untuk hari Sabtu.
 Bilangan 1 untuk hari Minggu. Algoritmanya adalah :
 Bilangan 2 untuk hari Senin.
 Bilangan 3 untuk hari Selasa.

Menggunakan uraian kalimat deskriptif 


1) Masukan bilangan sebuah bilangan bulat (angka). 
2) Jika angka  1, maka kerjakan langkah ke‐3. Jika tidak, kerjakan langkah ke‐4. 
3) hari  “Minggu”. 
4) Jika angka  2, maka kerjakan langkah ke‐5. Jika tidak, kerjakan langkah ke‐6. 
5) hari  “Senin”. 
6) Jika angka  3, maka kerjakan langkah ke‐7. Jika tidak, kerjakan langkah ke‐8. 
7) hari  “Selasa”. 
8) Jika angka  4, maka kerjakan langkah ke‐9. Jika tidak, kerjakan langkah ke‐10. 
9) hari  “Rabu”. 
10) Jika angka  5, maka kerjakan langkah ke‐11. Jika tidak, kerjakan langkah ke‐12. 
11) hari  “Kamis”. 
12) Jika angka  6, maka kerjakan langkah ke‐13. Jika tidak, kerjakan langkah ke‐14. 
13) hari  “Jumat”. 
14) Jika angka  7, maka kerjakan langkah ke‐15. Jika tidak, kerjakan langkah ke‐16. 
15) hari  “Sabtu”. 
16) hari  “Tidak ada nama hari untuk angka tersebut” 
17) Tampilkan hari. 
 
 
 
 
 
 
 
 

72
 
Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

a) Menggunakan flow chart

A B
Mulai

Ya
angka angka  2 hari  “Senin”

Tidak

Ya
angka  1 hari  “Minggu”
Ya
angka  3 hari  “Selasa”

Tidak
Tidak
A B

Ya
angka  4 hari  “Rabu”

Tidak

Ya
angka  5 hari  “Kamis”

Tidak

Ya
angka  6 hari  “Jumat”

Tidak

Ya
angka  7 hari  “Sabtu”

Tidak

hari  “Tidak ada


nama hari”

hari

Selesai

Gambar 2.14. Flowchart

73
 
Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

b) Menggunakan pseudo code

Algoritma nama_hari
{algoritma  ini  digunakan  untuk  mengetahui  nama  hari  dari  bilangan  bulat 
yang dimasukkan} 
deklarasi 
  angka  : integer 
  hari  : char 
deskripsi 
  read(angka) 
  if(angka  1) 
  hari  “Minggu” 
  else if(angka  2)  
  hari  “Senin” 
  else if(angka  3)  
  hari  “Selasa” 
  else if(angka  4)  
  hari  “Rabu” 
  else if(angka  5)  
  hari  “Kamis” 
  else if(angka  6)  
  hari  “Jumat” 
  else if(angka  7)  
  hari  “Sabtu” 
  else  
  hari  “Tidak ada nama hari” 
  end if 
  write(hari) 

Algoritma diatas dapat juga ditulis seperti dibawah ini:

Algoritma nama_hari
{algoritma  ini  digunakan  untuk  mengetahui  nama  hari  dari  bilangan  bulat 
yang dimasukkan} 
deklarasi 
  angka  : integer 
  hari  : char 
deskripsi 
  read(angka) 
  switch(angka) 
  case 1 : hari  “Minggu” 
  case 2 : hari  “Senin” 

74
 
Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

  case 3 : hari  “Selasa” 
  case 4 : hari  “Rabu” 
  case 5 : hari  “Kamis” 
  case 6 : hari  “Jumat” 
  case 7 : hari  “Sabtu” 
  default : hari  “Tidak ada nama hari” 
  end switch 
  write(hari) 
 
 
Pada algoritma dengan uraian menggunakan klausa if(). Agar
kalimat deskriptif kita dapat program kita lebih efisien, maka kita
mengidentifikasi bahwa terdapat menggunakan switch() untuk
tujuh buah pemeriksaan keadaan, pemeriksaan keadaan sebanyak ini.
yaitu langkah ke-2, 4, 6, 8, 10, 12, Dengan demikian penerjemahan
dan 14. Pemeriksaan yang sebanyak algoritma ke dalam bahasa C++
ini sangat tidak efektif kalau kita adalah :

1. #include <iostream> 
2. #include <cstring> 
3. using namespace std; 
4. int main() { 
5.    int angka; 
6.    string hari; 
7.    cout << "Bilangan = "; 
8.    cin >> angka;  
9.    if (angka==1) hari="Minggu"; 
10.    else if (angka==2) hari="Senin"; 
11.    else if (angka==3) hari="Selasa"; 
12.    else if (angka==4) hari="Rabu"; 
13.    else if (angka==5) hari="Kamis"; 
14.    else if (angka==6) hari="Jumat"; 
15.    else if (angka==7) hari="Sabtu"; 
16.    else hari="tidak ada"; 
17. cout << "Nama hari ke‐" << angka << " adalah " << hari; 
18.    return 0; 
19. } 

75
 
Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

Program diatas dapat juga ditulis seperti dibawah ini:

1. #include <iostream> 
2. #include <cstring> 
3. using namespace std; 
4. int main() { 
5.    int angka; 
6.    string hari; 
7.    cout << "Bilangan = "; 
8.    cin >> angka;  
9.    switch(angka) { 
10.      case 1 : hari = "Minggu"; 
11.        break; 
12.      case 2 : hari = "Senin"; 
13.        break; 
14.      case 3 : hari = "Selasa"; 
15.        break; 
16.      case 4 : hari = "Rabu"; 
17.        break; 
18.      case 5 : hari = "Kamis"; 
19.        break; 
20.      case 6 : hari = "Jumat"; 
21.        break; 
22.      case 7 : hari = "Sabtu"; 
23.        break; 
24.      default : hari = "tidak ada"; 
25.    } 
26. cout << "Nama hari ke‐" << angka << " adalah = " << hari; 
27.    return 0; 
28. } 

Sedangkan dalam contoh dalam bahasa Java adalah :

1. import java.util.Scanner; 
2. import java.io.*; 
3. class bab2_03 { 
4. public static void main(String[ ] args) { 
5.    int angka; 
6.    String hari; 
7. Scanner input = new Scanner(System.in); 
8. System.out.print("Bilangan = "); 
9.    angka = input.nextInt(); 
10. if (angka==1) hari="Minggu"; 

76
 
Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

11. else if (angka==2) hari="Senin"; 
12. else if (angka==3) hari="Selasa"; 
13. else if (angka==4) hari="Rabu"; 
14. else if (angka==5) hari="Kamis"; 
15. else if (angka==6) hari="Jumat"; 
16. else if (angka==7) hari="Sabtu"; 
17.    else hari="tidak ada"; 
18. System.out.print("Nama hari ke‐" + angka + " adalah = " + hari); 
19.    } 
20. } 

Program diatas dapat juga ditulis seperti dibawah ini:

1. import java.util.Scanner; 
2. import java.io.*; 
3. class bab2_03_2 { 
4. public static void main(String[ ] args) { 
5.      int angka; 
6.      String hari; 
7. Scanner input = new Scanner(System.in); 
8.      System.out.print("Bilangan = "); 
9.      angka = input.nextInt(); 
10.      switch(angka) { 
11.        case 1 : hari = "Minggu"; 
12.          break; 
13.        case 2 : hari = "Senin"; 
14.          break; 
15.        case 3 : hari = "Selasa"; 
16.          break; 
17.        case 4 : hari = "Rabu"; 
18.          break; 
19.        case 5 : hari = "Kamis"; 
20.          break; 
21.        case 6 : hari = "Jumat"; 
22.          break; 
23.        case 7 : hari = "Sabtu"; 
24.          break; 
25.        default : hari = "tidak ada"; 
26.      } 
27. System.out.print("Nama hari ke‐" + angka + " adalah = " + hari); 
28.    } 
29. } 
 

77
 
Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

4. Masalah menghitung rata-rata melalui keyboard (contoh iteration


dari sejumlah data yang process). Algoritmanya adalah:
dimasukkan secara manual

Menggunakan uraian kalimat deskriptif 

1) Masukan jumlah (n) data yang diinginkan. 
2) Selama jumlah data yang dimasukkan kurang dari n, kerjakan langkah ke‐
3 dan ke‐4. Jika tidak kerjakan langkah ke‐5. 
3) Masukan data. 
4) Tambahkan data yang dimasukkan dengan data sebelumnya. 
5) Hitung rata‐rata data. 
6) Tampilkan besar rata‐ratanya. 

Uraian diatas dapat juga ditulis seperti dibawah ini:

1) Masukkan n 
2) i  0 
3) Sum  0 
4) Selama i < n, kerjakan langkah ke‐5, 6, dan 7. 
5) Masukkan data[i] 
6) Sum  Sum + data[i] 
7) i++ 
8) Rata2  Sum / n 
9) Tulis Rata2 
 
Langkah ke-2 dan ke-3 (penghitung) untuk proses
merupakan proses inisialisasi atau perulangan yang digunakan untuk
pemberian nilai awal yang diperlukan memasukkan data satu persatu dan
dalam penulisan source code. sekaligus menjumlahkan data yang
Sebaiknya variabel Rata2 juga dimasukkan dengan penjumlahan
diinisialisasi agar keluaran dari data sebelumnya dimana
program lebih valid. Variabel i penjumalahan data sebelumnya
digunakan sebagai counter disimpan dalam variabel Sum

78
 
Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

b) Menggunakan flow chart

Mulai

Jumlah data (n)

i0
Sum  0

Tidak Ya
i<n
Data[i]

Sum  Sum + Data[i]


i++

Rata2  Sum / n

Rata2

Selesai

Gambar 2.15. Flowchart

Proses perulangan diperlukan meminta pengguna untuk


karena banyak data yang memasukkan banyak data). Langkah
dimasukkan belum diketahui dengan ke-7 merupakan increment variabel i,
pasti (lihat langkah pertama yang yaitu menaikkan nilai variabel i
79
 
Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

sebesar satu tingkat. Data pada array ini akan dibahas pada bab
permasalahan ini disimpan dalam tersendiri. 
tipe data array (data[i]). Tipe data
 
c) Menggunakan pseudo code

Algoritma hitung_rata2
{algoritma ini digunakan untuk menghitung rata‐rata dari sejumlah data yang 
dimasukkan melalui keyboard} 
deklarasi 
  i, n, sum, data[20]  : integer 
  rata2  : float 
deskripsi 
  read(n) 
  i  0 
  sum  0 
  while(i < n) 
  read(data[i]) 
  sum += data[i] 
  i++ 
  end while 
  rata2  sum / n 
  write(rata2) 

Algoritma diatas dapat juga ditulis seperti dibawah ini:

Algoritma hitung_rata2
{algoritma ini digunakan untuk menghitung rata‐rata dari sejumlah data yang 
dimasukkan melalui keyboard} 
deklarasi 
  i, n, sum, data[20]  : integer 
  rata2  : float 
deskripsi 
  read(n) 
  sum  0 
  for(i=0; i<n; i++) 
  read(data[i]) 
  sum += data[i] 
  end for 
  rata2  sum / n 
  write(rata2) 

80
 
Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

Langkah ke-2 pada algoritma adalah langkah ke-3 dan 4 pada


dengan uraian kalimat deskriptif algoritma dengan uraian kalimat
yang pertama dan langkah ke-4 deskriptif yang pertama dan
pada algoritma dengan uraian langkah ke-5, 6, dan 7 pada
kalimat deskriptif yang kedua, algoritma dengan uraian kalimat
terdapat kata kunci selama. Kata deskriptif yang kedua. Pada bab
kunci ini mengidentifikasikan selanjutnya anda akan
bahwa dalam penerjemahan ke mengetahui bahwa klausa
dalam bentuk source code perulangan ini, dalam bahasa
bahasa C++ atau program C++ atau program lainnya seperti
lainnya seperti java nanti kita java, ada tiga macam bentuk
akan menggunakan klausa untuk yang dapat anda pilih, yaitu for(),
looping (perulangan) yaitu while() while(), atau do while().
dan atau for() karena langkah- Untuk algoritma dengan flow
langkah tersebut memerintahkan chart, proses perulangan yang
kita untuk melakukan langkah menggunakan klausa while() atau
berikutnya, bukan kembali ke for() dapat diidentifikasi dari
langkah sebelumnya, jika kondisi simbol percabangan dimana
yang telah ditentukan terpenuhi. kalau jalurnya, dalam hal ini jalur
While() dan for() dapat digunakan yang berlabel YA, kita telusuri
secara bergantian jika perulangan akan terhubung ke simbol
yang terjadi dapat diketahui berikutnya dan kemudian kembali
banyaknya (jumlah perulangan lagi simbol percabangan semula.
yang terjdi), dalam hal ini banyak Sedangkan untuk algoritma
perulangannya adalah n, yaitu dengan pseudo code,
banyak data yang akan penerjemahan tidak akan
dimasukkan. Tetapi jika banyak mengalami kesulitan karena,
perulangannya tidak dapat sekali lagi, struktur dari pseudo
diketahui dengan pasti, maka kita code sangat mirip dengan
harus menggunakan while(), tidak penulisan source code bahasa
bisa dengan for(). Pada contoh pemrograman.
berikutnya akan diberikan Dengan demikian penerjemahan
perulangan yang tidak diketahui algoritma ke dalam bahasa C++
berapa banyak perulangan yang adalah (perhatikan baris ke-8 sampai
terjadi. dengan baris ke-14 dimana baris ke-
Langkah-langkah yang masuk 9 dan 10 merupakan baris tambahan
dalam proses perulangan ini agar program lebih user friendly).

 
1. #include <iostream> 
2. using namespace std; 
3. int main() { 
4.    int n, i=0, sum=0,  data[20]; 
5.    float rata2; 
6. cout << "Jumlah data (maksimum 20 data) = "; 

81
 
Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

7.    cin >> n; 
8.    while(i < n) { 
9.      int j = i + 1; 
10. cout << "Masukkan data ke‐" << j << " : "; 
11.      cin >> data[i]; 
12.      sum += data[i]; 
13.      i++; 
14.    } 
15.    rata2 = sum / n; 
16. cout << "Rata‐ratanya = " << rata2; 
17.    return 0; 
18. } 

Program diatas dapat juga ditulis seperti dibawah ini:

1. #include <iostream> 
2. using namespace std; 
3. int main() { 
4.    int n, i, sum=0,  data[20]; 
5.    float rata2; 
6. cout << "Jumlah data (maksimum 20) = "; 
7.    cin >> n; 
8.    for(i=0; i < n; i++) { 
9.      int j = i + 1; 
10. cout << "Masukkan data ke‐" << j << " : "; 
11.      cin >> data[i]; 
12.      sum += data[i]; 
13.    } 
14.    rata2 = sum / n; 
15. cout << "Rata‐ratanya = "          << rata2; 
16.    return 0; 
17. } 

Sedangkan jika ditulis dalam bahasa Java adalah sebagai berikut:

1. import java.util.Scanner; 
2. import java.io.*; 
3. class bab2_03 { 
4. public static void main(String[ ] args) { 
5.      int n, i=0, sum=0; 
6.      int[ ] data = new int[20]; 
7.      float rata2; 
8. Scanner input = new Scanner(System.in); 

82
 
Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

9. System.out.print("Jumlah data (mak. 20) = "); 
10.      n = input.nextInt(); 
11.      while(i < n) { 
12.        int j = i + 1; 
13. System.out.print("Masukkan data ke‐" + j + " : "); 
14.      data[i] = input.nextInt(); 
15.      sum += data[i]; 
16.      i++; 
17.      } 
18.      rata2 = sum / n; 
19. System.out.print("Rata‐ratanya = " + rata2); 
20.    } 
21. } 

Program diatas dapat juga ditulis seperti dibawah ini:

1. import java.util.Scanner; 
2. import java.io.*; 
3. class bab2_03_2 { 
4. public static void main(String[ ] args) { 
5.      int n, i, sum=0; 
6.      int[ ] data = new int[20]; 
7.      float rata2; 
8. Scanner input = new Scanner(System.in); 
9. System.out.print("Jumlah data (mak. 20) = "); 
10.      n = input.nextInt(); 
11.      for(i=0;i < n;i++) { 
12.        int j = i + 1; 
13. System.out.print("Data ke‐" + j + " : "); 
14.        data[i] = input.nextInt(); 
15.        sum += data[i]; 
16.      } 
17.      rata2 = sum / n; 
18. System.out.print("Rata‐ratanya = " + rata2); 
19.    } 
20. } 

5. Masalah menentukan Faktor yang langkah-langkahnya adalah


Persekutuan Besar (FPB). sebagai berikut :
Untuk memecahkan persoalan 1) Diberikan dua buah bilangan
FPB di atas, kita dapat bulat positif, misalnya m dan n
menggunakan algoritma Euclid dimana syaratnya adalah m >
n.
83
 
Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

2) Bagilah m dengan n, misalnya m 36


hasilnya adalah r. 1. =  mempunyai sisa
n 20
3) Apabila r = 0, maka hasilnya
r = 16
adalah n itu sendiri
2. r = 16  r  0
(merupakan FPB dari m dan
3. m = 20 dan n = 16
n).
m 20
4) Jika r  0 maka proses 4. =  mempunyai sisa
pencarian dilanjutkan yaitu
n 16
ganti m dengan n dan n r=4
dengan r dan ulangi langkah 5. r = 4  r  0
ke-2, demikian selanjutnya. 6. m =16 dan n = 4
m 16
Misalnya akan dicari FPB dari 36 7.   mempunyai sisa r
dan 20, maka penyelesaiannya n 4
menurut algoritma Euclid adalah : =0
Jadi FPB( 36, 20) = 4 
 
 
b) Menggunakan flow chart

Mulai A

Ya
m, n fpb  n r=0

Tidak

mn
m>n Tidak Ya nr
Tidak r != 0
rm%n
fpb  n
Ya

rm%n

fpb

Selesai

Gambar 2.16. Flowchart

84
 
Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

Algoritma Euclid di atas merupakan deskriptif. Algoritma tersebut dapat


algoritma dengan uraian kalimat ditulis kembali sebagai berikut:
 
a) Menggunakan uraian kalimat deskriptif
1) Masukkan m dan n. 
2) Selama m < n ulangi kembali langkah pertama. 
3) r  m % n 
4) Jika r = 0 maka fpb n.Jika tidak kerjakan langkah ke‐5. 
5) Selama r != 0 kerjakan langkah ke‐6 sampai ke‐8. 
6) m  n dan n  r 
7) r  m % n 
8) fpb  n 
9) Tulis fpb. 

c) Menggunakan pseudo code


{algoritma  ini  digunakan  untuk  mencari  faktor  persekutuan  besar  dari  dua 
buah bilangan yang dimasukkan} 
deklarasi 
  m, n, r, fpb  : integer 
deskripsi 
  do read(m,n) 
  while(m<n) 
  end do while 
  r  m % n 
  if (r == 0) fpb  n 
  else 
    while(r != 0) 
      m  n 
      n  r 
      r  m % n 
      fpb  n 
    end while 
  end if 
  write(fpb) 
 
Langkah ke-2 pada algoritma perulangan. Akan tetapi kita tidak
dengan uraian kalimat deskriptif dapat menggunakan klausa
mempunyai kata kunci SELAMA while() seperti pada contoh
yang mengidentifikasikan bahwa sebelumnya karena pada kasus
dalam penerjemahannya ke ini langkah tersebut
dalam source code bahasa memerintahkan untuk kembali ke
pemrograman nanti langkah sebelumnya jika kondisi
menggunakan klausa untuk yang diberikan terpenuhi.
85
 
Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

Oleh karena itu klausa yang langkah sebelumnya maka kita


paling tepat digunakan adalah do menggunakan klausa do while().
while(). Sedangkan langkah ke-5 Untuk algoritma dengan flow
kita gunakan klausa while() chart, proses perulangan yang
karena langkah ke-5 menggunakan klausa do while()
memerintahkan kita untuk dapat diidentifikasi dari simbol
melakukan langkah-langkah percabangan dimana kalau
berikutnya, bukan kembali ke jalurnya, dalam hal ini jalur yang
langkah sebelumnya. Kita tidak berlabel TIDAK, kita telusuri akan
bisa menggunakan klausa for() terhubung ke simbol sebelumnya
karena, sesuai dengan dan kemudian kembali lagi simbol
penjelasan pada contoh percabangan semula.
sebelumnya, kita tidak bisa Sedangkan untuk algoritma
mengetahui dengan pasti berapa dengan pseudo code,
banyak perulangan yang terjadi. penerjemahan tidak akan
Dengan demikian dapat kita mengalami kesulitan karena,
simpulkan bahwa jika setelah sekali lagi, struktur dari pseudo
proses pemeriksaan keadaan code sangat mirip dengan
memerintahkan kita untuk penulisan source code bahasa
melakukan langkah-langkah pemrograman. Dengan demikian
berikutnya maka kita penerjemahan algoritma ke
menggunakan klausa while(). dalam bahasa C++ adalah
Sebaliknya jika setelah proses (perhatikan baris ke-5 sampai
pemeriksaan keadaan dengan baris ke-10 dan baris ke-
memerintahkan kita untuk 14 sampai dengan baris ke-19)
kembali lagi melakukan langkah-
 
1. #include <iostream> 
2. using namespace std; 
3. int main() { 
4.    int m,n,r,fpb; 
5.    do { 
6. cout << "Masukkan bilangan pertama = "; 
7.      cin >> m; 
8. cout << "Masukkan bilangan kedua   = "; 
9.      cin >> n; 
10.    } while (m < n); 
11.    r = m % n; 
12.    if (r==0) fpb = n; 
13.    else { 
14.      while(r!=0) { 
15.        m = n; 
16.        n = r; 
17.        r = m % n; 

86
 
Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

18.        fpb = n; 
19.      } 
20.    } 
21.    cout << "FPB‐nya = " << fpb; 
22.    return 0; 
23. } 

Sedangkan jika ditulis dalam bahasa Java adalah sebagai berikut:


1. import java.util.Scanner; 
2. import java.io.*; 
3. class bab2_04 { 
4. public static void main(String[ ] args) { 
5.      int m,n,r,fpb; 
6. Scanner input = new Scanner(System.in); 
7.      do { 
8. System.out.print("Masukkan bilangan pertama = "); 
9.        m = input.nextInt(); 
10. System.out.print("Masukkan bilangan kedua   = "); 
11.        n = input.nextInt(); 
12.      } while(m < n); 
13.      r = m % n; 
14.      fpb = 0; 
15.      if (r == 0) fpb = n; 
16.      else { 
17.        while(r != 0) { 
18.        m = n; 
19.        n = r; 
20.        r = m % n; 
21.        fpb = n; 
22.        } 
23.      } 
24. System.out.print("Bilangan terbesarnya  = " + fpb); 
25.    } 
26. } 

2.12. Soal Latihan


Jawablah soal latihan dibawah ini dengan baik dan benar.
1. Apa yang dimaksud dengan bahasa pemrograman
2. Apa yang dimaksud dengan compiler dan intepreter
3. Apa yang dimaksud dengan bahasa pemrograman prosedural dan
terstruktur
4. Apa yang dimaksud dengan algoritma pemrograman

87
 
Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

5. Sebutkan ciri-ciri algoritma pemrograman


6. Buatlah algoritma sederhana untuk mencari bilangan ganjil dan genap
7. Dari soal no 6 diatas buatlah diagram alirnya
8. Dari soal no 7 diatas tulislah kode semu (psudocode) diagram alir tersebut
9. Dari soal no 8 diatas tulislah kode sumbernya
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

88
 
Tipe data dan Operator Bahasa Pemrorgraman

BAB 3
TIPE DATA DAN OPERATOR

3.1. Pengertian Data


3.2. Indentifier
3.3. Konstanta
3.4. Variabel
3.5. Tipe Data
3.6. Operator Bahasa C++
3.7. Operator Unary
3.8. Operator Binary
3.9. Operator Ternary
3.10. Ungkapan (Ekspresi)
3.11. Soal Latihan

3.1. Pengertian Data


Data merupakan bentuk jamak pengertian tertentu. Pada komputer
dari bahasa Latin dengan kata data disimpan dalam memori
datum, yang berarti fakta atau sebelum dan sesudah pemrosesan
sesuatu yang diberikan. Data adalah oleh mikroprosesor.
kelompok simbol-simbol yang teratur Jenis data dalam setiap bahasa
dan mewakili kuantitas, tindakan, pemrograman belum tentu sama,
benda dan sebagainya. Dalam istilah namun sebagian besar biasanya
umum data mewakili angka, karakter terbagi menjadi tiga, yaitu :
dan simbol-simbol lain yang berfungsi 1. Data Numerik atau bilangan, yaitu
sebagai masukan untuk proses jenis data yang digunakan dalam
komputer. Data bisa berujut suatu proses aritmatika atau proses
keadaan, gambar, suara, huruf, matematis lainnya.
angka, matematika, bahasa ataupun 2. Data String, yaitu jenis data yang
simbol-simbol lainnya yang bisa kita dapat terdiri dari berbagai macam
gunakan sebagai bahan untuk karakter. Digunakan untuk proses
melihat lingkungan, obyek, kejadian yang non matematis.
ataupun suatu konsep. 3. Data Logika, yaitu data yang
Data belum mempunyai arti hanya terdiri dari dua satuan,
apabila tidak diolah. Data yang telah yaitu benar (true) dan salah
diolah menjadi sebuah bentuk yang (false). Digunakan dalam suatu
berarti disebut informasi . Data yang proses logika yang terdiri dari
mewakili simbol-simbol bukan persamaan boolean.
merupakan informasi kecuali dalam
89
 
Bahasa Pemrograman Tipe Data dan Operator

3.2. Indentifier
Identifier adalah nama yang kunci (keyword) yang dimiliki oleh
didefinisikan oleh programmer dan C++. Keywords atau kata kunci
digunakan untuk mewakili sebuah merupakan “inti” pada bahasa dan
elemen pada program. Nama memiliki tujuan tertentu. Tabel
variabel merupakan salah satu dibawah ini menunjukkan daftar
contoh dari identifier. Programmer lengkap kata kunci C++. Dan yang
dapat memilih sendiri nama sebuah perlu diperhatikan pada bahasa C
variabel pada C++, selama tidak adalah bahwa semua harus huruf
menggunakan salah satu dari kata kecil.

asm   auto   break   bool   case 


catch   char   class   const   const_cast 
continue   default   delete   do   double 
dynamic_cast   else   enum   explicit   extern 
false  float   for   friend   goto 
if   inline   int   long   mutable 
namespace   new   operator   private   protected 
public   register   reinterpret_cast   return   short 
signed   sizeof   static   static_cast   struct 
switch   template   this  throw  true 
try   typedef   typeid   typename   union 
unsigned   using   virtual   void   volatile 
wchar_t   while 

Indentifier atau pengenal adalah maka x tidak termasuk sesuatu jenis


nama yang diberikan untuk nama tertentu,sehingga hal tersebut tidak
variable, nama konstanta, nama memberikan petunjuk pada tujuan
fungsi, nama objek, nama method, variabel. Perhatikan contoh berikut
nama class, dan obyek yang lain dibawah yang lebih baik.
yang didefinisikan oleh pemrogram.
Dalam menulis program harus int daftarUrutan; 
selalu memilih nama variabel yang
memberikan indikasi mengenai hal Nama daftarUrutan memberikan
yang berhubungan dengan yang sesbuat pada pembaca program
digunakan variable tersebut. Jika sehingga akan ide dari variabel yang
dimungkinkan mendeklarasikan digunakan. Cara coding ini akan
sebuah variabel dengan nama seperti membantu dalam menghasilkan
berikut ini: dokumentasi program sendiri, yang
berarti anda akan mendapatkan
int x;   pemahaman tentang apa yang
dilakukan program hanya dengan
membaca kode yang digunakannya.
90
 
Tipe data dan Operator Bahasa Pemrorgraman

Karena dunia program biasanya identifier. Ketentuan-ketentuan dalam


ada ribuan baris, hal ini penting agar penulisan identifier antara lain:
bisa diingat oleh programmer itu  Terdiri dari gabungan huruf dan
sendiri dan sebagai dokumentasi angka dengan karakter pertama
yang baik. Selain itu yang perlu harus berupa huruf atau
disadari adalah adanya campuran underscore atau tanda dollar ($).
huruf besar dan huruf dalam variabel  Tidak boleh mengandung spasi
nama daftarUrutan. Walaupun semua dan symbol-simbol khusus, kecuali
C++, kata kunci harus ditulis dalam garis bawah (underscore) atau
huruf kecil, tetapi dalam penulisan tanda dollar ($) khusus untuk java.
tersebut dapat menggunakan huruf Yang termasuk symbol khusus
besar sebagai variabel nama. yang tidak diperbolehkan antara
Dalam bahasa pemrograman C lain: $, ?, %, #, !, &, *, (, ), -, +, =,
maupun pada bahasa java identifier dan sebagainya.
sifatnya case sensitive, artinya huruf  Panjangnya bebas, tetapi hanya
besar dan huruf kecil dianggap 32 karakter pertama yang
berbeda artinya, walaupun terpakai, tetapi sebaiknya
dipernolehkan. Identifier terdiri dari : sependek mungkin minimal satu
 Karakter alphabet, yaitu : huruf ‘A’ karakter.
sampai ‘Z’ dan huruf ‘a’ sampai ‘z’  Tidak boleh sama dengan kata
 Underscore ( _ ) dan tanda dollar kunci (keyword) dan kata
($) tercadang (reserved word) yang
 Digit decimal, yaitu: bilangan ada dalam bahasa pemrograman.
antara ‘0’ sampai ‘9’
Untuk lebih jelasnya mengenai
Dalam menulis program ada hal- identifier dapat dilihat pada contoh
hal yang harus diperhatikan sebagai identifier yang benar dan yang salah
ketentuan dalam pemberian nama

Tabel 3.1. Penulisan Identifier

PENULISAN  KETERANGAN IDENTIFIER 
Nomor 
Nama 
Nilai_siswadata1 
Penulisan Benar 
Rekam_1 
_temp 
$harga_jual 
1data 
Nomor‐siswa,nama siswa 
if 
Penulisan Salah 
2_jalan 
2$ 
main 

91
 
Bahasa Pemrograman Tipe Data dan Operator

3.3. Konstanta Dalam sistem octal, bilangan


Suatu data yang sifatnya tetap, yang digunakan berkisar antara 0
dan digunakan dalam pemrograman sampai dengan 7. Penulisan
diistilahkan dengan konstanta. konstanta diawali dengan 0 misalnya:
Konstanta adalah sebuah nama 010, 046, 055 dan sebagainya.
tempat penyimpanan sementara di Dalam sistem heksadesimal,
dalam memori yang nilainya tetap bilangan yang digunakan berkisar
atau tidak dapat diubah. Konstanta antara 0 sampai dengan F. Bilangan
harus didefinisikan terlebih dahulu yang dapat dipakai berupa salah satu
pada awal program. Konstanta dapat diantara 16 simbol adalah berikut:
bernilai integer, pecahan, karakter
atau string. Perhatikan contoh 0 1 2 3 4 5 6 7 8 9 A B C D E F  
sebuah konstanta berikut ini:  
Bisa juga ditulis sebagai berikut:
50 
3.14  0 1 2 3 4 5 6 7 8 9 a b c d e f.  
‘A’ 
“Bahasa Pemrograman”  Cara penulisan konstanta bilangan
ini diawali dengan 0x (nol dan x),
Dalam melakukan pemrograman ada misalnya: 0xAF, 0x7F, dan
dua tipe konstanta yaitu konstanta sebagainya.
bilangan dan konstanta teks atau
string. b. konstanta bilangan real atau
pecahan
3.3.1. Konstanta Bilangan Konstanta dengan nilai tetapnya
Konstanta bilangan atau sering berupa bilangan pecahan. Konstanta
juga disebut dengan konstanta bilangan real atau pecahan dibagi
numeric yaitu suatu konstanta yang dua jenis, yaitu: Konstanta data
nilai tetapnya berupa bilangan. bilangan desimal berpresisi tunggal
Konstanta bilangan atau numerik (floating point), dimana bilangan ini
dibagi dalam dua kelompok, yaitu : memiliki derajat ketelitian sampai 7
digit dan dapat dinyatakan dalam dua
a. Konstanta bilangan bulat (integer) bentuk tampilan, yaitu :
Konstanta bilangan bulat  Bentuk desimal, contoh : 21.333
merupakan sebuah konstanta yang  Bentuk eksponensial, dituliskan
nilai tetapnya berupa bilangan bulat. dengan notasi scientific. Dengan
Konstanta bilangan bulat dapat bentuk umum: bulat pecahan{E|D}
disajikan dalam bentuk decimal, oktal {[+] | [-]} pangkat misalnya:
ataupun heksadesimal. Dalam sistem 0.21333E+2 dimana hal penulisan
decimal, bilangan yang digunakan ini mempunyai arti: 0.2133 x 102
berkisar antara 0 sampai 9. Sedangkan konstanta data
Penulisan konstanta langsung bilangan desimal berpresisi ganda
angkanya, misalnya: 10, 9, 5 dan (double precision) serupa dengan
sebagainya. floating point, hanya derajat ketelitian

92
 
Tipe data dan Operator Bahasa Pemrorgraman

dan range jangkauan yang dimiliki ditandai dengan dua tanda kutip
lebih tinggi. Derajat ketelitian untuk tunggal (‘.’) sebagai pembatasnya.
floating point 7 digit, sedangkan misalnya: ‘A’, ‘b’, ‘&’, ‘!’.
double precision 16 digit. Selain itu juga ada beberapa diantara
konstanta data karakter yang ditulis
dengan diawali tanda \ (penempatan
3.3.2. Konstanta Teks/String. tanda \ setelah tanda petik tunggal
Konstanta teks atau string pembuka).
adalah suatu konstanta yang nilai Karakter ini dinamakan
tetapnya berupa teks. Konstanta teks rangkaian escape (escape
dibedakan dalam dua jenis, yaitu: sequence), sehingga disebut dengan
konstanta karakter rangkaian escape.
a. Konstanta data karakter Beberapa karakter rangkaian escape,
Konstanta data karakter terdiri antara lain :
dari sebuah karakter saja dan

Tabel 3.2. karakter rangkaian ESCAPE

KARAKTER  KETERANGAN 
\a  Untuk bunyi bell (alert) 
\b  Mundur satu spasi (backspace) 
\f  Ganti halaman (form feed) 
\n  Ganti baris baru (new line) 
\r  Ke kolom pertama, baris yang sama  
\v  Tabulasi vertical 
\0  Nilai kosong (null) 
\’  Karakter petik tunggal 
\”  Karakter petik ganda 
\\  Karakter garis miring 

Untuk menyatakan sembarang misalnya: ‘\”’ atau ‘\42’ atau ‘\x22’.


karakter ASCII, notasi yang dapat Selain karakter biasa, juga terdapat
dipergunakan, antara lain: \DDD karakter khusus yang didefinisikan
dengan DDD = 1 sampai dengan 3 dengan cara mengawalinya
digit octal atau \xHH dengan HH = 1 menggunakan tanda \ seperti pada
sampai dengan 2 digit heksadesimal, dijelaskan pada tabel dibawah ini:

93
 
Bahasa Pemrograman Tipe Data dan Operator

Tabel 3.3. karakter khusus

KODE  NAMA  NILAI UNICODE 


\t  Tab  \u0009 
\b  Backspace  \u0008 
\n  Linefeed  \u000a 
\r  Carriage return  \u000d 
\’  Single quote  \u0027 
\*  Double quote  \u0022 
\\  Backslash  \u005c 

b. Konstanta data string. ganda (“ ”) sebagai pembatasnya.


Konstanta data string merupakan Perhatikan contoh penulisan dibawah
rangkaian dari beberapa karakter dan ini:
ditandai dengan dua tanda kutip

“Helo”, “Lagi Belajar” 
“Bahasa Pemrograman”, “Di Sekolahmu ya?” 

Dalam penulisan program, sebuah sintaks dari deklarasi konstanta


konstanta perlu dideklarasikan, dalam bahasa C adalah sebagai
dimana deklarasi konstanta berikut:
merupakan proses untuk #define <namakonstanta> <nilai>  
menyebutkan karakteristik konstanta
seperti nama, tipe data, jangkauan, Atau dapat juga ditulis sebagai
masa hidup, dan nilai awal. Dalam berikut:
bahasa C pendeklarasikan konstanta
ada 2 cara, yaitu: dengan const  <tipedata>  <namakonstanta>  = 
menggunakan pengarah compiler <nilai>; 
atau preprocessor #define, dan
dengan keyword const. penulisan
Atau bisa juga ditulis seperti program
Untuk lebih jelasnya pehatikan dibawah ini:
contoh program dibawah ini:

#define nomor 100  const int nomor = 100; 
#define phi 3.14  const float phi = 3.14; 
#define huruf ‘K’  const char huruf = ‘K’; 
#define nama “Hello”  const String nama=“Hello”;
 
Program 3.1. Penggunaan konstanta dalam program
#include <conio.h> 
#include <iostream> 
#define nomor 100 

94
 
Tipe data dan Operator Bahasa Pemrorgraman

#define phi 3.14 
#define huruf 'K' 
#define nama "Hello" 
 
using namespace std; 
 
main() 

    cout << "Nilai konstanta nomor: "<< nomor; 
    cout << "\nNilai konstanta phi  : "<< phi; 
    cout << "\nNilai konstanta huruf: "<< huruf; 
    cout << "\nNilai konstanta nama : "<< nama; 
      getch(); 
  return 0 ; 

Keluaran programnya adalah sebagai berikut:


Nilai konstanta nomor: 100 
Nilai konstanta phi  : 3.14 
Nilai konstanta huruf: K 
Nilai konstanta nama : Hello 

Pada program dibawah ini hasil akan menghasilkan hasil yang sama
setelah decompile akan sama dengan program sebelumnya.
dengan program diatas. Program Perhatikan pada penggunaan
dibawah merupakan salah satu konstanta dalam aplikasi program
contoh penulisan yang berbeda tetapi dibawah ini:
 
Program 3.2 
#include <conio.h> 
#include <iostream> 
const int nomor = 100; 
const float phi = 3.14; 
const char huruf = 'K'; 
const char nama[] = "Hello"; 
 
using namespace std; 
 
main() 

    cout << "Nilai konstanta nomor: "<< nomor; 
    cout << "\nNilai konstanta phi  : "<< phi; 
    cout << "\nNilai konstanta huruf: "<< huruf; 
    cout << "\nNilai konstanta nama : "<< nama; 

95
 
Bahasa Pemrograman Tipe Data dan Operator

      getch(); 
  return 0 ; 

Keluaran program diatas adalah sebagai berikut:


Nilai konstanta nomor: 100 
Nilai konstanta phi  : 3.14 
Nilai konstanta huruf: K 
Nilai konstanta nama : Hello 

3.4. Variabel  Nilai yang diperoleh dari


Variabel atau pengubah adalah kombinasi beberapa pengubah
suatu lambang dari sebuah lokasi atau nilai konstanta dengan
yang berada dimemori utama melalui operator.
komputer yang dapat berisi suatu
nilai. Nilai yang berada di lokasi double pi = 3.141593; 
memori tersebut dapat berubah double r; 
selama program dieksekusi. Guna double l_lingkaran = pi * r * r; 
variable adalah sebagai tempat
sementara untuk menyimpan data
yang sedang diolah. Pemberian nilai 3.4.1. Tipe Variabel
kedalam suatu variabel mempunyai Berdasarkan pada jenis data
bentuk penulisan yang berbeda-beda yang disimpan pada variabel yaitu:
pada setiap bahasa pemrograman. Variabel numeric dan variable teks.
Meskipun mempunyai arti yang sama Pada variable numeric merupakan
dalam pemrogramannya. suatu variabel yang dipakai untuk
Variabel dibedakan atas variabel menampung data berupa angka.
numerik dan variabel string. Variabel Variabel numerik digolongkan
numerik adalah variabel yang atas: bilangan bulat atau integer dan
mengandung nilai numerik atau bilangan real atau pecahan, dimana
angka sedangkan variabel string bilangan real terdiri dari dua yaitu:
adalah variabel yang berisi nilai huruf  bilangan decimal berpresisi
/alpha-numerik. tunggal (floating point)
Suatu variabel dapat mewakili:  bilangan decimal berpresisi ganda
 Nilai Konstanta (double precision).
Sedangkan pada variable teks
double pecahan = 13.45;  merupakan suatu variabel yang
int nilai = 85;  dipergunakan untuk menampung
data berupa huruf atau teks. Variabel
 Nilai dari pengubah lain teks dibedakan menjadi dua yaitu:
 Karakter (untuk karakter tunggal)
char abjad = ”T” ;   String (untuk rangkaian karakter)
char huruf = abjad;  

96
 
Tipe data dan Operator Bahasa Pemrorgraman

3.4.2. Jenis Variabel sebelum definisi fungsi termasuk


Berdasarkan pada lokasi atau funsi utama, Variabel dialokasikan
wilayah dan waktu pengaksesannya, selama program dijalankan dan
variabel dapat dibedakan atas 2 Variabel didealokasikan setelah
jenis, yaitu: Variabel Lokal dan program selesai dijalankan
Variabel Global. Variabel local
merupakan Variabel yang
dideklarasikan pada fungsi termasuk 3.4.3. Deklarasi Variabel
fungsi utama (main), variabel Deklarasi variable adalah proses
dialokasikan selama fungsi untuk menyebutkan karakteristik
pendeklarasi dijalankan dan Variabel variable seperti nama, tipe data,
didealokasikan jika fungsi jangkauan, masa hidup, dan nilai
pendeklarasi tidak dijalankan. awal. Penulisan Sintaks untuk
Sedangkan Variabel Global mendeklarasikan sebuah variable
adalah Variabel yang dideklarasikan adalah sebagai berikut:

<tipedata> <namavariabel> [= nilaiawal];  
<tipedata> <namavariabel 1> [= nilaiawal], …, <namavariabel n> [= nilaiawal];  

Dalam penulisan sintak tersebut int bilangan = 20; 


yang perlu diperhatikan adalah char karakter = 'k'; 
bahwa semua yang ada dalam tanda char huruf, huruf1 = 'C', huruf2 = 'O'; 
<…> harus ada dan semua yang float bildesimal = 22.2; 
ada dalam tanda […] bersifat
tambahan boleh ada atau boleh tidak 3.4.4. Kelas Variabel
tergantung keperluan. Perhatikan Selain digolongkan berdasarkan
contoh penulisan dibawah ini: tipe datanya, sebuah variabel juga
diklasifikasikan berdasarkan kelas
int bilangan;  penyimpanan, yaitu: Variable local
char karakter;  atau otomatis, variable eksternal,
float bildesimal;  variable statis dan variable register
Variable local adalah merupakan
Setelah mendeklarasikan sebuah variabel yang dideklarasikan dalam
variabel dengan tipe data, sebuah fungsi dan mempunyai sifat-
selanjutnya memberikan nilai variabel sifat sebagai berikut:
tersebut dengan tanda = (sama  Secara otomatis diciptakan ketika
dengan) fungsi dipanggil dan akan lenyap
ketika eksekusi terhadap fungsi
bilangan = 20;  berakhir
karakter = 'k';   Hanya dikenal oleh fungsi tempat
bildesimal = 22.2;  variable dideklarasikan
 Tidak ada inisialisasi secara
atau dapat juga mendeklarasikan dan otomatis (saat variable diciptakan
memberikan nilai dalam satu baris. nilainya tak menentu)

97
 
Bahasa Pemrograman Tipe Data dan Operator

 Deklarasinya dengan kata kunci auto int x; 


auto.
Perhatikan penulisan variable local Untuk lebih jelasnya perhatikan
berikut ini: program dengan menggunakan
variable local berikut ini:

Program 3.3
#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
void tampil(void); 
 
main() 

  auto int i = 11; 
  tampil(); 
  cout <<"\ni dalam main() = "<< i; 
      getch(); 
  return 0 ; 

 
void tampil(void) 

auto int i = 10; 
  cout <<"\ni dalam tampil() = "<< i; 

Keluaran program diatas adalah sebagai berikut:


i dalam tampil() = 10 
i dalam main() = 11 

selain variable local seperti dijelaskan  Deklarasinya dengan kata kunci


diatas, juga terdapat kelas variable extern didalam fungsi yang
eksternal dimana variable ini menggunakan variable jenis ini.
mendeklarasikan diluar sebuah
fungsi, dan mempunyai sifat berikut: Perhatikan penulisan variable
 Dapat diakses oleh semua fungsi eksternal berikut ini:
 Kalau tidak diberi nilai, secara
otomatis diinisialisasi dengan nilai extern int x; 
sama dengan nol

98
 
Tipe data dan Operator Bahasa Pemrorgraman

untuk lebih jelasnya perhatikan variable eksternal berikut ini:


program dengan menggunakan

Program 3.4
#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
/* variabel j disini merupakan variabel eksternal bagi  
fungsi kali dan fungsi main, sehingga variabel j dapat  
diakses oleh semua fungsi yang ada yaitu kali dan main */ 
 
int j = 1; 
void kali(void); 
 
main() 

    cout <<"Nilai awal j     = "<< j<<"\n"; 
    j = j * 5; 
   cout <<"Nilai j kemudian = "<< j<<"\n"; 
    kali(); 
    cout <<"Nilai j kini     = "<< j<<"\n"; 
    kali(); 
    cout <<"Nilai j sekarang = "<< j<<"\n"; 
    getch(); 
  return 0 ; 

 
void kali(void) 

     j*=10; 

Keluaran program diatas adalah sebagai berikut:


Nilai awal j       = 1 
Nilai j kemudian = 5 
Nilai j kini       = 50 
Nilai j sekarang  = 500 

Variable statis merupakan mempunyai sifat-sifat sebagai


sebuah variable internal yang berikut:
didefinisikan didalam fungsi maupun
variable eksternal, dan variable ini
99
 
Bahasa Pemrograman Tipe Data dan Operator

 Kalau bersifat internal, maka inisialisasi oleh pemrogram secara


hanya dikenal oleh fungsi tempat otomatis akan diberi nilai awal nol.
variable dideklarasikan  Deklarasinya dengan kata kunci
 Kalau bersifat eksternal, maka static.
dapat dipergunakan oleh semua Perhatikan penulisan variable statis
fungsi yang terletak pada file yang berikut ini:
sama tempat variable
dideklarasikan static int x; 
 Tidak hilang sekeluarnya dari
fungsi Untuk lebih jelasnya perhatikan
 Inisialisasi hanya dilakukan sekali program dengan menggunakan
pada saat fungsi dipanggil variable statis berikut ini:
pertama kali, jika tidak ada

Program 3.5
#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
void tambah(void); 
 
main() 

      int k = 100; 
      tambah(); 
      tambah(); 
      cout<<"Nilai k dalam main() = "<< k<<"\n"; 
      getch(); 
    return 0 ; 

 
void tambah(void) 

     static int k;         //variabel statis 
     k++; 
     cout <<"Nilai k dalam tambah() = "<< k<<"\n"; 

 
Keluaran program diatas adalah sebagai berikut:
Nilai k dalam tambah ()    = 1 
Nilai k dalam tambah ()    = 2 
Nilai k dalam main ()     = 100 

100
 
Tipe data dan Operator Bahasa Pemrorgraman

Variable register adalah variable  Deklarasinya dengan kata kunci


yang nilainya disimpan dalam register register.
mikroprosesor bukan didalam memori Perhatikan penulisan variable register
RAM, variable ini mempunyai sifat- berikut ini:
sifat sebagai berikut:
 Mempunyai kecepatan akses lebih register int x; 
tinggi
 Hanya dapat diterapkan pada untuk lebih jelasnya perhatikan
variable local atau parameter program dengan menggunakan
formal yang bertipe char atau int variable register berikut ini:
 Biasa diterapkan untuk
pengendalian loop.

Program 3.6
#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
main() 

   register int n, jml;//variabel register 
   int m = 242; 
   for(n=1; n<=m; n++) 
   jml += n; 
   cout <<" 1 + 2 + 3 + ... +  = " << m<< jml; 
      getch(); 
  return 0 ; 

Keluaran program diatas adalah sebagai berikut:


1 + 2 + 3 + … + 242 =32621 

3.5. Tipe Data kita menempatkan tanda pengenal


Tipe data merupakan tempat harga hanya mengenal angka, maka
untuk menentukan pemberian nilai ketika kita memberikan nilai berupa
terhadap suatu variabel yang string maka secara otomatis data
diberikan oleh user. Selain itu tipe tersebut akan ditolak karena nilai
data juga dapat diartikan sebagai tersebut tidak dikenali oleh tipe data
batasan terhadap fungsi tanda yang diberikan.
pengenal terhadap semua nilai yang Tipe data dalam variable
diterima. Sebagai gambaran dari menentukan tipe data yang bisa
pengertian tersebut adalah ketika disimpan didalamnya, format data

101
 
Bahasa Pemrograman Tipe Data dan Operator

yang disimpan, dan berapa banyak Merepresentasikan nilai dari suatu


memori yang dialokasikan untuk variabel maupun konstanta,
menyimpan data. Penyimpanan data di memori, dan
Tipe data tersebut Menentukan nilai yang dapat diisikan
diklasifikasikan berdasarkan ke dalam sebuah variable.
bagaimana keadaan data disimpan Sedangkan jenis tipe data ada
dalam memori, dan jenis operasi dua macam: Tipe dasar atau primitive
yang dapat dilakukan. Tipe data dan Tipe bentukan atau referensi.
merupakan bagian program yang Dalam bahasa C terdapat lima tipe
paling penting karena tipe data data dasar, yaitu: int, char, float,
mempengaruhi setiap instruksi yang double, dan void. Sedangkan dalam
akan dilaksanakan oleh komputer. bahasa pemrograman lain seperti
Misalnya saja 3 dibagi 2 bisa saja java misalnya memiliki tipe data yang
menghasilkan hasil yang berbeda dapat dikategorikan menjadi dua
tergantung tipe datanya. Jika 3 dan 2 kelompok, yaitu tipe data primitif dan
bertipe integer, maka program akan referensi. Ada delapan macam tipe
menghasilkan nilai 1, namun jika data primitif dalam pemrograman
keduanya bertipe float maka akan Java, yaitu : char, byte, short, int,
menghasilkan nilai 1.5000000. long, float, double, dan Boolean. Tipe
Pemilihan tipe data yang tepat akan data referensi digunakan untuk
membuat proses operasi data mereferensikan objek atau class
menjadi lebih efisien dan efektif. tertentu, seperti String.
Fungsi Tipe data antara lain:

Tabel 3.4. Tipe Data (16 bit) Dalam C

TIPE  UKURAN  RANGE 


unsigned char  8 bit 0 ‐ 255 
char  8 bit ‐128 ‐127 
enum  16 bit ‐32768 ‐ 32767 
unsigned int  16 bit 0 ‐ 65535 
short int  16 bit ‐32768 ‐ 32767 
int  16 bit ‐32768 ‐ 32767 
unsigned long  32 bit 0 ‐ 4294967295 
long  32 bit ‐2147483648 ‐ 2147483647 
float  32 bit 3.4E‐38 ‐ 3.4E+38 
double  64 bit 1.7E‐308 ‐ 1.7E+308 
long double  80 bit 3.4E‐4932 ‐ 1.1E+4932 
void  0 bit  
near (pointer)  16 bit  
far (pointer)  32 bit  

102
 
Tipe data dan Operator Bahasa Pemrorgraman

Tabel 3.5. Tipe Data (32 bit) Dalam C

Tipe  Ukuran  Range 


unsigned char  8 bit  0 ‐ 255 
char  8 bit  ‐128 ‐127 
short int  16 bit  ‐32768 ‐ 32767 
unsigned int  32 bit  0 ‐ 4294967295 
int  32 bit  ‐2147483648 ‐ 2147483647 
unsigned long  32 bit  0 ‐ 4294967295 
enum  32 bit  ‐2147483648 ‐ 2147483647 
long  32 bit  ‐2147483648 ‐ 2147483647 
float  32 bit  3.4E‐38 ‐ 3.4E+38 
double  64 bit  1.7E‐308 ‐ 1.7E+308 
long double  80 bit  3.4E‐4932 ‐ 1.1E+4932 
void  0 bit   
near (pointer)  16 bit   
far (pointer)  32 bit   

Tabel 3.6. Format Tipe Data Dalam C

TIPE  FORMAT  KETERANGAN 


char  %c  Karakter/string 
int  %i, %d  Integer/bilangan bulat 
float  %f  Float/bilangan pecahan presisi tunggal 
double  %lf  Bilangan pecahan presisi ganda 

3.5.1. Tipe data Integer Kemudian ada juga informasi


Program Komputer merupakan tekstual, misalnya Nama dan alamat,
kumpulan potongan data dan maka data seperti ini akan disimpan
memanipulasi data tersebut dalam sebagai karakter. Bila programmer
berbagai cara. Ada berbagai jenis menulis sebuah program, maka
data dalam bidang informasi, harus menentukan jenis informasi
misalnya: bilangan, terdapat bilangan yang digunakannya. Jika menulis
bulat dan bilangan pecahan, ada sebuah program untuk menentukan
bilangan positif dan negative, dan jauhnya berapa mil dari bumi ke
ada pula bilangan besar serta bintang, maka diperlukan variabel
bilangan kecil dan lain-lain, atau yang dapat menampung jumlah yang
bahkan bilangan yang tidak memiliki sangat besar. Jika Anda sedang
nama. merancang perangkat lunak untuk
merekam sebuah dimensi
mikroskopis, maka hanya perlu untuk
103
 
Bahasa Pemrograman Tipe Data dan Operator

menyimpan data yang sangat kecil  Apakah variabel menangani


dan angka sesuai. Sebagai penyimpanan (baik positif maupun
tambahan, jika Anda menulis sebuah negatif) atau bilangan unsigned
program yang harus melakukan (hanya positif).
ribuan perhitungan intensif, maka  Bilangan decimal merupakan
akan menginginkan variabel yang variabel yang presisi
dapat diproses dengan cepat. Tipe Ukuran variabel adalah jumlah byte
Data variabel inilah yang akan memori yang digunakan. Biasanya,
menentukan semua factor tersebut. semakin besar range variable, maka
Bahasa C++ menyediakan jumlah yang digunakan akan lebih
berbagai tipe data, yang secara garis besar pula.
besar hanya dibagi menjadi dua
yaitu: data numerik dan karakter. 3.5.2. Tipe Data Karakter
Numerik merupakan tipe data yang Karakter adalah sembarang
dibagi menjadi dua kategori yaitu: huruf, angka, atau tanda baca
integer dan floating-point. Integers tunggal. Tipe data karakter
adalah bilangan yang meliputi merupakan kumpulan bermacam-
seluruh nomor seperti 12, 157, -34, 2 macam karakter yang terdiri dari
daln lain sebagainya. Floating-point alfabet. Diman karakter antara lain:
merupakan angka yang ada angka Alfabet bilangan decimal: 0, 1, 2, …,
decimal di belakang koma, misalnya 9, Alfabet huruf latin besar : A, B, C,
23,7, 189,0231, 0,987 dan lain …, Z, Alfabet huruf latin kecil : a, b,
sebagainya. c, ... , z dan Tanda baca tunggal :
Sebelum kita membicarakan tipe !, @, ~, ?, ;, ‘, &, dan sebagainya.
data karakter, mari kita hati-hati Tipe data karakter ini hanya
memeriksa variasi dari data numerik. terdiri dari 1 karakter dan Bentuk tipe
Pertimbangan utama untuk memilih data dari karakter yaitu: char.
tipe data numerik adalah: Perhatikan penulisan contoh
 Angka Terbesar dan terkecil yang deklarasi char, dimana char huruf
dapat disimpan dalam variable. yang ditampilkan adalah = ‘A’ ;
 Berapa banyak memori yang
digunakan oleh variabel.

Program 3.7
include <iostream> 
 
using namespace std; 
 
main() 

   char huruf_1 = 'C', huruf_2 = '+'; 
  cout <<"Tipe Data Char pada " << huruf_1 << huruf_2<< huruf_2; 
      getch(); 
  return 0 ; 

104
 
Tipe data dan Operator Bahasa Pemrorgraman

Keluaran program diatas adalah sebagai berikut:


Tipe Data Char pada C++ 

3.5.3. Tipe Data String larik atau array dari tipe data char,
String adalah deretan karakter sedangkan dalam bahasa java string
yang diakhiri dengan sebuah karakter merupakan tipe data referensi atau
kosong. Konstanta bertipe ditulis sebuah objek. Contoh dibawah
diantara tanda petik dua (“ ….”). merupakan deklarasi string dalam C:
Dalam bahasa C string merupakan

char tek [ ] = " C++ " ; 
char kata[ ] = {'C', '+', '+'}; 

untuk Contoh penulisan deklarasi string dalam C adalah sebagai berikut:

Program 3.8
#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
main() 

   char huruf[] = "Tipe Data String pada  C++"; 
   cout << huruf; 
      getch(); 
  return 0 ; 

Keluaran program diatas adalah sebagai berikut:


Tipe Data String pada C++ 

3.5.4. Tipe Data Bilangan Bulat bilangan bulat yang memiliki range
dari bilangan negatip sampai positip
Tipe data ini digunakan untuk dan bilangan bulat tak bertanda
data-data angka yang tidak (unsigned integer), yang merupakan
mengandung angka di belakang bilangan bulat yang hanya memiliki
koma (int) atau digunakan untuk range nilai positip saja.
menyatakan bilangan bulat. Tipe data yang termasuk ke
Perubahan tanda bilangan pada dalam bilangan bulat adalah: yang
bilangan bulat dapat diset dalam dua pertama, char atau signed char dan
tipe, yaitu: bilangan bulat bertanda unsigned char atau byte dalam java
(signed integer), yang merupakan dan pascal. Rentang nilai signed char
mulai -128 sampai 127. Kedua,
105
 
Bahasa Pemrograman Tipe Data dan Operator

rentang nilai unsigned char mulai 0 Rentang nilai unsigned int mulai
sampai 255, short int atau signed 0 sampai 65.535, dan keempat
short int dan unsigned short int. adalah long int atau signed long int
Rentang nilai signed short int mulai - dan unsigned long int. Rentang nilai
32.768 sampai 32.767. Rentang nilai signed long int mulai -21474836478
unsigned short int mulai 0 sampai sampai 2147483647. Rentang nilai
65.535. Ketiga adalah int atau signed unsigned long int mulai 0 sampai
int dan unsigned int. Rentang nilai 4294967295. Rentang di atas untuk
signed int mulai -32.768 sampai tipe data bilangan bulat dalam 16 bit.
32.767.

Contoh pendeklarasian bilangan int adalah sebagai berikut:


int nilai;  
int total ;  
int harga = 30000; 

Dapat juga ditulis sebagai berikut:


int nilai, total ;  
int harga; 
harga = 30000; 

3.5.5. Tipe Data Bilangan Real Semua bilangan pecahan atau


atau Pecahan desimal dalam Java tanpa diakhiri
Tipe ini merepresentasikan data- huruf f akan dianggap sebagai
data bilangan yang mengandung double. Sedangkan bilangan yang
angka di belakang koma atau ingin dikategorikan sebagai float
menyatakan bilangan pecahan, harus diakhiri dengan huruf F.
maupun eksponensial. Tipe data Misalnya : 4.22F atau 2.314f.
yang termasuk ke dalam kategori ini Sedangkan untuk bilangan double,
adalah: float dan double. Contoh bisa menambah dengan huruf D,
deklarasi float dan double adalah karena secara default bilangan
sebagai berikut: dengan koma atau pecahan atau
desimal akan dianggap sebagai
float nilai;   double. Pehatikan contoh program
double beta;  berikut ini:

Program 3.9
#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
main() 

106
 
Tipe data dan Operator Bahasa Pemrorgraman

   short int ssintmin = ‐32768, ssintmak = 32767; 
   unsigned short int usintmak = 65535; 
   int intmin = ‐32768, intmak = 32767; 
   unsigned int uintmak = 65535; 
   long int slintmin = ‐2147483648, slintmak = 2147483647; 
   unsigned long int ulintmak = 4294967295; 
   cout <<"\nRange signed short int        :"<< ssintmin<< ssintmak; 
   cout <<"\nRange unsigned short int   :"<< usintmak; 
   cout <<"\nRange signed int                : "<< intmin<<  intmak; 
   cout <<"\nRange unsigned int             :"<< uintmak; 
   cout <<"\nRange signed long int          :"<< slintmin<< slintmak; 
   cout <<"\nRange unsigned long int       :"<< ulintmak; 
      getch(); 
  return 0 ; 

Keluaran program diatas adalah sebagai berikut:


Range signed short int    :  ‐32768   s/d       32767 
Range unsigned short int  :   0   s/d        65535 
Range signed int    :  ‐32768   s/d        32767 
Range unsigned int    :   0   s/d            65535 
Range signed long int    : ‐2147483648 s/d  2147483647 
Range signed long int    :   0   s/d  4294967295 

Program 3.10 Perhatikan juga contoh program dibawah ini:


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

   float floatmin = 3.4E‐38, floatmak = 3.4E+38; 
   double doublemin = 1.7E‐308, doublemak = 1.7E+308; 
   long double ldoublemin = 3.4E‐4932 , ldoublemak = 1.1E+4932; 
   cout <<"Range float       : \n"<< floatmin<< floatmak; 
   cout <<"Range double      : \n"<< doublemin<< doublemak; 
   cout <<"Range long double : \n"<< ldoublemin<<   ldoublemak; 
      getch(); 
  return 0 ; 

Keluaran program adalah sebagai berikut:

107
 
Bahasa Pemrograman Tipe Data dan Operator

Range float    : 0.000000 s/d 3399999952144364250000000000000.0 
Range double    : 0.000000E+00 s/d 1.700000E=300 
Range long doble   : 0 s/d 1.1E+4932   

3.5.6. Tipe Data Logika boolean. Perhatikan contoh deklarasi


Tipe data logika digunakan untuk Boolean berikut ini:
merepresentasikan data-data yang
mengandung dua buah nilai logika Boolean kondisi; 
boolean, yaitu: nilai 1 dan 0 atau Boolean kondisi_awal = true; 
sering juga disebut sebagai nilai true
dan false (benar dan salah). Dalam
bahasa C++ tidak ada data tipe Pehatikan contoh program berikut ini:

Program 3.11
include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
main() 

   enum boolean {FALSE, TRUE}; 
  enum boolean kondisi; 
  kondisi = TRUE; 
  if (kondisi) 
   cout <<"Kondisi : "<< kondisi; 
   else 
   { 
        kondisi = FALSE; 
        cout <<"Kondisi : "<< kondisi; 
   } 
    getch(); 
  return 0 ; 

Keluaran program adalah sebagai berikut:


Kondisi : 1 

3.5.7. Enumerasi / ENUM tipe Bolean, sehingga untuk


Enumerasi adalah serangkaian merepresentasikan TRUE dengan
symbol berurutan yang nilai integer bukan nol ( 1, 2, dst ),
menspesifikasikan konstanta bertipe sedangkan FALSE dengan nilai nol
integer. Dalam C++ tidak terdapat

108
 
Tipe data dan Operator Bahasa Pemrorgraman

(0). Perhatikan contoh deklarasi untuk lebih jelasnya mengenai tipe


enum: data pointer akan dijelaskan dalam
bab pointer
enum boolean { false, true } ; atau 
enum boolean { salah = 0, benar = 1 } ;  3.5.10. Tipe Data Larik / array
Array adalah sekelompok data
bertipe sama yang menduduki lokasi
3.5.8. Tipe Data Void memori yang berurutan. Jumlah
Void menyatakan tipe kosong elemen array dinyatakan dengan
dan digunakan untuk: pertaman cara mengapit jumlah yang di
untuk mendeklarasikan fungsi yang maksud dengan tanda ‘ [ … ] ‘. Cara
tidak mengembalikan nilai apapun. penulisan sintaks tipe data larik
Serta fungsi kedua adalah untuk adalah sebagai berikut :
mendeklarasikan fungsi yang tidak
menerima parameter apapun. Pada <tipedata> <namavariabelArray> <[ 
tipe data ini jika diawali dengan jumlahelemen ]> ; 
operator *, menyatakan penunjuk
terhadap sembarang tipe data. Misalnya penulisan tipe char dengan
Perhatikan contoh deklarasi void array adalah sebagai berikut:
seperti berikut ini:
char kata[5]; 
void cctrputs (char*,int ); 
Untuk menyatakan array berdimensi
atau ditulis: lebih dari 1 (satu), maka ditambahkan
tanda ‘[ … ]’ sebanyak dimensi yang
main (void) ;   diinginkan. Misalnya jika ingin
mendeklarasikan array 2 dimensi
atau dapat juga ditulis adalah sebagai berikut:

void* action ;  int matrix [2][3] ; 
int ivalue = 100 ; 
action = &ivalue ;  Untuk lebih jelasnya mengenai tipe
data array akan dijelaskan dalam bab
selanjutnya yang membahas array.
3.5.9. Tipe Data Pointer
Pointer adalah variable yang
berisi nilai alamat suatu lokasi
memori tertentu. Deklarasi penunjuk 3.5.11. Tipe Data Struct, Union
dilakukan dengan menspesifikasikan Tipe data ini digunakan untuk
*, sebelum nama varibel/konstanta. mendeklarasikan sekelompok data
Contoh deklarasi pointer adalah yang memiliki tipe yang berlainan.
sebagai berikut: struct: elemennya berada dilokasi
memori yang berbeda, dan union:
char *p;  elemennya ada dilokasi memori yang
sama. Perhatikan potongan program
dibawah ini:

109
 
Bahasa Pemrograman Tipe Data dan Operator

Atau dapat juga ditulis


union namaunion 
{  struct  
  Tipeanggota1 namaAnggota1 ;  { 
  Tipeanggota2 namaAnggota2 ;    Tipeanggota1 namaAnggota1 ; 
  ………….    Tipeanggota2 namaAnggota2 ; 
};    …………. 

Atau dapat juga ditulis seperti namaStruktur ; 
dibawah ini:

union   3.5.12. Tipe Data typedef


{  Tipe data typedef digunakan
  Tipeanggota1 namaAnggota1 ;  untuk menamakan suatu tipe data
  Tipeanggota2 namaAnggota2 ;  dengan pengenal yang lebih berarti
  ………….  atau mudah diingat. Sintaks
}  penulisan program tipe data ini
namaunion;  adalah sebagai berikut:
  typedef tipedata namabaru; 
struct  namaStruktur 
{  Perhatikan contoh penulisan program
  Tipeanggota1 namaAnggota1 ;  dibawah ini :
  Tipeanggota2 namaAnggota2 ; 
typedef unsigned char byte; 
  …………. 
}; 

3.6. Operator Bahasa C++ diawali dengan tanda minus. Tanda


Bahasa C++ menyediakan minus, bila digunakan dengan cara
beberapa operator untuk seperti ini, yang disebut
memanipulasi data. Secara umum, penyangkalan operator. Karena
terdapat tiga jenis operator: unary, hanya memerlukan satu operand, hal
binary dan ternary. Istilah tersebut tersebu merupakan operator unary.
mencerminkan jumlah operands Operator binary bekerja dengan dua
operator yang dibutuhkan. operand.
Operator unary hanya Tugas operator ini biasanya
memerlukan satu operand. Misalnya, pada operasi aritmetik yang hal
mempertimbangkan ekspresi berikut: tersebut sudah sangat umum dalam
-5. Dalam contoh diatas perlu bahasa pemrograman. Tabel
dipahami bahwa mewakili angka lima dibawah menunjukkan operator
bernilai negatif. Konstanta 5 adalah arithmetic pada bahasa C++.

110
 
Tipe data dan Operator Bahasa Pemrorgraman

Tabel 3.6. Operator pada bahasa C++

OPERATOR  ARTI  TIPE  CONTOH 


*  perkalian  binary  tax = cost * rate; 
/  Pembagian  Binary  salePrice = original / 2; 
%  Modulus  Binary  remainder = value % 3; 
+  Penjumlahan  Binary  total = cost + tax; 
‐  Pengurangan  binary  cost = total ‐ tax; 

Kebanyakan sebagai seorang


programmer tidak akan asing dan markup = 12 * 0,25;  
selalu bekerja dengan operator.
Operator Penambahan digunakan pada operator pembagian hasil
untuk menjumlahkan dua operand. diperoleh dengan cara memlakukn
Pada pernyataan berikut ini bagi operand disebelah kiri dibagi
merupakan fungsi variabel jumlah dengan operand sebelah kanan.
yang diberi dengan nilai 12 adalah: Dalam pernyataan berikutnya,
variable poin akan memperoleh nilai
jumlah = 4 + 8;   5:

operator pengurangan merupakan poin = 100 / 20;  


operasi dimana nilai penguranga
berasal dari operand sebelah kiri Dalam operasi pembagian integer
dikurangi atau disubtracted operand ternyata tidak selalu memasukan
sebelah kanan. Pernyataan dibawah hasil dari operasi pembagian tetapi
ini akan memperoleh nilai 98 untuk yang diambil adalah sisa dri hasil
suhu: bagi tersebut. Untuk lebih jelasnya
perhatikan pernyataan berikut ini,
suhu = 112 ‐ 14;   dimana hasilnya adalah 2 atau nilai
sisa sama dengan 2:
Pada sebuah operator perkalian akan
mengalikan dua buah operand. sisa = 17% 3;  
Perhatian pernyataan berikut
ini,dimana markup akan diisi nilai 3:

Program 3.12 Perhatikan contoh program dibawah ini:


#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
111
 
Bahasa Pemrograman Tipe Data dan Operator

int main() 

    double regHours = 40.0,  
    otHours = 10,  
    regPayRate = 18.25,  
    otPayRate = 27.78,  
    regWages,  
    otWages,  
    totalWages;  
    regWages = regPayRate * regHours; 
    otWages = otPayRate * otHours; 
    totalWages = regWages + otWages; 
    cout << "Upah untuk minggu ini adalah Rp. " << totalWages << endl; 
    getch(); 
   return 0 ; 

Keluaran Program diatas adalah


Upah untuk minggu ini adalah Rp. 1007.8

3.7. Operator Unary


Operator Unary merupakan Terdapat beberapa operator unary,
operator yang hanya memiliki atau seperti terlihat pada tabel berikut ini:
melibatkan sebuah operand saja.

Tabel 3.7. Operator Unary

OPERATOR  ARTI  LETAK  CONTOH  EQUIVALEN 


‐  Unary minus  Sebelum operator  A + ‐B * C  A + (‐B) * C 
++  Peningkatan dengan  Sebelum dan  A++  A = A + 1 
Penambahan nilai 1  sesudah   
‐‐  Penurunan dengan  Sebelum dan  A‐‐  A = A – 1 
Pengurang‐an nilai 1  sesudah   
sizeof  Ukuran dari operand  Sebelum  sizeof(I)  ‐ 
dalam byte   
!  Unary NOT  Sebelum  !A  ‐ 
~  Bitwise NOT  Sebelum  ~A  ‐ 
  Menghasilkan  Sebelum  &A  ‐ 
&  alamat memori 
operand 
*  Menghasil‐kan nilai  Sebelum  *A  ‐ 
dari pointer 

112
 
Tipe data dan Operator Bahasa Pemrorgraman

Dalam operator unary ada yang perlu disebut operator penambah


diperhatikan ketika menulis program (increment) dan pada sebuah
yaitu: bahwa operator peningkatan variable pencacah turun (down
++ dan penurunan -- jika diletakkan counter) dengan rumus: hitung =
sebelum atau sesudah operand hitung - 1 dapat ditulis dengan hitung
terdapat perbedaan. -= 1 dan secara singkat ditulis hitung-
- atau --hitung. Notasi -- disebut
3.7.1. Operator Increment dan operator pengurang (decrement).
Decrement Program dibawah merupakan
Suatu variable yang nilainya operasi hitung perulangan sebanyak
selalu bertambah satu, seperti pada loop kali yang dimulai dari 0 naik ke
sebuah variable pencacah naik (up satu, dua dan seterusnya. Operasi
counter) dengan rumus: hitung = dilakukan dengan melakukan
hitung + 1 dapat ditulis dengan hitung penambahan satu keatas
+= 1 dan secara singkat ditulis (increment). Perhatikan program
hitung++ atau ++hitung. Notasi ++ dibawah ini:

Program 3.13
#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
main() 

   int hitung = 0, loop; 
  loop = ++hitung; 
   cout <<"Loop = %d, Hitung = "<< loop<< hitung; 
   loop = hitung++; 
  cout <<"Loop = %d, Hitung = "<< loop<< hitung; 
      getch(); 
  return 0 ; 

Keluaran program diatas adalah sebagai berikut:


Loop  = 1, Hitung   = 1 
Loop  = 1, Hitung   = 2 

Program dibawah merupakan operasi Setiap operasi looping dilakukan


hitung perulangan sebanyak loop kali dengan melakukan pengurangan
yang dimulai dari 10 turun ke satu kebawah. Perhatikan contoh
sembilan, delapan dan seterusnya. program dibawah ini:

113
 
Bahasa Pemrograman Tipe Data dan Operator

Program 3.14
#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
main() 

   int hitung = 10, loop; 
  loop = ‐‐hitung; 
   cout <<"Loop = , Hitung = "<< loop<< hitung; 
   loop = hitung‐‐; 
  cout <<"Loop = , Hitung = "<< loop<< hitung; 
      getch(); 
  return 0 ; 

Keluaran program diatas adalah sebagai berikut:


Loop  = 9, Hitung   = 9 
Loop  = 9, Hitung   = 8 

3.7.2. Operator sizeof data apakah dan berapa ukuran data


Operator akan menghasilkan yang ada didalam sebuah variable
ukuran dari suatu variable atau tipe tersebut. Perhatikan potongan
pada saat dikompilasi. Ukuran ini program dibawah ini:
digunakan untuk mengetahui tipe

sizeof(tipe data); 
sizeof(char); 
sizeof(int); 

program dibawah ini akan melakukan dimunculkan setelah dilakukan


pengukuran terhadap variable tipe kompilasi. Perhatikan program
data dan kemudian hasilnya akan dibawah ini:

Program 3.15
#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
main() 

   cout <<"Size of char = "<< sizeof(char); 
114
 
Tipe data dan Operator Bahasa Pemrorgraman

   cout <<"Size of short int = \n"<< sizeof(short int); 
   cout <<"Size of int = \n"<< sizeof(int); 
   cout <<"Size of long int = \n"<< sizeof(long int); 
   cout <<"Size of float = \n"<< sizeof(float); 
   cout <<"Size of double = \n"<< sizeof(double); 
   cout <<"Size of long double = \n"<< sizeof(long double); 
     getch(); 
  return 0 ; 

Keluaran program diatas adalah sebagai berikut:


Size of char    =   1 byte 
Size of sort int    =   2 byte 
Size of int    =   2 byte 
Size of long int    =   4 byte 
Size of float    =   4 byte 
Size of double    =   8 byte 
Size of long double  = 10 byte 

Contoh program yang menggunakan dalam bentuk program secara


operator unary * (pointer) dan & langsung sehingga lebih mudah
(alamat memori). Penjelasan dari dipahami.
program tersebut dapat diuraikan

Program 3.16
#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
main() 

      int x = 67, y;     /* var pointer menunjuk ke data yg bertipe int */ 
      int *px;         // px diisi dengan alamat dari var x 
      px = &x;     // y diisi dengan nilai yang ditunjuk oleh px 
      y = *px; 
      cout <<"\nAlamat x = "<< &x; 
      cout <<"\nIsi px   = "<< px; 
      cout <<"\nIsi x    = "<< x; 
      cout <<"\nNilai yang ditunjuk oleh px = "<< *px; 
      cout <<"\nNilai y  = "<< y; 
      getch(); 
      return 0 ; 

115
 
Bahasa Pemrograman Tipe Data dan Operator

Keluaran program diatas adalah sebagai berikut:


Alamat x       = 2A6F : 223A 
Isi px        = 2A6F : 223A 
Isi x        = 67 
Nilai yang ditunjuk oleh px   = 67 
Nilai y         = 67 

Adapun penjelasan mengenai pointer program diatas adalah sebagai berikut :

Alamat Memori Isi memori Variabel


…………. …………. ………….
2A6F:2232 2A6F:223A px
…………. …………. ………….
2A6F:2238 2A6F:223A y
…………. …………. ………….
2A6F:223A 67 x
…………. …………. ………….

Perhatikan program Operator Variabel tersebut bertipe integer


Unary & dan * serta gambar diatas. maka akan menempati lokasi memori
Variabel x dan y merupakan suatu sebesar 16 bit. Alamat-alamat
lambang dari sebuah daerah di memori tersebut dipergunakan
memori utama komputer. Artinya x selama fungsi main dijalankan.
dan y masing-masing sebenarnya Deklarasi:
adalah suatu alamat memori. Ketika
variabel tersebut dideklarasikan int *px; 
sebagaimana dibawah ini:
berarti variabel px sama dengan
int x = 67, y;   alamat memori misalnya 2A6F:2232
dialokasikan dengan ukuran memori
maka variabel x sama dengan sebesar 16 bit (ukuran tipe integer).
alamat memori misalnya 2A6F:223A Perintah penugasan:
dialokasikan dan diisi data 67,
variabel y sama dengan alamat px = &x;  
memori misalnya 2A6F:2238
dialokasikan. Jadi x berisi 67 atau berarti variabel px (alamat
alamat memori 2A6F:223A berisi memori 2A6F:2232) diisi data
data 67. 2A6F:223A (alamat dari variabel x).

116
 
Tipe data dan Operator Bahasa Pemrorgraman

Jadi isi px = 2A6F:223A, Isi px ini merupakan tergolong dalam operator


merupakan alamat dari variabel x, binary adalah adalah sebagaimana
perhatikan gambar diatas agar lebih dijelaskan dibawah ini:
jelas. Perintah penugasan
selanjutnya adalah: 3.8.1. Operator Aritmatika
Digunakan untuk
y = *px;  mengoperasikan data-data numerik,
seperti perkalian, pembagian, sisa
berarti variabel y (alamat memori hasil bagi, penjumlahan, dan
2A6F:2238) diisi data alamat memori pengurangan. Dalam proses
variable px (2A6F:2232). Alamat aritmatika tersebut, pengerjaan
tersebut berisi data 67. Suatu alamat operasi tergantung dari tingkat
memori yang berisi data alamat valensi operator-operator yang
memori disebut pointer. terlibat. Perkalian memiliki valensi
tertinggi, kemudian dilanjutkan
dengan sisa pembagian, pembagian,
3.8. Operator Binary sedangkan penjumlahan dan
Operator binary adalah operator pengurangan mempunyai valensi
yang melibatkan atau dikenakan yang terendah. jenis operator
pada dua buah operand. Dibawah ini aritmatika, yaitu :

Tabel 3.8. Operator aritmetika


OPERATOR  ARTI  CONTOH 
*  Kali  a  *  b     a dikalikan dengan b 
3  *  2   =   6 
%  Modulo atau sisa  a%b sisa hasil pembagian bulat a dibagi dengan b  
pembagian bulat  3 % 2   =   1 
/  Bagi  a  /  b     a dibagi dengan b 
3  /  2   =   1 untuk tipe data integer 
3  /  2   =   1.5    ntuk tipe data float 
+  Plus atau tambah  a  + b     a ditambah dengan b 
3  + 2   =   5 
‐  Minus atau kurang  a  – b     a dikurangi b 
3  – 2   =   1 

Program dibawah ini merupakan bulat. Hasil operasi tersebut


operasi-operasi aritmetika dan kemudian ditampilkan dilayar
bertujuan untuk melakukan operasi monitor. Untuk lebih jelasnya
pembagian, modulo, serta operasi perhatikan program dibawah ini:
kombinasi aritmatika pada bilangan

Program 3.17
#include <conio.h> 
#include <iostream> 
 

117
 
Bahasa Pemrograman Tipe Data dan Operator

using namespace std; 
 
main() 

 /*operasi aritmatika 
    dengan bilangan bulat */ 
    int v, w, x, y, z; 
    v = 100; 
    w = 3; 
    x = v / w; 
    y = v % w; 
    z = v * w ‐ w + v % v / w; 
    cout <<"Operasi Aritmatika pada Bilangan Bulat\n"; 
    cout <<"X = \n"<< v<< w; 
    cout <<"  = \n"<< x; 
    cout <<"Y =   "<< v<< w; 
    cout <<"  =   "<< y; 
    cout <<"Z = \n"<< v<< w<< w<< v<< v<< w; 
    cout <<"  = \n"<< z; 
    getch(); 
    return 0 ; 

Keluaran program diatas adalah sebagai berikut:


Operasi Aritmetika pada bilangan Bulat 
X  = 100/3 
  = 33 
Y  = 100 MOD 3 
  = 1 
Z  = 100 * 3 – 3 + 100 mod 100/3 
  = 297 

Operator % (modulo) hanya berlaku pada tipe data integer, Perhatikan


program operasi aritmatika dengan bilangan real dibawah ini:

Program 3.18
#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
main() 

 float a, b, c, d, e; 

118
 
Tipe data dan Operator Bahasa Pemrorgraman

 a = 100.0; 
 b = 3.0; 
 c = a / b; 
 d = 100 % 3; 
 e = a * b ‐ b + 100 % 100 / b; 
 cout <<"\nOperasi Aritmatika pada Bilangan Real\n\n"; 
 cout <<"C = \n"<< a<< b; 
 cout <<"  = \n"<< c; 
 cout <<"D = \n"<< a<< b; 
 cout <<"  = \n"<< d; 
 cout <<"E = \n"<< a<< b<< b<< a<< a<< b; 
 cout <<"  = \n"<< e; 
 getch(); 
 return 0 ; 

Keluaran program diatas adalah sebagai berikut:


Operasi Aritmetika pada bilangan Real 
C   = 100.000000 / 3.000000 
  = 33.333332 
D   = 100.000000 mod 3.000000 
  = 1.000000 
E   = 100.00000 * 3.00000 – 3.00000 + 100.000000 / 3.000000 
  = 297.000000 

Dari contoh program diatas Perhatikan contoh mengenai hal


dapat dilihat dengan jelas bahwa tersebut diatas dapat dilihat pada
Operator / (pembagian) dapat program dibawah ini:
berfungsi sebagai pembagian bulat
(div) atau pembagian real. Hal ini z = 100 * 3 ‐ 3 + 100 % 100 / 3  
tergantung pada tipe data yang
dipergunakan. Tingkat pengerjaan Proses penyelesaian dalam program
operasi dari operator aritmatika adalah sama halnya dengan ketika
adalah: * (perkalian), % (modulo), / menyelesaikan persamaan aritmatika
(pembagian), + (penjumlahan), dan secara ditulis sebagai berikut ini:
– (pengurangan).

z = ((100 * 3) – (3 + ((100 % 100) / 3))) 
   = (    300     – (3 + ((100 % 100) / 3)))           
   = (    300     – (3 + (         0         / 3 )))           
   = (    300     – (3 +                     0      ))           
   = (    300     –   3                                 )           
   =  297

3.8.2. Operator Relasional


119
 
Bahasa Pemrograman Tipe Data dan Operator

Operator relasi digunakan untuk mewakili sebuah nilai logika (nilai


membandingkan hubungan antara boolean), dari suatu persamaan atau
dua buah operand (sebuah nilai atau nilai. Jenis-jenis operator relasi,sepeti
variable) atau digunakan untuk terlihat pada tabel dibawah ini:

Tabel 3.9. Operator relasi

OPERATOR  ARTI  CONTOH 


<  Kurang dari  x < y Apakah x kurang dari y 
<=  Kurang dari sama dengan  x <= y Apakah x kurang dari sama dengan 

>  Lebih dari  x > y Apakah x lebih dari y 
>=  Lebih dari sama dengan  x >= y Apakah x lebih dari sama dengan y 
==  Sama dengan  x == y Apakah x sama dengan 
!=  Tidah sama dengan  x != y Apakah x tidak sama dengan y 

3.8.3. Operator logika


Operator logika digunakan untuk suatu ekspresi) secara logis.
membandingkan logika hasil dari Operator logika ada tiga macam yaitu
operator-operator relasi atau operator AND, OR dan operator
digunakan untuk mengoperasikan NOT. Untuk lebih jelasnya perhatikan
operand (konstanta, variabel, atau dalam tabel berikut:

Tabel 3.10. Operator logika

OPERATOR  ARTI  CONTOH 


a       b    a && b 
(2<1)  && (3<1) = 0 
0       0          0 
0         &&     0    = 0 
&&  AND  0      1          0 
(2<4)  && (3<1) = 0 
1      0          0 
1         &&     0    = 0 
1      1          1 
a       b      a || b  (2<1)  ||  (4<1) = 0 
0      0          0  0       ||      0    = 0 
||  OR  0      1          1  (2<4)  ||  (3<1) = 1 
1      0          1  1       ||      0    = 0 
1      1          1   
a     !a      !(2>3) = 1 
!  NOT  0      1            !0  = 1   
1     0 

Program Operasi logika pada Operator Binary Logika

120
 
Tipe data dan Operator Bahasa Pemrorgraman

Program 3.19 
include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
main() 

int x, x1, x2, y, y1, y2, z, z1, z2, a, b, c; 
a = 125; 
b = 100; 
c = 25; 
x1 = a < b; 
x2 = a > b; 
y1 = c <= b; 
y2 = c >= b; 
z1 = a == c; 
 z2 = a != c; 
x = x1 && x2; 
y = y1 || y2; 
z = !z1; 
cout <<"\nA  = "<< a<< b<< c ; 
cout <<"\nX1 = " ; 
cout <<"\n   = "<< a<< b ; 
cout <<"\n   = "<< x1 ; 
cout <<"\nX2 = " ; 
cout <<"\n   = "<< a<< b ; 
cout <<"\n   = "<< x2 ; 
cout <<"\nY1 = " ; 
cout <<"\n   = "<< c<< b ; 
cout <<"\n   = "<< y1 ; 
cout <<"\nY2 = " ; 
cout <<"\n   = "<< c<< b ; 
cout <<"\n   = "<< y2 ; 
cout <<"\nZ1 = " ; 
cout <<"\n   = "<< a<< c ; 
cout <<"\n   = "<< z1 ; 
cout <<"\nZ2 = " ; 
cout <<"\n   = "<< a<< b ; 
cout <<"\n   = "<< z2 ; 
cout <<"\nX  = " ; 
cout <<" \n  = "<< x1<< x2 ; 

121
 
Bahasa Pemrograman Tipe Data dan Operator

cout <<" \n  = "<< x ; 
cout <<"Y\n  = " ; 
cout <<"\n  = "<< y1<< y2 ; 
cout <<"\n   = "<< y ; 
cout <<"Z\n  = " ; 
cout <<"\n   = "<< z1 ; 
cout <<"\n   = "<< z ; 
getch(); 
return 0 ; 

Keluaran program diatas adalah sebagai berikut:


A   = 125 
B  = 100 
C  = 25 
X1  = a < b 
  = 125 < 100 
  = 0 
X2  = a > b 
  = 125 > 100 
  = 1 
V1  = C <= B 
  = 25 <= 100 
  = 1 
V2   = C >= B 
  = 25 <= 100 
  = 0 
Z1   = A != C 
  = 125 != 25 
  = 0 
Z2  = A == B 
  = 125 == 100 
  = 1 
X  = X1 && X2 
  = 0 && 1 
  = 0 
Y  = Y1 || Y2 
  = 1 || 0 
  = 1 
Z  = !Z1 
  = !0 
  = 1  

122
 
Tipe data dan Operator Bahasa Pemrorgraman

3.8.4. Operator Bitwise atau manipulasi bit


Operator bitwise digunakan dikenakan pada operand bertipe
untuk memanipulasi bit-bit dari nilai integer atau karakter. Operator
data yang ada di memori. Semua bitwise sebagaimana terlihat dalam
operator bitwise hanya bisa tabel dibawah ini:

Tabel 3.11. Operator bitwise

OPERATOR  ARTI  CONTOH 


<<  Pergeseran bit ke kiri  9 << 2 
>>  Pergeseran bit ke kanan  9 >> 2 
&  Bitwise AND  9 & 2 
^  Bitwise XOR (Exclusive OR)  9 ^ 2 
|  Bitwise OR  9 | 2 
~  Bitwise NOT  ~ 9 

Perhatikan contoh operasi bitwise XOR antara data 9D dengan 2D maka akan
menghasilkan data 11D

9D   =   00001001B di XOR dengan 
  2D  =   00000010B 
11D   =   00001011B <= hasil XOR 
 

Atau contoh lain misalnya antara data 9D dengan 7D maka akan dihasilkan
data 14D seperti dibawah ini:

9D   =   00001001B di XOR dengan 
  7D   =   00000111B 
14D   =   00001110B <= hasil XOR 

Tabel 3.12. Kebenaran XOR

A  B  A XOR B 
0  0  0 
1  0  1 
0  1  1 
1  1  0 

Pada tabel XOR tersebut diatas baik 0 semua atau 1 semua. Dalam
adalah: data keluaran akan bernilai 0 operasi aritmetika sebuah data 9D
jika data masukannya bernilai sama misalnya akan digeser kekanan atau
123
 
Bahasa Pemrograman Tipe Data dan Operator

kekiri untukan operasi baik OR, AND,


OR maupun NOT. Perhatikan contoh 9D = 00001001B 
pergeseran data 9D yang digeser
kekiri maka nilai akan berubah. digeser kekiri:
Perubahan tersebut akan
mewakili sebuah operasi perkalian, 1x    => 00010010B = 18D 
pembagian atau operasi yang lain. 2x    => 00100100B = 36D 
Perhatikan contoh pergeseran data
9D dibawah ini:

Kalau digeser kekanan:

1x    =>  00000100B = 4D 
2x    =>  00000010B = 2D 
 
9D   =   00001001B di AND dengan 
2D   =   00000010B 
0D   =   00000000B <= hasil AND 
 
  9D   =   00001001B di OR dengan 
  2D   =   00000010B 
 11D   =   00001011B <= hasil OR 
  9D   =   00001001B di NOT menjadi: 
 ~9D   =   11110110B = ‐10D model komplemen 2 

Selain hasil tersebut diatas, komplemen kedua yaitu dengan


dapat dibuktikan dengan cara melakukan penambahan data 01
melakukan komplemen kedua. pada hasil komplemen pertama.
Komplemen satu yaitu dengan Untuk lebih jelasnya perhatikan
melakukan konversi data 0 menjadi 1 contoh dibawah ini:
atau sebaliknya, sedangkan

 10D   =   00001010B 
‐10D   =  11110101B model komplemen 1 
     =  11110110B model komplemen 2 

Untuk menyatakan bilangan negatip diperoleh dengan cara model


dalam bilangan biner dipakai model komplemen 1 ditambah 1.
komplemen. Model komplemen 2

Program 3.20. Operasi bit pada Operator Bitwise


#include <conio.h> 
#include <iostream> 
 

124
 
Tipe data dan Operator Bahasa Pemrorgraman

using namespace std; 
 
main() 

      int u, v, w, x, y, z; 
   u = 9 << 2; 
      v = 9 >> 2; 
   w = 9 & 2; 
   x = 9 ^ 2; 
   y = 9 | 2; 
  z = ~9; 
   cout <<"U  = 9 << 2\n"; 
   cout <<"   = %d\n", u; 
   cout <<"V  = 9 >> 2\n"; 
   cout <<"   = %d\n", v; 
   cout <<"W  = 9 & 2\n"; 
  cout <<"   = %d\n", w; 
   cout <<"X  = 9 ^ 2\n"; 
   cout <<"   = %d\n", x; 
  cout <<"Y  = 9 | 2\n"; 
   cout <<"   = %d\n", y; 
  cout <<"Z  = ~9\n"; 
   cout <<"   = %d\n", z; 
      getch(); 
  return 0 ; 

 
Keluaran program diatas adalah sebagai berikut:
U    = 9<< 2 
  = 36 
V  = 9>>2 
  = 2 
W  = 9 & 2 
  = 0 
X  = 9 ^ 2 
  = 11 
Y  = 9 | 2 
  = 11 
Z  = ~9 
  = ‐10 

Contoh program diatas menunjukkan bahwa hasil operasi dari operator relasi
atau operator logika hanya mempunyai satu nilai dari dua nilai kebenaran,
yaitu :

125
 
Bahasa Pemrograman Tipe Data dan Operator

 0 = false = salah atau


 1 = true = benar

3.8.5. Operator Penugasan dan Operator Kombinasi


Operator penugasan (Assignment operator) atau pemberi nilai berupa
tanda sama dengan (“=”). Perhatikan contoh dibawah ini:

nilai = 80;  Artinya : variable “nilai” diisi dengan 80 
A = x * y; Artinya : variable “A” diisi dengan hasil perkalian antara x dan y. 

Operator kombinasi merupakan dengan operator penugasan yang


gabungan antara dua operator digunakan untuk memendekkan
tertentu, yaitu antara operator penulisan operasi penugasan, seperti
aritmatika atau operator bitwise berikut:

Tabel 3.13. Operator penugasan


OPERATOR  ARTI  CONTOH  ARTINYA 
*=  Memberi nilai setelah nilai semula dikalikan  x *= 5;  x = x * 5; 
/=  Memberi nilai sisa bagi setelah nilai semula  x /= 5;  x = x / 5; 
dibagi  
%=  Memberi nilai sisa bagi dari pembagian nilai  x %= 5;  x = x % 5; 
semula  
+=  Memberi nilai setelah nilai semula ditambahkan  x += 5;  x = x + 5; 
‐ =  Memberi nilai setelah nilai semula dikurangkan  x ‐= 5;  x = x ‐ 5; 
<<=  Memberi nilai dari pergeseran bit ke kiri  x <<= 5;  x = x << 5; 
>>=  Memberi nilai dari pergeseran bit ke kanan  x >>= 5;  x = x >> 5; 
&=  Memberi nilai hasil bitwise AND  x &= 5;  x = x & 5; 
|=  Memberi nilai hasil bitwise OR  x |= 5;  x = x | 5; 
^=  Memberi nilai hasil bitwise XOR  x ^= 5;  x = x ^ 5; 

3.9. Operator Ternary


Operator ternary adalah operator Maksud dari ungkapan kondisi
yang melibatkan tiga buah operand. adalah: Jika kondisi bernilai benar,
Yang tergolong operator ini adalah: maka nilai ungkapan kondisi berupa
Operator kondisi dengan symbol ?: nilai ungkapan_1 dan jika kondisi
Bentuk ungkapan operator kondisi bernilai salah, maka nilai ungkapan
adalah : kondisi berupa nilai ungkapan_2.
Perhatikan contoh dibawah ini:
<kondisi> ? <ungkapan_1> : 
<ungkapan_2> 

126
 
Tipe data dan Operator Bahasa Pemrorgraman

maksim = nilai_awal > nilai_akhir ?  maksud dari contoh diatas dapat di


nilai_awal : nilai_akhir;  ungkapkan dalam bentuk kalimat
seperti ini:

jika nilai_awal = 80 dan nilai_akhir = 75, maka maksim = 80 (sama dengan nilai_awal) 
jika nilai_awal = 75 dan nilai_akhir = 80, maka maksim = 80 (sama dengan nilai_akhir) 
jika nilai_awal = 75 dan nilai_akhir = 75, maka maksim = 75 (sama dengan nilai_akhir) 

Program 3.21. Operasi kondisi pada Operator Kondisi


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

   int a, b, c, d; 
   a = 80; 
   b = 75; 
   c = a > b ? a : b; 
  cout <<"Mencari nilai yang lebih tinggi\n\n"; 
   cout <<"a = \n"<< a<< b; 
  cout <<"c = \n"; 
   cout <<"  = \n"<< a<< b<< a<< b; 
  cout <<"  = \n\n"<< c; 
 
   a = 75; 
   b = 80; 
   c = a > b ? a : b; 
   cout <<"Mencari nilai yang lebih tinggi\n\n"; 
   cout <<"a = \n"<< a<< b; 
   cout <<"c = \n"; 
   cout <<"  = \n"<< a<< b<< a<< b; 
   cout <<"  = \n"<< c; 
      getch(); 
  return 0 ; 

Keluaran program diatas adalah sebagai berikut:


Mencari Nilai yang lebih tinggi 
a  = 80 
b  = 75 

127
 
Bahasa Pemrograman Tipe Data dan Operator

c  = a > b ? a : b 
  = 80 > 75 ? 80 : 75 
  = 80 
 
Mencari Nilai yang lebih tinggi 
a   = 75 
b  = 80 
c  = a > b ? : b 
  = 75 > 80 ? 75 : 80 
  = 80 

3.10. Ungkapan (Ekspresi) fungsi untuk menggabungkan dua


Ungkapan dapat berupa untai.
konstanta (untai/numerik), variabel c. Ungkapan relasi/hubungan
dan nilai tunggal yang diperoleh Tipe untai dapat juga
dengan mengkombinasikan operand menggunakan operator relasi
dan operator, seperti 5+4. Ungkapan- seperti halnya dengan tipe
ungkapan dibagi menjadi empat numerik. Misalnya diketahui
kategori : bahwa:
a. Ungkapan numerik
‘A’ lebih kecil dari ‘B’  
2 + 5   3 * 4   2 + 7 / 5  
d. Ungkapan logika
b. Ungkapan string
!A  
“ABCD” + “EFGH”  ((A>5) && (B=4))  
nim + nama  ((Nama = ”Agus”) || (nama = 
”Doni”)) 
Satu-satunya operator yang
berlaku pada ungkapan string e. Program sederhana
hanyalah tanda +, yang ber- menggunakan Tipe data

Program 3.22. contoh penggunaan tipe data


#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
typedef unsigned char byte; 
 
main() 

   long int data1 = 546767226531; 
   int data2 = 2235641; 

128
 
Tipe data dan Operator Bahasa Pemrorgraman

   short  int data3 = 714; 
   byte data4 = 34; 
   float ata6 = 1.733; // tipe data pecahan 
   double ata5 = 4.967; // tipe data pecahan 
   char data7 = 'C'; 
   enum boolean {false, true}; 
   enum boolean kondisi; 
   kondisi = true; 
   char data8[6]; 
   data8[] = kondisi = = 1 ? "true":"false"; 
   printf("Nilai Long :  %ld\n"<< data1; 
   cout <<"Nilai Int : %d\n "<< data2; 
   cout <<"Nilai Short : %hd\n"<< data3; 
   cout <<"Nilai Byte : %d\n"<< data4; 
   cout <<"Nilai Double : %lf\n"<< data5; 
   cout <<"Nilai Float : %f\n"<< data6; 
   cout <<"Nilai Char : %c\n"<< data7; 
   cout <<"Nilai Boolean : %s\n"<< data8; 
   getch(; 
   return 0 ; 
 } 

3.11. Soal Latihan


Jawablah soal latihan dibawah ini dengan baik dan benar.
1. Apa yang dimaksud dengan data
2. Sebutkan jenis-jenis data yang digunakan pada bahasa pemrograman
3. Apa yang dimaksud dengan konstanta
4. Buatlah sebuah program sederhana menggunakan variabel konstanta
5. Apa yang dimaksud dengan operator unary, binary dan ternary
6. Apa yang dimaksud dengan variabel
7. Sebutkan tipe variabel yang digunakan dalm bahasa c++
8. Buatlah program sederhana yang menggunakan operator unary, binary
dan ternary

129
 
Bahasa Pemrograman Tipe Data dan Operator

130
 
Struktur Perulangan Bahasa Pemrorgraman

BAB 4
STRUKTUR PERULANGAN

4.1. Perulangan
4.2. Operator Increment dan Decrement
4.3. Ekspresi Matematika ++ dan --
4.4. Penghitung
4.5. Pernyataan FOR
4.6. Pernyataan NESTED - FOR
4.7. Pernyataan WHILE
4.8. Pernyataan NESTED-WHILE
4.9. Perulangan Do-WHILE
4.10. Pernyataan NESTED DO-WHILE
4.11. Perulangan Tidak Berhingga
4.12. Pernyataan Break
4.13. Pernyataan Continue
4.14. Pernyataan Goto
4.15. Soal Latihan

4.1. Perulangan
Perulangan atau iterasi atau disebut loop. Dengan memakai loop,
yang biasa disebut dengan “looping”  suatu proses yang berulang misalnya
adalah proses melakukan tindakan menampilkan angka 1 sampai 1000
yang sama secara berulang-ulang atau tulisan yang sama sebanyak
atau berkali-kali sampai batas yang sepuluh kali di layar dapat
telah ditentukan. Perulangan diimplementasikan dengan kode
digunakan untuk menjalankan satu program yang pendek.
atau beberapa pernyataan sebanyak Pada pemrograman proses
beberapa kali. Dengan kata lain, perulangan dibagi menjadi 2 jenis,
perulangan dipakai untuk yaitu: Perulangan yang telah
menjalankan beberapa pernyataan diketahui jumlah perulangannya
dengan hanya menuliskan sebelum perulangan tersebut di
pernyataan tersebut satu kali. Hal ini lakukan. Jenis perulangan ini
banyak sekali dijumpai dalam dilakukan dengan penyataan for. Dan
pemrograman. kedua adalah perulangan yang belum
Perulangan proses dalam di ketahui jumlah perulangannya
bahasa pemrograman ditangani sebelum perulangan tersebut
dengan suatu mekanisme yang dilakukan. Perulangan jenis ini terdiri

131
 
Bahasa Pemrograman Struktur Perulangan

dari dua kategori, yaitu: kondisi while. Struktur perulangan secara


perulangan diperiksa diawal umum terdiri dari dua bagian:
perulangan. Jenis perulangan ini  Kondisi perulangan, yaitu ekspresi
dilakukan dengan penyataan while. boolean yang harus dipenuhi
Kondisi perulangan diperiksa diakhir untuk melaksanakan perulangan.
perulangan. Jenis perulangan ini  Badan (body) perulangan, yaitu
dilakukan dengan penyataan do- bagian algoritma yang diulang.

4.2. Operator Increment dan Decrement


Sebelum jauh membahas menaikan variabel num adalah
perulangan, akan dipelajari dahulu sebagai berikut:
mengenai operasi increment.
Operator Increment digunakan untuk num++; 
menaikan atau bisa juga untuk
meningkatkan nilai dengan satu, sedangkan pernyataan decrement
sedangkan decrement digunakan yang digunakan untuk mengurangi
untuk mengurangi nilai turun variabel num adalah sebagai berikut:
dengan satu. Kedua pernyataan
num ‐ ‐ ; 
berikut merupakan untuk
menaikan variabel num dengan dalam bahasa pemrograman baik
satu: sebelum maupun sesudah bab ini
dibahas sering menggunakan operasi
num = num + 1;  kenaikan dan pengurangan yang
num += 1;  menggunakan dalam mode postfix,
mode postfik artinya operator
num di kurangi dengan satu dapat diletakkan setelah variabel. Operator
dilihat dari pernyataan berikut ini: juga bekerja dalam mode prefik,
dimana operator ditempatkan
num = num ‐ 1;  sebelum nama variabel:
num ‐= 1; 
+ + num; 
dalam bahasa C++ menyediakan ‐ ‐ num; 
satu set operator unary sederhana
yang dirancang hanya untuk Kedua operator mode postfix dan
menambah dan mengurangi sebuah prefix diatas akan menambahkan 1
variabel dengan 1. Operator atau mengurangi dengan 1 pada
increment adalah mengunakan kode setiap operand. Program dibawah
++. Sedangkan operator decrement menunjukkan operator increment dan
adalah --. Pernyataan yang decrement.
menggunakan operator ++ untuk

132
 
Struktur Perulangan Bahasa Pemrorgraman

Program 4.1
#include <iostream> 
 
using namespace std; 
 
int main() 

    int bigVal = 10, smallVal = 1; 
    cout << "vabesar adalah " << bigVal << " dan valkecil adalah " << smallVal << endl; 
    smallVal++; 
    bigVal‐‐; 
    cout << "vabesar adalah " << bigVal<< " dan valkecil adalah " << smallVal << endl; 
    ++smallVal; 
    ‐‐bigVal; 
    cout << "vabesar adalah " << bigVal<< " dan valkecil adalah " << smallVal << endl; 
    return 0; 

Keluaran programnya adalah :


vabesar adalah 10 dan valkecil adalah 1 
vabesar adalah 9 dan valkecil adalah 2 
vabesar adalah 8 dan valkecil adalah 3 

4.3. Ekspresi Matematika ++ dan - -


Pada operator kenaikan dan Jika pernyataannya c tersebut diatas
pengurangan dapat juga digunakan berubah maka dapat dibaca:
pada variabel dalam ekspresi
matematika. Perhatikan potongan c = a * ++b; 
program berikut ini:
variabel b akan ditambahkan dengan
a = 2;  satu sebelum keduanya dikalikan
b = 5;  dengan a. dalam kasus ini c
c = a * b++;  merupakan hasil dari nilai 2 dikalikan
cout << a << " " << b << " " << c;  6, sehingga pernyataan cout akan
menampilkan:
dalam pernyataan c = a * b++, c
adalah hasil dari perkalian a dan b, 2 6 12  
dimana 10. Merupakan sebuah
variabel b yang ditambahkan dengan Dengan satu saja dapat
satu. Kemudian dengan membawa beberapa aksi dalam satu
menggunakan pernyataan cout maka pernyataan menggunakan operator
hasil ditampilkan sebagai berikut: kenaikan dan pengurangan, hal
tersebut juga tidak terlalu rumit untuk
2 6 10   digunakan. Perhatikan potongan
program dibawah ini:

133
 
Bahasa Pemrograman Struktur Perulangan

a = 2;  x = 10 ;  
b = 5;  if (x + +> 10) 
c = ++(a * b);   // Error!  cout << "x lebih besar daripada 10. \n";  

pernyataan tersebut diatas Dua operasi yang terjadi dalam


merupakan pernyataan sederhana pernyataan IF tersebut diata adalah:
yang tidak bekerja karena adanya (1) nilai yang diuji pada x untuk
operator kenaikan dan pengurangan. menentukan apakah nilainya lebih
Pada operator kenaikan dan besar daripada 10, dan (2) x adalah
pengurangan biasanya ada variabel diincremented. Karena kenaikan
operand, tetapi umumnya, sesuatu operator yang digunakan dalam
yang ada di sebelah kiri dari operator mode postfix, Bandingan hal yang
yang disetujui. terjadi terlebih dahulu. Sejak 10 tidak
Seperti sudah kita ketahui bahwa lebih dari 10, pernyataan cout tidak
dalam bab ini, operator ++ dan -- akan dijalankan. Jika mode kenaikan
digunakan sebagai kalimat operator berubah, sedangkan jika
penghubung. Sama seperti dalam pernyataan akan membandingkan
ekspresi matematika, perbedaan 11-10 dan pernyataan cout akan
antara mode postfix dan prefix sangat dijalankan.
dekat. Perhatikan potongan program
berikut ini:

4.4. Penghitung
Kadang-kadang penting bagi dengan 10, jadi loop harus iterasi 10
sebuah program untuk melacak kali. Program tersebut dibawah akan
jumlah Iterasi yang dilakukan dalam menampilkan angka 1 sampai
satu loop. Misalnya, Program dengan 10 dan kemudian
dibawah menampilkan sebuah tabel dikuadratkan:
yang terdiri dari angka 1 sampai

Program 4.2.
include <iostream> 
 
using namespace std; 
 
int main() 

      int num = 1;       // inisialisasi penghitung 
  cout << " Angka       Angka kuadrat\n"; 
  cout << "‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐\n"; 
   while (num <= 10) 
   { 
    cout << num << "\t\t" << (num * num) << endl; 
     num++;       // penghitung Increment 
134
 
Struktur Perulangan Bahasa Pemrorgraman

   } 
  return 0; 

Keluaran programnya adalah sebagai berikut:


Angka     Angka kuadrat 
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 
1                 1 
2                4 
3                 9 
4                 16 
5                 25 
6                 36 
7                 49 
8                 64 
9                 81 
10                100 

Dalam Program diatas, variabel num digunakan sebagai


num, dimulai dari angka 1, kemudian pengendalian pada loop dan kapan
diincrement pada setiap kali putaran akan keluar dari loop, disebut
loop. Ketika num mencapai 11 lingkaran kontrol variabel.
lingkaran berhenti. num digunakan Dalam contoh program diatas,
sebagai counter variabel, yang berarti penambahan variabel num adalah
variabel tersebut secara teratur di pada lingkaran. Pendekatan lain
increment pada setiap perulangan. adalah dengan menggabungkan laba
Pada dasarnya, num terus operasi yang berhubungan dengan
menghitung jumlah lingkaran Iterasi pengujian, seperti yang ditunjukkan
yang telah dilakukan. Ketika variabel dalam pada program dibawah ini.

Program 4.3
#include <iostream> 
 
using namespace std; 
 
int main() 

int num = 0; 
cout << "Angka       Angka kuadrat\n"; 
cout << "‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐\n"; 
 while (num++ < 10) 
  cout << num << "\t\t" << (num * num) << endl; 
  return 0; 

135
 
Bahasa Pemrograman Struktur Perulangan

Keluaran programnya adalah sebagai berikut:


Angka     Angka kuadrat 
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 
1                 1 
2                 4 
3                 9 
4                 16 
5                 25 
6                 36 
7                 49 
8                 64 
9                 81 
10                100 

Perhatikan bahwa sekarang satu setelah berhubungan ujian.


variabel num diinisialisasi ke 0, bukan Ketika lingkaran pertama
1, dan relatif menggunakan ekspresi melaksanakan, num diatur kenilai 0,
<operator bukan <=. Hal ini karena kemudian 0 dibandingkan dengan 10.
cara operator untuk menaikan Operator ++ kemudian akan
bekerja jika digabungkan dengan menambahkan variabel num segera
ekspresi penghubung. setelah dilakukan perbandingan. Bila
Kenaikan operator yang pernyataan cout dieksekusi, num
digunakan dalam mode postfix, memiliki nilai 1.
berarti pada variabel num menambah

 
num dibandingkan dengan 10, kemudian di‐increment.  
Bila pernyataan cout dilaksanakan, num 1 bernilai lebih 
besar dari itu pengujian tersebut. 
 
while (num++ < 10) 
   cout << num << "\t\t" << (num * num) << endl; 

Di dalam looping, num selalu memiliki < bukan <=. Ketika variabel num
nilai lebih dari 1 dibanding bernilai 9 maka diuji, sehingga akan
sebelumnya nilai 10. Itulah mengapa menjadi bernilai 10 pada pernyataan
penghubung operator menggunakan cout.

4.5. Pernyataan FOR


Jenis loop dalam bahasa C++ built-in (menjadi satu) dengan
adalah loop FOR. FOR sangat ideal memperbarui variabel. Berikut ini
untuk situasi yang memerlukan adalah format perulangan FOR
penghitung karena ekpresinya sudah

136
 
Struktur Perulangan Bahasa Pemrorgraman

for loop. 
for (initialization; test; update) 

pernyataan; 
pernyataan; 
// tempat banyaknya pernyataan 

Bisa juga sebuah perulangan dalam bentuk format potongan


menggunakan pernyataan for ditulis program sebagai berikut:

for (inisialisasi; syarat perulangan; pengubah nilai pencacah) 
pernyataan; 

Bisa juga ditulis seperti dibawah ini:

for (ungkapan1; ungkapan2; ungkapan3) 
pernyataan; 

Penjelasan mengenai format  Ungkapan3 atau pengubah nilai


pernyataan FOR diatas adalah pencacah: dipakai sebagai
seperti dibawah ini: pengatur perubahan nilai variabel
 Ungkapan1 atau inisialisasi: pengendali loop. Perubahan nilai
digunakan untuk memberikan bisa kenaikan atau penurunan nilai
inisialisasi terhadap variabel pencacah
pengendali loop. Ketiga ungkapan dalam FOR
tersebut harus dipisahkan dengan
 Ungkapan2 atau sebagai syarat titik koma (;). Pernyataan dalam for
perulangan: dipakai sebagai dapat berupa pernyataan tunggal
pemegang kontrol terhadap maupun jamak (lebih dari satu). Jika
pengulangan, karena bagian ini pernyataannya berbentuk jamak,
yang akan menentukan suatu maka pernyataan-pernyataan
kondisi perulangan untuk tersebut harus diletakan didalam satu
diteruskan atau dihentikan dari blok dengan memakai tanda kurung
loop. kurawal seperti berikut:

for (inisialisasi; syarat pengulangan; pengubah nilai pencacah) 

pernyataan_1; 
pernyataan_2; 
……… 
Pernyataan_n; 

137
 
Bahasa Pemrograman Struktur Perulangan

Berikut ini adalah sebuah diagram alir pernyataan FOR adalah sebagai berikut:

Inisialisasi 
Loop = 1 

pengubah nilai pencacah 
loop++ atau loop = loop + 1 

Pernyataan 
Cetak bilangan 
cout << loop << " "; 

Syarat  Benar
perulangan 
Loop <= 10 

Salah

Gambar 4.1. Diagram Alir Pernyataan FOR

Seperti perulangan dua lainnya, Ekspresi yang kedua adalah test


jika hanya ada satu pernyataan expression. Seperti ekspresi test
dalam tubuh perulangan, kotak dalam perulangan while dan do-
pernyataan (brace) akan dapat while, test expression mengendalikan
diabaikan. Perulangan FOR pelaksanaan perulangan. Selama ini
mempunyai tiga ekspresi didalam ungkapan itu benar, mka tubuh
tanda kurung, dipisahkan oleh perulangan FOR akan mengulang
semicolon. (Perhatikan tidak ada lagi.
koma setelah ketiga ekspresi.) Ekpresi ketiga adalah ekspresi
Pertama adalah ekspresi update expression. Ekspresi ini akan
initialization expression. Ekspresi ini melaksanakan diakhir setiap
biasanya digunakan untuk sebuah perulangan. Biasanya, ia akan
initialize penghitung atau variabel menambahkan sebuah penghitung
yang harus memiliki nilai awal. Ini atau variabel yang harus diubah pada
adalah tindakan yang pertama setiap perulangan. Program dibawah
dilakukan oleh perulangan dan hanya adalah Program yang menggunakan
dilakukan sekali. FOR sebagai pengganti dari while
loop.
138
 
Struktur Perulangan Bahasa Pemrorgraman

Program dibawah menggunakan kemudian mengkuadratkannya.


pernyataan FOR untuk menampilkan Untuk lebih jelasnya perhatikan
angka 1 sampai dengan 10 dan program dibawah ini:

Program 4.4
#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
int main() 

int num; 
cout << "Angka     Angka kuadrat \n"; 
cout << "‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐\n"; 
for (num = 1; num <= 10; num++) 
   cout << num << "\t\t" << (num * num) << endl; 
      getch ();   
return 0; 

Keluaran program diatas adalah sebagai berikut:


Angka     Angka kuadrat  
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 
1                1 
2               4 
3                 9 
4                 16 
5                25 
6                36 
7                 49 
8                 64 
9                81 
10                100 

139
 
Bahasa Pemrograman Struktur Perulangan

Gambar dibawah menjelaskan proses langkah-langkah program


mengenai mekanisme looping dalam diatas.
perulangan untuk menjelaskan

            Step 1. Melakukan inisialisasi ekspresi.
  Step 2. Mengevaluasi tes ekspresi. Jika memang, lanjut ke Step 3.  
Jika tidak, menghentikan loop 
    Step 4. Melakukan update ekspresi. 
Kembali ke step 2. 
     

for (num = 1; num  <= 10;  num++) 
     cout << num << "\t\t" << (num * num) << endl; 
 

Step 3. Jalankan tubuh perulangan.

Gambar 4.2. Mekanisme Perulangan

Meskipun pada umumnya gaya loop, jika sudah dilakukan atau jika
pemrograman diatas dianggap jelek, tidak ada initialization diperlukan.
tetapi satu atau beberapa kalimat Berikut dibawah ini adalah contoh
perulangan dapat diabaikan. program perulangan dalam
Initialization ekspresi yang mungkin melakukan pengaksesan sebelum
dapat dihilangkan dari dalam kurung perulangan:

int num = 1; 
for ( ; num <= 10; num++) 
cout << num << "\t\t" << (num * num) << endl; 

Kita juga dapat mengabaikan perulangan atau jika tidak ada yang
pembaruan ekspresi, jika sedang diperlukan. perulangan berikut ini
dilakukan di tempat lain didalam untuk bekerja seperti loop while.

int num = 1; 
for ( ; num <= 10; ) 

cout << num << "\t\t" << (num * num) << endl; 
num++; 

140
 
Struktur Perulangan Bahasa Pemrorgraman

Kita bahkan dapat tidak diabaikan maka akan terjadi


menggunakan atau mengabaikan peringatan bahwa kita membiarkan
semua tiga ekspresi dari tanda test expression. Perhatikan contoh
kurung loop FOR. Jika hal tersebut dibawah ini:

for ( ; ; ) 
cout << "Hello World\n"; 

Karena perulangan ini tidak dibatasi dalam menggunakan


memiliki cara untuk berhenti, pernyataan increment pada ekspresi
maka program diatas akan update. Berikut ini adalah sebuah
menampilkan kata "Hello World \ n" perulangan yang menampilkan
selamanya atau sampai terjadi semua atau bahkan angka 2 hingga
interupsi program. 100 dengan menambahkan 2 pada
Bentuk lain yang memperbarui setiap penghitung. Perhatikan
Ekspresi dilakukan supaya kita tidak program dibawah ini:

for (number = 2; number <= 100; number += 2) 
cout << number << endl; 

program dibawah ini merupakan hitungan turun mulai dari 10 turun


program perulangan yang melakukan sampai nilai 0.

for (number = 10; number >= 0; number‐‐) 
cout << number << endl; 

perulangan dibawah ini tidak memiliki pembaruan ekspresi akan melakukan


badan resmi. Gabungan kenaikan semua pekerjaan pada setiap iterasi:
operasi dan pernyataan cout

for (number = 1; number <= 10; cout << number++); 

Jika perulangan memerlukan mengenai angka penjualan selama


melakukan lebih dari satu pernyataan satu minggu.
sebagai bagian dari inisialisasi, Program dibawah ini akan
pernyataan dipisahkan dengan tanda berlangsung setiap hari selama satu
koma. Program dibawah adalah versi minggu dan kemudian program akan
Program sebelumnya yang diubah menghitung totalnya. Perhatikan
untuk memberitahu pengguna program berikut ini:

141
 
Bahasa Pemrograman Struktur Perulangan

Program 4.5
#include <iostream> 
#include <iomanip> 
 
using namespace std; 
 
int main() 

const int NUM_DAYS = 7;  
 
int count; 
double total; 
   for (count = 1, total = 0.0; count <= NUM_DAYS; count++) 
   { 
           double sales; 
           cout << "Masukkan penjualan untuk hari  " << count << ": "; 
           cin  >> sales; 
           total += sales; 
   }   
      cout << fixed << showpoint << setprecision(2); 
      cout << "Total penjualan adalah $" << total << endl; 
      return 0; 

Keluaran Program setelah memberikan masukan adalah sebagai berikut:


Masukkan penjualan untuk hari  1: 489.32[Enter] 
Masukkan penjualan untuk hari  2: 421.65[Enter] 
Masukkan penjualan untuk hari  3: 497.89[Enter] 
Masukkan penjualan untuk hari  4: 532.37[Enter] 
Masukkan penjualan untuk hari  5: 506.92[Enter] 
Masukkan penjualan untuk hari  6: 489.01[Enter] 
Masukkan penjualan untuk hari  7: 476.55[Enter] 
Total penjualan adalah $ 3413.71 

Dalam perulangan menggunakan pernyataan untuk melakukan


FOR, penghitung diinisialisasi ke 1, pembaharuan sebuah ekspresi.
maka total inisialisasi adalah 0,0. Kita Perhatikan program dibawah ini:
dapat menempatkan lebih dari satu

double sales; 
for (count = 1, total = 0.0; count <= NUM_DAYS; count++, total += sales) 

    cout << "Masukkan penjualan untuk hari  " << count << ": "; 
    cin  >> sales; 

142
 
Struktur Perulangan Bahasa Pemrorgraman

Dalam melakukan pembaruan Perhatikan contoh mengenai


ekspresi sebuah perulangan, program looping menggunakan FOR.
penghitung di increment, maka nilai Program dibawah ini digunakan untuk
penjualan tersebut akan ditambahkan mencetak bilangan dari 1 hingga 10
ke total pada akhir setiap perulangan. secara naik.

Program 4.6
#include<conio.h> 
#include <iostream.h> 
 
using namespace std; 
 
int main() 

 int loop; 
 for (loop = 1; loop <= 10; loop++) 
 cout << loop << " "; 
 getch(); 
 return 0; 

Keluaran program adalah sebagai berikut:


1 2 3 4 5 6 7 8 9 10 

Pada program diatas terdapat 10 dan spasi kosong secara


horizontal atau berjajar. Proses
int loop;  tersebut dilakukan secara iterasi
sepuluh kali yang diawali dengan nilai
tipe data variabel loop adalah integer loop = 1, kenaikan nilai loop satu
(loop++), dan berakhir sampai syarat
for (loop = 1; loop <= 10; loop++)  terpenuhi loop <= 10, , yaitu: loop =
cout << loop << " ";  10. Perhatikan tanda loop++ yang
berarti loop = loop + 1. Proses
Perintah di atas akan perulangan potongan program diatas
menampilkan angka dari 1 dan adalah sebagai berikut:
sebuah spasi kosong sampai angka

Pada loop = 1 ditampilkan : 1  disambung dengan loop ke 2 
Pada loop = 2 ditampilkan : 2  disambung dengan loop ke 3 
…… 
…… 
…… 
Pada loop = 10 ditampilkan : 10 

143
 
Bahasa Pemrograman Struktur Perulangan

Pada  loop  =  11  proses  iterasi  selesai  atau  berhenti  karena  nilai  ini  sudah  tidak 
memenuhi syarat yang ditentukan, yaitu: 11 <= 10.  

Selanjutnya adalah:
Kenaikan terhadap variabel
getch();  pengendali loop bisa diatur jaraknya
dengan mengatur stepnya. Misalnya
meminta masukan sembarang untuk jarak kenaikkannya 2, maka
tombol, perintah ini dimaksudkan dinyatakan dengan:
untuk menahan hasil tampilan dilayar
supaya tetap nampak dan akan Loop += 2 
menutup sampai adanya sembarang
tombol ditekan. Hal diatas sama artinya sama
dengan program dibawah ini:
return 0; 
Loop = loop + 2 
untuk memberi nilai kembalian pada
fungsi main. Pada program di atas, Pada contoh yang melibatkan
kenaikan terhadap variabel pernyataan for diatas, kenaikan
pengendali loop sebesar 1 (positif), variabel pengendali loop berupa nilai
yang dinyatakan dengan ungkapan: positif. Sebenarnya kenaikan
terhadap variabel pengendali loop
loop ++   dapat pula diatur supaya bernilai
negatif, seperti dicontohkan pada
artinya ungkapan tersebut sama program dibawah ini. Program
dengan: dibawah akan mencetak bilangan
dari 10 hingga 1 secara menurun.
loop = loop + 1 

Program 4.7
#include<conio.h> 
#include <iostream.h> 
 
using namespace std; 
 
int main() 

  int loop; 
  for (loop = 10; loop >= 1; loop‐‐) 
    cout << loop << " "; 
     getch(); 
  return 0; 

144
 
Struktur Perulangan Bahasa Pemrorgraman

Hasil keluaran program adalah sebagai berikut:


10 9 8 7 6 5 4 3 2 1 

Program lainnya yang mennggunakan pernyataan FOR untuk


menampilkan bilangan ganjil antara 1 hingga 10 adalah sebagai berikut:

Program 4.8
#include<conio.h> 
#include <iostream.h> 
 
using namespace std; 
 
int main() 

   int loop; 
   for (loop = 1; loop <= 10; loop+=2) 
     cout << loop << " "; 
   getch(); 
   return 0; 

Hasil keluaran program diatas adalah sebagai berikut:


1 3 5 7 9 

Selain berupa angka, pencacah perulangan juga dapat berupa karakter.


Perhatikan contoh program dibawah ini:

Program 4.9
#include<conio.h> 
#include <iostream.h> 
 
using namespace std; 
 
int main() 

 char huruf; 
 for (huruf = 'A'; huruf <= 'Z'; huruf++) 
cout << "Huruf abjad = " << huruf << "\n"; 
 getch(); 
 for (huruf = 'A'; huruf <= 'Z'; huruf+=13) 
   cout << "Huruf abjad = " << huruf << "\n"; 
 getch(); 
 for (huruf = 'z'; huruf >= 'a'; huruf‐‐) 
cout << "Huruf abjad = " << huruf << "\n"; 
 getch(); 
145
 
Bahasa Pemrograman Struktur Perulangan

 for (huruf = 'z'; huruf >= 'a'; huruf‐=8) 
   cout << "Huruf abjad = " << huruf << "\n"; 
 getch(); 
 return 0; 

Hal yang perlu diperhatikan pada Huruf abjad = Z 


program diatas adalah potongan
program seperti dibawah ini:
Perhatikan potongan program
for (huruf = 'A'; huruf <= 'Z'; huruf++)  dibawah ini:
cout << "Huruf abjad = " << huruf << 
"\n";  for (huruf = 'A'; huruf <= 'Z'; huruf+=13) 
cout << "Huruf abjad = " << 
Perintah di atas akan menampilkan huruf << "\n";
teks Huruf abjad = mulai dari A
sampai dengan Z. Perhatikan Perintah diatas akan menampilkan
perintah pada huruf++. teks Huruf abjad = mulai dari A
sampai dengan Z dengan step 13,
Huruf abjad = A  maka yang muncul adalah:
Huruf abjad = B 
Huruf abjad = C  Huruf abjad = A 
Huruf abjad = D  Huruf abjad = N 
Huruf abjad = E 
Huruf abjad = F  Perhatikan pada instruksi huruf+=13
Huruf abjad = G 
Huruf abjad = H  for (huruf = 'z'; huruf >= 'a'; huruf‐‐) 
Huruf abjad = I  cout  <<  "Huruf  abjad  =  "  <<  huruf  << 
Huruf abjad = J  "\n"; 
Huruf abjad = K 
Huruf abjad = L  Perintah tersebut akan menampilkan
Huruf abjad = M  teks Huruf abjad = mulai dari z
sampai dengan a. Perhatikan pada
Huruf abjad = N 
perintah huruf--
Huruf abjad = O 
Huruf abjad = P 
Huruf abjad = z 
Huruf abjad = Q 
Huruf abjad = y 
Huruf abjad = R 
Huruf abjad = x 
Huruf abjad = S 
Huruf abjad = w 
Huruf abjad = T 
Huruf abjad = v 
Huruf abjad = U 
Huruf abjad = u 
Huruf abjad = V 
Huruf abjad = t 
Huruf abjad =W 
Huruf abjad = s 
Huruf abjad = X 
Huruf abjad = r 
Huruf abjad = Y 
Huruf abjad = q 

146
 
Struktur Perulangan Bahasa Pemrorgraman

Huruf abjad = p  Dari potongan program diatas dapat


Huruf abjad = o  ditulis menjadi :
Huruf abjad = n 
Huruf abjad = m  loop = 1;      
Huruf abjad = l  for ( ; loop <= 10; ) 
Huruf abjad = k  { 
Huruf abjad = j  cout << loop << " "; 
Huruf abjad = i  loop += 2; 
Huruf abjad = h  } 
Huruf abjad = g 
Huruf abjad = f  Pengosongan juga dilakukan
Huruf abjad = e  pada ungkapan untuk menaikkan
Huruf abjad = d  nilai variabel pengendali loop.
Sebagai gantinya, di dalam tubuh
Huruf abjad = c 
loop diberikan pernyataan untuk
Huruf abjad = b 
menaikkan nilai variabel pengendali
Huruf abjad = a  loop, yaitu berupa:
Perhatikan potongan program loop += 2; 
dibawah ini:
for (huruf = 'z'; huruf >= 'a'; huruf‐=8)  Ungkapan yang tidak dihilangkan
cout << "Huruf abjad = " << huruf <<  berupa loop <=10. Ungkapan ini tetap
"\n";  disertakan karena dipakai sebagai
  kondisi untuk keluar dari loop.
Perintah itu akan menampilkan teks Sebenarnya ungkapan yang dipakai
Huruf abjad = mulai dari z sampai sebagai kondisi keluar dari loop juga
dengan a dengan step -8, maka yang bisa dihilangkan, sehingga bentuknya
muncul adalah:  menjadi:

Huruf abjad = z  for (;;) 
Huruf abjad = r       pernyataan; 
Huruf abjad = j 
Huruf abjad = b Lalu bagaimana cara keluar dari
loop tersebut. Caranya adalah
Perhatikan instruksi huruf -=8. dengan menggunakan pernyataan
Kadang-kadang dijumpai adanya yang dirancang khusus untuk keluar
pernyataan FOR yang tidak dari loop. Pernyataan itu adalah
mengandung bagian ungkapan yang break yang akan dijelaskan dalam
lengkap (beberapa ungkapan sub bahasan tersendiri. Pernyataan
dikosongkan). Dengan cara ini, maka break digunakan untuk keluar dari
pernyataan adalah sebagai berikut: satu blok loop for. Perhatikan
program FOR untuk menampilkan
for (loop = 1; loop <= 10; loop+=2)  warna seperti program berikut:
cout << loop << " "; 

147
 
Bahasa Pemrograman Struktur Perulangan

Program 4.10
#include<stdio.h> 
#include<conio.h> 
 
using namespace std; 
 
int main(void) 

   int i = 0; 
   for (;;) 
   { 
      i++;    
      textattr(i + ((i+1) << 4)); 
          cprintf("Warna atribut\r\n"); 
      if (i==20) break; 
   } 
   getch(); 
   return 0; 
}  

Keluaran program diatas adalah sebagai berikut:

Pada contoh berikut merupakan cara menekan tombol CTRL–PAUSE


penggunaan loop tanpa henti. Karena atau CTRL – BREAK. Perhatikan
program memang dirancang untuk program FOR untuk menampilkan
tidak berhenti maka untuk warna seperti berikut:
menghentikannya dilakukan dengan

Program 4.11
#include<stdio.h> 
#include<conio.h> 
 
148
 
Struktur Perulangan Bahasa Pemrorgraman

using namespace std; 
 
main() 

 int n = 0; 
 for(;;) 
 { 
    ++n;    
    gotoxy(n, n); 
    textcolor(n); 
    cprintf("warna ke %d\n",n); 
 } 
 getch(); 
 return 0; 

Keluaran program adalah sebagai berikut:

4.6. Pernyataan NESTED - FOR


Pernyataaan nested for adalah didalam perulangan sering kali
suatu perulangan for didalam masuk digunakan oleh program
perulangan for dalam bentuk lain. Bentuk umum pernyataan Nested for
Dalam mempelajari perulangan ini adalah sebagai berikut:
dituntut hrus teliti. Perulangan

for ( inisialisasi; syarat pengulangan; pengubah nilai pencacah ) 

    for ( inisialisasi; syarat pengulangan; pengubah nilai pencacah) 
    {  
        pernyataan; 
    } 

149
 
Bahasa Pemrograman Struktur Perulangan

Selain pernyataan diatas, nested For dapat juga ditulis seperti dibawah ini:

for ( inisialisasi; syarat pengulangan; pengubah nilai pencacah ) 

   for ( inisialisasi; syarat pengulangan; pengubah nilai pencacah) 
    {  
       for ( inisialisasi; syarat pengulangan; pengubah nilai pencacah) 
       {  
         ………….. 
              for ( inisialisasi; syarat pengulangan; pengubah nilai pencacah) 
             { 
              pernyataan; 
        } 
       …………. 

Didalam penggunaan NESTED- terus sampai perulangan yang paling


FOR, perulangan yang berada luar. Perhatikan contoh program
didalam terlebih dahulu harus dengan NESTED FOR pada operasi
dihitung sampai selesai, kemudian bilangan naik berikut ini:
perulangan yang diluar diselesaikan
 
Program 4.12 
#include<conio.h> 
#include <iostream.h> 
 
using namespace std; 
 
int main() 

  int a, b; 
   for(a = 1; a <= 5; a++) 
   { 
      cout << "\n "; 
      for(b = a; b <= 5; b++) 
      cout << a << " "; 
   } 
   getch(); 
   return 0; 

Keluaran program diatas adalah sebai berikut:


1 1 1 1 1 
2 2 2 2 

150
 
Struktur Perulangan Bahasa Pemrorgraman

3 3 3 
4 4 

4.7. Pernyataan WHILE


Bab sebelumnya telah maka perulangan (loop) selesai.
memperkenalkan konsep statement Lebih jelasnya, bentuk pernyataan
kontrol, yang berupa aliran program while adalah sebagai berikut:
langsung. Sebuah loop adalah Bentuk perulangan while
struktur kontrol yang menyebabkan dikendalikan oleh syarat/kondisi
pernyataan atau kelompok untuk tertentu, yaitu perulangan akan terus
mengulang pernyataan. Bahasa C++ dilaksanakan selama syarat/kondisi
mempunyai tiga looping struktur tersebut terpenuhi. Pernyataan dalam
kontrol: while loop, do-while loop, dan while akan dilaksanakan berulangkali
loop FOR. selama syarat/kondisi bernilai benar.
Perbedaan antar masing-masing Jika syarat/kondisi bernilai salah
looping adalah bagaimana mereka badan perulangan tidak akan
melakukan kontrol pengulangannya. dilaksanakan, yang berarti
Selama melakukan loop ada dua perulangan selesai. Yang harus
bagian penting: (1) sebuah ekspresi diperhatikan adalah perulangan
yang diuji dengan nilai benar atau harus berhenti. Perulangan yang
salah, dan (2) pernyataan atau blok tidak pernah berhenti menandakan
yang berulang-ulang selama bahwa logika dari algoritma tersebut
ekspresinya benar. salah.
Perulangan dengan pernyataan Bentuk umum perulangan while,
while merupakan perulangan yang sebagai berikut :
mirip dengan perulangan for.
Perulangan for dipakai pada
perulangan yang sudah diketahui while ( syarat/kondisi ) 
berapa kali akan dijalankan. pernyataan; 
Sedangkan yang belum diketahui
berapakali akan diulangi maka
digunakan while. Pernyataan while penjelasan mengenai hal tersebut
digunakan ketika kondisi perulangan diatas adalah bahwa syarat/kondisi
diperiksa terlebih dahulu sebelum merupakan ungkapan logika yang
menjalankan pernyataan. Pada hanya bernilai benar atau salah,
pernyataan while, disini pemeriksaan sehingga operator yang dipakai disini
terhadap loop dilakukan di bagian adalah operator relasi dan operator
awal (sebelum tubuh loop). logika atau gabungan dari keduanya.
Pernyataan while akan mengulang Untuk lebih jelasnya gambar diagram
proses secara terus menerus sampai alir dari pernyataan while adalah
kondisi bernilai benar atau akan sebagai berikut:
diulangi selama kondisi bernilai
benar, jika kondisi bernilai salah

151
 
Bahasa Pemrograman Struktur Perulangan

pernyataan 

 
Kondisi 
Benar

Salah

Gambar 4.3. Diagram pernyataan While

Pernyataan dalam while dapat while ( syarat ) 


berupa pernyataan tunggal maupun { 
jamak (lebih dari satu). Jika     Pernyataan; 
pernyataannya berbentuk jamak,     Pernyataan; 
maka pernyataan-pernyataan } 
tersebut harus diletakan didalam satu
blok dengan memakai tanda kurung Untuk lebih jelasnya pengenai
kurawal. pernyataan while, dibawah ini
Bentuk umum perulangan while, merupakan contoh program untuk
dengan satu dengan lebih dari satu menaik bilangan. Program
pernyataan, adalah seperti berikut : lengkapnya adalah sebagai berikut:

Program 4.13
#include<conio.h> 
#include <iostream.h> 
 
using namespace std; 
 
int main() 

      int loop = 1; 
      while(loop <= 10) 
      cout << loop++ << " "; 
      getch(); 
   return 0; 

152
 
Struktur Perulangan Bahasa Pemrorgraman

Keluaran program adalah sebagai berikut:


1 2  3  4  5  6  7  8  9  10 

Program dibawah ini merupakan ini akan menghitung bilangan turun


sebuah penerapan pernyataan while mulai dari angka 10, menjadi 9, 8, 7
yang digunakan untuk melakukan sampai angka 1. Perhatikan program
perhitungan turun. Program dibawah dibawah ini:

Program 3.14
#include<conio.h> 
#include <iostream.h> 
 
using namespace std; 
 
int main() 

     int loop = 10; 
      while(loop >= 1) 
      cout << loop‐‐ << " "; 
      getch(); 
      return 0; 

Keluaran program diatas adalah sebagai berikut:


10  9  8  7  6  5  4  3  2  1 

Sebuah program yang sampai batasan looping yang


menggunakan pernyataan while juga dimasukan. Batasan program
bisa digunakan untuk menentukan dibawah ini adalah 10, untuk lebih
bilangan ganjil. Program dibawah ini jelasnya perhatikan program dibawah
merupakan program yang keluaranya ini:
bilangan 1, 3, 5 dan seterusnya

Program 4.15
#include<conio.h> 
#include <iostream.h> 
 
using namespace std; 
 
int main() 

    int loop = 1; 
    while(loop <= 10) 
    { 
          cout << loop << " "; 

153
 
Bahasa Pemrograman Struktur Perulangan

          loop+=2; 
    } 
    getch(); 
    return 0; 

Keluaran program diatas adalah:


1  3  5  7  9 

Program dibawah ini penggunaan huruf abjad. Untuk lebih jelasnya


while untuk aplikasi manampilkan perhatikan program dibawah ini:
huruf. Huruf yang ditampilkan adalah

Program 4.16
#include<conio.h> 
#include <iostream.h> 
 
using namespace std; 
 
int main() 

 char huruf = 'A'; 
 while(huruf <= 'Z') 
 cout << "Huruf abjad = " << huruf++ << "\n"; 
 getch(); 
 huruf = 'A'; 
 while(huruf <= 'Z') 
 { 
  cout << "Huruf abjad = " << huruf << "\n"; 
  huruf+=13; 
 } 
 getch(); 
 huruf = 'z'; 
 while(huruf >= 'a') 
 cout << "Huruf abjad = " << huruf‐‐ << "\n"; 
 getch(); 
 huruf = 'z'; 
 while(huruf >= 'a') 
 { 
cout << "Huruf abjad = " << huruf << "\n"; 
huruf‐=8; 
 } 
 getch(); 
 return 0; 

154
 
Struktur Perulangan Bahasa Pemrorgraman

Keluaran program adalah sebagai berikut:


Huruf abjad = A 
Huruf abjad = B 
Huruf abjad = C 
Huruf abjad = D 
Huruf abjad = E 
Huruf abjad = F 
Huruf abjad = G 
Huruf abjad = H 
Huruf abjad = I 
Huruf abjad = J 
Huruf abjad = K 
Huruf abjad = L 
Huruf abjad = M 
Huruf abjad = N 
Huruf abjad = O 
Huruf abjad = P 
Huruf abjad = Q 
Huruf abjad = R 
Huruf abjad = S 
Huruf abjad = T 
Huruf abjad = U 
Huruf abjad = V 
Huruf abjad =W 
Huruf abjad = X 
Huruf abjad = Y 
Huruf abjad = Z 

4.8. Pernyataan NESTED-WHILE


Pernyataaan nested while adalah Bentuk umum pernyataan Nested
suatu perulangan while didalam while sebagai berikut :
perulangan while yang lainnya.

while (syarat) 

while (syarat) 
{  
     pernyataan; 

155
 
Bahasa Pemrograman Struktur Perulangan

 
Selain cara penulisan pernyataan ditulis diatas, dapat juga ditulis sebagai
berikut:
 
while (syarat) 

 while (syarat) 
{  
………….. 
while (syarat) 
     { 
          pernyataan; 
      } 
      …………. 

Didalam penggunaan NESTED- Perhatikan Contoh program dengan


WHILE, perulangan yang berada nested while dimana program
didalam terlebih dahulu dihitung tersebut merupakan program
hingga selesai, kemudian perulangan Segitiga Pascal dengan NESTED
yang diluar diselesaikan terus sampai WHILE seperi berikut ini.
perulangan yang paling luar.

Program 4.17
#include<conio.h> 
#include <iostream.h> 
#include <math.h> 
 
using namespace std; 
 
int main(void) 

 int row = 0; 
 while(row<=3) 

int col = 1; 
while(col <= 3‐row) 

cout << "  "; 
col++; 

col=0; 
while(col<=row) 

156
 
Struktur Perulangan Bahasa Pemrorgraman


cout << " " << (int)pow(2, col); 
col++; 

col= row ‐ 1; 
while (col>= 0) 

cout << " " << (int)pow(2, col); 
col‐‐; 

cout << "\n"; 
row++; 

getch(); 
return 0; 

Keluaran program diatas adalah sebagai berikut:


              1 
          1  2  1 
      1  2  4  2  1 
  1  2  4  8  4  2  1 

Contoh program dibawah ini persatu. Proses pemasukan data


digunakan untuk menjumlahkan angka akan berhenti ketika
sejumlah data angka. Angka yang dimasukkan angka –1. Setelah itu
akan dijumlahkan dimasukan satu- tampil hasil penjumlahannya.

Program 4.18
#include <iostream.h> 
#include <conio.h> 
 
using namespace std; 
void main() 

int cacah = 0, data = 0, jumlah = 0; 
while (data != ‐1) 

cout << "Masukkan data angka : "; 
cin >> data; 
jumlah += data; 
cacah++; 

cout << "Jumlah data adalah : " << jumlah" << endl; 

157
 
Bahasa Pemrograman Struktur Perulangan

cout << "Rata‐rata : " << jumlah/cacah; 

4.9. Perulangan DO-WHILE


Selain operasi loop Bentuk perulangan do-while
menggunakan WHILE, bahasa C++ dikendalikan oleh syarat/kondisi
juga mempunyai DO-WHILE dan tertentu, yaitu perulangan akan terus
untuk perulangan. Setiap perulangan dilaksanakan selama syarat/kondisi
dapat tepat untuk mengatasi tersebut terpenuhi. Pernyataan dalam
berbagai masalah pemrograman. do-while akan dilaksanakan
Yang dilakukan DO-WHILE terlihat berulangkali selama syarat/kondisi
mirip dengan perulangan yang bernilai benar. Jika syarat/kondisi
berpaling terbalik. bernilai salah badan perulangan tidak
Perulangan dengan pernyataan akan dilaksanakan, yang berarti
do-while merupakan perulangan yang perulangan selesai. Yang harus
mirip dengan perulangan while diperhatikan adalah perulangan
ataupun for. Perulangan for dipakai harus berhenti. Perulangan yang
pada perulangan yang sudah tidak pernah berhenti menandakan
diketahui berapa kali akan dijalankan. bahwa logika dari algoritma tersebut
Sedangkan yang belum diketahui salah.
berapakali akan diulangi maka Perbedaan dengan while
digunakan while atau do-while. sebelumnya yaitu bahwa pada do-
Pernyataan do-while digunakan untuk while statement perulangannya
menjalankan pernyataan terlebih dilakukan terlebih dahulu baru
dahulu baru kemudian memeriksa kemudian di cek kondisinya.
kondisi perulangan. Sedangkan while kondisi dicek dulu
Pada pernyataan do-while, disini baru kemudia statement
pemeriksaan terhadap loop dilakukan perulangannya dijalankan. Akibat dari
di bagian akhir (setelah tubuh loop). hal ini adalah dalam do-while minimal
Pernyataan do-while akan terdapat sekali perulangan.
mengulang proses secara terus Sedangkan while dimungkinkan
menerus selama kondisi bernilai perulangan tidak pernah terjadi yaitu
benar dan perulangan (loop) selesai ketika kondisinya langsung bernilai
jika kondisi bernilai salah. salah. Bentuk umum perulangan do-
while, sebagai berikut :

do 
pernyataan; 
while ( syarat/kondisi ) 

Syarat/kondisi: merupakan ungkapan dan operator logika atau gabungan


logika yang hanya bernilai benar atau dari keduanya. Gambar diagram alir
salah, sehingga operator yang dari pernyataan do-while adalah
dipakai disini adalah operator relasi sebagai berikut:

158
 
Struktur Perulangan Bahasa Pemrorgraman

pernyataan 

Benar

Kondisi 

Salah

Gambar 4.4. Diagram alir pernyataan do-while

Pernyataan dalam do-while blok dengan memakai tanda kurung


dapat berupa pernyataan tunggal kurawal. Bentuk umum perulangan
maupun jamak (lebih dari satu). Jika do-while, dengan lebih dari satu
pernyataannya berbentuk jamak, pernyataan, seperti berikut dibawah
maka pernyataan-pernyataan ini:
tersebut harus diletakan didalam satu

do 

 Pernyataan; 
 Pernyataan; 

while (syarat) 

program dibawah ini merupakan merupakn program do-while bilangan


aplikasi dengan menggunakan do- naik. Untuk lebih jelasnya perhatikan
while pada operasi bilangan naik. contoh program berikut:
Program dengan do-while dibawah ini

Program 4.19
#include<conio.h> 
#include <iostream.h> 
 

159
 
Bahasa Pemrograman Struktur Perulangan

using namespace std; 
 
int main() 

 int loop = 1; 
 do 
 cout << loop++ << " "; 
 while(loop <= 10); 
 getch(); 
 return 0; 

Hasil keluaran program adalah:


1  2  3  4  5  6  7  8  9  10  

Seperti halnya program diatas, bilangan mulai dari 10 kemudian


pernyataan do-while juga bisa turun menjadi 9, 8 dan seterusnya.
digunakan untuk operasi bilangan Untuk lebih jelasnya perhatikan
turun. Program dibawah ini program berikut ini:
digunakan untuk menurunkan

Program 4.20
#include<conio.h> 
#include <iostream.h> 
 
using namespace std; 
 
int main() 

 int loop = 10; 
 do 
 cout << loop‐‐ << " "; 
 while (loop >= 1); 
 getch(); 
 return 0; 

Hasil keluaran program adalah:


10  9  8  7  6  5  4  3  2  1 

Selain digunakan untuk sebuah program yang menggunakan


menaikan dan menurunkan bilangan, pernyataan perulangan do-while yang
dibawah ini juga diberikan contoh menampilkan bilangan ganjil.

160
 
Struktur Perulangan Bahasa Pemrorgraman

Bilangan yang ditampilkan adalah bilangan yang keluar dari program


bilangan ganjil dengan urutan mulai adalah 1, 3, 5, 7, dan 9. Untuk lebih
dari satu sampai batas yang jelasnya perhatikan program dibawah
ditentukan yaitu 10. Sehingga ini:

Program 4.21
#include<conio.h> 
#include <iostream.h> 
 
using namespace std; 
 
int main() 

int loop = 1; 
do 
 { 
   cout << loop << " "; 
   loop+=2; 
 } 
while (loop <= 10); 
getch(); 
return 0; 

Hasil keluaran program diatas adala sebagai berikut:


1  3  5  7  9  _ 

4.10. Pernyataan NESTED DO-WHILE


Pernyataaan nested do-while Bentuk umum pernyataan Nested do-
adalah suatu perulangan do-while while sebagai berikut :
didalam perulangan do-while lainnya.

do 

    do 
    {  
        pernyataan; 
    } 
   while (syarat); 

while (syarat); 

pernyataan diatas dapat juga ditulis seperti potongan pernyataan dibawah ini:

161
 
Bahasa Pemrograman Struktur Perulangan

do 

  do 
  {  
     ………….. 
            do 
            { 
              pernyataan; 
             } 
            while (syarat); 
     . …………. 
    } 
    while (syarat); 

while (syarat); 

Didalam penggunaan nested do- nested, baik while, do-while tentunya


while, perulangan yang didalam harus lebih teliti, karena jika tidak
terlebih dahulu dihitung hingga seringkali terjadi kesalahan ketika de-
selesai, kemudian perulangan yang compile. Program dibawah ini
diluar diselesaikan terus sampai merupakan contoh aplikasi nested
perulangan yang paling luar. do-while yang digunakan untuk
Program perulangan nested do- mencari Segitiga Pascal. Untuk lebih
while sebenarnya lebih komplek jelasnya perhatikan contoh program
dibandingkan program do while dibawah ini:
biasa. Dalam mengerjakan program

Program 4.22
#include<conio.h> 
#include <iostream.h> 
#include <math.h> 
#include<stdlib.h> 
 
using namespace std; 
 
int main(void) 

 int row = 0; 
 do 
 { 
  int col = 0; 
  do 
  { 
  cout << "  "; 
  col++; 
162
 
Struktur Perulangan Bahasa Pemrorgraman

  } 
  while(col <= 3‐row); 
  col=0; 
  do 
  { 
  cout << " " << (int)pow(2, col); 
  col++; 
  } 
  while(col<=row); 
  col = row ‐ 1; 
  do 
  { 
  cout << " " << (int)pow(2, col); 
  col‐‐; 
  } 
  while (col>= 0); 
  cout << "\n"; 
  row++; 
 } 
 while(row<=3); 
 getch(); 
 return 0; 

Hasil keluaran program adalah:


                 1  0 
             1  2  1 
         1  2  4  2  1  
     1  2  4  8  4  2  1 

4.11. Perulangan Tidak Berhingga


Perulangan tidak berhingga sangat jarang sekali. Perulangan
merupakan perulangan (loop) yang tidak terhingga biasanya karena
tak pernah berhenti atau mengulang adanya kesalahan penulisan
terus, hal ini sering terjadi program, sehingga ketika program
disebabkan adanya kesalahan dijalankan akan berjalan terus-
penanganan kondisi yang dipakai menerus,.
untuk keluar dari loop. Bahkan suatu Sebagai contoh saja pada
ketika program perulangan ini program yang digunakan untuk
memang dirancang untuk tidak penulisan perintah nilai pencacah
pernah berhenti, walaupun hal ini salah seperti pada program berikut:

163
 
Bahasa Pemrograman Struktur Perulangan

Program 4.23
#include<conio.h> 
#include <iostream.h> 
 
using namespace std; 
 
int main() 

int b; 
for(b = 6; b >= 1; b++) 
  cout << b; 
getch(); 
return 0; 

Keluaran program diatas adalah sebagai berikut:

Pada program tersebut diatas Akan tetapi yang ditulis dalam


tidak akan berhenti sampai dilakukan program adalah :
penghentian dengan paksa. Pada
pernyataan for diatas tidak akan b ++ 
berhenti untuk menampilkan bilangan
menaik, kesalahan terjadi pada Oleh karena kondisi b >= 1 selalu
pengubah nilai pencacah, bernilai benar ( karena b bernilai 6),
seharusnya penulisan yang benar maka pernyataan cout  <<  b;  akan
adalah: terus dijalankan. Jika terjadi hal
semacam ini, untuk menghentikan
b –  proses yang terus menerus semacam
ini dilakukan dengan menekan
164
 
Struktur Perulangan Bahasa Pemrorgraman

tombol CTRL+ PAUSE atau CTRL + BREAK.

4.12. Pernyataan Break


Kadang-kadang perlu untuk { 
menghentikan satu looping sebelum cout << count << endl; 
meninggalkan semua Iterasi. if (count == 5) 
Pernyataan break, dapat digunakan break; 
untuk beralih pada didalam satu } 
perulangan. Bila menemui break ,
perulangan berhenti dan program Pernyataan break berfungsi
melompat ke pernyataan setelah untuk keluar dari perulangan baik for,
perulangan. while dan do-while serta struktur
Perulangan dengan while pada switch. Jika pernyataan break
segmen program untuk menjalankan dikerjakan, maka eksekusi akan
10 kali, namun pernyataan break dilanjutkan ke pernyataan yang
dapat menyebabkannya berhenti terletak sesudah akhir dari badan
setelah kelima perulangan atau perulangan (loop).
perulangan tertentu. Untuk lebih Perhatikan contoh program
jelasnya perhatikan potongan pemakaian break dalam pernyataan
program dibawah ini: for dibawah. Program digunakan
untuk menghentikan bilangan deret
int count = 0;  menggunakan break
while (count++ < 10) 

Program 2.24
#include<conio.h> 
#include <iostream.h> 
 
using namespace std; 
 
int main(void) 

 int jumlah= 0; 
 int bilangan; 
 for (bilangan=0;bilangan < 20;bilangan++) 
 { 
  jumlah += bilangan; 
  if (jumlah >= 100) break; 
 } 
 cout << "Deret Bilangan : 1 + 2 + ... + " << bilangan << endl; 
 cout << "Jumlah Deret Bilangan = " <<jumlah; 

165
 
Bahasa Pemrograman Struktur Perulangan

 getch(); 
 return 0; 

Hasil keluaran program diatas adalah sebagai berikut:


Deret Bilangan : 1 + 2 + …… + 14  
Jumlah Deret Bilangan = 105 

Program dibawah ini menggunakan menggunaan break adalah sebagai


break dengan pernyataan while. berikut:
Program deret bilangan yang

Program 4.25
#include<conio.h> 
#include <iostream.h> 
 
using namespace std; 
 
int main(void) 

 int jumlah= 0; 
 int bilangan = 0; 
 while (bilangan < 20) 
 { 
  bilangan++; 
  jumlah += bilangan; 
  if (jumlah >= 100) break; 
 } 
 cout <<  "Deret Bilangan : 1 + 2 + ... + " << bilangan << endl; 
 cout << "Jumlah Deret Bilangan = " <<jumlah; 
 getch(); 
 return 0; 

Hasil keluaran program:


Deret Bilangan : 1 + 2 + …… + 14  
Jumlah Deret Bilangan = 105 

Contoh program dibawah ini program deret bilangan dengan


menggunakan break dengan menggunakan break berikut ini:
pernyataan do-while. Perhatikan

166
 
Struktur Perulangan Bahasa Pemrorgraman

Program 4.26
#include<conio.h> 
#include <iostream.h> 
 
using namespace std; 
 
int main(void) 

 int jumlah= 0; 
 int bilangan = 0; 
 do 
 { 
  bilangan++; 
  jumlah += bilangan; 
  if (jumlah >= 100) break; 
 } 
 while (bilangan < 20); 
 cout <<  "Deret Bilangan : 1 + 2 + ... + " << bilangan << endl; 
 cout << "Jumlah Deret Bilangan = " <<jumlah; 
 getch(); 
 return 0; 

Hasil keluaran program diatas adalah sebagai berikut:


Deret Bilangan : 1 + 2 + …… + 14  
Jumlah Deret Bilangan = 105 

4.13. Pernyataan Continue


Pernyataan continue digunakan keawal loop lagi, tanpa menjalankan
untuk mengarahkan eksekusi ke sisa perintah dalam loop tersebut.
iterasi (proses loop) berikutnya yang Perhatikan contoh program yang
berada pada loop yang sama, atau menggunakan continue dalam
dengan kata lain mengembalikan pernyataan for berikut ini:
proses yang sedang dilaksanakan

Program 4.27
#include<conio.h> 
#include <iostream.h> 
 
using namespace std; 
 
int main(void) 

167
 
Bahasa Pemrograman Struktur Perulangan

 int jumlah= 0; 
 int bilangan; 
 for(bilangan = 1; bilangan <= 20;bilangan++) 
 { 
  if (bilangan == 10 || bilangan == 11) continue; 
  jumlah += bilangan; 
 } 
 cout <<  "Deret Bilangan : 1 + 2 + ... + 9 + 12 + 13 + ... + " << bilangan‐1 << endl; 
 cout << "Jumlah Deret Bilangan = " <<jumlah; 
 getch(); 
 return 0; 

Keluaran program diatas adalah sebagai berikut:


Deret Bilangan : 1 + 2 + …… + 9 + 12 + 13 + … + 20  
Jumlah Deret Bilangan = 189 

Perhatikan contoh program yang menggunakan continue dengan pernyataan


while sebagai berikut ini:

Program 4.28
#include<conio.h> 
#include <iostream.h> 
 
using namespace std; 
 
int main(void) 

 int jumlah= 0; 
 int bilangan = 0; 
 while (bilangan < 20) 
 { 
  bilangan++; 
  if (bilangan == 10 || bilangan == 11) continue; 
  jumlah += bilangan; 
 } 
 cout <<  "Deret Bilangan : 1 + 2 + ... + 9 + 12 + 13 + ... + " << bilangan << endl; 
 cout << "Jumlah Deret Bilangan = " <<jumlah; 
 getch(); 
 return 0; 

Hasil keluaran program:


Deret Bilangan : 1 + 2 + …… + 9 + 12 + 13 + … + 20  

168
 
Struktur Perulangan Bahasa Pemrorgraman

Jumlah Deret Bilangan = 189 

Berikut ini merupakan contoh Perhatikan program bilangan deret


program menggunakan continue dengan mengguakan continue seperti
dalam sebuah pernyataan do-while. dibawah:

Program 4.29
#include<conio.h> 
#include <iostream.h> 
 
using namespace std; 
 
int main(void) 

 int jumlah= 0; 
 int bilangan = 0; 
 do 
 { 
  bilangan++; 
  if (bilangan == 10 || bilangan == 11) continue; 
  jumlah += bilangan; 
 } 
 while (bilangan < 20); 
 cout <<  "Deret Bilangan : 1 + 2 + ... + 9 + 12 + 13 + ... + " << bilangan << endl; 
 cout << "Jumlah Deret Bilangan = " <<jumlah; 
 getch(); 
 return 0; 

Hasil keluaran program:


Deret Bilangan : 1 + 2 + …… + 9 + 12 + 13 + … + 20  
Jumlah Deret Bilangan = 189 

4.14. Pernyataan Goto


Pernyataan goto merupakan Bentuk pemakaian goto adalah
instruksi untuk mengarahkan sebagai berikut:
eksekusi program menuju pernyataan
yang diawali dengan suatu label. goto label; 
Label merupakan suatu pengenal
(identifier) yang diikuti dengan tanda Contoh penggunaan instruksi goto
titik dua ( : ). dapat dilihat pada contoh program
berikut ini:

169
 
Bahasa Pemrograman Struktur Perulangan

Program 4.30
#include<iostream.h> 
#include<stdio.h> 
#include<conio.h> 
 
using namespace std; 
 
main() 

 int a, b; 
 char lagi; 
 atas: 
 cout << "Masukkan Bilangan = "; 
 cin >> a; 
 b = a % 2; 
 cout <<"Nilai " << a << " % 2 adalah = " << b; 
 cout << "\n\nIngin Hitung Lagi [Y/T] : "; 
 lagi = getche() ; 
 if (lagi == 'Y' || lagi == 'y')goto atas; 
 getch(); 
 return 0; 

Keluaran program tersebut diatas adalah:


Masukan Bilangan  = 
Nilai 5 % 2 adalah   = 1 
Ingin Hitung lagi (Y/T)   : t 

4.15. Soal Latihan


Jawablah soal latihan dibawah ini dengan baik dan benar.
1. Struktur perulangan secara umum terdiri dari dua bagian, sebutkan
2. Sebutkan fungsi operator increment dan decrement
3. Jelaskan bentuk pernyataan for dalam bahasa pemrograman
4. Jelaskan apa yang dimaksud dengan potongan program dibawah ini:
int num = 1; 
for ( ; num <= 10; ) 

cout << num << "\t\t" << (num * num) << endl; 
num++; 

5. Sebutkan fungsi break
6. Sebutkan fungsi goto
7. Apa yang dimaksud dengan NESTED-WHILE

170
 
Statement Kendali Bahasa Pemrorgraman

BAB 5
STATEMENT KENDALI

5.1. Pengertian Statement


5.2. Operator Relasi
5.3. Statement IF
5.4. Pernyataan IF/ELSE
5.5. Pernyataan IF/ELSE IF
5.6. Pernyataan IF/ELSE Majemuk
5.7. Pernyataan NESTED IF
5.8. Operator Logika
5.9. Operator Kondisional
5.10. Statement SWITCH
5.11. Pernyataan Switch … Case
5.12. IF...THEN, IF...THEN...ELSE dan Nested IF
5.13. Aplikasi Pernyataan IF pada Menu
5.14. Soal Latihan

5.1. Pengertian Statement


Penyeleksian kondisi digunakan mengambil keputusan. Disinilah letak
untuk mengarahkan perjalanan suatu kekurangan komputer yaitu tidak
proses. Penyeleksian kondisi dapat mampu berpikir sendiri, semua hal
diibaratkan sebagai katup atau kran yang dilakukan adalah berdasarkan
yang mengatur jalannya air. Bila perintah.
katup terbuka maka air akan mengalir Dalam memprogram seringkali
dan sebaliknya bila katup tertutup air digunakan suatu percabangan untuk
tidak akan mengalir atau akan pengambilan keputusan dari
mengalir melalui tempat lain. Seleksi sejumlah pilihan yang mungkin.
kondisi adalah proses penentuan Bahasa pemrograman menyediakan
langkah berikutnya berdasarkan pernyataan IF…THEN dan kata kunci
proses yang terjadi sebelumnya. yang lain seperti SWITCH...CASE
Seleksi kondisi ini sangat penting untuk melakukan suatu percabangan.
dalam pemrograman sebab dengan Dalam percabangan, keputusan
adanya seleksi kondisi, program diambil berdasarkan ekspresi kondisi.
dapat menentukan proses apa yang Ekpresi berkondisi adalah sebagian
harus dilakukan selanjutnya dari pernyataan program yang
berdasarkan keadaan sebelumnya. menanyakan pertanyaan True atau
Sehingga nampak seolah olah False (Benar atau Salah) mengenai
program dapat berpikir dan

171
Bahasa Pemrograman Statement Kendali

properti, variabel, atau data lain pada Pernyataan Percabangan


kode program. digunak-an untuk memecahkan
Kode-kode perintah yang persoalan untuk mengambil suatu
diberikan dari suatu bahasa keputusan diantara sekian
pemrograman untuk melakukan pernyataan yang ada. Untuk
suatu proses. Blok merupakan satu keperluan pengambilan keputusan,
atau lebih statemen yang harus Borland C++ menyediakan beberapa
dikerjakan setelah suatu kondisi perintah antara lain.
dipenuhi.

5.2. Operator Relasi


Dalam melakukan pemrograman, angka-angka penjualan, penentuan
kebanyakan programmer tentunya laba rugi, memeriksa untuk
sudah banyak tahu bahwa program- memastikan angka tersebut dalam
program komputer dibuat supaya rentang yang dapat diterima, dan
mengikuti alur. Tentunya kita juga memvalidasi input yang diberikan
berfikir bagaimana jika komputer oleh pengguna.
diprogram ternyata tidak mengikuti Data Numerik pada bahasa C++
alur atau urutan yang telah dibuat? akan dibandingkan dengan
Maka komputer tersebut akan menggunakan sebuah operator.
tidak bisa berjalan sesuai dengan Sebuah karakter juga dapat
yang kita inginkan. Alur atau urutan dibandingkan dengan menggunakan
pada komputer ini antara lain: operator, karena dianggap sebagai
 Adanya masukan dari pengguna. karakter yang mempunyai nilai
 Dapat melakukan Satu atau lebih numerik pada C++. Penghubung
perhitungan atau proses. pada setiap operator akan
 Menampilkan hasilnya pada layar. menentukan apakah ada hubungan
Sebuah komputer yang baik, antara dua nilai. Sebagai contoh,
selain dapat melakukan perhitungan, operator lebih ( > ) menentukan jika
tetapi juga sangat ahli dalam nilai lebih besar daripada yang lain.
membandingkan sebuah nilai untuk Operator kesetaraan (==)
menentukan apakah lebih besar, menentukan apakah dua nilai sama.
kurang dari, atau sama dengan. Jenis Tabel dibawah merupakan semua
operasi tersebut sangat berharga operator penghubung pada bahasa
untuk memeriksa tugas-tugas seperti C++.

Table 5.1. Operator Relasional


RELASI  OPERATOR 
>  Lebih besar daripada 
<  Lebih kecil daripada 
>=  Lebih besar dari sama dengan 
<=  Kurang dari samadengan 
==  Sama dengan 
!=  Tidak sama dengan 
172
Statement Kendali Bahasa Pemrorgraman

Semua operator relasional tersebut a == 4  


diatas, bisa juga disebut dengan
operator biner. Hal ini karena mereka Namun berikut ini adalah salah:
menggunakan dua operand. Berikut
adalah contoh yang menggunakan a == 2 
operator ekspresi yang lebih besar
daripada: pasangan sesuatu hal yang
berhubungan merupakan sebuah
x > y   operator yang digunakan untuk
menguji dua hubungan. Pada
Ekspresi tersebut merupakan operator >= digunakan untuk
ekspresi penghubung atau relational menentukan jika operand disebelah
expression. Digunakan untuk kiri lebih besar dari atau sama
menentukan apakah x lebih besar dengan operand disebelah kanan.
daripada y. Berikut ekspresi untuk Dengan asumsi bahwa jika a adalah
menentukan jika x kurang dari y: 4, dan b adalah 6, serta c adalah 4,
maka ekspresi yang paling benar
x <y  adalah sebagai berikut:

Selanjutnya bagaimana b> = a  


menentukan nilai sebuah operator a> = c  
penghubung tersebut dan bagaimana
relational expression digunakan Namun ekpresi berikut dibawah ini
dalam program? Untuk menjawah hal adalah salah:
tersebut ada yang perlu diingat yaitu:
semua memiliki nilai. Relational a> = 5  
ekspresi adalah ekspresi Boolean,
yang berarti mereka hanya terdapat operator <= digunakan untuk
nilai benar atau salah. Jika x lebih menentukan jika operand disebelah
besar dari y, maka ekspresi x> y kiri kurang dari atau sama dengan
akan benar, sedangkan kalimatnya operand disebelah kanan. Perlu
dapat ditulis sebgai berikut: ditekankan sekali lagi, bahwa
dengan asumsi a adalah 4, b adalah
Y == X  6, dan c adalah 4, maka ekspresi
yang benar adalah sebagai berikut:
Pernyataan diatas akan akan salah
jika, operator == digunakan untuk a <= c  
menentukan apakah operand b <= 10  
sebelah kiri adalah sama dengan
operand di kanan. Jika kedua Namun ekpresi berikut adalah salah:
operand memiliki nilai yang sama,
ungkapan itu benar. Dengan asumsi b <= a  
bahwa a adalah 4 merupakan
ungkapan yang benar: Operator penghubung terakhir adalah
!=, yang artinya adalah operator tidak
173
Bahasa Pemrograman Statement Kendali

sama. Operator ini untuk menentukan


jika operand disebelah kiri tidak sama Kalimat tersebut adalah benar karena
dengan operand disebelah kanan, a tidak sama dengan b dan b tidak
sedangkan kebalikan dari operator sama dengan c. Namun berikut ini
tersebut adalah operator ==. Seperti adalah ekspresi salah karena sama
contoh sebelumnya, dengan asumsi dengan c:
a adalah 4, b adalah 6, dan c adalah
4, maka ekspresi yang benar adalah a != c  
sebagai berikut:
Tabel dibawah ini menunjukkan
a != b   operator dimana nilai-nilai benar atau
b != c   salah.

Table 5.2. Operator nilai benar atau salah.

EKPRESI  NILAI 
x < y  salah, karena x lebih kecil daripada y 
x > y  Betul, karena x lebih besar daripada y 
x >= y  Betul, karena x lebih besar atau sama dengan y 
x <= y  Salah, karena x lebih kecil atau sama dengan y 
y != x  Betul, karena y tidak sama dengan x 

Setelah diamati, sebenarnya komputer menyimpan benar?.


terdapat sebuah pertanyaan yang Bagaimana pula cara menyimpan
sering kita tidak tahu yaitu: "apa yang data yang salah?. Hal ini
dimaksud dengan benar?". membutuhkan suatu tanda atau kode
Pertanyaan tersebut merupakan yang disepakati sesuai dengan
suatu hal yang sangat perlu untuk kesepakatan umum pada sebuah
dipertimbangkan. Jika ekspresi relatif komputer.
dapat dilakukan secara benar atau Dalam bahasa C++, nilai benar
salah, bagaimana sesuatu yang akan diwakili dengan angka 1 dan
mewakili nilai-nilai internal dalam salah dengan angka 0. Untuk
sebuah program? Pada sebuah menggambarkan lebih lengkap,
komputer misalnya, bagaimana perhatikan program dibawah ini:

Program 5.1.
#include<conio.h> 
#include <iostream> 
 
using namespace std; 
  
int main() 
    { 
    bool nilaiBetul, nilaiSalah; 

174
Statement Kendali Bahasa Pemrorgraman

    int x = 5, y = 10; 
 
    nilaiBetul = x < y; 
    nilaiSalah = y == x; 
 
    cout << "Benar adalah " << nilaiBetul << endl; 
    cout << "Salah adalah " << nilaiSalah << endl; 
    getch(); 
    return 0; 

Keluaran Programnya adalah sebagai berikut:


Benar adalah 1 
Salah adalah 0 

Selanjutnya coba kita memeriksa Selain itu tanda kurung dapat


pernyataan-pernyataan yang berisi digunakan untuk mengubah urutan
ekspresi relasi sedikit lebih dekat: operasi, hal ini selalu terjadi karena
adanya operator relasional
nilaiBetul= x < y;  tingkatannya relatif lebih tinggi dan
nilaiSalah = y == x;  harus didahulukan dalam operasinya
daripada operator yang tingkatnya
pernyataan-pernyataan tersebut lebih rendah. Demikian juga, ada
tampaknya aneh karena operator aritmatika yang harus lebih
menempatkan nilai perbandingan ke diutamakan daripada operator
dalam sebuah variabel. Pada relasional. Seperti dalam pernyataan
pernyataan pertama, variabel berikut ini:
trueValue dengn diberi hasil x <y.
Ketika x kurang dari y, ungkapan itu NilaiSalah = x < y – 8; 
benar, dan variabel trueValue
memberikan nilai 1. Sedangkan pada Dari peryataan diatas misalnya,
pernyataan yang kedua ungkapan y yang pertama Y - 8 akan dievaluasi
== x adalah salah, sehingga variabel terlebih dahulu untuk menghasilkan
falseValue akan keluar nilai 0. nilai 2. Kemudian X yang bernilai 5
Perhatikan bahwa dalam kedua akan dibandingkan dengan 2. Jika
kasus operasi relasional nilai 5 kurang dari 2, nilai nol akan
dilaksanakan sebelum tugas operasi masukan ke falseValue. Tabel
dilakukan. dibawah menunjukkan contoh lainnya
termasuk pernyataan yang relatif
biasa.

175
Bahasa Pemrograman Statement Kendali

Tabel 5.3. Pernyataan ekpresi relasional

PERNYATAAN  KELUARAN 
z = x < y  z sama dengan 0 karena x tidak kurang daripada y 
cout << (x > y);  Tampilkan 1 karena x lebih besar daripada y. 
z = x >= y;  z samadengan 1 karena x lebih besar samadengan y. 
cout << (x <= y);  Tampilkan 0 karena x tidak kurang samadengan y 
z = y != x;  z samadengan 1 karena y tidak samadengan x 
cout << (x == y + 3);  Tampilkan 1 karena x sama dengan y + 3 

Operator relasional juga memiliki Empat penghubung operator


urutan yang mempunyai prioritas lainnya, ada yang mempunyai
diantara mereka sendiri. Kedua prioritas tinggi atau rendah antara
operator dalam tes kesamaan atau satu sama lain. Keempat operator
tidak sama (== dan ! =) mempunyai relasional seperti dalam. Tabel
tingkat kesamaan yang sama antara dibawah menunjukkan diutamakan
satu sama lain. yang berhubungan operator.

Tabel 5.4. Prioritas operator relasional (dari tertinggi ke rendah)

==   !=
>   >=   <   <=

Berikut ini adalah sebuah contoh berekspresi ini, a > b akan dievaluasi
bagaimana operator diterapkan. Jika terlebih dahulu. Ketika 9 tidak lebih
a = 9, b = 24, dan c = 0, pernyataan besar dari 24, maka hal tersebut
berikut ini akan menyebabkan a akan mengevaluasi salah atau 0.
bernilai 1 akan ditampilkan. Kemudian ketika C == 0 maka akan
dihasilkan. Ketika c tidak sama
cout <<(c == a> b);   dengan 0, hal tersebut akan
menghasilkan nilai betul, atau 1.
Karena adanya nilai yang relatif Sehingga nilai 1 akan dimasukkan ke
diutamakan dari operator dalam dalam output stream dan ditampilkan.

5.3. Statement IF
Anda mungkin berpikir mengenai hingga dapat mencapai tujuan.
pernyataan dalam program Program-program yang ditulis ini
procedural seperti langkah-langkah adalah seperti halnya sebuah "jalan"
yang diambil sebagai individu. Untuk dimana pelaksanaannya harus diikuti.
mencapai tujuan tersebut , maka Perhatikan langkah program dibawah
harus dimulai dari awal dan mengikuti ini:
setiap langkah, satu setelah yang lain

176
Statement Kendali Bahasa Pemrorgraman

 
#include <iostream> 
using namespace std; 
 
int main() 

double panjang, lebar, luas; 
cout << "masukan panjang segiempat: "; 
cin >> panjang; 
cout << "Masukan lebar segiempat: "; 
cin >> lebar; 
luas = panjang * lebar; 
cout << "Luasnya: " << luas << endl; 
return 0; 

Gambar 5.1. Langkah-langkah program

Seperti ditunjukkan dalam beberapa pernyataan hanya dalam


Gambar diatas, pelaksanaan kondisi tertentu?.
program mengalir secara berurutan Hal yang dapat dicapai dengan
dari satu pernyataan ke pernyataan pernyataan IF, seperti digambarkan
berikutnya. Jenis program ini sering oleh Program dibawah ini. Pengguna
disebut-garis lurus karena program memasukan tiga nilai ujian dan
yang dijalankan dalam pernyataan program menghitung rata-rata nilai
yang lurus "baris," tanpa simpangan tersebut. Jika rata-rata lebih besar
kearah yang lain. Apakah hal dari 95, program memberikan
tersebut tidak akan berguna, jika selamat pada pengguna
sebuah program dapat memiliki lebih mendapatkan nilai tinggi tersebut.
dari satu "jalur atau arah" Untuk lebih jelasnya perhatikan
pelaksanaan? Bagaimana jika program untuk mencari rata-rata
sebuah program dapat menjalankan pada tiga nilai masukan dibawah:

Program 5.2
#include <iostream> 
#include <iomanip> 
 

177
Bahasa Pemrograman Statement Kendali

using namespace std; 
 
int main() 

int score1, score2, score3; 
double average; 
 
cout << "Masukan 3 nilai Ujian dan saya akan mencari rata‐ratanya: "; 
cin >> score1 >> score2 >> score3; 
average = (score1 + score2 + score3) / 3.0; 
   
cout << fixed << showpoint << setprecision(1); 
cout << "Rata‐rata Nilai Anda  Adalah" << average << endl; 
if (average == 100) 

  cout << "Selamat….! "; 
  cout << "Nilai Anda Sempurna!\n"; 

return 0; 

Keluaran program diatas adalah sebagai berikut:


Masukan 3 nilai Ujian dan saya akan mencari rata‐ratanya: 80 90 70[Enter] 
Rata‐rata Nilai Anda  Adalah 80.0 

Keluaran program diatas adalah sebagai berikut:


Masukan 3 nilai Ujian dan saya akan mencari rata‐ratanya: 100 100 100[Enter] 
Rata‐rata Nilai Anda  Adalah 100.0 
Selamat….! Nilai Anda Sempurna! 

Jika dalam program tersebut pada potongan program seperti dibawah ini:

if (average == 100) 

  cout << "Selamat….! "; 
  cout << "Nilai Anda Sempurna!\n"; 

Maka potongan program tersebut tanpa ada ucapan selamat atau "
diatas akan menampilkan data tulisan Selamat….! ". Gambar dibawah ini
"selamat….! "….., jika data yang menunjukkan bentuk pernyataan
dimasukan sama dengan seratus. yang digunakan pada pernyataan IF
Jika tidak maka hanya akan dan flowchart visual dapat dijelaskan
menampilkan rata-rata nilainya saja cara kerjanya sebagai berikut:

178
Statement Kendali Bahasa Pemrorgraman

salah
Kondisi

Betul

Pernyataan

Gambar 5.2. Diagram alir pernyataan IF

Dari gambar tersebut diatas pernyataan IF dapat ditulis sebagai berikut:

if (ekspresi) 

Pernyataan 1; 
Pernyataan 2; 


Pernyataan n; 

Pernyataan IF adalah sangat dibawah kondisi yang sama dengan


sederhana cara kerjanya. Jika rata-rata 100.
ekspresi didalam tanda kurung yang Misalnya kalau diuraikan dalam
benar, maka pernyataan didalam sebuah pernyataan dalm keseharian
braces (kotak) yang akan dijalankan, adalah sebagai berikut: Jika bensin
jika tidak, maka mereka diabaikan. mobil sudah hampir habis, maka
Blok pernyataan ini adalah berhenti dipompa bensin untuk
merupakan conditionally executed mengisi bensin.
karena pernyataan hanya dijalankan  Jika diluar hujan, pergi kedalam
didalam kondisi yang diekspresikan rumah.
dalam tanda kurung yang benar.  Jika Anda lapar, carilah sesuatu
Program diatas menggambarkan untuk dimakan.
sebuah pernyataan IF. Dalam Jika blok pernyataan
pernyataan cout hanya dilaksanakan conditionally executed hanya satu
179
Bahasa Pemrograman Statement Kendali

pernyataan, maka braces dapat digabungkan menjadi satu


diabaikan. Misalnya, dalam Program pernyataan, mereka dapat menulis
diatas, jika dua pernyataan cout yang seperti yang ditunjukkan di sini.

if (average == 100) 
cout << "selamat ! Nilai anda Sempurna!\n";

Perintah IF yang menyatakan Statement pada sintaks di atas


pernyataan kondisional (bersyarat) akan dilakukan jika kondisinya
dapat ditulis sintaks sederhana IF bernilai TRUE (tidak sama dengan
adalah nol). Apabila statement yang akan
dilakukan lebih dari satu, maka
if (kondisi) statement;  sintaksnya menjadi seperti dibawah
ini:

if (kondisi) 

  statement1; 
  statement2; 
  .. 

Contoh sederhana penggunaan menonton jika usianya 17 tahun ke


IF adalah untuk menentukan boleh atas. Perhatikan contoh program C++
tidaknya seseorang melihat film berikut ini:
bioskop. Seseorang diperbolehkan

Program 5.3
#include <iostream.h> 
#include <conio.h> 
 
using namespace std; 
 
int main() 

  int usia; 
  cout << "Berapa usia Anda : "; 
  cin >> usia; 
  if (usia < 17) 
    cout << "Anda tidak boleh menonton bioskop"; 
      getch(); 
      return 0; 

180
Statement Kendali Bahasa Pemrorgraman

Keluaran program diatas adalah:


Berapa usia Anda : 9 
Anda tidak boleh menonton bioskop 

Statement IF juga dapat tidak dipenuhi (FALSE). Untuk lebih


ditambahkan ELSE sebagai jelasnya perhatikan sintaks program
konsekuensi alternatif jika kondisi dibawah ini:

if (kondisi) 

statement1; 
statement2; 
..} 
else { 
statement1; 
statement2; 

Anda dapat pula memodifikasi boleh tidaknya seseorang menonton


program C++ untuk menentukan bioskop seperti program dibawah ini:

Program 5.4
#include <iostream.h> 
#include <conio.h> 
 
using namespace std; 
 
int main() 

  int usia; 
  cout << "Berapa usia Anda : "; 
  cin >> usia; 
  if (usia < 17) 
  cout << "Anda tidak boleh menonton bioskop"; 
  else  
  cout << "Anda boleh menonton bioskop"; 
      getch(); 
      return 0; 

Keluaran programnya adalah sebagai berikut:


Berapa usia Anda : 16 
Anda tidak boleh menonton bioskop 

181
Bahasa Pemrograman Statement Kendali

Untuk menyatakan kondisi atau } 


syarat, akan dicek pada IF, Anda
dapat menggunakan operator logika Dan juga tidak boleh seperti ini:
dan operator relasional seperti yang if ((a >= 2) && (b = 3)) 
telah dijelaskan sebelumnya. { 
Perhatikan contoh penulisan program …. 
dibawah ini: } 

if ((a >= 2) && (b == 3))  Perintah b = 3 merupakan


{  assignment bukan relasional. C++
….  selalu memperlakukan nilai tidak
}  sama dengan nol sebagai TRUE atau
benar dan nilai nol sama dengan
Jangan dituliskan seperti ini: FALSE atau nilai salah. Oleh karena
if (a >= 2) && (b == 3)  itu, dua perintah dibawah ini adalah
{  identik. Perhatikan potongan program
….  dibawah ini:

if (bil % 2 != 0) 
cout << “Bilangan ganjil”; 
if (bil % 2) 
cout << “Bilangan ganjil” 

Selain itu, IF juga dapat berbentuk seperti program dibawah ini:

if (kondisi1) 
  statement1; 
else if (kondisi2) 
  statement2; 
else if (kondisi3) 
  statement3; 
  . 
  . 
else statement; 

IF dapat juga menggunakan tergantung hasil pembandingannya.


operator pembanding (comparison Penulisan Instruksi atau sintaknya
operators) untuk mengeksekusi suatu adalah sebagai berikut:
pilihan dari 2 pilihan yang ada,

if (Kondisi)  
{  

182
Statement Kendali Bahasa Pemrorgraman

    Perintah yang akan dieksekusi jika kondisi bernilai true 

else 

    Perintah yang akan dieksekusi jika kondisi bernilai false 

Kondisi menunjukkan berbagai yang berupa perbandingan antara


tipe statement atau fungsi yang variabel dengan nilai, variabel lain
menghasilkan nilai benar atau salah. atau fungsi. Perhatikan potongan
Berikut ini diberikan contoh kondisi program dibawah ini:

if (x > 5) 
{  
     y  = 10; 

 
if (x > y) 
{  
     y = x; 

 
if (x > val(angka)) 
{  
     y = 20; 

Suatu ketika akan ditemui pula dari satu kondisi. Untuk itu digunakan
penggunaan instruksi IF .. THEN tambahan blok IF..THEN..ELSE IF
statements, dimana isntruksi ini statements. Perhatikan contoh
digunakan untuk mengevaluasi lebih program dibawah ini:

if (x < 5) 
    cout<<“Nilai x kurang dari 5”; 
else  
if (x < 10) 
     cout<<“Nilai X antara 5 dan 9”; 
else 
     cout<<“Nilai x lebih dari 9”; 

Jika suatu kondisi tergantung pada percabangan bersarang (nested If


kondisi lain yang sudah bernilai true statements). Perhatikan contoh
(seperti if hari = senin dan if jam = berikut ini:
6.30 ) maka harus digunakan
183
Bahasa Pemrograman Statement Kendali

if (hari = senin) 

   if (jam = 6.30) 
   { 
        … 
    }   

Untuk lebih jelasnya mengenai  Tidak ada potongan jika total


pernyataan IF, perhatikan sebuah pembelian kurang Rp. 50.000,-
kasus yang digunakan untuk  Jika total pembelian lebih dari atau
menentukan besarnya potongan dari sama dengan Rp. 50.000,-
pembelian barang yang diberikan potongan yang diterima sebesar
seorang pembeli, dimana kasus 20% dari total pembelian.
tersebut mempunyai kriteria sebagai Perhatikan Program yang
berikut: menggunakan pernyataan IF.

Program 5.5
#include<stdio.h> 
#include<conio.h> 
#include<iostream> 
 
using namespace std; 
 
main() 

  double tot_beli, potongan=0, jum_bayar=0; 
  cout<<"Total Pembelian Rp. "; 
  cin>>tot_beli; 
  if (tot_beli >= 50000) 
    potongan = 0.2 * tot_beli; 
    cout<<"Besarnya Potongan Rp. "; 
        jum_bayar = tot_beli ‐ potongan; 
    cout<<"Jumlah yang harus dibayarkan Rp. ",jum_bayar; 
  getch(); 
    return 0; 

5.4. Pernyataan IF/ELSE


Pernyataan IF/ELSE merupakan ini juka digambarkan dalam bentuk
sebuah pengembangan pernyataan flowchart sebagai berikut:
IF. Secara umum bentuk pernyataan
184
Statement Kendali Bahasa Pemrorgraman

Betul salah
Kondisi

Pernyataan 1 Pernyataan 2

Gambar 5.3. Diagram alir IF-ELSE

Jika diuraikan dalam bentuk kalimat, sebuah pernyataan seperti dibawah


gambar diatas dapat ditulis menjadi ini:

if (kondisi) 

Pernyataan 1 

else 

Pernyataan 2 

Seperti pada pernyataan IF berbeda yang akan dijalankan.


diatas, sebuah kondisi akan dilihat Program dibawah merupakan contoh
terlebih dahulu. Jika kondisi adalah penggunaan pernyataan bersama
benar, maka sebuah blok yang berisi operator modulus untuk menentukan
satu atau lebih pernyataan akan apakah angka yang dihasilkan ganjil
dijalankan. Jika ekspresi adalah atau genap.
salah, maka pernyataan grup

Program 5.6
#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
int main() 
185
Bahasa Pemrograman Statement Kendali


    int number; 
    cout << "masukan bilangan bulat dan saya akan memilahnya dengan IF\n"; 
    cout << "adalah ganjil atau genap. "; 
    cin >> number; 
    if (number % 2 == 0) 
     cout << number << " adalah genap.\n"; 
    else 
        cout << number << " adalah ganjil.\n"; 
    getch(); 
    return 0; 

Keluaran program adalah sebagai berikut:


masukan bilangan bulat dan saya akan memilahnya dengan IF  
adalah ganjil atau genap. 17[Enter] 
17 adalah ganjil

Bagian lain diakhir pernyataan IF dikendalikan oleh orang lain kadang


akan menentukan pernyataan yang berbeda satu tingkat.
akan dijalankan ketika kondisi yang Seperti halnya pada pernyataan
ada tidak sesuai atau salah. Bila IF, jika tidak menggunakan kotak
angka 2% tidak sama 0, pesan yang sebagai bagian kontrol sebuah
dicetak menunjukkan angka ganjil. pernyataan. Program diatas
Perlu diketahui bahwa program ini menggambarkan hal tersebut ini. Ia
hanya akan mengambil salah satu juga memperlihatkan salah satu cara
dari dua jalur pernyataan IF/ELSE.. untuk menangani sebuah masalah
Jika Anda berpikir tentang pemrograman yaitu pembagian oleh
pernyataan dalam program komputer, nol.
langkah-langkah yang diambil Pembagian dengan nol sangat
berdasarkan pertimbangkan mustahil untuk dilakukan secara
pernyataan IF/ELSE sebagai penentu matematis dan biasanya
jalan. Bahkan kadang terjadi jalanya menyebabkan program crash. Hal Ini
program memutar, seperti halnya berarti program akan terhenti
pada sebuah pernyataan IF, sebelum waktunya, kadang-kadang
sedangkan pada pernyataan IF/ELSE akan muncul dengan pesan
menyebabkan pelaksanaan program kesalahan. Program diatas
mengikuti salah satu dari dua jalur menunjukkan salah satu cara untuk
yang tersedia. menguji nilai dari pembagi sebelum
Perhatikan gaya pemrograman dilakukan pembagian. Nilai num2
yang digunakan untuk membangun akan diuji sebelum pembagian
pernyataan IF/ELSE. Atau dengan dilakukan. Jika pengguna
kata lain adalah pada tingkat yang memasukkan angka 0, maka baris
sama seperti halnya perbedaan. dikontrol oleh bagian IF ketika
Pernyataan eksekusi yang program dijalankan, menampilkan

186
Statement Kendali Bahasa Pemrorgraman

pesan yang menunjukkan program seorang pembeli, dengan kriteria


tidak dapat melakukan pembagian sebagai berikut:
nol. Jika tidak, bagian lain mengambil  jika total pembelian kurang dari
kontrol, dan kemudian membagi Rp. 50.000,- potongan yang
num1 oleh num2 serta menampilkan diterima sebesar 5% dari total
hasilnya. pembelian.
Salah satu aplikasi penggunaan  Jika total pembelian lebih dari atau
IF/ELSE misalnya digunakan pada sama dengan Rp. 50.000,-
suatu permasalahan untuk potongan yang diterima sebesar
menentukan besarnya potongan dari 20% dari total pembelian.
pembelian barang yang diberikan Untuk lebih jelasnya perhatikan
contoh program IF/ELSE dibawah ini:

Program 5.7
#include<stdio.h> 
#include<conio.h> 
#include<iostream> 
 
using namespace std; 
 
main() 

    double tot_beli, potongan=0, jum_bayar=0; 
  
    cout<<"Total Pembelian Rp. "; 
    cin>>tot_beli; 
  
    if (tot_beli >= 50000) 
       potongan = 0.2 * tot_beli; 
     else 
       potongan = 0.05 * tot_beli; 
     cout<<"Besarnya Potongan Rp. "<<potongan<<endl; 
     jum_bayar = tot_beli ‐ potongan; 
   cout<<"Jumlah yang harus dibayarkan Rp. ",jum_bayar; 
     getch(); 
      return 0; 

Program dibawah ini digunakan dengan nol maka program akan


untuk menentukan sebuah operasi memberitahukan bahwa program
pembagian yang menggunakan tidak bisa melakukan operasi.
IF/ELSE , jika suatu bilangan dibagi

187
Bahasa Pemrograman Statement Kendali

Program 5.8
#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
int main() 

  double num1, num2, quotient; 
  cout << "Masukan Angka: "; 
  cin >> num1; 
  cout << "Masukan Angka Lain: "; 
  cin >> num2; 
 
  if (num2 == 0) 
  { 
  cout << "Pembagian oleh 0 tidak mungkin dilakukan.\n"; 
  cout << "silakan masukan angka lagi, "; 
  cout << "Angka lain yang lebih besar daripada 0.\n"; 
  } 
  else 
  { 
  quotient = num1 / num2; 
  cout << "The quotient of " << num1 << " divided by "; 
  cout << num2 << " is " << quotient << ".\n"; 
  } 
  getch(); 
  return 0; 

Keluaran program setelh diberi masukan adalah sebagai berikut:


Masukan Angka: 10[Enter] 
Masukan Angka Lain: 0[Enter] 
Pembagian oleh 0 tidak mungkin dilakukan. 
silakan masukan angka lagi, Angka lain yang lebih besar daripada 0 

5.5. Pernyataan IF/ELSE IF


Pernyataan IF/ELSE IF tetapi ada kaitannya dengan
merupakan sebuah pernyataan pernyataan sebelumnya. Misalnya,
dimana programmer dapat membuat programmer akan menentukan jenis
beberapa keputusan dengan mantel atau jaket yang dipakai dalam
menggunakan aturan yang berbeda

188
Statement Kendali Bahasa Pemrorgraman

konsultasi sehingga aturanya adalah sebagai berikut:

if sangat dingin, pakailah mantel yang tebal,  
else, jika dingin, memakai jaket yang tipis,  
else, jika berangin, memakai baju hem,  
else, jika panas, tidak perlu memakai jaket. 

Tujuan aturan tersebut adalah dari satu jaket. Misalnya, jika


untuk menentukan jenis pakaian luar berangin, maka aturannya harus
yang akan dipakai. Jika sangat berpakaian baju hem. Bagaimana jika
dingin, pertama menharuskan ada keduanya yaitu sangat dingin
menggunakan aturan yang memakai dan berangin? Apakah akan
mantel tebal. Semua peraturan memakai sebuah baju hem?. Karena
lainnya kemudian dapat diabaikan. aturan harus dipatuhi, pertama akan
Jika aturan pertama tidak berlaku, menentukan aturan memakai mantel
dan jika tidak dingin sekali, maka tebal dan memakai baju hem karena
aturan kedua digunakan. Jika aturan berangin.
tidak berlaku, aturan yang ketiga Jenis pengambilan keputusan
digunakan, dan seterusnya. juga sangat umum dalam
Suatu cara yang digunakan pemrograman. Dalam bahasa C++
untuk menhubungkan peraturan hal tersebut dicapai melalui
tersebut sangat penting. Jika mereka pernyataan IF/ELSE IF. Gambar
hanya berdiri sendiri, dimungkinkan dibawah menunjukan format cara
akan keluar rumah dengan memakai kerjanya.
jaket yang salah, atau mungkin, lebih

189
Bahasa Pemrograman Statement Kendali

Betul 
Kondisi 1  Pernyataan 1 

salah 
Betul 
Kondisi 2  Pernyataan 2 

salah 

Betul 
Kondisi n  Pernyataan n 

salah 

Gambar 5.4. Pernyataan IF/ELSE IF

Dari gambar diatas dapat diuraikan dalam pernyataan umu IF/ELSE IF adalah
sebagai berikut:

if (kondisi 1) 

Pernyataan 1; 

else if (kondisi 2) 

Pernyataan 2; 



else if (kondisi n) 

Pernyataan n; 

190
Statement Kendali Bahasa Pemrorgraman

Susunan ternyataan tersebut dimana Pengguna diminta untuk


seperti halnya sebuah pernyataan memasukkan angka skor tes dan
berbentuk rantai IF/ELSE. Pada program menampilkan huruf yang
bagian ELSE sebuah pernyataan besar.
akan terkait dengan IF dari bagian Program dibawah ini
yang lain. Ketika digabungkan cara menggunakan pernyataan IF/ELSE
ini, maka IF/ELSE dari rantai akan yang digunakan untuk operasi file
menjadi sebuah pernyataan. Program huruf kapital.
dibawah menunjukkan contoh,

Program 5.9
#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
int main() 

  int testScore; 
  char grade; 
 
  cout << "Masukan Nilai Angka maka saya akan mengujinya\n"; 
  cout << "Nilai Konversi huruf adalah: "; 
  cin >> testScore; 
 
  if (testScore < 60) 
  grade = 'F'; 
  else if (testScore < 70) 
  grade = 'D'; 
  else if (testScore < 80) 
  grade = 'C'; 
  else if (testScore < 90) 
  grade = 'B'; 
  else if (testScore <= 100) 
  grade = 'A'; 
  cout << " Grade Anda Adalah " << grade << ".\n"; 
  getch(); 
  return 0; 

Keluaran program setelah memasukan data adalah sebagai berikut:


Masukan Nilai Angka maka saya akan mengujinya 
Nilai Konversi huruf adalah: 90 
191
Bahasa Pemrograman Statement Kendali

Grade Anda Adalah A. 

Pernyataan IF/ELSE mempunyai Pertama jika seluruh pernyataan


sejumlag karakterisitik khusus. disaring untuk memilih nilai kurang
Perhatikan dan analisis kerja dari dari 60, sehingga saat ini berikutnya
ekprsesi relasional pengujian sebuah pernyataan IF memilih, variabel
testscore < 60 dibawah ini: testScore akan memiliki nilai 60 atau
lebih besar. Jika "testScore" kurang
if (testScore < 60)  dari 70, huruf 'D' dimasukan ke nilai
nilai = 'F';  dan sisanya dari Pernyataan IF/ELSE
IF ini diabaikan. lingkaran peristiwa
Jika testScore kurang dari 60, huruf ini terus berlangsung sampai salah
'F' dimasukan ke nilai dan sisanya satu ekspresi kondisional ditemukan
dari pernyataan yang terkait dengan benar atau akhir pernyataan yang
IF diabaikan. Jika TestScore tidak dihadapi. Dalam kedua kasus,
kurang dari 60, maka tugsa akan program ini dilanjutkan kembali pada
diambil alih oleh bagian lain pernyataan yang mengikutinya.
pernyataan IF berikutnya yang akan Pernyataan IF/ELSE IF,
dijalankan. merupakan pernyataan untuk
mencetak kondisi yang berhasil.
else if (testScore < 70)  Gambar dibawah menunjukkan jalan
nilai = 'D';  yang dapat diambil melalui
pernyataan IF/ELSE IF.

192
Statement Kendali Bahasa Pemrorgraman

Tidak  Ya 
SkorTest 
< 60 ?

Tidak  Ya  Nilai= ’F ’ 


SkorTest
< 70 ?

Tidak  Ya 
Nilai= ’D ’ 
SkorTest
< 80 ?

Tidak  Ya  Nilai= ’C ’ 


SkorTest
< 90 ?

Tidak  Ya  Nilai= ’B ’ 


SkorTest 
<=100 ?

Nilai= ’A ’ 

Gambar 5.5. Pernyataan IF/ELSE IF

pernyataan IF pada setiap struktur kondisional sebelumnya adalah


bergantung pada semua pernyataan salah. Untuk mendemonstrasikan
IF sebelumnya yang salah. bagaimana bekerjanya, perhatikan
Pernyataan ELSE IF berikutnya program dibawah, yang
dijalankan apabila ekspresi menggunakan pernyataan IF yang
kondisional mengikuti ELSE IF itu independen bukan sebuah
benar dan semua ekspresi pernyataan IF/ELSE. Program

193
Bahasa Pemrograman Statement Kendali

tersebut digunakan untuk yang digunakan untuk menentukan


mengilustrasikan kesalahan yang nilai huruf ke nilai angka. Perhatikan
terjadi ketika pernyataan IF/ELSE program dibawah ini:

Program 5.10
#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
int main() 

  int skortest; 
  char nilai; 
 
  cout << "Masukan Nilai Angka maka saya akan mengujinya\n"; 
  cout << "Nilai Konversi huruf adalah: "; 
  cin >> skortest; 
 
  if (skortest < 60) 
    nilai = 'F'; 
  if (skortest < 70) 
    nilai = 'D'; 
  if (skortest < 80) 
    nilai = 'C'; 
  if (skortest < 90) 
    nilai = 'B'; 
  if (skortest <= 100) 
    nilai = 'A'; 
  cout << " Nilai Anda Adalah " << nilai << ".\n"; 
  getch(); 
  return 0; 

Keluaran program setelah dilakukan pengisian data pada masukan adalah:


Masukan Nilai Angka maka saya akan mengujinya 
Nilai Konversi huruf adalah: 40[Enter] 
Nilai Anda Adalah A. 

Pada program dibawah, semua testScore diberikan nilai 40, namun


pernyataan IF dijalankan karena hal ada siswa yang menerima A.
tersebut merupakan pernyataan yang Berikutnya apa yang terjadi ?.
berdiri sendiri. Pada contoh keluaran, Karena skor siswa kurang dari 60,

194
Statement Kendali Bahasa Pemrorgraman

yang pertama pernyataan IF akan sana. Ini terus sampai semua jika
menyebabkan nilai 'F' ada pernyataan dijalankan. Yang
memasukannya ke variabel grade. terakhir akan menyebabkan 'A' akan
Namun, karena pernyataan ditugaskan untuk "grade".
berikutnya jika tidak tersambung ke Pada program dibawah
pernyataan pertama, maka hal menggunakan pernyataan if/else if
tersebut akan dieksekusi dengan untuk melaksanakan konversi nilai
baik. ketika testScore kurang dari 70, hurif (A, B, C, D, or F) menjadi nilai
dan menyebabkan nilai 'D' angka. Perhatikan program dibawah
ditugaskan ke grade, dan mengganti ini:
'F' yang sebelumnya disimpan di

Program 5.11
#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
int main() 

  int testScore; 
  char grade; 
  bool goodScore = true; 
  cout << "Masukan Nilai Angka maka saya akan mengujinya\n"; 
  cout << "Nilai Konversi huruf adalah: "; 
  cin >> testScore; 
 
  if (testScore < 60) 
    grade = 'F'; 
  else if (testScore < 70) 
    grade = 'D'; 
  else if (testScore < 80) 
    grade = 'C'; 
  else if (testScore < 90) 
    grade = 'B'; 
  else if (testScore <= 100) 
    grade = 'A'; 
  else 
    goodScore = false; 
 
  if (goodScore) 
  cout << " Grade Anda Adalah " << grade << ".\n"; 
  else 
  {  
195
Bahasa Pemrograman Statement Kendali

    cout << testScore << " Adalah skor anda yang tidak sah.\n"; 
    cout << "Silakan masukan skor dibawah 100. \n"; 
  } 
  getch(); 
  return 0; 

Keluaran program ddiatas setelah memasukan data adalah sebagai berikut:


Masukan Nilai Angka maka saya akan mengujinya 
Nilai Konversi huruf adalah: 110 
110 Adalah skor anda yang tidak sah. 
Silakan masukan skor dibawah 100. 

5.6. Pernyataan IF/ELSE Majemuk


Bentuk dari IF-ELSE bertingkat penulisan yang lebih sederhana.
sebenarnya serupa dengan NESTED Untuk lebih jelasnya perhatikan
IF, keuntungan penggunaan IF-ELSE bentuk penulisan program dibawah
bertingkat dibanding dengan ini:
NESTED IF adalah cara atau bentuk

if (syarat) 

  … perintah; 
  … perintah; 

else if (syarat) 

  … perintah; 
  … perintah; 

else  

  … perintah; 
  … perintah; 

Untuk lebih jelasnya, perhatikan akan diberikan uang jasa sebesar


sebuah kasus di suatu perusahaan Rp. 10.000 ditambah dengan uang
memberikan komisi kepada para komisi Rp. 10% dari pendapatan
selesman dengan ketentuan sebagai yang diperoleh hari itu.
berikut:  Bila salesman dapat menjual
 Bila salesman dapat menjual barang diatas Rp. 200.000 ,- ,
barang hingga Rp. 200.000 ,- , akan diberikan uang jasa sebesar

196
Statement Kendali Bahasa Pemrorgraman

Rp. 20.000 ditambah dengan uang komisi Rp. 20% dari pendapatan
komisi Rp. 15% dari pendapatan yang diperoleh hari itu.
yang diperoleh hari itu. Kasus yang ada di perusahaan
 Bila salesman dapat menjual tersebut dapat diatasi dengan
barang diatas Rp. 500.000 ,- , menggunakan program IF-Else-IF,
akan diberikan uang jasa sebesar dimana programnya adalah sebagai
Rp. 30.000 ditambah dengan uang berikut:

Program 5.12
#include<stdio.h> 
#include<conio.h> 
#include<iostream.h> 
 
using namespace std; 
  
int main() 

  float pendptan, jasa=0, komisi=0, total=0; 
  
  cout<<"Pendapatan Hari ini Rp. "; 
  cin>>pendptan; 
  if (pendptan >= 0 && pendptan <= 200000) 
  { 
     jasa=10000; 
     komisi=0.1*pendptan; 
  } 
  else if(pendptan<=500000) 
  { 
     jasa=20000; 
     komisi=0.15*pendptan; 
  } 
  else 
  { 
     jasa=30000; 
     komisi=0.2*pendptan; 
  } 
  
   /* menghitung total */ 
   total = komisi+jasa; 
  
   cout<<"Uang Jasa    Rp. "<<jasa<<endl; 
   cout<<"Uang Komisi  Rp. "<<komisi<<endl; 
   cout<<"============================="<<endl; 

197
Bahasa Pemrograman Statement Kendali

   cout<<"Hasil Total  Rp. "<<total<<endl; 
  
   getch(); 
   return 0; 

Keluaran program diatas adalah sebagai berikut:


Pendapatan Hari ini Rp. 10000 
Uang Jasa    Rp. 10000 
Uang Komisi  Rp. 1000 
============================= 
Hasil Total  Rp. 11000 

5.7. Pernyataan NESTED IF


Ketika sebuah pernyataan IF IF sebelumnya. Karena nested if
muncul didalam pernyataan IF lain, merupakan pernyataan if yang
maka hal ini dikategorikan sebagai berada didalam pernyataan if yang
nested. Kenyataannya dalam struktur lainnya, sehingga utuk lebih jelasnya
IF/ELSE adalah pernyataan nested if. bentuk penulisan pernyataan Nested
Jika masing-masing setelah if if dapat ditulis seperti berikut dibawah
pertama adalah nested di bagian lain ini:

if(syarat) 
if(syarat) 
   … perintah; 
else   
   … perintah; 
else 
if(syarat) 
   … perintah; 
else 
   … perintah; 

Sebagai contoh saja misalnya untuk pelanggan orang-orang yang


program dibawah digunakan untuk baru lulus dari sekolah dan bekerja.
menentukan apakah pelanggan bank Program berikut ini
memenuhi syarat khusus untuk mendemontasikan pernyataan nested
mendapatkan bunga pinjaman, if.
dimana syarat khusus ini ditujukan

Program 5.13
#include<conio.h> 

198
Statement Kendali Bahasa Pemrorgraman

#include <iostream> 
  
using namespace std; 
 
int main() 

  char pekerja, barululus; 
  cout << "Jawablah pertanyaan dibawah ini\n"; 
  cout << "dengan jawaban Y untuk Ya atau "; 
  cout << "T untuk Tidak\n"; 
  cout << "Apakah Anda Bekerja? "; 
  cin >> pekerja; 
  cout << "telahkan Anda selesai sekolah "; 
  cout << "dalam dua tahun ini? "; 
  cin >> barululus; 
 
  if (pekerja == 'Y') 
  { 
    if (barululus == 'Y') 
    { 
    cout << "Kwalitas anda khusus "; 
    cout << "tertarik ?\n"; 
    } 
  } 
      getch(); 
  return 0; 

Keluaran program diatas setelah diberi masukan adalah:


Jawablah pertanyaan dibawah ini 
dengan jawaban Y untuk Ya atau T untuk Tidak 
Apakah Anda Bekerja? Y 

Karena pernyataan IF pertama mengkategorisasikan data. Satu-


kondisinya melaksanakan masalah satunya cara untuk menjalankan
kedua, baik variabel pekerja dan program pernyataan IF yang kedua
barululus harus diatur ke 'Y' supaya adalah dengan ekspresi kondisional
pesan mengenai pengguna dengan yang pertama harus benar. Namun
kualifikasi khusus dicetak sesuai kadang ada fitur yang tidak
dengan tingkat suku bunga. Jenis dikehendaki atau sering dikenal
pernyataan nested if yang baik untuk sebagai kesalahan dalam sebuah
pilihan yang kecil dengan program. Jika seorang pengguna

199
Bahasa Pemrograman Statement Kendali

memasukkan 'N' (atau karakter selain Pernyataan lain yang dapat


'Y') sebagai pekerja atau barululus, digunakan untuk mengatasi masalah
program tidak mencetak pesan yang ini digambarkan dalam program
memberitahukan bahwa mereka tidak dibawah. Program dibawah ini
memenuhi syarat. merupakan sebuah pernyataan
NESTED IF.

Program 5.14
#include<conio.h> 
#include <iostream> 
 
using namespace std; 
 
int main() 

  char pekerja, barululus; 
  cout << "Jawablah pertanyaan dibawah ini\n"; 
  cout << "dengan jawaban Y untuk Ya atau "; 
  cout << "T untuk Tidak\n"; 
  cout << "Apakah Anda Bekerja? "; 
  cin >> pekerja; 
  cout << "telahkan Anda selesai sekolah "; 
  cout << "dalam dua tahun ini? "; 
  cin >> barululus; 
 
  if (pekerja == 'Y') 
  { // Nested if 
    if (barululus == 'Y')      
    { 
      cout << "Kwalitas anda khusus "; 
      cout << "Anda tertarik\n"; 
    } 
    else          
    { 
      cout << "Anda harus Lulus dari "; 
      cout << "sekolah paling lama 2 tahun\n"; 
      cout << "dan berkwalitas.\n"; 
    } 
  } 
  else          
  { 
    cout << "Anda harus menjadi pekerja yang berkwalitas.\n"; 
  } 
    getch(); 
200
Statement Kendali Bahasa Pemrorgraman

  return 0; 

Keluaran program diatas setelah diberi masukan adalah:


Jawablah pertanyaan dibawah ini 
dengan jawaban Y untuk Ya atau T untuk Tidak 
Apakah Anda Bekerja? Y 
telahkan Anda selesai sekolah dalam dua tahun ini? Y 
Kwalitas anda khusus Anda tertarik 

contoh lainnya misalnya pada 20.000 ditambah dengan uang


suatu perusahaan yang memberikan komisi Rp. 15% dari pendapatan
komisi kepada para selesman yang diperoleh hari itu.
dengan ketentuan sebagai berikut:  Bila salesman dapat menjual
 Bila salesman dapat menjual barang diatas Rp. 50.000 ,- , akan
barang hingga Rp. 20.000 ,- , akan diberikan uang jasa sebesar Rp.
diberikan uang jasa sebesar Rp. 30.000 ditambah dengan uang
10.000 ditambah dengan uang komisi Rp. 20% dari pendapatan
komisi Rp. 10% dari pendapatan yang diperoleh hari itu.
yang diperoleh hari itu. Perhatikan contoh program dengan
 Bila salesman dapat menjual menggunakan pernyataan Nested-
barang diatas Rp. 20.000 ,- , akan If dibawah:
diberikan uang jasa sebesar Rp.

Program 5.15
#include<stdio.h> 
#include<conio.h> 
#include<iostream.h> 
 
using namespace std; 
  
int main() 

  float pendptan, jasa=0, komisi=0, total=0; 
  
  cout<<"Pendapatan Hari ini Rp. "; 
  cin>>pendptan; 
  
  if (pendptan >= 0 && pendptan <= 200000) 
  { 
     jasa=10000; 
     komisi=0.1*pendptan; 
  } 
  else 
201
Bahasa Pemrograman Statement Kendali

  { 
     if(pendptan<=500000) 
     { 
         jasa=20000; 
         komisi=0.15*pendptan; 
     } 
     else 
     { 
         jasa=30000; 
         komisi=0.2*pendptan; 
     } 
   } 
  
   /* menghitung total */ 
   total = komisi+jasa; 
  
   cout<<"Uang Jasa    Rp. "<<jasa<<endl; 
   cout<<"Uang Komisi  Rp. "<<komisi<<endl; 
   cout<<"============================="<<endl; 
   cout<<"Hasil Total  Rp. "<<total<<endl; 
  
   getch(); 
   return 0; 

Keluaran program diatas adalah:


Pendapatan Hari ini Rp. 5600 
Uang Jasa    Rp. 10000 
Uang Komisi  Rp. 560 
============================= 
Hasil Total  Rp. 10560 

5.8. Operator Logika


Selain operator relasional, telah ditulis sebuah program tes
bahasa pemrograman umumnya dengan dua kondisi pada pernyataan
mendukung tambahan operator yaitu IF. Dalam bagian ini ditulis program
AND, OR, dan NOT. Operator And, yang menggunakan operator logis
Or, dan Not dikenal dengan nama untuk menggabungkan dua atau lebih
operator logika. Dengan menjadi satu kalimat relasional. Tabel
menggunakan operator ini dua atau berikut merupakan daftar operator
lebih test perbandingan dapat logika pada bahasa C++.
dilakukan. Pada bagian sebelumnya
202
Statement Kendali Bahasa Pemrorgraman

Tabel 5.5. Operator Logika


OPERATOR  ARTI  PENJELASAN 
&&  AND  Menghubungkan dua ekpresi menjadi satu. Kedua ekpresi 
tersebut harus benar supaya hasilnya benar 
||  OR  Menghubungkan dua ekpresi menjadi satu. Hasil akan 
menjadi benar jika salah satu atau keduanya  ada yang 
benar. 
!  NOT  Operator yang melakukan kebalikan dari ekpresi. Jika ekpresi 
benar maka hasil salah atau sebaliknya. 

5.8.1. Operator &&


Operator && yang dikenal sub-kalimatnya benar. Berikut
sebagai operator logika. Dua kalimat dibawah ini adalah contoh program
diperlukan sebagai operands dan pernyataan IF yang menggunakan
membuat kalimat benar, jika kedua operator &&:

if (suhu < 20 && waktu > 12) 
cout << "suhu telah mencapai level yang berbahaya"; 

Perhatikan bahwa kedua kalimat besar daripada 12. Jika salah satu
yang diANDkan bersama adalah penghubung teresebut salah, seluruh
kalimat yang lengkap untuk ekspresi yang dihasilkan juga salah
mengevaluasi benar atau salah. dan pernyataan cout tidak dijalankan.
Pertama suhu <20 dievaluasi untuk Tabel dibawah meruapkan tabel
menghasilkan hasil benar atau salah. kebenaran untuk operator &&.
Kemudian menit> 12 dievaluasi untuk Kebenaran tabel berisi semua
menghasilkan hasil benar atau salah. kemungkinan kombinasi nilai yang
Kemudian kedua hasil tersebut mungkin dimiliki oleh dua kalimat,
diANDkan sehingga akan Sebagaimana dalam tabel
mendapatkan hasil akhir untuk menunjukkan, kedua sub-ekspresi
seluruh ekspresi. Pernyataan cout harus benar untuk operator &&
hanya akan dijalankan jika suhu sehingga akan menghasilkan nilai
kurang dari 20 dan waktunya lebih yang benar pula.

Table 5.6. Logika AND


203
Bahasa Pemrograman Statement Kendali

EKPRESI  NILAI KEBENARAN LOGIKA


Salah && salah Salah 0
Salah && benar Salah 0
Benar && salah Salah 0
Benar && benar benar 1

Operator && dapat digunakan IF. Program dibawah ini adalah versi
untuk mempermudah program- Program sebelumnya yang kemudian
program lain yang akan ditulis ulang dengan operator logika.
menggunakan pernyataan NESTED Perhatikan program dibawah ini:

Program 5.16
#include<conio.h> 
#include <iostream> 
 
using namespace std; 
 
int main() 

  char pekerja, barululus; 
  cout << "Jawablah pertanyaan dibawah ini\n"; 
  cout << "dengan jawaban Y untuk Ya atau "; 
  cout << "T untuk Tidak\n"; 
  cout << "Apakah Anda Bekerja? "; 
  cin >> pekerja; 
  cout << "telahkan Anda sekolah "; 
  cout << "dalam dua tahun ini? "; 
  cin >> barululus; 
 
  if (pekerja == 'Y' && barululus == 'Y')     // menggunakan && 
  {                           // logical operator 
    cout << "Kwalitas anda spesial "; 
     cout << "dan anda tertarik.\n"; 
  } 
  else 
  { 
    cout << "anda harus bekerja dan mempunyai\n"; 
    cout << "lulusan dari sekolah SMK dalam\n"; 
    cout << "waktu paling lama 3 tahun.\n"; 
  } 
      getch(); 
204
Statement Kendali Bahasa Pemrorgraman

  return 0; 

Keluaran program diatas setelah diberi masukan adalah


Jawablah pertanyaan dibawah ini 
dengan jawaban Y untuk Ya atau T untuk Tidak 
Apakah Anda Bekerja? T 
telahkan Anda sekolah dalam dua tahun ini? Y 
anda harus bekerja dan mempunyai 
lulusan dari sekolah SMK dalam 
waktu paling lama 3 tahun. 

5.8.2. Operator ||
Operator || yang dikenal sebagai Pernyataan cout akan dijalankan jika
operator logika OR. Dua kalimat yang suhu kurang dari 20 ATAU suhu lebih
diperlukan sebagai operand akan besar dari 100. Jika salah satunya
membuat kalimat benar bila salah benar, maka seluruh ekspresi akan
satu dari sub-kalimat yang benar. menghasilkan keluaran benar dan
Berikut dibawah ini adalah contoh pernyataan cout akan dijalankan.
sebuah pernyataan IF yang Setelah cout dijalankan maka akan
menggunakan operator || menghasilkan keluaran "suhu dalam
level yang berbahaya". Table
if (suhu < 20 || suhu > 100)  dibawah ini merupakan table
cout  <<  "suhu  dalam  level  yang  kebenaran operator OR
berbahaya."; 

Table 5.7. Logika OR

EKPRESI  NILAI KEBENARAN LOGIKA


Salah && salah Salah 0
Salah && benar Benar 1
Benar && salah Benar  1
Benar && benar benar 1

Semua ekspresi pada operator benar. Program dibawah ini akan


OR akan menjadi salah jika semua melakukan tes untuk mengetahui
dari sub-kalimat salah, tetapi akan orang yang memenuhi syarat untuk
benar jika salah satu sub-kalimatnya mendapatkan pinjaman. Program ini
benar. Tidak peduli apakah salah akan menentukan apakah pelanggan
satu sub-ekspresinya salah atau mempunyai gaji setidaknya $35,000

205
Bahasa Pemrograman Statement Kendali

per tahun atau telah bekerja selama program dibawah ini:


lebih dari lima tahun. Perhatikan

Program 5.17
#include<conio.h> 
#include <iostream> 
 
using namespace std; 
 
int main() 

  double income; 
  int years; 
 
  cout << "Apakah ini masukan tahunan Anda? "; 
  cin >> income; 
  cout << "berapa banyak anda bekerja setiap tahunnya " 
<< "Pekerjaan anda sekarang? "; 
  cin >> years; 
 
  if (income >= 35000 || years > 5) // Uses the || logical operator 
    cout << "Kwalifikasi Anda.\n"; 
  else 
  {  
  cout << "Anda akan mendapatkan gaji paling tidak $35,000 atau lebih\n"; 
  cout << "setelah bekerja lebih dari lima tahun.\n"; 
  } 
     getch(); 
  return 0; 
 } 

Keluaran program diatas setelah diberi masukan adalah


Apakah ini masukan tahunan Anda? 30000 
berapa banyak anda bekerja setiap tahunnya Pekerjaan anda sekarang? 5 
Anda akan mendapatkan gaji paling tidak $35,000 atau lebih 
setelah bekerja lebih dari lima tahun. 

5.8.3. Operator !
Operator ! akan melakukan maka operator ! akan membalik
operasi logika NOT. Dibutuhkan menjadi salah, dan jika ekspresi
sebuah operand atau sebeliknya salah, maka akan dibalik menjadi
seperti benar atau salah. Dengan benar. Dibawah ini adalah suatu
kata lain, jika ungkapan itu benar,

206
Statement Kendali Bahasa Pemrorgraman

pernyataan IF yang meggunakan benar atau salah. Maka operator !


operator !: akan diterapkan pada nilai. Jika
ekspresi (suhu> 100) itu benar, maka
if (!(suhu > 100))  operator ! akan membalik menjadi
cout << "anda dibawah suhu  salah. Jika hal tersebut salah, maka
maksimum.\n";  operator ! akan kembali benar. Tabel
dibawah merupakan table kebenaran
pada potongan program diatas, operator !
ekspresi (suhu> 100) yang akan diuji
.

Tabel 5.8. operator !

EKPRESI  HASIL EKPRESI LOGIKA


! salah  benar 1
! benar  Salah 0

Program dibawah sama dengan membuat rekening di bank yang


program sebelumnya, yaitu akan setidaknya ada $ 35.000 atau belum
melakukan operasi dengan operator mempunyai pekerjaan yang lebih dari
!. Pernyataan IF tersebut lima tahun. Perhatikan program
menggunakan operator ! untuk dibawah ini:
menentukan apakah pengguna tidak

Program 5.18
#include <iostream> 
 
using namespace std; 
 
int main() 

  double income; 
  int years; 
 
  cout << "Apakah ini masukan tahunan Anda? "; 
  cin >> income; 
  cout << "berapa banyak anda bekerja setiap tahunnya "<< "Pekerjaan anda? 
"; 
  cin >> years; 
 
  if (!(income >= 35000 || years > 5))   // menggunakan operator ! 
207
Bahasa Pemrograman Statement Kendali

  {  
    cout << "Anda akan mendapatkan gaji paling tidak $35,000 atau 
lebih\n"; 
    cout << "setelah bekerja lebih dari lima tahun.\n"; 
   } 
  else 
  cout << "Kwalifikasi Anda.\n"; 
  return 0; 

Keluaran program diatas sama dengan program sebelumnya

5.8.3. Variabel Boolean dan Operator !


Fitur yang menarik dari variabel variabel Boolean. Kemudian
Boolean adalah nilainya dapat diuji. pengujiannya adalah:
Misalnya moreData adalah sebuah

if (moreData == true) 
can be written simply as 
if (moreData) 
and the test 
if(moreData == false) 
can be written simply as 
if(!moreData) 

Program diatas biasanya diselesaikan dengan menggunakan operator !.

5.9. Operator Kondisional


Operator kondisional merupakan ekspresi ? ekspresi : ekspresi; 
operator kuat dan unik. Operator
tersebut menyediakan sebuah disini diberikan sebuah contoh
metode sedernana yang pernyataan yang menggunakan
mengekpresikan pernyataan operator kondisional
IF/ELSE. Operator ini terdiri dari
tanda tanya (?) dan titik dua (:). x < 0 ? y = 10 : z = 20; 
Untuk lebih jelasnya mengenai
operator ini perhatikan ekpresi
dibawah inI:
pernyataan diatas sering disebut tanda Tanya dan symbol titik dua ( : ).
dengan conditional expression dan Sebuah ekspresi diatas < 0, y = 10,
terdiri dari tiga sub-expressions ang dan z = 20 dapat diuraikan sebagai
dipisahkan dengan menggunakan berikut:

208
Statement Kendali Bahasa Pemrorgraman

z = 20; 

X< 0 ? Y=10 : Z = 20 Bagian dari ekspresi kondisional


sebelum tanda tanya adalah ekspresi
Gambar 5.6 conditional expression yang akan diuji. Hal ini merupakan
kalimat dalam kurung seperti pada
Sebuah Ekspresi kondisional yang sebuah pernyataan IF. Jika ekspresi
diatas melakukan operasi yang sama benar, bagian dari pernyataan antara
seperti halnya pernyataan IF/ELSE. tanda tanya (?) dan titik dua ( : )
Perhatikan pernyataan dibawah ini: akan dijalankan. Jika tidak, bagian
setelah : yang dijalankan. Gambar
if (x < 0)  dibawah ini menggambarkan aturan
y = 10;  yang diakukan oleh tiga sub-ekspresi
else  adalah sebagai berikut:

Ekspresi kedua yang akan  Ekspresi ketiga yang 
Ekspresi pertama 
dieksekusi jika ekspresi pertama  akan dieksekusi jika 
yang akan diuji 
benar ekspresi pertama salah 

X< 0 ? Y=10 : Z = 20
Gambar 5.7. aturan yang diakukan oleh tiga sub-ekspresi

Anda dapat meletakkan tanda kurung di sekitar sub-ekspresi, seperti contoh


berikut ini:

 (x < 0) ? (y = 10) : (z = 20); 

Dalam menggunakan nilai kedua sub-ekspresi tersebut.


ekspresi dalam bahasa C++ yang Sebaliknya Jika hal tersebut bukan
perlu diingat, bahwa pada bahasa berarti nilai sub-ekspresi yang ketiga.
C++ semua ekspresi memiliki nilai, Berikut dibawah ini adalah contoh
dan hal ini termasuk ekspresi sebuah pernyataan yang
kondisional. Jika sub-ekspresi menggunakan nilai ekspresi
pertama benar, maka nilai dari kondisional
ekspresi kondisional adalah nilai

a = x > 100 ? 0 : 1 

Nilai akan ditetapkan baik 0 atau 1, tergantung apakah x lebih besar dari 100.
Pernyataan tersebut dapat dinyatakan dalam pernyataan IF/ELSE sebagai
berikut:

209
Bahasa Pemrograman Statement Kendali

if (x > 100) 
a = 0; 
else 
a = 1; 

Program dibawah dapat dibayar. Operator kondisional


digunakan untuk membantu seorang digunakan dalam pernyataan
konsultan untuk menghitung biaya. tersebut untuk memastikan bahwa
Konsultasn tersebut meminta jumlahnya tidak kurang atau dibawah
bayaran $ 50,00 per jam, tetapi lima. Untuk lebih jelasnya perhatikan
minimum selama lima jam, jika program dibawah ini
kurang dari 5 jam maka tidak akan

Program 5.19
#include<conio.h> 
#include <iostream> 
#include <iomanip> 
 
using namespace std; 
 
int main() 

    const double PAY_RATE = 50.0; 
    double hours, charges; 
 
    cout << "Berapa jam anda bekerja? "; 
    cin >> hours; 
 
    hours = hours < 5 ? 5 : hours;    // Conditional operator 
    charges = PAY_RATE * hours; 
 
    cout << fixed << showpoint << setprecision(2); 
    cout << "Besar gaji anda adalah $" << charges << endl; 
    getch(); 
    return 0; 

Program Output with Example Input Shown in Bold


Berapa jam anda bekerja? 5 
Besar gaji anda adalah $250.00 

210
Statement Kendali Bahasa Pemrorgraman

5.10. Statement SWITCH


Statement SWITCH juga CASE OF dalam PASCAL. Dimana
berfungsi sama dengan IF. Perintah sintaksnya menggunakan:
SWITCH sama dengan perintah

switch (variabel) 

  case value1 : statement1; 
  break; 
  case value2 : statement2; 
  break; 
  .. 
  default : statement; /* optional */ 
  break; 

Perhatikan contoh program menggunakan statement switch adalah sebagai


berikut:

Program 5.20
#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
void main() 

  int bil; 
  cout << "Masukkan bilangan : "; 
  cin >> bil 
          switch (bil) 
  { 
                 case 1 : cout << "Anda memasukkan bil. satu"; 
        break; 
        case 2 : cout << "Anda memasukkan bil. dua"; 
        break; 
        case 3 : cout << "Anda memasukkan bil. tiga"; 
        break; 
        default: cout << "Anda memasukkan bil selain 1, 2, dan 3"; 
        break; 
  } 

211
Bahasa Pemrograman Statement Kendali

Selanjutnya coba kalian hapus kalian jalankan. Apa yang terjadi?


semua break program di atas dan Keanehan akan muncul. Mengapa?

5.11. Pernyataan SWITCH … CASE


Cara lain untuk menangani apabila percabangan bergantung
pengambilan keputusan dalam kepada satu kondisi saja. Dengan
sebuah program adalah dengan menggunakan switch .... case
menggunakan Statement switch…. sebagai pengganti dari If ... Then ...
case, yang mampu menangani Else If, akan membuat program
sejumlah kondisi dari satu variabel. menjadi lebih sederhana. Format
switch .... case serupa dengan If ... penggunaan switch .... case:
Then ..... ElseIf, tetapi lebih efisien

switch nama_variabel 

   case nilai_1:{ 
        Perintah yang akan dieksekusi jika memenuhi nilai_1; 
  break;} 
   case nilai_2:{ 
        Perintah yang akan dieksekusi jika memenuhi nilai_2; 
  break;} 
   default:{ 
        Perintah yang akan dieksekusi jika tidak memenuhi semua; 
    exit(0);} 

Struktur Select Case dimulai dijalankan dan Visual Basic akan


dengan kata Select Case dan diakhiri melanjutkan mengeksekusi program
dengan kata End Select. setelah End. Anda dapat
nama_variabel dapat diganti dengan menggunakan kata case sebanyak
variabel, properti, atau ekpresi lain mungkin dalam struktur select...
yang akan dijadikan sebagai kondisi. case, dan anda juga dapat
Sedangkan nilai_1, nilai 2 dapat menyertakan lebih dari satu nilai
diganti dengan angka, string atau pada kata case.
nilai lain yang berkaitandengan Jika anda menyertakan banyak
nama_variabel. Jika salah satu nilai nilai setelah case, pisahkan dengan
sesuai dengan variabel, maka tanda koma.
pernytaan di bawah kata case akan

Select Case intAge  
Case  5  : lblTitle.Caption = "Kindergarten" 
Case 6  : lblTitle.Caption = "1st Grade"  

212
Statement Kendali Bahasa Pemrorgraman

Case 7  : lblTitle.Caption = "2nd Grade"  
Case 8  : lblTitle.Caption = "3rd Grade"  
Case 9  : lblTitle.Caption = "4th Grade"  
Case 10  : lblTitle.Caption = "5th Grade"  
Case 11  : lblTitle.Caption = "6th Grade"  
Case Else: lblTitle.Caption = "Advanced"  
End Select 

Bentuk dari SWITCH - CASE memiliki kegunaan sama seperti IF –


merupakan pernyataan yang ELSE bertingkat, tetapi
dirancangan khusus untuk penggunaannya untuk memeriksa
menangani pengambilan keputusan data yang bertipe karakter atau
yang melibatkan sejumlah atau integer. Bentuk penulisan perintah ini
banyak alternatif penyelesaian. sebagai berikut :
Pernyataan SWITCH - CASE ini

switch (ekspresi integer atau karakter ) 

     case konstanta‐1 : 
               … perintah; 
               … perintah; 
               break; 
    case konstanta‐2 : 
               … perintah; 
               … perintah; 
               break; 
       …… 
       …… 
     default : 
               … perintah; 
               … perintah; 

Setiap cabang akan dijalankan tidak ada, maka program akan


jika syarat nilai konstanta tersebut diteruskan kecabang – cabang yang
dipenuhi dan default akan dijalankan lainnya. Perhatikan contoh program
jika semua cabang diatasnya tidak dibawah ini menggunakan Switch-
terpenuhi. Pernyataan break Case, untuk menentukan alat yang
menunjukan bahwa perintah siap dikehendaki, seperti alat olahraga,
keluar dari switch. Jika pernyataan ini alat elektronik atau alat masak.

Program 5.21

213
Bahasa Pemrograman Statement Kendali

include<stdio.h> 
#include<conio.h> 
#include<iostream.h> 
 
using namespace std; 
 
main() 

   char kode; 
   cout<<"Masukkan Kode Barang [A..C] : "; 
   cin>>kode; 
  
   switch(kode) 
   { 
     case 'A' : 
            cout<<"Alat Olah Raga"; 
            break; 
     case 'B' : 
            cout<<"Alat Elelktronik"; 
            break; 
     case 'C' : 
            cout<<"Alat Masak"; 
     break; 
     default: 
            cout<<"Anda Salah Memasukan kode"; 
      break; 
   } 
   getch(); 

Keluaran program diatas adalah:


Masukkan Kode Barang [A..C] : B 
Alat Elelktronik 

Program diatas juga bisa ditulis sama-sama menggunakan switch-


dengan program dibawah ini, dimana case. Jika dalam memasukan
kelebihan program dibawah bisa kodenya salam maka akan muncul
membaca baik kode huruf kecil pesan “Anda Salah Memasukan
maupun huruf besar. Pada program kode”. Untuk lebih jelasnya
diatas hanya bisa membaca kode perhatikan program dibawah ini:
huruf besar saja. Kedua-duanya

Program 5.22

214
Statement Kendali Bahasa Pemrorgraman

#include<stdio.h> 
#include<conio.h> 
#include<iostream.h> 
 
using namespace std; 
 
main() 

   char kode; 
   cout<<"Masukkan Kode Barang [A..C] : "; 
   cin>>kode; 
  
   switch(kode) 
   { 
     case 'A' : 
     case 'a' : 
             cout<<"Alat Olah Raga"; 
             break; 
      case 'B' : 
     case 'b' : 
             Cout<<"Alat Elelktronik"; 
             break; 
     case 'C' : 
     case 'c' : 
             cout<<"Alat Masak"; 
       break; 
     default: 
             cout<<"Anda Salah Memasukan kode"; 
       break; 
   } 
   getch(); 
   return 0; 

Struktur kondisi switch....case.... diteruskan hingga ditemukan


default digunakan untuk penyeleksian pernyataan ‘break’. Jika tidak ada
kondisi dengan cukup banyak nilai pada case yang sesuai dengan
kemungkinan yang terjadi. Struktur ini nilai kondisi, maka proses akan
akan melaksanakan salah satu dari diteruskan kepada pernyataan yang
beberapa pernyataan ‘case’ ada di bawah ‘default’. Bentuk umum
tergantung nilai kondisi yang ada di dari struktur kondisi ini adalah:
dalam switch. Selanjutnya proses

215
Bahasa Pemrograman Statement Kendali

switch(kondisi) 

  case 1 : pernyataan‐1; 
  break; 
  case 2 : pernyataan‐2; 
  break; 
  ..... 
  ..... 
  case n : pernyataan‐n; 
  break; 
  default : pernyataan‐m 

Pada program dibawah program tersebut digunakan untuk


merupakan program dengan menentukan jumlah hari. Perhatikan
menggunakan switch, dimana program dibawah ini:

Program 5.23
#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
int main() { 
int AngkaBulan,Tahun, JumlahHari; 
 
    cout<<"Angka Bulan : "; 
    cin >> AngkaBulan; 
     
    cout <<"Tahun : "; 
    cin >> Tahun; 
    switch (AngkaBulan) { 
         case 1: 
         case 3: 
         case 5: 
         case 7: 
         case 8: 
         case 10: 
         case 12: JumlahHari = 31;break; 
         case 4: 
         case 6: 
         case 9: 

216
Statement Kendali Bahasa Pemrorgraman

         case 11 : JumlahHari = 30;break; 
         case 2 : if (Tahun % 4 == 0) JumlahHari = 29; 
         else JumlahHari = 28;break; 
      } 
      cout<<"Jumlah hari "<< JumlahHari; 
      getch(); 
      return 0; 

Keluaran program diatas adalah:


Angka Bulan : 4 
Tahun : 1990 
Jumlah hari 30 

Program dibawah merupakan menentukan bilangan Genap atau


program yang digunakan untuk Ganjil dengan case:

Program 5.24
#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
main() { 
  int Op1, Op2, Pilih; 
  float Hasil; 
  cout << "Operand 1: "; 
      cin >> Op1; 
      cout << "Operand 2: "; 
      cin >> Op2; 
  cout << "1. Operator +\n"; 
  cout << "2. Operator ‐\n"; 
  cout << "3. Operator *\n"; 
  cout << "4. Operator /\n"; 
  cout << "Pilih Operator : "; 
      cin  >> Pilih; 
  switch (Pilih) { 
    case 1 : {Hasil = Op1 + Op2; break;} 
    case 2 : {Hasil = Op1 ‐ Op2; break;} 
    case 3 : {Hasil = Op1 * Op2; break;} 
    case 4 : {if (Op2 != 0)  
            cout <<Op1/Op2; 

217
Bahasa Pemrograman Statement Kendali

    else 
    cout <<"error"; 
        break;} 
    } 
    printf("Hasil dari perhitungan tersebut adalah %f",Hasil); 
    getch(); 
    return 0; 

Keluaran program diatas adalah sebagai berikut:


Operand 1: 1 
Operand 2: 3 
1. Operator + 
2. Operator ‐ 
3. Operator * 
4. Operator / 
Pilih Operator : 3 
Hasil dari perhitungan tersebut adalah 3.000000 

Dari beberapa contoh program bahasa umum mengenai pernyataan


diatas, maka dapat diketahui bentuk If–Else adalah sebagai berikut:

If Kondisi  Then 
  Perintah yang akan dieksekusi jika kondisi bernilai true 
ELSE 
  Perintah yang akan dieksekusi jika kondisi bernilai false 
End If 

5.12. IF...THEN, IF...THEN...ELSE dan Nested IF


Struktur IF, kita dapat membuat jika ekspresi boolean bernilai true
algoritma-algoritma yang melakukan (jika ekspresi boolean bernilai false
perintah berdasarkan kondisi tertentu. maka perintah tidak akan dikerjakan).
Perintah akan dilakukan jika hanya

IF <ekspresi boolean> then 
  Perintah_1 
Else 
    Perintah_2 
  Endif 
    IF <ekspresi boolean 1> then 
    Perintah 1 

218
Statement Kendali Bahasa Pemrorgraman

  Else if <ekspresi boolean 2> then 
    Perintah 2 
  Else if <ekspresi boolean n> then 
    Perintah n 
  Else Perintah n+1 
Endif 

Program statement kondisi IF- dan Ganjil. Perhatikan contoh


ELSE untuk mencari bilangan Genap program dibawah ini:

Program 5.25
#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
main() { 
  int Bil; 
  cout << "masukan bilangan : "; 
    cin >> Bil; 
  if (Bil % 2 == 0) 
    {  
            cout << "bilangan genap"; 
        } 
  else 
    {  
            cout << "bilangan ganjil"; 
        } 
    getch(); 
    return 0; 

Keluaran program diatas adalah


masukan bilangan : 5 
bilangan ganjil 

Program dibawah ini digunakan untuk menghitung atau mencari bilangan


terbesar.

Program 5.26
#include <conio.h> 
#include <iostream> 
 
219
Bahasa Pemrograman Statement Kendali

using namespace std; 
 
main() { 
  int A, B, C,maks; 
  cout << "A : "; 
     cin >> A; 
  cout << "B : "; 
     cin >> B; 
  cout << "C : "; 
     cin >> C; 
  if ((A>B) && (A>C)) 
    maks = A; 
  else if ((B>A) && (B>C)) 
    maks = B; 
  else 
    maks = C; 
    cout <<"bilangan terbesar adalah " << maks; 
     getch(); 
     return 0; 

Keluaran program diatas adalah sebagai berikut:


A : 40 
B : 56 
C : 59 
bilangan terbesar adalah 59 

5.13. Aplikasi Pernyataan IF pada Menu


Menu adalah layar yang 4, sehingga akan menyebabkan
menampilkan beberapa pilihan daftar dicetak, dan memasukkan 5
sehingga pengguna dapat memilih. akan menyebabkan keluar program.
Sebagai contoh pada sebuah struktur IF/ELSE IF dapat digunakan
program yang dapat memberikan untuk membuat menu seperti diatas.
menu pilihan berikut ini: Setelah pengguna memasukkan
1. Menambahkan nama ke dalam nomor, maka nomor akan digunakan
daftar. untuk membandingkan pilihan yang
2. Hapus nama dari daftar. tersedia dan melaksanakan sebuah
3. Mengubah nama dalam daftar. pernyataan yang melakukan operasi.
4. Mencetak daftar. program dibawah digunakan untuk
5. Keluar dari program ini. menghitung biaya keanggotaan
Pengguna dapat memilih salah disebuah klub kesehatan. Klub
satu operasi dengan memasukkan memiliki tiga paket keanggotaan
nomor. Misalnya memasukan nomer pilihan: keanggotaan standar
220
Statement Kendali Bahasa Pemrorgraman

dewasa, anggota anak, dan anggota kemudian menghitung biaya


orang senior. keanggotaannya. Untuk lebih
Program ini menyajikan menu jelasnya perhatikan program dibawah
yang memungkinkan pengguna untuk ini:
memilih paket yang diinginkan,

Program 5.27
#include <conio.h> 
#include <iostream> 
#include <iomanip> 
 
using namespace std; 
 
int main() 

    int choice, months; 
    double charges; 
 
    // Display menu pilihan 
    cout << "\t\tMenu Anggota Klub Kesehatan\n\n"; 
    cout << "1. Keanggotaa Standard Dewasa\n"; 
    cout << "2. Keanggotaan Anak\n"; 
    cout << "3. Keanggotaan Masyarakat Senior\n"; 
    cout << "4. Keluar Program\n\n"; 
    cout << "Masukan Pilihan Anda: "; 
    cin >> choice; 
    cout << fixed << showpoint << setprecision(2); 
 
    if (choice == 1) 
    { 
         cout << "Untuk berapa Bulan? "; 
         cin >> months; 
         charges = months * 40.00; 
         cout << "Total pembayaranya adalah: $" << charges << endl; 
    } 
    else if (choice == 2) 
    { 
         cout << "Untuk berapa Bulan? "; 
         cin >> months; 
         charges = months * 20.00; 
         cout << "Total pembayaranya adalah: $" << charges << endl; 
         } 
    else if (choice == 3) 

221
Bahasa Pemrograman Statement Kendali

    { 
         cout << "Untuk berapa Bulan? "; 
         cin >> months; 
         charges = months * 30.00; 
         cout << "Total pembayaranya adalah: $" << charges << endl; 
    } 
    else if (choice != 4) 
    { 
         cout << "Pilihan yang valid adalah antara 1 sampai 4\n"; 
         cout << "Program akan memilih lagi dari salah satu menu diatas\n"; 
    } 
    getch(); 
    return 0; 

Keluaran program diatas seperti dibawah ini:


Menu Anggota Klub Kesehatan 
 
1. Keanggotaa Standard Dewasa 
2. Keanggotaan Anak 
3. Keanggotaan Masyarakat Senior 
4. Keluar Program 
 
Masukan Pilihan Anda: 3 
Untuk berapa Bulan? 3 
Total pembayaranya adalah: $90.00 

Dalam program tersebut dimasukkan, maka akan ada pesan


memungkinkan pengguna yang tidak kesalahan yang dicetak. Kesalahan
valid dapat membuat pilihan. Jika ini dikenal sebagai masukan validasi
angka lain seperti 1, 2, 3, atau 4 (input validation).

5.14. Soal Latihan


Jawablah soal latihan dibawah ini dengan baik dan benar.
1. Apa yang dimaksud dengan statement
2. Sebutkan beberapa operator relasionaldalam bahasa c++
3. Jelaskan cara kerja pernyataan if pada bahasa c++
4. Apa perbedaan antara pernyataan if dangan if-else
5. Apa yang dimaksud dengan if-else majemuk
6. Apa yang dimaksud dengan nested if
7. Sebutkan beberapa operator logika
8. Tuliskan perintah yang digunakan oleh pernyataan switch

222
Prosedur dan Subroutin Bahasa Pemrorgraman

BAB 6
PROSEDUR DAN SUBROUTIN

6.1. Prosedur
6.2. Parameter Prosedur
6.3. Pemanggilan Prosedur
6.4. Sub Rutin
6.5. Sub Rutin Dalam Bahasa Pemrograman
6.6. Function yang Mengembalikan Nilai
6.7. Function yang Tidak Mengembalikan Nilai
6.8. Function Call Function
6.9. Call by Value dan Call by References
6.10. Parameter dengan Nilai Default
6.11. Overloading
6.12. Soal Latihan

 
 
6.1. Prosedur
Prosedur adalah sederetan  Ketika kentangnya terhidang, jadi
instruksi algoritmik yang diberi nama, sup, digoreng atau direbus saja ?
dan akan menghasilkan efek neto Maka kita harus membatasi dengan
yang terdefinisi. Prosedur jelas keadaan awal yang menjadi titik
menyatakan suatu aksi dalam konsep tolak mengupas kentang dan
algoritma yang dibicarakan pada keadaan akhir yang ingin dicapai
cerita “Mengupas kentang”. Dimana supaya dapat “merencanakan” efek
contoh ini dari aksi yang dilakukan neto yang diinginkan. Sehingga hal
pleh Ibu Tati yang mengupas kentang tersebut dapat ditentukan:
untuk mempersiapkan makan malam  Initial state (I.S. keadaan awal),
sebagai berikut. Pernyataan ini T0, adalah kentang sudah ada di
mencakup hal yang luas ruang kantong kentang, yang ditaruh di
lingkupnya, misalnya : rak di dapur, di mana ibu Tati akan
 Apakah kentangnya harus dibeli mengupasnya
dulu atau sudah ada di dapur ?  Final state (F.S. keadaan akhir),
 Apakah yang dimaksud dengan T1, kentang dalan keadaan
mengupas kentang untuk makan terkupas di panci, siap untuk
malam berarti sampai dengan dimasak dan kantong kentangnya
kentang terhidang ? harus dikembalikan ke rak lagi.

223
 
Bahasa Pemrograman Prosedur dan Subroutin

Pengandaian yang lain adalah penulisan spesifikasi : prosedur diberi


bahwa persediaan kentang di ibu nama, dan parameter formal (jika
selalu cukup untuk makan malam. ada) yang juga diberi nama dan
Penambahan kentang ke dapur di dijelaskan typenya.
luar tinjauan masalah ini. Ini adalah Secara sederhana, dapat
contoh bagaimana kita menentukan diartikan bahwa sebuah prosedur
batasan dari persoalan yang akan yang terdefinisi “disimpan” di tempat
diprogram. Suatu kejadian dapat lain, dan ketika “dipanggil” dengan
dipandang sebagai urut-urutan dari menyebutkan namanya “seakan-
beberapa kejadian, berarti dapat akan” teks yang tersimpan di tempat
diuraikan dalan beberapa (sub) aksi lain itu menggantikan teks
yang terjadi secara sekuensial. pemanggilan. Pada saat itu terjadi
Dengan sudut pandang ini makan asosiasi parameter (jika ada).
efek kumulatifnya sama dengan efek Dengan konsep ini, maka I.S dan F.S
neto dari seluruh kejadian. Dikatakan dari prosedurlah yang menjamin
bahwa kejadian tersebut dianggap bahwa eksekusi program akan
sebagai sequential process atau menghasilkan efek neto yang
disingkat proses. diharapkan. Jadi, setiap prosedur
Mendefinisikan (membuat harus :
spesifikasi) prosedur berarti  Didefinisikan (dibuat
menentukan nama prosedur serta spesifikasinya) dan dituliskan kode
parameternya (jika ada), dan programnya
mendefinisikan keadaan awal (Initial  Dipanggil, pada saat eksekusi oleh
State, I.S.) dan keadaan akhir (Final prosedur lain atau oleh program
State, F.S.) dari prosedur tersebut. utama
Prosedur didefinisikan (dituliskan
spesifikasinya) dalam kamus. Cara

6.2. Parameter Prosedur


Prosedur tanpa parameter prosedur disebut sebagai parameter
memanfaatkan nilai dari nama-nama aktual.
yang terdefinisi pada kamus global. Parameter formal adalah nama-
Pemakaiannya biasanya harus “hati- nama variabel (list nama) yang
hati”, apalagi jika teks program sudah dipakai dalam mendefinisikan
sangat besar dan implementasinya prosedur, dan membuat prosedur
menjadi banyak file. Prosedur tersebut dapat dieksekusi dengan
berparameter dirancang, agar nama-nama yang berbeda ketika
sepotong kode yang sama ketika dipanggil. Parameter formal adalah
eksekusi dilakukan, dapat dipakai list nama yang akan dipakai pada
untuk nama parameter yang bebeda- prosedur, yang nantinya akan
beda. Nama parameter yang diasosiasikan terhadap nama
dituliskan pada definisi/spesifikasi variabel lain pada saat pemanggilan.
prosedur disebut sebagai parameter Sesuai dengan ketentuan nilainya,
formal. Sedangkan parameter yang ada tiga type parameter formal:
dituliskan pada pemanggilan
224
 
Prosedur dan Subroutin Bahasa Pemrorgraman

 parameter Input, yaitu parameter disimpan pada nama parameter


yang diperlukan prosedur sebagai Output ini.
masukan untuk melakukan aksi parameter Input/Output, yaitu
yang efektif. parameter yang nilainya diperlukan
 parameter Output, yaitu parameter prosedur sebagai masukan untuk
yang nilainya akan dihasilkan oleh melakukan aksi, dan pada akhir
prosedur. Hasil nilai akan prosedur akan dihasilkan nilai yang
baru.

6.3. Pemanggilan Prosedur


Memakai, atau "memanggil" nilainya akan dihasilkan oleh
prosedur adalah menuliskan nama prosedur. Karena parameter
prosedur yang pernah didefinisikan, output menampung hasil, maka
dan memberikan harga-harga yang harus berupa nama, dan tidak
dibutuhkan oleh prosedur itu untuk boleh diberikan nilai saja.
dapat melaksanakan suatu aksi  parameter input/output harus
terdefinisi. Sebuah prosedur juga terdefinisi nilainya dan nilai baru
boleh "memakai" atau memanggil yang diperoleh karena eksekusi
prosedur. Pada saat pemanggilan prosedur akan dimanfaatkan oleh
terjadi “passing parameter”. deretan instruksi berikutnya.
Parameter aktual adalah nama- Seperti halnya parameter output,
nama informasi yang dipakai ketika maka paramteter aktual harus
prosedur itu dipakai ("dipanggil"). berupa nama.
Parameter aktual dapat berupa nama Pada saat eksekusi, terjadi
atau harga, tetapi harus berupa nama asosiasi nama parameter formal
jika parameter tersebut adalah dengan nama parameter aktual.
parameter Output (karena hasilnya Pada notasi algoritmik, asosiasi
akan disimpan dalam nama tersebut). dilakukan dengan cara “by position”.
Sesuai dengan jenis parameter Urutan nama pada parameter aktual
formal, parameter aktual pada saat akan diasosiasikan sesuai dengan
pemanggilan : urutan parameter formal. Karena itu,
 parameter input harus terdefinisi type harus kompatibel. Beberapa
nilainya (karena dibutuhkan oleh bahasa pemrograman, dapat
prosedur untuk menghasilkan dilakukan asosiasi dengan nama dan
nilai). Karena yang dibutuhkan memperbolehkan adanya nilai
untuk eksekusi hanya nilai, maka default. Beberapa bahasa
parameter input dapat digantikan pemrograman (Ada, C) juga
dengan suatu nilai tanpa memperbolehkan nama prosedur
menggunakan nama. yang sama tetapi parameternya
 parameter output tidak perlu berbeda (overloading).
terdefinisi nilainya, tetapi justru Prosedur dapat mempunyai
setelah pemanggilan prosedur kamus lokal, yaitu pendefinisan nama
akan dimanfaatkan oleh deretan yang dipakai dan hanya berlaku
instruksi berikutnya, karena dalam ruang lingkup prosedur

225
 
Bahasa Pemrograman Prosedur dan Subroutin

tersebut. Jika nama yang dipakai di memudahkan program untuk dibaca


dalam prosedur tidak terdefinisi oleh "manusia" karena kita tidak perlu
dalam list parameter formal atau terpaku pada detil kode prosedur
dalam kamus lokal, maka nama untuk mengerti efek neto yang
tersebut harus sudah terdefinisi pada dihasilkannya.
prosedur yang memakainya. Bahkan dalam beberapa hal,
Penulisan kamus lokal sama dengan pemrogram tidak perlu tahu sama
kamus global, yang berbeda adalah sekali "isi" atau kode dari prosedur
lingkup berlakunya nama yang dengan mengetahui spesifikasinya,
didefinisikan: beberapa bahasa pemrograman
 pada kamus "global", nama bahkan menyediakan prosedur
berlaku untuk program dan semua terdefinisi yang sering dipakai dalam
prosedur/fungsi yang didefinisikan. memrogram sehingga pemrogram
 pada kamus lokal, nama berlaku tidak perlu lagi menuliskan kodenya.
untuk prosedur/fungsi yang Prosedur berlaku untuk ruang lingkup
bersangkutan dan prosedur / (universe) tertentu, terutama untuk
fungsi yang didefinisikan di prosedur yang tidak mempunyai
dalamnya. parameter. Dalam dua bab berikut,
 nilai yang disimpan dalam nama yaitu Mesin Gambar dan Mesin
yang didefinisikan pada kamus Karakter, akan diberikan gambaran
lokal, hanya akan terdefinisi lebih jelas dan lengkap tentang
selama eksekusi prosedur, dan pendefinisian dan pemakaian
tidak dikenal lagi oleh prosedur karena keduanya adalah
pemanggilnya. mesin abstrak yang tertentu.
Program yang moduler adalah
program yang dibagi-bagi menjadi Contoh 1-Prosedur: VOLTAGE
modul-modul yang terdefinisi dengan Tuliskanlah program yang membaca
baik dalam bentuk prosedur- tahanan (Ohm) dan arus (Ampere),
prosedur. Setiap prosedur harus jelas kemudian menghitung tegangan yang
definisi dan ruang lingkupnya, supaya dihasilkan dan menuliskan hasilnya.
dapat dipanggil secara independent. Perhitungan tegangan harus
Pembagian program besar dalam dituliskan menjadi suatu prosedur
prosedur-prosedur akan bernama PROSES, supaya struktur
mempermudah pembagian kerja di program jelas: Input - Proses –
antara beberapa pemrogram. Output.
Penulisan prosedur juga akan

Input   : R : integer, tahanan (Ohm) dan A : integer, arus (Ampere) 
Proses   : menghitung V= R * A 
Output  : V : integer, tegangan (Volt) 

Pelajarilah dua buah solusi yang


diberikan berikut ini, dan berikan
komentar anda.

Solusi 1 : Prosedur tanpa parameter


226
 
Prosedur dan Subroutin Bahasa Pemrorgraman

Program VOLTAGE1
{Program yang membaca tahanan dan arus, menghitung Voltage dan 
mencetak hasil perhitungan} 
 
Kamus : 
R   : integer { tahanan dalam ohm} 
A   : integer { arus dalam ohm} 
V   : integer { tegangan dalam ohm} 

procedure PROSES1
{ Prosedur untuk "memproses" tahanan dan arus menjadi tegangan } 
 
Algoritma : 
input (R,Α) 
PROSES1 
output (V) 

Procedure PROSES1
{ I.S   : diberikan harga R dan A yang telah terdefinisi} 
{ FS   : memproses R dan A sehingga dihasilkan V yaitu tegangan dengan 
rumus   : V = R * A} 
Kamus lokal : 
 
Algoritma : 
V ← R * A 
 
Solusi 2 : Prosedur dengan parameter

Program VOLTAGE2
{Program yang membaca tahanan dan arus, menghitung Voltage dan 
mencetak hasil perhitungan} 
 
Kamus : 
R  : integer { tahanan dalam ohm} 
A   : integer { arus dalam ohm} 
V   : integer { tegangan dalam ohm} 

Procedure PROSES2
(Input : R,A : integer; Output V:integer) 
{ Prosedur untuk "memproses" tahanan R dan arus A menjadi 
tegangan V} 
 
Algoritma : 
input (R,Α) 

227
 
Bahasa Pemrograman Prosedur dan Subroutin

PROSES2 (R,A,V) 
output (V)
 
 
6.4. Sub Routin
Suatu program komputer program kecil. Program-program kecil
biasanya merupakan suatu sistem tersebut disebut dengan sub rutin.
besar yang terdiri dari sub sistem - Sub rutin dibagi menjadi dua macam,
sub sistem yang mempunyai tugas yaitu sub rutin yang mengembalikan
sendiri-sendiri, saling bekerja sama nilai dan sub rutin yang tidak
dan berinteraksi untuk mengembalikan nilai. Dalam Pascal
menyelesaikan suatu permasalahan. kedua sub rutin yang mengembalikan
Dengan adanya pembagian tugas nilai disebut dengan function,
oleh sub sistem – sub sistem ini sedangkan yang tidak
maka suatu permasalahan dapat mengembalikan nilai disebut dengan
diselesaikan dengan lebih cepat dan procedure. Tetapi untuk C++ dan
kesalahan-kesalahan yang mungkin Java, kedua sub rutin tersebut
terjadi selama proses penyelesaian dijadikan satu tetapi dapat diatur
masalah dapat dideteksi dan untuk dapat mengembalikan nilai
diketahui sedini mungkin, termasuk di maupun tidak mengembalikan nilai.
sub sistem mana kesalahannya Untuk C++, sub rutin tersebut
terjadi. ada dalam suatu function, sedangkan
Program komputer (terutama pada Java, sub rutin berbentuk suatu
yang komplek) juga sebaiknya method yang disebut dengan function
“dipecah-pecah” menjadi program- method.

int main() {  int fungsi_1() { 
  …….    ……. 
  fungsi_1();    return 0; 
…….  } 
  fungsi_2(); 
  ……. 
  return 0; 
int fungsi_2() { 

  ……. 
  return 0; 

Gambar 6.1.SubRutin

228
 
Prosedur dan Subroutin Bahasa Pemrorgraman

Baik C++ maupun Java terdapat sendiri oleh pemrogram. Sedangkan


dua macam fungsi, yaitu user-defined built-in function adalah fungsi yang
function dan built-in function. User- sudah ada atau sudah disediakan
defined function merupakan fungsi oleh kompiler dan siap digunakan
yang didefinisikan sendiri atau dibuat oleh pemrogram.
 
 
6.5. Sub Rutin dalam Bahasa Pemrograman
Bentuk umum sub rutin (function) sekali. Untuk fungsi yang tidak
pada C++ dan Java sangat mirip. mempunyai parameter merupakan
Untuk function yang mengembalikan fungsi yang nilainya tetap (tidak
nilai, setiap function harus didahului berubah). Sedangkan fungsi yang
oleh tipe data yang sesuai dengan mempunyai parameter nilai fungsinya
jenis data yang akan dikembalikan, dinamis (dapat berubah-ubah).
kecuali tipe data array. Setiap Parameter-parameter ini merupakan
function juga mempunyai daftar variabel-variabel yang harus
parameter dimana setiap parameter dideklarasikan sendiri-sendiri
dipisahkan dengan tanda koma (,). meskipun tipe datanya sama.
Parameter-parameter ini digunakan Bentuk umum dari function yang
untuk menerima data (nilai) dari mengembalikan nilai adalah sebagai
program yang memanggilnya. berikut
Kita dapat mendeklarasikan
banyak parameter atau tidak sama

tipe_data nama_fungsi(daftar_parameter) 

  isi dari fungsi 
  return<ekspresi> 

Perhatikan contoh progam function yang benar


int contoh(int a, int b) { 
   …….. 
   return(c); 

Sedangkan program yang menggunakan function salah adalah sebagai


berikut:
int contoh(int a, b) { 
   …….. 
   return(c); 

 
Setiap function mempunyai karena tugas yang harus
kode-kode program sendiri-sendiri diselesaikan oleh setiap function juga
229
 
Bahasa Pemrograman Prosedur dan Subroutin

berbeda-beda. Variabel-variabel yang dapat digunakan oleh semua function


digunakan dalam function disebut dan program utama).
dengan variabel lokal. Oleh karena Untuk dapat digunakan,
itu variabel tersebut hanya dapat function biasanya mempunyai
digunakan didalam function itu sendiri parameter-parameter yang
tidak bisa digunakan oleh function digunakan untuk menerima masukan
lain atau program utama. dari program yang memanggilnya.
Variabel lokal ini berfungsi pada Parameter-parameter ini disebut
saat function tersebut aktif dan akan dengan parameter formal. Parameter
hilang (dihapus) jika function sudah formal ini termasuk dalam variabel
tidak aktif lagi atau setelah function lokal yang akan berfungsi pada saat
selesai melakukan tugasnya (kecuali function aktif dan akan dihapus pada
variabel yang digunakan dalam saat function selesai melakukan
function adalah variabel global yang tugasnya. Perhatikan contoh function
dalam bahasa C++ berikut ini:

/* function akan menghasilkan nilai 1 jika c sama dengan s, sebaliknya bernilai 0 jika c 
tidak sama dengan s */ 
int cek(char s, char c) { 
   if(s==c) return 1; 
   return 0; 

 
Function cek() mempunyai dua dengan variabel s. Jika sama maka
buah parameter formal, yaitu s dan c function cek() akan bernilai 1,
yang mempunyai tipe data yang sebaliknya jika tidak maka akan
sama, char. Function cek() bernilai 0. Variabel s dan c ini
merupakan function yang merupakan variabel lokal yang hanya
mengembalikan nilai sehingga dia dapat digunakan dalam function cek()
harus mempunyai tipe data dimana saja, tidak bisa digunakan oleh
tipe data-nya dalam hal ini adalah function atau program lain.
integer. Permasalahan yang sama untuk Java
Function cek() ini bertugas untuk adalah sebagai berikut:
memeriksa apakah variabel c sama

class ricek { 
   public int cek(char s, char c) { 
     if(s==c) return 1; 
     return 0; 
   } 

 
Telah disebutkan sebelumnya class tersebut dimungkinkan untuk
bahwa sub rutin dalam Java mempunyai satu atau lebih function
berbentuk class dimana didalam method. Class ricek() ini dapat

230
 
Prosedur dan Subroutin Bahasa Pemrorgraman

digunakan oleh class lain, dalam hal function method cek(). Berikut ini
ini untuk mengecek suatu karakter adalah kode lengkap dari kedua
karena class ricek() mempunyai program di atas
.
Perhatikan Program dalam bahasa C++ :
#include <iostream> 
using namespace std; 
 
int cek(char s, char c) { 
   if(s==c) return 1; 
   return 0; 

int main(void) { 
   char a,b; 
   a = 'a'; 
   b = 'a'; 
   cout << cek(a,b) << endl; 
   return 0; 

Keluaran program adalah :



 
Dari kode program C++ di atas yaitu pengecekan apakah parameter
terlihat bahwa function cek() formal s sama dengan parameter
dipanggil melalui argumen pada formal c. Jika sama maka function
program utama (main()) dimana cek() akan bernilai 1, sebaliknya jika
argumen tersebut mempunyai tidak sama maka function cek() akan
variabel masukan untuk function bernilai 0. Nilai dari function cek() ini
cek() yaitu variabel a dan b. kemudian langsung dicetak ke layar
Variabel a dan b ini kemudian oleh program utama. Kode program
disalin oleh parameter formal function untuk bahasa Java dari
cek() yaitu s dan c. Parameter formal permasalahan yang sama adalah:
ini kemudian diproses lebih lanjut

class ricek { 
   public int cek(char s, char c) { 
     if(s==c) return 1; 
     return 0; 
   } 

class ricekApp { 
   public static void main 

231
 
Bahasa Pemrograman Prosedur dan Subroutin

(String[ ] args) { 
     ricek ck = new ricek(); 
     char a='a',b='b'; 
     System.out.println(ck.cek(a,b)); 
   } 

Keluaran program adalah :



 
Dalam Java, class ricek() yang Contoh di atas merupakan
mempunyai function method cek() contoh function dimana function
tidak bisa langsung kita gunakan (kita tersebut mempunyai parameter,
panggil), tetapi harus dibuat / dalam hal ini parameter s dan c yang
diciptakan dahulu obyek dari class bertipe char. Function cek() tersebut
ricek() seperti yang terlihat pada baris nilainya akan berubah-ubah sesuai
ke-9 dimana obyek baru dari class dengan nilai masukannya. Untuk
ricek() dalam class ricekApp() diberi contoh di atas nilai function dari cek()
nama ck. Dengan obyek ck inilah kita cuma ada dua, yaitu 0 atau 1. Berikut
dapat mengakses method yang ini adalah contoh function yang tidak
dipunyai oleh class ricek() karena mempunyai parameter sama sekali
secara otomatis obyek ck juga sehingga nilai function-nya tidak akan
mempunyai method cek() yang berubah-ubah seperti halnya pada
dimiliki oleh class ricek(). contoh sebelumnya.

Contoh program dalam bahasa C++ :


#include <iostream> 
using namespace std; 
int fpb(){ 
   int a=24,b=18,hasil; 
   int r = a % b; 
   if (r==0) hasil = b; 
   else { 
     while(r!=0) { 
       a = b; 
       b = r; 
       r = a % b; 
       hasil = b;   
     } 
   } 
   return(hasil); 

void main() { 

232
 
Prosedur dan Subroutin Bahasa Pemrorgraman

   cout << "FPB‐nya = "; 
   cout << fpb() <<endl; 

Keluaran programnya adalah :


FPB‐nya = 6 

Contoh program dalam bahasa Java :


1. class hitung { 
2.    public int fpb(){ 
3.      int a=78,b=24,hasil=0; 
4.      int r = a % b; 
5.      if (r==0) hasil = b; 
6.      else { 
7.        while(r!=0) { 
8.          a = b; 
9.          b = r; 
10.          r = a % b; 
11.          hasil = b;   
12.        } 
13.      } 
14.      return hasil; 
15.    } 
16. } 
17. class fpbApp { 
18.    public static void main(String[ ] args) { 
19.      hitung sekutu = new hitung(); 
20.      System.out.println("Bilangan terbesarnya="+ sekutu.fpb()); 
21.    } 
22. } 

Keluaran programnya adalah :


Bilangan terbesarnya = 6 

Nilai dari function fpb() di atas untuk bahasa Java nilai method fpb() dari
bahasa C++ pasti 6 karena nilai dari class hitung() juga pasti tetap, yaitu 6
a dan b telah ditetapkan besarnya, karena nilai a dan b juga telah
yaitu 24 dan 18. Sedangkan untuk ditentukan (a=78 dan b=24).

6.6. Function yang Mengembalikan Nilai


Yang dimaksud dengan function oleh suatu program (argumen) maka
yang mengembalikan nilai adalah argumen tersebut akan memperoleh
suatu sub rutin yang bila dipanggil nilai balikan dari function tersebut.

233
 
Bahasa Pemrograman Prosedur dan Subroutin

Atau dengan kata lain, suatu function sehingga tipe data-nya juga harus
yang mempunyai nilai. integer.
Karena mempunyai nilai inilah Dengan demikian dapat
maka suatu function yang disimpulkan bahwa ciri dari function
mengembalikan nilai harus yang mengembalikan nilai adalah :
mempunyai tipe data sesuai dengan  Function tersebut mempunyai tipe
nilai yang dihasilkannya. Perhatikan data.
baris ke-2 pada function cek() pada  Diakhiri dengan klausa return.
contoh sebelumnya. Function cek() Berikut contoh program C++
digunakan menghasilkan nilai integer yang menggunakan function dimana
(lihat baris ke-3 dan ke-4) yaitu 0 function-nya dapat mengembalikan
atau 1 (return 0 dan return 1), nilai

1. #include <iostream> 
2. using namespace std; 
3. int fpb(int a, int b) { 
4.    int hasil; 
5.    int r = a % b; 
6.    if (r==0) hasil = b; 
7.    else { 
8.      while(r!=0) { 
9.        a = b;  b = r; 
10.        r = a % b; 
11.        hasil = b;   
12.      } 
13.    } 
14.    return(hasil); 
15. } 
16. void main() { 
17.    int m,n; 
18.    do { 
19.      cout << "Bilangan pertama = "; 
20.      cin >> m; 
21.      cout << "Bilangan kedua   = "; 
22.      cin >> n; 
23.    } while (m < n); 
24.    cout << "FPB‐nya = " << fpb(m,n)<<endl; 
25. } 

Keluaran programnya :
Biangan pertama  = 24 
Bilangan kedua    = 20 
FPB‐nya    = 4 

234
 
Prosedur dan Subroutin Bahasa Pemrorgraman

Baris ke-3 sampai dengan ke-16 data integer juga, yaitu a dan b (baris
merupakan sub rutin (function) yang ke-3). Function tersebut juga
bernama fpb(). Sedangkan baris ke- mempunyai variabel hasil yang
17 sampai dengan ke-26 merupakan bertipe data integer (baris ke-4).
program utamanya. Program utama Function fpb() ini nilainya akan sama
ini akan memanggil function fpb() dengan variabel hasil (baris ke-15).
melalui suatu argumen (lihat baris ke- Variabel a, b, dan hasil
25). Function fpb() bertugas untuk merupakan variabel lokal dimana
melakukan pencarian faktor ketiga variabel ini hanya berfungsi
persekutuan besar dari dua buah pada function fpb() saja. Variabel a
bilangan yang dimasukkan di dan b bertugas untuk menerima data
program utama (lihat baris ke-19 yang dikirim oleh program lain yang
sampai dengan ke-24). Setelah memanggilnya sedangkan variabel
selesai melakukan tugasnya, maka hasil digunakan untuk menyimpan
function fpb() akan mempunyai nilai data hasil pencarian faktor
yang langsung ditampilkan pada persekutuan besar (baris ke-6 dan
program utama. baris ke-12). Untuk permasalahan
Function fpb() mempunyai tipe yang sama dengan menggunakan
data integer dan mempunyai dua bahasa Java adalah sebagai berikut:
buah parameter formal yang bertipe

1. import java.util.Scanner; 
2. import java.io.*; 
3. class hitung { 
4.    public int fpb(int a, int b) { 
5.    int hasil=0; 
6.    int r = a % b; 
7.    if (r==0) hasil = b; 
8.    else { 
9.      while(r!=0) { 
10.        a = b; 
11.        b = r; 
12.        r = a % b; 
13.        hasil = b; 
14.      } 
15.    } 
16.    return hasil; 
17.    } 
18. } 
19. class sekutuBesar { 
20.    public static void main(String[ ] args) { 
21.      hitung sekutu = new hitung(); 
22.      int m,n; 

235
 
Bahasa Pemrograman Prosedur dan Subroutin

23.      Scanner input = new Scanner(System.in); 
24.      do { 
25.        System.out.print("Bilangan pertama = "); 
26.        m = input.nextInt(); 
27.        System.out.print("Bilangan kedua   = "); 
28.        n = input.nextInt(); 
29.      } while(m < n); 
30.      System.out.println("Bilanganterbesarnya="+sekutu.fpb(m,n)); 
31.    } 
32. } 

Keluaran programnya :
Bilangan pertama  = 36 
Bilangan kedua    = 28 
Bilangan terbesarnya  = 4 

Pada program Java di atas Class hitung() “dipanggil” oleh


terlihat bahwa pencarian faktor program utamanya yaitu Class
persekutuan besar-nya dilakukan sekutuBesar().
oleh Class hitung(). Class hitung() ini Program Java tersebut jika di-
mempunyai method fpb(), yang compile akan menghasilkan dua
merupakan function fpb() pada C++, buah class, yaitu hitung.class dan
dan bertugas untuk melakukan sekutuBesar.class dimana program
pencarian faktor persekutuan besar. sekutuBesar.class akan memanggil
Class sekutuBesar() kemudian hitung.class untuk melakukan
membuat obyek baru dari Class perhitungan faktor persekutuan besar
hitung() dengan nama sekutu (lihat dari dua buah bilangan.
baris ke-21). Atau dengan kata lain

6.7. Function yang Tidak Mengembalikan Nilai


Untuk sub rutin (function) yang mengembalikan nilai baik pada
tidak mengembalikan nilai bentuknya bahasa C++ maupun bahasa Java.
sangat mirip dengan function yang Untuk lebih jelasnya, perhatikan
mengembalikan nilai. Perbedaannya program C++ berikut ini untuk
adalah penggunaan kata kunci atau permasalahan yang sama, yaitu
klausa void pada function yang tidak mencari faktor persekutuan besar.

1. #include <iostream> 
2. using namespace std; 
3. void fpb(int a, int b) { 
4.    int hasil; 
5.    int r = a % b; 
6.    if (r==0) hasil = b; 
236
 
Prosedur dan Subroutin Bahasa Pemrorgraman

7.    else { 
8.      while(r!=0) { 
9.        a = b; 
10.        b = r; 
11.        r = a % b; 
12.        hasil = b; 
13.      } 
14.    } 
15.    cout << "FPB‐nya = " << hasil <<endl; 
16. } 
17. void main() { 
18.    int m,n; 
19.    do { 
20.      cout << "Bilangan pertama = "; 
21.      cin >> m; 
22.      cout << "Bilangan kedua   = "; 
23.      cin >> n; 
24.    } while (m < n); 
25.    fpb(m,n); 
26. } 

Keluaran programnya :
Bilangan pertama  = 30 
Bilangan kedua    = 18 
FPB‐nya    = 6 

Program di atas, function fpb() bilangan tidak dikembalikan ke


(baris ke-3 sampai dengan baris ke- program utama yang memanggilnya
16) tidak mempunyai tipe data dan tetapi ditampilkan sendiri oleh
klausa return diakhir program, function tersebut (baris ke-15).
sehingga dapat kita simpulkan bahwa Dengan argumen pada program
function fpb() bukan merupakan utama yang memanggil fuction fpb()
suatu function yang mengembalikan (baris ke-25) tidak menghasilkan
nilai. Sebaliknya, function fpb() suatu nilai seperti halnya pada
diawali dengan klausa void sehingga contoh sebelumnya (function yang
function tersebut merupakan suatu mengembalikan nilai). Untuk contoh
function yang tidak mengembalikan function yang tidak mengembalikan
nilai. nilai pada bahasa Java dengan
Hasil perhitungan faktor permasalahan yang sama adalah
persekutuan besar dari dua buah sebagai berikut:

 
1. import java.util.Scanner; 
2. import java.io.*; 

237
 
Bahasa Pemrograman Prosedur dan Subroutin

3. class hitung { 
4.    public void fpb(int a, int b) { 
5.      int hasil=0; 
6.    int r = a % b; 
7.    if (r==0) hasil = b; 
8.      else { 
9.      while(r!=0) { 
10.        a = b; 
11.        b = r; 
12.        r = a % b; 
13.        hasil = b; 
14.        } 
15.      } 
16.      System.out.println("Bilangan terbesarnya  = " + hasil); 
17.    } 
18. } 
19. class sekutuBesar { 
20.    public static void main(String[ ] args) { 
21.      hitung sekutu = new hitung(); 
22.      int m,n; 
23.      Scanner input = new Scanner(System.in); 
24.      do { 
25.        System.out.print("Bilangan pertama = "); 
26.        m = input.nextInt(); 
27.        System.out.print("Bilangan kedua   = "); 
28.        n = input.nextInt(); 
29.      } while(m < n); 
30.      sekutu.fpb(m,n); 
31.    } 
32.} 

Keluaran programnya :
Bilangan pertama  = 44 
Bilangan kedua    = 36 
Bilangan terbesarnya  = 4 
 
Sama seperti pada bahasa C++, Hasil perhitungan faktor persekutuan
class yang mempunyai function besar oleh class hitung() juga tidak
method untuk yang tidak ditampilkan oleh class sekutuBesar()
mengembalikan nilai pada bahasa yang memanggilnya (baris ke-30),
Java juga tidak mempunyai tipe data, tetapi oleh class hitung() itu sendiri
tetapi diawali dengan klausa void (baris ke-16).
(baris ke-4).
 
238
 
Prosedur dan Subroutin Bahasa Pemrorgraman

6.8. Function Call Function


Sub rutin dalam suatu program program utama saja tetapi antar sub
tidak hanya dapat dipanggil oleh rutin juga dapat saling memanggil.

int fungsi_1() {  int fungsi_3() { 
int main() {    …….    ……. 
  …….    fungsi_3();    fungsi_4(); 
  fungsi_1();    …….    return 0; 
  …….    return 0;  }  int fungsi_4() { 
  fungsi_2();  }    ……. 
  …….    return 0; 
  return 0;  } 
}  int fungsi_2() { 
  ……. 
  return 0; 

Gambar 6.2. Sub rutin yang tidak hanya dipanggil oleh program utama

Berikut adalah contoh sub rutin yang memanggil sub rutin lainnya.

1. #include <iostream> 
2. using namespace std; 
3. void fpb(int a, int b){ 
4.    int hasil; 
5.    int r = a % b; 
6.    if (r==0) hasil = b; 
7.    else { 
8.      while(r!=0) { 
9.        a = b; 
10.        b = r; 
11.        r = a % b; 
12.        hasil = b; 
13.      } 
14.    } 
15.    cout << "FPB‐nya = " << hasil <<endl; 
16. } 
17. void input_data(){ 

239
 
Bahasa Pemrograman Prosedur dan Subroutin

18.    int m,n; 
19.    do { 
20.      cout << "Bilangan pertama = "; 
21.      cin >> m; 
22.      cout << "Bilangan kedua   = "; 
23.      cin >> n; 
24.   } while (m < n); 
25.    fpb(m,n); 
26. } 
27. void main() { 
28.    input_data(); 
29. } 

Keluaran programnya adalah :


Bilangan  pertama   = 56 
Bilangan kedua    = 24 
FPB‐nya     = 8 

Program di atas mempunyai dua function lain yaitu function fpb() (baris
buah function, yaitu function fpb() dan ke-25) setelah user memasukkan
function input_data(). Pertama kali data untuk bilangan pertama dan
function yang dipanggil oleh program bilangan kedua. Sedangkan kode
utama adalah function input_data() program dalam bahasa Java untuk
(baris ke-28). Kemudian function permasalahan yang sama adalah:
input_data() melakukan pemanggilan

1. import java.util.Scanner; 
2. import java.io.*; 
3. class hitung { 
4.    public void fpb(int a, int b){ 
5.      int hasil=0; 
6.      int r = a % b; 
7.      if (r==0) hasil = b; 
8.      else { 
9.        while(r!=0) { 
10.          a = b; 
11.          b = r; 
12.          r = a % b; 
13.          hasil = b; 
14.        } 
15.      } 
16.      System.out.println("Bilangan terbesarnya  = " + hasil); 
17.    } 

240
 
Prosedur dan Subroutin Bahasa Pemrorgraman

18. } 
19. class input_data { 
20.    public void data_input() { 
21.      hitung sekutu = new hitung(); 
22.      int m,n; 
23.      Scanner input = new Scanner(System.in); 
24.      do { 
25.        System.out.print("Bilangan pertama = "); 
26.        m = input.nextInt(); 
27.        System.out.print("Bilangan kedua   = "); 
28.        n = input.nextInt(); 
29.      } while(m < n); 
30.      sekutu.fpb(m,n); 
31.    } 
32. } 
33. class sekutuBesar { 
34.    public static void main(String[ ] args) { 
35.      input_data masukan = new input_data(); 
36.      masukan.data_input(); 
37.    } 
38. } 

Keluaran programnya adalah :


Bilangan  pertama   =76 
Bilangan kedua    =18 
Bilangan terbesarnya  = 2 
 
 
6.9. Call by Value dan Call by References
Ada dua cara bagaimana suatu Sebaliknya untuk call by
argumen dalam suatu program dapat reference yang disalin bulan
memanggil sub rutin (function), yaitu nilainya tetapi alamat memori
call by value dan call by reference. yang menyimpan nilai tersebut
Yang dimaksud dengan call by value sehingga jika terjadi perubahan-
adalah metode yang menyalin data
(nilai) dari argumen yang memanggil
perubahan nilai pada parameter
function ke parameter dari function function, maka secara otomatis
tersebut. Akibatnya jika ada nilai argumennya juga akan ikut
perubahan nilai pada parameter berubah. Untuk lebih jelasnya,
function tidak akan berpengaruh perhatikan contoh call by value
pada nilai aslinya (nilai yang ada dengan C++ berikut ini:
pada argumen program yang
memanggil function tersebut).

241
 
Bahasa Pemrograman Prosedur dan Subroutin

1. #include <iostream> 
2. using namespace std; 
3. int sqr(int x) { 
4.    x = x*x; 
5.    return(x); 
6. } 
7. int main(void) { 
8.    int t=10; 
9.    cout << sqr(t) << ", " << t <<endl; 
10.    return 0; 
11. } 

Keluaran programnya adalah :


100, 10 
 
Nilai argumen sqr() pada program yang memanggilnya (baris
program utama yaitu t (bernilai 10) ke-9). Akan tetapi nilai t, yang juga
disalin ke parameter x function ditampilkan oleh program utama
sqr(). Didalam function sqr(), nilai x (bariske-9), tetap 10. Keluaran
dirubah (x=x*x) sehingga function program ini adalah 100, 10 dimana
sqr() bernilai 100. Nilai function 100 adalah nilai dari function fpb()
sqr() ini langsung ditampilkan oleh dan 10 adalah nilai variabel t.

Nilai awal  Nilai variabel t disalin ke 
t = 10  parameter fungsi sqr() 
x = 10 

Pemanggilan kembali  Proses di function 
variabel t  sqr() 
t = 10  x = 100 atau 
sqr() =100 

Gambar 6.3. call by value

Untuk permasalahan yang sama dalam bahasa Java adalah sebagai berikut :

1. import java.io.*; 
2. class kuadrat { 

242
 
Prosedur dan Subroutin Bahasa Pemrorgraman

3.    public int sqr(int x) { 
4.      x = x*x; 
5.      return(x); 
6.    } 
7. } 
8. class power { 
9.    public static void main(String[ ] args) { 
10.      kuadrat a = new kuadrat(); 
11.      int t=10; 
12.      System.out.println(a.sqr(t) + ", " + t); 
13.    } 
14. } 

Keluaran programnya adalah :


100, 10 

Untuk call by reference, tipe data Untuk bahasa Java tidak


yang digunakan adalah tipe data menggunakan call by reference
pointer karena yang disalin adalah karena tidak ada pointer dalam
alamat dari memori dimana data bahasa Java. Contoh call by
disimpan (pembahasan mengenai reference (dengan menggunakan
pointer ini ada di bab tersendiri). bahasa C++) adalah sebagai berikut:

1. #include <iostream> 
2. using namespace std; 
3. void tukar(int *x, int *y) { 
4.    int temp; 
5.    temp = *x; 
6.    *x = *y; 
7.    *y = temp;  
8. } 
9. int main(void) { 
10.    int i, j; 
11.    i = 10; 
12.    j = 20; 
13.    cout << "Mula‐mula : " << endl; 
14.    cout << "Nilai i : " << i << endl; 
15.    cout << "Nilai j : " << j << endl; 
16.    tukar(&i, &j); 
17.    cout << endl << "Setelah ditukar : "   << endl; 
18.    cout << "Nilai i : " << i << endl; 
19.    cout << "Nilai j : " << j << endl; 
20.    return 0; 
21. } 
243
 
Bahasa Pemrograman Prosedur dan Subroutin

Tanda * pada variabel di function tukar() merupakan variabel pointer.

Keluaran dari program di atas adalah :


Mula‐mula : 
Nilai I  : 10 
Nilai j  : 20 
 
Setelah ditukar : 
Nilai I  : 20 
Nilai j  : 10 

Baris ke-14 dan 15, digunakan dan ke-19). Ternyata variabel i dan j
untuk menampilkan nilai dari variabel telah tertukar. Hal ini terjadi karena
i dan j yang nilainya masing-masing pada function tukar() menyalin alamat
10 dan 20. Setelah dilakukan memori yang menyimpan variabel i
penukaran dengan memanggil dan j dan kemudian menukar isinya
function tukar() pada baris ke-16, sehingga jika variabel i dan j jika
program kemudian memanggil dipanggil nilainya akan berubah
kembali variabel i dan j (baris ke-18 karena isinya telah ditukar.

Nilai awal  Alamat memori yang 
i = 10, j=20  menyimpan nilai dari variabel x 
dan y disalin ke parameter 
fungsi tukar() 
x = 10, y=20

Pemanggilan kembali  Proses penukaran di 
variabel i dan j  function tukar() 
i = 20, j=10  x = 20, y =10 

Gambar 6.4. Call by reference

6.10. Parameter dengan Nilai Default


Nilai parameter dalam suatu diberikan secara default oleh function
function C++ dapat kita beri nilai jika parameter dari argumen yang
default, yaitu suatu nilai yang memanggil function tersebut tidak

244
 
Prosedur dan Subroutin Bahasa Pemrorgraman

kita berikan. Untuk lebih jelasnya perhatikan contoh berikut ini:

1. #include <iostream> 
2. using namespace std; 
3. double luas_segi3(int alas, int tinggi=10){ 
4.    return(0.5 * alas * tinggi); 
5. } 
6. void main() { 
7.    int a=15,t=20; 
8.    cout << "Luas segitiga = "; 
9.    cout << luas_segi3(a,t) <<endl; 
10.    cout << endl; 
11.    cout << "Luas segitiga = "; 
12.    cout << luas_segi3(a) <<endl; 
13. } 

Keluaran programnya adalah :


Luas segitiga  = 150 
Luas segitiga  = 75 
 
Program di atas mempunyai satu function luas_segi3() masing-masing
buah function yaitu function adalah 15 dan 20. Dengan demikian
luas_segi3() dimana function tersebut function luas_segi3() akan bernilai
mempunyai dua buah parameter 150.
formal yaitu alas dan tinggi. Akan tetapi untuk argumen baris
Parameter alas tidak mempunyai nilai ke-12 pada program utama terlihat
default, tetapi untuk parameter tinggi bahwa argumen tersebut tidak
mempunyai nilai default, yaitu 10. menyertakan variabel t, tetapi hanya
Program utama dari program menyertakan variabel a. Sehingga
tersebut telah menentukan bahwa ketika argumen tersebut dijalankan
nilai dari variabel a yang nantinya maka hanya parameter alas pada
digunakan sebagai variabel masukan function luas_segi3() saja yang
untuk parameter alas dari function menerima masukan dari argumen
luas_segi3() adalah 15. Sedangkan tersebut. Sedangkan untuk
variabel t yang nantinya digunakan parameter tinggi tidak memperoleh
sebagai variabel masukan untuk masukan. Akan tetapi karena
parameter tinggi dari function parameter tinggi mempunyai nilai
luas_segi3() adalah 20. Sehingga default 10, maka nilai variabel tinggi
ketika argumen program utama yang yang digunakan untuk menghitung
memanggil function luas_segi3() luas segitiga adalah 10. Dengan
pada baris ke-9 dijalankan, maka nilai demikian nilai dari function
dari parameter alas dan tinggi pada luas_segi3() adalah 75.
 
 
 
245
 
Bahasa Pemrograman Prosedur dan Subroutin

6.11. Overloading
Overloading adalah function- 2. Function tersebut mempunyai
function yang ada dalam suatu jumlah parameter formal yang
program dimana function-function sama tetapi tipe data yang
tersebut mempunyai nama yang berbeda.
sama tetapi parameter formal-nya 3. Function-function tersebut
berbeda-beda antara yang satu mempunyai jumlah parameter
dengan yang lainnya. Ada tiga jenis formal yang berbeda dan tipe
overloading, yaitu: data dari parameter formal
1. Function tersebut mempunyai tersebut juga berbeda.
jumlah parameter formal yang Berikut ini diberikan contoh untuk
berbeda tetapi tipe data-nya function-function yang mempunyai
sama. jumlah parameter formal yang
berbeda tetapi tipe data-nya sama.

Untuk bahasa C++


1. #include <iostream> 
2. using namespace std; 
3. void luas_segi3(int alas){ 
4.    int tinggi=10; 
5.    cout << "Luas segitiga 1 = "  
6.    cout << (0.5 * alas * tinggi) << endl; 
7. } 
8. void luas_segi3(int alas,int tinggi){ 
9.    cout << "Luas segitiga 2 = "  
10.    cout << (0.5 * alas * tinggi) << endl; 
11. } 
12. void luas_segi3(int alas, int tinggi,int bagi){ 
13.    cout << "Luas segitiga 2 bagi "  
14.    cout << bagi << " = "  
15.    cout << (0.5 * alas * tinggi)/bagi  
16.    cout << endl; 
17. } 
18. void main() { 
19.    luas_segi3(10); 
20.    luas_segi3(10,15); 
21.    luas_segi3(10,15,3); 
22. } 

Keluaran programnya adalah :


Luas segitiga 1    = 150 
Luas segitiga 2    = 75 
Luas segitiga 2 bagi  3  = 25 

246
 
Prosedur dan Subroutin Bahasa Pemrorgraman

Program di atas mempunyai tiga pertama (baris ke-19) hanya


buah function yang mempunyai nama mempunyai satu variabel masukan
sama yaitu luas_segi3(). Function untuk function, argumen kedua (baris
yang pertama (baris ke-3) hanya ke-20) mempunyai dua buah variabel
mempunyai satu buah parameter masukan, dan argumen terakhir
formal yaitu alas dengan tipe data (baris ke-21) mempunyai tiga buah
integer. Sedangkan function yang variabel masukan.
kedua (baris ke-8) mempunyai dua C++ secara otomatis akan
buah parameter formal alas dan mengarahkan argumen pertama
tinggi dimana keduanya bertipe data kepada function yang pertama,
integer. Function yang terakhir (baris argumen kedua kepada function yang
ke-12) mempunyai tiga buah kedua, dan argumen ketiga kepada
parameter formal yaitu alas, tinggi, function yang ketiga, sesuai dengan
dan bagi yang semuanya bertipe data variabel masukan yang dipunyai oleh
yang sama, yaitu integer. masing-masing argumen. Sedangkan
Pada program utama, terdapat untuk bahasa Java:
tiga buah argumen dimana argumen

1. class hitung { 
2.    public void luas_segi3(int alas){ 
3.    int tinggi=10; 
4.    double luas=0.5*alas*tinggi; 
5.    System.out.println("Luas segitiga 1 = " + luas); 
6.    } 
7.    public void luas_segi3(int alas,int tinggi){ 
8.    double luas=0.5*alas*tinggi; 
9.    System.out.println("Luas segitiga 2 = " + luas); 
10.    } 
11.    public void luas_segi3(int alas,  int tinggi,int bagi){ 
12.    double luas=(0.5*alas*tinggi)/bagi; 
13.    System.out.println("Luas segitiga 2 dibagi " + bagi + " = " + luas); 
14.    } 
15. } 
16. class overload1 { 
17.    public static void main(String[ ] args) { 
18.      hitung sekutu = new hitung(); 
19.      sekutu.luas_segi3(10); 
20.      sekutu.luas_segi3(10,15); 
21.      sekutu.luas_segi3(10,15,3); 
22.    } 
23. } 

247
 
Bahasa Pemrograman Prosedur dan Subroutin

Keluaran programnya adalah :


Luas segitiga 1    = 150 
Luas segitiga 2    = 75 
Luas segitiga 2 bagi  3  = 25.0 

Sedangkan contoh untuk function- tipe data-nya berbeda adalah seperti


function yang mempunyai jumlah berikut. Untuk bahasa C++:
parameter formal yang sama tetapi

1. #include <iostream> 
2. using namespace std; 
3. void luas_segi3(int alas){ 
4.    int tinggi=10; 
5.    cout << "Luas segitiga 1 = " << (0.5 * alas * tinggi) << endl; 
6. } 
7. void luas_segi3(char* alas){ 
8.    cout << alas << endl; 
9. } 
10. void main() { 
11.    luas_segi3(10); 
12.    luas_segi3("Belajar pemrograman"); 
13. } 

Keluaran programnya adalah :


Luas segitiga 1 = 150 
Belajar pemrograman 

Program di atas mempunyai dua (baris ke-11) akan diarahkan kepada


buah function yaitu luas_segi3() function pertama pula (baris ke-3)
dimana setiap function mempunyai karena tipe data dari variabel
satu buah parameter formal tetapi masukan sama dengan parameter
tipe datanya berbeda. Function yang formal dari function yang pertama,
pertama parameter formalnya yaitu integer.
mempunyai tipe data integer, dan Sedangkan untuk argumen
function kedua mempunyai kedua (baris ke-12) akan diarahkan
parameter formal dengan tipe data kepada function kedua (baris ke-7)
pointer char. karena tipe data dari variabel
Sama seperti sebelumnya, C++ masukan sama dengan parameter
juga secara otomatis akan formal dari function yang kedua, yaitu
mengarahkan argumen yang char. Untuk bahasa Java dengan
memanggil function pada program permasalahan yang sama adalah
tersebut kepada function yang sebagai berikut:
berkesesuaian. Argumen pertama

248
 
Prosedur dan Subroutin Bahasa Pemrorgraman

1. class hitung { 
2.    public void luas_segi3(int alas){ 
3.    int tinggi=10; 
4.    double luas=0.5*alas*tinggi; 
5.    System.out.println("Luas segitiga 1 = " + luas); 
6.    } 
7.    public void luas_segi3(String alas){ 
8.    System.out.println(alas); 
9.    } 
10. } 
11. class overload2 { 
12.    public static void main(String[ ] args) { 
13.      hitung sekutu = new hitung(); 
14.      sekutu.luas_segi3(10); 
15.      sekutu.luas_segi3("Belajar pemrograman"); 
16.    } 
17. } 

Keluaran programnya adalah :


Luas segitiga 1 = 50.0 
Belajar pemrograman 
 
Contoh untuk function-function yang yang berbeda dan tipe data yang
mempunyai jumlah parameter formal berbeda pula adalah seperti berikut:

Untuk bahasa C++ :


1. #include <iostream> 
2. using namespace std; 
3. void luas_segi3(int alas){ 
4.    int tinggi=10; 
5.    cout << "Luas segitiga 1 = "  
6.    cout << (0.5 * alas * tinggi) << endl; 
7. } 
8. void luas_segi3(char* alas){ 
9.    cout << alas << endl; 
10. } 
11. void luas_segi3(char* alas,int data){ 
12.    cout << alas << " : " << endl; 
13.    cout << "Pangkat dua dari "  
14.    cout << data << " adalah "  
15.    cout << (data*data) << endl; 
16. } 
17. void main() { 
18.    luas_segi3(10); 
249
 
Bahasa Pemrograman Prosedur dan Subroutin

19.    luas_segi3("Belajar pemrograman"); 
20.    luas_segi3("Belajar pemrograman lagi",3); 
21. } 

Keluaran programnya adalah :


Luas segitiga 1   = 150 
Belajar pemrograman 
Belajar pemrograman lagi : 
Pangkat dua dari 3 adalah 9 
 
Program di atas mempunyai tiga Sama dengan sebelumnya, C++
buah function yang mempunyai nama secara otomatis juga akan
yang sama, yaitu luas_segi3(). mengarahkan argumen yang
Masing-masing function mempunyai memanggil function-function tersebut
jumlah parameter formal yang sesuai dengan jumlah variabel
berbeda dan tipe data dari parameter masukan dan tipe datanya. Untuk
formal tersebut juga berbeda. bahasa Java dengan permasalahan
yang sama adalah sebagai berikut:

1. class hitung { 
2.    public void luas_segi3(int alas){ 
3.      int tinggi=10; 
4.      double luas=0.5*alas*tinggi; 
5.      System.out.println("Luas segitiga 1 = " + luas); 
6.    } 
7.    public void luas_segi3(String alas){ 
8.      System.out.println(alas); 
9.    } 
10.    public void luas_segi3(String alas,int data){ 
11.      System.out.println(alas + " : "); 
12.      System.out.println("Pangkat dua dari " + data + " adalah " +(data*data)); 
13.    } 
14. } 
15. class overload3 { 
16.    public static void main(String[ ] args) { 
17.      hitung sekutu = new hitung(); 
18.      sekutu.luas_segi3(10); 
19.      sekutu.luas_segi3("Belajar  pemrograman"); 
20.      sekutu.luas_segi3("Belajar   pemrograman",3); 
21.    } 
22. } 

250
 
Prosedur dan Subroutin Bahasa Pemrorgraman

Keluaran programnya adalah :


Luas segitiga 1 = 50.0 
Belajar pemrograman 
Belajar Pemrograman :  
Pangkat dua dari 3 adalah 9 

6.12. Soal Latihan


Jawablah soal latihan dibawah ini dengan baik dan benar. 
1. Apa yang dimaksud dengan prosedur dan
2. Sebutkan perbedaan prosedur dengan fungsi
3. Apa sajakah parameter-parameter yang dimiliki oleh prosedur
4. Mengapa dalam program perlu ditulis dalam bentuk subrutin
5. Apa yang dimaksud dengan funtion call function
6. Apa yang dimaksud dengan call by value dan call by reference
7. Apa yang dimaksud dengan overloading
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
251
 
Bahasa Pemrograman Prosedur dan Subroutin

 
 
 
 

252
 
Fungsi Bahasa Pemrorgraman 

BAB 7
FUNGSI

7.1. Pendahuluan
7.2. Fungsi Void
7.3. Pemanggilan Fungsi
7.4. Prototipe Fungsi
7.5. Pengiriman data pada Fungsi
7.6. Passing Data by Value
7.7. The return Statement
7.8. Returning a Value from a Function
7.9. Returning a Boolean Value
7.10. Menggunakan Fungsi dalam program menu
7.11. Variabel Lokal dan Global
7.12. Soal Latihan

7.1. Pendahuluan
Fungsi adalah kumpulan Misalnya pada sebuah buku yang
pernyataan yang melakukan tugas memiliki seribu halaman, tetapi tidak
tertentu. Sejauh ini Anda telah dibagi ke dalam bab atau bagian.
menggunakan fungsi dalam dua cara: Jika ingin mencoba untuk
(1) Anda telah membuat sebuah menemukan satu topik dalam buku
fungsi bernama utama dalam setiap ini akan sangat sulit. Real-world
program yang telah ditulis, dan (2) program dapat dengan mudah ada
Anda memiliki fungsi library disebut ribuan baris kode, dan kecuali
seperti sqrt dan pow. Dalam bab ini mereka modularized, mereka bisa
akan mempelajari cara membuat jadi sangat sulit untuk mengubah dan
fungsi yang dapat digunakan seperti memelihara.
fungsi library pada C++. Alasan lain untuk menggunakan
Salah satu alasan mengapa fungsi adalah untuk bahwa fungsi
menggunakan fungsi adalah untuk menyederhanakan program. Jika
memecah program ke dalam sebuah tugas tertentu dilakukan di beberapa
program yang lebih kecil sehingga tempat di sebuah program, sebuah
mudah dikelola. Setiap unit modul, fungsi dapat ditulis sekali saja untuk
diprogram sebagai fungsi terpisah. melakukan tugas itu, dan kemudian

253
 
Bahasa Pemrograman Fungsi

akan dijalankan kapan saja Body


dibutuhkan. Badan fungsi adalah serangkaian
Ketika membuat sebuah fungsi, pernyataan yang melaksanakan
yang harus ditulis adalah definisi. tugas melakukan fungsi. Pernyataan
Semua definisi mempunyai bagian- ini akan ditutupi dalam satu set
bagian dibawah ini: braces.

Name Return type:


Setiap fungsi harus memiliki nama. fungsi dapat mengirim kembali ke
Secara umum, peraturan yang sama nilai program modul yang
berlaku untuk nama variabel juga memanggilnya. Return type
berlaku untuk nama fungsi. merupakan tipe data dari nilai yang
dikirim kembali.
Parameter list Gambar dibawah menunjukkan
Program modul fungsi panggilan definisi dari fungsi yang sederhana
yang dapat mengirim data ke. Daftar dengan berbagai bagian berlabel.
parameter adalah daftar variabel Perhatikan bahwa fungsi dari jenis
yang memegang nilai-nilai yang kembali sebenarnya tercantum
disampaikan ke fungsi. pertama.

 
 
nama    Parameter list 
 
return   
  body 
 
 
int main ()   
{   
Cout << “ Hello Siswa SMK\n”; 
 
return 0;   
}    
 
 
 
Gambar 7.1. function header

Contoh program diatas merupakan baris pendefinisian int main () yang disebut
dengan function header.

254
 
Fungsi Bahasa Pemrorgraman 

7.2. Fungsi Void


Yang sudah tahu pada fungsi tugasnya. Hal tersebut tidak semua
adalah bahwa fungsi dapat fungsi diperlukan untuk kembali ke
mengembalikan nilai. Fungsi utama nilai tersebut. Beberapa fungsi hanya
dalam semua program yang telah melakukan satu atau lebih
dilihat dalam buku ini dinyatakan pernyataan dan kemudian
untuk kembali ke nilai int sebuah mengakhiri. Ini disebut void fungsi.
sistem operasi. Return 0; merupakan Fungsi TampilPesan seperti
sebuah pernyataan yang ditampilkan di bawah ini adalah
menyebabkan nilai 0 bila fungsi sebagai contoh:
utama telah selesai melaksanakan

void TampilPesan() 

cout << "Hello from the function TampilPesan.\n"; 

Nama fungsi tersebut diatas mengembalikan nilai ke bagian


TampilPesan. Nama ini jelas, sebagai program yang dijalankan tersebut.
nama fungsi harus. Ia memberi Pemberitahuan juga tidak memiliki
indikasi tentang apa yang tidak fungsi pernyataan Kembali. Ini hanya
berfungsi: ini menampilkan pesan. menampilkan pesan pada layar dan
Perhatikan kembali fungsi dari jenis keluar.
void. Ini berarti fungsi tidak

7.3. Pemanggilan Fungsi


fungsi dijalankan ketika untuk melakukan percabangan
dipanggil. Fungsi utama akan menuju dan melaksanakan semua
dipanggil secara otomatis saat pernyataan yang ada didalam tubuh
program dimulai, namun semua fungsi tersebut. Untuk lebih jelasnya
fungsi harus dijalankan oleh mari kita lihat Program dibawah, yang
pernyataan function call. Ketika berisi dua fungsi yaitu: TampilPesan
sebuah fungsi dipanggil, program dan utama.

Program 7.1.
#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
void TampilPesan() 

cout << " >> Salam Hello dari fungsi TampilPesan.\n"; 

255
 
Bahasa Pemrograman Fungsi


 
int main() 

     
    cout << "Hello dari program Utama.\n"; 
    cout << "‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐\n"; 
    TampilPesan();                               // memanggil TampilPesan 
    cout << "‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐\n"; 
    cout << "kembli ke Fungsi Utama lagi.\n"; 
    getch(); 
    return 0; 

Keluaran programnya adalah:


Hello dari program Utama. 
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 
 >> Salam Hello dari fungsi TampilPesan. 
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 
kembli ke Fungsi Utama lagi. 

Fungsi TampilPesan disebut oleh nama fungsi yang diikuti oleh tanda
baris utama adalah: TampilPesan(); kurung dan titik koma. Coba kita
Baris ini digunakan untuk fungsi bandingkan dengan fungsi header
panggilan. Dimana hal ini merupakan seperti berikut:

Function Header    void  TampilPesan() 
Function Call       TampilPesan(); 

Fungsi header adalah bagian dalam fungsi, tanda kurung yang


dari definisi fungsi. Ia menyatakan akan dikosongkan.
kembali sebuah fungsi dari jenis, Walaupun program mulai
nama, dan daftar parameter. Hal ini dijalankan pada program utama
tidak diakhiri dengan titik koma (main), fungsi TampilPesan
karena definisi dari tubuh fungsi yang didefinisikan terlebih dahulu. Hal ini
mengikutinya. Fungsi panggilan karena compiler harus mengetahui
adalah pernyataan yang fungsi dari jenis return, jumlah
melaksanakan fungsi tersebut, parameter, dan setiap jenis
sehingga diakhiri dengan titik koma parameter sebelumnya yang
seperti pernyataan C++ lainnya. dipanggil. Salah satu cara agar
Fungsi panggilan tidak ada dalam compiler mengetahui informasi ini
daftar, dan jika program ini tidak ke adalah dengan menempatkan fungsi

256
 
Fungsi Bahasa Pemrorgraman 

definisi sebelum semua panggilan ke pernyataan-nya. Setelah selesai


fungsi. melaksanakan TampilPesan,
Perhatikan bagaimana program program cabang kembali ke fungsi
diatas mengalir. Dalam memulai, utama dan kembali dengan baris
tentu saja, didalam fungsi utama. Bila yang mengikuti fungsi panggilan. Hal
panggilan ke TampilPesan yang ini diilustrasikan pada gambar
dihadapi, program untuk cabang dibawah ini.
yang berfungsi dan melakukan

void TampilPesan() 

cout << " >> Salam Hello dari fungsi TampilPesan.\n"; 

int main() 

   cout << "Hello dari program Utama.\n"; 
TampilPesan();                                        
cout << "kembli ke Funsgi Utama lagi.\n"; 
getch(); 
return 0; 

Gambar 7.2. Ilustrasi Fungsi

Dalam menyatakan pemanggilan dibawah merupakan program yang


Fungsi dapat menggunakan struktur melakukan pemanggilan fungsi
kendali seperti loop, pernyataan IF, TampiPesan kedalam satu looping
dan pernyataan switch. Program
 
Program 7.2.
#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
void TampilPesan() 

257
 
Bahasa Pemrograman Fungsi

cout << " >> Salam Hello dari fungsi TampilPesan.\n"; 

 
int main() 

    cout << "Hello dari program Utama.\n"; 
    cout << "‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐\n"; 
    for (int count = 0; count < 5; count++) 
    TampilPesan();                                   // memanggil Fungsi TampilPesan 
    cout << "‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐\n"; 
    cout << "kembli ke Funsgi Utama lagi.\n"; 
    getch(); 
    return 0; 

 
Keluaran Programnya adalah:
Hello dari program Utama. 
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 
 >> Salam Hello dari fungsi TampilPesan. 
 >> Salam Hello dari fungsi TampilPesan. 
 >> Salam Hello dari fungsi TampilPesan. 
 >> Salam Hello dari fungsi TampilPesan. 
 >> Salam Hello dari fungsi TampilPesan. 
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 
kembli ke Funsgi Utama lagi. 

Setiap program dapat dimungkinkan dibawah ini memiliki tiga fungsi: yaitu
untuk memiliki banyak fungsi atau utama, fungsi pertama dan fungsi
sebuah fungsi dalam sebuah kedua. Untuk lebih jelas perhatikan
program. Program dibawah 7.3. program dibawah ini:

Program 7.3
#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
void pertama() 

     cout << " >>Saya sekarang sedang di Fungsi Pertama.\n"; 

 
void kedua() 
258
 
Fungsi Bahasa Pemrorgraman 


     cout << " >> Saya sekarang sedang di Fungsi Kedua.\n"; 

 
int main() 

    cout << "Saya sedang di program Utama.\n"; 
    pertama();                                  // pemanggilan fungsi pertama 
    kedua();                                      // pemanggilan fungsi kedua 
    cout << "Saya kembali ke Program Utama.\n"; 
    getch(); 
    return 0; 

 
 
Keluaran programnya adalah sebagai berikut:
Saya sedang di program Utama. 
 >> Saya sekarang sedang di Fungsi Pertama. 
 >> Saya sekarang sedang di Fungsi Kedua. 
Saya kembali ke Program Utama. 

Dalam program diatas fungsi utama pertama dan kedua dengan instruksi
terdiri dari pemanggilan fungsi sebagai berikut:

pertama();                                   
kedua();                                     

Setiap panggilan pernyataan kembali ke utama bila fungsi selesai.


menyebabkan program untuk cabang Gambar dibawah menggambarkan
ke salah satu fungsi dan kemudian jalan yang diambil oleh program

259
 
Bahasa Pemrograman Fungsi

void pertama() 

     cout << " >>Saya sekarang sedang di Fungsi Pertama.\n"; 

void kedua() 

     cout << " >> Saya sekarang sedang di Fungsi Kedua.\n"; 

int main() 

    cout << "Saya sedang di program Utama.\n"; 
    pertama();                                   
    kedua();                                     
    cout << "Saya kembali ke Program Utama.\n"; 
    getch(); 
    return 0; 

 
Gambar 7.3. Pemanggilan lebih dari satu fungsi

Sebuah fungsi sering juga Kerja program tersebut adalah fungsi


dipanggil dalam dalam sebuah palingdalam dipanggil oleh fungsi
hirarki, atau berlapis. Program agakdalam dan kemudian fungsi
dibawah ini merupakan sebuah AgakDalam dipanggil oleh fungsi
program yang memiliki tiga buah Utama. Untuk lebih jelasnya
fungsi dimana fungsi tersebut adalah perhatikan program dibawah ini:
utama, Agakdalam dan PalingDalam.

Program 7.4.
#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
void PalingDalam() 

cout << "Saya sekarang sedang di dalam fungsi PalingDalam.\n"; 

 
void AgakDalam() 

260
 
Fungsi Bahasa Pemrorgraman 


     cout << "sekarang saya sedang di fungsi AgakDalam.\n"; 
     PalingDalam();                              // panggil Fungsi 
     cout << "Sekarang saya Kembali ke fungsi AgakDalam.\n"; 

 
int main() 

    cout << "saya sekarang sedang didalam fungsi Utama.\n"; 
    AgakDalam();                                 // Panggil Fungsi 
    cout << "Saya kembali ke Fungsi Utama Lagi.\n"; 
    getch(); 
    return 0; 

Keluaran Program adalah sebagai berikut:


saya sekarang sedang didalam fungsi Utama. 
sekarang saya sedang di fungsi AgakDalam. 
Saya sekarang sedang di dalam fungsi PalingDalam. 
Sekarang saya Kembali ke fungsi AgakDalam. 
Saya kembali ke Fungsi Utama Lagi. 

Dalam Program 7.4 diatasfungsi memanggil fungsi dan kemudian


utama hanya memanggil fungsi fungsi yang dipanggil tersebut
agakDalam. Sedangkan fungsi memnggil fungsi yang lain. Untuk
AgakDalam memanggil Fungsi lebih jelasnya perhatikan gambar
PalingDalam. Program diatas adalah dibawah ini:

261
 
Bahasa Pemrograman Fungsi

void AgakDalam() 

     cout << "sekarang saya sedang di fungsi AgakDalam.\n"; 
     PalingDalam();                              // panggil Fungsi 
     cout << "Sekarang saya Kembali ke fungsi AgakDalam.\n"; 

void PalingDalam() 

     cout << "Saya sekarang di dalam fungsi PalingDalam.\n"; 

int main() 

    cout << "saya sekarang sedang didalam fungsi Utama.\n"; 
    AgakDalam();                                 // Panggil Fungsi 
    cout << "Saya kembali ke Fungsi Utama Lagi.\n"; 
    getch(); 
    return 0; 

Gambar 7.4. Pemanggilan fungsi didalam fungsi

7.4. Prototipe Fungsi


Sebelum compiler menemukan cara untuk memastikan bahwa
panggilan ke fungsi tertentu, kita compiler ini memiliki informasi yang
harus sudah mengetahui beberapa diperlukan adalah dengan
hal mengenai fungsi. Secara khusus, menempatkan fungsi yang telah
kita harus mengetahui jumlah didefinisikan sebelum melakukan
parameter yang digunakan oleh panggilan ke fungsi tersebut. Ini
fungsi, jenis parameter, dan cara merupakan pendekatan yang diambil
atau jenis kembalinya fungsi. Sebuah seperti halnya dalam program 7.1
parameter membolehkan informasi sampai program 7.4 diatas. Cara
untuk dikirim ke salah satu fungsi. lainnya adalah adalah dengan
Untuk saat ini, fungsi yang akan menyatakan fungsi dengan fungsi
digunakan berupa fugsi yang tidak prototipe (a function prototype).
memiliki parameter dan, kecuali pada Berikut ini adalah prototipe untuk
fungsi utama, dan cara kembalinya fungsi TampilPesan seperti dalam
menggunakan jenis void. Salah satu Program 7.1 adalah sebagai berikut:

void TampilPesan();  

Prototipe tersebut diatas tampak ada titik koma dibagian akhir. Sebuah
mirip dengan fungsi header, kecuali pernyataan fungsi akan
262
 
Fungsi Bahasa Pemrorgraman 

memberitahukan ke compiler bahwa Program 7.5 dibawah ini adalah


fungsi TampilPesan memiliki tipe modifikasi dari program 7.3 diatas.
kembali (return) void, berarti fungsi Definisi fungsi pertama dan kedua
tersebut tidak mengembalikan nilai telah ditempatkan setelah program
serta tidak menggunakan parameter. utama, dan fungsi prototip telah
Prototipe fungsi biasanya ditempatkan diatas program utama
ditempatkan pada bagian atas pada secara langsung setelah pernyataan
program sehingga compiler akan namespace std. Perhatikan program
melakukan eksekusi terlebih dahulu dibawah ini:
sebelum fungsi tersebut dipanggil.

Program 7.5.
#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
//Prototipe Fungsi 
void pertama(); 
void kedua(); 
 
int main() 

    cout << "Saya sedang di program utama.\n"; 
    pertama();                  // memanggil fungsi pertama 
    kedua();                    // memanggil fungsi kedua 
    cout << "Kembali dalam program utama lagi.\n"; 
    getch(); 
    return 0; 

 
void pertama() 

    cout << "saya sekarang didalam fungsi pertama.\n"; 

 
void kedua() 

    cout << "saya sekarang didalam fungsi kedua.\n"; 

Keluaran Program adalah sebagai berikut:


Saya sedang di program utama. 
263
 
Bahasa Pemrograman Fungsi

saya sekarang didalam fungsi pertama. 
saya sekarang didalam fungsi kedua. 
Kembali dalam program utama lagi. 

Ketika compiler sedang pada informasi fungsi pertama dan


membaca program utama diatas, kedua. Sehingga harus ada prototipe
kemudian program utama tersebut pada setiap fungsinya dalam sebuah
melakukan panggilan ke fungsi program kecuali program utama.
pertama dan kedua sebelum compiler Sebuah prototipe program ini tidak
membaca definisi dari fungsi pernah diperlukan oleh program
tersebut. Karena hal tersebut sebagai utama karena telah dilakukan pada
fungsi prototip, compiler sudah awal program.
mengetahui jenis parameter kembali

7.5. Pengiriman data pada Fungsi


Nilai-nilai yang akan dikirim pada dalam pemanggilan fungsi.
sebuah fungsi disebut dengan Pernyataan berikut ini merupakan
argument (arguments). Programmer fungsi pow dengan dua argumen
yang ahli biasanya sudah akrab yang sedang melakukan panggilan 2
dengan cara menggunakan argumen dan 4.

result = pow(2, 4); 

Sebuah parameter merupakan merancang sendiri fungsi yang dapat


variabel khusus yang menangani nilai menerima data. Program berikut
yang dilewatkan sebagai argumen merupakan definisi sebuah fungsi
menuju sebuah fungsi. Dengan yang menggunakan parameter:
menggunakan parameter, kita dapat

void TampilNilai(int num) 

cout << "Nilainya adalah " << num << endl; 

Perhatikan integer num yng supaya menerima nilai integer


digunakan untuk mendefinisikan sebagai argumen. Program 7.6
variabel yang berada dalam kurung dibawah merupakan contoh yang
(int num). Variabel num adalah menggunakan fungsi TampilNilai.
parameter. Integer Ini digunakan Perhatikan program dibawah ini:
untuk membuat fungsi TampilNilai

Program 7.6.
264
 
Fungsi Bahasa Pemrorgraman 

#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
//Prototipe Fungsi 
void TampilNilai(int); 
 
int main() 

    cout << "Saya sedang memasukan 5 ke fungsi TampilNilai.\n"; 
    TampilNilai(5);                  // Call TampilNilai dengan argument 5 
    cout << "Sekarang saya sudah kembali ke program utama.\n"; 
    getch(); 
    return 0; 

 
void TampilNilai(int num) 

     cout << "Besar nilainya adalah: " << num << endl; 

Keluaran programnya adalah sebagai berikut:


Saya sedang memasukan 5 ke fungsi TampilNilai. 
Besar nilainya adalah: 5 
Sekarang saya sudah kembali ke program utama. 

Dalam prototype fungsi tersebut diatas yang perlu diperhatikan adalah pada
TampilNilai:

void TampilNilai(int);   // function prototype 

Dalam fungsi tersebut kita tidak memasukan type data yang


perlu memasukan daftar parameter diperlukan saja. Fungsi ini dapat
yang merupakan variabel dalam prototype ini juga dapat ditulis
tanda kurung, dan hanya dengan sebagai berikut:

void TampilNilai(int num); 

Fungsi tersebut diatas sangat tersebut. Dalam program utama,


mudah digunakan walaupun, fungsi TampiNilai disebut dengan
compiler mengabaikan nama variabel argumen 5, dimana hal tersebut
pada parameter fungsi prototype berada dalam tanda kurung. Nomor 5

265
 
Bahasa Pemrograman Fungsi

dimasukan kedalam variabel num, jelasnya mengenai hal tersebut,


yang mana num merupakan perhatikan gambar dibawah ini:
parameter TampilNilai. Untuk lebih

TampilNilai(5);                  
 
 
 
 
void TampilNilai(int num) 

     cout << "Besar nilainya adalah: " << num << endl; 

 
 
Gambar 7.5. Fungsi prototipe
 
 
Dengan melihat gambar nilai sesuai argument yang
tersebut, apapun argumen yang berhubungan. Program 7.7 dibawah
tertulis dalam tanda kurung pada menunjukkan bahwa fungsi
panggilan fungsi akan dicopy \tampilNilai dapat dipanggil beberapa
kedalam variable parameter fungsi. kali dengan alasan sesuai masing-
Pada dasarnya, parameter adalah masing kegunaannya.
variabel yang diinisialisasi menjadi

Program 7.7.
#include <conio.h> 
#include <iostream> 
 
using namespace std; 
 
//Prototipe Fungsi 
void TampilNilai(int); 
 
int main() 

    cout << "Saya sedang mengisikan beberapa nilai pada TampilNilai.\n"; 
    TampilNilai(5);      // Panggil TampilNilai dengan argument 5 
    TampilNilai(10);     // Panggil TampilNilai dengan argument 10 
    TampilNilai(2);      // Panggil TampilNilai dengan argument 2 
    TampilNilai(16);     // Panggil TampilNilai dengan argument 16 
    cout << "sekarang saya kembali.\n"; 

266
 
Fungsi Bahasa Pemrorgraman 

    getch(); 
return 0; 

 
void TampilNilai(int num) 

     cout << "Nilainya adalah " << num << endl; 

Keluaran programnya Adalah sebagai berikut;


Saya sedang mengisikan beberapa nilai pada TampilNilai. 
Nilainya adalah 5 
Nilainya adalah 10 
Nilainya adalah 2 
Nilainya adalah 16 
sekarang saya kembali. 

Setiap kali sebuah fungsi dalam yang digunakan sebagai argumen.


program diatas tersebut dipanggil, Sebagai contoh, panggilan fungsi
variabel num akan mengambil nilai berikut digunakan untuk memasukan
yang berbeda. Setiap ekspresi fungsi, nilai 8 kedalam variabel num:
nilai akan diberikan kedalam num

TampilNilai(3 + 5);

Jika kita memasukan jenis parameter adalah bertipe integer,


argumen yang tidak sama dengan argumen pada pemanggilan fungsi
jenis parameter, argumen tersebut akan dipotong, sehingga nilai 4 akan
akan digunakan secara otomatis. dimasukan ke varibel num:
Misalnya, jika TampilNilai dari sebuah

TampilNilai (4.7);

Seringkali hal tersebut berguna untuk dibawah ini menunjukkan sebuah


digunakan oleh beberapa argumen fungsi dari fungsi yang memiliki tiga
dalam sebuah fungsi. Program buah parameter.

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

267
 
Bahasa Pemrograman Fungsi

 
//Prototipe Fungsi 
void Tambahan(int, int, int); 
 
int main() 

    int value1, value2, value3; 
 
    cout << "Masukan Tiga bilangan Integers dan saya akan menampilkan "; 
    cout << "Penjumlahan: "; 
    cin >> value1 >> value2 >> value3; 
    Tambahan(nilai1, nilai2, nilai3);   // Call Tambahan dengan 3 arguments. 
    getch(); 
    return 0; 

 
void Tambahan(int num1, int num2, int num3) 

     cout << (num1 + num2 + num3) << endl; 

Keluaran Programnya adalah sebagai berikut;


Masukan Tiga bilangan Integers dan saya akan menampilkan Penjumlahan: 4 5 6 
15 

Dalam header fungsi Tambahan, variabel yang dipisahkan oleh koma


daftar parameter berisi tiga definisi adalah sebagai berikut:

void Tambahan(int num1, int num2, int num3) 

Hal yang perlu diperhatikan int num1, num2, num3 ternyata


pada setiap variabel yaitu harus bukan int num1, int num2, int num3.
memiliki tipe data yang namanya Dalam pemanggilan fungsi,
sebelum telah tertulis. Error pada sebuah variabel nilai1, nilai2 dan
compiler akan terjadi jika daftar nilai 3 dapat digunakan sebagai
parameter yang dinyatakan sebagai argument:

Tambahan(nilai1, nilai2, nilai3); 

Potongan program diatas jika panggilan fungsi, kita tidak dapat


diperhatikan ada perbedaan antara menyertakan variabel jenis data
header fungsi dan panggilan fungsi didalam tanda kurung. Perhatikan
saat melewati variabel sebagai potongan program dibawah ini:
argumen menjadi parameter. Dalam

268
 
Fungsi Bahasa Pemrorgraman 

Tambahan(int nilai1, int nilai2, int nilai3); 

Ketika sebuah fungsi dengan parameter yang di pesan. Hal


beberapa parameter disebut, tersebut dapat digambarkan seperti
argumen akan dimasukan kedalam gambar dibawah ini.

Tambahan(nilai1, nilai2, nilai3);
 
 
 
 
void Tambahan(int num1, int num2, int num3) 

     cout << (num1 + num2 + num3) << endl; 

 
 
Gambar 7.6. Fungsi dengan beberapa Parameter

Fungsi dibawah ini akan dimasukan kedalam num3. Untuk


menyebabkan nilai 5 dimasukan lebih jelasnya perhatikan instruksi
kedalam parameter num1, nilai 10 dibawah ini:
dimasukan ke dalam num2, dan 15

showSum(5, 10, 15); 

meskipun pemanggilan fungsi berikut num1, 5 dimasukan ke dalam num2,


ini akan menyebabkan 15 yang dan nilai 10 akan dimasukan kedalam
dimasukan kedalam parameter num3:

Tambahan(15, 5, 10); 

7.6. Passing Data by Value


Parameter khusus merupakan informasi yng dilakukan oleh
variabel tujuan yang ditentukan argumen dan tercantum dalam tanda
didalam tanda kurung dari definisi kurung pada panggilan fungsi.
fungsi. Tujuan parameter tersebut Secara umum, ketika informasi
adalah untuk menyampaikan disampaikan kedalam fungsi disebut

269
 
Bahasa Pemrograman Fungsi

passed by value. Hal ini berarti tersebut tidak mempengaruhi pada


parameter menerima copy dari nilai argumen yang asli. Perhatikan
yang disampaikan kepadanya. program dibawah ini yang
Jika sebuah parameter nilai menunjukkan konsep mengenai
berubah didalam fungsi maka hal passed by value.

Program 7.9.
include <iostream> 
 
using namespace std; 
 
void changeThem(int, double); 
 
int main() 

int whole = 12; 
double real = 3.5; 
cout << "dalam nilai main adaIah" << whole << endl; 
cout << "dan nilai real adalah" << real << endl << endl; 
 
changeThem(whole, real);            // memanggil changeThem dengan 2 arguments 
 
cout << "sekarang kembali dalam main lagi, nilainya adalah "; 
cout << "semuanya masih " << whole << endl; 
cout << "dan nilai real adalah masih" << real << endl; 
return 0; 

 
void changeThem(int i, double d) 

i = 100; 
d = 27.5; 
 
cout << "dalam fungsi changeThem nilainya diubah menjadi "; 
cout << i << endl; 
cout << "dan nilainya diubah menjadi " << d << endl << endl; 

 

Pada program diatas walaupun salinan keseluruhan dan nyata.


parameter i dan f berubah dalam fungsi ChangeThem tidak memiliki
fungsi changeThem, kenyataannya akses ke argumen sebelumnya
seluruh argumen tidak diubah. (original). Gambar dibawah
Parameter i dan f hanya berisi menunjukan bahwa variabel
270
 
Fungsi Bahasa Pemrorgraman 

parameter disimpan dalam lokasi yang asli. Perhatikan gambar berikut


memori yang terpisah dari argumen ini:

Argumen Asli
12

Fungsi Parameter
12

Gambar 7.7. Variabel parameter yang disimpan dalam memori

7.7. Pernyataan Kembali


Bila pernyataan terakhir dalam dieksekusi. Ketika menemui
fungsi telah selesai eksekusi, fungsi pernyataan kembali, fungsi dengan
akan diakhiri. Program akan kembali segera diakhiri dan menuju program
ke modul yang dipanggil dan semula. Hal ini seperti ditunjukkan
meneruskan eksekusi dari titik dalam Program dibawah. fungsi bagi
dimana panggilan fungsi dilakukan digunakan untuk menunjukkan hasil
sebelumnya. Hal sangat pembagian dari arg1 dibagi arg2. Jika
dimungkinkan, meskipun salah satu arg2 diatur ke nol, fungsi akan
fungsi memaksa untuk kembali kembali tanpa melakukan
ketempat dimana pernyataan terakhir pembagian, karena operasi
dari program sebelumnya yang pembagian tidak mungkin dilakukan.

Program 7.10.
#include <iostream> 
 
using namespace std; 
 
void divide(double, double); 
 
int main() 

double num1, num2; 
cout << "masukan dua angka yang akan dibagi \n"; 
cout << "angka yang kedua: "; 

271
 
Bahasa Pemrograman Fungsi

cin >> num1 >> num2; 
divide(num1, num2); 
return 0; 

 
void divide(double arg1, double arg2) 

if (arg2 == 0.0) 

cout << "maaf, tidak bisa dibagi dengan bilangan nol.\n"; 
return; 

cout << "jawabanya adalah: " << (arg1 / arg2) << endl; 

7.8. Mengembalikan Nilai dari Fungsi


Dari program diatas kita telah nilai yang dapat dikembalikannya.
melihat bahwa informasi dapat Sesuatu dari fungsi memiliki
dilewatkan menjadi salah satu fungsi beberapa saluran komunikasi untuk
oleh sebuah parameter. Informasi menerima data (parameter), tetapi
juga dapat dikembalikan dari fungsi, hanya satu saluran untuk mengirim
kembali menuju program yang data (return value).
memanggilnya. Walaupun beberapa Hal tersebut dapat digambarkan
argumen dapat dimasukan menjadi seperti dibawah ini:
salah satu fungsi, hanya ada satu

Argumen
Argumen
Fungsi Nilai Kembali
Argumen
Argumen

Gambar 7.8. Fungsi dengan saluran beberapa data (parameter)

Dalam rangka untuk data nilai kembali mengawali fungsi


mengembalikan nilai-nilai dari dengan nama header fungsi dan
beberapa fungsi, mereka harus prototipe. Berikut ini menyatakan
"dibuat paket" sehingga mereka prototipe fungsi dengan nama
dianggap sebagai satu nilai. Tipe persegi yang menerima sebuah

272
 
Fungsi Bahasa Pemrorgraman 

argumen integer dan


mengembalikannya menjadi integer: Fungsi tersebut hanya memiliki
satu baris yang merupakan
int persegi(int);  pernyataan kembali. Bila nilai fungsi
kembali, maka hal tersebut harus
instruksi diatas dapat didefinisikan memiliki pernyataan kembali.
dalam fungsi sebagai berikut: Ungkapan yang mengikuti kata kunci
akan dievaluasi, dikonversikan ke
int persegi(int number)  tipe data fungsi kembali, dan dikirim
{  kembali program yang memanggil
return number * number;  fungsi tersebut. Untuk lebih jelasnya
}  perhatikan Program dibawah ini:

Program 7.11
#include <iostream> 
 
using namespace std; 
 
int persegi(int); 
 
int main() 

int number, result; 
 
cout << "Masukan angka yang akan diakarkan: "; 
cin >> number; 
hasil = persegi (number); 
cout << number << " Hasilnya adalah " << hasil << endl; 
return 0; 

 
int persegi(int number) 

return number * number; 

Dibawah ini merupakan sebuah baris memanggil fungsi persegi:

hasil = persegi (number); 

Sebuah ekspresi adalah sesuatu fungsi merupakan sebuah ekspresi.


yang memiliki nilai. Jika suatu fungsi Pernyataan diatas memberikan nilai
mengembalikan nilai, panggilan ke kembali dari persegi ke variabel hasil.
273
 
Bahasa Pemrograman Fungsi

Jadi, ketika nilai 20 dinyatakan menggambarkan bagaimana sebuah


sebagai argumen persegi, 20 kali 20, informasi disampaikan ke dan
atau 400, dan dikembalikan ke hasil kembali dari fungsi.
yang ditugaskan. Gambar dibawah ini

hasil = persegi (number); 
20

400 int persegi(int number) 

return number * number; 

Gambar 7.9. Penyampaian informasi dari fungsi

Sebenarnya dalam program diatas, fungsi persegi telah ditampilkan


variable hasil adalah variabel yang menggunakan cout objek, seperti
tidak penting. Adanya nilai pada ditunjukkan berikut dibawah ini:

cout << number << " persegi adalah " << persegi(number) << endl; 

Dari program diatas kita sudah nilai yang dikembalikan oleh fungsi
mengetahui bagaimana nilai sebagai penghubung dalam
dikembalikan oleh fungsi dan pengujian sebuah ekspresi
ditempatkan ke variabel atau dicetak. aritmatika. Perhatikan contoh berikut
Program tersebut diatas Juga yang menggunakan dua pernyataan
memungkinkan untuk menggunakan yang sempurna:

if (persegi(number) > 100)      
cout << "persegi besar\n";       
sum = 1000 + persegi (number);      

Program dibawah menunjukkan versi lingkaran. Program dibawah juga


dari fungsi persegi yang kembali menggunakan fungsi getRadius
senbagai duble. Fungsi tersebut untuk mendapatkan radius lingkaran
digunakan dalam pernyataan dari pengguna dan kembali ke nilai
matematis untuk menghitung daerah utama.

Program 7.12
#include <iostream> 
#include <iomanip> 

274
 
Fungsi Bahasa Pemrorgraman 

 
using namespace std; 
 
double getRadius(); 
double square(double); 
 
int main() 

const double PI = 3.14159; 
double rad; 
 
cout << fixed << showpoint << setprecision(2); 
cout << "Program ini untuk menghitung luas lingkaran.\n"; 
rad = getRadius(); 
cout << "Luasnya adalah: " << PI * square(rad) << endl; 
return 0; 

 
double getRadius() 

double radius; 
cout << "masukan jari‐jari lingkaran: "; 
cin >> radius; 
return radius; 

 
double square(double number) 

return number * number; 

Fungsi Persegi dalam Program dua nilai dikembalikan oleh fungsi


7.11 merupakan sebuah integer, persegi seperti pada program 7.12
sedangkan pada program 7.12 maka akan ditugaskan ke salah satu
adalah fungsi ganda. Cara kembali variabel integer, sehingga nilai akan
jenis fungsi harus merupakan jenis dipotong. Hal ini diilustrasikan dalam
data yang diinginkan untuk kembali contoh program berikut:
dari fungsi. Jika fungsi kembali ke
nilai ganda yang sedang ditugaskan int result; 
ke variabel, maka variabel tersebut result = square(2.7); 
harus juga menjadi dua kali lipat. Jika

275
 
Bahasa Pemrograman Fungsi

7.9. Pengembalian Nilai Boolean


Biasanya ada sesuatu yang mengetahui apakah nomor genap
dibutuhkan fungsi untuk menguji atau ganjil, sebuah fungsi dapat
argumen dan akan mengembalikan ditulis kembali dengan benar jika
nilai benar atau salah serta argument genap dan false jika
mengindikasikan kondisi yang ada. argumen yang ganjil. Untuk lebih
Misalnya, dalam sebuah program jelasnya perhatikan program dibawah
yang membutuhkan sesuatu untuk ini:

Program 7.13
#include <iostream> 
 
using namespace std; 
 
bool isEven(int); 
int main() 

int val; 
 
cout << "masukan bilangan integer :"; 
cout << "jika ganjil atau genap : "; 
cin >> val; 
 
if (isEven(val)) 
cout << val << "adalah genap.\n"; 
else 
cout << val << " adalah ganjil.\n"; 
return 0; 

 
bool isEven(int number) 

if (number % 2) 
return false;   // Bilangan adalah ganjil 
else 
return true;   // bilangan adalah genap. 

Keluaran Program adalah sebagai berikut:


masukan bilangan integer : 5[Enter] 
5 adalah ganjil. 
 

276
 
Fungsi Bahasa Pemrorgraman 

Sebuah fungsi isEven disebut dalam ketika pernyatasan IF dieksekusi,


pernyataan dibawah ini: isEven disebut dengan val sebagai
argument. Jika val genap, isEven
if (isEven(val))  adalah benar dan sebaliknya akan
salah.

7.10. Menggunakan Fungsi dalam program menu


Dalam sebelumnya kita melihat versi program. Perhatikan bagaimana
menu-driven program yang setiap fungsi, atau modul, yang
menghitung biaya kesehatan untuk dirancang untuk melakukan tugas
anggota klub. Program 7.14 dibawah tertentu.
adalah untuk meningkatkan modular

Program 7.14
#include <iostream> 
#include <iomanip> 
#include <string> 
 
using namespace std; 
 
// Function prototypes 
void displayMenu(); 
int getChoice(); 
void computeFees(string, double, int); 
 
const double ADULT_RATE = 40.00, 
SENIOR_RATE = 30.00, 
CHILD_RATE = 20.00; 
 
int main() 

int choice,       
months;        
 
cout << fixed << showpoint << setprecision(2); 
 
do 
{ displayMenu(); 
choice = getChoice();    
 
if (choice != 4) 

277
 
Bahasa Pemrograman Fungsi

cout << "berapa jumlah banyaknya bulan:? "; 
cin >> months; 
 
switch (choice) 

case 1: computeFees("Dewasa", ADULT_RATE, months); 
break; 
case 2: computeFees("Anak", CHILD_RATE, months); 
break; 
case 3: computeFees("Senior", SENIOR_RATE, months); 


} while (choice != 4); 
return 0; 

 
void displayMenu() 

cout << "\nmenu keanggotaan klub kesehatan \n\n"; 
cout << "1. Keanggotaan dewasa \n"; 
cout << "2. Keangotaan anak\n"; 
cout << "3. senior\n"; 
cout << "4. Keluar\n\n"; 

 
int getChoice() 

int choice; 
cin >> choice; 
while (choice < 1 || choice > 4) 
{  
cout << "pilihan hanya no 1 – 4 tekan enter. "; 
cin >> choice; 

return choice; 

 
void computeFees(string memberType, double rate, int months) 

cout << endl 
<< "tipe keanggotaan: " << memberType << " " 
<< "bayaran perbulan Rp" << rate << endl 
<< "Jumlah bulan:" << months << endl 

278
 
Fungsi Bahasa Pemrorgraman 

<< "Total:Rp."<< (rate * months) 
<< endl << endl; 

 
Yang perlu diperhatikan adalah keseluruhan fungsi: satu untuk
fleksibilitas dari fungsi computeFees, menghitung biaya keanggotaan
yang disebut pada tiga tempat yang dewasa, anak yang lain untuk
berbeda-beda dengan pernyataan menghitung biaya keanggotaan, dan
switch. Hal ini disampaikan tiga ketiga untuk menghitung biaya
argumen: string memegang jenis keanggotaan senior. Karena kita
keanggotaan, double memegang dapat informasi yang berbeda lulus
biaya bulanan untuk jenis sebagai argumen ke fungsi tersebut,
keanggotaan, dan integer memegang namun, kami mampu membuat satu
jumlah tagihan per bulan. tujuan umum-fungsi yang bekerja
Tanpa argumen, kita akan untuk semua tiga kasus.
menetapkan sesuatu yang diperlukan

7.11. Variabel Lokal dan Global


Seperti yang telah ditetapkan fungsi lainnya, yang biasanya tidak
bahwa variabel didalam fungsi bisa mengaksesnya. Program 7.15
utama, Anda juga dapat menetapkan menunjukkan bahwa variabel yang
fungsi di dalam fungsi-fungsi lainnya. ditetapkan dalam suatu fungsi yang
Variabel yang ditetapkan dalam tersembunyi, dimana fungsi lainnya
fungsi lokal ke fungsi. Mereka mungkin telah terpisah, berbeda
tersembunyi dari pernyataan dalam variabel dengan nama yang sama.

Program 7.15
#include <iostream> 
 
using namespace std; 
 
void anotherFunction();  
 
int main() 

int num = 1;    
cout << "Dalam program utatma,num adalah: " << num << endl; 
anotherFunction(); 
cout << "Kembali dalam program utama, num masih" << num << endl; 
return 0; 

279
 
Bahasa Pemrograman Fungsi

 
void anotherFunction() 

int num = 20;   // variabel Local 
cout << "Dalam anotherFunction, num adalah: " << num << endl; 

 
Keluaran Program adalah sebagai berikut:
Dalam program utatma,num adalah: 1 
Dalam anotherFunction, num adalah: 20 
Kembali dalam program utama, num masih 1 

Meskipun terdapat dua variabel sebagai variabel yang ditetapkan


num, program ini hanya bisa didalamnya akan terlihat, sehingga
"melihat" salah satu dari mereka dalam variabel num program utama
setiap saat. Ketika program tersembunyi. Perhatikan program
dijalankan dalam program utama, yang mengilustrasikan sifat tertutup
yang didefinisikan pada variabel num dari dua fungsi, dimana bentuk kotak
akan terlihat pada program utama. mewakili lingkup variabel
Ketika anotherFunction disebut

Fungsi main 
 
  Variabel num hanya terlihat pada 
Int num = 1;  program utama 
   
Fungsi anotherFunction 
 
  Variabel num hanya terlihat pada 
int num = 20;  anotherFunction 

Gambar 7.10. Dua Fungsi yang mempunyai sifat tertutup,

Sebuah Lokal variabel dapat mudah. Sebuah variabel global


dikatakan sebagai variable yang merupakan variabel yang ditetapkan
aman dan tersembunyi dari fungsi diluar oleh semua fungsi dalam
lain, tetapi variable ini tidak sebuah program. Program 7.16
menyediakan cara yang mudah untuk menunjukkan dua buah fungsi utama
berbagi data. Jika sejumlah besar dan anotherFunction, dimana
data harus dapat diakses oleh semua menggunakan akses yang sama
fungsi dalam program, variabel global yaitu variabel global num.
dapat digunakan sebagai alternatif
280
 
Fungsi Bahasa Pemrorgraman 

Program 7.16
#include <iostream> 
 
using namespace std; 
 
void anotherFunction();   // Fungsi  prototipe 
int num = 2;       // variabel Global  
 
int main() 

cout << "dalam program utama, num adalah" << num << endl; 
anotherFunction(); 
cout << "kembali dari program utama, num adalah" << num << endl; 
return 0; 

 
void anotherFunction() 

cout << "dalam fungsi anotherFunction, num adalah " << num << endl; 
num = 50; 
cout << "tetapi, sekarang telah diubah menjadi " << num << endl; 

 
Dalam Program 7.16 diatas, dan anotherFunction, maka
variabel num didefinisikan diluar keduanya memiliki akses ke fungsi
semua fungsi. Karena muncul tersebut.
sebelum definisi pada program utama

Program 7.17
#include <iostream> 
 
using namespace std; 
 
int globalNum;        // variabel Global. Otomatis diatur  ke null. 
int main() 

cout << "globalNum adalah " << globalNum << endl; 
return 0; 

281
 
Bahasa Pemrograman Fungsi

Jika sebuah fungsi memiliki variabel hanya dapat dilihat oleh fungsi. Hal
lokal dengan nama yang sama ini ditunjukkan oleh Program dibawah
sebagai variabel global, variabel lokal ini:

Program 7.18
#include <iostream> 
 
using namespace std; 
 
// Funsi prototipe 
void texas(); 
void arkansas(); 
 
int cows = 10;       //variabel  global 
 
int main() 

cout << "Disana banyak " << cows << " cows di program utama.\n"; 
texas(); 
arkansas(); 
cout << "Kembali dalam program utama, disana banyak" << cows << " cows.\n"; 
return 0; 

 
void texas() 
{ int cows = 100;     //variabel  Local  
cout << "disana " << cows << " cows di texas.\n"; 

 
void arkansas() 
{ int cows = 50;      // variabel Local  
 
cout << "There are " << cows << " cows in arkansas.\n"; 

 
Ketika program diatas sedang merupakan program untuk mendaftar
menjalankan fungsi utama, variabel dan program ini menggunakan
global cows akan terlihat. Dalam variabel global dan lokal. Fungsi
fungsi texas dan Arkansas, meskipun ringUpSale menghitung dan
ada variabel lokal dengan nama menampilkan harga, pajak penjualan,
cows. Variabel global tidak terlihat dan subtotal untuk setiap item yang
ketika program sedang menjalankan dibeli. Memiliki variabel lokal, pajak,
fungsi mereka. program dibawah yang memiliki nama yang sama
282
 
Fungsi Bahasa Pemrorgraman 

seperti variabel global. Pajak pada program utama untuk menghitung


ringUpSale variabel yang digunakan total pajak penjualan pada
untuk menghitung pajak penjualan pembelian. Supaya lebih jelas,
pada item, sementara global pajak perhatikan program dibawah ini:
variabel yang digunakan oleh

Program 7.19
#include <iostream> 
#include <iomanip> 
 
using namespace std; 
 
// Fungsi prototipe 
void ringUpSale(); 
 
// variabel Global  
const double TAX_RATE = 0.06; 
double tax, sale, total; 
 
int main() 

char again; 
cout << fixed << showpoint << setprecision(2); 
do 
{  
ringUpSale(); 
cout << "Apakah disana ada ada sesuatu yang dapat dijual? "; 
cin >> again; 
}  
while (again == 'y' || again == 'Y'); 
tax = sale * TAX_RATE; 
total = sale + tax; 
cout << "\nPajak penjualannya adalah " << tax << endl; 
cout << "Total Pembayaran adalah " << total << endl; 
return 0; 

 
void ringUpSale() 
{         //Variabel Local  
int qty; 
double unitPrice, tax, thisSale, subTotal; 
 
cout << "\nJumlah: "; 

283
 
Bahasa Pemrograman Fungsi

cin >> qty; 
cout << "Harga per satuan: "; 
cin >> unitPrice; 
 
thisSale = qty * unitPrice;   // total harga unit 
sale += thisSale;     // Update variabel global penjualan 
tax = thisSale * TAX_RATE;  // pembayaran pajak untuk item 
subTotal = thisSale + tax;   // subtotal untuk tiap item 
cout << "harga untuk tiap item:" << thisSale << endl; 
cout << "pajak untuk tiap item: " << tax << endl; 
cout << "SubTotal untuk tiap item: " << subTotal << endl; 

7.12. Variabel Static Local


Jika suatu fungsi dipanggil lebih variabel yang hancur ketika fungsi
dari satu kali dalam sebuah program, diakhiri dan kemudian kembali dibuat
maka nilai yang disimpan dalam bila fungsi sudah dimulai lagi. Hal ini
fungsi sebagai variabel lokal tidak ditunjukkan dalam Program 7.20
akan kuat menahan panggilan fungsi. dibawah ini:
Hal ini disebabkan karena variabel-
.

Program 7.20
#include <iostream> 
 
using namespace std; 
 
// Fungsi prototipe 
void showLocal(); 
 
int main() 

showLocal(); 
showLocal(); 
return 0; 

 
void showLocal() 

int localNum = 5; //variabel Local 
cout << "localNum adalaj " << localNum << endl; 
localNum = 99; 

284
 
Fungsi Bahasa Pemrorgraman 

Keluaran Program adalah sebagai berikut:


localNum is 5 
localNum is 5 

Walaupun pernyataan terakhir panggilan. Hal ini dapat dicapai


dalam fungsi showLocal took 99 pada dengan membuat variabel statis.
localNum, variabel yang hancur bila variabel Static adalah variable lokal
fungsi kembali. Pada saat fungsi yang tidak hancur bila fungsi kembali.
tersebut dipanggil, localNum akan Mereka ada untuk seluruh masa
recreated dan diinisialisasi ke 5 lagi. program, walaupun mereka hanya
Kadang-kadang keinginan untuk lingkup fungsi mereka yang
sebuah program untuk "mengingat" ditetapkan. Program 7.21
adalah nilai yang disimpan dalam menunjukkan beberapa karakteristik
variabel lokal antara fungsi statik lokal variabel.

Program 7.21
#include <iostream> 
 
using namespace std; 
 
// Fungsi prototipe 
void showStatic(); 
 
int main() 

for (int count = 0; count < 5; count++) 
showStatic(); 
return 0; 

 
void showStatic() 

static int statNum; // Static local variable 
cout << "statNum adalah" << statNum << endl; 
statNum++; 

Program diatas terdapat variabel fungsi showStatic, dan tetap dengan


statNum adalah di tambahkan nilai antara setiap panggilan fungsi.
dengan satu (incremented) pada Perhatikan bahwa walaupun tidak

285
 
Bahasa Pemrograman Fungsi

secara eksplisit statNum diinisialisasi, Hal ini biasanya terjadi karena


dimulai pada nol. Seperti variabel variabel inisialisasi dibuat, dan
global adalah variabel lokal statik variabel lokal statik hanya dibuat
diinisialisasi ke nol secara default. sekali saat menjalankan sebuah
Jika Anda memberikan nilai program. program dibawah hanya
initialization statis variabel lokal, sedikit modifikasi.
hanya dilakukan sekali initialization.

Program 7.22
#include <iostream> 
 
using namespace std; 
 
void showStatic(); 
 
int main() 

for (int count = 0; count < 5; count++) 
showStatic(); 
return 0; 

 
void showStatic(void) 

static int statNum = 5; 
cout << "statNum adalah " << statNum << endl; 
statNum++; 

Keluaran program diatas adalah sebagai berikut:


statNum adalah 5 
statNum adalah 6 
statNum adalah 7 
statNum adalah 8 
statNum adalah 9 

Walaupun pernyataan yang dipanggil. Jika tidak, variabel y tidak


digunakan utuk mendefinisikan dapat mempertahankan nilai-nya
inisialisasi statNum ke 5, initialization antara fungsi panggilan.
tidak terjadi pada setiap kali fungsi

286
 
Fungsi Bahasa Pemrorgraman 

7.12. Soal Latihan


Jawablah soal latihan dibawah ini dengan baik dan benar. 
1. Apa yang dimaksud dengan fungsi pada pemrograman komputer
2. Apakah alasanya menggunakan fungsi
3. Jelaskan cara pemanggilan fungsi didalam sebuah fungsi
4. Apakah yang dimaksud dengan argumen
5. Apakah perbedaan antara fungsi dengan prosedur
6. Buatlah program sederhana menggunakan fungsi untuk mencari bilangan
genap antara 1 sampai dengan 10

287
 
Bahasa Pemrograman Fungsi

288
 
Operasi String Bahasa Pemrorgraman
 

BAB 8
OPERASI STRING

8.1. String pada bahasa C


8.2. Pointer pada Operasi String
8.3. Library String Bahasa C++
8.4. Membandingkan string
8.5. Operator Logika NOT
8.6. Pengurutan String
8.7. Fungsi konversi String/Numeric
8.8. Menguji sebuah Karakter
8.9. Deskripsi Fungsi Karakter
8.10. Konversi Karakter
8.11. Menulis string
8.12. Pointer untuk menguraikan String
8.13. Class String pada C++
8.14. Membuat Class String Sendiri
8.15. Studi Kasus
8.16. Soal Latihan

8.1. String pada bahasa C


String merupakan sebuah bentuk yang berurutan dalam bentuk array
data yang sering dipakai dalam berdimensi satu.
bahasa pemrograman untuk Dalam bahasa C++, string
keperluan menampung dan merupakan suatu nilai karakter yang
memanipulasi data teks. Sebagai berurutan dan disimpan dalam
contoh fungsi string misalnya sebuah lokasi memori yang salalu
digunakan untuk menampung atau diakhiri dengan karakter null.
menyimpan sebuah kalimat dan lain Sehingga untuk memanggil string
sebagainya. akan selalu dalam bentuk karakter
Pada bahasa C, string bukanlah ASCII. Dalam sebuah program
merupakan tipe data berdiri operasi string, karakter null biasanya
tersendiri, melainkan hanyalah ditulis ‘\0’, dimana hal tersebut
kumpulan dari nilai-nilai karakter biasanya secara umum berupa
bilangan integer 0 atau nilai karakter

289
 
Bahasa Pemrograman Operasi String
 
null konstanta. Kemudian pernyataan menambah tanda ketik dua.
tersebut disimpan dalam bentuk Perhatikan string dibawah ini:
karakter variabel seperti dibawah ini:
“siapakah nama anda?” 
char ch1, ch2, ch3;  “gatotkaca” 
ch1 = '\0'; 
ch2 = 0;  Kedua penulisan tersebut diatas
ch3 = NULL;  merupakan cara penulisan string.
Perhatikan contoh program dibawah
Array merupakan sebuah lokasi ini:
memori yang berurutan untuk
menyimpan nilai tipe data yang Program 8.1
sama, tetapi pada string berupa array #include <iostream> 
yang selalu diakhiri dengan karakter  
null. String dalam bahasa C++ akan using namespace std; 
muncul dalam program berupa salah  
satu dari tiga bentuk dibawah ini: int main() 
 “Hard-coded’’ string literals { 
 Programmer mendefinisikan array   cout << "gatotkaca"; 
dari karakter   return 0; 
 Pointers ke karakter } 
Tanpa memperhatikan dari
ketiga bentuk string yang muncul Pada program diatas dapat
dalam program tersebut, string selalu diketahui bahwa compiler menangani
mempunyai ciri array yang diakhiri string yang datang dalam bentuk
oleh karakter null dan string literal. Ketika compiler
direpresentasikan dalam program menemui sebuah string “gatotkaca”,
dalam bentuk pointer pada karakter maka hal tersebut akan dialokasikan
pertama dalam sebuah array. dala sebuah array dengan panjang
Dengan kata lain tipe string pada sepuluh karakter dalam bentuk data
bahasa C++ adalah: dalam program.
Compiler kemudian akan
char *  menyimpan sembilan karakter dalam
bentuk string “gatotkaca”. Dalam
dimana hal tersebut diatas adalah penyimpanan pertama dimasukan
tipe char string menggunakan sebuah karakter kesembilan kedalam array
pointer dan diakhiri dengan karakter null
pada penyimpanan akhir. Langkah
8.1.1. Konstanta String terakhir compiler melewatkan nilai
Penulisan String Secara harafiah tipe char * dan alamat array dari
sebenarnya dapat disebut juga karakter pertama menjadi obyek cout.
dengan konstanta string yang dapat
ditulis secara langsung dalam
program secara berurutan dengan

290
 
Operasi String Bahasa Pemrorgraman
 
g a t o t k a c a \0 dapat dideteksi. Sebagai sebuah
array karakter, karakter pertama dari
nilai string mempunyai indeks ke-0,
Gambar 8.1. Contoh sebuah string karakter kedua mempunyai indeks
ke-1, dan seterusnya. Program
Pada gambar diatas setiap dibawah ini mengilustrasikan sebuah
karakter akan menempati memori string yang diperlakukan oleh
sebesar 1 byte. Byte terakhir compiler sebagai sebuah nilai
otomatis akan berisi karakter NULL dengan type data char* . Hal tersebut
(\0). Dengan mengetahui bahwa merupakan sebuah operasi pointer
suatu string diakhiri nilai NULL, maka pada sebuah karakter.
akhir dari nilai suatu string akan

Program 8.2
#include <iostream> 
 
using namespace std; 
 
int main() 

  string storedAt = " disimpan pada "; 
  char *p, *q; 
  // memasukan string ke pointer sebagai char 
  p = "Hello "; 
  q = "Bailey"; 
  // pernyataan berikut sama dengan  
  cout << p << q << endl; 
  //cetak alamat dimana string C disimpan 
  cout << p << storedAt <<int(p)<< endl; 
  cout << q << storedAt <<int(q)<< endl <<int ("string lainnya"); 
  return 0; 

Keluaran program diatas adalah sebagai berikut:


Hello Bailey 
Hello disimpan pada 4309447 
Bailey disimpan pada 4309454 
4309461 

Dua tugas pada program diatas Pointer p dan q kemudian menahan


adalah menampilkan string dalam sebagai alamat dari dua string.
bentuk pointer menjadi char dengan Dengan memilih sebuah pointer int
menggunakan variabe type char*. maka akan mengetahui dimana

291
 
Bahasa Pemrograman Operasi String
 
konstanta string disimpan dalam array dapat diberi nilai dengan
sebuah memori. Dalam kasus ini menginisialisasi string tersebut.
sebuah compiler telah menyimpan Selain memberi nilai dapat juga
semua konstanta string pada sebuah dilakukan dengan membaca karakter
program dalam lokasi memori yang string melalui sebuah keyboard atau
berurutan. file, atau dapat juga dengan
melakukan copy karakter ke dalam
8.1.2. Variabel String array satu karakter pada saat yang
Sebuah variabel string dapat sama. Hal ini dapat juga dikatakan
ditahan oleh string pada bahasa C bahwa suatu variabel string dapat
yang ditulis dalam bentuk kode diinisialisasi seperti halnya array
program. Untuk memiliki suatu yang lain. Namun tentu saja elemen
karakter string dari sebuah keyboard, terakhirnya haruslah berupa karakter
atau dari sebuah file, maka harus NULL.
dapat mendefinisikan sebuah array
untuk menampung karakter string char corporation[] 
tersebut. Di dalam melakukan hal ini, ={’G’,’r’,’a’,’p’,’h’,’I’,’c’,’s’,’\0’}; 
yang perlu pastikan adalah pada saat
mengalokasikan satu tambahan isi yang menyatakan bahwa name
array untuk mengakhiri karakter null. adalah variabel string dengan nilai
Sebagai contoh, jika string akan lebih awal berupa string: “Graphics”
dari 19 karakter panjangnya, maka Bentuk inisialisasi yang lebih singkat:
perlu mengalokasikan sebuah array
dengan 20 karakter, seperti contoh char corporation[ ] = "Graphics"; 
penulisan dibawah ini:
atau contoh lain bisa juga ditentukan
char company[20];  jumlah karakternya:

instruksi tersebut diatas merupakan char company[20] = "Robotic Systems, 


instruksi untuk mendeklarasikan inc."; 
variabel string dengan panjang
maksimal 20 karakter (termasuk Pada bentuk penulisan diatas,
karakter NULL). Deklarasi tersebut karakter NULL tidak perlu ditulis.
sebenarnya tidak lain merupakan Secara implisit akan disisipkan oleh
deklarasi array bertipe char. kompiler. Dalam penulisan yang perlu
Pada sebuah konstanta string, diperhatikan, bila corporation
compiler string akan menunjukkan dideklarasikan sebagai string,
string melalui alamat pertama penugasan (assignment) suatu string
karakter string, dalam hal ini, array ke variabel string dan tidak
identifier. Pada satu array dentifier diperkenankan menulis seperti
dengan tanpa tanda kurung dibawah ini:
diinterprestasikan oleh compiler
sebagai alamat pertama yang masuk corporation = “Graphics"; 
pada array. Suatu string dalam
bahasa c didefinisikan sebagai satu

292
 
Operasi String Bahasa Pemrorgraman
 
dalam melakukan inisialisasi array class. Suatu string pada bahasa C
sebuah string caranya adalah, ukuran akan disimpan seorang programmer
dari array di dalam sebuah array untuk mendefinisikan array yang
merupakan sebuah opsional. Jika hal dapat diproses dengan notasi
tersebut tidak ditentukan, maka subscript standar. Program dibawah
compiler itu akan mengatur ukuran merupakan sebuah contoh program
string sesuai dengan banyaknya string. Contoh tersebut akan
karakter yang ada didalam string mengeluarkan satu karakter string
tersebut seperti contoh diatas. pada waktu yang sama, dan berhenti
String pada bahasa C ketika itu menemukan akhiran null.
mendefinisikan sebagai aray atau Instruksi tersebut menggunakan
larik yang dapat terbaca dan ditulis fungsi keanggotaan getline yang
dengan berbagai object, operator, dimiliki oleh bahasa C. Untuk lebih
maupun keanggotaan fungsi jelasnya perhatikan program dibawah
masukan atau keluaran sebuah ini:

Program 8.3
#include <iostream> 
 
using namespace std; 
 
int main() 

const int LENGTH = 80; 
char line[LENGTH]; 
int count = 0; 
 
cout << "Masukan kalimat tidak lebih dari " 
<< LENGTH‐1 << " characters:\n"; 
cin.getline(line, LENGTH); 
cout << "Kalimat yang anda Masukan Adalah:\n"; 
while (line[count] != '\0') 

cout << line[count]; 
count++; 

return 0; 

Keluaran program adalah sebagai berikut:


Masukan kalimat tidak lebih dari 79 characters: 
Bahasa C++ sangat menantang Ya ??[Enter] 
Kalimat yang anda Masukan Adalah: 
Bahasa C++ sangat menantang Ya ?? 
293
 
Bahasa Pemrograman Operasi String
 
8.2. Pointer pada Operasi String
Seperti yang sudah kita ketahui
bahwa string pada bahasa C dapat char name[20] = "Sekolah menengah"; 
diwakili ketika konstanta string, atau char *p; 
array sebuah karakter. Keduanya p = name;      
metoda ini mengalokasikan array dan cout << p << endl;   // cetak p 
lalu menggunakan alamat array p = "sekolahku";      
sebagai suatu pointer/penunjuk untuk cout << p << endl;   // cetak p 
char sebagai aktualisasi yang
merepresentasikan string. Keuntungan utama dalam
Perbedaan antara keduanya menggunakan sebuah variabel
adalah bahwa dalam kasus yang penunjuk pointer adalah untuk
pertama, array digunakan untuk merepresentasikan string pada
menyimpan string yang dialokasikan bahasa C yang mempunyai
secara implisit oleh compiler, kemampuan untuk membuat
sedangkan pada kasus kedua, array penunjuk titik pointer yang menunjuk
secara eksplisit dialokasikan oleh string yang berbeda.
programmer. Cara lain cara menggunakan
Metoda yang ketiga adalah penunjuk pointer char string pada
dengan merepresntasikan string bahasa C++ adalah dengan
bahasa C menggunakan pointer mendefinisikan penunjuk pointer dan
untuk operasi char untuk menunjuk kemudian menetapkannya untuk
string pada bahasa C. Dengan menunjuk secara dinamis dan
metode ini penyimpanan sudah mengalokasikan penyimpanan yang
dialokasikan oleh salah satu atau dua dikembalikan oleh operator yang
metoda yang lain. Di sini ada baru. Hal ini dapat digambarkan pada
beberapa contoh penggunaan string contoh program dibawah ini:
bahasa C adalah sebagai berikut:

Program 8.4
#include <iostream> 
 
using namespace std; 
 
int main() 

const int NAME_LENGTH = 50; 
char *pname; 
 
pname = new char[NAME_LENGTH];   // alokasi penyimpanan 
cout << "Masukan nama Anda: "; 
cin >> pname;         // cetak nama 
cout << "Hello " << pname; 
return 0; 

294
 
Operasi String Bahasa Pemrorgraman
 

Keluaran program diatas setelah diberi masukan adalah:


Masukan nama Anda:  Suprapto [Enter] 
Hello Suprapto 

Suatu kesalahan umum yang cout << "Masukan Nama Anda: "; 


sering terjadi dalam menggunakan cin >> pname; 
penunjuk pointer char pada string
bahasa C adalah ketika kesalahannya adalah karena
menggunakan penunjuk pointer tetapi program mencoba untuk membaca
tidak menunjuk dan mengalokasikan sebuah string ke dalam lokasi
string dengan baik. Perhatikan memori yang ditunjuk oleh pname,
contoh kode dibawah ini: ketika pname belum diinisialisasi
dengan baik.
char *pname; 

8.3. Library String Bahasa C++


Library C++ menyediakan diberikan kepada strlen adalah
banyak fungsi untuk memanipulasi alamat permulaan dari string. Hal
dan menguji string. Sebagai contoh, tersebut tidak mengetahui yang
sebuah program segmen berikut mana array sebagai tujuan akhir,
menggunakan fungsi strlen untuk sehingga hal tersebut akan mencari
menentukan panjang sebuah string kode null yang menandai adanya
yang disimpan dengan nama name: ujung string.
Karena string pada bahasa C
char name[50] = "Thomas Edison";  berupa penunjuk pointer untuk tipe
int length;  data char, string menangani fungsi
length = strlen(name);  yang mengambil parameter berupa
array dari sebuah char atau
Fungsi strlen untuk menerima ekivalensinya, penunjuk pointer untuk
string sebagai argumentasi. Hal menangani tipe data char. string
tersebut digunakan untuk pada C dapat juga dilewatkan pada
mengembalikan panjang string, fungsi di dalam tiga bentuk manapun
dimana banyaknya karakter akan dimana string dapat mengambil:
sampai tetapi tidak termasuk tanda  Konstanta string
null akhir string. Sebagai hasil dari  Nama array yang menyimpan
panjang variabel string akan memiliki string
jumlah karakter 13 yang disimpan di  Variabel Pointer yang menangani
dalam string. Panjang sebuah string alamat C
harus tidak dikacaukan dengan Sebagai contoh pada operasi untuk
ukuran dari array yang menahannya. menghitung panjang string, maka
Hal yang perlu diingat adalah bahwa fungsi strlen dapat digunakan
satu-satunya informasi yang sedang sebagai ditunjukkan dibawah ini:
295
 
Bahasa Pemrograman Operasi String
 

length = strlen("Thomas Edison");  pernyatan-pernyataan tersebut akan


menghasilkan keluaran sebagai
Contoh lain suatu fungsi berikut:
penanganan string pada C adalah
strcat. Fungsi strcat mengambil dua Hello 
string ketika sebuah parameter World! 
menggabungkan mereka, Hello World! 
mengembalikan suatu string yang
terdiri dari semua karakter yang
diikuti string pertama oleh karakter Fungsi strcat untuk menyalin isi
string kedua. Di bawah ini adalah dari string2 hingga selesai dari
satu contoh penggunaan pada string1. Di dalam contoh ini, string1
program: berisi string "Hello " sebelum
memanggil ke strcat. Setelah
char string1[13] = "Hello ";  panggilan dilakukan, maka nilainya
char string2[7] = "World!";  akan berisi string " Hello World!".
cout << string1 << endl;  Gambar dibawah menunjukkan isi
cout << string2 << endl;  dari kedua array sebelum dan setelah
strcat(string1, string2);  fungsi tersebut dipanggil.
cout << string1 << endl; 

296
 
Operasi String Bahasa Pemrorgraman
 
Sebelum memanggil strcat (string1,string2);

String1
H e l l o \0

String2
W o r l d ! \0

Setelah memanggil strcat (string1, string2)


String1
H e l l o W o r l d ! \0

String2
W o r l d ! \0

karakter yang terakhir pada programmer untuk memastikan


string1 sebelum tanda null adalah bahwa array dapat menjaga string1
sebagai ruang atau space. Fungsi dan sudah cukup besar untuk
strcat tidak untuk menyisipkan menahan string1 dan string2 serta
sebuah ruang, dengan demikian hal tanda akhiran null. Pada kasus ini,
tersebut adalah tanggung jawab sebuah segmen program yang
seorang programmer bahwa space menggunakan operator sizeof untuk
telah dipastikan satu telah di sana, menguji ukuran array sebelum strcat
jika hal tersebut diperlukan. Hal dipanggil:
tersebut merupakan tugas seorang

if (sizeof(string1) >= (strlen(string1)+ strlen(string2)+1)) 
  strcat(string1, string2); 
else 
  cout << "String1 tidak cukup besar untuk kedua string tersebut.\n"; 

Array tidak bisa ditugaskan bentuk yang lain. Contoh


selain dengan operator = . Masing- penggunaannya dapat dilihat pada
masing unsur individu harus program dibawah ini:
mempunyai tugas, biasanya di dalam
sebuah program pengulangan. char name[20]; 
Fungsi strcpy, dapat digunakan strcpy(name, "Albert Einstein"); 
untuk menyalin sebuah string ke

297
 
Bahasa Pemrograman Operasi String
 
Alasan penggunaan fungsi cout << string1 << endl; 
strcpy adalah string pada bahasa C. cout << string2 << endl; 
String yang kedua dicopy pada strcpy(string1, string2); 
alamat yang ditetapkan oleh argumen cout << string1 << endl; 
string yang pertama. Jika sesuatu cout << string2 << endl; 
sudah disimpan di dalam lokasi yang
telah disesuaikan oleh argumen yang sehingga keluaran program adalah
pertama, hal tersebut akan terjadi sebagai berikut:
overwritten, seperti ditunjukkan Hello 
dalam segmen program berikut ini: World! 
World! 
World! 
char string1[10] = "Hello", string2[10] = 
"World!"; 

8.4. Membandingkan string


Operator assignment dan dengan string, operator tersebut
operator relasional bekerja dengan membandingkan alamat-alamat
class string pada bahasa C++ string dimana strings tersebut disimpan
karena mereka dapat terjadi overload daripada membandingkan karakter
yang bekerja bersama kelas tersebut. yang berurutan secara nyata yang
Meskipun demikian, sama seperti menjadi anggota string tersebut.
operator assignment tidak bisa Program dibawah menunjukkan
digunakan untuk memberi pada string hasil keluaran yang salah dimana
C, operator relasional <=, <, >, >=, !=, program tersebut mencoba
dan == tidak bisa digunakan untuk membandingkan string menggunakan
membandingkan pada string. Hal ini persamaan operator diatas.
dikarenakan ketika digunakan

Program 8.5.
#include <iostream> 
 
using namespace std; 
 
int main() 

const int LENGTH = 40; 
char firstString[LENGTH], secondString[LENGTH]; 
 
cout << "Masukan string: "; 
cin.getline(firstString, LENGTH); 
cout << "Masukan string lain: "; 
cin.getline(secondString, LENGTH); 

298
 
Operasi String Bahasa Pemrorgraman
 
if (firstString == secondString) 
cout << "Yang anda masukan stringnya sama\n"; 
else 
cout << "String Tidak Sama.\n"; 
return 0; 

Keluaran program diatas adalah:


Masukan string: Alfonso[Enter] 
Masukan string lain: Alfonso[Enter] 
String Tidak Sama. 

Meskipun kedua string tersebut alamat-alamat yang berbeda,


yang dimasukan serupa, Program kemudian memberi suatu nilai hasil
diatas akan melaporkan bahwa yang salah.
mereka tidaklah sama. Hal ini
dikarenakan adanya instruksi
dibawah ini: 8.4.1. Fungsi strcmp
  Untuk membandingkan string
firstString == secondString  pada C dengan baik, maka perlu
menggunakan fungsi library strcmp.
hal yang digunakan dalam dalam Fungsi ini mengambil dua string
program diatas adalah statemen IF sebagai parameter dan
untuk membandingkan alamat mengembalikan bilangan integer
memori dari dua aray tersebut, untuk menandai,bagaimana dua
daripada membandingkan karakter string dibandingkan antara satu sama
string dan menyimpan alamat lain. Perhatikan instruksi dibawah ini:
tersebut. Karena alamatnya berbeda,
maka perbandingan menghasilkan int strcmp(char *string1, char *string2); 
suatu hasil yang salah. Sebenarnya,  
dalam bahasa C++, perbandingan menunjukkan bahwa fungsi
dapat dilakukan seperti dibawah ini: pengambilan dua string pada C
sebagai parameter dan
"abc" == "abc"  mengembalikan hasil bilangan
integar. Nilai dari hasil tersebut diatur
Biasanya instruksi diatas akan menurut aturan sebagai berikut:
menghasilkan suatu hasil yang salah.  Hasilnya kosong jika kedua string
Ini dikarenakan kebanyakan compiler adalah sama pada karakter
tidak memeriksa atau melihat jika melalui karakter dasar
konstanta string sudah ditemui  Hasilnya negatif jika string1
sebelumnya, dan akan menyimpan datang sebelum string2 dalam
kedua string-string pada alamat urutan menurut abjad
memori yang berbeda. Compiler
tersebut akan membandingkan kedua
299
 
Bahasa Pemrograman Operasi String
 
 Hasilnya positif jika string1 else   
mengikuti string2 dalam urutan   cout << "String tidak sama"; 
menurut abjad
Perhatikan contoh program dengan Pada program diatas, yang
menggunakan strcmp untuk hasilnya salah adalah untuk menguji
menentukan kesamaan dua buah dua buah string dengan operator
string: relational, dapat ditulis ulang secara
benar dengan fungsi strcmp, seperti
yang ditunjukkan pada program
if(strcmp(string1, string2) == 0)  dibawah ini:
cout << "string adalah sama"; 

Program 8.6
#include <iostream> 
#include <cstring> 
 
using namespace std; 
 
int main() 

const int LENGTH = 40; 
char firstString[LENGTH], secondString[LENGTH]; 
 
cout << "Masukan String: "; 
cin.getline(firstString, LENGTH); 
cout << "Masukan string lain: "; 
cin.getline(secondString, LENGTH); 
if (strcmp(firstString, secondString) == 0) 
cout << "Yang anda masukan stringnya sama\n"; 
else 
cout << "String tidak sama.\n"; 
return 0; 

Keluaran program diatas adalah sebagai berikut:


Masukan String: Alfonso[Enter] 
Masukan string lain: Alfonso[Enter] 
Yang anda masukan stringnya sama 

Fungsi strcmp bersifat case- "anjing" pada program diatas, maka


sensitive ketika digunakan untuk akan melaporkan bahwa kedua string
membandingkan string. Jika tidaklah sama karena ada perbedaan
pengguna memasukan "Anjing" dan huruf kapital dan kecil pada kata
300
 
Operasi String Bahasa Pemrorgraman
 
anjing. Kebanyakan compiler strcmp digunakan. Hal tersebut akan
menyediakan strcmp versi tidak minta kepada user untuk memasukan
standar untuk melaksanakan sejumlah angka lebih dari satu sesuai
perbandingan case-insensitive. dengan yang mereka beli. Bagian
Sebagai contoh, Borland C++ angka merupakan digit, huruf, dan
mempunyai fungsi stricmp. Hal tanda penghubung, sehingga dengan
tersebut hampir sama dengan demikian hal tersebut akan disimpan
strcmp kecuali mengenai case dari sebagai suatu string. Begitu
karakter tersebut yang akan pengguna memasukan angka,
diabaikan. program akan menampilkan harga
Program dibawah ini adalah tersebut.
contoh yang lebih praktis bagaimana

Program 8.7
include<conio.h> 
#include <iostream> 
#include <cstring> 
#include <iomanip> 
 
using namespace std; 
 
int main() 

    const double A_PRICE = 100.00, B_PRICE = 150.00; 
    const int PART_LENGTH = 8; 
    char partNum[PART_LENGTH]; 
 
    cout << "kode nomer ganda adalah:\n"; 
    cout << "\tKotak besar, kode nomernya: S147‐29A\n"; 
    cout << "\tRak Besar, kode nomernya: S147‐29B\n"; 
    cout << "masukan kode nomer yang ada\n"; 
    cout << "ingin membeli: "; 
    cin >> setw(9); 
    cin >> partNum; 
    cout << showpoint << fixed; 
    cout << setprecision(2); 
    if (strcmp(partNum, "S147‐29A") == 0) 
            cout << "harganya adalah $" << A_PRICE << endl; 
    else if (strcmp(partNum, "S147‐29B") == 0) 
            cout << "harganya adalah $" << B_PRICE << endl; 
    else 
            cout << partNum << " nomer yang dimasukan tidak sah.\n"; 
    getch(); 
    return 0; 
301
 
Bahasa Pemrograman Operasi String
 
 } 

Keluaran program diatas adalah sebagai berikut:


kode nomer ganda adalah: 
        Kotak besar, kode nomernya: S147‐29A 
        Rak Besar, kode nomernya: S147‐29B 
masukan kode nomer yang ada 
ingin membeli: S147‐29A[Enter] 
harganya adalah $100.00

8.5. Operator logika NOT


Beberapa para programmer lebih ada untuk menyimpan nama dan
suka menggunakan operator logika alamat pelanggan dalam sebuah file.
NOT dengan strcmp ketika menguji Nama-nama tersebut tidak akan
persamaan string-string. Karena muncul dalam file yang berurutan
logika 0 dipertimbangkan sebagai menurut abjad tetapi dalam order
logika salah, operator ! akan atau pesanan, dimana sesuai
mengkonversi nilai tersebut menjadi operator memasukkan mereka.
benar. Ekspresi strcmp (string1, Jika suatu daftar tersebut dicetak
string2) akan kembali benar jika dalam urutan pesanan tersebut,
kedua string adalah sama, dan salah maka akan menjadi sangat sulit untuk
ketika string berbeda. Pada kedua menempatkan setiap nama tersebut.
statemen berikut melaksanakan Daftar tersebut mau tidak mau harus
operasi yang sama: diurutkan sebelum dicetak. Karena
nilai yang dikembalikan oleh strcmp
if (strcmp(firstString, secondString) == 0)  berdasarkan pada urutan alfabet
if (!strcmp(firstString, secondString))  relative pesanan dari kedua string
yang sedang dibandingkan, maka hal
tersebut dapat digunakan dalam
8.6. Pengurutan String program untuk jenis string pendek.
Program sering ditulis dengan Program dibawah akan meminta
dicetak berurutan menurut daftar pemakai untuk memasukan dua
abjad. Misalnya penggunaan sistem nama, yang kemudian dicetak dalam
komputer pada sebuah toko serba secara urutan alfabet pemesan.

Program 8.8
#include<conio.h> 
#include <iostream> 
#include <cstring> 
 
using namespace std; 
 
int main() 

302
 
Operasi String Bahasa Pemrorgraman
 
 

   const int PANJANG_NAMA = 30; 
   char name1[PANJANG_NAMA], name2[PANJANG_NAMA]; 
 
   cout << "Masukan Nama (last Name): "; 
   cin.getline(name1, PANJANG_NAMA); 
   cout << "Masukan Nama Lain: "; 
   cin.getline(name2, PANJANG_NAMA); 
   cout << "Disini nama akan di urutkan berdasarkan alphabet:\n"; 
   if (strcmp(name1, name2) < 0) 
      cout << name1 << endl << name2 << endl; 
   else if (strcmp(name1, name2) > 0) 
      cout << name2 << endl << name1 << endl; 
   else 
      cout << "Anda memasukan nama yang SAMA!\n"; 
   getch(); 
   return 0; 

Keluaran program diatas adalah sebagai berikut:


Masukan Nama (last Name): suprapto 
Masukan Nama Lain: anwar 
Disini nama akan di urutkan berdasarkan alphabet: 
anwar 
suprapto 

setelah mempelajari beberapa program string diatas, dibawah ini merupakan


tabel ringkasan sebuah penanganan fungsi string.

Tabel 8.1. Fungsi untuk menangani string

FUNGSI  PENJELASAN 
strlen  Menerima string sebagai argumen. Pernyataan panjang string (tidak 
termasuk null terminator. Contoh Penggunaan: len = strlen (nama); 
strcat  Menerima dua string sebagai argumen. Fungsi menambahkan isi string 
kedua untuk pertama string. (Yang pertama adalah string diubah, kedua 
string tersebut dibiarkan tidak berubah.)  
Contoh Penggunaan: strcat (string1, string2); 
strcpy  Menerima dua string sebagai argumen. Fungsi salinan kedua string untuk 
pertama string. String miliknya kedua string dibiarkan tidak berubah. 
Contoh Penggunaan: strcpy (string1, string2); 
strncpy  Menerima dua string dan argumen integer. Argumen yang ketiga, sebuah 

303
 
Bahasa Pemrograman Operasi String
 
integer, menunjukkan berapa banyak karakter yang dicopy dari string 
kedua menuju string pertama. Jika kurang dari string2 sebanyak n 
karakter, string1 adalah ditambahkan dengan dengan karakter '\ 0'.  
Contoh Penggunaan: strncpy (string1, string2, n); 
strcmp  Menerima dua string argumen. Jika string1 dan string2 sama, fungsi ini 
memberikan hasil 0. Jika string2 alfabetnya lebih besar dari string1, ia 
kembali angka negatif. jika String2 alfabetnya kurang dari string1, ia 
kembali angka positif.  
Contoh Penggunaan: if (strcmp (string1, string2)) 
strstr  Pencarian untuk pertama terjadinya string2 dalam string1. Jika terjadinya 
string2 ditemukan, fungsi akan mengembalikan pointer string pertama. 
Jika tidak, ia akan mengembalikan NULL pointer (alamat 0). Contoh 
Penggunaan: cout <<strstr (string1, string2); 

Fungsi yang terakhir dalam tabel Dalam segmen program yang


diatas adalah strstr, yang digunakan sebelumnya, strstr akan
untuk mencari sebuah string dalam menempatkan string "tujuh" di dalam
dari sebuah string yang penjang. string "Nilai Empat pada tujuh tahun
Sebagai contoh, misalnya digunakan yang lalu”. Hal tersebut akan
untuk mencari string "tujuh" didalam kembalikan kealamat dari karakter
sebuah string kalimat yang lebih yang pertama didalam "tujuh", yang
besar "Nilai Empat dan tujuh pada selanjutnya akan disimpan dalam
tahun yang lalu". Fungsi variabel penunjuk pointer strPtr. Jika
argumentasi yang pertama adalah menjalankan bagian dari suatu
string dicari, dan argumentasi yang program engkap, segmen tersebut
kedua adalah string untuk mencari. akan menampilkan sebagai berikut:
Jika fungsi menemukan string dalam
string yang kedua terlebih dulu hal Nilai Empat pada tujuh tahun yang lalu 
tersebut kembalikan ke alamat tujuh pada tahun yang lalu 
kejadian string didalam string yang
kedua. Sebaliknya jika hal tersebut Fungsi strstr dapat bermanfaat
tidak dikembalikan alamat 0, atau dalam setiap program yang harus
alamat NULL. Di bawah ini adalah menempatkan informasi didalam
contoh pengunaan fungsi tersebut: string satu atau lebih. Program
dibawah merupakan contoh,
char array[] = "Nilai empat pada tujuh  menyimpan suatu database sejumlah
tahun yang lalu";  produk dan penjelasan dalam satu
char *strPtr;  array pada string. Hal tersebut
cout << array << endl;  memperbolehkan pengguna untuk
strPtr = strstr(array, "tujuh");   mengetahui penjelasan sebuah
  // mencari string "tujuh"  produk dengan memasukan semua
cout << strPtr << endl;  atau bagian dari nomor produknya.

304
 
Operasi String Bahasa Pemrorgraman
 
Program 8.9
#include<conio.h> 
#include <iostream> 
#include <string> 
 
using namespace std; 
 
int main() 

    const int N_ITEMS = 5, S_LENGTH = 31; 
    char prods[5][S_LENGTH] = {"TV311 televisi 31 inch", 
    "CD111 CD Player", 
    "MC123 Mesin Cuci", 
    "TM456 tape Mobil", 
    "PC955 Personal Computer"}; 
    char lookUp[S_LENGTH], *strPtr = NULL; 
    int index; 
 
    cout << "\tProduct Database\n\n"; 
    cout << "Masukan Kode angka product untuk mencari data: "; 
    cin.getline(lookUp, S_LENGTH); 
     
    for (index = 0; index < N_ITEMS; index++) 
    { 
      strPtr = strstr(prods[index], lookUp); 
      if (strPtr != NULL) 
      break; 
    } 
     if (strPtr == NULL) 
        cout << "kode tidak sesuai dengan produk.\n"; 
     else 
        cout << prods[index] << endl; 
        getch(); 
        return 0; 

Keluaran program diatas adalah:


Product Database 
Masukan Kode angka product untuk mencari data: CD111[Enter] 
CD111 CD Player 
 
 
Product Database 

305
 
Bahasa Pemrograman Operasi String
 
Masukan Kode angka product untuk mencari data: GJ987[Enter] 
kode tidak sesuai dengan produk. 

Dalam program tersebut diatas, if (strPtr == NULL) 


karena pengulangan tiap putaran cout << "kode tidak sesuai dengan  
melalui string dalam pemanggilan         produk.\n"; 
array maka pernyataannya adalah else 
sebagai berikut: cout << prods[index] << endl; 

strPtr = strstr(prods[index], lookUp); 
8.7. Konversi String/Numeric
Fungsi strstr mencari string yang Ada suatu perbedaan besar
sesuai oleh prods[index] karena antara nomor yang disimpan sebagai
nama yang dimasukkan oleh string dan yang disimpan sebagai
pengguna, yang mana disimpan nilai klasifikasi. String "26792"
dalam lookUp. Jika lookUp ditemukan sebenarnya tidak sebagai nomor,
di dalam prods[index], fungsi akan tetapi rangkaian yang diwakili kode-
mengembalikan alamatnya. Dalam kode ASCII untuk setiap digit-digit
kasus tersebut, statemen if dari nomor. Rangkaian tersebut
menyebabkan pengulangan akan menggunakan enam byte dari
berakhir. memori termasuk kode akhir string
(null).
if (strPtr != NULL)  Karena itu bukan sebagai nomor
break;  nyata, maka tidak mungkin untuk
melaksanakan operasi matematik
Di luar pengulangan tersebut, sesuai dengannya, kecuali jika hal tersebut
statemen IF-ELSE untuk menentukan dikonversi menjadi nilai numerik.
jika string dimasukkan oleh pengguna Beberapa fungsi yang ada dalam
ditemukan dalam array. Jika tidak, pustaka C++ untuk mengubah
maka akan menginformasikan penyajian string angka ke dalam nilai
kepada pengguna bahwa tidak ada numerik dan sebaliknya. Tabel
produk yang sesuai ditemukan. dibawah menunjukan fungsi-fungsi
Sebaliknya, nomor produk dan tersebut:
deskripsi akan ditampilkan:

Tabel 8.2. Fungsi Konversi String

FUNGSI  PENJELASAN 
atoi  Dalam  string  sebagai  argument.  Fungsi  untuk  mengubah  String 
menjadi integer dan mengembalikan nilai. 
Contoh Penggunaan: num = atoi("4569"); 
atol  Dalam  bahasa  c,  string  sebagai  argument.  Fungsi  untuk  mengubah 
String menjadi long integer dan mengembalikan nilai. 
306
 
Operasi String Bahasa Pemrorgraman
 
Contoh Penggunaan: lnum = atol("500000"); 
atof  Menerima C‐string sebagai argumen. Fungsi mengubah string ke dua 
yang  kembali  dan  nilai.  Gunakan  fungsi  ini  mengkonversi  string  ke 
float atau double.  
Contoh Penggunaan: fnum = atof ( "3,14159") 
itoa  Mengkonversi  sebuah  integer  ke  string.  Argumen  pertama,  nilai, 
adalah  integer.  Hasilnya  akan  disimpan  di  lokasi  yang  oleh  kedua 
argumen,  string.  Argumen  yang  ketiga,  basis,  merupakan  integer.  It 
menentukan  penomoran  system  yang  dikonversi  integer  yang  harus 
dinyatakan dalam (8 = oktal, desimal = 10, 16 = heksadesimal, dll).  
Contoh Penggunaan: itoa (nilai, string, basis); 

Fungsi atoi mengkonversi string double akan dikembalikan, seperti


menjadi bilangan integer. Hal ditunjukkan pada program dibawah
tersebut menerima argumentasi ini:
string dan kebalika nilai bilangan
integer yang dikonversi. Di bawah ini double fnum; 
adalah sebuah contoh dari bagai- fnum = atof("12.67"); 
mana cara melakukan konversi:
Fungsi itoa adalah serupa
int num;  dengan atoi, tetapi itoa bekerja
num = atoi("1000");  kebalikannya. Itoa akan
mengkonversi suatu bilangan integer
Dalam statemen ini, atoi ke dalam penyajian string yang
mengkonversi string "1000" ke dalam merepresentasikan bilangan integer.
bilangan integer 1000. Begitu Fungsi itoa menerima tiga
variabel num diberikan nilai argumentasi: yaitu nilai bilangan
tersebut,maka dapat digunakan integer untuk dikonversi, suatu
dalam operasi matematik atau setiap penunjuk pointer menjadi lokasi
opersi yang memerlukan suatu nilai memori dimana string tersebut
numerik. disimpan, dan sebuah nomor
Fungsi atol bekerja seperti merepresentasikan dasar-dasar
halnya atoi, kecuali pada nilai dengan sebuah nilai yang dikonversi. Di
tipe data long integer. Perhatikan bawah ini adalah satu satu contoh
contoh dibawah ini: instruksinya:

long bigNum;  char numArray[10]; 
bigNum = atol("500000");  itoa(1200, numArray, 10); 
cout << numArray << endl; 
sebagaimana yang diinginkan, fungsi
atof menerima sebuah argumentasi Sebuah potongan program
string dan melakukan konversi string tersebut diatas akan mengkonversi
menjadi double. Sebuah nilai numerik bilangan integer 1200 menjadi string.

307
 
Bahasa Pemrograman Operasi String
 
String tersebut kemudian disimpan di Sekarang perhatikan program
dalam sebuah array dengan nama dibawah ini, yang menggunakan
numArray. Argumentasi yang ketiga, sebuah fungsi konversi string-to-
10, berarti nomor harus ditulis dalam number, atoi. Pada program meminta
sistim desimal, atau notasi dasar 10. pengguna untuk memasukan sebuah
Keluaran dari statemen cout diatas rangkaian nilai-nilai, atau surat Q
adalah: atau q untuk berhenti. Rata-rata dari
angka-angka tersebut kemudian
1200  dihitung dan ditampilkan.

Program 8.10
#include<conio.h> 
#include <iostream> 
#include <cstring>          // untuk strcmp 
#include <cstdlib>          // untuk atoi 
  
using namespace std; 
 
int main() 

  const int LENGTH = 20; 
  char input[LENGTH]; 
  int total = 0, count = 0; 
  double average; 
 
  cout << "Program ini akan mencari rata‐rata bilangan.\n"; 
  cout << "Masukan bilangan pertama atau tekan Q untuk keluar: "; 
  cin.getline(input, LENGTH); 
 
  while ((strcmp(input, "Q") != 0)&&(strcmp(input, "q") != 0)) 
  { 
     total += atoi(input);                              
     count++;  
     cout << "Masukan bilangan selanjutnya atau tekan Q untuk keluar: "; 
     cin.getline(input, LENGTH); 
  } 
 
  if (count != 0) 
  { 
     average = double(total)/count; 
     cout << "Reratanya adalah: " << average << endl; 
   } 

308
 
Operasi String Bahasa Pemrorgraman
 
  getch();  
  return 0; 

Keluaran program, diatas adalah:


Program ini akan mencari rata‐rata bilangan. 
Masukan bilangan pertama atau tekan Q untuk keluar: 45 
Masukan bilangan selanjutnya atau tekan Q untuk keluar: 67 
Masukan bilangan selanjutnya atau tekan Q untuk keluar: 65 
Masukan bilangan selanjutnya atau tekan Q untuk keluar: 45 
Masukan bilangan selanjutnya atau tekan Q untuk keluar: 43 
Masukan bilangan selanjutnya atau tekan Q untuk keluar: 23 
Masukan bilangan selanjutnya atau tekan Q untuk keluar: 23 
Masukan bilangan selanjutnya atau tekan Q untuk keluar: 45 
Masukan bilangan selanjutnya atau tekan Q untuk keluar: 67 
Masukan bilangan selanjutnya atau tekan Q untuk keluar: q 
Reratanya adalah: 47 

Pemanggilan fungsi strcmp kedalam pada masukan menjadi


untuk membandingkan dua string. bilangan integer dan menambahkan
Jika kedua string serupa, maka nilai nilai total secara keseluruhan
akan diisi dengan 0. sebaliknya jika sebagaimana dalam insruksi berikut
tidak maka nilai yang diisikan bukan ini:
nol. Sebagaimna statemen while,
strcmp digunakan untuk menentukan, total += atoi(input); // Keep a running 
jika string masukannya total 
menggunakan salah satu "Q" atau
"q". user kemudian akan meminta nomor
berikut. Ketika semua angka-angka
while ((strcmp(input, "Q") !=  telah dimasukkan, user mengakhiri
0)&&(strcmp(input, "q") != 0))  pengulangan dengan memasukan
karakter "Q" atau "q". Jika satu atau
Jika user tersebut belum lebih angka-angka tersebut telah
memasukkan karakter "Q" atau "q" dimasukkan, maka perhitungan rata-
maka program akan menggunakan rata angka-angka tersebut akan
atoi untuk mengkonversi string ditampilkan.

8.8. Menguji sebuah Karakter


Library bahasa C++ karakter. Fungsi tersebut menguji
menyediakan beberapa fungsi yang sebuah argumentasi int tunggal dan
memperbolehkan seorang programer hasil pengujian tersebut berupa
untuk menguji nilai dari sebuah benar atau salah. Sebuah bilangan

309
 
Bahasa Pemrograman Operasi String
 
integer adalah Kode ASCII dari suatu uppercase.\n"; 
karakter. Sebagai contoh pada
segmen program berikut dibawah Pada contoh program diatas
menggunakan fungsi isupper 86 menggunakan variabel huruf yang
untuk menentukan jika karakter lolos berisi karakter huruf kecil, maka
dari sebagai huruf besar sebagai isupper akan salah. Sehingga
argumentasi yang diinginkan. Jika hal statemen akan menyebabkan pesan
tersebut sesuai maka fungsi akan yang muncul "huruf bukan
benar. Jika tidak, maka hasilnya uppercase". Tabel dibawah
salah. merupakan daftar beberapa fungsi
untuk menguji karakter. Tiap-tiap
char letter = 'a';  fungsi diterapkan dalam file header
if (isupper(letter))  cctype, maka file header harus
  cout << " huruf uppercase.\n";  dipastikan tertulis dalam program
else  ketika menggunakan fungsi tersebut.
  cout << " huruf bukan 

Tabel 8.3. Fungsi Pengujian Karakter

FUNGSI 
PENJELASAN 
KARAKTER 
isalpha  Returns betul (angka bukan angka nol) jika argumen adalah 
huruf alfabet. Returns salah jika argumen bukan huruf. 
isalnum  Return betul (angka bukan angka nol) jika argumen berupa 
huruf  atau angka. Sebaliknya return adalah salah. 
isdigit  Returns betul (angka bukan angka nol) jika argumen adalah 
angka 0 sampai 9. Sebaliknya selain itu salah.  
islower  Return betul (angka bukan angka nol) jika argumen berupa 
huruf kecil. Sebaliknya jika tidak maka salah. 
isprint  Return betul (angka bukan angka nol) jika argumen berupa 
karakter yang dapat dicetak (termasuk spasi). jika tidak maka 
Return salah. 
ispunct  Returns betul (angka bukan angka nol) jika argumen yang 
dicetak adalah karakter selain angka, huruf, atau ruang. Selain 
itu salah. 
isupper  Returns betul (angka bukan angka nol) jika argumen adalah 
huruf besar. Selain itu salah 
isspace  Return betul (angka bukan angka nol) jika argumen berupa 
karakter spasi, selain itu salah.  
Karakter spasi adalah salah satu dari karakter berikut ini: spasi ' ' 
vertikal tab '\v' line baru ‘\n’  tab ‘\t’ 

310
 
Operasi String Bahasa Pemrorgraman
 
8.9. Deskripsi Fungsi Karakter
Program dibawah menggunakan karakter dan selanjutnya tampilkan
beberapa fungsi seperti pada tabel sebagai pesan, tergantung pada hasil
diatas. Hal tersebut akan minta dari tiap fungsi yang digunakan.
pengguna untuk memasukan sebuah

Program 8.11
 #include<conio.h> 
#include <iostream> 
#include <cctype> 
  
 using namespace std; 
 
 int main() 
 { 
  char input; 
 
  cout << "Masukan karakter bebas: "; 
  cin.get(input); 
  cout << "karakter yang dimasukan adalah: " << input << endl; 
  cout << "Kode ASCIInya adalah: " << int(input) << endl; 
  if (isalpha(input)) 
     cout << "Itu adalah karater alfabet.\n"; 
  if (isdigit(input)) 
     cout << "Itu adalah digit numerik.\n"; 
  if (islower(input)) 
     cout << "Huruf yang anda masukan adalah huruf kecil.\n"; 
  if (isupper(input)) 
     cout << "Huruf yang anda masukan adalah huruf besar.\n"; 
  if (isspace(input)) 
     cout << "itu adalah karakter spasi.\n"; 
  getch(); 
  return 0; 

Keluaran Program adalah sebagai berikut:


Masukan karakter bebas: g[Enter] 
karakter yang dimasukan adalah: g 
Kode ASCIInya adalah: 103 
Itu adalah karater alfabet. 
Huruf yang anda masukan adalah huruf kecil.. 

311
 
Bahasa Pemrograman Operasi String
 
Program dibawah akan karakter nomor pelanggan untuk
menampilkan sebuah aplikasi praktis menentukan apakah sesuai dengan
mengenai fungsi uji karakter. format atau bentuk yang tepat.
Program tersebut menguji tujuh

Program 8.12
 #include <conio.h> 
 #include <iostream> 
 #include <cctype> 
  
 using namespace std; 
 
 bool testNum(char []); 
 
 const int NUM_LENGTH = 8; 
 const int ALPHA_LENGTH = 3; 
 int main() 
 { 
 
  char customer[NUM_LENGTH]; 
 
  cout << "masukan nomer pelanggan dalam Form "; 
  cout << "LLLNNNN\n"; 
  cout << "(LLL = huruf dan NNNN = angka): "; 
  cin.getline(customer, NUM_LENGTH); 
  if (testNum(customer)) 
     cout << "Nomer pelanggan yang dimasukan valid\n"; 
  else 
   { 
     cout << "hal tersebut tidak sesuai dengan format"; 
     cout << "angka pelanggan.\n contohnya adalah seperti dibawah ini:\n"; 
     cout << " ABC1234\n"; 
   } 
  getch(); 
  return 0; 
 } 
 
 // Mendefinisikan Fungsi TestNumb.  
 bool testNum(char custNum[]) 
 { 
    for (int count = 0; count < ALPHA_LENGTH; count++) 
     { 
       if (!isalpha(custNum[count])) 

312
 
Operasi String Bahasa Pemrorgraman
 
       return false; 
     } 
    for (int count = ALPHA_LENGTH; count < NUM_LENGTH ‐ 1; count++) 
     { 
       if (!isdigit(custNum[count])) 
       return false; 
     } 
    return true; 
 } 

Keluaran program diatas adalah sebagai berikut:


masukan nomer pelanggan dalam Form LLLNNNN 
(LLL = huruf dan NNNN = angka): ABC1235 
Nomer pelanggan yang dimasukan valid 

Keluaran program diatas jika yang dimasukan salah adalah sebagai berikut:
masukan nomer pelanggan dalam Form LLLNNNN 
(LLL = huruf dan NNNN = angka): sasfewfrw 
hal tersebut tidak sesuai dengan formatangka pelanggan. 
 contohnya adalah seperti dibawah ini: 
 ABC1234 

Dalam program diatas, nomor yang diuji bukan berupa alfabet. Jika
pelanggan diharapkan terdiri dari hal ini terjadi pada beberapa dari tiga
huruf alfabet yang diikuti oleh digit- yang karakter pertama, fungsi
digit. Kemudian fungsi testNum testNum akan salah. Demikian juga,
menerima sebuah array dan menguji karakter keempat berikutnya diuji
karakter awal sesuai dengan dengan pengulangan berikut ini:
pengulangan berikut ini:
for (count = ALPHA_LEN; count < 
for (count = 0; count < ALPHA_LEN;  NUM_LENGTH ‐ 1; count++) 
count++)  { 
{    if (!isdigit(custNum[count])) 
  if (!isalpha(custNum[count]))    return false; 
  return false;  } 

Fungsi isdigit akan bernilai benar
Fungsi isalpha untuk jika argumentasi merepresentasikan
mengembalikan kondisi benar jika karakter tentang semua digit 0
argumentasi adalah satu karakter sampai 9. Operator ! digunakan untuk
alfabet. operator ! digunakan menentukan jika karakter yang diuji
didalamnya, jika statemen tersebut bukan sebuah digit. Ini terjadi
untuk menentukan apakah karakter biasanya pada empat karakter

313
 
Bahasa Pemrograman Operasi String
 
terakhir, fungsi testNum akan bernilai yang nilai salah. Di kasus tersebut,
salah. garis terakhir dalam fungsi tersebut
Jika nomor pelanggan adalah statemen dengan hasil yang
mengggunakan bentuk yang tepat, benar, dimana hal tersebut menandai
fungsi tersebut akan melalui siklus bahwa nomor pelanggan adalah
kedua pengulangan tanpa ada hasil valid.

8.10. Konversi Karakter


Library Bahasa C++ Fungsi ini merupakan prototype
menyediakan dua fungsi, toupper dan dalam file header cctype, maka
tolower. Untuk mengubah kasus dari pastikan untuk memasukkan dua
sebuah karakter. Fungsi tersebut fungsi didalamnya.
digambarkan pada Tabel dibawah ini.

Tabel 8.4. Fungsi Pengubah Karakter

FUNGSI  DEFINISI 
toupper  Mengembalikan huruf besar setara dengan argumen.  
tolower  Mengembalikan lowercase setara dengan argumen 

Keduanya dari fungsi pada tabel bilangan integer pernyataan sebagai


diatas akan menerima sebuah berikut:
representasi bilangan integer kode
ASCII dari suatu karakter yang cout << toupper('a');   // prints 65 
dikonversi dan mengembalikan
representasikan bilangan integer pada potongan program diatas akan
Kode ASCII dari huruf besar atau mencetak bilangan integer Kode
huruf kecil setara. Tiap fungsi hanya ASCII dari 'A’. Untuk mendapatkan
mengembalikan argumentasinya, jika cetakan karakter, maka dapat
konversi tidak bisa dibuat atau tak memasukan hasil kenilai tipe data
diperlukan. Sebagai contoh, jika char, seperti dalam potongan
argumentasi tersebut pada toupper program dibawah ini:
bukan surat huruf kecil, lalu toupper
hanya kembalikan argumentasi yang cout << static_cast<char>(toupper('a')); 
ada tanpa mengubahnya. Prototipe // prints A 
fungsi-fungsi tersebut adalah:
atau dapat juga dengan memberi
int toupper(int ch);  hasil ke nilai sebuah variabel karakter
int tolower(int ch);  pertama dan kemudian karakter
tersebut dicetak:
kenyataannya fungsi dua veriabel ini
mengkembalikan pada sebuah char ch = toupper('a'); 
314
 
Operasi String Bahasa Pemrorgraman
 
cout << ch; // prints A  program yang berikut, variabel huruf
diatur menjadi nilai 'A'. Fungsi tolower
Sebagaimana telah disebutkan untuk mengembalikan karakter 'a’,
diatas, fungsi toupper akan ketika huruf masih berisi 'A'.
mengembalikanya tanpa perubahan,  
jika hal tersebut buka berupa huruf: char letter = ‘A’; 
char ch = tolower(letter); 
cout << static_cast<char>(toupper('&'));  cout << ch << endl; 
// prints &  cout << letter; 

atau suatu huruf tetapi itu sudah potongan program diatas kalau di
merupakan huruf besar: compile menampilkan hasil sebagai
berikut:
cout << static_cast<char>(toupper('B'); 
// prints B  a 

Karena uraian mengenai toupper dan
tolower dilewati oleh nilai, fungsi Program berikut dibawah untuk
tersebut tidak akan mengubah mendemontrasikan fungsi toupper
parameter yang mereka miliki: dalam sebuah pengulangan sampai
Sebagai gantinya, mereka hanya ada kemungkian user memasukan
mengembalikan ekivalensi huruf salah satu huruf Y atau N.
besar atau huruf kecil. Sebagai
contoh, di dalam sebuah segmen

Program 8.13
#include <conio.h> 
#include <iostream> 
 #include <cctype> 
 #include <iomanip> 
  
 using namespace std; 
 
 int main() 
 { 
  const double PI = 3.14159; 
  double radius; 
  char go; 
 
  cout << "Program untuk menghitung luas lingkaran\n"; 
  cout << setprecision(2); 
  cout << fixed; 
  do 
   { 

315
 
Bahasa Pemrograman Operasi String
 
       cout << "Masukan jari‐jari lingkaran: "; 
       cin >> radius; 
       cout << "Luas lingkaran adalah " << (PI * radius * radius); 
       cout << endl; 
       do 
        { 
            cout << "Akan menghitung lagi? (Y or N) "; 
            cin >> go; 
        } while (toupper(go) != 'Y' && toupper(go) != 'N'); 
   } while (toupper(go) == 'Y'); 
 getch(); 
 return 0; 
 } 

Program keluaran program diatas adalah berikut


Program untuk menghitung luas lingkaran 
Masukan jari‐jari lingkaran: 77 
Luas lingkaran adalah 18626.49 
Akan menghitung lagi? (Y or N) y 
 
Masukan jari‐jari lingkaran: 23 
Luas lingkaran adalah 1661.90 
Akan menghitung lagi? (Y or N) n 

8.11. Menulis string


Setelah mampu melewati materi contoh, program dibawah ini adalah
mengenai array, maka anda dapat menggunakan sebuah fungsi untuk
menulis fungsi secara sendiri untuk melakukan copy atau menyalin string
memproses sebuah string. Sebagai dari satu array ke bentuk yang lain.

Program 8.14
#include <conio.h> 
#include <iostream> 
 
 using namespace std; 
 
 void stringCopy(char [], char []); 
 
 int main() 
  { 
     const int S_LENGTH = 30; 
      

316
 
Operasi String Bahasa Pemrorgraman
 
     char first[S_LENGTH], second[S_LENGTH]; 
 
     cout << "masukan string dengan tidak lebih dari " 
     << S_LENGTH ‐ 1 << " karakter:\n"; 
     cin.getline(first, S_LENGTH); 
     stringCopy(first, second); 
     cout << "String yang anda masukan adalah:\n" << second << endl; 
     getch(); 
     return 0; 
  } 
 
 // Definisi Fungsi stringCopy * 
 void stringCopy(char string1[], char string2[]) 
  { 
      int index = 0; 
 
      while (string1[index] != '\0') 
       { 
            string2[index] = string1[index]; 
            index++; 
       } 
      string2[index] = '\0'; 
  } 

Keluaran program diatas adala sebagai berikut:


masukan string dengan tidak lebih dari 29 karakter: 
hello saya sedang belajar 
String yang anda masukan adalah: 
hello saya sedang belajar 

Yang perlu diperhatikan pada fungsi memberi suatu tanda batal


program diatas adalah pada fungsi (karakter '\0' ) hingga selesai string2,
stringCopy yang tidak menerima satu dengan demikian hal tersebut dapat
bentuk array. Program tersebut diakhiri dengan baik.
hanya melakukan copy karakter- Program dibawah menggunakan
karakter dari string1 ke dalam string2 handling function (fungsi untuk
sampai menemui sebuah hal yang menangani) string: nameSlice.
dapat mengakhiri atau tanda null Program akan minta pengguna itu
dalam string1. untuk memasukan nama awal dan
Ketika sebuah tanda yang akhir pengguna, yang dipisahkann
mengakhiri tersebut ditemukan dan oleh spasi. Kemudia fungsi mencari
pengulangan sudah mencapai ujung string untuk spasi dan mengganti
dri string, statemen terakhir dalam
317
 
Bahasa Pemrograman Operasi String
 
dengan suatu terminator akhir. Perhatikan program dibawah ini:

Program 8.15
 #include<conio.h> 
#include <iostream> 
 
 using namespace std; 
 
 void potogannama(char []);  
 
 int main() 
 { 
     const int PANJANG_NAMA = 41; 
     char name[PANJANG_NAMA]; 
      
     cout << "Masukan nama depan dan nama akhir Anda dengan dipisahkan"; 
     cout << "dengan spasi:\n"; 
     cin.getline(name, PANJANG_NAMA); 
     potogannama(name); 
     cout << "Nama pertama anda adalah: " << name << endl; 
     getch(); 
     return 0; 
 } 
 
 // Definisi Fungsi potogan nama. 
 void potogannama(char userName[]) 
 { 
      int count = 0; 
      while (userName[count] != ' ' && userName[count] != '\0') 
          count++; 
      if (userName[count] == ' ') 
          userName[count] = '\0'; 
 } 

Keluaran program diatas adalah sebagai berikut:


Masukan nama depan dan nama akhir Anda dengan dipisahkandengan spasi: 
Supra indonesia 
Nama depan anda adalah: supra 

Pengulangan pada variabel melakukan scan string, kemudian


potongannama dimulai saat karakter mencari baik sebuah spasi atau
yang pertama dalam array dan terminator null:

318
 
Operasi String Bahasa Pemrorgraman
 
contoh memasukan string nama
while (userName[count] != ' ' &&  depan dan nama belakang supra
userName[count] != '\0')  indonesia”, pada program pengulang-
count++;  an menemukan pemisah spasi
“suprapto” dan “indonesia”, pada
Jika karakter dalam userName[5]. Ketika pengulangan
userName[count] bukanlah sebuah berhenti, count diatur sampai 5. Akan
spasi atau terminator null, count lebih jelasnya jika memperhatikan
akan ditambah dengan karakter gambar dibawah ini:
berikutnya yang akan diuji. Dengan

Perulangan akan berhenti ketika menemukan tanda spasi atau userName[5]  
 
                                 
s  u  p  r  a    i  n  d  o  n  e  s  i  a  \0   
0  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16 
subskrip 

Begitu pengulangan sudah


diselesaikan, userName[count] akan if (userName[count] == ' ') 
berisi salah satu spasi atau userName[count] = '\0'; 
terminator null. Jika berisi spasi, dan
diikuti tanda if statemen kemudian sehingga dapat diilustrasikan seperti
menggantikannya dengan terminator pada gambar dibawah ini:
null:

Ruangan diberi \0 atau tanda sebagai string selesai  
 
                                 
s  u  p  r  a  \0  i  n  d  o  n  e  s  i  a  \0   
0  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16 
subskrip 

8.12. Pointer untuk menguraikan String


Penunjuk pointer sangat diasumsikan bahwa semua karakter
bermanfaat untuk menulis sebuah dari alamat tertinggi akan menahan
fungsi proses pada string. Jika tanda null menjadi bagian dari string.
alamat awal sebuah string berubah Program dibawah menunjukkan
menjadi sebuah variabel parameter sebuah fungsi, countChars, yang
penunjuk pointer, maka akan dapat menggunakan penunjuk pointer untuk

319
 
Bahasa Pemrograman Operasi String
 
menghitung jumlah karakter khusus muncul didalam string.

Program 8.16
#include<conio.h> 
#include <iostream> 
  
 using namespace std; 
 
 // Fungsi prototipe 
 int countChars(char *, char); 
 
 int main() 
 { 
     const int PANJANG_S = 51; 
     char userString[PANJANG_S], letter; 
 
     cout << "Masukan String (lebih dari " << PANJANG_S‐1 << " karakter): "; 
     cin.getline(userString, PANJANG_S); 
     cout << "Masukan karakter dan saya akan menghitung berapa\n"; 
     cout << "kali yang muncul dalam string yang telah anda tulis: "; 
     cin >> letter; 
     cout << letter << " Muncul: "; 
     cout << countChars(userString, letter) << " kali.\n"; 
     getch (); 
     return 0; 
 } 
 
 // Definisi countChars. 
 int countChars(char *strPtr, char ch) 
 { 
     int times = 0; 
     while (*strPtr != '\0') 
      { 
        if (*strPtr == ch) 
           times++; 
        strPtr++; 
      } 
     return times; 
 } 

Keluaran program diatas adalah sebagai berikut:

320
 
Operasi String Bahasa Pemrorgraman
 
Masukan String (lebih dari 50 karakter): saya akan pergi berangkat ke kantor 
Masukan karakter dan saya akan menghitung berapa 
kali yang muncul dalam string yang telah anda tulis: a 
a Muncul: 7 kali. 

Di dalam fungsi countChars, strPtr Jika keduanya sama, variabel times


poin pada string tersebut akan dicari akan diincrement. Statemen yang
dan ch berisi karakter untuk mencari. terakhir dalam pengulangan tersebut
Pengulangan while akan di ulangi adalah:
ketika panjang karakter strPtr poin
pada akhir bukan terminator null: strPtr++; 

while (*strPtr != '\0')  statemen increment menaikan alamat


dalam strPtr. Ini menyebabkan strPtr
Dalam pengulangan, statemen if akan menunjuk karakter berikutnya
yang mengikutinya membandingkan didalam sebuah string. Kemudian
karakter strPtr poin dengan karakter pengulangan memulai kembali.
didalam ch: Ketika strPtr akhirnya menjangkau
terminator null, pengulangan
if (*strPtr == ch)  mengakhiri dan fungsi
mengembalikan nilai dalam fungsi
time.

8.13. Class String pada C++


Dari satu segi pandangan mengalami kesulitan dan
metode pemrograman yang mudah, membosankan untuk melakukan
library standar class string operasi string.
menawarkan beberapa keuntungan Setiap program class string
pada string. Ketika anda sudah harus menggunakan #include
mengetahui dalam bab ini, class sebagai file header string. Object
string mempunyai beberapa anggota string dapat diciptakan dengan
fungsi dan operator yang mempunyai beberapa construktor. Program
muatan lebih. Hal ini jelas dibawah menunjukkan dua
menyederhanakan tugas, seperti construktor class string: sebagai
penempatan sebuah karakter atau default construktor dan konversi
string di dalam suatu string, yang jika konstruktor string ke menjdai obyek
dilakukan tanpa fungsi akan string.

Program 8.17
#include<conio.h> 
 #include <iostream> 
 #include <string> 
  
 using namespace std; 
321
 
Bahasa Pemrograman Operasi String
 
 
 int main() 
 { 
     string ucapan; 
     string nama("suprapto");  
      
     ucapan = "Halo "; 
      
     cout << ucapan << nama << endl; 
     getch(); 
     return 0; 
 } 

Keluaran program diatas adalah sebagai berikut:


Halo suprapto 

Supaya dapat membuah program konsruktor string yang diberikan


selain contoh program diatas, dalam tabel dibawah ini:
perhatikan tabel pemakaian

Tabel 8.5. Pemakaian Konsruktor String

DEFINITION  DESCRIPTION 
string alamat;  Definisi objek string yang langsung disebutkan  
string nama("suprapto");  Mendefinisikan string benda bernama nama, 
diinisialisasi dengan "suprapto"  
string person1(person2);  Mendefinisikan string benda bernama person1, yang 
merupakan salinan dari person2. person2 mungkin salah 
satu objek atau string karakter array. 
string set1(set2, 5);  Mendefinisikan string bernama set1 objek yang 
diinisialisasi untuk pertama lima karakter dalam 
karakter array set2.  
string lineFull('z', 10);  Mendefinisikan string benda bernama lineFull 
diinisialisasi dengan 10 'z' karakter.  
string firstName(fullName,  Mendefinisikan string benda bernama firstname, 
0, 7);  diinisialisasi dengan substring dari string fullName. 
Substring adalah tujuh karakter, mulai pada posisi 0. 

Hal yang perlu diketahi pada program class string memberi muatan lebih
dibawah, menggunakan operator = pada beberapa operator, yang
untuk memberi nilai obyek string. digambarkan pada Tabel dibawah.

322
 
Operasi String Bahasa Pemrorgraman
 

Tabel 8.6. Operator String

OVERLOADED  PENJELASAN OPERATOR 
>>  Ekstrak karakter stream dan masukkan karakter ke dalam string. 
Karakter akan  dicopy  sampai menemui spasi atau akhir kalimat 
dan sekaligus menhitung karakter masukan. 
<<  Menyisipkan string ke dalam stream.  
=  Memasukan string pada sebelah kanan ke obyek string pada 
sebelah kiri. 
+=  Menambahkan copyan string pada string sebelah kanan ke 
obyek string pada sebelah kiri. 
+  Mengembalikan string yang merupakan rangkaian dari dua 
operand string  
[]  Melaksanakan tanda notasi array, seperti nama [x]. dimana hal 
tersebut merujuk pada karakter pada pengembalian posisi x. 
Relational  Masing‐masing operator penghubung diimplementasikan: < > <= 
Operators  >= == != 

Program dibawah digunakan untuk      str3 += "GHI"; 


mendemontrasikan sebagian dari      cout << str3 << endl; 
operator string      return 0; 
 } 
Program 8.18
 #include <iostream>  Keluaran program tersebut diatas
 #include <string>  adalah sebagai berikut:
  
 using namespace std;  ABC 
  DEF 
 int main()  ABCDEF 
 {  ABCDEFGHI 
     string str1, str2, str3; 
     str1 = "ABC"; 
     str2 = "DEF";  Class string juga mempunyai
     str3 = str1 + str2;  beberapa fungsi anggota. Sebagai
       contoh, fungsi size mengembalikan
     cout << str1 << endl;  panjang string. Hal tersebut
     cout << str2 << endl;  didemontrasikan dalam pengulangan
     cout << str3 << endl;  For pada program dibawah ini:

323
 
Bahasa Pemrograman Operasi String
 

Program 8.19
#include<conio.h> 
 #include <iostream> 
 #include <string> 
  
 using namespace std; 
 
 int main() 
 { 
     string str1, str2, str3; 
     str1 = "ABC"; 
     str2 = "DEF"; 
     str3 = str1 + str2; 
  
     for (int x = 0; x < str3.size(); x++) 
         cout << str3[x]; 
     cout << endl; 
 
     if (str1 < str2) 
         cout << "str1 adalah lebih kecil daripada str2\n"; 
     else 
         cout << "str1 tidak lebih kecil daripada str2\n"; 
     getch(); 
     return 0; 
 } 

Keluaran program diatas adalah sebagai berikut:


ABCDEF 
str1 adalah lebih kecil daripada str2 

Tabel dibawah ini merupakan daftar dari banyak string yang merupakan
anggota class string variasi yang dibebankan.

Tabel 8.7. Class String Keanggotaan Fungsi

ANGGOTA FUNGSI  PENJELASAN 
theString.append(str);  Menambahkan str ke theString. str bisa menjadi objek 
atau string karakter array. 
theString.append(str, x, n);  n jumlah karakter dari str, dimulai pada posisi x, akan 
ditambahkan ke theString. jika TheString terlalu kecil, 
fungsi akan melakukan copy sejumlah karakter yang  
mungkin bisa dicopy. 

324
 
Operasi String Bahasa Pemrorgraman
 
theString.append(str, n);  N karakter pertama dari array karakter str yang 
ditambahkan ke theString.  
theString.append(n, 'z');  N menambahkan salinan 'z' untuk theString. 
theString.assign(str);  Memberikan str ke theString. Parameter str dapat 
menjadi obyek string atau C‐string.  
theString.assign(str, x, n);   jumlah n karakter dari str, dimulai pada posisi x, 
ditugaskan ke theString. jika TheString terlalu kecil, 
fungsi akan menyalin banyak karakter mungkin.  
theString.assign(str, n);  karakter pertama n dari array karakter str ditugaskan 
ke theString.  
theString.assign(n, 'z');  Memberikan salinan n 'z' menuju theString.  
theString.at(x);  Mengembalikan karakter pada posisi x dalam string. 
theString.begin();  Kembali pada sebuah iterator yang menunjuk ke 
karakter pertama pada string.  
theString.capacity();  Mengembalikan ukuran penyimpanan dialokasikan 
untuk string.  
theString.clear();  Membersihkan string dengan menghapus semua 
karakter yang disimpan di dalamnya.  
theString.compare(str);  Melakukan perbandingan seperti fungsi strcmp 
dengan nilai yang sama kembali. str bisa menjadi 
string objek atau karakter array.  
theString.compare(x, n, str);  Membandingkan theString dan str, mulai dari posisi x, 
dan dilanjutkan terus untuk n karakter. pengembalian 
nilai seperti strcmp. str bisa menjadi objek string atau 
karakter array. 
theString.copy(str, x, n);  menyalin karakter str ke array theString, mulai pada 
posisi x, untuk n karakter. TheString jika terlalu kecil, 
maka fungsi akan menyalin karakter semampu 
mungkin. 
theString.c_str():  Mengembalikan nilai C‐string string objek.  
theString.data();  Kembali karakter array yang berisi null string 
dihentikan, karena disimpan dalam theString.  
theString.empty();  Returns true jika theString kosong.  
Returns true if theString is empty. 
theString.end();  Kembali ke sebuah iterator yang terakhir karakter dari 
string di theString. (Untuk informasi lebih lanjut 
tentang iterators, lihat Bab 15).  
 
Returns an iterator pointing to the last character of 
the string in theString. (For more information on 
iterators, see Chapter 15.) 
theString.erase(x, n);  Erases n karakter dari theString, mulai di posisi x.  

325
 
Bahasa Pemrograman Operasi String
 
 
Erases n characters from theString, beginning at 
position x. 
theString.find(str, x);  Kembali posisi pertama di luar atau di mana posisi x 
string str ditemukan di theString. Parameter str 
mungkin salah satu objek string atau C‐string. Str jika 
tidak ditemukan, posisi diluar akhir theString 
dikembalikan. 
Returns the first position at or beyond position x 
where the string str is found in theString. The 
parameter str may be either a string object or a C‐
string. If str is not found, a position beyond the end of 
theString is returned. 
theString.find('z', x);  Kembali posisi pertama di luar atau di mana posisi x 'z' 
yang ditemukan di theString.  
 
 
Returns the first position at or beyond position x 
where 'z' is found in theString. 
theString.insert(x, str);  Menyisipkan salinan str ke theString, mulai di posisi x. 
str mungkin salah satu objek atau string karakter 
array.  
 
Inserts a copy of str into theString, beginning at 
position x. str may be either a string object or a 
character array. 
theString.insert(x, n, 'z');  Menyisipkan 'z' n kali menuju theString di posisi x.  
theString.length();  Pernyataan panjang string di theString.  
 
Returns the length of the string in theString. 
theString.replace(x, n, str);  Menggantikan n karakter di awal theString di posisi x 
dengan karakter dalam string str objek. 
Replaces the n characters in theString beginning at 
position x with the characters in string object str. 
theString.resize(n, 'z');  Perubahan besarnya alokasi di theString ke n. N 
kurang jika dibandingkan dengan ukuran string, string 
yang dipotong  
untuk n karakter. Jika n lebih besar, string yang 
diperluas dan 'z' yang ditambahkan pada akhir waktu 
yang cukup untuk mengisi ruang‐ruang baru.  
 
Changes the size of the allocation in theString to n. If n 

326
 
Operasi String Bahasa Pemrorgraman
 
is less than the current size of the string, the string is 
truncated 
to n characters. If n is greater, the string is expanded 
and 'z' is appended at the end enough times to fill the 
new spaces. 
theString.size();  Pernyataan panjang string pada theString.  
theString.substr(x, n);  Kembali melakukan salinan suatu substring. The 
substring adalah n karakter dan mulai pada posisi x 
dari theString.  
theString.swap(str);  Swaps isi dengan theString str. 

8.14. Membuat Class String Sendiri


Class string pada bahasa C++ dengan seberapa besar untuk
secara otomatis menangani banyak membuat array.
tugas-tugas yang terlibat dalam  Strings mungkin akan ditugaskan
penggunaan string, seperti alokasi ke objek dengan MyString =
memori dinamis dan memeriksa operator. Programmer yang
margin dan lain sebagainya. Ia juga menggunakan kelas ini tidak perlu
merupakann operator overload memanggil fungsi strcpy.
seperti + dan =, dan juga memiliki  Satu string mungkin concatenated
banyak anggota fungsi yang lain dengan + = operator. Ini
memudahkan dalam bekerja dengan menghilangkan kebutuhan untuk
string. Dalam beberapa bagian, kita fungsi strcat.
harus membuat sebuah data tipe  Strings mungkin akan diuji untuk
string dengan banyak kelas fungsi kesetaraan dengan == operator.
C++. Programmer yang menggunakan
Dalam proses, kita lihat misalnya kelas ini tidak perlu memanggil
pada contoh copy constructor fungsi strcmp.
keberatan dan operator penuh aksi, Pada sebuah Kelas MyString
serta contoh-contoh teknik memiliki pointer sebagai anggota dan
pemrograman yang berguna sebagai secara dinamis mengalokasikan
solusi dari berbaai masalah. Kelas memori untuk menyimpan nilai string,
MyString yang ditetapkan dalam konstruksi salinan disediakan. Fungsi
bagian ini adalah jenis data abstrak ini akan menyebabkan objek diatur
untuk menangani string. Memiliki dengan benar datanya ketika
banyak keunggulan yang dimiliki oleh diinisialisasi dengan obyek MyString
kelas C++ string yang diberikan oleh lain.
Standard Template Library: Kelas MyString memiliki 2
 Memori yang dteralokasi secara overloaded = operator. Yang pertama
dinamis untuk setiap string yang adalah untuk menempatkan satu
tersimpan dalam MyString objek. MyString ke objek lain. fungsi
Programmer yang menggunakan Operator ini dipanggil ketika operand
kelas ini tidak perlu khawatir di sebelah kanan dari tanda = adalah

327
 
Bahasa Pemrograman Operasi String
 
MyString objek, seperti yang terlihat versi yang pertama dirancang untuk
pada segmen kode berikut: bekerja dengan objek MyString
lainnya dan yang kedua dirancang
MyString first("Hello"), second;  untuk bekerja dengan string C++
second = first;  konvensional. == Fungsi akan
kembali jika string berada di sebelah
Kedua versi MyString = dari operator kanan operand sesuai dengan
untuk menempatkan tradisional string anggota str panggilan objek. Jika
ke MyString objek. Operator fungsi ini kedua operands string tidak cocok,
dipanggil ketika operand di kanan = fungsi return false. fungsi Operator ini
adalah sebuah string konstan atau memungkinkan programmer
pointer ke sebuah string (seperti menggunakan kelas ini untuk
nama sebuah char array). Hal ini membangun penghubung ekspresi
ditunjukkan pada segmen program seperti ini:
berikut:
MyString name1("Supra"), 
MyString name;  name2("Supra"); 
char who[] = "Jimmy";  if (name1 == name2) 
name = who;     cout << "nama adalah sama.\n"; 
else 
Operator + = dirancang untuk     cout << "nama adalah berbeda\n"; 
menggabungkan string pada  
MyString kanan ke kiri pada objek. MyString name1("Suprapto"); 
Seperti operator =, MyString memiliki if (name1 == "Supra") 
dua versi =. + Versi pertama ini    cout << "nama adalah sama.\n"; 
dirancang untuk bekerja pada saat else 
yang tepat operand adalah MyString     cout << "nama adalah berbeda.\n"; 
obyek lain, seperti yang ditunjukkan
dalam program ini segmen: Objek MyString memiliki dua
versi yan berkelebihan beban > lebih
MyString first("Hello "), second("world");  besar daripada operator untuk
first += second;  melakukan tes, dan < operator untuk
melakukan kurang dari tes. Versi
Kedua versi dari operator + = akan pertama dari masing-masing
dipanggil ketika operand sebelah dirancang untuk bekerja dengan
kanan adalah string literal atau objek lain MyString dan yang kedua
pointer ke karakter : ini dirancang untuk bekerja dengan C
+ + tradisional string. (fungsi
MyString first("Hello ");  perpustakaan menggunakan fungsi
first += "World";  strcmp untuk menentukan apakah
sebuah lebih daripada atau kurang
Objek MyString yang memiliki daripada hubungan yang ada.)
kelebihan beban versi dari operator Sebuah fungsi > return benar jika
== untuk melakukan ujian str anggota panggilan objek lebih
kesetaraan. Seperti operator lainnya, besar daripada string dalam operand
328
 
Operasi String Bahasa Pemrorgraman
 
kanan. Jika tidak, fungsi return false. Pada fungsi > = kembali benar,
Yang <fungsi return true jika str jika str anggota panggilan objek yang
anggota panggilan objek kurang dari lebih besar dari atau sama dengan
string dalam operand kanan. Jika string yang ada di sebelah kanan
tidak, mereka kembali palsu. operand. Jika tidak, fungsi return
Operator fungsi ini memungkinkan salah. Fungsi <= return benar jika str
programmer menggunakan kelas ini anggota panggilan objek kurang dari
untuk membangun penghubung atau sama dengan string yang ada di
ekspresi seperti yang ditampilkan sebelah kanan operand. Jika tidak,
dalam program ini segmen: mereka kembali palsu. Operator
fungsi ini memungkinkan programmer
MyString name1("Suprapto"),  menggunakan kelas ini untuk
name2("Supra");  membangun penghubung ekspresi
if (name1 > name2)  seperti yang ditampilkan dalam
     cout << "Suprapto lebih besar   segmen program ini:
                     daripada Supra\n"; 
 else  MyString name1("Suprapto"), 
     cout << "Suprapto tidal lebih besar   name2("Supra"); 
                     daripada Supra.\n";  if (name1 >= name2) 
               cout << "Suprapto adalah lebih besar       
MyString name3("Suprapto");                       atau sama dengan Supra.\n"; 
    else 
if (name3 < "Supra")         cout << "Suprapto lebih kecil  
      cout << "Suprapto lebih kecil                          daripada Supra.\n"; 
                      daripada Supra.\n";   
 else  MyString name3("Suprapto"); 
     cout << "Suprapto tidak lebih kecil   if (name3 <= "Supra") 
                     daripada\n";        cout << "Suprapto lebih kecil atau  
                       sama dengan Supra.\n"; 
Objek MyString memiliki dua   else 
versi > = operator untuk melakukan       cout << "Suprapto lebih besar sama  
operasi lebih besar daripada atau tes                       dengan Supra.\n";
sama dengan, dan <= operator untuk
melakukan kurang dari atau tes Program dibawah menunjukkan
kesamaan. Versi pertama dari bagaimana program MyString
masing-masing dirancang untuk memperlihatkan rangkaian stringnya.
bekerja dengan objek lain MyString Selain itu, kode utama program
dan yang kedua ini dirancang untuk mendemonstrasikan bagaimana
bekerja dengan C++ tradisional MyString memungkinkan programmer
string. untuk memperlakukan string lebih
banyak yang lain seperti mengikutkan
tipa data didalamnya.

Program 8.20

329
 
Bahasa Pemrograman Operasi String
 
 #include <iostream> 
 #include "mystring.h" 
 
 using namespace std; 
 
int main() 
 { 
    MyString object1("Ini"), object2("adalah"); 
    MyString object3("menguji."); 
    MyString object4 = object1;     // panggil copy constructor. 
    MyString object5("adalah hanya menguji."); 
    char string1[] = "sebuah pengujian."; 
 
    cout << "Object1: " << object1 << endl; 
    cout << "Object2: " << object2 << endl; 
    cout << "Object3: " << object3 << endl; 
    cout << "Object4: " << object4 << endl; 
    cout << "Object5: " << object5 << endl; 
    cout << "String1: " << string1 << endl; 
    object1 += " "; 
    object1 += object2; 
    object1 += " "; 
    object1 += object3; 
    object1 += " "; 
    object1 += object4; 
    object1 += " "; 
    object1 += object5; 
    cout << "object1: " << object1 << endl; 
    return 0; 
 } 

Keluaran Program diatas adalah sebagai berikut


Object1: Ini 
Object2: adalah 
Object3: menguji. 
Object4: Ini 
Object5: adalah hanya menguji. 
String1: sebuah pengujian. 
object1: Ini adalah menguji. Ini hanya menguji sebuah pengujian. 

8.15. Studi Kasus

330
 
Operasi String Bahasa Pemrorgraman
 
Sebagai programmer untuk diformat. Kelas konstruktor harus
programmer lanjut pada Software menerima string objek atau pointer ke
Enterprises, kita biasanya akan string bahasa C yang berisi nilai
diminta untuk mengembangkan satu seperti 1084567,89. Kelas harus
kelas yang bernama mata penyisipan menyediakan fungsi anggota yang
koma dan tanda dolar ($) di lokasi mengembalikan obek string menjadi
yang sesuai dalam sebuah string sejumlah formatted-dollar, seperti $
yang berisi jumlah dolar tidak 1.084.567,89.

Tabel 8.8. Keanggotaan Variabel

MEMBER VARIABEL  PENJELASAN  
Original  Obyek string menahan string asli yang bersifat 
unformatted. 
formatted  Obyek string menahan string yang bersifat formatted. 

Tabel 8.9. Fungsi Keanggotaan

FUNGSI KEANGGOTAAN  PENJELASAN 
Constructor  Disertakan dalam obyek string sebagai argumen. Obyek 
disalin ke original member, dan memanggil fungsi 
keanggotaan dolarrFormat . 
dollarFormat  Menyalin keanggotaan original menjadi  format 
member. Tanda koma dan dolar disertakan dalam 
memasukkan ke lokasi bentuk keanggotaan. 
getOriginal  Mengambalikan  keanggotaan original 
getFormatted  Mengembalikan  bentuk keanggotaan  

Program 8.21. Penggunaan class


#include <iostream> 
#include <string> 
#include "currency.h" 
 
using namespace std; 
 
int main() 

    string input; 
    cout << "Masukan jumlah dollar ke rekening dengan form nnnnn.nn : "; 
    cin >> input; 
    Currency dollars(input); 
    cout << "disini rekening diatur:\n"; 

331
 
Bahasa Pemrograman Operasi String
 
    cout << dollars.getFormatted() << endl; 
    return 0; 

Keluaran program diatas adalah sebagai berikut:


Masukan jumlah dollar ke rekening dengan form nnnnn.nn :  : 1084567.89[Enter] 
disini rekening diatur: 
$1,084,567.89 

8.16. Soal Latihan


Jawablah soal latihan dibawah ini dengan baik dan benar. 
1. Apa yang dimaksud dengan string
2. Tulislah program sederhana dengan string untuk menampilkan tulisan
"Hallo saya siswa smk"
3. Buatlah program untuk menggabungkan dua string "hello" dan "apa
khabar"
4. Apa perbedaan anatara string dengan pointer
5. Tulislah program yang menggunakan pointer untuk operasi string
6. Sebutkan beberapa fungsi string pada bahasa c++
7. Tulislah program yang digunakan untuk membandingkan dua string
8. Sebutkan fungsi untuk menangani string pada bahasa c++
9. Buatlah program untuk mengkonversi string
10. Apa yang dimaksud dengan fungsi topupper dan tolower
11. Sebutkan beberapa operator string pada bahasa c++

332
 
Array Bahasa Pemrorgraman

BAB 9
ARRAY

9.1. Pengertian Array


9.2. Deklarasi Array
9.3. Inisialisasi Array
9.4. Array multi dimensi
9.5. Mengurutkan element Array
9.6. Contoh program array
9.7. Soal Latihan

9.1. Pengertian Array


Tipe data array menjelaskan dapat menampung 25 nilai bertipe
jangkauan nilai yang dapat float. Setiap nilai yang ditugaskan ke
ditampung pada sebuah variabel dan array harus bertipe sama dengan
kumpulan operasi yang dapat array tersebut
dilakukan terhadap variabel tersebut. Array adalah variabel yang
Dengan pengecualian pada string mampu menyimpan sejumlah nilai
karakter, semua tipe yang telah yang bertipe sama. Untuk
dipelajari sampai saat ini hanya dapat mendeklarasikan sebuah array, harus
menampung sebuah nilai. disebutkan tipe dari array yang dibuat
Pada saat tertentu program yang misalnya int, float atau double dan
dibuat dibutuhkan untuk juga ukuran array. Untuk menentukan
menyelesaikan suatu permasalahan ukuran array,perlu ditempatkan
yang dikehendaki suatu variabel yang jumlah nilai yang dapat disimpan
dapat menampung banyak nilai. array dalam sebuah tanda kurung
Sebagai contoh variabel skor kurawal siku yang terletak sesuah
barangkali mencatat skor ujian dari nama array.
100 siswa. Demikian juga variabel Deklarasi berikut sebagai contoh
gaji mungkin menampung gaji yang untuk menciptakan array bernama
berlainan dari masing-masing skor yang mampu menyimpan 100
pegawai suatu perusahaan. skor nilai yang bertipe int.
Array adalah struktur data yang
dapat menyimpan sejumlah nilai int skor[100]; 
bertipe sama, sebagai contoh kita
dapat menciptakan sebuah array Pada saat dideklarasikan sebuah
yang dapat menampung 100 nilai array, compiler C mengalokasikan
bertipe int dan array kedua yang memori yang cukup untuk
333
 
Bahasa Pemrograman Array

menampung semua elemen sesuai int scores[5] = {80, 70, 90, 85, 80} ; 


dengan yang dideklarasikan.
Masukan pertama berada pada lokasi Pada saat kita menugaskan nilai
0. Sebagai contoh berdasarkan array awal ke suatu array , kita harus
skor, pernyataan berikut menugaskan melingkupi nilai-nilai tersebut dengan
nilai 80 pada elemen pertama dari tanda kurung kurawal{}. Dalam hal
array ini, ukuran array sesuai dengan
jumlah nilai yang ditugaskan ke array.
skor[0] = 80;  Akan tetapi pernyataan berikut akan
menugaskan empat nilai titik
Karena elemen pertama dari mengambang ke array yang dapat
array dimulai dengan offset 0, maka menyimpan 64 nilai.
elemen terakhir dari array adalah
satu lokasi sebelum ukuran array. float  salaries[64]  ={2500000.0, 
Berdasarkan array skor diatas, 3200000.0, 4400000.0, 5500000.0}; 
pernyataan berikut menugaskan nilai
ke elemen terakhir dari array. Tergantung dari compiler yang
digunakan, nilai-nilai yang ditugaskan
skor[99]  = 75;  ke elemen-elemen yang tidak secara
eksplisit ditugaskan mungkin diisi
Untuk inisialisasi array ada dengan 0. Sebagai pegangan kita
beberapa macam yang sering harus tidak menganggap bahwa
dilakukan sebagai contoh perhatikan compiler akan menginisialisasi
potongan program berikut ini : elemen-elemen yang lain. Jika kita
tidak menyebutkan ukuran array,
char title[] = "Dasar Pemrograman";  kompiler akan mengalokasikan
char section [64] = "Arrays"; memori yang hanya cukup untuk
menampung nilai-nilai yang
Pada kasus yang pertama, disebutkan. Deklarasi array berikut
compiler C akan mengalokasikan 17 menciptakan array yang cukup
byte untuk menampung string. Pada menampung tiga buah nilai yang
kasus yang kedua, compiler akan bertipe long.
mengalokasikan array 64 byte,
menginisialisasi enam karakter yang long planets[] = {1234L, 5678L, 12347L}; 
yang pertama dengan huruf-huruf
“Arrays” dan karakter NULL. Array adalah suatu variabel yang
Kebanyakan compiler juga akan terdiri dari sekumpulan data dimana
menginisialisasi lokasi byte-byte data-data tersebut mempunyai tipe
tersisa dengan NULL. Pada saat data yang sama. Setiap data
dideklarasikan array dengan tipe lain, disimpan dalam alamat memori yang
kita juga dapat menginisialisasinya berbeda-beda dan disebut dengan
dengan cara yang sama. Sebagai elemen array. Setiap elemen
contoh pernyataan berikut mempunyai nilai indek sesuai dengan
menginisialisasi array integer scores urutannya. Melalui indek inilah kita
dengan nilai 80, 70, 90, 85 dan 80. dapat mengakses data-data tersebut.

334
 
Array Bahasa Pemrorgraman

Indek dari elemen array ini, baik nama_var[indeks] 


dalam bahasa C++ maupun Java
dimulai dari 0, bukan 1 seperti dalam sehingga, untuk array nilai_tes,
bahasa Pascal. maka:
Dalam beberapa literatur, array
sering disebut (diterjemahkan) nilai_tes[0]  elemen pertama dari 
sebagai larik. Array adalah kumpulan nilai_tes 
dari nilai-nilai data bertipe sama nilai_tes[4]  elemen ke‐5 dari 
dalam urutan tertentu yang nilai_tes\ 
menggunakan sebuah nama yang
sama. Nilai-nilai data di suatu array perhatikan contoh berikut ini:
disebut dengan elemen-elemen
array. Letak urutan dari elemen- nilai_tes[0] = 70; 
elemen array ditunjukkan oleh suatu scanf(“%f”, &nilai_tes[2]); 
subscript atau indeks. Suatu array
berdimensi satu dideklarasikan dalam Contoh pertama merupakan
bentuk umum berupa: pemberian nilai 70 ke nilai_tes[0].
Sedangkan contoh 2 merupakan
tipe_data nama_var[ukuran];  perintah untuk membaca data
bilangan dari keyboard dan diberikan
dimana : ke nilai_tes[2]. Pada contoh 2 ini
 tipe_data : untuk menyatakan tipe
dari elemen array, misalnya int, &nilai_tes[2] 
char, float.
 nama_var : nama variabel array berarti “alamat dari nilai_tes[2]”. Perlu
 ukuran : untuk menyatakan jumlah diingat bahwa scanf() memerlukan
maksimal elemen array. argument berupa alamat dari variabel
Contoh pendeklarasian array : yang digunakan untuk menyimpan
nilai masukan. Selengkapnya
float nilai_tes[5];  perhatikan contoh program di bawah
ini.
pada program diatas menyatakan Sebuah array dapat diinisialisasi
bahwa array nilai_tes mengandung 5 sekaligus pada saat dideklarasikan.
elemen bertipe float. Pada bahasa C, Untuk mendeklarasikan array, nilai-
data array akan disimpan dalam nilai yang diinisialisasikan dituliskan
memori yang berurutan. Elemen di antara kurung kurawal ({}) yang
pertama mempunyai indeks bernilai dipisahkan dengan koma.
0. Jika variabel nilai_tes
dideklarasikan sebagai array dengan int jum[12] = {31, 28, 31, 30, 31, 30, 31, 
5 elemen, maka elemen pertama 31, 30, 31, 30, 31}; 
memiliki indeks sama dengan 0, dan
elemen terakhir memiliki indeks 4. Ada beberapa variasi cara
Bentuk umum pengaksesan array mendeklarasikan sebuah array
adalah: (dalam hal ini yang berdimensi satu),
di antaranya adalah sebagai berikut :

335
 
Bahasa Pemrograman Array

 int numbers[10]; Dalam Java pendeklarasian


 int numbers[10] = {34, 27, 16}; array dan pembuatan objek array
 int numbers[ ] = {2, -3, 45, 79, -14, dapat dilakukan alam satu sintak,
5, 9, 28, -1, 0}; yaitu :
 char text[ ] = "Welcome to New
Zealand."; int[ ] a = new int[10]; 
 float radix[12] = {134.362,
1913.248}; atau
 double radians[1000];
Array dideklarasikan dengan tanda [ ] int a[ ] = new int[10];   
(bracket), baik dalam bahasa C++
dan Java. Bentuk umum dari tipe Baik C++ maupun Java, untuk
data array adalah : mengakses elemen array, misalnya
elemen ke-10 dari array dan
tipe_data nama_array[jumlah_elemen]  kemudian menampung nilainya
dalam sebuah variabel x, maka
Jika ingin mendeklarasikan sintaknya adalah :
sebuah array dengan tipe data
integer dengan nama a dan jumlah x=a[9]; 
elemen array-nya 10 maka kodenya
adalah : Untuk memasukkan data ke dalam
array, sintak yang digunakan adalah :
int a[10]; 
a[nomor_elemen] = data; 
Dalam bahasa Java  
pendeklarasian array lebih variarif. a[0] = 5; 
Selain dengan kode seperti di atas, a[1] = 6; 
Java juga dapat mendeklarasikan a[2] = 7; 
array dalam bentuk : dan seterusnya. 

int[ ] a;  Agar lebih efisien dan efektif,


maka pemasukan data dalam array
Kemudian setelah melakukan dapat menggunakan perulangan
deklarasi array, baik dengan kode seperti berikut ini :
yang pertama maupun yang kedua,
Java harus menciptakan (membuat) for (i=0; i<jumlah_data; i++) { 
objek terlebih dahulu sebelum array   cout << “a[“ << i << “] = “; 
dapat digunakan karena dalam Java   cin >> a[i]; 
array merupakan sebuah Class. Cara } 
menciptakan objek array dalam Java
adalah : Berikut contoh program lengkap
dalam bahasa C++ adalah :
a = new int[10]; 

Program 9.1
336
 
Array Bahasa Pemrorgraman

#include <iostream> 
 
using namespace std; 
 
int a[10],jumlah=10; 
bool cari(int cariData,int nElemen) { 
   int i; 
   for(i=0; i<nElemen; i++) { 
     if(a[i] == cariData) 
     break; 
   } 
   if(i == nElemen) return false; 
   else return true; 

void input(int data,int i) { 
a[i] = data; 

void hapus(int data,int nElemen) { 
   int i; 
   for(i=0; i<nElemen; i++) { 
     if( data == a[i] ) 
     break; 
   } 
   if(i==nElemen)  cout << "Data"<< data << "tidak terhapus (tidak ada)" << endl; 
   else { 
     for(int j=i; j<nElemen‐1; j++) { 
       a[j] = a[j+1]; 
     } 
  cout << "Data " << data << " dihapus" << endl; 
   } 

void tampil(int nElemen) { 
   for(int i=0; i<nElemen; i++) 
     cout << a[i] << " "; 
     cout << endl; 

void main() { 
   int data; 
   for(int i=0; i<jumlah; i++){ 
   cout << "a[" << i << "] = "; 
   cin >> data; 
   input(data,i); 
   } 

337
 
Bahasa Pemrograman Array

   tampil(jumlah); 
   int cariData = 12; 
   if (cari(cariData,jumlah)==false) 
     cout << "Data " << cariData << " tidak ditemukan" << endl; 
   else 
     cout << "Data " << cariData << " ditemukan" << endl; 
   hapus(89,jumlah); 
   jumlah‐‐; 
   hapus(0,jumlah); 
   jumlah‐‐; 
   tampil(jumlah); 

Program di atas terdiri dari Pencarian data dilakukan oleh


empat function yaitu function cari() program utama. Function pencarian
yang digunakan untuk mencari data data ini (cari()) dilakukan dengan
dalam array, function input() mengunjungi atau mengakses data
digunakan untuk memasukkan data array satu persatu dan kemudian
dalam array, hapus() untuk membandingkan data pada setiap
menghapus data dalam array, dan elemen indek dengan data yang
function tampil() untuk menampilkan dicari. Jika nilai datanya sama
data dalam array. dengan nilai data yang dicari, maka
Keempat function tersebut proses pencarian data dihentikan.
kemudian dipanggil satu per satu Jika tidak, maka pencarian terus
oleh program utama adalah kode dilakukan sampai semua data array
untuk memasukkan data dalam array diakses. Jika proses pencarian yang
dengan argumen pemanggilan dilakukan sama dengan jumlah
function input() sebanyak sepuluh kali elemen array, maka data yang dicari
dengan menggunakan perulangan. tidak ditemukan. Proses pencarian
Setelah memasukkan data seperti ini merupakan metode linier
selesai, maka data yang telah atau sekuensial (Linear / Sequential
dimasukan dalam array kemudian Search).
ditampilkan dengan menggunakan Program ini melakukan proses
argument. Function tampil() penghapusan data sebanyak dua kali
mengakses data array satu persatu dimana setiap kali melakukan
dan kemudian menampilkannya. penghapusan data maka jumlah
elemen array dikurangi satu.

Keluaran dari program tersebut adalah:


a[0] = 18 
a[1] = 12 
a[2] = 34 
a[3] = 44 
a[4] = 89 
a[5] = 34 
338
 
Array Bahasa Pemrorgraman

a[6] = 63 
a[7] = 24 
a[8] = 67 
a[9] = 3 
18 12 34 44 89 34 63 24 67 3 
Data 12 ditemukan 
Data 89 dihapus 
Data 0 tidak terhapus <tidak ada> 
2 34 44 34 63 24 67 

9.2. Deklarasi Array


Array adalah variabel yang skor[0] = 80; 
mampu menyimpan sejumlah nilai
yang bertipe sama. Untuk Karena elemen pertama dari
mendeklarasikan sebuah array, harus array dimulai dengan offset 0, maka
disebutkan tipe dari array yang dibuat elemen terakhir dari array adalah
misalnya int, float atau double dan satu lokasi sebelum ukuran array.
juga ukuran array. Untuk menentukan Berdasarkan array skor diatas,
ukuran array,perlu ditempatkan pernyataan berikut menugaskan nilai
jumlah nilai yang dapat disimpan ke elemen terakhir dari array.
array dalam sebuah tanda kurung
kurawal siku yang terletak sesuah skor[99]  = 75; 
nama array. Deklarasi berikut
sebagai contoh untuk menciptakan Inisialisasi array adalah
array bernama skor yang mampu pemberian nilai default pada array.
menyimpan 100 skor nilai yang Pemberian nilai default ini dilakukan
bertipe int. pada saat array dideklarasikan.
Bentuk umum dari inisialisasi
int skor[100];  array ini adalah sebagai berikut :

Pada saat dideklarasikan tipe_data nama_array[jumlah_elemen] = 


sebuah array, compiler C {nilai1,nilai2,…,nilaiN} 
mengalokasikan memori yang cukup
untuk menampung semua elemen Nilai didalam kurung kurawal disebut
sesuai dengan yang dideklarasikan. dengan Initialization List.
Masukan pertama berada pada lokasi
0. Sebagai contoh berdasarkan array int a[10] = { 0, 3, 6, 9, 12, 15, 18, 21, 24, 
skor, pernyataan berikut menugaskan 27 }; 
nilai 80 pada elemen pertama dari
array Untuk lebih jelasnya, perhatikan
contoh berikut ini :

Program 9.2.
339
 
Bahasa Pemrograman Array

#include <iostream> 
 
using namespace std; 
 
int a[5]={2,4,6,8,10},jumlah=5; 
void input(int data,int i) { 
   a[i] = data; 

void tampil(int nElemen) { 
   for(int i=0; i<nElemen; i++) 
     cout << a[i] << " "; 
     cout << endl; 

void main() { 
   int data; 
   cout << "Belum ada perubahan data array" << endl; 
   tampil(jumlah); 
   for(int i=0; i<jumlah; i++){ 
     cout << "a[" << i << "] = "; 
     cin >> data; 
     input(data,i); 
   } 
   cout << "Setelah ada perubahan data array" << endl; 
   tampil(jumlah); 

 
Keluaran dari program di atas adalah :
Belum ada perubahan data array 
2 4 6 8 10 
a[0] = 12 
a[1] = 43 
a[2] = 67 
a[3] = 34 
a[4] = 48 
setelah asa perubahan data array 
12 43 67 34 48 

Program di atas mempunyai tipe dipanggil atau ditampilkan maka


data array yang berisi lima elemen array sudah mempunyai data, tidak
dimana nilai default dari kelima kosong seperti halnya pada kode
elemen array tersebut adalah 2, 4, 6, berikut ini.
8, 10 sehingga ketika data array

340
 
Array Bahasa Pemrorgraman

Program 9.3.
#include <iostream> 
 
using namespace std 
 
int a[5],jumlah=5; 
void input(int data,int i) { 
   a[i] = data; 

void tampil(int nElemen) { 
   for(int i=0; i<nElemen; i++) 
     cout << a[i] << " "; 
     cout << endl; 
   } 
void main() { 
   int data; 
   cout << "Belum ada perubahan data array" << endl; 
   tampil(jumlah); 
   for(int i=0; i<jumlah; i++){ 
     cout << "a[" << i << "] = "; 
     cin >> data; 
     input(data,i); 
   } 
   cout << "Setelah ada perubahan data array" << endl; 
   tampil(jumlah); 

Keluaran program diatas adalah sebagai berikut:


Belum ada perubahan data array 
0 0 0 0 0 
a[0] = 12 
a[1] = 13 
a[2] = 14 
a[3] = 15 
a[4] = 16 
setelah ada perubahan data array 
12 13 14 15 16 

Kedua program di atas sama. kosong. Baik pada program pertama


Bedanya program utama tipe data maupun yang kedua, merupakan
array-nya diinisialisasi, sedangkan kode untuk memasukkan data baru
program yang kedua tidak pada array yang artinya data atau
diinisialisasi sehingga pada waktu nilai default dari array ditimpa dengan
dipanggil pertama kali nilainya masih data yang baru.
341
 
Bahasa Pemrograman Array

9.3. Inisialisasi Array


Untuk inisialisasi array ada melingkupi nilai-nilai tersebut dengan
beberapa macam yang sering tanda kurung kurawal{}. Dalam hal
dilakukan sebagai contoh perhatikan ini, ukuran array sesuai dengan
potongan program berikut ini : jumlah nilai yang ditugaskan ke array.
Akan tetapi pernyataan berikut akan
char title[] = “Dasar Pemrograman”;  menugaskan empat nilai titik
char section [64] = “Arrays”;  mengambang ke array yang dapat
menyimpan 64 nilai.
Pada kasus yang pertama,
compiler C akan mengalokasikan 17 float  salaries[64]  =  {2500000.0, 
byte untuk menampung string. Pada 3200000.0, 4400000.0, 5500000.0}; 
kasus yang kedua, compiler akan
mengalokasikan array 64 byte, Tergantung dari compiler yang
menginisialisasi enam karakter yang digunakan, nilai-nilai yang ditugaskan
yang pertama dengan huruf-huruf ke elemen-elemen yang tidak secara
“Arrays” dan karakter NULL. eksplisit ditugaskan mungkin diisi
Kebanyakan compiler juga akan dengan 0. Sebagai pegangan kita
menginisialisasi lokasi byte-byte harus tidak menganggap bahwa
tersisa dengan NULL. compiler akan menginisialisasi
Pada saat dideklarasikan array elemen-elemen yang lain. Jika kita
dengan tipe lain, kita juga dapat tidak menyebutkan ukuran array,
menginisialisasinya dengan cara kompiler akan mengalokasikan
yang sama. Sebagai contoh memori yang hanya cukup untuk
pernyataan berikut menginisialisasi menampung nilai-nilai yang
array integer scores dengan nilai 80, disebutkan. Deklarasi array berikut
70, 90, 85 dan 80. menciptakan array yang cukup
menampung tiga buah nilai yang
int scores[5] = {80, 70, 90, 85, 80} ;  bertipe long.

Pada saat kita menugaskan nilai long planets[] = {1234L, 5678L, 12347L}; 


awal ke suatu array , kita harus

9.4. Array Multi Dimensi


Array multi dimensi adalah suatu nama_array[jumlah_elemen_baris] 
array yang mempunyai lebih dari satu [jumlah_elemen_kolom]; 
subskrip. Array multi dimensi ini
aplikasinya antara lain untuk matrik.
Adapun deklarasi dari array multi 9.4.1. Array Satu Dimensi
dimensi adalah : Banyak array yang hanya
memiliki satu dimensi, seperti
tipe_data   sejumlah orang dari setiap umur.
342
 
Arrray Bahasa Pemro
orgraman

Sa
atu-satunya persyara
atan untukk seperti array me enggunakann dua
menentukan elemen adalaha usia
a indeks. Gambar be erikut menyatakan
ya
ang berpen ndapat bahwa unsur variabell array dua dimensi
d
hittungan. Karena itu, seperti arrayy
ha
anya meng ggunakan satu
s indekss
sa
aja. Gamba ar berikut menyatakan n
va
ariabel array satu-dimensi.

Gambar 9.1
1. Array Satu
u Dimensi Gambar 9.2. Arra
ay Dua Dime
ensi

9.4.3. Tiga
T Dimen
nsi
9.4.2. Array Dua Dimensi Beb
berapa arra ay memilikki tiga
Ada bebe erapa array dua
d dimensi, dimensii, seperti nilai dalam m tiga
seeperti jumlah
h kantor-kan
ntor di setiap
p dimensii ruang. Seperti array
lan
ntai di se etiap gedunng kampus. menggu unakan tiga indeks, yang
Sppesifikasi ya
ang memerllukan kedua a dalam hal ini mew wakili x, y, z dan
ele
emen bangu unan dan juumlah lantai, koordina
at dari ruaang fisik. gambar
g
daan setiap ele
emen yang berpendapa
b t berikut menyataka an variabel untuk
baahwa untuk menghitung g kombinassi mengad dakan array tiga dimensi.
baangunan da an lantai. Karena itu,

G
Gambar 9.3.. Array 3 Dim
mensi

343
 
Bahasa Pemrograman Array

Untuk lebih jelasnya mengenai int matrik[2][2]; 


array multi dimensi dibawah ini
diberikan beberapa contoh array. Berikut adalah contoh program
Arrai dibawah ini merupakan matrik 2 lengkapnya:
X 2 yang menggunakan array.

Program 9.4.
#include <iostream> 
 
using namespace std; 
 
int main(void) { 
   int t, i, matrik[3][4]; 
   for(t=0; t<3; t++) 
  for(i=0; i<4; i++) 
       matrik[t][i] = (t*4)+i+1; 
   for(t=0; t<3; t++) { 
     for(i=0; i<4; i++) 
       cout << matrik[t][i] << "  "; 
     cout << endl; 
   } 
   return 0; 

Keluaran dari program di atas adalah :


1 2 3 4 
5 6 7 8 
9 10 11 12 

t
0 1 2 3
0 1 2 3 4
t
1 5 6 7 8
2 9 10 11 12

Baris ke-5 sampai ke-7 adalah dimana perulangan pertama adalah


pemasukan data pada matrik. untuk mengidentifikasi baris dari
Sedangkan baris ke-8 sampai ke-12 matrik dan perulangan kedua untuk
adalah menampilkan data matrik. mengidentifikasi kolom dari matrik.
Pada kedua proses tersebut, Berikut ini adalah contoh untuk
pemasukan data dan menampilkan penjumlahan dua buah matrik.
data terdapat dua buah perulangan

344
 
Array Bahasa Pemrorgraman

Program 9.5.
#include <iostream> 
 
using namespace std; 
 
int main(void) { 
   int t, i, A[3][4],B[3][4],C[3][4]; 
   for(t=0; t<3; t++) 
  for(i=0; i<4; i++) 
       A[t][i] = (t*4)+i+1; 
   cout << "MATRIK A" << endl; 
   for(t=0; t<3; t++) { 
     for(i=0; i<4; i++)  
       cout <<A[t][i] << "  ";      
      cout << endl; 
   } 
   for(t=0; t<3; t++) 
     for(i=0; i<4; i++) 
       B[t][i] = (t*4)+i+1; 
  cout << endl; 
   cout << "MATRIK B" << endl; 
   for(t=0; t<3; t++) { 
     for(i=0; i<4; i++)  
       cout <<B[t][i] << "  "; 
     cout << endl; 
   } 
   for(t=0; t<3; t++) 
     for(i=0; i<4; i++) 
       C[t][i] = A[t][i]+B[t][i]; 
  cout << endl; 
   cout << "MATRIK C = A + B" << endl; 
   for(t=0; t<3; t++) { 
     for(i=0; i<4; i++)  
       cout <<C[t][i] << "  "; 
     cout << endl; 
   } 
   return 0; 

Keluaran program :
MATRIK A 

345
 
Bahasa Pemrograman Array

1 2 3 4  
5 6 7 8 
9 10 11 12 13 
 
MATRIK B 
1 2 3 4 
5 6 7 8 
9 10 11 12 
 
MATRIK C = A +B 
2 4 6 8 
10 12 1416 
18 20 22 24 

9.5. Mengurutkan Elemen Array


Ada banyak sekali metode untuk berubah atau tidak. Jika nilai
mengurutkan data, antara lain indek mengalami perubahan
Exchange Sort, Selection Sort, maka data ke-1 ditukar dengan
Insertion Sort, Bubble Sort, Quick data indek.
Sort, Shell Sort, Binary Insertion Sort, 2. Pada proses 2: variabel indek
dan masih banyak lagi. diberi nilai 2 (data ke-2) kemudian
Dari sekian banyak metode, data indek dibandingkan dengan
hanya metode Exchange Sort, data ke-3. Jika data indek lebih
Bubble Sort, dan Insertion Sort saja besar maka nilai indeknya diganti
yang akan kita bahas karena ketiga dengan 3 (data ke-3).
metode ini merupakan metode yang Kemudian data indek
paling mudah dan banyak digunakan. dibandingkan lagi dengan data
Untuk metode Selection Sort ke-4, lebih besar? Nilai indek
langkah-langkahnya adalah sebagai ditukar! Demikian seterusnya.
berikut : Setelah selesai, nilai indek
1. Proses 1: variabel indek diberi diperiksa apakah nilai indek
nilai 1 (data ke-1) kemudian data berubah atau tidak. Jika nilai
indek dibandingkan dengan data indek mengalami perubahan
ke-2. Jika data indek lebih besar maka data ke-2 ditukar dengan
maka nilai indeknya diganti data indek.
dengan 2 (data ke-2), jika tidak 3. Demikian untuk proses
nilai indeknya tetap. selanjutnya dimana banyak
Kemudian data indek prosesnya adalah jumlah elemen
dibandingkan lagi dengan data array dikurangi satu.
ke-3, lebih besar? Nilai indek Berikut program lengkap metode
ditukar! Demikian seterusnya. Selection Sort dalam bahasa C++
Setelah selesai, nilai indek adalah:
diperiksa apakah nilai indek

346
 
Array Bahasa Pemrorgraman

Program 9.6
#include <iostream> 
 
using namespace std; 
 
int a[10]; 
void input(int data,int i) { 
   a[i] = data; 

void tampil() { 
   for(int i=0; i<10; i++) 
     cout << a[i] << " "; 
   cout << endl; 
 } 
void tukar(int data1, int data2) { 
   long temp = a[data1];   a[data1] = a[data2]; 
   a[data2] = temp; 

void selectionSort() { 
   int i,j,indek; 
   for(i=0; i<5‐1; i++) { 
     indek=i; 
     for(j=i+1; j<5; j++) 
       if(a[indek] > a[j] ) 
         indek=j; 
     tukar(i,indek); 
   } 

void main() { 
   input(57,0); 
   input(89,1); 
   input(49,2); 
   input(51,3); 
   input(12,4); 
   input(90,5); 
   input(1,6); 
   input(0,7); 
   input(63,8); 
   input(25,9); 
   tampil(); 
   selectionSort(); 

347
 
Bahasa Pemrograman Array

   tampil(); 

Keluaran program diatas adalah sebagai berikut :


57 89 49 51 12 90 1 0 63 25 
12 49 51 57 89 90 1 0 63 25 

Metode Bubble Sort mempunyai 3. Demikian seterusnya sampai data


langkah-langkah sebagai berikut : terakhir, sehingga data
1. Membandingkan data ke-1 kedudukannya akan bergeser-
dengan data ke-2, jika data ke-1 geser.
lebih besar, maka kedua data 4. Untuk proses 2, pembandingan
ditukar. (pergeseran data) hanya sampai
2. Kemudian membandingkan data pada data terakhir dikurangi satu.
ke-2 dengan data ke-3, jika data Kode program lengkapnya dalam
ke-2 lebih besar, kedua data bahasa C++ adalah sebagai berikut :
ditukar lagi.

Program 9.7
#include <iostream> 
 
using namespace std; 
 
int a[10]; 
void input(int data,int i) { 
   a[i] = data; 

void tampil() { 
   for(int i=0; i<10; i++) 
     cout << a[i] << " "; 
   cout << endl; 

void tukar(int data1, int data2) { 
   long temp = a[data1]; 
   a[data1] = a[data2]; 
   a[data2] = temp; 

void bubSort() { 
   int i, j; 
   for(i=10‐1; i>1; i‐‐) 
     for(j=0; j<i; j++) 
       if( a[j] > a[j+1] ) tukar(j, j+1); 

348
 
Array Bahasa Pemrorgraman

void main() { 
   input(57,0); 
   input(89,1); 
   input(49,2); 
   input(51,3); 
   input(12,4); 
   input(90,5); 
   input(1,6); 
   input(0,7); 
   input(63,8); 
   input(25,9); 
   tampil(); 
   bubSort(); 
   tampil(); 

Keluaran program diatas adalah sebagai berikut:


57 89 49 51 12 90 1 0 63 25 
0 1 12 25 49 51 57 63 89 90 

Metode Insertion Sort mirip sampai dengan data terakhir.


dengan cara orang mengurutkan  Jika ditemukan data yang lebih
kartu selembar demi selembar, kartu kecil atau lebih besar, maka akan
diambil dan disisipkan (insert) ke ditempatkan (diinsert) diposisi
tempat yang seharusnya. Adapun yang seharusnya
langkah-langkahnya adalah sebagai Program selengkapnya dalam
berikut : bahasa C++ adalah :
 Pengurutan dimulai dari data ke-2

Program 9.8.
#include <iostream> 
 
using namespace std; 
 
int a[10]; 
void input(int data,int i) { 
   a[i] = data; 

void tampil() { 
   for(int i=0; i<10; i++) 
     cout << a[i] << " "; 
   cout << endl; 

void insertionSort() { 
349
 
Bahasa Pemrograman Array

   int i,j; 
   for(i=1; i<10; i++) { 
     long temp = a[i]; 
     j=i; 
     while(j>0 && a[j‐1] >= temp) { 
       a[j] = a[j‐1]; 
       ‐‐j; 
     } 
     a[j] = temp; 
   } 

void main() { 
   input(57,0); 
   input(89,1); 
   input(49,2); 
   input(51,3); 
   input(12,4); 
   input(90,5); 
   input(1,6); 
   input(0,7); 
   input(63,8); 
   input(25,9); 
   tampil(); 
   insertionSort();     
   tampil(); 

Keluaran programnya adalah sebagai berikut:


57 89 49 51 12 90 1 0 63 25 
0 1 12 25 49 51 57 63 89 90 

9.6. Contoh Program Array


Dibawah ini merupakan ini menggunakan array yang bekerja
beberapa contoh program yang satu dimensi maupun multidimensi
bekerja menggunakan array. Array (dimensi dua atau tiga). Untuk lebih
merupakan variabel yang mampu jelasnya perhatikan beberapa contoh
menyimpan sejumlah nilai yang dibawah ini:
bertipe sama. Pada contoh dibawah

Program 9.9.
Program di bawah ini untuk membaca data kemudian menampilkannya.
#include<iostream.h> 
#include<conio.h> 
350
 
Array Bahasa Pemrorgraman

 
using namespace std; 
 
void main() 

int data[10];   // array dengan 10 elemen bertipe integer 
int elemen; 
 
// entri 10 data 
for (elemen=0;elemen <= 9;elemen++) 

cout << "Data ke ‐ " << elemen << ": "; 
cin >> data[elemen]; 
}   
// tampilkan data setelah entri 
for (elemen=0;elemen <= 9;elemen++) 

cout << "Data ke ‐ " << elemen << ": " << data[elemen]; 

Catatan: Dalam C/C++ elemen array dimulai dari 0.

Program 9.10.
Program untuk menampilkan data array dari hasil inisialisasi:
include<iostream.h> 
#include<conio.h> 
 
using namespace std; 
 
void main() 

int data[5] = {4, 1, 0, ‐9, 8}; 
int elemen; 
 
// tampilkan data 
for (elemen=0;elemen <= 4;elemen++) 

cout << "Data ke ‐ " << elemen << ": " << data[elemen]; 

Program 9.11.

351
 
Bahasa Pemrograman Array

Program untuk mencari data dari array, dan menampilkan nomor elemennya.
#include<iostream.h> 
#include<conio.h> 
 
void main() 

int x; 
int data[10] = {4, 1, 0, ‐9, 8, 5, ‐1, 2, 3, ‐7}; 
int elemen, ketemu; 
cout << "Data yang dicari : "; 
cin >> x; 
ketemu = 0; 
for(elemen=0; elemen<= 9; elemen++) 

if (data[elemen] == x) 
{ ketemu =! 
ketemu; 
break; 


if (ketemu == 0) cout << "Data tidak ditemukan "; 
else cout << "Data ada di elemen : " << elemen; 

Program 9.12.
Program untuk menampilkan data terbesar (maks) dari suatu array.
#include<iostream.h> 
#include<conio.h> 
 
using namespace std; 
 
void main() 

int data[10] = {4, 1, 0, ‐9, 8, 5, ‐1, 2, 3, ‐7}; 
int elemen, max; 
max = data[0]; 
for(elemen=0; elemen<= 9; elemen++) 

if (data[elemen]>max) max = data[elemen]; 
else max = max; 

cout << "Nilai maksimum adalah : " << max; 

352
 
Array Bahasa Pemrorgraman

Array di atas adalah array dimensi satu. Bagaimana dengan array dimensi
dua? Berikut ini contoh penggunaan array dua dimensi:

Program 9.13.
#include<iostream.h> 
#include<conio.h> 
 
using namespace std; 
 
void main() 

int j, k; 
int data[5][3] ={ {3, 4, ‐1}, {2, 3, 0}, {1, 1, 2}, {5, 9, ‐4}, {6, 6, 2} }; 
for (j = 0; j<=4; j++) 

for (k = 0; k<=2; k++) 
cout << "data[" << j << "]["<< k << "] = " << data[j][k] << endl; 

9.7. Soal Latihan


Jawablah soal latihan dibawah ini dengan baik dan benar. 
1. Apa yang dimaksud dengan array
2. Apa kelebihan dan kekurangan program menggunakan array
3. Bagaimana cara mendeklarasikan array
4. Bagaimana cara menginisialisasi array
5. Buatlah program penjumlahan matrik dengan menggunakan array 2
dimensi
6. Buatlah salah satu program pengurutan dengan array

 
 
 
 
 
 
 
 
 

353
 
Bahasa Pemrograman Array

 
 
 
 
 

354
 
Rekursif Bahasa Pemrorgraman

BAB. 10
REKURSIF

10.1. Pengertian Rekursif


10.2. Pengertian Teknik Iteratif
10.3. Perbandingan Teknik Rekursif dan Teknik Iteratif
10.4. Algoritma Teknik Rekursif
10.5. Algoritma Teknik Iteratif
10.6. Penerapan Algoritma Rekursif
10.7. Penerapan Algoritma Iteratif
10.8. Soal Latihan

10.1. Pengertian Rekursif


Rekursi adalah konsep satu teknik pemrograman dengan
pengulangan yang penting dalam cara memanggil sebuah fungsi dari
ilmu komputer. Konsep ini dapat dirinya sendiri, baik itu secara
digunakan untuk merumuskan solusi langsung maupun tidak langsung.
sederhana dalam sebuah Pemanggilan fungsi rekursif secara
permasalahan yang sulit untuk langsung berarti dalam fungsi
diselesaikan secara iteratif dengan tersebut terdapat statement untuk
menggunakan loop for, while do. memanggil dirinya sendiri sedangkan
Pada saat tertentu konsep ini secara tidak langsung berarti fungsi
dapat digunakan untuk rekursif tersebut memanggil 1 atau
mendefinisikan permasalahan lebih fungsi lain sebelum memanggil
dengan konsisten dan sederhana. dirinya sendiri.
Pada saat yang lain, rekursi dapat Fungsi rekursif langsung
membantu untuk mengekspresikan merupakan rekursif, jika ekspresi
algoritma dalam sebuah rumusan yang merealisasikan fungsi tersebut
yang menjadikan tampilan algoritma mengandung aplikasi terhadap fungsi
tersebut mudah untuk dianalisa. tersebut.
Rekursif adalah salah satu
metode dalam dunia matematika
dimana definisi sebuah fungsi Realisasi 
mengandung fungsi itu sendiri. F (<list‐param>) 
Dalam dunia pemrograman, rekursi      depend on 
diimplementasikan dalam sebuah     <kondisi‐basis> : <ekspresi‐1> 
fungsi yang memanggil dirinya
sendiri. Atau Rekursif merupakan
355
 
Bahasa Pemrograman Rekursif

    <kondisi‐rekurensi> : F  program rekursif di atas maka sub


<ekspresi‐2>  program rekursif harus memiliki :
 kondisi yang menyebabkan
Fungsi rekursif tidak langsung pemanggilan dirinya berhenti
merupakan realisasi fungsi yang (disebut kondisi khusus atau
dapat cross-recursif yaitu jika special condition)
realisasi fungsi f mengandung fungsi  pemanggilan diri sub program
g yang realisasinya adalah aplikasi (yaitu bila kondisi khusus tidak
terhadap f. dipenuhi)
Secara umum bentuk dari sub
Realisasi  program rekursif memiliki statemen
G (<list‐param>): F (<ekspresi‐1>)  kondisional :
F (<list‐param>): 
  depend on  if kondisi khusus tak dipenuhi 
   <kondisi‐basis> : <ekspresi‐1>  then  panggil  diri‐sendiri  dengan 
   <kondisi‐rekurensi> : G  parameter yang sesuai  
<ekspresi‐2>  else  lakukan  instruksi  yang  akan 
dieksekusi bila kondisi khusus dipenuhi  
Fungsi merupakan sub program
yang sangat bermanfaat dalam Sub program rekursif umumnya
pemrograman, terutama untuk dipakai untuk permasalahan yang
program atau proyek yang besar. memiliki langkah penyelesaian yang
Manfaat penggunaan subprogram terpola atau langkah-langkah yang
antara lain adalah : teratur. Bila kita memiliki suatu
 Meningkatkan readibility, yaitu permasalahan dan kita mengetahui
mempermudah pembacaan algoritma penyelesaiannya, kadang-
program kadang sub program rekursif menjadi
 Meningkatkan modularity, yaitu pilihan kita bila memang
memecah sesuatu yang besar memungkinkan untuk dipergunakan.
menjadi modul-modul atau bagian- Secara algoritmis (dari segi
bagian yang lebih kecil sesuai algoritma, yaitu bila kita
dengan fungsinya, sehingga mempertimbangkan penggunaan
mempermudah pengecekan, memori, waktu eksekusi sub
testing dan lokalisasi kesalahan. program) sub program rekursif sering
 Meningkatkan reusability, yaitu bersifat tidak efisien .
suatu sub program dapat dipakai Dengan demikian sub program
berulang kali dengan hanya rekursif umumnya memiliki efisiensi
memanggil sub program tersebut dalam penulisan perintah, tetapi
tanpa menuliskan perintah- kadang tidak efisien secara
perintah yang semestinya diulang- algoritmis. Meskipun demikian
ulang. banyak pula permasalahan-
Sub Program Rekursif adalah permasalahan yang lebih sesuai
subprogram yang memanggil dirinya diselesaikan dengan cara rekursif
sendiri selama kondisi pemanggilan (misalnya dalam pencarian/
dipenuhi. Dengan melihat sifat sub searching).

356
 
Rekursif Bahasa Pemrorgraman

Untuk dapat memahami proses 4 dan b = 2 . Baris berikutnya


yang terjadi dalam sebuah fungsi menampilkan nilai a dan b ke layar
rekursif , perhatikan contoh fungsi (printf cout<<"Masuk \ n"<<a <<b;).
rekursif berikut : Kemudian panggil fungsi rekursi
dengan nilai a = 4 dan b = 2 .
Langkah – langkah tersebut diulang
void rekursi (int a, int b)  terus sampai pemanggilan fungsi
{  rekursi dengan nilai a = 6 dan b = 0.
  If (b==0) return;  Pada saat ini kondisi if bernilai benar
  a++;  sehingga fungsi akan keluar (return)
  b‐‐;  dan melanjutkan perintah setelah
  cout<<"Masuk   \ n"<<a <<b;  pemanggilan fungsi rekursi dengan a
  rekursi(a,b);  = 6 dan b = 0. Yaitu mencetak nilai a
  cout<<"Keluar \ n"<<a <<b;  dan b (cout<<"Keluar \n"<<a << b;).
Setelah mencetak nilai a dan b

maka fungsi rekursif akan keluar lagi
, dan melanjutkan perintah setelah
pemanggilan fungsi rekursif
Misalkan Fungsi tersebut
sebelumnya dimana nilai a = 5 dan b
dipanggil dengan nilai a = 3 dan b = 3
=1.
maka pertama tama di cek apakah b
Demikian seterusnya sampai nilai a =
= 0 (if (b == 0) return), jika sama
4 dan nilai b = 2. yang tidak lain
maka keluar. Ternyata nilai b tidak
pemanggilan fungsi rekurif yang
sama dengan 0 maka tambahkan a
pertama. Proses pemanggilan fungsi
dengan 1 dan kurangi b dengan 1.
rekursif dapat diilustrasikan:
Maka keadaan sekarang menjadi a =

      Langkah ke:  
  Rekursif (3,3)    1  a=4 ; b=2 . Cetak : masuk  a=4 || b=2 
1    6  2  a=5 ; b=1 . Cetak : masuk  a=5 || b=1 
  Rekursif (4,2)    3  a=6 ; b=0 . Cetak : masuk  a=6 || b=0 
2    5  4  a=6 ; b=0 . Cetak : keluar   a=6 || b=0 
  Rekursif (5,1)    5  a=5 ; b=1 . Cetak : keluar   a=5 || b=1 
3    4  6  a=4 ; b=2 . Cetak : keluar   a=4 || b=2 
  Rekursif (6,0)       

Gambar 10.1. Proses Pemanggilan Fungsi Rekursif

Penggunaan fungsi rekursif fungsi pangkat xy , kita tahu bahwa


misalnya pada fungsi pangkat, semua bilangan selain 0, jika
faktorial, dan barisan fibonacci. Mari dipangkatkan dengan 0 nilainya
kita lihat satu demi satu. Dalam sama dengan 1. Jika x dipangkatkan

357
 
Bahasa Pemrograman Rekursif

dengan y, dengan y lebih dari 0, formula. Konsep ini pun difasilitasi


maka hasilnya sama dengan x dalam pemrograman.
dikalikan dengan x dipangkatkan y – Dalam pemrograman, ada 2
1. Jika dituliskan dalam notasi terminologi yang bisa didefinisikan
matematika definisinya adalah dengan rekursif, yaitu prosedur dan
sebagai berikut: fungsi. Seperti halnya dalam bidang
matematika, penggunaan konsep ini
juga untuk memudahkan
pendefinisian dua terminologi
tersebut. Bahkan terdapat suatu
masalah yang hanya bisa
diselesaikan dengan rekursifitas dan
Kita lihat di atas pada definisi y > sangat sulit untuk diselesaikan tanpa
0, bentuk pemangkatan muncul rekursifitas.
kembali di sisi kanan. Itulah yang Definisi rekursif harus memuat
disebut rekursif. Definisi rekursif komponen basis dan komponen
selalu dimulai dengan kasus rekursif. Dalam pemrograman,
penyetop, penghenti, atau kasus komponen ini dapat dipisahkan
dasar dari suatu permasalahan, dengan menggunakan perintah
dalam hal ini terjadi ketika nilai y = analisa kasus. Misalkan e1 adalah
0. Definisi rekursif yang lebih ekspresi kondisi untuk basis dan e2
kompleks mengandung inti dari adalah ekspresi kondisi untuk bagian
permasalahan yang akan rekursif, definisi rekursif dapat
dipecahkan, namun lebih sederhana. dituliskan:
Dalam hal ini yang tadinya x
dipangkatkan dengan y, kini bentuk if (e1) then 
pemangkatan menjadi lebih     {bagian basis} 
sederhana, yaitu y – 1. Hal ini else 
dimaksudkan untuk “menggiring”     {bagian rekursif} 
masalah kompleks ke kasus dasar
atau penyetop rekursinya. Untuk x = Salah satu contoh dari kasus
10 dan y = 0, hasil dari xy adalah 1. rekursif adalah barisan bilangan
Untuk x = 10 dan y = 3 hasilnya fibonacci. Barisan bilangan fibonacci
dapat digambarkan sebagai berikut: adalah 1, 1, 2, 3, 5, 8, 13, 21, ... .
Konsep rekursifitas banyak Definisi barisan bilangan fibonacci
ditemui di dunia nyata. Istilah ini adalah sebagai berikut. Misalkan
muncul pertama kali di kajian bidang fibonacci(i) menyatakan bilangan
matematika. Dalam kasus tertentu, fibonacci yang ke-i, maka:
konsep ini memudahkan perumusan

 fibonacci(i  1)  fibobacci(i  2) , i  2
fibonacci(i)  
 1 , i  1,2

358  
 
Rekursif Bahasa Pemrorgraman

Program 10.1. Penerapan bilangan Fibonaci dengan rekursi


#include <iostream> 
#include<conio.h> 
 
using namespace std; 
 
int Fibonaci(int); 
 
int main() 

 
  int n=7; 
  for (int i=1; i<=n; i++) 
    cout<<" \ndata "<< Fibonaci(i); 
  getch(); 
    return 0; 

 
int Fibonaci(int n) 

  if (n<=2) 
  return n; 
  else 
  return(Fibonaci(n‐2)+Fibonaci(n‐1)); 

Keluaran program diatas adalah:


data 1 
data 2 
data 3 
data 5 
data 8 
data 13 
data 21 

Rekursif adalah suatu method program secara natural, langsung,


yang memanggil dirinya sendiri dan simple dalam memecahkan
secara langsung maupun tidak problem yang susah dipecahkan.
lansung. Rekursif merupakan teknik Untuk lebih memahami rekursif
pemrograman yang sangat berguna. perhatikan contoh berikut: Contoh
Dalam beberapa kasus, yang umum untuk memahami teknik
menggunakan cara rekursi rekursif adalah masalah factorial.
memudahkan pengembangan  
359
 
Bahasa Pemrograman Rekursif

4! = 4 x 3 x 2 x 1  ada terminasinya atau ada saat


3! = 3 x 2 x 1  berhentinya. Pada contoh factorial ini
2! = 2 x 1  adalah 0!. Yaitu sama dengan 1
1! = 1  bukan 0. Dalam istilah matematika 0!
ini disebut dengan base step.
Dari contoh di atas bisa diubah Sedangkan bagian yang lain disebut
cara pandangnya menjadi: recursive step. Secara umum rumus
factorial dalam bentuk rekursif
4! = 4 x 3!  menjadi sebagai berikut:
3! = 3 x 2! 
2! = 2 x 1!  0! = 1;    base step 
1! = 1  n! = n x (n – 1)!; n > 0   recursive step 

Dengan catatan bahwa 0! = 1 Jadi proses rekursif itu akan


maka cara pandang yang kedua bisa selalu memanggil dirinya sendiri
dlanjutkan menjadi: dengan variable yang berbeda, dan
terus dilakukan sampai mencapai
4! = 4 x 3!  base step sebagai terminasinya.
Setelah terminasi maka akan
3! = 3 x 2! 
mendapatkan hasil dan selanjutnya
2! = 2 x 1! 
hasil tersebut dikembalikan ke
1! = 1  pemanggilnya untuk dilakukan
0! = 1  perhitungan. Hal itu dilanjutkan
sampai ke pemanggil yang pertama
Cara pandang yang kedua inilah sehingga mendapatkan hasil
yang disebut rekursif, karena dalam sebagaimana mestinya. Ilustrasi
proses perhitungan selalu memanggil berikut memberi gambaran tentang
dirinya sendiri. Yaitu factorial proses rekursif.
memanggil factorial. Akan tetapi perlu
dicatat bahwa teknik rekursif ini harus

360
 
Rekursif Bahasa Pemrorgraman

 
4!  =  4 x  3!  6 

 
3!  =  3 x  2!  2 

 
2!  =  2 x  1!  1 

 
1!  =  1 x  0!  1 

0!  =  1 

Gambar 10.2. Ilustrasi Tentang Proses Rekursif.

10.2. Pengertian Teknik Iteratif


Teknik Iteratif adalah teknik 4! = 4 x 3 x 2 x 1 
perulangan atau menghitung secara 3! = 3 x 2 x 1 
berulang. Teknik ini memanfaatkan 2! = 2 x 1 
kelebihan komputer sebagai mesin 1! = 1 
hitung yang mampu melakukan Untuk menghitung n! berarti
perhitungan secara berulang dengan mengkalikan bilangan bulat positif
perintah yang sangat sederhana. dari 1 sampai dengan n. Pengertian
Cara ini mudah dilakukan akan penghitunganannya terlihat mudah,
tetapi memerlukan proses yang namun jika n bilangan yang besar jika
panjang untuk mendapatkan hasil, dihitung tanpa komputer akan sangat
dan cara ini menggunakan memori sulit dan lama.
langsung. Contoh factorial cara Kebanyakan pemrogram pemula
pandang yang pertama menggunakan cara ini karena lebih
menggunakan teknik iteratif jelas algoritmanya.

10.3. Perbandingan Teknik Rekursif dan Teknik Iteratif


Teknik Iteratif lebih mudah kurang(-), bagi(/), kali(*), kadangkala
dimengerti karena jelas tinggal juga pangkat atau yang lainnya
mengurutkan angka-angkanya dari 1 namun dapat dikembalikan ke empat
atau mungkin 0 sampai dengan n. operasi dasar pertama. Kerugian
Operasi yang terjadi bisa tambah(+), yang pertama teknik ini

361
 
Bahasa Pemrograman Rekursif

membutuhkan memori yang banyak harus repot‐repot menggunakan


terutama untuk bilangan yang besar. rekursif? Memang benar bahwa
Yang kedua proses iterasi bisa semua fungsi rekursif dapat dibuat
membutuhkan waktu yang lama versi iterasinya. Namun demikian,
apabila bilangannya besar. ada beberapa masalah yang jauh
Sedang Teknik Rekursif harus lebih mudah jika dipecahkan dengan
tahu formulanya dahulu, dalam hal ini rekursif. Kode program untuk
mana base step-nya, dan mana beberapa masalah rekursif juga relatif
rekursif step-nya. Biasa dipakai oleh lebih mudah dipahami dibandingkan
pemrogram yang sudah agak lanjut versi iterasinya. Berikut adalah versi
dan operasi matematikanya iteratif dari fungsi pangkat.
merupakan operator biasa. Namun Sekaranng perhatikan pada aplikasi
memori yang digunakan bukan permainan menara Hanoi di bawah
memori langsung penampung ini
variable namun merupakan stack. Menara Hanoi ialah salah satu
Jadi banyak sedikitnya penghitungan permainan yang dulunya dimainkan
tergantung dari besarnya kapasitas oleh seorang pendeta di Hanoi.
stack yang dipunyai komputer. Tujuan permainan ini ialah
Secara rata-rata proses memindahkan n buah pringan dari
panghitungan dengan rekursif akan tonggak asal (A) melalui tonggak
lebih cepat karena kompleksitasnya bantu (B) menuju tonggak tujuan (C).
lebih kecil dibanding dengan iteratif. Dengan aturan–aturan bahwa
Kadang seseorang bertanya, loh piringan yang lebih kecil tidak boleh
saya kan juga bisa membuat fungsi berada di bawah piringan yang lebih
pangkat di atas dengan besar.
menggunakan teknik iteratif. Misalnya
menggunakan while loop. Kenapa

Menara A B C :

a b c

Gambar 10.3. Menara dengan Tiga Piringan

362  
 
Rekursif Bahasa Pemrorgraman

Seperti biasa untuk memecahkan sampai (n-1) tersebut dari tonggak


masalah kita daftarkan dulu langkah- bantu (B) ke tonggak tujuan (C).
langkah yang diambil mulai n = 1. Nah bagaimana caranya
Dengan dfinisi piringan yang paling membawa piringan ke 1 sampai (N-1)
atas ialah piringan 1. dari tonggak asal ke tonggak bantu
(B), caranya sama saja yaitu dengan
Untuk n = 1 : memindahkan piringan ke (n-1) dari
 Pindahkan piringan 1 dari A ke C tonggak asal (A) ke tonggak tujuan
Untuk n = 2 : yang pada saat ini berada pada
 Pindahkan piringan 1 dari A ke B tonggak (B) sedangkan piringan dari
 Pindahkan piringan 2 dari A ke C 1 sampai ke (N-2) dipindahkan ke
 Pindahkan piringan 3 dari B ke C tonggak bantu yang saat ini berada di
tonggak (C) , Setelah piringan ke 1
Dari contoh diatas dapat diambil sampai (N-2) berada pada tonggak
kesimpulan , untuk memindahkan N bantu (C), kemudian pindahkan
piringan dari tonggak asal (A) ke piringan ke 1 sampai (N-2) ke
tonggak tujuan (C) maka piringan ke tonggak tujuan (B) dan seterusnya.
N harus berada di tonggak tujuan (C), Metode penyelesaian permainan
sedangkan piringan ke 1 sampai (N - Hanoi di atas sering disebut sebagai
1) harus berada di tonggak bantu (B). metode back tracking, jadi solusi
Setelah piringan ke 1 sampai (N-1) dicari dengan cara mundur ke
berada pada tonggak bantu (B), belakang dahulu, baru kemudian
kemudian pindahkan piringan ke 1 solusi bisa ditemukan. Berikut Listing
program Menara Hanoi dalam
bahasa C

Program 10.2
include <stdio.h> 
 
void Hanoi(int n,char asal,char bantu, char tujuan)  
            // pindahkan piringan ke n 
{            // dari asal menuju tujuan 
            // melalui bantu 
  if (n == 0) return; 
  Hanoi(n‐1,asal,tujuan,bantu);    // pindahkan piringan ke n‐1 
            // dari asal ke bantu melalui 
            // tonggak tujuan 
 
  printf("Pindah piring ke %d ke dari %c ke %c\n",n,asal,tujuan); 
  Hanoi(n‐1,bantu,asal,tujuan)  // pindahkan piringan ke n ‐ 1 
 
            // dari bantu menuju tujuan 
            // melalu asal 

363
 
Bahasa Pemrograman Rekursif

 
int main(void) 

  int n; 
  printf("Jumlah piringan ? "); 
  scanf("%d",&n); 
  Hanoi(n,'a','b','c'); 
  return 0; 

10.4. Algoritma Teknik Rekursif


Telah disinggung di depan untuk 0! = 1; base step
Teknik Rekursif harus dicari mana n! = n x (n – 1)!; n > 0 recursive step
base step-nya dan mana rekursif
step-nya. Dari problem yang hendak Pseudocode-nya:
dipecahkan dicari dahulu keduanya.
Apabila sudah ketemu baru Int Faktorial(int n) 
melangkah ke prose berikutnya yaitu { 
menentukan pseudocode-nya,      If (n==0) 
sekaligus menentukan apakah           Return 1; 
memakai procedure atau function.      Else 
Untuk Teknik Rekursif ini lebih           Return n * Faktorial(n‐1) 
cocok memakai function, karena } 
harus bisa dipanggil di dalam
program tersebut. Sebagai contoh Jika dijalankan gambaran prosesnya
mencari faktorial seperti di atas. sebagai berikut: Misal untuk
Algoritma rekursifnya sebagai berikut: menghitung 4!

364
 
Rekursif Bahasa Pemrorgraman

Faktorial(4) 

4 x Faktorial(3) 

3 x Faktorial(2) 

2 x Faktorial(1) 

1 x Faktorial(0) 

Gambar 10.4. Ilustrasi Rekursif Untuk Menghitung 4! (faktorial 4)

Dalam hal ini memang untuk rekursif harus memakai function karena
procedure tidak dapat dipanggil di dalam procedure itu sendiri.

10.5. Algoritma Teknik Iteratif


Teknik Iteratif algoritmanya Pseudocode Teknik Iteratif:
seperti apa adanya terlihat jadi tidak
begitu rumit. Pada tulisan di atas int Faktorial(int n) 
telah dijelaskan beberapa contoh { 
menghitung faktorial secara iteratif.     int x = 1; 
Untuk lebih jelasnya lihat contoh     for(int i = 1; i <= n; i++) 
berikut:        x = x * i; 
    return x; 
4! = 4 x 3 x 2 x 1  } 
3! = 3 x 2 x 1 
2! = 2 x 1  Dapat dilihat di atas bahwa
1! = 1  iterasinya adalah mengulang
perkalian x = x * i dari i = 1 sampai
Algoritmanya disini sangat jelas dengan I = n dengan penambahan 1
untuk faktorial menggunakan Teknik setiap perubahan i. Perlu diketahui
Iteratif tinggal mengulang operasi juga untuk harga awal x harus sama
perkalian dari 1 sampai dengan dengan 1, jika tidak diberi harga awal
banyaknya n. maka hasilnya akan salah.

365
 
Bahasa Pemrograman Rekursif

Jadi jelas sekali perbedaan algoritma Teknik Iteratif.


Teknik Rekursif dengan algoritma

10.6. Penerapan Algoritma Rekursif


Dibawah ini merupakan pemangkatan dan lain sebagainya.
beberapa contoh program rekursif Untuk lebih jelasnya perhatikan
dengan berbagai kasus dilapangan program-program dibawah ini:
seperti faktorial, program

Program 10.3. Faktorial:


#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
 
int faktorial(int n) 

    if (n==0) 
       return 1; 
    else 
       return n * faktorial(n‐1); 

 
int main(int argc, char *argv[]) 

    int n; 
    cout<<"Program Faktorial Rekursif\n"; 
    cout<<"Masukkan Nilai n : "; 
    cin>>n; 
    cout<<"Faktorial("<<n<<") = "<<faktorial(n)<<"\n"; 
    system("PAUSE"); 
    return EXIT_SUCCESS; 
}  

Keluaran program tersebut adalah sebagai berikut:


Program factorial Rekursif 
Masukan Nilai n : 4 
Faktorial (4) = 24 

Program 10.4. Pangkat (an):


#include <cstdlib> 
#include <iostream> 
 
366
 
Rekursif Bahasa Pemrorgraman

using namespace std; 
 
float Pangkat(float a, int n) 

    if (n==0) 
       return 1; 
    else 
       return a * Pangkat(a, n‐1); 

 
int main(int argc, char *argv[]) 

    float a; 
    int n; 
    cout<<"Program Pangkat Rekursif\n"; 
    cout<<"Isilah Nilai a = "; 
    cin>>a; 
    cout<<"Isilah Nilai n = "; 
    cin>>n; 
    cout<<"Hasil dari "<<a<<" pangkat "<<n<<" adalah "<<Pangkat(a,n)<<"\n"; 
    system("PAUSE"); 
    return EXIT_SUCCESS; 

Keluaran program di atas seperti berikut:


Program pangkat rekursif 
Istilah Nilai a   = 2 
Istilah Nilai a   = 2 
Hasil dari 2 pangkat  3 adalah 8 

Program 10.5. Menghitung jumlah bilangan Integer positif dari 1 sampai


dengan n secara rekursif.
#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
 
int JumlahInt(int n) 

    if (n==1) 
       return 1; 
    else    
       return n + JumlahInt(n‐1); 

367
 
Bahasa Pemrograman Rekursif


 
int main(int argc, char *argv[]) 

    int n; 
    cout<<"Program Jumlah Integer\n"; 
    cout<<"Masukkan Nilai n = "; 
    cin>>n; 
    cout<<"Jumlah bilangan Integer dari 1 sampai "<<n<<" = "<<JumlahInt(n)<<"\n"; 
    system("PAUSE"); 
    return EXIT_SUCCESS; 

Keluaran program tersebut dapat dilihat dalam gambar berikut ini:


Program Jumlah Integer 
Masukan Nilai n = 4 
Jumlah bilangan Integer dari 1 sampai 4 = 10 

10.7. Penerapan Algoritma Iteratif


Dibawah ini merupakan program dibawah ini harapanya
beberapa contoh program iteratif menjadi tahu mengenai perbedaan
dengan berbagai kasus dilapangan antara keduanya. Untuk lebih
seperti faktorial, program jelasnya perhatikan program-program
pemangkatan dan lain sebagainya. dibawah ini:
Setelah memperhatikan contoh

Program 10.6. Faktorial:


#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
 
int Faktorial(int n) 

    int x = 1; 
    for(int i = 1; i <= n; i++) 
       x = x * i; 
    return x; 

 
int main(int argc, char *argv[]) 

368  
 
Rekursif Bahasa Pemrorgraman

    int n; 
    cout<<"Program Faktorial Iteratif\n"; 
    cout<<"Masukkan Nilai n : "; 
    cin>>n; 
    cout<<"Faktorial("<<n<<") = "<<Faktorial(n)<<"\n"; 
    system("PAUSE"); 
    return EXIT_SUCCESS; 

Keluaran program sebagai berikut:


Program Faktorial Iteratif 
Masukan Nilai n : 3 
Faktorial (3) = 6 

Program 10.7. Pangkat secara Iteratif:


#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
 
float Pangkat(float a, int n) 

      float hasil = 1; 
      if (n==0) 
         return 1; 
      for (int i=1; i<=n; i++) 
      { 
          hasil = hasil * a;     
      } 
      return hasil; 

 
int main(int argc, char *argv[]) 

    float a; 
    int n; 
    cout<<"Program Pangkat Iteratif\n"; 
    cout<<"Isilah Nilai a = "; 
    cin>>a; 
    cout<<"Isilah Nilai n = "; 
    cin>>n; 
    cout<<"Hasil dari "<<a<<" pangkat "<<n<<" adalah "<<Pangkat(a,n)<<"\n"; 
    system("PAUSE"); 

369
 
Bahasa Pemrograman Rekursif

    return EXIT_SUCCESS; 

Keluaran program diatas adalah sebgai berikut:


Program Pangkat Iteratif 
Istilah Nilai a = 2 
Istilah Nilai n = 5 
Hasil dari 2 pangkat 5 adalah 32 

Program 10.8. Menghitung Jumlah Integer Positif secara iteratif:


#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
 
int JumlahInt(int n) 

    int hasil = 0; 
    for (int i=1; i<=n; i++) 
    { 
        hasil = hasil + i;     
    } 
    return hasil; 

 
int main(int argc, char *argv[]) 

    int n; 
    cout<<"Program Jumlah Integer Iteratif\n"; 
    cout<<"Masukkan Nilai n = "; 
    cin>>n; 
    cout<<"Jumlah bilangan Integer dari 1 sampai "<<n<<" = "<<JumlahInt(n)<<"\n"; 
    system("PAUSE"); 
    return EXIT_SUCCESS; 

Keluaran program adalah sebagai berikut:


Program Jumlah Integer Iteratif 
Masukan Nilai n = 5 
Jumlah bilangan Integer dari 1 sampai 5 = 15 

Dari berbagai contoh aplikasi di ciri algoritma program baik secara


atas kiranya cukup jelas nampak ciri- Teknik Rekursif maupun Teknik

370  
 
Rekursif Bahasa Pemrorgraman

Iteratif. Apakah semua problem bisa Integer Positif bisa juga diselesaikan
dipecahkan secara Teknik Rekursif ? dengan rumus : n x (n + 1) / 2 atau
Ternyata tidak semuanya. Apakah (n2 + n) / 2 jadi tidak perlu Iteratif.
juga harus diselesaikan secara Perhatikan beberapa kasus
Teknik Iteratif ? Ternyata juga tidak. berikut ini pun dapat diselesaikan
Sebagai contoh Jumlah Bilangan dengan rekursif:

1. Menggambar karakter ’*’ sebanyak n


  *********** 
     n=11 
 
Basic   : n=0   
 tidak mencetak apa‐apa 
Rekursif  : n>0   
 gambar karakter ’*’ sebanyak (n‐1)  
 cetak ’*’ 

2. Menggambar persegi panjang dengan lebar l dan tinggi t


 
 
                                       t = 4 
 
 
           l = 11 
 
Basic   : n=0   
 tidak mencetak apa‐apa 
Rekursif  : n>0   
 gambar persegi panjang dengan lebar l dan tinggi (t‐1) 
 gambar ’*” sebanyak l 

3. Menggambar segitiga/piramid dengan tinggi n mulai kolom k


     
 
 
      t = 4 
 
 
 
                     k=0 
      
Basic   : n=0   
371
 
Bahasa Pemrograman Rekursif

 tidak mencetak apa‐apa 
Rekursif  : n>0   
 gambar piramid dengan tinggi (n‐1) mulai kolom (k+1) 
 cetak karakter ’ ’ sebanyak k 
 cetak karakter ’*’ sebanyak 2n – 1 

10.8. Latihan Soal


Jawablah soal latihan dibawah ini dengan baik dan benar.
1. Apa yang dimaksud dengan rekursif, jelaskan
2. Apakan perbedaan antara program menggunakan rekursif dan interatif
3. Dari soal diatas jelaskan kekurangan dan kelebihan kedua program
tersebut
4. Buatlah program faktorial dengan rekursif
5. Buatlah program pemangkatan dengan menggunakan rekursif

372  
 
Grafik Bahasa Pemrorgraman

BAB. 11
GRAFIK

11.1. Pengertian Grafik


11.2. Grafik Library
11.3. Grafik Sederhana
11.4. Animasi Grafik
11.5. Dasar-dasar Game
11.6. Soal Latihan

11.1. Pengertian Grafik


Dalam pemrogram C++ untuk Dengan menggunakan GDI
membuat grafik kita harus mengenal seorang pemrogram dapat dengan
GUI (Graphics User Interface). mudah membuat aplikasi grafik tanpa
Windows yang kita kenal merupakan mempedulikan kompatibilitas dengan
aplikasi yang berjalan di atas GUI, card monitor yang dipakai atau
jadi tampilan yang keluar pasti perangkat keras yang lain. Hal ini
berbasis grafik. Berbeda dengan dikarenakan Windows sudah
DOS, system operasi ini berbasis mengatur semuanya, jadi pemrogram
teks bukan grafik. Untuk input/outpu tinggal konsentrasi membuat aplikasi
berbasis grafik windows mempunyai grafiknya atau pembuatan aplikasi
kumpulan fungsi-fungsi di dalam citra.
Windows API (Application Program Selain itu GDI bersifat device
Interface) yang sering juga disebut independent, artinya tidak tergantung
GDI (Graphics Device Interface). peralatan fisik yang digunakan.
Apa keistimewaan GDI ? Pernyataan untuk membuat lingkaran
Pemrogram yang berkecimpung ke layar monitor, maupun ke printer,
dalam dunia grafik dengan DOS atau ke plotter sama. Tentu saja hal
mernah merasakan sulitnya membuat ini amat menguntungkan pemrogram
aplikasi grafik yang kompatibel karena hanya mengingat satu
dengan card monitor, karena resolusi perintah saja untuk semua peralatan
card yang berbeda kadang harus atau berbagai macam peralatan.
menyesuaikan dengan membuat rutin
yang berbeda.

373 
 
Bahasa Pemrograman Grafik

11.2. Grafik Library


Pada pemrograman C++ dipelajari. Untuk lebih jelasnya ikuti
mempunyai library yang disebut langkah-langkah program berikut:
OpenGL. Library ini memanfaatkan  Pada saat membuat proyek baru
Windows API dalam proses harus kita arahkan ke library
pembentukan grafik. Dengan OpenGL
menggunakan OpenGL pembuatan  Setelah proyek diciptakan maka
grafik jadi sangat mudah. Namun kita langsung mempunyai main()
demikian perlu diketahui bahwa program yang apabila dijalankan
pemrograman menggunakan library (run) langsung ada hasilnya
harus mengikuti prosedur yang telah  Selanjutnya tugas pemrogram
ditetapkan oleh pembuatnya. tinggal memodifikasi bagian-
Pada prinsipnya kita tinggal bagian tertentu disesuaikan
memodifikasi program yang telah dengan rancangan program yang
ada, pada bagian mana yang telah ditetapkan
dimodifikasi agar sesuai dengan Gambaran pembuatan proyek baru
keperluannya itulah yang harus seperti berikut:

Gambar 11.1. pembuatan proyek

Pada saat anda sudah memilih siap dan di dalamnya sudah ada
membuat proyek baru maka pilihlan main() program yang siap
OpenGL sebagai basis proyek ini, ditampilkan; program inilah yang siap
seperti terlihat dalam gambar di atas. dimodifikasi. Perhaikan gambar di
Setelah OK maka proyek langsung bawah:

374
 
Grafik Bahasa Pemrorgraman

Gambar 11.2. proyek OpenGL

Terlihat pada gambar bahwa sudah 11.3. Grafik Sederhana


ada main() program dan yang penting Pengenalan grafik biasanya
dalam editor terlihat library yang dimulai dengan membuat garis. Garis
hendak dipakai untuk membuat grafik di dalam grafik merupakan kumpulan
ini. Lihat cara penulisan dibawah ini: titik-titik yang berupa pixel, resolusi
pixel akan mempengaruhi hasil
#include <windows>  tampilan; makin rapat pixel grafik
#include <gl/gl.h>  yang dihasilkan makin halus
sehingga kadang kelihatan jadi lebih
Dua buah header tersebut yang indah dan menarik. Perintah dalam
dibutuhkan untuk menghubungi OpenGL untuk membuat garis:
library pada saat dibutuhkan oleh
program dalam membentuk grafik.

Program 11.1
glClearColor (1.0f, 1.0f, 1.0f, 0.0f); 
glClear (GL_COLOR_BUFFER_BIT); 
 
glBegin (GL_LINES); 
 
glColor3f (0.0f, 0.0f, 0.0f);   glVertex2f (0.0f, 0.5f); 
glColor3f (0.0f, 0.0f, 0.0f);   glVertex2f (0.0f, ‐0.5f); 
             
glColor3f (0.0f, 0.0f, 0.0f);   glVertex2f (0.5f, 0.0f); 

375 
 
Bahasa Pemrograman Grafik

glColor3f (0.0f, 0.0f, 0.0f);   glVertex2f (‐0.5f, 0.0f); 
             
glEnd (); 
             
SwapBuffers (hDC); 

Setelah dieksekusi potongan merupakan dua perintah bukan satu


program diatas maka akan perintah. Namun karena keduanya
menampilan hasil grafik seperti saling terkait satu sama lain maka
gambar dibawah ini: dijadikan satu baris, walaupun jika
hendak ditulis pada baris yang
berbeda juga tidak mengapa.
Penjelasan lebih lanjut, format
glColor3f adalah :

glColor3f(red, green, blue);  

Argumen red, green, blue untuk


mengaktifkan masing-masing diisi
bilangan pecahan 1 (1.0), untuk
mematikan diisi bilangan pecahan 0
(0.0). Dapat dilihat contoh di atas
semuanya dimatikan berarti titik-titik
pixel akan berwarna hitam (seperti
dilihat di gambar hasil eksekusi).
Kombinasi dari ketiga argument ini
akan menghasilkan warna yang
Gambar 11.3. Garis indah dan sangat menarik. Perlu
diketahui pula bahwa grafik yang
Fungsi utama sehingga dapat terjadi merupakan grafik Cartesian
menghasilkan grafik seperti gambar yaitu grafik yang titik nolnya di
di atas adalah: tengah, oleh karena itu untuk
membuat garis tegak dibutuhkan dua
glColor3f  (0.0f,  0.0f,  0.0f);      glVertex2f  glVertex2f yang masing-masing
(0.0f, 0.5f);  argumen diisi dengan( 0.0, 0.5) dan
glColor3f  (0.0f,  0.0f,  0.0f);      glVertex2f  (0.0, -0.5). Begitu juga dengan garis
(0.0f, ‐0.5f);  mendatar dibutuhkan dua glVertex2f,
tentu saja dengan argumen yang
bisa dipahami bahwa glColor3f(0.0f, berbeda dalam hal ini (-0.5, 0.0) dan
0.0f, 0.0f) merupakan perintah untuk (0.5, 0.0). Dengan memodifikasi
member warna titik-titik dari pixel program tersebut bisa didapatkan
yang dihasilkan oleh glVertex2f(0.0f, tampilan grafik yang menarik.
0.5f). Sebenarnya masingmasing Selanjutnya harus ada glBegin()
baris pada potongan program di atas dan glEnd(), karena perintah itu

376
 
Grafik Bahasa Pemrorgraman

merupakan awal dan akhir program angka pecahan dan dapat


grafik yang dijalankan. Pada glBegin dikombinasikan sehingga
ada argumen GL_LINES, ini mendapatkan warna yang menarik.
dimaksudkan untuk membuat garis. Pada contoh program ini sengaja
Sedangkan apabila hendak membuat dibuat putih dengan
bentuk yang lain maka perlu mengkombinasikan red, green, blue
disesuaikan, contoh ada semuanya diisi 1 (1.0). Untuk
GL_TRIANGLES untuk segitiga, menciptakan atau mendapatkan
GL_QUADS untuk segi empat, atau perubahan argumen (jika diubah)
GL_POLYGON untuk segi banyak. diperlukan perintah:
Perintah glClearColor untuk
mengatur warna latar belakang glClear(GL_COLOR_BUFFER_BIT); 
window, dengan format sebagai
berikut : yang berarti perubahan warna pada
perintah sebelumnya disimpan di
glClearColor(red, green, blue, alpha);  buffer yang nanti pada saat eksekusi
akan ditampilkan.
seperti perintah sebelumnya Program selengkapnya dapat
argumen yang ada bisa diisi dengan dilihat di bawah ini:

Program 11.2.
#include <windows.h> 
#include <gl/gl.h> 
 
/************************** 
 * Function Declarations 
 **************************/ 
LRESULT CALLBACK WndProc (HWND hWnd, UINT message, 
WPARAM wParam, LPARAM lParam); 
void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC); 
void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC); 
 
/************************** 
 * WinMain 
 **************************/ 
int WINAPI WinMain (HINSTANCE hInstance, 
                    HINSTANCE hPrevInstance, 
                    LPSTR lpCmdLine, 
                    int iCmdShow) 

    WNDCLASS wc; 
    HWND hWnd; 
    HDC hDC; 

377 
 
Bahasa Pemrograman Grafik

    HGLRC hRC;         
    MSG msg; 
    BOOL bQuit = FALSE; 
    float theta = 0.0f; 
 
    /* register window class */ 
    wc.style = CS_OWNDC; 
    wc.lpfnWndProc = WndProc; 
    wc.cbClsExtra = 0; 
    wc.cbWndExtra = 0; 
    wc.hInstance = hInstance; 
    wc.hIcon = LoadIcon (NULL, IDI_APPLICATION); 
    wc.hCursor = LoadCursor (NULL, IDC_ARROW); 
    wc.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH); 
    wc.lpszMenuName = NULL; 
    wc.lpszClassName = "GLSample"; 
    RegisterClass (&wc); 
 
    /* create main window */ 
    hWnd = CreateWindow ( 
      "GLSample", "OpenGL Sample",  
      WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE, 
      0, 0, 256, 256, 
      NULL, NULL, hInstance, NULL); 
 
    /* enable OpenGL for the window */ 
    EnableOpenGL (hWnd, &hDC, &hRC); 
 
    /* program main loop */ 
    while (!bQuit) 
    { 
        /* check for messages */ 
        if (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE)) 
        { 
            /* handle or dispatch messages */ 
            if (msg.message == WM_QUIT) 
            { 
                bQuit = TRUE; 
            } 
            else 
            { 
                TranslateMessage (&msg); 
                DispatchMessage (&msg); 

378
 
Grafik Bahasa Pemrorgraman

            } 
        } 
        else 
        { 
            /* OpenGL animation code goes here */ 
 
            glClearColor (1.0f, 1.0f, 1.0f, 0.0f); 
            glClear (GL_COLOR_BUFFER_BIT); 
 
            glBegin (GL_LINES); 
            glColor3f (0.0f, 0.0f, 0.0f);   glVertex2f (0.0f, 0.5f); 
            glColor3f (0.0f, 0.0f, 0.0f);   glVertex2f (0.0f, ‐0.5f); 
             
            glColor3f (0.0f, 0.0f, 0.0f);   glVertex2f (0.5f, 0.0f); 
            glColor3f (0.0f, 0.0f, 0.0f);   glVertex2f (‐0.5f, 0.0f); 
            glEnd (); 
 
            SwapBuffers (hDC); 
        } 
    } 
 
    /* shutdown OpenGL */ 
    DisableOpenGL (hWnd, hDC, hRC); 
 
    /* destroy the window explicitly */ 
    DestroyWindow (hWnd); 
 
    return msg.wParam; 

 
/******************** 
 * Window Procedure 
 ********************/ 
LRESULT CALLBACK WndProc (HWND hWnd, UINT message, 
                          WPARAM wParam, LPARAM lParam) 

 
    switch (message) 
    { 
    case WM_CREATE: 
        return 0; 
    case WM_CLOSE: 
        PostQuitMessage (0); 
379 
 
Bahasa Pemrograman Grafik

        return 0; 
 
    case WM_DESTROY: 
        return 0; 
 
    case WM_KEYDOWN: 
        switch (wParam) 
        { 
        case VK_ESCAPE: 
            PostQuitMessage(0); 
            return 0; 
        } 
        return 0; 
 
    default: 
        return DefWindowProc (hWnd, message, wParam, lParam); 
    } 

 
/******************* 
 * Enable OpenGL 
 *******************/ 
void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC) 

    PIXELFORMATDESCRIPTOR pfd; 
    int iFormat; 
 
    /* get the device context (DC) */ 
    *hDC = GetDC (hWnd); 
 
    /* set the pixel format for the DC */ 
    ZeroMemory (&pfd, sizeof (pfd)); 
    pfd.nSize = sizeof (pfd); 
    pfd.nVersion = 1; 
    pfd.dwFlags = PFD_DRAW_TO_WINDOW |  
      PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; 
    pfd.iPixelType = PFD_TYPE_RGBA; 
    pfd.cColorBits = 24; 
    pfd.cDepthBits = 16; 
    pfd.iLayerType = PFD_MAIN_PLANE; 
    iFormat = ChoosePixelFormat (*hDC, &pfd); 
    SetPixelFormat (*hDC, iFormat, &pfd); 
 

380
 
Grafik Bahasa Pemrorgraman

    /* create and enable the render context (RC) */ 
    *hRC = wglCreateContext( *hDC ); 
    wglMakeCurrent( *hDC, *hRC ); 

 
/****************** 
 * Disable OpenGL 
 ******************/ 
void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC) 

    wglMakeCurrent (NULL, NULL); 
    wglDeleteContext (hRC); 
    ReleaseDC (hWnd, hDC); 

Dalam program ini terlihat sangat ukuran window tinggal mengubah


panjang, tetapi itulah yang terjadi argumen di dalam create main
apabila memprogram menggunakan window, disana defaultnya adalah 0,
library yang tersedia. Namun jika 0, 256, 256, angka ini dapat diubah
harus membuat sendiri dari awal untuk mendapatkan window yang
maka pemrograman kita akan lebih diinginkan. Begitu pula untuk header
lama. Dengan memanfaatkan library window dapat disesuaikan.
yang ada maka proses pemrograman Lebih lanjut mengenai grafik
akan menjadi lebih cepat efektif. untuk membuat segitiga misalnya
Seperti telah diuraikan sebelumnya diperlukan tiga buah vertex, sehingga
pemrogram tinggal mencari dimana perintah-perintah yang dibutuhkan
yang harus dimodifikasi sesuai segabai berikut:
kebutuhan. Contoh untuk mengubah

Program 11.3
 glClear (GL_COLOR_BUFFER_BIT); 
 
 glBegin (GL_TRIAGLES); 
 
 glColor3f (0.0f, 0.0f, 0.0f);   glVertex2f (0.0f, 0.5f); 
 glColor3f (0.0f, 0.0f, 0.0f);   glVertex2f (0.5f, ‐0.5f); 
 glColor3f (0.0f, 0.0f, 0.0f);   glVertex2f (‐0.5f, ‐0.5f); 
             
 glEnd (); 

381 
 
Bahasa Pemrograman Grafik

Jangan lupa mengubah 11.4. Animasi Grafik


GL_LINES pada glBegin menjadi Pembuatan animasi bentuk-
GL_TRIANGLES, kalau tidak diubah bentuk dasar dalam OpenGL telah
maka yang muncul akan satu garis disediakan. Untuk dapat
saja. memanfaatkannya kita harus
Begitu juga untuk membuat segi memahami perintah-perintah itu
empat (kotak), segi lima, segi enam, beserta arti argumen-argumen yang
dan sebagainya. Makin banyak segi dipakainya. Sebagai contoh akan
dibutuhkan makin banyak vertex. dibuat sebuah program yang
menganimasi kotak. Cermati program
berikut:

Program 11.4
#include <windows.h> 
#include <gl/gl.h> 
 
 
/************************** 
 * Function Declarations 
 **************************/ 
LRESULT CALLBACK WndProc (HWND hWnd, UINT message, 
WPARAM wParam, LPARAM lParam); 
void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC); 
void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC); 
 
/************************** 
 * WinMain 
 **************************/ 
int WINAPI WinMain (HINSTANCE hInstance, 
                    HINSTANCE hPrevInstance, 
                    LPSTR lpCmdLine, 
                    int iCmdShow) 

    WNDCLASS wc; 
    HWND hWnd; 
    HDC hDC; 
    HGLRC hRC;         
    MSG msg; 
    BOOL bQuit = FALSE; 
    float theta = 0.0f; 
 
    /* register window class */ 

382
 
Grafik Bahasa Pemrorgraman

    wc.style = CS_OWNDC; 
    wc.lpfnWndProc = WndProc; 
    wc.cbClsExtra = 0; 
    wc.cbWndExtra = 0; 
    wc.hInstance = hInstance; 
    wc.hIcon = LoadIcon (NULL, IDI_APPLICATION); 
    wc.hCursor = LoadCursor (NULL, IDC_ARROW); 
    wc.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH); 
    wc.lpszMenuName = NULL; 
    wc.lpszClassName = "GLSample"; 
    RegisterClass (&wc); 
 
    /* create main window */ 
    hWnd = CreateWindow ( 
      "GLSample", "OpenGL Sample",  
      WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE, 
      0, 0, 256, 256, 
      NULL, NULL, hInstance, NULL); 
 
    /* enable OpenGL for the window */ 
    EnableOpenGL (hWnd, &hDC, &hRC); 
 
    /* program main loop */ 
    while (!bQuit) 
    { 
        /* check for messages */ 
        if (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE)) 
        { 
            /* handle or dispatch messages */ 
            if (msg.message == WM_QUIT) 
            { 
                bQuit = TRUE; 
            } 
            else 
            { 
                TranslateMessage (&msg); 
                DispatchMessage (&msg); 
            } 
        } 
        else 
        { 
            /* OpenGL animation code goes here */ 
 
383 
 
Bahasa Pemrograman Grafik

            glClearColor (1.0f, 1.0f, 1.0f, 0.0f); 
            glClear (GL_COLOR_BUFFER_BIT); 
 
            glPushMatrix (); 
            glRotatef (theta, 0.0f, 0.0f, 1.0f); 
            glBegin (GL_QUADS); 
            glColor3f (1.0f, 0.0f, 0.0f);   glVertex2f (‐0.5f, 0.5f); 
            glColor3f (0.0f, 1.0f, 0.0f);   glVertex2f (0.5f, 0.5f); 
            glColor3f (0.0f, 0.0f, 1.0f);   glVertex2f (0.5f, ‐0.5f); 
            glColor3f (0.0f, 0.0f, 0.0f);   glVertex2f (‐0.5f, ‐0.5f); 
            glEnd (); 
            glPopMatrix (); 
 
            SwapBuffers (hDC); 
 
            theta += 1.0f; 
            Sleep (1); 
        } 
    } 
 
    /* shutdown OpenGL */ 
    DisableOpenGL (hWnd, hDC, hRC); 
 
    /* destroy the window explicitly */ 
    DestroyWindow (hWnd); 
 
    return msg.wParam; 

 
 
/******************** 
 * Window Procedure 
 ********************/ 
LRESULT CALLBACK WndProc (HWND hWnd, UINT message, 
                          WPARAM wParam, LPARAM lParam) 

 
    switch (message) 
    { 
    case WM_CREATE: 
        return 0; 
    case WM_CLOSE: 
        PostQuitMessage (0); 

384
 
Grafik Bahasa Pemrorgraman

        return 0; 
 
    case WM_DESTROY: 
        return 0; 
 
    case WM_KEYDOWN: 
        switch (wParam) 
        { 
        case VK_ESCAPE: 
            PostQuitMessage(0); 
            return 0; 
        } 
        return 0; 
 
    default: 
        return DefWindowProc (hWnd, message, wParam, lParam); 
    } 

 
/******************* 
 * Enable OpenGL 
 *******************/ 
void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC) 

    PIXELFORMATDESCRIPTOR pfd; 
    int iFormat; 
 
    /* get the device context (DC) */ 
    *hDC = GetDC (hWnd); 
 
    /* set the pixel format for the DC */ 
    ZeroMemory (&pfd, sizeof (pfd)); 
    pfd.nSize = sizeof (pfd); 
    pfd.nVersion = 1; 
    pfd.dwFlags = PFD_DRAW_TO_WINDOW |  
      PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; 
    pfd.iPixelType = PFD_TYPE_RGBA; 
    pfd.cColorBits = 24; 
    pfd.cDepthBits = 16; 
    pfd.iLayerType = PFD_MAIN_PLANE; 
    iFormat = ChoosePixelFormat (*hDC, &pfd); 
    SetPixelFormat (*hDC, iFormat, &pfd); 
 
385 
 
Bahasa Pemrograman Grafik

    /* create and enable the render context (RC) */ 
    *hRC = wglCreateContext( *hDC ); 
    wglMakeCurrent( *hDC, *hRC ); 
 

 
/****************** 
 * Disable OpenGL 
 ******************/ 
void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC) 

    wglMakeCurrent (NULL, NULL); 
    wglDeleteContext (hRC); 
    ReleaseDC (hWnd, hDC); 

 
 
 
Keluaran program di atas akan warna tersebut dimunculkan dengan
menganimasikan kotak dengan mengkombinasikan argumen-
warna-warni yang menarik dan argumen pada perintah glColor3f,
berputar berlawanan arah jarum jam. cermati dalam listing program. Dalam
Gambar kotak yang terjadi seperti program yang sesungguhnya kotak
berikut: tersebut selain berwarna-warni juga
berputar berlawanan arah putaran
jarum jam (counter clockwise).
Perintah apa yang membuat kotak ini
berputar ? Kita lihat program di atas:

glRotatef (theta, 0.0f, 0.0f, 1.0f); 

sesuai namanya perintah di ataslah


yang menyebabkan kotak ini
berputar. Format perintah ini secara
lengkapnya sebagai berikut :
 Argumen pertama theta untuk
mengatur kecepatan putar makin
besar angkanya makin cepat
putaran yang terjadi
 Argumen kedua jika diisi 1 (1.0)
Gambar 11.4. Grafik berwarna warni maka kotak akan berputar dengan
sumbu garis horizontal (mendatar)
Jika diperhatikan atau dipelajari ke arah tertentu. Untuk memutar
pasti akan Menarik bukan? Warna- ke arah yang berlawanan dari

386
 
Grafik Bahasa Pemrorgraman

contoh, argumen diisi angka -1 (- akan zoom in dan zoom out


1.0) bergantian.
 Argumen ketiga juga mirip dengan  Kombinasi dari argumen-argumen
argumen kedua namun yang ada akan membuat variasi
berputarnya terhadap sumbu pergerakan yang sangat menarik
vertical (tegak lurus) Untuk mengatur laju perputaran
 Argumen keempat untuk memutar animasi yang terjadi bisa dengan
kotak flat dengan sumbu titik nol memodifikasi theta, atau dengan
diagram cartesius. Jika diisi angka perintah sleep(argumen). Laju
1 (1.0) maka akan berputar kecepatan putar tergantung pada
berlawanan arah putaran jarum nilai argumen pada sleep, makin
jam (counter clockwise), besar angkanya makin lambat bukan
sedangkan untuk berputar searah makin cepat. Lebih lanjut dengan
dengan arah putaran jarum jam grafik, jika akan membuat segi enam
(clockwise) diisi angka -1 (-1.0). maka perubahan yang terjadi seperti
Hal yang menarik jika argumen ini berikut:
diisi angka 0 (0.0) maka kotak

Program 11.5
/* OpenGL animation code goes here */ 
 
glClearColor (0.0f, 0.0f, 0.0f, 1.0f); 
glClear (GL_COLOR_BUFFER_BIT); 
 
glPushMatrix (); 
glRotatef (theta, 0.0f, 0.0f, ‐1.0f); 
glBegin (GL_POLYGON); 
             
glColor3f (1.0f, 0.0f, 0.0f);   glVertex2f (‐0.3f, 0.54f); 
glColor3f (0.0f, 1.0f, 0.0f);   glVertex2f (0.3f, 0.54f); 
glColor3f (0.0f, 0.0f, 1.0f);   glVertex2f (0.61f, 0.0f); 
glColor3f (0.0f, 1.0f, 1.0f);   glVertex2f (0.3f, ‐0.54f); 
glColor3f (1.0f, 1.0f, 0.0f);   glVertex2f (‐0.3f, ‐0.54f); 
glColor3f (1.0f, 1.0f, 1.0f);   glVertex2f (‐0.61f, 0.0f); 
             
glEnd (); 
glPopMatrix (); 
 
SwapBuffers (hDC); 
 
theta += 2.0f; 
Sleep (1); 

387 
 
Bahasa Pemrograman Grafik

Tentu saja vertex berubah Selain glRotatef() pengaturan


bertambah banyak, banyaknya vertex animasi dapat juga dengan
sesuai dengan jumlah sudut yang glTranslatef(). Dengan perintah ini
dibentuk. Jangan lupa argumen pada kita dapat menggerakkan obyek
glBegin diisi dengan GL_POLYGON kekiri, kekanan, ke atas, maupun ke
sehingga bisa menciptakan segi bawah. Contoh program sebagai
banyak seperti yang dikehendaki. berikut:

Program 11.6
#include <windows.h> 
#include <gl/gl.h> 
 
/************************** 
 * Function Declarations 
 **************************/ 
LRESULT CALLBACK WndProc (HWND hWnd, UINT message, 
WPARAM wParam, LPARAM lParam); 
void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC); 
void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC); 
 
/************************** 
 * WinMain 
 **************************/ 
int WINAPI WinMain (HINSTANCE hInstance, 
                    HINSTANCE hPrevInstance, 
                    LPSTR lpCmdLine, 
                    int iCmdShow) 

    WNDCLASS wc; 
    HWND hWnd; 
    HDC hDC; 
    HGLRC hRC;         
    MSG msg; 
    BOOL bQuit = FALSE; 
    float theta = ‐1.0f; 
    float alpha = ‐1.0f; 
 
    /* register window class */ 
    wc.style = CS_OWNDC; 
    wc.lpfnWndProc = WndProc; 
    wc.cbClsExtra = 0; 

388
 
Grafik Bahasa Pemrorgraman

    wc.cbWndExtra = 0; 
    wc.hInstance = hInstance; 
    wc.hIcon = LoadIcon (NULL, IDI_APPLICATION); 
    wc.hCursor = LoadCursor (NULL, IDC_ARROW); 
    wc.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH); 
    wc.lpszMenuName = NULL; 
    wc.lpszClassName = "GraphGL"; 
    RegisterClass (&wc); 
 
    /* create main window */ 
    hWnd = CreateWindow ( 
      "GraphGL", "OpenGL Graphics Animation",  
      WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE, 
      0, 0, 512, 512, 
      NULL, NULL, hInstance, NULL); 
 
    /* enable OpenGL for the window */ 
    EnableOpenGL (hWnd, &hDC, &hRC); 
 
    /* program main loop */ 
    while (!bQuit) 
    { 
        /* check for messages */ 
        if (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE)) 
        { 
            /* handle or dispatch messages */ 
            if (msg.message == WM_QUIT) 
            { 
                bQuit = TRUE; 
            } 
            else 
            { 
                TranslateMessage (&msg); 
                DispatchMessage (&msg); 
            } 
        } 
        else 
        { 
            /* OpenGL animation code goes here */ 
 
            glClearColor (1.0f, 1.0f, 1.0f, 1.0f); 
            glClear (GL_COLOR_BUFFER_BIT); 
 
389 
 
Bahasa Pemrograman Grafik

            glPushMatrix (); 
             
            glTranslatef (theta, alpha, 0.0f); 
            glColor3f (1.0f, 0.0f, 1.0f); 
            glRectf(‐0.2, 0.2, 0.2, ‐0.2); 
             
            glPopMatrix (); 
 
            SwapBuffers (hDC); 
 
            if (theta >= 1.0) 
            { 
              theta = ‐1.0f; 
              alpha = ‐1.0f; 
            } 
            else if (theta <= 1.0) 
            { 
               theta += 0.01f;  
               alpha += 0.01f; 
            } 
            Sleep (10); 
        } 
    } 
 
    /* shutdown OpenGL */ 
    DisableOpenGL (hWnd, hDC, hRC); 
 
    /* destroy the window explicitly */ 
    DestroyWindow (hWnd); 
 
    return msg.wParam; 

 
 
/******************** 
 * Window Procedure 
 ********************/ 
LRESULT CALLBACK WndProc (HWND hWnd, UINT message, 
                          WPARAM wParam, LPARAM lParam) 

 
    switch (message) 
    { 

390
 
Grafik Bahasa Pemrorgraman

    case WM_CREATE: 
        return 0; 
    case WM_CLOSE: 
        PostQuitMessage (0); 
        return 0; 
 
    case WM_DESTROY: 
        return 0; 
 
    case WM_KEYDOWN: 
        switch (wParam) 
        { 
        case VK_ESCAPE: 
            PostQuitMessage(0); 
            return 0; 
        } 
        return 0; 
 
    default: 
        return DefWindowProc (hWnd, message, wParam, lParam); 
    } 

 
/******************* 
 * Enable OpenGL 
 *******************/ 
void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC) 

    PIXELFORMATDESCRIPTOR pfd; 
    int iFormat; 
 
    /* get the device context (DC) */ 
    *hDC = GetDC (hWnd); 
 
    /* set the pixel format for the DC */ 
    ZeroMemory (&pfd, sizeof (pfd)); 
    pfd.nSize = sizeof (pfd); 
    pfd.nVersion = 1; 
    pfd.dwFlags = PFD_DRAW_TO_WINDOW |  
      PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; 
    pfd.iPixelType = PFD_TYPE_RGBA; 
    pfd.cColorBits = 24; 
    pfd.cDepthBits = 16; 
391 
 
Bahasa Pemrograman Grafik

    pfd.iLayerType = PFD_MAIN_PLANE; 
    iFormat = ChoosePixelFormat (*hDC, &pfd); 
    SetPixelFormat (*hDC, iFormat, &pfd); 
 
    /* create and enable the render context (RC) */ 
    *hRC = wglCreateContext( *hDC ); 
    wglMakeCurrent( *hDC, *hRC ); 
 

 
/****************** 
 * Disable OpenGL 
 ******************/ 
void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC) 

    wglMakeCurrent (NULL, NULL); 
    wglDeleteContext (hRC); 
    ReleaseDC (hWnd, hDC); 

 

Hasil eksekusi program di atas Argumen dalam glTranslatef () dibuat


akan menggerakkan sebuah kotak variabel theta untuk argumen
berjalan secara diagonal dari pojok pertama, alpha untuk argumen
kiri bawah ke kanan atas secara kedua. Theta untuk mengatur gerak
terus menerus. Akan tetapi jika ada horisontal dan alpha untuk mengatur
penekanan mouse di taskbar maka gerak vertikal. Dengan mengubah-
kotak berhenti, jika penekanan ubah nilai variabel tersebut kita bisa
dilepas kotak jalan lagi. Untuk selesai menggerakkan obyek tersebut secara
bisa menggunakan tombol ESCape. bebas sesuai dengan kehendak.
Pada saat obyek bergerak bisa juga
11.5. Dasar-dasar Game diatur perubahan warna atau
Untuk memahami pembuatan dikombinasi sehingga menjadi warna-
game contoh program di atas bisa warni. Untuk lebih jelasnya ikuti
dimodifikasi bagian glTranslatef(). program berikut:

Program 11.7
#include <windows.h> 
#include <gl/gl.h> 
 
/************************** 
 * Function Declarations 
**************************/ 
LRESULT CALLBACK WndProc (HWND hWnd, UINT message, 
392
 
Grafik Bahasa Pemrorgraman

WPARAM wParam, LPARAM lParam); 
void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC); 
void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC); 
 
/************************** 
 * WinMain 
 **************************/ 
int WINAPI WinMain (HINSTANCE hInstance, 
                    HINSTANCE hPrevInstance, 
                    LPSTR lpCmdLine, 
                    int iCmdShow) 

    WNDCLASS wc; 
    HWND hWnd; 
    HDC hDC; 
    HGLRC hRC;         
    MSG msg; 
    BOOL bQuit = FALSE; 
    float theta = ‐0.8f; 
    float alpha = ‐0.8f; 
    int count = 0; 
    float r, g, b; 
 
    /* register window class */ 
    wc.style = CS_OWNDC; 
    wc.lpfnWndProc = WndProc; 
    wc.cbClsExtra = 0; 
    wc.cbWndExtra = 0; 
    wc.hInstance = hInstance; 
    wc.hIcon = LoadIcon (NULL, IDI_APPLICATION); 
    wc.hCursor = LoadCursor (NULL, IDC_ARROW); 
    wc.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH); 
    wc.lpszMenuName = NULL; 
    wc.lpszClassName = "GraphGL"; 
    RegisterClass (&wc); 
 
    /* create main window */ 
    hWnd = CreateWindow ( 
      "GraphGL", "OpenGL Graphics",  
      WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE, 
      0, 0, 512, 512, 
      NULL, NULL, hInstance, NULL); 
 
393 
 
Bahasa Pemrograman Grafik

    /* enable OpenGL for the window */ 
    EnableOpenGL (hWnd, &hDC, &hRC); 
 
    /* program main loop */ 
    while (!bQuit) 
    { 
        /* check for messages */ 
        if (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE)) 
        { 
            /* handle or dispatch messages */ 
            if (msg.message == WM_QUIT) 
            { 
                bQuit = TRUE; 
            } 
            else 
            { 
                TranslateMessage (&msg); 
                DispatchMessage (&msg); 
            } 
        } 
        else 
        { 
            /* OpenGL animation code goes here */ 
 
            glClearColor (1.0f, 1.0f, 1.0f, 1.0f); 
            glClear (GL_COLOR_BUFFER_BIT); 
 
            glPushMatrix (); 
             
            glTranslatef (theta, alpha, 0.0f); 
            glColor3f (r, g, b); 
            glRectf(‐0.2, 0.2, 0.2, ‐0.2); 
             
            glPopMatrix (); 
 
            SwapBuffers (hDC); 
 
            if (count > 160) 
            { 
              theta ‐= 0.01f; 
              alpha ‐= 0.01f; 
              if (count == 320) 
              { 

394
 
Grafik Bahasa Pemrorgraman

                 count = 0; 
                 theta = ‐0.8f; 
                 alpha = ‐0.8f; 
              } 
              else 
                 count += 1; 
 
              r = 0.0f; 
              g = 1.0f; 
              b = 0.0f; 
            } 
            else if (count <= 160) 
            { 
               theta += 0.01f;  
               alpha += 0.01f; 
               count += 1; 
               r = 1.0f; 
               g = 0.0f; 
               b = 1.0f; 
            } 
             
            Sleep (10); 
        } 
    } 
 
    /* shutdown OpenGL */ 
    DisableOpenGL (hWnd, hDC, hRC); 
 
    /* destroy the window explicitly */ 
    DestroyWindow (hWnd); 
 
    return msg.wParam; 

 
/******************** 
 * Window Procedure 
********************/ 
LRESULT CALLBACK WndProc (HWND hWnd, UINT message, 
                          WPARAM wParam, LPARAM lParam) 

 
    switch (message) 
    { 
395 
 
Bahasa Pemrograman Grafik

    case WM_CREATE: 
        return 0; 
    case WM_CLOSE: 
        PostQuitMessage (0); 
        return 0; 
 
    case WM_DESTROY: 
        return 0; 
 
    case WM_KEYDOWN: 
        switch (wParam) 
        { 
        case VK_ESCAPE: 
            PostQuitMessage(0); 
            return 0; 
        } 
        return 0; 
 
    default: 
        return DefWindowProc (hWnd, message, wParam, lParam); 
    } 

 
/******************* 
 * Enable OpenGL 
*******************/ 
void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC) 

    PIXELFORMATDESCRIPTOR pfd; 
    int iFormat; 
 
    /* get the device context (DC) */ 
    *hDC = GetDC (hWnd); 
 
    /* set the pixel format for the DC */ 
    ZeroMemory (&pfd, sizeof (pfd)); 
    pfd.nSize = sizeof (pfd); 
    pfd.nVersion = 1; 
    pfd.dwFlags = PFD_DRAW_TO_WINDOW |  
      PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; 
    pfd.iPixelType = PFD_TYPE_RGBA; 
    pfd.cColorBits = 24; 
    pfd.cDepthBits = 16; 

396
 
Grafik Bahasa Pemrorgraman

    pfd.iLayerType = PFD_MAIN_PLANE; 
    iFormat = ChoosePixelFormat (*hDC, &pfd); 
    SetPixelFormat (*hDC, iFormat, &pfd); 
 
    /* create and enable the render context (RC) */ 
    *hRC = wglCreateContext( *hDC ); 
    wglMakeCurrent( *hDC, *hRC ); 
 

 
/****************** 
 * Disable OpenGL 
 ******************/ 
void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC) 

    wglMakeCurrent (NULL, NULL); 
    wglDeleteContext (hRC); 
    ReleaseDC (hWnd, hDC); 

Jika program dijalankan maka monoton. Penambahan variabel pada


kotak akan bergerak secara diagonal perintah glColor3f() argumen pertama
dari pojok kiri bawah ke arah pojok r, kedua g, ketiga b, sehingga
kanan atas dengan warna ungu, formatnya menjadi glColor3f(r, g, b).
setelah sampai di pojok kanan atas Modifikasi yang lain yaitu menambah
maka akan berbalik arah menuju variabel count untuk menghitung
pojok kiri bawah lagi dengan warna banyaknya gerak. Hal ini perlu
hijau, begitu seterusnya bolak-balik. ditambahkan karena pengaturan
Akan tetapi jika kursor menunjuk gerak melalui variabel count ini.
taskbar dan tombol mouse ditekan Contoh ini merupakan dasar
maka gerak obyek akan berhenti dan pembuatan game yang harus
jika tombol dilepas lagi maka obyek dipelajari untuk bisa dikembangkan
tersebut gergerak lagi. dikemudian hari. Bagian yang penting
Selain argumen-argumen dicermati adalah trik pengaturan
glTranslatef() yang dimodifikasi, geraknya, bagian ini merupakan hal
argumen glColor3f() juga dibuat tersulit karena harus menemukan
variabel sehingga bisa dimainkan algoritma yang tepat dan efisien.
warnanya menjadi dinamis tidak

397 
 
Bahasa Pemrograman Grafik

11.6. Latihan Soal


Jawablah soal latihan dibawah ini dengan baik dan benar.
1. Apa yang dimaksud dengan grafik
2. Dalam bahasa c++ terdapat library opengl, apa yang dimaksud dengan
istilah tersebut
3. Apa keuntungan dan kekurangan menggunakan library opengl
4. Buatlah program grafik sederhana untuk menampilkan garis
5. Buatlah program grafik sederhana untuk menampilkan poligon
6. Buatlah program animasi sederhana dengan memanfaatkan library opengl

398
 
Operasi File Bahasa Pemrograman

BAB 12
OPERASI FILE

12.1. Pengertian File


12.2. Class stream
12.3. Hirarki class stream
12.4. File Input/Output C++
12.5. Cara Pembacaan String
12.6. Routin-routin konversi File
12.7. File Binary dan ASCII
12.8. Binary I/O
12.9. Buffer
12.10. Rutin-rutin pada C++
12.11. File sekuensial
12.12. Program Operasi FiIe
12.13. Soal Latihan

12.1. Pengertian File


File atau Berkas komputer atau Sebuah berkas memiliki nama
berkas adalah entitas dari data yang yang unik dalam direktori dimana ia
disimpan di dalam sistem berkas berada. Alamat direktori dimana
yang dapat diakses dan diatur oleh suatu berkas ditempatkan diistilahkan
pengguna. File juga dapat dengan path. File atau berkas
didefinisikan sebagai kumpulan diorganisasikan dari sejumlah record.
informasi yang biasanya disimpan Masing-masing record bisa terdiri dari
dalam sebuah disk komputer, dimana satu atau beberapa field. Setiap field
informasi disimpan dalam bentuk file- terdiri dari satu atau beberapa byte.
file yang dikemudian hari dapat
diambil kembali.

399
Bahasa pemrograman Operasi File

Gambar 12.1. Berkas/file

Sistem berkas akan memberikan MB (Megabyte, yang berarti


sebuah nama terhadap sebuah 1,048,576 byte), GB (Gigabyte, yang
berkas agar dapat dikelola dengan berarti 1,073,741,824 byte), dan TB
mudah. Meski oleh sistem berkas (Terabyte, yang berarti
penamaan dilakukan dengan 1,099,511,627,776 byte). Dalam
menggunakan angka-angka biner, mekanisme penyimpanan berkas,
sistem operasi dapat menerjemahkan komputer akan menyimpan berkas
angka-angka biner tersebut menjadi dalam dua jenis ukuran: ukuran fisik
karakter yang mudah dipahami. dan ukuran logis. Ukuran fisik berkas
Sebuah berkas berisi aliran data merujuk kepada ukuran aktual dari
(data stream) yang berisi sekumpulan berkas, yakni berapa banyak byte
data yang saling berkaitan serta yang terdapat di dalam berkas.
atribut berkas (yang bersifat wajib Sementara ukuran logis merujuk
atau opsional), yang kadang-kadang kepada jumlah ruangan yang
disebut properties yang berisi dialokasikan oleh sistem berkas
informasi yang berkaitan dengan untuk menempatkan berkas yang
berkas yang bersangkutan. Informasi bersangkutan di dalam media
mengenai kapan sebuah berkas penyimpanan.
dibuat adalah contoh dari atribut Ukuran berkas fisik umumnya
berkas. lebih besar dibandingkan dengan
Ukuran sebuah berkas umumnya ukuran berkas logisnya. Sebagai
direpresentasikan dalam satuan byte. contoh, untuk mengalokasikan
Jika bilangan terlalu besar untuk berkas berukuran logis 5125 byte,
direpresentasikan dalam satuan byte, dalam sebuah media penyimpanan
maka dapat menggunakan satuan KB yang diformat dengan sistem berkas
(Kilobyte, yang berarti 1,024 byte), yang menggunakan ukuran unit

400
Operasi File Bahasa Pemrograman

alokasi 4096 byte, komputer akan tempat untuk membaca atau


mengalokasikan dua buah unit menyimpan data. Data sendiri
alokasi, yang berukuran 4096 dan disimpan dalam disk dalam suatu
4096, sehingga menghabiskan 8192 kesatuan yang disebut file. Suatu file
byte. Meski ukuran logis berkas merupakan organisasi dari sejumlah
tersebut 5125 byte, komputer record. Masing-masing record dapat
mengalokasikan 8192 byte, membuat terdri dari satu atau beberapa field
3067 byte tidak digunakan (disebut dan setiap field terdiri dari satu atau
sebagai wasted space atau slack beberapa byte data. Satu byte data
space). terdiri dari susuan 8 bit data. Struktur
Kebanyakan sebuah program data dari fle ditunjukkan pada gambar
melibatkan media disk sebagai berikut dibawah ini:

File

Record .............. Record

Field Field Field

Byte (8 bit) .............. Byte (8 bit)

Gambar 12.2. Struktur Data Dari File

Dalam C++ file adalah sebuah 12.2. Class stream


stream yang disimpan dalam media Stream (aliran) merupakan nama
penyimpanan luar. Karena yang secara umum diberikan untuk
merupakan sebuah stream, operasi sebuah aliran data. Dalam C++
yang berlaku pada stream berlaku stream ditunjukan oleh sebuah objek
juga untuk file. Stream adalah suatu dari class khusus, dimana telah kita
logika device yang menghasilkan ketahui cin dan cout merupakan
dan menerima informasi atau wadah abjek stream. Perbedaan stream
yang digunakan untuk menampung yang digunakan untuk menunjukan
keluaran dan menampung aliran perbedaan beberapa macam dari
data. aliran data. Sebagai contoh sebuah
class ifstream merepresentasikan
aliran data dari masukan file-file disk.

401
Bahasa pemrograman Operasi File

Programer C mungkin akan ditampilkan pada screen . Anda juga


heran dengan melihat kelebihan- masih dan selalu membutuhkan
kelebihan menggunakan class mengenai stream pada bahasa C++.
stream untuk operasi I/O, sebagai Hal ini akan terjadi karena mereka
ganti dari fungsi-fungsi C sebelumnya tahu jalan terbaik untuk menulis data
seperi printf() dan scanf() dan operasi menjadi file dan juga memformat data
file seperti fprintf(), fscanf() dan lain yang aka digunakan kemudian dalam
sebagainya. Satu alasannya adalah teks I/O atau elemen GUI lainnya.
kesederhanaan. Jika kita pernah
menggunakan format karakter %d
anda baru akan menyadarinya. 12.3. Hirarki class stream
Disana ternyata tidak ditemui format Sebuah class stream diatur
dalam stream semenjak sebuah dalam hirarki yang agak komplek.
objek siap ditunjukan pada tampilan Dengan menggunakan class ini, kita
komputer. dapat membuat tambahan class
Alasam lain adalah bahwa kamu dengan menggunakan beberapa
dapat memberi beban pada sebuah class istream. Operator turunan >>
operator dan fungsi seperti operator merupakan bagian dari class stream,
insertion (<<) dan extraction (>>), dan operator insertion << adalah
dimana untuk dapat bekerja dengan bagian dari class ostream. Keduanya
class tersebut anda harus merupakan class-class yang
membuatnya. Hal ini akan membuat diturunkan dari class ios. Sebuah
class anda bekerja pada jalan yang objek cout merepresentasikan
sama sebagai satu-kesatuan tipe. Hal keluaran stream keluaran, yang
ini jelas membuat programer lebih biasanya diarahkan pada tampilan
mudah dan lebih terbebas dari monitor. Obyek tersebut sudah
kesalahan. dikenal sebagai class penentu
Anda mungkin heran jika stream ostream. Sama halnya dengan cin
I/O ternyata penting jika anda sebagai obyek penentu istream yang
merancang progra dalam sebuah diturunkan dari class istream.
lingkungan dengan Graphic user Gambar dibawah ini menunjukan
Interface (GUI) seperti halnya pengaturan class-class yang paling
windows. Dengan menggunakan GUI penting.
ini secara langsung teks keluaran

402
Operasi File Bahasa Pemrograman

Gambar 12.3. Hirarki Class Stream

Class-class tersebut diatas Class ios juga berisi senuah pointer


digunakan sebagai masukan dan yang digunakan sebagai class
keluaran dan menampilkan pada streambuf. Dimana hal tersebut berisi
layar monitor dan keboard buffer memori aktual pada saat data
dideklarasikan oleh file header dibaca atau ditulis. Biasanya
IOSTREAM. Class-class yang programmer tidak memikirkan class
digunakan secara khusus untuk input streambuf, karena hal tersebut akan
atau ouput file pada disk ditangani secara otomatis oleh class
dideklarasikan oleh file header lain.
FSTREAM. Gambar diatas Class istream dan ostream
menunjukan class-class yang mana diturunkan dari ios dan akan
didalamnya dapat ditemukan dua file digunakan sebagai masukan dan
header tersebut. Selain itu juga keluaran secara terus-menerus.
ditunjukan beberapa manipulator Class istream berisi seperti fungsi
yang dideklarasikan dalam IOMANIP get(), getline(), read() dan operator
dan dalam memori, class ekstrasi overloded (>>), sedangkan
dideklarasikan dalam STRSTREAM. ostream berisi put() dan write() serta
Seperti yang dapat dilihat pada operator insersi overloaded (<<).
gambar diatas, class ios yang Class iostream adalah
merupakan class dasar pada sebuah diturunkan dari dua class istream dan
hirarky. Class tersebut berisi ostream melalui multiple inheritance.
beberapa konstanta atau Class yang diturunkan tersebut akan
keanggotaan fungsi umum sebagai digunakan oleh beberapa piranti
operasi masukan dan keluaran. seperti file pada disk, yang mungkin

403
Bahasa pemrograman Operasi File

akan dibuka sebagai masukan dan merupakan kondisi seperti saklar on


keluaran pada saat yang sama. Tiga atau off yang memilih
class istream_withassign,
ostream_withassign dan
iostream_withassign diwariskan dari 12.4. File Input/Output C++
istream, ostream dan iostream Input/output file pada bahasa
secara berturut-turut. C++ ditentukan oleh tiga class yaitu
Class ios adalah kakek dari class istream untuk menangani
semua class-class stream dan berisi masukan file, class ostream untuk
secara umum dari hal-hal yang menangani keluaran file serta class
penting yang dibutuhkan untuk iostream untuk menangani file
mengoperasikan stream pada C++. masukan atau keluaran. Dalam C++
Ada tiga hal penting yaitu pengaturan operasi ini berkenaan bahwa file
flag, flag status kesalahan dan file sebagai stream dan saat itu pula file
mode operasi. Pengaturan flag dianggap sebagai aliran byte data.
merupakan sekumpulan enum yang Empat class variabel akan secara
didefinisikan dalam ios. Hal tersebut otomatis dibuat ketika program
dimulai. Perhatikan tabel dibawah ini:

Tabel 12.1. Variabel class I/O pada C++ yang dikenal

VARIABEL  DIGUNAKAN
cin  Console input (standar input)
cout  Console output (standar output)
cerr  Console error (standar error)
clog  Console log

Variabel-variabel tersebut di sedang mengerjakan operasi file


definisikan dalam file standar include pada disk, diharuskan menggunakan
<iostream>. Pada umumnya cin versi file pada class stream. Dalam
digunakan oleh keyboard dan cout, hal ini ifstream, ofstream dan
ceer dan clog digunakan untuk fstream akan didefinisikan dalam file
menampilkan ke screen monitor. include <fstream>.
Kebanyakan sistem operasi Seandainya programmer ingin
memperbolehkan programer membaca 100 angka yang berurutan
mengubah arah melalui I/O. sebagai dari sebuah file dengan nama
contoh perintah dibawah ini: number.dat misalnya, maka
programmer harus mendeklarasikan
my_prog <file.in  variabel masukan file sebagai berikut:

ketika dijalankan program dengan ifstream data_file;     


nama my_prog dan tugas yang
diberikan cin adalah file.in. ketika
404
Operasi File Bahasa Pemrograman

kemudian yang dibutuhkan adalah ifstream data_file;    // File dibaca dari  


C++ mengambil file pada hardisk  
yang digunakan. Hal ini dikerjakan data_file.open("angka.dat"); 
melalui dengan membuka fungsi
keanggotaan sebagai berikut: dapat ditulis dengan

data_file.open("angka.dat");  ifstream data_file("angka.dat");   

sekarang programmer dpat membaca apalagi sebuah destruktor dengan


file mengunakan statement yang otomatis memanggil close. Pada
sama untuk membaca yaitu dengan kasus tertentu jika sebuah file
cin. Perhatikan program dibawah ini: number.dat hilang, bagaimana dan
dimana programer akan
for (i = 0; i < 100; ++i) {  memberitahukan permasalahan
    assert(i >= 0);  tersebut?. Maka keanggotaan fungsi
    assert(i< sizeof(data_array)  akan kembali dengan pesan
/sizeof(data_array[0]));  kesalahan jika pada fungsi tersebut
    data_file >> data_array[i];  terdapat masalah, atau kesalahan
}  yang mungkin terjadi. Sehigga untuk
menguji apakah terdapat kesalahan
Terakhir yang dibutuhkan untuk atau tidak programer perlu
mengetahui bahwa sistem I/O telah menuliskan potongan program
mengerjakannya dan kemudian dibawah ini:
menuliskan sebagai berikut:
if (data_file.bad(  )) { 
data_file.close(  );       cerr  <<  "Unable  to  open 
numbers.dat\n"; 
instruksi tersebut menutup program     exit (8); 
yang kemudian dapat menggunakan } 
program lagi. C++ memperbolehkan
membuka panggilan yang bervariasi Program tersebut dibawah ini
denga construktor, sebagai contoh merupakan program pembacaan
mengganti pada penulisan angka

Program 12.1
#include<conio.h> 
#include <iostream> 
#include <fstream> 
#include <cstdlib> 
 
using namespace std; 
 
int main(  ) 

405
Bahasa pemrograman Operasi File


    const int DATA_SIZE = 100;      // Jumlah item dalam data 
    int data_array[DATA_SIZE];      // ukuran data 
    ifstream data_file("angkan.dat");   // file masukan 
    int i;                            //penghitung  Loop  
 
    if (data_file.bad(  )) { 
         cerr << "Error: tidak dapat membuka file angka.dat\n"; 
        exit (8); 
    } 
 
    for (i = 0; i < DATA_SIZE; ++i) { 
        assert(i >= 0); 
        assert(i < sizeof(data_array)/sizeof(data_array[0])); 
 
        data_file >> data_array[i]; 
    } 
 
    int total;          // Total angka 
 
    total = 0; 
    for (i = 0; i < DATA_SIZE; ++i) { 
        assert(i >= 0); 
        assert(i < sizeof(data_array)/sizeof(data_array[0])); 
 
        total += data_array[i]; 
    } 
 
     cout << "Total dari semua angka adalah: " << total << '\n'; 
      
     getch();  
     return (0); 

Jika programmer ingin membaca                        string& the_string, char 


baris dari data, maka harus delim) 
menggunakan fungsi getline. Dimana
hal tersebut didefinisikan pada fungsi tersebut membaca baris yag
potongan program dibawah ini: disimpannya dalam string. Sebuah
fungsi referensi kembali menuju input
 istream& getline( istream& input_file,   stream. Bentuk kedua dari fungsi ini
                       string& the_string);  memperbolehkan programmer
 istream& getline( istream& input_file,   menuju baris khusus atau batas

406
Operasi File Bahasa Pemrograman

akhir. Jika tidak dikehendaki maka pengaturan default untuk menuju


programer bisa menggunakan baris baru (‘\n’)

12.5. Pembacaan String


Untuk membaca gaya bahasa Fungsi untuk file keluaran adalah
string pada C, dapat menggunakan sama dengan file masukan, sebagai
fungsi getline. Fungsi ini dapat contoh pada deklarasi dibawah ini:
didefinisikan sebagai berikut:
ofstream out_file("out.dat"); 
istream&  getline(char  *buffer,  int  len, 
char delim = '\n')  deklarasi diatas merupakan
  membuat/menulis file dengan nama
dimana parameter-parameter pada out.dat dan dalam penulisan nama
fungsi ini antara lain: juga diperbolehkan mnulis dengan
1. Buffer, gaya bahasa string, nama seperti out_file. Pada
dimana string disimpan setelah kenyataanya, construktor dapat
dilakukan pembacaan mengambil dua argumen tambahan.
2. Len, panjang buffer yang Definisi penuh dari file keluaran
digunakan dalam byte. Fungsi ini construktor adalah:
akan membaca sampai len-1
byte data menuju buffer. ofstream::ofstream(const  char  *name, 
Parameter ini biasanya disebut int mode= ios::out,  
dengan sizeof(buffer)                    int prot = filebuf::openprot); 
3. Delim, yaitu karakter yang
digunakan. dimana parameter-parameter pada
Fungsi ini akan mengembalikan fungsi ini adalah:
referensi menjadi file masukan.  Name, nama dari nama file yang
Kemudian fungsi ini akan membaca ditulis
terus-menerus sampai ditemukan
 Mode, merupakan sekumpulan
tanda karakter akhir baris (‘\n’).
karakter tanda akhir baris ini tidak flag/tanda O merah bersama-
disimpan dalam buffer, yang sama bahwa hal tersebut
disimpan sebagai akhir string adalah merupakan mode open. Flag
jika ditemukan tanda bahwa string ios::out dibutuhkan sebagai file
telah berakhir (‘\0’). Perhatikan keluaran. Flag-flag lain yang
contoh dibawah ini: dibutuhkan seperti dalam tabel
dibawah ini:
char buffer[30]; 
cin.getline(buffer, sizeof(buffer)); 

407
Bahasa pemrograman Operasi File

Tabel 12.2.Open Flag

FLAG  ARTI
 ios::app   menambahkan data ke akhir output file.
 ios::ate   Pergi ke akhir file ketika dibuka.
 ios::in   Membuka untuk masukan (harus diberikan kepada fungsi buka 
ifstream variabel). 
 ios::out   Buka file untuk output (harus diberikan kepada fungsi anggota 
buka ofstream variabel).
 ios::binary   File binary (jika tidak ada, maka file dibuka sebagai file ASCII).  
 ios::trunc   Membuang isi yang ada saat membuka file untuk menulis. 
 ios::nocreate   Mengalami gagal jika file tersebut tidak ada. (Output file saja. 
Membuka sebuah file input selalu gagal jika tidak ada file.). 
 ios::noreplace   Jangan  menimpa  file  yang  ada.  Jika  file  ada,  menyebabkan 
rusak ketika buka.

 Prot, file protection dimana hal ini merupakan nama file yang akan
tergantung pada sistem operasi ditulis.
yang digunakan untuk Pada contoh dibawah terdiri dari
fungsi pendek tersebut digunakan
menentukan mode proteksi file
untuk menulis pesan pada sebuah
tersebut. Misalnya pada UNIX file catatan. Sesuatu yang pertama
proteksi default sampai 0644 yang dilakukan adalah membuka
untuk baca/tulis sendiri, baca pada fungsi untuk operasi output (ios::out),
group maupun penulisan lainnya, menambahkan catatan (ios::app),
sedangkan MS-DOS/windows dengan menulis dari permulaan
defaultnya adalah 0 dalam kondisi sampai akhir penulisan (ios::ate).
Setelah fungsi tersebut menulis
file normal.
pesan serta terahir menutup file.
Perhatikan contoh pernyataan Fungsi ini telah dirancang
dibawah ini: dengan sederhana, dimana hal
tersebut juga tidak memperdulikan
 ofstream out_file("data.new",   mengenai efisiensi dan sebagai hasil
 ios::out| ios::binary| ios::nocreate|  dari fungsi adalah sangat tidak
                     ios::app);  efisien. Masalah tersebut dibuka dan
ditutup setiap saat memanggil
potongan pogram diatas dapat log_message. Membuka file
diartikan digunakan menambahkan merupakan sebuah operasi yang
(ios::app) data biner menggunakan cukup mahal, dan sesuatu juga harus
(ios::binary), kalau file sudah ada mempunyai kecepatan lebih tinggi,
atau telah ditemukan filenya jika akan membuka file hanya sekali
(ios::nocreate) sedangkan data.new dan mengingatkan tersebut.

408
Operasi File Bahasa Pemrograman

Program 12.2.
#include <iostream> 
#include <fstream> 
 
using namespace std; 
 
void log_message(const string & msg) 

ofstream out_file("data.log",  
if (out_file.bad(  )) 
out_file << msg << endl; 
return;  
}  

12.6. Routin-routin Konversi File


Untuk menulis angka pada rata pada margin kiri atau kanan. Jika
printer atau sebuah terminal, selama menulis program tidak
programer harus mengkonversi melakukan pengaturan apapun maka
angka ke karakter. Sebuah printer hasil konversi dalam kondisi default.
hanya bisa mengerti karakter bukan Keanggotan fungsi setf dan
angka. Sebagai contoh 567 harus unsetf digunakan untuk mengatur
dikonversi menjadi tig karake yaitu: kondisi flag menjadi berlogika set “1"
“5”, ”6”, dan “7” dan kemudian atau clear “0” dimana hal ini
dicetak. digunakan kendali proses konversi.
Operator << digunakan untuk Secara umum bentu penulisan fungsi
mengkonversi data menuju karakter adalah sebagai berikut:
dan meletakanya dalam sebuah file.
Fungsi ini adalah sangat flexibel. Hal file_var.setf(flags);   // Set flags 
tersebut mengubah integer file_var.unsetf(flags); // Clear flags 
sederhana menjadi variabel tetap
atau yang sesuai dengan stering Tabel dibawah ini merupakan daftar
dalam bentuk bilangan hexadesimal, flag dan penjelasnya.
oktal atau desimal dengan penulisan

Tabel 12.3. I/O konversi flag

FLAG  ARTI
 ios::skipws   loncati karakter yang mendahului spasi sebagai masukan.  
 ios::left   Output sebelah kiri dibenarkan.
 ios::right   Output seblah kanan dibenarkan.
 ios::internal   Numerik keluaran adalah memasukkan padded oleh karakter 
yang mengisi antara tanda atau dasar karakter dan jumlah itu 
sendiri. 
409
Bahasa pemrograman Operasi File

 ios::boolalpha   Gunakan  versi  karakter  yang  benar  dan  salah  untuk  input  dan 
output. 
 ios::dec   Output dalam dasar angka 10, format desimal. 
 ios::oct   Keluaran angka dengan format 8 angka oktal. 
 ios::hex   Output dalam format angka 16, heksadesimal.
 ios::showbase   Mencetak  indikator  inti  pada  setiap  awal  nomor.  Misalnya, 
angka heksadesimal yang diawali dengan "0x".
 ios::showpoint   Menunjukkan  titik  desimal  untuk  semua  angka  floating‐point 
apakah ia dibutuhkan.
 ios::uppercase   Ketika  konversi  heksadesimal  angka,  menunjukkan  angka  AF 
sebagai huruf besar.
 ios::showpos   Menempatkan tanda positif sebelum semua nomor. 
 ios::scientific   Mengkonversi  semua  angka  floating‐point  untuk  notasi  ilmiah 
pada output. 
 ios::fixed   Mengkonversi  semua  floating‐point  nomor  ke  titik  tetap  pada 
output. 
 ios::unitbuf   Buffer output. 

Jika pada saat mnulis program


menginginkan keluaran berupa int file_var.width(int size); 
format bilangan hexadesimal, maka  
yang harus dikerjakan adalah suatu saat output harus ditentukan
menambah dengan menulis sesuai dengan jumlah karakter yang
potongan program dibawah ini: digunakan. Sebagai contoh misalnya
sejumlah 3 angka, secara umum
 number = 0x3FF;  dikonversi menjadi karakter string “3”.
 cout << "Dec: " << number << '\n';  Jika diatur sampai empat, maka
  hasilnya menjadi dimana
 cout.setf( ios::hex);  menunjukan satu ruang karakter.
 cout << "Hex: " << number << '\n';  Perhatikan fungsi dibawah ini:
 
 cout.setf( ios::dec);  int file_var.precision(int digits); 

ketika di”run”, maka pprogram akan pernyataan program diatas


menghasilkan keluaran sebagai digunakan untuk mengatur berapa
berikut: banyak angkat yang akan
dimunculkan setelah tanda koma (,).
Dec: 1023  Dan kemudian menuliskan fungsi
Hex: 3ff  seperti dibawah ini:

Ketika konversi angka ke karakter char file_var.fill(char pad); 


dilakukan, maka fungsi
keanggotaannya ditulis:

410
Operasi File Bahasa Pemrograman

program diatas digunakan untuk beberapa keluaran tetapi hanya


menentukan karakter, dimana mengubah kondisinya saja.
karakter digunakan sebagai Sebagai contoh pada
penambah angka ketika angka terlalu manipulator hex hanya melakukan
kecil. Fungsi-fungsi tersebut dapat konversi keluaran menjadi
disebut dengan pengarah, atau hexadesimal.
programer dapat menggunakan I/O
manipulator. #include <iostream> 
Sebuah I/O manipulator adalah  
sebuah fungsi khusus yang number = 0x3FF; 
digunakan dalam pernyataan I/O  cout << "Number is " <<  hex << number 
untuk mengubah format. Jika <<  dec << '\n'; 
dipikirkan sebuah manipulator dapat
dianalogikan seperti halnya peluru sebuah file header <iostream>
ajaib, dimana ketika ditembakan mendefinisikan kumpulan dasar dari
melalui/masuk atau setelah keluar sebuah menipulator yang dapat
dari sebuah file, akan mengubah dilihat pada tabel dibawah ini:
kondisi sebuah file tersebut.
Manipulator tidak menyebabkan

Tabel 12.4. I/O manipulator

MANIPULATOR  DESKRIPSI
dec  Keluaran angka dalam format desimal. 
hex  Keluaranangka dalam format hexadesimal. 
oct  Keluaran angka dalam format oktal.
ws  Loncati space pada masukan.
endl  Keluaran pada end‐of‐line
ends  Keluaran pada end‐of‐string (`\0').
flush  Lakukan pembufferan keluaran out. 

Selain tebal diatas ada juga header <iomanip> dapat dilihat pada
manipulator yang didefinisikan ole file tabel dibawah ini:

Tabel 12.5. Fungsi I/O manipulator pada C

MANIPULATOR  DESKRIPSI
 setiosflags(long flags)   Atur pemilih flag konversi.
 resetiosflags(long flags)   Reset flag terpilih.
 setbase(int base)   Atur konersi dasar menuju 8, 10, atau 16. Urutkan 
secara umum dec,  hex,  oct.
 setw(int width)   Atur lebar keluaran.
 setprecision(int precision)  Atur presisi dari keluaran floating‐point. 
 setfill(char ch)   Atur karakter yang di blok/ditandai.
411
Bahasa pemrograman Operasi File

Untuk lebih jelasnya perhatikan penggunaan I/O manipulator pada program


dibawah ini.

program 12.3
#include<conio.h> 
#include <iostream> 
#include <iomanip> 
 
using namespace std; 
 
int main(  ) 

    int number = 12;              // angka untuk keluarkan 
    float real = 12.34;           // angka yang nyata 
 
     cout << "123456789012345678901234567890\n";   // ruler keluaran 
     cout << number << "<‐\n"; 
     cout <<  setw(5) << number << "<‐\n"; 
     cout <<  setw(5) <<  setfill('*') << number << "<‐\n"; 
     cout << setiosflags( ios::showpos| ios::left) << setw(5) << number << "<‐\n"; 
     cout << real << "<‐\n"; 
     cout <<  setprecision(1) <<setiosflags( ios::fixed) << real << "<‐\n"; 
     cout <<  setiosflags( ios::scientific) << real << "<‐\n"; 
     getch(); 
     return (0); 

Keluaran dari program diatas setelah di compile adalah:


123456789012345678901234567890 
12<‐ 
   12<‐ 
***12<‐ 
+12**<‐ 
12.34<‐ 
12.3<‐ 
1e+01<‐ 

12.7. File Binary dan ASCII


American Standard Code for kode karakter dan 33 kode kendali
Information Interchange (ASCII) (lihat lampiran 1). Dengan kode
merupakan kode yang terdiri dari 95 ASCII memungkinkan manusia

412
Operasi File Bahasa Pemrograman

pengguna komputer dapat mengerti komputer bekerja dengan data


karena ACSII merupakan biner. Ketika komputer membaca dari
pengkodean yang mengacu pada file ASCII, program pada komputer
bahasa manusia. memproses data karakter melalui
Misalnya ketika programer routine konversi seperti routine
menulis file dengan nama prog.cc konversi integer yang telah
secara otomatis file tersebut berupa didefinisikan. Operasi ini akan
kode ASCII. Sebuah terminal seperti menjadi lebih mahal dikarenakan
keyboard, printer berhubungan membutuhkan ruang memori dan
dengan data karakter. Ketika waktu. Sebuah file biner tidak
sesorang menulis angka seperti 1234 membutuhkan konversi. File-file
yang kemudian muncul pada layar tersebut umumnya memakai ruang
monitor, angka tersebut harus yang kecil dibandingkan file kode
dikonversi menjadi empat karakter ASCII. Kelemahan pada file biner
(“1”, “2”, “3”, dan “4”) . adalah tidak bisa dicetak secara
Hal yang sama juga ketika langsung pada terminal atau printer.
seseorang membaca angka dari Jika file biner dicetak pada printer
keyboard, sebuah data harus secara langsung tanpa adanya
dikonversi dari data karakter menjadi konversi yang terjadi adalah data
data integer. Hal ini dikerjakan oleh cetak tidak sesuai seperti terlihat
operator >>. Karater ASCII “0” “#@$%@^Aa^AA^^JHC%^X".
mempunyai nilai 48, “1” mempunyai Tentunya apa yang akan terjadi jika
nilai 49 dan seterusnya seperti dicoba mencetak file biner.
terlihat pada lampiran kode ASCII. File ASCII marupakan file portbel
Ketika sesorang akan mengubah digit karena banyak dipakai. File ini dapat
tunggal dari kode ASCII menjadi dipindah dari satu mesin ke mesin
integer akan sama halnya anda yang lain dengan sedikit kesalahan.
mengubah menjadi data 48. File biner bisa dikatakan pasti tidak
Perhatikan program dibawah ini: portabel. File mana yang harus
digunakan? Dalam beberapa kasus
int integer;   ASCII sangat baik.
char ch;   Alasan ini dikemukakan jika
  mempunyai data dengan jumlah kecil
ch = '5';   atau medium waktu konversi tidak
integer = ch ‐ 48;   begitu mempengaruhi unjuk kerja
 cout << "Integer " << integer << '\n';   program yang telah dibuat. Selain itu
file ASCII juga membuat dalam
Daripada mengingat karakter “0” melakukan verifikasi data. Hanya
yang lebih sulit dingat dengan 48, ketika menggunakan sejumlah data
lebih baik mengkonversi menjadi yang besar saja akan memakan
karakter ‘0’. Perhatikan program ruang dan mempengaruhi unjuk kerja
dibawah ini: sehingga diperlukan data dalam
format biner.
integer = ch ‐ '0';  

413
Bahasa pemrograman Operasi File

12.8. Binary I/O dan size merupakan angka dalam


Input atau output file biner dapat ukuran byte yang akan dibaca.
diselesaikan melalui dua fungsi Fungsi keanggotaan qcount akan
keanggotaan yaitu: read and write. mengembalikan sejumlah byte data
Penulisan atau sintak untuk yang telah dibaca pada akhir. Hal ini
membaca adalah: dimungkinkan akan berkurang
diandingkan dengan jumlah byte
in_file.read(data_ptr, size);   yang diminta. Sebagai contoh
pembacaan yang mungkin ditemui
dimana data_ptr merupakan pointer pada akhir file atau ditemukan
sebagai tempat untuk meletakan data adanya kesalahan.

struct {  
    int     width;  
    int     height;  
} rectangle;  
 
in_file.read(static_cast<char *>(&rectangle), sizeof(rectangle)); 
if (in_file.bad(  )) { 
    cerr << "Tidak dimungkinkan membaca rectangle\n";  
    exit (8);  
}  
if (in_file.gcount(  ) != sizeof(rectangle)) { 
    cerr << "Error: tidak bisa untuk membaca \n"; 
    cerr << "I/O mengalami error, EOF tidak bisa dihitung\n"; 

Dalam contoh program diatas sama dengan operasi read adalah


ketika sedang membaca sebuah dengan sintak:
struktur persegi panjang. Sebuah
operator & akan membuat persegi out_file.write(data_ptr, size);  
panjang tersebut manuju sebuah  
pointer. Kemudian sebuah sintak
static_cast<char *> dibutuhkan
12.9. Buffer
setelah read menginginkan sebuah Buffer atau sering kita artikan
deretan array. Sebuah operator sebagai penahan atau penyangga
sizeof digunakan untuk menentukan suatu memori sebuah data.
berapa banyak byte yang dibaca Penyangga sebuah I/O tidak bisa
sebaik pengecekan tersebut sampai ditulis secara langsung pada sebuah
operasi tersebut menjadi berhasil. file. Sebuah data akan dijaga
Sebuah keanggotaan fungsi write keberadaanya dalam sebuah buffer
telah memanggil secara sekuensial sampai disana cukup untuk menulis

414
Operasi File Bahasa Pemrograman

dalam kapasitas data besar atau penyelesaian pesan akan datang


sampai sebuah buffer disegarkan sesuai dengan waktunya.
kembali. Sebuah program yang Dalam I/O buffer, data ditahan
mengikuti dirancang untuk dicetak dan kemudian dikirim dalam bentuk
pesan cepat sampai setiap bagian file, sedangkan dalam I/O tidak
terselesaikan. Perhatikan potongan terbuffer data secara langsung dikirim
program dibawah ini: dalam bentuk file. Analogi ini
disampaikan dalam bentuk kejadian
cout << "mulai";   di lingkunang kita pada sejumlah
penjepit kertas yang jatuh kelantai
do_step_1(  );  
seseorang dapat mengambilnya
 cout << "langkah 1 complete";  
dalam mode buffer atau tanpa buffer.
do_step_2(  );   Dengan mode buffer jika anda
 cout << "langkah 2 complete";   menggunakan tangan kanan untuk
do_step_3(  );   mengambil penjepit kertas dan
 cout << "langkah 3 complete\n";  kemudian memindahkan penjepit ke
tangan kiri. Proses tersebut diulang-
sebagai ganti dari menulis sebuah ulang sampai pada tangan kiri penuh
pesan sampai pada tiap langkah kemudian penjepit tersebut
selesai, cout pesan tersebut dipindahkan ke dalam kotak yang
diletakan dalam sebuah buffer. ada diatas meja. Dengan buffer I/O
Hanya setelah program selesai maka akan ada media sementara yang
selanjutnya buffer memperleh digunakan untuk menampung
penyegaran atau pengosongan dan sebelum dipindahkan ke media yang
semua pesan yang datang utama dan lebih besar. Dalam mode
ditumpahkan keluar dengan seketika. tanpa buffer, dapat dianalogikan
Sebuah manipulator I/O flush akan seperti anda mengambil sejumlah
menyegarkan buffer-buffer tersebut. penjepit kertas yang jatuh dilantai
Sifat yang ditulis diatas diberikan dan langsung memasukan kedalam
contoh seperti pada program kotak yang berada diatas meja.
dibawah ini: Pekerjaan ini dilakukan dengan
tangan kanan tanpa menggunakan
cout << "mulai" <<  flush;   tangan kiri sebagai penampung
do_step_1(  );   sementara.
 cout << "Langkah 1 complete" <<  flush;   Dalam kebanyakan kasus, I/O
do_step_2(  );   dengan buffer sering digunakan
 cout << "langkah 2 complete" <<  flush;   daripada tanpa buffer. Dalam I/O
do_step_3(  );   tanpa buffer tiap pembacaan dan
 cout << "langkah 3 complete\n" <<   penulisan membutuhkan
flush; pemanggilan system. Beberapa
pemanggilan pada sisem operasi
karena tiap pernyataan keluaran sangat mahal dan membutuhkan
berakhir dengan flush, sebuah waktu yang banyak, sehingga
keluaran akan ditampilkan secara dengan I/O yang menggunakan
langsung. Ini artinya bahwa

415
Bahasa pemrograman Operasi File

buffer dapat meminimalkan bendanya lebih besar ddibandingkan


panggilan-panggilan yang dilakukan. penampungnya maka kasus seperti
I/O tanpa buffer biasanya ini tidak menggunakan buffer.
digunakan ketika hanya membaca Sebuah open system,
atau menulis data biner dalam pemanggilan digunakan untuk
jumlah besar ketika kendali langsung membuka file tanpa buffer. Sebuah
dari piranti atau sebuah file definisi makro digunakan dengan
dibutuhkan. cara memanggil dari system yang
Kembali pada penjepit kertas berbeda. Sebagai contoh bekerja
seperti dicontohkan diatas, jika pada dua system yang berbeda
seseorang menggambil benda kecil seperti pada system operasi UNIX
seperti penjepit tersebut, tentunya dan MS-DOS/windows. Dalam kasus
oran tersebut tidak akan menemui tersebut maka sebuah kondisi
kesulitan menggunakan tangan kiri compilasi (#ifdef/#endif) digunakan
sebagai penahan/penampung untuk memperbaiki file tersebut
sementara. Tetapi jika seseorang seperti contoh program dibawah ini:
menambil bola meriam yam mana

#include <sys/types.h>   
#include <sys/stat.h> 
#include <fcntl.h> 
           
#ifdef _  _MSDOS_  _      // jika bekerja pada MS‐DOS  
#include <io.h>           // memanggil include file i/o pada MS‐DOS  
#else                      /* _  _MSDOS_  _ */ 
#include <unistd.h>       // memanggil include file i/o pada UNIX 
#endif                    /* _  _MSDOS_  _ */ 

Sebuah perintah atau sintak untuk membuka akan memanggil:


int file_descriptor = open(name, flags);      // file yang sudah ada 
file_descriptor = open(name, flags, mode);    // file baru 

dimana, file_descriptor merupakan merupakan definisi dalam file header


integer yang digunakan untuk fcntl.h, dimana flag tersebut
mengidentifikasikan file untuk dibaca, dijelaskan dalam table dibawah.
ditulis atau ditutup pemanggilannya. Sedangkan mode adalah mode
Jika file_descriptor kurang dari 0 proteksi file dimana mode ini
berarti kesalahan telah terjadi. Name biasanya 0644.
merupakan nama file. Flag

416
Operasi File Bahasa Pemrograman

Tabel 12.6. Open flag

FLAG  ARTI 
O_RDONLY   Open for reading only. 
O_WRONLY   Open for writing only. 
O_RDWR   Open for reading and writing. 
O_APPEND   Append new data at the end of the file. 
O_CREAT   Create  file  (the  file  mode  parameter  required  when  this  flag  is 
present). 
O_TRUNC   If the file exists, truncate it to 0 length. 
O_EXCL   Fail if file exists. 
O_BINARY   Open in binary mode (older Unix systems may not have this flag). 

Sebagai contoh pada saat Tabel 12.7. Standar file tidak terbuffer
operasi membuka file dengan nama NOMOR FILE  PENJELASAN 
file data.txt dalam mode pembacaan 0 Standard in 
text, maka potongan program yang 1 Standard out 
dituliskan adalah sebagai berikut:
2 Standard error 
data_fd = open("data.txt", O_RDONLY); 
Format dari pemanggilan read
adalah:
selain contoh diatas, bagaimana
untuk membuat sebuah file output.dat
read_size  =  read(file_descriptor,  buffer, 
dapat ditulis, maka potongan
program adalah sebagai berikut: size);  

out_fd = open("output.dat",  dimana: read_size, merupakan


O_CREAT|O_WRONLY, 0666);   jumlah actual dari byte yang dibaca,
0 mengindikasikan akhir file dan
Pada sintak tersebut diatas bilangan negative mengindikasikan
menggunakan operator OR ( | ) yang adanya kesalahan dalam file.
artinya merupakan pengabungan flag File_descriptor, merupakan
yang melebihi dari satu, untuk
sebuah file yang mendeskripsikan
mempermudah dan mempercepat
penulisan ketika beberapa program dari file yang dibuka, buffer
telah berjalan pada awal, dan tiga file merupakan sebuah pointer untuk
sudah terbuka, dimana hal tersebut menempatkan dan meletakan data
dapat dideskrisikan pada table yang dibaca dari file. Size merupakan
dibawah ini: ukuran data yang dibaca. Hal ini
merupakan ukuran dari file yang
diminta. Pada jumlah sebenarnya
dari byte yang dibaca mungkin lebih

417
Bahasa pemrograman Operasi File

kecil dibandingkan dengannya. melakukan penutupan file dimana


Format pemanggilan penulisan sintaknya adalah sebagai berikut:
adalah sebagai berikut:
flag = close(file_descriptor)  
write_size = write(file_descriptor, buffer, 
size);   pada sintaks tersebut diatas terdapat
flag yang digunakan untuk menandai
pada sintaks diatas, write_size bahwa ketika data 0 untuk menandai
merupakan jumlah byte data actual bahwa penutupan berhasil
yang ditulis, bilangan negative sedangkan, bilangan negative ketika
menunjukan adanya kesalahan. File mengalami kegagalan atau error. File
descriptor adalah file yang descriptor untuk mendeskripsikan
meneskripsikan saat sebuah file saat file dibuka.
dibuka. Program dibawah ini merupakan
Buffer adalah sebuah pointer pencopyan file. Operasi ini
dimanadata ditulis. Size adalah mengunakan I/O tanpa buffer karena
ukuran data yang ditulis. Sebuah program tersebut membutuhkan
system akan dicoba untuk ditulisnya buffer yang besar. Program dibuat
dalam jumlah besar, tetapi jika piranti tidak menggunakan I/O buffer untuk
telah penuh ata disana ada beberapa membaca 1 KB data dan kemudian
masalah, sejumlah bilangan dari byte dipindahkan menuju buffer dengan
mungkin akan ditulis. Terakhir adalah menggunakan ifstream dikirim
menuju buffer 16KB.

Program 12.4.
#include<conio.h> 
#include <iostream> 
#include <cstdlib>    
 
#include <sys/types.h>   
#include <sys/stat.h> 
#include <fcntl.h> 
 
using namespace std; 
 
 
#ifdef _  _WIN32_  _      // jika kita menggunakan Windows32 
#include <io.h>                // include file i/o bekerja pada Windows32  
#else                              /* _  _WIN32_  _ */ 
#include <unistd.h>       // include file i/o bekerja pada unix 
#endif                            /* _  _WIN32_  _ */ 

418
Operasi File Bahasa Pemrograman

 
const int BUFFER_SIZE = (16 * 1024); // menggunakan buffer 16k  
 
int main(int argc, char *argv[]) 

    char  buffer[BUFFER_SIZE];  // buffer data  
    int   in_file;                // input file descriptor 
    int   out_file;               // output file descriptor  
    int   read_size;              // number of bytes on last read  
 
    if (argc != 3) { 
         cerr << "Error: Angka sebagai arugmen salah \n"; 
         cerr << "penggunaanya adalah : copy <from> <to>\n"; 
        exit(8); 
    } 
    in_file = open(argv[1], O_RDONLY); 
    if (in_file < 0) { 
         cerr << "Error:tidak bisa dibuka " << argv[1] << '\n'; 
        exit(8); 
    } 
    out_file = open(argv[2], O_WRONLY | O_TRUNC | O_CREAT, 0666); 
    if (out_file < 0) { 
         cerr << "Error:Tidak bisa dibuka " << argv[2] << '\n'; 
        exit(8); 
    } 
    while (true) { 
        read_size = read(in_file, buffer, sizeof(buffer)); 
 
        if (read_size == 0) 
            break;              // akhir file  
 
        if (read_size < 0) { 
             cerr << "Error:kesalahan baca\n"; 
            exit(8); 
        } 
        write(out_file, buffer, (unsigned int) read_size); 
    } 
    close(in_file); 
    close(out_file); 
    getch(); 
    return (0); 

419
Bahasa pemrograman Operasi File

Langkah pertama harus pengaturannya dibanding C++.


membuat semua ukuran buffer Deklarasi-deklarasi pada struktur dan
didefinisikan sebagai nilai konstan, fungsi yang digunakan oleh fungsi C
sehingga hal tersebut sangat mudah I/O disimpan di dalam standar file
dimodifikasi, biasanya cukup mudah include <cstdio>.
diingat yaitu misalnya jika ulkurannya
16K maka programmer dapat  FILE *file_variable;      /* Comment */  
menggunakan dengan menuliskan
16 * 1024. Atau bentuk konstannya sebagai contoh:
dapat ditulis seperti sebelumnya yaitu #include <cstdio>  
16K.  
Jika pengguna menggunakan  FILE *in_file;    /*  File  berisi  data 
program yang tidak sesuai, akan
masukan data */  
muncul pesan bahsa hasil atau
program mengalami kesalahan.
Sebelum suatu file dapat
Untuk menolongnya atau
digunakan, yang harus dibuka
membetulkannya maka sebuah
dengan fungsi adalah fopen. fopen
pesan akan muncul bagaimana
kembali pada sebuah pointer ke file
menggunakan program yang betul.
struktur. Format untuk fopen adalah:
Suatu ketika programmer
 
dimungkinkan tidak mengetahui
bahwa buffer telah penuh, sehingga file_variable =  fopen(name, mode);  
perlu ditambahkan read_size yang
digunakan untuk menentukan jumlah dimana file_variablenya adalah:
byte yang akan ditulis name adalah sebuah nama yang
digunakan oleh sebuah file seperti
("data.txt", "temp.dat", dan lain-lain).
12.10. Rutin-Rutin pada C++ Mode merupakan sebagai indikasi
C++ mengizinkan anda untuk apakah file akan dibaca atau ditulis.
menggunakan library I/O pada C Mode adalah dengan tanda “w”
didalam program C++. Hal ini terjadi adalah untuk menulis atau “r” untuk
banyak kali terjadi karena seseorang membaca. Fungsi fclose untuk
membutuhkan suatu program C,
menutup file, dimana format fclose
menterjemahkannya kepada C++,
dan tidak ingin mengganggu adalah:
pemanggilan I/O. Dalam beberapa
hal, library bahasa C yang lama bisa status =  fclose(file_variable);  
lebih baik dan lebih mudah
digunakan dibandingkan dengan variabel status akan menjadi no
yang baru dalam hal ini C++. jika fclose telah sukses atau bukan
Sebagai contoh, rutin-rutin string nol (nonzero) jika mengalami
pada C seperti sscanf dan kesalahan.
sprintf menggunakan suatu jauh C menyediakan tiga three
lebih kompak dalam sistim langkah sebelum membuka sebuah
420
Operasi File Bahasa Pemrograman

file. Hal ini dapat dilihat pada daftar dibawah ini:

Table 12.8. File Standard

FILE  DESCRIPTION
stdin   Standar masukan (membuka untuk dibaca). 
Pada bahasa C++ ekivalen dengan cin.
stdout   Standard keluaran (membuka untuk ditulis).
Pada bahasa C++ ekivalen dengan cout.
stderr   Standard salah (membuka untuk ditulis). 
Pada bahasa C++ ekivalalen dengan cerr.
   (dalam  bahasa  C  tidak  ada  sedangkan  dalam  bahasa  C++ 
ekivalen dengan clog.

Fungsi fgetc akan membaca cstdio). Yang perlu dicatat bahwa


sebuah karakter dari suatu file. Jika fgetc kembalikan satu bilangan bulat,
tidak ada lebih banyak data di dalam bukan suatu karakter. Ini diperlukan
file, fungsi kembali secara konstan ke karena EOF flag harus mempunyai
EOF (EOF dideskkripsikan pada nilai bukan karakter.
 
Program 12.5.
#include <cstdio> 
#include <cstdlib>          /* File standar ANSI C */ 
#include <iostream> 
 
using namespace std; 
 
const char FILE_NAME[] = "input.txt";   // nama file masukan 
 
int main(  ) 

    int  count = 0;      // jumlah karakter  
    FILE *in_file;       // masukan file  
 
    int ch;                // karakter atau EOF flag dari masukan 
 
    in_file =  fopen(FILE_NAME, "rb"); 
    if (in_file == NULL) { 
         cerr << "tidak bisa membuka File " << FILE_NAME << '\n'; 
        exit(8); 
    } 
 
    while (true) { 
421
Bahasa pemrograman Operasi File

        ch =  fgetc(in_file); 
        if (ch == EOF) 
            break; 
        ++count; 
    } 
     cout << "jumlah karakter" << FILE_NAME << " adalah " << count << '\n'; 
 
     fclose(in_file); 
    return (0); 

 

12.11. File sekuensial


Sequential file (Arsip sekuensial) debet. Misalny sebuah file data
adalah sekumpulan rekaman yang tersimpan dengan nama klien.dat.
disimpan dalam media penyimpanan Rekaman terakhir adalah
sekunder komputer, yang dapat rekaman fiktif, yang menandai akhir
diakses secara sekuensial mulai dari dari arsip. Pada beberapa
rekaman pertama sampai dengan implementasi, rekaman fiktif ini
rekaman yang terakhir, rekaman per disebut sebagai EOF (End Of File).
rekaman secara searah. File Arsip sekuensial berasal dari hasil
sekuensial berisi rekord-rekord data perekaman (penulisan) yang juga
yang tidak mengenal posisi baris atau dilakukan rekaman per rekaman.
nomor rekord pada saat aksesnya, Setiap rekaman boleh berisi type
dan setiap record dapat mempunyai dasar ataupun type terstruktur yang
lebar yang berbeda-beda. telah didefinisikan, setiap rekaman
Akses terhadapnya selalu strukturnya sama.
dimulai dari awal file dan berjalan Elemen dari rekaman disebut
satu persatu menuju akhir dari file. sebagai "field", ada field (atau juga
Dengan demikian, penambahan file sekumpulan field) rekaman yang
hanya dapat dilakukan terhadap akhir disebut sebagai "key" karena
file, dan akses terhadap baris tertentu kekhususannya dalam proses. Jika
harus dimulai dari awal file. key dari setiap rekaman tidak ada
Fungsi baku yang terkait dengan yang sama (unik), maka key menjadi
file sekuensial ini antara lain adalah identitas rekaman, dan disebut
fprintf, fscanf, dan rewind . Program "primary key". Setiap rekaman dapat
berikut menyajikan penanganan file diakses dan dikonsultasi (dibaca)
sekuensial tentang data nasabah menurut urutannya dengan
yang berisi tiga field, yaitu nomor pemanggilan primitif akses yang
identitas (account), nama (name), tersedia. Perekaman dapat dilakukan
dan posisi tabungannya (balance) melalui primitif penulisan.
untuk (1) menyajikan yang Perhatikan bahwa suatu arsip
tabungannya bernilai nol, (2) sekuensial hanya dapat disiapkan
berstatus kredit, dan (3) berstatus hanya pada salah satu modus
operasi: diakses/dibaca, atau ditulis.
422
Operasi File Bahasa Pemrograman

Dalam definisi arsip sekuensial, tidak ditulis. Primitif-primitif tsb, akan


pernah sebuah arsip diproses untuk didefinisikan kemudian.
kedua modus: dibaca dan sekaligus

Gambar 12.3. Operasi File skuensial

Program 12.6
#include <stdio.h> 
 
using namespace std; 
 
void main() { 
int request, account; 
float balance; 
 
char name[25]; 
   FILE *cfPtr; 
     if ( (cfPtr = fopen("klien.dat", "r+") ) == NULL ) 
        printf("File could not be opened\n"); 
     else { 
          printf ( "Enter request\n" 
          "1 ‐ List accounts with zero balances\n" 
          "2 ‐ List accounts with credit balances\n" 
          "3 ‐ List accounts with debit balances\n" 
          "4 ‐ End of run\n? " ) ; 
          scanf( "%d", &request ); 
423
Bahasa pemrograman Operasi File

     while (request != 4) { 
     fscanf (cfPtr, "%d%s%f", &account, name, &balance); 
 
     switch (request) { 
     case 1: 
          printf ("\nAccounts with zero balances:\n"); 
          while ( !feof(cfPtr) ) { 
          if (balance == 0) 
             printf ("%‐10d%‐13s7.2f\n", account, name, balance); 
             fscanf (cfPtr, "%d%s%f", &account, name, &balance); 
          } 
     break; 
      
     case 2: 
          printf ("\nAccounts with credit balances:\n"); 
          while ( !feof(cfPtr) ) { 
          if (balance < 0) 
             printf ("%‐10d%‐13s7.2f\n", account, name, balance); 
             fscanf (cfPtr, "%d%s%f", &account, name, &balance); 
          } 
     break; 
      
     case 3: 
          printf ("\nAccounts with debit balances:\n"); 
          while ( !feof(cfPtr) ) { 
          if (balance > 0) 
             printf ("%‐10d%‐13s7.2f\n", account, name, balance); 
             fscanf (cfPtr, "%d%s%f", &account, name, &balance); 
          } 
     break; 
     } 
 
     rewind(cfPtr); 
     printf( "\n? "); 
     scanf ("%d", &request); 
     } 
  printf ("End of run.\n"); 
  fclose(cfPtr); 
  } 

424
Operasi File Bahasa Pemrograman

12.12. Program Operasi FiIe


Dari uraian operasi file diatas, ini merupakan beberapa operasi file
dibawah ini merupakan beberapa yang dilakukan dengan bahasa C++.
operasi file yang sering dilakukan
sehari-hari. Setiap kita bekerja 12.12. 1. Membuka file
dengan menggunakan komputer kita Perintah membuka file dan
biasanya melakukan operasi menghubungkannya dengan stream
membuka file, menulis file, dengan fopen (library stdio.h) dan
menambah data file, menghapus file, menutupnya dengan fclose
menutip file dan lain sebagainya.
Operasi tersebut dilakukan dengan FILE *fopen(char *nama_file, char 
menggunakan mouse atau keyboard *mode) 
secara langsung FILE *fclose(FILE *pointer_file) 
Bagaimana jika hal tersebut
dilakukan leh program?. Tentunya hal Dalam membuka file diperlukan
tersebut harus ada instruksi atau mode, dimana hal tersebut
perintah-perintah yang digunakan merupakan cara pengaksesan file.
oleh tiap operasi tersebut. Dibawah Berikut daftar mode yang dapat
digunakan:

Tabel 12.9. Mode operasi file pada C

MODE  ARTI 
r  Membuka sebuah file teks untuk pembacaan 
w  Membuat sebuah file teks untuk penulisan 
a  Menambahkan data ke sebuah file teks 
rb  Membuka sebuah file binary untuk pembacaan 
wb  Membuat sebuah file binary untuk penulisan 
ab  Menambahkan data ke sebuah file binary 
r+  Membuka sebuah file teks untuk pembacaan/penulisan 
w+  Membuat sebuah file teks untuk pembacaan/penulisan 
a+  Menambahkan data/membuat file teks untuk 
pembacaan/penulisan 
r+b atau rb+  Membuka sebuah file binary untuk pembacaan/penulisan 
w+b atau wb+  Membuat sebuah file binary untuk pembacaan/penulisan 
a+b atau ab+  Menambahkan data ke file binary untuk 
pembacaan/penulisan 

Dalam operasi file dilakukan ada sebuah file pointer yang valid,
beberapa hal yang perlu diperhatikan sedangkan jika operasi gagal, maka
antara lain: jika operasi open fopen() mengembalikan sebuah null
berhasil, fopen() mengembalikan pointer, sehingga harus selalu dicek
425
Bahasa pemrograman Operasi File

pada saat pembukaan file. file\n"; 


Perhatikan program dibawah ini:     exit(1); 
    } 
FILE *fp;    fclose(fp);    //menutup 
  if((fp=fopen("fileku.txt","r")==NULL) {  stream file 
    cout << "Error dalam pembukaan 

Dibawah ini merupakan fungsi untuk operasi file teks antara lain

a. fgetc() dan fputc(), dimana Sintaknya dapat ditulis: 

int fgetc(FILE *fp); 
int fputc(int ch, FILE *fp);

Program 12.7
include <stdio.h> 
#include <stdlib.h> 
 
using namespace std; 
 
int main() 

    FILE *fp; 
  int i; 
  int ch; 
    fp = fopen("foo.abc", "w");   //buka file foo.abc untuk ditulisi 
  for (i=0;i<10;i++) {   //loop untuk meletakkan karakter2 
    fputc('A',fp);   //menuliskan karakter A 
    fputc('\n',fp);   //menuliskan pergantian baris 
  } 
  fclose(fp); 
 
    if((fp = fopen("foo.abc", "r"))==NULL) { 
    cout<<"Error reading file...\n"; 
    exit(1); 
  } 
  while (ch!=EOF) {  //baca file sampai tanda EOF (End of File) 
   
         ch=fgetc(fp);          //ambil satu karakter 
     putchar(ch);  //menampilkan karakter ke layar 
  } 
 
    fclose(fp);   

426
Operasi File Bahasa Pemrograman

}            

b. fgets() dan fputs(), Sintaknya dapat diltulis sebagai berikut: 

int fputs(char *str, FILE *fp); 
char *fgets(char *str, int num, FILE *fp); 

Program 12.8.
#include <stdio.h> 
#include <stdlib.h> 
 
void main() 

    FILE *fp; 
  char ch[14]; 
    fp = fopen("foo.abc", "w");     //buka file foo.abc untuk ditulisi 
  fputs("String Contoh",fp);    //menuliskan string 
  fclose(fp); 
 
    if((fp = fopen("foo.abc", "r"))==NULL) { 
  printf("Error reading file...\n"); 
  exit(1); 
  } 
  puts(fgets(ch,sizeof(ch),fp));  //cetak string di foo ke layar 
 
    fclose(fp);              

c. fscanf() dan fprintf()   Dapat menggunakan format data


dimana operasi ini mempunyai Sintaks adalah sebagai berikut:
ciri-ciri sebagai berikut:
Mirip dengan sintaks scanf() dan int  fprintf(FILE  *fp,  const  char  *format, 
printf() …); 
Dapat digunakan untuk int  fscanf(FILE  *fp,  const  char  *format, 
sembarang file (tidak hanya …); 
monitor/layar)

Program 12.9
#include <stdio.h> 
#include <stdlib.h> 
 
void main() 

427
Bahasa pemrograman Operasi File

    FILE *fp; 
    int i; 
  char x[100]; 
    fp = fopen("foo.abc", "w");  //buka file foo.abc untuk ditulisi 
    fprintf(fp, "\nSample Code\n\n");  //menuliskan sesuatu 
    for (i = 1; i <= 10 ; i++) { 
    fprintf(fp, "i = %d\n", i); 
  } 
    fclose(fp);              
 
  if((fp=fopen("foo.abc","r"))==NULL) { 
    printf("Error membuka file\n"); 
    exit(1); 
  } 
  while(!feof(fp)) { 
    fscanf(fp,"%s",&x); 
    puts(x); 
  } 
  fclose(fp); 

d. fread() dan fwrite() c: banyaknya blok data yang akan


fungsi operasi ini antara lain: dibaca/ditulis
Untuk membaca dan menulis fp: pointer ke file
blok data (misalnya: Karakter,
integer, structure,dan lain-lain)
Untuk dapat menggunakan 12.12.2. Menulis File
fwrite(), file harus dibuka dengan Salah satu jenis pemrosesan
tambahan opsi “b” (binary) pada file adalah menulis atau
merekam data ke file. Untuk menulis
Sintaks: sebuah karakter, bentuk yang
fwrite(void *buffer, int b_byte, int c, digunakan adalah dengan
file *fp); menggunakan Sintak sebagai berikut:
fread(void *buffer, int b_byte, int c,
file *fp); putc(int ch, file *fp) 

Keterangan: dimana
buffer: pointer ke area di memori  fp adalah pointer file yang
yang menampung data yg akan dihasilkan oleh fopen()
dibaca ke file  ch adalah karakter yang akan
b_byte: banyaknya byte data yang ditulis.
akan dibaca/tulis (dapat
menggunakan sizeof(buffer))

428
Operasi File Bahasa Pemrograman

Program 12.10
#include "stdio.h" 
#include "conio.h" 
#define CTRL_Z 26 
 
void main(){ 
   file *pf;   /* pointer ke file */ 
  char kar; 
  if((pf = fopen("COBA.TXT", "w")) == NULL) /* ciptakan file */ 
  { cputs("File tak dapat diciptakan !\r\n"); 
  exit(1);    /* selesai */ 

while((kar=getche()) != CTRL_Z) 
putc(kar, pf);     /* tulis ke file */ 
fclose(pf);     /* tutup file */ 

12.12.3. Menutup File


Setelah pemrosesan file selesai, file dapat ditutup menggunakan perintah

nama_obyek.close(); 

Program 12.11. Program untuk menulis teks ke dalam file


#include<iostream.h> 
#include<fstream.h> 
 
void main(){ 
         ofstream fileteks; 
fileteks.open("C:/Catat.txt"); 
fileteks << "Untuk mencapai tujuan yg besar, maka tujuan itu"<< endl; 
fileteks << "harus dibagi‐bagi menjadi tujuan kecil"<< endl; 
fileteks << "sampai tujuan itu merupakan tujuan yg dapat "<< "dicapai" << endl; 
fileteks << "berdasarkan kondisi dan potensi yg dimiliki saat "<< "itu " << endl; 
fileteks.close(); 

perintah fileteks.Open(“C:/catat.txt”);
akan membuka file catatan.txt yang
ada di C:\ . Apabila file tersebut 12.12.4. Menambah Data File
belum ada maka akan dibuat secara Suatu file yang sudah ada
otomatis, dan apabila sudah ada isi sebelumnya dapat ditambah data
file catatan.txt akan terhapus. yang baru (tidak menghapus data
429
Bahasa pemrograman Operasi File

lama). Caranya adalah dengan nama_obyek.open(“nama file”, ios::app) 


menambahkan perintah ios::app
pada open().

Program 12.12
#include<iostream.h> 
#include<fstream.h> 
 
void main(){  
ofstream fileteks; 
fileteks.open("C:/catatan.txt", ios::app); 
fileteks << endl; 
fileteks << "Oleh: Al Khowarizmi << endl; 
fileteks.close(); 

12.12.5. Memeriksa File C++ tersedia fungsi untuk memeriksa


Dalam penulisan tidak kondisi-kondisi pada operasi file,
selamanya jalan yang mulus ditemui. sehingga kesalahan saat eksekusi
Ada kemungkinan terjadi saat file dapat dikendalikan. Fungsi yang
dibuka, ternyata file tidak ada. Dalam dimaksud adalah fail().

Program 12.13.
#include<iostream.h> 
#include<fstream.h> 
 
void main(){  
ifstream fileteks;  
  { 
  ifstream digunakan u/ membaca file  
  } 
fileteks.open("C:/catatan.txt"); 
if (fileteks.fail()) cout << "Maaf file takdapat dibuka/"<< "tidak ditemukan"; 
fileteks.close(); 

Operasi file dapat dilakukan membaca data file karakter per


dalam bentuk karakter. Misalnya karakter. Operasi ini didukung oleh
proses penyimpanan data ke file function put() dan get().
dilakukan setiap karakter, atau

Program 12.14. Menyimpan data karakter per karakter ke dalam file.

430
Operasi File Bahasa Pemrograman

#include<iostream.h> 
#include<fstream.h> 
 
void main() 
{  
ofstream fileteks; 
fileteks.open("C:/contoh.txt"); 
fileteks.put('A'); 
fileteks.put('B'); 
fileteks.put('C'); 
fileteks.close(); 

Program 12.15. Program untuk membaca file karakter per karakter


#include<iostream.h> 
#include<fstream.h> 
 
void main() 

char karakter; 
ifstream fileteks; {} 
fileteks.open("C:/contoh.txt"); 
while(!fileteks.eof()) 

fileteks.get(karakter); 
cout << karakter; 

fileteks.close(); 

12.17.Soal Latihan
Jawablah soal latihan dibawah ini dengan baik dan benar.
1. Apa yang dimaksud dengan file
2. Apa yang dimaksud dengan kode ascii
3. Apakah fungsi buffer pada operasi string
4. Buatlah program untuk menulis file dengan nama latih.txt
5. Buatlah program untuk menambah data pada file latih.txt
6. Buatlah program untuk menghapus file latih.txt
7. Apa yang dimaksud dengan file skuensial

431
Bahasa pemrograman Operasi File

432
Pointer Bahasa Pemrorgraman

BAB 13
POINTER

13.1 Pemrograman pointer


13.2 Deklarasi variabel bertipe pointer
13.3 Inisialisasi Pointer
13.4 Pointer untuk fungsi
13.5 Mengakses dan Mengubah isi Pointer
13.6 Array dan Pointer
13.7 Pointer dalam Fungsi
13.8 Fungsi Pointer ke Static Class Member Function
13.9 Fungsi Pointer pada Class anggota Fungsi Non-static
13.10 Soal Latihan

13.1. Pemrograman pointer


Pada programmer pemula hal mempunyai alamat yang unik.
yang sulit dipahami adalah pointer. Sebuah variable alamat merupakan
Pointer adalah pada dasarnya sama alamat dimana sebuah byte data
dengan veriabel lain. Dengan pointer pertama dapat dialokasikan. Sebagai
setiap variable diletakan pada alamat contoh misalnya dapat didefinisikan
memori yang besarnya cukup untuk dalam program sebagai berikut;
menampung nilai dari sebuah
variable tipe data. Pada sebuah char huruf; 
komputer PC misalnya satu byte data short angka; 
secara umum dialokasikan untuk tipe float amount; 
data char, 2 byte untuk tipe data
short, 4 byte untuk tipa data int, long sehingga pengaturan memorinya
dan float serta 8 byte untuk tipe data dapat diilustrasikan sebagai berikut
double. Tiap-tiap byte data memori

433
Bahasa Pemrograman Pointer

huruf angka amount

1200 1201 1203

Gambar 13.1. Ilustrasi Pengaturan Data Pada Sebuah Memori

Pada gambar diatas variable letter Kegunaan pointer yang utama


diletakan pada alamat 1200, number adalah untuk menyimpan alamat
pada alamat 1201 dan amount pada memori dari sebuah variabel (data
alamat 1203. type atau object dari class). Selain
Ketika programmer menyimpan alamat dari variabel,
mendeklarasikan sebuah variable, pointer juga dapat digunakan untuk
sama halnya dengan menyimpan alamat dari sebuah
menginformasikan compiler dua fungsi (function pointer).
sesuatu yaitu : nama variable dan Function pointer telah digunakan
tipe variable. Misalnya kita akan sejak dikenalkannya bahasa C, dan
mendeklarasikan tipe variable integer banyak digunakan untuk sebuah
dengan nama variable k sehingga fungsi callback atau untuk
dapat ditulis: meningkatkan readability dari sebuah
code
Int k  Anda dapat memperlakukan
function pointer seperti pointer biasa
Pada tipe variable integer merupakan (pointer ke datatype/object), anda
tipe data yang digunakan compiler dapat menyimpan,mengirimkan,
dimana memori yang terpakai adalah merubah address, atau meng-
dua byte. evaluasi address dari pointer ke
Setiap kali komputer menyimpan fungsi ini dengan sifat tambahan
data, maka sistem operasi akan anda dapat memanggil fungsi yang
mengorganisasikan lokasi pada ditunjuk oleh function pointer.
memori pada alamat yang unik. Misal Setiap variabel yang
untuk alamat memori 1776, hanya dideklarasikan, disimpan dalam
sebuah lokasi yang memiliki alamat sebuah lokasi memori dan pengguna
tersebut. Dan alamat 1776 pasti biasanya tidak mengetahui di alamat
terletak antara 1775 dan 1777. mana data tersebut disimpan. Dalam
Dalam pointer, terdapat 2 jenis C++, untuk mengetahui alamat
operator yang biasa digunakan. tempat penyimpanan data, dapat
434
Pointer Bahasa Pemrorgraman

digunakan tanda ampersand (&) yang


dapat diartikan “alamat”. Akan memberikan variable ted
Sebenarnya jika programer akan alamat dari variable andy, karena
mendeklarasian sebuah variable, variable andy diberi awalan karakter
seorang programer tidak diharuskan ampersand (&), maka yang menjadi
menentukan lokasi sesungguhnya pokok disini adalah alamat dalam
pada memory, karena hal ini akan memory, bukan isi variable. Misalkan
dilakukan secara otomatis oleh andy diletakkan pada alamat 1776
kompiler dan operating sysem pada kemudian dituliskan instruksi sebagai
saat run-time. berikut :
Jika ingin mengetahui dimana
suatu variable akan disimpan, dapat andy = 25;  
dilakukan dengan memberikan tanda fred = andy;  
ampersand (&) didepan variable , ted = &andy;
yang berarti "address of".
Perhatikan contoh dibawah ini: Maka hasilnya adalah sebagai
berikut:
ted = &andy; 

andy
25
1775 1776 1777

Fred Ted
25 1776

Gambar 13.2. Operator Alamat (&)

Dengan menggunakan pointer, beth = *ted;  


kita dapat mengakses nilai yang
tersimpan secara langsung dengan (dapat dikatakan:"beth sama dengan
memberikan awalan operator asterisk nilai yang ditunjuk oleh ted") beth =
(*) pada identifier pointer, yang 25, karena ted dialamat 1776, dan
berarti "value pointed by". Contoh : nilai yang berada pada alamat 1776
adalah 25.

435
Bahasa Pemrograman Pointer

Ted
1776

1775 1776 1777

25 memori

25

beth
Gambar 13.3. Operator Reference

Ekspresi dibawah ini semuanya (address/derefence operator (&)),


benar, perhatikan pernyataan sehingga akan mengembalikan
program dibawah: alamat dari variabel andy. Ketiga
bernilai benar karena assignation
andy == 25   untuk ted adalah ted = &andy;.
&andy == 1776   Keempat menggunakan reference
ted == 1776   operator (*) yang berarti nilai yang
*ted == 25   ada pada alamat yang ditunjuk oleh
ted, yaitu 25. Maka ekspresi dibawah
Ekspresi pertama merupakan ini pun akan bernilai benar :
assignation bahwa andy=25;. Kedua,
menggunakan operator alamat *ted == andy  

13.2. Deklarasi variabel bertipe pointer


Variabel pointer sering dikatakan variable pointer dan x adalah variabel
sebagai variabel yang menunjuk ke yang ditunjuk oleh px. Kalau x
obyek lain. Pada kenyataan yang berada pada alamat memori (alamat
sebenarnya, variabel pointer berisi awal) 1000, maka px akan berisi
alamat dari suatu obyek lain (yaitu 1000. Sebagaimana diilustrasikan
obyek yang dikatakan ditunjuk oleh pada gambar di bawah ini:
pointer). Sebagai contoh, px adalah

436
Pointer Bahasa Pemrorgraman

px
zzzz 1000

Alamat

1000 ?
X

Gambar 13.4. Variabel pointer px menunjuk ke variabel x

Suatu variabel pointer dideklarasikan dengan bentuk sebagai berikut :

tipe_data *nama_var_pointer

char, float, int, double, long, operator bintang/ asterisk (*)

Gambar 13.7. deklarasi variabel pointer

Dimana type merupakan tipe dari data yang ditunjuk, bukan tipe dari pointer-
nya. Dengan tipe dapat berupa float * greatnumber; 
sembarang tipe yang sudah dibahas
pada bab-bab sebelumnya, maupun Contoh pertama menyatakan bahwa
bab-bab berikutnya. Adapun px adalah variabel pointer yang
nama_var_pointer adalah nama dari menunjuk ke suatu data bertipe int,
variabel pointer. Perhatikan contoh sedangkan contoh kedua masing
berikut ini: pch1 dan pch2 adalah variabel
pointer yang menunjuk ke data
int *px;        bertipe char.
char *pch1, *pch2;    

437
Ba
ahasa Pemrogram
man Pointer

Gambar
G 13.6
6. Ilustrasi pe
endeklarasia
an variabel pointer
p

Prrogram 13.1
#innclude <iostre eam>  
#innclude<conio o.h> 
 
ussing namespaace std; 
 
intt main ()  
{  
  int nilai1 = 5, nilai2 == 15;  
  int * m
mypointer;  
  mypoin nter = &nilai1 1; 
  mypoin nter = 10;  
  mypoin nter = &nilai2 2;  
  *mypointer = 20;  
  cout <<< "nilai1==" << nilai1 << "/ nilai2==" << nilai2;  
  return 0;  

 
Ke eluaran prog gram diatas adalah seba agai berikut:
Ou utput : nilai1=
==10 / nilai2===20  

Perhatika
an bagaiman na nilai darri Kemudian memberikan nilai 10 ke
nillai1 dan nila
ai2 diubah secara
s tidakk nilai ya
ang ditunjukk oleh myp pointer,
lanngsung. Pertama mypointer yaitu ala
amat dari niilai1, maka secara
dibberikan allamat nilai1 dengan n tidak langsung nilai1 telah
menggunakan n tanda amp persand (&). dimodifiikasi. Begitu pula untuk nilai2.

Prrogram 13.2
#in
nclude <iostre
eam.h>  
 
ussing namespaace std; 
4
438
Pointer Bahasa Pemrorgraman

 
int main ()  
{  
  int nilai1 = 5, nilai2 = 15;  
  int *p1, *p2;  
  p1 = &nilai1;       // p1 = address of nilai1  
  p2 = &nilai2;       // p2 = address of nilai2  
  *p1 = 10;       // nilai pointed by p1 = 10  
  *p2 = *p1;            // nilai pointed by p2 = nilai pointed by p1  
  p1 = p2;       // p1 = p2 (nilai of pointer copied)  
  *p1 = 20;       // nilai pointed by p1 = 20  
  cout << "nilai1==" << nilai1 << "/ nilai2==" << nilai2;  
  return 0;  
}  

Keluaran program diatas adalah sebagai berikut:


nilai1==10 / nilai2==20 

13.3. Inisialisasi Pointer


Dalam melakukan pemrogaman int number; int *tommy; tommy = 
dengan menggunakan pointer yang &number; 
pertama perlu dilakukan dalam
membuat program adalah dengan Seperti pada array, inisialisasi isi dari
melakukan inisialisasi pointer pointer dapat dilakukan dengan
tersebut. Untuk lebih jelasnya deklarasi seperti contoh berikut :
perhatikan contoh dibawah ini:
char * terry = "hello";  
int number; int *tommy = &number; 
Misalkan kata "hello" disimpan pada
pernyataan diatas akan sama atau alamat 1702 dan seterusnya, maka
ekivalen dengan pernyataan dibawah deklarasi tadi dapat digambarkan
ini: sebagai berikut:

439
Bahasa Pemrograman Pointer

‘h’ ‘e’ ‘l’ ‘l’ ‘o’ ‘\0’


1702 1703 1704 1705 1706 1707

terry 1702

Gambar 13.7. deklarasi hello pada mulai alamat 1702

terry berisi nilai 1702 dan bukan 'h' terry[4] = '!'; *(terry+4) = '!';
atau "hello", walaupun 1702
menunjuk pada karakter tersebut. Penulisan terry[4] dan *(terry+4),
Sehingga jika akan dilakukan mempunyai arti yang sama. Jika
perubahan pada karakter 'o' diganti digambarkan:
dengan tanda '!' maka ekspresi yang
digunakan ada 2 macam :

‘h’ ‘e’ ‘l’ ‘l’ ‘!’ ‘\0’


1702 1703 1704 1705 1706 1707

terry 1702 terry[4]


*(terry+4)

Gambar 13.8 Deklarasi “Hello” pada Alamat Terry[4] Diisi !

Perhatikan contoh program ekspresi diatas akan menunjuk pada


dibawah, dimana char memerlukan 1 lokasi dimemory masing-masing
byte, short memerlukan 2 bytes dan 1000, 2000 and 3000, sehingga jika
long memerlukan 4. Terdapat 3 buah dituliskan :
pointer :
mychar++; myshort++; mylong++; 
char *mychar;  
short *myshort;   mychar, akan bernilai 1001, myshort
long *mylong;   bernilai 2002, dan mylong bernilai
3004. Alasannya adalah ketika terjadi
pertambahan maka akan
440
Pointer Bahasa Pemrorgraman

ditambahkan dengan tipe yang sama ukuran dalam bytes.


seperti yang didefinisikan berupa

Gambar 13.9. Lokasi Memori Ukuran Byte

Perhatikan ekspresi dibawah ini : *p = *q; p++; q++; 

*p++; *p++ = *q++;   Tipe pointer void merupakan tipe


khusus. void pointers dapat
Ekspresi pertama equivalen dengan menunjuk pada tipe data apapun,
*(p++) dan yang dilakukan adalah nilai integer value atau float, maupun
menambahkan p (yaitu alamat yang string atau karakter. Keterbatasannya
ditunjuk, bukan nilai yang adalah tidak dapat menggunakan
dikandungnya). Ekspresi kedua, operator asterisk (*), karena panjang
yang dilakukan pertama adalah pointer tidak diketahui, sehingga
memberikan nilai *q ke *p dan diperlukan operator type casting atau
kemudian keduanya ditambahkan 1 assignations untuk mengembalikan
atau dengan kata lain : nilai void pointer ketipe data
sebenarnya.

Program 13.3
include <iostream.h>  
 
using namespace std; 
 
void increase (void* data, int type)  

441
Bahasa Pemrograman Pointer

{  
switch (type)  
{  
  case sizeof(char) : (*((char*)data))++; break;  
  case sizeof(short): (*((short*)data))++; break;  
  case sizeof(long) : (*((long*)data))++; break;  
}  

 
int main ()  
{  
  char a = 5;  
  short b = 9;  
  long c = 12;  
  increase (&a,sizeof(a));  
  increase (&b,sizeof(b));  
  increase (&c,sizeof(c));  
  cout << (int) a << ", " << b << ", " << c;  
  return 0;  
}  

Keluaran program diatas adalah sebagai berikut:


6, 10, 13  

13.4. Pointer untuk fungsi


C++ memperbolehkan operasi Deklarasi pointer untuk function sama
dengan pointer pada function. seperti prototype function kecuali
Kegunaan yang utama adalah untuk nama function dituliskan diantara
memberikan satu function sebagai tanda kurung () dan operator asterisk
parameter untuk function lainnya. (*) diberikan sebelum nama.

Program 13.4. pointer to functions


#include <iostream.h>  
 
using namespace std; 
 
  int addition (int a, int b)  
  { return (a+b); }  
  int subtraction (int a, int b)  
  { return (a‐b); }  
  int (*minus)(int,int) = subtraction;  

442
Pointer Bahasa Pemrorgraman

  int operation (int x, int y, int (*functocall)(int,int))  
  {  
    int g;  
    g = (*functocall)(x,y);  
    return (g);  
  }  
  int main ()  
  {  
    int m,n;  
    m = operation (7, 5, addition);  
    n = operation (20, m, minus);  
    cout <<n;  
    return 0;  

Keluaran program diatas adalah sebagai berikut:


8  

Dari contoh diatas, minus ke suatu variable pointer px (yang


merupakan pointer global untuk dideklarasikan sebagai pointer yang
function yang mempunyai 2 menunjuk ke data bertipe int) yaitu:
parameters bertipe int, kemudian
diberikan untuk menunjuk function px = &x; 
subtraction, ditulis dalam satu baris
instruksi : Pernyataan di atas berarti bahwa px
diberi nilai berupa alamat dari
int (* minus)(int,int) = subtraction;  variabel x. Setelah pernyataan
tersebut dieksekusi barulah dapat
Agar suatu pointer menunjuk ke dikatakan bahwa px menunjuk ke
variabel lain, mula-mula pointer harus variable x.
diisi dengan alamat dari variabel Jika suatu variabel sudah
yang akan ditunjuk. Untuk ditunjuk oleh pointer, variabel yang
menyatakan alamat dari suatu ditunjuk oleh pointer tersebut dapat
variabel, operator & (operator alamat, diakses melalui variabel itu sendiri
bersifat unary) bisa dipergunakan, (pengaksesan langsung) ataupun
dengan menempatkannya di depan melalui pointer (pengaksesan tak
nama variabel. Sebagai contoh, bila x langsung). Pengaksesan tak
dideklarasikan sebagai variabel langsung dilakukan dengan
bertipe int, maka menggunakan operator indirection
(tak langsung) berupa simbol *
&x  (bersifat unary). Contoh penerapan
operator * yaitu:
berarti “alamat dari variabel x”.
Adapun contoh pemberian alamat x *px 

443
Ba
ahasa Pemrogram
man Pointer

ya
ang menya atakan “isi atau nila ai px = &x;
va
ariabel/data yang dittunjuk oleh h
po
ointer px” . Sebagai coontoh jika y namun terdapat
t perrnyataan
be
ertipe int, maka sesudah dua a
pe
ernyataan beerikut y = *px; 

pxx = &x;  maka y tidaklah be erisi nilai x, sebab


y == *px;  px belu um diatur agar
a menunjuk ke
variabell x. Hal seperti
s ini harap
y akan berisi nilai yang sa
ama dengan
n diperhattikan. K
Kalau prrogram
nillai x. Kedua pernyataan
n di atas melibatkkan pointer, dan pointerr belum
diinisialiisasi, ada kemungkinan
k n akan
pxx = &x;  terjadi masalah yang dinamakan
y == *px;  “bug” yang biass mengakibatkan
kompute er tidak da apat dikend dalikan
se
ebenarnya dapat
d digantikan dengan
n (hang). Selain itu tippe variabel pointer
se
ebuah pernyataan berup
pa dan tip pe data yan ng ditunjuk harus
sejenis. Bila tidak sejenis
s maka a akan
y == x;  terjadi hasil yang tidak diing ginkan.
Untuk lebih jelasn nya lihat gambar
g
Seeandainya pada progrram di atass berikut.
tid
dak terdapat pernyataan
n

Gambar 13.10. Ilustrasi Kesalahan Yang Terjad


di Karena Tipe Tidak Se
ejenis

Prrogram 13.5. Mengakses isi suatu variabel mela


alui pointer.
#in
nclude <stdio
o.h> 
#in
nclude <iostre
eam.h>  
 
ussing namespaace std; 

4
444
Pointer Bahasa Pemrorgraman

 
main()   
{       int y, x = 87;   
   int *px;    
   px = &x;     
    y = *px;     
     cout <<"Alamat x    = \n"<< &x;   
   cout <<"Isi px      = \n"<< px;   
  cout <<"Isi x       = \n"<< x;   
   cout <<"Nilai yang ditunjuk oleh px = \n"<< *px;   
   cout <<"Nilai y     = \n"<< y;   
}   

Mengakses isi suatu variabel melalui pointer. Tipe variabel pointer dan tipe
data yang ditunjuk harus sejenis

Program 13.6
#include <conio.h> 
#include <iostream.h>  
 
using namespace std; 
 
main() 

  int *pu; 
  int nu; 
  int u = 1234; 
  pu = &u; 
  nu = *pu; 
  cout <<"Alamat dari u = \n"<< &u; 
  cout <<"Isi pu = \n"<< pu; 
  cout <<"Isi u = \n"<< u; 
  cout <<"Nilai yang ditunjuk oleh pu = \n"<< *pu; 
  cout <<"Nilai nu = \n"<< nu; 
  getch(); 
  return 0;  

Program 13.7
#include <conio.h> 
#include <iostream.h>  
 

445
Bahasa Pemrograman Pointer

using namespace std; 
 
main() 

  int z = 20, s = 30; 
  int *pz, *ps; 
  pz = &z; 
  ps = &s; 
  *pz += *ps; 
  cout <<"z = \n"<< z; 
  cout <<"s = \n"<< s; 
  getch(); 
  return 0;  

Program 13.8
#include <conio.h> 
#include <iostream.h>  
 
using namespace std; 
 
main() 

  char c = 'Q'; 
  char *char_pointer = &c; 
  cout <<"\n"<< c << *char_pointer; 
  c = '/'; 
  cout <<"\n"<< c << *char_pointer; 
  *char_pointer = '('; 
  cout <<"\n"<< c << *char_pointer; 
  getch(); 
  return 0;  

Program 13.9
#include <conio.h> 
#include <iostream>  
 
using namespace std; 
 
int main() 

446
Pointer Bahasa Pemrorgraman

  int x = 1, y = 2; 
  int *ip;   
  ip = &x; 
  y = *ip; 
  x = ip; 
  *ip = 3; 
  cout <<"x = "<< x; 
      cout <<"y = "<< y; 
  getch(); 
  return 0;  

13.5. Mengakses dan Mengubah isi Pointer


Program berikut memberikan merupakan instruksi untuk mengubah
gambaran tentang pengubahan isi nilai variabel d secara tak langsung.
suatu variable secara tak langsung Perintah di atas berarti “jumlahkan
(yaitu melalui pointer). Mula-mula pd yang ditunjuk pd dengan 10
dideklarasikan sebagai pointer yang kemudian berikan ke yang ditunjuk
menunjuk ke suatu data bertipe float oleh pd”, atau identik dengan
dan d sebagai variabel bertipe float. pernyataan
Selanjutnya
d = d + 10; 
d = 54.5; 
Akan tetapi, seandainya tidak ada
digunakan untuk mengisikan nilai instruksi
54,5 secara langsung ke variabel d.
Adapun pd = &d; 

pd = &d;  maka pernyataan

digunakan untuk memberikan alamat *pd = *pd + 10;  


dari d ke pd. Dengan demikian pd
menunjuk ke variabel d. Sedangkan tidaklah sama dengan
pernyataan berikutnya
d = d + 10; 
*pd = *pd + 10; (atau: *pd += 10; ) 

Program 13.10
#include <conio.h> 
#include <iostream>  

447
Bahasa Pemrograman Pointer

 
using namespace std; 
 
main() 

  float d = 54.5f, *pd; 
  cout <<"Isi d mula‐mula = \n"<< d; 
  pd = &d; 
  *pd += 10; 
  cout <<"Isi d sekarang = \n"<< d; 
  getch(); 
  return 0;  

Program 13.11
#include <conio.h> 
#include <iostream>  
 
using namespace std; 
 
main() 

  int i1, i2, *p1, *p2; 
  i1 = 9; 
  p1 = &i1; 
  i2 = *p1 / 2 ‐ 2 * 3; 
  p2 = p1; 
  cout <<"i1="<<i1; 
  cout <<"i2="<<i2; 
  cout <<"*p1="<<*p1; 
  cout <<"*p2="<<*p2; 
  getch(); 
  return 0;  

Program 13.12
#include <conio.h> 
#include <iostream>  
 
using namespace std; 
 
main() 

448
Pointer Bahasa Pemrorgraman

  int count = 10, *temp, sum = 7; 
  temp = &count; 
  *temp = 32; 
  temp = &sum; 
  *temp = count; 
  sum = *temp * 4; 
  cout <<"count = %d, *temp = %d, sum = %d\n"<< count<<*temp<< sum; 
  getch(); 
  return 0;  

Program 13.13
#include <conio.h> 
#include <iostream>  
 
using namespace std; 
 
main() 

  int count = 13, sum = 9, *x, *y; 
  x = &count; 
  *x = 27; 
  y = x; 
  x = &sum; 
  *x = count; 
  sum = *x / 2 * 3; 
  cout <<"count = %d, sum = %d, *x = %d, *y = %d\n"<< count<<sum<<*x<<*y; 
  getch(); 
  return 0;  

Program 13.14
#include <conio.h> 
#include <iostream>  
 
using namespace std; 
 
int r, q = 7; 
int go_crazy(int *, int *); 
main() 

  int *ptr1 = &q; 
  int *ptr2 = &q; 

449
Bahasa Pemrograman Pointer

  r = go_crazy(ptr1, ptr2); 
  cout <<"q = %d, r = %d, *ptr1 = %d, *ptr2 = %d\n"<<q<< r<<*ptr1<<*ptr2; 
  ptr2 = &r; 
  go_crazy(ptr2, ptr1); 
  cout <<"q = %d, r = %d, *ptr1 = %d, *ptr2 = %d\n"<< q<< r<< *ptr1<< *ptr2; 

int go_crazy(int *p1, int *p2) 

  int x = 5; 
  r = 12; 
  *p2 = *p1 * 2; 
  p1 = &x; 
  return *p1 * 3; 

13.6. Array dan Pointer


Pada bahasan ini programer dan numbers equivalen, dan
perlu mengerti perbedaan antara memiliki sifat (properties) yang sama.
pointer dengan array. Keduanya Perbedaannya, user dapat
menggunakan memori yang menentukan nilai lain untuk pointer p
lokasinya ditentukan, dimana dimana numbers akan selalu
Identifier suatu array equivalen menunjuk nilai yang sama seperti
dengan alamat dari elemen pertama, yang telah didefinisikan. p,
sedangkan pointer equivalen dengan merupakan variable pointer,
alamat elemen pertama yang numbers adalah constant pointer.
ditunjuk. Perhatikan deklarasi Karena itu walaupun instruksi diatas
veriabel sebagai berikut : benar, tetapi tidak untuk instruksi
dibawah ini :
int numbers [20];  
int * p;  numbers = p; 

maka deklarasi dibawah ini juga karena numbers adalah array


benar : (constant pointer), dan tidak ada nilai
yang dapat diberikan untuk identifier
p = numbers;  konstant (constant identifiers).
Perhatikan program dibawah ini:

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

450
Pointer Bahasa Pemrorgraman

 
int main () 

  int numbers[5]; 
  int * p; 
  p = numbers;  
  *p = 10; 
  p++;  
  *p = 20; 
  p = &numbers[2]; *p = 30; 
  p = numbers + 3; *p = 40; 
  p = numbers; *(p+4) = 50; 
  for (int n=0; n<5; n++) 
  cout << numbers[n] << ", "; 
  getch(); 
  return 0; 

Program tersebut setelah dieksekusi maka akan mendapatkan keluaran


sebagai berikut:
Output : 10, 20, 30, 40, 50, 
 
 
13.6.1. Pointer dan Array (pointer to array)
Hubungan antara pointer dan maka ptgl akan berisi alamat dari
array pada C sangatlah erat. Sebab elemen array tgl_lahir yang
sesungguhnya array secara internal berindeks nol. Instruksi di atas bisa
akan diterjemahkan dalam bentuk juga ditulis menjadi
pointer. Pembahasan berikut akan
memberikan gambaran hubungan ptgl = tgl_lahir; 
antara pointer dan array. Misalnya
dideklarasikan di dalam suatu fungsi sebab nama array tanpa tanda
kurung menyatakan alamat awal dari
static int tgl_lahir[3] = { 01, 09, 64 };   array. Sesudah penugasan seperti di
atas,
dan
*ptgl 
int *ptgl; 
dengan sendirinya menyatakan
Kemudian diberikan instruksi elemen pertama (berindeks sama
dengan nol) dari array
ptgl = &tgl_lahir[0];   //pointer to 
array of integer  tgl_lahir.

451
Bahasa Pemrograman Pointer

Beberapa contoh hubungan pointer


13.6.2. Pointer dan String dan string ditunjukkan pada program
berikut.

Program 13.16
#include <conio.h> 
#include <iostream>  
 
using namespace std; 
 
main() 

  /* pnegara menunjuk konstanta string "INDONESIA" */ 
  char *pnegara = "INDONESIA"; 
  cout<<"String yang ditunjuk oleh pnegara = "; 
  puts(pnegara);              // printf("%s\n",pnegara); 
  getch(); 
  return 0;  

Hasil keluaran program diatas adalah sebagai berikut


String yang ditunjuk oleh pnegara = INDONESIA 

Pada program di atas,

char *pnegara = “INDONESIA”; 

akan menyebabkan kompiler “INDONESIA” dalam suatu memori,


mengalokasikan variabel pnegara kemudian pointer pnegara akan
sebagai variabel pointer yang menunjuk ke lokasi string
menunjuk ke obyek bertipe char dan “INDONESIA”.
menempatkan konstanta

Lokasi awal string

pnegara
I N D O N E S I A \0

Gambar 13.11. Pointer menunjuk data

452
Pointer Bahasa Pemrorgraman

Pernyataan di atas akan menyerupai akan berisi sebuah address


pernyataan seperti dibawah ini: memory yang tersimpan pada
variabel a (setelah ada sebuah
char negara[] = “INDONESIA”;  address memory yang di-assign
ke variabel a tersebut)
tetapi sebenarnya kedua pernyataan 3. Menuliskan nama sebuah variabel
inisialisasi di depan tidaklah tepat array tanpa indexnya
sama. Sebab pnegara adalah pointer Misalnya dideklarasikan
(menyatakan alamat) yang dengan o float nilai[5], maka penulisan
mudah dapat diatur agar menunjuk nilai artinya sama dengan
ke string lain (bukan string &nilai[0]
“INDONESIA”), sedangkan negara o int b[3][4], maka b[3] adalah
adalah array (array menyatakan sama dengan &b[3][0] dan
alamat yang konstan, tak dapat b[0] adalah sama dengan
diubah). Jadi, ada beberapa cara &b[0][0].
penulisan ekspresi variabel yang Bisa disimpulkan bahwa sebuah
menghasilkan sebuah address variabel array yang dituliskan
memory, di antaranya adalah : tanpa kurung siku indexnya adalah
1. Menuliskan ampersand di depan sama dengan address memory
sebuah variabel 'normal' dari elemen pertama array
Misalnya a dideklarasikan sebagai tersebut.
sebuah variabel normal, maka &a 1. Hubungan antara pointer dan
akan menghasilkan adress array. Suatu nama array yang
memory dari variabel a tersebut ditulis tanpa dengan indeksnya
2. Menuliskan nama dari sebuah menunjukkan alamat elemen
variabel pointer pertama dari array (versi 1).
Misalnya a dideklarasikan sebuah
variabel sebagai int *a, maka a

Program 13.17
#include <conio.h> 
#include <iostream>  
 
using namespace std; 
 
main() 

  static int tgl_lahir[] = {16, 4, 1974}; 
  int *ptgl; 
  cout <<"\nNilai yang ditunjuk oleh ptgl = "<< *ptgl; 
  cout <<"\nNilai dari tgl_lahir[0] = "<< tgl_lahir[0]; 
  getch(); 
  return 0;  
453
Bahasa Pemrograman Pointer

2. Hubungan antara pointer dan array. Suatu nama array yang ditulis
tanpa dengan indeksnya menunjukkan alamat elemen pertama dari
array (versi 2).

Program 13.18
#include <conio.h> 
#include <iostream>  
 
using namespace std; 
 
main() 

  static int tgl_lahir[] = {16, 4, 1974}; 
  int *ptgl, i; 
  ptgl = tgl_lahir; 
  printf("Nilai yang ditunjuk oleh ptgl = %d\n", *ptgl); 
  for (i=0; i<3; i++) 
  printf("Nilai dari tgl_lahir[i] = %d\n", *(ptgl+i)); 
  getch(); 
  return 0;  

3. Hubungan antara pointer dan array. Suatu nama array yang ditulis
tanpa dengan indeksnya menunjukkan alamat elemen pertama dari
array (versi 3).

Program 13.19
#include <conio.h> 
#include <iostream>  
 
using namespace std; 
 
main() 

  static int tgl_lahir[] = {16, 4, 1974}; 
  int i; 
  int *ptgl; 
  ptgl = tgl_lahir; 
  printf("Nilai yang ditunjuk oleh ptgl = %d\n", *ptgl); 
  for (i=0; i<3; i++) 
  printf("Nilai dari tgl_lahir[i] = %d\n", *ptgl++); 
454
Pointer Bahasa Pemrorgraman

  getch(); 
  return 0;  

Analisis dan jelaskan perbedaan antara aplikasi pada nomor 1, 2 dan 3

4. Menukarkan isi 2 string tanpa pemakaian pointer.

Program 13.20
#include <stdio.h> 
#include <string.h> 
#define PANJANG 20 
 
char nama1[PANJANG] = "AHMAD"; 
char nama2[PANJANG] = "RIFDA"; 
 
main() 

  char namax[PANJANG]; 
  puts("SEMULA : "); 
  printf("nama1 ‐‐> %s\n", nama1); 
  printf("nama2 ‐‐> %s\n", nama2); 
  strcpy(namax, nama1); 
  strcpy(nama1, nama2); 
  strcpy(nama2, namax); 
  puts("KINI : "); 
  printf("nama1 ‐‐> %s\n", nama1); 
  printf("nama2 ‐‐> %s\n", nama2); 

5. Menukarkan isi 2 string dengan fasilitas pointer.

Program 13.21. Menukarkan isi 2 string dengan fasilitas pointer


#include <stdio.h> 
#include <string.h> 
char *nama1 = "AHMAD"; 
char *nama2 = "RIFDA"; 
 
main() 

  char *namax; 
  puts("SEMULA : "); 
  printf("nama1 ‐‐> %s\n", nama1); 

455
Bahasa Pemrograman Pointer

  printf("nama2 ‐‐> %s\n", nama2); 
  namax = nama1; 
  nama1 = nama2; 
  nama2 = namax; 
  puts("KINI : "); 
  printf("nama1 ‐‐> %s\n", nama1); 
  printf("nama2 ‐‐> %s\n", nama2); 

Analisis dan jelaskan perbedaan pada array dan variable index


antara aplikasi pada nomor 4 pada pointer, untuk menunjuk
dengan nomor 5 suatu nilai data di dalam suatu
6. Mengamati persamaan variable array.
penggunaan variable index

Program13.22.
main() 

  int nilai[10]={86,75,98,66,56,76,80,95,70,60}; 
  int index, *ip; 
  printf("Mencetak menggunakan array\n"); 
  printf("Daftar nilai siswa\n\n"); 
  for(index=0; index<10; index++) 
  printf("%3d",nilai[index]); 
  puts("\n"); 
  printf("Mencetak menggunakan pointer dan index\n"); 
  printf("Daftar nilai siswa\n\n"); 
  for(index=0; index<10; index++) 
  printf("%3d",*(nilai+index)); 
  puts("\n"); 
  printf("Mencetak menggunakan pointer\n"); 
  printf("Daftar nilai siswa\n\n"); 
  ip=&nilai; 
  for(index=0; index<10; index++) 
  printf("%3d",*ip++); 

13.6.3. Array dari Pointer (Array of Pointer)


Suatu array bisa digunakan char *namahari[10]; 
untuk menyimpan sejumlah pointer.
Sebagai contoh:
456
Pointer Bahasa Pemrorgraman

merupakan pernyataan untuk {“Senin”, 


mendeklarasikan array pointer. Array “Selasa”, 
namahari terdiri dari 10 elemen “Rabu”, 
berupa pointer yang menunjuk ke “Kamis”, 
data bertipe char. “Jumat”, 
“Sabtu”, 
“Minggu”}; 

Perhatikan contoh dibawah ini,

namahari[0] berisi alamat yang 
menunjuk ke string “Senin”. 
namahari[1] berisi alamat yang 
menunjuk ke string “Selasa”. 
namahari[2] berisi alamat yang 
menunjuk ke string “Rabu”. 
dan sebagainya. 
Gambar 13.12. Array pointer
Suatu pointer bisa saja menunjuk ke
Array pointer bisa diinisialisasi pointer lain. Gambar berikut
sewaktu pendeklarasian. Sebagai memberikan contoh mengenai
contoh: pointer menunjuk pointer.

static char *namahari[] = 

Gambar 13.13. Pointer yang menunjuk pointer

Untuk membentuk rantai pointer int *ptr1; 


seperti pada gambar di atas, int **ptr2; 
pendeklarasian yang diperlukan
berupa Perhatikan pada deklarasi di depan:
var_x adalah variabel bertipe int.
int var_x;  ptr1 adalah variabel pointer yang

457
Bahasa Pemrograman Pointer

menunjuk ke data bertipe int. ptr2 diperlukan berupa ptr1  =  &var_x;  


adalah variabel pointer yang Sedangkan supaya ptr2 menunjuk ke
menunjuk ke pointer int. (itulah ptr1, instruksi yang diperlukan adalah 
sebabnya deklarasinya berupa int
**ptr2; ). Agar ptr1 menunjuk ke ptr2 = &ptr1; 
variabel var_x, perintah yang

program 13.23
#include <stdio.h> 
main() 

  static char *days[] = {"Sunday", "Monday", "Tuesday", 
"Wednesday","Thursday",   "Friday", "Saturday"}; 
  int i; 
  for( i = 0; i < 6; ++i ) 
  printf( "%s\n", days[i]); 

Program 13.24. Pointer yang menunjuk ke pointer yang lain.


 
#include <stdio.h> 
main() 

  int a, *b, **c; 
  a = 155; 
  b = &a; 
  c = &b; 
  printf("Nilai a = %d atau %d atau %d\n", a, *b, **c); 
  printf("b = %p = alamat a di memori\n", b); 
  printf("c = %p = alamat b di memori\n", c); 
  printf("alamat c di memori = %p\n", &c); 

Program 13.25. Pointer yang menunjuk ke pointer yang lain.


#include <stdio.h> 
main() 

  int var_x = 273; 
  int *ptr1; 
  int **ptr2; 
  ptr1 = &var_x; 
  ptr2 = &ptr1; 
  printf("Nilai var_x = *ptr1 = %d\n", *ptr1); 
458
Pointer Bahasa Pemrorgraman

  printf("Nilai var_x = **ptr2 = %d\n\n", **ptr2); 
  printf("ptr1 = &var_x = %p\n", ptr1); 
  printf("ptr2 = &ptr1 = %p\n", ptr2); 
  printf(" &ptr2 = %p\n", &ptr2); 

Program 13.26.
#include <stdio.h> 
main() 

  int a, *b, **c; 
  a = 1975; 
  b = &a; 
  c = &b; 
  printf("Nilai a = %d atau %d atau %d\n", a, *b, **c); 
  printf("b = %p = alamat a di memori\n", b); 
  printf("c = %p = alamat b di memori\n", c); 
  printf("alamat c di memori = %p\n", &c); 

13.7. Pointer dalam Fungsi


Pointer dan kaitannya dengan Fungsi di atas dimaksudkan agar
fungsi yang akan dibahas berikut kalau dipanggil, variabel yang
meliputi: Pointer sebagai parameter berkenaan dengan parameter aktual
fungsi dan pointer sebagai keluaran dapat diubah nilainya, masing-
fungsi masing dinaikkan sebesar 2. Contoh
pemanggilan :
13.7.1. Pointer Sebagai
Parameter Fungsi naikkan_nilai(&a, &b); 
Penerapan pointer sebagai
parameter yaitu jika diinginkan agar Perhatikan, dalam hal ini variabel a
nilai suatu variabel internal dapat dan b harus ditulis diawali operator
diubah oleh fungsi yang dipanggil. alamat (&) yang berarti menyatakan
Perhatikan contoh fungsi berikut alamat variabel, sebab parameter
dibawah ini. fungsi dalam pendefinisian berupa
pointer.
void naikkan_nilai (int *x, int *y) 

*x = *x + 2;  13.7.2. Pointer Sebagai Fungsi
*y = *y + 2;  Keluaran
}  Suatu fungsi dapat dibuat agar
keluarannya berupa pointer.
Misalnya, suatu fungsi menghasilkan

459
Bahasa Pemrograman Pointer

keluaran berupa pointer yang menyatakan bahwa keluaran fungsi


menunjuk ke string nama_bulan, nama_bulan() berupa pointer yang
seperti pada contoh berikut. menunjuk ke obyek char (atau string).
Dalam fungsi nama_bulan(), mula-
mula array bernama bulan
char *nama_bulan(int n)  dideklarasikan dan sekaligus
{  diinisialisasi agar menunjuk sejumlah
static char *bulan[]=  string yang menyatakan nama bulan.
{"Kode bulan salah", "Januari",  Di bagian akhir fungsi, pernyataan
"Februari", Maret", 
"April", "Mei", "Juni", "Juli", "Agustus",  return ( (n<1 || n>12) ? bulan[0] : 
"September", "Oktober",  bulan[n] ); 
"Nopember","Desember" 
};  menyatakan bahwa hasil fungsi
berupa pointer yang menunjuk ke
return ( (n<1 | | n>12) ? bulan[0] : 
 string “Kode bulan salah”
bulan[n] ); 
(bulan[0]) jika masukan fungsi n<1

atau n>12
 bulan[n] untuk n yang terletak
Pada definisi fungsi di atas,
antara 1 sampai dengan 12.
char *nama_bulan() 

Program 13.27. Fungsi dengan argumen berupa pointer.


#include <stdio.h> 
void naikkan_nilai(int *x, int *y); 
main() 

int a = 3; 
int b = 7; 
printf("SEMULA : a = %d b = %d\n", a, b); 
naikkan_nilai(&a, &b); 
printf("KINI : a = %d b = %d\n", a, b); 

void naikkan_nilai(int *x, int *y) 

*x = *x + 2; 
*y = *y + 2; 

Program 13.28. Fungsi dengan keluaran berupa pointer yang menunjuk string.
#include <stdio.h> 
char *nama_bulan(int n); 
main() 
460
Pointer Bahasa Pemrorgraman


int bl; 
printf("Bulan 1..12 : "); 
scanf("%d", &bl); 
printf("Bulan ke‐%d adalah %s\n", bl, nama_bulan(bl)); 

char *nama_bulan(int n) 

static char *bulan[] = 

"Kode bulan salah", 
"Januari", 
"Februari", 
"Maret", 
"April", 
"Mei", 
"Juni", 
"Juli", 
"Agustus", 
"September", 
"Oktober", 
"November", 
"Desember" 
}; 
return ((n<1||n>12) ? bulan[0] : bulan[n]); 

Program 13.29. Mengakses isi suatu variabel melalui pointer.


#include <stdio.h> 
 
main() 

  int y, x = 87; /* x & y bertipe int */ 
  int *px; 
  /* var pointer yg menunjuk ke data yang bertipe int */ 
  px = &x; /* px diisi dgn alamat dari variabel x */ 
  y = *px; /* y diisi dgn nilai yang ditunjuk oleh px */ 
  printf("Alamat x = %p\n", &x); 
  printf("Isi px = %p\n", px); 
  printf("Isi x = %d\n", x); 
  printf("Nilai yang ditunjuk oleh px = %d\n", *px); 
  printf("Nilai y = %d\n", y); 

461
Bahasa Pemrograman Pointer

Program 13.30. Mengakses isi suatu pointer dan tipe data yang ditunjuk
variabel melalui pointer. Tipe variabel harus sejenis.

#include <stdio.h> 
main() 

  int *pu; 
  int nu; 
  int u = 1234; 
  pu = &u; 
  nu = *pu; 
  printf("Alamat dari u = %p\n", &u); 
  printf("Isi pu = %p\n", pu); 
  printf("Isi u = %d\n", u); 
  printf("Nilai yang ditunjuk oleh pu = %d\n", *pu); 
  printf("Nilai nu = %d\n", nu); 

Program 13.31. Mengubah isi suatu variabel melalui pointer.


#include <stdio.h> 
main() 

  float d = 54.5f, *pd; 
  printf("Isi d mula‐mula = %g\n", d); 
  pd = &d; 
  *pd += 10; 
  printf("Isi d sekarang = %g\n", d); 

Program 13.32. Hubungan antara menunjukkan alamat elemen pertama


pointer dan array. Suatu nama array dari array (versi 1).
yang ditulis tanpa dengan indeksnya

#include <stdio.h> 
main() 

  static int tgl_lahir[] = {16, 4, 1974}; 
  int *ptgl; 
  printf("Nilai yang ditunjuk oleh ptgl = %d\n", *ptgl); 
462
Pointer Bahasa Pemrorgraman

  printf("Nilai dari tgl_lahir[0] = %d\n", tgl_lahir[0]); 

Program 13.33. Hubungan antara menunjukkan alamat elemen pertama


pointer dan array. Suatu nama array dari array (versi 2).
yang ditulis tanpa dengan indeksnya

#include <stdio.h> 
main() 

  static int tgl_lahir[] = {16, 4, 1974}; 
  int *ptgl, i; 
  ptgl = tgl_lahir; 
  printf("Nilai yang ditunjuk oleh ptgl = %d\n", *ptgl); 
  for (i=0; i<3; i++) 
  printf("Nilai dari tgl_lahir[i] = %d\n", *(ptgl+i)); 

Program 13.34. Hubungan antara menunjukkan alamat elemen pertama


pointer dan array. Suatu nama array dari array (versi 3).
yang ditulis tanpa dengan indeksnya

#include <stdio.h> 
main() 

  static int tgl_lahir[] = {16, 4, 1974}; 
  int i; 
  int *ptgl; 
  ptgl = tgl_lahir; 
  printf("Nilai yang ditunjuk oleh ptgl = %d\n", *ptgl); 
  for (i=0; i<3; i++) 
  printf("Nilai dari tgl_lahir[i] = %d\n", *ptgl++); 

Program 13.35. Menukarkan isi 2 string tanpa pemakaian pointer.

#include <stdio.h> 
#include <string.h> 
#define PANJANG 20 
char nama1[PANJANG] = "GATUTKACA"; 
char nama2[PANJANG] = "HANOMAN"; 
 
main() 
463
Bahasa Pemrograman Pointer


  char namax[PANJANG]; 
  puts("SEMULA : "); 
  printf("nama1 ‐‐> %s\n", nama1); 
  printf("nama2 ‐‐> %s\n", nama2); 
  strcpy(namax, nama1); 
  strcpy(nama1, nama2); 
  strcpy(nama2, namax); 
  puts("KINI : "); 
  printf("nama1 ‐‐> %s\n", nama1); 
  printf("nama2 ‐‐> %s\n", nama2); 

Program 13.36. Menukarkan isi 2 string dengan fasilitas pointer.


#include <stdio.h> 
#include <string.h> 
 
char *nama1 = "GATUTKACA"; 
char *nama2 = "HANOMAN"; 
main() 

  char *namax; 
  puts("SEMULA : "); 
  printf("nama1 ‐‐> %s\n", nama1); 
  /* nama1 adl pointer yg menunjuk ke string GATUTKACA*/ 
  printf("nama2 ‐‐> %s\n", nama2); 
  /* nama2 adl pointer yg menunjuk ke string HANOMAN*/ 
  namax = nama1; 
  nama1 = nama2; 
  nama2 = namax; 
  puts("KINI : "); 
  printf("nama1 ‐‐> %s\n", nama1); 
  printf("nama2 ‐‐> %s\n", nama2); 

Program 13.37. Pointer yang menunjuk ke pointer yang lain.


#include <stdio.h> 
main() 

  int a, *b, **c; 
  a = 155; 
  b = &a; 
  c = &b; 

464
Pointer Bahasa Pemrorgraman

  printf("Nilai a = %d atau %d atau %d\n", a, *b, **c); 
  printf("b = %p = alamat a di memori\n", b); 
  printf("c = %p = alamat b di memori\n", c); 
  printf("alamat c di memori = %p\n", &c); 

Program 13.38. Pointer yang menunjuk ke pointer yang lain.


#include <stdio.h> 
main() 

  int var_x = 273; 
  int *ptr1; 
  int **ptr2; 
  ptr1 = &var_x; 
  ptr2 = &ptr1; 
  printf("Nilai var_x = *ptr1 = %d\n", *ptr1); 
  printf("Nilai var_x = **ptr2 = %d\n\n", **ptr2); 
  printf("ptr1 = &var_x = %p\n", ptr1); 
  printf("ptr2 = &ptr1 = %p\n", ptr2); 
  printf(" &ptr2 = %p\n", &ptr2); 

Program 13.39. Fungsi dengan argumen berupa pointer.


#include <stdio.h> 
void naikkan_nilai(int *x, int *y); 
main() 

  int a = 3; 
  int b = 7; 
  printf("SEMULA : a = %d b = %d\n", a, b); 
  naikkan_nilai(&a, &b); 
  printf("KINI : a = %d b = %d\n", a, b); 

void naikkan_nilai(int *x, int *y) 

  *x = *x + 2; 
  *y = *y + 2; 

Program 13.40. Fungsi dengan keluaran berupa pointer yang menunjuk string.
#include <stdio.h> 
char *nama_bulan(int n); 

465
Bahasa Pemrograman Pointer

 
main() 

  int bl; 
  printf("Bulan 1..12 : "); 
  scanf("%d", &bl); 
  printf("Bulan ke‐%d adalah %s\n", bl, nama_bulan(bl)); 

char *nama_bulan(int n) 

  static char *bulan[] = 
  { 
    "Kode bulan salah", 
    "Januari", 
    "Februari", 
    "Maret", 
    "April", 
    "Mei", 
    "Juni", 
    "Juli", 
    "Agustus", 
    "September", 
    "Oktober", 
    "November", 
    "Desember" 
  }; 
  return ((n<1||n>12) ? bulan[0] : bulan[n]); 

13.8. Fungsi Pointer ke Static Class Member Function


penggunaan function pointer function yang berada dalam sebuah
pada C++ dibatasi, yaitu function class (class member function) kecuali
pointer tidak boleh menunjuk pada function tersebut berjenis static.

class A 

    private :  
    public  : static void WriteString(char* String); 
}; 
 

466
Pointer Bahasa Pemrorgraman

void A::WriteString(char* String) 

    printf("A::WriteString() : %s",String); 

 
class B 

    private : 
    public  : void Func(void (*Writer)(char* str)); 
}; 
 
void B::Func(void (*Writer)(char* str)) 

    Writer("class B writing \"hello...!\""); 

 
int main(void) 

    A* a = new A; 
    B* b = new B; 
     
    b‐>Func(a‐>WriteString); 
     
    delete a; 
    delete b; 

Namun terkadang yang menjadi memiliki akses ke member dari class,


masalah adalah, sebuah member sebagai contoh bila kita rubah class
function yang berjenis static, tidak A menjadi :

class A 

    private : int privatenumber; 
    public  : static void WriteString(char* String); 
}; 
 
void A::WriteString(char* String) 

    printf("A::privatenumber = %d",privatenumber); 
    printf("A::WriteString() : %s",String); 

467
Bahasa Pemrograman Pointer

maka compiler menyatakan error, "static") maka fungsi WriteString tidak


bahwa fungsi static tidak dapat dapat di pass melalui argument ke
mengakses member dari class A. B::func (karena function pointer tidak
Namun bila kita rubah fungsi boleh menunjuk fungsi yang
WriteString menjadi non-static merupakan member class)
(dengan menghapus keyword

13.10.Fungsi Pointer pada Class anggota Fungsi Non-static


Salah satu cara agar kita dapat A::WriteString memerlukan akses ke
membuat function pointer yang private member dari A yaitu
menunjuk ke non-static class mengakses int A::Privatenumber,
member function bekerja adalah maka solusinya kita pass object dari
dengan cara memberikan object dari class A ke argumen dari
class yang membernya ingin diakses. A::WriteString kode yang sebelumnya
Pada masalah sebelumnya dirubah menjadi :

class A 

    private : int privatenumber; 
    public  : static void WriteString(char* String,A* Self); 
}; 
 
void A::WriteString(char* String,A* Self) 

    printf("A::privatenumber = %d\n",Self‐>privatenumber); 
    printf("A::WriteString() : %s",String); 

 
class B 

    private : 
    public  : void Func(void (*Writer)(char* str,A* Self),A* NeedToPass); 
}; 
 
void B::Func(void (*Writer)(char* str,A* Self),A* NeedToPass) 

    Writer("class B writing \"hello...!\"",NeedToPass); 

 
int main(void) 

468
Pointer Bahasa Pemrorgraman

    A* a = new A; 
    B* b = new B; 
     
    b‐>Func(a‐>WriteString,a); 
     
    delete a; 
    delete b; 

Terdapat cara lain menggunakan aplikasi fungsi, sehingga anda


member function pointer selain akan selalu memerlukan tanda
dengan cara di atas. Beberapa hal kurung untuk menggunakan
yang harus diperhatikan adalah: member function pointer.
 Deklarasi Member function harus  Assignment ke member function
dengan menggunakan pointer harus selalu
operator ::* menggunakan operator &. Hal ini
 Member function pointer berbeda dengan function pinter
memerlukan objek atau pointer biasa dimana operator & adalah
ke objek supaya dapat optional. Beberapa kompiler
digunakan. akan menerima konstruk
 Memanggil member function assignment tanpa operator &,
pointer menggunakan operator .* tapi itu tidak standard. Kompiler
atau ->* , tergantung apakah yang sesuai dengan standard
digunakan dengan objek (atau C++98 akan mereject
reference) atau dengan pointer. assignment member function
Yang menjadi masalah di sini pointer tanpa operator &. untuk
adalah kedua operator tersebut lebih jelasnya anda dapat
memiliki prioritas yang lebih melihat contoh program di
rendah daripada operator bawah:

#include <iostream> 
 
using std::cout; 
using std::endl; 
 
class SomeMumboJumboClass{ 
  int i; 
public: 
  void a_method(); 
  SomeMumboJumboClass(int p):i(p){} 
}; 
 
void SomeMumboJumboClass::a_method(){ 

469
Bahasa Pemrograman Pointer

  cout << "the mumbo jumbo class has a member variable with value = "<< i<< 
endl; 

 
typedef void (SomeMumboJumboClass::* MemberFunctionptr)() ; // ini cara 
mendekrarasikan typedef dari non‐static member function 
                                                             
int main(){ 
  SomeMumboJumboClass c(2);  // deklarasikan sebuah objek 
 
  void (SomeMumboJumboClass::* the_mem_fun_ptr)();  
  the_mem_fun_ptr = &SomeMumboJumboClass::a_method;       
  c.a_method(); // pemanggilan tanpa function pointer 
  (c.*the_mem_fun_ptr)(); // pemanggilan dengan function pointer 
 
  SomeMumboJumboClass* d = new SomeMumboJumboClass(3); // ini adalah 
pointer ke objek 
  d‐>a_method(); // pemanggilan normal 
  (d‐>* the_mem_fun_ptr)(); // pemanggilan dengan pointer fungsi 
 
  MemberFunctionptr the_mem_fun_ptr2 = 
&SomeMumboJumboClass::a_method; // deklarasi dan definisi member function 
pointer 
    (c.* the_mem_fun_ptr2)(); // bisa digunakan seperti ini 
  (d‐>* the_mem_fun_ptr2) (); // atau seperti ini 
 
  delete d; 

13.11. Soal Latihan


Jawablah soal latihan dibawah ini dengan baik dan benar.
1. Apa yang dimaksud dengan pointer pada bahasa C++
2. Gambarkan pengaturan memori pemrograman menggunakan pointer
3. Bagaimana cara mendeklarasikan pointer
4. Bagaimana menginisialisasi pointer
5. Buatlah pemrograman string menggunakan pointer
6. Buatlah program yang menggunakan fungsi pada pointer
7. Bagaimana cara mengubah dan mengisi isi pointer
8. Apakah perbedaan array dan pointer

470
Class Bahasa Pemrorgraman
 

BAB 14
CLASS

14.1. Obyek dan Class


14.2. Tipe Class
14.3. Deklarasi Class
14.4. Struktur dan kelas
14.5. Constructor dan destructor
14.6. Overloading Constructor
14.7. Menulis Class
14.8. Reference this
14.9. Overloading Method
14.10. Access Modifier
14.11. Contoh Program Class
14.12. Soal Latihan

 
 

14.1. Obyek dan Class


Dalam C atau bahasa struct Time { 
pemrograman prosedural lainnya, int hour;      
pemrogramannya berorientasi // nilai jam 0 ‐ 23 
kepada aksi, sedangkan int minute;    
pemrograman C++ cenderung // nilai menit 0 ‐ 59 
berorientasi pada obyek. Disamping int second;    
itu, unit program dalam C adalah // nilai detik 0 ‐ 59 
fungsi, tetapi di dalam C++, unit
}; 
program adalah kelas (class) dimana
suatu obyek (object) secara
Definisi Time ini terdiri dari tiga
mendekati kenyataan dapat
buah anggota data (data members)
diciptakan.
yang semuanya bertipe int, yaitu
Kelas di dalam C++ merupakan
hour, minute, dan second. Anggota
pengembangan dari notasi struct di
struktur dapat terdiri dari berbagai
dalam C biasa, yaitu struktur untuk
macam tipe, kecuali tipe Time itu
mendefinisikan elemen-elemen data.
sendiri. Berikut adalah contoh-contoh
Misalnya didefinisikan data tentang
deklarasi variabel dan akses anggota
waktu yang terdiri dari jam, menit,
data dari struktur
dan detik sebagai berikut:
Time timeObyek, timeArray[10], 
471
 
Bahasa Pemrograman Class
 
*timePtr;  sebagai anggota data (data
cout << timeObyek.hour;     members) dan sifat atau operasi-
// mengakses data hour dari obyek  operasi atau prosedur-prosedur yang
cout << timePtr ‐> hour;      direpresentasikan sebagai fungsi
// mengakses data hour dari obyek   anggota (member functions). Fungsi
// yang ditunjuk oleh pointer timePtr  anggota sering disebut dengan
metode pada bahasa pemrograman
Untuk melakukan proses berorientasi objek lainnya dan
pengolahan terhadap obyek data ini digunakan untuk memberi pesan
diperlukan fungsi-fungsi yang ditulis pada obyek yang bersangkutan.
secara terpisah dari definisi Setiap anggota dari obyek ini
strukturnya. Sebagai contoh, fungsi dikelompokkan berdasarkan sifat
berikut disusun untuk menuliskan akses terhadap anggotaanggotanya,
obyek Time dengan bentuk baik dari dalam obyek itu sendiri
hh:mm:ss. maupun dari obyek lainnya. Ada tiga
sifat yang dapat diberikan, yaitu
void printTime (const Time &t)  public, private, dan protected.
Perhatikan contoh berikut:

cout << (t.hour < 10 ? "0" : "") << 
class Time { 
t.hour << ":" 
public: 
<< (t.minute < 10 ? "0" : "") << 
Time();        
t.minute << ":" 
// default constructor 
<< (t.second < 10 ? "0" : "") << 
void setTime(int, int, int);    
t.second << ":" ; 
// member function 

voit print(); 
~Time();        
Pada contoh ini terlihat adanya
pemisahan antara data dan // destructor 
prosedur/fungsi, yang berbeda private: 
dengan konsep pemrograman int hour;        
beorientasi obyek dimana antara // data member 
keduanya dibungkus ke dalam satu int minute; 
kesatuan dengan menggunakan tipe int second; 
class. Pembungkusan }; 
(encapsulation) inilah yang
merupakan salah satu ciri utama dari Anggota kelompok private hanya
pemrograman berorientasi objek. dapat diakses oleh fungsi anggota
dari kelas itu sendiri dan kelas lain
yang mempunyai hubungan friend
14.2. Tipe Class (akan dijelaskan pada bab
Kata kunci class dalam C++ berikutnya). Hal ini berbeda dengan
digunakan untuk memodelkan suatu kelompok public yang dapat diakses
obyek terdiri dari dua anggota, yaitu dari bagian-bagian lainnya dari
atribut yang direpresentasikan program, sedangkan kelompok

472
 
Class Bahasa Pemrorgraman
 
protected hanya dapat diakses oleh { 
fungsi anggota dari kelas yang hour = minute = second = 0; 
bersangkutan dan kelas-kelas lain } 
yang menjadi turunannya. void Time :: setTime( int h = 0, int m = 0, 
Pembatasan akses itu int s = 0 ) 
merupakan information hiding yang { 
berguna antara lain jika representasi hour = h; 
data dari kelas berubah, hanya fungsi
minute = m; 
anggota (bukan program dari
second = s; 
pengguna) yang perlu diambil, dan
jika ada kesalahan dalam manipulasi } 
anggota data dari kelas, hanya fungsi  
anggota yang perlu di-debug, bukan voit Time :: print() 
seluruh program. { 
Fungsi anggota yang namanya cout << (hour < 10 ? "0" : "")  
sama dengan nama kelas disebut << hour << ":" 
default constructor, dan fungsi << (minute < 10 ? "0" : "")  
anggota yang namanya terdiri tkita << minute << ":" 
tilde (“~“) diikuti dengan nama kelas << (second < 10 ? "0" : "")  
disebut destructors. Constructor akan << second << ":" ; 
secara otomatis dipanggil oleh } 
kompilator untuk inisialisasi obyek,
sedangkan destructor akan secara Operator “::“ adalah scope-
otomatis dipanggil oleh kompilator operator, yang menunjukkan bahwa
untuk dealokasi memori. Nama kelas fungsi yang dituliskan di belakangnya
akan berlaku sebagai kata kunci merupakan anggota dari kelas yang
penentu untuk suatu tipe data baru, ditulis di depannya. Dengan
misalnya dengan kelas Time tersebut demikian, misalnya void Time ::
dapat dibuat deklarasi variabel setTime ( h = 0, m = 0, s = 0 )
sebagai berikut: menunjukkan bahwa fungsi setTime
merupakan anggota dari kelas Time.
Time timeObyek1,   Suatu fungsi dalam C++ dapat
timeObyek2;  dipanggil dengan nol atau lebih
argumen, seperti contoh Time() yang
Pada saat deklarasi inilah tidak mempunyai argumen, dan
diproses fungsi anggota Time() yang setTime ( h = 0, m = 0, s = 0 )
merupakan default constructor dari mempunyai tiga argumen dengan
kelas ini. Namun demikian, kelas masing-masing mempunyai nilai
tersebut belum dapat digunakan default. Artinya, fungsi itu dapat
karena implementasi setiap fungsi dipanggil dengan beberapa cara
anggota belum dibuat. Perhatikan seperti contoh berikut:
contoh implementasi berikut dibawah
ini: setTime( 10, 30, 25 );      
// argumen h=10, m=30, s=25 
Time :: Time()  setTime( 10, 30);      

473
 
Bahasa Pemrograman Class
 
// argumen h=10, m=30, s=0   Anggota-anggota data (data
setTime();         members) yang merupakan
// argumen h=0, m=0, s=0  representasi dari kelas. Suatu
kelas dapat mempunyai nol atau
Dengan definisi dan deklarasi kelas lebih data member dengan tipe
Time yang telah dibuat, maka dapat apa saja.
digunakan sebagai tipe baru seperti  Fungsi-fungsi anggota (members
pada program berikut (misalnya function) yaitu operasi-operasi
definisi dan deklarasi kelas Time yang dapat diterapkan pada
telah disimpan pada file time.h): obyek-obyek dari kelas itu.
Sebuah kelas dapat mempunyai
#include <iostream>  nol atau lebih fungsi anggota.
#include "time.h"   Tingkat akses.
  Setiap anggota suatu kelas dapat
main() {  ditentukan tingkat aksesnya
Time t1;  sebagai private, protected atau
t1.setTime(10,30,25);     public. Tingkat-tingkat ini
// obyek t1 memiliki hour=10,  mengontrol akses ke anggota
kelas. Biasanya representasi kelas
minute=30, second=25 
bersifat private, sedang operasi-
t1. 
operasinya bersifat public.
Spesifikasi private/public ini
Mekanisme kelas (class)
membentuk information hidding.
memungkinkan pengguna
 Nama kelas yang berlaku sebagai
mendefinisikan tipe data abstrak
type-specifier.
(ADT). Suatu kelas mempunyai
empat atribut, yaitu:

14.3. Deklarasi Class


Class adalah metode logical ...  
untuk organisasi data dan fungsi } object_name;  
dalam struktur yang sama. Class Dimana class_name adalah
dideklarasikan menggunakan nama class(user defined type) dan
keyword class, yang secara field optional object_name adalah
fungsional sama dengan keyword satu atau beberapa identifier objek
struct, tetapi dengan kemungkinan yang valid. Body dari deklarasi
penyertaan fungsi sebagai anggota, berisikan members, yang dapat
formatnya sebagai berikut : berupa data ataupun deklarasi fungsi,
dan permission labels (optional),
class class_name {   dapat berupa satu dari tiga keyword
permission_label_1:   berikut : private:, public: atau
member1;   protected:. Digunakan untuk
permission_label_2:   menentukan batasan akses terhadap
member2;   members yang ada :

474
 
Class Bahasa Pemrorgraman
 
1. private , anggota class dapat Deklarasi class CRectangle dan
diakses dari danggota lain pada object bernama rect. Class ini berisi
kelas yang sama atau dari class empat anggota: dua variable bertipe
"friend". int (x and y) pada bagian private
2. protected , anggota dapat (karena private adalah default
diakses dari anggota class yang permission) dan dua fungsi pada
sama atau class friend , dan juga bagian public : set_values() dan
dari anggota class area(), dimana hanya dideklarasikan
turunannya(derived). propotype_nya.
3. public , anggota dapat diakses Perhatikan perbedaan antara
dari class manapun. nama classdan nama object. Pada
contoh sebelumnya CRectangle
Default permission label : private adalah nama class(contoh, user-
Contoh : defined type), dan rect adalah object
dari tipe CRectangle. Sama halnya
class CRectangle {   dengan deklarasi berikut :
int x, y;  
public:   int a;  
void set_values (int,int);  
int area (void);   int adalah nama class (type)
} rect;   dan a adalah nama
object(variable).

Program 14.1
#include <conio.h> 
#include <iostream> 
using namespace std; 
 
class CRectangle {  
int x, y;  
public:  
void set_values (int,int);  
int area (void) {return (x*y);}  
};  
 
void CRectangle::set_values (int a, int b) {  
x = a;  
y = b;  
}  
int main () {  
CRectangle rect;  
rect.set_values (3,4);  
cout << "area: " << rect.area();  
getch(); 
475
 
Bahasa Pemrograman Class
 
return 0;  
}  

Keluaran program diatas adalah sebagai berikut:


area: 12  

Hal baru dari contoh diatas (::) menspesifikasikan class dimana


adalah operator :: dari lingkup yang anggota yang dideklarasikan berada,
disertakan dalam pendefinisian memberikan scope properties yang
set_values(). Digunakan untuk sama seperti jika dideklarasikan
mendeklarasikan anggota dari class secara langsung dalam class.
diluar class tersebut. Scope operator

Program 14.2
#include <conio.h> 
#include <iostream> 
 
using namespace std; 
  
class CRectangle {  
int x, y;  
public:  
void set_values (int,int);  
int area (void) {return (x*y);}  
};  
 
void CRectangle::set_values (int a, int b) {  
x = a;  
y = b;  

 
int main () {  
CRectangle rect, rectb;  
rect.set_values (3,4);  
rectb.set_values (5,6);  
cout << "rect area: " << rect.area() << endl;  
cout << "rectb area: " << rectb.area() << endl;  
getch(); 
return 0;  
}  

Keluaran program diatas adalah sebagai berikut:


rect area: 12 rectb area: 30  

476
 
Class Bahasa Pemrorgraman
 
Perhatikan pemanggilan }; 
rect.area() tidak memberikan hasil
yang sama dengan pemanggilan
rectb.area(). Ini disebabkan karena Class dapat mendefinisikan data
objek dari class CRectangle member berupa reference ke tipe
mempunyai variable sendiri, x dan y, dirinya, perhatikan contoh dibawah
dan fungsi set_value() dan area(). ini:
Class terdiri dari dua bagian,
yaitu: Class head yaitu kata kunci
class diikuti oleh nama kelas dan class linkScreen { 
Class body yaitu class yang diapit screen window ; 
kurung kurawal { }, diikuti tkita titik linkScreen *next ; 
koma atau daftar deklarasi. Misalnya: linkScreen *prev ; 
}; 
class screen (/*……….*/) ; 
class screen (/*……….*/) s1 , s2 ;  Member functions dari suatu kelas
tidak dideklarasikan di dalam class
Dalam class body ditentukan body. perhatikan contoh dibawah ini:
data members, member function dan
tingkat-tingkat dari information
hidding. Deklarasi untuk data class Screen { 
members sama dengan deklarasi  
untuk variabel, kecuali bahwa Public : 
inisialisasi eksplisit tidak
void home ( ) { cursor = scr ; } 
diperbolehkan.
void move ( int, int ) ; 
Perhatikan contoh dibawah ini:
char get ( ) { return *cusor ;} 
class screen {  char get (int , int ) ; 
// height dan width menyatakan jumlah  void checkRange ( int , int ) ; 
kolom  ……… 
//crusor menunjukkan posisi screen  }; 
sekarang 
// scr menunjuk ke array height*width 
Member function yang didefinisikan di
 
dalam class-body secara otomatis
short height, width ;     dianggap inline, dan member function
// menyatakan jumlah kolom  yang lebih dari satu atau dua baris
char *crusor ;       sebaiknya didefinisikan di luar class-
// posisi screen saat ini  body. perhatikan contoh dibawah ini
char scr ;      
// menunjuk ke array heightwidth 

477
 
Bahasa Pemrograman Class
 
Program 14.3
#include "screen.h" 
#include <iostream.h> 
#include <stdlib.h> 
 
using namespace std; 
 
void screen :: checkRange (int row , int col ) // validasi koordinat 

     if (row < 1 || row > height || col < 1 || col > width )  
     { 
         cerr << "Koordinat screen ( " << row << ", "<< col << " ) keluar batas \n " ; exit (‐
1); 
     } 

Member function yang didefinisikan di } 


luar class body, jika ingin dibuat inline
harus secara eksplisit. perhatikan
contoh dibawah ini:
Member function dibedakan dari
inline void screen :: move ( int r , int c )  fungsi-fungsi biasa dalam hal-hal:
// memindahkan cursor ke posisi (r,c)   Member function punya hak akses
  penuh ke anggota-anggota kelas
{  yang bersifat public maupun
       clockRange (r,c) ;         private. Pada umumnya, fungsi-
// koordinat sah ?  fungsi biasa dapat di akses hanya
       int row = (r‐1) *width ;  oleh anggota-anggota kelas yang
       cursor = ser + row + c‐1 ;  public. Tentu saja pada umumnya
}  member functions suatu kelas
tidak mempunyai hak akses ke
inline void screen :: move ( int r , int c )  
anggota-anggota non public dari
// memindahkan cursor ke posisi (r,c) 
kelas-kelas lainnya.
 
 Member function didefinisikan
{  dalam scope dari kelasnya, fungsi-
       clockRange (r,c) ;         fungsi biasa didefinisikan dalam
// koordinat sah ?  scope file.
       int row = (r‐1) *width ; 
       cursor = ser + row + c‐1 ; 

478
 
Class Bahasa Pemrorgraman
 
14.4. Struktur dan kelas
Dalam C++, tipe data struktur struktur kotak menjadi lebih jelas
yang dideklarasikan dengan kata bentuknya.
kunci struct, dapat mempunyai
komponen dengan sembarang tipe struct tkotak 
data, baik tipe data dasar maupun { 
tipe data turunan, termasuk fungsi. double panjang; 
Dengan kemampuan ini, tipe data double lebar; 
struktur menjadi sangat berdaya void SetUkuran(double pj, double lb) 
guna. { 
Misalnya, pada masalah ketika panjang = pj; 
kita ingin membentuk tipe data
lebar = lb; 
struktur yang namanya kotak. Maka
}; 
dapat dideklarasikan sebagai berikut:
}; 
struct tkotak  tkotak kotak; 

dengan tipe struktur kotak seperti itu,
double panjang; 
untuk memberi nilai panjang dan
double lebar; 
lebar hanya dengan memanggil
};  fungsi SetUkuran()
tkotak kotak; 
kotak.SetUkuran(10,7); 
Untuk memberi nilai ukuran kotak
tersebut, kita dapat menggunakan Selain punya ukuran panjang
perintah-perintah ini: dan lebar, kotak juga mempunyai
keliling dan luas. Dengan demikian,
kotak.panjang = 10;  kita dapat memasukkan fungsi untuk
kotak.lebar = 7;  menghitung keliling dan luas ke
dalam struktur kotak. Sebagai
Untuk memberi nilai panjang dan catatan, bahwa definisi fungsi yang
lebar kotak, salah satu caranya menjadi anggota struktur dapat
adalah seperti diatas. Cara lain untuk ditempatkan di luar tubuh struktur.
memberi nilai panjang dan lebar Dengan cara ini maka deklarasi
adalah dengan membentuk suatu struktur kotak menjadi seperti berikut:
fungsi. Karena fungsi ini hanya
digunakan untuk memberi nilai data struct tkotak 
panjang dan lebar suatu kotak, { 
tentunya fungsi ini khusus milik objek double panjang; 
kotak, sehingga harus dianggap
double lebar; 
sebagai truktur kotak. C++ sebagai
void SetUkuran(double pj, double lb); 
bahasa pemrograman dapat
mendefinisikan anggota tipe struktur double Keliling(); 
yang berupa fungsi. Dengan double Luas(); 
menambah fungsi tersebut, maka }; 
tkotak kotak; 

479
 
Bahasa Pemrograman Class
 
Class merupakan struktur data dengan struktur. Untuk lebih jelasnya
dari obyek. Untuk menjelaskan mengenai keduanya perhatikan
tentang class, lihat perbandingannya contoh program di bawah ini:

Program 14.4
#include <conio.h> 
#include <iostream> 
#include <string.h> 
 
using namespace std; 
 
struct siswaSMK 

  char nis[12]; 
  char nama[25]; 
  int umur; 
}; 
 
void main() 

  siswaSMK siswakls3; 
  strcpy(siswakls3.nis, "95514060"); 
  strcpy(siswakls3.nama, "Suprapto"); 
  siswakls3.umur = 20; 
  cout << siswakls3.nis << endl; 
  cout << siswakls3.nama << endl; 
  cout << siswakls3.umur << endl; 
  getch(); 
  return 0;  

Setelah program di atas dicompile, sehingga program menjadi seperti


error tidak ada. Berikutnya struktur di berikut dibawah ini:
atas kita ganti dengan class,

Program 14.5
#include <conio.h> 
#include <iostream> 
#include <string.h> 
 
using namespace std; 
 
class siswaSMK 

480
 
Class Bahasa Pemrorgraman
 

  char nis[12]; char nama[25]; 
  int umur; 
}; 
 
void main() 

  siswaSMK siswakls3; 
  strcpy(siswakls3.nis, "95514060"); 
  strcpy(siswakls3.nama, "Suprapto"); 
  siswakls3.umur = 20; 
  cout << siswakls3.nis << endl; 
  cout << siswakls3.nama << endl; 
  cout << siswakls3.umur << endl; 
  getch(); 
  return 0;  

Setelah program di atas di dengan struktur. Agar program di


compile, ternyata error muncul. Error atas dapat dicompile, ditambahkan
tersebut muncul karena class tidak perintah public diikuti dengan tkita
dikenal dalam main(). Kesalahan ini titik dua (:), sehingga programnya
sekaligus menunjukkan perbedaan menjadi:

Program 14.6
#include <conio.h> 
#include <iostream> 
#include <string.h> 
 
using namespace std; 
 
class siswaSMK 

  char nis[12]; char nama[25]; 
  int umur; 
}; 
 
void main() 

  siswaSMK siswakls3; 
  strcpy(siswakls3.nis, "95514060"); 
  strcpy(siswakls3.nama, " suprapto"); 
  siswakls3.umur = 20; 

481
 
Bahasa Pemrograman Class
 
  cout << siswakls3.nis << endl; 
  cout << siswakls3.nama << endl; 
  cout << siswakls3.umur << endl; 
  getch(); 
  return 0;  

Perintah PUBLIC menyatakan termasuk access specifier (penentu


bahwa perintah-perintah yang ada di akses). Selain PUBLIC, terdapat
bawahnya dapat diakses diluar class. perintah lain yang termasuk access
Perintah PUBLIC merupakan specifier, yaitu PRIVATE.

Program 14.7
include <iostream> 
#include <conio.h> 
#include <string.h> 
 
using namespace std; 
 
class siswaSMK 
{ private: 
  char nis[12]; 
  char nama[25]; 
  int umur; 
}; 
 
int main() 

  siswaSMK siswakls3; 
  strcpy(siswakls3.nis, "95514060"); 
  strcpy(siswakls3.nama, "suprapto"); 
  siswakls3.umur = 20; 
  cout << siswakls3.nis << endl; 
  cout << siswakls3.nama << endl; 
  cout << siswakls3.umur << endl; 
  getch(); 
  return 0;  

Setelah dicompile, error yang pengertian bahwa perintah yang ada


sama dengan sebelumnya muncul dibawahnya hanya dapat diakses
yaitu class tidak dapat diakses di dalam class tersebut, yang dalam hal
main(). Perintah PRIVATE memberi ini adalah class siswaSMK. variabel

482
 
Class Bahasa Pemrorgraman
 
nis, nama, dan umur dalam class Selain data anggota, kita juga dapat
siswaSMK disebut data anggota. menambahkan fungsi anggota.

Program 14.7
#include <iostream> 
#include <conio.h> 
#include <string.h> 
 
using namespace std; 
 
class siswaSMK 

  private : 
  char nis[12]; 
  char nama[25]; 
  int umur; 
 
  public : 
  void inisialisasi(char *NISSIS, char *NAMASIS, int UMURSIS) 
  { 
    strcpy(nis, NISSIS); 
    strcpy(nama, NAMASIS); 
    umur = UMURSIS; 
  } 
  void tampilkan() 
  { 
    cout << nis << endl; 
    cout << nama << endl; 
    cout << umur << endl; 
  } 
}; 
 
void main() 

  siswaSMK siswakls3; 
  siswakls3.inisialisasi("95514060","Suprapto",20); 
  siswakls3.tampilkan(); 

Pada program di atas, fungsi siswaSMK. Keduanya dibuat public


inisialisasi() dan tampilkan() karena akan diakses dari luar class,
merupakan fungsi anggota dari class sedangkan data anggotanya (nis,

483
 
Bahasa Pemrograman Class
 
nama, umur) dibuat private. Mungkin akan diperoleh hasil yang sama
Kita berpikir mengapa program dengan program sebelumnya.
terakhir terlalu panjang, padahal

Program 14.8
#include <iostream.h> 
#include <conio.h> 
#include <string.h> 
 
class sis 

  private : 
  char nis[12]; 
  char nama[25]; 
  int umur; 
 
  public : 
  void inisialisasi(char *NISSIS,char *NAMASIS,int UMURSIS); 
  void tampilkan(); 
}; 
 
void main() 

  sis siswakls3; 
  siswakls3.inisialisasi("95514060","Suprapto",20); 
  siswakls3.tampilkan(); 

 
void sis::inisialisasi(char *NISSIS, char *NAMASIS, int UMURSIS) 

  strcpy(nis, NISSIS); 
  strcpy(nama, NAMASIS); 
  umur = UMURSIS; 

 
void sis::tampilkan() 

  cout << nis << endl; 
  cout << nama << endl; 
  cout << umur << endl; 

484
 
Class Bahasa Pemrorgraman
 
Cara kedua inilah yang sering dipilih ini contoh-contoh program yang
oleh para programmer C++. Berikut memanfaatkan class

Program 14.9. Menyimpan data n siswaSMK kemudian menampilkannya.


#include <iostream.h> 
#include <conio.h> 
#include <stdlib.h> 
 
class siswaSMK 

  public: 
  char nis[20]; 
  char nama[50]; 
  int umur; 
 
  void tampilkan(char *NISSIS, char *NAMASIS, int UMURSIS) 
  { 
    cout << "NIS SIS : " << NISSIS << endl; 
    cout << "NAMA SIS : " << NAMASIS << endl; 
    cout << "UMUR : " << UMURSIS << endl; 
  } 
}; 
 
void main() 

  siswaSMK siswakls3[50];     // tipe data array 
  char temp[10]; int n, i; 
 
  clrscr(); 
  cout << "<< ENTRI DATA SISWASMK D3 " << endl; 
  cout << endl; 
  cout << "Jumlah siswaSMK : "; 
  cin.getline(temp, sizeof(temp)); 
  n = atoi(temp); 
  for (i=0;i<=n‐1;i++) 
  { 
    cout << "DATA ‐ " << i+1 << endl; 
    cout << "NIS SISWASMK : " ; 
    cin.getline(siswakls3[i].nis, sizeof(siswakls3[i].nis)); 
    cout << "NAMA SISWASMK : " ; 
    cin.getline(siswakls3[i].nama, sizeof(siswakls3[i].nama)); 
    cout << "UMUR : "; 
    cin.getline(temp, sizeof(temp)); 

485
 
Bahasa Pemrograman Class
 
    siswakls3[i].umur = atoi(temp); 
    cout << endl; 
  } 
 
// tampilkan semua data 
  cout << "‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐" << endl; 
  cout << "DATA YANG MASUK" << endl; 
  cout << "‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐" << endl; 
  for (i=0;i<=n‐1;i++) 
  { 
    cout << "DATA SISWASMK " << i+1 << endl; 
    siswakls3[i].tampilkan(siswakls3[i].nis, siswakls3[i].nama, 
siswakls3[i].umur); 
    cout << endl; 
  } 
  getch(); 

14.5. Constructor dan destructor


Objek biasanya memerlukan constructor, yang dapat
inisialisasi variabel atau menentukan dideklarasikan dengan pemberian
memori dinamik selama proses untuk nama fungsi dengan nama yang
mencapai hasil akhie yang sama untuk class. Fungsi dari
diharapkan dan menghindari constructor ini akan dipanggil secara
pengembalian nilai yang tidak otomatis ketika instance baru dari
diharapkan. Untuk mengatasinya sebuah class dibuat. Pehatikan
dapat digunakan fungsi spesial: contoh program dibawah ini:

Program 14.10
#include <iostream>  
 
class CRectangle {  
int width, height;  
public:  
CRectangle (int,int);  
int area (void) {return (width*height);}  
};  
CRectangle::CRectangle (int a, int b) {  
  width = a;  
  height = b;  
}  

486
 
Class Bahasa Pemrorgraman
 
int main () {  
  CRectangle rect (3,4);  
  CRectangle rectb (5,6);  
  cout << "rect area: " << rect.area() << endl;  
  cout << "rectb area: " << rectb.area() << endl;  
}  

Keluaran program diatas adalah sebagai berikut:


rect area: 12 rectb area: 30  

Hasil dari contoh diatas sama dari memory, ataupun karena


seperti contoh sebelumnya. Dalam keberadaannya telah selesai
hal ini, hanya menggantikan fungsi (misalnya: jika didefinisikan sebuah
set_values, yang sudah tidak ada objek local dalam function dan
dengan class constructor. Perhatikan function tersebut selesai) atau karena
cara parameter diberikan ke merupakan objek yang secara
constructor pada saat instance class dinamis ditetapkan dan dikeluarkan
dibuat: dengan menggunakan operator
delete. Destuctor harus mempunyai
CRectangle rect (3,4); CRectangle rectb  nama yang sama dengan class,
(5,6);   diberi awalan tile (~) dan tidak
mengembalikan nilai. Untuk lebih
Destructor berfungsi kebalikan jelasnya perhatikan contoh dibawah
dari construktor. Secara otomatis ini:
akan dipanggil jika objek di keluarkan

Program 14.11
#include <iostream.h>  
 
class CRectangle {  
int *width, *height;  
public:  
CRectangle (int,int);  
~CRectangle ();  
int area (void) {return (*width * *height);}  
};  
CRectangle::CRectangle (int a, int b) {  
width = new int;  
height = new int;  
*width = a;  
*height = b;  
}  
CRectangle::~CRectangle () {  
delete width;  
487
 
Bahasa Pemrograman Class
 
delete height;  
}  
int main () {  
CRectangle rect (3,4), rectb (5,6);  
cout << "rect area: " << rect.area() << endl;  
cout << "rectb area: " << rectb.area() << endl;  
return 0;  
}  

Keluaran program adalah sebagai berikut :


rect area: 12  
rectb area: 30  

14.6. Overloading Constructor


Sama halnya seperti fungsi, • Empty constructor Merupakan
constructor juga dapat mempunyai constructor tanpa parameters
nama yang sama tetapi mempunyai didefinisikan sebagai nop (blok
jumlah dan tipe yang berbeda pada instruksi kosong). Tidak
parameternya. Pada saat melakukan apapun.
pemanggilan kompiler akan meng- CExample::CExample () { };
eksekusi yang sesuai pada saat
objek class di deklarasikan. • Copy constructor Merupakan
Pada kenyataannya, ketika constructor dengan satu
dideklarasikan sebuah class dan parameter dengan tipe yang sama
tidak disebutkan constructornya, yang ditetapkan untuk setiap
maka kompiler secara otomatis akan anggota variable class nonstatik
mengasumsikan dua constructor objek yang disalin dari objek
overloaded ("default constructor" dan sebelumnya.
"copy constructor").
Perhatikan contoh dibawah ini: CExample::CExample (const CExample& 
rv) {  
class CExample {   a=rv.a; b=rv.b; c=rv.c;  
public:   }  
int a,b,c;  
void multiply (int n, int m) { a=n; b=m;  Hal yang penting untuk diketahui
c=a*b; };   adalah, bahwa kedua constructor
}; default: empty construction dan copy
constructor ada jika tidak ada
Jika tanpa constructor, Kompiler constructor lain yang dideklarasikan.
secara otomatis mengasumsikan Jika terdapat constructor dengan
anggota-anggota fungsi constructor sejumlah parameter dideklarasikan,
berikut : maka tidak satupun dari constructors
default ini ada.

488
 
Class Bahasa Pemrorgraman
 

Program 14.12
#include <iostream.h>  
class CRectangle {  
int width, height;  
public:  
CRectangle ();  
CRectangle (int,int);  
int area (void) {return (width*height);}  
};  
CRectangle::CRectangle () {  
width = 5;  
height = 5;  
}  
CRectangle::CRectangle (int a, int b) {  
width = a;  
height = b;  
}  
int main () {  
CRectangle rect (3,4);  
CRectangle rectb;  
cout << "rect area: " << rect.area() << endl;  
cout << "rectb area: " << rectb.area() << endl;  

Keluaran program diatas adalah sebagai berikut:


rect area: 12 rectb area: 25  

pada contoh program diatas baru dan tidak diberikan parameter


rectb dideklarasikan tanpa maka tidak diperlukan tkita kurung ():
parameter, sehingga diinisialisasikan
dengan constructor tanpa CRectangle rectb; // right  
parameters, yang mendeklarasikan CRectangle rectb(); // wrong! 
width dan height dengan nilai 5.
Perhatikan jika dideklarasikan objek

14.7. Menulis Class


Sebelum menulis class, langkah nama yang tepat dan tuliskan seluruh
pertama pertimbangkan dimana letak informasi atau properti yang ingin kita
atau programer akan menggunakan isi pada class. Jangan sampai terlupa
class dan bagaimana class tersebut untuk menuliskan secara urut method
akan digunakan. Pertimbangkan pula
489
 
Bahasa Pemrograman Class
 
yang akan Kita gunakan dalam class. record dari siswa. Jika kita telah
Dalam pendefinisian class, dituliskan: mengidentifikasikan tujuan dari
pembuatan class, maka dapat
<modifier> class <name> {  dilakukan emberian nama yang
<attributeDeclaration>*  sesuai. Nama yang tepat pada class
<constructorDeclaration>*  ini adalah StudentRecord. Untuk
<methodDeclaration>*  mendefinisikan class, kita tuliskan :
}  
public class StudentRecord 
dimana: <modifier> adalah sebuah { 
access modifier, yang dapat   //area penulisan kode 
dikombinasikan dengan tipe modifier selanjutnya 
lain. } 
Pada bagian ini, kita akan
membuat sebuah class yang berisi

Dimana,
Public  Class ini dapat diakses dari luar package 
Class     Keyword yang digunakan untuk pembuatan class (Java) 
StudentRecord  Identifier yang menjelaskan class 

Dalam pendeklarasian atribut, math grade     ‐ double 


kita tuliskan : english grade     ‐ double 
science grade     ‐ double 
<modifier> <type> <name> [=  average grade     ‐ double 
<default_value>]; 
Kita dapat menambahkan
Langkah selanjutnya adalah informasi lain jika diperlukan. Jika kita
mengurutkan atribut yang akan telah menuliskan seluruh atribut yang
diisikan pada class. Untuk setiap akan diisikan pada class, selanjutnya
informasi, urutkan juga tipe data yang kita akan menuliskannya pada kode.
yang tepat untuk digunakan. Jika kita menginginkan bahwa atribut
Contohnya, Kita tidak mungkin – atribut tersebut adalah unik untuk
menginginkan untuk menggunakan setiap object (dalam hal ini untuk
tipe data integer untuk nama siswa, setiap siswa), maka kita harus
atau tipe data string pada nilai siswa. mendeklarasikannya sebagai
Berikut ini adalah contoh informasi instance variable. Perhatikan contoh
yang akan diisikan pada class dibawah ini:
StudentRecord :
public class StudentRecord 
name       ‐ String  { 
address     ‐ String  private String name; 
age       ‐ Int  private String address; 

490
 
Class Bahasa Pemrorgraman
 
private int age;  { 
private double mathGrade;    private String name; 
private double englishGrade;    private String address; 
private double scienceGrade;    private int age; 
private double average;    private double mathGrade; 
  private double englishGrade; 
private disini menjelaskan   private double scienceGrade; 
bahwa variabel tersebut hanya dapat   private double average; 
diakses oleh class itu sendiri. Object   private static int studentCount; 
lain tidak dapat menggunakan   //area penulisan kode 
variabel tersebut secara langsung. selanjutnya 
Kita akan membahas tentang } 
kemampuan akses pada
pembahasan selanjutnya. Disamping Sebelum kita membahas method
instance variable, kita juga dapat apa yang akan dipakai pada class,
mendeklarasikan class variable atau mari kita erhatikan penulisan method
variabel yang dimiliki class secara umum. Dalam pendeklarasian
sepenuhnya. Nilai pada variabel ini method, kita tuliskan :
sama pada semua object di class
yang sama. <modifier> <returnType> 
Anggaplah kita menginginkan
<name>(<parameter>*) { 
jumlah dari siswa yang dimiliki dari
<statement>* 
seluruh class, kita dapat
mendeklarasikan satu static variable } 
yang akan menampung nilai tersebut.
Kita beri nama variabel tersebut dimana,
dengan nama studentCount. Berikut <modifier> dapat menggunakan 
penulisan static variable: beberapa modifier yang berbeda 
<returnType> dapat berupa seluruh tipe 
public class StudentRecord  data, termasuk void 
{  <name> identifier atas class 
    <parameter>  ::=  <tipe_parameter> 
//area deklarasi instance variables  <nama_parameter>[,] 
  private static int studentCount; 
//area penulisan kode selanjutnya  Untuk mengimplementasikan
}  enkapsulasi, kita tidak menginginkan
sembarang object dapat mengakses
Kita gunakan keyword : ’static’ untuk data kapan saja. Untuk itu, kita
mendeklarasikan bahwa variabel deklarasikan atribut dari class
tersebut adalah static. Maka sebagai private. Namun, ada kalanya
keseluruhan kode yang dibuat terlihat dimana kita menginginkan object lain
sebagai berikut : untuk dapat mengakses data private.
Dalam hal ini kita gunakan accessor
public class StudentRecord  methods.

491
 
Bahasa Pemrograman Class
 
Accessor Methods digunakan bahwa return type dari method harus
untuk membaca nilai variabel pada sama dengan tipe data seperti data
class, baik berupa instance maupun pada pernyataan return. Kita akan
static. Sebuah accessor method mendapatkan pesan kesalahan
umumnya dimulai dengan penulisan sebagai berikut bila tipe data yang
get<namaInstanceVariable>. digunakan tidak sama :
Method ini juga mempunyai sebuah
return value. Sebagai contoh, kita StudentRecord.java:14: incompatible 
ingin menggunakan accessor method types 
untuk dapat membaca nama, alamat, found : int 
nilai bahasa Inggris, Matematika, dan required: java.lang.String 
ilmu pasti dari siswa. Perhatikan   return age; 
salah satu contoh implementasi   ^ 
accessor method.   1 error 
public class StudentRecord  Contoh lain dari penggunaan
{  accessor method adalah getAverage,
  private String name; 
    :  public class StudentRecord 
    :  { 
  public String getName(){    private String name; 
  return name;    : 
  }    : 
}    public double getAverage(){ 
   double result = 0; 
dimana,    result  =  ( 
public   ‐ Menjelaskan bahwa method  mathGrade+englishGrade+scienceGrade 
tersebut dapat diakses dari object luar  )/3; 
class      return result; 
String   ‐ Tipe data return value dari    } 
method tersebut bertipe String  } 
getName ‐ Nama dari method 
() ‐ Menjelaskan bahwa method tidak  Method getAverage()
memiliki parameter apapun  menghitung rata – rata dari 3 nilai
siswa dan menghasilkan nilai return
value dengan nama result.
Pernyataan berikut, Bagaimana jika kita menghendaki
object lain untuk mengubah data?
return name;  Yang dapat kita lakukan adalah
membuat method yang dapat
dalam program kita menkitakan memberi atau mengubah nilai
akan ada pengembalian nilai dari variable dalam class, baik itu berupa
nama instance variable ke instance maupun static.
pemanggilan method. Perhatikan

492
 
Class Bahasa Pemrorgraman
 
Method semacam ini disebut value. Sebagai contoh, perhatikan
dengan mutator methods. Sebuah method berikut ini:
mutator method umumnya tertulis
set<namaInstanceVariabel>. Mari public String getNumberInWords( int 
kita perhatikan salah satu dari num ){ 
implementasi mutator method :   String defaultNum = "zero"; 
  if( num == 1 ){ 
public class StudentRecord      return "one";  
{    } 
private String name;    else if( num == 2){ 
  :      return "two";  
  :    } 
  public void setName( String    return defaultNum; 
temp ){  } 
    name = temp;  Kita menggunakan static method
  }  untuk mengakses static variable
}  studentCount.

dimana, public class StudentRecord 
public ‐ Menjelaskan bahwa method ini  { 
dapat dipanggil object luar class    private static int studentCount; 
void ‐ Method ini tidak menghasilkan    public static int 
return value  getStudentCount(){ 
setName ‐ Nama dari method    return studentCount; 
(String temp) ‐ Parameter yang akan    } 
digunakan pada method  } 

Pernyataan berikut : dimana,


public ‐ Menjelaskan bahwa method ini 
name = temp;  dapat diakses dari object luar class 
static ‐ Method ini adalah static dan 
mengidentifikasi nilai dari temp pemanggilannya menggunakan 
sama dengan name dan mengubah [namaclass].[namaMethod]. 
data pada instance variable name. misalnya:studentRecord.getStudentCoun
Perlu diingat bahwa mutator methods

tidak menghasilkan return value.
Int ‐ Tipe return dari method. 
Namun berisi beberapa argumen dari
program yang akan digunakan oleh Mengindikasikan method tersebut harus 
method. Kita dapat mempunyai mempunyai return value berupa integer 
banyak return values pada sebuah public ‐ Menjelaskan bahwa method ini 
method selama mereka tidak pada dapat diakses dari object luar class 
blok program yang sama. Kita juga getStudentCount ‐ Nama dari method 
dapat menggunakan konstanta () ‐ Method ini tidak memiliki parameter 
disamping variabel sebagai return apapun 

493
 
Bahasa Pemrograman Class
 
Kita akan membahas pengubahan
Pada deklarasi di atas, method nilai dari studentCount pada
getStudentCount() akan selalu pembahasan constructor. Berikut ini
menghasilkan return value 0 jika kita adalah kode untuk class
tidak mengubah apapun pada kode StudentRecord :
program untuk mengatur nilainya.

Program 14.13
public class StudentRecord 

  private String name; 
  private String address; 
  private int age; 
  private double mathGrade; 
  private double englishGrade; 
  private double scienceGrade; 
  private double average; 
  private static int studentCount; 
  /** 
  * Menghasilkan nama dari Siswa 
  */ 
  public String getName(){ 
    return name; 
  } 
  /** 
  * Mengubah nama siswa 
  */ 
  public void setName( String temp ){ 
    name = temp; 
  } 
  // area penulisan kode lain 
  /** 
  * Menghitung rata–rata nilai Matematik, * * Ilmu  Pasti 
  */ 
  public double getAverage(){ 
    double result = 0; 
    result = ( mathGrade+englishGrade+scienceGrade )/3; 
    return result; 
  } 
  /** 
  * Menghasilkan jumlah instance StudentRecord 
  */ 

494
 
Class Bahasa Pemrorgraman
 
  public static int getStudentCount(){ 
    return studentCount; 
  } 

14.8. Reference this


Reference this digunakan untuk kita telah menentukan nilai dari
mengakses instance variable yang parameter age kepada parameter itu
dibiaskan oleh parameter. Untuk sendiri. Hal ini sangat tidak kita
pemahaman lebih lanjut, mari kita kehendaki pada kode program kita.
perhatikan contoh pada method Untuk menghindari kesalahan
setAge. Dimisalkan kita mempunyai semacam ini, kita gunakan metode
kode deklarasi berikut pada method referensi this. Untuk menggunakan
setAge. tipe referensi ini, kita tuliskan :

public void setAge( int age ){  this.<namaInstanceVariable> 
  age = age; //SALAH!!! 
}  Sebagai contoh, kita dapat menulis
ulang kode hingga tampak sebagai
Nama parameter pada deklarasi ini berikut:
adalah age, yang memiliki penamaan
yang sama dengan instance variable public void setAge( int age ){ 
age. Parameter age adalah deklarasi   this.age = age; 
terdekat dari method, sehingga nilai } 
dari parameter tersebut akan
digunakan. Maka pada pernyataan : Method ini akan mereferensikan
nilai dari parameter age kepada
age = age;  instance variable dari object
StudentRecord.

14.9. Overloading Method


Dalam class yang kita buat, dengan nama yang sama namun
kadangkala kita menginginkan untuk memiliki parameter yang berbeda
membuat method dengan nama yang sehingga mempunyai implementasi
sama namun mempunyai fungsi yang dan return value yang berbeda pula.
berbeda menurut parameter yang Daripada memberikan nama
digunakan. Kemampuan ini yang berbeda pada setiap
dimungkinkan dalam pemrograman pembuatan method, overloading
Java, dan dikenal sebagai method dapat digunakan pada
overloading method. Overloading operasi yang sama namun berbeda
method mengijinkan sebuah method dalam implementasinya. Sebagai

495
 
Bahasa Pemrograman Class
 
contoh, pada class StudentRecord hasil yang ditampilkan adalah nama,
kita menginginkan sebuah method alamat dan umur dari siswa, sedang
yang akan menampilkan informasi pada saat kita memberikan 3 nilai
tentang siswa. Namun kita juga dengan tipe double, kita
menginginkan operasi penampilan menginginkan method tersebut untuk
data tersebut menghasilkan output menampilkan nama dan nilai dari
yang berbeda menurut parameter siswa. Untuk mendapatkan hasil
yang digunakan. Jika yang sesuai, kita gunakan
pada saat kita memberikan overloading method di dalam
sebuah parameter berupa string, deklarasi class StudentRecord.

Program 14.14
public void print( String temp ){ 
System.out.println("Name:" + name); 
System.out.println("Address:" + address); 
System.out.println("Age:" + age); 

public void print(double eGrade, double mGrade, double sGrade) 
System.out.println("Name:" + name); 
System.out.println("Math Grade:" + mGrade); 
System.out.println("English Grade:" + eGrade); 
System.out.println("Science Grade:" + sGrade); 

Jika kita panggil pada method utama (main) :

Program 14.15
public static void main( String[] args ) 

StudentRecord annaRecord = new StudentRecord(); 
annaRecord.setName("Anna"); 
annaRecord.setAddress("Philippines"); 
annaRecord.setAge(15); 
annaRecord.setMathGrade(80); 
annaRecord.setEnglishGrade(95.5); 
annaRecord.setScienceGrade(100); 
//overloaded methods 
annaRecord.print( annaRecord.getName() ); 
annaRecord.print( annaRecord.getEnglishGrade(), 
annaRecord.getMathGrade(), 
annaRecord.getScienceGrade()); 

Kita akan mendapatkan output pada panggilan pertama sebagai berikut :


496
 
Class Bahasa Pemrorgraman
 
Name:Anna 
Address:Philippines 
Age:15 

Kemudian akan dihasilkan output sebagai berikut pada panggilan kedua :


Name:Anna 
Math Grade:80.0 
English Grade:95.5 
Science Grade:100.0 

Jangan lupakan bahwa overloaded Untuk mendeklarasikan constructor,


method memiliki property sebagai kita tulis,
berikut :
1. Nama yang sama <modifier> <className> (<parameter>*) 
2. Parameter yang berbeda { 
3. Nilai kembalian (return) bisa sama <statement>* 
ataupun berbeda } 

Telah tersirat pada pembahasan Setiap class memiliki default


sebelumnya, Constructor sangatlah constructor. Sebuah default
penting pada pembentukan sebuah constructor adalah constructor yang
object. Constructor adalah method tidak memiliki parameter apapun.
dimana seluruh inisialisasi object Jika sebuah class tidak memiliki
ditempatkan. Berikut ini adalah constructor apapun, maka sebuah
property dari Constructor : default constructor akan dibentuk
1. Constructor memiliki nama yang secara implisit: Sebagai contoh, pada
sama dengan class class StudentRecord, bentuk default
2. Sebuah Constructor mirip dengan constructor akan terlihat seperti
method pada umumnya, namun dibawah ini :
hanya informasi - informasi berikut
yang dapat ditempatkan pada public StudentRecord() 
header sebuah constructor, scope { 
atau identifikasi pengaksesan
  //area penulisan kode 
(misal: public), nama dari

konstuktor dan parameter.
3. Constructor tidak memiliki return
value Seperti telah kita bahas
4. Constructor tidak dapat dipanggil sebelumnya, sebuah constructor juga
secara langsung, namun harus dapat dibentuk menjadi overloaded.
dipanggil dengan menggunakan Dapat dilihat pada contoh sebagai
operator new pada pembentukan berikut :
sebuah class.

Program 14.16
public StudentRecord(){ 
497
 
Bahasa Pemrograman Class
 
//area inisialisasi kode; 

  public StudentRecord(String temp){ 
  this.name = temp; 

  public StudentRecord(String name, String address){ 
  this.name = name; 
  this.address = address; 

public StudentRecord(double mGrade, double eGrade, double sGrade){ 
  mathGrade = mGrade; 
  englishGrade = eGrade; 
  scienceGrade = sGrade; 

Untuk menggunakan constructor, kita gunakan kode – kode sebagai berikut :

public static void main( String[] args ) 

  //membuat 3 objek 
  StudentRecord annaRecord=new StudentRecord("Anna"); 
  StudentRecord beahRecord=new StudentRecord("Beah","Philippines"); 
  StudentRecord crisRecord=new StudentRecord(80,90,100); 
  //area penulisan kode selanjtunya 

Sebelum kita lanjutkan, mari kita nilai dari studentCount setiap kali
perhatikan kembali deklarasi variabel setiap pembentukan object pada
static studentCount yang telah dibuat class StudentRecord. Lokasi yang
sebelumnya. Tujuan deklarasi tepat untuk memodifikasi dan
studentCount adalah untuk menambahkan nilai studentCount
menghitung jumlah object yang terletak pada constructor-nya, karena
dibentuk pada class StudentRecord. selalu dipanggil setiap kali objek
Jadi, apa yang akan kita lakukan terbentuk. Perhatikan contoh sebagai
selanjutnya adalah menambahkan berikut:

Program 14.17
public StudentRecord(){ 
  //letak kode inisialisasi 
  studentCount++; //menambah student 

public StudentRecord(String temp){ 
  this.name = temp; 
  studentCount++; //menambah student 
498
 
Class Bahasa Pemrorgraman
 

public StudentRecord(String name, String address){ 
  this.name = name; 
  this.address = address; 
  studentCount++; //menambah student 

public StudentRecord(double mGrade, double eGrade, double sGrade){ 
  mathGrade = mGrade; 
  englishGrade = eGrade; 
  scienceGrade = sGrade; 
  studentCount++; //menambah student 

Pemanggilan constructor dapat Pemanggilan dapat dilakukan dengan


dilakukan secara berangkai, dalam referensi this(). Perhatikan contoh
arti Kita dapat memanggil constructor kode sebagai berikut :
di dalam constructor lain.

Program 14.18
 public StudentRecord(){ 
 this("some string"); 
 
 } 
 
 public StudentRecord(String temp){ 
 this.name = temp; 
 } 
 
 public static void main( String[] args ) 
 { 
 
StudentRecord annaRecord = new StudentRecord(); 

Dari contoh kode diatas, pada 1. Harus dituliskan pada baris


saat baris ke 13 dipanggil akan pertama pada sebuah constructor
memanggil constructor dasar pada 2. Hanya dapat digunakan pada satu
baris pertama. Pada saat baris kedua definisi constructor. Kemudian
dijalankan, baris tersebut akan metode ini dapat diikuti dengan
menjalankan constructor yang kode – kode berikutnya yang
memiliki parameter String pada baris relevan
ke-6. Beberapa hal yang patut
diperhatikan pada penggunaan this():

499
 
Bahasa Pemrograman Class
 

14.10. Access Modifier


Pada saat membuat, mengatur tersebut berada pada package yang
properties dan class methods, kita sama dengan letak dari file
ingin untuk mengimplementasikan StudentRecord.
beberapa macam larangan untuk
mengakses data. Sebagai contoh, 14.10.2. Akses Public
jika Kita ingin beberapa atribut hanya Tipe ini mengijinkan seluruh
dapat diubah hanya dengan method class member untuk diakses baik dari
tertentu, tentu Kita ingin dalam dan luar class. Object apapun
menyembunyikannya dari object lain yang memiliki interaksi pada class
pada class. Di JAVA, implementasi memiliki akses penuh terhadap
tersebut disebut dengan access member dari tipe ini. Sebagai contoh:
modifiers. Terdapat 4 macam
access modifiers, yaitu: public, public class StudentRecord 
private, protected dan default. 3 tipe { 
akses pertama tertulis secara ekplisit   //akses dasar terhadap variabel 
pada kode untuk mengindikasikan   public int name; 
tipe akses, sedangkan yang keempat   //akses dasar terhadap metode 
yang merupakan tipe default, tidak   public String getName(){ 
diperlukan penulisan keyword atas     return name; 
tipe.   } 

14.10.1. Akses Default (Package
Accessibility)
Dalam contoh ini, variabel name dan
Tipe ini mensyaratkan bahwa
method getName() dapat diakses dari
hanya class dalam package yang
object lain.
sama yang memiliki hak akses
terhadap variabel dan methods
14.10.3. Akses Protected
dalam class. Tidak terdapat keyword
Tipe ini hanya mengijinkan class
pada tipe ini.Sebagai contoh :
member untuk diakses oleh method
dalam class tersebut dan elemen –
public class StudentRecord 
elemen subclass. Sebagai contoh :

  //akses dasar terhadap variabel  public class StudentRecord 
  int name;  { 
  //akses dasar terhadap metode    //akses pada variabel 
  String getName(){    protected int name; 
    return name;    //akses pada metode 
  }    protected String getName(){ 
}      return name; 
  } 
Pada contoh diatas, variabel nama } 
dan method getName() dapat diakses
dari object lain selama object
500
 
Class Bahasa Pemrorgraman
 
Pada contoh diatas, variabel name { 
dan method getName() hanya dapat   //akses dasar terhadap variabel 
diakses oleh method internal class   private int name; 
dan subclass dari class   //akses dasar terhadap metode 
StudentRecord. Definisi subclass   private String getName(){ 
akan dibahas pada bab selanjutnya.     return name; 
  } 
14.10.4. Akses Private } 
Tipe ini mengijinkan
pengaksesan class hanya dapat Pada contoh diatas, variabel name
diakses oleh class dimana tipe ini dan method getName() hanya dapat
dibuat. Sebagai contoh : diakses oleh
method internal class tersebut.
public class StudentRecord 

14.11. Contoh Program Class


Kelas merupakan struktur dari menciptakan variable obyek  
obyek. Deklarasi class sebagai    
berikut:   void main() 
 
  class  nama_class    {  nama_class  variable_obyek; 
  {   private;      } 
    ‐‐‐‐‐‐‐‐‐‐‐‐           void nama_class::nama_fungsi() 
    ‐‐‐‐‐‐‐‐‐‐‐‐    {  definisi fungsi } 
         protected:  
private ; data/fungsi yang tidak
         ‐‐‐‐‐‐‐‐‐‐‐‐  
dapat diakses diluar kelas. protected:
        ‐‐‐‐‐‐‐‐‐‐‐‐ 
data/fungsi yang dapat diakses pada
     public:  kelas tersebut dan friend class.
      void  nama_fungsi();  public: data/fungsi yang dapat
    ‐‐‐‐‐‐‐‐‐‐‐‐  diakses diluar kelas.
  }; 
 
Program 14.19
#include<iostream> 
#include<conio.h> 
 
using namespace std; 
 
class Pegawai 
  { public: 
   char nip[35]; 
   char nama[25]; 

501
 
Bahasa Pemrograman Class
 
      int umur; 
    }; 
 
  void main() 
  { 
      Pegawai produksi,akuntansi; 
       strcpy(produksi.nip, "200322"); 
       trcpy(produksi.nama, "Wijaya"); 
       produksi.umur= 35; 
       cout<<" =================================="<<endl; 
       cout<<"NIP  = ", cout<<produksi.nip<<endl; 
       cout<<"NAMA  = ", cout<<produksi.nama<<endl; 
       cout<<"UMUR  = ", cout<<produksi.umur<<endl; 
       cout<<"=================================="<<endl; 
               akuntansi=produksi; 
       cout<<" NIP  = ", cout<<akuntansi.nip<<endl; 
       cout<<" NAMA  = ", cout<<akuntansi.nama<<endl; 
       cout<<"UMUR  = ", cout<<akuntansi.umur<<endl; 
       cout<<"=================================="<<endl; 
  } 
   

Program 14.20
#include<iostream> 
#include<conio.h> 
 
using namespace std; 
 
class Pegawai 
{ public: 
    char nip[6]; 
    char nama[25]; 
    int umur; 
 
    void isidata(char*nip, char *nama, int umur) 
    { strcpy(nip, nip); 
      strcpy(nama,nama); 
      umur= umur;  } 
 
    void tampil_biodata(); 
    { 
               cout<<endl; 
      cout<<"============================="<<endl; 

502
 
Class Bahasa Pemrorgraman
 
      cout<< "NIP    : "<<nip<<endl; 
      cout<< "NAMA  : "<<nama<<endl; 
      cout<< "UMUR  : "<<umur<<endl; 
      cout<<"============================="<<endl; } 
    }; 
 
  void main() 
  { 
     Pegawai Akuntansi 
     cout<<"INPUTKAN DATA KARYAWAN"<<endl; 
     cout<<"NIP(6)  = ", cin>>Akuntansi.nip; 
     cout<<"NAMA(20)= ", cin>>Akuntansi.nama; 
     cout<<"UMUR(2) = ", cin>>Akuntansi.umur; 
     Akuntansi.isidata(Akuntansi.nip,Akuntansi.nama,Akuntansi.umur); 
     Akuntansi.tampil_biodata(); 
  } 

Program 14.21
#include<iostream> 
#include<conio.h> 
 
using namespace std; 
 
class contoh 
{  public: 
    int x; 
    int y; 
    int tambah() 
    {  
      cout<< ( x + y)<<endl;; 
      return 0; } 
      int kali() 
    { 
    cout<< ( x * y)<<endl; 
    } 
}; 
 
void main() 

  contoh hitung; 
  cout<<" Masukan x ? ", cin>>hitung.x; 
  cout<<" Masukan y ? ", cin>>hitung.y; 
  cout<<" Hasil x + y = ", 

503
 
Bahasa Pemrograman Class
 
  tambah(); 
  cout<<" Hasil x * y = ", 
  hitung.kali(); 
    getch() 

14.12. Soal Latihan


Jawablah soal latihan dibawah ini dengan baik dan benar.
1. Apakah fungsi tipe kelas dalam bahasa C
2. Sebutkan tujuan dari mendeklarasikan class
3. Sebutkan yang digunakan untuk menentukan batasan akses terhadap
member
4. Apa yang dimaksud dengan konstruktor dan destruktor
5. Jelaskan apa yang dimaksud dengan overloading konstruktor
6. Jelaskan bagaimana cara menulis class
7. Apa yang dimaksud dengan overloading method
8. Apa yang dimakksud dengan akses public, private dan protected

504
 
Pemrograman Berorientasi Objek     Bahasa Pemrorgraman 

BAB 15
PEMROGRAMAN BERORIENTASI OBJEK

15.1. Pemrograman Object-Oriented dan Prosedural


15.2. Perbedaan Object-Oriented dan Prosedural
15.3. Pemrograman berorientasi objek
15.4. Immutable obyek
15.5. Modularitas dan Abstraksi Data
15.6. Modularitas dan Penyebunyian Informasi
15.7. Interface
15.8. Interface dan Class
15.9. Hubungan dari Interface ke Class
15.10. Pewarisan Antar Interface
15.11. Soal Latihan
 

15.1. Pemrograman Object-Oriented dan Prosedural


Dalam beberapa forum diskusi banyak lagi. Akhirnya banyak orang-
yang membahas programming, salah orang di sini yang mulai bertanya-
satu thread yang selalu hangat dan tanya “apa sih OOP tuh?”, “apa
menarik di bicarakan adalah thread bedanya dengan prosedural?”, “apa
mengenai Object oriented untungnya kalau memakai OOP?.
Programming (OOP). OOP itu sendiri Sekarang kita tidak perlu
sebetulnya adalah konsep lama, tapi membicarakan “Apa itu OOP” dan
topik ini seperti Design pattern, bagaimana membuat / belajar OOP.
OOAD dan lain sebagainya kita hanya akan memberi contoh
sepertinya baru hangat dibicarakan di konkrit perbedaan dari OOP dan
forum diskusi beberapa tahun Procedural Code, dan kemudian
belakangan ini. Entah mengapa, mengambil kesimpulan tentang
mungkin karena bersamaan dengan keuntungan apa yang bisa kita dapat
bermunculan framework yang banyak dari OOP. Dalam buku ini banyak
diantaranya menganut konsep OOP, dijelaskan apa itu OOP, penggunaan
C++ yangg sekarang sudah full- Design Patternnya dan bagaimana
blown OOP, framework MS .NET mengimplementasikannya dalam
yang juga sudah full-blown OOP, dan kode C++.

505
 
Bahasa Pemrograman       Pemrograman Berorientasi Objek 

15.2. Perbedaan Object-Oriented dan Prosedural


Bagaimana desain object prosedural dapat dilihat dari
oriented berbeda dengan kode bagaimana tanggung jawab
prosedural yang lebih tradisional? (responsibility) didistribusikan. Kode
Akan sangat mudah untuk prosedural akan berupa urut-urutan
mengatakan bahwa perbedaan perintah dan method calls. Kode
utamanya adalah kode berorientasi pemanggil (controlling code)
obyek memiliki object di dalamnya. cenderung bertanggung jawab untuk
Ini tidak betul. Dalam PHP kita akan menghandle pengecekan kondisi (if,
sering menemukan kode prosedural then, else dst). Kontrol top-down ini –
menggunakan obyek. Kita juga dalam pengembangan aplikasi–
mungkin sering melihat class-class dapat menghasilkan duplikasi kode
yang mengandung kode prosedural dan saling ketergantungan lintas
di dalamnya. Keberadaan class tidak (antar) proyek. Kode berorientasi
menjamin adanya desain berorientasi obyek mencoba untuk
obyek, walau dalam bahasa meminimalisasi ketergantungan ini
pemrogramman Java sekalipun, yang dengan cara memindahakan
notabene “memaksa” kita untuk responsibility untuk meng-handle
melakukan apa pun di dalam class. tugas-tugas dari client code ke dalam
Satu perbedaan utama antara obyek-obyek di dalam system.
kode berorientasi obyek dengan kode
 
 
15.3. Pemrograman berorientasi objek
Objek adalah kumpulan variabel ekor, dan lain-lain. Jadi kondisi pada
dan method (fungsi) yang saling alam (misal anjing) ditiru dengan
berkaitan. Mungkin kita pernah Variabel sedangkan hal-hal yang
menggunakan struct dalam C atau biasa dilakukan ditiru dengan
record dalam Pascal/Delphi? Dalam Method. penggabungan antara
struct dan record, kita bisa Variabel dan Method itulah yang
mengumpulkan tipe-tipe variabel disebut Enkapsulasi.
yang berlainan. Nah, objek adalah Hal penting berikutnya dalam
perkembangan dari struct. Dalam OOP adalah Message. Antara objek
objek, kita bisa mengumpulkan satu dengan objek yang lain
variabel-2 dengan tipe yang boleh berkomunikasi melalui Message.
berbeda-2 dan fungsi-2 yang disebut Ketika objek A ingin objek B
method. melakukan sesuatu, maka objek A
Objek sebenarnya meniru mengirim Message ke objek B.
konsep alam. Ilustrasinya seperti ini.
Sebutlah suatu objek, misalnya Contoh:  Misalnya  objek  A  adalah  ICT. 
anjing. Anjing memiliki kondisi: Objek B adalah Sepeda. 
warna, tinggi, lapar, sakit, dll. Selain
itu anjing juga memiliki hal-hal yang Jika ICT ingin memindahkan gigi
biasa dilakukan, seperti: sepedanya ke gigi 5, maka ICT akan
menggonggong, menggigit, goyang mengirim Message ke Sepeda

506
 
Pemrograman Berorientasi Objek     Bahasa Pemrorgraman 

diketahui sepeda memiliki Subclass juga dapat melakukan


kemampuan/Method pindahGigi) Override terhadap sifat dan
berbunyi pindahGigi(5). Lengkapnya kemampuan warisan Superclassnya.
dapat ditulis: Sepeda.pindahGigi(5). Misalnya yang dilakukan oleh
Message itu akan dilaksanakan oleh SepedaTandem. SepedaTandem
Sepeda. Kemampuan pindahGigi memiliki lebih dari dua roda dan juga
memerlukan informasi gigi yang pedal sehingga perlu memiliki
diinginkan, dalam hal ini 5. Maka kemampuan untuk mengaturnya.
sekarang Variabel (nantinya kita Sehingga suatu kemampuan warisan
sebut atribut) gigi bernilai 5. Bicara dari class Sepeda dapat diganti atau
tentang Class, kita bayangkan dalam ditambahkan.
contoh sebelumnya bahwa Sepeda Interface membuat satu class
milik ICT adalah sepeda gunung (kita dapat berinteraksi dengan class lain
sebut SepedaGunung). Tentunya yang benar-benar berbeda. Misalnya
selain SepedaGunung terdapat dalam Show Room yang menjual
sepeda lain seperti SepedaOnta, Mobil, Motor juga Sepeda. Tentu saja
SepedaTandem, dll. Tapi yang jelas, ManajerShowRoom harus bisa
jenis-jenis tadi termasuk Sepeda. mengatur sepeda-sepeda bersama
Jadi Sepeda Gunung adalah dengan Mobil-2 dan Motor-2.
Instance dari Sepeda. Masalahnya adalah perbedaan class
SepedaGunung memiliki atribut- yang sangat mencolok. Interface
atribut(seperti gigi, roda, panjang, mengatasinya dengan cara:
pedal, dan lain-lain) juga  Mencari persamaan antara class-2
kemampuan(seperti pindahGigi(), yang berbeda tanpa memaksa
belok(), dll) Sepeda. Ada perbedaan class tersebut saling
antara Object dan Class. berhubungan.
Class adalah blue print atau  Membuat method yang ingin
rancangan dari Object. Jadi dengan diterapkan pada class-class.
satu Class, kita dapat membuat Istilah-istilah yang digunakan dalam
berapapun Object. Inheritance adalah pemrograman berorientasi objek
pewarisan sifat. Sebuah Subclass  Class adalah blueprint atau
akan mewarisi sifat dari Superclass- prototype dari object-objec tertentu
nya. Dalam contoh di atas, Sepeda yang memiliki kesamaan variable
Gunung akan memiliki atribut gigi, dan method.
roda dan panjang dan juga  Object atau insance of class
kemampuannya yaitu pindah Gigi merupakan software yang
dan belok. Tetapi Subclass tidak mengemas variable-variable dan
harus hanya memiliki sifat dan methodmethod menjadi satu
kemampuan yang sama persis kesatuan.
dengan Superclassnya, tetapi  Attribute adalah suatu bentuk
biasanya ditambahkan sifat dan karakteristik atau status dari suatu
kemampuan lain yang object.
membedakannya dengan Subclass  Method atau behavior dari object
lain dengan Superclass yang sama. adalah action yang bisa di
Itulah yang membuat SepedaGunung kerjakan oleh suatu object
dan SepedaOnta berbeda.
507
 
Bahasa Pemrograman       Pemrograman Berorientasi Objek 

 Constructor merupakan method mempunyai sifat pemisahan data


khusus yang berfungsi untuk dengan kode yang mengolahnya.
inisialisi atau menciptakan suatu Pemrograman Berorientasi Objek
object dari class (PBO) adalah metode pemrograman
yang meniru cara kita
Pemrograman Berorientasi memperlakukan sesuatu (benda).
Objek sebenarnya bukanlah bahasa Dalam pemrograman
pemrograman baru, tetapi jalan baru berorientasi obyek, class merupakan
untuk berpikir dan merancang sebuah design, template, atau blue-
aplikasi yang dapat membantu print. Dari suatu class dapat dibuat
memecahkan suatu persoalan banyak objek/instance. Analoginya
mengenai pengembangan perangkat adalah seperti ini, bayangkan jika kita
lunak. Pemrograman berorientasi seorang arsitek, sebelum
objek disusun dan dipahami oleh membangun rumah tentunya akan
ilmuwan yang memkitang dunia merancang dulu di kertas, jumlah dan
sebagai populasi objek yang letak pintu, jendela, dan semuanya,
berinteraksi antara satu yang satu itulah class. Kemudian dari gambar
dengan objek yang lain. rumah tersebut kita dapat
Prosedur yang digunakan dalam membangun banyak rumah sesuai
objek dipkitang sebagai kepentingan rancangan yang sudah dibuat.
kedua karena tergantung pada objek Masing-masing rumah jadi
itu sendiri. Tentunya hal tersebut tersebut adalah yang disebut dengan
berbeda dengan pemrograman objek/instance.
terstruktur. Pemrograman terstruktur

The first instance

Class
The second instance
Desain Template
Blue print

n ...... instance

Gambar 15.1. Class Dalam Pemrograman Berorientasi Obyek

Ada empat ciri-ciri atau karakteristik komputer kita harus menentukan ciri-
bahasa Pemrograman Berorientasi ciri / sifat-sifat yang penting yang
Objek, antara lain: perlu direpresentasikan ke dalam
sistem komputer. Ciri-ciri yang dipilih
15.3.1. Abstraksi bergantung dari apa yang akan kita
Untuk memproses sesuatu dari lakukan di dalam sistem tersebut dan
dunia nyata dengan menggunakan tergantung dari sudut pkitang yang
melihatnya. Misalnya pada sebuah
508
 
Pemrograman Berorientasi Objek     Bahasa Pemrorgraman 

kasus untuk menentukan attribute suatu class mobil pada :

Tabel 15.1. Attribute suatu class mobil

Kantor Polisi Bengkel Mobil


No mesin No registrasi Pemilik
Pemilik Waktu Ganti Oli
Besar Pajak Deskripsi servis

15.3.2. Enkapsulasi merupakan interface (antar muka)


Penggabungan data dan method pengendara dengan sistem transmisi
ke dalam suatu class atau dengan sepeda motor.
kata lain mengkombinasikan sebuah
struktur dengan fungsi yang 15.3.3. Pewarisan
memanipulasinya untuk membentuk warisan sifat dari class induk
tipe data baru yaitu kelas (class). kepada class anaknya atau
Enkapsulasi merupakan suatu mendefinisikan suatu kelas dan
mekanisme untuk menyembunyikan kemudian menggunakannya untuk
atau memproteksi suatu proses dari membangun hirarki kelas turunan,
kemungkinan interferensi atau yang mana masing-masing turunan
penyalahgunaan dari luar sistem dan mewarisi semua akses kode maupun
sekaligus menyederhanakan data kelas dasarnya.
penggunaan sistem itu sendiri. Akses Sebagai manusia kita
ke internal sistem diatur sedemikian sebenarnya terbiasa untuk melihat
rupa melalui seperangkat interface. objek yang berada disekitar kita
Contoh sebuah kasus yang ada tersusun secara hierarki berdasarkan
dilapangan misalnya pada sebuah classnya masing-masing. Dari sini
sepeda motor, dimana pada sistem kemudian timbul suatu konsep
pemindahan gigi transmisi, maka tentang pewarisan yang merupakan
pengendara tidak perlu tahu detail suatu proses dimana suatu class
dari bagaimana proses pemindahan diturunkan dari class lainnya
gigi itu dilakukan oleh mesin, cukup sehingga ia mendapatkkan ciri atau
tahu bagaimana cara menekan gigi sifat dari class tersebut. Perhatikan
transmisi itu. Pedal gigi transmisi contoh hirarki berikut ini:
yang diinjak pengendara itu

509
 
Bahasa Pemrograman       Pemrograman Berorientasi Objek 

Binatang

Mamalia Reptile

Anjing Kucing Monyet

Gambar 15.2. Hirarki Pewarisan

Dari hirarki diatas dapat dilihat dimiliki oleh class binatang, karena
bahwa, semakin kebawah, class sebagai class turunannya, ia akan
akan semakin bersifat spesifik. Class mendapatkan karakteristik dari class
mamalia memiliki seluruh sifat yang binatang secara otomatis. Demikian
dimiliki oleh binatang, demikian juga dengan class anjing, kucing dan
halnya juga Anjing, kucing dan monyet, hanya perlu mendefinisikan
Monyet memiliki seluruh sifat yang karakteristik yang spesifik dimiliki
diturunkan dari class mamalia. oleh classnya masing-masing.
Dengan konsep ini, karakteristik yang Dengan memanfaatkan konsep
dimiliki oleh class binatang cukup pewarisan ini dalam pemrograman,
didefinisikan didefinisikan dalam maka hanya perlu mendefinisikan
class binatang saja. karakteristik yang lebih umum akan
Class mamalia tidak perlu didapatkan dari class darimana ia
mendefinisikan ulang apa yang telah diturunkan.

15.4. Immutable obyek


Dalam pemrograman Dalam beberapa kasus, obyek
berorientasi objek, immutable obyek dianggap immutable walaupun ada
adalah obyek dengan kondisi yang beberapa hal perubahan internal
tidak dapat dimodifikasi setelah yang digunakan oleh atribut tetapi
dibuat. Hal ini berbeda dengan kondisi objek nampaknya tidak bisa
mutable objek, dimana obyek diubah secara ekternal dari beberapa
tersebut dapat dimodifikasi setelah sudut pkitang. Sebagai contoh,
dibuat. Obyek dapat immutable sebuah obyek yang menggunakan
secara keseluruhan atau hanya memoization pada cache hasil
beberapa atribut objek yang komputasi yang baik ini tetap dapat
ditentukan saja, misalnya tetap dianggap sebagai objek. Awal
menggunakan atribut anggota const dari sebuah kondisi tetap objek
data pada bahasa pemrograman biasanya diatur pada posisi berdiri,
C++. tetapi dapat juga ditetapkan sebelum
menggunakan obyek tersebut.
510
 
Pemrograman Berorientasi Objek     Bahasa Pemrorgraman 

Immutable objek sering berguna referensi biasanya lebih mudah


karena beberapa biaya operasional namun solusi mahal. Para pengamat
seperti menyalin dan menyatakan bahwa teknik alternatif
membandingkan dapat diabaikan, untuk menangani perubahan objek
menyederhanakan kode program dan mutabel. Immutable objects dapat
mempercepat eksekusi. Namun, berguna dalam aplikasi multi-
membuat obyek immutable biasanya threaded. Multiple threads dapat
tidak tepat jika objek berisi sejumlah bertindak berdasarkan data yang
besar data yang berubah-ubah. diwakili oleh immutable objek tanpa
Karena itu, banyak bahasa yang memperhatikan data yang diubah
mempunyai fasilita kedua objek oleh thread lainnya. immutable obyek
tersebut baik mutable dan immutable mempunyai pertimbangan atau
obyek. dianggap lebih aman daripada
Dalam kebanyakan bahasa mutable object atau obyek yang
berorientasi objek, objek dapat berubah.
disebut dengan referensi. Beberapa Dalam Praktiknya selalu
contoh seperti bahasa Java, C++, menggunakan referensi pada saat
C#, VB.NET dan banyak bahasa melakukan copy atau sering dikenal
scrip seperti Ruby dan Python. sebagai objek interning. Jika interning
Dalam hal ini, hal-hal apakah kondisi digunakan, dua benda dianggap
obyek dapat berbeda bila benda sama jika dan hanya jika mereka
dibagi melalui referensi. referensi, biasanya digambarkan
Jika obyek yang diketahui adalah sebagai integers yang keuanya
immutable, maka dapat disalin cukup sama. Beberapa bahasa secara
dengan membuat salinan referensi, otomatis: misalnya, secara otomatis
bukan untuk menyalin seluruh objek. Python interns string dan lain-lain.
Karena referensi (biasanya hanya Jika algoritma yang menerapkan
ukuran sebuah pointer) biasanya jauh interning dijamin, maka untuk
lebih kecil daripada obyek itu sendiri, melakukan setiap kasus yang
sehingga lebih mudah dalam mungkin membandingkan dengan
penyimpanan di memori dan obyek untuk mengurangi pointer, dan
meningkatkan kecepatan dalam yang penting dalam mendapatkan
eksekusi. kecepatan maksimal dalam aplikasi.
Teknik penyalinan Referensi jauh (Bahkan jika algoritma tidak dijamin
lebih sulit digunakan pada objek secara lengkap, masih ada
mutable, karena jika ada pengguna kemungkinan jalan yang cepat untuk
referensi ke sebuah obyek mutable meningkatan kasus ketika obyek
yang merubahnya, semua pengguna yang sama dan menggunakan
lain akan melihat perubahannya. Jika referensi yang sama.) Interning
ini bukan efek dimaksudkan, maka umumnya hanya berguna untuk
akan lebih sulit untuk immutable benda.
memberitahukan ke pengguna yang Kadang-kadang kalau bicara
lain untuk meminta mereka merespon tertentu mengenai satu bidang obyek
dengan benar. yang immutable. Ini berarti bahwa
Dalam situasi ini, defensif tidak ada cara untuk mengubah
menyalin dari seluruh obyek daripada kondisi bagian objek, walaupun
511
 
Bahasa Pemrograman       Pemrograman Berorientasi Objek 

bagian lain dari objek mungkin apa yang harus dilakukan oleh
berubah-ubah. Hal ini dapat, programmer.
misalnya, untuk membantu Dalam bahasa C++ implementasi
menegakkan tertentu secara eksplisit pada sebuah cart akan
invariants tentang beberapa data memungkinkan pengguna
dalam obyek yang sama tinggal menyatakan sebuah kasus kelas
melalui masa objek. Dalam beberapa baru sebagai salah satu const
bahasa, hal ini dilakukan dengan kata (immutable) atau mutable, seperti
kunci (misalnya "const" di C++, "final" yang dikehendaki, dengan
di Java) yang mana dirancang pada menyediakan dua versi yang berbeda
field dari obyek yang immutable. dari getItems () method. (Perhatikan
Keimmutablean tidak bahwa dalam C + + itu tidak
menyiratkan bahwa sebagai objek diperlukan dan bahkan mustahil -
yang disimpan dalam memori untuk menyediakan constructor
komputer unwriteable. Sebaliknya, khusus untuk kasus const.) Template
keimmutablean adalah kompilasi <typename T>. perhatikan potongan
waktu membangun dan menunjukkan program dibawah ini:

Program 15.1
class Cart { 
  private: 
          std::vector<T> items; 
  
  public: 
         Cart(const std::vector<T>& v): items(v) { } 
  
         std::vector<T>& getItems() { return items; } 
         const std::vector<T>& getItems()  
         const { return items; } 
         int total()  
         const { /* return sum of the prices */ } 
 }; 

15.5. Modularitas dan Abstraksi Data


Modularitas dan abstraksi data  Penyembunyian informasi yang
dapat didefinisikan dilakukan modul untuk melindungi
 Modul atau sebuah unit dari informasi dari "user external"
organisasi sistem perangkat lunak dalam penggunaannya (misalnya
yang membundel sekumpulan software error, security) dan
entitas (data dan metoda operasi) merupakan basis dari abstract
dan dengan secara teliti data type (ragam data abstraks).
mengontrol apa "user eksternal"  Abstract data type (ADT) atau
bisa lihat atau gunakan. Kumpulan obyek dan metoda
operasi yang mempresentasikan
512
 
Pemrograman Berorientasi Objek     Bahasa Pemrorgraman 

sifat-sifat abstraks bagi "user"  Cara untuk mendefinisikan


dengan menyembunyikan interface yang "clean"
bagaimana semua itu  Cara untuk menyembunyikan
direpresentasikan dalam rincian internal dari data dan
representasi data level yang lebih metoda-metoda operasi
rendah.  Cara untuk kompilasi secara
 Interface dari modul atau terpisah misalnya:
Spesifikasi bagaimana modul o Turbo Pascal menyediakan
tersebut dilihat atau digunakan fasilitas pembuatan TPU
oleh "user" sementara bagian dengan definisi interface.
yang private tetap tersembunyi, o Bahasa C memungkinkan
perhatikan contoh dibawah ini: pembuatan object module
o Sebuah microwave oven (*.obj) dan library (*.a) yang
sebagai suatu modul. Pemakai dapat dilink ke modul program
dapat menggunakannya utama melalui interface header
dengan tersedianya interface file (*.h).
panel tombol. Pemakai hanya Dalam bahasa Java
perlu tahu untuk apa tombol- memungkinkan konsep
tombol tersebut dan bagaimana pemrograman modular, enkapsulasi,
mengoperasikannya. Pemakai dan abstraksi data dengan
tidak perlu tahu mekanisme disediakannya skema-skema class,
kerja oven tersebut secara interface, dan packages. Enkapsulasi
intenal seperti kerja tabung dimungkinkan dengan pendefinisian
magnetron, mikrokontroller private bagi data/metoda yang
mekanik penggerak dan lain disemebunyikan dan public bagi
sebagainya.). data/metoda yang berperan sebagai
o Window menyediakan sejumlah interface.
button untuk dapat menutup, Dalam Java terdapat keyword
memperbesar, memperkecil, interface dengan pengertian yang
dan sebagainya. lain. Keword ini digunakan sebagai
suatu definisi teknis yang
15.5.1. Pemrograman Modular menyatakan sekumpulan metoda
Bahasa-bahasa pemrograman abstraks yang bisa
modern menyediakan cara-cara diimplementasikan dalam
untuk dapat membuat sistem pendefinisian kelas-kelas obyek.
perangkat lunak secara modular Manfaat definisi interface ini agar
demikian, antara lain: obyek-obyek dari sejumlah kelas
 Cara untuk mengelompokkan yang mengimplementasikan interface
bersama data dan metoda operasi ini dapat saling direfer oleh variabel
beragam interface ini. Perhatikan
contoh dibawah ini:

513
 
Bahasa Pemrograman       Pemrograman Berorientasi Objek 

Program 15.2
interface Xclass {  
   public void whataMethod();  
}  
public class Aclass implements Xclass {  
   public void whataMethod() {  
      ...// diimplementasikan disini  
   }  
}  
public class Bclass implements Xclass {  
   public void whataMethod() {  
      ...// diimplementasikan disini  
   }  
}  
class Mainclass {  
   Xclass a,b;  
   static public void main(String [] a) {  
      a = new Aclass();  
      b = new Bclass();  
      a.whataMethod();  
      b.whataMethod();  
   }  

Contoh lain adalah pada pendefinisian modularitas dan ADT


masalah pencarian data (searching). adalah keyword package. Keyword
Key data bisa muncul dalam berbagai ini membundle sekumpulan kelas
tipe data: int, float, String, dsb. yang satu dengan yang lainnya saling
Fasiltas interface ini dapat memiliki relasi khusus. Pendefinisian
memungkinkan pedefinisan algoritma package ini memungkinkan kompilasi
umum compareTo() dalam interface secara terpisah dan diimport sebagai
ComparisonKey untuk setiap tipe library. Sebagai contoh kasus untuk
data. Selanjutnya kelas-kelas yang pembahasan modularitas dan ADT
mengimplementasikan interface adalah suatu kelas Priority Queue.
tersebut dapat didefinisikan sesuai
denga tipe data yang dikehendaki. 15.5.2. Priority Queue
Dengan fasilitas-fasilitas ini kita Priority queue (PQ) adalah suatu
bisa mengembangkan sistem struktur data abstraks yang
perangkat lunak besar dengan berperilaku sebagai berikut. PQ
komponen-komponennya yang adalah kumpulan item data yang
bersifat umum demikian dan masing-masing memiliki tingkat
selanjutnya dapat di-plug-and-play prioritas yang bisa berbeda. Apabila
implementasi dalam berbagai tipe item data diambil dari kumpulan
data. Fasilitas Java lain dalam tersebut maka item data yang

514
 
Pemrograman Berorientasi Objek     Bahasa Pemrorgraman 

berprioritas paling tinggi lah yang alterntifnya data yang di ambil satu
diperoleh. demi satu di taruh dari kiri ke kanan
Dalam pengembangannya elemen-elemen array.
pertama kali adalah Terdapat sejumlah metoda
memformulasikan konsep operasi yang menjadi 'interface': bagi
abstraksnya tanpa harus memikirkan pemakai kelas obyek ini.
tipe datanya, apalagi implementasi  mengkonstruksikan PQ yang
rincinya. Implementasinya sendiri diinisialisasi kosong
dapat dilakukan dalam dua PQ = new PriorityQueue(); 
representasi level bawah yang  mendapatkan ukuran (jumlah item
berbeda: array atau linked-list yang data) dalam PQ,
dapat belakangan kita buat. n = PQ.size(); 
Banyak ditemukan dalam  menyisipkan item baru dalam PQ,
masalah-masalah penjadwalan, PQ.insert(X); 
misalnya untuk sistem antrian untuk  bila PQ tidak kosong, menghapus
pelayanan pasien dalam ruang item dengan prioritas tertinggi
praktek dokter, penjadwalan dalam PQ
pembayaran tagihan, dsb. Prioritas
X = PQ.remove(); 
bisa didefinisikan dalam beberapa
aspek. PQ dapat digunakan juga
Secara sepintas bisa diketahui
untuk pengurutan data kengan key
bahwa terdapat suatu proses internal
data sebagai harga prioritas:
(yang tidak perlu diketahui oleh user)
sejumlah data tak terurut dimasukkan
di dalam skema ini yaitu pengurutan
ke dalam PQ lalu setelah semua
item data. Implementasi bagaimana
masuk satu demi satu data diambil
pun user "tidak perduli". Contoh
dari PQ. Pada pengurutan menaik
penggunaan dalam metoda
maka data yang diambil ditaruh dari
pengurutan data berdasarkan Priority
kanan ke kiri elemen-elemen array.
Queue:
Pada pengurutan menurun harga key
bisa kebalikan dari harga prioritas,

Program 15.3
void priorityQueueSort(ComparisonKey[] A) {  
   int n = A.length;  
   PriorityQueue PQ = new PriorityQueue();  // create & inisialisasi PQ  
   for (int i = 0; i < n; i++) PQ.insert(A[i]);  // mengisi PQ  
   for (int i = n‐1; i >= 0; i‐‐) A[i] = PQ.remove(); // mengambil satu/satu  

Selanjutnya contoh penggunaan mengimplementasikannya maka key


PQ dengan tipe key integer ini dapat data item yang sedang kerjakan ini
dilihat dalam program lebih dibungkus dalam tipe data yang
lengkapnya. Pada saat ini definisi generik yaitu: ComparisonKey
kelas PriorityQueue belum sebagai suatu interface.
diimplementasikan. Sebelum

515
 
Bahasa Pemrograman       Pemrograman Berorientasi Objek 

interface ComparisonKey {   Selanjutnya ComparisonKey ini


   int compareTo(ComparisonKey value);   diimplementasikan sesuai dengan
   String toString();   tipe data yang sedang digunakan,
}  dalam hal ini misalnya kita
menggunakan integer (nanti kita lihat
bila key bertipe String).

Program 15.4
public class PQItem implements ComparisonKey {  
   private int key;  
   PQItem(int value) {  
      key = value;  
   }  
   public String toString() {  
      return Integer.toString(key);  
   }  
   public int compareTo(ComparisonKey value) {  
      int a = this.key;  
      int b = ((PQItem) value).key;  
      return ((a==b)? 0:( (a > b)?1:‐1));  
   }  

Pada level yang lebih rendah Saat item data masuk dalam PQ
kelas priority queue ini dapat maka langsung ditempatkan pada
diimplementasikan baik dengan array posisi yang sesuai dalam urutan
atau dengan linked list, dimana hal menurun (dilakukan pencarian
tersebut dijelaskan sebagai berikut: posisi terlebih dulu lalu dilakukan
 Versi Implementasi Unsorted insert), dan saat di-remove maka
Array (berukuran dinamis) cukup dilakukan delete-first (node
PQ menyimpan item data dalam pertama yang diambil.
suatu array yang apabila penuh Kedua implementasi tersebut
panjangnya dapat diperbesar berfungsi sama tapi dengan
secara otomatis. Item data masuk implementasi yang berbeda namun
begitu saja di bagian belakang. sekali lagi user melihatnya sesuai
Saat di-remove maka item data dengan abstraksi spesifikasi PQ yang
dengan key terbesar dicari ditentukan. Dalam prakteknya maka
(dilakukan sequential search). Key kedua versi itu bisa dipilih tanpa
yang diremove tempatnya mengubah modul-modul pemakainya
digantikan oleh key yang paling selama spesifikasinya ditaati.
belakang (tidak melakukan Selain implementasinya yang
pergeseran!) bisa berbeda tanpa mengubah
 Versi Implementasi Sorted Linked- rancangan modul tingkat di atasnya,
list representasi key data pun dapat
diimplementasikan secara berbeda
516
 
Pemrograman Berorientasi Objek     Bahasa Pemrorgraman 

karena ComparisonKey yang contoh di atas.ComparisonKey ini


didefinisikan abstraks tersebut. memiliki konsep Representation
Dengan abstraksi ComparisonKey di Independent Module. Berikut ini
atas maka key bertipe lain dapat representasi String untuk key.
menggantikan tipe key integer dalam

Program 15.5
class PQItem implements ComparisonKey {  
   private  String  key;  
   PQItem(String value) {  
      key = value;  
   }  
   public String toString() {  
      return key;  
   }  
   public int compareTo(ComparisonKey value) {  
      String a = this.key;  
      String b = ((PQItem)value).key;  
      return a.compareTo(b);    // metoda compareTo dalam kelas String  
   }  

Dalam program aplikasinya sementara sejumlah metoda tetap


perubahan terjadi pada bagian data, sama.

15.6. Modularitas dan Penyebunyian Informasi


Saat program menjadi semakin dilakukan suatu prosedur. Kita perlu
besar terjadi situasi berbahaya: rumit, mendefinisikan "apa" dari suatu
sulit melakukan debug, dan hampir prosedur terpisah dari "bagaimana"
tidak mungkin di modifikasi kecuali (how) cara yang dilakukan prosedur
dikembangkan dengan taat dan untuk mencapai fungsi tersebut.
secara terstruktur. Penulisan program Setelah terdefinisi dengan baik
komputer dilakukan melalui medium abstraksi prosedur ini kemudian kita
yang memungkinkan bervariasinya boleh menuliskan rincian
cara penulisan ekspresi-ekspresi "bagaimana" tersebut, bahkan suatu
yang potensial dapat menyebabkan saat misalnya untuk peningkatan
masalah yang besar. Dekomposisi ke efisiensi maka
dalam komponen-komponennya pun metodologi/algoritmanya dapat
dapat bervariasi, bisa saling kait- disubstitusikan tanpa mengubah
mengkait secara kompleks atau abstraksi proseduralnya.
teratur dalam layer-layer. Jadi pemisahan tersebut
Abstraksi prosedural: memberi manfaat:
menyatakan fungsi "apa" (what) yang

517
 
Bahasa Pemrograman       Pemrograman Berorientasi Objek 

 Memudahkan penggunaan --  Menghindari interferensi entitas


hanya perlu tahu apa yang lokal dalam modul terhadap
dilakukan oleh prosedur P entitas bernama sama di luar
 Memudahkan modifikasi -- rincian modul
penulisan P dapat diubah tabpa  Menghindari interferensi entitas
mengganggu program secara diluar modul terhadap entitas lokal
keseluruhan (di mana saja pada dalam modul terhadap entitas
pemanggilan-pemanggian P). bernama sama
Secara umum pendefinisian Bahasa berorientasi obyek
abstraksi dengan baik pada semacam C++ atau Java
perancangan program dapat mengakomodasikan enkapsulasi ini
mengendalikan kompleksitas dengan baik dengan deklarasi
program serta meningkatkan private. Dalam Java terdapat
modifiabilitas. Penyembunyian tingkatan lebih lanjut sepain private,
informasi (enkapsulasi) baik variabel yaitu: package, protected, baru
ataupun metoda dalam modul-modul kemudian public. Istilah package
bermanfaat dalam: dalam Java memiliki konsep yang
sama dengan istilah unit atau module
dalam bahasa pemrograman lain.

15.7. Interface
Interface adalah jenis khusus mengimplementasikan method yang
dari blok yang hanya berisi method sama. Melalui interface-interface, kita
signature(atau constant ). Interface dapat menangkap kemiripan diantara
mendefinisikan sebuah(signature) class yang tidak berhubungan tanpa
dari sebuah kumpulan method tanpa membuatnya seolah-olah class yang
tubuh. Interface mendefinisikan berhubungan.Mari kita ambil contoh
sebuah cara stkitar dan umum dalam class Line dimana berisi method yang
menetapkan sifat-sifat dari class- menghitung panjang dari garis dan
class. Mereka menyediakan class- membandingkan object Line ke
class, tanpa memperhatikan object dari class yang sama.
lokasinya dalam hirarki class, untuk Sekarang, misalkan kita punya class
mengimplementasikan sifat-sifat yang yang lain yaitu MyInteger dimana
umum. Dengan catatan bahwa berisi method yang membandingkan
interface-interface juga menunjukkan object MyInteger ke object dari class
polimorfisme, dikarenakan program yang sama.
dapat memanggil method interface Seperti yang kita lihat disini,
dan versi yang tepat dari method kedua class-class mempunyai
yang akan dieksekusi tergantung dari method yang mirip dimana
tipe object yang melewati pemanggil membandingkan mereka dari object
method interface. lain dalam tipe yang sama, tetapi
Kita akan menggunakan mereka tidak berhubungan sama
interface jika kita ingin class yang sekali. Supaya dapat menjalankan
tidak berhubungan cara untuk memastikan bahwa dua

518
 
Pemrograman Berorientasi Objek     Bahasa Pemrorgraman 

class-class ini mengimplementasikan menyatakan classnya. Seperti yang


beberapa method dengan tkita yang dapat kita lihat nanti dalam bagian
sama, kita dapat menggunakan Interface vs class, kita dapat benar-
sebuah interface untuk hal ini. Kita benar menggunakan interface
dapat membuat sebuah class sebagai tipe data. Pada akhirnya, kita
interface, katakanlah interface perlu menggunakan interface untuk
Relation dimana mempunyai pewarisan model jamak dimana
deklarasi method pembanding. Relasi menyediakan class untuk mempunyai
interface dapat dideklarasikan lebih dari satu superclass. Pewarisan
sebagai, jamak tidak ditunjukkan di Java,
tetapi ditunjukkan di bahasa
public interface Relation  berorientasi object lain seperti C++.
{  Perbedaan utama antara sebuah
public boolean isGreater( Object a, Object b);  interface dan sebuah class abstract:
public boolean isLess( Object a, Object b);  method interface tidak punya tubuh,
public boolean isEqual( Object a, Object b);  sebuah interface hanya dapat
}  mendefinisikan konstanta dan
interface tidak langsung mewariskan
Alasan lain dalam menggunakan hubungan dengan class istimewa
interface pemrograman object adalah lainnya, mereka didefinisikan secara
untuk menyatakan sebuah interface independent.
pemrograman object tanpa

15.8. Interface dan Class


Satu ciri umum dari sebuah //COMPILE  
interface dan class adalah pada tipe /ERROR!!! 
mereka berdua. Ini artinya bahwa
sebuah interface dapat digunakan Ciri umum lain baik interface
dalam tempat-tempat dimana sebuah maupun class dapat mendefinisikan
class dapat digunakan. Sebagai method. Bagaimanapun, sebuah
contoh, diberikan class Person dan interface tidak punya sebuah kode
interface PersonInterface, berikut implementasi sedangkan pada class
deklarasi yang benar: memiliki salah satunya.
Untuk membuat interface, kita
PersonInterface pi = new Person();  tulis sebagai berikut:
Person pc = new Person(); 
public interface [InterfaceName] 
Bagaimanapun, Kita tidak dapat { 
membuat instance dari sebuah //beberapa method tanpa isi 
interface. Perhatikan contoh } 
potongan program sebagai berikut:
Sebagai contoh, mari kita membuat
PersonInterface pi = new  sebuah interface yang digunakan
PersonInterface();   untuk mendefinisikan hubungan

519
 
Bahasa Pemrograman       Pemrograman Berorientasi Objek 

antara dua object menurut urutan asli public boolean isEqual( Object a, 


dari object. Object b); 

public interface Relation 
{  Sekarang, penggunaan interface,
public boolean isGreater( Object a,  kita gunakan kata kunci implements.
Object b);  Perhatikan contoh program dibawah
public boolean isLess( Object a,  ini:
Object b); 

Program 15.6
// Class ini mendefinisikan segmen garis 
public class Line implements Relation 

private double x1; 
private double x2; 
private double y1; 
private double y2; 
public Line(double x1, double x2, double y1, double y2){ 
this.x1 = x1; 
this.x2 = x2; 
this.y1 = y1; 
this.y2 = y2; 

 
public double getLength(){ 
double length = Math.sqrt((x2‐x1)*(x2‐x1) + 
(y2‐y1)* (y2‐y1)); 
return length; 

 
public boolean isGreater( Object a, Object b){ 
double aLen = ((Line)a).getLength(); 
double bLen = ((Line)b).getLength(); 
return (aLen > bLen); 

 
public boolean isLess( Object a, Object b){ 
double aLen = ((Line)a).getLength(); 
double bLen = ((Line)b).getLength(); 
return (aLen < bLen); 

520
 
Pemrograman Berorientasi Objek     Bahasa Pemrorgraman 

 
public boolean isEqual( Object a, Object b){ 
double aLen = ((Line)a).getLength(); 
double bLen = ((Line)b).getLength(); 
return (aLen == bLen); 

Ketika class kita mencoba mengimplementasikan semua


mengimplementasikan sebuah method dari interface, jika tidak, Kita
interface, selalu pastikan bahwa Kita akan menemukan kesalahan ini,

Line.java:4: Line is not abstract and does not override abstract 
method isGreater(java.lang.Object,java.lang.Object) in 
Relation 
public class Line implements Relation 

1 error 

15.9. Hubungan dari Interface ke Class


Sebuah class dapat } 
mengimplementasikan sebuah
interface selama kode implementasi Contoh lain dari class yang meng-
untuk semua method yang extend satu superclass dan
didefinisikan dalam interface tersedia. mengimplementasikan sebuah
Hal lain yang perlu dicatat tentang interface adalah,
hubungan antara interface ke class-
class yaitu, class hanya dapat public class ComputerScienceStudent 
mengextend satu superclass, tetapi extends Student 
dapat mengimplementasikan banyak implements PersonInterface, 
interface. LivingThing { 
Sebuah contoh dari sebuah class //beberapa kode di sini 
yang mengimplementasikan interface } 
adalah sebagai berikut:
Catatan bahwa sebuah interface
public class Person implements 
bukan bagian dari hirarki pewarisan
PersonInterface,  class. Class yang tidak berhubungan
LivingThing,  dapat mengimplementasikan
WhateverInterface {  interface yang sama.
//beberapa kode di sini 

521
 
Bahasa Pemrograman       Pemrograman Berorientasi Objek 

15.10. Pewarisan Antar Interface


Interface bukan bagian dari mewariskan semua deklarasi method
hirarki class. sedangkan interface dalam PersonInterface.
dapat mempunyai hubungan public interface PersonInterface { 
pewarisan antara mereka sendiri. . . . 
misalnya, ketika kita punya dua } 
interface StudentInterface dan public interface StudentInterface 
interface PersonInterface. Jika extends PersonInterface { 
StudentInterface meng- extend . . . 
PersonInterface, maka ia akan } 

15.13.Soal Latihan
Jawablah soal latihan dibawah ini dengan baik dan benar.
1. Apa yang dimaksud dengan pemrograman Object oriented dan prosedural
2. Sebutkan perbedaan antara kedua program tersebut
3. Berilah gambaran yang jelas mengenai pemroraman OOP
4. Apa yang dimaksud dengan abstraksi
5. Apa yang dimaksud dengan enkapsulasi
6. Apa yang dimaksud dengan pewarisan
7. Apa yang dimaksud dengan imutable dan mutable objek
8. Apa yang dimaksud dengan bahasa pemrograman modular dan buatlah
program sederhana
9. Apa yang dimaksud dengan Priority queue (PQ)

522
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 

BAB 16
INHERITANCE, FRIENDS, POLYMORPHISM DAN
OVERLOADING

16.1. Menggunakan Obyek dan Class


16.2. Realisasi Prosedur dan Fungsi dalam Class
16.3. Class Private , Class Public, dan Class Protected
16.4. Friend
16.5. Friend class
16.6. Inheritance
16.7. Class basis virtual
16.8. Inheritance between class
16.9. Multiple inheritance
16.10. Polymorphism
16.11. Overloading
16.12. Soal Latihan

16.1. Menggunakan Obyek dan Class


Untuk memahami tentang Class menjadi satu tidak terpisah-pisah
ada baiknya kita bahas mengenai (Identitas Sekolah sendiri, Nama
Struct yang merupakan suatu Siswa sendiri, dan sebagainya).
perintah dalam bahasa C++ sebagai Jadi seakan-akan persis seperti
pembentuk tipe data baru. Sebuah kalau kita melihat kartu pelajar di
contoh misal tentang kartu pelajar. Di atas, dalam satu kartu terdapat
dalam kartu pelajar terdapat beberapa informasi sekaligus. Untuk
keterangan tentang Identitas mewujudkan hal tersebut bahasa
Sekolah, Nama Siswa, Nomor Induk C++ menyediakan keyword yang
Siswa, Alamat Siswa, Jurusan/Kelas. disebut Struct. Contoh penggunaan
Pengertian data-data tersebut harus sebagai berikut:

Program 16.1
#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
 
struct KartuPelajar 

523
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 

    char Sekolah[20]; 
    char Nama[25]; 
    char NIS[12]; 
    char Alamat[25]; 
    char Kelas[10]; 
}; 
 
int main(int argc, char *argv[]) 

    KartuPelajar data; 
     
    cout<<"Pengisian Data Kartu Pelajar"<<endl; 
    cout<<"Asal Sekolah : "; 
    cin.getline(data.Sekolah, sizeof(data.Sekolah)); 
    cout<<"Nama Siswa : "; 
    cin.getline(data.Nama, sizeof(data.Nama)); 
    cout<<"N I S : "; 
    cin.getline(data.NIS, sizeof(data.NIS)); 
    cout<<"Alamat : "; 
    cin.getline(data.Alamat, sizeof(data.Alamat)); 
    cout<<"Jurusan/Kelas : "; 
    cin.getline(data.Kelas, sizeof(data.Kelas)); 
    cout<<endl<<endl; 
     
    cout<<"Hasil Pengisian Data "<<endl; 
    cout<<"Asal Sekolah : "<<data.Sekolah<<endl; 
    cout<<"Nama Siswa : "<<data.Nama<<endl; 
    cout<<"N I S : "<<data.NIS<<endl; 
    cout<<"Alamat : "<<data.Alamat<<endl; 
    cout<<"Jurusan/Kelas : "<<data.Kelas<<endl; 
    system("PAUSE"); 
    return EXIT_SUCCESS; 

Keluaran dari program diatas adalah sebagai berikut:


Pengisian Data Kartu Pelajar 
Asal Sekolah : SMA N 1 Yogyakarta 
Nama Siswa  : Badu Mahir Banget 
N I S : 1234 
Alamat : Jl. Antah Berantah 2009 
Jurusan / Kelas : X IPA 1 

524
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 
Hasil Pengisian Data
Pengisian Data Kartu Pelajar 
Asal Sekolah : SMA N 1 Yogyakarta 
Nama Siswa  : Badu Mahir Banget 
N I S : 1234 
Alamat : Jl. Antah Berantah 2009 
Jurusan / Kelas : X IPA 1 

Lebih lanjut, struct dalam { 


program di atas merupakan tipe data     public: 
baru yang bernama KartuPelajar, ini         char Sekolah[20]; 
sama dengan char, int, float dan        char Nama[25]; 
sebagainya. Hal itu lebih diyakinkan         char NIS[12]; 
pada main() ada perintah         char Alamat[25]; 
KartuPelajar data; dapat dijelaskan         char Kelas[10]; 
bahwa data merupakan variable
}; 
dengan tipe KartuPelajar. Keyword
struct dalam bahasa C++ dapat
Potongan program di atas
digantikan dengan class seperti
merupakan pembuatan tipe data baru
contoh di bawah ini:
juga namun menggunakan class,
bukan struct. Program selengkapnya
class KartuPelajar 
seperti berikut:
 

Program 16.2
#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
 
class KartuPelajar 

   public:  
    char Sekolah[20]; 
    char Nama[25]; 
    char NIS[12]; 
    char Alamat[25]; 
    char Kelas[10]; 
}; 
 
int main(int argc, char *argv[]) 

    KartuPelajar data; 
525
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 
     
    cout<<"Pengisian Data Kartu Pelajar"<<endl; 
    cout<<"Asal Sekolah : "; 
    cin.getline(data.Sekolah, sizeof(data.Sekolah)); 
    cout<<"Nama Siswa : "; 
    cin.getline(data.Nama, sizeof(data.Nama)); 
    cout<<"N I S : "; 
    cin.getline(data.NIS, sizeof(data.NIS)); 
    cout<<"Alamat : "; 
    cin.getline(data.Alamat, sizeof(data.Alamat)); 
    cout<<"Jurusan/Kelas : "; 
    cin.getline(data.Kelas, sizeof(data.Kelas)); 
    cout<<endl<<endl; 
 
    cout<<"Hasil Pengisian Data"<<endl; 
    cout<<"Asal Sekolah : "<<data.Sekolah<<endl; 
    cout<<"Nama Siswa : "<<data.Nama<<endl; 
    cout<<"N I S : "<<data.NIS<<endl; 
    cout<<"Alamat : "<<data.Alamat<<endl; 
    cout<<"Jurusan/Kelas : "<<data.Kelas<<endl; 
    system("PAUSE"); 
    return EXIT_SUCCESS; 

Keluaran program di atas:


Pengisian Data Kartu Pelajar 
Asal Sekolah : SMA N 3 Yogyakarta 
Nama Siswa  : Badu Pakar Banget 
N I S : 1500 
Alamat : Jl. Kemana‐mana 007 
Jurusan / Kelas : X IPA 3 

Hasil Pengisian Data


Pengisian Data Kartu Pelajar 
Asal Sekolah : SMA N 3 Yogyakarta 
Nama Siswa  : Badu Pakar Banget 
N I S : 1500 
Alamat : Jl. Kemana‐mana 007 
Jurusan / Kelas : X IPA 3 

Lalu apa bedanya selain tersebut ? Di sinilah konsep object


keyword struct diganti dengan class oriented programming (pemrograman
dan ditambah public: dalam class berorientasi obyek) seharusnya

526
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 
berbeda. Dalam pemrograman di atas. Sehingga fungsi pengisian
berorientasi obyek antara data atau data dan pencetakan data menjadi
variable dan fungsinya menjadi satu satu dalam class, contoh lengkap
kesatuan tidak terpisah seperti struct sebagai berikut:

Program 16.3
#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
 
class KartuPelajar 

   private:  
     char Sekolah[20]; 
     char Nama[25]; 
     char NIS[12]; 
     char Alamat[25]; 
     char Kelas[10]; 
     
   public: 
     void pengisian() 
     { 
        cout<<"Pengisian Data Kartu Pelajar"<<endl; 
        cout<<"Asal Sekolah : "; 
        cin.getline(Sekolah, sizeof(Sekolah)); 
        cout<<"Nama Siswa : "; 
        cin.getline(Nama, sizeof(Nama)); 
        cout<<"N I S : "; 
        cin.getline(NIS, sizeof(NIS)); 
        cout<<"Alamat : "; 
        cin.getline(Alamat, sizeof(Alamat)); 
        cout<<"Jurusan/Kelas : "; 
        cin.getline(Kelas, sizeof(Kelas)); 
        cout<<endl<<endl;   
     }; 
     void cetak() 
     { 
        cout<<"Hasil Pengisian Data"<<endl; 
        cout<<"Asal Sekolah : "<<Sekolah<<endl; 
        cout<<"Nama Siswa : "<<Nama<<endl; 
        cout<<"N I S : "<<NIS<<endl; 
        cout<<"Alamat : "<<Alamat<<endl; 

527
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 
        cout<<"Jurusan/Kelas : "<<Kelas<<endl;   
     }; 
}; 
 
int main(int argc, char *argv[]) 

    KartuPelajar data; 
     
    data.pengisian(); 
    data.cetak(); 
    system("PAUSE"); 
    return EXIT_SUCCESS; 

Dalam program di atas dapat Sedangkan method pada class


dilihat bahwa antara variable dan bersifat public, tentunya dimaksudkan
method menjadi satu dalam class. agar dapat dipakai secara umum dari
Selain itu ada perubahan dari contoh class yang lain atau class
sebelumnya bahwa variable berubah turunannya.
sifat dari public menjadi private. Hal Pada contoh program di atas
ini dimaksudkan untuk konten dari method ditulis langsung
penyembunyian data (information dalam class, itu merupakan cara
hiding) dari pengguna, sehingga pertama. Ada cara kedua penulisan
pengguna tidak dapa mengubah- konten method di luar class supaya
ubah data secara langsung tetapi lebih leluasa apabila kontennya
harus melalui pemanggilan class atau panjang. Program lengkapnya seperti
penurunan (inheritance) class. berikut:

Program 16.4
#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
 
class KartuPelajar 

   private:  
     char Sekolah[20]; 
     char Nama[25]; 
     char NIS[12]; 
     char Alamat[25]; 
     char Kelas[10]; 
     
   public: 
528
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 
     void pengisian(); 
     void cetak(); 
}; 
 
void KartuPelajar::pengisian() 

   cout<<"Pengisian Data Kartu Pelajar"<<endl; 
   cout<<"Asal Sekolah : "; 
   cin.getline(Sekolah, sizeof(Sekolah)); 
   cout<<"Nama Siswa : "; 
   cin.getline(Nama, sizeof(Nama)); 
   cout<<"N I S : "; 
   cin.getline(NIS, sizeof(NIS)); 
   cout<<"Alamat : "; 
   cin.getline(Alamat, sizeof(Alamat)); 
   cout<<"Jurusan/Kelas : "; 
   cin.getline(Kelas, sizeof(Kelas)); 
   cout<<endl<<endl;   
}; 
 
void KartuPelajar::cetak() 

   cout<<"Hasil Pengisian Data"<<endl; 
   cout<<"Asal Sekolah : "<<Sekolah<<endl; 
   cout<<"Nama Siswa : "<<Nama<<endl; 
   cout<<"N I S : "<<NIS<<endl; 
   cout<<"Alamat : "<<Alamat<<endl; 
   cout<<"Jurusan/Kelas : "<<Kelas<<endl;   
}; 
 
int main(int argc, char *argv[]) 

    KartuPelajar data; 
     
    data.pengisian(); 
    data.cetak(); 
 
    system("PAUSE"); 
    return EXIT_SUCCESS; 

 

529
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 
Penulisan dalam pemrograman menunjukkan ciri-ciri pemrograman
berorientasi obyek lebih lazim contoh beririentasi obyeknya dibanding cara
terakhir, walaupun cara pertama tidak pertama.
salah. Dalam contoh cara kedua lebih

16.2. Realisasi Prosedur dan Fungsi dalam Class


Sebuah class telah disinggung di sebuah class dengan class lainnya,
uraian sebelumnya bahwa prosedur dan merupakan nyawanya class
maupun fungsi (method) merupakan tersebut karena pengaturan proses
satu kesatuan dengan datanya, dari suatu class melalui komponen
sering disebut dengan encapsulated. ini. Untuk lebih jelasnya lihat contoh
Prosedur dan fungsi ini di bawah ini:
merupakan dasar untuk komunikasi

Program 16.5
#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
 
class Titik 

      int Absis; 
      int Ordinat; 
       
   public: 
       void SetAbsis(int x); 
       void SetOrdinat(int y); 
       int AmbilAbsis(); 
       int AmbilOrdinat(); 
}; 
 
void Titik::SetAbsis(int x) 

     Absis = x;      

 
void Titik::SetOrdinat(int y) 

     Ordinat = y;      

 

530
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 
int Titik::AmbilAbsis() 

     return Absis;      

 
int Titik::AmbilOrdinat() 

     return Ordinat;      

 
int main(int argc, char *argv[]) 

    Titik A; 
    A.SetAbsis(4); 
    A.SetOrdinat(6); 
    cout<<"Absis titik A = "<<A.AmbilAbsis()<<"\n"; 
    cout<<"Ordinat titik A = "<<A.AmbilOrdinat()<<"\n"; 
    Titik* B = &A; 
    cout<<"Absis titik B = "<<B‐>AmbilAbsis()<<"\n"; 
    cout<<"Ordinat titik B = "<<B‐>AmbilOrdinat()<<"\n"; 
    A.SetAbsis(2); 
    A.SetOrdinat(3); 
    Titik& C = A; 
    cout<<"Absis titik C = "<<C.AmbilAbsis()<<"\n"; 
    cout<<"Ordinat titik C = "<<C.AmbilOrdinat()<<"\n"; 
    system("PAUSE"); 
    return EXIT_SUCCESS; 

 

Program di atas merupakan dan fungsi AmbilOrdinat() guna


program untuk mengolah tentang titik pengolahan lebih lanjut, misal untuk
dalam suatu bidang 2 dimensi. mencari jarak antara dua titik dalam
Sehingga mempunyai variable x dan suatu bidang 2 dimensi. Dalam
y. Untuk dapat mengolah data-data program di atas juga dimunculkan
absis serta ordinat dalam bidang 2 cara pemanggilan obyek dengan
dimensi tersebut diperlukan prosedur berbagai cara :
untuk set absis dan prosedur untuk
set ordinat. Hal itu dapat dilihat dalam Titik A; pemanggilan obyek
prosedur SetAbsis(int x) dan secara biasa
prosedur SetOrdinat(int y); Titik* B = &A; pemanggilan obyek
Sedangkan untuk mengambil data secara pointer
baik absis maupun ordinatnya Titik& C = A; pemanggilan obyek
menggunakan fungsi AmbilAbsis() secara reference
531
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 
menggunakan (.) titik tetapi harus
Pemanggilan anggota dari obyek menggunakan (->) panah. Seperti
juga ditunjukkan contoh pada program di atas untuk memanggil
pemanggilan biasa dan reference fungsi AmbilAbsis(), maka
berbeda dengan apabila perintahnya B->AmbilAbsis(). Begitu
pemanggilan obyek secara pointer. pula untuk prosedur SetAbsis(x),
Lebih jelasnya seperti berikut: maka perintahnya B->SetAbsis(x).
Titik * B = &A; untuk Contoh lain program untuk
pemanggilan fungsi atau prosedur menentukan kelulusan siswa.
anggota obyek tersebut tidak dapat

Program 16.6
#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
 
class Siswa 

      char Nama[25]; 
      char NIS[12]; 
      double Nilai; 
   public: 
      void InpNama(); 
      void InpNIS(); 
      void InpNilai(); 
      void output(); 
      char* cek(double n);      
}; 
 
void Siswa::InpNama() 

      cout<<"Nama Siswa = "; 
      cin.getline(Nama, sizeof(Nama)); 

 
void Siswa::InpNIS() 

      cout<<"NIS Siswa = "; 
      cin.getline(NIS, sizeof(NIS)); 

 
void Siswa::InpNilai() 

532
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 

      cout<<"Nilai Siswa = "; 
      cin>>Nilai; 

 
void Siswa::output() 

      cout<<endl<<"Hasil Ujian Siswa"<<endl; 
      cout<<"Nama Siswa = "<<Nama<<endl; 
      cout<<"NIS Siswa  = "<<NIS<<endl; 
      cout<<"Keterangan = "<<cek(Nilai)<<endl; 

 
char* Siswa::cek(double n) 

      if (n>=75) 
         return "Lulus"; 
      else 
         return "Tak Lulus";       

 
int main(int argc, char *argv[]) 

    Siswa Data; 
    cout<<"Masukkan Data Siswa"<<endl; 
    Data.InpNama(); 
    Data.InpNIS(); 
    Data.InpNilai(); 
    Data.output(); 
    system("PAUSE"); 
    return EXIT_SUCCESS; 

 
Dalam program di atas ada satu Masukkan Data Siswa
fungsi yang mengembalikan nilai Nama Siswa = aku 
string yaitu fungsi cek. Fungsi ini NIS Siswa = 1234 
akan mengembalikan keterangan Nilai Siswa = 75 
sebagai status siswa “Lulus” ataupun
“Tak Lulus”, sehingga harus Hasil Ujian Siswa
mengembalikan nilai string. Keluaran Nama Siswa = aku 
program tersebut dapat dilihat seperti NIS Siswa     = 1234 
di bawah ini: Keterangan   = Lulus 

533
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 
16.3. Class Private , Class Public, dan Class Protected
Penggunaan private maupun       int Absis; 
public biasanya digunakan bersama-       int Ordinat; 
sama atau dikombinasikan. Pada }; 
dasarnya suatu class apabila tidak
dituliskan secara default adalah Variabel Absis dan Ordinat
private jadi pada prinsipnya class merupakan variabel private walaupun
tidak dapat diakses oleh class lain tidak ditulis secara eksplisit. Apabila
dan hanya dapat diakses oleh class ditulispun hasilnya sama saja, karena
itu sendiri. Untuk lebih memahami secara default komponen dalam
kita kembali ke contoh aplikasi class suatu class adalah private. Dalam hal
yang pertama kali. ini variabel Absis dan Ordinat tidak
bisa diakses secara langsung.
class Titik  Sebagai gambaran dilihat contoh
{  di bawah ini:
 
Program 16.7
#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
 
class Titik 

      int X; 
      int Y; 
}; 
 
int main(int argc, char *argv[]) 

    Titik A; 
    A.X = 4; 
    A.Y = 6; 
    cout<<"Absis titik A = "<<A. X<<"\n"; 
    cout<<"Ordinat titik A = "<<A.Y<<"\n"; 
    system("PAUSE"); 
    return EXIT_SUCCESS; 

Program di atas apabila di dan Y tidak dianggap sebagai


compile akan terjadi kesalahan member hal ini karena private. Lain
dianggap kelas Titik tidak mempunyai halnya jika diganti menjadi public
member bernama X dan Y. Jadi X seperti berikut:

534
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 
Program 16.8
#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
 
class Titik 

    public:  
      int X; 
      int Y; 
}; 
 
int main(int argc, char *argv[]) 

    Titik A; 
    A.X = 4; 
    A.Y = 6; 
    cout<<"Absis titik A = "<<A. X<<"\n"; 
    cout<<"Ordinat titik A = "<<A.Y<<"\n"; 
    system("PAUSE"); 
    return EXIT_SUCCESS; 

Program di atas jikalau Tapi kalau bisa diubah dari luar


dijalankan tidak akan terjadi maka data itu terlalu berisiko ibarat
kesalahan, karena variabel X dan Y sebuah rumah bisa dimasuki orang
public jadi tidak ada penyembunyian sekehendak hati, hal ini tidak boleh
informasi (information hiding). terjadi. Oleh karena itu variabel
Keluaran dari program tersebut tersebut harus tetap private tetapi
seperti berikut: diberi jalan masuk apabila diperlukan
untuk diganti atau diubah nilainya.
Absis titik A = 4  Program secara lengkapnya menjadi
Ordinat titik A = 6  #include <cstdlib>

 
Program 16.9 
#include <iostream> 
 
using namespace std; 
 
class Titik 

535
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 
  private: 
     int X; 
     int Y; 
  public: 
     void SetAbsis(int x); 
     void SetOrdinat(int y); 
     int AmbilAbsis(); 
     int AmbilOrdinat(); 
}; 
 
void Titik::SetAbsis(int x) 

     X = x;     

 
void Titik::SetOrdinat(int y) 

     Y = y;     

 
int Titik::AmbilAbsis() 

     return X;      

 
int Titik::AmbilOrdinat() 

     return Y;      

 
int main(int argc, char *argv[]) 

    Titik A; 
    A.SetAbsis(4); 
    A.SetOrdinat(6); 
    cout<<"Absis titik A = "<<A.AmbilAbsis()<<"\n"; 
    cout<<"Ordinat titik A = "<<A.AmbilOrdinat()<<"\n"; 
    system("PAUSE"); 
    return EXIT_SUCCESS; 

536
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 
Jadi ada dua pasang method ada pintu masuk dan pintu keluar,
yang ditambahkan, satu untuk untuk mengambil barang-barang
memasukkan data baik X maupun Y yang ada harus melalui prosedur
yaitu lewat SetAbsis maupun tidak bisa begitu saja. Dapat
SetOrdinat. Yang kedua untuk disimpulkan untuk mengakses data
menampilkan atau melihat variabel X dalam suatu class yang bersifat
ataupun Y melalui perintah private bisa dengan membuat
AmbilAbsis dan AmbilOrdinat. Disini method yang bersifat public sehingga
terlihat bahwa pintu masuk dan bisa memanipulasi data/variabel yang
keluar melalui jalur tertentu tidak bisa ada didalamnya. Contoh lain sebagai
langsung seperti apabila variabel di berikut:
set public. Ibarat super market disitu

Program 16.10
#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
 
class A 

  private: 
    int privat; 
  public: 
    int umum; 
    int AmbilPrivat() 
    { return privat; }; 
    void SetPrivat(int data) 
    { privat = data; }; 
     
    void TesA(); 
}; 
 
void A::TesA() 

     cout<<"Keluaran dari TesA"<<endl; 
     cout<<"Umum = "<<umum<<endl; 
     cout<<"Private = "<<privat<<endl; 

 
class B: public A 

  public: 
    void TesB();     
537
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 
}; 
 
void B::TesB() 

     cout<<"Keluaran dari TesB"<<endl; 
     cout<<"Umum = "<<umum<<endl; 
     cout<<"Private = "<<AmbilPrivat()<<endl; 

int main(int argc, char *argv[]) 

    A ContohA; 
     
    ContohA.SetPrivat(4); 
    ContohA.umum = 20; 
    ContohA.TesA(); 
     
    cout<<endl<<"Keluaran dari Main()"<<endl; 
    cout<<"Umum = "<<ContohA.umum<<endl; 
    cout<<"Private = "<<ContohA.AmbilPrivat()<<endl<<endl; 
     
    B ContohB; 
     
    ContohB.SetPrivat(40); 
    ContohB.umum = 200; 
    ContohB.TesB(); 
     
    cout<<endl<<"Keluaran dari Main()"<<endl; 
    cout<<"Umum = "<<ContohB.umum<<endl; 
    cout<<"Private = "<<ContohB.AmbilPrivat()<<endl<<endl; 
     
    system("PAUSE"); 
    return EXIT_SUCCESS; 

Dari contoh di atas dapat dilihat Tetapi pemanggilan dari class


perbedaan pemakaian public dan turunannya yaitu class B harus
private dalam memanipulasi data di melalui method public-nya,
dalam class, baik dari class itu sendiri contohnya pada method TesB() untuk
maupun dari class turunannya. Dari menampilkan data harus pakai
class sendiri yaitu class A semua AmbilPrivat tidak langsung variabel
variabel maupun method bisa privat seperti TesA(). Tetapi untuk
diakses lansung, contoh method variabel umum bisa dipanggil
TesA(). langsung karena sifatnya public, jadi

538
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 
tidak ada beda cara pemanggilan turunan public dari class A.
baik TesA() maupun TesB(). Sebenarnya masih ada satu lagi yaitu
Sedangkan untuk pemanggilan sifat protected. Suatu class yang
di main() baik ContohA yang memproteksi data-datanya dengan
merupakan class baru dari class A, sifat protected hanya bisa diakses
dan Contoh B yang merupakan class dari dirinya sendiri atau dari class
baru dari class B tidak ada turunannya. Lihat contoh berikut dan
perbedaan cara pemanggilan. Bisa bandingkan dengan sifat private yang
dimengerti karena class B merupaka telah dibahas sebelumnya.

Program 16.11
#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
 
class A 

  protected: 
    int proteksi; 
  public: 
    int umum; 
    int AmbilProteksi() 
    { return proteksi; }; 
    void SetProteksi(int data) 
    { proteksi = data; }; 
     
    void TesA(); 
}; 
 
void A::TesA() 

     cout<<"Keluaran dari TesA"<<endl; 
     cout<<"Umum = "<<umum<<endl; 
     cout<<"Private = "<<proteksi<<endl; 

 
class B: public A 

  public: 
    void TesB();     
}; 
 

539
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 
void B::TesB() 

     cout<<"Keluaran dari TesB"<<endl; 
     cout<<"Umum = "<<umum<<endl; 
     cout<<"Protected = "<<proteksi<<endl; 

int main(int argc, char *argv[]) 

    A ContohA; 
     
    ContohA.SetProteksi(4); 
    ContohA.umum = 20; 
    ContohA.TesA(); 
     
    cout<<endl<<"Keluaran dari Main()"<<endl; 
    cout<<"Umum = "<<ContohA.umum<<endl; 
    cout<<"Private = "<<ContohA.AmbilProteksi()<<endl<<endl; 
     
    B ContohB; 
     
    ContohB.SetProteksi(40); 
    ContohB.umum = 200; 
    ContohB.TesB(); 
     
    cout<<endl<<"Keluaran dari Main()"<<endl; 
    cout<<"Umum = "<<ContohB.umum<<endl; 
    cout<<"Private = "<<ContohB.AmbilProteksi()<<endl<<endl; 
     
    system("PAUSE"); 
    return EXIT_SUCCESS; 

 

Coba lihat method TesA() dan diakses langsung dari turunannya.


TesB() cara mengakses data class Tetapi harus melalui method yang
sama persis (variabel maupun bersifat public. Namun perlu
method) contoh variabel umum dan dicermati cara macam ini mempunyai
variabel proteksi. Jadi class yang kelemahan karena data tersebut
bersifat protected bisa diakses seolah-olah menjadi bersifat public
langsung persis seperti class tersebut meskipun dideklarasikan secara
melalui turunannya. Bandingkan private atau protected; Untuk
dengan contoh sebelumnya yaitu mengatasi masalah semacam itu,
class yang bersifat private tidak dapat C++ menyediakan satu keyword,

540
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 
yaitu friend. Sebuah fungsi atau class anggota class lain, baik bersifat
yang dideklarasikan dengan sifat private, protected, maupun public.
friend dapat mengakses semua

16.4. Friend
Sebelumnya sudah di bahas untuk mengakses member private
bahwa ada tiga macam proteksi bagi dan protected.
member class, yakni: public, Untuk itu kita mendeklarasikan
protected dan private. Member prototype fungsi eksternal yang
protected dan private tidak bisa dimaksud yang akan menambah
diakses dari luar class dimana dia akses sebelumnya dengan instruksi
dideklarasikan. Walaupun demikian friend di dalam deklarasi class yang
aturan ini dilanggar dengan adanya dapat dishare oleh semua member.
friend di dalam class, sehingga kita Perhatikan contoh berikut dimana kita
dapat membuat fungsi eksternal mendeklarasikan friend function
duplicate:

Program 16.12. Friend functions


#include <iostream.h> 
 
class CRectangle { 
    int width, height; 
  public: 
    void set_values (int, int); 
    int area (void) {return (width * height);} 
    friend CRectangle duplicate (CRectangle); 
}; 
 
void CRectangle::set_values (int a, int b) { 
  width = a; 
  height = b; 

 
CRectangle duplicate (CRectangle rectparam) 

  CRectangle rectres; 
  rectres.width = rectparam.width*2; 
  rectres.height = rectparam.height*2; 
  return (rectres); 

 
int main () { 
541
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 
  CRectangle rect, rectb; 
  rect.set_values (2,3); 
  rectb = duplicate (rect); 
  cout << "Hasil nya = "<<rectb.area(); 
}    
 
Dari fungsi duplicate yang member class yang sifatnya
merupakan friend dari CRectangle, privateprotected. Secara umum
kita dapat mengakses member width penggunaan fungsi friend
dan height dari objek yang berbeda kelihatannya keluar dari metodologi
dalam tipe CRectangle. Perhatikan OOP, sehingga selama masih
bahwa fungsi duplicate() bukan memungkinkan lebih baik
merupakan anggota dari class menggunakan member yang
CRectangle classnya sama untuk masalah ini.
Dengan friend function fungsi Seperti pada contoh sebelumnya,
yang bukan merupakan anggota akan lebih sederhana jika duplicate()
class (diliar class) dapat mengakses diletakkan dalam class CRectangle.

Program 16.13
#include <iostream.h> 
#include <conio.h> 
class contoh { 
    int x; 
    void fcontoh(); 
public: 
    void fcontoh1 (); 
    void fcontoh2 (); 
    friend void fcontoh3 (); 
}; 
 
void contoh::fcontoh() 
{ cout<<"\nFungsi fcontoh anggota class contoh, bersifat private"; 

 
void contoh::fcontoh1() 
{ x=3; 
  cout<<"Fungsi contoh 1 anggota class contoh"; 
  fcontoh(); 
  cout<<"\nNilai x = "<<x;} 
 
void contoh::fcontoh2() 
{ cout<<"\n\nFungsi contoh 2 anggota class contoh"; 
  cout<<"\nNilai x = "<<x;} 

542
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 
 
void fcontoh3() 
{ contoh b; 
  b.x=10; 
  cout<<"\n\nFungsi contoh 3 bukan anggota class contoh"; 
  cout<<"\ntetapi merupakan fungsi friend dari class contoh"; 
  cout<<"\nsehingga dapat mengakses x yang sifatnya private"; 
  cout<<"\ndan mengakses fcontoh yang juga bersifat private"; 
  b.fcontoh(); 
  cout<<"\nNilai x = "<<b.x;} 
 
main () { 
  contoh a; 
  a.fcontoh1(); 
  a.fcontoh2(); 
  fcontoh3(); 
  getch(); 

 

Telah diketahui bahwa tujuan meruntuhkan konsep enkapsulasi,


utama dari pemrograman berorientasi tentu saja jika terlalu banyak
obyek adalah enkapsulasi data dan digunakan. Hal ini disebabkan karena
fungsi yang mengakses data di friend memungkinkan pihak di luar
dalam class. Pengkapsulan class dapat mengakses anggota
memberikan keuntungan terutama class termasuk yang bersifat private.
memudahkan dalam pemeliharaan Itulah sebabnya friend harus
program dan juga dalam debugging. digunakan seperlunya dan juga
Namun pengkapsulan untuk obyek digunakan secara tepat. Apabila
yang kompleks terkadang sulit ternyata kita terlalu banyak
dilakukan, sehingga adakalanya menggunakan friend maka sebaiknya
aturan terpaksa harus dilanggar demi merombak rancangan program class
tujuan yang harus dicapai. Seperti yang telah dibuat. Sebaiknya class-
jika punya rumah ada kamar yang class yang menggunakan friend
sifatnya pribadi, sehingga tidak dipecah menjadi beberapa class lain.
dimasuki oleh orang lain. Tetapi Secara umum, friend berguna kalau
kadang justru seorang teman yang ada suatu operasi yang hendak
dianggap sahabat boleh memasuki mengakses data dari dua class yang
kamar tersebut, itulah analogi dari tidak ada kaitannya. Friend juga
friend. memungkinkan untuk menampilkan
Friend pada C++ memang isi obyek lain.
kontradiksi. Disatu pihak dapat Salah satu fungsi friend adalah
menyederhanakan kompleksitas fungsi bukan anggota class yang
suatu obyek, tetapi juga dapat dapat mengakses anggota class.

543
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 
Fungsi ini dapat dipakai untuk Gambaran fungsi friend dapat dilihat
mengakses anggota class yang pada program berikut:
bersifat private maupun protected.

Program 16.14
#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
 
#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
 
class Siswa 

    private: 
        char *Nama; 
        char *Kelas; 
        int NIS; 
    public: 
        Siswa(); 
        void inisialisasi(int Nomor, char *Nama, char *Kelas); 
        friend void tampil_data(Siswa swa); 
}; 
 
Siswa::Siswa() 

    NIS = 0; 
    Nama = ""; 
    Kelas = ""; 

 
void Siswa::inisialisasi(int Nomor,char *Nama, char *Kelas) 

     Siswa::NIS = Nomor; 
     Siswa::Nama = Nama; 
     Siswa::Kelas = Kelas; 

 
void tampil_data(Siswa swa) 

544
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 
     cout<<"Nomor Siswa = "<<swa.NIS<<endl; 
     cout<<"Nama Siswa  = "<<swa.Nama<<endl; 
     cout<<"Kelas Siswa = "<<swa.Kelas<<endl; 

 
int main(int argc, char *argv[]) 

    Siswa sis; 
    sis.inisialisasi(1234,"Badu","X IPS"); 
    tampil_data(sis); 
    system("PAUSE"); 
    return EXIT_SUCCESS; 

Keluaran dari program di atas adalah sebagai berikut:


Nomor Siswa  = 1234 
Nama Siswa  = Badu 
Kelas Siswa  = X IPS

Pada contoh di atas, fungsi tampil_data(sis);


tampil_data() pada class Siswa
dideklarasikan sebagai fungsi friend. tidak diperbolehkan menyebut nama
Dengan demikian, fungsi ini dapat class di depan fungsi tersebut seperti
mengakses data seperti NIS. contoh berikut:
Perhatikan saat fungsi ini
didefinisikan, terlihat bahwa fungsi ini sis.tampil_data();
seperti fungsi biasa bukan fungsi dari
anggota class. Tidak didahului seperti layaknya memanggil fungsi
dengan: sebuah class. Jadi fungsi friend
dianggap sebagai argument biasa
 Siswa:: bukan anggota suatu class. Sebuah
contoh lain mengenai fungsi friend
di depan nama fungsi. ditunjukkan pada program berikut.
Oleh karena fungsi tampil_data() Contoh ini menggambarkan fungsi
berkedudukan sebagai fungsi biasa friend yang dapat mengakses tiga
maka cara pemanggilannya juga buah obyek sekaligus.
mengikuti kaidah fungsi biasa,
seperti:

Program 16.15
#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
2008 | Direktorat Pembinaan SMK 545
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 
 
class HasilUjian 

    private: 
        int NIS; 
        double Nilai; 
    public: 
        HasilUjian(int Nomor, double Nil); 
        friend double nilai_max(HasilUjian a, HasilUjian b, HasilUjian c); 
}; 
 
HasilUjian::HasilUjian(int Nomor, double Nil) : NIS(Nomor), Nilai(Nil) 


 
double nilai_max(HasilUjian a, HasilUjian b, HasilUjian c) 

     double maks = a.Nilai; 
     maks = (b.Nilai) > maks ? b.Nilai : maks; 
     maks = (c.Nilai) > maks ? c.Nilai : maks; 
      
     return maks; 

 
int main(int argc, char *argv[]) 

    HasilUjian   amir(1234, 78.6); 
    HasilUjian  endah(1237, 88.5); 
    HasilUjian   siti(1224, 58.6); 
     
    cout<<"Nilai ujian terbesar : "<<nilai_max(amir,endah,siti)<<endl;     
    system("PAUSE"); 
    return EXIT_SUCCESS; 

Keluaran program di atas adalah sebagai berikut:


Nilai ujian terbesar : 88.5 

Pada program di atas, berfungsi mencari nilai terbesar


friend double nilai_max(HasilUjian a,  dengan fungsi nilai_max() dari tiga
HasilUjian b,HasilUjian c)  obyek a, b, dan c yang merupakan
class HasilUjian. Bagaimana untuk
pemakaian friend yang lebih dari satu

546
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 
class ?. Program berikut suatu kemudian ada fungsi friend
contoh pemakaian fungsi friend untuk info_pemain_campuran(). Program
mengakses dua buah class. Ada selengkapnya sebagai berikut:
class PemainWanita dan PemainPria,

Program 16.16
#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
 
class PemainPria; 
 
class PemainWanita 

   private: 
     char *nama; 
     char *asal;  
   public: 
     PemainWanita(char *nam, char *asl); 
     friend void info_pemain_campuran(PemainWanita x, PemainPria y); 
}; 
 
PemainWanita::PemainWanita(char *nam, char *asl) 

     nama = nam; 
     asal = asl; 

 
class PemainPria 

   private: 
     char *nama; 
     char *asal;  
   public: 
     PemainPria(char *nam, char *asl); 
     friend void info_pemain_campuran(PemainWanita x, PemainPria y); 
}; 
 
PemainPria::PemainPria(char *nam, char *asl) 

     nama = nam; 
     asal = asl; 

547
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 

 
void info_pemain_campuran(PemainWanita x, PemainPria y) 

     cout<<"Pemain ganda campuran"<<endl; 
     cout<<x.nama<<" < "<<x.asal<<" > "<<endl; 
     cout<<y.nama<<" < "<<y.asal<<" > "<<endl;      

 
int main(int argc, char *argv[]) 

    PemainWanita p_wanita("Anna Kournikova", "Rusia"); 
    PemainPria p_pria("Rafael Nadal", "Spanyol"); 
     
    info_pemain_campuran(p_wanita, p_pria); 
    system("PAUSE"); 
    return EXIT_SUCCESS; 

Keluaran program seperti berikut:


Pemain ganda campuran 
Anna Kournikova < Rusia > 
Rafael Nadal < Spanyol >

Pada program di atas ada baris yang melibatkan dua buah class yang
berisi: berbeda atau lebih adalah
mendeklarasikan fungsi tersebut
class PemainPria;  pada class-class yang hendak
diakses. Bentuk Pendeklarasiannya
Pernyataan ini dikenal dengan istilah persis sama, seperti contoh baris di
refernsi di depan. Hal seperti ini atas terdapat di kedua class baik
diperlukan mengingat pengenal class PemainWanita maupun PemainPria.
PemainPria akan digunakan pada Para pemrogram C++ biasa
pendeklarasian class PemainWanita, melewatkan obyek pada fungsi friend
yaitu pada baris yang berisi: dengan referensi. Hal seperti ini
sangat bermanfaat untuk obyek
friend void  berukuran besar. Dengan
info_pemain_campuran(PemainWanita  melewatkan secara referensi,
x, PemainPria y);  prosesnya menjadi lebih cepat.
Deklarasi lengkap PemainPria ini Deklarasi fungsi friend di atas bisa
dapat diletakkan di belakang. Hal diuah menjadi seperti berikut ini :
yang perlu diperhatikan dalam
membuat fungsi friend yang
548
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 
friend void  disesuaikan pada bagian definisi
info_pemain_campuran(const  fungsi, perubahannya sebagai
PemainWanita &x, const PemainPria  berikut:
&y); 
void info_pemain_campuran(const 
Keyword const di atas menunjukkan PemainWanita &x, const PemainPria &y) 
bahwa anggota obyek tidak { 
dimaksudkan untuk diubah.      ….. 
Sedangkan symbol & di depan nama } 
argument x dan y menyatakan obyek
tersebut dilewatkan berdasarkan Secara lengkap sebagai berikut:
referensi. Selain itu perlu juga

Program 16.17
#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
 
class PemainPria; 
 
class PemainWanita 

   private: 
     char *nama; 
     char *asal;  
   public: 
     PemainWanita(char *nam, char *asl); 
     friend void info_pemain_campuran(const PemainWanita &x, const PemainPria 
&y); 
}; 
 
PemainWanita::PemainWanita(char *nam, char *asl) 

     nama = nam; 
     asal = asl; 

 
class PemainPria 

   private: 
     char *nama; 
     char *asal;  

549
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 
   public: 
     PemainPria(char *nam, char *asl); 
     friend void info_pemain_campuran(const PemainWanita &x, const PemainPria 
&y); 
}; 
 
PemainPria::PemainPria(char *nam, char *asl) 

     nama = nam; 
     asal = asl; 

 
void info_pemain_campuran(const PemainWanita &x, const PemainPria &y) 

     cout<<"Pemain ganda campuran"<<endl; 
     cout<<x.nama<<" < "<<x.asal<<" > "<<endl; 
     cout<<y.nama<<" < "<<y.asal<<" > "<<endl;      

 
int main(int argc, char *argv[]) 

    PemainWanita p_wanita("Anna Kournikova", "Rusia"); 
    PemainPria p_pria("Rafael Nadal", "Spanyol"); 
     
    info_pemain_campuran(p_wanita, p_pria); 
    system("PAUSE"); 
    return EXIT_SUCCESS; 

Keluaran program tetap sama program di atas dapat dimodifikasi


dengan program sebelumnya. Suatu agar fungsi info_pemain_campuran()
fungsi anggota kelas dapat menjadi fungsi anggota class
berkedudukan sebagai fungsi friend. PemainWanita dan dideklarasikan
Fungsi seperti ini (biasa disebut sebagai frien pada class PemainPria.
fungsi anggota friend) dapat Mula-mula class PemainWanita perlu
mengakses anggota class yang dideklarasikan sebagai berikut:
mendeklarasikannya. Sebagai contoh

Program 16.18
class PemainWanita 

   private: 
     char *nama; 

550
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 
     char *asal;  
   public: 
     PemainWanita(char *nam, char *asl); 
     void info_pemain_campuran(const PemainPria &x); 
}; 

Nampak sekarang bahwa fungsi Oleh karena itu, sebelum


info_pemain_campuran() dideklarasikan PemainPria perlu
berkedudukan sebagai fungsi diberikan referensi dimuka seperti
anggota dari class PemainWanita. contoh program sebelumnya.
Argumen dari fungsi ini berupa Kemudian bagaimana
referensi dari obyek ber-clas pendeklarasian pada class
PemainPria. Penyebutan class PemainPria ? Pada class ini fungsi
PemainPria mengharuskan adanya info_pemain_campuran()
pemberitahuan kepada compiler dideklarasikan sebagai fungsi friend:
bahwa PemainPria adalah class.

Program 16.19
class PemainPria 

   private: 
     char *nama; 
     char *asal;  
     friend void PemainWanita::info_pemain_campuran(const PemainPria &x); 
   public: 
     PemainPria(char *nam, char *asl); 
}; 

Perhatikan ada perubaha pada ditambahkan nama class yang


fungsi info_pemain_campuran(), menjadi friend yaitu PemainWanita.
pada class PemainPria menjadi Program selengkapnya sebagai
bersifat private dan memakai berikut:
keyword friend. Selain itu juga

Program 16.20
#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
 
class PemainPria; 
 
class PemainWanita 

551
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 
   private: 
     char *nama; 
     char *asal;  
   public: 
     PemainWanita(char *nam, char *asl); 
     void info_pemain_campuran(const PemainPria &x); 
}; 
 
PemainWanita::PemainWanita(char *nam, char *asl) 

     nama = nam; 
     asal = asl; 

 
class PemainPria 

   private: 
     char *nama; 
     char *asal;  
     friend void PemainWanita::info_pemain_campuran(const PemainPria &x); 
   public: 
     PemainPria(char *nam, char *asl); 
}; 
 
PemainPria::PemainPria(char *nam, char *asl) 

     nama = nam; 
     asal = asl; 

 
void PemainWanita::info_pemain_campuran(const PemainPria &x) 

     cout<<"Pemain ganda campuran"<<endl; 
     cout<<nama<<" < "<<asal<<" > "<<endl; 
     cout<<x.nama<<" < "<<x.asal<<" > "<<endl;      

 
int main(int argc, char *argv[]) 

    PemainWanita p_wanita("Anna Kournikova", "Rusia"); 
    PemainPria p_pria("Rafael Nadal", "Spanyol"); 
     
    p_wanita.info_pemain_campuran(p_pria); 
552
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 
    system("PAUSE"); 
    return EXIT_SUCCESS; 

Apa yang dimaksud dengan berikut. Misal ada dua kelas yaitu D3
class friend ? Sesungguhnya suatu dan S1, keduanya mempunyai data
class dapat dijadikan sebagai friend tentang banyaknya ruang atau
dari class yang lain. Hal seperti ini kebutuhan ruang kelas. Serta
diperlukan apabila ada dua class dan ruangan D3 dapat dipakai oleh S1,
dibutuhkan mengakses bagian maka pendeklarasian masing-masing
private maupun protected dari class- class sebagai berikut:
class tersebut. Kita lihat contoh

Program 16.21
class D3 

   private: 
      int ruangD3;  
   public: 
      D3() 
      { ruangD3 = 10; } 
      friend class S1; 
}; 
 
class S1 

   private: 
      int ruangS1;  
   public: 
      S1() 
      { ruangS1 = 6; } 
      void info_ruang(D3 x); 
}; 

Pada contoh ini, x adalah obyek sekiranya keyword private pada class
dengan class D3 yang menjadi D3 diganti dengan protected. Sebab
argument fungsi info_ruang() pada seperti diketahui, anggota yang
class S1. Fungsi dimaksud untuk bersifat protected hanya bisa diakses
mengakses data ruang_D3 milik kalau class ini diwariskan ke class
obyek x(yang ber-class D3). turunan. Solusinya dengan class
Masalahnya adalah bahwa data friend seperti yang terlihat pada baris
ruangD3 bersifat private, sehingga dibawah konstructor D3(). Dan
class S1 tidak bisa mengaksesnya. dengan pernyataan ini dapat
Persoalan yang sama tetap muncul diletakkan dimana saja pada class

553
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 
D3, private, protected, maupun Ruang D3 = 10
public. Keluaran program di atas Ruang S1 =6
sebagai berikut: Total Ruang S1 = 16

16.5. Friend class


Sebagaimana kita dapat mengijinkan satu class mengakses
mendefinisikan friend function, kita member private dan protected dari
juga dapat mendefinisikan class class lainnya.
sebagai friend dari class lain, yang
 
Program 16.22 
#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
class CSquare; 
 
class CRectangle { 
    int width, height; 
  public: 
    int area (void) 
      {return (width * height);} 
    void convert (CSquare a); 
}; 
 
class CSquare { 
  private: 
    int side; 
  public: 
    void set_side (int a) 
      {side=a;} 
    friend class CRectangle; 
}; 
 
void CRectangle::convert (CSquare a) { 
  width = a.side; 
  height = a.side; 

   
int main () { 
  CSquare sqr; 
  CRectangle rect; 

554
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 
  sqr.set_side(4); 
  rect.convert(sqr); 
  cout << "Hasilnya = "<<rect.area()<<"\n"; 
  system("PAUSE"); 
  return EXIT_SUCCESS; 
}   
   
Keluaran program diatas adalah sebagai berikut:
Hasilnya = 16 
 
Dalam contoh ini kita akhir, sehingga jika kita tidak
mendeklarasikan CRectangle mengikutkan prototype CSquare
sebagai friend dari CSquare, diawal class instruksi tersebut akan
sehingga CRectangle dapat dianggap salah (tidak dikenali).
mengakses member private dan Perhatikan bahwa penggunaan
protected yang dimiliki class friend tidak akan berfungsi jika kita
CSquare, yakni CSquare::side, yang tidak menuliskannya secara eksplisit.
mendefinisikan lebar dari segiempat. Dalam contoh CSquare, CRectangle
Kita juga melihat adanya instruksi tidak dianggap sebagai suatu friend
baru di awal program, yakni class, sehingga CRectangle dapat
mengakses member private dan
class CSquare; protected milik CSquare tetapi tidak
  sebaliknya. Agar dua buah class
yang merupakan prototype dari class dapat saling mengakses member
CSquare. Hal ini diperlukan karena private dan protected nya maka
dalam deklarasi CRectangle kita keduanya harus dideklarasikan
mengacu kepada CSquare (sebagai sebagai friend class dari yang lain
parameter dalam fungsi convert() ). seperti pada contoh berikut:
Definisi CSquare disertakan di bagian

Program 16.23 
#include <iostream.h> 
#include <conio.h> 
 
class contoh { 
    int x; 
public: 
    void fcontoh1 (); 
    void fcontoh2 (); 
    friend class cth; 
}; 
 
class cth { 
    int y; 

555
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 
    void fcth(); 
public: 
    void fcth1 (); 
    friend class contoh; 
}; 
 
void cth::fcth() 
{ contoh d; 
  d.x=5; 
  cout<<"\nFungsi cth anggota class cth (private)"; 
  cout<<"\nNilai x = "<<d.x; 
  } 
 
void contoh::fcontoh1() 
{ x=3; 
  cout<<"Fungsi contoh 1 anggota class contoh"; 
  cout<<"\nNilai x = "<<x;} 
 
void contoh::fcontoh2() 
{ cth m; 
  m.y=5; 
  cout<<"\n\nFungsi contoh 2 anggota class contoh"; 
  cout<<"\nNilai x = "<<x; 
  cout<<"\nNilai y = "<<m.y; 
  m.fcth();} 
 
void cth::fcth1() 

  y=3; 
  cout<<"\n\nFungsi cth 1 anggota class cth"; 
  cout<<"\nNilai y = "<<y; 
  fcth(); 
 } 
 
main () { 
  contoh a; 
  cth b; 
  a.fcontoh1(); 
  a.fcontoh2(); 
  b.fcth1(); 
  getch(); 

556
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 
Keluaran program diatas adalah sebagai berikut:
Fungsi contoh 1 anggota class contoh 
Nilai x = 3 
 
Fungsi contoh 2 anggota class contoh 
Nilai x = 3 
Nilai y = 5 
Fungsi cth anggota class cth (private) 
Nilai x = 5 
 
Fungsi cth 1 anggota class cth 
Nilai y = 3 
Fungsi cth anggota class cth (private) 
Nilai x = 5 

16.6. Inheritance
Salah satu hal penting dalam yang ada dalam class dasarnya. Hal
class adalah inheritance. Inheritance ini berarti bahwa jika class dasarnya
mengijinkan kita untuk membuat memiliki member A dan kita
objek yang diturunkan dari objek lain, menurunkannya ke class lain yang
sehingga dimungkinkan didalamnya memiliki member B, maka class
terdapat member lain selain turunan akan terdiri dari A dan B.
membernya sendiri. Untuk menurunkan class dari yang
Sebagai contoh, misalnya kita lain, kita menggunakan operator :
ingin mendeklarasikan sederetan (colon) dalam deklarasi class turunan
class yang mendeskripsikan polygon dengan cara sebagai berikut:
seperti CRectangle atau CTriangle.
Keduanya dapat dideskripsikan class  derived_class_name:  public 
dengan dua atribut yakni : alas dan base_class_name;  
tinggi. Hal ini dapat direpresentasikan
dengan class CPolygon dan dari dimana derived_class_name adalah
class tersebut diturunkan dua class nama class turunan dan
yakni CRectangle dan CTriangle. base_class_name adalah nama class
Class CPolygon berisi member yang menjadi dasar. Public dapat
yang umum pada semua polygon, diganti dengan akses lain misalnya
dalam contoh ini adalah panjang dan protected atau private, dan
lebar (width dan height). CRectangle menjelaskan akses untuk member
dan CTriangle diturunkan dari class yang diturunkan, seperti kita dapat
tersebut. Class yang diturunkan dari lihat pada contoh berikut:
class lain mewarisi semua member

Program 16.24

557
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 
#include <cstdlib> 
#include <iostream.h> 
 
class CPolygon { 
  protected: 
    int width, height; 
  public: 
    void set_values (int a, int b) 
      { width=a; height=b;} 
  }; 
 
class CRectangle: public CPolygon { 
  public: 
    int area (void) 
      { return (width * height); } 
  }; 
 
class CTriangle: public CPolygon { 
  public: 
    int area (void) 
      { return (width * height / 2); } 
  }; 
   
int main () { 
  CRectangle rect; 
  CTriangle trgl; 
  rect.set_values (4,5); 
  trgl.set_values (4,5); 
  cout<<"\nHasil pemanggilan fungsi area oleh rect= "<<rect.area(); 
  cout <<"\nHasil pemanggilan fungsi area oleh trgl = "<<trgl.area(); 
  system("PAUSE"); 
  return EXIT_SUCCESS; 

 
Keluaran program diatas adalah sebagai berikut:
Hasil pemanggilan fungsi area oleh rect= 20 
Hasil pemanggilan fungsi area oleh trgl = 10 
 
Sebagaimana kita lihat objek dengan private, perbedaan hanya
class CRectangle dan CTriangle terjadi pada class turunan. Ketika kita
masing-masing berisi member dari menurunkan class, member
class CPolygon yakni : width, height protected dari class dasar dapat
dan set_values(). Protected mirip digunakan oleh member lain dalam

558
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 
class turunan, namun member member CPolygon, kita pilih akses
private tidak demikian. protected daripada private. Kita dapat
Karena kita ingin width dan mebuat ringkasan perbedaan tipe
height dapat diakses oleh member akses berdasarkan siapa yang dapat
dalam class turunan CRectangle dan mengakses, sebagai berikut:
CTriangle dan tidak hanya oleh

Access   public  protected  private 


Anggota dari kelas yang sama  yes   yes   yes  
Anggota dari turunan kelas  yes   yes   no  
Bukan anggota  yes   no   no  

Dimana "bukan anggota" class yang diturunkan dari mother


merepresentasikan referensi dari luar yang didefinisikan sebagai berikut:
class, seperti dari main(), dari class
lain atau dari fungsi lain baik global class daughter: protected mother; 
ataupun local. Pada contoh diatas,  
anggota yang diturunkan kepada yang menggunakan protected
CRectangle dan CTriangle diikuti sebagai minimum level akses untuk
dengan hak akses yang sama member daughter yang diwarisi dari
dengan class asalnya, CPolygon: mother. Karena itu, semua member
  yang sifatnya public pada mother
CPolygon::width            //protected  akan menjadi protected pada
access  daughter, yang merupakan level
CRectangle::width           //protected  minimum dimana ia dapat diwariskan.
access  Tentunya, ini tidak akan menjadi
CPolygon::set_values()   // public access  halangan bagi daughter untuk
CRectangle::set_values() // public access  mempunyai member public. Minimum
level hanya akan digunakan untuk
Ini dikarenakan kita menurunkan member yang diwariskan mother.
class dari class lain sebagai public, Penggunaan umum level
yang perlu diperhatikan adalah: inheritance selain public adalah
private, yang menyediakan
class CRectangle: public CPolygon;  encapsulasi sempurna dalam class
  dasar, kecuali jika tidak ada yang
public menunjukkan level beranggapan classnya akan dapat
minimum proteksi yang berarti diakses member class dasar dari
member warisan class dasar turunannya. Sehingga dalam banyak
(CPolygon) harus diikutkan dalam kasus class diturunkan dalam bentuk
class baru (CRectangle). Level akses public. Jika tidak ada level akses
minimum untuk member yang yang ditulis maka dalam class akan
diturunkan dapat diubah menjadi dianggap private, dan dalam tipe
protected atau private selain public. struct dianggap public.
Sebagai contoh, daughter adalah
559
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 
Ada empat konversi baku dari Konsep inheritance pada C++ ini
suatu class turunan ke class basis sebenarnya diilhami oleh sifat
publiknya, yaitu: pewarisan dalam kehidupan nyata.
1. Obyek class turunan akan Misal, mata si Upik mirip dengan
dikonversi secara implisit ke obyek mata ayahnya dan hidungnya
class basis publiknya. mancung mewarisi ibunya.
2. Reference class turunan akan Keuntungan utama dengan adanya
dikonversi secara implisit ke inheritance yaitu memungkinkan
reference class basis publiknya. suatu kode yang telah ditulis mudah
3. Pointer class turunan akan sekali untuk digunakan kembali.
dikonversi secara implisit ke Contoh jika anda mempunyai class
pointer class basis publiknya. yang telah dipakai dan teruji. Suatu
Pointer ke suatu member dari saat anda menemukan
suatu class basis akan dikonversi permasalahan yang sama dengan
secara implisit menjadi pointer ke class tersebut maka class tesebut
suatu member dari suatu publicly- dapat dipergunakan dengan cara
derived-class. Konversi-konversi menurunkannya sehingga sifat-sifat
dengan arah sebaliknya memerlukan yang sama bisa dimanfaatkan.
cast secara eksplisit, walaupun perlu Dengan cara seperti ini
diingat bahwa hal ini tidak aman pengembangan program menjadi
dalam pemrograman lebih efisien dan efektif. Juga apabila
C++ memungkinkan suatu class diperlukan turunannya dapat
mewarisi data ataupun fungsi menambahkan sifat-sifat baru sesuai
anggota class lain. Sifat ini disebut dengan kebutuhan permasalahan
inheritance. Class yang mewarisi sifat permograman yang sedang dihadapi,
class lain disebut class turunan bahkan kalau perlu bisa mengganti
(derived class), sedangkan class dengan sifat yang berbeda dengan
yang mewariskan sifat ke class lain class dasarnya.
disebut class dasar(base class). Untuk memahami tentang
konsep inheritance, marilah kita coba
contoh berikut :

Program 16.25 
#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
 
class basis 

   private: 
      int A; 
      int B;  
   public: 
      void info_basis() 
560
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 
      { cout<<"Info_basis() dijalankan..."<<endl; } 
}; 
 
class turunan : public basis 

   public: 
      void info_turunan() 
      { cout<<"Info_turunan() dijalankan..."<<endl; } 
}; 
 
int main(int argc, char *argv[]) 

    turunan anak; 
    anak.info_basis(); 
    anak.info_turunan(); 
    system("PAUSE"); 
    return EXIT_SUCCESS; 

Keluaran program diatas adalah sebagai berikut:


Info_basis() dijalankan... 
Info_turunan() dijalankan... 

Dari hasil keluaran terlihat bahwa yang bersifat private tetap tidak dapat
class turunan dapat menjalanka diakses. Jadi yang diwariskan hanya
fungsi info_basis() yang ada pada yang bersifat public. Namun demikian
class dasar. Hal ini bisa terjadi apabila hendak mengakses bagian
karena pernyataan tambahan pada private dari class basis dibuatkan
deklarasi class turunan, lebih fungsi pada class turunan untuk
jelasnya lihat pernyataan berikut: mengaksesnya, fungsi inilah nanti
yang dipanggil untuk menjalankan
class turunan : public basis  atau memanipulasi anggota private
{  class dasar. Jadi harus dengan
     …..  perantara tidak dapat langsung.
} Pada prinsipnya apabila class
turunan bersifat private maka
Terlihat ada tambahan :public sebenarnya sifat-sifat class dasar
basis, itulah yang menyebabkan diturunkan di bagian private,
bahwa class turunan adalah turunan sehingga tidak dapat diakses
dari class basis. Dengan demikian langsung. Dan apabila class turunan
maka tentu saja dapat mengakses bersifat public maka sifat-sifat class
semua anggota class basis yang dasar diturunkan di bagian public,
bersifat public. Akan tetapi anggota jadi dapat diakses langsung.

561
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 

class dasar 

     private: 
          A; 
     protected: 
          B; 
          C; 
     public: 
          void info_dasar(); 
}; 
class turunan:private dasar 

     private: 
          local; 
          B; 
          C; 
          void info_dasar(); 
     protected: 
          D; 
     public: 
          void info_turunan(); 
}; 

Bandingkan dengan program berikut ini:

class dasar 

     private: 
          A; 
     protected: 
          B; 
          C; 
     public: 
          void info_dasar(); 
}; 
class turunan:public dasar 

     private: 
          local; 
      protected: 
          B; 
          C; 

562
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 
          D; 
     public: 
          void info_dasar(); 
          void info_turunan(); 
}; 

Dari gambaran di atas jelas protected ini juga dapat diterapkan


kiranya bagaimana dan dimana sifat- untuk class turunan sebagaimana
sifat class dasar diturunkan di class private dan public. Apabila class
turunan. Sekali lagi bahwa anggota turunan bersifat protected maka
class dasar yang bersifat private semua anggota protected dan public
tetap tidak diwariskan ke class class dasar akan menjadi anggota
turunan. Akan tetapi apabila protected pada class turunan.
menghendaki beberapa data anggota Untuk lebih meyakinkan
class dasar dapat diturunkan maka bagaimana dan dimana sifat-sifat dari
buatlah bersifat protected. Karena class dasar diwariskan, analisa
anggota yang bersifat protected ikut program berikut yang menggunakan
diwariskan pada class turunan (lihat konstruktor dan destruktor.
gambaran di atas). Keyword

Program 16.26
#include <cstdlib> 
#include <iostream> 
using namespace std; 
 
class kendaraan 

  private: 
     char *nama;  
  public: 
     kendaraan(char *nm = "XXX") 
     { 
        nama = nm; 
        cout<<"Hidupkan mesin anda ....."<<endl;   
     } 
     ~kendaraan() 
     { 
        cout<<"Matikan mesin anda ....."<<endl;   
     } 
     void info_kendaraan() 
     { 
        cout<<nama<<" sedang berjalan ....."<<endl; 
     } 
}; 
563
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 
 
class truk : public kendaraan 

  public: 
     truk(char *nmTr) : kendaraan(nmTr) 
     { 
        cout<<"Hidupkan mesin truk anda ....."<<endl;  
     } 
     ~truk() 
     { 
        cout<<"Matikan mesin truk anda ....."<<endl;  
     } 
}; 
 
int main(int argc, char *argv[]) 

    truk fuso("TRUK FUSO"); 
    fuso.info_kendaraan(); 
    system("PAUSE"); 
    return EXIT_SUCCESS; 

 
Keluaran program diatas adalah sebagai berikut: 
Hidupkan mesin anda ..... 
Hidupkan mesin truk anda ..... 
TRUK FUSO sedang berjalan ..... 
Press any key to continue . . .[Enter] 
Matikan mesin truk anda ….. 
Matikan mesin anda ….. 

Hasil eksekusi program turunan. Namun nama kendaraan


menunjukkan konstruktor kedua class diisi dari masukkan nama truk bukan
dijalankan semua, ini bisa dipahami kendaraan. Kenapa bisa padahal
karena konstruktor terletak pada nama kendaraan bersifat private.
bagian public. Begitu pula dengan Karena pemasukan data nama
destructor semua class dijalankan melalui inisialisasi konstruktor bukan
baik class dasar maupun class langsung pada main().

564
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 
16.7. Class Basis Virtual
Penggunaan class basis virtual pada potongan program diatas
adalah untuk mengatasi mekanisme menunjukkan bahwa B adalah suatu
pewarisan default sehingga class basis virtual untuk class D. Jika
perancang/pembuat class dapat suatu class basis virtual
menentukan suatu shared-base- mendefinisikan konstruktor, class
class. Tak peduli berapa kali suatu basis virtual itu harus mendefinisikan
class basis virtual muncul dalam suatu konstrutkor yang tak
hirarkhi derivasi, hanya suatu memerlukan argumen. Biasanya
instance dibuat dan suatu class basis suatu class turunan dapat menginit
virtual dispesifikasikan dengan secara eksplisit hanya class-class
menggunakan kata kunci virtual basis yang langsung di atasnya.
dalam deklarasinya. Perhatikan Class-class basis virtual merupakan
contoh dibawah ini: perkecualian.
Class basis virtual di-init oleh
class D : public virtual B {.....}  class turunan terbawah/terakhir.
perhatikan contoh berikut ini:

Tanaman Tanaman Tanaman

Buah Sayur Buah Sayur

Tomat Tomat

NON VIRTUAL VIRTUAL

Gambar 16.1. Class Basis Virtual

Program 16.27
#include<iostream> 
 
using namespace std; 
 
class tanaman { 
public : 
565
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 
tanaman() : i(0), f(0) {cout << "tanaman().\n"; } 
tanaman (int init_i,float init‐f):i(init‐i),f(init‐f) 
{cout << "tanaman(int,float).\n"; } 
~tanaman() {cout << "~tanaman().\n"; } 
 
void print(); 
  private : 
  int i; 
  float f; 
}; 
 
void tanaman :: print() { 
  cout << "i= " << i << endl; 
  cout << "f= " << f << endl; 

 
class buah : virtual public tanaman { 
public : 
  buah (int init_j, float init_g) : j(init_j), g(init_g) 
  {cout << "buah (int,float).\n"; } 
  ~buah() { cout << "~buah().\n"; } 
 
void print(); 
  private : 
  int j; 
  float g; 
}; 
 
void buah :: print() { 
  tanaman :: print(); 
  cout << "j= "<< j<< endl; 
  cout << "g="<< g<< endl; 

 
class sayur : public virtual tanaman { 
public : 
sayur (int init_k,float init_h) : k(init_k), h(init‐h) 
{cout << "sayur(int,float).\n"; } 
~sayur() {cout << "~sayur().\n"; } 
 
void print(); 
private : 
int k; 
566
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 
float h; 
}; 
 
void sayur :: print() { 
  tanaman :: print() ; 
  cout << "k= " << k << endl; 
  cout << "h=" << h << endl; 

 
class tomat : public buah, public sayur { 
  public : 
  tomat (int init_l, float init_m) : buah(init_l, init_m),   sayur(int init_l, 
init_m), 
  l(init_l+2), m(init_m +2.1) 
  {cout << "tomat (int,float).\n"; } 
  ~tomat() { cout << "~tomat().\n"; } 
 
void print(); 
  private: 
  int l; 
  float m; 
}; 
 
void tomat :: print() { 
  tanaman :: print(); 
  buah :: print(); 
  sayur :: print(); 
  cout << "l= " << l << endl; 
  cout <<"m= "<< m << endl; 

 
main() { 
  tanaman *pt = new tanaman (2, 3.1); 
  cout << "pt ? print(): \n"; 
  pt? print(); 
  delete pt; 
  cout << endl; 
  buah *pb = new buah (2, 3.1); 
  cout << "pb? print() :\n"; 
  pb?print(); 
  delete pb; 
  cout << "\n"; 
  sayur *ps = new sayur (2, 3.1); 
567
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 
  cout << "ps ?print() :\n"; 
  ps ? print(); 
  delete ps; 
  cout << endl; 
  tomat *pto = new tomat (2, 3.1); 
  cout << "pto ?print(): \n"; 
  pto ? print(); 
  delete pto; 
  return 0; 

 
Keluaran program diatas adalah sebagai berikut: 
tanaman (int,float). 
pt→print(): 
i=2 
f=3.1 
~tanaman(). 
tanaman(). 
 
buah(int,float). 
pb→print(): 
i=0 
f=0 
j=2 
g=3.1 
~buah(). 
~tanaman(). 
tanaman(). 
sayur(int,float). 
ps→print(): 
i=0 
f=0 
k=2 
h=3.1 
~sayur(). 
~tanaman(). 
tanaman(). 
buah(int,float). 
sayur(int,float). 
tomat(int,float). 
pto→print(): 
i=0 

568
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 
f=0 
i=0 
f=0 
j=2 
g=3.1 
i=0 
f=0 
k=2 
h=3.1 
l=4 
m=5.2 
~tomat(). 
~sayur(). 
~buah(). 
~tanaman(). 

Konstruktor class basis virtual sebaliknya, dan jika suatu class


selalu dijalankan sebelum konstruktor turunan melibatkan sekaligus
class basis nonvirtual, tak peduli instance public dan instance private
posisinya dalam derivation-list. dari suatu class basis virtual,maka
Sedangkan urutan destruktor yang menang adalah instance public.

Program16.28
class tanaman { 
  public : 
  void habitat(); 
  protected: 
  short tinggi; 
}; 
  class buah : public virtual tanaman {...}; 
  calss sayur : private virtual tanaman {...}; 
  class nangka : public buah, public sayur {...}; 
 
 
16.8. Inheritance between class
Inheritance memungkinkan kita Masing-masing mempunyai hal yang
untuk membuat objek dari objek sama yaitu, dasar dan tinggi. Dapat
sebelumnya, sehingga memungkin- direpresentasikan dengan class
an untuk menyertakan beberapa CPolygon kemudian diturunkan
anggota objek sebelumnya ditambah menjadi CRectangle dan CTriangle.
dengan anggota objeknya sendiri. Class CPolygon dapat berisi
Contoh, membuat class untuk anggota yang dipakai untuk setiap
mengetahui apakah segi empat polygon, dalam hal ini width dan
(CRectangle), atau (CTriangle). height, dan CRectangle dan
569
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 
CTriangle adalah class turunannya. class  derived_class_name:  public 
Class turunan akan menurunkan base_class_name;  
seluruh anggota yang dimiliki oleh
class dasar(parent)nya. Jadi jika Dimana derived_class_name
class paret mempunyai anggota A adalah nama dari derived class dan
dan diturunkan pada class lain base_class_name adalah nama dari
dengan anggota B,maka clas turunan class asal. public dapat digantikan
ini akan memiliki A dan B. dengan tipe akses lainnya :
Untuk menurunkan class, protected atau private, Perhatikan
menggunakan operator : (colon) pada contoh program dibawah ini :
saat deklarasi, syntax :

Program 16.29
#include <iostream.h>  
 
class CPolygon {  
protected:  
int width, height;  
public:  
void set_values (int a, int b)  
  { width=a; height=b;}  
};  
 
class CRectangle: public CPolygon {  
public:  
  int area (void)  
  { return (width * height); }  
};  
 
class CTriangle: public CPolygon {  
  public:  
  int area (void)  
  { return (width * height / 2); }  
};  
 
int main () {  
  CRectangle rect;  
  CTriangle trgl;  
  rect.set_values (4,5);  
  trgl.set_values (4,5);  
  cout << rect.area() << endl;  
  cout << trgl.area() << endl;  
    system("PAUSE"); 
570
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 
    return EXIT_SUCCESS; 
}  

Keluaran program diatas adalah :


20 10  

Class CRectangle dan CTriangle masing-masing mengandung anggota dari


CPolygon, yaitu : width, height dan set_values().  
 
 
16.9. Multiple inheritance
Dalam C++ memungkinkan
untuk menurunkan field atau method class CRectangle: public CPolygon, public 
dari satu atau lebih class dengan COutput { class CTriangle: public 
menggunakan operator koma dalam CPolygon, public COutput {  
deklarasi class turunan. Contoh, akan
dibuat class untuk menampilkan perhatikan contoh program multiple
dilayar (COutput) dan akan inheritance dibawah ini:
diturunkan ke class CRectangle and
CTriangle maka dapat dituliskan :

Program 16.30
#include <iostream.h>  
 
class CPolygon {  
protected:  
int width, height;  
 
public:  
void set_values (int a, int b)  
{ width=a; height=b;}  
};  
 
class COutput {  
  public:  
  void output (int i); };  
  void COutput::output (int i) {  
  cout << i << endl; }  
 
class CRectangle: public CPolygon, public COutput {  
public:  
  int area (void)  
  { return (width * height); }  

571
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 
};  
 
class CTriangle: public CPolygon, public COutput {  
  public:  
  int area (void)  
  { return (width * height / 2); } 
};  
 
int main () {  
  CRectangle rect;  
  CTriangle trgl;  
  rect.set_values (4,5);  
  trgl.set_values (4,5);  
  rect.output (rect.area());  
  trgl.output (trgl.area());  
    system("PAUSE"); 
    return EXIT_SUCCESS; 
}  
 

Keluaran program diatas adalah :


20  10  

16.10.Polymorphism
Untuk mempelajari materi 16.10.1. Pointers to Base Class
polimorfisme kita harus paham dulu Salah satu keuntungan terbesar
terhadap penggunaan pointer dan dalam menurunkan class adalah
inheritance. Coba anda pahami bahwa pointer ke class turunan
instruksi berikut, jika anda masih merupakan tipe yang kompatibel
belum paham pelajari kembali materi dengan pointer ke class dasar.
terkait: Bagian ini akan membahas kelebihan
C++ dalam hal tersebut. Sebagai
int a::b(c) {};        // Materi Class  contoh kita akan menuliskan kembali
a‐>b                   // Materi pointer  program tentang persegi panjang dan
class a: public b;   //  Materi  segitiga dalam contoh sebelumnya
Relationships between classes   dengan deklarasi pointer. Perhatikan
  contoh dibawah ini:

Program 16.31
#include <iostream.h> 
 
class CPolygon { 

572
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 
  protected: 
    int width, height; 
  public: 
    void set_values (int a, int b) 
      { width=a; height=b; } 
  }; 
 
class CRectangle: public CPolygon { 
  public: 
    int area (void) 
      { return (width * height); } 
  }; 
 
class CTriangle: public CPolygon { 
  public: 
    int area (void) 
      { return (width * height / 2); } 
  }; 
 
int main () { 
  CRectangle rect; 
  CTriangle trgl; 
  CPolygon * ppoly1 = &rect; 
  CPolygon * ppoly2 = &trgl; 
  ppoly1‐>set_values (4,5); 
  ppoly2‐>set_values (4,5); 
  cout << "Rectangle area = "<<rect.area() << endl; 
  cout << "Triangle area = "<<trgl.area() << endl; 
  system("PAUSE"); 
  return EXIT_SUCCESS; 
}   

Keluaran program diatas adalah sebagai berikut: 


Rectangle area = 20 
Triangle area = 10 

Fungsi main membuat dua turunan dari Cpolygon, maka


pointer yang menunjuk ke objek dari inisialisasi ini benar. Pointer *ppoly1
class CPolygon, yakni *ppoly1 dan dan *ppoly2 dideklarasikan dari base
*ppoly2. Kedua pointer tersebut class. Inisialisasi dengan rect dan trgl
diinisialisasi dengan alamat objek valid, namun pointer *ppoly1 dan
rect dan trgl, dan karena pointer *ppoly2 tetap tidak dapat mengakses
tersebut merupakan objek class member CRectangle dan CTriangle.

573
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 
Untuk alasan ini, ketika area()
dipanggil kita tidak mungkin 16.10.2. Virtual member 
menggunakan pointer *ppoly1 dan Untuk mendeklarasikan elemen
*ppoly2. Untuk membuat agar sebuah kelas yang akan kita
*ppoly1 dan *ppoly2 dapat redefinisika di kelas turunan kita
memanggil area(), maka harus harus mendauluinya dengan keyword
dideklarasikan pada base classnya virtual maka pointer ke obyek yang
dan tidak hanya di class turunannya. menunjuk klas tersebut dapat
Cara mendeklarasikannya dapat kita digunakan dengan baik.
lihat di pembahasan materi Virtual
members.

Program 16.32 
#include <iostream.h> 
 
class CSegibanyak { 
  protected: 
    int lebar, tinggi; 
  public: 
    void set_nilai (int a, int b) 
      { lebar=a; tinggi=b; } 
    virtual int luas (void) 
      { return (0); } 
  }; 
 
class CSegiempat: public CSegibanyak { 
  public: 
    int luas (void) 
      { return (lebar * tinggi); } 
  }; 
 
class CSegitiga: public CSegibanyak { 
  public: 
    int luas (void) 
      { return (lebar * tinggi / 2); } 
  }; 
 
int main () { 
  CSegiempat rect; 
  CSegitiga trgl; 
  CSegibanyak poly; 
  CSegibanyak * ppoly1 = &rect; 
  CSegibanyak * ppoly2 = &trgl; 

574
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 
  CSegibanyak * ppoly3 = &poly; 
  ppoly1‐>set_nilai (4,5); 
  ppoly2‐>set_nilai (4,5); 
  ppoly3‐>set_nilai (4,5); 
  cout << ppoly1‐>luas() << endl; 
  cout << ppoly2‐>luas() << endl; 
  cout << ppoly3‐>luas() << endl; 
  system("PAUSE"); 
  return EXIT_SUCCESS; 

Keluaran program diatas adalah sebagai berikut: 


20 
10 

Sekarang kita punya 3 kelas nya menggunakan pointer dengan


(CSegibanyak, CSegiempat dan tipe CSegibanyak. Ini menunjukan
CSegitiga) yang memiliki anggota kepada anda tentang kegunaan dari
yang sama: lebar, tinggi, set_nilai() keyword virtual, yang mengijinkan
dan luas(). Luas() telah didefinisikan member/anggota dari kelas turunan
sebagai virtual karena itu akan dengan nama yang sama dengan
didefinisikan kembali pada kelas member dari kelas dasar (base class)
turunan. Anda dapat melakukan untuk dipanggil dari pointer dengan
verifikasi jika anda ingin tipe kelas dasar (bas e class) tetapi
melakukannya dengan melaksanakan fungsi tersebut yang
menghilangkan keyword virtual dari didefinisikan pada kelas turunan.
kode program diatas dan kemudian Untuk memahami polymorphism
anda eksekusi program tersebut, terlebih lanjut harus mengenal fungsi
hasil akan menhadi 0 untuk ketiga virtual karena fungsi ini merupakan
segibanyak bukannya 20,10,0. ini dasarnya. Fungsi anggota dari suatu
disebabkan karena pemanggilan class dapat dijadikan fungsi virtual.
terhadap obyek (CSegiempat::luas(), Jika fungsi ini dideklarasikan kembali
CSegitiga::luas() dan pada turunan dan suatu pointer yang
CSegibanyak::luas(), akan mengacu menunjuk class dasar diciptakan,
ke CSegibanyak::luas() dan akan pointer dapat memilih obyek yang
memanggil fungsi yang sama tepat sekiranya fungsi anggota
tersebut (CSegibanyak::luas() ) untuk tersebut dipanggil via pointer. Untuk
semua pemanggilan melalui obyek lebih memahami lihat contoh berikut:
kelas turunan karena pemanggilan-

Program 16.33
#include <cstdlib> 
#include <iostream> 

575
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 
 
using namespace std; 
 
class makhluk 

   public: 
      void informasi() 
      { 
           cout<<"Informasi pada makhluk ....."<<endl; 
      } 
      virtual void keterangan() 
      { 
           cout<<"Keterangan pada makhluk ....."<<endl; 
      } 
}; 
 
class mamalia : public makhluk 

   public: 
      void informasi() 
      { 
           cout<<"Informasi pada mamalia ....."<<endl; 
      } 
      virtual void keterangan() 
      { 
           cout<<"Keterangan pada mamalia ....."<<endl; 
      } 
}; 
 
class sapi : public mamalia 

   public: 
      void informasi() 
      { 
           cout<<"Informasi pada sapi ....."<<endl; 
      } 
      virtual void keterangan() 
      { 
           cout<<"Keterangan pada sapi ....."<<endl; 
      } 
}; 
 
int main(int argc, char *argv[]) 
576
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 

    mamalia mamal; 
    sapi lembu; 
    makhluk *binatang; 
     
    binatang = &mamal; 
    binatang‐>informasi(); 
    binatang‐>keterangan(); 
    cout<<"‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐"<<endl; 
    binatang = &lembu; 
    binatang‐>informasi(); 
    binatang‐>keterangan(); 
    system("PAUSE"); 
    return EXIT_SUCCESS; 

Keluaran program hasil eksekusi:


Informasi pada makhluk ….. 
Keterangan pada mamalia …… 
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  
Informasi pada makhluk …… 
Keterangan pada sapi ….. 
Press any key to continue ... 

Perhatikan hasil dari program di merupakan pointer ke class makhluk.


atas dan fungsi-fungsi anggota class Kemudian pointer (binatang) ini
yang dibuat yaitu makhluk, mamalia, menunjuk ke obyek mamal yang ber-
sapi. Class mamalia mewarisi class class mamalia. Saat fungsi anggota
makhluk dan class sapi mewaris informasi() dipanggil dari pointer,
class mamalia. Kemudian pada ternyata yang ditampilkan adalah
deklarasi class makhluk, perbedaan fungsi anggota dari class makhluk
terletak pada fungsi anggota bukan fungsi anggota class mamalia.
informasi() dan keterangan(), fungsi Tetapi tidakdemikian saat pointer
anggota informasi() tidak ada memanggil fungsi anggota
keyword virtual didepannya, keterangan(), yang ditampilkan
sedangkan fungsi anggota adalah fungsi anggota mamalia
keterangan() ada tambahan virtual. bukan dari fungsi anggota makhluk.
Perbedaan class mamalia dan class Mengapa demikian ? Disinilah
sapi hamper tidak ada perbedaan peranan keyword virtual, karena
kecuali narasinya. fungsi anggota keterangan() pada
Sekarang kita lihat pada bagian class makhluk diperlakukan sebagai
main(). Mula-mula penciptaan obyek fungsi virtual. Jadi jika perintah :
baru yaitu mamal ber-class mamalia,
lembu ber-class sapi, dan binatang binatang‐>keterangan(); 

577
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 
bersangkutan. Contoh pada program
dijalankan akan menyebabkan fungsi sebelumnya pada fungsi informasi()
anggota keterangan() milik mamalia dan keterangan().
yang diakses karena pointer Kalau diperhatikan program di
sebelumnya sudah diarahkan ke atas tidak ada penciptaan obyek
obyek mamal yang ber-class class makhluk, yang ada penciptaan
mamalia. Hal serupa juga terjadi pointer ke obyek ber-class makhluk.
pada obyek lembu yang ber-class Pada keadaan seperti ini berarti
sapi. fungsi anggota keterangan() class
Fungsi anggota yang dibuat makhluk tidak pernah digunakan.
virtual perlu dideklarasikan ulang Kalau memang tidak hendak
pada setiap class turunan. Bentuk digunakan lebih baik disingkirkan dan
deklarasinya harus sama baik nilai sebagai penggantinya ditambahkan
balik maupun argument-argumen angka 0 atau dibuat =0; lihat
yang dipakai. Namun keyword virtual keterangan berikut:
cukup dinyatakan pada class dasar,
dengan sendirinya otomatis fungsi Virtual void keterangan () = 0; 
anggota tersebut pada class turunan
juga bersifat virtual. Bila fungsi pada Fungsi inilah yang disebut
class turunan ternyata berbeda maka dengan istilah fungsi virtual murni.
fungsi tersebut tidak lagi sebagai Fungsi virtual murni ini sering dipakai
fungsi virtual, dan pada saat sebagai class abstrak, yaitu class
dijalankan kompiler akan member yang dideklarasikan tidak untuk
peringatan duplikasi nama fungsi. menciptakan obyek. Class ini
Polymorphism sesuai dengan mempunyai cirri paling tidak
asal-usul kata pembentuknya berarti mempunyai sebuah fungsi virtual
“mempunyai banyak bentuk”. Dalam murni. Jika class makhluk hendak
wujudnya, polymorphism dapat dibuat class abstrak maka
beroperasi pada dua aras, yaitu saat perubahannya sebagai berikut:
kompilasi dan saat eksekusi.
Overloading terhadap fungsi dan class makhluk 
operator merupakan bentuk { 
polymorphism saat kompilasi. Namun    public: 
orang lebih banyak mengenal       void informasi() 
polymorphism saat eksekusi atau       { 
sering disebut late binding atau            cout<<"Informasi pada makhluk .."   
dynamic binding. Hal ini
          <<endl; 
menunjukkan kemampuan untuk
      } 
menangani dua atau lebih bentuk
obyek yang berlainan pada saat       virtual void keterangan() = 0; 
eksekusi berlangsung, dengan }
menyesuaikan lingkungan obyek

578
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 
16.11.Overloading
Keistimewaan program C++   float price; } a, b, c; 
lainnya adalah adanya fasilitas a = b + c;  
operator overloading, yaitu
penamaan fungsi tidak seperti pada Tetapi C++ memungkinkan hal
umumnya, melainkan nama fungsi seperti diatas dengan menggunakan
berupa kata kunci operator diikuti overload operator. Dibawah ini
dengan lambang operator yang adalah operator-operator yang dapat
digunakan. Misalnya nama fungsi dioverload:
operator= yang dapat dipanggil  
dengan hanya menuliskan operator = +    ‐    *    /    =    <    >    +=   ‐=   *=   /=   <<   >> 
seperti pada operasi penugasan < <=  > >=  ==   !=   <=   >=   ++   ‐‐   %    &    ^    !    | 
biasa, sehingga dapat dibuat fungsi ~    &=   ^=   |=   &&   ||   %=   []   ()   new  delete 
penugasan versi sendiri untuk tipe-
tipe data tertentu, seperti kita dapat Untuk mengoverload operator kita
menyatakan Time t2 = t1, dan cukup menuliskan satu fungsi
sebagainya. Jika kita mempunyai anggota class dengan nama
ekspresi dibawah ini : operator diikuti dengan operator apa
yang akan dioverload. Syntaxnya
int a, b, c;  sebagai berikut:
a = b + c;   
type operator sign (parameters);  
adalah benar, selama variable-
variabel tersebut merupakan tipe Misalnya ketika akan menjumlahkan
data dasar. Namun tidak demikian vector 2 dimensi a(3,1) and b(1,2).
halnya dengan contoh berikut: Hasilnya adalah sbb: (3+1,1+2) =
(4,3). Untuk keperluan ini maka kita
struct {   dapat mengoverload operator +
   char product [50];   seperti dalam contoh berikut :

Program 16.34
#include <iostream.h> 
 
class CVector { 
  public: 
    int x,y; 
    CVector () {}; 
    CVector (int,int); 
    CVector operator + (CVector); 
}; 
 
CVector::CVector (int a, int b) { 
  x = a; 
  y = b; 

579
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 

 
CVector CVector::operator+ (CVector param) { 
  CVector temp; 
  temp.x = x + param.x; 
  temp.y = y + param.y; 
  return (temp); 

 
int main () { 
  CVector a (3,1); 
  CVector b (1,2); 
  CVector c; 
  c = a + b; 
  cout << c.x << "," << c.y; 
  system("PAUSE"); 
  return EXIT_SUCCESS; 

Keluaran program diatas adalah:


4 , 3    
 
Jika kita tidak jelas dengan c = a.operator+ (b); 
banyaknya pernyataan CVector yg
dipakai, perhatikan bahwa beberapa Perhatikan bahwa kita juga harus
mengacu pada class CVector dan mengikutkan empty constructor
beberapa merupakan fungsi. (tanpa parameter) yang kita
definisikan dengan blok tanpa
CVector (int, int);               instruksi.
// fungsi CVector (constructor)   
CVector operator+ (CVector);      CVector () { }; 
//  fungsi  operator+  yang  return  value‐
nya bertipe CVector   Ini penting, karena kita mempunyai
deklarasi
Fungsi operator+ dalam class  
CVector yang bertipe CVector CVector temp; 
tersebut digunakan untuk CVector c: 
mengoverload operator + , sehingga
pada program untuk menjumlahkan Sehingga jika empty constructor
vector a ,b dan hasilnya disimpan di tersebut dihilangkan maka dua
vector c kita dapat menggunakan deklarasi tersebut menjadi tidak valid.
salah satu instruksi berikut: Empty constructor dapat juga
  dideklarasikan seperti dibawah ini :
c = a + b;   

580
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 
CVector () { x=0; y=0; };  dan untuk menyederhanakan
penulisan maka tidak disertakan.

Program 16.35
#include <cstdlib> 
#include <iostream> 
 
using namespace std; 
 
 
class Time { 
  friend ostream& operator << (ostream&, Time&);  
// untuk fungsi cout << obyek 
public: 
  Time(int h=0, int m=0, int s=0);       // default constructor 
  Time& operator++();       // prefix increment 
  Time& operator+=(const Time&);    // operator += 
  Time& operator+=(const int); 
  Time& operator+(const Time&);   // operator + 
  Time& operator+(const int); 
  ~Time() {cout << "Program selesai" << endl;} // destructor 
 
private: 
void format();                                   // memformat nilai obyek 
  int hour;                                 // agar sesuai, misalnya: 
  int minute;                             // 12:65:70 ? 13:06:10 
  int second; 
  }; 
  Time::Time(int h=0, int m=0, int s=0) { 
  hour = h; 
  minute = m; 
  second = s; 

 
void Time::format() { 
  int tm = minute, ts = second; 
  if (second >>= 60) { 
  second %= 60; 
  minute += (int) (ts/60); 
  tm = minute; 

if (minute >>= 60) { 
  minute %= 60; 

581
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 
  hour += (int) (tm/60); 

if (hour >>= 24) hour %= 24; 

  Time& Time::operator+= (const Time& t) { 
  second = second + t.second; 
  minute = minute + t.minute; 
  hour = hour + t.hour; 
  format; 
  return *this; 

  Time& Time::operator+= (const int t) { 
  second = second + t; 
  format; 
  return *this; 

 
Time& Time::operator++ () { 
  second++; 
  format; 
  return *this; 

 
Time& Time::operator+ (const Time& t) { 
  second = second + t.second; 
  minute = minute + t.minute; 
  hour = hour + t.hour; 
  format(hour, minute, second); 
  return *this; 

 
Time& Time::operator+ (const int t) { 
  second = second + t; 
  format(hour, minute, second); 
  return *this; 

 
ostream& operator << (ostream& ostr, Time& t) { 
  return ostr << (t.hour < 10 ? "0" : "") << t.hour << ":" 
  << (t.minute < 10 ? "0" : "") << t.minute << ":" 
  << (t.second < 10 ? "0" : "") << t.second; 

582
 
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
 
Untuk lebih memberikan gambaran tipe kelas intArray untuk pengelolaan
lagi tentang penanganan suatu array bilangan bulat yang lebih
obyek, berikut didefenisikan suatu fleksibel dari yang biasanya.

Program 16.36
#include <iostream.h> 
 
const int arraySize = 20;     //ukuran default 
 
class intArray { 
 
public : 
  intArray (int sz = ArraySize ); 
  intArray ( const int * , int ); 
  intArray ( const IntArray & ); 
  ~intArray ( ) { delete [ ] ia ; } 
  intArray & operator = ( const IntArray & ); 
  int & operator [ ] ( int ); 
  int getSize ( ) { return size ; } 
 
protected : 
  init ( const int *, int ); 
  int size; 
  int *ia; 

16.12. Soal Latihan


Jawablah soal latihan dibawah ini dengan baik dan benar.
1. Apa yang dimaksud dengan obyek dalam pemrograman
2. Apa yang dimaksud dengan kelas
3. Apa yang dimaksud dengan enkasulasi
4. Apa perbedaan antara class private dan public
5. Apa yang dimaksud dengan inheritance
6. Buatlah program sederhana dengan inheritance
7. Apa yang dimaksud dengan friend
8. Apa yang dimaksud dengan operator overloading
9. Apa fungsi dari class basis virtual
 
 
 
583
 
Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends
 
 
 
 
 
 
 
 

584
 
Lampiran 1. Daftar Kode ASCII
Decimal  Octal  Hex  Binary  Value  Comment 
000  000  000  00000000   NUL   Null char  
001  001  001  00000001   SOH   Start of Header  
002  002  002  00000010   STX   Start of Text  
003  003  003  00000011   ETX   End of Text  
004  004  004  00000100   EOT   End of Transmission  
005  005  005  00000101   ENQ   Enquiry  
006  006  006  00000110   ACK   Acknowledgment  
007  007  007  00000111   BEL   Bell  
008  010  008  00001000   BS   Backspace  
009  011  009  00001001   HT   Horizontal Tab  
010  012  00A  00001010   LF   Line Feed  
011  013  00B  00001011   VT   Vertical Tab  
012  014  00C  00001100   FF   Form Feed  
013  015  00D  00001101   CR   Carriage Return  
014  016  00E  00001110   SO   Shift Out  
015  017  00F  00001111   SI   Shift In  
016  020  010  00010000   DLE   Data Link Escape  
017  021  011  00010001   DC1   XON Device Control 1  
018  022  012  00010010   DC2   Device Control 2  
019  023  013  00010011   DC3   XOFF Device Control 3  
020  024  014  00010100   DC4   Device Control 4  
021  025  015  00010101   NAK   Negative Acknowledgement  
022  026  016  00010110   SYN   Synchronous Idle  
023  027  017  00010111   ETB   End of Trans. Block  
024  030  018  00011000   CAN   Cancel  
025  031  019  00011001   EM   End of Medium  
026  032  01A  00011010   SUB   Substitute  
027  033  01B  00011011   ESC   Escape  
028  034  01C  00011100   FS   File Separator  
029  035  01D  00011101   GS   Group Separator  
030  036  01E  00011110   RS   Request to Send Record  
031  037  01F  00011111   US   Unit Separator  
032  040  020  00100000   SP   Space  
033  041  021  00100001   !     
034  042  022  00100010   "     
035  043  023  00100011   #     
036  044  024  00100100   $     
037  045  025  00100101   %     
038  046  026  00100110   &    
039  047  027  00100111   '     
040  050  028  00101000   (     
041  051  029  00101001   )     

585 
 
042  052  02A  00101010   *     
043  053  02B  00101011   +     
044  054  02C  00101100   ,     
045  055  02D  00101101   ‐     
046  056  02E  00101110   .     
047  057  02F  00101111   /     
048  060  030  00110000   0     
049  061  031  00110001   1     
050  062  032  00110010   2     
051  063  033  00110011   3     
052  064  034  00110100   4     
053  065  035  00110101   5     
054  066  036  00110110   6     
055  067  037  00110111   7     
056  070  038  00111000   8     
057  071  039  00111001   9     
058  072  03A  00111010   :     
059  073  03B  00111011   ;     
060  074  03C  00111100   <    
061  075  03D  00111101   =     
062  076  03E  00111110   >    
063  077  03F  00111111   ?     
064  100  040  01000000   @     
065  101  041  01000001   A     
066  102  042  01000010   B     
067  103  043  01000011   C     
068  104  044  01000100   D     
069  105  045  01000101   E     
070  106  046  01000110   F     
071  107  047  01000111   G     
072  110  048  01001000   H     
073  111  049  01001001   I     
074  112  04A  01001010   J     
075  113  04B  01001011   K     
076  114  04C  01001100   L     
077  115  04D  01001101   M     
078  116  04E  01001110   N     
079  117  04F  01001111   O     
080  120  050  01010000   P     
081  121  051  01010001   Q     
082  122  052  01010010   R     
083  123  053  01010011   S     
084  124  054  01010100   T     
085  125  055  01010101   U     

586 
 
086  126  056  01010110   V     
087  127  057  01010111   W     
088  130  058  01011000   X     
089  131  059  01011001   Y     
090  132  05A  01011010   Z     
091  133  05B  01011011   [     
092  134  05C  01011100   \     
093  135  05D  01011101   ]     
094  136  05E  01011110   ^     
095  137  05F  01011111   _     
096  140  060  01100000   `     
097  141  061  01100001   a     
098  142  062  01100010   b     
099  143  063  01100011   c     
100  144  064  01100100   d     
101  145  065  01100101   e     
102  146  066  01100110   f     
103  147  067  01100111   g     
104  150  068  01101000   h     
105  151  069  01101001   i     
106  152  06A  01101010   j     
107  153  06B  01101011   k     
108  154  06C  01101100   l     
109  155  06D  01101101   m     
110  156  06E  01101110   n     
111  157  06F  01101111   o     
112  160  070  01110000   p     
113  161  071  01110001   q     
114  162  072  01110010   r     
115  163  073  01110011   s     
116  164  074  01110100   t     
117  165  075  01110101   u     
118  166  076  01110110   v     
119  167  077  01110111   w     
120  170  078  01111000   x     
121  171  079  01111001   y     
122  172  07A  01111010   z     
123  173  07B  01111011   {     
124  174  07C  01111100   |     
125  175  07D  01111101   }     
126  176  07E  01111110   ~     
127  177  07F  01111111   DEL     

587 
 
Lampiran 2. Keyword C++

1  asm     insert an assembly instruction  
2  auto     declare a local variable  
3  bool     declare a boolean variable  
4  break     break out of a loop  
5  case     a block of code in a switch statement  
6  catch    handles exceptions from throw  
7  char     declare a character variable  
8  class     declare a class  
9  const     declare immutable data or functions that do not change data  
10  const_cast     cast from const variables  
11  continue     bypass iterations of a loop  
12  default     default handler in a case statement  
13  delete    make memory available  
14  do    looping construct  
15  double     declare a double precision floating‐point variable  
16  dynamic_cast    perform runtime casts  
17  else     alternate case for an if statement  
18  enum     create enumeration types  
19  explicit     only use constructors when they exactly match  
20  export     allows template definitions to be separated from their declara 
21  extern     tell the compiler about variables defined elsewhere  
22  false     the boolean value of false  
23  float     declare a floating‐point variable  
24  for    looping construct  
25  friend     grant non‐member function access to private data  
26  goto     jump to a different part of the program  
27  if     execute code based off of the result of a test  
28  inline     optimize calls to short functions  
29  int     declare a integer variable  
30  long     declare a long integer variable  
31  mutable     override a const variable  
32  namespace     partition the global namespace by defining a scope  
33  new     allocate dynamic memory for a new variable  
34  operator     create overloaded operator functions  
35  private     declare private members of a class  
36  protected     declare protected members of a class  
37  public     declare public members of a class  

588 
 
38  register     request that a variable be optimized for speed  
39  reinterpret_cast    change the type of a variable  
40  return     return from a function  
41  short     declare a short integer variable  
42  signed     modify variable type declarations  
43  sizeof     return the size of a variable or type  
44  static     create permanent storage for a variable  
45  static_cast     perform a nonpolymorphic cast  
46  struct     define a new structure  
47  switch     execute code based off of different possible values for a variable  
48  template     create generic functions  
49  this     a pointer to the current object  
50  throw     throws an exception  
51  true     the boolean value of true  
52  try     execute code that can throw an exception  
53  typedef     create a new type name from an existing type  
54  typeid    describes an object  
55  typename     declare a class or undefined type  
a structure that assigns multiple variables to the same memory 
56  union  
location 
57  unsigned     declare an unsigned integer variable  
58  using     import complete or partial namespaces into the current scope  
59  virtual     create a function that can be overridden by a derived class  
60  void     declare functions or data with no associated data type  
 warn the compiler about variables that can be modified 
61  volatile   
unexpectedly  
62  wchar_t     declare a wide‐character variable  
63  while    looping construct  

589 
 

Anda mungkin juga menyukai