Anda di halaman 1dari 601

BAHASA PEMROGRAMAN

Untuk SMK

Penulis : Suprapto
Kadarisman Tejo Yuwono
Totok Sukardiyono
Adi Dewanto

Editor : Ratu Amilia Avianti

Perancang Kulit : Tim

Ukuran Buku : 18,2 x 15,7 cm

Direktorat Pembinaan Sekolah Menengah Kejuruan


Direktorat Jenderal Manajemen Pendidikan Dasar dan Menengah
Departemen Pendidikan Nasional
Tahun 2008
KATA PENGANTAR
Pertama kali kami memanjatkan rasa syukur ke hadirat Allah
Subhanahu Wata’la bahwasanya penyusunan buku dengan judul ”Bahasa
Pemrograman ” ini dapat diselesaikan. Kerja keras yang telah dilakukan dalam
penulisan ini telah membuahkan hasil dengan baik. Buku ini sangat berarti bagi
para siswa Sekolah Menengah Kejuruan (SMK) terutama mereka yang
mempelajari bidang teknologi informatika dan komunikasi atau bidang lain
yang sejenis.
Selain itu, dengan ditulisnya buku ini, akan menambah perbendaharaan
pustaka yang dapat dijadikan pegangan bagi para guru. Kami menyadari
bahwa ketersediaan buku yang memadai bagi para siswa dan guru sekarang
ini dirasakan masih kurang. Sejalan dengan kemajuan jaman dan teknologi
yang ada, maka sudah sepantasnya perlu ada upaya untuk mencerdaskan
para siswa dengan kampanye penulisan buku.
Buku yang ditulis ini diharapkan dapat menjembatani kebutuhan siswa
dan guru terhadap materi- materi pelajaran yang diajarkan di sekolah. Dengan
demikian keluhan sulitnya mencari buku bermutu yang ditulis dalam bahasa
Indonesia sudah tidak akan didengar lagi. Sebagaimana yang ditulis dalam
pengantar Buku Standar Kompetensi Nasional Bidang teknologi Informasi dan
Telekomunikasi bahwa demikian luasnya bidang TIK, prioritas utama dalam
penyusunan standar kompetensi ditujukan untuk bidang-bidang pekerjaan
yang berhubungan dengan Teknologi Informasi dan Telekomunikasi. Namun
buku pegangan ”bahasa Pemrograman” ini akan memuat pengetahuan
mendasar tentang bahasa Pemrograman khususnya bahasa Prosedural dan
OOP. Selanjutnya bagi yang berkepentingan dengan buku ini dapat
mengimplementasikannya dalam pemberdayaan proses belajar mengajar yang
berlangsung di SMK.
Dalam kesempatan ini ucapan terima kasih yang sebesar-besarnya
disampaikan kepada para anggota Tim Penulis, para konstributor materi yang
telah bersama kami menyusun dan menyempurnakan isi buku ini. Kepada
Direktur Pembinaan Sekolah Menengah Kejuruan (PSMK), kami sampaikan
penghargaan dan terima kasih atas dukungan dan bantuannya sehingga
penulisan buku ini dapat dilaksanakan dengan baik dan berhasil memenuhi
kriteria.
Akhirnya kami persembahkan buku ini kepada para pelaksana di
jajaran SMK. Apapun hasil yang telah dicapai merupakan perwujudan kerja
keras yang hasilnya bersama -sama dapat kita lihat setelah implementasi dan
siswa mencapai keberhasilan studi. Semoga bermanfaat bagi kita sekalian.

Tim Penulis

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
2008 | Direktorat Pembinaan SMK 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. Tanpa manusia, sehingga programmerlah
programmer, pengguna komputer tidak yang harus menyesuaikan dengan
mempunyai perangkat lunak, dan komputer.
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 Direktorat Pembinaan SMK | 2008


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.

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


Dasar-dasar Pemr ograman Komputer Bahasa Pemr orgraman

Ga mbar. 1.2. Perangkat Keras Sebuah Sistem Ko mputer


Perangka t lunak mengendalika dalam komputer. Secara umum

fungsi dan operasi sebua h komputer. lapisan akan saling berhub ungan
A da beber apa lapisan (layer) dengan layer diatas atau
p rangkat lu ak yang digunakan di dibawa hnya.

Gam ar. 1.3. Lap isan Peran kat Lunak

Pada pe angkat lun ak tingkata ya Perang kat lunak ini mel akukan
ng paling rendah, pera ngkat luna k inisialis a si perang kat keras sistem
dijalankan leh pros e sor ketik ko tersebut untuk mengetahui kondisi
mputer pertama kali dihidupkan. dan mengatur kom puter pada perasi
2008 | Direktorat Pembinaan SM K 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 Direktorat Pembinaan SMK | 2008


Dasar-dasar Pemr ograman Komputer Bahasa Pemr orgraman

Gambar. 1.4. Diagr am blok sist em kompute r

Pada gambar dia gram blo k instruksi ataupu n berupa data.


se buah sist em kompu ter diatas, Instruks i diambil dan dibac a dari
memori berisi instruksi d an bersama- memori menuju pro sesor, sed ngkan
sa ma proses or melaks anakan da data dibaca dari dan dituli s oleh
menggerakkan data. M emori suat si proseso r ke m emori, h l ini
stem kompu ter tidak pernah koson d ditunjukan pada gambar di bawah:
n selalu terisi apa ah berup

Gambar.1. 5. Aliran D ata pada sebuah Komp uter

2008 | Direktorat Pembinaan SM K 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 Direktorat Pembinaan SMK | 2008


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
n,
yang dikodekan dengan A0 – A9. Bus 2 , jika n = 10 maka jumlah lokasi
10
alamat ini bersifat satu arah yaitu memori yang mungkin adalah 2 =
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
2008 | Direktorat Pembinaan SMK 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) adalah burning ROM. Pengisian data ini
memori yang hanya dapat dibaca dilakukan dengan mengubah data
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 dalam juga disebut dengan ROM
suatu sistem adalah menjaga kode Programmer.
atau data yang diperlukan, seperti ROM biasanya disebut juga
untuk inisialisasi pada saat start. dengan One Time Programmable
Perangkat lunak tersebut biasanya (OTP), karena sesuai namanya ROM
dikenal sebagai firmware. Firmware yang hanya bisa dibaca saja. Pada
berisi perangkat lunak inisialisasi Industri komputer ROM
komputer dan penempatan sarana biasanya digunakan sebagai
Input/Output (I/O) ke dalam suatu firmware. Mask Programmable ROM
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 Direktorat Pembinaan SMK | 2008
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.

2008 | Direktorat Pembinaan SMK 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 piranti
melalui protocol tertentu. bersangkutan. Tentunya pembuatan
Selanjutnya, berbagai piranti tersebut bagian sistem operasi pengelolaan
memerlukan pengaturan yang dalam piranti itu telah disesuaikan dengan
hal ini dilakukan oleh sistem operasi. sistem operasi yang pada umumnya
Sesuai dengan arah ada di dalam sistem komputer.
penyalurannya, dalam 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 Direktorat Pembinaan SMK | 2008
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 yang disiapkan oleh perusahaan pembuat
lain, dan demikian pula sebaliknya. piranti peripheral serta disesuaikan
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 terdiri atas
dapat dinamakan sebagai piranti bagian mekanik dan bagian elektronika.
keluaran manakala piranti itu Kalau bagian mekanik adalah piranti
menerima informasi dari prosesor peripheral itu sendiri, maka bagian
atau memori kerja. elektronika yang mengatur kerja piranti
Selain tahu dimana saja letak 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 dalam
controller) serta bagian kedua adalah banyak hal, rangkaian elektronika itu
pengaturan perangkat lunak berupa disusun dalam suatu papan
protocol transfer data (data transfer rangkaian tercetak (printed circuit).
protocol). Dengan adanya rangkaian ini, maka
Protocol transfer data dikenal sistem operasi selalu berurusan
ada lima macam protocol data. dengan penggerak piranti serta tidak
Pertama adalah protocol transfer berurusan langsung dengan
pirantinya.
data pengendali, kedua adalah
Salah satu sebab mengapa sistem
protocol transfer data serta
operasi selalu berhubungan dengan
pengendali dengan interupsi, ketiga
penggerak piranti dan tidak dengan piranti
adalah protocol transfer data dengan
itu sendiri, adalah karena pada umumnya,
akses memori langsung , keempat
piranti
adalah protocol transfer data dengan
2008 | Direktorat Pembinaan SMK 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 pemutaran bersama yakni piranti seperti
disk atau disket itu melalui motor listrik pencetak atau panel kunci ketik.
serta mengatur pula gerakan head tulis Protokol transfer data
baca (read write head) pada disk atau pengendali dengan interupsi. Protokol
disket itu. Pada ini juga dikenal dengan nama
pencetak, penggerak piranti programmed interrupt data transfer
melaksanakan gerakan head cetak protocol. Sesuai dengan namanya,
sesuai dengan arah yang ditentukan. 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 dilanjutkan
penggerak piranti, maka kerja piranti lagi setelah interupsi selesai. Selama
itu selanjutnya perlu diatur melalui tiada interupsi, maka
suatu pengendali atau subrutin. transfer data dapat terus
Salah satu cara pengaturan adalah
14 Direktorat Pembinaan SMK | 2008
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 yang prosesor kealat dan demikian pula
cukup rumit. Mula-mula penggerak sebaliknya.
piranti membaca data di dalam blok Dalam keadaan tertentu, satu
secara berurutan. Setelah itu, alat dapat berhubungan dengan
penggerak piranti perlu memeriksa beberapa penggerak piranti sejenis.
apakah data yang dibaca itu tidak Satu piranti disk atau disket, misalnya
mengandung kekeliruan. Jika tidak dapat berhubungan dengan satu atau
terdapat kekeliruan, maka prosesor lebih penggerak piranti disk atau
akan membaca semua data dari atau disket. Pada saat kegiatan,
ke memori kerja melalui penampung penggerakan piranti berbentuk
(buffer). Karena prosesor harus terlihat proses yang mengendalikan kerja
dalam pembacaan data, maka selama piranti peripheral. Di antaranya,
pembacaan dan penulisan itu proses tersebut menerima
berlangsung, prosesor tidak dapat permintaan piranti masukan keluaran
mengerjakan pekerjaan lain. Untuk (ada kalanya berbentuk suatu
membebaskan prosesor dari aktifitas antrian), memulai kerja masukan
ini, maka diciptakan penggerak yang keluaran, menata kekeliruan umum
dapat mendukung protocol transfer pada penyaluran informasi,
data akses memori langsung (direct melaksanakan interupsi, serta
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 proses yang meminta itu tentang
awal 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, penggerak
membebaskan prosesor untuk piranti menerima perintah umum serta
melaksanakan pekerjaan lain, maka melaksnakan perintah iti pada piranti
protocol ini lebih unggul dari kedua peripheral.
protocol lainnya.
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


Dasar-dasar Pemr ograman Komputer Bahasa Pemr orgraman

Ga mbar 1.7 Gr afik Nilai Te gangan Analog Terhada p Waktu

Sistem yang mem proses nilai mengg nakan An alog to Digital


diskrit (lang kah demi langkah) Conver er (ADC). ADC men gubah
dinamakan digital. Pada s istem sinyal k ontinyu menjadi sinyal diskrit
digital u tuk men njukkan suatu nilai dengan menyamplingnya tiap detik
digunakan simbol yang dinamaka (tiap satuan wa ktu). Per hatikan
digit. Sinyal pada ga mbar diata s gambar dibawah in .
d pat “didigitalkan” denga

Gambar 1.8. Sin yal Diskrit Dengan Peny amplingan Tiap Detik

Kompute r adalah sebua direpre entasikan oleh sinyal listrik.


p rangkat elektronik. Data yan Sinyal yang digunakan bisa dianalo
d pat diolah adalah data yan gikan deng an saklar listrik,
2008 | Direktorat Pembinaan SM K 17
Bahasa Pemrogra man Dasar-dasar Pemrograman Komputer

ya itu tombol off (mati ) atau o hidup, maka ko mputer membaca


(hidup). Jika saklar pada kondisi off, sebagai angka 1. erhatikan g ambar
maka kompu ter memba ca sebagai berikut:
d ta 0, jika saklar dalam kondisi

Gambar 1. . Saklar Dalam Kondisi Hidup Dan Mati

Sebuah komputer terdiri dari Set iap angka 0 dan 1 biasa


sa klar-saklar yang banyak jumlahny disebut Bit. Bit ad a lah singkat an dari
sa klar-saklar ini menggunaka Binary Digit. Kata Binary diambil dari
ko mponen elektronik berup nama S istem Bilan gan Biner Binary
tr nsistor. J umlah transistor yan Numbe r Sistem). Tabel dibawah
digunakan bisa sam pai jutaan, berikut menunjukka n tentang bit:
se hingga dapat mempros es data
dari jutaan angka 0 dan 1.

Tabel 1.1 Bilangan B ner dengan besar bit d ta

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

Sistem ilangan bi ner disusu Pe ngolahan d ata yang paling


d ri angka- angka, sama seperti sering digunakan saat ini adalah
si stem bilangan desim al (sistem pengol a h kata (w ord proce sing)..
bilangan 10) yang serin g digunaka Ketika melakukan suatu pengolahan
sa at ini. T etapi unt uk desimal kata, komputer bekerja d engan
menggunaka angka 0 sampai 9, si keyboa rd. Ada 101 tombol yang
stem bilangan bin er hany mewakili karakter alphabet A, B, C,
menggunaka angka 0 d n 1. dan seterusnya. S lain itu jug a akan

18 Direktorat Pembinaan SM K | 2008


Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

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


8
dengan 9, dan karakter-karakter lain biner, dapat mewakili 2 =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
n
dengan 2 ≤ 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
Kilobyte Ukuran email biasa = 2 KB
1.024 byte 1000 8000 10 halaman dokumen= 10
(KB)
KB
Megabyte 1.024 kilobyte 1 juta 8 juta Floppy disks = 1,44 MB
(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
Terrabyte Data yang dapat dikirim
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
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

Secara umum dapat dikatakan, nilai


1 0 ‐1 suatu bilangan desimal merupakan
35,2 = 3 X 10 + 5 X 10 + 2 X 10
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:
2008 | Direktorat Pembinaan SMK 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 nonnumerik.
enambelas. Meskipun operasi pada Pada sistem bilangan ini terdapat
sistem digital dan komputer secara fisik enam belas lambang, yaitu:
dikerjakan secara biner, namun untuk
merepresentasikan data menggunakan H = { 0,1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F }
format bilangan heksadesimal karena
format ini lebih praktis, mudah dibaca Ciri suatu bilangan menggunakan
dan mempunyai kemungkinan timbul sistem bilangan heksadesimal adalah
kesalahan lebih kecil. adanya tambahan subskrip heks atau
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 Direktorat Pembinaan SMK | 2008


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
2008 | Direktorat Pembinaan SMK 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 Konversi bilangan biner ke oktal
bilangan desimal dengan 8. Sisa lebih mudah dibandingkan konversi
setiap pembagian merupakan digit bilangan desimal ke oktal. Untuk
oktal 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 Direktorat Pembinaan SMK | 2008
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 hasil
Konversi bilangan heksadesimal perkalian ini dikalikan dengan
ke desimal dilakukan ࿿࿿࿿࿿࿿࿿࿿࿿࿿
dengan q䎒伩࿿࿿࿿࿿࿿࿿࿿࿿࿿r뾬剃࿿࿿࿿࿿࿿࿿࿿࿿࿿
semua t漞㍊࿿࿿࿿࿿࿿࿿࿿࿿࿿uኸ࿿࿿࿿࿿࿿࿿࿿࿿101‚Ꮐ»
࿿࿿࿿࿿࿿࿿࿿࿿࿿
menjumlahkan hasil perkalian
digit heksadesimal dengan beratnya. ࿿࿿࿿࿿࿿࿿࿿࿿࿿„⋤ⅻ࿿࿿࿿࿿࿿࿿࿿࿿࿿…࿿口࿿࿿࿿࿿࿿࿿࿿࿿࿿
࿿࿿࿿࿿࿿࿿࿿࿿࿿‡䩦ᜰ ࿿࿿࿿࿿࿿࿿࿿࿿࿿ˆ胘࿿࿿࿿࿿࿿࿿࿿࿿࿿࿿‰槬啫
憖炃࿿࿿࿿࿿࿿࿿࿿࿿࿿‹缒原࿿࿿࿿࿿࿿࿿࿿࿿࿿Œ⠗࿿࿿࿿࿿࿿࿿࿿࿿࿿
࿿࿿࿿࿿࿿࿿࿿࿿࿿Ž蘸ៗ࿿࿿࿿࿿࿿࿿࿿࿿࿿⌂ᐝ࿿࿿࿿࿿࿿࿿࿿࿿࿿棘䁱
䗤樛࿿࿿࿿࿿࿿࿿࿿࿿࿿’픊噻࿿࿿࿿࿿࿿࿿࿿࿿࿿“ퟸ玻࿿࿿࿿࿿࿿࿿࿿࿿࿿
•걶㉿࿿࿿࿿࿿࿿࿿࿿࿿࿿–攈婠࿿࿿࿿࿿࿿࿿࿿࿿࿿—
ᮤ࿿䘑࿿࿿࿿࿿࿿࿿࿿࿿࿿™㢖庖࿿࿿࿿࿿࿿࿿࿿࿿࿿š࿿ 睛
࿿࿿࿿࿿࿿࿿࿿࿿࿿œञ皚࿿࿿࿿࿿࿿࿿࿿࿿࿿꺔䚕࿿࿿࿿࿿࿿࿿࿿࿿࿿
࿿࿿࿿࿿࿿࿿࿿࿿࿿Ÿ릂㽈࿿࿿࿿࿿࿿࿿࿿࿿࿿ 迊䚺࿿࿿࿿࿿࿿࿿࿿࿿࿿¡扬砵
쩈晚࿿࿿࿿࿿࿿࿿࿿࿿࿿£늮栵࿿࿿࿿࿿࿿࿿࿿࿿࿿¤粐䰘࿿࿿࿿࿿࿿࿿࿿࿿࿿
࿿࿿࿿࿿࿿࿿࿿࿿࿿¦‫ﴖ‬罥࿿࿿࿿࿿࿿࿿࿿࿿࿿§‫ﵨ‬矉࿿࿿࿿࿿࿿࿿࿿࿿࿿¨銺⦊
庬濩࿿࿿࿿࿿࿿࿿࿿࿿࿿ª籺䭩࿿࿿࿿࿿࿿࿿࿿࿿࿿«窦冢࿿࿿࿿࿿࿿࿿࿿࿿࿿
࿿࿿࿿࿿࿿࿿࿿࿿࿿ʴ捁࿿࿿࿿࿿࿿࿿࿿࿿࿿®鶨斿࿿࿿࿿࿿࿿࿿࿿࿿࿿¯࿿↢
䢘䵜࿿࿿࿿࿿࿿࿿࿿࿿࿿±犲㰻࿿࿿࿿࿿࿿࿿࿿࿿࿿²쓂ᕞ࿿࿿࿿࿿࿿࿿࿿࿿࿿
Konversi bilangan desimal bulat
ke heksadesimal dilakukan dengan´Ἢ溻࿿࿿࿿࿿࿿࿿࿿࿿࿿µ⧊澿࿿࿿࿿࿿࿿࿿࿿࿿࿿¶蠈唋
membagi secara berulang-ulang 㫎㓌࿿࿿࿿࿿࿿࿿࿿࿿࿿¸扠乕࿿࿿࿿࿿࿿࿿࿿࿿࿿¹⿈䱧࿿࿿࿿࿿࿿࿿࿿࿿࿿
suatu bilangan desimal ࿿࿿࿿࿿࿿࿿࿿࿿࿿
dengan 16. »殀䓯࿿࿿࿿࿿࿿࿿࿿࿿࿿¼ Langkah ini
Sisa setiap pembagian merupakan diulang hingga didapat hasil akhir 0.
digit heksa-desimal yang didapat. Bagian bulat dari setiap hasil
perkalian merupakan digit yang
didapat.

Konversi bilangan heksadesimal


ke biner lebih mudah dibandingkan
konversi bilangan heksadesimal ke
desimal. Satu digit heksadesimal
dikonversi ke 4 bit.
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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 komputer.
IBM, 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 ini.
Decimal (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
6 huruf ditentukan oleh angkanya
oleh 64 - ( 2 ) 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 11 grup ini hanya ada delapan huruf.
pada tempat zone. Karena A adalah Angka-angka 0 hingga sembilan
huruf pertama dalam kelompok ini, diberikan kode 00 di depannya diikuti
oleh angka itu sendiri dalam sistim
maka kodenya adalah: 0001, B
binary. Angka 0 (nol) harus dibedakan
sebagai huruf kedua dengan kode: dengan tanda kosong (spasi) guna
0010, C adalah 0011 dan seterusnya. mempermudah cara penggunaan
Dengan perkataan lain, zone bit yang kode.
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
2008 | Direktorat Pembinaan SMK 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.
8
karakternya menjadi 256 atau 2 .

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
7 telah dibakukan oleh ANSI
karakter ASCII terdiri dari 128 – (2 )
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 memory
oleh komputer untuk memecahkan 5888 Komputer melakukan
masalah atau tugas-tugas yang perkalian antara jumlah jam
diberikan padanya. Misalnya jika dengan gaji perjam
menggunakan komputer untuk 5889 Komputer menampilkan hasil
menghitung pembayaran pada perhitungan gaji pegawai yang
seorang pegawai maka langkah- harus dibawa pulang. Sekumpulan
langkah yang dilakukan adalah instruksi-instruksi
sebagai berikut: tersebut diatas disebut dengan
23 Menampilkan pesan pada layar “ algoritma. Algoritma merupakan
berapa jam kamu bekerja?” kumpulan instruksi yang terdefinisi
24 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 ini
akan memasukan data ke dalam diurutkan secara sekensial. Dalam
memory. algoritma langkah pertama harus
25 Menampilkan pesan pada layar “ dilakukan lebih dahulu sebelum
berapa besarnya gaji tiap langkah kedua dan seterusnya.
jamnya?” Langkah-langkah komputer tidak bisa
26 Menunggu pengguna memasukan terbalik. Pada langkah-langkah
28 Direktorat Pembinaan SMK | 2008
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
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

Gambar 1.11. Bahasa aras tinggi

Gambar 1.12. Bahasa aras rendah

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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.
Salah satu sistem operasi yang Meskipun sebuah objeck file
ditulis dengan menggunakan C++ terdiri dari instruksi bahasa mesin,
adalah X-Window sistem dan sistem tetapi hal tersebut bukan sebuah
operasi yang dimiliki oleh Macintosh. program yang lengkap. C++ telah
Ketika progam C++ ditulis, hal menyediakan berbagai kelengkapan
tersebut harus disesuaikan dengan dengan library yang kodenya telah
komputer dan disimpan dalam bentuk ada dan biasanya atau kadang-
file. Editor text yang digunakan kadang digunakan untuk
seperti halnya program pengolah mengerjakan tugas -tugas yang sulit.
kata. Melalui editor ini, statement Sebagai contoh saja library
ditulis oleh seorang programmer digunakan untuk menangani kode
yang disebut dengan kode sumber perangkat keras khusus seperti
(source code) dan file yang disimpan menampilkan pada layar, menangani
disebut dengan file sumber (source masukan dari keyboard. Selain itu
file). Setelah kode sumber disimpan juga menyediakan routin fungsi
dalam bentuk file maka proses matematika seperti operasi kwadrat,
translasi (terjemahan) menuju perakaran bilangan. Kumpulan kode
bahasa mesin dapat dimulai. Selama ini disebut dengan run-time library.
fase ini diproses, sebuah program Hampir semua program
yang dinamakan dengan preprosesor menggunakan bagian tersebut.
membaca kode sumber. Ketika compiler membangkitkan file
Preprosesor mencari baris object, meskipun hal tersebut tidak
khusus yang terdapat simbol. Baris termasuk dalam code mesin untuk
ini terdiri dari instruksi yang setiap routin run-time library yang
menyebabkan preprosesor mungkin digunakan oleh seorang
mengubah kode sumber dalam programmer. Selama phase akhir dari proses
beberapa langkah atau perubahan translasi, program lain yang disebut dengan
yang dikehendaki oleh programmer. linker mengkombinasikan file object dengan
Selama terjadi phase lanjut, compiler routin‐routin library yang penting. Lingker
melangkah melalui preproses kode akan menghentian langkah setelah file
sumber. Translasi tiap instruksi kode executable telah selesai dibuat. File
sumber menjadi instruksi bahasa executable terdiri dari instruksi bahasa mesin
mesin yang sesuai. Proses ini akan atau kode instruksi dan siap dijalankan pada
dibuka oleh beberapa kesalahan sebuah komputer. Gambar dibawah
sintak yang mungkin terjadi pada
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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

0 Deklarasi Variable:
Perhatikan deklarasi antara dua word var, kemudian diikuti dengan
buah program yang berbeda. Dibawah ini nama variable (identifier) yang ingin
merupakan deklarasi program yang digunakan, dan kemudian tipe data
digunakan oleh bahasa pascal dan bahasa C. dari variable tersebut. Sedangkan
pada C, deklarasi diawali dengan tipe
perhatikan perbedaan antara dua
data variable baru diikuti dengan
bahasa tersebut. nama variable (identifier) . Suatu
Bahasa Pascal identifier harus diawali oleh karakter
bukan angka, tetapi tidak boleh
Var I,i2 : Integer; mengandung karakter khusus seperti
s : String; 23 , - + / \ = < > . ? & dan
sebagainya. Pada bahasa Pascal,
identifier tidak bersifat case sensitive,
Bahasa C
maksudnya, huruf besar ataupun
Int 1,12;
huruf kecil dianggap sama.
Char s[100]; Sebaliknya pada Bahasa C, identifier
bersifat case sensitive, sehingga
Untuk mendeklarasikan variable variable s dan S akan dianggap dua
pada Pascal, digunakan reserved identifier yang berbeda.
23 Deklarasi Konstanta:
Dalam melakukan deklarasi nilai
konstanta atau nilai tetap, dilakukan const phi = 3.14;
dengan cara menulis const.
perhatikan contoh penulisan program Konstanta yaitu nilai yang tetap. Jadi
dibawah ini: jika mengacu pada contoh di atas,
maka nilai phi tidak dapat diubah-
ubah dan akan selalu 3.14
5888 Deklarasi Tipe Data.
Perhatikan deklarasi antara
kedua program antara C dan pascal seperti terlihat dibawah ini:

2008 | Direktorat Pembinaan SMK 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 hanya terstruktur.
melibatkan satu item data, misalnya
tipe data integer, string, real, Boolean, c) Tipe Data Pointer
dan sebagainya. Kita dapat juga Tipe data pointer digunakan
mendefinisikan sendiri tipe data ini. untuk menunjuk pada alamat memory
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;

5888 Deklarasi Procedure/Function:


Untuk membahas masalah funsi pada C Perhatikan potongan
procedure pada bahasa Pascal dan program dibawah ini:
36 Direktorat Pembinaan SMK | 2008
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 pada
Sebenarnya, perbedaan utama 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);
}
2008 | Direktorat Pembinaan SMK 37
Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

Berikut adalah penjelasan baris demi 5888 float diameter, radius, Luas;
baris dari potongan kode Bahasa C Baris keempat ini digunakan untuk
untuk contoh di atas. mendeklarasikan variable
23 #include <stdio.h> diameter, radius, dan luas dengan
Baris di awal program ini tipe data float (bilangan pecahan)
mengincludekan header library 5889 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
24 void main() variable diameter.
Baris kedua ini menandakan awal 5890 radius = diameter / 2.0;
dari blok statement utama. Pada 5891 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.
25 { const phi = 3.14; 5892 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 5893 }
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 23 Token
pada dasarnya serupa antara satu 24 Komentar
bahasa dengan bahasa yang lain. 25 Identifier
Hal itu dikarenakan element-element 26 Keywords (Reserved Words)
tersebut merupakan bagian dari tata 27 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 pada
Function dan Procedure. bahasa pemrograman yang memiliki
Aturan leksikal yaitu aturan yang arti penting bagi compiler. Yang
digunakan dalam membentuk suatu termasuk token antara lain: identifier,
deklarasi, definisi, maupun statement keywords(reserved words), operator,
hingga menjadi satu program yang dan sebagainya. Token yang satu
dengan yang lain
38 Direktorat Pembinaan SMK | 2008
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() {
0 Cetak hello World
1 Oleh Saya
printf(“Hello World”);
}

c. Identifier
Identifier merupakan kumpulan ABCDEFGHIJKLMNOPQRSTUVWXYZ
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

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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+ C++, seperti Topspeed C++ dan
+. 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
2008 | Direktorat Pembinaan SMK 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
1.11.1. Bagian Komentar komentar bersarang (nested
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 Direktorat Pembinaan SMK | 2008
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 ( “ … “).

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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 ) ;
2008 | Direktorat Pembinaan SMK 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.
23 Sebutkan bagian-bagian perangkat keras komputer
24 Sebutkan lapisan perangkat lunak komputer personal
25 Sebutkan berbagai macam memori yang digunakan pada komputer
26 Apa yang dimaksud dengan piranti Input dan output (I/O).
27 Jelaskan sistem bilangan yang digunakan oleh komputer
28 Jelaskan proses translasi dari file sumber menjadi file executable
29 Jelaskan struktur bahasa C++
30 Sebutkan perbedan bahasa C dan C++

46 Direktorat Pembinaan SMK | 2008


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) ,
2008 | Direktorat Pembinaan SMK 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 berlainan
rancangan tertentu. dengan bahasa mesin kelompok
Pemahaman yang lebih sempit ini komputer yang lain.
sering digunakan dalam pembuatan Abstraksi bahasa ini adalah
program-program terapan komersial kumpulan kombinasi kode biner "0"
yang membedakan antara system dan "1" yang sangat tidak alamiah
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 penyimpanan
pada high-level programming data. Bahasa rakitan juga bersifat
languages, suatu bahasa yang sudah khusus untuk mesin tertentu. Contoh:
dekat pada bahasa manusia. Pada 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 Direktorat Pembinaan SMK | 2008
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 generasi 100% bisa digunakan pada berbagai
bahasa pemrograman terakhir mesin dengan aneka sistem operasi.
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 NAME
cepat. Pertama program 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 Bahasa
adalah Visual BASIC yang berbasis Pemrograman untuk tujuan tertentu.
BASIC dan Delphi yang berbasis (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)

2008 | Direktorat Pembinaan SMK 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 program tanpa melihat program
bahasa program dikumpulkan secara keseluruhan. Keuntungan dari
kemudian 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 pemrograman.
menjadi object code (bahasa Tipe pemrograman yang pertama
assembly) adalah pemrograman terstruktur dan
Object code dihubungkan 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 Direktorat Pembinaan SMK | 2008
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 Gayapenulisanprogram
digunakan, terstruktur: Menggunakan
Menggunakan pengkodean indentasi sehingga jelas struktur
terstruktur: IF ........... THEN, dankontrolprogram.
DO ........ WHILE dan lain-lainnya, Memudahkanpembacaan,
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 melakukan
diperlukan dan proses-proses 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 23 Runtun - urut (sequence)
dibatasi dalam isi maupun batasan- 24 Pilihan (selection)
batasan berikut: 25 Pengulangan (repetition - loop)
Setiap modul hanya mempunyai 26 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
2008 | Direktorat Pembinaan SMK 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
23 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 c dengan baik sehingga permasalahan
= axb yang ada dapat diselesaikan dengan
24 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
25 PemrogramanImplementasi 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
26 Uji dan Validasi Pengujian terhadap urutan langkah logis, yang berarti
program : seperti kesalahan algoritma harus mengikuti suatu
penulisan (syntax error) , kesalahan urutan tertentu, tidak boleh
saat eksekusi (runtime error) melompat-lompat dan disusun secara
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 Direktorat Pembinaan SMK | 2008
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.
2008 | Direktorat Pembinaan SMK 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 berbeda
bagaimanakah caranya? Apakah tetapi tetap menghasilkan jawaban
cukup dengan cara (membuat yang sama atas persoalan yang ada.
algoritma), tuangkan isi ember A ke
ember B dan kemudian tuangkan isi
54 Direktorat Pembinaan SMK | 2008
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:

23 Masukkan sembarang bilangan sebanyak tiga buah.


24 Ambil bilangan pertama dan set maksimum‐nya sama dengan bilangan pertama.
25 Ambil bilangan kedua dan bandingkan dengan maksimum.
26 Apabila bilangan kedua lebih besar dari maksimum maka ubah maksimum‐nya
menjadi sama dengan bilangan kedua.
27 Ambil bilangan ketiga dan bandingan dengan maksimum.
28 Apabila bilangan ketiga lebih besar dari maksimum maka ubah lagi maksimum‐
nya menjadi sama dengan bilangan ketiga.
29 Variabel maksimum akan berisi bilangan yang terbesar dan tampilkan hasilnya.

Algoritma dengan uraian kalimat kalimat deskriptif) yang ditulis secara lebih
deskriptif seperti di atas sudah jarang sistematis dan efisien sehingga lebih mudah
sekali kita temukan karena kadang untuk memahaminya. Algoritma tersebut
kala agak sulit untuk memahaminya. adalah sebagai berikut:
Yang paling banyak kita temukan
adalah algoritma (dengan uraian
2008 | Direktorat Pembinaan SMK 55
Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

23 Masukkan a, b, dan c.
24 mak  a.
25 Jika b > mak, kerjakan langkah ke‐4. Jika tidak, kerjakan langkah ke‐5.
26 mak  b.
27 Jika c > mak, kerjakan langkah ke‐6. Jika tidak, kerjakan langkah ke‐7.
28 mak  c.
29 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 23 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 Direktorat Pembinaan SMK | 2008
Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

dituliskan bersamaan secara


keseluruhan.

Gambar 2.3. Simbol proses

23 Keluaran
Keluaran adalah hasil dari
Gambar 2.1. Simbol masukan pemrosesan data dan merupakan
jawaban atas permasalahan yang
23 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

23 Percabangan
Yang dimaksud dengan
Gambar 2.2. Simbol masukan percabangan disini adalah suatu
manual kegiatan untuk mengecek atau
memeriksa suatu keadaan
23 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
2008 | Direktorat Pembinaan SMK 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

23 Sub rutin
Gambar 2.6. Simbol sub rutin
Sub rutin adalah suatu bagian
dalam program yang dapat
23 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).
Perbedaan antara keduanya disimbolkan dengan anak panah
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 23 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 terminator
saja, sama seperti jika kita untuk MULAI dan
melakukan pemanggilan terhadap SELESAI.
58 Direktorat Pembinaan SMK | 2008
Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

Gambar 2.8. Simbol terminator 23 (b)

23 Konektor Gambar 2.9. Simbol konektor on


Konektor berfungsi untuk page (a) dan off page (b)
menghubungkan suatu langkah
dengan langkah lain dalam 5888 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
Berikut adalah flow chart untuk
menggambar flow chart tidak
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.

2008 | Direktorat Pembinaan SMK 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 1. Judul algoritma
pseudo code karena implementasi
atau penerjemahan algoritma ke Bagian yang terdiri atas nama
dalam source code suatu bahasa algoritma dan penjelasan

60 Direktorat Pembinaan SMK | 2008


Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

(spesifikasi) dari algoritma 23 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.
0 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
2.11. Penerjemahan ke kode yang sering dilupakan orang.
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
2008 | Direktorat Pembinaan SMK 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 23 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 24 Menulis dokumentasi
bagaimana nanti keluarannya. Dokumentasi sangatlah penting
23 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
24 Memilih algoritma prosedur dan fungsi.
Pilihlah (atau buatlah) algoritma 25 Merawat program
yang benar-benar sesuai dan Program yang sudah jadi
efisien untuk permasalahan yang sebaiknya juga dilakukan
diberikan. perawatan untuk mencegah
25 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
Direktorat Pembinaan SMK | 2008
62
Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

source code suatu bahasa 23 Sequence Process, merupakan


pemrograman, seharusnya kita instruksi yang dikerjakan secara
mamahami terlebih dahulu bahasa sekuensial (berurutan).
pemrograman yang akan kita 24 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 25 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 26 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 23 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 dan
yang biasanya kita temukan dalam B menjadi 19, maka algoritmanya
algoritma. Dalam algoritma ada adalah :
empat jenis proses yang dikenal,
yaitu :

Menggunakan uraian kalimat deskriptif


23 Set nilai variabel A  19 dan B  33
24 Set nilai dari variabel C menjadi sama dengan variabel A.
25 Set nilai variabel A menjadi sama dengan B.
26 Set nilai variabel B menjadi sama dengan C.
27 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
2008 | Direktorat Pembinaan SMK 63
Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

23 BC
24 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 Direktorat Pembinaan SMK | 2008


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++.

23 #include <iostream>
24 using namespace std;
25 int main() {
26 int a = 19, b = 33;
27 int c = a;
28 a = b;
29 b = c;
30 cout << “a = “ << a << endl;
31 cout << “b = “ << b;
32 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.
2008 | Direktorat Pembinaan SMK 65
Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

Sedangkan penerjemahan algoritma- Java adalah sebagai berikut:


algoritma tersebut dalam bahasa

23 class tukarData {
24 public static void main(String[ ] args) {
25 int a=19, b=33;
26 int c = a;
27 a = b;
28 b = c;
29 System.out.println("a = " + a);
30 System.out.println("b = " + b);
31 }
32 }

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 akan
identifikasi dengan adanya kata jauh lebih mudah karena seperti
kunci JIKA. Dengan demikian yang telah dikemukakan
pada saat menerjemahkan sebelumnya bahwa pseudo code
langkah ke-3 dan langkah ke-5 ini strukturnya sangat mirip
66 Direktorat Pembinaan SMK | 2008
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++

23 #include <iostream>
24 using namespace std;
25 int main() {
26 int a,b,c,mak;
27 cout << "Bilangan pertama = ";
28 cin >> a;
29 cout << "Bilangan kedua = ";
30 cin >> b;
31 cout << "Bilangan ketiga = ";
32 cin >> c;
33 mak = a;
34 if (mak < b) mak = b;
35 else if (mak < c) mak = c;
36 cout << "Bilangan terbesarnya = " << mak;
37 return 0;
38 }

Sedangkan penerjemahan dalam (perhatikan source code baris ke-


bahasa lain misalnya bahasa 14 dan 15)
Java adalah sebagai berikut

23 import java.util.Scanner;
24 import java.io.*;
25 class bilTerbesar {
26 public static void main(String[ ] args) {
27 int a,b,c;
28 Scanner input = new Scanner(System.in);
29 System.out.print("Bilangan pertama = ");
30 a = input.nextInt();
31 System.out.print("Bilangan kedua = ");
32 b = input.nextInt();
33 System.out.print("Bilangan ketiga = ");
34 c = input.nextInt();
35 int mak = a;
36 if (mak < b) mak = b;
37 else if (mak < c) mak = c;
38 System.out.print("Bilangan terbesarnya = " + mak);

2008 | Direktorat Pembinaan SMK 67


Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

17. }
18. }
Pada permasalahan ini, kita juga a) Menggunakan uraian kalimat

dapat menggunakan algoritma deskriptif


lain, yaitu :

23 Masukkan a, b, dan c.
24 Jika a > b, maka kerjakan langkah ke‐3. Jika tidak, kerjakan langka ke‐5.
25 Jika a > c, maka kerjakan langkah ke‐4. Jika tidak, kerjakan langka ke‐7.
26 mak  a.
27 Jika b > c, kerjakan langkah ke‐6. Jika tidak, kerjakan langkah ke‐7.
28 mak  b.
29 mak  c.
30 Tulis mak.

68 Direktorat Pembinaan SMK | 2008


Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

b) Menggunakan flow chart

Mulai

a, b, c

a>b Ya a>c Ya 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}
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

23 cout << "Bilangan kedua = ";


24 cin >> b;
25 cout << "Bilangan ketiga = ";
26 cin >> c;
27 if (a > b) {
28 if (a > c)
29 mak = a;
30 else mak = c;
31 }
32 else {
33 if (b > c)
34 mak = b;
35 else mak = c;
36 }
37 cout << "Bilangan terbesarnya = " << mak;
38 return 0;
39 }

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
23 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) :

23 import java.util.Scanner;
24 import java.io.*;
25 class bilBesar {
26 public static void main(String[ ] args) {
27 int a,b,c,mak;
28 Scanner input = new Scanner(System.in);
29 System.out.print("Bilangan pertama = ");
30 a = input.nextInt();
31 System.out.print("Bilangan kedua = ");
32 b = input.nextInt();
33 System.out.print("Bilangan ketiga = ");
34 c = input.nextInt();
35 if (a > b) {
14. if (a > c)
15. mak = a;
16. else mak = c;
23 }
2008 | Direktorat Pembinaan SMK 71
Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

23 else {
19. if (b > c)
20. mak = b;
21. else mak = c;
23 }
24 System.out.print("Bilangan terbesarnya = " + mak);
25 }
26 }

23 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


23 Masukan bilangan sebuah bilangan bulat (angka).
24 Jika angka  1, maka kerjakan langkah ke‐3. Jika tidak, kerjakan langkah ke‐4.
25 hari  “Minggu”.
26 Jika angka  2, maka kerjakan langkah ke‐5. Jika tidak, kerjakan langkah ke‐6.
27 hari  “Senin”.
28 Jika angka  3, maka kerjakan langkah ke‐7. Jika tidak, kerjakan langkah ke‐8.
29 hari  “Selasa”.
30 Jika angka  4, maka kerjakan langkah ke‐9. Jika tidak, kerjakan langkah ke‐10.
31 hari  “Rabu”.
32 Jika angka  5, maka kerjakan langkah ke‐11. Jika tidak, kerjakan langkah ke‐12.
33 hari  “Kamis”.
34 Jika angka  6, maka kerjakan langkah ke‐13. Jika tidak, kerjakan langkah ke‐14.
35 hari  “Jumat”.
36 Jika angka  7, maka kerjakan langkah ke‐15. Jika tidak, kerjakan langkah ke‐16.
37 hari  “Sabtu”.
38 hari  “Tidak ada nama hari untuk angka tersebut”
39 Tampilkan hari.

72 Direktorat Pembinaan SMK | 2008


Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

a) Menggunakan flow chart

Mulai A B
angka angka  2 Ya

hari  “Senin”
Tidak

angka  1 Ya hari  “Minggu”

Ya
angka  3 hari  “Selasa”

Tidak
Tidak
A B
angka  4 Ya
hari  “Rabu”
Tidak Ya

angka  5

hari  “Kamis”

Tidak
angka  6 Ya

hari  “Jumat”

Tidak
angka  7 Ya

hari  “Sabtu”

Tidak

hari  “Tidak ada

nama hari”

hari

Selesai

Gambar 2.14. Flowchart


2008 | Direktorat Pembinaan SMK 73
Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

23 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 Direktorat Pembinaan SMK | 2008
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 :

23 #include <iostream>
24 #include <cstring>
25 using namespace std;
26 int main() {
27 int angka;
28 string hari;
29 cout << "Bilangan = ";
30 cin >> angka;
31 if (angka==1) hari="Minggu";
32 else if (angka==2) hari="Senin";
33 else if (angka==3) hari="Selasa";
34 else if (angka==4) hari="Rabu";
35 else if (angka==5) hari="Kamis";
36 else if (angka==6) hari="Jumat";
37 else if (angka==7) hari="Sabtu";
38 else hari="tidak ada";
39 cout << "Nama hari ke‐" << angka << " adalah " << hari;
40 return 0;
41 }

2008 | Direktorat Pembinaan SMK 75


Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

Program diatas dapat juga ditulis seperti dibawah ini:

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

Sedangkan dalam contoh dalam bahasa Java adalah :

23 import java.util.Scanner;
24 import java.io.*;
25 class bab2_03 {
26 public static void main(String[ ] args) {
27 int angka;
28 String hari;
29 Scanner input = new Scanner(System.in);
30 System.out.print("Bilangan = ");
31 angka = input.nextInt();
32 if (angka==1) hari="Minggu";
76 Direktorat Pembinaan SMK | 2008
Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

23 else if (angka==2) hari="Senin";


24 else if (angka==3) hari="Selasa";
25 else if (angka==4) hari="Rabu";
26 else if (angka==5) hari="Kamis";
27 else if (angka==6) hari="Jumat";
28 else if (angka==7) hari="Sabtu";
29 else hari="tidak ada";
30 System.out.print("Nama hari ke‐" + angka + " adalah = " + hari);
31 }
32 }

Program diatas dapat juga ditulis seperti dibawah ini:

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

2008 | Direktorat Pembinaan SMK 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

5888 Masukan jumlah (n) data yang diinginkan.


5889 Selama jumlah data yang dimasukkan kurang dari n, kerjakan langkah
ke‐ 3 dan ke‐4. Jika tidak kerjakan langkah ke‐5.
5890 Masukan data.
5891 Tambahkan data yang dimasukkan dengan data sebelumnya.
5892 Hitung rata‐rata data.
5893 Tampilkan besar rata‐ratanya.

Uraian diatas dapat juga ditulis seperti dibawah ini:

23 Masukkan n
24 i  0
25 Sum  0
26 Selama i < n, kerjakan langkah ke‐5, 6, dan 7.
27 Masukkan data[i]
28 Sum  Sum + data[i]
29 i++
30 Rata2  Sum / n
31 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 Direktorat Pembinaan SMK | 2008


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 memasukkan


karena banyak data yang banyak data) . Langkah ke‐7 merupakan
dimasukkan belum diketahui dengan increment variabel i, yaitu menaikkan nilai
pasti (lihat langkah pertama yang variabel i
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


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 C+
bahasa C++ atau program + 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-9
Langkah-langkah yang masuk dan 10 merupakan baris tambahan
dalam proses perulangan ini agar program lebih user friendly).

5888 #include <iostream>


5889 using namespace std;
5890 int main() {
5891 int n, i=0, sum=0, data[20];
5892 float rata2;
5893 cout << "Jumlah data (maksimum 20 data) = ";
2008 | Direktorat Pembinaan SMK 81
Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

23 cin >> n;
24 while(i < n) {
25 int j = i + 1;
26 cout << "Masukkan data ke‐" << j << " : ";
27 cin >> data[i];
28 sum += data[i];
29 i++;
30 }
31 rata2 = sum / n;
32 cout << "Rata‐ratanya = " << rata2;
33 return 0;
34 }

Program diatas dapat juga ditulis seperti dibawah ini:

5888 #include <iostream>


5889 using namespace std;
5890 int main() {
5891 int n, i, sum=0, data[20];
5892 float rata2;
5893 cout << "Jumlah data (maksimum 20) = ";
5894 cin >> n;
5895 for(i=0; i < n; i++) {
5896 int j = i + 1;
5897 cout << "Masukkan data ke‐" << j << " : ";
5898 cin >> data[i];
5899 sum += data[i];
5900 }
5901 rata2 = sum / n;
15. cout << "Rata‐ratanya = " << rata2;
23 return 0;
24 }

Sedangkan jika ditulis dalam bahasa Java adalah sebagai berikut:

5888 import java.util.Scanner;


5889 import java.io.*;
5890 class bab2_03 {
5891 public static void main(String[ ] args) {
5892 int n, i=0, sum=0;
5893 int[ ] data = new int[20];
5894 float rata2;
5895 Scanner input = new Scanner(System.in);
82 Direktorat Pembinaan SMK | 2008
Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

23 System.out.print("Jumlah data (mak. 20) = ");


24 n = input.nextInt();
25 while(i < n) {
26 int j = i + 1;
27 System.out.print("Masukkan data ke‐" + j + " : ");
28 data[i] = input.nextInt();
29 sum += data[i];
30 i++;
31 }
32 rata2 = sum / n;
33 System.out.print("Rata‐ratanya = " + rata2);
34 }
35 }

Program diatas dapat juga ditulis seperti dibawah ini:

23 import java.util.Scanner;
24 import java.io.*;
25 class bab2_03_2 {
26 public static void main(String[ ] args) {
27 int n, i, sum=0;
28 int[ ] data = new int[20];
29 float rata2;
30 Scanner input = new Scanner(System.in);
31 System.out.print("Jumlah data (mak. 20) = ");
32 n = input.nextInt();
33 for(i=0;i < n;i++) {
34 int j = i + 1;
35 System.out.print("Data ke‐" + j + " : ");
36 data[i] = input.nextInt();
37 sum += data[i];
38 }
39 rata2 = sum / n;
40 System.out.print("Rata‐ratanya = " + rata2);
41 }
42 }

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.
2008 | Direktorat Pembinaan SMK 83
Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

5888 Bagilah m dengan n, m 36


misalnya hasilnya adalah r.
1. =n 20  mempunyai
sisa r = 16
5889 Apabila r = 0, maka
5888 r = 16  r 0
hasilnya adalah n itu sendiri
5889 m = 20 dan n = 16
(merupakan FPB dari m dan m 20
n). 4. n
= 16  mempunyai
4) Jika r 0 maka proses sisa r = 4
pencarian dilanjutkan yaitu 23 r = 4  r 0
ganti m dengan n dan n 24 m =16 dan n = 4
dengan r dan ulangi langkah 7. m 16  mempunyai sisa r
ke-2, demikian selanjutnya. n 4
Misalnya akan dicari FPB dari 36 =0
dan 20, maka penyelesaiannya Jadi FPB( 36, 20) = 4
menurut algoritma Euclid adalah :

b) Menggunakan flow chart

Mulai A
Ya

fpb  n r=0
m, n
Tidak

m>n Tidak Ya mn


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

rm%n

fpb

Selesai

Gambar 2.16. Flowchart


84 Direktorat Pembinaan SMK | 2008
Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

Algoritma Euclid di atas merupakan deskriptif. Algoritma tersebut dapat


algoritma dengan uraian kalimat ditulis kembali sebagai berikut:

23 Menggunakan uraian kalimat deskriptif


23 Masukkan m dan n.
24 Selama m < n ulangi kembali langkah pertama.
25 r  m % n
26 Jika r = 0 maka fpb n.Jika tidak kerjakan langkah ke‐5.
27 Selama r != 0 kerjakan langkah ke‐6 sampai ke‐8.
28 m  n dan n  r
29 r  m % n
30 fpb  n
31 Tulis fpb.

5888 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 
nn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.
2008 | Direktorat Pembinaan SMK 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 klausado 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-

23 #include <iostream>
24 using namespace std;
25 int main() {
26 int m,n,r,fpb;
27 do {
28 cout << "Masukkan bilangan pertama = ";
29 cin >> m;
30 cout << "Masukkan bilangan kedua = ";
31 cin >> n;
32 } while (m < n);
33 r = m % n;
34 if (r==0) fpb = n;
35 else {
36 while(r!=0) {
37 m = n;
38 n = r;
39 r = m % n;
86 Direktorat Pembinaan SMK | 2008
Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

5888 fpb = n;
5889 }
5890 }
5891 cout << "FPB‐nya = " << fpb;
5892 return 0;
5893 }

Sedangkan jika ditulis dalam bahasa Java adalah sebagai berikut:


23 import java.util.Scanner;
24 import java.io.*;
25 class bab2_04 {
26 public static void main(String[ ] args) {
27 int m,n,r,fpb;
28 Scanner input = new Scanner(System.in);
29 do {
30 System.out.print("Masukkan bilangan pertama = ");
31 m = input.nextInt();
32 System.out.print("Masukkan bilangan kedua = ");
33 n = input.nextInt();
34 } while(m < n);
35 r = m % n;
36 fpb = 0;
37 if (r == 0) fpb = n;
38 else {
39 while(r != 0) {
40 m = n;
41 n = r;
42 r = m % n;
43 fpb = n;
44 }
45 }
46 System.out.print("Bilangan terbesarnya = " + fpb);
47 }
48 }

2.12. Soal Latihan


Jawablah soal latihan dibawah ini dengan baik dan benar.
5888 Apa yang dimaksud dengan bahasa pemrograman
5889 Apa yang dimaksud dengan compiler dan intepreter
5890 Apa yang dimaksud dengan bahasa pemrograman prosedural dan
terstruktur
5891 Apa yang dimaksud dengan algoritma pemrograman
2008 | Direktorat Pembinaan SMK 87
Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

5888 Sebutkan ciri-ciri algoritma pemrograman


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

88 Direktorat Pembinaan SMK | 2008


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 0 Data Numerik atau bilangan, yaitu
berfungsi sebagai masukan untuk jenis data yang digunakan dalam
proses komputer. Data bisa berujut proses aritmatika atau proses
suatu keadaan, gambar, suara, huruf, matematis lainnya.
angka, matematika, bahasa ataupun 1 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. 2 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
2008 | Direktorat Pembinaan SMK 89
Bahasa Pemrograman Tipe Data dan Operator

3.2. Indentifier
Identifier adalah nama yang kunci (keyword) yang dimiliki oleh C+
didefinisikan oleh programmer dan +. 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 membantu dalam menghasilkan
seperti 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 Direktorat Pembinaan SMK | 2008
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

2008 | Direktorat Pembinaan SMK 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, bilangan
dalam memori yang nilainya tetap yang digunakan berkisar antara 0
atau tidak dapat diubah. Konstanta sampai dengan F. Bilangan yang
harus didefinisikan terlebih dahulu dapat dipakai berupa salah satu
pada awal program. Konstanta dapat diantara 16 simbol adalah berikut:
bernilai integer, pecahan, karakter
atau string. Perhatikan contoh 0123456789ABCDEF
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
b. konstanta bilangan real atau
string.
pecahan
3.3.1. Konstanta Bilangan Konstanta dengan nilai tetapnya
berupa bilangan pecahan. Konstanta
Konstanta bilangan atau sering
bilangan real atau pecahan dibagi
juga disebut dengan konstanta
dua jenis, yaitu: Konstanta data
numeric yaitu suatu konstanta yang
bilangan desimal berpresisi tunggal
nilai tetapnya berupa bilangan.
(floating point), dimana bilangan ini
Konstanta bilangan atau numerik
memiliki derajat ketelitian sampai 7
dibagi dalam dua kelompok, yaitu :
digit dan dapat dinyatakan dalam dua
Konstanta bilangan bulat (integer) bentuk tampilan, yaitu :
Konstantabilanganbulat 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}
{[+] | [-]} pangkat misalnya:
disajikan dalam bentuk decimal, oktal 0.21333E+2 dimana hal penulisan
ataupun heksadesimal. Dalam sistem 2
ini mempunyai arti: 0.2133 x 10
decimal, bilangan yang digunakan
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 Direktorat Pembinaan SMK | 2008
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:

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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;

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


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 ada float bildesimal = 22.2;
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)

2008 | Direktorat Pembinaan SMK 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 Deklarasinya dengan kata kunci


dijelaskan diatas, juga terdapat kelas extern didalam fungsi yang
variable 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 Direktorat Pembinaan SMK | 2008


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
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


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
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


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 harus
data dalam bidang informasi, menentukan jenis informasi yang
misalnya: bilangan, terdapat bilangan digunakannya. Jika menulis sebuah
bulat dan bilangan pecahan, ada program untuk menentukan jauhnya
bilangan positif dan negative, dan berapa mil dari bumi ke bintang,
ada pula bilangan besar serta maka diperlukan variabel yang dapat
bilangan kecil dan lain-lain, atau menampung jumlah yang sangat
bahkan bilangan yang tidak memiliki besar. Jika Anda sedang merancang
nama. perangkat lunak untuk
merekam sebuah dimensi mikroskopis, maka
hanya perlu untuk
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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 dalam
Perubahan tanda bilangan pada bilangan bulat adalah: yang pertama, char
bilangan bulat dapat diset dalam dua atau signed char dan unsigned char atau byte
tipe, yaitu: bilangan bulat bertanda dalam java dan pascal. Rentang nilai signed
(signed integer), yang merupakan char mulai ‐128 sampai 127. Kedua,
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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:

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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 cara
dan digunakan untuk: pertaman mengapit jumlah yang di maksud
untuk mendeklarasikan fungsi yang dengan tanda ‘ [ … ] ‘. Cara penulisan
tidak mengembalikan nilai apapun. sintaks tipe data larik adalah sebagai
Serta fungsi kedua adalah untuk 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:
2008 | Direktorat Pembinaan SMK 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 namaStruktur ;
seperti 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 pada
memerlukan satu operand. Misalnya, operasi aritmetik yang hal tersebut
mempertimbangkan ekspresi berikut: sudah sangat umum dalam
-5. Dalam contoh diatas perlu bahasa pemrograman. Tabel dibawah
dipahami bahwa mewakili angka lima menunjukkan operator arithmetic
bernilai negatif. Konstanta 5 adalah pada bahasa C++.

110 Direktorat Pembinaan SMK | 2008


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;

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


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-
3.7.1. Operator Increment dan - atau --hitung. Notasi -- disebut
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 satu
yang dimulai dari 10 turun ke kebawah. Perhatikan contoh program
sembilan, delapan dan seterusnya. dibawah ini:

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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 ;
}

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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>

2008 | Direktorat Pembinaan SMK 117


Bahasa Pemrograman Tipe Data dan Operator

using namespace std;

main()
{
/*operasi aritmatika
dengan bilangan bulat */
int v, w, x, y, z;
= 100;
= 3;
= v / w;
= v % w;
= 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
= 100/3
33
= 100 MOD 3
1
= 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 Direktorat Pembinaan SMK | 2008


Tipe data dan Operator Bahasa Pemrorgraman

= 100.0;
= 3.0;
= a / b;
= 100 % 3;
= 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
= 100.000000 / 3.000000
33.333332
= 100.000000 mod 3.000000
1.000000
= 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


2008 | Direktorat Pembinaan SMK 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
y
> 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 NOT.
digunakan untuk mengoperasikan 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 Direktorat Pembinaan SMK | 2008


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;
= 125;
= 100;
= 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 ;
2008 | Direktorat Pembinaan SMK 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:


= 125
= 100
= 25
X1 = a < b
125 < 100
0

125 > 100


1

25 <= 100
1

25 <= 100
0

125 != 25
0

125 == 100
1
= X1 && X2
0 && 1
0
= Y1 || Y2
1 || 0
1
= !Z1
!0
1

122 Direktorat Pembinaan SMK | 2008


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
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


Tipe data dan Operator Bahasa Pemrorgraman

using namespace std;

main()
{
int u, v, w, x, y, z;
= 9 << 2;
= 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:


= 9<< 2
36
= 9>>2
2
=9&2
0
=9^2
11
=9|2
11
= ~9
‐10

Contoh program diatas menunjukkan bahwa hasil operasi dari operator relasi
atau operator logika hanya mempunyai satu nilai dari dua nilai kebenaran,
yaitu :
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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;
= 80;
= 75;
= 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;

= 75;
= 80;
= 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
= 80
= 75
2008 | Direktorat Pembinaan SMK 127
Bahasa Pemrograman Tipe Data dan Operator

=a>b?a:b
80 > 75 ? 80 : 75
80

Mencari Nilai yang lebih tinggi


= 75
= 80
=a>b?:b
75 > 80 ? 75 : 80
80

3.10. Ungkapan (Ekspresi) fungsi untuk menggabungkan dua


Ungkapan dapat berupa untai.
konstanta (untai/numerik), variabel 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
Ungkapan logika
Ungkapan string
!A
“ABCD” + “EFGH” ((A>5) && (B=4))
nim + nama ((Nama = ”Agus”) || (nama =
”Doni”))
Satu-satunya operator yang
berlaku pada ungkapan string 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 Direktorat Pembinaan SMK | 2008
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.
Apa yang dimaksud dengan data
Sebutkan jenis-jenis data yang digunakan pada bahasa pemrograman
Apa yang dimaksud dengan konstanta
Buatlah sebuah program sederhana menggunakan variabel konstanta
Apa yang dimaksud dengan operator unary, binary dan ternary
Apa yang dimaksud dengan variabel
Sebutkan tipe variabel yang digunakan dalm bahasa c++
Buatlah program sederhana yang menggunakan operator unary, binary dan
ternary

2008 | Direktorat Pembinaan SMK 129


Bahasa Pemrograman Tipe Data dan Operator

130 Direktorat Pembinaan SMK | 2008


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
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


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:

2008 | Direktorat Pembinaan SMK 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 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 11-
ekspresi matematika, perbedaan 10 dan pernyataan cout akan
antara mode postfix dan prefix dijalankan.
sangat dekat. Perhatikan potongan
program berikut ini:

4.4. Penghitung dengan 10, jadi loop harus iterasi 10


Kadang-kadang penting bagi
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 Direktorat Pembinaan SMK | 2008
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 menghitung operasi yang berhubungan dengan
jumlah lingkaran Iterasi yang telah pengujian, seperti yang ditunjukkan
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;
}

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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;
}

2008 | Direktorat Pembinaan SMK 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-while,
pernyataan (brace) akan dapat 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 Direktorat Pembinaan SMK | 2008
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

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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:

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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 << " "; Perhatikan tanda loop++ yang berarti
loop = loop + 1. Proses perulangan
Perintah di atas akan potongan program diatas adalah
menampilkan angka dari 1 dan 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
2008 | Direktorat Pembinaan SMK 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 program dibawah ini. Program
sama 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 Direktorat Pembinaan SMK | 2008


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:


13579

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();
2008 | Direktorat Pembinaan SMK 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 for (huruf = 'z'; huruf >= 'a'; huruf‐‐)
Huruf abjad = H
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
Huruf abjad = N sampai dengan a. Perhatikan pada
Huruf abjad = O perintah huruf--
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 Direktorat Pembinaan SMK | 2008
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 nilai
Huruf abjad = d variabel pengendali loop. Sebagai
gantinya, di dalam tubuh loop
Huruf abjad = c
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 bisa dihilangkan, sehingga bentuknya
yang 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 << " ";

2008 | Direktorat Pembinaan SMK 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. atau CTRL – BREAK. Perhatikan
Karena program memang dirancang program FOR untuk menampilkan
untuk tidak berhenti maka untuk warna seperti berikut:
menghentikannya dilakukan dengan

Program 4.11
#include<stdio.h>
#include<conio.h>
148 Direktorat Pembinaan SMK | 2008
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 masuk
suatu perulangan for didalam digunakan oleh program Bentuk
perulangan for dalam bentuk lain. umum pernyataan Nested for adalah
Dalam mempelajari perulangan ini sebagai berikut:
dituntut hrus teliti. Perulangan

for ( inisialisasi; syarat pengulangan; pengubah nilai pencacah )


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

2008 | Direktorat Pembinaan SMK 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:


11111
2222
150 Direktorat Pembinaan SMK | 2008
Struktur Perulangan Bahasa Pemrorgraman

333
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 harus
yang diuji dengan nilai benar atau berhenti. Perulangan yang tidak
salah, dan (2) pernyataan atau blok pernah berhenti menandakan bahwa
yang berulang-ulang selama logika dari algoritma tersebut salah.
ekspresinya benar.
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

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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 << " ";
2008 | Direktorat Pembinaan SMK 153
Bahasa Pemrograman Struktur Perulangan

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

Keluaran program diatas adalah:


13579

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 Direktorat Pembinaan SMK | 2008
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;
}
}
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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
121
12421
1248421

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;

2008 | Direktorat Pembinaan SMK 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 perulangan selesai. Yang harus
yang mirip dengan perulangan while diperhatikan adalah perulangan harus
ataupun for. Perulangan for dipakai berhenti. Perulangan yang tidak
pada perulangan yang sudah pernah berhenti menandakan bahwa
diketahui berapa kali akan dijalankan. logika dari algoritma tersebut salah.
Sedangkan yang belum diketahui
berapakali akan diulangi maka Perbedaan dengan while
digunakan while atau do- while. sebelumnya yaitu bahwa pada do-
Pernyataan do-while digunakan while statement perulangannya
untuk menjalankan pernyataan dilakukan terlebih dahulu baru
terlebih dahulu baru kemudian kemudian di cek kondisinya.
memeriksa 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 Direktorat Pembinaan SMK | 2008
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>

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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:


13579_

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:

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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:


10
121
12421
1248421

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:

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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;
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


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)
{

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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 goto label;
suatu label. Label merupakan suatu
pengenal (identifier) yang diikuti Contoh penggunaan instruksi goto
dengan tanda titik dua ( : ). dapat dilihat pada contoh program
berikut ini:

2008 | Direktorat Pembinaan SMK 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.
Struktur perulangan secara umum terdiri dari dua bagian, sebutkan
Sebutkan fungsi operator increment dan decrement
Jelaskan bentuk pernyataan for dalam bahasa pemrograman
Jelaskan apa yang dimaksud dengan potongan program dibawah ini: int
num = 1;
for ( ; num <= 10; )
{
cout << num << "\t\t" << (num * num) << endl;
num++;
}
Sebutkan fungsi break
Sebutkan fungsi goto
Apa yang dimaksud dengan NESTED-WHILE
170 Direktorat Pembinaan SMK | 2008
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 katup perintah.
terbuka maka air akan mengalir dan Dalam memprogram seringkali
sebaliknya bila katup tertutup air tidak digunakan suatu percabangan untuk
akan mengalir atau akan mengalir pengambilan keputusan dari
melalui tempat lain. Seleksi kondisi sejumlah pilihan yang mungkin.
adalah proses penentuan langkah Bahasa pemrograman menyediakan
berikutnya berdasarkan proses yang pernyataan IF…THEN dan kata kunci
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
2008 | Direktorat Pembinaan SMK 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, selain antara dua nilai. Sebagai contoh,
dapat melakukan perhitungan, tetapi operator lebih ( > ) menentukan jika
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 Direktorat Pembinaan SMK | 2008
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 6, dan c
Y == X 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
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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.

2008 | Direktorat Pembinaan SMK 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 akan
berikut ini akan menyebabkan a 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 procedural Program-program yang ditulis ini
seperti langkah-langkah yang diambil adalah seperti halnya sebuah "jalan"
sebagai individu. Untuk mencapai dimana pelaksanaannya harus diikuti.
tujuan tersebut , maka harus dimulai Perhatikan langkah program dibawah
dari awal dan mengikuti setiap langkah, ini:
satu setelah yang lain
176 Direktorat Pembinaan SMK | 2008
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>

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
Statement Kendali Bahasa Pemrorgraman

Perintah yang akan dieksekusi jika kondisi bernilai true


}
else
{
Perintahyangakandieksekusi jika kondisi bernilaifalse
}

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
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
Statement Kendali Bahasa Pemrorgraman

Betul Kondisi salah


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()

2008 | Direktorat Pembinaan SMK 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 angka IF, jika tidak menggunakan kotak
2% tidak sama 0, pesan yang dicetak sebagai bagian kontrol sebuah
menunjukkan angka ganjil. Perlu pernyataan. Program diatas
diketahui bahwa program ini hanya menggambarkan hal tersebut ini. Ia
akan mengambil salah satu dari dua juga memperlihatkan salah satu cara
jalur pernyataan IF/ELSE.. Jika Anda untuk menangani sebuah masalah
berpikir tentang pernyataan dalam pemrograman yaitu pembagian oleh
program komputer, langkah-langkah nol.
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 Direktorat Pembinaan SMK | 2008
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

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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

2008 | Direktorat Pembinaan SMK 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;
}
Direktorat Pembinaan SMK | 2008
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
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


Statement Kendali Bahasa Pemrorgraman

Tidak Ya
SkorTest
< 60 ?

Tidak SkorTest Ya
Nilai= ’F ’

< 70 ?

Tidak SkorTest Ya
Nilai= ’D ’

< 80 ?

Tidak Ya
Nilai= ’C ’
SkorTest
< 90 ?

Tidak SkorTest Ya
Nilai= ’B ’

<=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
2008 | Direktorat Pembinaan SMK 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 ?. Karena
berdiri sendiri. Pada contoh keluaran, skor siswa kurang dari 60,
194 Direktorat Pembinaan SMK | 2008
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
{
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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;
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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


2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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 dibawah
if (suhu < 20 || suhu > 100) ini merupakan table kebenaran
cout << "suhu dalam level yang 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
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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 !

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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 ( : ) akan
Perhatikan pernyataan dibawah ini: 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 pertama Ekspresi kedua yang akan Ekspresi ketiga yang


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:
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


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;
}
}

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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;
2008 | Direktorat Pembinaan SMK 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
Operator +
Operator ‐
Operator *
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 Direktorat Pembinaan SMK | 2008
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>

2008 | Direktorat Pembinaan SMK 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
Menambahkan nama ke dalam nomor, maka nomor akan digunakan
daftar. untuk membandingkan pilihan yang
Hapus nama dari daftar. tersedia dan melaksanakan sebuah
Mengubah nama dalam daftar. pernyataan yang melakukan operasi.
Mencetak daftar. program dibawah digunakan untuk
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 Direktorat Pembinaan SMK | 2008
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)
2008 | Direktorat Pembinaan SMK 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

Keanggotaa Standard Dewasa


Keanggotaan Anak
Keanggotaan Masyarakat Senior
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.
Apa yang dimaksud dengan statement
Sebutkan beberapa operator relasionaldalam bahasa c++
Jelaskan cara kerja pernyataan if pada bahasa c++
Apa perbedaan antara pernyataan if dangan if-else
Apa yang dimaksud dengan if-else majemuk
Apa yang dimaksud dengan nested if
Sebutkan beberapa operator logika
Tuliskan perintah yang digunakan oleh pernyataan switch
222 Direktorat Pembinaan SMK | 2008
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 menyatakan jelas keadaan awal yang menjadi titik
suatu aksi dalam konsep algoritma tolak mengupas kentang dan
yang dibicarakan pada cerita keadaan akhir yang ingin dicapai
“Mengupas kentang”. Dimana contoh supaya dapat “merencanakan” efek
ini dari aksi yang dilakukan pleh Ibu neto yang diinginkan. Sehingga hal
Tati yang mengupas kentang untuk tersebut dapat ditentukan:
mempersiapkan makan malam sebagai Initial state (I.S. keadaan awal),
berikut. Pernyataan ini mencakup hal T0, adalah kentang sudah ada di
yang luas ruang lingkupnya, misalnya : kantong kentang, yang ditaruh di
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.
2008 | Direktorat Pembinaan SMK 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 variabel
dituliskan pada definisi/spesifikasi lain pada saat pemanggilan. Sesuai
prosedur disebut sebagai parameter dengan ketentuan nilainya, ada tiga
formal. Sedangkan parameter yang type parameter formal:
dituliskan pada pemanggilan
224 Direktorat Pembinaan SMK | 2008
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 asosiasi nama parameter formal
nama jika parameter tersebut adalah dengan nama parameter aktual. Pada
parameter Output (karena hasilnya notasi algoritmik, asosiasi dilakukan
akan disimpan dalam nama dengan cara “by position”. Urutan
tersebut). Sesuai dengan jenis nama pada parameter aktual akan
parameter formal, parameter aktual diasosiasikan sesuai dengan urutan
pada saat pemanggilan : parameter formal. Karena itu, type
parameter input harus terdefinisi 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
2008 | Direktorat Pembinaan SMK 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-prosedur. tahanan (Ohm) dan arus (Ampere),
Setiap prosedur harus jelas definisi dan kemudian menghitung tegangan yang
ruang lingkupnya, supaya dapat dihasilkan dan menuliskan hasilnya.
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 Direktorat Pembinaan SMK | 2008
Prosedur dan Subroutin Bahasa Pemrorgraman

Program VOLTAGE1
{Program yang membaca tahanan dan arus, menghitung Voltage dan
mencetak hasil perhitungan}

Kamus :
: 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 :
: 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,Α)

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


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
2008 | Direktorat Pembinaan SMK 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 parameter- parameter yang
sendiri tidak bisa digunakan oleh digunakan untuk menerima masukan
function 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 Direktorat Pembinaan SMK | 2008
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 :


1

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

2008 | Direktorat Pembinaan SMK 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 :


0

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 nilainya akan berubah-ubah sesuai
baris ke-9 dimana obyek baru dari dengan nilai masukannya. Untuk
class ricek() dalam class ricekApp() contoh di atas nilai function dari cek()
diberi nama ck. Dengan obyek ck cuma ada dua, yaitu 0 atau 1. Berikut
inilah kita dapat mengakses method ini adalah contoh function yang tidak
yang dipunyai oleh class ricek() mempunyai parameter sama sekali
karena secara otomatis obyek ck sehingga nilai function- nya tidak
juga mempunyai method cek() yang akan berubah-ubah seperti halnya
dimiliki oleh class ricek(). pada 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 Direktorat Pembinaan SMK | 2008
Prosedur dan Subroutin Bahasa Pemrorgraman

cout << "FPB‐nya = ";


cout << fpb() <<endl;
}

Keluaran programnya adalah :


FPB‐nya = 6

Contoh program dalam bahasa Java :


class hitung {
public int fpb(){
int a=78,b=24,hasil=0;
int r = a % b;
if (r==0) hasil = b;
else {
while(r!=0) {
a = b;
b = r;
r = a % b;
hasil = b;
}
}
return hasil;
}
}
class fpbApp {
public static void main(String[ ] args) {
hitung sekutu = new hitung();
System.out.println("Bilangan terbesarnya="+ sekutu.fpb());
}
}

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.
2008 | Direktorat Pembinaan SMK 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

#include <iostream>
using namespace std;
int fpb(int a, int b) {
int 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() {
int m,n;
do {
cout << "Bilangan pertama = ";
cin >> m;
cout << "Bilangan kedua = ";
cin >> n;
} while (m < n);
cout << "FPB‐nya = " << fpb(m,n)<<endl;
}

Keluaran programnya :
Biangan pertama = 24
Bilangan kedua = 20
FPB‐nya =4

234 Direktorat Pembinaan SMK | 2008


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
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

import java.util.Scanner;
import java.io.*;
class hitung {
public int fpb(int a, int b) {
int hasil=0;
int r = a % b;
if (r==0) hasil = b;
else {
while(r!=0) {
a = b;
b = r;
r = a % b;
hasil = b;
}
}
return hasil;
}
}
class sekutuBesar {
public static void main(String[ ] args) {
hitung sekutu = new hitung();
int m,n;

2008 | Direktorat Pembinaan SMK 235


Bahasa Pemrograman Prosedur dan Subroutin

Scanner input = new Scanner(System.in);


do {
System.out.print("Bilangan pertama = ");
m = input.nextInt();
System.out.print("Bilangan kedua = ");
n = input.nextInt();
} while(m < n);
System.out.println("Bilanganterbesarnya="+sekutu.fpb(m,n));
}
}

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 buah
merupakan function fpb() pada C++, 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 Direktorat Pembinaan SMK | 2008
Prosedur dan Subroutin Bahasa Pemrorgraman

else {
while(r!=0) {
a = b;
b = r;
r = a % b;
hasil = b;
}
}
cout << "FPB‐nya = " << hasil <<endl;
}
void main() {
int m,n;
do {
cout << "Bilangan pertama = ";
cin >> m;
cout << "Bilangan kedua = ";
cin >> n;
} while (m < n);
fpb(m,n);
}

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
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:

import java.util.Scanner;
import java.io.*;
2008 | Direktorat Pembinaan SMK 237
Bahasa Pemrograman Prosedur dan Subroutin

class hitung {
public void fpb(int a, int b) {
int hasil=0;
int r = a % b;
if (r==0) hasil = b;
else {
while(r!=0) {
a = b;
b = r;
r = a % b;
hasil = b;
}
}
System.out.println("Bilangan terbesarnya = " + hasil);
}
}
class sekutuBesar {
public static void main(String[ ] args) {
hitung sekutu = new hitung();
int m,n;
Scanner input = new Scanner(System.in);
do {
System.out.print("Bilangan pertama = ");
m = input.nextInt();
System.out.print("Bilangan kedua = ");
n = input.nextInt();
} while(m < n);
sekutu.fpb(m,n);
}
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 Direktorat Pembinaan SMK | 2008
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.

#include <iostream>
using namespace std;
void fpb(int a, int b){
int hasil;
int r = a % b;
if (r==0) hasil = b;
else {
while(r!=0) {
a = b;
b = r;
r = a % b;
hasil = b;
}
}
cout << "FPB‐nya = " << hasil <<endl;
}
void input_data(){
2008 | Direktorat Pembinaan SMK 239
Bahasa Pemrograman Prosedur dan Subroutin

int m,n;
do {
cout << "Bilangan pertama = ";
cin >> m;
cout << "Bilangan kedua = ";
cin >> n;
} while (m < n);
fpb(m,n);
}
void main() {
input_data();
}

Keluaran programnya adalah :


Bilangan pertama = 56
Bilangan kedua = 24
FPB‐nya =8

Program di atas mempunyai dua buah function lain yaitu function fpb() (baris
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

import java.util.Scanner;
import java.io.*;
class hitung {
public void fpb(int a, int b){
int hasil=0;
int r = a % b;
if (r==0) hasil = b;
else {
while(r!=0) {
a = b;
b = r;
r = a % b;
hasil = b;
}
}
System.out.println("Bilangan terbesarnya = " + hasil);
}
240 Direktorat Pembinaan SMK | 2008
Prosedur dan Subroutin Bahasa Pemrorgraman

}
class input_data {
public void data_input() {
hitung sekutu = new hitung();
int m,n;
Scanner input = new Scanner(System.in);
do {
System.out.print("Bilangan pertama = ");
m = input.nextInt();
System.out.print("Bilangan kedua = ");
n = input.nextInt();
} while(m < n);
sekutu.fpb(m,n);
}
}
class sekutuBesar {
public static void main(String[ ] args) {
input_data masukan = new input_data();
masukan.data_input();
}
}

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).

2008 | Direktorat Pembinaan SMK 241


Bahasa Pemrograman Prosedur dan Subroutin

#include <iostream>
using namespace std;
int sqr(int x) {
x = x*x;
return(x);
}
int main(void) {
int t=10;
cout << sqr(t) << ", " << t <<endl;
return 0;
}

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 :

import java.io.*;
class kuadrat {
242 Direktorat Pembinaan SMK | 2008
Prosedur dan Subroutin Bahasa Pemrorgraman

public int sqr(int x) {


x = x*x;
return(x);
}
}
class power {
public static void main(String[ ] args) {
kuadrat a = new kuadrat();
int t=10;
System.out.println(a.sqr(t) + ", " + t);
}
}

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:

#include <iostream>
using namespace std;
void tukar(int *x, int *y) {
int temp;
temp = *x;
*x = *y;
*y = temp;
}
int main(void) {
int i, j;
i = 10;
j = 20;
cout << "Mula‐mula : " << endl;
cout << "Nilai i : " << i << endl;
cout << "Nilai j : " << j << endl;
tukar(&i, &j);
cout << endl << "Setelah ditukar : " << endl;
cout << "Nilai i : " << i << endl;
cout << "Nilai j : " << j << endl;
return 0;
}
2008 | Direktorat Pembinaan SMK 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
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 Direktorat Pembinaan SMK | 2008
Prosedur dan Subroutin Bahasa Pemrorgraman

kita berikan. Untuk lebih jelasnya perhatikan contoh berikut ini:

#include <iostream>
using namespace std;
double luas_segi3(int alas, int tinggi=10){
return(0.5 * alas * tinggi);
}
void main() {
int a=15,t=20;
cout << "Luas segitiga = ";
cout << luas_segi3(a,t) <<endl;
cout << endl;
cout << "Luas segitiga = ";
cout << luas_segi3(a) <<endl;
}

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 nilai ketika argumen tersebut dijalankan
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 parameter
variabel t yang nantinya digunakan tinggi tidak memperoleh masukan.
sebagai variabel masukan untuk Akan tetapi karena parameter tinggi
parameter tinggi dari function mempunyai nilai default 10, maka
luas_segi3() adalah 20. Sehingga nilai variabel tinggi yang digunakan
ketika argumen program utama yang untuk menghitung luas segitiga
memanggil function luas_segi3() pada adalah 10. Dengan demikian nilai dari
baris ke-9 dijalankan, maka nilai dari function luas_segi3() adalah 75.
parameter alas dan tinggi pada

2008 | Direktorat Pembinaan SMK 245


Bahasa Pemrograman Prosedur dan Subroutin

6.11. Overloading
Overloading adalah function- Function tersebut mempunyai jumlah
function yang ada dalam suatu parameter formal yang sama
program dimana function-function tetapi tipe data yang berbeda.
tersebut mempunyai nama yang Function-function tersebut
sama tetapi parameter formal-nya mempunyai jumlah parameter
berbeda-beda antara yang satu formal yang berbeda dan tipe
dengan yang lainnya. Ada tiga jenis data dari parameter formal
overloading, yaitu: tersebut juga berbeda.
Function tersebut mempunyai jumlah Berikut ini diberikan contoh untuk
parameter formal yang berbeda function-function yang mempunyai
tetapi tipe data-nya sama. jumlah parameter formal yang
berbeda tetapi tipe data-nya sama.

Untuk bahasa C++


#include <iostream>
using namespace std;
void luas_segi3(int alas){
int tinggi=10;
cout << "Luas segitiga 1 = "
cout << (0.5 * alas * tinggi) << endl;
}
void luas_segi3(int alas,int tinggi){
cout << "Luas segitiga 2 = "
cout << (0.5 * alas * tinggi) << endl;
}
void luas_segi3(int alas, int tinggi,int bagi){
cout << "Luas segitiga 2 bagi "
cout << bagi << " = "
cout << (0.5 * alas * tinggi)/bagi
cout << endl;
}
void main() {
luas_segi3(10);
luas_segi3(10,15);
luas_segi3(10,15,3);
}

Keluaran programnya adalah :


Luas segitiga 1 = 150
Luas segitiga 2 = 75
Luas segitiga 2 bagi 3 = 25

246 Direktorat Pembinaan SMK | 2008


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 variabel masukan yang dipunyai oleh
data yang sama, yaitu integer. masing-masing argumen. Sedangkan
Pada program utama, terdapat untuk bahasa Java:
tiga buah argumen dimana argumen

class hitung {
public void luas_segi3(int alas){
int tinggi=10;
double luas=0.5*alas*tinggi;
System.out.println("Luas segitiga 1 = " + luas);
}
public void luas_segi3(int alas,int tinggi){
double luas=0.5*alas*tinggi;
System.out.println("Luas segitiga 2 = " + luas);
}
11. public void luas_segi3(int alas, int tinggi,int bagi){
double luas=(0.5*alas*tinggi)/bagi;
System.out.println("Luas segitiga 2 dibagi " + bagi + " = " + luas);
}
}
class overload1 {
public static void main(String[ ] args) {
hitung sekutu = new hitung();
sekutu.luas_segi3(10);
sekutu.luas_segi3(10,15);
sekutu.luas_segi3(10,15,3);
}
}

2008 | Direktorat Pembinaan SMK 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

#include <iostream>
using namespace std;
void luas_segi3(int alas){
int tinggi=10;
cout << "Luas segitiga 1 = " << (0.5 * alas * tinggi) << endl;
}
void luas_segi3(char* alas){
cout << alas << endl;
}
void main() {
luas_segi3(10);
luas_segi3("Belajar pemrograman");
}

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 Direktorat Pembinaan SMK | 2008


Prosedur dan Subroutin Bahasa Pemrorgraman

class hitung {
public void luas_segi3(int alas){
int tinggi=10;
double luas=0.5*alas*tinggi;
System.out.println("Luas segitiga 1 = " + luas);
}
public void luas_segi3(String alas){
System.out.println(alas);
}
}
class overload2 {
public static void main(String[ ] args) {
hitung sekutu = new hitung();
sekutu.luas_segi3(10);
sekutu.luas_segi3("Belajar pemrograman");
}
}

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);
2008 | Direktorat Pembinaan SMK 249
Bahasa Pemrograman Prosedur dan Subroutin

luas_segi3("Belajar pemrograman");
luas_segi3("Belajar pemrograman lagi",3);
}

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:

class hitung {
public void luas_segi3(int alas){
int tinggi=10;
double luas=0.5*alas*tinggi;
System.out.println("Luas segitiga 1 = " + luas);
}
public void luas_segi3(String alas){
System.out.println(alas);
}
public void luas_segi3(String alas,int data){
System.out.println(alas + " : ");
System.out.println("Pangkat dua dari " + data + " adalah " +(data*data));
}
}
class overload3 {
public static void main(String[ ] args) {
hitung sekutu = new hitung();
sekutu.luas_segi3(10);
sekutu.luas_segi3("Belajarpemrograman");
sekutu.luas_segi3("Belajarpemrograman",3);
}
}

250 Direktorat Pembinaan SMK | 2008


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.
Apa yang dimaksud dengan prosedur dan
Sebutkan perbedaan prosedur dengan fungsi
Apa sajakah parameter-parameter yang dimiliki oleh prosedur
Mengapa dalam program perlu ditulis dalam bentuk subrutin
Apa yang dimaksud dengan funtion call function
Apa yang dimaksud dengan call by value dan call by reference
Apa yang dimaksud dengan overloading

2008 | Direktorat Pembinaan SMK 251


Bahasa Pemrograman Prosedur dan Subroutin

252 Direktorat Pembinaan SMK | 2008


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
Anda telah membuat sebuah fungsi menemukan satu topik dalam buku ini
bernama utama dalam setiap 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
2008 | Direktorat Pembinaan SMK 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
Parameter list dikirim kembali.
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 Direktorat Pembinaan SMK | 2008


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";

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
Fungsi Bahasa Pemrorgraman

definisi sebelum semua panggilan ke pernyataan-nya. Setelah selesai


fungsi. melaksanakan TampilPesan, program
Perhatikan bagaimana program cabang kembali ke fungsi utama dan
diatas mengalir. Dalam memulai, kembali dengan baris yang mengikuti
tentu saja, didalam fungsi utama. Bila fungsi panggilan. Hal ini diilustrasikan
panggilan ke TampilPesan yang pada gambar dibawah ini.
dihadapi, program untuk cabang
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()
{
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


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:

2008 | Direktorat Pembinaan SMK 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 cara untuk memastikan bahwa


Sebelum compiler menemukan
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 Direktorat Pembinaan SMK | 2008
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.
2008 | Direktorat Pembinaan SMK 263
Bahasa Pemrograman Fungsi

saya sekarang didalam fungsi pertama.


saya sekarang didalam fungsi kedua.
Kembali dalam program utama lagi.

Ketika compiler sedang membaca pada informasi fungsi pertama dan


program utama diatas, kemudian kedua. Sehingga harus ada prototipe
program utama tersebut melakukan pada setiap fungsinya dalam sebuah
panggilan ke fungsi pertama dan kedua program kecuali program utama.
sebelum compiler membaca definisi Sebuah prototipe program ini tidak
dari fungsi tersebut. Karena hal pernah diperlukan oleh program
tersebut sebagai fungsi prototip, utama karena telah dilakukan pada
compiler sudah mengetahui jenis awal program.
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 Direktorat Pembinaan SMK | 2008


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
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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 jenis argumen pada pemanggilan fungsi
parameter, argumen tersebut akan akan dipotong, sehingga nilai 4 akan
digunakan secara otomatis. Misalnya, dimasukan ke varibel num:
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;


2008 | Direktorat Pembinaan SMK 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 pada int num1, num2, num3 ternyata
setiap variabel yaitu harus memiliki bukan int num1, int num2, int num3.
tipe data yang namanya sebelum Dalam pemanggilan fungsi,
telah tertulis. Error pada compiler sebuah variabel nilai1, nilai2 dan nilai
akan terjadi jika daftar parameter 3 dapat digunakan sebagai argument:
yang dinyatakan sebagai

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 Direktorat Pembinaan SMK | 2008
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
2008 | Direktorat Pembinaan SMK 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)


{
= 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 Direktorat Pembinaan SMK | 2008
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: ";

2008 | Direktorat Pembinaan SMK 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 persegi
dianggap sebagai satu nilai. Tipe yang menerima sebuah
272 Direktorat Pembinaan SMK | 2008
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.
2008 | Direktorat Pembinaan SMK 273
Bahasa Pemrograman Fungsi

Jadi, ketika nilai 20 dinyatakan sebagai menggambarkan bagaimana sebuah


argumen persegi, 20 kali 20, atau 400, informasi disampaikan ke dan
dan dikembalikan ke hasil yang kembali dari fungsi.
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 Direktorat Pembinaan SMK | 2008
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

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


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)
{
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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;
}

2008 | Direktorat Pembinaan SMK 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 yaitu
fungsi dalam program, variabel global variabel global num.
dapat digunakan sebagai alternatif
280 Direktorat Pembinaan SMK | 2008
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;
}

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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: ";


2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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 dengan membuat variabel statis.
pada localNum, variabel yang hancur variabel Static adalah variable lokal
bila 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
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


Fungsi Bahasa Pemrorgraman

7.12. Soal Latihan


Jawablah soal latihan dibawah ini dengan baik dan benar.
Apa yang dimaksud dengan fungsi pada pemrograman komputer
Apakah alasanya menggunakan fungsi
Jelaskan cara pemanggilan fungsi didalam sebuah fungsi
Apakah yang dimaksud dengan argumen
Apakah perbedaan antara fungsi dengan prosedur
Buatlah program sederhana menggunakan fungsi untuk mencari bilangan
genap antara 1 sampai dengan 10

2008 | Direktorat Pembinaan SMK 287


Bahasa Pemrograman Fungsi

288 Direktorat Pembinaan SMK | 2008


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
2008 | Direktorat Pembinaan SMK 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 dalam Pada program diatas dapat
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 karakter kesembilan kedalam array
sebuah 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 Direktorat Pembinaan SMK| 2008
Operasi String Bahasa Pemrorgraman
dapat dideteksi. Sebagai sebuah
g a t o t k a c a \0
array karakter, karakter pertama dari
Gambar 8.1. Contoh sebuah string nilai string mempunyai indeks ke-0,
karakter kedua mempunyai indeks
Pada gambar diatas setiap ke-1, dan seterusnya. Program
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
2008 | Direktorat Pembinaan SMK 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 yang
program. Untuk memiliki suatu 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” Bentuk
dari 19 karakter panjangnya, maka 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 Direktorat Pembinaan SMK| 2008
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 ??
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK| 2008
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 program
menggunakan penunjuk pointer mencoba untuk membaca sebuah
tetapi tidak menunjuk dan string ke dalam lokasi memori yang
mengalokasikan string dengan baik. ditunjuk oleh pname, ketika pname
Perhatikan contoh kode dibawah ini: 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:
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK| 2008


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 untuk strcpy(name, "Albert Einstein");
menyalin sebuah string ke
2008 | Direktorat Pembinaan SMK 297
Bahasa Pemrograman Operasi String

Alasan penggunaan fungsi strcpy cout << string1 << endl;


adalah string pada bahasa C. String cout << string2 << endl;
yang kedua dicopy pada alamat yang strcpy(string1, string2);
ditetapkan oleh argumen string yang cout << string1 << endl;
pertama. Jika sesuatu sudah disimpan cout << string2 << endl;
di dalam lokasi yang telah disesuaikan
oleh argumen yang pertama, hal sehingga keluaran program adalah
tersebut akan terjadi overwritten, sebagai berikut:
seperti ditunjukkan dalam segmen Hello
program berikut ini:
World!
World!
char string1[10] = "Hello", string2[10] = World!
"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 Direktorat Pembinaan SMK| 2008
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 datang
sebelumnya, dan akan menyimpan sebelum string2 dalam urutan menurut
kedua string- string pada alamat abjad
memori yang berbeda. Compiler
tersebut akan membandingkan kedua
2008 | Direktorat Pembinaan SMK 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
if(strcmp(string1, string2) == 0) yang ditunjukkan pada program
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 Direktorat Pembinaan SMK| 2008
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;
2008 | Direktorat Pembinaan SMK 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
secara urutan alfabet pemesan.
komputer pada sebuah toko serba

Program 8.8
#include<conio.h>
#include <iostream>
#include <cstring>

using namespace std;

int main()
302 Direktorat Pembinaan SMK| 2008
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
2008 | Direktorat Pembinaan SMK 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 argumentasi variabel penunjuk pointer strPtr. Jika
yang pertama adalah string dicari, menjalankan bagian dari suatu
dan argumentasi yang kedua adalah program engkap, segmen tersebut
string untuk mencari. Jika fungsi akan menampilkan sebagai berikut:
menemukan string dalam string yang
kedua terlebih dulu hal tersebut Nilai Empat pada tujuh tahun yang lalu
kembalikan ke alamat kejadian string tujuh pada tahun yang lalu
didalam string yang kedua.
Sebaliknya jika hal tersebut tidak Fungsi strstr dapat bermanfaat
dikembalikan alamat 0, atau alamat dalam setiap program yang harus
NULL. Di bawah ini adalah contoh menempatkan informasi didalam
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 Direktorat Pembinaan SMK| 2008


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
2008 | Direktorat Pembinaan SMK 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 sebenarnya tidak sebagai nomor,
ditemukan di dalam prods[index], tetapi rangkaian yang diwakili kode-
fungsi akan mengembalikan kode ASCII untuk setiap digit-digit
alamatnya. Dalam kasus tersebut, dari nomor. Rangkaian tersebut
statemen if menyebabkan menggunakan enam byte dari
pengulangan akan 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 kepada penyajian string angka ke dalam nilai
pengguna bahwa tidak ada produk numerik dan sebaliknya. Tabel
yang sesuai ditemukan. Sebaliknya, dibawah menunjukan fungsi-fungsi
nomor produk dan deskripsi akan tersebut:
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 Direktorat Pembinaan SMK| 2008
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.
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK| 2008
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 untuk kedalam pada masukan menjadi


membandingkan dua string. Jika bilangan integer dan menambahkan
kedua string serupa, maka nilai akan nilai total secara keseluruhan
diisi dengan 0. sebaliknya jika tidak sebagaimana dalam insruksi berikut
maka nilai yang diisikan bukan nol. ini:
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 benar
untuk menguji nilai dari sebuah atau salah. Sebuah bilangan
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK| 2008


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..

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK| 2008
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
2008 | Direktorat Pembinaan SMK 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 dalam file header cctype, maka
dan tolower. Untuk mengubah kasus pastikan untuk memasukkan dua
dari 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
kenyataannya fungsi dua veriabel ini tersebut dicetak:

mengkembalikan pada sebuah char ch = toupper('a');


314 Direktorat Pembinaan SMK| 2008
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
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
{
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK| 2008
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
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK| 2008
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 akan lebih jelasnya jika memperhatikan
ditambah dengan karakter berikutnya gambar dibawah ini:
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
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK| 2008
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;

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK| 2008
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:

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK| 2008


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.
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK| 2008


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 C+ kesetaraan dengan == operator.
+. 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
2008 | Direktorat Pembinaan SMK 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";
Operator + = dirancang untuk else
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
Kedua versi dari operator + = akan melakukan kurang dari tes. Versi
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
Objek MyString yang memiliki sebuah lebih daripada atau kurang
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 Direktorat Pembinaan SMK| 2008
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";
MyString name1("Suprapto"),
else
name2("Supra");
cout << "Suprapto tidal lebih besar
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

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK| 2008


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";
2008 | Direktorat Pembinaan SMK 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.
Apa yang dimaksud dengan string
Tulislah program sederhana dengan string untuk menampilkan tulisan
"Hallo saya siswa smk"
Buatlah program untuk menggabungkan dua string "hello" dan "apa
khabar"
Apa perbedaan anatara string dengan pointer
Tulislah program yang menggunakan pointer untuk operasi string
Sebutkan beberapa fungsi string pada bahasa c++
Tulislah program yang digunakan untuk membandingkan dua string
Sebutkan fungsi untuk menangani string pada bahasa c++
Buatlah program untuk mengkonversi string
Apa yang dimaksud dengan fungsi topupper dan tolower
Sebutkan beberapa operator string pada bahasa c++

332 Direktorat Pembinaan SMK| 2008


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
2008 | Direktorat Pembinaan SMK 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
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 Direktorat Pembinaan SMK | 2008
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
Contoh pertama merupakan
dalam bentuk umum berupa:
pemberian nilai 70 ke nilai_tes[0].
tipe_data nama_var[ukuran]; Sedangkan contoh 2 merupakan
perintah untuk membaca data
dimana : bilangan dari keyboard dan diberikan
tipe_data : untuk menyatakan tipe ke nilai_tes[2]. Pada contoh 2 ini
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 sekaligus pada saat dideklarasikan.
5 elemen bertipe float. Pada bahasa Untuk mendeklarasikan array, nilai-
C, 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.
Jika variabel nilai_tes dideklarasikan
sebagai array dengan int jum[12] = {31, 28, 31, 30, 31, 30, 31,
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 :
2008 | Direktorat Pembinaan SMK 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, atau
1913.248};
double radians[1000];
Array dideklarasikan dengan tanda [ ] int a[ ] = new int[10];
(bracket), baik dalam bahasa C++ Baik C++ maupun Java, untuk
dan Java. Bentuk umum dari tipe
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 Untuk memasukkan data ke dalam
adalah :
array, sintak yang digunakan adalah :
int a[10];
Dalam bahasa Java a[nomor_elemen] = data;

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.
Agar lebih efisien dan efektif,
int[ ] a;
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 Direktorat Pembinaan SMK | 2008


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);
}
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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
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.
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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
00000
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.
2008 | Direktorat Pembinaan SMK 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
Pada kasus yang pertama, menyimpan 64 nilai.

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 Direktorat Pembinaan SMK | 2008
Array Bahasa Pemrorgraman
S atu-satunya persyaratan untuk
seperti array menggunakan dua
menentukan elemen adalah usia indeks. Gambar b erikut menyatakan
ya ng berpendapat bahwa unsur variabel array dua dimensi
hitungan. Karena itu, seperti array
hanya menggunakan satu indeks
sa ja. Gamba r berikut menyatakan
va riabel array satu-dimensi.

Gambar 9. 1. Array Satu Dimensi Gambar 9.2. Array Dua Dimensi

9.4.3. Tiga Dimensi


9.4.2. Array Dua Dimensi Be berapa array memilik i tiga
Ada beberapa array dua dimensi, dimensi, seperti nilai dalam tiga
se perti jumlah kantor-kantor di setiap dimensi ruang. Seperti array
lantai di setiap gedun g kampus. S menggunakan tiga indeks, yang
pesifikasi yang memerlukan kedua dalam hal ini mewakili x, y, z dan
elemen bangunan dan jumlah lantai, koordin at dari rua ng fisik. gambar
dan setiap elemen yang berpendapat berikut menyatakan variabel untuk
bahwa untuk menghitung kombinasi mengadakan array tiga dimensi.
bangunan d an lantai. Karena itu,

Gambar 9.3. Array 3 Di mensi

2008 | Direktorat Pembinaan SMK 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 :


1234
5678
9 10 11 12

t
0 1 2 3
t 0 1 2 3 4
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 Direktorat Pembinaan SMK | 2008
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
2008 | Direktorat Pembinaan SMK 345
Bahasa Pemrograman Array

1234
5678
9 10 11 12 13

MATRIK B
1234
5678
9 10 11 12

MATRIK C = A +B
2468
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, Pada proses 2: variabel indek diberi
dan masih banyak lagi. nilai 2 (data ke-2) kemudian data
Dari sekian banyak metode, indek dibandingkan dengan data
hanya metode Exchange Sort, ke-3. Jika data indek lebih besar
Bubble Sort, dan Insertion Sort saja 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
Proses 1: variabel indek diberi nilai 1 diperiksa apakah nilai indek
(data ke-1) kemudian data indek berubah atau tidak. Jika nilai
dibandingkan dengan data ke-2. indek mengalami perubahan
Jika data indek lebih besar maka maka data ke-2 ditukar dengan
nilai indeknya diganti dengan 2 data indek.
(data ke-2), jika tidak nilai Demikian untuk proses selanjutnya
indeknya tetap. dimana banyak prosesnya adalah
Kemudian data indek 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 Direktorat Pembinaan SMK | 2008
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();
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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() {
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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.
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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.
Apa yang dimaksud dengan array
Apa kelebihan dan kekurangan program menggunakan array
Bagaimana cara mendeklarasikan array
Bagaimana cara menginisialisasi array
Buatlah program penjumlahan matrik dengan menggunakan array 2
dimensi
Buatlah salah satu program pengurutan dengan array

2008 | Direktorat Pembinaan SMK 353


Bahasa Pemrograman Array

354 Direktorat Pembinaan SMK | 2008


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. (<list‐param>)
Dalam dunia pemrograman, rekursi depend on
diimplementasikan dalam sebuah <kondisi‐basis> : <ekspresi‐1>
fungsi yang memanggil dirinya
sendiri. Atau Rekursif merupakan
2008 | Direktorat Pembinaan SMK 355
Bahasa Pemrograman Rekursif
program rekursif di atas maka sub
<kondisi‐rekurensi> : F
<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
Fungsi merupakan sub program dieksekusi bila kondisi khusus dipenuhi
Sub program rekursif umumnya
yang sangat bermanfaat dalam
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 Direktorat Pembinaan SMK | 2008


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
6 dan b = 0. Yaitu mencetak nilai a
rekursi(a,b);
dan b (cout<<"Keluar \n"<<a << 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 maka 4 dan nilai b = 2. yang tidak lain
keluar. Ternyata nilai b tidak sama pemanggilan fungsi rekurif yang
dengan 0 maka tambahkan a dengan pertama. Proses pemanggilan fungsi
1 dan kurangi b dengan 1. Maka rekursif dapat diilustrasikan:
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 sama
kita lihat satu demi satu. Dalam dengan 1. Jika x dipangkatkan
2008 | Direktorat Pembinaan SMK 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
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 > 0, sangat sulit untuk diselesaikan tanpa
bentuk pemangkatan muncul kembali di sisi rekursifitas.
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
Definisi rekursif yang lebih kompleks ekspresi kondisi untuk basis dan e2
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
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 Direktorat Pembinaan SMK | 2008


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
2008 | Direktorat Pembinaan SMK 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 Sedangkan bagian yang lain disebut
diubah cara pandangnya menjadi: recursive step. Secara umum rumus
factorial dalam bentuk rekursif
4! = 4 x 3! menjadi sebagai berikut:
3! = 3 x 2!
0! = 1; base step
2! = 2 x 1!
n! = n x (n – 1)!; n > 0 recursive step
1! = 1
Jadi proses rekursif itu akan
Dengan catatan bahwa 0! = 1
selalu memanggil dirinya sendiri
maka cara pandang yang kedua bisa dengan variable yang berbeda, dan
dlanjutkan menjadi: terus dilakukan sampai mencapai
base step sebagai terminasinya.
4! = 4 x 3! 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 Direktorat Pembinaan SMK | 2008


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

2008 | Direktorat Pembinaan SMK 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 menggunakan besar.
teknik iteratif. Misalnya menggunakan
while loop. Kenapa

Menara A B C :

a b c

Gambar 10.3. Menara dengan Tiga Piringan

362 Direktorat Pembinaan SMK | 2008


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 membawa
Dengan dfinisi piringan yang paling piringan ke 1 sampai (N‐1) dari tonggak asal
atas ialah piringan 1. ke tonggak bantu (B), caranya sama saja yaitu
dengan memindahkan piringan ke (n‐ 1) dari
Untuk n = 1 : tonggak asal (A) ke tonggak tujuan yang pada
Pindahkan piringan 1 dari A ke C saat ini berada pada tonggak (B) sedangkan
Untuk n = 2 : piringan dari 1 sampai ke (N‐2) dipindahkan
Pindahkan piringan 1 dari A ke B ke tonggak bantu yang saat ini berada di
tonggak (C) , Setelah piringan ke 1
Pindahkan piringan 2 dari A ke C
Pindahkan piringan 3 dari B ke C
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
}

2008 | Direktorat Pembinaan SMK 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 mencari
Jika dijalankan gambaran prosesnya
faktorial seperti di atas. Algoritma
sebagai berikut: Misal untuk
rekursifnya sebagai berikut:
menghitung 4!

364 Direktorat Pembinaan SMK | 2008


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.
2008 | Direktorat Pembinaan SMK 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
n
Program 10.4. Pangkat (a ):
#include <cstdlib>
#include <iostream>
366 Direktorat Pembinaan SMK | 2008
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);
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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");
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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
2
Ternyata tidak semuanya. Apakah (n + 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:

Menggambar karakter ’*’ sebanyak n


***********
n=11

Basic : n=0
tidak mencetak apa‐apa
Rekursif : n>0
gambar karakter ’*’ sebanyak (n‐1)
cetak ’*’

Menggambar persegi panjang dengan lebar l dan tinggi t t =

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

Menggambar segitiga/piramid dengan tinggi n mulai kolom k

t=4

k=0
Basic : n=0

2008 | Direktorat Pembinaan SMK 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.
Apa yang dimaksud dengan rekursif, jelaskan
Apakan perbedaan antara program menggunakan rekursif dan interatif
Dari soal diatas jelaskan kekurangan dan kelebihan kedua program
tersebut
Buatlah program faktorial dengan rekursif
Buatlah program pemangkatan dengan menggunakan rekursif

372 Direktorat Pembinaan SMK | 2008


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 ini amat menguntungkan pemrogram
membuat aplikasi grafik yang karena hanya mengingat satu
kompatibel dengan card monitor, perintah saja untuk semua peralatan
karena resolusi card yang berbeda atau berbagai macam peralatan.
kadang harus menyesuaikan dengan
membuat rutin yang berbeda.

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


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);


2008 | Direktorat Pembinaan SMK 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 indah
Gambar 11.3. Garis dan sangat menarik. Perlu diketahui
pula bahwa grafik yang terjadi
Fungsi utama sehingga dapat merupakan grafik Cartesian yaitu
menghasilkan grafik seperti gambar grafik yang titik nolnya di tengah, oleh
di atas adalah: karena itu untuk membuat garis tegak
dibutuhkan dua glVertex2f yang
glColor3f (0.0f, 0.0f, 0.0f); glVertex2f masing-masing argumen diisi
(0.0f, 0.5f); dengan( 0.0, 0.5) dan (0.0, -0.5) .
glColor3f (0.0f, 0.0f, 0.0f); glVertex2f Begitu juga dengan garis mendatar
dibutuhkan dua glVertex2f, tentu saja
(0.0f, ‐0.5f);
dengan argumen yang berbeda
dalam hal ini (-0.5, 0.0) dan (0.5, 0.0).
bisa dipahami bahwa glColor3f(0.0f,
Dengan memodifikasi program
0.0f, 0.0f) merupakan perintah untuk
tersebut bisa didapatkan tampilan
member warna titik -titik dari pixel
grafik yang menarik.
yang dihasilkan oleh glVertex2f(0.0f,
Selanjutnya harus ada glBegin()
0.5f). Sebenarnya masingmasing
baris pada potongan program di atas dan glEnd(), karena perintah itu
376 Direktorat Pembinaan SMK | 2008
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;
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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);
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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 ();

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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 */

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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);

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


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 nilai
berlawanan arah putaran jarum argumen pada sleep, makin besar
jam (counter clockwise), angkanya makin lambat bukan makin
sedangkan untuk berputar searah cepat. Lebih lanjut dengan grafik, jika
dengan arah putaran jarum jam akan membuat segi enam maka
(clockwise) diisi angka -1 (-1.0). 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);
2008 | Direktorat Pembinaan SMK 387
Bahasa Pemrograman Grafik

Tentu saja vertex berubah Selain glRotatef() pengaturan animasi


bertambah banyak, banyaknya vertex dapat juga dengan glTranslatef().
sesuai dengan jumlah sudut yang Dengan perintah ini kita dapat
dibentuk. Jangan lupa argumen pada menggerakkan obyek kekiri, kekanan,
glBegin diisi dengan GL_POLYGON ke atas, maupun ke bawah. Contoh
sehingga bisa menciptakan segi program sebagai berikut:
banyak seperti yang dikehendaki.

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 Direktorat Pembinaan SMK | 2008
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);

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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;
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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);

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
Grafik Bahasa Pemrorgraman

count = 0;
theta = ‐0.8f;
alpha = ‐0.8f;
}
else
count += 1;

= 0.0f; g
= 1.0f; b
= 0.0f;
}
else if (count <= 160)
{
theta += 0.01f;
alpha += 0.01f;
count += 1;
= 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)
{
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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

2008 | Direktorat Pembinaan SMK 397


Bahasa Pemrograman Grafik

11.6. Latihan Soal


Jawablah soal latihan dibawah ini dengan baik dan benar.
Apa yang dimaksud dengan grafik
Dalam bahasa c++ terdapat library opengl, apa yang dimaksud dengan
istilah tersebut
Apa keuntungan dan kekurangan menggunakan library opengl
Buatlah program grafik sederhana untuk menampilkan garis
Buatlah program grafik sederhana untuk menampilkan poligon
Buatlah program animasi sederhana dengan memanfaatkan library opengl

398 Direktorat Pembinaan SMK | 2008


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.

2008 | Direktorat Pembinaan SMK 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 berkas, yakni berapa banyak byte
sekumpulan data yang saling yang terdapat di dalam berkas.
berkaitan serta atribut berkas (yang Sementara ukuran logis merujuk
bersifat wajib atau opsional), yang kepada jumlah ruangan yang
kadang-kadang disebut properties dialokasikan oleh sistem berkas
yang berisi informasi yang berkaitan untuk menempatkan berkas yang
dengan berkas yang bersangkutan. bersangkutan di dalam media
Informasi mengenai kapan sebuah penyimpanan.
berkas dibuat adalah contoh dari Ukuran berkas fisik umumnya
atribut berkas. lebih besar dibandingkan dengan
Ukuran sebuah berkas umumnya ukuran berkas logisnya. Sebagai
direpresentasikan dalam satuan byte. contoh, untuk mengalokasikan berkas
Jika bilangan terlalu besar untuk berukuran logis 5125 byte, dalam
direpresentasikan dalam satuan byte, sebuah media penyimpanan yang
maka dapat menggunakan satuan KB diformat dengan sistem berkas yang
(Kilobyte, yang berarti 1,024 byte), menggunakan ukuran unit
400 Direktorat Pembinaan SMK | 2008
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 dan ketahui cin dan cout merupakan
menerima informasi atau wadah yang abjek stream. Perbedaan stream
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.
2008 | Direktorat Pembinaan SMK 401
Bahasa pemrograman Operasi File

Programer C mungkin akan heran ditampilkan pada screen . Anda juga


dengan melihat kelebihan-kelebihan masih dan selalu membutuhkan
menggunakan class stream untuk mengenai stream pada bahasa C++.
operasi I/O, sebagai ganti dari fungsi- Hal ini akan terjadi karena mereka
fungsi C sebelumnya seperi printf() dan tahu jalan terbaik untuk menulis data
scanf() dan operasi file seperti fprintf(), menjadi file dan juga memformat data
fscanf() dan lain sebagainya. Satu yang aka digunakan kemudian dalam
alasannya adalah kesederhanaan. Jika teks I/O atau elemen GUI lainnya.
kita pernah menggunakan format
karakter %d anda baru akan
menyadarinya. Disana ternyata tidak 12.3. Hirarki class stream
ditemui format dalam stream semenjak Sebuah class stream diatur
sebuah objek siap ditunjukan pada dalam hirarki yang agak komplek.
tampilan komputer. Dengan menggunakan class ini, kita
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. keluaran stream keluaran, yang
Hal ini jelas membuat programer biasanya diarahkan pada tampilan
lebih 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 Direktorat Pembinaan SMK | 2008


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 diturunkan
merupakan class dasar pada sebuah dari dua class istream dan ostream
hirarky. Class tersebut berisi melalui multiple inheritance. Class
beberapa konstanta atau yang diturunkan tersebut akan
keanggotaan fungsi umum sebagai digunakan oleh beberapa piranti
operasi masukan dan keluaran. seperti file pada disk, yang mungkin
2008 | Direktorat Pembinaan SMK 403
Bahasa pemrograman Operasi File

my_prog <file.in

ketika dijalankan program dengan


nama my_prog dan tugas yang
diberikan cin adalah file.in. ketika
404

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 istream,
ostream dan iostream secara 12.4. File Input/Output C++
berturut-turut. Input/output file pada bahasa C+
Class ios adalah kakek dari + ditentukan oleh tiga class yaitu
semua class-class stream dan berisi class istream untuk menangani
secara umum dari hal-hal yang masukan file, class ostream untuk
penting yang dibutuhkan untuk menangani keluaran file serta class
mengoperasikan stream pada C++. iostream untuk menangani file
Ada tiga hal penting yaitu pengaturan masukan atau keluaran. Dalam C++
flag, flag status kesalahan dan file operasi ini berkenaan bahwa file
mode operasi. Pengaturan flag sebagai stream dan saat itu pula file
merupakan sekumpulan enum yang dianggap sebagai aliran byte data.
didefinisikan dalam ios. Hal tersebut Empat class variabel akan secara
otomatis dibuat ketika program
dimulai. Perhatikan tabel dibawah ini:

Tabel12.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
variabel masukan file sebagai

berikut: ifstream data_file;

Direktorat Pembinaan SMK | 2008


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 sama otomatis memanggil close. Pada
untuk membaca yaitu dengan cin. kasus tertentu jika sebuah file
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( )

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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, deklarasi diatas merupakan
char delim = '\n')
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 ofstream::ofstream(const char *name,
byte data menuju buffer.
Parameter ini biasanya disebut int mode= ios::out,
dengan sizeof(buffer) int prot = filebuf::openprot);
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));

2008 | Direktorat Pembinaan SMK 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
potongan pogram diatas dapat ditutup setiap saat memanggil
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 Direktorat Pembinaan SMK | 2008


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.
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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.
2008 | Direktorat Pembinaan SMK 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 ASCII
merupakan kode yang terdiri dari 95 memungkinkan manusia
412 Direktorat Pembinaan SMK | 2008
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 karena banyak dipakai. File ini dapat
digit 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';

2008 | Direktorat Pembinaan SMK 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
yang diminta. Sebagai contoh
in_file.read(data_ptr, size);
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
12.9. Buffer
static_cast<char *> dibutuhkan
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 Direktorat Pembinaan SMK | 2008
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
di lingkunang kita pada sejumlah
cout << "mulai";
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 ada
diletakan dalam sebuah buffer. diatas meja. Dengan buffer I/O akan
Hanya setelah program selesai maka 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 dan
Sifat yang ditulis diatas diberikan langsung memasukan kedalam kotak
contoh seperti pada program yang berada diatas meja. Pekerjaan
dibawah ini: ini dilakukan dengan tangan kanan
tanpa menggunakan tangan kiri
cout << "mulai" << flush; sebagai penampung sementara.
do_step_1( );
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 dengan
keluaran akan ditampilkan secara I/O yang menggunakan
langsung. Ini artinya bahwa
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


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
selain contoh diatas, bagaimana adalah:
untuk membuat sebuah file output.dat
dapat ditulis, maka potongan read_size = read(file_descriptor, buffer,
program adalah sebagai berikut: size);
dimana: read_size, merupakan
out_fd = open("output.dat",
O_CREAT|O_WRONLY, 0666); jumlah actual dari byte yang dibaca,
Pada sintak tersebut diatas 0 mengindikasikan akhir file dan
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
2008 | Direktorat Pembinaan SMK 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, pada sintaks tersebut diatas terdapat
size);
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 Direktorat Pembinaan SMK | 2008
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);
}

2008 | Direktorat Pembinaan SMK 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 dimana file_variablenya adalah:
digunakan untuk menentukan jumlah
byte yang akan ditulis name adalah sebuah nama yang
digunakan oleh sebuah file seperti
12.10. Rutin-Rutin pada C++ ("data.txt", "temp.dat", dan lain-lain).
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 variabel status akan menjadi no
digunakan dibandingkan dengan
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 Direktorat Pembinaan SMK | 2008
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) {
2008 | Direktorat Pembinaan SMK 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, dan Setiap rekaman boleh berisi type
setiap record dapat mempunyai lebar dasar ataupun type terstruktur yang
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 kekhususannya dalam proses. Jika
tertentu 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 Direktorat Pembinaan SMK | 2008
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 );
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


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
2008 | Direktorat Pembinaan SMK 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

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 Direktorat Pembinaan SMK | 2008


Operasi File Bahasa Pemrograman

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()
{

2008 | Direktorat Pembinaan SMK 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);
}

fread() dan fwrite() 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 Direktorat Pembinaan SMK | 2008
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 12.12.4. Menambah Data File
ada di C:\ . Apabila file tersebut
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
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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.
Apa yang dimaksud dengan file
Apa yang dimaksud dengan kode ascii
Apakah fungsi buffer pada operasi string
Buatlah program untuk menulis file dengan nama latih.txt
Buatlah program untuk menambah data pada file latih.txt
Buatlah program untuk menghapus file latih.txt
Apa yang dimaksud dengan file skuensial

2008 | Direktorat Pembinaan SMK 431


Bahasa pemrograman Operasi File

432 Direktorat Pembinaan SMK | 2008


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

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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 nilai yang ditunjuk oleh ted") beth =
asterisk 25, karena ted dialamat 1776, dan
pada identifier pointer, yang berarti nilai yang berada pada alamat 1776
"value pointed by". Contoh : adalah 25.

2008 | Direktorat Pembinaan SMK 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
Ekspresi pertama merupakan dibawah ini pun akan bernilai benar :
assignation bahwa andy=25;. Kedua,
*ted == andy
menggunakan operator alamat

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 Direktorat Pembinaan SMK | 2008
Pointer Bahasa Pemrorgraman

float * greatnumber;

Contoh pertama menyatakan bahwa


px adalah variabel pointer yang
menunjuk ke suatu data bertipe int,
sedangkan contoh kedua masing
pch1 dan pch2 adalah variabel
pointer yang menunjuk ke data bertipe
char.

437
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
sembarang tipe yang sudah dibahas
pada bab-bab sebelumnya, maupun
bab-bab berikutnya. Adapun
nama_var_pointer adalah nama dari
variabel pointer. Perhatikan contoh
berikut ini:

int *px;
char *pch1, *pch2;

2008 | Direktorat Pembinaan SMK


Bahasa Pemrogra man Pointer

G ambar 13.6. Ilustrasi p ndeklarasia n variabel p


ointer Pr ogram 13.1
#i nclude <iostream>
#i nclude<conio .h>

using namespa ce std;

int main ()
{
int nilai1 = 5, nilai2 = 15;
int * mypointer;
mypoi ter = &nilai1;
mypoi ter = 10;
mypoi ter = &nilai2;
*mypointer = 20;
cout < "nilai1==" << nilai1 << "/ nilai2==" << nilai2;
return 0;
}

K eluaran prog ram diatas adalah seba gai berikut:


O utput : nilai1 ==10 / nilai2= =20

Perhatika n bagaima na nilai dari Kemudian memberikan nilai 10 ke


nilai1 dan nil ai2 diubah secara tida k nilai ya ng ditunju oleh myp ointer,
langsung. Pertama mypointer yaitu alamat dari nilai1, maka secara
diberikan a amat nilai1 denga tidak langsung nilai1 telah
menggunaka tanda am persand (&). dimodifikasi. Begitu pula untuk nilai2.

Pr ogram 13.2
#i nclude <iostream.h>

using namespa ce std;

4 38 Direktorat Pembinaan SM K | 2008


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:

2008 | Direktorat Pembinaan SMK 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 Penulisan terry[4] dan *(terry+4),
menunjuk pada karakter tersebut.
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 terry[4]

1702
*(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 Direktorat Pembinaan SMK | 2008
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++;
Tipe pointer void merupakan tipe
*p++; *p++ = *q++;
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)


2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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;
= operation (7, 5, addition);
= 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 langsung). Pengaksesan tak
x 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
2008 | Direktorat Pembinaan SMK 443
Bahasa Pemrogra man Pointer

ya ng menya takan “isi atau nilai px = &x;


va riabel/data yang ditunjuk ole
p inter px” . Sebagai c ontohjika namun terdapat pe nyataan
b rtipe int, maka sesudah du
p rnyataan b erikut y = *px;

px = &x; maka y tidaklah b risi nilai x, sebab


y = *px; px bel m diatur a gar menunjuk ke
variabel x. Hal seperti ini harap
akan berisi nilai yang s ama denga diperhatikan. K alau p ogram melibat
nilai x. Kedua pernyataan di atas kan pointer, dan pointer belum
diinisialisasi, ada k emungkina n akan
px = &x; terjadi masalah yang dinamakan
y = *px; “bug” yang bias mengakibatkan
komput er tidak d apat diken dalikan
se benarnya dapat digantikan denga (hang). Selain itu ti pe variabel
se buah pernyataan berup a pointer dan tip e data ya ng ditunjuk
harus sejenis. Bila tidak ejenis mak a
y = x; akan terjadi hasil yang tidak diin
ginkan. Untuk lebih jelas nya lihat g
S eandainya pada program di ata s ambar berikut.
tid ak terdapat pernyataan

Gambar 13.10. Ilustrasi Kesalahan Yang Terja di Karena Tipe Tidak Sejenis
Pr ogram 13.5. Mengakses isi suatu variabel mela lui pointer.
#i nclude <stdio .h>
#i nclude <iostream.h>

using namespa ce std;

44 Direktorat Pembinaan SM K | 2008


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>

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


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>
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


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;
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
Pointer Bahasa Pemrorgraman

int main ()
{
int numbers[5];
int * p;
p = numbers;
*p = 10;
p++;
*p = 20;
= &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.

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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;
2008 | Direktorat Pembinaan SMK 453
Bahasa Pemrograman Pointer

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;
}

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 Direktorat Pembinaan SMK | 2008
Pointer Bahasa Pemrorgraman

getch();
return 0;
}

Analisis dan jelaskan perbedaan antara aplikasi pada nomor 1, 2 dan 3

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);
}

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);
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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 pointer
contoh: 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
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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-masing
fungsi 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
2008 | Direktorat Pembinaan SMK 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",
return ( (n<1 || n>12) ? bulan[0] :
"April", "Mei", "Juni", "Juli", "Agustus",
"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 Direktorat Pembinaan SMK | 2008
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);
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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()
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


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);
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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);
}
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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(){

2008 | Direktorat Pembinaan SMK 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.
Apa yang dimaksud dengan pointer pada bahasa C++
Gambarkan pengaturan memori pemrograman menggunakan pointer
Bagaimana cara mendeklarasikan pointer
Bagaimana menginisialisasi pointer
Buatlah pemrograman string menggunakan pointer
Buatlah program yang menggunakan fungsi pada pointer
Bagaimana cara mengubah dan mengisi isi pointer
Apakah perbedaan array dan pointer

470 Direktorat Pembinaan SMK | 2008


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],
2008 | Direktorat Pembinaan SMK 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
anggota sering disebut dengan
yang ditunjuk oleh pointer timePtr
metode pada bahasa pemrograman
berorientasi objek lainnya dan
Untuk melakukan proses
digunakan untuk memberi pesan
pengolahan terhadap obyek data ini
pada obyek yang bersangkutan.
diperlukan fungsi-fungsi yang ditulis
Setiap anggota dari obyek ini
secara terpisah dari definisi
dikelompokkan berdasarkan sifat
strukturnya. Sebagai contoh, fungsi
akses terhadap anggotaanggotanya,
berikut disusun untuk menuliskan
baik dari dalam obyek itu sendiri
obyek Time dengan bentuk
maupun dari obyek lainnya. Ada tiga
hh:mm:ss. sifat yang dapat diberikan, yaitu
public, private, dan protected.
void printTime (const Time &t)
Perhatikan contoh berikut:
{
cout << (t.hour < 10 ? "0" : "") << class Time {
t.hour << ":" public:
<< (t.minute < 10 ? "0" : "") << Time();
t.minute << ":" default constructor void
<< (t.second < 10 ? "0" : "") << setTime(int, int, int);
t.second << ":" ; member function
} voit print();
~Time();
Pada contoh ini terlihat adanya
destructor
pemisahan antara data dan
prosedur/fungsi, yang berbeda private: int
dengan konsep pemrograman hour;
beorientasi obyek dimana antara data member
keduanya dibungkus ke dalam satu int minute; int
kesatuan dengan menggunakan tipe 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 Direktorat Pembinaan SMK | 2008
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
anggota (bukan program dari minute = m;
pengguna) yang perlu diambil, dan second = s;
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);
2008 | Direktorat Pembinaan SMK 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
public. Tingkat -tingkat ini
t1.setTime(10,30,25);
mengontrol akses ke anggota
obyek t1 memiliki hour=10,
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 Direktorat Pembinaan SMK | 2008
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
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
Default permission label : private contoh sebelumnya CRectangle
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 adalah nama class (type)
int area (void);
} rect; dan a adalah nama
Program 14.1 object(variable).

#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();
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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 ) ;
void checkRange ( int , int ) ;
height dan width menyatakan jumlah
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

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


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;
Untuk memberi nilai ukuran kotak kotak.SetUkuran(10,7);
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
Untuk memberi nilai panjang dan dalam struktur kotak. Sebagai
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;
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


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 atas


compile, ternyata error muncul. Error 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;
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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,
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


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));
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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;
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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; private
diakses oleh class itu sendiri. Object static int studentCount; //area
lain tidak dapat menggunakan 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
sama pada semua object di class method, kita tuliskan :
yang sama.
<modifier> <returnType>
Anggaplah kita menginginkan
jumlah dari siswa yang dimiliki dari <name>(<parameter>*) {
seluruh class, kita dapat <statement>*
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.

2008 | Direktorat Pembinaan SMK 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
tersebut dapat diakses dari object luar ( mathGrade+englishGrade+scienceGrade )/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 Direktorat Pembinaan SMK | 2008
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
t
tidak menghasilkan return value.
Namun berisi beberapa argumen dari Int ‐ Tipe return dari method.
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
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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
berikut:
Nama parameter pada deklarasi ini
adalah age, yang memiliki penamaan public void setAge( int age ){
yang sama dengan instance variable this.age = age;
age. Parameter age adalah deklarasi }
terdekat dari method, sehingga nilai
dari parameter tersebut akan Method ini akan mereferensikan
digunakan. Maka pada pernyataan : nilai dari parameter age kepada
instance variable dari object
age = age; 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
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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 Seperti telah kita bahas
value
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(){
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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 Harus dituliskan pada baris pertama
saat baris ke 13 dipanggil akan pada sebuah constructor
memanggil constructor dasar pada 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():

2008 | Direktorat Pembinaan SMK 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)
Tipe ini mensyaratkan bahwa Dalam contoh ini, variabel name dan
hanya class dalam package yang method getName() dapat diakses dari
sama yang memiliki hak akses object lain.
terhadap variabel dan methods
14.10.3. Akses Protected
dalam class. Tidak terdapat keyword
Tipe ini hanya mengijinkan
pada tipe ini.Sebagai contoh :
class member untuk diakses oleh
public class StudentRecord method dalam class tersebut dan
{ elemen – elemen subclass. Sebagai
contoh :
//akses dasar terhadap variabel
int name; public class StudentRecord
//akses dasar terhadap metode
{
String getName(){
//akses pada variabel
return name;
protected int 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 Direktorat Pembinaan SMK | 2008
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];
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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 = ",
2008 | Direktorat Pembinaan SMK 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.
Apakah fungsi tipe kelas dalam bahasa C
Sebutkan tujuan dari mendeklarasikan class
Sebutkan yang digunakan untuk menentukan batasan akses terhadap
member
Apa yang dimaksud dengan konstruktor dan destruktor
Jelaskan apa yang dimaksud dengan overloading konstruktor
Jelaskan bagaimana cara menulis class
Apa yang dimaksud dengan overloading method
Apa yang dimakksud dengan akses public, private dan protected

504 Direktorat Pembinaan SMK | 2008


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++.

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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 pemrograman berorientasi objek
adalah pewarisan sifat. Sebuah Class adalah blueprint atau
Subclass akan mewarisi sifat dari prototype dari object-objec tertentu
Superclass-nya. Dalam contoh di yang memiliki kesamaan variable
atas, Sepeda Gunung akan memiliki dan method.
atribut gigi, roda dan panjang dan Object atau insance of class
juga kemampuannya yaitu pindah merupakan software yang
Gigi 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 adalah
lain dengan Superclass yang sama. action yang bisa di kerjakan oleh suatu
Itulah yang membuat SepedaGunung object
dan SepedaOnta berbeda.
2008 | Direktorat Pembinaan SMK 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
Desain Template The second instance
Blue print
n ...... instance

Gambar 15.1. Class Dalam Pemrograman Berorientasi Obyek

Ada empat ciri-ciri atau komputer kita harus menentukan ciri-


karakteristik bahasa Pemrograman ciri / sifat-sifat yang penting yang
Berorientasi 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 Direktorat Pembinaan SMK | 2008
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

2008 | Direktorat Pembinaan SMK 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 C+ biasanya diatur pada posisi berdiri,
+. tetapi dapat juga ditetapkan sebelum
menggunakan obyek tersebut.
510 Direktorat Pembinaan SMK | 2008
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 interning dijamin, maka untuk
jauh lebih kecil daripada obyek itu melakukan setiap kasus yang
sendiri, 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 tertentu mengenai satu bidang obyek
merespon 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
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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
Interface dari modul atau secara 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 pemrograman
tombol tersebut dan bagaimana modular, enkapsulasi, dan abstraksi
mengoperasikannya. Pemakai data dengan disediakannya skema-
tidak perlu tahu mekanisme skema class, interface, dan
kerja oven tersebut secara packages. Enkapsulasi dimungkinkan
intenal seperti kerja tabung dengan pendefinisian private bagi
magnetron, mikrokontroller data/metoda yang disemebunyikan
mekanik penggerak dan lain dan public bagi data/metoda yang
sebagainya.). berperan sebagai interface.
o Window menyediakan sejumlah
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:

2008 | Direktorat Pembinaan SMK 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 15.5.2. Priority Queue
denga tipe data yang dikehendaki.
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 Direktorat Pembinaan SMK | 2008
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
rincinya. Implementasinya sendiri yang diinisialisasi kosong
dapat dilakukan dalam dua PQ = new PriorityQueue();
representasi level bawah yang mendapatkan ukuran (jumlah
berbeda: array atau linked -list yang item 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,
pelayanan pasien dalam ruang menghapus item dengan prioritas
praktek dokter, penjadwalan tertinggi 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
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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 secara untuk mencapai fungsi tersebut.
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 yang "bagaimana" tersebut, bahkan suatu
potensial dapat menyebabkan masalah saat misalnya untuk peningkatan
yang besar. Dekomposisi ke dalam efisiensi maka
komponen-komponennya pun dapat metodologi/algoritmanya dapat
bervariasi, bisa saling kait-mengkait disubstitusikan tanpa mengubah
secara kompleks atau teratur dalam abstraksi proseduralnya.
layer-layer. Jadi pemisahan tersebut
Abstraksi prosedural: memberi manfaat:
menyatakan fungsi "apa" (what) yang

2008 | Direktorat Pembinaan SMK 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 object
class, tanpa memperhatikan dari class yang sama. Sekarang,
lokasinya dalam hirarki class, untuk misalkan kita punya class yang lain
mengimplementasikan sifat-sifat yaitu MyInteger dimana berisi method
yang umum. Dengan catatan bahwa yang membandingkan object
interface-interface juga menunjukkan MyInteger ke object dari class yang
polimorfisme, dikarenakan program 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 Direktorat Pembinaan SMK | 2008
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. menyediakan class untuk mempunyai
Relasi 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
2008 | Direktorat Pembinaan SMK 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 ini:
a, 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 Direktorat Pembinaan SMK | 2008
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

2008 | Direktorat Pembinaan SMK 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.
Apa yang dimaksud dengan pemrograman Object oriented dan prosedural
Sebutkan perbedaan antara kedua program tersebut
Berilah gambaran yang jelas mengenai pemroraman OOP
Apa yang dimaksud dengan abstraksi
Apa yang dimaksud dengan enkapsulasi
Apa yang dimaksud dengan pewarisan
Apa yang dimaksud dengan imutable dan mutable objek
Apa yang dimaksud dengan bahasa pemrograman modular dan buatlah
program sederhana
Apa yang dimaksud dengan Priority queue (PQ)

522 Direktorat Pembinaan SMK | 2008


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 C+
Sekolah, Nama Siswa, Nomor Induk + menyediakan keyword yang disebut
Siswa, Alamat Siswa, Jurusan/Kelas. Struct. Contoh penggunaan sebagai
Pengertian data-data tersebut harus berikut:

Program 16.1
#include <cstdlib>
#include <iostream>

using namespace std;

struct KartuPelajar
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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;
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


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;
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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;
}

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


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 Titik A; pemanggilan obyek
set ordinat. Hal itu dapat dilihat dalam
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
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


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

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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
{

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


Inheritance, Polymorphism,Overloading dan Bahasa Pemrorgraman
Friends

ada pintu masuk dan pintu keluar,


Jadi ada dua pasang method untuk mengambil barang-barang
yang ditambahkan, satu untuk yang ada harus melalui prosedur
memasukkan data baik X maupun Y tidak bisa begitu saja. Dapat
yaitu lewat SetAbsis maupun disimpulkan untuk mengakses data
SetOrdinat. Yang kedua untuk dalam suatu class yang bersifat
menampilkan atau melihat variabel X private bisa dengan membuat
ataupun Y melalui perintah method yang bersifat public sehingga
AmbilAbsis dan AmbilOrdinat. Disini bisa memanipulasi data/variabel yang
terlihat bahwa pintu masuk dan ada didalamnya. Contoh lain sebagai
keluar melalui jalur tertentu tidak bisa berikut:
langsung seperti apabila variabel di
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();
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


Inheritance, Polymorphism,Overloading dan Bahasa Pemrorgraman
Friends

turunan public dari class A.


tidak ada beda cara pemanggilan Sebenarnya masih ada satu lagi yaitu
baik TesA() maupun TesB(). sifat protected. Suatu class yang
Sedangkan untuk pemanggilan memproteksi data-datanya dengan
di main() baik ContohA yang sifat protected hanya bisa diakses
merupakan class baru dari class A, dari dirinya sendiri atau dari class
dan Contoh B yang merupakan class turunannya. Lihat contoh berikut dan
baru dari class B tidak ada bandingkan dengan sifat private yang
perbedaan cara pemanggilan. Bisa telah dibahas sebelumnya.
dimengerti karena class B merupaka

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();
};

2008 | Direktorat Pembinaan SMK 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 method) bersifat public. Namun perlu dicermati
contoh variabel umum dan variabel cara macam ini mempunyai
proteksi. Jadi class yang bersifat kelemahan karena data tersebut
protected bisa diakses langsung persis seolah-olah menjadi bersifat public
seperti class tersebut melalui meskipun dideklarasikan secara
turunannya. Bandingkan dengan private atau protected; Untuk
contoh sebelumnya yaitu class yang mengatasi masalah semacam itu, C+
bersifat private tidak dapat + menyediakan satu keyword,
540 Direktorat Pembinaan SMK | 2008
Inheritance, Polymorphism,Overloading dan Bahasa Pemrorgraman
Friends

anggota class lain, baik bersifat


yaitu friend. Sebuah fungsi atau class private, protected, maupun public.
yang dideklarasikan dengan sifat
friend dapat mengakses semua

16.4. Friend untuk mengakses member private


Sebelumnya sudah di bahas
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 () {

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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.
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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 Direktorat Pembinaan SMK | 2008


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;
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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 Secara lengkap sebagai berikut:
tersebut dilewatkan berdasarkan
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;
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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
{
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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;
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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 yang ada dalam class dasarnya. Hal


Salah satu hal penting dalam
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

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008


Inheritance, Polymorphism,Overloading dan Bahasa Pemrorgraman
Friends

member CPolygon, kita pilih akses


class turunan, namun member protected daripada private. Kita dapat
private tidak demikian. mebuat ringkasan perbedaan tipe
Karena kita ingin width dan akses berdasarkan siapa yang dapat
height dapat diakses oleh member mengakses, sebagai berikut:
dalam class turunan CRectangle dan
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 access akan menjadi protected pada
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 mempunyai member public. Minimum
access level hanya akan digunakan untuk
member yang diwariskan mother.
Ini dikarenakan kita menurunkan Penggunaan umum level
class dari class lain sebagai public, inheritance selain public adalah
yang perlu diperhatikan adalah: private, yang menyediakan encapsulasi
sempurna dalam class dasar, kecuali jika tidak
class CRectangle: public CPolygon; ada yang beranggapan classnya akan dapat
diakses member class dasar dari turunannya.
public menunjukkan level Sehingga dalam banyak kasus class
diturunkan dalam bentuk public. Jika tidak
minimum proteksi yang berarti
ada level akses yang ditulis maka dalam class
member warisan class dasar
akan dianggap private, dan dalam tipe struct
(CPolygon) harus diikutkan dalam
dianggap public.
class baru (CRectangle). Level akses
minimum untuk member yang
diturunkan dapat diubah menjadi
protected atau private selain public.
Sebagai contoh, daughter adalah
2008 | Direktorat Pembinaan SMK 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.
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
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 Direktorat Pembinaan SMK | 2008
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, jadi
bersifat public. Akan tetapi anggota dapat diakses langsung.

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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;
}
};
2008 | Direktorat Pembinaan SMK 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 baik melalui inisialisasi konstruktor bukan
class dasar maupun class langsung pada main().

564 Direktorat Pembinaan SMK | 2008


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 :
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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);
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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 anggota
Contoh, membuat class untuk yang dipakai untuk setiap polygon, dalam hal
mengetahui apakah segi empat ini width dan height, dan CRectangle dan
(CRectangle), atau (CTriangle).
2008 | Direktorat Pembinaan SMK 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) contoh program dibawah ini :
pada 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 Direktorat Pembinaan SMK | 2008
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); }
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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.
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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
0

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>

2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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();
2008 | Direktorat Pembinaan SMK 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
menunjukkan kemampuan untuk <<endl;
menangani dua atau lebih bentuk }
obyek yang berlainan pada saat virtual void keterangan() = 0;
eksekusi berlangsung, dengan }
menyesuaikan lingkungan obyek

578 Direktorat Pembinaan SMK | 2008


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 seperti
umumnya, melainkan nama fungsi diatas dengan menggunakan
berupa kata kunci operator diikuti overload operator. Dibawah ini adalah
dengan lambang operator yang 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;
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman
dan untuk menyederhanakan
CVector () { x=0; y=0; };
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;
2008 | Direktorat Pembinaan SMK 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 Direktorat Pembinaan SMK | 2008
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.
Apa yang dimaksud dengan obyek dalam pemrograman
Apa yang dimaksud dengan kelas
Apa yang dimaksud dengan enkasulasi
Apa perbedaan antara class private dan public
Apa yang dimaksud dengan inheritance
Buatlah program sederhana dengan inheritance
Apa yang dimaksud dengan friend
Apa yang dimaksud dengan operator overloading
Apa fungsi dari class basis virtual

2008 | Direktorat Pembinaan SMK 583


Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends

584 Direktorat Pembinaan SMK | 2008


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 *
053 02B 00101011 +
044 054 02C 00101100 ,
055 02D 00101101 ‐
046 056 02E 00101110 .
057 02F 00101111 /
048 060 030 00110000 0
061 031 00110001 1
050 062 032 00110010 2
063 033 00110011 3
052 064 034 00110100 4
065 035 00110101 5
054 066 036 00110110 6
067 037 00110111 7
056 070 038 00111000 8
071 039 00111001 9
058 072 03A 00111010 :
073 03B 00111011 ;
060 074 03C 00111100 <
075 03D 00111101 =
062 076 03E 00111110 >
077 03F 00111111 ?
064 100 040 01000000 @
101 041 01000001 A
066 102 042 01000010 B
103 043 01000011 C
068 104 044 01000100 D
105 045 01000101 E
070 106 046 01000110 F
107 047 01000111 G
072 110 048 01001000 H
111 049 01001001 I
074 112 04A 01001010 J
113 04B 01001011 K
076 114 04C 01001100 L
115 04D 01001101 M
078 116 04E 01001110 N
117 04F 01001111 O
080 120 050 01010000 P
121 051 01010001 Q
082 122 052 01010010 R
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
56 union a structure that assigns multiple variables to the same memory
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
61 volatile warn the compiler about variables that can be modified
unexpectedly
62 wchar_t declare a wide‐character variable
63 while looping construct

589

Anda mungkin juga menyukai