01 bab 01 dasar komputer fachkunde ok

615

Upload: others

Post on 04-Oct-2021

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 01 bab 01 Dasar Komputer fachkunde OK
Page 2: 01 bab 01 Dasar Komputer fachkunde OK

BAHASA PEMROGRAMAN

Untuk SMK

Penulis : SupraptoKadarisman Tejo YuwonoTotok SukardiyonoAdi 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 MenengahDepartemen Pendidikan NasionalTahun 2008

Page 3: 01 bab 01 Dasar Komputer fachkunde OK

KATA PENGANTAR

Pertama kali kami memanjatkan rasa syukur ke hadirat AllahSubhanahu Wata’la bahwasanya penyusunan buku dengan judul ”BahasaPemrograman ” ini dapat diselesaikan. Kerja keras yang telah dilakukan dalampenulisan ini telah membuahkan hasil dengan baik. Buku ini sangat berartibagi para siswa Sekolah Menengah Kejuruan (SMK) terutama mereka yangmempelajari bidang teknologi informatika dan komunikasi atau bidang lainyang sejenis.

Selain itu, dengan ditulisnya buku ini, akan menambah perbendaharaanpustaka yang dapat dijadikan pegangan bagi para guru. Kami menyadaribahwa ketersediaan buku yang memadai bagi para siswa dan guru sekarangini dirasakan masih kurang. Sejalan dengan kemajuan jaman dan teknologiyang ada, maka sudah sepantasnya perlu ada upaya untuk mencerdaskanpara siswa dengan kampanye penulisan buku.

Buku yang ditulis ini diharapkan dapat menjembatani kebutuhan siswadan guru terhadap materi-materi pelajaran yang diajarkan di sekolah. Dengandemikian keluhan sulitnya mencari buku bermutu yang ditulis dalam bahasaIndonesia sudah tidak akan didengar lagi. Sebagaimana yang ditulis dalampengantar Buku Standar Kompetensi Nasional Bidang teknologi Informasi danTelekomunikasi bahwa demikian luasnya bidang TIK, prioritas utama dalampenyusunan standar kompetensi ditujukan untuk bidang-bidang pekerjaanyang berhubungan dengan Teknologi Informasi dan Telekomunikasi. Namunbuku pegangan ”bahasa Pemrograman” ini akan memuat pengetahuanmendasar tentang bahasa Pemrograman khususnya bahasa Prosedural danOOP. Selanjutnya bagi yang berkepentingan dengan buku ini dapatmengimplementasikannya dalam pemberdayaan proses belajar mengajar yangberlangsung di SMK.

Dalam kesempatan ini ucapan terima kasih yang sebesar-besarnyadisampaikan kepada para anggota Tim Penulis, para konstributor materi yangtelah bersama kami menyusun dan menyempurnakan isi buku ini. KepadaDirektur Pembinaan Sekolah Menengah Kejuruan (PSMK), kami sampaikanpenghargaan dan terima kasih atas dukungan dan bantuannya sehinggapenulisan buku ini dapat dilaksanakan dengan baik dan berhasil memenuhikriteria.

Akhirnya kami persembahkan buku ini kepada para pelaksana dijajaran SMK. Apapun hasil yang telah dicapai merupakan perwujudan kerjakeras yang hasilnya bersama-sama dapat kita lihat setelah implementasi dansiswa mencapai keberhasilan studi. Semoga bermanfaat bagi kita sekalian.

Tim Penulis

ii

Page 4: 01 bab 01 Dasar Komputer fachkunde OK

DAFTAR ISI

HALAMAN JUDUL ....................................................................................... iKATA PENGANTAR .................................................................................... iiDAFTAR ISI ................................................................................................ iii BAB 1. DASAR-DASAR PEMROGRAMAN KOMPUTER 1.1. Pendahuluan .................................................................................... 11.2. Perangkat Keras Komputer .............................................................. 31.3. Arsitektur Komputer .......................................................................... 61.4. Kerja Komputer................................................................................. 161.5. Sistem Bilangan................................................................................ 191.6. Pemrograman Komputer .................................................................. 281.7. Bahasa Pemrograman...................................................................... 301.8. Penulisan Bahasa Pemrograman ..................................................... 341.9. Element Bahasa Pemrograman ....................................................... 381.10. Bahasa C++...................................................................................... 401.11. Struktur Bahasa C++ ........................................................................ 421.12. Input/output....................................................................................... 451.13. Soal Latihan...................................................................................... 46

BAB 2. BAHASA DAN ALGORITMA PEMROGRAMAN2.1. Bahasa Pemrograman...................................................................... 472.2. Compiler dan Inteprete ..................................................................... 502.3. Tipe Pemrograman ........................................................................... 502.4. Algoritma .......................................................................................... 522.5. Ciri Algoritma .................................................................................... 532.6. Penerapan Algoritma ........................................................................ 542.7. Notasi Algoritma ............................................................................... 552.8. Deskriptif Algoritma .......................................................................... 552.9. Flow chart ......................................................................................... 562.10. Pseudo code..................................................................................... 602.11. Penerjemahan ke kode sumber........................................................ 612.12. Latihan Soal...................................................................................... 87

BAB 3. TIPE DATA DAN OPERATOR 3.1. Pengertian Data................................................................................ 893.2. Indentifier ......................................................................................... 903.3. Konstanta ......................................................................................... 923.4. Variabel ............................................................................................ 963.5. Tipe Data .......................................................................................... 1013.6. Operator Bahasa C++ ...................................................................... 1103.7. Operator Unary ................................................................................. 1123.8. Operator Binary ................................................................................ 1173.9. Operator Ternary .............................................................................. 1263.10. Ungkapan (Ekspresi) ........................................................................ 1283.11. Soal Latihan...................................................................................... 129

iii

Page 5: 01 bab 01 Dasar Komputer fachkunde OK

BAB 4. STRUKTUR PERULANGAN4.1. Perulangan ....................................................................................... 1314.2. Operator Increment dan Decrement ................................................. 1324.3. Ekspresi Matematika ++ dan -- ........................................................ 1334.4. Penghitung ....................................................................................... 1344.5. Pernyataan FOR............................................................................... 1364.6. Pernyataan NESTED – FOR ............................................................ 1494.7. Pernyataan WHILE .......................................................................... 1514.8. Pernyataan NESTED-WHILE .......................................................... 1554.9. Perulangan DO-WHILE .................................................................... 1584.10. Pernyataan NESTED DO-WHILE..................................................... 1614.11. Perulangan Tidak Berhingga ............................................................ 1634.12. Pernyataan Break ............................................................................. 1654.13. Pernyataan Continue ........................................................................ 1674.14. Pernyataan Goto .............................................................................. 1694.15. Latihan Soal...................................................................................... 170

BAB 5. STATEMENT KENDALI5.1. Pengertian Statement ....................................................................... 1715.2. Operator Relasi ................................................................................ 1725.3. Statement IF ..................................................................................... 1765.4. Pernyataan IF/ELSE ......................................................................... 1845.5. Pernyataan IF/ELSE IF..................................................................... 1885.6. Pernyataan IF/ELSE Majemuk ......................................................... 1965.7. Pernyataan NESTED IF ................................................................... 1985.8. Operator Logika ................................................................................ 2025.9. Operator Kondisional ........................................................................ 2085.10. Statement SWITCH .......................................................................... 2115.11. Pernyataan Switch … Case.............................................................. 2125.12. IF...THEN, IF...THEN...ELSE dan Nested IF .................................... 2185.13. Aplikasi Pernyataan IF pada Menu................................................... 2205.14. Soal Latihan...................................................................................... 222

BAB 6. PROSEDUR DAN SUBROUTIN6.1. Prosedur ........................................................................................... 2236.2. Parameter Prosedur ......................................................................... 2246.3. Pemanggilan Prosedur ..................................................................... 2256.4. Sub Rutin ......................................................................................... 2286.5. Sub Rutin dalam Bahasa Pemrograman .......................................... 2296.6. Function yang Mengembalikan Nilai................................................. 2336.7. Function yang Tidak Mengembalikan Nilai ....................................... 2366.8. Function Call Function ...................................................................... 2396.9. Call by Value dan Call by References .............................................. 2416.10. Parameter dengan Nilai Default ....................................................... 2446.11. Overloading ...................................................................................... 2466.12. Latihan Soal...................................................................................... 251

iv

Page 6: 01 bab 01 Dasar Komputer fachkunde OK

BAB 7 FUNGSI7.1. Pendahuluan .................................................................................... 2537.2. Fungsi Void....................................................................................... 2557.3. Pemanggilan Fungsi ......................................................................... 2557.4. Prototipe Fungsi ............................................................................... 2627.5. Pengiriman data pada Fungsi........................................................... 2647.6. Passing Data by Value ..................................................................... 2697.7. Pernyataan Kembali ......................................................................... 2717.8. Mengembalikan Nilai dari Fungsi ..................................................... 2727.9. Pengembalian Nilai Boolean ............................................................ 2767.10. Menggunakan Fungsi dalam program menu .................................... 2777.11. Variabel Lokal dan Global ............................................................... 2797.12. Variabel Static Local ......................................................................... 2847.13. Soal Latihan...................................................................................... 287

BAB 8. OPERASI STRING8.1. String pada bahasa C ....................................................................... 2898.2. Pointer pada Operasi String ............................................................. 2948.3. Library String Bahasa C++ ............................................................... 2958.4. Membandingkan string ..................................................................... 2988.5. Operator Logika NOT ....................................................................... 3028.6. Pengurutan String............................................................................. 3028.7. Fungsi konversi String/Numeric........................................................ 3068.8. Menguji sebuah Karakter.................................................................. 3098.9. Deskripsi Fungsi Karakter ................................................................ 3118.10. Konversi Karakter ............................................................................. 3148.11. Menulis string ................................................................................... 3168.12. Pointer untuk menguraikan String .................................................... 3198.13. Class String pada C++ ..................................................................... 3218.14. Membuat Class String Sendiri .......................................................... 3278.15. Studi Kasus ...................................................................................... 3308.16. Soal Latihan...................................................................................... 332

BAB 9. ARRAY 9.1. Pengertian Array............................................................................... 3339.2. Deklarasi Array ................................................................................. 3399.3. Inisialisasi Array................................................................................ 3429.4. Array multi dimensi ........................................................................... 3429.5. Mengurutkan element Array ............................................................. 3469.6. Contoh program array ...................................................................... 3509.7. Soal Latihan...................................................................................... 353

BAB 10. REKURSIF10.1. Pengertian Rekursif .......................................................................... 35510.2. Pengertian Teknik Iteratif.................................................................. 36110.3. Perbandingan Teknik Rekursif dan Teknik Iteratif ............................ 361

v

Page 7: 01 bab 01 Dasar Komputer fachkunde OK

10.4. Algoritma Teknik Rekursif................................................................. 36410.5. Algoritma Teknik Iteratif .................................................................... 36510.6. Penerapan Algoritma Rekursif.......................................................... 36610.7. Penerapan Algoritma Iteratif ............................................................. 36810.8. Soal Latihan...................................................................................... 372

BAB 11. GRAFIK 11.1. Pengertian Grafik.............................................................................. 37311.2. Grafik Library .................................................................................... 37411.3. Grafik Sederhana ............................................................................. 37511.4. Animasi Grafik .................................................................................. 38211.5. Dasar-dasar Game ........................................................................... 39211.6. Soal Latihan...................................................................................... 398

BAB 12. OPERASI FILE12.1. Pengertian File ................................................................................. 39912.2. Class stream..................................................................................... 40112.3. Hirarki class stream .......................................................................... 40212.4. File Input/Output C++ ....................................................................... 40412.5. Pembacaan String ............................................................................ 40712.6. Routin-routin konversi File ................................................................ 40912.7. File Binary dan ASCII ....................................................................... 41212.8. Binary I/O ......................................................................................... 41412.9. Buffer ................................................................................................ 41412.10. Rutin-rutin pada C++ ........................................................................ 42012.11. File sekuensial .................................................................................. 42212.12. Program Operasi FiIe ...................................................................... 42512.13. Soal Latihan...................................................................................... 431

BAB 13. POINTER13.1 Pemrograman pointer ....................................................................... 43313.2 Deklarasi variabel bertipe pointer ..................................................... 43613.3 Inisialisasi Pointer ............................................................................. 43913.4 Pointer untuk fungsi .......................................................................... 44213.5 Mengakses dan Mengubah isi Pointer.............................................. 44713.6 Array dan Pointer.............................................................................. 45013.7 Pointer dalam Fungsi........................................................................ 45913.8 Fungsi Pointer ke Static Class Member Function............................. 46613.9 Fungsi Pointer pada Class anggota Fungsi Non-static..................... 46813.10 Soal Latihan...................................................................................... 470

BAB 14. CLASS14.1. Obyek dan Class .............................................................................. 47114.2. Tipe Class......................................................................................... 47214.3. Deklarasi Class................................................................................ 47414.4. Struktur dan kelas............................................................................. 47914.5. Constructor dan destructor ............................................................... 486

vi

Page 8: 01 bab 01 Dasar Komputer fachkunde OK

14.6. Overloading Constructor................................................................... 48814.7. Menulis Class ................................................................................... 48914.8. Reference this .................................................................................. 49514.9. Overloading Method ......................................................................... 49514.10. Access Modifier ................................................................................ 50014.11. Contoh Program Class ..................................................................... 50114.12. Soal Latihan...................................................................................... 505

BAB 15. PEMROGRAMAN BERORIENTASI OBYEK15.1. Pemrograman Object-Oriented dan Prosedural ............................... 50515.2. Perbedaan Object-Oriented dan Prosedural .................................... 50615.3. Pemrograman berorientasi objek ..................................................... 50615.4. Immutable obyek .............................................................................. 51015.5. Modularitas dan Abstraksi Data........................................................ 51215.6. Modularitas dan Penyebunyian Informasi ........................................ 51715.7. Interface............................................................................................ 51815.8. Interface dan Class........................................................................... 51915.9. Hubungan dari Interface ke Class .................................................... 52115.10. Pewarisan Antar Interface ................................................................ 52215.11. Soal Latihan...................................................................................... 522

BAB 16. S INHERITANCE, FRIENDS, POLYMORPHISM DANOVERLOADING16.1. Menggunakan Obyek dan Class ...................................................... 52316.2. Realisasi Prosedur dan Fungsi dalam Class .................................... 53016.3. Class Private , Class Public, dan Class Protected ........................... 53416.4. Friend ............................................................................................... 54116.5. Friend class ...................................................................................... 55416.6. Inheritance ........................................................................................ 55716.7. Class basis virtual............................................................................. 56516.8. Inheritance between class ................................................................ 56916.9. Multiple inheritance........................................................................... 57116.10. Polymorphism ................................................................................... 57216.11. Overloading ...................................................................................... 57916.12. Soal Latihan...................................................................................... 583

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

vii

Page 9: 01 bab 01 Dasar Komputer fachkunde OK

Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

BAB 1DASAR-DASAR PEMROGRAMAN KOMPUTER

1.1. Pendahuluan1.2. Perangkat Keras Komputer1.3. Arsitektur Komputer1.4. Kerja Komputer1.5. Sistem Bilangan1.6. Pemrograman Komputer1.7. Bahasa Pemrograman1.8. Penulisan Bahasa Pemrograman1.9. Element Bahasa Pemrograman1.10. Bahasa C++1.11. Struktur Bahasa C++1.12. Input/output1.13. Soal Latihan

1.1. PendahuluanSetiap orang yang bekerja

biasanya membutuhkan alat bantuuntuk menyelesaikan pekerjaannyasupaya menjadi lebih mudah.Seorang tukang kayu misalnyamembutuhkan palu, gergaji danpengukur. Ahli mesin membutuhkankunci pas dan obeng. Seorang teknisielektronika membutuhkan multimeter,oscilloscope dan solder untukmenyelesaikan pekerjaannya.

Beberapa peralatan bantutersebut dapat dikategorikan sesuaidengan jenis pekerjaannya, misalnyaseorang ahli bedah, maka orangtersebut harus mempunyai peralatanyang didesain secara khusus untukmelakukan operasi. Peralatantersebut tentunya tidak biasa

digunakan oleh orang lain selain ahli bedah.

Ada beberapa peralatan yangdigunakan oleh beberapa profesi,misalnya: obeng digunakan oleh ahlimesin, tukang kayu, tukang listrik danlain sebagainya. Selain obeng,komputer juga merupakan sebuahperalatan yang digunakan olehbanyak profesi, sehingga hal tersebutsangat sulit dikategorikan padabidang apa.

Selain seperti dijelaskan diataskomputer juga mencakup banyakpekerjaan yang berbeda atau bolehjadi dapat dikatakan menjadiperalatan yang paling serbagunayang pernah dibuat.

Pemanfaatan komputer olehseorang akuntan, digunakan untuk

2008 | Direktorat Pembinaan SMK 1

Page 10: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

menganalisis keuntungan, untukmembuat laporan keuangan, tetapipada sebuah pabrik komputerdigunakan sebagai kendali mesin-mesin produksi, sedangkan padaseorang mekanik digunakan untukmenganalisis berbagai sistem padamesin dan permasalahan lainnya.

Mengapa komputer menjadiperalatan yang sangat serbaguna?.Jawabanya sangat sederhana,komputer dapat mengerjakan tugas-tugas yang bervariasi karenakomputer dapat diprogram. Komputermerupakan sebuah mesin yangkhusus hanya mengikuti instruksiyang diberikan padanya.Karenakomputer bersifat programmable,sehingga komputer tidak hanya miliksatu profesi saja. Komputerdirancang untuk mengerjakanpekerjaan yang sesuai program-program yang diberikannya padanya.

Pekerjaan sebagai programmermerupakan pekerjaan yang sangatpenting karena merekalah yangmembuat perangkat lunak yangdigunakan untuk menginstruksikankomputer sebagai peralatan yangsesuai dengan yang diinginkan.Tanpa programmer, penggunakomputer tidak mempunyai perangkatlunak, dan tanpa perangkat lunakkomputer tidak akan bisamengerjakan apapun.

Dalam pemrograman komputerada dua kombinasi yang tidakterpisahkan yaitu seni dan ilmupengetahuan. Dikatakan dalam senikarena setiap aspek dalam programharus dirancang dengan hati-hati.Hal-hal yang perlu diperhatikandalam mendesain sebuah komputeradalah sebagai berikut: Aliran

instruksi secara logic, Procedurematematik, Tampilan yang akanmuncul pada layar monitor, Informasiyang ditampilkan oleh user, Programharus “user friendly”, serta Petunjukpenggunaan maupun bentukdokumen tertulis lainnya.

Pemprograman berkaitandengan aspek ilmu pengetahuanberkaitan dengan ilmu teknik karenajarang sekali program dapat berjalanbaik pada saat program pertama kaliditulis. Biasanya perlu banyakdilakukan percobaan, pembetulandari kesalahan maupun dirancangulang sesuai dengan kebutuhan.Dengan adanya hal tersebut diatasmaka dibutuhan seorang programmeryang memahami dua kemampuanyaitu seni dan ilmu pengetahuan.

Seorang programmer harusmenguasai bahasa yang dimiliki olehkomputer seperti bahasa C++, Javaatau bahasa pemrograman lainnya.Bahasa tersebut merupakan carakomputer supaya bisa memahamiapa yang diperintahkan karenakomputer tidak paham bahasaIndonesia atau bahasa manusiamanusia, sehingga programmerlahyang harus menyesuaikan dengankomputer.

Bahasa komputer mempunyaiaturan-aturan yang harus diikuti.Dalam menulis program komputeryang meliputi seni dan ilmupengetahuan tersebut seperti halnyadalam merancang sebuah mobil,dimana mobil tersebut harusmempunyai tingkat fungsional yangtinggi, efficient, bertenaga maksimal,mudah digunakan, dan amatmenyenangkan jika dilihat.

2 Direktorat Pembinaan SMK | 2008

Page 11: 01 bab 01 Dasar Komputer fachkunde OK

Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

1.2. Perangkat Keras KomputerKomputer merupakan sebuah

mesin yang bekerja untukmemproses, menyimpan, sertamendapatkan data. Data-datatersebut berupa angka, karakter, titikwarna, gelombang bunyi atau suatukondisi sebuah sistem, sepertipendingin atau CD player. Semuadata disimpan dalam bentuk angka-angka.

Angka tersebut dalam bentukbilangan biner yang diwakili olehangka 1 dan 0 yang sering disebutbit. Supaya mudah dalammengingatnya, maka komputermengelompokan data biner tersebutmenjadi nible, byte dan word.Dengan mengelompokan tersebut,selain mudah diingat, juga akanmemudahkan pengguna dalammenuliskan sebuah program berupakode yang dimengerti oleh mesin,merancang sebuah struktur data danalgoritma yang komplek.

Komputer memanipulasi datadengan melakukan operasi, baikpenjumlahan, pengurangan,

perkalian maupun pembagian. Hasilmanipulasi angka tersebut ditunjukandalam bentuk gambar pada monitorserta deretan angka-angka padamemori video, dimana masing-masing angka atau sejumlah angkaakan mewakili suatu pixel warna.

Untuk memainkan sebuah MP3,komputer akan membaca deretanangka-angka dari disk danmemindahkannya kedalam memori.Selanjutnya komputer menggerakkanangka-angka tersebut untukdikonversi menjadi data audio yangdimampatkan. Dan yang terakhiradalah data audio yang dimampatkantersebut akan dikirim ke chip audio.

Semua hal yang dikerjakan olehkomputer, mulai dari web browsingsampai mencetak, melibatkanperpindahan dan pemprosesanangka. Secara elektronis komputertak lain hanya suatu sistem ataubenda yang hanya dirancang untukmenyimpan, dan memindahkan,menggerakkan, serta merubahangka-angka.

2008 | Direktorat Pembinaan SMK 3

Page 12: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

Gambar 1.1. Bagian-bagian komputer

Komputer terdiri dari beberapakomponen, yang secara garis besardibagi menjadi dua yaitu: berupaperangkat keras dan perangkatlunak. Komponen utama padaperangkat keras, terletak pada pusatkomputer adalah prosesor, prosesorini berfungsi mengeksekusi programkomputer.

Selain prosesor, komputer jugamempunyai memori. Dalam sebuahkomputer biasanya terdapatbeberapa memori yang berbeda-beda. Memori ini digunakan untuk

menyimpan program ketika prosesorsedang bekerja. Komputer jugamempunyai piranti untukmenyimpanan dan mempertukarkandata dengan dunia luar atau yangsering disebut I/O.

Piranti I/O akan mempertukarkandata, seperti: masukan teks melaluikeyboard serta mendisplaykannyapada layar monitor. I/O jugadigunakan untuk memindahkan datamaupun program ke atau dari suatudisk drive, modem, printer, mousedan lain-lain.

4 Direktorat Pembinaan SMK | 2008

Page 13: 01 bab 01 Dasar Komputer fachkunde OK

Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

Gambar. 1.2. Perangkat Keras Sebuah Sistem Komputer

Perangkat lunak mengendalikan dalam komputer. Secara umumfungsi dan operasi sebuah komputer. lapisan akan saling berhubunganAda beberapa lapisan (layer) dengan layer diatas atauperangkat lunak yang digunakan di dibawahnya.

Gambar. 1.3. Lapisan Perangkat Lunak

Pada perangkat lunak tingkatan Perangkat lunak ini melakukanyang paling rendah, perangkat lunak inisialisasi perangkat keras sistemdijalankan oleh prosesor ketika tersebut untuk mengetahui kondisikomputer pertama kali

2008 | Direktorat Pembinaan SMK

dihidupkan. dan mengatur komputer pada operasi

5

Page 14: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

yang benar. Perangkat lunak inibersifat permanen dan disimpandalam memori komputer. Perangkatlunak inilah yang dikenal sebagaifirmware

Firmware digunakan untukmeletakan program bootloader.Bootloader adalah sebuah programkhusus dan dijalankan oleh prosesorketika membaca sistem operasi daridisk atau memori nonvolatile yangkemudian menempatkannya di dalammemori. Bootloader biasanya dimilikikomputer desktop dan workstation.

Lapisan perangkat lunak diatasfirmware, adalah sistem operasi.Perangkat lunak ini berfungsimengendalikan operasi komputer,mengorganisir penggunaan memoridan mengendalikan peralatan sepertikeyboard, mouse, monitor, disk drive,dan sebagainya. Sistem operasi jugamemberikan fsilitas kepada useruntuk melakukan antarmuka denganpiranti lain, menjalankan program

aplikasi dan mengakses file memori luar seperti Compact Disk (CD).

Sistem operasi, secara umummenyediakan satu set tool untukprogram aplikasi, melakukan suatumekanisme pengaksesan monitor,disk drive, dan seterusnya.

Kenyataan dilapangan sebuahkomputer tidak semua menggunakansistem operasi. Sering juga komputerbersifat sangat sederhana danlangsung menjalankan tugasnya.Pada permasalahan tertentu, sepertirouter jaringan, perangkat lunaknyaterintegrasi dan sangat sederhanaproses pengembangan.

Perangkat lunak pada lapisanpaling tinggi adalah perangkat lunakaplikasi yang merupakan programyang langsung berhubungan dengankemampuan sebuah komputer.Kemampuan sebuah komputersangat tergantung pada aplikasiperangkat lunak sistem.

1.3. Arsitektur KomputerSebuah prosesor atau yang

sering disebut dengan centralProcesing Unit (CPU) pada sebuahkomputer tidak bisa bekerja sendiridalam melakukan kerja sebagaipemroses. CPU memerlukankomponen-komponen pendukungseperti memori untuk menyimpandata dan program, serta piranti I/O(Input/Output) yang digunakan untukmemindahkan data antara komputerdan dunia luar.

Selain itu juga komputermemerlukan clock (detak) sebagaipenggerak prosesor dalammemproses data.

Mikroprosesor adalah suatupengolah yang dibentuk oleh sebuahchip tunggal atau sering disebutintegrated circuit. Mikroprosesor inisering ditemukan pada sebuahsuperkomputer, komputer PC, atausekarang ini hampir semua pengolahdata modern adalah mikroprosesor.

Mikroprosesor yang palingbanyak digunakan saat ini adalah:seri Intel Pentium, Freescale/IBMPowerPC, MIPS, ARM, and the SunSPARC, dan lain-lain.

Blok diagram sebuah sistemkomputer dapat ditunjukkan padaGambar dibawah.

6 Direktorat Pembinaan SMK | 2008

Page 15: 01 bab 01 Dasar Komputer fachkunde OK

Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

Gambar. 1.4. Diagram blok sistem komputer

Pada gambar diagram blok instruksi ataupun berupa data.sebuah sistem komputer diatas, Instruksi diambil dan dibaca darimemori berisi instruksi dan bersama- memori menuju prosesor, sedangkansama prosesor melaksanakan dan data dibaca dari dan ditulis olehmenggerakkan data. Memori suatu prosesor ke memori, hal inisistem komputer tidak pernah kosong ditunjukan pada gambar dibawah:dan selalu terisi apakah berupa

Gambar.1.5. Aliran Data pada sebuah Komputer

2008 | Direktorat Pembinaan SMK 7

Page 16: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

Bentuk aliran data arsitekturkomputer tersebut diatas dikenaldengan arsitektur Von Neumann,dimana nama tersebut diambil daripenemunya yaitu: Yohanes VonNeumann. Hampir semua komputermodern sekarang ini mengikuti formatarsitektur ini.

Pada komputer arsitektur VonNeumann langkah-langkahnya diaturoleh kendali suatu program. Dengankata lain, komputer mengikuti suatulangkah-langkah program yangmemerintahkan operasinya.

1.3.1. Central Processing Unit (CPU)CPU atau yang sering disebut

prosesor merupakan bagianterpenting pada sebuah komputer.Dalam sistem komputer, prosesormenjadi bagian yang menjalankankomputasi dari komputer tersebut.

Prosesor adalah suatu pirantielektronik yang mampu melakukanmanipulasi data dengan cara yangdisesuaikan oleh suatu urutaninstruksi. Instruksi tersebut berfungsisebagai opcode atau kode mesin.Urutan instruksi ini dapat diubah dandisesuaikan dengan aplikasi, hal inidikarenakan sifat komputer yangprogrammable. Urutan instruksi

adalah sesuatu yang mendasarisebuah program.

Instruksi pada sebuah komputeradalah berupa angka-angka. Angkayang berbeda, ketika dibaca danyang dieksekusi oleh suatu prosesor,akan menyebabkan sesuatu hal yangberbeda pula. Instruksi pada sebuahmesin menyesuaikan denganmachine code yang sesuai, ini artinyabahwa setiap prosesor mempunyaiinstruksi masing-masing sesuaiindustri yang memproduksinya. Suatuinstruksi yang berbeda mempunyaiarti bahwa mesin yang diprogramjuga berbeda.

1.3.2. MemoriMemori digunakan untuk

menyimpan perangkat lunak yangberupa data maupun obcode sebuahprosesor. Memori dapatdikategorikan menjadi memori yangdapat menyimpan data secarapermanen walaupun listrik yangmengalir pada memori tersebutdiputus dan memori ini sering disebutNonvolatail memory (tidak mudahberubah isinya), dan memori yangbersifat sementara atau data yangdisimpan dalam memori tersebutakan hilang jika listrik yang mengalir

diputus, dan jenis memori ini seringdisebut dengan Volatail memory.

Kedua jenis memori tersebutmempunyai kelebihan sertakelemahan masing-masing, sehinggapenggunaannyapun disesuaikandengan kebutuhan masing-masing.

Memori diimplementasikandalam bentuk chip yang didalamnyaberisi ribuan komponen elektronika.Memori ini dapat digambarkan dalamblok diagram seperti gambardibawah:

8 Direktorat Pembinaan SMK | 2008

Page 17: 01 bab 01 Dasar Komputer fachkunde OK

Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

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

Gambar tersebut diatas adalahmemori yang terdiri dari bus alamatyang dikodekan dengan A0 – A9. Busalamat ini bersifat satu arah yaitusebagai masukan sja. Selain busalamat terdapat juga bus datasebanyak 8 bit yang bersifat dua arahsebagai masukan maupun keluaran.

Bus yang dimiliki memori selainbus alamat dan data adalah buskendali. Bus alamat digunakan untukmemilih data yang disimpan pada

lokasi memori, dimana banyaknyalokasi pada tiap blok memori adalah2n,, jika n = 10 maka jumlah lokasimemori yang mungkin adalah 210 =1024 bit.

Setiap bit data tersimpan dalammemori dalam bentuk biner 0 atau 1.Jika banyaknya lokasi dikalikandengan jumlah banyaknya bit dalamtiap lokasi, untuk 10 alamat bit makaakan memperoleh kapasistas memori1024x8 bit.

1.3.2.1. Random Access Memory (RAM)RAM adalah memori yang dapat

diakses secara Acak. Nama inisebenarnya sebenarnya kurangtepat, karena kebanyakan memorikomputer dapat diproses secaraakses acak. RAM menjadi memoriaktif didalam sistem komputer,dimana CPU dapat dengan mudahmenulis data pada memori jenis ini.

Data pada memori RAM mudahhilang, jika aliran listriknya terputus.Informasi apapun yang disimpandidalam RAM harus ditahan atau

harus ditulis kembali setiap beberapawaktu tertentu, walaupun ada RAMNonvolatile khusus yangmengintegrasikan battery backuppada sistem.

RAM dapat dikategorikanmenjadi dua yaitu: RAM statis yangsering dikenal sebagai SRAM danRAM dinamik yang sering dikenalsebagai DRAM. RAM statismenggunakan gerbang logika yangberpasangan untuk menjagamasing-masing bit data. SRAM

2008 | Direktorat Pembinaan SMK 9

Page 18: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

mempunyai keuntungan mempunyaiproses yang lebih cepat dan mudahdigunakan, memerlukan rangkaianpendukung eksternal yang sedikit,dan dengan konsumsi daya yangrelatif rendah. Kelemahan SRAMadalah pada kapasitas memoriSRAM sangat kecil dibandingkanDRAM, serta teknologinya jauh lebihmahal.

Dengan kapasitas SRAM yangrendah, memerlukan lebih banyakchip untuk digunakan padapenerapan yang sama. Padarancangan PC modern penggunaanSRAM hanya pada mesin yangmembutuhkan kinerja yang sangatcepat seperti pada Cache MemoryProsesor.

DRAM menggunakan kapasitorsebagai komponen utamanya untukmempertahankan data tiap-tiap bit.Deretan kapasitor akan menjaga datahanya dalam waktu yang sangatpendek, selanjutnya data tersebutakan hilang sesuai dengan sifatkapasitor.

DRAM memerlukan penyegaranberlanjut, tiap-tiap penyegarantersebut sedikitnya seperseribu detik.Penyegaran ini dilakukan secaraterus-menerus. Penyegaran tersebutmemerlukan komponen pendukungtambahan yaitu komponen eksternal.DRAM mempunyai kelebihan yaitudapat mempuyai kapasitas yangtinggi.

1.3.2.2. Read Only Memory (ROM)Read Only Memory (ROM)

adalah memori yang hanya dapatdibaca saja. ROM bersifat Nonvolatilememory, karena memori ini dapatmempertahankan muatannya. ROMbiasanya lebih lambat dibandingRAM, dan sangat lebih lambatdibanding RAM statis.

Fungsi ROM yang utama didalam suatu sistem adalah menjagakode atau data yang diperlukan,seperti untuk inisialisasi pada saatstart. Perangkat lunak tersebutbiasanya dikenal sebagai firmware.Firmware berisi perangkat lunakinisialisasi komputer dan penempatansarana Input/Output (I/O) ke dalamsuatu status yang dapat dikenal.

Standard ROM dibuat oleh suatuderetan diode yang sangat banyak.Ketika datanya kosong, semua dataROM dalam kondisi berlogika 1, iniartinya data ROM pada 8 bit adalah0FFH. Ketika mengisikan datakedalam ROM sering dikenal dengan

burning ROM. Pengisian data inidilakukan dengan mengubah datayang berada dalam ROM yangsemuanya berupa data 1 denganmenciptakan data nol padapenempatan bit. Suatu piranti yangdigunakan untuk memindahkan datadisebut ROM downloader atau seringjuga disebut dengan ROMProgrammer.

ROM biasanya disebut jugadengan One Time Programmable(OTP), karena sesuai namanyaROM yang hanya bisa dibaca saja.Pada Industri komputer ROMbiasanya digunakan sebagaifirmware. Mask Programmable ROMjuga merupakan ROM yang hanyasekali diprogram, tetapi tidak samadengan OTP, karena MaskProgrammable ROM diprogram olehindustri pembuatnya sebelumdipasarkan. Sedangkan OTPbiasanya diprogram oleh penggunasesuai dengan keinginan dan setelah

10 Direktorat Pembinaan SMK | 2008

Page 19: 01 bab 01 Dasar Komputer fachkunde OK

Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

diprogram tidak bisa diprogram ulang.

1.3.2.3. Erasable Read Only Memory (EPROM)OTP ROM mempunyai sifat

hanya diprogram sekali, dan hal inimenyebabkan pemborosan karenajika data telah dimasukan dalam OTPROM dan terdapat kesalahan tidakbisa dihapus lagi, dan harus gantidengan yang baru serta yang lamaharus dibuang. Hal ini jelasmerupakan kelemahan dari ROMtersebut. Dengan demikian perluadanya ROM yang baru yang bisadiprogram ulang, jika data yangdimasukan dalam ROM terdapatkesalahan.

ROM yang muncul setelah OTPROM adalah jenis ROM yangErasable Read Only Memory yangsering disebut dengan EPROM. ROMini sangat cocok untukpengembangan sistem. Caramenghapus data yang berada dalamEPROM adalah dengan memberikancahaya ultraungu melalui jendelakecil yang terdapat pada chip denganwaktu tertentu. Setelah berapa saatdata yang berada dalam chiptersebut akan terhapus dan menjadidata berlogika tinggi semua.

Setelah data yang berada padaEPROM terhapus memungkinkanuntuk dapat memprogram kembali.

EPROM banyak digunakandalam pengembangan sistem karenakepraktisanya serta lebih hematdibandingkan dengan OTP ROM.Biasanya OTP ROM dan EPROMmempunyai kapasitas yang sangatkecil dibandingkan dengan kapasitasmemori yang ada sekarang ini.Kapasitas ini biasanya hanyabeberapa kilobyte saja, tetapiwalaupun begitu memori ini tetapdigunakan pada berbagai peralatantertentu, hal ini dikarenakan berbagaipertimbangan yang tidak mungkindigantikan oleh memori jenis lain.

Kelemahan jenis memoriEPROM ini adalah bahwa chip harusdipindahkan dari rangkaian ketikaakan melakukan penghapusan datayang ada didalamnya. Selain itudalam melakukan hapus,memerlukan waktu beberapa menit.Dalam melakukan penulisan programke dalam chip juga harusmemindahkannya ke memoriEPROM programer. Hal tersebutjelas sangat menyulitkan danmemakan waktu, sehingga denganmunculnya teknologi memorisekarang ini, jenis EPROM mulaiditinggalkan dan jarang digunakan.

1.3.2.4. Electrically Erasable ROM (EEROM)EEROM adalah memori yang

dapat dihapus/tulis secara elektris,atau Electrically ErasableProgrammable Read Only Memorydan sering dikenal dengan sebutansebagai EEPROM. EEPROM dapatdihapus dan ditulis ulang dengantidak perlu dilepas dari rangkaiannya,

sehingga menjadi sangat praktis dan effisien.

Pemrograman dan penghapusandata pada EEPROM dapat dilakukandengan cepat dibandingkan denganmemori ROM sebelumnya. Hal inilahyang membuat alasan mengapaEEPROM berkembang pesat.

2008 | Direktorat Pembinaan SMK 11

Page 20: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

Kapasitas memori EEPROMbiasanya hanya beberapa kilobytesaja. Memori ini tidak cocok sebagaifirmware, biasanya memori ini

digunakan untuk menyimpaninformasi atau data sistem, sehinggaketika listrik terputus, datanya tidakakan hilang.

1.3.2.5. Memori FlashFlash merupakan teknologi ROM

yang terbaru, dan sekarang ini palingbanyak digunakan. Flash Memorimerupakan EEROM yang dapatditulis dan hapus ulang berkali-kali.Flash memori mempunyai kapasitasyang sangat besar diatas ROMstandard.

Flash Chip ini sering juga dikenalsebagai flash ROM atau Flash RAM.Karena ROM tersebut tidak sepertistandard ROM atau standard RAMsebelumnya, maka hal tersebut dapatjuga disebut dengan flash saja untukmenghindari kekacauan penyebutanantara RAM dan ROM sebelumnya.

Flash memori secara umumdiatur menjadi beberapa sektormemori, dan hal ini akanmenguntungkan, karena pada tiap-tiap sektor memungkinkan dihapusdan ditulis ulang tanpamempengaruhi isi sektor lain.

Hal yang khusus pada flashmemori adalah sebelum ditulisi,sektor akan dihapus terlebih dahulu,sehingga hal tersebut tidak akanterjadi overwrite seperti pada RAM.

Ada beberapa perbedaan-perbedaan teknologi flash terutamapada penghapusan dan penulisanyang dibutuhkan oleh piranti tersebut.

1.3.3. Input/OutputDalam sebuah komputer,

prosesor dan memori berhubungandengan berbagai piranti luar yangdihubungkannya. Karena berbagaipiranti tersebut merupakan suatuyang ditambahkan dengan prosesor,maka piranti tersebut sering dikenalsebagai piranti peripheral. Pirantitersebut melakukan komunikasidengan prosesor yang diaturmelalui protocol tertentu.Selanjutnya, berbagai piranti tersebutmemerlukan pengaturan yang dalamhal ini dilakukan oleh sistem operasi.

Sesuai dengan arahpenyalurannya, dalam komputerdikenal sebagai piranti Input(masukan), piranti output (keluaran),dan piranti input output (masukankeluaran). Diantara berbagai jenis

piranti tersebut terdapat pirantiperekaman informasi berbentuk diskatau disket. Piranti tersebut seringdikenal dengan pheriperal. Biasanyaperipheral dibuat oleh berbagaiperusahaan untuk berbagaikegunaan.

Pada piranti tertentu, bagiansistem pengelolaan piranti itu dibuatjuga oleh perusahaan pembuatpiranti bersangkutan. Tentunyapembuatan bagian sistem operasipengelolaan piranti itu telahdisesuaikan dengan sistem operasiyang pada umumnya ada di dalamsistem komputer.

Bagian sistem operasi untukpengelolaan piranti peripheral itusecara khusus, diatur olehpengendali piranti secara umum,

12 Direktorat Pembinaan SMK | 2008

Page 21: 01 bab 01 Dasar Komputer fachkunde OK

Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

diatur oleh piranti lunak pengaturpiranti (driver).

Arah komunikasi masukankeluaran bersangkutan denganalamat. Mereka menunjukan darialamat mana ke alamat mana,masukkan dan keluaran itumengarah. Masuk ke suatu alamatdapat berarti keluar dari alamatyang lain, dan demikian pulasebaliknya.

Dalam hal ini prosesor dijadikansebagai alamat acuan untuk masukatau keluar. Masukan berarti masukmenuju prosesor atau menuju pirantiyang sedang dikelola oleh prosesor.Keluaran artinya keluar dari prosesoratau dari piranti yang sedang dikelolaoleh prosesor. Dengan demikian,dapat dinamakan sebagai suatupiranti masukan manakala piranti itumemasukan informasi ke prosesoratau memori kerja. Cara serupa,dapat dinamakan sebagai pirantikeluaran manakala piranti itumenerima informasi dari prosesoratau memori kerja.

Selain tahu dimana saja letakperipheral, prosesor juga harus dapatmengendalikan piranti peripheral itu.Pengendalian itu terdiri atas duabagian. Bagian pertama adalahpengaturan perangkat keras yangberupa penggerak piranti (devicecontroller) serta bagian kedua adalahpengaturan perangkat lunak berupaprotocol transfer data (data transferprotocol).

Protocol transfer data dikenalada lima macam protocol data.Pertama adalah protocol transferdata pengendali, kedua adalahprotocol transfer data sertapengendali dengan interupsi, ketigaadalah protocol transfer data denganakses memori langsung , keempatadalah protocol transfer data dengan

penggerak piranti, serta kelimaadalah protocol transfer data bebaspiranti.

Kerjasama antara penggerakpiranti dengan protocol transfer datamemungkinkan prosesormengendalikan piranti peripheral.Biasanya, pengendali piranti telahdisiapkan oleh perusahaan pembuatpiranti peripheral serta disesuaikandengan sistem komputer dimanapiranti peripheral itu dipasang.Adakalanya, bersama-sama denganpiranti penghubung lainnya,pengendali piranti terpasang padakartu antar muka (interface card).Dengan memasang kartu antar mukake sistem komputer, maka telahdapat memasang juga pengendalipiranti yang siap diperintah olehpengendali aplikasi atau olehpemakai komputer.

Biasanya piranti peripheralterdiri atas bagian mekanik danbagian elektronika. Kalau bagianmekanik adalah piranti peripheral itusendiri, maka bagian elektronikayang mengatur kerja piranti mekanikitu, atau biasanya dinamakanpenggerak piranti (device controller)atau adapter. Dengan demikian,pada sejumlah piranti yang memilikipenggerak piranti tersebut berbentukrangkaian elektronika. Bahkandalam banyak hal, rangkaianelektronika itu disusun dalam suatupapan rangkaian tercetak (printedcircuit). Dengan adanya rangkaianini, maka sistem operasi selaluberurusan dengan penggerak pirantiserta tidak berurusan langsungdengan pirantinya.

Salah satu sebab mengapasistem operasi selalu berhubungandengan penggerak piranti dan tidakdengan piranti itu sendiri, adalahkarena pada umumnya, piranti

2008 | Direktorat Pembinaan SMK 13

Page 22: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

perangkat keras merupakan pirantiyang cukup kasar. Penggunaanpiranti memerlukan kegiatan yangcukup rumit sehingga denganmembebankan kerumitan iti padapenggerak piranti, sistem operasitidak perlu terjun ke dalam kerumitanitu.

Setiap penggerak piranti memilikiregister untuk mencatat data sertamelalui bus, penggerak pirantiberhubungan dengan prosesor.Dengan register tersebut, penggerakpiranti memonitor status piranti,mengendalikan pengendali pirantipada motor, melaksanakanpemeriksaan data serta mengetahuiformat data dari piranti. Selanjutnya,penggerak diperlukan untukmengubah perintah prosesor kedalam pulsa listrik yang sepadanuntuk diterapkan kepiranti.Sebaliknya, penggerak piranti jugamengubah informasi tentang statuspiranti ke dalam bentuk yang dapatdipahami oleh prosesor.

Dengan demikian, penggerakpiranti menggerakkan piranti secaraelektronika. Pada piranti perekamberbentuk disk atau disket,penggerak piranti mengaturpemutaran disk atau disket itu melaluimotor listrik serta mengatur pulagerakan head tulis baca (read writehead) pada disk atau disket itu. Padapencetak, penggerak pirantimelaksanakan gerakan head cetaksesuai dengan arah yang ditentukan.Dan demikian seterusnya, penggerakpiranti menggerakan pirantiperipheral yang bersangkutandengan penggerak piranti itu.

Setelah piranti itu digerakan olehpenggerak piranti, maka kerja pirantiitu selanjutnya perlu diatur melaluisuatu pengendali atau subrutin.Salah satu cara pengaturan adalah

dengan melalui sebuah protocoltransfer data pengendali. Protocol inidikenal juga sebagai programmeddata transfer protocol. Sesuai dengannamanya, pada protokol ini, transferdata diatur oleh pengendali. Padasaat data akan ditransfer dariprosesor kepiranti atau dari piranti keprosesor, pengendali membuatsehingga semua permohonaninterupsi diabaikan. Setelah itu,transfer data dilaksanakan.

Dengan demikian, pada protocoltersebut, tidak dapat mengenalinterupsi melalui permintaan. Sekalitransfer data dilaksanakan, makapelaksanaan akan berlangsungsampai selesai, kecuali tentunyakalau muncul interupsi dan jenisinterupsi yang tak terabaikan.Protokol transfer data pengendali inisering memanfaatkan pustaka(library) dan spool (simultameousperipheral operation on line). Padapustaka, dapat dilakukanpemanggilan rutin masukan keluarantertentu dan bahkan dapat mengaturformat masukan keluaran itu. Padaspool, dapat dilakukan pengaturanpiranti yang tak dapat dipakaibersama yakni piranti sepertipencetak atau panel kunci ketik.

Protokol transfer datapengendali dengan interupsi.Protokol ini juga dikenal dengannama programmed interrupt datatransfer protocol. Sesuai dengannamanya, protocol ini masihmengenal interupsi melaluipermintaan. Dengan demikian, setiapterjadi interupsi, maka interupsi itudilayani. Pada saat itu, transfer dataterputus, untuk kemudiandilanjutkan lagi setelah interupsiselesai. Selama tiada interupsi, makatransfer data dapat terus

14 Direktorat Pembinaan SMK | 2008

Page 23: 01 bab 01 Dasar Komputer fachkunde OK

Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

berlangsung, sampai pada saattransfer data itu selesai.

Dengan menerima interupsi,maka proses yang tadinya sudahterhenti, kini memiliki peluangmelanjutkan kembali. caramelanjutkan proses yang sudahterhenti itu adalah melalui interupsi.Protokol transfer data dengan aksesmemori langsung (direct memoryaccess) merupakan suatu prosesyang cukup rumit. Mula-mulapenggerak piranti membaca data didalam blok secara berurutan. Setelahitu, penggerak piranti perlumemeriksa apakah data yang dibacaitu tidak mengandung kekeliruan. Jikatidak terdapat kekeliruan, makaprosesor akan membaca semua datadari atau ke memori kerja melaluipenampung (buffer). Karena prosesorharus terlihat dalam pembacaandata, maka selama pembacaan danpenulisan itu berlangsung, prosesortidak dapat mengerjakan pekerjaanlain. Untuk membebaskan prosesordari aktifitas ini, maka diciptakanpenggerak yang dapat mendukungprotocol transfer data akses memorilangsung (direct memory access).

Pada protokol ini, prosesordiinterupsi pada saat transfer datadimulai. Setelah itu, prosesor tidaklagi ikut mencampuri kegiatantransfer data itu. Kemudian, padasaat transfer data selesai, barulahprosesor diinterupsi sekali lagi.Dengan demikian, di antara saat awaldan saat akhir transfer data itu,prosesor dapat melaksanakanpekerjaan lain.

Karena protocol transfer datamelalui akses memori inimembebaskan prosesor untukmelaksanakan pekerjaan lain, makaprotocol ini lebih unggul dari keduaprotocol lainnya.

Protokol transfer data denganpenggerak piranti. Penggerak pirantijuga dikenal sebagai devide driver.Penggerak piranti ini berbentukpiranti lunak yang menghubungkanprosesor dengan alat, tentunyamelalui penggerak alat. Bahkanregister pada penggerak alatdimanfaatkan oleh penggerak alatuntuk menyalurkan informasi dariprosesor kealat dan demikian pulasebaliknya.

Dalam keadaan tertentu, satualat dapat berhubungan denganbeberapa penggerak piranti sejenis.Satu piranti disk atau disket, misalnyadapat berhubungan dengan satu ataulebih penggerak piranti disk ataudisket. Pada saat kegiatan,penggerakan piranti berbentukproses yang mengendalikan kerjapiranti peripheral. Di antaranya,proses tersebut menerimapermintaan piranti masukan keluaran(ada kalanya berbentuk suatuantrian), memulai kerja masukankeluaran, menata kekeliruan umumpada penyaluran informasi,melaksanakan interupsi, sertamengirim berita selesai kembali keproses.

Ada yang mengatakan bahwatugas utama proses pada penggerakpiranti mencakup mencegahpermintaan dari satu proses,melaksanakan kerja tertentu padaprose situ, serta memberitahukanproses yang meminta itu tentanghasil kerja yang telah terlaksana.Proses yang meminta itu adalahproses umum yang tidak tergantungkepada piranti (tidak khas pirantitertentu). Dengan demikian,penggerak piranti menerima perintahumum serta melaksnakan perintah itipada piranti peripheral.

2008 | Direktorat Pembinaan SMK 15

Page 24: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

Rincian dari proses itu sendiriberbeda dari piranti menuju alat,misal, penggerak disk (disk driver)merupakan bagian satu-satunyapada sistem operasi yangmengetahui berapa register yangdimiliki oleh penggerak disk serta apagunanya register itu. Pelaksana diskitu adalah satu-satunya yangmengetahui seluk beluk sector, lintas(track), silinder, hulu, gerak tangkaihulu, factor seling (interleave), waktupengaturan hulu, serta segalasesuatu yang dapat membuat disk itubekerja secara benar.

Penggerak piranti bekerja samasecara erat dengan penggerakpiranti. Karena itu, ada orang yangmenamakan kedua-duanya sebagaipenggerak piranti saja (devicecontroller) atau sebagai penggerakpiranti (device driver) saja. Di sini,mereka tetap kita pisahkan yaknisebagai penggerak piranti dansebagai penggerak piranti,sedangkan secara bersama-sama,mereka kita namakan sebagaipengendali piranti.

1.4. Kerja KomputerKomputer yang merupakan

mesin penghitung sekarang ini mesintersebut banyak dipakai untukpemroses data. Fungsinya sangatsederhana yaitu digunakan untukmemproses data, kemudian hasilprosesnya diselesaikan secaraelektronis didalam CentralProcessing Unit (CPU) dankomponen lainnya yang menyusunsebuah komputer personal.

Suatu sinyal yang dikirimkan darisuatu pemancar (transmitter) kepenerima (receiver) untukberkomunikasi adalah berupa data.

Data-data yang biasa dijumpaisehari-hari memiliki banyak bentuk,antara lain: suara, huruf, angka, dankarakter lain (tulisan tangan ataudicetak), foto, gambar, film dan lainsebagainya. Suatu sistem yang dapatmemproses nilai yang kontinyuberbanding terhadap waktudinamakan sistem analog. Padasistem analog, nilainya biasa diwakilioleh tegangan, arus dan kecepatan.Berikut ini adalah gambar grafik nilaitegangan analog terhadap waktu.

16 Direktorat Pembinaan SMK | 2008

Page 25: 01 bab 01 Dasar Komputer fachkunde OK

Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

Gambar 1.7 Grafik Nilai Tegangan Analog Terhadap Waktu

Sistem yang memproses nilai menggunakan Analog to Digitaldiskrit (langkah demi langkah) Converter (ADC). ADC mengubahdinamakan digital. Pada sistem digital sinyal kontinyu menjadi sinyal diskrituntuk menunjukkan suatu nilai dengan menyamplingnya tiap detikdigunakan simbol yang dinamakan (tiap satuan waktu). Perhatikandigit. Sinyal pada gambar diatas gambar dibawah ini.dapat “didigitalkan” dengan

Gambar 1.8. Sinyal Diskrit Dengan Penyamplingan Tiap Detik

Komputer adalah sebuah direpresentasikan oleh sinyal listrik.perangkat elektronik. Data yang Sinyal yang digunakan bisadapat diolah adalah data yang dianalogikan dengan saklar listrik,

2008 | Direktorat Pembinaan SMK 17

Page 26: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

yaitu tombol off (mati) atau on hidup, maka komputer membaca(hidup). Jika saklar pada kondisi off,maka komputer membaca sebagai

sebagai angka 1. Perhatikan gambarberikut:

data 0, jika saklar dalam kondisi

Gambar 1.9. Saklar Dalam Kondisi Hidup Dan Mati

Sebuah komputer terdiri dari Setiap angka 0 dan 1 biasasaklar-saklar yang banyak jumlahnya disebut Bit. Bit adalah singkatan darisaklar-saklar ini menggunakan Binary Digit. Kata Binary diambil darikomponen elektronik berupa nama Sistem Bilangan Biner (Binarytransistor. Jumlah transistor yang Number Sistem). Tabel dibawahdigunakan bisa sampai jutaan, berikut menunjukkan tentang bit:sehingga dapat memproses data darijutaan angka 0 dan 1.

Tabel 1.1 Bilangan Biner dengan besar bit data

0 1bit1 1bit0110 4bit1001110

18

bit

Sistem bilangan biner disusun Pengolahan data yang palingdari angka-angka, sama seperti sering digunakan saat ini adalahsistem bilangan desimal (sistem pengolah kata (word processing)..bilangan 10) yang sering digunakan Ketika melakukan suatu pengolahansaat ini. Tetapi untuk desimal kata, komputer bekerja denganmenggunakan angka 0 sampai 9, keyboard. Ada 101 tombol yangsistem bilangan biner hanya mewakili karakter alphabet A, B, C,menggunakan angka 0 dan 1. dan seterusnya. Selain itu juga akan

18 Direktorat Pembinaan SMK | 2008

Page 27: 01 bab 01 Dasar Komputer fachkunde OK

Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

ditemui karakter angka 0 sampaidengan 9, dan karakter-karakter lainyang diperlukan, antara lain: , . - ; ( ) :_ ? ! " # * % & .

Seluruh karakter yang ada padakeyboard harus didigitalkan.Karakter-karakter tersebut diwakilioleh angka-angka 0 dan 1. Bit yangdigunakan adalah 8 bit biner. 8 bitbiner dinamakan Byte.

Pada sistem bilangan biner,banyaknya kombinasi dihitungdengan 2n ≤ m, dimana n adalahjumlah bit, m adalah kombinasi yang

dapat diwakili, sehingga pada 8 bitbiner, dapat mewakili 28=256kombinasi maksimal.

Ketika mengetik kata “digital”simbol yang digunakan adalah 6huruf, saat komputer mengolahnya, 6huruf tersebut didigitalkan menjadi 6bytes, yang kemudian disimpan padaRAM komputer saat mengetik, dankemudian disimpan pada harddisk,jika disimpan. Tabel seperti dibawahmenunjukkan perbandingan ukuranunit data.

Tabel 1.2. Perbandingan Ukuran Unit Data

UNIT DEFINISI BYTE BIT

CONTOH APLIKASIBit (b) Binary Digit, 0

dan 11 1 On/Off, buka/tutup

Byte (B) 8 bit 1 8 Kode ASCII

Kilobyte(KB) 1.024 byte 1000 8000

Ukuran email biasa = 2 KB10 halaman dokumen= 10Megabyt

e(MB)

1.024 kilobyte1.048.576 byte

1 juta

8 juta

Floppy disks = 1,44 MBCDROM = 650 MBGigabyte

(GB)1.024 megabyte1.073.741.824 byte

1 milyar

8 milyar

Hard drive = 40 GB

Terrabyte(TB) 1.024 gigabyte 1

trilyun8 trilyun

Data yang dapat dikirimpada fiber optik selama 1 detik.

1.5. Sistem BilanganSistem bilangan yang paling

umum digunakan adalah sistembilangan desimal, biner, oktal, danheksadesimal. Sistem bilangandesimal merupakan sistem bilanganyang paling banyak digunakan olehmanusia karena berbagaikemudahannya untuk dipergunakansehari-hari. Sistem bilangan binermerupakan sistem bilangan yangpaling banyak digunakan dalam

sistem digital karena sistem bilanganini secara langsung dapat mewakililogika yang ada, sedangkan sistembilangan oktal dan heksadesimalbiasanya banyak digunakan dalamsistem digital untuk memperpendekpenyajian suatu bilangan yangtadinya disajikan dalam sistembilangan biner, sehingga lebih mudahdipahami atau dihafalkan.

2008 | Direktorat Pembinaan SMK 19

Page 28: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

Secara umum bilangan dapatdibagi menjadi beberapa kategori.Ditinjau dari segi koma desimal(point), bilangan dapat dibagi menjadibilangan bulat (integer number/fixed-point number) dan bilangan pecahan

(floating-point number). Dilihat daridari segi tanda, bilangan dapat dibagimenjadi bilangan tak bertanda(unsigned number) dan bilanganbertanda (signed number).

1.5.1. Bilangan DesimalSistem bilangan desimal disusun

oleh 10 angka atau lambang. Denganmenggunakan lambang-lambangtersebut sebagai digit pada sebuahbilangan, maka akan dapatmengekspresikan suatu kuantitas.Kesepuluh lambang tersebut adalah:

D = { 0, 1, 2, 3, 4, 5, 6,7, 8, 9 }

Sistem bilangan desimal disebutjuga sistem bilangan basis 10 atauradiks 10 karena mempunyai 10 digit.Sistem bilangan ini bersifat alamiahkarena pada kenyataannya manusiamempunyai 10 jari. Kata digit itusendiri diturunkan dari kata bahasaLatin finger.

Gambar 1.10. Bilangan desimal

Ciri bilangan yang menggunakansistem bilangan desimal adalahadanya tambahan subskrip des atau10 atau tambahan D di akhir suatubilangan.

357des = 35710=357D.

Namun karena bilangan desimalsudah menjadi bilangan yangdigunakan sehari-hari, subskriptersebut biasanya dihilangkan.Sistem bilangan desimal merupakansebuah sistem nilai posisi.

Bilangan357.

Pada bilangan tersebut, digit 3berarti 3 ratusan, 5 berarti 5 puluhan,dan 7 berarti 7 satuan. Sehingga, 3mempunyai arti paling besar di antaratiga digit yang ada. Digit ini bertindaksebagai digit paling berarti (MostSignificant Digit, MSD). Sedangkan 7mempunyai arti paling kecil di antaratiga digit yang ada dan disebut digitpaling tidak berarti (Least SignificantDigit, LSD).

Bilangan35,27

Bilangan ini mempunyai arti 3puluhan ditambah 5 satuan ditambah2 per sepuluhan. Koma desimalmemisahkan pangkat positif dari 10dengan pangkat negatifnya.

20 Direktorat Pembinaan SMK | 2008

Page 29: 01 bab 01 Dasar Komputer fachkunde OK

Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

35,2 = 3 X 101 + 5 X 100 +2 X 10‐1

Secara umum dapat dikatakan, nilaisuatu bilangan desimal merupakanpenjumlahan dari perkalian setiapdigit dengan nilai posisinya.

1.5.2. Bilangan BinerSistem sistem digital hanya

mengenal dua logika, yaitu 0 dan 1.Logika 0 biasanya mewakili kondisimati dan logika 1 mewakili kondisihidup. Pada sistem bilangan biner,hanya dikenal dua lambang, yaitu 0dan 1. Karena itu, sistem bilanganbiner paling sering digunakan untukmerepresentasikan kuantitas danmewakili keadaan dalam sistemdigital maupun sistem komputer.

Digit bilangan biner disebutbinary digit atau bit. Empat bitdinamakan nibble dan delapan bitdinamakan byte. Sejumlah bit yangdapat diproses komputer untukmewakili suatu karakter (dapatberupa huruf, angka atau lambangkhusus) dinamakan word. Sebuahkomputer dapat memproses datasatu word yang terdiri dari 4 sampai64 bit. Sebagai contoh, sebuahkomputer yang menggunakanmikroprosesor 32 bit dapatmenerima, memproses, menyimpandan mengirim data atau instruksidalam format 32 bit.

Pada komputer yang digunakanuntuk memproses karakter, makakarakter (yang meliputi huruf, angka,tanda baca dan karakter kontrol)tersebut harus diformat dalam bentuk

kode alfanumerik. Format kode ASCII(American Standard Code forInformation Interchange)menggunakan format data tujuh bituntuk mewakili semua karakter yangada termasuk tanda baca danpenanda kontrol. Denganmenggunakan format tujuh 7 bittersebut, maka ASCII dapatmenanpung 27 = 128 data. Sistembilangan biner merupakan sistembilangan basis dua. Pada sistembilangan ini hanya dikenal dualambang, yaitu:

B = { 0,1 }

Ciri suatu bilangan yangmenggunakan sistem bilangan bineradalah adanya tambahan subskripbin atau 2 atau tambahan huruf B diakhir suatu bilangan.

1010011bin = 10100112 =1010011B.

Bit paling kiri dari suatu bilanganbiner bertindak sebagai bit palingberarti (Most Significant Bit, MSB),sedangkan bit paling kanan bertindaksebagai bit paling tidak berarti (LeastSignificant Bit, LSB).

1.5.3. Bilangan OktalSistem bilangan oktal

merupakan sistem bilangan basisdelapan. Pada sistem bilangan initerdapat delapan lambang, yaitu:

O = { 0, 1, 2, 3, 4, 5, 6, 7 }

2008 | Direktorat Pembinaan SMK 21

Page 30: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

Ciri suatu bilangan menggunakansistem bilangan oktal adalah adanyatambahan subskrip okt atau 8 atau

tambahan huruf O di akhir suatubilangan.

1161okt = 11618= 1161O

1.5.4. Bilangan HeksadesimalSistem bilangan heksadesimal

merupakan sistem bilangan basisenambelas. Meskipun operasi padasistem digital dan komputer secarafisik dikerjakan secara biner, namununtuk merepresentasikan datamenggunakan format bilanganheksadesimal karena format ini lebihpraktis, mudah dibaca danmempunyai kemungkinan timbulkesalahan lebih kecil.

Penerapan format bilanganheksadesimal banyak digunakanpada penyajian lokasi memori,penyajian isi memori, kode instruksi

dan kode yang merepresentasikanalfanumerik dan karakternonnumerik. Pada sistem bilangan initerdapat enam belas lambang, yaitu:

H = { 0,1, 2, 3, 4, 5, 6, 7, 8, 9, A, B,C, D, E, F }

Ciri suatu bilangan menggunakansistem bilangan heksadesimal adalahadanya tambahan subskrip heks atau16 atau tambahan huruf H di akhirsuatu bilangan.

271heks = 27116 =271H.

1.5.5. Konversi BilanganSistem bilangan dapat dilakukan

konversi menjadi bilangan yangdiinginkan. Tujuan konversi ini adalahuntuk menjembatani antara manusiadan mesin dalam hal ini komputersupaya dapat berkomunikasi.Manusia lebih mudah memahamibilangan decimal karena memangbilangan decimal merupakanbilangan yang digunakan manusiasehari-hari, sedangkan komputerbekerja dengan bilangan biner.

Komputer yang bekerja denganbilangan biner tentunya harus bisa

disingkat baik penulisan maupunpembacaannya dalah hal inimenggunakan bilangan hexadecimalatau oktal. Karena komputer hanyapaham terhadap sat bilangan yaitubiner maka manusia dituntut untukbisa memahami bagaimana konversiantara bilangan-bilangan tersebut.Konversi bilangan biner ke desimaldilakukan dengan menjumlahkanhasil perkalian semua bit binerdengan beratnya.

22 Direktorat Pembinaan SMK | 2008

Page 31: 01 bab 01 Dasar Komputer fachkunde OK

Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

Konversi bilangan desimal bulatke biner dilakukan dengan membagibilangan desimal dengan 2 secaraberulang-ulang sehingga akan dapatdiketahui sisa tiap operasipembagian. Sisa yang dihasilkansetiap pembagian merupakan bityang didapat. Dengan caramengurutkan bit-bit tersebut daribawah keatas maka dapat diketahuihasil konversi yang telah dilakukan.

cara memisahkan antara bagian bulatdan bagian pecahannya. Konversibagian bulat dapat dilakukan sepertipada gambar diatas. Sedangkankonversi bagian pecahan dilakukandengan mengalikan pecahan tersebutdengan 2, kemudian bagian pecahandari hasil perkalian tersebut dikalikandengan 2. Langkah tersebut diulang-ulang sehingga mendapatkan hasilakhir 0. Bagian bulat dari setiap hasilperkalian merupakan bit yangdidapat.

Sebuah bilangan desimal realdapat pula dikonversi ke bilanganreal biner. Konversi dilakukan dengan

2008 | Direktorat Pembinaan SMK 23

Page 32: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

Konversi bilangan oktal kedesimal dilakukan denganmenjumlahkan hasil perkalian semuadigit oktal dengan beratnya.

Konversi bilangan bulat desimalke oktal dilakukan dengan membagisecara berulang-ulang suatu bilangandesimal dengan 8. Sisa setiappembagian merupakan digit oktalyang didapat.

Konversi bilangan desimal pecahanke oktal dilakukan dengan cara

hampir sama dengan konversibilangan desimal pecahan ke biner,yaitu dengan mengalikan suatubilangan desimal pecahan dengan 8.Bagian pecahan dari hasil perkalianini dikalikan dengan 8. Langkah inidiulang hingga didapat hasil akhir 0.Bagian bulat dari setiap hasilperkalian merupakan digit yangdidapat.

Konversi bilangan oktal ke binerlebih mudah dibandingkan dengankonversi bilangan oktal ke desimal.Satu digit oktal dikonversi ke 3 bitbiner.

Konversi bilangan biner ke oktallebih mudah dibandingkan konversibilangan desimal ke oktal. Untukbagian bulat, kelompokkan setiap tigabit biner dari paling kanan, kemudiankonversikan setiap kelompok ke satudigit oktal. Dan untuk bagianpecahan, kelompokkan setiap tiga bitbiner dari paling kiri, kemudiankonversikan setiap kelompok ke satudigit oktal. Proses ini merupakankebalikan dari proses konversibilangan oktal ke biner.

24 Direktorat Pembinaan SMK | 2008

Page 33: 01 bab 01 Dasar Komputer fachkunde OK

Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

Konversi bilangan heksadesimalke desimal dilakukan denganmenjumlahkan hasil perkalian semuadigit heksadesimal dengan beratnya.

Konversi bilangan desimal bulatke heksadesimal dilakukan denganmembagi secara berulang-ulangsuatu bilangan desimal dengan 16.Sisa setiap pembagian merupakandigit heksa-desimal yang didapat.

Konversi bilangan desimalpecahan ke heksadesimal dilakukandengan cara hampir sama dengankonversi bilangan desimal pecahanke biner, yaitu dengan mengalikansuatu bilangan desimal pecahandengan 16. Bagian pecahan darihasil perkalian ini dikalikan dengan16. Langkah ini diulang hinggadidapat hasil akhir 0. Bagian bulatdari setiap hasil perkalian merupakandigit yang didapat.

Konversi bilangan heksadesimalke biner lebih mudah dibandingkankonversi bilangan heksadesimal kedesimal. Satu digit heksadesimaldikonversi ke 4 bit.

2008 | Direktorat Pembinaan SMK 25

Page 34: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

271hex = 1001110001bin

Sehingga menjadi1 = 00017 = 01112 = 0010

1001110001bin

Konversi bilangan biner keheksadesimal lebih mudahdibandingkan konversi bilangandesimal ke heksadesimal. Untukbagian bulat, kelompokkan setiapempat bit biner dari paling kanan,kemudian konversikan setiapkelompok ke satu digit heksadesimal.

Pada bagian bilangan pecahan,kelompokkan setiap empat bit binerdari paling kiri, kemudian konversikansetiap kelompok ke satu digitheksadesimal. Proses ini merupakankebalikan dari proses konversibilangan heksadesimal ke biner.

1001110001bin =271hex

Jika dipecah menjadi0001 = 10111 = 70010 = 2

271hex

1.5.6. Data KarakterBeberapa aplikasi menggunakan

data yang bukan hanya bilangantetapi juga huruf dari alfabet dankarakter khusus lainnya. Datasemacam ini disebut dengan dataalfanumerik dan mungkin dapatditunjukkan dengan kode numerik.Jika bilangan-bilangan dimasukkandalam data, maka bilangan-bilangantersebut juga dapat ditunjukkandengan kode khusus.

Set karakter alfanumerik secarakhusus mencakup 26 huruf alfabet(termasuk huruf besar dan hurufkecil), angka dalam digit sepuluhdesimal, dan sejumlah simbol seperti+, =, *, $, …, dan !. Dua kode alfabetyang paling umum dipakai adalahASCII (American Standard Code for

Information Interchange) danEBCDIC (Extended Binary CodedDecimal Interchange Code). ASCIImerupakan kode 7-bit dan EBCDICberupa kode 8 bit. Jika suatukomputer menangani 8-bit (1-byte)kode lebih efisien, versi 8-bit, disebutdengan ASCII-8 juga telahdikembangkan.

Selain itu ada juga beberapakode spesial didalam penambahanset karakter alfanumerik. Kodesimpanan ini digunakan sebagaisignal komunikasi dalam aplikasidimana data transfer terjadi antarakomputer yang dihubungkan melaluibaris komunikasi. Misalnya, LF (linefeed) dan CR (carriage return)dihubungkan dengan printer, BEL

26 Direktorat Pembinaan SMK | 2008

Page 35: 01 bab 01 Dasar Komputer fachkunde OK

Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

digunakan untuk mengaktifitaskanbell; ACK (acknowledge), NAK(negative acknowledge), dan DLE(data link escape) berupa signal yangdapat diubah dalam bariskomunikasi.

Orang yang sudah cukup lamaberkecimpung di dunia komputer,pasti pernah bekerja dengan ‘kodeASCII’. Dan bagi yang bekerjadengan mesin-mesin mainframe IBM,pasti pernah menjumpai ‘kode

EBCDIC’. Di luar ASCII dan EBCDIC,besar kemungkinan anda paling tidakpernah mendengar istilah-istilah lainseperti berikut ini: ISO-8859-1, UCS-2, UTF-8, UTF-16, atau windows-1252. Kode-kode apakah itu? ASCII,EBCDIC, ISO-8859-X, UCS-2, UTF-X, dan windows-x merupakansebagian dari kumpulan character set(set karakter) yang ada di duniakomputer.

1.5.7. Kode BCDSebelum ASCII dan EBCDIC

berkembang terlebih dahuludikembangkan Binary Coded Decimal(BCD). Metode ini awalnyadigunakan pada komputer mainframeIBM. Pada grup ini karakter diwakili

oleh 64 - ( 26) lambang. Dengan kodeini, setiap huruf/angka diberikan kodeyang terdiri dari enam bit, dua untukzone dan empat untuk angka. HurufA sampai dengan I diberikan tanda11 pada tempat zone. Karena Aadalah huruf pertama dalamkelompok ini, maka kodenya adalah:0001, B sebagai huruf kedua dengankode: 0010, C adalah 0011 danseterusnya. Dengan perkataan lain,zone bit yang mempunyai formasi 11

harus juga disertakan pada kodelengkap masing-masing pada grupini.

Grup alfabetik kedua adalah Jhingga R, ditetapkan kode awalnya10, yang juga posisi masing-masinghuruf ditentukan oleh angkanyamasing-masing. Huruf S hingga Zdibentuk dengan menambahkanangka bit 0010 hingga 1001berurutan pada kode 01 dimana padagrup ini hanya ada delapan huruf.Angka-angka 0 hingga sembilandiberikan kode 00 di depannya diikutioleh angka itu sendiri dalam sistimbinary. Angka 0 (nol) harusdibedakan dengan tanda kosong(spasi) guna mempermudah carapenggunaan kode.

1.5.8. Kode EBCDICSistim Extended Binary Coded

Decimal Interchange Code (EBCDIC)merupakan set karakter yangmerupakan ciptaan dari IBM. Salahsatu penyebab IBM menggunakanset karakter di luar ASCII sebagaistandar pada komputer ciptaan IBMadalah karena EBCDIC lebih mudah

dikodekan pada punch card yangpada tahun 1960-an masih jamakdigunakan.

Penggunaan EBCDIC padamainframe IBM masih terbawahingga saat ini, walaupun punch cardsudah tidak digunakan lagi. Sepertihalnya ASCII, EBCDIC juga terdiri

2008 | Direktorat Pembinaan SMK 27

Page 36: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

dari 128 karakter yang masing-masing berukuran 7-bit. Bilamenggunakan ukuran 8-bit makakarakternya menjadi 256 atau 28.

Hampir semua karakter pada ASCIIjuga terdapat pada set karakterEBCDIC.

1.5.9. Kode ASCIIASCII (Sistem American

Standard Code for InformationInterchange) dan EBCDICmerupakan awal dari set karakterlainnya. ASCII merupakan setkarakter yang paling umumdigunakan hingga sekarang. Setkarakter ASCII terdiri dari 128 – (27)buah karakter yang masing-masingmemiliki lebar 7-bit atau gabungantujuh angka 0 dan 1, dari 0000000sampai dengan 1111111. Mengapa

7-bit? Karena komputer padaawalnya memiliki ukuran memoriyang sangat terbatas, dan 128karakter dianggap memadai untukmenampung semua huruf Latindengan tanda bacanya, danbeberapa karakter kontrol. ASCIItelah dibakukan oleh ANSI(American National StandardsInstitute) menjadi standar ANSI X3.4-1986.

1.6. Pemrograman KomputerKomputer sebuah mesin yang data per jam bekerja dan setelah

dirancang untuk mengikuti instruksi. ditekan ENTER maka komputerProgram komputer merupakan akan memasukan data ke dalamsebuah instruksi yang digunakan oleh memorykomputer untuk memecahkan 5. Komputer melakukan perkalianmasalah atau tugas-tugas yang antara jumlah jam dengan gajidiberikan padanya. Misalnya jika perjammenggunakan komputer untuk 6. Komputer menampilkan hasilmenghitung pembayaran pada perhitungan gaji pegawai yangseorang pegawai maka langkah- harus dibawa pulang.langkah yang dilakukan adalah Sekumpulan instruksi-instruksisebagai berikut:1. Menampilkan pesan pada layar “

berapa jam kamu bekerja?”2. Menunggu pengguna memasukan

data jam bekerja dan setelahditekan ENTER maka komputerakan memasukan data ke dalammemory.

3. Menampilkan pesan pada layar “berapa besarnya gaji tiapjamnya?”

4. Menunggu pengguna memasukan

tersebut diatas disebut denganalgoritma. Algoritma merupakankumpulan instruksi yang terdefinisilangkah demi langkah secara baikdengan tujuan untuk menyelesaikanmasalah. Catatan langkah-langkahini diurutkan secara sekensial. Dalamalgoritma langkah pertama harusdilakukan lebih dahulu sebelumlangkah kedua dan seterusnya.Langkah-langkah komputer tidak bisaterbalik. Pada langkah-langkah

28 Direktorat Pembinaan SMK | 2008

Page 37: 01 bab 01 Dasar Komputer fachkunde OK

Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

diatas, komputer diinstruksikan untukmenghitung besarnya gaji pegawai,untuk dapat bekerja maka langkah-langkah tersebut harus dikonversibahasa yang bisa diproses olehkomputer, karena kenyataannyaprosesor hanya dapat memprosesinstruksi yang ditulis dalam bahasamesin. Prosesor hanya mengetahuipenggunaan bilangan sebagaiperintah yang harus dilakukan, olehkarena itu algoritma tersebut harusdikodekan menjadi bahasa mesin.

Penulisan bahasa mesin secaralangsung akan sangat sulit danmembosankan. Supaya penulisan

bahasa pemrograman komputermenjadi lebih mudah makadigunakan bahasa aras tinggi yangbahasanya sudah mendekati bahasamanusia. Dengan bahasa inilahprogramer dapat menulis instruksi-instruksi yang akan dilakukan olehkomputer. Pemrograman denganmenggunakan C++ misalnya akanmenjadi lebih mudah dan C++ inilahyang akan mengkonversi bahasaprogram yang ditulis menjadi bahasamesin. Dibawah ini merupakanprogram sederhana yang ditulisdengan bahasa C++.

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? 10Berapa besar gaji tiap jamnya? 15000[enter]Kamu mendapatkan Gaji (Rp)150000

Dengan bahasa pemrograantersebut diatas, maka instruksikomputer dapat dibuat dengan

mudah. Seperti program diatas yangdigunakan untuk menghitung gajipegawai, jika diminta memasukan

2008 | Direktorat Pembinaan SMK 29

Page 38: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

data jumlah jam kerja kemudian diisi10 dan memasukan gaji tiap jamnya150000 maka komputer akan

menghitung dengan mengalikan datatersebut sehingga data keluaran akanmuncul 150000.

1.7. Bahasa pemrogramanBahasa pemrograman adalah

notasi yang digunakan untuk menulisprogram (komputer). Bahasa inidibagi menjadi tiga tingkatan yaitubahasa mesin, bahasa tingkat rendahdan bahasa tingkat tinggi.

Bahasa mesin (machinelanguage) berupa microinstructionatau hardwire. Programnya sangatpanjang dan sulit dipahami. Disamping itu sangat tergantung padaarsitektur mesin. Keunggulannyaadalah prosesnya sangat cepat dantidak perlu interpreter ataupenterjemah Bahasa tingkat rendah(low level language) berupamacroinstruction (assembly). Sepertihalnya bahasa mesin, bahasa tingkatrendah tergantung pada arsitekturmesin. Programnya panjang dan sulitdipahami walaupun prosesnya cepat.Jenis bahasa tingkat ini perlupenterjemah berupa assembler.

Bahasa tingkat tinggi (high levellanguage) menyerupai strukturbahasa manusia sehingga mudah

dipahami. Bahasa ini tidak tergantungpada arsitektur mesin tetapimemerlukan penterjemah berupacompiler atau interpreter.

Secara garis besar ada duakategori bahasa pemrograman yaitu:bahasa pemrograman aras rendah(low level) dan bahasa pemrogramanlevel tinggi (high level). Bahasapemrograman aras rendahcenderung mendekati level komputer,ini artinya bahwa bahasanya ditulismendekati atau sama dengan bahasamesin komputer, hal ini sangat sulitditulis karena bahasanya jauh daribahasa manusia yang digunakansehari-hari.

Bahasa pemrograman yang lebihmudah dipelajari adalah bahasapemrograman aras tinggi. Disebutaras tinggi karena bahasanyamendekati level bahasa manusiasehingga lebih mudah dipahami.Gambar dibawah ini merupakangambaran antara bahasa aras tinggidengan aras rendah.

30 Direktorat Pembinaan SMK | 2008

Page 39: 01 bab 01 Dasar Komputer fachkunde OK

Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

Gambar 1.11. Bahasa aras tinggi

Gambar 1.12. Bahasa aras rendah

2008 | Direktorat Pembinaan SMK 31

Page 40: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

Dengan gambar tersebut diatas,maka dapat dilihat bahwa menulisprogram dengan bahasa aras tinggiakan lebih mudah dan dapatdipahami dibandingkan denganbahasa aras rendah karenabahasanya ditulis dengan kode

numerik ataupun dengan sintak yangsangat pendek sehingga sulit sekalidipahami. Untuk lebih jelasnyabeberapa jenis bahasa pemrogramanaras tinggi yang digunakan dapatdilihat pada tabel dibawah ini:

Tabel 1.3. bahasa pemrograman aras tinggi

NAMA PENJELASANBASI

CBeginners All‐purpose Symbolic Instruction Code, bahasa pemrogramanyang biasa digunakan untuk merancang program sederhana padaFORTRA

NFormula Translator, Bahasa pemrograman yang dirancang untukmenyelesaikan algoritma matematika yang kompleksCOBO

LCommon Business‐Oriented Language. Bahasa pemrograman yangdirancang pada aplikasi bisnisPasc

alPemrograman terstruktur, bersifat umum, dan biasanya bahasapemrogram ini banyak diajarkanC Pemrogram terstruktur, bersifat umum. Bahasa ini dikembangkan olehbell laboratories. Bahasa C ini dapat digunakan sebagai bahasa aras tinggiC++ Dasar pengembangan C. C++ dapat digunakan sebagai bahasa berorientasiobjek, yang tidak ditemukan pada bahasa C. Bahasa ini juga dikembangkanC# C# atau “C sharp”. Bahasa ini ditemukan oleh microsoft untukmengembangkan aplikasi pada aplikasi microsoft .NETJava Bahasa ini merupakan bahasa berorientasi objek yang dikembangkan olehSum Microsistem. Dengan java memungkinkan untuk pengembanganVISUAL

BASICBahasa pemrograman microsoft dimana bahasa ini bertujuan untukpengembangan perangkat lunak yang dapat memudahkan programmer dalam membuat aplikasi

Dalam memilih bahasapemrograman harus memperhatikanhal-hal yang dimiliki oleh bahasatersebut, dan tentunya setiap bahasapasti mempunyai kekurangan dankelebihan yang harus kitapertimbangan dalam memilihnya.

Pada bahasa C++ mempunyaikemampuan pada bahasa aras tinggimaupun bahasa aras rendah. BahasaC++ basisnya adalah pengembangan

dari bahasa C, selain itu C++ jugamendukung bahasa pemrogramanberorientasi objek. Sebenarnyabahasa ini ari awal dikembangkanuntuk menulis program sistemoperasi sebuah komputer maupuncompiler. Karena bahasa C++mengembangkan C sebelumnyamaka kemampuannya C++ diperbaikidan ditingkatkan daripada bahasa C.

32 Direktorat Pembinaan SMK | 2008

Page 41: 01 bab 01 Dasar Komputer fachkunde OK

Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

C++ sangat populer, tidak hanyakarena gabungan antara aras tinggidan aras rendah, tetapi juga karenasifat portabilitas yang dimilikinya, iniartinya C++ dapat ditulis pada satujenis komputer dan dapat dijalankanpada jenis komputer lain yangberbeda. Hal ini biasanyamembutuhkan compiler ulang padajenis sistem komputer yang akandigunakan, tetapi program yangditulis tersebut tidak ada perubahan.Salah satu sistem operasi yang ditulisdengan menggunakan C++ adalah X-Window sistem dan sistem operasiyang dimiliki oleh Macintosh.

Ketika progam C++ ditulis, haltersebut harus disesuaikan dengankomputer dan disimpan dalam bentukfile. Editor text yang digunakanseperti halnya program pengolahkata. Melalui editor ini, statementditulis oleh seorang programmeryang disebut dengan kode sumber(source code) dan file yang disimpandisebut dengan file sumber (sourcefile). Setelah kode sumber disimpandalam bentuk file maka prosestranslasi (terjemahan) menujubahasa mesin dapat dimulai. Selamafase ini diproses, sebuah programyang dinamakan dengan preprosesormembaca kode sumber.

Preprosesor mencari bariskhusus yang terdapat simbol. Barisini terdiri dari instruksi yangmenyebabkan preprosesormengubah kode sumber dalambeberapa langkah atau perubahanyang dikehendaki oleh programmer.Selama terjadi phase lanjut, compilermelangkah melalui preproses kodesumber. Translasi tiap instruksi kodesumber menjadi instruksi bahasamesin yang sesuai. Proses ini akandibuka oleh beberapa kesalahansintak yang mungkin terjadi pada

program. Kesalahan sintak adalahpenggunaan kata yag salah atautidak sesuai, atau penggunaanoperator, tanda baca, atau elemenbahasa yang lainnya. Jika programtelah terbebas dari kesalahan sintakyang terjadi, maka compiler akanmenyimpan instruksi bahasa mesinyang disebut dengan kode objeck(objeck code) dalam bentuk objectfile

Meskipun sebuah objeck fileterdiri dari instruksi bahasa mesin,tetapi hal tersebut bukan sebuahprogram yang lengkap. C++ telahmenyediakan berbagai kelengkapandengan library yang kodenya telahada dan biasanya atau kadang-kadang digunakan untukmengerjakan tugas-tugas yang sulit.Sebagai contoh saja librarydigunakan untuk menangani kodeperangkat keras khusus sepertimenampilkan pada layar, menanganimasukan dari keyboard. Selain itujuga menyediakan routin fungsimatematika seperti operasi kwadrat,perakaran bilangan. Kumpulan kodeini disebut dengan run-time library.

Hampir semua programmenggunakan bagian tersebut.Ketika compiler membangkitkan fileobject, meskipun hal tersebut tidaktermasuk dalam code mesin untuksetiap routin run-time library yangmungkin digunakan oleh seorangprogrammer. Selama phase akhirdari proses translasi, program lainyang disebut dengan linkermengkombinasikan file object denganroutin-routin library yang penting.Lingker akan menghentian langkahsetelah file executable telah selesaidibuat. File executable terdiri dariinstruksi bahasa mesin atau kodeinstruksi dan siap dijalankan padasebuah komputer. Gambar dibawah

2008 | Direktorat Pembinaan SMK 33

Page 42: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

ini menunjukan proses translasi dari file sumber menjadi file executable.

Seluruh proses pada gambartersebut dilakukan oleh preprosesor,

compiler dan linker yang hal tersebut dilakukan dengan satu aksi tunggal.

Gambar 1.13. proses translasi dari file sumber menjadi file executable

1.8. Penulisan Bahasa pemrogramanSecara umum, bahasa

pemrograman yang berbasiskanprosedur terdiri dari blok atau sub

program. Yang memiliki dua bagianutama yaitu: Bagian deklarasi danBagian Statement.

34 Direktorat Pembinaan SMK | 2008

Page 43: 01 bab 01 Dasar Komputer fachkunde OK

Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

1.8.1. Bagian DeklarasiBagian deklarasi merupakan

bagian program untuk mendefinisikantipe data suatu variable, konstanta,serta fungsi dan prosedur yang akandigunakan pada program. Selain itu,bagian deklarasi dapat juga

digunakan untuk memberi nilai awalsuatu variable. Dengan kata lain,deklarasi digunakan untukmemperkenalkan suatu nama kepadaCompiler program. Berikut contohdeklarasi:

a. Deklarasi Variable:Perhatikan deklarasi antara dua

buah program yang berbeda.Dibawah ini merupakan deklarasiprogram yang digunakan olehbahasa pascal dan bahasa C.perhatikan perbedaan antara duabahasa tersebut.

Bahasa PascalVar I,i2 :Integer;

s : String;

Bahasa CInt 1,12; Char s[100];

Untuk mendeklarasikan variable pada Pascal, digunakan reserved

word var, kemudian diikuti dengannama variable (identifier) yang ingindigunakan, dan kemudian tipe datadari variable tersebut. Sedangkanpada C, deklarasi diawali dengan tipedata variable baru diikuti dengannama variable (identifier). Suatuidentifier harus diawali oleh karakterbukan angka, tetapi tidak bolehmengandung karakter khusus seperti* , - + / \ = < > . ? & dan sebagainya.Pada bahasa Pascal, identifier tidakbersifat case sensitive, maksudnya,huruf besar ataupun huruf kecildianggap sama. Sebaliknya padaBahasa C, identifier bersifat casesensitive, sehingga variable s dan Sakan dianggap dua identifier yangberbeda.

b. Deklarasi Konstanta:Dalam melakukan deklarasi nilai

konstanta atau nilai tetap, dilakukandengan cara menulis const.perhatikan contoh penulisan programdibawah ini:

const phi =3.14;

Konstanta yaitu nilai yang tetap. Jadijika mengacu pada contoh di atas,maka nilai phi tidak dapat diubah-ubah dan akan selalu 3.14

c. Deklarasi Tipe Data.Perhatikan deklarasi antara

kedua program antara C dan pascalseperti terlihat dibawah ini:

2008 | Direktorat Pembinaan SMK 35

Page 44: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

Bahasa Cstruct datasiswa {

char nama[30]; char alamat[30]; char telp[20];

}

enum hari = (senin,selasa,rabu,kamis,jumat,Sabtu,mingu);

Bahasa PascalType 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 sederhanaTipe data sederhana merupakan

tipe data yang paling kecil, yanghanya melibatkan satu item data,misalnya tipe data integer, string,real, Boolean, dan sebagainya. Kitadapat juga mendefinisikan sendiri tipedata ini. Tipe data yang didefinisikansendiri tersebut diistilahkanenumerated data type (pada contohadalah type hari).

b) Tipe Data terstrukturTipe data terstruktur merupakan

tipe data yang terdiri dari beberapaitem data. Bentuk dari tipe data inidapat berupa array (terdiri dari item-item yang memiliki tipe data yangsama) ataupun record (terdiri dariitem-item yang boleh memiliki tipe

data yang berbeda). Pada contoh diatas, DataSiswa termasuk tipe dataterstruktur.

c) Tipe Data PointerTipe data pointer digunakan

untuk menunjuk pada alamat memorysuatu data yang lain. Jadi tipe datapointer pada dasarnya tidakmenyimpan nilai data secaralangsung, melainkan hanyamenyimpan alamat dimana databerada. Untuk contoh pada bahasaPascal, TDataSiswa merupakan tipedata pointer. Pada Bahasa C, untukmendeklarasikan pointer untuk tipedata DataSiswa pada variable yangbernama TDataSiswa, dapatdituliskan sebagai berikut:

DataSiswa*TDataSiswa;

d. Deklarasi Procedure/Function: Untuk membahas masalah

procedure pada bahasa Pascal danfunsi pada C Perhatikan potonganprogram dibawah ini:

36 Direktorat Pembinaan SMK | 2008

Page 45: 01 bab 01 Dasar Komputer fachkunde OK

Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

Pada bahasa pascalprocedure cetak (kal: string);function Tambah (a,b: integer): Integer;

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

Jika melihat pada contohdeklarasi pada bahasa C, mungkintimbul pertanyaan apa beda prosedurdengan fungsi? Pada Bahasa C,semua sub program dianggap fungsi,berbeda dengan Pascal yangmenyertakan reserved wordprocedure dan function untukmembedakan antara keduanya.Sebenarnya, perbedaan utamaantara prosedur dan fungsi yaitu:prosedur adalah fungsi yang tidak

mengembalikan suatu nilai.Sebaliknya fungsi adalah suatuprosedur yang mengembalikan nilai.

Apabila mengacu pada contoh diatas, maka fungsi tambah akanmengembalikan suatu nilai yangbertipe integer, sedangkan prosedurCetak tidak mengembalikan nilai apa-apa. Pada Bahasa C, procedurepada dasarnya adalah function yangmengembalikan void alias tidakmengembalikan nilai apa-apa.

1.8.2. StatementBagian statement merupakan

bagian program yang berisi perintahyang akan dieksekusi /dijalankan.Pada bahasa Pascal, bagianstatement selalu diawali denganreserved word begin dan end.Apabila blok statement adalah blokutama program, maka reserved wordend harus diakhiri dengan tandatitik(.), sebaliknya jika blok statement

bukan blok utama program makareserved word end diakhiri dengantanda titik koma (;). Sebaliknya padabahasa C, dimulai dari deklarasivariable hingga akhir statementdiawali dan diakhiri dengan tandakurung kurawal { dan }. Berikutadalah contoh potongan kode untukimplementasi menghitung luaslingkaran 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

Page 46: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

Berikut adalah penjelasan baris demibaris dari potongan kode Bahasa Cuntuk contoh di atas.1. #include <stdio.h>

Baris di awal program inimengincludekan header librarystdio ke dalam program. Sepertihalnya Pascal, Bahasa C jugamemiliki cukup banyak librarystandar yang dapat digunakan.

2. void main()Baris kedua ini menandakan awaldari blok statement utama. Padabahasa C, blok program utamamerupakan suatu fungsi/subprogram yang diberi nama ‘main’.

3. { const phi = 3.14;Pada awal baris ketiga ini,terdapat tanda kurung kurawalsebagai pembuka blok statement.Kemudian reserved word constdigunakan untuk mendeklarasikankonstanta phi.

4. float diameter, radius, Luas;Baris keempat ini digunakan untukmendeklarasikan variablediameter, radius, dan luas dengantipe data float (bilangan pecahan)

5. scanf(“%f”, &diameter);Baris kelima berisi perintah yangberfungsi untuk meminta inputbertipe float dari user, dankemudian nilainya disimpan kevariable diameter.

6. radius = diameter / 2.0;7. Luas = phi * radius * radius;

Baris keenam dan ketujuhmelakukan operasi matematikauntuk menghitung luas lingkaran.

8. printf(“%f”,Luas);Baris ini digunakan untukmencetak isi variable luas yangbertipe float.

9. }Baris ini menandakan akhir dariblok statement.

1.9. Element Bahasa PemrogramanKetika kita mempelajari suatu

bahasa pemrograman, kita akanmenjumpai element-element yangpada dasarnya serupa antara satubahasa dengan bahasa yang lain.Hal itu dikarenakan element-elementtersebut merupakan bagian dari tatabahasa pemrograman yangbersangkutan. Berikut adalahelement-element pada bahasapemrograman: Aturan Leksikal, Tipedata, Expression, Statement, sertaFunction dan Procedure.

Aturan leksikal yaitu aturan yangdigunakan dalam membentuk suatudeklarasi, definisi, maupun statementhingga menjadi satu program yang

utuh. Aturan ini meliputi beberapaelement antara lain:a. Tokenb. Komentarc. Identifierd. Keywords (Reserved Words)e. Operator

Dibawah ini akan dibahas satu per satu element-element tersebut diatas.a. Token

Token yaitu element terkecilpada bahasa pemrograman yangmemiliki arti penting bagi compiler.Yang termasuk token antara lain:identifier, keywords(reserved words),operator, dan sebagainya. Tokenyang satu dengan yang lain

38 Direktorat Pembinaan SMK | 2008

Page 47: 01 bab 01 Dasar Komputer fachkunde OK

Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

dipisahkan dengan satu atau lebih spasi, tab, baris baru, atau komentar.

b. KomentarKomentar yaitu teks (kumpulan

karakter) yang diabaikan olehCompiler. Komentar sangat bergunauntuk memberi catatan mengenaibagian program tertentu sebagaireferensi baik bagi programmer itu

sendiri maupun orang lain yangmembaca kode program tersebut.

Pada bahasa Pascal, teks yangberada di antara kurung kurawalpembuka {dan kurung kurawal tutup }akan dianggap sebagai komentar.Selain itu, dapat pula menggunakantanda (* sebagai pembuka komentar,dan tanda *) sebagai penutup.Perhatikan contoh program dibawah:

begin{ Cetak hello World Oleh Saya}

Writeln (‘Hello World’);end.

Pada bahasa C, teks yang berada diantara tanda /* dan tanda */ akandianggap sebagai komentar. Danuntuk teks yang ada setelah tanda //

juga akan dianggap komentar satubaris. Berikut adalah contohpenggunaan komentar pada bahasaC:

void main() {// Cetak hello World// Oleh Sayaprintf(“Hello World”);}

c. IdentifierIdentifier merupakan kumpulan

karakter yang digunakan sebagaipenanda untuk nama variable, namatipe data, fungsi, prosedur, dansebagainya. Aturan penulisanidentifier pada bahasa Pascal danbahasa C dapat dikatakan serupa.Yaitu: suatu identifier harus diawalioleh karakter non angka sebagaiberikut:

_a b c d e f g h i j k l m n o p q r s tu v w x y z

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

Selanjutnya boleh menggunakankarakter angka ( 0 1 2 3 4 5 6 7 8 9 )maupun karakter non angka tersebutdi atas, namun tidak bolehmenggunakan karakter khususseperti + - * / ? ! { } [ ] dansebagainya. Berikut adalah contoh-contoh identifier yang benar maupunsalah.

2008 | Direktorat Pembinaan SMK 39

Page 48: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

Tabel 1.4. Identifier benar maupun salah

_nama Benarno_Telpon Benarbilangan2 Benar4data Salah, karena diawali oleh karakter angka: 4datateks? Salah, karena mengandung karakter

khusus/special: Teks?Catatan yang perlu diingat,

identifier pada bahasa Pascal bersifatcase insensitive (huruf besar danhuruf kecil dianggap sama),sedangkan pada bahasa C, identifierbersifat case sensitive (huruf besardan huruf kecil dibedakan). Sebagaicontoh, identifier No_Telpon danno_telpon pada bahasa Pascaldianggap sama, sedangkan padabahasa C, dianggap sebagai duaidentifier yang berbeda.

d. Keywords (Reserved Words) Keywords atau Reserved words

merupakan kata-kata yang telahada/didefinisikan oleh bahasapemrograman yang bersangkutan.Kata-kata tersebut telah memilikidefinisi yang sudah tetap dan tidakdapat diubah. Karena telah memilikidefinisi tertentu, maka kata-kata initidak dapat digunakan sebagaiidentifier.Pada bahasa Pascal, yangtermasuk reserved words antara lain:

and array asm begin case const divdo downto else end file for forwar

dfunction goto if In label mod nilnot of or packed procedure program recordrepeatuntil

setuses

stringvar

thenwhile

towith

type unit

Pada bahasa C, yang termasuk reserved words antara lain:break case char const continue default dodouble else enum float for goto ifinline int long return short signed sizeofstaticunsigned

structwhile

switch type def union void

1.10. Bahasa C++Bahasa C++ diciptakan oleh

Bjarne Stroustrup di AT&T BellLaboratories awal tahun 1980-anberdasarkan C ANSI (AmericanNational Standard Institute). Pertamakali, prototype C++ muncul sebagai Cyang dipercanggih dengan fasilitas

kelas. Bahasa tersebut disebut Cdengan kelas ( C wih class). Selamatahun 1983-1984, C dengan kelasdisempurnakan dengan menambahfasilitas pembeban lebihan operatordan fungsi yang kemudianmelahirkan apa yang disebut C++.

40 Direktorat Pembinaan SMK | 2008

Page 49: 01 bab 01 Dasar Komputer fachkunde OK

Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

Symbol ++ merupakan operator Cuntuk operasi penaikan, munculuntuk menunjukkan bahwa bahasabaru ini merupakan versi yang lebihcanggih dari C.

Borland International meriliscompiler Borland C++ dan TurboC++. Kedua compiler tersebut sama-sama dapat digunakan untukmlakukan kompilasi kode C++.

Bedanya, Borland C++ selaindapat digunakan dibawah lingkunganDOS, juga dapat digunakan untukpemrograman Windows. SelainBorland International, beberapaperusahaan lain juga merilis compilerC++, seperti Topspeed C++ danZortech C++. Perhatikan danbandingkan program dibawah ini:

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 untukmendukung pemrogramanberorientasi pada objek (Object

Oriented Pragramming/OOP) yangtidak dimiliki C. sementara Cmerupakan bahasa pemrograman

2008 | Direktorat Pembinaan SMK 41

Page 50: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

terbaik dilingkungannya, bahasa initidak memiliki kemampuan OOP.Reputasi C tidak diragukan lagidalam menghasilkan program .EXEberukuran kecil, eksekusi yang cepat,antarmuka (interfacing) yangsederhana dengan bahasa lain danfleksibilitas pemrograman. Apa yangmembuat C tampak sukar dipelajarimungkin karena tiadanyapemeriksaan tipe. Sebagai contoh,dapat mencampur bilangan bulatdengan string untuk menghasilkankarakter. Namun, justru dsitu letakfleksibilitas C, dapat mengolah dataC sebebas mengolah data dalambahasa assembly.

Dibandingkan compiler C++ yanglain, Borland C++ memilikikeunggulan terutama dalam halkecepatan dan efisiensi kompilasi.Disamping itu, Borland C++mendukung beberapa sistem operasiyaitu DOS, Windows 16bit (Window3.0) dan windows 32 bit (WindowsNT). Meskipun demikian compilerBorland C++ juga memilikikelemahan bila dibandingkancompiler C++ yang lain, misalnya :pemrograman dengan Borland C++terutama yang menyangkut tampilanjauh lebih sulit daripadapemrograman dengan MicrosoftVisual C++.

1.11. Struktur Bahasa C++Program C maupun C++ selalu

tersusun dari 4 (empat) bagianutama, yaitu : bagian komentar yangditandai dengan simbol // danpasangan /* … */, bagian pengarahcompiler yang ditandai dengansymbol #, bagian deklarasi danbagian definisi

1.11.1. Bagian KomentarProgram yang baik pada

umumnya diberi komentar yang akan

membantu orang lain maupunpembuat program itu untukmemahami program yang dibuat.Dalam C atau C++ setiap tulisanyang diapit oleh symbol /* … */ atausetiap baris yang dimulai dengansymbol // dianggap komentar.

Bahasa C++ tidak mengizinkankomentar bersarang (nestedcomment), namun Borland C++ lebihfleksibel dalam hal ini.

Program 1.5#include <iostream>

int main(){

double jam, besar, bayar; // tipe data doublecout << "Berapa Jam Kamu bekerja? "; // tampilkan kata tersebutcin >> jam; // masukan jamcout << "Berapa besar gaji tiap jamnya? "; // tampilkan kata tersebutcin >> besar; // masukan besar gaji tiap jam bayar = jam * besar; 42 Direktorat Pembinaan SMK | 2008

Page 51: 01 bab 01 Dasar Komputer fachkunde OK

Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

}

Pada Borland C++ dapatmenggunakan komentar bersarangasalkan opsi cek Nested comments

pada menu Options/Compiler/Sourcedipilih.

1.11.2. Bagian Pengarah KompilerSupaya 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-prosesor, disebut juga pengarahcompiler karena berfungsi mengaturproses kompilasi. iostream.hmerupakan file program yangmengandung deklarasi kelaskelasyang diperlukan oleh objek cout. File-file dengan ekstensi .h yang berisideklarasi fungsi-fungsi standar C ini,disebut secara umum sebagai fileheader.

Beberapa pengarah compilerantara lain: # define, # include, # if,# else, # elif, # endif, # ifdef, # ifndef

a. Pengarah kompiler # defineUntuk mendefinisikan suatu

pengenal / konstanta yang nantinyaakan digantikan oleh praprosesorsaat program dikompilasi. Perhatikancontoh Program dibawah ini:

# define SIZE 30

int array [SIZE] ;for (register int i = 0 ; i < SIZE ; i++){

cout << array [ i ] ;}

b. Pengarah Kompiler # IncludeBerfungsi membaca file program

tertentu dan mengikutsertakan filetersebut dalam proses kompilasi.

Nama file yang dimaksud harus diapitsymbol ‘ < ‘ dan ‘ > ‘ atau tanda kutipdua ( “ … “).

2008 | Direktorat Pembinaan SMK 43

Page 52: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Dasar-dasar Pemrograman Komputer

c. Pengarah Kompiler # If, # Else, # Elif, # EndifDigunakan untuk memilih bagian

program yang akan dikompilasi.Kompilasi cari ini disebut kompilasi

bersyarat dan program yang baik biasanya memanfaatkan teknik ini.

d. Pengarah Kompiler # Ifdef, # IfndefDigunakan juga dalam kompilasi

bersyarat. # Ifdef dapat dibaca: ‘jikadidefinisikan’ dan # ifndef dapatdibaca: ‘jika tidak didefinisikan’.

Pengarah compiler ini seringdigunakan untuk menandai bahwasuatu file sudah diikutsertakan dalamkompilasi.

1.11.3. Deklarasi Dan DefinisiSemua program C pada

dasarnya tersusun dari rangkaianpemanggilan fungsi yang bekerjaatas sekelompok data. Selainpemanggilan fungsi, program Cmengandung komponen lain yangdisebut statement.

Statement C ada dua, yaitu :statement yang tidak dapatdieksekusi / non executable ( biladikompilasi tidak menghasilkan kode

objek dan biasanya digunakan untukmengatur alur program), danstatement yang dapat dieksekusi /executable (bila dikompilasi akanmenghasilkan kode objek).

Setiap pemanggilan fungsimaupun statement executable dalamC harus diakhiri dengan tanda titikkoma (;). Perhatikan Contoh programC++:

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++diatas, return merupakan contoh

statement executable yangmenginstruksikan agar suatu fungsi

44 Direktorat Pembinaan SMK | 2008

Page 53: 01 bab 01 Dasar Komputer fachkunde OK

Dasar-dasar Pemrograman Komputer Bahasa Pemrorgraman

mengembalikan nilai balik tertentu.Contoh statement non executableadalah: If, else, dan while. Main ()merupakan contoh fungsi, sedangkanpesan adalah contoh data. Baik datamaupun fungsi harus dideklarasikan.Data perlu dideklarasikan agarcompiler tahu berapa byte memori

yang harus disediakan untuk datayang bersangkutan, sedangkanfungsi perlu dideklarasikan agarcompiler dapat memeriksa ketepatanpemanggilan fungsi yangbersangkutan. Deklarasi fungsi seringdisebut pula prototype fungsi.

1.12. Input Dan OutputDi ANSI C, operasi input dan

output dilakukan denganmenggunakan fungsi-fungsi yang adadi header file stdio.h. contohnyauntuk input dan output ke layermonitor digunakan perintah sepertiprintf, scanf, putch, dan sebagainya.Instruksi input dan output ke filedigunakan perintah seperti fread,fwrite, fputc, dan sebagainya.

Bahasa C++ mempunyai teknikinput dan output yang baru, yaitu:menggunakan stream. Header fileuntuk input dan output stream adalahiostream.h dan beberapa file lain,Bentuk umum operator output adalahsebagai berikut:

cout <<ekspresi ;

Bentuk umum operator Input adalahsebagai berikut:

cin >>variable ;

seperti strstrea.h, fstream.h, danconstrea.h.

Stream adalah suatu logikadevice (peralatan logika) yangmenghasilkan dan menerimainformasi atau sebagai tempat yangdigunakan untuk menampungkeluaran dan menampung alirandata. Stream adalah nama umumuntuk menampung aliran data(contoh: file, keyboard, mouse),maupun untuk keluaran (contoh:layer, printer). Dalam bahasa C++,input berarti membaca dari streamdan output berarti menulis ke stream.

Dalam C++, menggunakanescape sequences untukmerepresentasikan suatu karakteryang tidak terdapat dalam tradisionalsimbol. Beberapa diantaranya :

\ n : linefeed / baris baru\ b : back space\ “ : 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

Page 54: 01 bab 01 Dasar Komputer fachkunde OK

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 LatihanJawablah soal latihan dibawah ini dengan baik dan benar.1. Sebutkan bagian-bagian perangkat keras komputer2. Sebutkan lapisan perangkat lunak komputer personal3. Sebutkan berbagai macam memori yang digunakan pada komputer4. Apa yang dimaksud dengan piranti Input dan output (I/O).5. Jelaskan sistem bilangan yang digunakan oleh komputer6. Jelaskan proses translasi dari file sumber menjadi file executable7. Jelaskan struktur bahasa C++8. Sebutkan perbedan bahasa C dan C++

46 Direktorat Pembinaan SMK | 2008

Page 55: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

BAB 2BAHASA DAN ALGORITMA PEMROGRAMAN

2.1. Bahasa Pemrograman2.2. Compiler dan Intepreter2.3. Tipe Pemrograman2.4. Algoritma2.5. Ciri Algoritma2.6. Penerapan Algoritma2.7. Notasi Algoritma2.8. Kalimat deskriptif pada Algoritma2.9. Flow chart2.10. Pseudo code2.11. Penerjemahan ke kode sumber2.12. Soal Latihan

2.1. Bahasa pemrogramanBahasa atau dalam bahasa

inggris language adalah suatu sistimuntuk berkomunikasi. Bahasa tertulismenggunakan simbol (yaitu huruf)untuk membentuk kata. Dalam ilmukomputer,bahasa manusia disebutbahasa alamiah (natural languages),dimana komputer tidak bisamemahaminya, sehingga diperlukansuatu bahasa komputer. Komputermengerjakan transformasi databerdasarkan kumpulan perintah -program - yang telah dibuat olehpemrogram. Kumpulan perintah iniharus dimengerti oleh komputer,berstruktur tertentu (syntax) danbermakna.

Bahasa pemrogramanmerupakan notasi untuk memberikansecara tepat program komputer.

Berbeda dengan bahasa alamiah,mis. Bahasa Indonesia, Inggris dsb.yang merupakan bahasaalamiah(natural language), sintaksdan semantik bahasa pemrograman(komputer) ditentukan secara kaku,sehingga bahasa pemrograman jugadisebut sebagai bahasa formal(formal language). Jadi, dalambahasa pemrograman yangdigunakan sebagai alat komunikasiuntuk memberikan perintah kepadakomputer tidak berlaku kebebasanberekspresi seperti laiknya dalambahasa alamiah.

Pemrograman dalam pengertianluas meliputi seluruh kegiatan yangtercakup dalam pembuatan program,termasuk analisis kebutuhan(requirement's analysis) dankeseluruhan tahapan dalamperencanaan (planning) ,

2008 | Direktorat Pembinaan SMK 47

Page 56: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

perancangan (design) danpewujudannya (implementation).Dalam pengertian yang lebih sempit,pemrograman merupakanpengkodean (coding atau programwriting = penulisan program) danpengujiannya (testing) berdasarkanrancangan tertentu.

Pemahaman yang lebih sempitini sering digunakan dalampembuatan program-program terapankomersial yang membedakan antarasystem analyst yang bertanggungjawab dalam menganalisakebutuhan, perencanaan danperancangan program denganpemrogram (programmer) yangbertugas membuat kode program danmenguji kebenaran program.Generasi bahasa pemrograman: Generasi I: machine language Generasi II: assembly language :

Asssembler Generasi III: high-level

programming language: C,PASCAL, dan sebagainya.

Generasi IV: 4 GL (fourth- generation language): SQL

2.1.1. Bahasa Tingkat RendahMerupakan bahasa assembly

atau bahasa mesin. Bahasa ini lebihdekat ke mesin (hardware), dimanapada high-level programminglanguages, suatu bahasa yang sudahdekat pada bahasa manusia. Padabahasa ini akan lebih cepat dipahamioleh programmer karena sifatnyayang dekat dengan bahasa manusia

2.1.2. Bahasa MesinBahasa mesin merupakan

representasi tertulis machine code

(kode mesin), yaitu kode operasisuatu mesin tertentu. Bahasa inibersifat khusus untuk mesin tertentudan "dimengerti" langsung olehmesin, sehingga pelaksanaan prosessangat cepat. Bahasa mesinkelompok komputer tertentuberlainan dengan bahasa mesinkelompok komputer yang lain.

Abstraksi bahasa ini adalahkumpulan kombinasi kode biner "0"dan "1" yang sangat tidak alamiahbagi kebanyakan orang - kecualiinsinyur pembuat mesin komputer.Karena tidak alamiah bagikebanyakan orang, bahasa mesinjuga disebut bahasa tingkat rendah.

2.1.3. Bahasa AssemblyBahasa rakitan (assembly

language) merupakan notasi untukmenyajikan bahasa mesin yang lebihmudah dibaca dan dipahami olehmanusia. Bahasa ini sudahmenggunakan simbol alpabet yangbermakna (mnemonic). Contoh “MOVAX 1111”, pindahkan ke register AXnilai 1111.Proses data oleh komputerberdasarkan perintah bahasa rakitanadalah cepat. Meski demikian masihmerepotkan-bahkan bagi kebanyakanpemrogram, karena masih harusmengingat-ingat tempatpenyimpanan data. Bahasa rakitanjuga bersifat khusus untuk mesintertentu. Contoh: Assembler

2.1.4. Bahasa Tingkat TinggiAdalah bahasa pemrograman

yang dekat dengan bahasa manusia,kelebihan utama dari bahasa iniadalah mudah untuk di baca, tulis,maupun diperbaharui, sebelum bisa

48 Direktorat Pembinaan SMK | 2008

Page 57: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

dijalankan program harus terlebihdahulu di-compile. Contoh Ada, Algol,BASIC, COBOL, C, C++, FORTRAN,LISP, dan Pascal, dsb. Padagenerasi bahasa pemrogramanterakhir sekarang ini, kedua carainterpretasi dan kompilasidigabungkan dalam satu lingkunganpengembangan terpadu(IDE=integrated developmentenviron-ment).

Cara interpretasi memudahkandalam pembuatan program secarainteraktif dan cara kompilasimenjadikan eksekusi program lebihcepat. Pertama programdikembangkan interaktif, kemudiansetelah tidak ada kesalahankeseluruhan program dikompilasi.Contoh bahasa program seperti iniadalah Visual BASIC yang berbasisBASIC dan Delphi yang berbasisPASCAL. Bahasa tingkat tinggibersifat portable. Program yang

dibuat menggunakan bahasa tingkattinggi pada suatu mesin komputerbersistem operasi tertentu, hampir100% bisa digunakan pada berbagaimesin dengan aneka sistem operasi.Kalaupun ada perbaikan sifatnyakecil sekali.

2.1.5. Bahasa Generasi 3 & 4Lebih dekat ke bahasa manusia

dibandingkan dengan high-levelprogramming languages. Biasanyadipakai untuk mengakses database.Contoh perintah pada bahasa SQL:FIND ALL RECORDS WHERENAME IS "JOHN".

2.1.6. Bahasa Pemrogramanuntuk tujuan tertentuDibawah ini merupakan TabelBahasa Pemrograman untuk tujuantertentu. (Mc. Connell, h 46)

Tabel 2.1. Bahasa Pemrograman

JENIS PROGRAM BAHASA TERBAIK

BAHASA TERBURUKData terstruktur ADA, C /C++,

PASCALAssembler, BASIC

Proyek cepat BASIC PASCAL, ADA, AssemblerEksekusi cepat Assembler, C BASIC,IntrepreterLanguage

Kalkulasi matematika FORTRAN PASCALMenggunakan memori dinamis

PASCAL, C BASIC

Lingkungan memori terbatas

BASIC, Assembler, C

FORTRANProgram real‐time ADA, Assembler,

CBASIC, FORTRAN

Manipulasi string BASIC, PASCAL CProgram 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

Page 58: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

Tabel 2.2. Rasio bahasa tingkat tinggi dengan kode bahasa rakitan

BAHASA

RASIOAssembler 1: 1

ADA 1 : 4.5Quick / Turbo / Basic 1 : 5C 1 : 2.5FORTRAN 1 : 3PASCAL 1 : 3.5

2.2. Compiler dan IntepreterCompiler Adalah suatu program

yang menterjemahkan bahasaprogram (source code) ke dalambahasa objek (object code). Compilermenggabungkan keseluruhan bahasaprogram dikumpulkan kemudiandisusun kembali.

2.2.1. Tahapan Kompilasi:Dalam melakukan penulisan

bahasa pemrograman komputer adabeberapa tahapan-tahapan yangharus dilakukan antara lain:Pertama source code ( program yangditulis) dibaca ke memory komputer. Source code tersebut diubah

menjadi object code (bahasaassembly)

Object code dihubungkandengan library yang dibutuhkanuntuk membentuk file yang bisadi eksekusi.

Compiler memerlukan waktu untukmembuat suatu program yang dapatdieksekusi oleh komputer. Tetapi,program yang diproduksi olehCompiler bisa berjalan lebih cepatdibandingkan dengan yangdiproduksi oleh Interpreter, danbersifat independen.

2.2.2.InterpreterBerbeda dengan compiler,

Interpreter menganalisis danmengeksekusi setiap baris dariprogram tanpa melihat programsecara keseluruhan. Keuntungan dariInterpreter adalah dalam eksekusiyang bisa dilakukan dengan segera.Tanpa melalui tahap kompilasi, untukalasan ini interpreter digunakan padasaat pembuatan program berskalabesar.

2.3. Tipe PemrogramanDalam Bahasa pemrograman

komputer terdapat tipepemrograman. Tipe pemrogramanyang pertama adalah pemrogramanterstruktur dan prosedural.

2.3.1. Pemrograman TerstrukturPemrograman terstruktur adalah

cara pemrosesan data yangterstuktur. Terstruktur dalam: analisa,cara dan penulisan program. Prinsippemrograman terstruktur adalahmempunyai ciri sebagai berikut: Menggunakan rancangan

pendekatan dari atas ke bawah(top down design),

50 Direktorat Pembinaan SMK | 2008

Page 59: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

Membagi program ke dalammodul-modul logika yang sejenis,

Menggunakan sub-program untukproses-proses sejenis yang seringdigunakan,

Menggunakan pengkodeanterstruktur: IF ........... THEN,DO ........ WHILE dan lain-lainnya,

Menghindari penggunaan perintahGO TO bila tidak diperlukan,

Gunakan nama-nama bermakna(mnemonic names), dan

Membuat dokumentasi yangakurat dan berarti.

Dalam perencanaan danperancangan dari atas ke bawah,kategori dan penyelesaian masalahdimulai dari bagian yang utamakemudian dibagi menjadi bagianyang lebih kecil. Rancangan cara inimemudahkan penulisan, pengujian,koreksi dan dokumentasi program.Tahapan rancangan atas ke bawahdalam pemrograman: Tentukan keluaran (output) yang

diminta, masukan (input) yangdiperlukan dan proses-prosesutama yang diperlukan untuktransformasi data.

Membagi proses utama ke dalammodul-modul fungsional.

Buat algoritma msing-masingmodul, dari modul utama ke sub-sub modul.

Setiap modul dalam prosesrancangan atas ke bawah biasanyadibatasi dalam isi maupun batasan-batasan berikut: Setiap modul hanya mempunyai

satu masukan dan keluaran Setiap modul hanya mewakili satu

fungsi program.Rancangan (design) terstruktur: Membagi program menjadi

subprogram

Menekankan fungsionalitas. Cocok untuk sistem yang banyak

mempunyai fungsi independen.Gaya penulisan programterstruktur: Menggunakanindentasi sehingga jelas strukturdan kontrol program.Memudahkan pembacaan,pemahaman, penelusurankesalahan dan pembuatankoreksi.

2.3.2. Pemrograman proceduraldan terstruktur

Bahasa pemrogramanprosedural adalah bahasapemrograman yang mendukungpembuatan program sebagaikumpulan prosedur. Prosedur-prosedur ini dapat saling memanggildan dipanggil dari manapun dalamprogram dan dapat menggunakanparameter yang berbeda-beda untuksetiap pemanggilan. Prosedur adalahbagian dari program untukmelakukan operasi-operasi yangsudah ditentukan denganmenggunakan parameter tertentu.Bahasa pemrograman terstrukturadalah pemrograman yangmendukung abstraksi data,pengkodean terstruktur dan kontrolprogram terstruktur. Kontrol programterstruktur adalah sebagai berikut:1. Runtun - urut (sequence)2. Pilihan (selection)3. Pengulangan (repetition - loop)4. Batasan Masalah Merencanakan

sistim dan spesifikasi program:Siapa yang akan menggunakanprogram dan untuk apa? dengancara: Menentukan tujuan dan hasil

yang akan dicapai

2008 | Direktorat Pembinaan SMK 51

Page 60: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

Menentukan hal-hal yangdiperlukan oleh sistim

Pengumpulan data5. Pengembangan Model Pembuatan

model dari sistim yang akan kitabangun, model adalah suatugambaran sederhana dari sistimyang kita buat. Denganpembuatan model akan terlihatdengan jelas hubungan antaraobjek-objek dalam sistim yangakan kita bangun. Untukpenyelesaian aritmatik, biasanyamodel dibuat dalam bentuk rumusmatematik. Contoh: untukmembuat program luas_lingkarankita membuat model matematisc = axb

6. Rancangan algoritma Pembuatanurutan instruksi yang akan ditulispada program ( dijelaskan lebihlanjut)

7. Pemrograman Implementasialgoritma ke dalam program(algoritma sendiri dalam komputeradalah merupakan program).

8. Uji dan Validasi Pengujianterhadap program : sepertikesalahan penulisan (syntax error), kesalahan saat eksekusi (runtimeerror) kesalahan logika program(program berjalan tapimenghasilkan output yang salah-fatal error).

Dokumentasi Pembuatan catatanpada program terutama pada modul-modul yang rumit.

2.4. AlgoritmaPemrograman komputer dan

algoritma pemrograman adalah duahal yang tidak dapat dipisahkankarena pembuatan programkomputer akan lebih sulit dan lamatanpa mengetahui dengan pasti

bagaimana algoritma penyelesaianmasalahnya. Sebelum mengetahuilebih lanjut apa yang dimaksuddengan algoritma pemrograman, kitabahas dahulu apa yang dimaksuddengan pemrograman komputer atauprogram komputer.

Definisi program komputeradalah sederetan perintah-perintah(instruksi) yang harus dikerjakan olehkomputer untuk menyelesaikanmasalah. Deretan perintah-perintahtersebut tidak bisa kita tulis secarasembarangan atau semau kita tetapiharus teratur agar komputer dapatmemahami dan memprosesnyadengan baik sehingga permasalahanyang ada dapat diselesaikan denganbaik pula.

Untuk itulah diperlukan algoritmakarena definisi dari algoritma itusendiri menurut Microsoft PressComputer and Internet Dictionary(1998) adalah urutan langkah logistertentu untuk memecahkan suatumasalah. Yang ditekankan adalahurutan langkah logis, yang berartialgoritma harus mengikuti suatuurutan tertentu, tidak bolehmelompat-lompat dan disusun secarasistematis. Sedangkan yangdimaksud dengan langkah-langkahlogis adalah kita harus dapatmengetahui dengan pasti setiaplangkah yang kita buat.

Menurut Sjukani (2005),algoritma adalah alur pemikirandalam menyelesaikan suatupekerjaan yang dituangkan secaratertulis. Yang ditekankan pertamaadalah alur pikiran, sehinggaalgoritma seseorang dapat berbedadari algoritma orang lain. Sedangkanpenekanan kedua adalah tertulis,yang artinya dapat berupa kalimat,gambar, atau tabel tertentu. Jadi

52 Direktorat Pembinaan SMK | 2008

Page 61: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

dapat disimpulkan bahwa algoritmalebih merupakan alur pemikiran untukmenyelesaikan suatu pekerjaan atausuatu masalah daripada pembuatanprogram komputer. Algoritma inilahyang kemudian dijadikan landasan(pedoman) untuk membuat programkomputer.

Meskipun algoritma tidak dapatdipisahkan dengan pemrogramankomputer tetapi jika andaberanggapan bahwa algoritma identikdengan pemrograman komputer,anda salah besar. Hal ini dikarenakandalam kehidupan sehari-haripunseringkali kita berhadapan denganmasalah-masalah yang kalau kitacermati mengikuti kaidah-kaidahpenyelesaian secara algoritma.Misalkan saja cara-cara memasakmie instan, membuat kopi atau teh,memasak makanan yang dinyatakandalam bentuk resep, dan masihbanyak lagi yang semuanya itu dapatkita sebut sebagai algoritma. Padamie instan misalnya, biasanya padabungkusnya terdapat urutan langkah-langkah bagaimana cara memasakatau menyajikannya. Bila langkah-langkah tersebut tidak logis, makadapat dipastikan bahwa kita akanmemperoleh hasil yang tidak sesuaidengan yang diharapkan. Kita harusmembaca satu demi satu langkah-langkah pembuatannya kemudianmengikutinya agar memperoleh hasilyang baik.

Yang harus diingat disini adalahkita tidak harus mengikuti langkah-langkah yang sudah diberikan, tetapikita dapat memodifikasinya ataubahkan membuat resep atau carabaru yang lebih baik tetapimenghasilkan hal yang sama(mempunyai tujuan yang sama), yaitudapat menikmati hasil masakan.

Demikian juga dengan pemrogramankomputer, kita juga tidak harusmengikuti algoritma yang sudah ada,tetapi kita dapat menambah ataupunmengurangi bahkan membuatalgoritma yang baru asalkanpermasalahan yang ada dapatterpecahkan dengan baik.

2.5. Ciri AlgoritmaOleh karena algoritma digunakan

untuk memecahkan suatupermasalahan maka algoritmatersebut harus menghasilkan suatujawaban atas permasalahan tersebut.Dengan kata lain algoritma harusmemiliki paling tidak satu keluaran.Sedangkan masukan dari algoritmadapat nol (tidak ada) atau banyakmasukan (data). Yang dimakduddengan nol masukan adalah jikaalgoritma itu hanya untukmenampilkan suatu informasi saja.Misalnya output “Hello World” yangsering kita temukan pada tutorial-tutorial saat kita baru belajarmembuat program dari suatu bahasapemrograman tertentu. Kedua haldiatas, memiliki paling sedikit satukeluaran dan dapat memiliki nol ataubanyak masukan, merupakan duadari beberapa ciri algoritma.

Tugas algoritma dikatakanselesai kalau algoritma tersebutsudah menghasilkan satu atau lebihjawaban atas permasalahan yangada. Dengan demikian setelahmengerjakan langkah-langkahpenyelesaian masalah, makaalgoritma tersebut harus berhentitidak melakukan proses apapun.Berhenti di sini artinya adalah jikaditerjemahkan ke dalam bentukprogram dan program dijalankan,

2008 | Direktorat Pembinaan SMK 53

Page 62: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

maka setelah menghasilkan suatuoutput, program dapat langsungberhenti atau menunggu instruksilebih lanjut dari pengguna programseperti mengulang perhitungan lagi,keluar program (menghentikanprogram), dan lain sebagainya.Dengan demikian ciri ketiga darialgoritma adalah setelah selesaimengerjakan langkah-langkahpenyelesaian masalah, algoritmaharus berhenti.

Ciri keempat dari algoritmaadalah setiap langkah yang dibuatharus dibuat sesederhana mungkintetapi efektif agar dapat dipahamioleh pemroses (manusia maupunkomputer) sehingga dapatdiselesaikan dalam waktu yangsingkat serta masuk akal. Sedangkanciri yang terakhir adalah setiaplangkah dalam algoritma harusdidefinisikan dengan tepat dan jelassehingga tidak berarti-dua(ambiguitas) sehingga menimbulkankesalahan dalam penafsiran olehpemroses

2.6. Penerapan AlgoritmaBerikut adalah contoh

pemecahan masalah (algoritma)yang diambil dari permasalahan yangmungkin sering kita hadapi dalamkehidupan kita sehari-hari. Diketahuidua buah ember A dan B dimanaember A berisi air dan ember B berisiminyak tanah. Jika diinginkan isikedua ember itu saling ditukarsehingga ember A berisi minyaktanah dan ember B berisi air,bagaimanakah caranya? Apakahcukup dengan cara (membuatalgoritma), tuangkan isi ember A keember B dan kemudian tuangkan isi

ember B ke ember A? Apakahpermasalahan dapat diselesaikandengan cara (algoritma) tersebut?Jawabannya adalah tidak, karenaalgoritma tersebut tidak logis danhasilnyapun tidak sesuai denganyang diinginkan karena algoritmatersebut akan menghasilkan ember Aakan berisi campuran air dan minyaktanah sedangkan ember B akankosong.

Bagaimanakah cara (algoritma)yang benar dari permasalahantersebut? Algoritma yang benaradalah pindahkan dahulu isi ember Ake ember lain (misal ember C),kemudian setelah ember A kosongpindah isi ember B ke ember A.Langkah terakhir adalah mengisiember B dengan minyak tanah yangada di ember C. Inilah algoritma yangpaling logis dan menghasilkanjawaban yang benar ataspermasalahan tersebut.

Seperti yang telah dikemukakansebelumnya, setiap orangmempunyai cara pemecahan sendiri-sendiri sehingga setiap orangdimungkinkan mempunyai algoritmayang berbeda-beda untukmemecahkan suatu permasalahanyang sama. Contohnya adalahpermasalahan di atas. Langkahpertama bisa saja yang dipindahbukan isi ember A ke ember C dulu,tetapi isi ember B yang dipindahkanke dalam ember C terlebih dahulu.Setelah itu baru memindahkan isiember A ke dalam ember B danterakhir memindah isi ember C keember A. Algoritma ini sedikitberbeda tetapi tetap menghasilkanjawaban yang sama atas persoalanyang ada.

54 Direktorat Pembinaan SMK | 2008

Page 63: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

2.7. Notasi AlgoritmaAlgoritma mempunyai aturan

penulisan sendiri yang disebutdengan notasi algoritma. Notasialgoritma ini tidak tergantung darispesifikasi bahasa pemrogramantertentu dan komputer yangmengeksekusinya. Hal inidikarenakan notasi algoritmabukanlah notasi bahasapemrograman. Notasi algoritmamerupakan bahasa universal yangdapat diterima oleh semua bahasapemrograman yang ada. Oleh sebabitu algoritma yang baik harus dapatditerjemahkan ke dalam bentuksource code dari semua bahasapemrograman yang ada.

Untuk membuat algoritma darisuatu permasalahan, biasanyadigunakan salah satu dari tiga buahnotasi algoritma yang dikenal, yaituuraian kalimat deskriptif, flow chart,atau pseudo code. Sebagai contohpermasalahan, jika diinginkan sebuahprogram komputer yang dapatmengetahui bilangan terbesar dari

tiga buah bilangan yang dimasukkan.Bagaimanakah algoritmanya?

2.8. Deskriptif AlgoritmaAlgoritma dengan uraian kalimat

deskriptif adalah notasi algoritmayang paling sederhana karenaalgoritma ini menggunakan bahasasehari-hari. Untuk permasalahanyang sederhana penggunaan notasiini sangatlah mudah, akan tetapiuntuk permasalahan yang lebihkomplek dan rumit, penggunaannotasi ini akan lebih sulit dan seringkali terjadi ambigu dalam langlah-langkah penyelesaian masalah. Olehkarena itulah untuk kasus-kasus yanglebih komplek, penggunaan notasi inijarang sekali bahkan tidak digunakan.

Permasalahan di atas, yaitumencari bilangan terbesar dari tigabuah bilangan yang dimasukkan,tergolong permasalahan yangsederhana, jadi algoritmanya masihmudah dan dapat dijelaskan denganuraian kalimat deskriptif sebagaiberikut:

1. Masukkan sembarang bilangan sebanyak tiga buah.2. Ambil bilangan pertama dan set maksimum‐nya sama dengan bilangan pertama.3. Ambil bilangan kedua dan bandingkan dengan maksimum.4. Apabila bilangan kedua lebih besar dari maksimum maka ubah maksimum‐nya

menjadi sama dengan bilangan kedua.5. Ambil bilangan ketiga dan bandingan dengan maksimum.6. Apabila bilangan ketiga lebih besar dari maksimum maka ubah lagi maksimum‐

nya menjadi sama dengan bilangan ketiga.7. Variabel maksimum akan berisi bilangan yang terbesar dan tampilkan hasilnya.

Algoritma dengan uraian kalimatdeskriptif seperti di atas sudah jarangsekali kita temukan karena kadangkala agak sulit untuk memahaminya.Yang paling banyak kita temukanadalah algoritma (dengan uraian

kalimat deskriptif) yang ditulis secaralebih sistematis dan efisien sehinggalebih mudah untuk memahaminya.Algoritma tersebut adalah sebagaiberikut:

2008 | Direktorat Pembinaan SMK 55

Page 64: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

1. Masukkan a, b, dan c.2. mak a.3. Jika b > mak, kerjakan langkah ke‐4. Jika tidak, kerjakan langkah ke‐5.4. mak b.5. Jika c > mak, kerjakan langkah ke‐6. Jika tidak, kerjakan langkah ke‐7.6. mak c.7. Tulis mak.

Dalam notasi algoritma, baikmenggunakan notasi algoritmadengan uraian kalimat deskriptif, flowchart maupun pseudo code, kita tidakmenggunakan tanda = (samadengan) tetapi menggunakan simbolanak panah ke arah kiri () sepertiyang terlihat pada langkah ke-2, 4,dan 6. Sebagai contoh pada langkahke-2, arti dari notasi tersebut adalahnilai variabel a (yang ada di sebelahkanan anak panah) diberikan kepadavariabel mak (yang ada di sebelahkiri anak panah). Dengan demikianjika nilai variabel a adalah 10, makanilai mak juga 10 atau dalampenulisan secara matematis mak = a.

Penggunaan anak panah inidikarenakan, seperti yang telahdikemukakan sebelumnya, algoritmatidak diperuntukkan untuk suatubahasa pemrograman tertentu, tetapidapat diaplikasikan atauditerjemahkan ke dalam bentuksource code dari semua bahasapemrograman yang ada. Dalampascal misalnya, notasi yangdigunakan untuk tanda = (samadengan) adalah := (titik duadilanjutkan dengan tanda samadengan) sehingga langkah ke-2 akanditerjemahkan menjadi mak := a.Akan tetapi dalam bahasa C++maupun Java, tanda = (samadengan) masih tetap digunakan

sehingga penerjemahannya adalahmak = a

2.9. Flow ChartNotasi algoritma yang paling

banyak digunakan adalah flow chartkarena bentuknya yang sederhanadan mudah dipahami. Flow chart(diagram alir) adalah penggambaransecara grafik dari langkah-langkahpemecahan masalah yang harusdiikuti oleh pemroses. Flow chartterdiri atas sekumpulan simbol,dimana masing-masing simbolmenggambarkan suatu kegiatantertentu. Flow chart diawali denganpenerimaan masukan (input),pemrosesan masukan, dan diakhiridengan menampilkan hasilnya(output).

Adapun simbol-simbol yangsering digunakan untuk menyusunflow chart (dalam microsoft visio)adalah sebagai berikut :

1) MasukanMasukan merupakan kegiatanpenerimaan data yangdisimbolkan dengan jajarangenjang. Kita dapat menuliskanmasukan yang diperlukan padasuatu waktu secara satu per satumaupun secara keseluruhan,akan tetapi untuk alasan efisiensiruang gambar biasanya masukan

56 Direktorat Pembinaan SMK | 2008

Page 65: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

dituliskan bersamaan secarakeseluruhan.

Gambar 2.3. Simbol proses

Gambar 2.1. Simbol masukan

2) Masukan manualUntuk masukan secara manualyang dimasukkan melaluikeyboard, atau perangkat inputlainnya seperti barcode reader,kita dapat menggunakan simbolmasukan secara manual. Samadengan simbol masukan, padasimbol masukan manual ini untukalasan efisiensi ruang gambarbiasanya masukan juga dituliskanbersamaan secara keseluruhan.

Gambar 2.2. Simbol masukanmanual

3) ProsesData yang dimasukan kemudiandiproses untuk menghasilkanjawaban atas persoalan yangingin dipecahkan. Kegiatanmemproses data ini disimbolkandengan persegi panjang. Samaseperti simbol pada masukan,penulisan operasi-operasi padadata dapat dilakukan secara satuper satu maupun secarakeseluruhan.

4) KeluaranKeluaran adalah hasil daripemrosesan data dan merupakanjawaban atas permasalahan yangada. Keluaran ini harusditampilkan pada layar monitoragar dapat dibaca oleh penggunaprogram. Sama seperti aturanpada simbol-simbol sebelumnya,penulisan hasil pemrosesan datadapat dilakukan secara satu persatu maupun secara keseluruhan.

Gambar 2.4. Simbol keluaran

5) PercabanganYang dimaksud denganpercabangan disini adalah suatukegiatan untuk mengecek ataumemeriksa suatu keadaanapakah memenuhi suatu kondisitertentu atau tidak. Jadi dalampercabangan ini, kita harusmenuliskan kondisi apa yangharus dipenuhi oleh suatukeadaan. Hasil dari pemeriksaankeadaan ini adalah YA atauTIDAK. Jika pemeriksaankeadaan menghasilkan kondisiyang benar, maka jalur yangdipilih adalah jalur yang berlabelYA, sedangkan jika pemeriksaankeadaan menghasilkan kondisiyang salah, maka jalur yang

2008 | Direktorat Pembinaan SMK 57

Page 66: 01 bab 01 Dasar Komputer fachkunde OK

6) Sub rutinSub rutin adalah suatu bagiandalam program yang dapatmelakukan (atau diberi) tugastertentu. Jadi sub rutin

Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

dipilih adalah jalur yang berlabelTIDAK. Berbeda dengan aturanpada simbol-simbol sebelumnya,penulisan kondisi harus dilakukansecara satu per satu (satu notasipercabangan untuk satu kondisi).

Gambar 2.5. Simbol percabangan

merupakan “program kecil” yangmenjadi bagian dari suatuprogram yang besar. Sub rutinada dua macam, yaitu prosedur(procedure) dan fungsi (function).Perbedaan antara keduanyaadalah setelah dipanggil prosedurtidak mengembalikan suatu nilaisedangkan fungsi selalumengembalikan suatu nilai.Dalam bahasa C++ kedua subrutin tersebut dijadikan satu yaitufunction, sedangkan untuk Javamenggunakan class dimanakeduanya bisa diatur untuk dapatmengembalikan nilai atau tidakdapat mengembalikan nilai. Subrutin ini akan didiskusikan padabab tersendiri.Sub rutin memiliki suatu flowchart yang berdiri sendiri diluarflow chart utama. Jadi dalamsimbol sub rutin, kita cukupmenuliskan nama sub rutinnyasaja, sama seperti jika kitamelakukan pemanggilan terhadap

suatu sub rutin pada programutama (main program) yang akananda pelajari pada bagian ataubab lain pada buku ini. Aturanpenulisan simbol sub rutin samadengan simbol percabangan,yaitu penulisan nama sub rutindilakukan secara satu per satu.

Gambar 2.6. Simbol sub rutin

7) Arah aliranArah aliran merupakan jalur yangharus diikuti dan merupakan garispenghubung yangmenghubungkan setiap langkahpemecahan masalah yang adadalam flow chart. Arah aliran inidisimbolkan dengan anak panah

Gambar 2.7. Simbol arah aliran

8) TerminatorTerminator berfungsi untukmenandai titik awal dan titik akhirdari suatu flow chart. Simbolterminator ini diberi label MULAIuntuk menandai titik awal dariflow chart dan label SELESAIuntuk menandai titik akhir dariflow chart. Jadi dalam sebuahflow chart harus ada dua simbolterminator, yaitu simbolterminator untuk MULAI danSELESAI.

58 Direktorat Pembinaan SMK | 2008

Page 67: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

Gambar 2.8. Simbol terminator

9) KonektorKonektor berfungsi untukmenghubungkan suatu langkahdengan langkah lain dalamsebuah flow chart dengankeadaan on page atau off page.Yang dimaksud dengan konektoron page adalah konektor yangdigunakan untuk menghubungkansuatu langkah dengan langkahlain dalam satu halaman.Sedangkan konektor off pageadalah konektor untukmenghubungkan suatu langkahdengan langkah lain dalamhalaman yang berbeda. Konektorini digunakan apabila ruanggambar yang kita gunakan untukmenggambar flow chart tidakcukup luas untuk memuat flowchart secara utuh, jadi perludipisahkan atau digambar dihalaman yang berbeda.

(a) (b)

Gambar 2.9. Simbol konektor onpage (a) dan off page (b)

10) DokumenDokumen merupakan tampilandata secara fisik yang dapatdibaca oleh manusia. Data inibiasanya merupakan hasilpemecahan masalah (informasi)yang telah dicetak (print out).

Gambar 2.10. Simbol dokumen

Berikut adalah flow chart untukpermasalahan yang diberikan(mencari bilangan terbesar dari tigabilangan acak yang dimasukkan)

2008 | Direktorat Pembinaan SMK 59

Page 68: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

Mulai

a, b, cYa

Maksimum < b Maksimum b

Maksimum a Tidak

Maksimum < cYa

Maksimum c

Tidak

Maksimum

Selesai

Gambar 2.11. Flowchart

2.10. Pseudo codePseudo code adalah algoritma

yang bentuknya (strukturnya) sangatmirip dengan bahasa pemrogramankhususnya bahasa pemrogramanterstruktur seperti pascal. Kemiripanini merupakan keuntungan daripseudo code karena implementasiatau penerjemahan algoritma kedalam source code suatu bahasa

pemrograman sangatlah mudahmeskipun penggunaannya tidaksepopuler flow chart.

Dalam penulisannya, pseudocode harus terdiri dari tiga bagian,yaitu :

1. Judul algoritmaBagian yang terdiri atas namaalgoritma dan penjelasan

60 Direktorat Pembinaan SMK | 2008

Page 69: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

(spesifikasi) dari algoritmatersebut. Nama sebaiknyasingkat dan menggambarkanapa yang dapat dilakukan olehalgoritma tersebut.

2. DeklarasiBagian untuk mendefinisikansemua nama yang digunakan didalam program. Nama tersebutdapat berupa nama tetapan,peubah atau variabel, tipe,prosedur, dan fungsi.

3. DeskripsiBagian ini berisi uraian langkah-langkah penyelesaian masalahyang ditulis denganmenggunakan aturan-aturan yangakan dijelaskan selanjutnya. Algoritma untuk permasalahan di

atas yaitu mencari bilangan terbesardari tiga bilangan acak yangdimasukkan dengan menggunakanpseudo code adalah:

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 aif (mak<b)

mak b else

if(mak<c)mak c

end if write(mak)

Dalam pseudo code, garisbawah harus digunakan untuk kataalgoritma (yang diikuti oleh judul darialgoritma), kata deklarasi, katadeskripsi, tipe data, read, write, if,else, end if, for, end for, while, endwhile, do while, dan end do while

2.11. Penerjemahan ke kodesumber

Sebelum membahas mengenaipenerjemahan algoritma ke dalambentuk source code bahasapemrograman (program komputer)

C++ atau bahasa lainnya sepertiJava maka sebaiknya kitamengetahui lebih dahulu langkah-langkah yang biasa dilakukan untukmembuat suatu program komputer.Langkah-langkah tersebut adalah :1. Mendefinisikan permasalahan

Ini merupakan langkah pertamayang sering dilupakan orang.Menurut hukum Murphy (HenryLedgard): “Semakin cepatmenulis program, akan semakinlama kita dapatmenyelesaikannya”. Hal initerutama dirasakan apabila kitamembuat program untuk

2008 | Direktorat Pembinaan SMK 61

Page 70: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

permasalahan yang komplek.Oleh karena itu sebelum kitamenulis source code suatuprogram sebaiknya kitamenentukan ataumengidentifikasi terlebih dahuluinti dari permasalahannya,kemudian apa saja yang dapatdan harus dipecahkan denganbantuan komputer, dan yangterakhir adalah apa masukanuntuk programnya danbagaimana nanti keluarannya.

2. Menemukan solusiSetelah mendefinisikan masalah,maka langkah berikutnya adalahmenentukan solusinya. Jikapermasalahan terlalu komplek,maka ada baiknya masalahtersebut dipecah menjadibeberapa modul kecil dapatberupa prosedure, fungsi, atauclass sehingga akan lebih mudahuntuk diselesaikan. Penggunaanmodul ini akan membuat programutamanya menjadi lebih singkat,mudah untuk dilihat dan dianalisisuntuk tujuan debuging serta untukpengembangan dari program.

3. Memilih algoritmaPilihlah (atau buatlah) algoritmayang benar-benar sesuai danefisien untuk permasalahan yangdiberikan.

4. Memilih bahasa pemrogramandan menulis source codeprogramBahasa pemrograman yangdigunakan hendaknya bahasayang memang sudah anda kuasaidengan baik. Atau jika masihdalam tahap belajar, pilihlahbahasa pemrograman yangmudah dipelajari dan digunakanserta memiliki tingkatkompatibilitas tinggi dengan

perangkat keras dan platform(sistem operasi) lainnya.

5. Menguji programSetelah selesai menulis sourcecode (program sudah jadi), ujilahprogram tersebut dengan segalamacam kemungkinan yang ada,termasuk error-handling, sehing-ga program tersebut benar-benarhandal dan layak untukdigunakan.

6. Menulis dokumentasiDokumentasi sangatlah pentingagar pada suatu saat jika kitaingin mengembangkan program,kita tidak mengalami kesulitandalam membaca source codeyang sudah kita tulis. Cara palingmudah dan sederhana dalammembuat suatu dokumentasiadalah dengan menuliskankomentar-komentar kecil padasuatu baris (atau suatu bagiandari source code) tentang apamaksud dari kode-kode tersebutdan apa kegunaannya, kemudianvariabel apa saja yang digunakandan untuk apa, serta parameter-parameter yang ada pada suatuprosedur dan fungsi.

7. Merawat programProgram yang sudah jadisebaiknya juga dilakukanperawatan untuk mencegahmunculnya bug yang sebelumnyatidak terdeteksi. Selain itu jugaberguna untuk menambahfasilitas-fasilitas baru yang dahulusewaktu dibuat belum ada.

Pada bab ini kita hanya fokuspada langkah pertama sampaidengan langkah keempat saja.Sedangkan untuk dapatmenerjemahkan notasi algoritmayang telah dibuat ke dalam bentuk

62 Direktorat Pembinaan SMK | 2008

Page 71: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

source code suatu bahasapemrograman, seharusnya kitamamahami terlebih dahulu bahasapemrograman yang akan kitagunakan, seperti aturan tatabahasanya, intruksi-instruksi yangdigunakan, tipe data, dan masihbanyak lagi. Semua itu akan kitapelajari satu persatu dibagian lainpada buku ini. Oleh karena kita baruakan mempelajari bahasapemrograman yaitu C++ atauprogram lainnya seperti java, makauntuk mempermudah pemahamantentang algoritma akan diberikancontoh-contoh permasalahansederhana yang sering dijumpaidalam pemrograman, bagaimanaalgoritmanya dalam bentuk tiganotasi algoritma yang telah diberikan,dan kemudian bagaimanamengimplementasikan ataumenerjemakan algoritma tersebut kedalam bentuk source code bahasapemrograman C++ atau programlainnya seperti java.

Untuk membantu penerjemahanalgoritma kita juga harusmemperhatikan jenis-jenis prosesyang biasanya kita temukan dalamalgoritma. Dalam algoritma adaempat jenis proses yang dikenal,yaitu :

1. Sequence Process, merupakaninstruksi yang dikerjakan secarasekuensial (berurutan).

2. Selection Process, adalahinstruksi yang dikerjakan jikamemenuhi suatu kriteria ataukondisi (keadaan) tertentu.

3. Iteration Process, yaitu instruksiyang dikerjakan selamamemenuhi suatu kriteria ataukondisi (keadaan) tertentu.

4. Concurrent Process, beberapainstruksi dikerjakan secarabersama.

Berikut merupakan contoh-contoh permasalahan, algoritmapenyelesaian dalam tiga notasialgoritma serta penerjemahannyadalam bahasa pemrograman C++atau program lainnya seperti java.1. Masalah penukaran isi ember

(contoh sequence process). Masalah penukaran isi ember dapat kita aplikasikan untuk masalah berikut ini. Mula-mula A bernilai 19 dan B bernilai 33. Jikanilai kedua variabel A dan B tersebut ditukar, A menjadi 33 dan B menjadi 19, makaalgoritmanya adalah :

Menggunakan uraian kalimat deskriptif1) Set nilai variabel A 19 dan B 332) Set nilai dari variabel C menjadi sama dengan variabel A.3) Set nilai variabel A menjadi sama dengan B.4) Set nilai variabel B menjadi sama dengan C.5) Tampilkan nilai variabel A dan B.

Algoritma diatas dapat juga ditulis seperti dibawah ini:1) A 19 dan B 332) C A3) A B

2008 | Direktorat Pembinaan SMK 63

Page 72: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

4) B C5) 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

Page 73: 01 bab 01 Dasar Komputer fachkunde OK

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

deskripsia 19 b 33c aa bb c write(a,b)

Dari ketiga notasi algoritma diatas dapat disimpulkan bahwalangkah-langkah pemecahanmasalah yang telah dibuat dapatdibagi dalam tiga kelompok, yaitumemberi nilai variabel A dan B,menukarkan nilainya, dan terakhiradalah menampilkannya. Oleh

karena itu penerjemahan notasialgoritma ke dalam bentuk sourcecode bahasa pemrograman jugaharus mengikuti langkah-langkahyang diberikan dalam ketigaalgoritma. Berikut adalahpenerjemahan algoritma ke dalambahasa C++.

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

Langkah ke-4 merupakanpemberian nilai variabel A dan B.Langkah selanjutnya, langkah ke-5sampai dengan langkah ke-7,merupakan proses penukaran data.Dan langkah terakhir, yaitu

menampilkan data yang telah ditukar,ada dalam langkah ke-8 dan 9.Langkah-langkah yang lainnyamerupakan aturan tata bahasa dalambahasa C++ yang akan dijelaskandalam bab-bab selanjutnya.

2008 | Direktorat Pembinaan SMK 65

Page 74: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

Sedangkan penerjemahan algoritma- algoritma tersebut dalam bahasa

Java adalah sebagai berikut:

1. class tukarData {2. public static void main(String[ ] args) {3. int a=19, b=33;4. int c = a;5. a = b;6. b = c;7. System.out.println("a = " + a);8. System.out.println("b = " + b);9. }10. }

Langkah ke-3 merupakanpemberian nilai variabel A dan B,langkah ke-4 sampai denganlangkah ke-6 merupakan prosespenukaran data, dan langkah ke-7 dan 8 merupakan kode untukmenampilkan data yang telahditukar. Sedangkan langkah yanglainnya merupakan aturan tatabahasa Java yang akandijelaskan dalam bab-babselanjutnya.

2. Masalah mencari bilanganterbesar dari tiga bilangan yangdimasukkan (contoh selectionprocess).

Algoritma pada permasalahanini sudah diberikan, silakan lihatkembali sub bab notasi algoritma.Dari ketiga notasi algoritmatersebut dapat kita ketahui bahwaada dua proses pemeriksaankeadaan (data). Pada algoritmadengan uraian kalimat deskriptif,proses pemeriksaan ini dapat kitaidentifikasi dengan adanya katakunci JIKA. Dengan demikianpada saat menerjemahkanlangkah ke-3 dan langkah ke-5

dari algoritma tersebut ke dalambentuk source code bahasa C++atau program lainnya seperti java,kita harus menggunakan klausaif().

Sedangkan pada algoritmadengan flow chart, prosespemeriksaan keadaandisimbolkan dengan simbolpercabangan dimana kalaujalurnya kita telusuri, baik jalur YAmaupun TIDAK, akan terhubungdengan langkah penyelesaianmasalah selanjutnya, tidakkembali ke langkah sebelumnyaataupun kembali ke simbolpercabangan semula karena jikaini terjadi kita tidak bisamenggunakan klausa if() dalampenerjemahan ke bentuk sourcecode bahasa C++ atau programlainnya seperti java (lihat contohpermasalahan berikutnya, yaitucontoh ke-3 dan ke-4).

Untuk algoritma denganpseudo code, penerjemahanakan jauh lebih mudah karenaseperti yang telah dikemukakansebelumnya bahwa pseudo codeini strukturnya sangat mirip

66 Direktorat Pembinaan SMK | 2008

Page 75: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

dengan penulisan source codebahasa pemrograman.

Dengan demikian penerjemahanalgoritma ke dalam bahasa C++

adalah (perhatikan source code baris ke-12 dan 13):

1. #include <iostream>2. using namespace std;3. int main() {4. int a,b,c,mak;5. cout << "Bilangan pertama = ";6. cin >> a;7. cout << "Bilangan kedua = ";8. cin >> b;9. cout << "Bilangan ketiga = ";10. cin >> c;11. mak = a;12. if (mak < b) mak = b;13. else if (mak < c) mak = c;14. cout << "Bilangan terbesarnya = " << mak;15. return 0;16. }

Sedangkan penerjemahan dalambahasa lain misalnya bahasaJava adalah sebagai berikut

(perhatikan source code baris ke-14 dan 15)

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

2008 | Direktorat Pembinaan SMK 67

Page 76: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

17. }18. }

Pada permasalahan ini, kita jugadapat menggunakan algoritmalain, yaitu :

a) Menggunakan uraian kalimatdeskriptif

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

68 Direktorat Pembinaan SMK | 2008

Page 77: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

b) Menggunakan flow chart

Mulai

a, b, c

Ya a > b a > c

Ya Maksimum a

Tidak Tidak

Ya Maksimum b b > c

Tidak

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

Page 78: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

deklarasia,b,c,mak :

in t eger deskripsiread(a,b,c)if (a > b)

if (a > c)mak

a else mak c end if

elseif(b > c)

mak b else mak c end if

end if write(mak

Pada algoritma dengan uraiankalimat deskriptif kita dapatmengidentifikasi bahwa terdapattiga buah pemeriksaan keadaan,yaitu langkah ke-2, 3, dan 5.Pada langkah ke-2, jika kondisiterpenuhi, langkah selanjutnya,yaitu langkah ke-3, adalahmerupakan pemeriksaankeadaan lagi. Demikian pula jikakondisi yang telah ditentukantidak terpenuhi, langkahberikutnya, yaitu langkah ke-5,adalah merupakan pemeriksaankeadaan kembali. Dari sini dapatdisimpulkan bahwa nantinyapenggunaan klausa if() yangkedua (langkah ke-3) akanberada di dalam klausa if() yang

pertama (langkah ke-2).Sedangkan penggunaan klausaif() yang ketiga (langkah ke-5)juga ada dalam klausa if() yangpertama pada bagian else. Hal inidinamakan percabanganbersarang, yaitu percabanganyang ada dalam percabanganlainnya.Keberadaan percabangan

bersarang ini juga dapat diidentifikasidari simbol percabangan yangterhubung dengan simbolpercabangan lainnya. Identifikasi inilebih jelas terlihat pada algoritmadengan pseudo code. Dengandemikian penerjemahan algoritma kedalam bahasa C++ adalah:

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

Page 79: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

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

Klausa if() pada source codebaris ke-12 sampai dengan baris ke-14 ada di dalam klausa if() baris ke-11. Sedangkan klausa if() baris ke-17 sampai dengan baris ke-19 juga ada

di dalam klausa if() (baris ke-11)bagian else (baris ke-16). Sedangkanpenerjemahan algoritma ke dalambahasa Java adalah (perhatikan bariske-13 sampai dengan baris ke-22) :

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

2008 | Direktorat Pembinaan SMK 71

Page 80: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

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

3. Diminta suatu program dimanajika dimasukkan suatu bilangan (1sampai dengan 7) maka akanmenampilkan nama hari, yaitu : Bilangan 1 untuk hari Minggu. Bilangan 2 untuk hari Senin. Bilangan 3 untuk hari Selasa.

Bilangan 4 untuk hari Rabu. Bilangan 5 untuk hari Kamis. Bilangan 6 untuk hari Jumat. Bilangan 7 untuk hari Sabtu.Algoritmanya adalah :

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

72 Direktorat Pembinaan SMK | 2008

Page 81: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

a) Menggunakan flow chart

Mulai A B

angka angka 2Ya

hari “Senin”

Tidak

Yaangka 1 hari “Minggu”

Yaangka 3 hari “Selasa”

Tidak

ATidak

B

Yaangka 4 hari “Rabu”

Tidak

Yaangka 5 hari “Kamis”

Tidak

Yaangka 6 hari “Jumat”

Tidak

Yaangka 7 hari “Sabtu”

Tidak

hari “Tidak adanama hari”

hari

Gambar 2.14. Flowchart

Selesai

2008 | Direktorat Pembinaan SMK 73

Page 82: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

b) Menggunakan pseudo code

Algoritma nama_hari{algoritma ini digunakan untuk mengetahui nama hari dari bilangan bulat yang dimasukkan}deklarasi

angka : integer hari : char

deskripsi read(angka) if(angka 1)

hari “Minggu”else if(angka 2) hari “Senin” else

if(angka 3)hari “Selasa”

else if(angka 4) hari “Rabu” else

if(angka 5)hari

“Kamis” elseif(angka 6)

hari “Jumat”else if(angka

7) hari “Sabtu”

elsehari “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 : integerhari :

char deskripsi

read(angka)switc h (angka)

case 1 : hari “Minggu”case 2 : hari “Senin”

74 Direktorat Pembinaan SMK | 2008

Page 83: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

case 3 : hari “Selasa” case 4 : hari “Rabu” case5 : hari “Kamis” case 6 : hari “Jumat” case 7 : hari “Sabtu”default : hari “Tidak ada nama hari”

end switch write(hari)

Pada algoritma dengan uraiankalimat deskriptif kita dapatmengidentifikasi bahwa terdapattujuh buah pemeriksaan keadaan,yaitu langkah ke-2, 4, 6, 8, 10, 12,dan 14. Pemeriksaan yang sebanyakini sangat tidak efektif kalau kita

menggunakan klausa if(). Agarprogram kita lebih efisien, maka kitamenggunakan switch() untukpemeriksaan keadaan sebanyak ini.Dengan demikian penerjemahanalgoritma ke dalam bahasa C++adalah :

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

2008 | Direktorat Pembinaan SMK 75

Page 84: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

Program diatas dapat juga ditulis seperti dibawah ini:

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

Sedangkan dalam contoh dalam bahasa Java adalah :

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

76 Direktorat Pembinaan SMK | 2008

Page 85: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

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

Program diatas dapat juga ditulis seperti dibawah ini:

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

2008 | Direktorat Pembinaan SMK 77

Page 86: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

4. Masalah menghitung rata-ratadari sejumlah data yangdimasukkan secara manual

melalui keyboard (contoh iterationprocess). Algoritmanya adalah:

Menggunakan uraian kalimat deskriptif

1) Masukan jumlah (n) data yang diinginkan.2) Selama jumlah data yang dimasukkan kurang dari n, kerjakan langkah ke‐

3 dan ke‐4. Jika tidak kerjakan langkah ke‐5.3) Masukan data.4) Tambahkan data yang dimasukkan dengan data sebelumnya.5) Hitung rata‐rata data.6) Tampilkan besar rata‐ratanya.

Uraian diatas dapat juga ditulis seperti dibawah ini:

1) Masukkan n2) i 03) Sum 04) Selama i < n, kerjakan langkah ke‐5, 6, dan 7.5) Masukkan data[i]6) Sum Sum + data[i]7) i++8) Rata2 Sum / n9) Tulis Rata2

Langkah ke-2 dan ke-3merupakan proses inisialisasi ataupemberian nilai awal yang diperlukandalam penulisan source code.Sebaiknya variabel Rata2 jugadiinisialisasi agar keluaran dariprogram lebih valid. Variabel idigunakan sebagai counter

(penghitung) untuk prosesperulangan yang digunakan untukmemasukkan data satu persatu dansekaligus menjumlahkan data yangdimasukkan dengan penjumlahandata sebelumnya dimanapenjumalahan data sebelumnyadisimpan dalam variabel Sum

78 Direktorat Pembinaan SMK | 2008

Page 87: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

b) Menggunakan flow chart

Mulai

Jumlah data (n)

i 0Sum 0

Tidak Yai < n

Data[i]

Sum Sum + Data[i]i++

Rata2 Sum / n

Rata2

Selesai

Gambar 2.15. Flowchart

Proses perulangan diperlukankarena banyak data yangdimasukkan belum diketahui denganpasti (lihat langkah pertama yang

meminta pengguna untukmemasukkan banyak data). Langkahke-7 merupakan increment variabel i,yaitu menaikkan nilai variabel i

2008 | Direktorat Pembinaan SMK 79

Page 88: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

sebesar satu tingkat. Data padapermasalahan ini disimpan dalamtipe data array (data[i]). Tipe data

array ini akan dibahas pada babtersendiri.

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 0sum 0 while(i <n)

read(data[i]) sum += data[i] i++

end w hilerata2 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 0for(i=0; i<n;

i++) read(data[i]) sum += data[i]

end forrata2 sum/ n write(rata2)

80 Direktorat Pembinaan SMK | 2008

Page 89: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

Langkah ke-2 pada algoritmadengan uraian kalimat deskriptifyang pertama dan langkah ke-4pada algoritma dengan uraiankalimat deskriptif yang kedua,terdapat kata kunci selama. Katakunci ini mengidentifikasikanbahwa dalam penerjemahan kedalam bentuk source codebahasa C++ atau programlainnya seperti java nanti kitaakan menggunakan klausa untuklooping (perulangan) yaitu while()dan atau for() karena langkah-langkah tersebut memerintahkankita untuk melakukan langkahberikutnya, bukan kembali kelangkah sebelumnya, jika kondisiyang telah ditentukan terpenuhi.While() dan for() dapat digunakansecara bergantian jika perulanganyang terjadi dapat diketahuibanyaknya (jumlah perulanganyang terjdi), dalam hal ini banyakperulangannya adalah n, yaitubanyak data yang akandimasukkan. Tetapi jika banyakperulangannya tidak dapatdiketahui dengan pasti, maka kitaharus menggunakan while(), tidakbisa dengan for(). Pada contohberikutnya akan diberikanperulangan yang tidak diketahuiberapa banyak perulangan yangterjadi.

Langkah-langkah yang masukdalam proses perulangan ini

adalah langkah ke-3 dan 4 padaalgoritma dengan uraian kalimatdeskriptif yang pertama danlangkah ke-5, 6, dan 7 padaalgoritma dengan uraian kalimatdeskriptif yang kedua. Pada babselanjutnya anda akanmengetahui bahwa klausaperulangan ini, dalam bahasaC++ atau program lainnya sepertijava, ada tiga macam bentukyang dapat anda pilih, yaitu for(),while(), atau do while().

Untuk algoritma dengan flowchart, proses perulangan yangmenggunakan klausa while() ataufor() dapat diidentifikasi darisimbol percabangan dimanakalau jalurnya, dalam hal ini jaluryang berlabel YA, kita telusuriakan terhubung ke simbolberikutnya dan kemudian kembalilagi simbol percabangan semula.Sedangkan untuk algoritmadengan pseudo code,penerjemahan tidak akanmengalami kesulitan karena,sekali lagi, struktur dari pseudocode sangat mirip denganpenulisan source code bahasapemrograman.

Dengan demikian penerjemahanalgoritma ke dalam bahasa C++adalah (perhatikan baris ke-8 sampaidengan baris ke-14 dimana baris ke-9 dan 10 merupakan baris tambahanagar program lebih user friendly).

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

2008 | Direktorat Pembinaan SMK 81

Page 90: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

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

Program diatas dapat juga ditulis seperti dibawah ini:

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

Sedangkan jika ditulis dalam bahasa Java adalah sebagai berikut:

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

82 Direktorat Pembinaan SMK | 2008

Page 91: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

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

Program diatas dapat juga ditulis seperti dibawah ini:

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

5. Masalah menentukan FaktorPersekutuan Besar (FPB).Untuk memecahkan persoalanFPB di atas, kita dapatmenggunakan algoritma Euclid

yang langkah-langkahnya adalah sebagai berikut :1) Diberikan dua buah bilangan

bulat positif, misalnya m dan ndimana syaratnya adalah m >n.

2008 | Direktorat Pembinaan SMK 83

Page 92: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

2) Bagilah m dengan n, misalnyahasilnya adalah r.

m 361. =

n 20 mempunyai sisa

3) Apabila r = 0, maka hasilnyaadalah n itu sendiri(merupakan FPB dari m dann).

r = 162. r = 16 r 03. m = 20 dan n = 16

4) Jika r 0 maka prosesm

4. =20

mempunyai sisapencarian dilanjutkan yaituganti m dengan n dan ndengan r dan ulangi langkahke-2, demikian selanjutnya.

n 16r = 4

5. r = 4 r 06. m =16 dan n = 4

Misalnya akan dicari FPB dari 36 7. m

16

mempunyai sisa rdan 20, maka penyelesaiannya n 4menurut algoritma Euclid adalah : = 0

Jadi FPB( 36, 20) = 4

b) Menggunakan flow chart

Mulai A

m, nYa

fpb n r = 0

Tidak

m > n

Ya

TidakTidak

r != 0

m nYa n r

r m % nfpb n

r m % n

fpb

A

Selesai

Gambar 2.16. Flowchart

84 Direktorat Pembinaan SMK | 2008

Page 93: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

Algoritma Euclid di atas merupakanalgoritma dengan uraian kalimat

deskriptif. Algoritma tersebut dapat ditulis kembali sebagai berikut:

a) Menggunakan uraian kalimat deskriptif1) Masukkan m dan n.2) Selama m < n ulangi kembali langkah pertama.3) r m % n4) Jika r = 0 maka fpb n.Jika tidak kerjakan langkah ke‐5.5) Selama r != 0 kerjakan langkah ke‐6 sampai ke‐8.6) m n dan n r7) r m % n8) fpb n9) Tulis fpb.

c) Menggunakan pseudo code{algoritma ini digunakan untuk mencari faktor persekutuan besar dari dua buah bilangan yang dimasukkan}deklarasi

m, n, r, fpb : integer deskripsi

do read(m,n) while(m<n) end do while r m % nif (r == 0) fpb n else

while(r !=0)

m n

n rr m %n fpb n

end w hile end if write(fpb)

Langkah ke-2 pada algoritmadengan uraian kalimat deskriptifmempunyai kata kunci SELAMAyang mengidentifikasikan bahwadalam penerjemahannya kedalam source code bahasapemrograman nantimenggunakan klausa untuk

perulangan. Akan tetapi kita tidakdapat menggunakan klausawhile() seperti pada contohsebelumnya karena pada kasusini langkah tersebutmemerintahkan untuk kembali kelangkah sebelumnya jika kondisiyang diberikan terpenuhi.

2008 | Direktorat Pembinaan SMK 85

Page 94: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

Oleh karena itu klausa yangpaling tepat digunakan adalah dowhile(). Sedangkan langkah ke-5kita gunakan klausa while()karena langkah ke-5memerintahkan kita untukmelakukan langkah-langkahberikutnya, bukan kembali kelangkah sebelumnya. Kita tidakbisa menggunakan klausa for()karena, sesuai denganpenjelasan pada contohsebelumnya, kita tidak bisamengetahui dengan pasti berapabanyak perulangan yang terjadi.

Dengan demikian dapat kitasimpulkan bahwa jika setelahproses pemeriksaan keadaanmemerintahkan kita untukmelakukan langkah-langkahberikutnya maka kitamenggunakan klausa while().Sebaliknya jika setelah prosespemeriksaan keadaanmemerintahkan kita untukkembali lagi melakukan langkah-

langkah sebelumnya maka kitamenggunakan klausa do while().

Untuk algoritma dengan flowchart, proses perulangan yangmenggunakan klausa do while()dapat diidentifikasi dari simbolpercabangan dimana kalaujalurnya, dalam hal ini jalur yangberlabel TIDAK, kita telusuri akanterhubung ke simbol sebelumnyadan kemudian kembali lagi simbolpercabangan semula.

Sedangkan untuk algoritmadengan pseudo code,penerjemahan tidak akanmengalami kesulitan karena,sekali lagi, struktur dari pseudocode sangat mirip denganpenulisan source code bahasapemrograman. Dengan demikianpenerjemahan algoritma kedalam bahasa C++ adalah(perhatikan baris ke-5 sampaidengan baris ke-10 dan baris ke-14 sampai dengan baris ke-19)

1. #include <iostream>2. using namespace std;3. int main() {4. int m,n,r,fpb;5. do {6. cout << "Masukkan bilangan pertama = ";7. cin >> m;8. cout << "Masukkan bilangan kedua = ";9. cin >> n;10. } while (m < n);11. r = m % n;12. if (r==0) fpb = n;13. else {14. while(r!=0) {15. m = n;16. n = r;17. r = m % n;

86 Direktorat Pembinaan SMK | 2008

Page 95: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa dan Algoritma Pemrograman Bahasa Pemrorgraman

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

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

2.12. Soal LatihanJawablah soal latihan dibawah ini dengan baik dan benar.1. Apa yang dimaksud dengan bahasa pemrograman2. Apa yang dimaksud dengan compiler dan intepreter3. Apa yang dimaksud dengan bahasa pemrograman prosedural dan

terstruktur4. Apa yang dimaksud dengan algoritma pemrograman

2008 | Direktorat Pembinaan SMK 87

Page 96: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Bahasa dan Algoritma Pemrograman

5. Sebutkan ciri-ciri algoritma pemrograman6. Buatlah algoritma sederhana untuk mencari bilangan ganjil dan genap7. Dari soal no 6 diatas buatlah diagram alirnya8. Dari soal no 7 diatas tulislah kode semu (psudocode) diagram alir tersebut9. Dari soal no 8 diatas tulislah kode sumbernya

88 Direktorat Pembinaan SMK | 2008

Page 97: 01 bab 01 Dasar Komputer fachkunde OK

dan simbol-simbol lain yang berfungsi 1. Data Numerik atau bilangan, yaitusebagai masukan untuk proses jenis data yang digunakan dalamkomputer. Data bisa berujut suatu proses aritmatika atau proseskeadaan, gambar, suara, huruf, matematis lainnya.angka, matematika, bahasa ataupun 2. Data String, yaitu jenis data yangsimbol-simbol lainnya yang bisa kita dapat terdiri dari berbagai macamgunakan sebagai bahan untuk karakter. Digunakan untuk prosesmelihat lingkungan, obyek, kejadian yang non matematis.ataupun suatu konsep. 3. Data Logika, yaitu data yang

Data belum mempunyai arti hanya terdiri dari dua satuan,apabila tidak diolah. Data yang telah yaitu benar (true) dan salahdiolah menjadi sebuah bentuk yang (false). Digunakan dalam suatuberarti disebut informasi . Data yang proses logika yang terdiri darimewakili simbol-simbol bukan persamaan boolean.merupakan informasi kecuali dalam

Tipe data dan Operator Bahasa Pemrorgraman

BAB 3TIPE DATA DAN OPERATOR

3.1. Pengertian Data3.2. Indentifier3.3. Konstanta3.4. Variabel3.5. Tipe Data3.6. Operator Bahasa C++3.7. Operator Unary3.8. Operator Binary3.9. Operator Ternary3.10. Ungkapan (Ekspresi)3.11. Soal Latihan

3.1. Pengertian DataData merupakan bentuk jamak

dari bahasa Latin dengan katadatum, yang berarti fakta atausesuatu yang diberikan. Data adalahkelompok simbol-simbol yang teraturdan mewakili kuantitas, tindakan,benda dan sebagainya. Dalam istilahumum data mewakili angka, karakter

pengertian tertentu. Pada komputerdata disimpan dalam memorisebelum dan sesudah pemrosesanoleh mikroprosesor.

Jenis data dalam setiap bahasapemrograman belum tentu sama,namun sebagian besar biasanyaterbagi menjadi tiga, yaitu :

2008 | Direktorat Pembinaan SMK 89

Page 98: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Tipe Data dan Operator

3.2. IndentifierIdentifier adalah nama yang

didefinisikan oleh programmer dandigunakan untuk mewakili sebuahelemen pada program. Namavariabel merupakan salah satucontoh dari identifier. Programmerdapat memilih sendiri nama sebuahvariabel pada C++, selama tidakmenggunakan salah satu dari kata

kunci (keyword) yang dimiliki olehC++. Keywords atau kata kuncimerupakan “inti” pada bahasa danmemiliki tujuan tertentu. Tabeldibawah ini menunjukkan daftarlengkap kata kunci C++. Dan yangperlu diperhatikan pada bahasa Cadalah bahwa semua harus hurufkecil.

asm auto break bool casecatch char class const const_castcontinue default delete do doubledynamic_cast

else enum explicit externfalse float for friend gotoif inline int long mutablenamespace new operator private protectedpublic register reinterpret_ca

streturn short

signed sizeof static static_cast structswitch template this throw truetry typedef typeid typename unionunsigned using virtual void volatilewchar_t while

Indentifier atau pengenal adalahnama yang diberikan untuk namavariable, nama konstanta, namafungsi, nama objek, nama method,nama class, dan obyek yang lainyang didefinisikan oleh pemrogram.

Dalam menulis program harusselalu memilih nama variabel yangmemberikan indikasi mengenai halyang berhubungan dengan yangdigunakan variable tersebut. Jikadimungkinkan mendeklarasikansebuah variabel dengan nama sepertiberikut ini:

int x;

maka x tidak termasuk sesuatu jenistertentu,sehingga hal tersebut tidakmemberikan petunjuk pada tujuanvariabel. Perhatikan contoh berikutdibawah yang lebih baik.

intdaftarUrutan;

Nama daftarUrutan memberikansesbuat pada pembaca programsehingga akan ide dari variabel yangdigunakan. Cara coding ini akanmembantu dalam menghasilkandokumentasi program sendiri, yangberarti anda akan mendapatkanpemahaman tentang apa yangdilakukan program hanya denganmembaca kode yang digunakannya.

90 Direktorat Pembinaan SMK | 2008

Page 99: 01 bab 01 Dasar Komputer fachkunde OK

Tipe data dan Operator Bahasa Pemrorgraman

Karena dunia program biasanyaada ribuan baris, hal ini penting agarbisa diingat oleh programmer itusendiri dan sebagai dokumentasiyang baik. Selain itu yang perludisadari adalah adanya campuranhuruf besar dan huruf dalam variabelnama daftarUrutan. Walaupun semuaC++, kata kunci harus ditulis dalamhuruf kecil, tetapi dalam penulisantersebut dapat menggunakan hurufbesar sebagai variabel nama.

Dalam bahasa pemrograman Cmaupun pada bahasa java identifiersifatnya case sensitive, artinya hurufbesar dan huruf kecil dianggapberbeda artinya, walaupundipernolehkan. Identifier terdiri dari : Karakter alphabet, yaitu : huruf ‘A’

sampai ‘Z’ dan huruf ‘a’ sampai ‘z’ Underscore ( _ ) dan tanda dollar

($) Digit decimal, yaitu: bilangan

antara ‘0’ sampai ‘9’

Dalam menulis program ada hal-hal yang harus diperhatikan sebagaiketentuan dalam pemberian nama

identifier. Ketentuan-ketentuan dalampenulisan identifier antara lain: Terdiri dari gabungan huruf dan

angka dengan karakter pertamaharus berupa huruf atauunderscore atau tanda dollar ($).

Tidak boleh mengandung spasidan symbol-simbol khusus, kecualigaris bawah (underscore) atautanda dollar ($) khusus untuk java.Yang termasuk symbol khususyang tidak diperbolehkan antaralain: $, ?, %, #, !, &, *, (, ), -, +, =,dan sebagainya.

Panjangnya bebas, tetapi hanya32 karakter pertama yangterpakai, tetapi sebaiknyasependek mungkin minimal satukarakter.

Tidak boleh sama dengan katakunci (keyword) dan katatercadang (reserved word) yangada dalam bahasa pemrograman.

Untuk lebih jelasnya mengenaiidentifier dapat dilihat pada contohidentifier yang benar dan yang salah

Tabel 3.1. Penulisan Identifier

PENULISAN

KETERANGAN IDENTIFIERNomor

NamaNilai_siswadata1Rekam_1_temp$harga_jual

Penulisan Benar

1dataNomor‐siswa,nama siswa if2_jalan2$main

Penulisan Salah

2008 | Direktorat Pembinaan SMK 91

Page 100: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Tipe Data dan Operator

3.3. KonstantaSuatu data yang sifatnya tetap,

dan digunakan dalam pemrogramandiistilahkan dengan konstanta.Konstanta adalah sebuah namatempat penyimpanan sementara didalam memori yang nilainya tetapatau tidak dapat diubah. Konstantaharus didefinisikan terlebih dahulupada awal program. Konstanta dapatbernilai integer, pecahan, karakteratau string. Perhatikan contohsebuah konstanta berikut ini:

503.14‘A’“BahasaPemrograman”

Dalam melakukan pemrograman adadua tipe konstanta yaitu konstantabilangan dan konstanta teks ataustring.

3.3.1. Konstanta BilanganKonstanta bilangan atau sering

juga disebut dengan konstantanumeric yaitu suatu konstanta yangnilai tetapnya berupa bilangan.Konstanta bilangan atau numerikdibagi dalam dua kelompok, yaitu :

a. Konstanta bilangan bulat (integer)Konstanta bilangan bulat

merupakan sebuah konstanta yangnilai tetapnya berupa bilangan bulat.Konstanta bilangan bulat dapatdisajikan dalam bentuk decimal, oktalataupun heksadesimal. Dalam sistemdecimal, bilangan yang digunakanberkisar antara 0 sampai 9.Penulisan konstanta langsungangkanya, misalnya: 10, 9, 5 dansebagainya.

Dalam sistem octal, bilanganyang digunakan berkisar antara 0sampai dengan 7. Penulisankonstanta diawali dengan 0 misalnya:010, 046, 055 dan sebagainya.Dalam sistem heksadesimal,bilangan yang digunakan berkisarantara 0 sampai dengan F. Bilanganyang dapat dipakai berupa salah satudiantara 16 simbol adalah berikut:

0 1 2 3 4 5 6 7 8 9 A BC D E F

Bisa juga ditulis sebagai berikut:

0 1 2 3 4 5 6 7 8 9 a bc d e f.

Cara penulisan konstanta bilanganini diawali dengan 0x (nol dan x),misalnya: 0xAF, 0x7F, dansebagainya.

b. konstanta bilangan real ataupecahanKonstanta dengan nilai tetapnya

berupa bilangan pecahan. Konstantabilangan real atau pecahan dibagidua jenis, yaitu: Konstanta databilangan desimal berpresisi tunggal(floating point), dimana bilangan inimemiliki derajat ketelitian sampai 7digit dan dapat dinyatakan dalam duabentuk tampilan, yaitu : Bentuk desimal, contoh : 21.333 Bentuk eksponensial, dituliskan

dengan notasi scientific. Denganbentuk umum: bulat pecahan{E|D}{[+] | [-]} pangkat misalnya:0.21333E+2 dimana hal penulisan ini mempunyai arti: 0.2133 x 102

Sedangkan konstanta databilangan desimal berpresisi ganda(double precision) serupa denganfloating point, hanya derajat ketelitian

92 Direktorat Pembinaan SMK | 2008

Page 101: 01 bab 01 Dasar Komputer fachkunde OK

Tipe data dan Operator Bahasa Pemrorgraman

dan range jangkauan yang dimilikilebih tinggi. Derajat ketelitian untukfloating point 7 digit, sedangkandouble precision 16 digit.

3.3.2. Konstanta Teks/String.Konstanta teks atau string

adalah suatu konstanta yang nilaitetapnya berupa teks. Konstanta teksdibedakan dalam dua jenis, yaitu:

a. Konstanta data karakterKonstanta data karakter terdiri

dari sebuah karakter saja dan

ditandai dengan dua tanda kutiptunggal (‘.’) sebagai pembatasnya.misalnya: ‘A’, ‘b’, ‘&’, ‘!’.Selain itu juga ada beberapa diantarakonstanta data karakter yang ditulisdengan diawali tanda \ (penempatantanda \ setelah tanda petik tunggalpembuka).

Karakter ini dinamakanrangkaian escape (escapesequence), sehingga disebut dengankonstanta karakter rangkaian escape.Beberapa karakter rangkaian escape,antara lain :

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 sembarangkarakter ASCII, notasi yang dapatdipergunakan, antara lain: \DDDdengan DDD = 1 sampai dengan 3digit octal atau \xHH dengan HH = 1sampai dengan 2 digit heksadesimal,

misalnya: ‘\”’ atau ‘\42’ atau ‘\x22’.Selain karakter biasa, juga terdapatkarakter khusus yang didefinisikandengan cara mengawalinyamenggunakan tanda \ seperti padadijelaskan pada tabel dibawah ini:

2008 | Direktorat Pembinaan SMK 93

Page 102: 01 bab 01 Dasar Komputer fachkunde OK

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.Konstanta data string merupakan

rangkaian dari beberapa karakter danditandai dengan dua tanda kutip

ganda (“ ”) sebagai pembatasnya.Perhatikan contoh penulisan dibawahini:

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

Dalam penulisan program, sebuahkonstanta perlu dideklarasikan,dimana deklarasi konstantamerupakan proses untukmenyebutkan karakteristik konstantaseperti nama, tipe data, jangkauan,masa hidup, dan nilai awal. Dalambahasa C pendeklarasikan konstantaada 2 cara, yaitu: denganmenggunakan pengarah compileratau preprocessor #define, dandengan keyword const. penulisan

Untuk lebih jelasnya pehatikancontoh program dibawah ini:

sintaks dari deklarasi konstantadalam bahasa C adalah sebagaiberikut:#define<namakonstanta> <nilai>

Atau dapat juga ditulis sebagaiberikut:

const <tipedata><namakonstanta> =<nilai>;

Atau bisa juga ditulis seperti programdibawah ini:

#define nomor 100#define phi 3.14#define huruf ‘K’#define nama “Hello”

const int nomor = 100; const float phi = 3.14; const char huruf = ‘K’;const String nama=“Hello”;

Program 3.1. Penggunaan konstanta dalam program#include <conio.h>#include <iostream>#define nomor 100

94 Direktorat Pembinaan SMK | 2008

Page 103: 01 bab 01 Dasar Komputer fachkunde OK

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: 100Nilai konstanta phi : 3.14Nilai konstanta huruf: KNilai konstanta nama : Hello

Pada program dibawah ini hasilsetelah decompile akan samadengan program diatas. Programdibawah merupakan salah satucontoh penulisan yang berbeda tetapi

akan menghasilkan hasil yang sama dengan program sebelumnya.

Perhatikan pada penggunaankonstanta dalam aplikasi programdibawah ini:

Program 3.2#include <conio.h>#include <iostream> constint 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

Page 104: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Tipe Data dan Operator

getch();return 0 ;

}

Keluaran program diatas adalah sebagai berikut:Nilai konstanta nomor: 100Nilai konstanta phi : 3.14Nilai konstanta huruf: KNilai konstanta nama : Hello

3.4. VariabelVariabel atau pengubah adalah

suatu lambang dari sebuah lokasiyang berada dimemori utamakomputer yang dapat berisi suatunilai. Nilai yang berada di lokasimemori tersebut dapat berubahselama program dieksekusi. Gunavariable adalah sebagai tempatsementara untuk menyimpan datayang sedang diolah. Pemberian nilaikedalam suatu variabel mempunyaibentuk penulisan yang berbeda-bedapada setiap bahasa pemrograman.Meskipun mempunyai arti yang samadalam pemrogramannya.

Variabel dibedakan atas variabelnumerik dan variabel string. Variabelnumerik adalah variabel yangmengandung nilai numerik atauangka sedangkan variabel stringadalah variabel yang berisi nilai huruf/alpha-numerik.Suatu variabel dapat mewakili: Nilai Konstanta

double pecahan = 13.45;int nilai = 85;

Nilai dari pengubah lain

char abjad = ”T” ;char huruf = abjad;

Nilai yang diperoleh darikombinasi beberapa pengubahatau nilai konstanta denganmelalui operator.

double pi = 3.141593;double r;double l_lingkaran = pi * r * r;

3.4.1. Tipe VariabelBerdasarkan pada jenis data

yang disimpan pada variabel yaitu:Variabel numeric dan variable teks.Pada variable numeric merupakansuatu variabel yang dipakai untukmenampung data berupa angka.

Variabel numerik digolongkanatas: bilangan bulat atau integer danbilangan real atau pecahan, dimanabilangan real terdiri dari dua yaitu: bilangan decimal berpresisi

tunggal (floating point) bilangan decimal berpresisi ganda

(double precision).Sedangkan pada variable teksmerupakan suatu variabel yangdipergunakan untuk menampungdata berupa huruf atau teks. Variabelteks dibedakan menjadi dua yaitu: Karakter (untuk karakter tunggal) String (untuk rangkaian karakter)

96 Direktorat Pembinaan SMK | 2008

Page 105: 01 bab 01 Dasar Komputer fachkunde OK

Tipe data dan Operator Bahasa Pemrorgraman

3.4.2. Jenis VariabelBerdasarkan pada lokasi atau

wilayah dan waktu pengaksesannya,variabel dapat dibedakan atas 2jenis, yaitu: Variabel Lokal danVariabel Global. Variabel localmerupakan Variabel yangdideklarasikan pada fungsi termasukfungsi utama (main), variabeldialokasikan selama fungsipendeklarasi dijalankan dan Variabeldidealokasikan jika fungsipendeklarasi tidak dijalankan.

Sedangkan Variabel Globaladalah Variabel yang dideklarasikan

sebelum definisi fungsi termasukfunsi utama, Variabel dialokasikanselama program dijalankan danVariabel didealokasikan setelahprogram selesai dijalankan

3.4.3. Deklarasi VariabelDeklarasi variable adalah prosesuntuk menyebutkan karakteristikvariable seperti nama, tipe data,jangkauan, masa hidup, dan nilaiawal. Penulisan Sintaks untukmendeklarasikan sebuah variableadalah sebagai berikut:

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

Dalam penulisan sintak tersebutyang perlu diperhatikan adalahbahwa semua yang ada dalam tanda<…> harus ada dan semua yangada dalam tanda […] bersifattambahan boleh ada atau boleh tidaktergantung keperluan. Perhatikancontoh penulisan dibawah ini:

int bilangan;char karakter; float bildesimal;

Setelah mendeklarasikan sebuahvariabel dengan tipe data,selanjutnya memberikan nilai variabeltersebut dengan tanda = (sama dengan)

bilangan = 20; karakter ='k'; bildesimal = 22.2;

atau dapat juga mendeklarasikan danmemberikan nilai dalam satu baris.

int bilangan = 20;char karakter = 'k';char huruf, huruf1 = 'C', huruf2 = 'O';float bildesimal = 22.2;

3.4.4. Kelas VariabelSelain digolongkan berdasarkan

tipe datanya, sebuah variabel jugadiklasifikasikan berdasarkan kelaspenyimpanan, yaitu: Variable localatau otomatis, variable eksternal,variable statis dan variable register

Variable local adalah merupakanvariabel yang dideklarasikan dalamsebuah fungsi dan mempunyai sifat-sifat sebagai berikut: Secara otomatis diciptakan ketika

fungsi dipanggil dan akan lenyapketika eksekusi terhadap fungsiberakhir

Hanya dikenal oleh fungsi tempatvariable dideklarasikan

Tidak ada inisialisasi secaraotomatis (saat variable diciptakannilainya tak menentu)

2008 | Direktorat Pembinaan SMK 97

Page 106: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Tipe Data dan Operator

Deklarasinya dengan kata kunciauto.

Perhatikan penulisan variable localberikut ini:

auto intx;

Untuk lebih jelasnya perhatikanprogram dengan menggunakanvariable 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 dijelaskandiatas, juga terdapat kelas variableeksternal dimana variable inimendeklarasikan diluar sebuahfungsi, dan mempunyai sifat berikut: Dapat diakses oleh semua fungsi Kalau tidak diberi nilai, secara

otomatis diinisialisasi dengan nilaisama dengan nol

Deklarasinya dengan kata kunciextern didalam fungsi yangmenggunakan variable jenis ini.

Perhatikan penulisan variableeksternal berikut ini:

extern int x;

98 Direktorat Pembinaan SMK | 2008

Page 107: 01 bab 01 Dasar Komputer fachkunde OK

Tipe data dan Operator Bahasa Pemrorgraman

untuk lebih jelasnya perhatikanprogram dengan menggunakan

variable eksternal berikut ini:

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 = 1Nilai j kemudian = 5Nilai j kini = 50Nilai j sekarang = 500

Variable statis merupakansebuah variable internal yangdidefinisikan didalam fungsi maupunvariable eksternal, dan variable ini

mempunyai sifat-sifat sebagaiberikut:

2008 | Direktorat Pembinaan SMK 99

Page 108: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Tipe Data dan Operator

Kalau bersifat internal, makahanya dikenal oleh fungsi tempatvariable dideklarasikan

Kalau bersifat eksternal, makadapat dipergunakan oleh semuafungsi yang terletak pada file yangsama tempat variabledideklarasikan

Tidak hilang sekeluarnya darifungsi

Inisialisasi hanya dilakukan sekalipada saat fungsi dipanggilpertama kali, jika tidak ada

inisialisasi oleh pemrogram secaraotomatis akan diberi nilai awal nol.

Deklarasinya dengan kata kuncistatic.

Perhatikan penulisan variable statis berikut ini:

static int x;

Untuk lebih jelasnya perhatikanprogram dengan menggunakanvariable statis berikut ini:

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 statisk++;cout <<"Nilai k dalam tambah() = "<< k<<"\n";

}

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

100 Direktorat Pembinaan SMK | 2008

Page 109: 01 bab 01 Dasar Komputer fachkunde OK

Tipe data dan Operator Bahasa Pemrorgraman

Variable register adalah variableyang nilainya disimpan dalam registermikroprosesor bukan didalam memoriRAM, variable ini mempunyai sifat-sifat sebagai berikut: Mempunyai kecepatan akses lebih

tinggi Hanya dapat diterapkan pada

variable local atau parameterformal yang bertipe char atau int

Biasa diterapkan untukpengendalian loop.

Deklarasinya dengan kata kunciregister.

Perhatikan penulisan variable registerberikut ini:

register intx;

untuk lebih jelasnya perhatikanprogram dengan menggunakanvariable register berikut ini:

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

using namespace std;

main(){

}

register int n, jml;//variabel registerint 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 DataTipe data merupakan tempat

untuk menentukan pemberian nilaiterhadap suatu variabel yangdiberikan oleh user. Selain itu tipedata juga dapat diartikan sebagaibatasan terhadap fungsi tandapengenal terhadap semua nilai yangditerima. Sebagai gambaran dari pengertian tersebut adalah ketika

kita menempatkan tanda pengenalharga hanya mengenal angka, makaketika kita memberikan nilai berupastring maka secara otomatis datatersebut akan ditolak karena nilaitersebut tidak dikenali oleh tipe datayang diberikan.

Tipe data dalam variablemenentukan tipe data yang bisadisimpan didalamnya, format data

2008 | Direktorat Pembinaan SMK 101

Page 110: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Tipe Data dan Operator

yang disimpan, dan berapa banyakmemori yang dialokasikan untukmenyimpan data.

Tipe data tersebutdiklasifikasikan berdasarkanbagaimana keadaan data disimpandalam memori, dan jenis operasiyang dapat dilakukan. Tipe datamerupakan bagian program yangpaling penting karena tipe datamempengaruhi setiap instruksi yangakan dilaksanakan oleh komputer.Misalnya saja 3 dibagi 2 bisa sajamenghasilkan hasil yang berbedatergantung tipe datanya. Jika 3 dan 2bertipe integer, maka program akanmenghasilkan nilai 1, namun jikakeduanya bertipe float maka akanmenghasilkan nilai 1.5000000.Pemilihan tipe data yang tepat akanmembuat proses operasi datamenjadi lebih efisien dan efektif.Fungsi Tipe data antara lain:

Merepresentasikan nilai dari suatuvariabel maupun konstanta,Penyimpanan data di memori, danMenentukan nilai yang dapat diisikanke dalam sebuah variable.

Sedangkan jenis tipe data adadua macam: Tipe dasar atau primitivedan Tipe bentukan atau referensi.Dalam bahasa C terdapat lima tipedata dasar, yaitu: int, char, float,double, dan void. Sedangkan dalambahasa pemrograman lain sepertijava misalnya memiliki tipe data yangdapat dikategorikan menjadi duakelompok, yaitu tipe data primitif danreferensi. Ada delapan macam tipedata primitif dalam pemrogramanJava, yaitu : char, byte, short, int,long, float, double, dan Boolean. Tipedata referensi digunakan untukmereferensikan objek atau classtertentu, seperti String.

Tabel 3.4. Tipe Data (16 bit) Dalam C

TIPE UKURAN

RANGEunsigned char 8 bit 0 ‐

255char 8 bit ‐128 ‐127enum 16

bit‐32768 ‐ 32767

unsigned int 16 bit

0 ‐65535short int 16

bit‐32768 ‐ 32767

int 16 bit

‐32768 ‐ 32767unsigned long 32

bit0 ‐ 4294967295

long 32 bit

‐2147483648 ‐ 2147483647float 32

bit3.4E‐38 ‐ 3.4E+38

double 64 bit

1.7E‐308 ‐ 1.7E+308long double 80

bit3.4E‐4932 ‐ 1.1E+4932void 0 bit

near (pointer) 16 bitfar (pointer) 32 bit

102 Direktorat Pembinaan SMK | 2008

Page 111: 01 bab 01 Dasar Komputer fachkunde OK

Tipe data dan Operator Bahasa Pemrorgraman

Tabel 3.5. Tipe Data (32 bit) Dalam C

Tipe

Ukuran

Rangeunsigned

char8 bit 0 ‐

255char

8 bit ‐128 ‐127short int 16 bit ‐32768 ‐ 32767

unsigned int 32 bit 0 ‐ 4294967295int 32 bit ‐2147483648 ‐

2147483647unsigned long

32 bit 0 ‐ 4294967295enum

32 bit ‐2147483648 ‐ 2147483647long 32 bit ‐2147483648 ‐ 2147483647float 32 bit 3.4E‐38 ‐ 3.4E+38

double 64 bit 1.7E‐308 ‐ 1.7E+308long double 80 bit 3.4E‐4932 ‐

1.1E+4932void 0 bitnear (pointer) 16 bitfar (pointer) 32 bit

Tabel 3.6. Format Tipe Data Dalam C

TIPE FORMAT

KETERANGANchar %c Karakter/string

int %i, %d Integer/bilangan bulatfloat %f Float/bilangan pecahan presisi

tunggaldouble %lf Bilangan pecahan presisi ganda

3.5.1. Tipe data IntegerProgram Komputer merupakan

kumpulan potongan data danmemanipulasi data tersebut dalamberbagai cara. Ada berbagai jenisdata dalam bidang informasi,misalnya: bilangan, terdapat bilanganbulat dan bilangan pecahan, adabilangan positif dan negative, danada pula bilangan besar sertabilangan kecil dan lain-lain, ataubahkan bilangan yang tidak memilikinama.

Kemudian ada juga informasitekstual, misalnya Nama dan alamat,maka data seperti ini akan disimpansebagai karakter. Bila programmermenulis sebuah program, makaharus menentukan jenis informasiyang digunakannya. Jika menulissebuah program untuk menentukanjauhnya berapa mil dari bumi kebintang, maka diperlukan variabelyang dapat menampung jumlah yangsangat besar. Jika Anda sedangmerancang perangkat lunak untukmerekam sebuah dimensimikroskopis, maka hanya perlu untuk

2008 | Direktorat Pembinaan SMK 103

Page 112: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Tipe Data dan Operator

menyimpan data yang sangat kecildan angka sesuai. Sebagaitambahan, jika Anda menulis sebuahprogram yang harus melakukanribuan perhitungan intensif, makaakan menginginkan variabel yangdapat diproses dengan cepat. TipeData variabel inilah yang akanmenentukan semua factor tersebut.

Bahasa C++ menyediakanberbagai tipe data, yang secara garisbesar hanya dibagi menjadi duayaitu: data numerik dan karakter.Numerik merupakan tipe data yangdibagi menjadi dua kategori yaitu:integer dan floating-point. Integersadalah bilangan yang meliputiseluruh nomor seperti 12, 157, -34, 2daln lain sebagainya. Floating-pointmerupakan angka yang ada angkadecimal di belakang koma, misalnya23,7, 189,0231, 0,987 dan lainsebagainya.

Sebelum kita membicarakan tipedata karakter, mari kita hati-hatimemeriksa variasi dari data numerik.Pertimbangan utama untuk memilihtipe data numerik adalah: Angka Terbesar dan terkecil yang

dapat disimpan dalam variable. Berapa banyak memori yang

digunakan oleh variabel.

Apakah variabel menanganipenyimpanan (baik positif maupunnegatif) atau bilangan unsigned(hanya positif).

Bilangan decimal merupakanvariabel yang presisi

Ukuran variabel adalah jumlah bytememori yang digunakan. Biasanya,semakin besar range variable, makajumlah yang digunakan akan lebihbesar pula.

3.5.2. Tipe Data KarakterKarakter adalah sembarang

huruf, angka, atau tanda bacatunggal. Tipe data karaktermerupakan kumpulan bermacam-macam karakter yang terdiri darialfabet. Diman karakter antara lain:Alfabet bilangan decimal: 0, 1, 2, …,9, Alfabet huruf latin besar : A, B, C,…, Z, Alfabet huruf latin kecil : a, b,c, ... , z dan Tanda baca tunggal :!, @, ~, ?, ;, ‘, &, dan sebagainya.

Tipe data karakter ini hanyaterdiri dari 1 karakter dan Bentuk tipedata dari karakter yaitu: char.Perhatikan penulisan contohdeklarasi char, dimana char hurufyang ditampilkan adalah = ‘A’ ;

Program 3.7include <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

Page 113: 01 bab 01 Dasar Komputer fachkunde OK

Tipe data dan Operator Bahasa Pemrorgraman

Keluaran program diatas adalah sebagai berikut:Tipe Data Char pada C++

3.5.3. Tipe Data StringString adalah deretan karakter

yang diakhiri dengan sebuah karakterkosong. Konstanta bertipe ditulisdiantara tanda petik dua (“ ….”).Dalam bahasa C string merupakan

larik atau array dari tipe data char,sedangkan dalam bahasa java stringmerupakan tipe data referensi atausebuah objek. Contoh dibawahmerupakan deklarasi string dalam C:

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

Tipe data ini digunakan untukdata-data angka yang tidakmengandung angka di belakangkoma (int) atau digunakan untukmenyatakan bilangan bulat.Perubahan tanda bilangan padabilangan bulat dapat diset dalam duatipe, yaitu: bilangan bulat bertanda(signed integer), yang merupakan

bilangan bulat yang memiliki rangedari bilangan negatip sampai positipdan bilangan bulat tak bertanda(unsigned integer), yang merupakanbilangan bulat yang hanya memilikirange nilai positip saja.

Tipe data yang termasuk kedalam bilangan bulat adalah: yangpertama, char atau signed char danunsigned char atau byte dalam javadan pascal. Rentang nilai signed charmulai -128 sampai 127. Kedua,

2008 | Direktorat Pembinaan SMK 105

Page 114: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Tipe Data dan Operator

rentang nilai unsigned char mulai 0sampai 255, short int atau signedshort int dan unsigned short int.Rentang nilai signed short int mulai -32.768 sampai 32.767. Rentang nilaiunsigned short int mulai 0 sampai65.535. Ketiga adalah int atau signedint dan unsigned int. Rentang nilaisigned int mulai -32.768 sampai32.767.

Rentang nilai unsigned int mulai0 sampai 65.535, dan keempatadalah long int atau signed long intdan unsigned long int. Rentang nilaisigned long int mulai -21474836478sampai 2147483647. Rentang nilaiunsigned long int mulai 0 sampai4294967295. Rentang di atas untuktipe data bilangan bulat dalam 16 bit.

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

Tipe ini merepresentasikan data-data bilangan yang mengandungangka di belakang koma ataumenyatakan bilangan pecahan,maupun eksponensial. Tipe datayang termasuk ke dalam kategori iniadalah: float dan double. Contohdeklarasi float dan double adalahsebagai berikut:

floatnilai;doublebeta;

Semua bilangan pecahan ataudesimal dalam Java tanpa diakhirihuruf f akan dianggap sebagaidouble. Sedangkan bilangan yangingin dikategorikan sebagai floatharus diakhiri dengan huruf F.Misalnya : 4.22F atau 2.314f.Sedangkan untuk bilangan double,bisa menambah dengan huruf D,karena secara default bilangandengan koma atau pecahan ataudesimal akan dianggap sebagaidouble. Pehatikan contoh programberikut ini:

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

using namespace std;

main(){

106 Direktorat Pembinaan SMK | 2008

Page 115: 01 bab 01 Dasar Komputer fachkunde OK

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 32767Range unsigned short int : 0 s/d 65535Range signed int : ‐32768 s/d 32767Range unsigned int : 0 s/d 65535Range signed long int : ‐2147483648 s/d 2147483647Range 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

Page 116: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Tipe Data dan Operator

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

3.5.6. Tipe Data LogikaTipe data logika digunakan untuk

merepresentasikan data-data yangmengandung dua buah nilai logikaboolean, yaitu: nilai 1 dan 0 atausering juga disebut sebagai nilai truedan false (benar dan salah). Dalambahasa C++ tidak ada data tipe

boolean. Perhatikan contoh deklarasiBoolean berikut ini:

Boolean kondisi;Boolean kondisi_awal = true;

Pehatikan contoh program berikut ini:

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

using namespace std;

main(){ enum boolean {FALSE, TRUE};

enum boolean kondisi;kondisi = TRUE;if (kondisi)cout <<"Kondisi : "<< kondisi;else{

}getch();

kondisi = FALSE;cout <<"Kondisi : "<< kondisi;

return 0 ;}

Keluaran program adalah sebagai berikut:Kondisi : 1

3.5.7. Enumerasi / ENUMEnumerasi adalah serangkaian

symbol berurutan yangmenspesifikasikan konstanta bertipeinteger. Dalam C++ tidak terdapat

tipe Bolean, sehingga untukmerepresentasikan TRUE dengannilai integer bukan nol ( 1, 2, dst ),sedangkan FALSE dengan nilai nol

108 Direktorat Pembinaan SMK | 2008

Page 117: 01 bab 01 Dasar Komputer fachkunde OK

Tipe data dan Operator Bahasa Pemrorgraman

(0). Perhatikan contoh deklarasienum:

enum boolean { false, true} ; atauenum boolean { salah = 0,benar = 1 } ;

3.5.8. Tipe Data VoidVoid menyatakan tipe kosong

dan digunakan untuk: pertamanuntuk mendeklarasikan fungsi yangtidak mengembalikan nilai apapun.Serta fungsi kedua adalah untukmendeklarasikan fungsi yang tidakmenerima parameter apapun. Padatipe data ini jika diawali denganoperator *, menyatakan penunjukterhadap sembarang tipe data.Perhatikan contoh deklarasi voidseperti berikut ini:

void cctrputs(char*,int );

atau ditulis:

main(void) ;

atau dapat juga ditulis

untuk lebih jelasnya mengenai tipedata pointer akan dijelaskan dalambab pointer

3.5.10. Tipe Data Larik / arrayArray adalah sekelompok data

bertipe sama yang menduduki lokasimemori yang berurutan. Jumlahelemen array dinyatakan dengancara mengapit jumlah yang dimaksud dengan tanda ‘ [ … ] ‘. Carapenulisan sintaks tipe data larikadalah sebagai berikut :

<tipedata><namavariabelArray> <[jumlahelemen ]> ;

Misalnya penulisan tipe char denganarray adalah sebagai berikut:

charkata[5];

Untuk menyatakan array berdimensilebih dari 1 (satu), maka ditambahkantanda ‘[ … ]’ sebanyak dimensi yangdiinginkan. Misalnya jika inginmendeklarasikan array 2 dimensiadalah sebagai berikut:

void*action ;int ivalue =100 ;action =&ivalue ;

3.5.9. Tipe Data PointerPointer adalah variable yang

berisi nilai alamat suatu lokasimemori tertentu. Deklarasi penunjukdilakukan dengan menspesifikasikan*, sebelum nama varibel/konstanta.Contoh deklarasi pointer adalahsebagai berikut:

char*p;

int matrix [2][3] ;

Untuk lebih jelasnya mengenai tipe data array akan dijelaskan dalam babselanjutnya yang membahas array.

3.5.11. Tipe Data Struct, UnionTipe data ini digunakan untuk

mendeklarasikan sekelompok datayang memiliki tipe yang berlainan.struct: elemennya berada dilokasimemori yang berbeda, dan union:elemennya ada dilokasi memori yangsama. Perhatikan potongan programdibawah ini:

2008 | Direktorat Pembinaan SMK 109

Page 118: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Tipe Data dan Operator

union namaunion{

Tipeanggota1 namaAnggota1 ;Tipeanggota2 namaAnggota2 ;………….

};

Atau dapat juga ditulis sepertidibawah ini:

union{

Tipeanggota1 namaAnggota1 ;Tipeanggota2 namaAnggota2 ;………….

}namaunion;

struct namaStruktur{

Tipeanggota1 namaAnggota1 ; Tipeanggota2 namaAnggota2 ;………….

Atau dapat juga ditulis

struct{

Tipeanggota1 namaAnggota1 ; Tipeanggota2 namaAnggota2 ;………….

}namaStruktur ;

3.5.12. Tipe Data typedefTipe data typedef digunakan

untuk menamakan suatu tipe datadengan pengenal yang lebih berartiatau mudah diingat. Sintakspenulisan program tipe data iniadalah sebagai berikut:typedef tipedatanamabaru;

Perhatikan contoh penulisan programdibawah ini :

typedef unsigned charbyte;

};

3.6. Operator Bahasa C++Bahasa C++ menyediakan

beberapa operator untukmemanipulasi data. Secara umum,terdapat tiga jenis operator: unary,binary dan ternary. Istilah tersebutmencerminkan jumlah operandsoperator yang dibutuhkan.

Operator unary hanyamemerlukan satu operand. Misalnya,mempertimbangkan ekspresi berikut:-5. Dalam contoh diatas perludipahami bahwa mewakili angka limabernilai negatif. Konstanta 5 adalah

diawali dengan tanda minus. Tandaminus, bila digunakan dengan caraseperti ini, yang disebutpenyangkalan operator. Karenahanya memerlukan satu operand, haltersebu merupakan operator unary.Operator binary bekerja dengan duaoperand.

Tugas operator ini biasanyapada operasi aritmetik yang haltersebut sudah sangat umum dalambahasa pemrograman. Tabeldibawah menunjukkan operatorarithmetic pada bahasa C++.

110 Direktorat Pembinaan SMK | 2008

Page 119: 01 bab 01 Dasar Komputer fachkunde OK

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 seorangprogrammer tidak akan asing danselalu bekerja dengan operator.Operator Penambahan digunakanuntuk menjumlahkan dua operand.Pada pernyataan berikut inimerupakan fungsi variabel jumlahyang diberi dengan nilai 12 adalah:

jumlah = 4+ 8;

operator pengurangan merupakanoperasi dimana nilai pengurangaberasal dari operand sebelah kiridikurangi atau disubtracted operandsebelah kanan. Pernyataan dibawahini akan memperoleh nilai 98 untuksuhu:

suhu = 112 ‐14;

Pada sebuah operator perkalian akanmengalikan dua buah operand.Perhatian pernyataan berikutini,dimana markup akan diisi nilai 3:

markup = 12 *0,25;

pada operator pembagian hasildiperoleh dengan cara memlakuknbagi operand disebelah kiri dibagidengan operand sebelah kanan.Dalam pernyataan berikutnya,variable poin akan memperoleh nilai5:

poin = 100 /20;

Dalam operasi pembagian integerternyata tidak selalu memasukanhasil dari operasi pembagian tetapiyang diambil adalah sisa dri hasilbagi tersebut. Untuk lebih jelasnyaperhatikan pernyataan berikut ini,dimana hasilnya adalah 2 atau nilaisisa sama dengan 2:

sisa =17% 3;

Program 3.12 Perhatikan contoh program dibawah ini:#include <conio.h>#include <iostream>

using namespace std;

2008 | Direktorat Pembinaan SMK 111

Page 120: 01 bab 01 Dasar Komputer fachkunde OK

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 adalahUpah untuk minggu ini adalah Rp. 1007.8

3.7. Operator UnaryOperator Unary merupakan

operator yang hanya memiliki ataumelibatkan sebuah operand saja.

Terdapat beberapa operator unary, seperti terlihat pada tabel berikut ini:

Tabel 3.7. Operator Unary

OPERATOR

ARTI

LETAK

CONTOH

EQUIVALEN‐ Unary minus Sebelum operator A + ‐B *

CA + (‐B) * C+

+Peningkatan denganPenambahan nilai

Sebelum dansesudah

A++

A = A + 1

‐‐ Penurunan denganPengurang‐an

Sebelum dansesudah

A‐‐ A = A – 1

sizeof Ukuran dari operanddalam byte

Sebelum sizeof(I) ‐

! Unary NOT Sebelum !A ‐~ Bitwise NOT Sebelum ~

A‐

&Menghasilkanalamat memori operand

Sebelum &A ‐

* Menghasil‐kan nilaidari pointer

Sebelum *A ‐

112 Direktorat Pembinaan SMK | 2008

Page 121: 01 bab 01 Dasar Komputer fachkunde OK

Tipe data dan Operator Bahasa Pemrorgraman

Dalam operator unary ada yang perludiperhatikan ketika menulis programyaitu: bahwa operator peningkatan++ dan penurunan -- jika diletakkansebelum atau sesudah operandterdapat perbedaan.

3.7.1. Operator Increment danDecrement

Suatu variable yang nilainyaselalu bertambah satu, seperti padasebuah variable pencacah naik (upcounter) dengan rumus: hitung =hitung + 1 dapat ditulis dengan hitung+= 1 dan secara singkat ditulishitung++ atau ++hitung. Notasi ++

disebut operator penambah(increment) dan pada sebuahvariable pencacah turun (downcounter) dengan rumus: hitung =hitung - 1 dapat ditulis dengan hitung-= 1 dan secara singkat ditulis hitung-- atau --hitung. Notasi -- disebutoperator pengurang (decrement).

Program dibawah merupakanoperasi hitung perulangan sebanyakloop kali yang dimulai dari 0 naik kesatu, dua dan seterusnya. Operasidilakukan dengan melakukanpenambahan satu keatas(increment). Perhatikan programdibawah 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 operasihitung perulangan sebanyak loop kaliyang dimulai dari 10 turun kesembilan, delapan dan seterusnya.

Setiap operasi looping dilakukandengan melakukan pengurangansatu kebawah. Perhatikan contohprogram dibawah ini:

2008 | Direktorat Pembinaan SMK 113

Page 122: 01 bab 01 Dasar Komputer fachkunde OK

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 sizeofOperator akan menghasilkan

ukuran dari suatu variable atau tipepada saat dikompilasi. Ukuran inidigunakan untuk mengetahui tipe

data apakah dan berapa ukuran datayang ada didalam sebuah variabletersebut. Perhatikan potonganprogram dibawah ini:

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

program dibawah ini akan melakukanpengukuran terhadap variable tipedata dan kemudian hasilnya akan

dimunculkan setelah dilakukankompilasi. Perhatikan programdibawah ini:

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

using namespace std;

main(){

cout <<"Size of char = "<< sizeof(char);

114 Direktorat Pembinaan SMK | 2008

Page 123: 01 bab 01 Dasar Komputer fachkunde OK

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 longdouble = 10 byte

Contoh program yang menggunakanoperator unary * (pointer) dan &(alamat memori). Penjelasan dariprogram tersebut dapat diuraikan

dalam bentuk program secaralangsung sehingga lebih mudahdipahami.

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 xpx = &x; // y diisi dengan nilai yang ditunjuk oleh pxy = *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

Page 124: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Tipe Data dan Operator

Keluaran program diatas adalah sebagai berikut:Alamat x =2A6F : 223A Isi px= 2A6F : 223A Isi x= 67Nilai yang ditunjuk oleh px= 67Nilai 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 OperatorUnary & dan * serta gambar diatas.Variabel x dan y merupakan suatulambang dari sebuah daerah dimemori utama komputer. Artinya xdan y masing-masing sebenarnyaadalah suatu alamat memori. Ketikavariabel tersebut dideklarasikansebagaimana dibawah ini:

int x = 67, y;

maka variabel x sama denganalamat memori misalnya 2A6F:223Adialokasikan dan diisi data 67,variabel y sama dengan alamatmemori misalnya 2A6F:2238dialokasikan. Jadi x berisi 67 ataualamat memori 2A6F:223A berisidata 67.

Variabel tersebut bertipe integermaka akan menempati lokasi memorisebesar 16 bit. Alamat-alamatmemori tersebut dipergunakanselama fungsi main dijalankan.Deklarasi:

int *px;

berarti variabel px sama denganalamat memori misalnya 2A6F:2232dialokasikan dengan ukuran memorisebesar 16 bit (ukuran tipe integer).Perintah penugasan:

px = &x;

berarti variabel px (alamatmemori 2A6F:2232) diisi data2A6F:223A (alamat dari variabel x).

116 Direktorat Pembinaan SMK | 2008

Page 125: 01 bab 01 Dasar Komputer fachkunde OK

Tipe data dan Operator Bahasa Pemrorgraman

Jadi isi px = 2A6F:223A, Isi px inimerupakan alamat dari variabel x,perhatikan gambar diatas agar lebihjelas. Perintah penugasanselanjutnya adalah:

y = *px;

berarti variabel y (alamat memori2A6F:2238) diisi data alamat memorivariable px (2A6F:2232). Alamattersebut berisi data 67. Suatu alamatmemori yang berisi data alamatmemori disebut pointer.

3.8. Operator BinaryOperator binary adalah operator

yang melibatkan atau dikenakanpada dua buah operand. Dibawah ini

merupakan tergolong dalam operatorbinary adalah adalah sebagaimanadijelaskan dibawah ini:

3.8.1. Operator AritmatikaDigunakan untuk

mengoperasikan data-data numerik,seperti perkalian, pembagian, sisahasil bagi, penjumlahan, danpengurangan. Dalam prosesaritmatika tersebut, pengerjaanoperasi tergantung dari tingkatvalensi operator-operator yangterlibat. Perkalian memiliki valensitertinggi, kemudian dilanjutkandengan sisa pembagian, pembagian,sedangkan penjumlahan danpengurangan mempunyai valensiyang terendah. jenis operatoraritmatika, yaitu :

Tabel 3.8. Operator aritmetikaOPERATOR

ARTI

CONTOH* Kali a * b a dikalikan dengan b

3 * 2 = 6% Modulo atau

sisa pembagian

a%b sisa hasil pembagian bulat a dibagi dengan b3 % 2 = 1/ Bag

ia / b a dibagi dengan b3 / 2 = 1 untuk tipe data integer3 / 2 = 1.5 ntuk tipe data float

+ Plus atau tambah

a + b a ditambah dengan b3 + 2 = 5

‐ Minus atau kurang

a – b a dikurangi b3 – 2 = 1

Program dibawah ini merupakanoperasi-operasi aritmetika danbertujuan untuk melakukan operasipembagian, modulo, serta operasikombinasi aritmatika pada bilangan

bulat. Hasil operasi tersebutkemudian ditampilkan dilayarmonitor. Untuk lebih jelasnyaperhatikan program dibawah ini:

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

2008 | Direktorat Pembinaan SMK 117

Page 126: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Tipe Data dan Operator

using namespace std;

main(){/*operasi aritmatika

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

}

Keluaran program diatas adalah sebagai berikut:Operasi Aritmetika pada bilangan BulatX = 100/3

=33

Y = 100 MOD 3=1

Z = 100 * 3 – 3 + 100 mod 100/3=

297

Operator % (modulo) hanya berlaku pada tipe data integer, Perhatikan program operasi aritmatika dengan bilangan real dibawah ini:

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

using namespace std;

main(){

float a, b, c, d, e;

118 Direktorat Pembinaan SMK | 2008

Page 127: 01 bab 01 Dasar Komputer fachkunde OK

Tipe data dan Operator Bahasa Pemrorgraman

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

}

Keluaran program diatas adalah sebagai berikut:Operasi Aritmetika pada bilangan RealC = 100.000000 / 3.000000

= 33.333332D = 100.000000 mod 3.000000

= 1.000000E = 100.00000 * 3.00000 – 3.00000 + 100.000000 / 3.000000

= 297.000000

Dari contoh program diatasdapat dilihat dengan jelas bahwaOperator / (pembagian) dapatberfungsi sebagai pembagian bulat(div) atau pembagian real. Hal initergantung pada tipe data yangdipergunakan. Tingkat pengerjaanoperasi dari operator aritmatikaadalah: * (perkalian), % (modulo), /(pembagian), + (penjumlahan), dan– (pengurangan).

Perhatikan contoh mengenai haltersebut diatas dapat dilihat padaprogram dibawah ini:

z = 100 * 3 ‐ 3 + 100 %100 / 3

Proses penyelesaian dalam programadalah sama halnya dengan ketikamenyelesaikan persamaan aritmatikasecara ditulis sebagai berikut ini:

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

Page 128: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Tipe Data dan Operator

Operator relasi digunakan untukmembandingkan hubungan antaradua buah operand (sebuah nilai atauvariable) atau digunakan untuk

mewakili sebuah nilai logika (nilaiboolean), dari suatu persamaan ataunilai. Jenis-jenis operator relasi,sepetiterlihat 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 samadengany> 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 logikaOperator logika digunakan untuk

membandingkan logika hasil darioperator-operator relasi ataudigunakan untuk mengoperasikanoperand (konstanta, variabel, atau

suatu ekspresi) secara logis.Operator logika ada tiga macam yaituoperator AND, OR dan operatorNOT. Untuk lebih jelasnya perhatikandalam tabel berikut:

Tabel 3.10. Operator logika

OPERATOR

ARTI CONTOH

&& AND

a b a && b0 0 00 1 01 0 01 1 1

(2<1) && (3<1) = 00 && 0 = 0 (2<4) && (3<1) = 0

|| OR

a b a || b0 0 00 1 11 0 11 1 1

(2<1) || (4<1) =00 || 0 = 0 (2<4) || (3<1) = 11 || 0 =

! NOTa !a !(2>3) = 10 1 !0 = 1

Program Operasi logika pada Operator Binary Logika

120 Direktorat Pembinaan SMK | 2008

Page 129: 01 bab 01 Dasar Komputer fachkunde OK

Tipe data dan Operator Bahasa Pemrorgraman

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

using namespace std;

main(){

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

Page 130: 01 bab 01 Dasar Komputer fachkunde OK

2008 | Direktorat Pembinaan SMK 121

Page 131: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Tipe Data dan Operator

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

}

Keluaran program diatas adalah sebagai berikut:A = 125B = 100C = 25X1 = a

< b= 125 < 100= 0

X2 = a> b= 125 > 100= 1

V1 = C<= B

= 25 <= 100= 1

V2 = C>= B

= 25 <= 100= 0

Z1 = A != C= 125 != 25= 0

Z2 = A== B

= 125 == 100= 1

X = X1 && X2= 0 && 1= 0

Y = Y1 || Y2= 1 || 0= 1

Z = !Z1= !0= 1

122 Direktorat Pembinaan SMK | 2008

Page 132: 01 bab 01 Dasar Komputer fachkunde OK

Tipe data dan Operator Bahasa Pemrorgraman

3.8.4. Operator Bitwise atau manipulasi bitOperator bitwise digunakan

untuk memanipulasi bit-bit dari nilaidata yang ada di memori. Semuaoperator bitwise hanya bisa

dikenakan pada operand bertipeinteger atau karakter. Operatorbitwise sebagaimana terlihat dalamtabel 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

OR9 | 2

~ Bitwise NOT ~9

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

9D = 00001001B di XOR dengan2D = 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 dengan7D = 00000111B

14D = 00001110B <= hasil XOR

Tabel 3.12. Kebenaran XOR

A B A XOR B0 0 01 0 10 1 11 1 0

Pada tabel XOR tersebut diatasadalah: data keluaran akan bernilai 0jika data masukannya bernilai sama

baik 0 semua atau 1 semua. Dalamoperasi aritmetika sebuah data 9Dmisalnya akan digeser kekanan atau

2008 | Direktorat Pembinaan SMK 123

Page 133: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Tipe Data dan Operator

kekiri untukan operasi baik OR, AND,OR maupun NOT. Perhatikan contohpergeseran data 9D yang digeserkekiri maka nilai akan berubah.

Perubahan tersebut akanmewakili sebuah operasi perkalian,pembagian atau operasi yang lain.Perhatikan contoh pergeseran data9D dibawah ini:

9D = 00001001B

digeser kekiri:

1x => 00010010B = 18D2x => 00100100B = 36D

Kalau digeser kekanan:

1x => 00000100B = 4D2x => 00000010B = 2D

9D = 00001001B di AND dengan2D = 00000010B0D = 00000000B <= hasil AND

9D = 00001001B di OR dengan2D = 00000010B11D = 00001011B <= hasil OR9D = 00001001B di NOT menjadi:~9D = 11110110B = ‐10D model komplemen 2

Selain hasil tersebut diatas,dapat dibuktikan dengan caramelakukan komplemen kedua.Komplemen satu yaitu denganmelakukan konversi data 0 menjadi 1atau sebaliknya, sedangkan

komplemen kedua yaitu denganmelakukan penambahan data 01pada hasil komplemen pertama.Untuk lebih jelasnya perhatikancontoh dibawah ini:

10D = 00001010B‐10D = 11110101B model

komplemen 1= 11110110B model komplemen 2

Untuk menyatakan bilangan negatip diperoleh dengan cara modeldalam bilangan biner dipakai modelkomplemen. Model komplemen 2

komplemen 1 ditambah 1.

Program 3.20. Operasi bit pada Operator Bitwise#include <conio.h>#include <iostream>

124 Direktorat Pembinaan SMK | 2008

Page 134: 01 bab 01 Dasar Komputer fachkunde OK

Tipe data dan Operator Bahasa Pemrorgraman

using namespace std;

main(){

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

}

Keluaran program diatas adalah sebagai berikut:U =9<< 2

=36

V =9>>2

=2

W = 9& 2

=0

X = 9^ 2

=11

Y = 9| 2

=11

Page 135: 01 bab 01 Dasar Komputer fachkunde OK

Z =~9

= ‐10

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

2008 | Direktorat Pembinaan SMK 125

Page 136: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Tipe Data dan Operator

0 = false = salah atau 1 = true = benar

3.8.5. Operator Penugasan dan Operator KombinasiOperator penugasan (Assignment operator) atau pemberi nilai berupa

tanda sama dengan (“=”). Perhatikan contoh dibawah ini:

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

Operator kombinasi merupakangabungan antara dua operatortertentu, yaitu antara operatoraritmatika atau operator bitwise

dengan operator penugasan yangdigunakan untuk memendekkanpenulisan operasi penugasan, sepertiberikut:

Tabel 3.13. Operator penugasanOPERATOR

ARTI

CONTOH

ARTINYA*= Memberi nilai setelah nilai semula

dikalikanx *= 5; x = x * 5;

/= Memberi nilai sisa bagi setelah nilai semuladibagi

x /= 5; x = x / 5;

%=

Memberi nilai sisa bagi dari pembagian nilaisemula

x %= 5; x = x % 5;

+=

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 TernaryOperator ternary adalah operator

yang melibatkan tiga buah operand.Yang tergolong operator ini adalah:Operator kondisi dengan symbol ?:Bentuk ungkapan operator kondisiadalah :

<kondisi> ?<ungkapan_1> :<ungkapan_2>

Maksud dari ungkapan kondisiadalah: Jika kondisi bernilai benar,maka nilai ungkapan kondisi berupanilai ungkapan_1 dan jika kondisibernilai salah, maka nilai ungkapankondisi berupa nilai ungkapan_2.Perhatikan contoh dibawah ini:

126 Direktorat Pembinaan SMK | 2008

Page 137: 01 bab 01 Dasar Komputer fachkunde OK

Tipe data dan Operator Bahasa Pemrorgraman

maksim = nilai_awal > nilai_akhir ?nilai_awal : nilai_akhir;

maksud dari contoh diatas dapat diungkapkan dalam bentuk kalimat seperti ini:

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

Program 3.21. Operasi kondisi pada Operator Kondisi#include<conio.h>#include<iostream>

using namespace std;

main(){ int a, b, c, d;

a = 80;b = 75;c = a > b ? a : b;cout <<"Mencari nilai yang lebih tinggi\n\n";cout <<"a = \n"<< a<< b;cout <<"c = \n";cout <<" = \n"<< a<< b<< a<< b;cout <<" = \n\n"<< c;

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

}

Keluaran program diatas adalah sebagai berikut:Mencari Nilai yang lebih tinggi a = 80b = 75

2008 | Direktorat Pembinaan SMK 127

Page 138: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Tipe Data dan Operator

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

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

= 75 > 80 ? 75 : 80= 80

3.10. Ungkapan (Ekspresi)Ungkapan dapat berupa

konstanta (untai/numerik), variabeldan nilai tunggal yang diperolehdengan mengkombinasikan operanddan operator, seperti 5+4. Ungkapan-ungkapan dibagi menjadi empatkategori :a. Ungkapan numerik

2 + 5 3 * 42 + 7 / 5

b. Ungkapan string

“ABCD” +“EFGH”nim +nama

Satu-satunya operator yangberlaku pada ungkapan stringhanyalah tanda +, yang ber-

fungsi untuk menggabungkan duauntai.

c. Ungkapan relasi/hubunganTipe untai dapat jugamenggunakan operator relasiseperti halnya dengan tipenumerik. Misalnya diketahuibahwa:

‘A’ lebih kecildari ‘B’

d. Ungkapan logika

!A((A>5) &&(B=4))((Nama = ”Agus”) ||(nama =”Doni”))

e. Program sederhana 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

Page 139: 01 bab 01 Dasar Komputer fachkunde OK

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 LatihanJawablah soal latihan dibawah ini dengan baik dan benar.1. Apa yang dimaksud dengan data2. Sebutkan jenis-jenis data yang digunakan pada bahasa pemrograman3. Apa yang dimaksud dengan konstanta4. Buatlah sebuah program sederhana menggunakan variabel konstanta5. Apa yang dimaksud dengan operator unary, binary dan ternary6. Apa yang dimaksud dengan variabel7. Sebutkan tipe variabel yang digunakan dalm bahasa c++8. Buatlah program sederhana yang menggunakan operator unary, binary

dan ternary

2008 | Direktorat Pembinaan SMK 129

Page 140: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Tipe Data dan Operator

130 Direktorat Pembinaan SMK | 2008

Page 141: 01 bab 01 Dasar Komputer fachkunde OK

Struktur Perulangan Bahasa Pemrorgraman

BAB 4STRUKTUR PERULANGAN

4.1. Perulangan4.2. Operator Increment dan Decrement4.3. Ekspresi Matematika ++ dan --4.4. Penghitung4.5. Pernyataan FOR4.6. Pernyataan NESTED - FOR4.7. Pernyataan WHILE4.8. Pernyataan NESTED-WHILE4.9. Perulangan Do-WHILE4.10. Pernyataan NESTED DO-WHILE4.11. Perulangan Tidak Berhingga4.12. Pernyataan Break4.13. Pernyataan Continue4.14. Pernyataan Goto4.15. Soal Latihan

4.1. PerulanganPerulangan atau iterasi atau

yang biasa disebut dengan “looping”adalah proses melakukan tindakanyang sama secara berulang-ulangatau berkali-kali sampai batas yangtelah ditentukan. Perulangandigunakan untuk menjalankan satuatau beberapa pernyataan sebanyakbeberapa kali. Dengan kata lain,perulangan dipakai untukmenjalankan beberapa pernyataandengan hanya menuliskanpernyataan tersebut satu kali. Hal inibanyak sekali dijumpai dalampemrograman.

Perulangan proses dalambahasa pemrograman ditanganidengan suatu mekanisme yang

disebut loop. Dengan memakai loop,suatu proses yang berulang misalnyamenampilkan angka 1 sampai 1000atau tulisan yang sama sebanyaksepuluh kali di layar dapatdiimplementasikan dengan kodeprogram yang pendek.

Pada pemrograman prosesperulangan dibagi menjadi 2 jenis,yaitu: Perulangan yang telahdiketahui jumlah perulangannyasebelum perulangan tersebut dilakukan. Jenis perulangan inidilakukan dengan penyataan for. Dankedua adalah perulangan yang belumdi ketahui jumlah perulangannyasebelum perulangan tersebutdilakukan. Perulangan jenis ini terdiri

2008 | Direktorat Pembinaan SMK 131

Page 142: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Struktur Perulangan

dari dua kategori, yaitu: kondisiperulangan diperiksa diawalperulangan. Jenis perulangan inidilakukan dengan penyataan while.Kondisi perulangan diperiksa diakhirperulangan. Jenis perulangan inidilakukan dengan penyataan do-

while. Struktur perulangan secaraumum terdiri dari dua bagian: Kondisi perulangan, yaitu ekspresi

boolean yang harus dipenuhiuntuk melaksanakan perulangan.

Badan (body) perulangan, yaitubagian algoritma yang diulang.

4.2. Operator Increment dan DecrementSebelum jauh membahas

perulangan, akan dipelajari dahulumengenai operasi increment.Operator Increment digunakan untukmenaikan atau bisa juga untukmeningkatkan nilai dengan satu,sedangkan decrement digunakanuntuk mengurangi nilai turundengan satu. Kedua pernyataanberikut merupakan untukmenaikan variabel num dengansatu:

num = num+ 1;num+= 1;

num di kurangi dengan satu dapatdilihat dari pernyataan berikut ini:

num = num‐ 1;num ‐=1;

dalam bahasa C++ menyediakansatu set operator unary sederhanayang dirancang hanya untukmenambah dan mengurangi sebuahvariabel dengan 1. Operatorincrement adalah mengunakan kode++. Sedangkan operator decrementadalah --. Pernyataan yangmenggunakan operator ++ untuk

menaikan variabel num adalahsebagai berikut:

num++;

sedangkan pernyataan decrementyang digunakan untuk mengurangivariabel num adalah sebagai berikut:

num ‐‐ ;

dalam bahasa pemrograman baiksebelum maupun sesudah bab inidibahas sering menggunakan operasikenaikan dan pengurangan yangmenggunakan dalam mode postfix,mode postfik artinya operatordiletakkan setelah variabel. Operatorjuga bekerja dalam mode prefik,dimana operator ditempatkansebelum nama variabel:

+ +num;‐ ‐num;

Kedua operator mode postfix danprefix diatas akan menambahkan 1atau mengurangi dengan 1 padasetiap operand. Program dibawahmenunjukkan operator increment dandecrement.

132 Direktorat Pembinaan SMK | 2008

Page 143: 01 bab 01 Dasar Komputer fachkunde OK

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

pengurangan dapat juga digunakanpada variabel dalam ekspresimatematika. Perhatikan potonganprogram berikut ini:

a =2;b =5;c = a *b++;cout << a << " " << b<< " " << c;

dalam pernyataan c = a * b++, cadalah hasil dari perkalian a dan b,dimana 10. Merupakan sebuahvariabel b yang ditambahkan dengansatu. Kemudian denganmenggunakan pernyataan cout makahasil ditampilkan sebagai berikut:

2 610

Jika pernyataannya c tersebut diatasberubah maka dapat dibaca:

c = a * ++b;

variabel b akan ditambahkan dengansatu sebelum keduanya dikalikandengan a. dalam kasus ini cmerupakan hasil dari nilai 2 dikalikan6, sehingga pernyataan cout akanmenampilkan:

2 612

Dengan satu saja dapatmembawa beberapa aksi dalam satupernyataan menggunakan operatorkenaikan dan pengurangan, haltersebut juga tidak terlalu rumit untukdigunakan. Perhatikan potonganprogram dibawah ini:

2008 | Direktorat Pembinaan SMK 133

Page 144: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Struktur Perulangan

a =2;b =5;c = ++(a * b); //Error!

pernyataan tersebut diatasmerupakan pernyataan sederhanayang tidak bekerja karena adanyaoperator kenaikan dan pengurangan.Pada operator kenaikan danpengurangan biasanya ada variabeloperand, tetapi umumnya, sesuatuyang ada di sebelah kiri dari operatoryang disetujui.

Seperti sudah kita ketahui bahwadalam bab ini, operator ++ dan --digunakan sebagai kalimatpenghubung. Sama seperti dalamekspresi matematika, perbedaanantara mode postfix dan prefix sangatdekat. Perhatikan potongan programberikut ini:

x = 10 ;if (x + +> 10)

cout << "x lebih besar daripada 10.\n";

Dua operasi yang terjadi dalampernyataan IF tersebut diata adalah:(1) nilai yang diuji pada x untukmenentukan apakah nilainya lebihbesar daripada 10, dan (2) x adalahdiincremented. Karena kenaikanoperator yang digunakan dalammode postfix, Bandingan hal yangterjadi terlebih dahulu. Sejak 10 tidaklebih dari 10, pernyataan cout tidakakan dijalankan. Jika mode kenaikanoperator berubah, sedangkan jikapernyataan akan membandingkan11-10 dan pernyataan cout akan dijalankan.

4.4. PenghitungKadang-kadang penting bagi

sebuah program untuk melacakjumlah Iterasi yang dilakukan dalamsatu loop. Misalnya, Programdibawah menampilkan sebuah tabelyang terdiri dari angka 1 sampai

dengan 10, jadi loop harus iterasi 10kali. Program tersebut dibawah akanmenampilkan angka 1 sampaidengan 10 dan kemudiandikuadratkan:

Program 4.2.include <iostream>

using namespace std;

int main(){

int num = 1; // inisialisasi penghitungcout << " Angka Angka kuadrat\n";cout << "‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐\n";while (num <= 10){

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

134 Direktorat Pembinaan SMK | 2008

Page 145: 01 bab 01 Dasar Komputer fachkunde OK

Struktur Perulangan Bahasa Pemrorgraman

}return 0;

}

Keluaran programnya adalah sebagai berikut:Angka Angka kuadrat‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐1 12 43 94 165 256 367 498 649 8110 100

Dalam Program diatas, variabelnum, dimulai dari angka 1, kemudiandiincrement pada setiap kali putaranloop. Ketika num mencapai 11lingkaran berhenti. num digunakansebagai counter variabel, yang berartivariabel tersebut secara teratur diincrement pada setiap perulangan.Pada dasarnya, num terusmenghitung jumlah lingkaran Iterasiyang telah dilakukan. Ketika variabel

num digunakan sebagaipengendalian pada loop dan kapanakan keluar dari loop, disebutlingkaran kontrol variabel.

Dalam contoh program diatas,penambahan variabel num adalahpada lingkaran. Pendekatan lainadalah dengan menggabungkan labaoperasi yang berhubungan denganpengujian, seperti yang ditunjukkandalam 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

Page 146: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Struktur Perulangan

Keluaran programnya adalah sebagai berikut:Angka Angka kuadrat‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐1 12 43 94 165 256 367 498 649 8110 100

Perhatikan bahwa sekarangvariabel num diinisialisasi ke 0, bukan1, dan relatif menggunakan ekspresi<operator bukan <=. Hal ini karenacara operator untuk menaikanbekerja jika digabungkan denganekspresi penghubung.

Kenaikan operator yangdigunakan dalam mode postfix,berarti pada variabel num menambah

satu setelah berhubungan ujian.Ketika lingkaran pertamamelaksanakan, num diatur kenilai 0,kemudian 0 dibandingkan dengan 10.Operator ++ kemudian akanmenambahkan variabel num segerasetelah dilakukan perbandingan. Bilapernyataan cout dieksekusi, nummemiliki nilai 1.

num dibandingkan dengan 10, kemudian di‐increment. Bila pernyataan cout

dilaksanakan, num 1 bernilai lebih besar dariitu pengujian tersebut.

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

Di dalam looping, num selalu memilikinilai lebih dari 1 dibandingsebelumnya nilai 10. Itulah mengapapenghubung operator menggunakan

< bukan <=. Ketika variabel numbernilai 9 maka diuji, sehingga akanmenjadi bernilai 10 pada pernyataancout.

4.5. Pernyataan FORJenis loop dalam bahasa C++

adalah loop FOR. FOR sangat idealuntuk situasi yang memerlukanpenghitung karena ekpresinya sudah

built-in (menjadi satu) denganmemperbarui variabel. Berikut iniadalah format perulangan FOR

136 Direktorat Pembinaan SMK | 2008

Page 147: 01 bab 01 Dasar Komputer fachkunde OK

Struktur Perulangan Bahasa Pemrorgraman

for loop.for (initialization; test; update){

pernyataan;pernyataan;// tempat banyaknya pernyataan

Bisa juga sebuah perulanganmenggunakan pernyataan for ditulis

dalam bentuk format potonganprogram sebagai berikut:

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

Bisa juga ditulis seperti dibawah ini:

for (ungkapan1; ungkapan2; ungkapan3)pernyataan;

Penjelasan mengenai formatpernyataan FOR diatas adalahseperti dibawah ini: Ungkapan1 atau inisialisasi:

digunakan untuk memberikaninisialisasi terhadap variabelpengendali loop.

Ungkapan2 atau sebagai syaratperulangan: dipakai sebagaipemegang kontrol terhadappengulangan, karena bagian iniyang akan menentukan suatukondisi perulangan untukditeruskan atau dihentikan dariloop.

Ungkapan3 atau pengubah nilaipencacah: dipakai sebagaipengatur perubahan nilai variabelpengendali loop. Perubahan nilaibisa kenaikan atau penurunan nilaipencacah

Ketiga ungkapan dalam FORtersebut harus dipisahkan dengantitik koma (;). Pernyataan dalam fordapat berupa pernyataan tunggalmaupun jamak (lebih dari satu). Jikapernyataannya berbentuk jamak,maka pernyataan-pernyataantersebut harus diletakan didalam satublok dengan memakai tanda kurungkurawal seperti berikut:

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

pernyataan_1;pernyataan_2;……… Pernyataan_n;

}

2008 | Direktorat Pembinaan SMK 137

Page 148: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Struktur Perulangan

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

InisialisasiLoop = 1

pengubah nilai pencacahloop++ atau loop = loop + 1

Pernyataan

Cetakbilangan

cout << loop<< " ";

Syaratperulangan Loop

<= 10

Benar

Salah

Gambar 4.1. Diagram Alir Pernyataan FOR

Seperti perulangan dua lainnya,jika hanya ada satu pernyataandalam tubuh perulangan, kotakpernyataan (brace) akan dapatdiabaikan. Perulangan FORmempunyai tiga ekspresi didalamtanda kurung, dipisahkan olehsemicolon. (Perhatikan tidak adakoma setelah ketiga ekspresi.)

Pertama adalah ekspresiinitialization expression. Ekspresi inibiasanya digunakan untuk sebuahinitialize penghitung atau variabelyang harus memiliki nilai awal. Iniadalah tindakan yang pertamadilakukan oleh perulangan dan hanyadilakukan sekali.

Ekspresi yang kedua adalah testexpression. Seperti ekspresi testdalam perulangan while dan do-while, test expression mengendalikanpelaksanaan perulangan. Selama iniungkapan itu benar, mka tubuhperulangan FOR akan mengulanglagi.

Ekpresi ketiga adalah ekspresiupdate expression. Ekspresi ini akanmelaksanakan diakhir setiapperulangan. Biasanya, ia akanmenambahkan sebuah penghitungatau variabel yang harus diubah padasetiap perulangan. Program dibawahadalah Program yang menggunakanFOR sebagai pengganti dari whileloop.

138 Direktorat Pembinaan SMK | 2008

Page 149: 01 bab 01 Dasar Komputer fachkunde OK

Struktur Perulangan Bahasa Pemrorgraman

Program dibawah menggunakanpernyataan FOR untuk menampilkanangka 1 sampai dengan 10 dan

kemudian mengkuadratkannya.Untuk lebih jelasnya perhatikanprogram 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 12 43 94 165 256 367 498 649 8110 100

2008 | Direktorat Pembinaan SMK 139

Page 150: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Struktur Perulangan

Gambar dibawah menjelaskanmengenai mekanisme looping dalamperulangan untuk menjelaskan

proses langkah-langkah programdiatas.

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 gayapemrograman diatas dianggap jelek,tetapi satu atau beberapa kalimatperulangan dapat diabaikan.Initialization ekspresi yang mungkindapat dihilangkan dari dalam kurung

loop, jika sudah dilakukan atau jikatidak ada initialization diperlukan.Berikut dibawah ini adalah contohprogram perulangan dalammelakukan pengaksesan sebelumperulangan:

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

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

Kita juga dapat mengabaikanpembaruan ekspresi, jika sedangdilakukan di tempat lain didalam

perulangan atau jika tidak ada yangdiperlukan. perulangan berikut iniuntuk bekerja seperti loop while.

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

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

}

140 Direktorat Pembinaan SMK | 2008

Page 151: 01 bab 01 Dasar Komputer fachkunde OK

Struktur Perulangan Bahasa Pemrorgraman

Kita bahkan dapat tidakmenggunakan atau mengabaikansemua tiga ekspresi dari tandakurung loop FOR. Jika hal tersebut

diabaikan maka akan terjadiperingatan bahwa kita membiarkantest expression. Perhatikan contohdibawah ini:

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

Karena perulangan ini tidakmemiliki cara untuk berhenti,maka program diatas akanmenampilkan kata "Hello World \ n"selamanya atau sampai terjadiinterupsi program.

Bentuk lain yang memperbaruiEkspresi dilakukan supaya kita tidak

dibatasi dalam menggunakanpernyataan increment pada ekspresiupdate. Berikut ini adalah sebuahperulangan yang menampilkansemua atau bahkan angka 2 hingga100 dengan menambahkan 2 padasetiap penghitung. Perhatikanprogram dibawah ini:

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

program dibawah ini merupakanprogram perulangan yang melakukan

hitungan turun mulai dari 10 turunsampai nilai 0.

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

perulangan dibawah ini tidak memilikibadan resmi. Gabungan kenaikanoperasi dan pernyataan cout

pembaruan ekspresi akan melakukansemua pekerjaan pada setiap iterasi:

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

Jika perulangan memerlukanmelakukan lebih dari satu pernyataansebagai bagian dari inisialisasi,pernyataan dipisahkan dengan tandakoma. Program dibawah adalah versiProgram sebelumnya yang diubahuntuk memberitahu pengguna

mengenai angka penjualan selamasatu minggu.

Program dibawah ini akanberlangsung setiap hari selama satuminggu dan kemudian program akanmenghitung totalnya. Perhatikanprogram berikut ini:

2008 | Direktorat Pembinaan SMK 141

Page 152: 01 bab 01 Dasar Komputer fachkunde OK

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 penjualanuntuk hari 2: 421.65[Enter] Masukkanpenjualan untuk hari 3: 497.89[Enter]Masukkan penjualan untuk hari 4:532.37[Enter] Masukkan penjualanuntuk hari 5: 506.92[Enter] Masukkanpenjualan untuk hari 6: 489.01[Enter]Masukkan penjualan untuk hari 7:476.55[Enter] Total penjualan adalah $3413.71

Dalam perulangan menggunakanFOR, penghitung diinisialisasi ke 1,maka total inisialisasi adalah 0,0. Kitadapat menempatkan lebih dari satu

pernyataan untuk melakukanpembaharuan sebuah ekspresi.Perhatikan program dibawah ini:

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

Page 153: 01 bab 01 Dasar Komputer fachkunde OK

Struktur Perulangan Bahasa Pemrorgraman

}

Dalam melakukan pembaruanekspresi sebuah perulangan,penghitung di increment, maka nilaipenjualan tersebut akan ditambahkanke total pada akhir setiap perulangan.

Perhatikan contoh mengenaiprogram looping menggunakan FOR.Program dibawah ini digunakan untukmencetak bilangan dari 1 hingga 10secara 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

int loop;

tipe data variabel loop adalah integer

for (loop = 1; loop <= 10; loop++)

cout << loop << " ";

Perintah di atas akanmenampilkan angka dari 1 dansebuah spasi kosong sampai angka

10 dan spasi kosong secarahorizontal atau berjajar. Prosestersebut dilakukan secara iterasisepuluh kali yang diawali dengan nilailoop = 1, kenaikan nilai loop satu(loop++), dan berakhir sampai syaratterpenuhi loop <= 10, , yaitu: loop =10. Perhatikan tanda loop++ yangberarti loop = loop + 1. Prosesperulangan potongan program diatasadalah sebagai berikut:

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

2008 | Direktorat Pembinaan SMK 143

Page 154: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Struktur Perulangan

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

Selanjutnya adalah:

getch();

meminta masukan sembarangtombol, perintah ini dimaksudkanuntuk menahan hasil tampilan dilayarsupaya tetap nampak dan akanmenutup sampai adanya sembarangtombol ditekan.

return0;

untuk memberi nilai kembalian padafungsi main. Pada program di atas,kenaikan terhadap variabelpengendali loop sebesar 1 (positif),yang dinyatakan dengan ungkapan:

loop++

artinya ungkapan tersebut samadengan:

loop = loop+ 1

Kenaikan terhadap variabelpengendali loop bisa diatur jaraknyadengan mengatur stepnya. Misalnyauntuk jarak kenaikkannya 2, makadinyatakan dengan:

Loop+= 2

Hal diatas sama artinya samadengan program dibawah ini:

Loop = loop+ 2

Pada contoh yang melibatkanpernyataan for diatas, kenaikanvariabel pengendali loop berupa nilaipositif. Sebenarnya kenaikanterhadap variabel pengendali loopdapat pula diatur supaya bernilainegatif, seperti dicontohkan padaprogram dibawah ini. Programdibawah akan mencetak bilangandari 10 hingga 1 secara menurun.

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

Page 155: 01 bab 01 Dasar Komputer fachkunde OK

Struktur Perulangan Bahasa Pemrorgraman

Hasil keluaran program adalah sebagai berikut:10 9 8 7 6 5 4 3 2 1

Program lainnya yang mennggunakan pernyataan FOR untuk menampilkan bilangan ganjil antara 1 hingga 10 adalah sebagai berikut:

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

using namespace std;

int main(){

int loop;for (loop = 1; loop <= 10; loop+=2)

cout << loop << " ";getch();return 0;

}

Hasil keluaran program diatas adalah sebagai berikut:1 3 5 7 9

Selain berupa angka, pencacah perulangan juga dapat berupa karakter. Perhatikan contoh program dibawah ini:

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

using namespace std;

int main(){char huruf;for (huruf = 'A'; huruf <= 'Z'; huruf++)

cout << "Huruf abjad = " << huruf << "\n";getch();for (huruf = 'A'; huruf <= 'Z'; huruf+=13)

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

cout << "Huruf abjad = " << huruf << "\n";getch();

2008 | Direktorat Pembinaan SMK 145

Page 156: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Struktur Perulangan

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

getch();return 0;}

Hal yang perlu diperhatikan padaprogram diatas adalah potonganprogram seperti dibawah ini:

for (huruf = 'A'; huruf <= 'Z';huruf++)

cout << "Huruf abjad = " <<huruf << "\n";

Perintah di atas akan menampilkanteks Huruf abjad = mulai dari Asampai dengan Z. Perhatikanperintah pada huruf++.

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

Page 157: 01 bab 01 Dasar Komputer fachkunde OK

Huruf abjad = Z

Perhatikan potongan programdibawah ini:

for (huruf = 'A'; huruf <= 'Z'; huruf+=13)

cout << "Huruf abjad = " <<huruf << "\n";

Perintah diatas akan menampilkanteks Huruf abjad = mulai dari A sampai dengan Z dengan step 13, maka yang muncul adalah:

Huruf abjad = A Huruf abjad = N

Perhatikan pada instruksi huruf+=13

for (huruf = 'z'; huruf >= 'a'; huruf‐‐)

cout << "Huruf abjad = " <<huruf << "\n";

Perintah tersebut akan menampilkanteks Huruf abjad = mulai dari z sampai dengan a. Perhatikan pada perintah huruf--

Huruf abjad = z Huruf abjad = y Huruf abjad = x Huruf abjad = w Huruf abjad = v Huruf abjad = u Huruf abjad = t Huruf abjad = s Huruf abjad = r Huruf abjad = q

146 Direktorat Pembinaan SMK | 2008

Page 158: 01 bab 01 Dasar Komputer fachkunde OK

Struktur Perulangan Bahasa Pemrorgraman

Huruf abjad = p Huruf abjad = o Huruf abjad = n Huruf abjad = m Huruf abjad = l Huruf abjad = k Huruf abjad = j Huruf abjad = i Huruf abjad = h Huruf abjad = g Huruf abjad = f Huruf abjad = e Huruf abjad = d Huruf abjad = c Huruf abjad = b Huruf abjad = a

Perhatikan potongan programdibawah ini:for (huruf = 'z'; huruf >= 'a'; huruf‐=8)cout << "Huruf abjad = " <<huruf << "\n";

Perintah itu akan menampilkan teks Huruf abjad = mulai dari z sampai dengan a dengan step -8, maka yangmuncul adalah:

Huruf abjad= z Hurufabjad = rHuruf abjad= j Hurufabjad = b

Perhatikan instruksi huruf -=8.Kadang-kadang dijumpai adanyapernyataan FOR yang tidakmengandung bagian ungkapan yanglengkap (beberapa ungkapandikosongkan). Dengan cara ini, makapernyataan adalah sebagai berikut:

for (loop = 1; loop <= 10; loop+=2)

cout << loop << " ";

Dari potongan program diatas dapatditulis menjadi :

loop = 1;for ( ; loop <= 10; ){

cout << loop << " ";loop +=

2;}

Pengosongan juga dilakukanpada ungkapan untuk menaikkannilai variabel pengendali loop.Sebagai gantinya, di dalam tubuhloop diberikan pernyataan untukmenaikkan nilai variabel pengendaliloop, yaitu berupa:

loop += 2;

Ungkapan yang tidak dihilangkanberupa loop <=10. Ungkapan ini tetapdisertakan karena dipakai sebagaikondisi untuk keluar dari loop.Sebenarnya ungkapan yang dipakaisebagai kondisi keluar dari loop jugabisa dihilangkan, sehingga bentuknyamenjadi:

for (;;)pernyataa

n;

Lalu bagaimana cara keluar dariloop tersebut. Caranya adalahdengan menggunakan pernyataanyang dirancang khusus untuk keluardari loop. Pernyataan itu adalahbreak yang akan dijelaskan dalamsub bahasan tersendiri. Pernyataanbreak digunakan untuk keluar darisatu blok loop for. Perhatikanprogram FOR untuk menampilkanwarna seperti program berikut:

Page 159: 01 bab 01 Dasar Komputer fachkunde OK

2008 | Direktorat Pembinaan SMK 147

Page 160: 01 bab 01 Dasar Komputer fachkunde OK

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 merupakanpenggunaan loop tanpa henti. Karenaprogram memang dirancang untuktidak berhenti maka untukmenghentikannya dilakukan dengan

cara menekan tombol CTRL–PAUSEatau CTRL – BREAK. Perhatikanprogram FOR untuk menampilkanwarna seperti berikut:

Program 4.11#include<stdio.h>#include<conio.h>

148 Direktorat Pembinaan SMK | 2008

Page 161: 01 bab 01 Dasar Komputer fachkunde OK

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 - FORPernyataaan nested for adalah

suatu perulangan for didalamperulangan for dalam bentuk lain.Dalam mempelajari perulangan inidituntut hrus teliti. Perulangan

didalam perulangan sering kalimasuk digunakan oleh programBentuk umum pernyataan Nested foradalah sebagai berikut:

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

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

pernyataan;}

}

2008 | Direktorat Pembinaan SMK 149

Page 162: 01 bab 01 Dasar Komputer fachkunde OK

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-FOR, perulangan yang beradadidalam terlebih dahulu harusdihitung sampai selesai, kemudianperulangan yang diluar diselesaikan

terus sampai perulangan yang palingluar. Perhatikan contoh programdengan NESTED FOR pada operasibilangan naik berikut ini:

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

using namespace std;

int main(){

int a, b;for(a = 1; a <= 5; a++){

}getch();

cout << "\n ";for(b = a; b <= 5; b++)cout << a << " ";

return 0;}

Keluaran program diatas adalah sebai berikut:1 1 1 1 12 2 2 2

150 Direktorat Pembinaan SMK | 2008

Page 163: 01 bab 01 Dasar Komputer fachkunde OK

Struktur Perulangan Bahasa Pemrorgraman

3 3 34 45

4.7. Pernyataan WHILEBab sebelumnya telah

memperkenalkan konsep statementkontrol, yang berupa aliran programlangsung. Sebuah loop adalahstruktur kontrol yang menyebabkanpernyataan atau kelompok untukmengulang pernyataan. Bahasa C++mempunyai tiga looping strukturkontrol: while loop, do-while loop, danloop FOR.

Perbedaan antar masing-masinglooping adalah bagaimana merekamelakukan kontrol pengulangannya.Selama melakukan loop ada duabagian penting: (1) sebuah ekspresiyang diuji dengan nilai benar atausalah, dan (2) pernyataan atau blokyang berulang-ulang selamaekspresinya benar.

Perulangan dengan pernyataanwhile merupakan perulangan yangmirip dengan perulangan for.Perulangan for dipakai padaperulangan yang sudah diketahuiberapa kali akan dijalankan.Sedangkan yang belum diketahuiberapakali akan diulangi makadigunakan while. Pernyataan whiledigunakan ketika kondisi perulangandiperiksa terlebih dahulu sebelummenjalankan pernyataan. Padapernyataan while, disini pemeriksaanterhadap loop dilakukan di bagianawal (sebelum tubuh loop).Pernyataan while akan mengulangproses secara terus menerus sampaikondisi bernilai benar atau akandiulangi selama kondisi bernilaibenar, jika kondisi bernilai salah

maka perulangan (loop) selesai.Lebih jelasnya, bentuk pernyataanwhile adalah sebagai berikut:

Bentuk perulangan whiledikendalikan oleh syarat/kondisitertentu, yaitu perulangan akan terusdilaksanakan selama syarat/kondisitersebut terpenuhi. Pernyataan dalamwhile akan dilaksanakan berulangkaliselama syarat/kondisi bernilai benar.Jika syarat/kondisi bernilai salahbadan perulangan tidak akandilaksanakan, yang berartiperulangan selesai. Yang harusdiperhatikan adalah perulanganharus berhenti. Perulangan yangtidak pernah berhenti menandakanbahwa logika dari algoritma tersebutsalah.

Bentuk umum perulangan while,sebagai berikut :

while (syarat/kondisi )pernyataan;

penjelasan mengenai hal tersebutdiatas adalah bahwa syarat/kondisimerupakan ungkapan logika yanghanya bernilai benar atau salah,sehingga operator yang dipakai disiniadalah operator relasi dan operatorlogika atau gabungan dari keduanya.Untuk lebih jelasnya gambar diagramalir dari pernyataan while adalahsebagai berikut:

2008 | Direktorat Pembinaan SMK 151

Page 164: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Struktur Perulangan

pernyataan

KondisiBenar

Salah

Gambar 4.3. Diagram pernyataan While

Pernyataan dalam while dapatberupa pernyataan tunggal maupunjamak (lebih dari satu). Jikapernyataannya berbentuk jamak,maka pernyataan-pernyataantersebut harus diletakan didalam satublok dengan memakai tanda kurungkurawal.

Bentuk umum perulangan while,dengan satu dengan lebih dari satupernyataan, adalah seperti berikut :

while (syarat ){

Pernyataan;

Pernyataan;

}

Untuk lebih jelasnya pengenaipernyataan while, dibawah inimerupakan contoh program untukmenaik bilangan. Programlengkapnya 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

Page 165: 01 bab 01 Dasar Komputer fachkunde OK

Struktur Perulangan Bahasa Pemrorgraman

Keluaran program adalah sebagai berikut:1 2 3 4 5 6 7 8 9 10

Program dibawah ini merupakansebuah penerapan pernyataan whileyang digunakan untuk melakukanperhitungan turun. Program dibawah

ini akan menghitung bilangan turunmulai dari angka 10, menjadi 9, 8, 7sampai angka 1. Perhatikan programdibawah 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 yangmenggunakan pernyataan while jugabisa digunakan untuk menentukanbilangan ganjil. Program dibawah inimerupakan program yang keluaranyabilangan 1, 3, 5 dan seterusnya

sampai batasan looping yangdimasukan. Batasan programdibawah ini adalah 10, untuk lebihjelasnya perhatikan program dibawahini:

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

Page 166: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Struktur Perulangan

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

}

Keluaran program diatas adalah:1 3 5 7 9

Program dibawah ini penggunaanwhile untuk aplikasi manampilkanhuruf. Huruf yang ditampilkan adalah

huruf abjad. Untuk lebih jelasnyaperhatikan program dibawah ini:

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

Page 167: 01 bab 01 Dasar Komputer fachkunde OK

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-WHILEPernyataaan nested while adalah

suatu perulangan while didalamperulangan while yang lainnya.

Bentuk umum pernyataan Nestedwhile sebagai berikut :

while (syarat){

while (syarat){

pernyataan;}

Page 168: 01 bab 01 Dasar Komputer fachkunde OK

}

2008 | Direktorat Pembinaan SMK 155

Page 169: 01 bab 01 Dasar Komputer fachkunde OK

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-WHILE, perulangan yang beradadidalam terlebih dahulu dihitunghingga selesai, kemudian perulanganyang diluar diselesaikan terus sampaiperulangan yang paling luar.

Perhatikan Contoh program dengannested while dimana programtersebut merupakan programSegitiga Pascal dengan NESTEDWHILE seperi berikut ini.

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

Page 170: 01 bab 01 Dasar Komputer fachkunde OK

Struktur Perulangan Bahasa Pemrorgraman

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

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

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

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

}getch();return 0;

}

Keluaran program diatas adalah sebagai berikut:1

1 21

1 2 4 21

1 2 4 8 42 1

Contoh program dibawah inidigunakan untuk menjumlahkansejumlah data angka. Angka yangakan dijumlahkan dimasukan satu-

persatu. Proses pemasukan dataangka akan berhenti ketikadimasukkan angka –1. Setelah itutampil 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

Page 171: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Struktur Perulangan

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

4.9. Perulangan DO-WHILESelain operasi loop

menggunakan WHILE, bahasa C++juga mempunyai DO-WHILE danuntuk perulangan. Setiap perulangandapat tepat untuk mengatasiberbagai masalah pemrograman.Yang dilakukan DO-WHILE terlihatmirip dengan perulangan yangberpaling terbalik.

Perulangan dengan pernyataando-while merupakan perulangan yangmirip dengan perulangan whileataupun for. Perulangan for dipakaipada perulangan yang sudahdiketahui berapa kali akan dijalankan.Sedangkan yang belum diketahuiberapakali akan diulangi makadigunakan while atau do-while.Pernyataan do-while digunakan untukmenjalankan pernyataan terlebihdahulu baru kemudian memeriksakondisi perulangan.

Pada pernyataan do-while, disinipemeriksaan terhadap loop dilakukandi bagian akhir (setelah tubuh loop).Pernyataan do-while akanmengulang proses secara terusmenerus selama kondisi bernilaibenar dan perulangan (loop) selesaijika kondisi bernilai salah.

Bentuk perulangan do-whiledikendalikan oleh syarat/kondisitertentu, yaitu perulangan akan terusdilaksanakan selama syarat/kondisitersebut terpenuhi. Pernyataan dalamdo-while akan dilaksanakanberulangkali selama syarat/kondisibernilai benar. Jika syarat/kondisibernilai salah badan perulangan tidakakan dilaksanakan, yang berartiperulangan selesai. Yang harusdiperhatikan adalah perulanganharus berhenti. Perulangan yangtidak pernah berhenti menandakanbahwa logika dari algoritma tersebutsalah.

Perbedaan dengan whilesebelumnya yaitu bahwa pada do-while statement perulangannyadilakukan terlebih dahulu barukemudian di cek kondisinya.Sedangkan while kondisi dicek dulubaru kemudia statementperulangannya dijalankan. Akibat darihal ini adalah dalam do-while minimalterdapat sekali perulangan.Sedangkan while dimungkinkanperulangan tidak pernah terjadi yaituketika kondisinya langsung bernilaisalah. Bentuk umum perulangan do-while, sebagai berikut :

dopernyataan;

while ( syarat/kondisi )

Syarat/kondisi: merupakan ungkapanlogika yang hanya bernilai benar atausalah, sehingga operator yangdipakai disini adalah operator relasi

dan operator logika atau gabungandari keduanya. Gambar diagram alirdari pernyataan do-while adalahsebagai berikut:

158 Direktorat Pembinaan SMK | 2008

Page 172: 01 bab 01 Dasar Komputer fachkunde OK

Struktur Perulangan Bahasa Pemrorgraman

pernyataan

Benar

Kondisi

Salah

Gambar 4.4. Diagram alir pernyataan do-while

Pernyataan dalam do-whiledapat berupa pernyataan tunggalmaupun jamak (lebih dari satu). Jikapernyataannya berbentuk jamak,maka pernyataan-pernyataantersebut harus diletakan didalam satu

blok dengan memakai tanda kurungkurawal. Bentuk umum perulangando-while, dengan lebih dari satupernyataan, seperti berikut dibawahini:

do{

Pernyataan; Pernyataan;

}while (syarat)

program dibawah ini merupakanaplikasi dengan menggunakan do-while pada operasi bilangan naik.Program dengan do-while dibawah ini

merupakn program do-while bilangannaik. Untuk lebih jelasnya perhatikancontoh program berikut:

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

2008 | Direktorat Pembinaan SMK 159

Page 173: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Struktur Perulangan

using namespace std;

int main(){

int loop = 1;docout << 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,pernyataan do-while juga bisadigunakan untuk operasi bilanganturun. Program dibawah inidigunakan untuk menurunkan

bilangan mulai dari 10 kemudianturun menjadi 9, 8 dan seterusnya.Untuk lebih jelasnya perhatikanprogram berikut ini:

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

using namespace std;

int main(){

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

}

Hasil keluaran program adalah:10 9 8 7 6 5 4 3 2 1

Selain digunakan untukmenaikan dan menurunkan bilangan,dibawah ini juga diberikan contoh

sebuah program yang menggunakanpernyataan perulangan do-while yangmenampilkan bilangan ganjil.

160 Direktorat Pembinaan SMK | 2008

Page 174: 01 bab 01 Dasar Komputer fachkunde OK

Struktur Perulangan Bahasa Pemrorgraman

Bilangan yang ditampilkan adalahbilangan ganjil dengan urutan mulaidari satu sampai batas yangditentukan yaitu 10. Sehingga

bilangan yang keluar dari programadalah 1, 3, 5, 7, dan 9. Untuk lebihjelasnya perhatikan program dibawahini:

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

using namespace std;

intmain()

{int loop = 1;do{cout << loop << " ";loop+=2;

}while (loop <= 10);getch();return 0;

}

Hasil keluaran program diatas adala sebagai berikut:1 3 5 7 9 _

4.10. Pernyataan NESTED DO-WHILEPernyataaan nested do-while

adalah suatu perulangan do-whiledidalam perulangan do-while lainnya.

Bentuk umum pernyataan Nested do-while sebagai berikut :

do{

do{

pernyataan;}while (syarat);

}while (syarat);

pernyataan diatas dapat juga ditulis seperti potongan pernyataan dibawah ini:

2008 | Direktorat Pembinaan SMK 161

Page 175: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Struktur Perulangan

do{do{

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

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

}while (syarat);

Didalam penggunaan nested do-while, perulangan yang didalamterlebih dahulu dihitung hinggaselesai, kemudian perulangan yangdiluar diselesaikan terus sampaiperulangan yang paling luar.

Program perulangan nested do-while sebenarnya lebih komplekdibandingkan program do whilebiasa. Dalam mengerjakan program

nested, baik while, do-while tentunyaharus lebih teliti, karena jika tidakseringkali terjadi kesalahan ketika de-compile. Program dibawah inimerupakan contoh aplikasi nesteddo-while yang digunakan untukmencari Segitiga Pascal. Untuk lebihjelasnya perhatikan contoh programdibawah ini:

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

Page 176: 01 bab 01 Dasar Komputer fachkunde OK

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

1 21

1 2 4 21

1 2 4 8 4 21

4.11. Perulangan Tidak BerhinggaPerulangan tidak berhingga

merupakan perulangan (loop) yangtak pernah berhenti atau mengulangterus, hal ini sering terjadidisebabkan adanya kesalahanpenanganan kondisi yang dipakaiuntuk keluar dari loop. Bahkan suatuketika program perulangan inimemang dirancang untuk tidakpernah berhenti, walaupun hal ini

sangat jarang sekali. Perulangantidak terhingga biasanya karenaadanya kesalahan penulisanprogram, sehingga ketika programdijalankan akan berjalan terus-menerus,.

Sebagai contoh saja padaprogram yang digunakan untukpenulisan perintah nilai pencacahsalah seperti pada program berikut:

2008 | Direktorat Pembinaan SMK 163

Page 177: 01 bab 01 Dasar Komputer fachkunde OK

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 diatastidak akan berhenti sampai dilakukanpenghentian dengan paksa. Padapernyataan for diatas tidak akanberhenti untuk menampilkan bilanganmenaik, kesalahan terjadi padapengubah nilai pencacah,seharusnya penulisan yang benaradalah:

b –

Akan tetapi yang ditulis dalamprogram adalah :

b ++

Oleh karena kondisi b >= 1 selalubernilai benar ( karena b bernilai 6),maka pernyataan cout << b;akan terus dijalankan. Jika terjadi halsemacam ini, untuk menghentikanproses yang terus menerus semacamini dilakukan dengan menekan

164 Direktorat Pembinaan SMK | 2008

Page 178: 01 bab 01 Dasar Komputer fachkunde OK

dikerjakan, maka eksekusi akandilanjutkan ke pernyataan yang

Struktur Perulangan Bahasa Pemrorgraman

tombol CTRL+ PAUSE atau CTRL + BREAK.

4.12. Pernyataan BreakKadang-kadang perlu untuk {

menghentikan satu looping sebelum meninggalkan semua Iterasi. Pernyataan break, dapat digunakan untuk beralih pada didalam satu }perulangan. Bila menemui break ,perulangan berhenti dan program

cout << count << endl;if (count == 5)break;

Pernyataan break berfungsimelompat ke pernyataan setelahperulangan.

Perulangan dengan while padasegmen program untuk menjalankan10 kali, namun pernyataan breakdapat menyebabkannya berhentisetelah kelima perulangan atauperulangan tertentu. Untuk lebihjelasnya perhatikan potonganprogram dibawah ini:

int count= 0;while (count++< 10)

untuk keluar dari perulangan baik for,while dan do-while serta strukturswitch. Jika pernyataan break

terletak sesudah akhir dari badanperulangan (loop).

Perhatikan contoh programpemakaian break dalam pernyataanfor dibawah. Program digunakanuntuk menghentikan bilangan deretmenggunakan break

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

Page 179: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Struktur Perulangan

getch();return 0;

}

Hasil keluaran program diatas adalah sebagai berikut:Deret Bilangan : 1 + 2 + …… + 14Jumlah Deret Bilangan = 105

Program dibawah ini menggunakanbreak dengan pernyataan while.Program deret bilangan yang

menggunaan break adalah sebagaiberikut:

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 + …… + 14Jumlah Deret Bilangan = 105

Contoh program dibawah inimenggunakan break denganpernyataan do-while. Perhatikan

program deret bilangan denganmenggunakan break berikut ini:

166 Direktorat Pembinaan SMK | 2008

Page 180: 01 bab 01 Dasar Komputer fachkunde OK

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 + …… + 14Jumlah Deret Bilangan = 105

4.13. Pernyataan ContinuePernyataan continue digunakan

untuk mengarahkan eksekusi keiterasi (proses loop) berikutnya yangberada pada loop yang sama, ataudengan kata lain mengembalikanproses yang sedang dilaksanakan

keawal loop lagi, tanpa menjalankansisa perintah dalam loop tersebut.Perhatikan contoh program yangmenggunakan continue dalampernyataan for berikut ini:

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

using namespace std;

int main(void){

2008 | Direktorat Pembinaan SMK 167

Page 181: 01 bab 01 Dasar Komputer fachkunde OK

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 + … + 20Jumlah 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

Page 182: 01 bab 01 Dasar Komputer fachkunde OK

Struktur Perulangan Bahasa Pemrorgraman

Jumlah Deret Bilangan = 189

Berikut ini merupakan contohprogram menggunakan continuedalam sebuah pernyataan do-while.

Perhatikan program bilangan deretdengan mengguakan continue sepertidibawah:

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 + … + 20Jumlah Deret Bilangan = 189

4.14. Pernyataan GotoPernyataan goto merupakan

instruksi untuk mengarahkaneksekusi program menuju pernyataanyang diawali dengan suatu label.Label merupakan suatu pengenal(identifier) yang diikuti dengan tandatitik dua ( : ).

Bentuk pemakaian goto adalahsebagai berikut:

gotolabel;

Contoh penggunaan instruksi gotodapat dilihat pada contoh programberikut ini:

2008 | Direktorat Pembinaan SMK 169

Page 183: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Struktur Perulangan

Program 4.30#include<iostream.h>#include<stdio.h>#include<conio.h>

using namespace std;

main(){

int a, b; charlagi; 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 = 1Ingin Hitung lagi (Y/T) : t

4.15. Soal LatihanJawablah soal latihan dibawah ini dengan baik dan benar.1. Struktur perulangan secara umum terdiri dari dua bagian, sebutkan2. Sebutkan fungsi operator increment dan decrement3. Jelaskan bentuk pernyataan for dalam bahasa pemrograman4. Jelaskan apa yang dimaksud dengan potongan program dibawah ini:

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

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

}5. Sebutkan fungsi break6. Sebutkan fungsi goto7. Apa yang dimaksud dengan NESTED-WHILE

170 Direktorat Pembinaan SMK | 2008

Page 184: 01 bab 01 Dasar Komputer fachkunde OK

Statement Kendali Bahasa Pemrorgraman

BAB 5STATEMENT KENDALI

5.1. Pengertian Statement5.2. Operator Relasi5.3. Statement IF5.4. Pernyataan IF/ELSE5.5. Pernyataan IF/ELSE IF5.6. Pernyataan IF/ELSE Majemuk5.7. Pernyataan NESTED IF5.8. Operator Logika5.9. Operator Kondisional5.10. Statement SWITCH5.11. Pernyataan Switch … Case5.12. IF...THEN, IF...THEN...ELSE dan Nested IF5.13. Aplikasi Pernyataan IF pada Menu5.14. Soal Latihan

5.1. Pengertian StatementPenyeleksian kondisi digunakan

untuk mengarahkan perjalanan suatuproses. Penyeleksian kondisi dapatdiibaratkan sebagai katup atau kranyang mengatur jalannya air. Bilakatup terbuka maka air akan mengalirdan sebaliknya bila katup tertutup airtidak akan mengalir atau akanmengalir melalui tempat lain. Seleksikondisi adalah proses penentuanlangkah berikutnya berdasarkanproses yang terjadi sebelumnya.

Seleksi kondisi ini sangat pentingdalam pemrograman sebab denganadanya seleksi kondisi, programdapat menentukan proses apa yangharus dilakukan selanjutnyaberdasarkan keadaan sebelumnya.Sehingga nampak seolah olahprogram dapat berpikir dan

mengambil keputusan. Disinilah letakkekurangan komputer yaitu tidakmampu berpikir sendiri, semua halyang dilakukan adalah berdasarkanperintah.

Dalam memprogram seringkalidigunakan suatu percabangan untukpengambilan keputusan darisejumlah pilihan yang mungkin.Bahasa pemrograman menyediakanpernyataan IF…THEN dan kata kunciyang lain seperti SWITCH...CASEuntuk melakukan suatu percabangan.

Dalam percabangan, keputusandiambil berdasarkan ekspresi kondisi.Ekpresi berkondisi adalah sebagiandari pernyataan program yangmenanyakan pertanyaan True atauFalse (Benar atau Salah) mengenai

2008 | Direktorat Pembinaan SMK 171

Page 185: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Statement Kendali

properti, variabel, atau data lain pada kode program.

Kode-kode perintah yangdiberikan dari suatu bahasapemrograman untuk melakukansuatu proses. Blok merupakan satuatau lebih statemen yang harusdikerjakan setelah suatu kondisidipenuhi.

Pernyataan Percabangandigunak-an untuk memecahkanpersoalan untuk mengambil suatukeputusan diantara sekianpernyataan yang ada. Untukkeperluan pengambilan keputusan,Borland C++ menyediakan beberapaperintah antara lain.

5.2. Operator RelasiDalam melakukan pemrograman,

kebanyakan programmer tentunyasudah banyak tahu bahwa program-program komputer dibuat supayamengikuti alur. Tentunya kita jugaberfikir bagaimana jika komputerdiprogram ternyata tidak mengikutialur atau urutan yang telah dibuat?

Maka komputer tersebut akantidak bisa berjalan sesuai denganyang kita inginkan. Alur atau urutanpada komputer ini antara lain: Adanya masukan dari pengguna. Dapat melakukan Satu atau lebih

perhitungan atau proses. Menampilkan hasilnya pada layar.

Sebuah komputer yang baik,selain dapat melakukan perhitungan,tetapi juga sangat ahli dalammembandingkan sebuah nilai untukmenentukan apakah lebih besar,kurang dari, atau sama dengan. Jenisoperasi tersebut sangat berhargauntuk memeriksa tugas-tugas seperti

angka-angka penjualan, penentuanlaba rugi, memeriksa untukmemastikan angka tersebut dalamrentang yang dapat diterima, danmemvalidasi input yang diberikanoleh pengguna.

Data Numerik pada bahasa C++akan dibandingkan denganmenggunakan sebuah operator.Sebuah karakter juga dapatdibandingkan dengan menggunakanoperator, karena dianggap sebagaikarakter yang mempunyai nilainumerik pada C++. Penghubungpada setiap operator akanmenentukan apakah ada hubunganantara dua nilai. Sebagai contoh,operator lebih ( > ) menentukan jikanilai lebih besar daripada yang lain.Operator kesetaraan (==)menentukan apakah dua nilai sama.Tabel dibawah merupakan semuaoperator penghubung pada bahasaC++.

Table 5.1. Operator RelasionalRELASI OPERAT

OR> Lebih besar daripada< Lebih kecil daripada>=

Lebih besar dari sama dengan<

=Kurang dari samadengan

==

Sama dengan!=

Tidak sama dengan

172 Direktorat Pembinaan SMK | 2008

Page 186: 01 bab 01 Dasar Komputer fachkunde OK

Statement Kendali Bahasa Pemrorgraman

Semua operator relasional tersebutdiatas, bisa juga disebut denganoperator biner. Hal ini karena merekamenggunakan dua operand. Berikutadalah contoh yang menggunakanoperator ekspresi yang lebih besardaripada:

x >y

Ekspresi tersebut merupakanekspresi penghubung atau relationalexpression. Digunakan untukmenentukan apakah x lebih besardaripada y. Berikut ekspresi untukmenentukan jika x kurang dari y:

x<y

Selanjutnya bagaimanamenentukan nilai sebuah operatorpenghubung tersebut dan bagaimanarelational expression digunakandalam program? Untuk menjawah haltersebut ada yang perlu diingat yaitu:semua memiliki nilai. Relationalekspresi adalah ekspresi Boolean,yang berarti mereka hanya terdapatnilai benar atau salah. Jika x lebihbesar dari y, maka ekspresi x> yakan benar, sedangkan kalimatnyadapat ditulis sebgai berikut:

Y==X

Pernyataan diatas akan akan salahjika, operator == digunakan untukmenentukan apakah operandsebelah kiri adalah sama denganoperand di kanan. Jika keduaoperand memiliki nilai yang sama,ungkapan itu benar. Dengan asumsibahwa a adalah 4 merupakanungkapan yang benar:

a==4

Namun berikut ini adalah salah:

a==2

pasangan sesuatu hal yangberhubungan merupakan sebuahoperator yang digunakan untukmenguji dua hubungan. Padaoperator >= digunakan untukmenentukan jika operand disebelahkiri lebih besar dari atau samadengan operand disebelah kanan.Dengan asumsi bahwa jika a adalah4, dan b adalah 6, serta c adalah 4,maka ekspresi yang paling benaradalah sebagai berikut:

b> =a a>= c

Namun ekpresi berikut dibawah iniadalah salah:

a>= 5

operator <= digunakan untukmenentukan jika operand disebelahkiri kurang dari atau sama denganoperand disebelah kanan. Perluditekankan sekali lagi, bahwadengan asumsi a adalah 4, b adalah6, dan c adalah 4, maka ekspresiyang benar adalah sebagai berikut:

a<=cb <=10

Namun ekpresi berikut adalah salah:

b<=a

Operator penghubung terakhir adalah

Page 187: 01 bab 01 Dasar Komputer fachkunde OK

!=, yang artinya adalah operator tidak

2008 | Direktorat Pembinaan SMK 173

Page 188: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Statement Kendali

sama. Operator ini untuk menentukanjika operand disebelah kiri tidak samadengan operand disebelah kanan,sedangkan kebalikan dari operatortersebut adalah operator ==. Seperticontoh sebelumnya, dengan asumsia adalah 4, b adalah 6, dan c adalah4, maka ekspresi yang benar adalahsebagai berikut:

a !=b b != c

Kalimat tersebut adalah benar karenaa tidak sama dengan b dan b tidaksama dengan c. Namun berikut iniadalah ekspresi salah karena samadengan c:

a !=c

Tabel dibawah ini menunjukkanoperator dimana nilai-nilai benar atausalah.

Table 5.2. Operator nilai benar atau salah.

EKPRESI NILAIx <y

salah, karena x lebih kecil daripada yx >y

Betul, karena x lebih besar daripada yx >= y Betul, karena x lebih besar atau sama

dengan yx <= y Salah, karena x lebih kecil atau sama dengan yy != x Betul, karena y tidak sama dengan x

Setelah diamati, sebenarnyaterdapat sebuah pertanyaan yangsering kita tidak tahu yaitu: "apa yangdimaksud dengan benar?".Pertanyaan tersebut merupakansuatu hal yang sangat perlu untukdipertimbangkan. Jika ekspresi relatifdapat dilakukan secara benar atausalah, bagaimana sesuatu yangmewakili nilai-nilai internal dalamsebuah program? Pada sebuahkomputer misalnya, bagaimana

komputer menyimpan benar?.Bagaimana pula cara menyimpandata yang salah?. Hal inimembutuhkan suatu tanda atau kodeyang disepakati sesuai dengankesepakatan umum pada sebuahkomputer.

Dalam bahasa C++, nilai benarakan diwakili dengan angka 1 dansalah dengan angka 0. Untukmenggambarkan lebih lengkap,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

Page 189: 01 bab 01 Dasar Komputer fachkunde OK

Statement Kendali Bahasa Pemrorgraman

int x = 5, y = 10;

nilaiBetul = x < y;nilaiSalah = y == x;

cout << "Benar adalah " <<nilaiBetul << endl; cout << "Salahadalah " << nilaiSalah << endl;getch();return0;

}

Keluaran Programnya adalah sebagai berikut:Benar adalah 1Salah adalah 0

Selanjutnya coba kita memeriksapernyataan-pernyataan yang berisiekspresi relasi sedikit lebih dekat:

nilaiBetul= x< y;nilaiSalah = y== x;

pernyataan-pernyataan tersebuttampaknya aneh karenamenempatkan nilai perbandingan kedalam sebuah variabel. Padapernyataan pertama, variabeltrueValue dengn diberi hasil x <y.Ketika x kurang dari y, ungkapan itubenar, dan variabel trueValuememberikan nilai 1. Sedangkan padapernyataan yang kedua ungkapan y== x adalah salah, sehingga variabelfalseValue akan keluar nilai 0.Perhatikan bahwa dalam keduakasus operasi relasionaldilaksanakan sebelum tugas operasidilakukan.

Selain itu tanda kurung dapatdigunakan untuk mengubah urutanoperasi, hal ini selalu terjadi karenaadanya operator relasionaltingkatannya relatif lebih tinggi danharus didahulukan dalam operasinyadaripada operator yang tingkatnyalebih rendah. Demikian juga, adaoperator aritmatika yang harus lebihdiutamakan daripada operatorrelasional. Seperti dalam pernyataanberikut ini:

NilaiSalah = x < y – 8;

Dari peryataan diatas misalnya,yang pertama Y - 8 akan dievaluasiterlebih dahulu untuk menghasilkannilai 2. Kemudian X yang bernilai 5akan dibandingkan dengan 2. Jikanilai 5 kurang dari 2, nilai nol akanmasukan ke falseValue. Tabeldibawah menunjukkan contoh lainnyatermasuk pernyataan yang relatifbiasa.

2008 | Direktorat Pembinaan SMK 175

Page 190: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Statement Kendali

Tabel 5.3. Pernyataan ekpresi relasional

PERNYATAAN KELUARANz = x < y z sama dengan 0 karena x tidak kurang

daripada ycout << (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 yz = y != x; z samadengan 1 karena y tidak samadenganxcout << (x == y +

3);Tampilkan 1 karena x sama dengan y + 3

Operator relasional juga memilikiurutan yang mempunyai prioritasdiantara mereka sendiri. Keduaoperator dalam tes kesamaan atautidak sama (== dan ! =) mempunyaitingkat kesamaan yang sama antarasatu sama lain.

Empat penghubung operatorlainnya, ada yang mempunyaiprioritas tinggi atau rendah antarasatu sama lain. Keempat operatorrelasional seperti dalam. Tabeldibawah menunjukkan diutamakanyang berhubungan operator.

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

== !=

> >= <<=

Berikut ini adalah sebuah contohbagaimana operator diterapkan. Jikaa = 9, b = 24, dan c = 0, pernyataanberikut ini akan menyebabkan abernilai 1 akan ditampilkan.

cout <<(c ==a> b);

Karena adanya nilai yang relatifdiutamakan dari operator dalam

berekspresi ini, a > b akan dievaluasiterlebih dahulu. Ketika 9 tidak lebihbesar dari 24, maka hal tersebutakan mengevaluasi salah atau 0.Kemudian ketika C == 0 maka akandihasilkan. Ketika c tidak samadengan 0, hal tersebut akanmenghasilkan nilai betul, atau 1.Sehingga nilai 1 akan dimasukkan kedalam output stream dan ditampilkan.

5.3. Statement IFAnda mungkin berpikir mengenai

pernyataan dalam programprocedural seperti langkah-langkahyang diambil sebagai individu. Untukmencapai tujuan tersebut , makaharus dimulai dari awal dan mengikutisetiap langkah, satu setelah yang lain

hingga dapat mencapai tujuan.Program-program yang ditulis iniadalah seperti halnya sebuah "jalan"dimana pelaksanaannya harus diikuti.Perhatikan langkah program dibawahini:

176 Direktorat Pembinaan SMK | 2008

Page 191: 01 bab 01 Dasar Komputer fachkunde OK

Statement Kendali Bahasa Pemrorgraman

#include<iostream>

usingnamespace std;

intmain()

{double panjang, lebar, luas;cout << "masukan panjang segiempat: ";

cin >>panjang;

cout << "Masukan lebar segiempat: ";cin >>lebar;

luas = panjang * lebar;cout << "Luasnya: " << luas << endl;

return0;

}

Gambar 5.1. Langkah-langkah program

Seperti ditunjukkan dalamGambar diatas, pelaksanaanprogram mengalir secara berurutandari satu pernyataan ke pernyataanberikutnya. Jenis program ini seringdisebut-garis lurus karena programyang dijalankan dalam pernyataanyang lurus "baris," tanpa simpangankearah yang lain. Apakah haltersebut tidak akan berguna, jikasebuah program dapat memiliki lebihdari satu "jalur atau arah"pelaksanaan? Bagaimana jikasebuah program dapat menjalankan

beberapa pernyataan hanya dalamkondisi tertentu?.

Hal yang dapat dicapai denganpernyataan IF, seperti digambarkanoleh Program dibawah ini. Penggunamemasukan tiga nilai ujian danprogram menghitung rata-rata nilaitersebut. Jika rata-rata lebih besardari 95, program memberikanselamat pada penggunamendapatkan nilai tinggi tersebut.Untuk lebih jelasnya perhatikanprogram untuk mencari rata-ratapada tiga nilai masukan dibawah:

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

2008 | Direktorat Pembinaan SMK 177

Page 192: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Statement Kendali

using namespace std;

intmain()

{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: 100100 100[Enter] Rata‐rata Nilai Anda Adalah 100.0Selamat….! 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 tersebutdiatas akan menampilkan data tulisan"selamat….! "….., jika data yangdimasukan sama dengan seratus.Jika tidak maka hanya akanmenampilkan rata-rata nilainya saja

tanpa ada ucapan selamat atau "Selamat….! ". Gambar dibawah inimenunjukkan bentuk pernyataanyang digunakan pada pernyataan IFdan flowchart visual dapat dijelaskancara kerjanya sebagai berikut:

178 Direktorat Pembinaan SMK | 2008

Page 193: 01 bab 01 Dasar Komputer fachkunde OK

Statement Kendali Bahasa Pemrorgraman

Kondisisalah

Betul

Pernyataan

Gambar 5.2. Diagram alir pernyataan IF

Dari gambar tersebut diatas pernyataan IF dapat ditulis sebagai berikut:

if (ekspresi){

Pernyataan1; Pernyataan2;..Pernyataan n;

}

Pernyataan IF adalah sangatsederhana cara kerjanya. Jikaekspresi didalam tanda kurung yangbenar, maka pernyataan didalambraces (kotak) yang akan dijalankan,jika tidak, maka mereka diabaikan.Blok pernyataan ini adalahmerupakan conditionally executedkarena pernyataan hanya dijalankandidalam kondisi yang diekspresikandalam tanda kurung yang benar.Program diatas menggambarkansebuah pernyataan IF. Dalampernyataan cout hanya dilaksanakan

dibawah kondisi yang sama dengan rata-rata 100.

Misalnya kalau diuraikan dalamsebuah pernyataan dalm keseharianadalah sebagai berikut: Jika bensinmobil sudah hampir habis, makaberhenti dipompa bensin untukmengisi bensin. Jika diluar hujan, pergi kedalam

rumah. Jika Anda lapar, carilah sesuatu

untuk dimakan.Jika blok pernyataan

conditionally executed hanya satu

2008 | Direktorat Pembinaan SMK 179

Page 194: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Statement Kendali

pernyataan, maka braces dapatdiabaikan. Misalnya, dalam Programdiatas, jika dua pernyataan cout yang

digabungkan menjadi satupernyataan, mereka dapat menulisseperti yang ditunjukkan di sini.

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

Perintah IF yang menyatakanpernyataan kondisional (bersyarat)dapat ditulis sintaks sederhana IFadalah

if (kondisi) statement;

Statement pada sintaks di atasakan dilakukan jika kondisinyabernilai TRUE (tidak sama dengannol). Apabila statement yang akandilakukan lebih dari satu, makasintaksnya menjadi seperti dibawahini:

if (kondisi){

statement1;statement2;..

}

Contoh sederhana penggunaanIF adalah untuk menentukan bolehtidaknya seseorang melihat filmbioskop. Seseorang diperbolehkan

menonton jika usianya 17 tahun keatas. Perhatikan contoh program C++berikut ini:

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

Page 195: 01 bab 01 Dasar Komputer fachkunde OK

Statement Kendali Bahasa Pemrorgraman

Keluaran program diatas adalah:Berapa usia Anda : 9Anda tidak boleh menonton bioskop

Statement IF juga dapatditambahkan ELSE sebagaikonsekuensi alternatif jika kondisi

tidak dipenuhi (FALSE). Untuk lebihjelasnya perhatikan sintaks programdibawah ini:

if (kondisi){

statement1;statement2;..}

else {statement1;statement2;

}

Anda dapat pula memodifikasiprogram C++ untuk menentukan

boleh tidaknya seseorang menonton 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";elsecout << "Anda boleh menonton bioskop";getch();return 0;

}

Keluaran programnya adalah sebagai berikut:Berapa usia Anda : 16Anda tidak boleh menonton bioskop

2008 | Direktorat Pembinaan SMK 181

Page 196: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Statement Kendali

Untuk menyatakan kondisi atausyarat, akan dicek pada IF, Andadapat menggunakan operator logikadan operator relasional seperti yangtelah dijelaskan sebelumnya.Perhatikan contoh penulisan programdibawah ini:

if ((a >= 2) && (b == 3)){….}

Jangan dituliskan seperti ini:if (a >= 2) && (b == 3)

{….

}

Dan juga tidak boleh seperti ini:if ((a >= 2) && (b = 3))

{….}

Perintah b = 3 merupakanassignment bukan relasional. C++selalu memperlakukan nilai tidaksama dengan nol sebagai TRUE ataubenar dan nilai nol sama denganFALSE atau nilai salah. Oleh karenaitu, dua perintah dibawah ini adalahidentik. Perhatikan potongan programdibawah 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)statement

1; else if(kondisi2)

statement2;else if (kondisi3)

statement3;..

else statement;

IF dapat juga menggunakanoperator pembanding (comparisonoperators) untuk mengeksekusi suatupilihan dari 2 pilihan yang ada,

tergantung hasil pembandingannya.Penulisan Instruksi atau sintaknyaadalah sebagai berikut:

if (Kondisi){

182 Direktorat Pembinaan SMK | 2008

Page 197: 01 bab 01 Dasar Komputer fachkunde OK

Statement Kendali Bahasa Pemrorgraman

}else{

}

Perintah yang akan dieksekusi jika kondisi bernilai true

Perintah yang akan dieksekusi jika kondisi bernilai false

Kondisi menunjukkan berbagaitipe statement atau fungsi yangmenghasilkan nilai benar atau salah.Berikut ini diberikan contoh kondisi

yang berupa perbandingan antaravariabel dengan nilai, variabel lainatau fungsi. Perhatikan potonganprogram dibawah ini:

if (x > 5){

y = 10;}

if (x > y){

y = x;}

if (x > val(angka)){

y = 20;}

Suatu ketika akan ditemui pulapenggunaan instruksi IF .. THENstatements, dimana isntruksi inidigunakan untuk mengevaluasi lebih

dari satu kondisi. Untuk itu digunakantambahan blok IF..THEN..ELSE IFstatements. Perhatikan contohprogram dibawah ini:

if (x < 5)cout<<“Nilai x kurang dari 5”;

elseif (x < 10)

cout<<“Nilai X antara 5 dan 9”;else cout<<“Nilai x lebih dari 9”;

Jika suatu kondisi tergantung padakondisi lain yang sudah bernilai true(seperti if hari = senin dan if jam =6.30 ) maka harus digunakan

percabangan bersarang (nested Ifstatements). Perhatikan contohberikut ini:

2008 | Direktorat Pembinaan SMK 183

Page 198: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Statement Kendali

if (hari = senin){

if (jam = 6.30){

…}

}

Untuk lebih jelasnya mengenaipernyataan IF, perhatikan sebuahkasus yang digunakan untukmenentukan besarnya potongan daripembelian barang yang diberikanseorang pembeli, dimana kasustersebut mempunyai kriteria sebagaiberikut:

Tidak ada potongan jika total pembelian kurang Rp. 50.000,-

Jika total pembelian lebih dari atausama dengan Rp. 50.000,-potongan yang diterima sebesar20% dari total pembelian.

Perhatikan Program yangmenggunakan 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/ELSEPernyataan IF/ELSE merupakan

sebuah pengembangan pernyataanIF. Secara umum bentuk pernyataan

ini juka digambarkan dalam bentuk flowchart sebagai berikut:

184 Direktorat Pembinaan SMK | 2008

Page 199: 01 bab 01 Dasar Komputer fachkunde OK

Statement Kendali Bahasa Pemrorgraman

Betul salahKondisi

Pernyataan 1 Pernyataan 2

Gambar 5.3. Diagram alir IF-ELSE

Jika diuraikan dalam bentuk kalimat, gambar diatas dapat ditulis menjadi

sebuah pernyataan seperti dibawah ini:

if (kondisi){

}else{

}

Pernyataan 1

Pernyataan 2

Seperti pada pernyataan IFdiatas, sebuah kondisi akan dilihatterlebih dahulu. Jika kondisi adalahbenar, maka sebuah blok yang berisisatu atau lebih pernyataan akandijalankan. Jika ekspresi adalahsalah, maka pernyataan grup

berbeda yang akan dijalankan.Program dibawah merupakan contohpenggunaan pernyataan bersamaoperator modulus untuk menentukanapakah angka yang dihasilkan ganjilatau genap.

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

using namespace std;

int main()

2008 | Direktorat Pembinaan SMK 185

Page 200: 01 bab 01 Dasar Komputer fachkunde OK

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 IFadalah ganjil atau genap. 17[Enter]17 adalah ganjil

Bagian lain diakhir pernyataan IFakan menentukan pernyataan yangakan dijalankan ketika kondisi yangada tidak sesuai atau salah. Bilaangka 2% tidak sama 0, pesan yangdicetak menunjukkan angka ganjil.Perlu diketahui bahwa program inihanya akan mengambil salah satudari dua jalur pernyataan IF/ELSE..Jika Anda berpikir tentangpernyataan dalam program komputer,langkah-langkah yang diambilberdasarkan pertimbangkanpernyataan IF/ELSE sebagai penentujalan. Bahkan kadang terjadi jalanyaprogram memutar, seperti halnyapada sebuah pernyataan IF,sedangkan pada pernyataan IF/ELSEmenyebabkan pelaksanaan programmengikuti salah satu dari dua jaluryang tersedia.

Perhatikan gaya pemrogramanyang digunakan untuk membangunpernyataan IF/ELSE. Atau dengankata lain adalah pada tingkat yangsama seperti halnya perbedaan.Pernyataan eksekusi yang

dikendalikan oleh orang lain kadangberbeda satu tingkat.

Seperti halnya pada pernyataanIF, jika tidak menggunakan kotaksebagai bagian kontrol sebuahpernyataan. Program diatasmenggambarkan hal tersebut ini. Iajuga memperlihatkan salah satu carauntuk menangani sebuah masalahpemrograman yaitu pembagian olehnol.

Pembagian dengan nol sangatmustahil untuk dilakukan secaramatematis dan biasanyamenyebabkan program crash. Hal Iniberarti program akan terhentisebelum waktunya, kadang-kadangakan muncul dengan pesankesalahan. Program diatasmenunjukkan salah satu cara untukmenguji nilai dari pembagi sebelumdilakukan pembagian. Nilai num2akan diuji sebelum pembagiandilakukan. Jika penggunamemasukkan angka 0, maka barisdikontrol oleh bagian IF ketikaprogram dijalankan, menampilkan

186 Direktorat Pembinaan SMK | 2008

Page 201: 01 bab 01 Dasar Komputer fachkunde OK

Statement Kendali Bahasa Pemrorgraman

pesan yang menunjukkan programtidak dapat melakukan pembagiannol. Jika tidak, bagian lain mengambilkontrol, dan kemudian membaginum1 oleh num2 serta menampilkanhasilnya.

Salah satu aplikasi penggunaanIF/ELSE misalnya digunakan padasuatu permasalahan untukmenentukan besarnya potongan daripembelian barang yang diberikan

seorang pembeli, dengan kriteria sebagai berikut: jika total pembelian kurang dari

Rp. 50.000,- potongan yangditerima sebesar 5% dari totalpembelian.

Jika total pembelian lebih dari atausama dengan Rp. 50.000,-potongan yang diterima sebesar20% dari total pembelian.

Untuk lebih jelasnya perhatikancontoh 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; elsepotongan = 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 digunakanuntuk menentukan sebuah operasipembagian yang menggunakanIF/ELSE , jika suatu bilangan dibagi

dengan nol maka program akanmemberitahukan bahwa programtidak bisa melakukan operasi.

2008 | Direktorat Pembinaan SMK 187

Page 202: 01 bab 01 Dasar Komputer fachkunde OK

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

}

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 IFPernyataan IF/ELSE IF

merupakan sebuah pernyataandimana programmer dapat membuatbeberapa keputusan denganmenggunakan aturan yang berbeda

tetapi ada kaitannya denganpernyataan sebelumnya. Misalnya,programmer akan menentukan jenismantel atau jaket yang dipakai dalam

188 Direktorat Pembinaan SMK | 2008

Page 203: 01 bab 01 Dasar Komputer fachkunde OK

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, jikaberangin, memakai baju hem,else, jika panas, tidak perlu memakai jaket.

Tujuan aturan tersebut adalahuntuk menentukan jenis pakaian luaryang akan dipakai. Jika sangatdingin, pertama menharuskanmenggunakan aturan yang memakaimantel tebal. Semua peraturanlainnya kemudian dapat diabaikan.Jika aturan pertama tidak berlaku,dan jika tidak dingin sekali, makaaturan kedua digunakan. Jika aturantidak berlaku, aturan yang ketigadigunakan, dan seterusnya.

Suatu cara yang digunakanuntuk menhubungkan peraturantersebut sangat penting. Jika merekahanya berdiri sendiri, dimungkinkanakan keluar rumah dengan memakaijaket yang salah, atau mungkin, lebih

dari satu jaket. Misalnya, jikaberangin, maka aturannya harusberpakaian baju hem. Bagaimana jikaada keduanya yaitu sangat dingindan berangin? Apakah akanmemakai sebuah baju hem?. Karenaaturan harus dipatuhi, pertama akanmenentukan aturan memakai manteltebal dan memakai baju hem karenaberangin.

Jenis pengambilan keputusanjuga sangat umum dalampemrograman. Dalam bahasa C++hal tersebut dicapai melaluipernyataan IF/ELSE IF. Gambardibawah menunjukan format carakerjanya.

2008 | Direktorat Pembinaan SMK 189

Page 204: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Statement Kendali

Betul

Kondisi 1Pernyataan 1

salah

BetulKondisi 2 Pernyataan 2

salah

Betul

Kondisi nPernyataan n

salah

Gambar 5.4. Pernyataan IF/ELSE IF

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

if (kondisi 1){

Pernyataan 1;}else if (kondisi 2){

Pernyataan 2;}

.

.else if (kondisi n){

Pernyataan n;}

190 Direktorat Pembinaan SMK | 2008

Page 205: 01 bab 01 Dasar Komputer fachkunde OK

Statement Kendali Bahasa Pemrorgraman

Susunan ternyataan tersebutseperti halnya sebuah pernyataanberbentuk rantai IF/ELSE. Padabagian ELSE sebuah pernyataanakan terkait dengan IF dari bagianyang lain. Ketika digabungkan caraini, maka IF/ELSE dari rantai akanmenjadi sebuah pernyataan. Programdibawah menunjukkan contoh,

dimana Pengguna diminta untukmemasukkan angka skor tes danprogram menampilkan huruf yangbesar.

Program dibawah inimenggunakan pernyataan IF/ELSEyang digunakan untuk operasi filehuruf kapital.

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 mengujinyaNilai Konversi huruf adalah: 90

2008 | Direktorat Pembinaan SMK 191

Page 206: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Statement Kendali

Grade Anda Adalah A.

Pernyataan IF/ELSE mempunyaisejumlag karakterisitik khusus.Perhatikan dan analisis kerja dariekprsesi relasional pengujian sebuahtestscore < 60 dibawah ini:

if (testScore <60)nilai ='F';

Jika testScore kurang dari 60, huruf'F' dimasukan ke nilai dan sisanyadari pernyataan yang terkait denganIF diabaikan. Jika TestScore tidakkurang dari 60, maka tugsa akandiambil alih oleh bagian lainpernyataan IF berikutnya yang akandijalankan.

else if (testScore< 70)nilai ='D';

Pertama jika seluruh pernyataandisaring untuk memilih nilai kurangdari 60, sehingga saat ini berikutnyapernyataan IF memilih, variabeltestScore akan memiliki nilai 60 ataulebih besar. Jika "testScore" kurangdari 70, huruf 'D' dimasukan ke nilaidan sisanya dari Pernyataan IF/ELSEIF ini diabaikan. lingkaran peristiwaini terus berlangsung sampai salahsatu ekspresi kondisional ditemukanbenar atau akhir pernyataan yangdihadapi. Dalam kedua kasus,program ini dilanjutkan kembali padapernyataan yang mengikutinya.

Pernyataan IF/ELSE IF,merupakan pernyataan untukmencetak kondisi yang berhasil.Gambar dibawah menunjukkan jalanyang dapat diambil melaluipernyataan IF/ELSE IF.

192 Direktorat Pembinaan SMK | 2008

Page 207: 01 bab 01 Dasar Komputer fachkunde OK

Statement Kendali Bahasa Pemrorgraman

Tidak YaSkorTes

t<

60 ?

Tidak YaSkorTes

t<

70 ?

Nilai= ’F’

Tidak YaSkorTes

t<

80 ?

Nilai= ’D ’

Tidak YaSkorTes

t<

90 ?

Nilai= ’C ’

Tidak

YaSkorTest<=100 ?

Nilai= ’B ’

Nilai= ’A ’

Gambar 5.5. Pernyataan IF/ELSE IF

pernyataan IF pada setiap strukturbergantung pada semua pernyataanIF sebelumnya yang salah.

Pernyataan ELSE IF berikutnyadijalankan apabila ekspresikondisional mengikuti ELSE IF itubenar dan semua ekspresi

kondisional sebelumnya adalahsalah. Untuk mendemonstrasikanbagaimana bekerjanya, perhatikanprogram dibawah, yangmenggunakan pernyataan IF yangindependen bukan sebuahpernyataan IF/ELSE. Program

2008 | Direktorat Pembinaan SMK 193

Page 208: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Statement Kendali

tersebut digunakan untukmengilustrasikan kesalahan yangterjadi ketika pernyataan IF/ELSE

yang digunakan untuk menentukannilai huruf ke nilai angka. Perhatikanprogram 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 mengujinyaNilai Konversi huruf adalah: 40[Enter]Nilai Anda Adalah A.

Pada program dibawah, semuapernyataan IF dijalankan karena haltersebut merupakan pernyataan yangberdiri sendiri. Pada contoh keluaran,

testScore diberikan nilai 40, namunada siswa yang menerima A.Berikutnya apa yang terjadi ?.Karena skor siswa kurang dari 60,

194 Direktorat Pembinaan SMK | 2008

Page 209: 01 bab 01 Dasar Komputer fachkunde OK

Statement Kendali Bahasa Pemrorgraman

yang pertama pernyataan IF akanmenyebabkan nilai 'F'memasukannya ke variabel grade.Namun, karena pernyataanberikutnya jika tidak tersambung kepernyataan pertama, maka haltersebut akan dieksekusi denganbaik. ketika testScore kurang dari 70,dan menyebabkan nilai 'D'ditugaskan ke grade, dan mengganti'F' yang sebelumnya disimpan di

sana. Ini terus sampai semua jikaada pernyataan dijalankan. Yangterakhir akan menyebabkan 'A' akanditugaskan untuk "grade".

Pada program dibawahmenggunakan pernyataan if/else ifuntuk melaksanakan konversi nilaihurif (A, B, C, D, or F) menjadi nilaiangka. Perhatikan program dibawahini:

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

elsegoodScore = false;

if (goodScore)cout << " Grade Anda Adalah " << grade << ".\n";else{

2008 | Direktorat Pembinaan SMK 195

Page 210: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Statement Kendali

}getch();

cout << testScore << " Adalah skor anda yang tidak sah.\n";cout << "Silakan masukan skor dibawah 100. \n";

return 0;}

Keluaran program ddiatas setelah memasukan data adalah sebagai berikut:Masukan Nilai Angka maka saya akan mengujinyaNilai Konversi huruf adalah: 110110 Adalah skor anda yang tidak sah. Silakan masukan skor dibawah 100.

5.6. Pernyataan IF/ELSE MajemukBentuk dari IF-ELSE bertingkat

sebenarnya serupa dengan NESTEDIF, keuntungan penggunaan IF-ELSEbertingkat dibanding denganNESTED IF adalah cara atau bentuk

penulisan yang lebih sederhana.Untuk lebih jelasnya perhatikanbentuk penulisan program dibawahini:

if (syarat){

… perintah;… perintah;

}else if (syarat){

}else{

}

… perintah;… perintah;

… perintah;… perintah;

Untuk lebih jelasnya, perhatikansebuah kasus di suatu perusahaanmemberikan komisi kepada paraselesman dengan ketentuan sebagaiberikut: Bila salesman dapat menjual

barang hingga Rp. 200.000 ,- ,

akan diberikan uang jasa sebesarRp. 10.000 ditambah dengan uangkomisi Rp. 10% dari pendapatanyang diperoleh hari itu.

Bila salesman dapat menjualbarang diatas Rp. 200.000 ,- ,akan diberikan uang jasa sebesar

196 Direktorat Pembinaan SMK | 2008

Page 211: 01 bab 01 Dasar Komputer fachkunde OK

Statement Kendali Bahasa Pemrorgraman

Rp. 20.000 ditambah dengan uangkomisi Rp. 15% dari pendapatanyang diperoleh hari itu.

Bila salesman dapat menjualbarang diatas Rp. 500.000 ,- ,akan diberikan uang jasa sebesarRp. 30.000 ditambah dengan uang

komisi Rp. 20% dari pendapatanyang diperoleh hari itu.

Kasus yang ada di perusahaantersebut dapat diatasi denganmenggunakan program IF-Else-IF,dimana programnya adalah sebagaiberikut:

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

Page 212: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Statement Kendali

cout<<"Hasil Total Rp. "<<total<<endl;

getch();return 0;

}

Keluaran program diatas adalah sebagai berikut:Pendapatan Hari ini Rp. 10000Uang Jasa Rp. 10000Uang Komisi Rp. 1000============================= Hasil Total Rp. 11000

5.7. Pernyataan NESTED IFKetika sebuah pernyataan IF

muncul didalam pernyataan IF lain,maka hal ini dikategorikan sebagainested. Kenyataannya dalam strukturIF/ELSE adalah pernyataan nested if.Jika masing-masing setelah ifpertama adalah nested di bagian lain

IF sebelumnya. Karena nested ifmerupakan pernyataan if yangberada didalam pernyataan if yanglainnya, sehingga utuk lebih jelasnyabentuk penulisan pernyataan Nestedif dapat ditulis seperti berikut dibawahini:

if(syarat)if(syarat)

… perintah;else

… perintah;else if(syarat)

… perintah;else

… perintah;

Sebagai contoh saja misalnyaprogram dibawah digunakan untukmenentukan apakah pelanggan bankmemenuhi syarat khusus untukmendapatkan bunga pinjaman,dimana syarat khusus ini ditujukan

untuk pelanggan orang-orang yangbaru lulus dari sekolah dan bekerja.Program berikut inimendemontasikan pernyataan nestedif.

Program 5.13#include<conio.h>

198 Direktorat Pembinaan SMK | 2008

Page 213: 01 bab 01 Dasar Komputer fachkunde OK

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 inidengan jawaban Y untuk Ya atau T untuk TidakApakah Anda Bekerja? Y

Karena pernyataan IF pertamakondisinya melaksanakan masalahkedua, baik variabel pekerja danbarululus harus diatur ke 'Y' supayapesan mengenai pengguna dengankualifikasi khusus dicetak sesuaidengan tingkat suku bunga. Jenispernyataan nested if yang baik untukpilihan yang kecil dengan

mengkategorisasikan data. Satu-satunya cara untuk menjalankanprogram pernyataan IF yang keduaadalah dengan ekspresi kondisionalyang pertama harus benar. Namunkadang ada fitur yang tidakdikehendaki atau sering dikenalsebagai kesalahan dalam sebuahprogram. Jika seorang pengguna

2008 | Direktorat Pembinaan SMK 199

Page 214: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Statement Kendali

memasukkan 'N' (atau karakter selain'Y') sebagai pekerja atau barululus,program tidak mencetak pesan yangmemberitahukan bahwa mereka tidakmemenuhi syarat.

Pernyataan lain yang dapatdigunakan untuk mengatasi masalahini digambarkan dalam programdibawah. Program dibawah inimerupakan sebuah pernyataanNESTED IF.

Program 5.14#include<coni

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

}200 Direktorat Pembinaan SMK | 2008

Page 215: 01 bab 01 Dasar Komputer fachkunde OK

Statement Kendali Bahasa Pemrorgraman

return 0;}

Keluaran program diatas setelah diberi masukan adalah:Jawablah pertanyaan dibawah inidengan jawaban Y untuk Ya atau T untuk TidakApakah Anda Bekerja? Ytelahkan Anda selesai sekolah dalam dua tahun ini? Y Kwalitas anda khusus Anda tertarik

contoh lainnya misalnya padasuatu perusahaan yang memberikankomisi kepada para selesmandengan ketentuan sebagai berikut: Bila salesman dapat menjual

barang hingga Rp. 20.000 ,- , akandiberikan uang jasa sebesar Rp.10.000 ditambah dengan uangkomisi Rp. 10% dari pendapatanyang diperoleh hari itu.

Bila salesman dapat menjualbarang diatas Rp. 20.000 ,- , akandiberikan uang jasa sebesar Rp.

20.000 ditambah dengan uangkomisi Rp. 15% dari pendapatanyang diperoleh hari itu.

Bila salesman dapat menjualbarang diatas Rp. 50.000 ,- , akandiberikan uang jasa sebesar Rp.30.000 ditambah dengan uangkomisi Rp. 20% dari pendapatanyang diperoleh hari itu.

Perhatikan contoh program denganmenggunakan pernyataan Nested-If dibawah:

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

Page 216: 01 bab 01 Dasar Komputer fachkunde OK

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. 5600Uang Jasa Rp. 10000Uang Komisi Rp. 560============================= Hasil Total Rp. 10560

5.8. Operator LogikaSelain operator relasional,

bahasa pemrograman umumnyamendukung tambahan operator yaituAND, OR, dan NOT. Operator And,Or, dan Not dikenal dengan namaoperator logika. Denganmenggunakan operator ini dua ataulebih test perbandingan dapatdilakukan. Pada bagian sebelumnya

telah ditulis sebuah program tesdengan dua kondisi pada pernyataanIF. Dalam bagian ini ditulis programyang menggunakan operator logisuntuk menggabungkan dua atau lebihmenjadi satu kalimat relasional. Tabelberikut merupakan daftar operatorlogika pada bahasa C++.

202 Direktorat Pembinaan SMK | 2008

Page 217: 01 bab 01 Dasar Komputer fachkunde OK

Statement Kendali Bahasa Pemrorgraman

Tabel 5.5. Operator LogikaOPERATOR

ARTI PENJELASAN&& AND Menghubungkan dua ekpresi menjadi satu. Kedua

ekpresitersebut harus benar supaya hasilnya benar|| OR Menghubungkan dua ekpresi menjadi satu. Hasil akan menjadi benar jika salah satu atau keduanya ada yangbenar.! NOT Operator yang melakukan kebalikan dari ekpresi. Jika ekpresibenar maka hasil salah atau sebaliknya.

5.8.1. Operator &&Operator && yang dikenal

sebagai operator logika. Dua kalimatdiperlukan sebagai operands danmembuat kalimat benar, jika kedua

sub-kalimatnya benar. Berikutdibawah ini adalah contoh programpernyataan IF yang menggunakanoperator &&:

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

Perhatikan bahwa kedua kalimatyang diANDkan bersama adalahkalimat yang lengkap untukmengevaluasi benar atau salah.Pertama suhu <20 dievaluasi untukmenghasilkan hasil benar atau salah.Kemudian menit> 12 dievaluasi untukmenghasilkan hasil benar atau salah.Kemudian kedua hasil tersebutdiANDkan sehingga akanmendapatkan hasil akhir untukseluruh ekspresi. Pernyataan couthanya akan dijalankan jika suhukurang dari 20 dan waktunya lebih

besar daripada 12. Jika salah satupenghubung teresebut salah, seluruhekspresi yang dihasilkan juga salahdan pernyataan cout tidak dijalankan.

Tabel dibawah meruapkan tabelkebenaran untuk operator &&.Kebenaran tabel berisi semuakemungkinan kombinasi nilai yangmungkin dimiliki oleh dua kalimat,Sebagaimana dalam tabelmenunjukkan, kedua sub-ekspresiharus benar untuk operator &&sehingga akan menghasilkan nilaiyang benar pula.

Table 5.6. Logika AND

2008 | Direktorat Pembinaan SMK 203

Page 218: 01 bab 01 Dasar Komputer fachkunde OK

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 digunakanuntuk mempermudah program-program lain yang akanmenggunakan pernyataan NESTED

IF. Program dibawah ini adalah versiProgram sebelumnya yang kemudianditulis ulang dengan operator logika.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{

}getch();

cout << "anda harus bekerja dan mempunyai\n";cout << "lulusan dari sekolah SMK dalam\n";cout << "waktu paling lama 3 tahun.\n";

204 Direktorat Pembinaan SMK | 2008

Page 219: 01 bab 01 Dasar Komputer fachkunde OK

Statement Kendali Bahasa Pemrorgraman

return 0;}

Keluaran program diatas setelah diberi masukan adalahJawablah pertanyaan dibawah inidengan jawaban Y untuk Ya atau T untuk TidakApakah Anda Bekerja? Ttelahkan Anda sekolah dalam dua tahun ini? Yanda harus bekerja dan mempunyai lulusan dari sekolah SMK dalam waktu paling lama 3 tahun.

5.8.2. Operator ||Operator || yang dikenal sebagai

operator logika OR. Dua kalimat yangdiperlukan sebagai operand akanmembuat kalimat benar bila salahsatu dari sub-kalimat yang benar.Berikut dibawah ini adalah contohsebuah pernyataan IF yangmenggunakan operator ||

if (suhu < 20 || suhu > 100)cout << "suhu dalam level yang

berbahaya.";

Pernyataan cout akan dijalankan jikasuhu kurang dari 20 ATAU suhu lebihbesar dari 100. Jika salah satunyabenar, maka seluruh ekspresi akanmenghasilkan keluaran benar danpernyataan cout akan dijalankan.Setelah cout dijalankan maka akanmenghasilkan keluaran "suhu dalamlevel yang berbahaya". Tabledibawah ini merupakan tablekebenaran operator OR

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 operatorOR akan menjadi salah jika semuadari sub-kalimat salah, tetapi akanbenar jika salah satu sub-kalimatnyabenar. Tidak peduli apakah salahsatu sub-ekspresinya salah atau

benar. Program dibawah ini akanmelakukan tes untuk mengetahuiorang yang memenuhi syarat untukmendapatkan pinjaman. Program iniakan menentukan apakah pelangganmempunyai gaji setidaknya $35,000

2008 | Direktorat Pembinaan SMK 205

Page 220: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Statement Kendali

per tahun atau telah bekerja selama lebih dari lima tahun. Perhatikan

program dibawah ini:

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 operatorcout << "Kwalifikasi Anda.\n";

else{

cout << "Anda akan mendapatkan gaji paling tidak $35,000 ataulebih\n";cout << "setelah bekerja lebih dari lima tahun.\n";

}getch();return 0;

}

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

5.8.3. Operator !Operator ! akan melakukan

operasi logika NOT. Dibutuhkansebuah operand atau sebeliknyaseperti benar atau salah. Dengankata lain, jika ungkapan itu benar,

maka operator ! akan membalikmenjadi salah, dan jika ekspresisalah, maka akan dibalik menjadibenar. Dibawah ini adalah suatu

206 Direktorat Pembinaan SMK | 2008

Page 221: 01 bab 01 Dasar Komputer fachkunde OK

Statement Kendali Bahasa Pemrorgraman

pernyataan IF yang meggunakanoperator !:

if (!(suhu > 100))cout << "anda dibawah suhu maksimum.\n";

pada potongan program diatas,ekspresi (suhu> 100) yang akan diuji.

benar atau salah. Maka operator !akan diterapkan pada nilai. Jikaekspresi (suhu> 100) itu benar, makaoperator ! akan membalik menjadisalah. Jika hal tersebut salah, makaoperator ! akan kembali benar. Tabeldibawah merupakan table kebenaranoperator !

Tabel 5.8. operator !

EKPRESI HASIL EKPRESI LOGIKA

! salah benar

1

! benar Salah

0

Program dibawah sama denganprogram sebelumnya, yaitu akanmelakukan operasi dengan operator!. Pernyataan IF tersebutmenggunakan operator ! untukmenentukan apakah pengguna tidak

membuat rekening di bank yangsetidaknya ada $ 35.000 atau belummempunyai pekerjaan yang lebih darilima tahun. Perhatikan programdibawah ini:

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

Page 222: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Statement Kendali

{

lebih\n";

}else

cout << "Anda akan mendapatkan gaji paling tidak

$35,000 atau cout << "setelah bekerja lebih dari

lima tahun.\n";

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

Boolean adalah nilainya dapat diuji.Misalnya moreData adalah sebuah

variabel Boolean. Kemudianpengujiannya adalah:

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 KondisionalOperator kondisional merupakan ekspresi ? ekspresi : ekspresi;

operator kuat dan unik. Operatortersebut menyediakan sebuah disini diberikan sebuah contohmetode sedernana yangmengekpresikan pernyataanIF/ELSE. Operator ini terdiri daritanda tanya (?) dan titik dua (:).Untuk lebih jelasnya mengenaioperator ini perhatikan ekpresidibawah inI:pernyataan diatas sering disebutdengan conditional expression danterdiri dari tiga sub-expressions angdipisahkan dengan menggunakan

pernyataan yang menggunakanoperator kondisional

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

tanda Tanya dan symbol titik dua ( : ).Sebuah ekspresi diatas < 0, y = 10,dan z = 20 dapat diuraikan sebagaiberikut:

208 Direktorat Pembinaan SMK | 2008

Page 223: 01 bab 01 Dasar Komputer fachkunde OK

Statement Kendali Bahasa Pemrorgraman

X< 0 ? Y=10 : Z = 20

Gambar 5.6 conditional expression

Sebuah Ekspresi kondisional yangdiatas melakukan operasi yang samaseperti halnya pernyataan IF/ELSE.Perhatikan pernyataan dibawah ini:

if (x <0)

y = 10;else

z = 20;

Bagian dari ekspresi kondisionalsebelum tanda tanya adalah ekspresiyang akan diuji. Hal ini merupakankalimat dalam kurung seperti padasebuah pernyataan IF. Jika ekspresibenar, bagian dari pernyataan antaratanda tanya (?) dan titik dua ( : )akan dijalankan. Jika tidak, bagiansetelah : yang dijalankan. Gambardibawah ini menggambarkan aturanyang diakukan oleh tiga sub-ekspresiadalah sebagai berikut:

Ekspresi pertama yang akan

Ekspresi kedua yang akandieksekusi jika ekspresi

pertama benar

Ekspresi ketigayang akan

dieksekusi jikaekspresi pertama

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 nilaiekspresi dalam bahasa C++ yangperlu diingat, bahwa pada bahasaC++ semua ekspresi memiliki nilai,dan hal ini termasuk ekspresikondisional. Jika sub-ekspresipertama benar, maka nilai dariekspresi kondisional adalah nilai

kedua sub-ekspresi tersebut.Sebaliknya Jika hal tersebut bukanberarti nilai sub-ekspresi yang ketiga.Berikut dibawah ini adalah contohsebuah pernyataan yangmenggunakan nilai ekspresikondisional

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

2008 | Direktorat Pembinaan SMK 209

Page 224: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Statement Kendali

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

Program dibawah dapatdigunakan untuk membantu seorangkonsultan untuk menghitung biaya.Konsultasn tersebut memintabayaran $ 50,00 per jam, tetapiminimum selama lima jam, jikakurang dari 5 jam maka tidak akan

dibayar. Operator kondisionaldigunakan dalam pernyataantersebut untuk memastikan bahwajumlahnya tidak kurang atau dibawahlima. Untuk lebih jelasnya perhatikanprogram dibawah ini

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 operatorcharges = 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 BoldBerapa jam anda bekerja? 5Besar gaji anda adalah $250.00

210 Direktorat Pembinaan SMK | 2008

Page 225: 01 bab 01 Dasar Komputer fachkunde OK

Statement Kendali Bahasa Pemrorgraman

5.10. Statement SWITCHStatement SWITCH juga

berfungsi sama dengan IF. PerintahSWITCH sama dengan perintah

CASE OF dalam PASCAL. Dimana sintaksnya menggunakan:

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

Page 226: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Statement Kendali

Selanjutnya coba kalian hapussemua break program di atas dan

kalian jalankan. Apa yang terjadi? Keanehan akan muncul. Mengapa?

5.11. Pernyataan SWITCH … CASECara lain untuk menangani

pengambilan keputusan dalamsebuah program adalah denganmenggunakan Statement switch….case, yang mampu menanganisejumlah kondisi dari satu variabel.switch .... case serupa dengan If ...Then ..... ElseIf, tetapi lebih efisien

apabila percabangan bergantungkepada satu kondisi saja. Denganmenggunakan switch .... casesebagai pengganti dari If ... Then ...Else If, akan membuat programmenjadi lebih sederhana. Formatpenggunaan switch .... case:

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 dimulaidengan kata Select Case dan diakhiridengan kata End Select.nama_variabel dapat diganti denganvariabel, properti, atau ekpresi lainyang akan dijadikan sebagai kondisi.Sedangkan nilai_1, nilai 2 dapatdiganti dengan angka, string ataunilai lain yang berkaitandengannama_variabel. Jika salah satu nilaisesuai dengan variabel, makapernytaan di bawah kata case akan

dijalankan dan Visual Basic akanmelanjutkan mengeksekusi programsetelah End. Anda dapatmenggunakan kata case sebanyakmungkin dalam struktur select...case, dan anda juga dapatmenyertakan lebih dari satu nilaipada kata case.

Jika anda menyertakan banyaknilai setelah case, pisahkan dengantanda koma.

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

212 Direktorat Pembinaan SMK | 2008

Page 227: 01 bab 01 Dasar Komputer fachkunde OK

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

Bentuk dari SWITCH - CASEmerupakan pernyataan yangdirancangan khusus untukmenangani pengambilan keputusanyang melibatkan sejumlah ataubanyak alternatif penyelesaian.Pernyataan SWITCH - CASE ini

memiliki kegunaan sama seperti IF –ELSE bertingkat, tetapipenggunaannya untuk memeriksadata yang bertipe karakter atauinteger. Bentuk penulisan perintah inisebagai berikut :

switch (ekspresi integer atau karakter ){

casekonstanta‐1 :

… perintah;… perintah;break;case

konstanta‐2 :… perintah;… perintah;break;…………

default :… perintah;… perintah;

}

Setiap cabang akan dijalankanjika syarat nilai konstanta tersebutdipenuhi dan default akan dijalankanjika semua cabang diatasnya tidakterpenuhi. Pernyataan breakmenunjukan bahwa perintah siapkeluar dari switch. Jika pernyataan ini

tidak ada, maka program akanditeruskan kecabang – cabang yanglainnya. Perhatikan contoh programdibawah ini menggunakan Switch-Case, untuk menentukan alat yangdikehendaki, seperti alat olahraga,alat elektronik atau alat masak.

Program 5.21

2008 | Direktorat Pembinaan SMK 213

Page 228: 01 bab 01 Dasar Komputer fachkunde OK

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 ditulisdengan program dibawah ini, dimanakelebihan program dibawah bisamembaca baik kode huruf kecilmaupun huruf besar. Pada programdiatas hanya bisa membaca kodehuruf besar saja. Kedua-duanya

sama-sama menggunakan switch-case. Jika dalam memasukankodenya salam maka akan munculpesan “Anda Salah Memasukankode”. Untuk lebih jelasnyaperhatikan program dibawah ini:

Program 5.22

214 Direktorat Pembinaan SMK | 2008

Page 229: 01 bab 01 Dasar Komputer fachkunde OK

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

k; case 'B' : case 'b':

Cout<<"Alat Elelktronik";brea

k; case 'C' : case 'c':

cout<<"Alat Masak";break;

default:cout<<"Anda Salah Memasukan kode";

break;}getch();return 0;

}

Struktur kondisi switch....case....default digunakan untuk penyeleksiankondisi dengan cukup banyakkemungkinan yang terjadi. Struktur iniakan melaksanakan salah satu daribeberapa pernyataan ‘case’tergantung nilai kondisi yang ada didalam switch. Selanjutnya proses

diteruskan hingga ditemukanpernyataan ‘break’. Jika tidak adanilai pada case yang sesuai dengannilai kondisi, maka proses akanditeruskan kepada pernyataan yangada di bawah ‘default’. Bentuk umumdari struktur kondisi ini adalah:

2008 | Direktorat Pembinaan SMK 215

Page 230: 01 bab 01 Dasar Komputer fachkunde OK

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 dibawahmerupakan program denganmenggunakan switch, dimana

program tersebut digunakan untukmenentukan jumlah hari. Perhatikanprogram 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) {

case1:case3:case5:case7:case8:case10:case 12: JumlahHari =31;break;case4:case6:case9:

Page 231: 01 bab 01 Dasar Komputer fachkunde OK

216 Direktorat Pembinaan SMK | 2008

Page 232: 01 bab 01 Dasar Komputer fachkunde OK

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 : 4Tahun : 1990Jumlah hari 30

Program dibawah merupakanprogram yang digunakan untuk

menentukan bilangan Genap atauGanjil dengan case:

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

using namespace std;

main(){ int Op1, Op2,

Pilih;floatHasil;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 << "PilihOperator : "; 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;

Page 233: 01 bab 01 Dasar Komputer fachkunde OK

2008 | Direktorat Pembinaan SMK 217

Page 234: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Statement Kendali

break;}

}

elsecout <<"error";

printf("Hasil dari perhitungan tersebut adalah %f",Hasil);getch();return 0;

}

Keluaran program diatas adalah sebagai berikut:Operand 1: 1Operand 2: 31. Operator +2. Operator ‐3. Operator *4. Operator /Pilih Operator : 3Hasil dari perhitungan tersebut adalah 3.000000

Dari beberapa contoh program diatas, maka dapat diketahui bentuk

bahasa umum mengenai pernyataanIf–Else adalah sebagai berikut:

If Kondisi ThenPerintah yang akan dieksekusi jika kondisi bernilai true

ELSE Perintah yang akan dieksekusi jika kondisi bernilai falseEnd If

5.12. IF...THEN, IF...THEN...ELSE dan Nested IFStruktur IF, kita dapat membuat

algoritma-algoritma yang melakukanperintah berdasarkan kondisi tertentu.Perintah akan dilakukan jika hanya

jika ekspresi boolean bernilai true(jika ekspresi boolean bernilai falsemaka perintah tidak akan dikerjakan).

IF <ekspresi boolean> thenPerintah_1

Else Perintah_2

EndifIF <ekspresi boolean 1> thenPerintah 1

218 Direktorat Pembinaan SMK | 2008

Page 235: 01 bab 01 Dasar Komputer fachkunde OK

Statement Kendali Bahasa Pemrorgraman

Else if <ekspresi boolean 2> thenPerintah

2Else if <ekspresi boolean n> then

Perintahn

Else Perintah n+1Endif

Program statement kondisi IF- ELSE untuk mencari bilangan Genap

dan Ganjil. Perhatikan contohprogram 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 adalahmasukan bilangan : 5 bilangan ganjil

Program dibawah ini digunakan untuk menghitung atau mencari bilanganterbesar.

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

2008 | Direktorat Pembinaan SMK 219

Page 236: 01 bab 01 Dasar Komputer fachkunde OK

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

getch();

maks = C;cout <<"bilangan terbesar adalah " << maks;

return 0;}

Keluaran program diatas adalah sebagai berikut:A : 40B : 56C : 59bilangan terbesar adalah 59

5.13. Aplikasi Pernyataan IF pada MenuMenu adalah layar yang

menampilkan beberapa pilihansehingga pengguna dapat memilih.Sebagai contoh pada sebuahprogram yang dapat memberikanmenu pilihan berikut ini:1. Menambahkan nama ke dalam

daftar.2. Hapus nama dari daftar.3. Mengubah nama dalam daftar.4. Mencetak daftar.5. Keluar dari program ini.

Pengguna dapat memilih salahsatu operasi dengan memasukkannomor. Misalnya memasukan nomer

4, sehingga akan menyebabkandaftar dicetak, dan memasukkan 5akan menyebabkan keluar program.struktur IF/ELSE IF dapat digunakanuntuk membuat menu seperti diatas.Setelah pengguna memasukkannomor, maka nomor akan digunakanuntuk membandingkan pilihan yangtersedia dan melaksanakan sebuahpernyataan yang melakukan operasi.program dibawah digunakan untukmenghitung biaya keanggotaandisebuah klub kesehatan. Klubmemiliki tiga paket keanggotaanpilihan: keanggotaan standar

220 Direktorat Pembinaan SMK | 2008

Page 237: 01 bab 01 Dasar Komputer fachkunde OK

Statement Kendali Bahasa Pemrorgraman

dewasa, anggota anak, dan anggota orang senior.

Program ini menyajikan menuyang memungkinkan pengguna untukmemilih paket yang diinginkan,

kemudian menghitung biayakeanggotaannya. Untuk lebihjelasnya perhatikan program dibawahini:

Program 5.27#include <conio.h>#include <iostream>#include <iomanip>

using namespace std;

int main(){

int choice, months;double charges;

// Display menu pilihancout << "\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

Page 238: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Statement Kendali

{cout << "Untuk berapa Bulan? ";cin >> months;charges = months * 30.00;cout << "Total pembayaranya adalah: $" << charges << endl;

}else if (choice != 4){

cout << "Pilihan yang valid adalah antara 1 sampai 4\n";cout << "Program akan memilih lagi dari salah satu menu diatas\n";

}getch();return 0;

}

Keluaran program diatas seperti dibawah ini:Menu Anggota Klub Kesehatan

1. Keanggotaa Standard Dewasa2. Keanggotaan Anak3. Keanggotaan Masyarakat Senior4. Keluar Program

Masukan Pilihan Anda: 3Untuk berapa Bulan? 3Total pembayaranya adalah: $90.00

Dalam program tersebutmemungkinkan pengguna yang tidakvalid dapat membuat pilihan. Jikaangka lain seperti 1, 2, 3, atau 4

dimasukkan, maka akan ada pesankesalahan yang dicetak. Kesalahanini dikenal sebagai masukan validasi(input validation).

5.14. Soal LatihanJawablah soal latihan dibawah ini dengan baik dan benar.1. Apa yang dimaksud dengan statement2. Sebutkan beberapa operator relasionaldalam bahasa c++3. Jelaskan cara kerja pernyataan if pada bahasa c++4. Apa perbedaan antara pernyataan if dangan if-else5. Apa yang dimaksud dengan if-else majemuk6. Apa yang dimaksud dengan nested if7. Sebutkan beberapa operator logika8. Tuliskan perintah yang digunakan oleh pernyataan switch

222 Direktorat Pembinaan SMK | 2008

Page 239: 01 bab 01 Dasar Komputer fachkunde OK

Prosedur dan Subroutin Bahasa Pemrorgraman

BAB 6PROSEDUR DAN SUBROUTIN

6.1. Prosedur6.2. Parameter Prosedur6.3. Pemanggilan Prosedur6.4. Sub Rutin6.5. Sub Rutin Dalam Bahasa Pemrograman6.6. Function yang Mengembalikan Nilai6.7. Function yang Tidak Mengembalikan Nilai6.8. Function Call Function6.9. Call by Value dan Call by References6.10. Parameter dengan Nilai Default6.11. Overloading6.12. Soal Latihan

6.1. ProsedurProsedur adalah sederetan

instruksi algoritmik yang diberi nama,dan akan menghasilkan efek netoyang terdefinisi. Prosedurmenyatakan suatu aksi dalam konsepalgoritma yang dibicarakan padacerita “Mengupas kentang”. Dimanacontoh ini dari aksi yang dilakukanpleh Ibu Tati yang mengupas kentanguntuk mempersiapkan makan malamsebagai berikut. Pernyataan inimencakup hal yang luas ruanglingkupnya, misalnya : Apakah kentangnya harus dibeli

dulu atau sudah ada di dapur ? Apakah yang dimaksud dengan

mengupas kentang untuk makanmalam berarti sampai dengankentang terhidang ?

Ketika kentangnya terhidang, jadisup, digoreng atau direbus saja ?

Maka kita harus membatasi denganjelas keadaan awal yang menjadi titiktolak mengupas kentang dankeadaan akhir yang ingin dicapaisupaya dapat “merencanakan” efekneto yang diinginkan. Sehingga haltersebut dapat ditentukan: Initial state (I.S. keadaan awal),

T0, adalah kentang sudah ada dikantong kentang, yang ditaruh dirak di dapur, di mana ibu Tati akanmengupasnya

Final state (F.S. keadaan akhir),T1, kentang dalan keadaanterkupas di panci, siap untukdimasak dan kantong kentangnyaharus dikembalikan ke rak lagi.

2008 | Direktorat Pembinaan SMK 223

Page 240: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Prosedur dan Subroutin

Pengandaian yang lain adalahbahwa persediaan kentang di ibuselalu cukup untuk makan malam.Penambahan kentang ke dapur diluar tinjauan masalah ini. Ini adalahcontoh bagaimana kita menentukanbatasan dari persoalan yang akandiprogram. Suatu kejadian dapatdipandang sebagai urut-urutan daribeberapa kejadian, berarti dapatdiuraikan dalan beberapa (sub) aksiyang terjadi secara sekuensial.Dengan sudut pandang ini makanefek kumulatifnya sama dengan efekneto dari seluruh kejadian. Dikatakanbahwa kejadian tersebut dianggapsebagai sequential process ataudisingkat proses.

Mendefinisikan (membuatspesifikasi) prosedur berartimenentukan nama prosedur sertaparameternya (jika ada), danmendefinisikan keadaan awal (InitialState, I.S.) dan keadaan akhir (FinalState, F.S.) dari prosedur tersebut.Prosedur didefinisikan (dituliskanspesifikasinya) dalam kamus. Cara

penulisan spesifikasi : prosedur diberinama, dan parameter formal (jikaada) yang juga diberi nama dandijelaskan typenya.

Secara sederhana, dapatdiartikan bahwa sebuah proseduryang terdefinisi “disimpan” di tempatlain, dan ketika “dipanggil” denganmenyebutkan namanya “seakan-akan” teks yang tersimpan di tempatlain itu menggantikan tekspemanggilan. Pada saat itu terjadiasosiasi parameter (jika ada).Dengan konsep ini, maka I.S dan F.Sdari prosedurlah yang menjaminbahwa eksekusi program akanmenghasilkan efek neto yangdiharapkan. Jadi, setiap prosedurharus : Didefinisikan (dibuat

spesifikasinya) dan dituliskan kodeprogramnya

Dipanggil, pada saat eksekusi olehprosedur lain atau oleh programutama

6.2. Parameter ProsedurProsedur tanpa parameter

memanfaatkan nilai dari nama-namayang terdefinisi pada kamus global.Pemakaiannya biasanya harus “hati-hati”, apalagi jika teks program sudahsangat besar dan implementasinyamenjadi banyak file. Prosedurberparameter dirancang, agarsepotong kode yang sama ketikaeksekusi dilakukan, dapat dipakaiuntuk nama parameter yang bebeda-beda. Nama parameter yangdituliskan pada definisi/spesifikasiprosedur disebut sebagai parameterformal. Sedangkan parameter yangdituliskan pada pemanggilan

prosedur disebut sebagai parameteraktual.

Parameter formal adalah nama-nama variabel (list nama) yangdipakai dalam mendefinisikanprosedur, dan membuat prosedurtersebut dapat dieksekusi dengannama-nama yang berbeda ketikadipanggil. Parameter formal adalahlist nama yang akan dipakai padaprosedur, yang nantinya akandiasosiasikan terhadap namavariabel lain pada saat pemanggilan.Sesuai dengan ketentuan nilainya,ada tiga type parameter formal:

224 Direktorat Pembinaan SMK | 2008

Page 241: 01 bab 01 Dasar Komputer fachkunde OK

Prosedur dan Subroutin Bahasa Pemrorgraman

parameter Input, yaitu parameteryang diperlukan prosedur sebagaimasukan untuk melakukan aksiyang efektif.

parameter Output, yaitu parameteryang nilainya akan dihasilkan olehprosedur. Hasil nilai akan

disimpan pada nama parameterOutput ini.

parameter Input/Output, yaituparameter yang nilainya diperlukanprosedur sebagai masukan untukmelakukan aksi, dan pada akhirprosedur akan dihasilkan nilai yangbaru.

6.3. Pemanggilan ProsedurMemakai, atau "memanggil"

prosedur adalah menuliskan namaprosedur yang pernah didefinisikan,dan memberikan harga-harga yangdibutuhkan oleh prosedur itu untukdapat melaksanakan suatu aksiterdefinisi. Sebuah prosedur jugaboleh "memakai" atau memanggilprosedur. Pada saat pemanggilanterjadi “passing parameter”.Parameter aktual adalah nama-nama informasi yang dipakai ketikaprosedur itu dipakai ("dipanggil").Parameter aktual dapat berupa namaatau harga, tetapi harus berupa namajika parameter tersebut adalahparameter Output (karena hasilnyaakan disimpan dalam nama tersebut).Sesuai dengan jenis parameterformal, parameter aktual pada saatpemanggilan : parameter input harus terdefinisi

nilainya (karena dibutuhkan olehprosedur untuk menghasilkannilai). Karena yang dibutuhkanuntuk eksekusi hanya nilai, makaparameter input dapat digantikandengan suatu nilai tanpamenggunakan nama.

parameter output tidak perluterdefinisi nilainya, tetapi justrusetelah pemanggilan prosedurakan dimanfaatkan oleh deretaninstruksi berikutnya, karena

nilainya akan dihasilkan olehprosedur. Karena parameteroutput menampung hasil, makaharus berupa nama, dan tidakboleh diberikan nilai saja.

parameter input/output harusterdefinisi nilainya dan nilai baruyang diperoleh karena eksekusiprosedur akan dimanfaatkan olehderetan instruksi berikutnya.Seperti halnya parameter output,maka paramteter aktual harusberupa nama.

Pada saat eksekusi, terjadiasosiasi nama parameter formaldengan nama parameter aktual.Pada notasi algoritmik, asosiasidilakukan dengan cara “by position”.Urutan nama pada parameter aktualakan diasosiasikan sesuai denganurutan parameter formal. Karena itu,type harus kompatibel. Beberapabahasa pemrograman, dapatdilakukan asosiasi dengan nama danmemperbolehkan adanya nilaidefault. Beberapa bahasapemrograman (Ada, C) jugamemperbolehkan nama proseduryang sama tetapi parameternyaberbeda (overloading).

Prosedur dapat mempunyaikamus lokal, yaitu pendefinisan namayang dipakai dan hanya berlakudalam ruang lingkup prosedur

2008 | Direktorat Pembinaan SMK 225

Page 242: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Prosedur dan Subroutin

tersebut. Jika nama yang dipakai didalam prosedur tidak terdefinisidalam list parameter formal ataudalam kamus lokal, maka namatersebut harus sudah terdefinisi padaprosedur yang memakainya.Penulisan kamus lokal sama dengankamus global, yang berbeda adalahlingkup berlakunya nama yangdidefinisikan: pada kamus "global", nama

berlaku untuk program dan semuaprosedur/fungsi yang didefinisikan.

pada kamus lokal, nama berlakuuntuk prosedur/fungsi yangbersangkutan dan prosedur /fungsi yang didefinisikan didalamnya.

nilai yang disimpan dalam namayang didefinisikan pada kamuslokal, hanya akan terdefinisiselama eksekusi prosedur, dantidak dikenal lagi olehpemanggilnya.

Program yang moduler adalahprogram yang dibagi-bagi menjadimodul-modul yang terdefinisi denganbaik dalam bentuk prosedur-prosedur. Setiap prosedur harus jelasdefinisi dan ruang lingkupnya, supayadapat dipanggil secara independent.Pembagian program besar dalamprosedur-prosedur akanmempermudah pembagian kerja diantara beberapa pemrogram.Penulisan prosedur juga akan

memudahkan program untuk dibacaoleh "manusia" karena kita tidak perluterpaku pada detil kode proseduruntuk mengerti efek neto yangdihasilkannya.

Bahkan dalam beberapa hal,pemrogram tidak perlu tahu samasekali "isi" atau kode dari prosedurdengan mengetahui spesifikasinya,beberapa bahasa pemrogramanbahkan menyediakan prosedurterdefinisi yang sering dipakai dalammemrogram sehingga pemrogramtidak perlu lagi menuliskan kodenya.Prosedur berlaku untuk ruang lingkup(universe) tertentu, terutama untukprosedur yang tidak mempunyaiparameter. Dalam dua bab berikut,yaitu Mesin Gambar dan MesinKarakter, akan diberikan gambaranlebih jelas dan lengkap tentangpendefinisian dan pemakaianprosedur karena keduanya adalahmesin abstrak yang tertentu.

Contoh 1-Prosedur: VOLTAGE Tuliskanlah program yang membaca tahanan (Ohm) dan arus (Ampere),kemudian menghitung tegangan yangdihasilkan dan menuliskan hasilnya. Perhitungan tegangan harusdituliskan menjadi suatu prosedur bernama PROSES, supaya struktur program jelas: Input - Proses – Output.

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

Pelajarilah dua buah solusi yangdiberikan berikut ini, dan berikankomentar anda.

Solusi 1 : Prosedur tanpa parameter

226 Direktorat Pembinaan SMK |

2008

Page 243: 01 bab 01 Dasar Komputer fachkunde OK

Prosedur dan Subroutin Bahasa Pemrorgraman

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

Kamus :R : integer { tahanan dalam ohm} A : integer { arus dalam ohm}V : integer { tegangan dalam ohm}

procedure PROSES1{ Prosedur untuk "memproses" tahanan dan arus menjadi tegangan }

Algoritma : input (R,Α) PROSES1output (V)

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

Algoritma : V ← R* A

Solusi 2 : Prosedur dengan parameter

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

Kamus :R : integer { tahanan dalam ohm}A : integer { arus dalam ohm}V : integer { tegangan dalam ohm}

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

Algoritma :input (R,Α)

2008 | Direktorat Pembinaan SMK 227

Page 244: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Prosedur dan Subroutin

PROSES2 (R,A,V)output (V)

6.4. Sub RoutinSuatu program komputer

biasanya merupakan suatu sistembesar yang terdiri dari sub sistem -sub sistem yang mempunyai tugassendiri-sendiri, saling bekerja samadan berinteraksi untukmenyelesaikan suatu permasalahan.Dengan adanya pembagian tugasoleh sub sistem – sub sistem inimaka suatu permasalahan dapatdiselesaikan dengan lebih cepat dankesalahan-kesalahan yang mungkinterjadi selama proses penyelesaianmasalah dapat dideteksi dandiketahui sedini mungkin, termasuk disub sistem mana kesalahannyaterjadi.

Program komputer (terutamayang komplek) juga sebaiknya“dipecah-pecah” menjadi program-

program kecil. Program-program keciltersebut disebut dengan sub rutin.Sub rutin dibagi menjadi dua macam,yaitu sub rutin yang mengembalikannilai dan sub rutin yang tidakmengembalikan nilai. Dalam Pascalkedua sub rutin yang mengembalikannilai disebut dengan function,sedangkan yang tidakmengembalikan nilai disebut denganprocedure. Tetapi untuk C++ danJava, kedua sub rutin tersebutdijadikan satu tetapi dapat diaturuntuk dapat mengembalikan nilaimaupun tidak mengembalikan nilai.

Untuk C++, sub rutin tersebutada dalam suatu function, sedangkanpada Java, sub rutin berbentuk suatumethod yang disebut dengan functionmethod.

int main() {……. fungsi_1();

…….fungsi_2();

……. return 0;

}

int fungsi_1() {……. return 0;

}

int fungsi_2() {…….return 0;

}

Gambar 6.1.SubRutin

228 Direktorat Pembinaan SMK | 2008

Page 245: 01 bab 01 Dasar Komputer fachkunde OK

Prosedur dan Subroutin Bahasa Pemrorgraman

Baik C++ maupun Java terdapatdua macam fungsi, yaitu user-definedfunction dan built-in function. User-defined function merupakan fungsiyang didefinisikan sendiri atau dibuat

sendiri oleh pemrogram. Sedangkanbuilt-in function adalah fungsi yangsudah ada atau sudah disediakanoleh kompiler dan siap digunakanoleh pemrogram.

6.5. Sub Rutin dalam Bahasa PemrogramanBentuk umum sub rutin (function)

pada C++ dan Java sangat mirip.Untuk function yang mengembalikannilai, setiap function harus didahuluioleh tipe data yang sesuai denganjenis data yang akan dikembalikan,kecuali tipe data array. Setiapfunction juga mempunyai daftarparameter dimana setiap parameterdipisahkan dengan tanda koma (,).Parameter-parameter ini digunakanuntuk menerima data (nilai) dariprogram yang memanggilnya.

Kita dapat mendeklarasikanbanyak parameter atau tidak sama

sekali. Untuk fungsi yang tidakmempunyai parameter merupakanfungsi yang nilainya tetap (tidakberubah). Sedangkan fungsi yangmempunyai parameter nilai fungsinyadinamis (dapat berubah-ubah).Parameter-parameter ini merupakanvariabel-variabel yang harusdideklarasikan sendiri-sendirimeskipun tipe datanya sama.Bentuk umum dari function yang mengembalikan nilai adalah sebagaiberikut

tipe_data nama_fungsi(daftar_parameter){

isi dari fungsi return<ekspresi>

}

Perhatikan contoh progam function yang benarint 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 mempunyaikode-kode program sendiri-sendiri

karena tugas yang harusdiselesaikan oleh setiap function juga

2008 | Direktorat Pembinaan SMK 229

Page 246: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Prosedur dan Subroutin

berbeda-beda. Variabel-variabel yangdigunakan dalam function disebutdengan variabel lokal. Oleh karenaitu variabel tersebut hanya dapatdigunakan didalam function itu sendiritidak bisa digunakan oleh functionlain atau program utama.

Variabel lokal ini berfungsi padasaat function tersebut aktif dan akanhilang (dihapus) jika function sudahtidak aktif lagi atau setelah functionselesai melakukan tugasnya (kecualivariabel yang digunakan dalamfunction adalah variabel global yang

dapat digunakan oleh semua functiondan program utama).

Untuk dapat digunakan,function biasanya mempunyaiparameter-parameter yangdigunakan untuk menerima masukandari program yang memanggilnya.Parameter-parameter ini disebutdengan parameter formal. Parameterformal ini termasuk dalam variabellokal yang akan berfungsi pada saatfunction aktif dan akan dihapus padasaat function selesai melakukantugasnya. Perhatikan contoh functiondalam 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 duabuah parameter formal, yaitu s dan cyang mempunyai tipe data yangsama, char. Function cek()merupakan function yangmengembalikan nilai sehingga diaharus mempunyai tipe data dimanatipe data-nya dalam hal ini adalahinteger.

Function cek() ini bertugas untukmemeriksa apakah variabel c sama

dengan variabel s. Jika sama makafunction cek() akan bernilai 1,sebaliknya jika tidak maka akanbernilai 0. Variabel s dan c inimerupakan variabel lokal yang hanyadapat digunakan dalam function cek()saja, tidak bisa digunakan olehfunction atau program lain.Permasalahan yang sama untuk Javaadalah sebagai berikut:

class ricek {public int cek(char s, char c) {

if(s==c) return 1;return 0;

}}

Telah disebutkan sebelumnyabahwa sub rutin dalam Javaberbentuk class dimana didalam

class tersebut dimungkinkan untukmempunyai satu atau lebih functionmethod. Class ricek() ini dapat

230 Direktorat Pembinaan SMK | 2008

Page 247: 01 bab 01 Dasar Komputer fachkunde OK

Prosedur dan Subroutin Bahasa Pemrorgraman

digunakan oleh class lain, dalam halini untuk mengecek suatu karakterkarena class ricek() mempunyai

.Perhatikan Program dalam bahasa C++ :#include<iostream>using namespacestd;

function method cek(). Berikut iniadalah kode lengkap dari keduaprogram di atas

int cek(char s,char c){ if(s==c)return 1;return 0;

}int

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

}

Keluaran program adalah :1

Dari kode program C++ di atasterlihat bahwa function cek()dipanggil melalui argumen padaprogram utama (main()) dimanaargumen tersebut mempunyaivariabel masukan untuk functioncek() yaitu variabel a dan b.

Variabel a dan b ini kemudiandisalin oleh parameter formal functioncek() yaitu s dan c. Parameter formalini kemudian diproses lebih lanjut

yaitu pengecekan apakah parameterformal s sama dengan parameterformal c. Jika sama maka functioncek() akan bernilai 1, sebaliknya jikatidak sama maka function cek() akanbernilai 0. Nilai dari function cek() inikemudian langsung dicetak ke layaroleh program utama. Kode programuntuk bahasa Java daripermasalahan yang sama adalah:

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

Page 248: 01 bab 01 Dasar Komputer fachkunde OK

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() yangmempunyai function method cek()tidak bisa langsung kita gunakan (kitapanggil), tetapi harus dibuat /diciptakan dahulu obyek dari classricek() seperti yang terlihat pada bariske-9 dimana obyek baru dari classricek() dalam class ricekApp() diberinama ck. Dengan obyek ck inilah kitadapat mengakses method yangdipunyai oleh class ricek() karenasecara otomatis obyek ck jugamempunyai method cek() yangdimiliki oleh class ricek().

Contoh di atas merupakancontoh function dimana functiontersebut mempunyai parameter,dalam hal ini parameter s dan c yangbertipe char. Function cek() tersebutnilainya akan berubah-ubah sesuaidengan nilai masukannya. Untukcontoh di atas nilai function dari cek()cuma ada dua, yaitu 0 atau 1. Berikutini adalah contoh function yang tidakmempunyai parameter sama sekalisehingga nilai function-nya tidak akanberubah-ubah seperti halnya padacontoh sebelumnya.

Contoh program dalam bahasa C++ :#include <iostream> using namespacestd; 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

Page 249: 01 bab 01 Dasar Komputer fachkunde OK

Prosedur dan Subroutin Bahasa Pemrorgraman

cout << "FPB‐nya = ";cout << fpb() <<endl;

}

Keluaran programnya adalah :FPB‐nya = 6

Contoh program dalam bahasa Java :1. class hitung {2. public int fpb(){3. int a=78,b=24,hasil=0;4. int r = a % b;5. if (r==0) hasil = b;6. else {7. while(r!=0) {8. a = b;9. b = r;10. r = a % b;11. hasil = b;12. }13. }14. return hasil;15. }16. }17. class fpbApp {18. public static void main(String[ ] args) {19. hitung sekutu = new hitung();20. System.out.println("Bilangan terbesarnya="+ sekutu.fpb());21. }22. }

Keluaran programnya adalah :Bilangan terbesarnya = 6

Nilai dari function fpb() di atas untukbahasa C++ pasti 6 karena nilai daria dan b telah ditetapkan besarnya,yaitu 24 dan 18. Sedangkan untuk

bahasa Java nilai method fpb() dariclass hitung() juga pasti tetap, yaitu 6karena nilai a dan b juga telahditentukan (a=78 dan b=24).

6.6. Function yang Mengembalikan NilaiYang dimaksud dengan function

yang mengembalikan nilai adalahsuatu sub rutin yang bila dipanggil

oleh suatu program (argumen) makaargumen tersebut akan memperolehnilai balikan dari function tersebut.

2008 | Direktorat Pembinaan SMK 233

Page 250: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Prosedur dan Subroutin

Atau dengan kata lain, suatu functionyang mempunyai nilai.

Karena mempunyai nilai inilahmaka suatu function yangmengembalikan nilai harusmempunyai tipe data sesuai dengannilai yang dihasilkannya. Perhatikanbaris ke-2 pada function cek() padacontoh sebelumnya. Function cek()digunakan menghasilkan nilai integer(lihat baris ke-3 dan ke-4) yaitu 0atau 1 (return 0 dan return 1),

sehingga tipe data-nya juga harus integer.

Dengan demikian dapatdisimpulkan bahwa ciri dari functionyang mengembalikan nilai adalah : Function tersebut mempunyai tipe

data. Diakhiri dengan klausa return.

Berikut contoh program C++yang menggunakan function dimanafunction-nya dapat mengembalikannilai

1. #include <iostream>2. using namespace std;3. int fpb(int a, int b) {4. int hasil;5. int r = a % b;6. if (r==0) hasil = b;7. else {8. while(r!=0) {9. a = b; b = r;10. r = a % b;11. hasil = b;12. }13. }14. return(hasil);15. }16. void main() {17. int m,n;18. do {19. cout << "Bilangan pertama = ";20. cin >> m;21. cout << "Bilangan kedua = ";22. cin >> n;23. } while (m < n);24. cout << "FPB‐nya = " << fpb(m,n)<<endl;25. }

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

234 Direktorat Pembinaan SMK | 2008

Page 251: 01 bab 01 Dasar Komputer fachkunde OK

Prosedur dan Subroutin Bahasa Pemrorgraman

Baris ke-3 sampai dengan ke-16merupakan sub rutin (function) yangbernama fpb(). Sedangkan baris ke-17 sampai dengan ke-26 merupakanprogram utamanya. Program utamaini akan memanggil function fpb()melalui suatu argumen (lihat baris ke-25). Function fpb() bertugas untukmelakukan pencarian faktorpersekutuan besar dari dua buahbilangan yang dimasukkan diprogram utama (lihat baris ke-19sampai dengan ke-24). Setelahselesai melakukan tugasnya, makafunction fpb() akan mempunyai nilaiyang langsung ditampilkan padaprogram utama.

Function fpb() mempunyai tipedata integer dan mempunyai duabuah parameter formal yang bertipe

data integer juga, yaitu a dan b (bariske-3). Function tersebut jugamempunyai variabel hasil yangbertipe data integer (baris ke-4).Function fpb() ini nilainya akan samadengan variabel hasil (baris ke-15).

Variabel a, b, dan hasilmerupakan variabel lokal dimanaketiga variabel ini hanya berfungsipada function fpb() saja. Variabel adan b bertugas untuk menerima datayang dikirim oleh program lain yangmemanggilnya sedangkan variabelhasil digunakan untuk menyimpandata hasil pencarian faktorpersekutuan besar (baris ke-6 danbaris ke-12). Untuk permasalahanyang sama dengan menggunakanbahasa Java adalah sebagai berikut:

1. import java.util.Scanner;2. import java.io.*;3. class hitung {4. public int fpb(int a, int b) {5. int hasil=0;6. int r = a % b;7. if (r==0) hasil = b;8. else {9. while(r!=0) {10. a = b;11. b = r;12. r = a % b;13. hasil = b;14. }15. }16. return hasil;17. }18. }19. class sekutuBesar {20. public static void main(String[ ] args) {21. hitung sekutu = new hitung();22. int m,n;

2008 | Direktorat Pembinaan SMK 235

Page 252: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Prosedur dan Subroutin

23. Scanner input = new Scanner(System.in);24. do {25. System.out.print("Bilangan pertama = ");26. m = input.nextInt();27. System.out.print("Bilangan kedua = ");28. n = input.nextInt();29. } while(m < n);30. System.out.println("Bilanganterbesarnya="+sekutu.fpb(m,n));31. }32. }

Keluaran programnya :Bilangan pertama = 36Bilangan kedua = 28Bilangan terbesarnya = 4

Pada program Java di atasterlihat bahwa pencarian faktorpersekutuan besar-nya dilakukanoleh Class hitung(). Class hitung() inimempunyai method fpb(), yangmerupakan function fpb() pada C++,dan bertugas untuk melakukanpencarian faktor persekutuan besar.Class sekutuBesar() kemudianmembuat obyek baru dari Classhitung() dengan nama sekutu (lihatbaris ke-21). Atau dengan kata lain

Class hitung() “dipanggil” olehprogram utamanya yaitu ClasssekutuBesar().

Program Java tersebut jika di-compile akan menghasilkan duabuah class, yaitu hitung.class dansekutuBesar.class dimana programsekutuBesar.class akan memanggilhitung.class untuk melakukanperhitungan faktor persekutuan besardari dua buah bilangan.

6.7. Function yang Tidak Mengembalikan NilaiUntuk sub rutin (function) yang

tidak mengembalikan nilai bentuknyasangat mirip dengan function yangmengembalikan nilai. Perbedaannyaadalah penggunaan kata kunci atauklausa void pada function yang tidak

mengembalikan nilai baik padabahasa C++ maupun bahasa Java.Untuk lebih jelasnya, perhatikanprogram C++ berikut ini untukpermasalahan yang sama, yaitumencari 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

Page 253: 01 bab 01 Dasar Komputer fachkunde OK

Prosedur dan Subroutin Bahasa Pemrorgraman

7. else {8. while(r!=0) {9. a = b;10. b = r;11. r = a % b;12. hasil = b;13. }14. }15. cout << "FPB‐nya = " << hasil <<endl;16. }17. void main() {18. int m,n;19. do {20. cout << "Bilangan pertama = ";21. cin >> m;22. cout << "Bilangan kedua = ";23. cin >> n;24. } while (m < n);25. fpb(m,n);26. }

Keluaran programnya :Bilangan pertama = 30Bilangan kedua = 18FPB‐nya = 6

Program di atas, function fpb()(baris ke-3 sampai dengan baris ke-16) tidak mempunyai tipe data danklausa return diakhir program,sehingga dapat kita simpulkan bahwafunction fpb() bukan merupakansuatu function yang mengembalikannilai. Sebaliknya, function fpb()diawali dengan klausa void sehinggafunction tersebut merupakan suatufunction yang tidak mengembalikannilai.

Hasil perhitungan faktorpersekutuan besar dari dua buah

bilangan tidak dikembalikan keprogram utama yang memanggilnyatetapi ditampilkan sendiri olehfunction tersebut (baris ke-15).Dengan argumen pada programutama yang memanggil fuction fpb()(baris ke-25) tidak menghasilkansuatu nilai seperti halnya padacontoh sebelumnya (function yangmengembalikan nilai). Untuk contohfunction yang tidak mengembalikannilai pada bahasa Java denganpermasalahan yang sama adalahsebagai berikut:

1. import java.util.Scanner;2. import java.io.*;

2008 | Direktorat Pembinaan SMK 237

Page 254: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Prosedur dan Subroutin

3. class hitung {4. public void fpb(int a, int b) {5. int hasil=0;6. int r = a % b;7. if (r==0) hasil = b;8. else {9. while(r!=0) {10. a = b;11. b = r;12. r = a % b;13. hasil = b;14. }15. }16. System.out.println("Bilangan terbesarnya = " + hasil);17. }18. }19. class sekutuBesar {20. public static void main(String[ ] args) {21. hitung sekutu = new hitung();22. int m,n;23. Scanner input = new Scanner(System.in);24. do {25. System.out.print("Bilangan pertama = ");26. m = input.nextInt();27. System.out.print("Bilangan kedua = ");28. n = input.nextInt();29. } while(m < n);30. sekutu.fpb(m,n);31. }32.}

Keluaran programnya :Bilangan pertama = 44Bilangan kedua = 36Bilangan terbesarnya = 4

Sama seperti pada bahasa C++,class yang mempunyai functionmethod untuk yang tidakmengembalikan nilai pada bahasaJava juga tidak mempunyai tipe data,tetapi diawali dengan klausa void(baris ke-4).

Hasil perhitungan faktor persekutuanbesar oleh class hitung() juga tidakditampilkan oleh class sekutuBesar()yang memanggilnya (baris ke-30),tetapi oleh class hitung() itu sendiri(baris ke-16).

238 Direktorat Pembinaan SMK | 2008

Page 255: 01 bab 01 Dasar Komputer fachkunde OK

Prosedur dan Subroutin Bahasa Pemrorgraman

6.8. Function Call FunctionSub rutin dalam suatu program

tidak hanya dapat dipanggil olehprogram utama saja tetapi antar subrutin juga dapat saling memanggil.

intmain() {

……. fungsi_1();…….fungsi_2();……. return 0;

}

int fungsi_1() {

…….fungsi_3();……. return 0;

}

int fungsi_2() {

…….return

0;

int fungsi_3() {…….fungsi_4();return 0;

} int fungsi_4() {

…….return 0;

}

}

Gambar 6.2. Sub rutin yang tidak hanya dipanggil oleh program utama

Berikut adalah contoh sub rutin yang memanggil sub rutin lainnya.

1. #include <iostream>2. using namespace std;3. void fpb(int a, int b){4. int hasil;5. int r = a % b;6. if (r==0) hasil = b;7. else {8. while(r!=0) {9. a = b;10. b = r;11. r = a % b;12. hasil = b;13. }14. }15. cout << "FPB‐nya = " << hasil <<endl;16. }17. void input_data(){

2008 | Direktorat Pembinaan SMK 239

Page 256: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Prosedur dan Subroutin

18. int m,n;19. do {20. cout << "Bilangan pertama = ";21. cin >> m;22. cout << "Bilangan kedua = ";23. cin >> n;24. } while (m < n);25. fpb(m,n);26. }27. void main() {28. input_data();29. }

Keluaran programnya adalah :Bilangan pertama = 56Bilangan kedua = 24FPB‐nya = 8

Program di atas mempunyai duabuah function, yaitu function fpb() danfunction input_data(). Pertama kalifunction yang dipanggil oleh programutama adalah function input_data()(baris ke-28). Kemudian functioninput_data() melakukan pemanggilan

function lain yaitu function fpb() (bariske-25) setelah user memasukkandata untuk bilangan pertama danbilangan kedua. Sedangkan kodeprogram dalam bahasa Java untukpermasalahan yang sama adalah:

1. import java.util.Scanner;2. import java.io.*;3. class hitung {4. public void fpb(int a, int b){5. int hasil=0;6. int r = a % b;7. if (r==0) hasil = b;8. else {9. while(r!=0) {10. a = b;11. b = r;12. r = a % b;13. hasil = b;14. }15. }16. System.out.println("Bilangan terbesarnya = " + hasil);17. }

240 Direktorat Pembinaan SMK | 2008

Page 257: 01 bab 01 Dasar Komputer fachkunde OK

Prosedur dan Subroutin Bahasa Pemrorgraman

18. }19. class input_data {20. public void data_input() {21. hitung sekutu = new hitung();22. int m,n;23. Scanner input = new Scanner(System.in);24. do {25. System.out.print("Bilangan pertama = ");26. m = input.nextInt();27. System.out.print("Bilangan kedua = ");28. n = input.nextInt();29. } while(m < n);30. sekutu.fpb(m,n);31. }32. }33. class sekutuBesar {34. public static void main(String[ ] args) {35. input_data masukan = new input_data();36. masukan.data_input();37. }38. }

Keluaran programnya adalah :Bilangan pertama =76Bilangan kedua =18Bilangan terbesarnya = 2

6.9. Call by Value dan Call by ReferencesAda dua cara bagaimana suatu

argumen dalam suatu program dapatmemanggil sub rutin (function), yaitucall by value dan call by reference.Yang dimaksud dengan call by valueadalah metode yang menyalin data(nilai) dari argumen yang memanggilfunction ke parameter dari functiontersebut. Akibatnya jika adaperubahan nilai pada parameterfunction tidak akan berpengaruhpada nilai aslinya (nilai yang adapada argumen program yangmemanggil function tersebut).

Sebaliknya untuk call byreference yang disalin bulannilainya tetapi alamat memoriyang menyimpan nilai tersebutsehingga jika terjadi perubahan-perubahan nilai pada parameterfunction, maka secara otomatisnilai argumennya juga akan ikutberubah. Untuk lebih jelasnya,perhatikan contoh call by valuedengan C++ berikut ini:

2008 | Direktorat Pembinaan SMK 241

Page 258: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Prosedur dan Subroutin

1. #include <iostream>2. using namespace std;3. int sqr(int x) {4. x = x*x;5. return(x);6. }7. int main(void) {8. int t=10;9. cout << sqr(t) << ", " << t <<endl;10. return 0;11. }

Keluaran programnya adalah :100, 10

Nilai argumen sqr() padaprogram utama yaitu t (bernilai 10)disalin ke parameter x functionsqr(). Didalam function sqr(), nilai xdirubah (x=x*x) sehingga functionsqr() bernilai 100. Nilai functionsqr() ini langsung ditampilkan oleh

program yang memanggilnya (bariske-9). Akan tetapi nilai t, yang jugaditampilkan oleh program utama(bariske-9), tetap 10. Keluaranprogram ini adalah 100, 10 dimana100 adalah nilai dari function fpb()dan 10 adalah nilai variabel t.

Nilai awal t = 10

Nilai variabel t disalin ke parameter fungsi sqr()x = 10

Pemanggilan kembali variabel tt =10

Proses di function sqr()x = 100 atausqr() =100

Gambar 6.3. call by value

Untuk permasalahan yang sama dalam bahasa Java adalah sebagai berikut :

1. import java.io.*;2. class kuadrat {

242 Direktorat Pembinaan SMK | 2008

Page 259: 01 bab 01 Dasar Komputer fachkunde OK

Prosedur dan Subroutin Bahasa Pemrorgraman

3. public int sqr(int x) {4. x = x*x;5. return(x);6. }7. }8. class power {9. public static void main(String[ ] args) {10. kuadrat a = new kuadrat();11. int t=10;12. System.out.println(a.sqr(t) + ", " + t);13. }14. }

Keluaran programnya adalah :100, 10

Untuk call by reference, tipe datayang digunakan adalah tipe datapointer karena yang disalin adalahalamat dari memori dimana datadisimpan (pembahasan mengenaipointer ini ada di bab tersendiri).

Untuk bahasa Java tidakmenggunakan call by referencekarena tidak ada pointer dalambahasa Java. Contoh call byreference (dengan menggunakanbahasa C++) adalah sebagai berikut:

1. #include <iostream>2. using namespace std;3. void tukar(int *x, int *y) {4. int temp;5. temp = *x;6. *x = *y;7. *y = temp;8. }9. int main(void) {10. int i, j;11. i = 10;12. j = 20;13. cout << "Mula‐mula : " << endl;14. cout << "Nilai i : " << i << endl;15. cout << "Nilai j : " << j << endl;16. tukar(&i, &j);17. cout << endl << "Setelah ditukar : " << endl;18. cout << "Nilai i : " << i << endl;19. cout << "Nilai j : " << j << endl;20. return 0;21. }

2008 | Direktorat Pembinaan SMK 243

Page 260: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Prosedur dan Subroutin

Tanda * pada variabel di function tukar() merupakan variabel pointer.

Keluaran dari program di atas adalah :Mula‐mula : Nilai I : 10Nilai j : 20

Setelah ditukar : NilaiI : 20Nilai j : 10

Baris ke-14 dan 15, digunakanuntuk menampilkan nilai dari variabeli dan j yang nilainya masing-masing10 dan 20. Setelah dilakukanpenukaran dengan memanggilfunction tukar() pada baris ke-16,program kemudian memanggilkembali variabel i dan j (baris ke-18

dan ke-19). Ternyata variabel i dan jtelah tertukar. Hal ini terjadi karenapada function tukar() menyalin alamatmemori yang menyimpan variabel idan j dan kemudian menukar isinyasehingga jika variabel i dan j jikadipanggil nilainya akan berubahkarena isinya telah ditukar.

Nilai awali = 10, j=20

Alamat memori yang menyimpan nilai dari variabel x dan y disalin ke parameter fungsi tukar()x = 10, y=20

Pemanggilan kembali variabel i dan ji = 20, j=10

Proses penukaran di function tukar()x = 20, y =10

Gambar 6.4. Call by reference

6.10. Parameter dengan Nilai DefaultNilai parameter dalam suatu

function C++ dapat kita beri nilaidefault, yaitu suatu nilai yang

diberikan secara default oleh functionjika parameter dari argumen yangmemanggil function tersebut tidak

244 Direktorat Pembinaan SMK | 2008

Page 261: 01 bab 01 Dasar Komputer fachkunde OK

Prosedur dan Subroutin Bahasa Pemrorgraman

kita berikan. Untuk lebih jelasnya perhatikan contoh berikut ini:

1. #include <iostream>2. using namespace std;3. double luas_segi3(int alas, int tinggi=10){4. return(0.5 * alas * tinggi);5. }6. void main() {7. int a=15,t=20;8. cout << "Luas segitiga = ";9. cout << luas_segi3(a,t) <<endl;10. cout << endl;11. cout << "Luas segitiga = ";12. cout << luas_segi3(a) <<endl;13. }

Keluaran programnya adalah :Luas segitiga = 150Luas segitiga = 75

Program di atas mempunyai satubuah function yaitu functionluas_segi3() dimana function tersebutmempunyai dua buah parameterformal yaitu alas dan tinggi.Parameter alas tidak mempunyai nilaidefault, tetapi untuk parameter tinggimempunyai nilai default, yaitu 10.

Program utama dari programtersebut telah menentukan bahwanilai dari variabel a yang nantinyadigunakan sebagai variabel masukanuntuk parameter alas dari functionluas_segi3() adalah 15. Sedangkanvariabel t yang nantinya digunakansebagai variabel masukan untukparameter tinggi dari functionluas_segi3() adalah 20. Sehinggaketika argumen program utama yangmemanggil function luas_segi3()pada baris ke-9 dijalankan, maka nilaidari parameter alas dan tinggi pada

function luas_segi3() masing-masingadalah 15 dan 20. Dengan demikianfunction luas_segi3() akan bernilai150.

Akan tetapi untuk argumen bariske-12 pada program utama terlihatbahwa argumen tersebut tidakmenyertakan variabel t, tetapi hanyamenyertakan variabel a. Sehinggaketika argumen tersebut dijalankanmaka hanya parameter alas padafunction luas_segi3() saja yangmenerima masukan dari argumentersebut. Sedangkan untukparameter tinggi tidak memperolehmasukan. Akan tetapi karenaparameter tinggi mempunyai nilaidefault 10, maka nilai variabel tinggiyang digunakan untuk menghitungluas segitiga adalah 10. Dengandemikian nilai dari functionluas_segi3() adalah 75.

2008 | Direktorat Pembinaan SMK 245

Page 262: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Prosedur dan Subroutin

6.11. OverloadingOverloading adalah function-

function yang ada dalam suatuprogram dimana function-functiontersebut mempunyai nama yangsama tetapi parameter formal-nyaberbeda-beda antara yang satudengan yang lainnya. Ada tiga jenisoverloading, yaitu:1. Function tersebut mempunyai

jumlah parameter formal yangberbeda tetapi tipe data-nyasama.

2. Function tersebut mempunyaijumlah parameter formal yangsama tetapi tipe data yangberbeda.

3. Function-function tersebutmempunyai jumlah parameterformal yang berbeda dan tipedata dari parameter formaltersebut juga berbeda.Berikut ini diberikan contoh untuk

function-function yang mempunyaijumlah parameter formal yangberbeda tetapi tipe data-nya sama.

Untuk bahasa C++1. #include <iostream>2. using namespace std;3. void luas_segi3(int alas){4. int tinggi=10;5. cout << "Luas segitiga 1 = "6. cout << (0.5 * alas * tinggi) << endl;7. }8. void luas_segi3(int alas,int tinggi){9. cout << "Luas segitiga 2 = "10. cout << (0.5 * alas * tinggi) << endl;11. }12. void luas_segi3(int alas, int tinggi,int bagi){13. cout << "Luas segitiga 2 bagi "14. cout << bagi << " = "15. cout << (0.5 * alas * tinggi)/bagi16. cout << endl;17. }18. void main() {19. luas_segi3(10);20. luas_segi3(10,15);21. luas_segi3(10,15,3);22. }

Keluaran programnya adalah :Luas segitiga 1 = 150Luas segitiga 2 = 75Luas segitiga 2 bagi 3 = 25

246 Direktorat Pembinaan SMK | 2008

Page 263: 01 bab 01 Dasar Komputer fachkunde OK

Prosedur dan Subroutin Bahasa Pemrorgraman

Program di atas mempunyai tigabuah function yang mempunyai namasama yaitu luas_segi3(). Functionyang pertama (baris ke-3) hanyamempunyai satu buah parameterformal yaitu alas dengan tipe datainteger. Sedangkan function yangkedua (baris ke-8) mempunyai duabuah parameter formal alas dantinggi dimana keduanya bertipe datainteger. Function yang terakhir (bariske-12) mempunyai tiga buahparameter formal yaitu alas, tinggi,dan bagi yang semuanya bertipe datayang sama, yaitu integer.

Pada program utama, terdapattiga buah argumen dimana argumen

pertama (baris ke-19) hanyamempunyai satu variabel masukanuntuk function, argumen kedua (bariske-20) mempunyai dua buah variabelmasukan, dan argumen terakhir(baris ke-21) mempunyai tiga buahvariabel masukan.

C++ secara otomatis akanmengarahkan argumen pertamakepada function yang pertama,argumen kedua kepada function yangkedua, dan argumen ketiga kepadafunction yang ketiga, sesuai denganvariabel masukan yang dipunyai olehmasing-masing argumen. Sedangkanuntuk bahasa Java:

1. class hitung {2. public void luas_segi3(int alas){3. int tinggi=10;4. double luas=0.5*alas*tinggi;5. System.out.println("Luas segitiga 1 = " + luas);6. }7. public void luas_segi3(int alas,int tinggi){8. double luas=0.5*alas*tinggi;9. System.out.println("Luas segitiga 2 = " + luas);10. }11. public void luas_segi3(int alas, int tinggi,int bagi){12. double luas=(0.5*alas*tinggi)/bagi;13. System.out.println("Luas segitiga 2 dibagi " + bagi + " = " + luas);14. }15. }16. class overload1 {17. public static void main(String[ ] args) {18. hitung sekutu = new hitung();19. sekutu.luas_segi3(10);20. sekutu.luas_segi3(10,15);21. sekutu.luas_segi3(10,15,3);22. }23. }

2008 | Direktorat Pembinaan SMK 247

Page 264: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Prosedur dan Subroutin

Keluaran programnya adalah :Luas segitiga 1 = 150Luas segitiga 2 = 75Luas segitiga 2 bagi 3 = 25.0

Sedangkan contoh untuk function-function yang mempunyai jumlahparameter formal yang sama tetapi

tipe data-nya berbeda 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 = " << (0.5 * alas * tinggi) << endl;6. }7. void luas_segi3(char* alas){8. cout << alas << endl;9. }10. void main() {11. luas_segi3(10);12. luas_segi3("Belajar pemrograman");13. }

Keluaran programnya adalah :Luas segitiga 1 = 150Belajar pemrograman

Program di atas mempunyai duabuah function yaitu luas_segi3()dimana setiap function mempunyaisatu buah parameter formal tetapitipe datanya berbeda. Function yangpertama parameter formalnyamempunyai tipe data integer, danfunction kedua mempunyaiparameter formal dengan tipe datapointer char.

Sama seperti sebelumnya, C++juga secara otomatis akanmengarahkan argumen yangmemanggil function pada programtersebut kepada function yangberkesesuaian. Argumen pertama

(baris ke-11) akan diarahkan kepadafunction pertama pula (baris ke-3)karena tipe data dari variabelmasukan sama dengan parameterformal dari function yang pertama,yaitu integer.

Sedangkan untuk argumenkedua (baris ke-12) akan diarahkankepada function kedua (baris ke-7)karena tipe data dari variabelmasukan sama dengan parameterformal dari function yang kedua, yaituchar. Untuk bahasa Java denganpermasalahan yang sama adalahsebagai berikut:

248 Direktorat Pembinaan SMK | 2008

Page 265: 01 bab 01 Dasar Komputer fachkunde OK

Prosedur dan Subroutin Bahasa Pemrorgraman

1. class hitung {2. public void luas_segi3(int alas){3. int tinggi=10;4. double luas=0.5*alas*tinggi;5. System.out.println("Luas segitiga 1 = " + luas);6. }7. public void luas_segi3(String alas){8. System.out.println(alas);9. }10. }11. class overload2 {12. public static void main(String[ ] args) {13. hitung sekutu = new hitung();14. sekutu.luas_segi3(10);15. sekutu.luas_segi3("Belajar pemrograman");16. }17. }

Keluaran programnya adalah :Luas segitiga 1 = 50.0Belajar pemrograman

Contoh untuk function-function yang mempunyai jumlah parameter formal

yang berbeda dan tipe data yangberbeda 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

Page 266: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Prosedur dan Subroutin

19. luas_segi3("Belajar pemrograman");20. luas_segi3("Belajar pemrograman lagi",3);21. }

Keluaran programnya adalah :Luas segitiga 1 = 150Belajar pemrograman Belajar pemrograman lagi : Pangkat dua dari3 adalah 9

Program di atas mempunyai tigabuah function yang mempunyai namayang sama, yaitu luas_segi3().Masing-masing function mempunyaijumlah parameter formal yangberbeda dan tipe data dari parameterformal tersebut juga berbeda.

Sama dengan sebelumnya, C++secara otomatis juga akanmengarahkan argumen yangmemanggil function-function tersebutsesuai dengan jumlah variabelmasukan dan tipe datanya. Untukbahasa Java dengan permasalahanyang sama adalah sebagai berikut:

1. class hitung {2. public void luas_segi3(int alas){3. int tinggi=10;4. double luas=0.5*alas*tinggi;5. System.out.println("Luas segitiga 1 = " + luas);6. }7. public void luas_segi3(String alas){8. System.out.println(alas);9. }10. public void luas_segi3(String alas,int data){11. System.out.println(alas + " : ");12. System.out.println("Pangkat dua dari " + data + " adalah " +(data*data));13. }14. }15. class overload3 {16. public static void main(String[ ] args) {17. hitung sekutu = new hitung();18. sekutu.luas_segi3(10);19. sekutu.luas_segi3("Belajar pemrograman");20. sekutu.luas_segi3("Belajar pemrograman",3);21. }22. }

250 Direktorat Pembinaan SMK | 2008

Page 267: 01 bab 01 Dasar Komputer fachkunde OK

Prosedur dan Subroutin Bahasa Pemrorgraman

Keluaran programnya adalah :Luas segitiga 1 = 50.0Belajar pemrograman Belajar Pemrograman: Pangkat dua dari 3 adalah 9

6.12. Soal LatihanJawablah soal latihan dibawah ini dengan baik dan benar.1. Apa yang dimaksud dengan prosedur dan2. Sebutkan perbedaan prosedur dengan fungsi3. Apa sajakah parameter-parameter yang dimiliki oleh prosedur4. Mengapa dalam program perlu ditulis dalam bentuk subrutin5. Apa yang dimaksud dengan funtion call function6. Apa yang dimaksud dengan call by value dan call by reference7. Apa yang dimaksud dengan overloading

2008 | Direktorat Pembinaan SMK 251

Page 268: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Prosedur dan Subroutin

252 Direktorat Pembinaan SMK | 2008

Page 269: 01 bab 01 Dasar Komputer fachkunde OK

Fungsi Bahasa Pemrorgraman

BAB 7FUNGSI

7.1. Pendahuluan7.2. Fungsi Void7.3. Pemanggilan Fungsi7.4. Prototipe Fungsi7.5. Pengiriman data pada Fungsi7.6. Passing Data by Value7.7. The return Statement7.8. Returning a Value from a Function7.9. Returning a Boolean Value7.10. Menggunakan Fungsi dalam program menu7.11. Variabel Lokal dan Global7.12. Soal Latihan

7.1. PendahuluanFungsi adalah kumpulan

pernyataan yang melakukan tugastertentu. Sejauh ini Anda telahmenggunakan fungsi dalam dua cara:(1) Anda telah membuat sebuahfungsi bernama utama dalam setiapprogram yang telah ditulis, dan (2)Anda memiliki fungsi library disebutseperti sqrt dan pow. Dalam bab iniakan mempelajari cara membuatfungsi yang dapat digunakan sepertifungsi library pada C++.

Salah satu alasan mengapamenggunakan fungsi adalah untukmemecah program ke dalam sebuahprogram yang lebih kecil sehinggamudah dikelola. Setiap unit modul,diprogram sebagai fungsi terpisah.

Misalnya pada sebuah buku yangmemiliki seribu halaman, tetapi tidakdibagi ke dalam bab atau bagian.Jika ingin mencoba untukmenemukan satu topik dalam bukuini akan sangat sulit. Real-worldprogram dapat dengan mudah adaribuan baris kode, dan kecualimereka modularized, mereka bisajadi sangat sulit untuk mengubah danmemelihara.

Alasan lain untuk menggunakanfungsi adalah untuk bahwa fungsimenyederhanakan program. Jikatugas tertentu dilakukan di beberapatempat di sebuah program, sebuahfungsi dapat ditulis sekali saja untukmelakukan tugas itu, dan kemudian

2008 | Direktorat Pembinaan SMK 253

Page 270: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Fungsi

akan dijalankan kapan sajadibutuhkan.

Ketika membuat sebuah fungsi,yang harus ditulis adalah definisi.Semua definisi mempunyai bagian-bagian dibawah ini:

NameSetiap fungsi harus memiliki nama.Secara umum, peraturan yang samaberlaku untuk nama variabel jugaberlaku untuk nama fungsi.

Parameter listProgram modul fungsi panggilanyang dapat mengirim data ke. Daftarparameter adalah daftar variabelyang memegang nilai-nilai yangdisampaikan ke fungsi.

BodyBadan fungsi adalah serangkaianpernyataan yang melaksanakantugas melakukan fungsi. Pernyataanini akan ditutupi dalam satu setbraces.

Return type:fungsi dapat mengirim kembali kenilai program modul yangmemanggilnya. Return typemerupakan tipe data dari nilai yangdikirim kembali.Gambar dibawah menunjukkandefinisi dari fungsi yang sederhanadengan berbagai bagian berlabel.Perhatikan bahwa fungsi dari jeniskembali sebenarnya tercantumpertama.

return

nama Parameter list

body

int main (){

Cout << “ Hello SiswaSMK\n”;

return0;

}

Gambar 7.1. function header

Contoh program diatas merupakan baris pendefinisian int main () yang disebut dengan function header.

254 Direktorat Pembinaan SMK | 2008

Page 271: 01 bab 01 Dasar Komputer fachkunde OK

Fungsi Bahasa Pemrorgraman

7.2. Fungsi VoidYang sudah tahu pada fungsi

adalah bahwa fungsi dapatmengembalikan nilai. Fungsi utamadalam semua program yang telahdilihat dalam buku ini dinyatakanuntuk kembali ke nilai int sebuahsistem operasi. Return 0; merupakansebuah pernyataan yangmenyebabkan nilai 0 bila fungsiutama telah selesai melaksanakan

tugasnya. Hal tersebut tidak semuafungsi diperlukan untuk kembali kenilai tersebut. Beberapa fungsi hanyamelakukan satu atau lebihpernyataan dan kemudianmengakhiri. Ini disebut void fungsi.Fungsi TampilPesan sepertiditampilkan di bawah ini adalahsebagai contoh:

void TampilPesan(){

cout << "Hello from the function TampilPesan.\n";}

Nama fungsi tersebut diatasTampilPesan. Nama ini jelas, sebagainama fungsi harus. Ia memberiindikasi tentang apa yang tidakberfungsi: ini menampilkan pesan.Perhatikan kembali fungsi dari jenisvoid. Ini berarti fungsi tidak

mengembalikan nilai ke bagianprogram yang dijalankan tersebut.Pemberitahuan juga tidak memilikifungsi pernyataan Kembali. Ini hanyamenampilkan pesan pada layar dankeluar.

7.3. Pemanggilan Fungsifungsi dijalankan ketika

dipanggil. Fungsi utama akandipanggil secara otomatis saatprogram dimulai, namun semuafungsi harus dijalankan olehpernyataan function call. Ketikasebuah fungsi dipanggil, program

untuk melakukan percabanganmenuju dan melaksanakan semuapernyataan yang ada didalam tubuhfungsi tersebut. Untuk lebih jelasnyamari kita lihat Program dibawah, yangberisi dua fungsi yaitu: TampilPesandan 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

Page 272: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Fungsi

}

int main(){

cout << "Hello dari program Utama.\n";cout << "‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐\n";TampilPesan(); // memanggil TampilPesancout << "‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐\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 olehbaris utama adalah: TampilPesan();Baris ini digunakan untuk fungsipanggilan. Dimana hal ini merupakan

nama fungsi yang diikuti oleh tandakurung dan titik koma. Coba kitabandingkan dengan fungsi headerseperti berikut:

Function Header void TampilPesan()Function Call TampilPesan();

Fungsi header adalah bagiandari definisi fungsi. Ia menyatakankembali sebuah fungsi dari jenis,nama, dan daftar parameter. Hal initidak diakhiri dengan titik komakarena definisi dari tubuh fungsi yangmengikutinya. Fungsi panggilanadalah pernyataan yangmelaksanakan fungsi tersebut,sehingga diakhiri dengan titik komaseperti pernyataan C++ lainnya.Fungsi panggilan tidak ada dalamdaftar, dan jika program ini tidak ke

dalam fungsi, tanda kurung yang akan dikosongkan.

Walaupun program mulaidijalankan pada program utama(main), fungsi TampilPesandidefinisikan terlebih dahulu. Hal inikarena compiler harus mengetahuifungsi dari jenis return, jumlahparameter, dan setiap jenisparameter sebelumnya yangdipanggil. Salah satu cara agarcompiler mengetahui informasi iniadalah dengan menempatkan fungsi

256 Direktorat Pembinaan SMK | 2008

Page 273: 01 bab 01 Dasar Komputer fachkunde OK

Fungsi Bahasa Pemrorgraman

definisi sebelum semua panggilan ke fungsi.

Perhatikan bagaimana programdiatas mengalir. Dalam memulai,tentu saja, didalam fungsi utama. Bilapanggilan ke TampilPesan yangdihadapi, program untuk cabangyang berfungsi dan melakukan

pernyataan-nya. Setelah selesaimelaksanakan TampilPesan,program cabang kembali ke fungsiutama dan kembali dengan barisyang mengikuti fungsi panggilan. Halini diilustrasikan pada gambardibawah ini.

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 pemanggilanFungsi dapat menggunakan strukturkendali seperti loop, pernyataan IF,dan pernyataan switch. Program

dibawah merupakan program yangmelakukan pemanggilan fungsiTampiPesan kedalam satu looping

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

using namespace std;

void TampilPesan(){

2008 | Direktorat Pembinaan SMK 257

Page 274: 01 bab 01 Dasar Komputer fachkunde OK

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 TampilPesancout << "‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐\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 dimungkinkanuntuk memiliki banyak fungsi atausebuah fungsi dalam sebuahprogram. Program dibawah 7.3.

dibawah ini memiliki tiga fungsi: yaituutama, fungsi pertama dan fungsikedua. Untuk lebih jelas perhatikanprogram 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

Page 275: 01 bab 01 Dasar Komputer fachkunde OK

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 utamaterdiri dari pemanggilan fungsi

pertama dan kedua dengan instruksisebagai berikut:

pertama();kedua();

Setiap panggilan pernyataanmenyebabkan program untuk cabangke salah satu fungsi dan kemudian

kembali ke utama bila fungsi selesai.Gambar dibawah menggambarkanjalan yang diambil oleh program

2008 | Direktorat Pembinaan SMK 259

Page 276: 01 bab 01 Dasar Komputer fachkunde OK

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 jugadipanggil dalam dalam sebuahhirarki, atau berlapis. Programdibawah ini merupakan sebuahprogram yang memiliki tiga buahfungsi dimana fungsi tersebut adalahutama, Agakdalam dan PalingDalam.

Kerja program tersebut adalah fungsipalingdalam dipanggil oleh fungsiagakdalam dan kemudian fungsiAgakDalam dipanggil oleh fungsiUtama. Untuk lebih jelasnyaperhatikan program dibawah ini:

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

Page 277: 01 bab 01 Dasar Komputer fachkunde OK

Fungsi Bahasa Pemrorgraman

{cout << "sekarang saya sedang di fungsi AgakDalam.\n"; PalingDalam(); // panggil Fungsicout << "Sekarang saya Kembali ke fungsi AgakDalam.\n";

}

int main(){

cout << "saya sekarang sedang didalam fungsi Utama.\n"; AgakDalam(); // Panggil Fungsicout << "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 FungsiUtama Lagi.

Dalam Program 7.4 diatasfungsiutama hanya memanggil fungsiagakDalam. Sedangkan fungsiAgakDalam memanggil FungsiPalingDalam. Program diatas adalah

memanggil fungsi dan kemudianfungsi yang dipanggil tersebutmemnggil fungsi yang lain. Untuklebih jelasnya perhatikan gambardibawah ini:

2008 | Direktorat Pembinaan SMK 261

Page 278: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Fungsi

void AgakDalam(){

cout << "sekarang saya sedang di fungsi AgakDalam.\n"; PalingDalam(); // panggil Fungsicout << "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 Fungsicout << "Saya kembali ke Fungsi Utama Lagi.\n";getch();return 0;

}

Gambar 7.4. Pemanggilan fungsi didalam fungsi

7.4. Prototipe FungsiSebelum compiler menemukan

panggilan ke fungsi tertentu, kitaharus sudah mengetahui beberapahal mengenai fungsi. Secara khusus,kita harus mengetahui jumlahparameter yang digunakan olehfungsi, jenis parameter, dan caraatau jenis kembalinya fungsi. Sebuahparameter membolehkan informasiuntuk dikirim ke salah satu fungsi.

Untuk saat ini, fungsi yang akandigunakan berupa fugsi yang tidakmemiliki parameter dan, kecuali padafungsi utama, dan cara kembalinyamenggunakan jenis void. Salah satu

cara untuk memastikan bahwacompiler ini memiliki informasi yangdiperlukan adalah denganmenempatkan fungsi yang telahdidefinisikan sebelum melakukanpanggilan ke fungsi tersebut. Inimerupakan pendekatan yang diambilseperti halnya dalam program 7.1sampai program 7.4 diatas. Caralainnya adalah adalah denganmenyatakan fungsi dengan fungsiprototipe (a function prototype).Berikut ini adalah prototipe untukfungsi TampilPesan seperti dalamProgram 7.1 adalah sebagai berikut:

void TampilPesan();

Prototipe tersebut diatas tampakmirip dengan fungsi header, kecuali

ada titik koma dibagian akhir. Sebuah pernyataan fungsi akan

262 Direktorat Pembinaan SMK | 2008

Page 279: 01 bab 01 Dasar Komputer fachkunde OK

Fungsi Bahasa Pemrorgraman

memberitahukan ke compiler bahwafungsi TampilPesan memiliki tipekembali (return) void, berarti fungsitersebut tidak mengembalikan nilaiserta tidak menggunakan parameter.

Prototipe fungsi biasanyaditempatkan pada bagian atas padaprogram sehingga compiler akanmelakukan eksekusi terlebih dahulusebelum fungsi tersebut dipanggil.

Program 7.5 dibawah ini adalahmodifikasi dari program 7.3 diatas.Definisi fungsi pertama dan keduatelah ditempatkan setelah programutama, dan fungsi prototip telahditempatkan diatas program utamasecara langsung setelah pernyataannamespace std. Perhatikan programdibawah ini:

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

Page 280: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Fungsi

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

Ketika compiler sedangmembaca program utama diatas,kemudian program utama tersebutmelakukan panggilan ke fungsipertama dan kedua sebelum compilermembaca definisi dari fungsitersebut. Karena hal tersebut sebagaifungsi prototip, compiler sudahmengetahui jenis parameter kembali

pada informasi fungsi pertama dankedua. Sehingga harus ada prototipepada setiap fungsinya dalam sebuahprogram kecuali program utama.Sebuah prototipe program ini tidakpernah diperlukan oleh programutama karena telah dilakukan padaawal program.

7.5. Pengiriman data pada FungsiNilai-nilai yang akan dikirim pada

sebuah fungsi disebut denganargument (arguments). Programmeryang ahli biasanya sudah akrabdengan cara menggunakan argumen

dalam pemanggilan fungsi.Pernyataan berikut ini merupakanfungsi pow dengan dua argumenyang sedang melakukan panggilan 2dan 4.

result = pow(2, 4);

Sebuah parameter merupakanvariabel khusus yang menangani nilaiyang dilewatkan sebagai argumenmenuju sebuah fungsi. Denganmenggunakan parameter, kita dapat

merancang sendiri fungsi yang dapatmenerima data. Program berikutmerupakan definisi sebuah fungsiyang menggunakan parameter:

void TampilNilai(int num){

cout << "Nilainya adalah " << num << endl;}

Perhatikan integer num yngdigunakan untuk mendefinisikanvariabel yang berada dalam kurung(int num). Variabel num adalahparameter. Integer Ini digunakanuntuk membuat fungsi TampilNilai

supaya menerima nilai integersebagai argumen. Program 7.6dibawah merupakan contoh yangmenggunakan fungsi TampilNilai.Perhatikan program dibawah ini:

Program 7.6.

264 Direktorat Pembinaan SMK | 2008

Page 281: 01 bab 01 Dasar Komputer fachkunde OK

Fungsi Bahasa Pemrorgraman

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

using namespace std;

//Prototipe Fungsivoid 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: 5Sekarang saya sudah kembali ke program utama.

Dalam prototype fungsi tersebut diatas yang perlu diperhatikan adalah padaTampilNilai:

void TampilNilai(int); // function prototype

Dalam fungsi tersebut kita tidakperlu memasukan daftar parameteryang merupakan variabel dalamtanda kurung, dan hanya dengan

memasukan type data yangdiperlukan saja. Fungsi ini dapatprototype ini juga dapat ditulissebagai berikut:

void TampilNilai(int num);

Fungsi tersebut diatas sangatmudah digunakan walaupun,compiler mengabaikan nama variabelpada parameter fungsi prototype

tersebut. Dalam program utama,fungsi TampiNilai disebut denganargumen 5, dimana hal tersebutberada dalam tanda kurung. Nomor 5

2008 | Direktorat Pembinaan SMK 265

Page 282: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Fungsi

dimasukan kedalam variabel num,yang mana num merupakanparameter TampilNilai. Untuk lebih

jelasnya mengenai hal tersebut,perhatikan gambar dibawah ini:

TampilNilai(5);

void TampilNilai(int num){

cout << "Besar nilainya adalah: " << num << endl;}

Gambar 7.5. Fungsi prototipe

Dengan melihat gambartersebut, apapun argumen yangtertulis dalam tanda kurung padapanggilan fungsi akan dicopykedalam variable parameter fungsi.Pada dasarnya, parameter adalahvariabel yang diinisialisasi menjadi

nilai sesuai argument yangberhubungan. Program 7.7 dibawahmenunjukkan bahwa fungsi\tampilNilai dapat dipanggil beberapakali dengan alasan sesuai masing-masing kegunaannya.

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

using namespace std;

//Prototipe Fungsivoid TampilNilai(int);

int main(){

cout << "Saya sedang mengisikan beberapa nilai pada TampilNilai.\n"; TampilNilai(5); // Panggil TampilNilai dengan argument 5TampilNilai(10); // Panggil TampilNilai dengan argument 10TampilNilai(2); // Panggil TampilNilai dengan argument 2TampilNilai(16); // Panggil TampilNilai dengan argument 16cout << "sekarang saya kembali.\n";

266 Direktorat Pembinaan SMK | 2008

Page 283: 01 bab 01 Dasar Komputer fachkunde OK

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 5Nilainya adalah 10Nilainya adalah 2Nilainya adalah 16sekarang saya kembali.

Setiap kali sebuah fungsi dalamprogram diatas tersebut dipanggil,variabel num akan mengambil nilaiyang berbeda. Setiap ekspresi fungsi,nilai akan diberikan kedalam num

yang digunakan sebagai argumen.Sebagai contoh, panggilan fungsiberikut digunakan untuk memasukannilai 8 kedalam variabel num:

TampilNilai(3 + 5);

Jika kita memasukan jenisargumen yang tidak sama denganjenis parameter, argumen tersebutakan digunakan secara otomatis.Misalnya, jika TampilNilai dari sebuah

parameter adalah bertipe integer,argumen pada pemanggilan fungsiakan dipotong, sehingga nilai 4 akandimasukan ke varibel num:

TampilNilai (4.7);

Seringkali hal tersebut berguna untukdigunakan oleh beberapa argumendalam sebuah fungsi. Program

dibawah ini menunjukkan sebuahfungsi dari fungsi yang memiliki tigabuah parameter.

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

using namespace std;

2008 | Direktorat Pembinaan SMK 267

Page 284: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Fungsi

//Prototipe Fungsivoid 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 615

Dalam header fungsi Tambahan, daftar parameter berisi tiga definisi

variabel yang dipisahkan oleh koma adalah sebagai berikut:

void Tambahan(int num1, int num2, int num3)

Hal yang perlu diperhatikanpada setiap variabel yaitu harusmemiliki tipe data yang namanyasebelum telah tertulis. Error padacompiler akan terjadi jika daftarparameter yang dinyatakan sebagai

int num1, num2, num3 ternyatabukan int num1, int num2, int num3.

Dalam pemanggilan fungsi,sebuah variabel nilai1, nilai2 dannilai 3 dapat digunakan sebagaiargument:

Tambahan(nilai1, nilai2, nilai3);

Potongan program diatas jikadiperhatikan ada perbedaan antaraheader fungsi dan panggilan fungsisaat melewati variabel sebagaiargumen menjadi parameter. Dalam

panggilan fungsi, kita tidak dapatmenyertakan variabel jenis datadidalam tanda kurung. Perhatikanpotongan program dibawah ini:

268 Direktorat Pembinaan SMK | 2008

Page 285: 01 bab 01 Dasar Komputer fachkunde OK

Fungsi Bahasa Pemrorgraman

Tambahan(int nilai1, int nilai2, int nilai3);

Ketika sebuah fungsi denganbeberapa parameter disebut,argumen akan dimasukan kedalam

parameter yang di pesan. Haltersebut dapat digambarkan sepertigambar 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 akanmenyebabkan nilai 5 dimasukankedalam parameter num1, nilai 10dimasukan ke dalam num2, dan 15

dimasukan kedalam num3. Untuklebih jelasnya perhatikan instruksidibawah ini:

showSum(5, 10, 15);

meskipun pemanggilan fungsi berikutini akan menyebabkan 15 yangdimasukan kedalam parameter

num1, 5 dimasukan ke dalam num2,dan nilai 10 akan dimasukan kedalamnum3:

Tambahan(15, 5, 10);

7.6. Passing Data by ValueParameter khusus merupakan

variabel tujuan yang ditentukandidalam tanda kurung dari definisifungsi. Tujuan parameter tersebutadalah untuk menyampaikan

informasi yng dilakukan olehargumen dan tercantum dalam tandakurung pada panggilan fungsi.Secara umum, ketika informasidisampaikan kedalam fungsi disebut

2008 | Direktorat Pembinaan SMK 269

Page 286: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Fungsi

passed by value. Hal ini berartiparameter menerima copy dari nilaiyang disampaikan kepadanya.

Jika sebuah parameter nilaiberubah didalam fungsi maka hal

tersebut tidak mempengaruhi padaargumen yang asli. Perhatikanprogram dibawah ini yangmenunjukkan konsep mengenaipassed 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 2arguments

cout << "sekarang kembali dalam main lagi, nilainya adalah ";cout << "semuanya masih " << whole << endl;cout << "dan nilai real adalah masih" << real << endl;return 0;

}

void changeThem(int i, double d){

i = 100;d = 27.5;

cout << "dalam fungsi changeThem nilainya diubah menjadi ";cout << i << endl;cout << "dan nilainya diubah menjadi " << d << endl << endl;

}

Pada program diatas walaupunparameter i dan f berubah dalamfungsi changeThem, kenyataannyaseluruh argumen tidak diubah.Parameter i dan f hanya berisi

salinan keseluruhan dan nyata.fungsi ChangeThem tidak memilikiakses ke argumen sebelumnya(original). Gambar dibawahmenunjukan bahwa variabel

270 Direktorat Pembinaan SMK | 2008

Page 287: 01 bab 01 Dasar Komputer fachkunde OK

Fungsi Bahasa Pemrorgraman

parameter disimpan dalam lokasimemori yang terpisah dari argumen

yang asli. Perhatikan gambar berikut ini:

Argumen Asli

12

Fungsi Parameter

12

Gambar 7.7. Variabel parameter yang disimpan dalam memori

7.7. Pernyataan KembaliBila pernyataan terakhir dalam

fungsi telah selesai eksekusi, fungsiakan diakhiri. Program akan kembalike modul yang dipanggil danmeneruskan eksekusi dari titikdimana panggilan fungsi dilakukansebelumnya. Hal sangatdimungkinkan, meskipun salah satufungsi memaksa untuk kembaliketempat dimana pernyataan terakhirdari program sebelumnya yang

dieksekusi. Ketika menemuipernyataan kembali, fungsi dengansegera diakhiri dan menuju programsemula. Hal ini seperti ditunjukkandalam Program dibawah. fungsi bagidigunakan untuk menunjukkan hasilpembagian dari arg1 dibagi arg2. Jikaarg2 diatur ke nol, fungsi akankembali tanpa melakukanpembagian, karena operasipembagian 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

Page 288: 01 bab 01 Dasar Komputer fachkunde OK

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 FungsiDari program diatas kita telah

melihat bahwa informasi dapatdilewatkan menjadi salah satu fungsioleh sebuah parameter. Informasijuga dapat dikembalikan dari fungsi,kembali menuju program yangmemanggilnya. Walaupun beberapaargumen dapat dimasukan menjadisalah satu fungsi, hanya ada satu

nilai yang dapat dikembalikannya.Sesuatu dari fungsi memilikibeberapa saluran komunikasi untukmenerima data (parameter), tetapihanya satu saluran untuk mengirimdata (return value).

Hal tersebut dapat digambarkanseperti dibawah ini:

Argumen

Argumen

Argumen

Argumen

Fungsi Nilai Kembali

Gambar 7.8. Fungsi dengan saluran beberapa data (parameter)

Dalam rangka untukmengembalikan nilai-nilai daribeberapa fungsi, mereka harus"dibuat paket" sehingga merekadianggap sebagai satu nilai. Tipe

data nilai kembali mengawali fungsidengan nama header fungsi danprototipe. Berikut ini menyatakanprototipe fungsi dengan namapersegi yang menerima sebuah

272 Direktorat Pembinaan SMK | 2008

Page 289: 01 bab 01 Dasar Komputer fachkunde OK

Fungsi Bahasa Pemrorgraman

argumen integer danmengembalikannya menjadi integer:

int persegi(int);

instruksi diatas dapat didefinisikandalam fungsi sebagai berikut:

int persegi(int number){return number * number;}

Fungsi tersebut hanya memilikisatu baris yang merupakanpernyataan kembali. Bila nilai fungsikembali, maka hal tersebut harusmemiliki pernyataan kembali.Ungkapan yang mengikuti kata kunciakan dievaluasi, dikonversikan ketipe data fungsi kembali, dan dikirimkembali program yang memanggilfungsi tersebut. Untuk lebih jelasnyaperhatikan 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 sesuatuyang memiliki nilai. Jika suatu fungsimengembalikan nilai, panggilan ke

fungsi merupakan sebuah ekspresi.Pernyataan diatas memberikan nilaikembali dari persegi ke variabel hasil.

2008 | Direktorat Pembinaan SMK 273

Page 290: 01 bab 01 Dasar Komputer fachkunde OK

00 int p{

ersegi(int number)

return number * number;}

Bahasa Pemrograman Fungsi

Jadi, ketika nilai 20 dinyatakansebagai argumen persegi, 20 kali 20,atau 400, dan dikembalikan ke hasilyang ditugaskan. Gambar dibawah ini

menggambarkan bagaimana sebuahinformasi disampaikan ke dankembali dari fungsi.

hasil = persegi (number);20

4

Gambar 7.9. Penyampaian informasi dari fungsi

Sebenarnya dalam program diatas,variable hasil adalah variabel yangtidak penting. Adanya nilai pada

fungsi persegi telah ditampilkanmenggunakan cout objek, sepertiditunjukkan berikut dibawah ini:

cout << number << " persegi adalah " << persegi(number) << endl;

Dari program diatas kita sudahmengetahui bagaimana nilaidikembalikan oleh fungsi danditempatkan ke variabel atau dicetak.Program tersebut diatas Jugamemungkinkan untuk menggunakan

nilai yang dikembalikan oleh fungsisebagai penghubung dalampengujian sebuah ekspresiaritmatika. Perhatikan contoh berikutyang menggunakan dua pernyataanyang sempurna:

if (persegi(number) > 100)cout << "persegi besar\n";sum = 1000 + persegi (number);

Program dibawah menunjukkan versidari fungsi persegi yang kembalisenbagai duble. Fungsi tersebutdigunakan dalam pernyataanmatematis untuk menghitung daerah

lingkaran. Program dibawah jugamenggunakan fungsi getRadiusuntuk mendapatkan radius lingkarandari pengguna dan kembali ke nilaiutama.

Program 7.12#include <iostream>#include <iomanip>

274 Direktorat Pembinaan SMK | 2008

Page 291: 01 bab 01 Dasar Komputer fachkunde OK

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 Program7.11 merupakan sebuah integer,sedangkan pada program 7.12adalah fungsi ganda. Cara kembalijenis fungsi harus merupakan jenisdata yang diinginkan untuk kembalidari fungsi. Jika fungsi kembali kenilai ganda yang sedang ditugaskanke variabel, maka variabel tersebutharus juga menjadi dua kali lipat. Jika

dua nilai dikembalikan oleh fungsipersegi seperti pada program 7.12maka akan ditugaskan ke salah satuvariabel integer, sehingga nilai akandipotong. Hal ini diilustrasikan dalamcontoh program berikut:

intresult;result =square(2.7);

2008 | Direktorat Pembinaan SMK 275

Page 292: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Fungsi

7.9. Pengembalian Nilai BooleanBiasanya ada sesuatu yang

dibutuhkan fungsi untuk mengujiargumen dan akan mengembalikannilai benar atau salah sertamengindikasikan kondisi yang ada.Misalnya, dalam sebuah programyang membutuhkan sesuatu untuk

mengetahui apakah nomor genapatau ganjil, sebuah fungsi dapatditulis kembali dengan benar jikaargument genap dan false jikaargumen yang ganjil. Untuk lebihjelasnya perhatikan program dibawahini:

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";elsecout << val << " adalah ganjil.\n";return 0;

}

bool isEven(int number){

if (number % 2)return false; // Bilangan adalah ganjilelsereturn true; // bilangan adalah genap.

}

Keluaran Program adalah sebagai berikut:masukan bilangan integer : 5[Enter]5 adalah ganjil.

276 Direktorat Pembinaan SMK | 2008

Page 293: 01 bab 01 Dasar Komputer fachkunde OK

Fungsi Bahasa Pemrorgraman

Sebuah fungsi isEven disebut dalam pernyataan dibawah ini:

if (isEven(val))

ketika pernyatasan IF dieksekusi,isEven disebut dengan val sebagaiargument. Jika val genap, isEvenadalah benar dan sebaliknya akansalah.

7.10. Menggunakan Fungsi dalam program menuDalam sebelumnya kita melihat

menu-driven program yangmenghitung biaya kesehatan untukanggota klub. Program 7.14 dibawahadalah untuk meningkatkan modular

versi program. Perhatikan bagaimanasetiap fungsi, atau modul, yangdirancang untuk melakukan tugastertentu.

Program 7.14#include <iostream>#include <iomanip>#include <string>

using namespace std;

// Function prototypesvoid 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

Page 294: 01 bab 01 Dasar Komputer fachkunde OK

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

Page 295: 01 bab 01 Dasar Komputer fachkunde OK

Fungsi Bahasa Pemrorgraman

<< "Total:Rp."<< (rate * months)<< endl << endl;

}

Yang perlu diperhatikan adalahfleksibilitas dari fungsi computeFees,yang disebut pada tiga tempat yangberbeda-beda dengan pernyataanswitch. Hal ini disampaikan tigaargumen: string memegang jeniskeanggotaan, double memegangbiaya bulanan untuk jeniskeanggotaan, dan integer memegangjumlah tagihan per bulan.

Tanpa argumen, kita akanmenetapkan sesuatu yang diperlukan

keseluruhan fungsi: satu untukmenghitung biaya keanggotaandewasa, anak yang lain untukmenghitung biaya keanggotaan, danketiga untuk menghitung biayakeanggotaan senior. Karena kitadapat informasi yang berbeda lulussebagai argumen ke fungsi tersebut,namun, kami mampu membuat satutujuan umum-fungsi yang bekerjauntuk semua tiga kasus.

7.11. Variabel Lokal dan GlobalSeperti yang telah ditetapkan

bahwa variabel didalam fungsiutama, Anda juga dapat menetapkanfungsi di dalam fungsi-fungsi lainnya.Variabel yang ditetapkan dalamfungsi lokal ke fungsi. Merekatersembunyi dari pernyataan dalam

fungsi lainnya, yang biasanya tidakbisa mengaksesnya. Program 7.15menunjukkan bahwa variabel yangditetapkan dalam suatu fungsi yangtersembunyi, dimana fungsi lainnyamungkin telah terpisah, berbedavariabel 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

Page 296: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Fungsi

void anotherFunction(){

int num = 20; // variabel Localcout << "Dalam anotherFunction, num adalah: " << num << endl;

}

Keluaran Program adalah sebagai berikut:Dalam program utatma,num adalah: 1Dalam anotherFunction, num adalah: 20Kembali dalam program utama, num masih 1

Meskipun terdapat dua variabelnum, program ini hanya bisa"melihat" salah satu dari merekasetiap saat. Ketika programdijalankan dalam program utama,yang didefinisikan pada variabel numakan terlihat pada program utama.Ketika anotherFunction disebut

sebagai variabel yang ditetapkandidalamnya akan terlihat, sehinggadalam variabel num program utamatersembunyi. Perhatikan programyang mengilustrasikan sifat tertutupdari dua fungsi, dimana bentuk kotakmewakili lingkup variabel

Fungsi main

Int num =1;

Variabel num hanya terlihat pada program utama

Fungsi anotherFunction

int num = 20;

Variabel num hanya terlihat pada anotherFunction

Gambar 7.10. Dua Fungsi yang mempunyai sifat tertutup,

Sebuah Lokal variabel dapatdikatakan sebagai variable yangaman dan tersembunyi dari fungsilain, tetapi variable ini tidakmenyediakan cara yang mudah untukberbagi data. Jika sejumlah besardata harus dapat diakses oleh semuafungsi dalam program, variabel globaldapat digunakan sebagai alternatif

mudah. Sebuah variabel globalmerupakan variabel yang ditetapkandiluar oleh semua fungsi dalamsebuah program. Program 7.16menunjukkan dua buah fungsi utamadan anotherFunction, dimanamenggunakan akses yang samayaitu variabel global num.

280 Direktorat Pembinaan SMK | 2008

Page 297: 01 bab 01 Dasar Komputer fachkunde OK

Fungsi Bahasa Pemrorgraman

Program 7.16#include <iostream>

using namespace std;

void anotherFunction(); // Fungsi prototipeint 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,variabel num didefinisikan diluarsemua fungsi. Karena munculsebelum definisi pada program utama

dan anotherFunction, makakeduanya memiliki akses ke fungsitersebut.

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

Page 298: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Fungsi

Jika sebuah fungsi memiliki variabellokal dengan nama yang samasebagai variabel global, variabel lokal

hanya dapat dilihat oleh fungsi. Halini ditunjukkan oleh Program dibawahini:

Program 7.18#include <iostream>

using namespace std;

// Funsi prototipevoid 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 sedangmenjalankan fungsi utama, variabelglobal cows akan terlihat. Dalamfungsi texas dan Arkansas, meskipunada variabel lokal dengan namacows. Variabel global tidak terlihatketika program sedang menjalankanfungsi mereka. program dibawah

merupakan program untuk mendaftardan program ini menggunakanvariabel global dan lokal. FungsiringUpSale menghitung danmenampilkan harga, pajak penjualan,dan subtotal untuk setiap item yangdibeli. Memiliki variabel lokal, pajak,yang memiliki nama yang sama

282 Direktorat Pembinaan SMK | 2008

Page 299: 01 bab 01 Dasar Komputer fachkunde OK

Fungsi Bahasa Pemrorgraman

seperti variabel global. Pajak padaringUpSale variabel yang digunakanuntuk menghitung pajak penjualanpada item, sementara global pajakvariabel yang digunakan oleh

program utama untuk menghitungtotal pajak penjualan padapembelian. Supaya lebih jelas,perhatikan program dibawah ini:

Program 7.19#include <iostream>#include <iomanip>

using namespace std;

void ringUpSale();

// Fungsi prototipe

const double TAX_RATE = 0.06;double tax, sale, total;

// variabel Global

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

Page 300: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Fungsi

cin >> qty;cout << "Harga per satuan: ";cin >> unitPrice;

thisSale = qty * unitPrice; // total harga unitsale += thisSale; // Update variabel global penjualan tax = thisSale * TAX_RATE; // pembayaran pajak untuk item subTotal = thisSale + tax; // subtotal untuk tiap itemcout << "harga untuk tiap item:" << thisSale << endl;cout << "pajak untuk tiap item: " << tax << endl;cout << "SubTotal untuk tiap item: " << subTotal << endl;

}

7.12. Variabel Static LocalJika suatu fungsi dipanggil lebih

dari satu kali dalam sebuah program,maka nilai yang disimpan dalamfungsi sebagai variabel lokal tidakakan kuat menahan panggilan fungsi.Hal ini disebabkan karena variabel-

.

Program 7.20#include<iostream>

variabel yang hancur ketika fungsidiakhiri dan kemudian kembali dibuatbila fungsi sudah dimulai lagi. Hal iniditunjukkan dalam Program 7.20dibawah ini:

using namespace std;

// Fungsi prototipevoid showLocal();

int main(){

showLocal();showLocal(); return0;

}

void showLocal(){

int localNum = 5; //variabel Localcout << "localNum adalaj " << localNum << endl;localNum = 99;

284 Direktorat Pembinaan SMK | 2008

Page 301: 01 bab 01 Dasar Komputer fachkunde OK

Fungsi Bahasa Pemrorgraman

}

Keluaran Program adalah sebagai berikut:localNum is 5 localNum is 5

Walaupun pernyataan terakhirdalam fungsi showLocal took 99 padalocalNum, variabel yang hancur bilafungsi kembali. Pada saat fungsitersebut dipanggil, localNum akanrecreated dan diinisialisasi ke 5 lagi.

Kadang-kadang keinginan untuksebuah program untuk "mengingat"adalah nilai yang disimpan dalamvariabel lokal antara fungsi

panggilan. Hal ini dapat dicapaidengan membuat variabel statis.variabel Static adalah variable lokalyang tidak hancur bila fungsi kembali.Mereka ada untuk seluruh masaprogram, walaupun mereka hanyalingkup fungsi mereka yangditetapkan. Program 7.21menunjukkan beberapa karakteristikstatik lokal variabel.

Program 7.21#include <iostream>

using namespace std;

// Fungsi prototipevoid showStatic();

int main(){

for (int count = 0; count < 5; count++)showStatic();return 0;

}

void showStatic(){

static int statNum; // Static local variablecout << "statNum adalah" << statNum << endl;statNum++;

}

Program diatas terdapat variabelstatNum adalah di tambahkandengan satu (incremented) pada

fungsi showStatic, dan tetap dengannilai antara setiap panggilan fungsi.Perhatikan bahwa walaupun tidak

2008 | Direktorat Pembinaan SMK 285

Page 302: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Fungsi

secara eksplisit statNum diinisialisasi,dimulai pada nol. Seperti variabelglobal adalah variabel lokal statikdiinisialisasi ke nol secara default.Jika Anda memberikan nilaiinitialization statis variabel lokal,hanya dilakukan sekali initialization.

Hal ini biasanya terjadi karenavariabel inisialisasi dibuat, danvariabel lokal statik hanya dibuatsekali saat menjalankan sebuahprogram. program dibawah hanyasedikit modifikasi.

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:statNumadalah 5statNumadalah 6statNumadalah 7statNumadalah 8statNumadalah 9

Walaupun pernyataan yangdigunakan utuk mendefinisikaninisialisasi statNum ke 5, initializationtidak terjadi pada setiap kali fungsi

dipanggil. Jika tidak, variabel y tidakdapat mempertahankan nilai-nyaantara fungsi panggilan.

286 Direktorat Pembinaan SMK | 2008

Page 303: 01 bab 01 Dasar Komputer fachkunde OK

Fungsi Bahasa Pemrorgraman

7.12. Soal LatihanJawablah soal latihan dibawah ini dengan baik dan benar.1. Apa yang dimaksud dengan fungsi pada pemrograman komputer2. Apakah alasanya menggunakan fungsi3. Jelaskan cara pemanggilan fungsi didalam sebuah fungsi4. Apakah yang dimaksud dengan argumen5. Apakah perbedaan antara fungsi dengan prosedur6. Buatlah program sederhana menggunakan fungsi untuk mencari bilangan

genap antara 1 sampai dengan 10

2008 | Direktorat Pembinaan SMK 287

Page 304: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Fungsi

288 Direktorat Pembinaan SMK | 2008

Page 305: 01 bab 01 Dasar Komputer fachkunde OK

Operasi String Bahasa Pemrorgraman

BAB 8OPERASI STRING

8.1. String pada bahasa C8.2. Pointer pada Operasi String8.3. Library String Bahasa C++8.4. Membandingkan string8.5. Operator Logika NOT8.6. Pengurutan String8.7. Fungsi konversi String/Numeric8.8. Menguji sebuah Karakter8.9. Deskripsi Fungsi Karakter8.10. Konversi Karakter8.11. Menulis string8.12. Pointer untuk menguraikan String8.13. Class String pada C++8.14. Membuat Class String Sendiri8.15. Studi Kasus8.16. Soal Latihan

8.1. String pada bahasa CString merupakan sebuah bentuk

data yang sering dipakai dalambahasa pemrograman untukkeperluan menampung danmemanipulasi data teks. Sebagaicontoh fungsi string misalnyadigunakan untuk menampung ataumenyimpan sebuah kalimat dan lainsebagainya.

Pada bahasa C, string bukanlahmerupakan tipe data berdiritersendiri, melainkan hanyalahkumpulan dari nilai-nilai karakter

yang berurutan dalam bentuk array berdimensi satu.

Dalam bahasa C++, stringmerupakan suatu nilai karakter yangberurutan dan disimpan dalamsebuah lokasi memori yang salaludiakhiri dengan karakter null.Sehingga untuk memanggil stringakan selalu dalam bentuk karakterASCII. Dalam sebuah programoperasi string, karakter null biasanyaditulis ‘\0’, dimana hal tersebutbiasanya secara umum berupabilangan integer 0 atau nilai karakter

2008 | Direktorat Pembinaan SMK 289

Page 306: 01 bab 01 Dasar Komputer fachkunde OK

ditulis secara langsung dalamprogram secara berurutan dengan

Bahasa Pemrograman Operasi String

null konstanta. Kemudian pernyataantersebut disimpan dalam bentukkarakter variabel seperti dibawah ini:

char ch1, ch2,ch3;ch1 ='\0';ch2 =0;ch3 =NULL;

Array merupakan sebuah lokasimemori yang berurutan untukmenyimpan nilai tipe data yangsama, tetapi pada string berupa arrayyang selalu diakhiri dengan karakternull. String dalam bahasa C++ akanmuncul dalam program berupa salahsatu dari tiga bentuk dibawah ini: “Hard-coded’’ string literals Programmer mendefinisikan array

dari karakter Pointers ke karakter

Tanpa memperhatikan dariketiga bentuk string yang munculdalam program tersebut, string selalumempunyai ciri array yang diakhirioleh karakter null dandirepresentasikan dalam programdalam bentuk pointer pada karakterpertama dalam sebuah array.Dengan kata lain tipe string padabahasa C++ adalah:

char*

dimana hal tersebut diatas adalahtipe char string menggunakan sebuahpointer

8.1.1. Konstanta StringPenulisan String Secara harafiah

sebenarnya dapat disebut jugadengan konstanta string yang dapat

menambah tanda ketik dua.Perhatikan string dibawah ini:

“siapakah nama anda?” “gatotkaca”

Kedua penulisan tersebut diatasmerupakan cara penulisan string.Perhatikan contoh program dibawahini:

Program 8.1#include <iostream>

using namespace std;

int main(){

cout << "gatotkaca";return 0;

}

Pada program diatas dapatdiketahui bahwa compiler menanganistring yang datang dalam bentukstring literal. Ketika compilermenemui sebuah string “gatotkaca”,maka hal tersebut akan dialokasikandala sebuah array dengan panjangsepuluh karakter dalam bentuk datadalam program.

Compiler kemudian akanmenyimpan sembilan karakter dalambentuk string “gatotkaca”. Dalampenyimpanan pertama dimasukankarakter kesembilan kedalam arraydan diakhiri dengan karakter nullpada penyimpanan akhir. Langkahterakhir compiler melewatkan nilaitipe char * dan alamat array darikarakter pertama menjadi obyek cout.

290 Direktorat Pembinaan SMK| 2008

Page 307: 01 bab 01 Dasar Komputer fachkunde OK

Operasi String Bahasa Pemrorgraman

g a t o t k a c a \0

Gambar 8.1. Contoh sebuah string

Pada gambar diatas setiapkarakter akan menempati memorisebesar 1 byte. Byte terakhirotomatis akan berisi karakter NULL(\0). Dengan mengetahui bahwasuatu string diakhiri nilai NULL, makaakhir dari nilai suatu string akan

dapat dideteksi. Sebagai sebuaharray karakter, karakter pertama darinilai string mempunyai indeks ke-0,karakter kedua mempunyai indekske-1, dan seterusnya. Programdibawah ini mengilustrasikan sebuahstring yang diperlakukan olehcompiler sebagai sebuah nilaidengan type data char* . Hal tersebutmerupakan sebuah operasi pointerpada sebuah karakter.

Program 8.2#include <iostream>

using namespace std;

int main(){

string storedAt = " disimpan pada ";char *p, *q;// memasukan string ke pointer sebagai charp = "Hello ";q = "Bailey";// pernyataan berikut sama dengancout << p << q << endl;//cetak alamat dimana string C disimpancout << p << storedAt <<int(p)<< endl;cout << q << storedAt <<int(q)<< endl <<int ("string lainnya");return 0;

}

Keluaran program diatas adalah sebagai berikut:Hello BaileyHello disimpan pada 4309447Bailey disimpan pada 43094544309461

Dua tugas pada program diatasadalah menampilkan string dalambentuk pointer menjadi char denganmenggunakan variabe type char*.

Pointer p dan q kemudian menahansebagai alamat dari dua string.Dengan memilih sebuah pointer intmaka akan mengetahui dimana

2008 | Direktorat Pembinaan SMK 291

Page 308: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Operasi String

konstanta string disimpan dalam array dapat diberi nilai dengansebuah memori. Dalam kasus inisebuah compiler telah menyimpansemua konstanta string pada sebuahprogram dalam lokasi memori yangberurutan.

8.1.2. Variabel StringSebuah variabel string dapat

ditahan oleh string pada bahasa Cyang ditulis dalam bentuk kodeprogram. Untuk memiliki suatukarakter string dari sebuah keyboard,atau dari sebuah file, maka harusdapat mendefinisikan sebuah arrayuntuk menampung karakter stringtersebut. Di dalam melakukan hal ini,yang perlu pastikan adalah pada saatmengalokasikan satu tambahan isiarray untuk mengakhiri karakter null.Sebagai contoh, jika string akan lebihdari 19 karakter panjangnya, makaperlu mengalokasikan sebuah arraydengan 20 karakter, seperti contohpenulisan dibawah ini:

charcompany[20];

instruksi tersebut diatas merupakaninstruksi untuk mendeklarasikanvariabel string dengan panjangmaksimal 20 karakter (termasukkarakter NULL). Deklarasi tersebutsebenarnya tidak lain merupakandeklarasi array bertipe char.

Pada sebuah konstanta string,compiler string akan menunjukkanstring melalui alamat pertamakarakter string, dalam hal ini, arrayidentifier. Pada satu array dentifierdengan tanpa tanda kurungdiinterprestasikan oleh compilersebagai alamat pertama yang masukpada array. Suatu string dalambahasa c didefinisikan sebagai satu

menginisialisasi string tersebut.Selain memberi nilai dapat jugadilakukan dengan membaca karakterstring melalui sebuah keyboard ataufile, atau dapat juga denganmelakukan copy karakter ke dalamarray satu karakter pada saat yangsama. Hal ini dapat juga dikatakanbahwa suatu variabel string dapatdiinisialisasi seperti halnya arrayyang lain. Namun tentu saja elementerakhirnya haruslah berupa karakterNULL.

charcorporation[]={’G’,’r’,’a’,’p’,’h’,’I’,’c’,’s’,’\0’};

yang menyatakan bahwa nameadalah variabel string dengan nilaiawal berupa string: “Graphics”Bentuk inisialisasi yang lebih singkat:

char corporation[ ] ="Graphics";

atau contoh lain bisa juga ditentukanjumlah karakternya:

char company[20] = "Robotic Systems, inc.";

Pada bentuk penulisan diatas,karakter NULL tidak perlu ditulis.Secara implisit akan disisipkan olehkompiler. Dalam penulisan yang perludiperhatikan, bila corporationdideklarasikan sebagai string,penugasan (assignment) suatu stringke variabel string dan tidakdiperkenankan menulis sepertidibawah ini:

corporation =“Graphics";

292 Direktorat Pembinaan SMK| 2008

Page 309: 01 bab 01 Dasar Komputer fachkunde OK

Operasi String Bahasa Pemrorgraman

dalam melakukan inisialisasi arraysebuah string caranya adalah, ukurandari array di dalam sebuah arraymerupakan sebuah opsional. Jika haltersebut tidak ditentukan, makacompiler itu akan mengatur ukuranstring sesuai dengan banyaknyakarakter yang ada didalam stringtersebut seperti contoh diatas.

String pada bahasa Cmendefinisikan sebagai aray ataularik yang dapat terbaca dan ditulisdengan berbagai object, operator,maupun keanggotaan fungsimasukan atau keluaran sebuah

class. Suatu string pada bahasa Cakan disimpan seorang programmeruntuk mendefinisikan array yangdapat diproses dengan notasisubscript standar. Program dibawahmerupakan sebuah contoh programstring. Contoh tersebut akanmengeluarkan satu karakter stringpada waktu yang sama, dan berhentiketika itu menemukan akhiran null.Instruksi tersebut menggunakanfungsi keanggotaan getline yangdimiliki oleh bahasa C. Untuk lebihjelasnya perhatikan program dibawahini:

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

}return0;}

cout << line[count];count++;

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

Page 310: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Operasi String

8.2. Pointer pada Operasi StringSeperti yang sudah kita ketahui

bahwa string pada bahasa C dapatdiwakili ketika konstanta string, atauarray sebuah karakter. Keduanyametoda ini mengalokasikan array danlalu menggunakan alamat arraysebagai suatu pointer/penunjuk untukchar sebagai aktualisasi yangmerepresentasikan string.

Perbedaan antara keduanyaadalah bahwa dalam kasus yangpertama, array digunakan untukmenyimpan string yang dialokasikansecara implisit oleh compiler,sedangkan pada kasus kedua, arraysecara eksplisit dialokasikan olehprogrammer.

Metoda yang ketiga adalahdengan merepresntasikan stringbahasa C menggunakan pointeruntuk operasi char untuk menunjukstring pada bahasa C. Denganmetode ini penyimpanan sudahdialokasikan oleh salah satu atau duametoda yang lain. Di sini adabeberapa contoh penggunaan stringbahasa C adalah sebagai berikut:

char name[20] = "Sekolah menengah";char *p;p = name;cout << p << endl; // cetak pp = "sekolahku";cout << p << endl; // cetak p

Keuntungan utama dalammenggunakan sebuah variabelpenunjuk pointer adalah untukmerepresentasikan string padabahasa C yang mempunyaikemampuan untuk membuatpenunjuk titik pointer yang menunjukstring yang berbeda.

Cara lain cara menggunakanpenunjuk pointer char string padabahasa C++ adalah denganmendefinisikan penunjuk pointer dankemudian menetapkannya untukmenunjuk secara dinamis danmengalokasikan penyimpanan yangdikembalikan oleh operator yangbaru. Hal ini dapat digambarkan padacontoh program dibawah ini:

Program 8.4#include <iostream>

using namespace std;

int main(){

const int NAME_LENGTH = 50;char *pname;

pname = new char[NAME_LENGTH]; // alokasi penyimpanancout << "Masukan nama Anda: ";cin >> pname; // cetak namacout << "Hello " << pname;return 0;

294 Direktorat Pembinaan SMK| 2008

Page 311: 01 bab 01 Dasar Komputer fachkunde OK

Operasi String Bahasa Pemrorgraman

}

Keluaran program diatas setelah diberi masukan adalah:Masukan nama Anda: Suprapto [Enter]Hello Suprapto

Suatu kesalahan umum yangsering terjadi dalam menggunakanpenunjuk pointer char pada stringbahasa C adalah ketikamenggunakan penunjuk pointer tetapitidak menunjuk dan mengalokasikanstring dengan baik. Perhatikancontoh kode dibawah ini:

char *pname;

cout << "Masukan NamaAnda: ";cin >>pname;

kesalahannya adalah karenaprogram mencoba untuk membacasebuah string ke dalam lokasimemori yang ditunjuk oleh pname,ketika pname belum diinisialisasidengan baik.

8.3. Library String Bahasa C++Library C++ menyediakan

banyak fungsi untuk memanipulasidan menguji string. Sebagai contoh,sebuah program segmen berikutmenggunakan fungsi strlen untukmenentukan panjang sebuah stringyang disimpan dengan nama name:

char name[50] = "ThomasEdison";intlength;length =strlen(name);

Fungsi strlen untuk menerimastring sebagai argumentasi. Haltersebut digunakan untukmengembalikan panjang string,dimana banyaknya karakter akansampai tetapi tidak termasuk tandanull akhir string. Sebagai hasil daripanjang variabel string akan memilikijumlah karakter 13 yang disimpan didalam string. Panjang sebuah stringharus tidak dikacaukan denganukuran dari array yang menahannya.Hal yang perlu diingat adalah bahwasatu-satunya informasi yang sedang

diberikan kepada strlen adalahalamat permulaan dari string. Haltersebut tidak mengetahui yangmana array sebagai tujuan akhir,sehingga hal tersebut akan mencarikode null yang menandai adanyaujung string.

Karena string pada bahasa Cberupa penunjuk pointer untuk tipedata char, string menangani fungsiyang mengambil parameter berupaarray dari sebuah char atauekivalensinya, penunjuk pointer untukmenangani tipe data char. stringpada C dapat juga dilewatkan padafungsi di dalam tiga bentuk manapundimana string dapat mengambil: Konstanta string Nama array yang menyimpan

string Variabel Pointer yang menangani

alamat CSebagai contoh pada operasi untukmenghitung panjang string, makafungsi strlen dapat digunakansebagai ditunjukkan dibawah ini:

2008 | Direktorat Pembinaan SMK 295

Page 312: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Operasi String

length = strlen("Thomas Edison");

Contoh lain suatu fungsipenanganan string pada C adalahstrcat. Fungsi strcat mengambil duastring ketika sebuah parametermenggabungkan mereka,mengembalikan suatu string yangterdiri dari semua karakter yangdiikuti string pertama oleh karakterstring kedua. Di bawah ini adalahsatu contoh penggunaan padaprogram:

char string1[13] = "Hello "; char string2[7] = "World!";cout << string1 << endl; cout << string2<< endl; strcat(string1, string2); cout << string1 << endl;

pernyatan-pernyataan tersebut akanmenghasilkan keluaran sebagai berikut:

HelloWorld!Hello World!

Fungsi strcat untuk menyalin isidari string2 hingga selesai daristring1. Di dalam contoh ini, string1berisi string "Hello " sebelummemanggil ke strcat. Setelahpanggilan dilakukan, maka nilainyaakan berisi string " Hello World!".Gambar dibawah menunjukkan isidari kedua array sebelum dan setelahfungsi tersebut dipanggil.

296 Direktorat Pembinaan SMK| 2008

Page 313: 01 bab 01 Dasar Komputer fachkunde OK

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 padastring1 sebelum tanda null adalahsebagai ruang atau space. Fungsistrcat tidak untuk menyisipkansebuah ruang, dengan demikian haltersebut adalah tanggung jawabseorang programmer bahwa spacetelah dipastikan satu telah di sana,jika hal tersebut diperlukan. Haltersebut merupakan tugas seorang

programmer untuk memastikanbahwa array dapat menjaga string1dan sudah cukup besar untukmenahan string1 dan string2 sertatanda akhiran null. Pada kasus ini,sebuah segmen program yangmenggunakan operator sizeof untukmenguji ukuran array sebelum strcatdipanggil:

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 ditugaskanselain dengan operator = . Masing-masing unsur individu harusmempunyai tugas, biasanya di dalamsebuah program pengulangan.Fungsi strcpy, dapat digunakanuntuk menyalin sebuah string ke

bentuk yang lain. Contohpenggunaannya dapat dilihat padaprogram dibawah ini:

charname[20];strcpy(name, "AlbertEinstein");

2008 | Direktorat Pembinaan SMK 297

Page 314: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Operasi String

Alasan penggunaan fungsistrcpy adalah string pada bahasa C.String yang kedua dicopy padaalamat yang ditetapkan oleh argumenstring yang pertama. Jika sesuatusudah disimpan di dalam lokasi yangtelah disesuaikan oleh argumen yangpertama, hal tersebut akan terjadioverwritten, seperti ditunjukkandalam segmen program berikut ini:

char string1[10] = "Hello", string2[10] = "World!";

cout << string1<< endl; cout <<string2 << endl;strcpy(string1,string2); cout <<string1 << endl;cout << string2<< endl;

sehingga keluaran program adalah sebagai berikut:Hello World! World! World!

8.4. Membandingkan stringOperator assignment dan

operator relasional bekerja denganclass string pada bahasa C++ stringkarena mereka dapat terjadi overloadyang bekerja bersama kelas tersebut.Meskipun demikian, sama sepertioperator assignment tidak bisadigunakan untuk memberi pada stringC, operator relasional <=, <, >, >=, !=,dan == tidak bisa digunakan untukmembandingkan pada string. Hal inidikarenakan ketika digunakan

dengan string, operator tersebutmembandingkan alamat-alamatdimana strings tersebut disimpandaripada membandingkan karakteryang berurutan secara nyata yangmenjadi anggota string tersebut.

Program dibawah menunjukkanhasil keluaran yang salah dimanaprogram tersebut mencobamembandingkan string menggunakanpersamaan operator diatas.

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

Page 315: 01 bab 01 Dasar Komputer fachkunde OK

Operasi String Bahasa Pemrorgraman

if (firstString == secondString)cout << "Yang anda masukan stringnya sama\n";

elsecout << "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 tersebutyang dimasukan serupa, Programdiatas akan melaporkan bahwamereka tidaklah sama. Hal inidikarenakan adanya instruksidibawah ini:

firstString ==secondString

hal yang digunakan dalam dalamprogram diatas adalah statemen IFuntuk membandingkan alamatmemori dari dua aray tersebut,daripada membandingkan karakterstring dan menyimpan alamattersebut. Karena alamatnya berbeda,maka perbandingan menghasilkansuatu hasil yang salah. Sebenarnya,dalam bahasa C++, perbandingandapat dilakukan seperti dibawah ini:

"abc" =="abc"

Biasanya instruksi diatas akanmenghasilkan suatu hasil yang salah.Ini dikarenakan kebanyakan compilertidak memeriksa atau melihat jikakonstanta string sudah ditemuisebelumnya, dan akan menyimpankedua string-string pada alamatmemori yang berbeda. Compilertersebut akan membandingkan kedua

alamat-alamat yang berbeda,kemudian memberi suatu nilai hasilyang salah.

8.4.1. Fungsi strcmpUntuk membandingkan string

pada C dengan baik, maka perlumenggunakan fungsi library strcmp.Fungsi ini mengambil dua stringsebagai parameter danmengembalikan bilangan integeruntuk menandai,bagaimana duastring dibandingkan antara satu samalain. Perhatikan instruksi dibawah ini:

int strcmp(char *string1, char*string2);

menunjukkan bahwa fungsipengambilan dua string pada Csebagai parameter danmengembalikan hasil bilanganintegar. Nilai dari hasil tersebut diaturmenurut aturan sebagai berikut: Hasilnya kosong jika kedua string

adalah sama pada karaktermelalui karakter dasar

Hasilnya negatif jika string1datang sebelum string2 dalamurutan menurut abjad

2008 | Direktorat Pembinaan SMK 299

Page 316: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Operasi String

Hasilnya positif jika string1mengikuti string2 dalam urutanmenurut abjad

Perhatikan contoh program dengan

else cout << "String tidak sama";

Pada program diatas, yangmenggunakan strcmp untukmenentukan kesamaan dua buahstring:

if(strcmp(string1, string2) == 0)cout << "string adalah sama";

hasilnya salah adalah untuk mengujidua buah string dengan operatorrelational, dapat ditulis ulang secarabenar dengan fungsi strcmp, sepertiyang ditunjukkan pada programdibawah ini:

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-sensitive ketika digunakan untukmembandingkan string. Jikapengguna memasukan "Anjing" dan

"anjing" pada program diatas, makaakan melaporkan bahwa kedua stringtidaklah sama karena ada perbedaanhuruf kapital dan kecil pada kata

300 Direktorat Pembinaan SMK| 2008

Page 317: 01 bab 01 Dasar Komputer fachkunde OK

Operasi String Bahasa Pemrorgraman

anjing. Kebanyakan compilermenyediakan strcmp versi tidakstandar untuk melaksanakanperbandingan case-insensitive.

Sebagai contoh, Borland C++mempunyai fungsi stricmp. Haltersebut hampir sama denganstrcmp kecuali mengenai case darikarakter tersebut yang akandiabaikan.

Program dibawah ini adalahcontoh yang lebih praktis bagaimana

strcmp digunakan. Hal tersebut akanminta kepada user untuk memasukansejumlah angka lebih dari satu sesuaidengan yang mereka beli. Bagianangka merupakan digit, huruf, dantanda penghubung, sehingga dengandemikian hal tersebut akan disimpansebagai suatu string. Begitupengguna memasukan angka,program akan menampilkan hargatersebut.

Program 8.7include<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

Page 318: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Operasi String

}

Keluaran program diatas adalah sebagai berikut:kode nomer gandaadalah:

Kotak besar, kode nomernya: S147‐29ARak Besar, kode nomernya: S147‐29B

masukan kode nomeryang ada ingin membeli:S147‐29A[Enter]harganya adalah $100.00

8.5. Operator logika NOTBeberapa para programmer lebih

suka menggunakan operator logikaNOT dengan strcmp ketika mengujipersamaan string-string. Karenalogika 0 dipertimbangkan sebagailogika salah, operator ! akanmengkonversi nilai tersebut menjadibenar. Ekspresi strcmp (string1,string2) akan kembali benar jikakedua string adalah sama, dan salahketika string berbeda. Pada keduastatemen berikut melaksanakanoperasi yang sama:

if (strcmp(firstString,secondString) == 0)if (!strcmp(firstString,secondString))

8.6. Pengurutan StringProgram sering ditulis dengan

dicetak berurutan menurut daftarabjad. Misalnya penggunaan sistemkomputer pada sebuah toko serba

ada untuk menyimpan nama danalamat pelanggan dalam sebuah file.Nama-nama tersebut tidak akanmuncul dalam file yang berurutanmenurut abjad tetapi dalam orderatau pesanan, dimana sesuaioperator memasukkan mereka.

Jika suatu daftar tersebut dicetakdalam urutan pesanan tersebut,maka akan menjadi sangat sulit untukmenempatkan setiap nama tersebut.Daftar tersebut mau tidak mau harusdiurutkan sebelum dicetak. Karenanilai yang dikembalikan oleh strcmpberdasarkan pada urutan alfabetrelative pesanan dari kedua stringyang sedang dibandingkan, maka haltersebut dapat digunakan dalamprogram untuk jenis string pendek.Program dibawah akan memintapemakai untuk memasukan duanama, yang kemudian dicetak dalamsecara urutan alfabet pemesan.

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

using namespace std;

int main()

302 Direktorat Pembinaan SMK| 2008

Page 319: 01 bab 01 Dasar Komputer fachkunde OK

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): supraptoMasukan Nama Lain: anwarDisini 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

PENJELASANstrlen Menerima string sebagai argumen. Pernyataan panjang

string (tidaktermasuk null terminator. Contoh Penggunaan: len = strlen strcat Menerima dua string sebagai argumen. Fungsi menambahkan isi stringkedua 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

Page 320: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Operasi String

integer, menunjukkan berapa banyak karakter yang dicopy dari stringkedua menuju string pertama. Jika kurang dari string2 sebanyak n karakter, string1 adalah ditambahkan dengan dengan karakter '\ 0'. Contoh Penggunaan: strcmp Menerima dua string argumen. Jika string1 dan string2 sama, fungsi inimemberikan 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 terjadinyastring2 ditemukan, fungsi akan mengembalikan pointer string pertama. Jika tidak, ia akan mengembalikan NULL pointer (alamat 0). Contoh Penggunaan: cout <<strstr

Fungsi yang terakhir dalam tabeldiatas adalah strstr, yang digunakanuntuk mencari sebuah string dalamdari sebuah string yang penjang.Sebagai contoh, misalnya digunakanuntuk mencari string "tujuh" didalamsebuah string kalimat yang lebihbesar "Nilai Empat dan tujuh padatahun yang lalu". Fungsiargumentasi yang pertama adalahstring dicari, dan argumentasi yangkedua adalah string untuk mencari.Jika fungsi menemukan string dalamstring yang kedua terlebih dulu haltersebut kembalikan ke alamatkejadian string didalam string yangkedua. Sebaliknya jika hal tersebuttidak dikembalikan alamat 0, ataualamat NULL. Di bawah ini adalahcontoh pengunaan fungsi tersebut:

char array[] = "Nilai empat pada tujuh tahun yang lalu";char *strPtr;cout << array << endl;strPtr = strstr(array, "tujuh");

// mencari string "tujuh"cout << strPtr << endl;

Dalam segmen program yangsebelumnya, strstr akanmenempatkan string "tujuh" di dalamstring "Nilai Empat pada tujuh tahunyang lalu”. Hal tersebut akankembalikan kealamat dari karakteryang pertama didalam "tujuh", yangselanjutnya akan disimpan dalamvariabel penunjuk pointer strPtr. Jikamenjalankan bagian dari suatuprogram engkap, segmen tersebutakan menampilkan sebagai berikut:

Nilai Empat pada tujuh tahun yang lalu tujuh pada tahun yang lalu

Fungsi strstr dapat bermanfaatdalam setiap program yang harusmenempatkan informasi didalamstring satu atau lebih. Programdibawah merupakan contoh,menyimpan suatu database sejumlahproduk dan penjelasan dalam satuarray pada string. Hal tersebutmemperbolehkan pengguna untukmengetahui penjelasan sebuahproduk dengan memasukan semuaatau bagian dari nomor produknya.

304 Direktorat Pembinaan SMK| 2008

Page 321: 01 bab 01 Dasar Komputer fachkunde OK

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 DatabaseMasukan Kode angka product untuk mencari data: CD111[Enter]CD111 CD Player

Product Database

2008 | Direktorat Pembinaan SMK 305

Page 322: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Operasi String

Masukan Kode angka product untuk mencari data: GJ987[Enter]kode tidak sesuai dengan produk.

Dalam program tersebut diatas,karena pengulangan tiap putaranmelalui string dalam pemanggilanarray maka pernyataannya adalahsebagai berikut:

strPtr = strstr(prods[index],lookUp);

Fungsi strstr mencari string yangsesuai oleh prods[index] karenanama yang dimasukkan olehpengguna, yang mana disimpandalam lookUp. Jika lookUp ditemukandi dalam prods[index], fungsi akanmengembalikan alamatnya. Dalamkasus tersebut, statemen ifmenyebabkan pengulangan akanberakhir.

if (strPtr !=NULL)break;

Di luar pengulangan tersebut, sesuaistatemen IF-ELSE untuk menentukanjika string dimasukkan oleh penggunaditemukan dalam array. Jika tidak,maka akan menginformasikankepada pengguna bahwa tidak adaproduk yang sesuai ditemukan.Sebaliknya, nomor produk dandeskripsi akan ditampilkan:

if (strPtr ==NULL)

cout << "kode tidak sesuai dengan produk.\n";

else

cout << prods[index] << endl;

8.7. Konversi String/NumericAda suatu perbedaan besar

antara nomor yang disimpan sebagaistring dan yang disimpan sebagainilai klasifikasi. String "26792"sebenarnya tidak sebagai nomor,tetapi rangkaian yang diwakili kode-kode ASCII untuk setiap digit-digitdari nomor. Rangkaian tersebutmenggunakan enam byte darimemori termasuk kode akhir string(null).

Karena itu bukan sebagai nomornyata, maka tidak mungkin untukmelaksanakan operasi matematikdengannya, kecuali jika hal tersebutdikonversi menjadi nilai numerik.Beberapa fungsi yang ada dalampustaka C++ untuk mengubahpenyajian string angka ke dalam nilainumerik dan sebaliknya. Tabeldibawah menunjukan fungsi-fungsitersebut:

Tabel 8.2. Fungsi Konversi String

FUNGSI PENJELASANato

iDalam string sebagai argument. Fungsi untuk mengubah Stringmenjadi integer dan mengembalikan nilai. Contoh ato

lDalam bahasa c, string sebagai argument. Fungsi untuk mengubahString menjadi long integer dan mengembalikan nilai.306 Direktorat Pembinaan SMK| 2008

Page 323: 01 bab 01 Dasar Komputer fachkunde OK

Operasi String Bahasa Pemrorgraman

Contoh Penggunaan: lnum = atol("500000");ato

fMenerima C‐string sebagai argumen. Fungsi mengubah string ke dua yang kembali dan nilai. Gunakan fungsi ini mengkonversi string kefloat atau double.Contoh Penggunaan: fnum = atof ( "3,14159")ito

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

Fungsi atoi mengkonversi stringmenjadi bilangan integer. Haltersebut menerima argumentasistring dan kebalika nilai bilanganinteger yang dikonversi. Di bawah iniadalah sebuah contoh dari bagai-mana cara melakukan konversi:

int num;num = atoi("1000");

Dalam statemen ini, atoimengkonversi string "1000" ke dalambilangan integer 1000. Begituvariabel num diberikan nilaitersebut,maka dapat digunakandalam operasi matematik atau setiapopersi yang memerlukan suatu nilainumerik.

Fungsi atol bekerja sepertihalnya atoi, kecuali pada nilai dengantipe data long integer. Perhatikancontoh dibawah ini:

double akan dikembalikan, sepertiditunjukkan pada program dibawahini:

doublefnum;fnum =atof("12.67");

Fungsi itoa adalah serupadengan atoi, tetapi itoa bekerjakebalikannya. Itoa akanmengkonversi suatu bilangan integerke dalam penyajian string yangmerepresentasikan bilangan integer.Fungsi itoa menerima tigaargumentasi: yaitu nilai bilanganinteger untuk dikonversi, suatupenunjuk pointer menjadi lokasimemori dimana string tersebutdisimpan, dan sebuah nomormerepresentasikan dasar-dasarsebuah nilai yang dikonversi. Dibawah ini adalah satu satu contohinstruksinya:

longbigNum;bigNum =atol("500000");

sebagaimana yang diinginkan, fungsiatof menerima sebuah argumentasistring dan melakukan konversi stringmenjadi double. Sebuah nilai numerik

char numArray[10]; itoa(1200, numArray,10); cout << numArray << endl;

Sebuah potongan programtersebut diatas akan mengkonversibilangan integer 1200 menjadi string.

2008 | Direktorat Pembinaan SMK 307

Page 324: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Operasi String

String tersebut kemudian disimpan didalam sebuah array dengan namanumArray. Argumentasi yang ketiga,10, berarti nomor harus ditulis dalamsistim desimal, atau notasi dasar 10.Keluaran dari statemen cout diatasadalah:

1200

Sekarang perhatikan programdibawah ini, yang menggunakansebuah fungsi konversi string-to-number, atoi. Pada program memintapengguna untuk memasukan sebuahrangkaian nilai-nilai, atau surat Qatau q untuk berhenti. Rata-rata dariangka-angka tersebut kemudiandihitung 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

Page 325: 01 bab 01 Dasar Komputer fachkunde OK

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: 45Masukan bilangan selanjutnya atau tekan Q untuk keluar: 67Masukan bilangan selanjutnya atau tekan Q untuk keluar: 65Masukan bilangan selanjutnya atau tekan Q untuk keluar: 45Masukan bilangan selanjutnya atau tekan Q untuk keluar: 43Masukan bilangan selanjutnya atau tekan Q untuk keluar: 23Masukan bilangan selanjutnya atau tekan Q untuk keluar: 23Masukan bilangan selanjutnya atau tekan Q untuk keluar: 45Masukan bilangan selanjutnya atau tekan Q untuk keluar: 67Masukan bilangan selanjutnya atau tekan Q untuk keluar: qReratanya adalah: 47

Pemanggilan fungsi strcmpuntuk membandingkan dua string.Jika kedua string serupa, maka nilaiakan diisi dengan 0. sebaliknya jikatidak maka nilai yang diisikan bukannol. Sebagaimna statemen while,strcmp digunakan untuk menentukan,jika string masukannyamenggunakan salah satu "Q" atau"q".

while ((strcmp(input, "Q") !=0)&&(strcmp(input, "q") != 0))

Jika user tersebut belummemasukkan karakter "Q" atau "q"maka program akan menggunakanatoi untuk mengkonversi string

kedalam pada masukan menjadibilangan integer dan menambahkannilai total secara keseluruhansebagaimana dalam insruksi berikutini:

total += atoi(input); // Keep a running total

user kemudian akan meminta nomorberikut. Ketika semua angka-angkatelah dimasukkan, user mengakhiripengulangan dengan memasukankarakter "Q" atau "q". Jika satu ataulebih angka-angka tersebut telahdimasukkan, maka perhitungan rata-rata angka-angka tersebut akanditampilkan.

8.8. Menguji sebuah KarakterLibrary bahasa C++

menyediakan beberapa fungsi yangmemperbolehkan seorang programeruntuk menguji nilai dari sebuah

karakter. Fungsi tersebut mengujisebuah argumentasi int tunggal danhasil pengujian tersebut berupabenar atau salah. Sebuah bilangan

2008 | Direktorat Pembinaan SMK 309

Page 326: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Operasi String

integer adalah Kode ASCII dari suatukarakter. Sebagai contoh padasegmen program berikut dibawahmenggunakan fungsi isupper 86untuk menentukan jika karakter lolosdari sebagai huruf besar sebagaiargumentasi yang diinginkan. Jika haltersebut sesuai maka fungsi akanbenar. Jika tidak, maka hasilnyasalah.

char letter= 'a';if(isupper(letter))

cout << " huruf uppercase.\n";

else

cout << " huruf bukan

uppercase.\n";

Pada contoh program diatasmenggunakan variabel huruf yangberisi karakter huruf kecil, makaisupper akan salah. Sehinggastatemen akan menyebabkan pesanyang muncul "huruf bukanuppercase". Tabel dibawahmerupakan daftar beberapa fungsiuntuk menguji karakter. Tiap-tiapfungsi diterapkan dalam file headercctype, maka file header harusdipastikan tertulis dalam programketika menggunakan fungsi tersebut.

Tabel 8.3. Fungsi Pengujian Karakter

FUNGSI

KARAKT

PENJELASAN

isalpha Returns betul (angka bukan angka nol) jika argumen adalahhuruf alfabet. Returns salah jika argumen bukan 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 berupakarakter yang dapat dicetak (termasuk spasi). jika tidak makaispunct Returns betul (angka bukan angka nol) jika argumen yangdicetak adalah karakter selain angka, huruf, atau ruang. Selain itu salah.isupper Returns betul (angka bukan angka nol) jika argumen adalahhuruf besar. Selain itu salahisspace Return betul (angka bukan angka nol) jika argumen berupakarakter spasi, selain itu salah.Karakter spasi adalah salah satu dari karakter berikut ini: spasi ' '

310 Direktorat Pembinaan SMK| 2008

Page 327: 01 bab 01 Dasar Komputer fachkunde OK

Operasi String Bahasa Pemrorgraman

8.9. Deskripsi Fungsi KarakterProgram dibawah menggunakan

beberapa fungsi seperti pada tabeldiatas. Hal tersebut akan mintapengguna untuk memasukan sebuah

karakter dan selanjutnya tampilkansebagai pesan, tergantung pada hasildari tiap fungsi yang digunakan.

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 yangdimasukan adalah: g KodeASCIInya adalah: 103Itu adalah karateralfabet.Huruf yang anda masukan adalahhuruf kecil..

2008 | Direktorat Pembinaan SMK 311

Page 328: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Operasi String

Program dibawah akanmenampilkan sebuah aplikasi praktismengenai fungsi uji karakter.Program tersebut menguji tujuh

karakter nomor pelanggan untukmenentukan apakah sesuai denganformat atau bentuk yang tepat.

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

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

Page 329: 01 bab 01 Dasar Komputer fachkunde OK

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): ABC1235Nomer 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): sasfewfrwhal tersebut tidak sesuai dengan formatangkapelanggan. contohnya adalah seperti dibawah ini:ABC1234

Dalam program diatas, nomorpelanggan diharapkan terdiri darihuruf alfabet yang diikuti oleh digit-digit. Kemudian fungsi testNummenerima sebuah array dan mengujikarakter awal sesuai denganpengulangan berikut ini:

for (count = 0; count < ALPHA_LEN;count++){

if (!isalpha(custNum[count]))return false;

}

Fungsi isalpha untukmengembalikan kondisi benar jikaargumentasi adalah satu karakteralfabet. operator ! digunakandidalamnya, jika statemen tersebutuntuk menentukan apakah karakter

yang diuji bukan berupa alfabet. Jikahal ini terjadi pada beberapa dari tigayang karakter pertama, fungsitestNum akan salah. Demikian juga,karakter keempat berikutnya diujidengan pengulangan berikut ini:

for (count = ALPHA_LEN; count < NUM_LENGTH ‐ 1; count++){

if (!isdigit(custNum[count]))return false;

}

Fungsi isdigit akan bernilai benarjika argumentasi merepresentasikankarakter tentang semua digit 0sampai 9. Operator ! digunakan untukmenentukan jika karakter yang diujibukan sebuah digit. Ini terjadibiasanya pada empat karakter

2008 | Direktorat Pembinaan SMK 313

Page 330: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Operasi String

terakhir, fungsi testNum akan bernilai salah.

Jika nomor pelangganmengggunakan bentuk yang tepat,fungsi tersebut akan melalui sikluskedua pengulangan tanpa ada hasil

yang nilai salah. Di kasus tersebut,garis terakhir dalam fungsi tersebutadalah statemen dengan hasil yangbenar, dimana hal tersebut menandaibahwa nomor pelanggan adalahvalid.

8.10. Konversi KarakterLibrary Bahasa C++

menyediakan dua fungsi, toupper dantolower. Untuk mengubah kasus darisebuah karakter. Fungsi tersebutdigambarkan pada Tabel dibawah ini.

Fungsi ini merupakan prototypedalam file header cctype, makapastikan untuk memasukkan duafungsi didalamnya.

Tabel 8.4. Fungsi Pengubah Karakter

FUNGSI DEFINISItoupper Mengembalikan huruf besar setara dengan

argumen.tolower Mengembalikan lowercase setara dengan argumen

Keduanya dari fungsi pada tabeldiatas akan menerima sebuahrepresentasi bilangan integer kodeASCII dari suatu karakter yangdikonversi dan mengembalikanrepresentasikan bilangan integerKode ASCII dari huruf besar atauhuruf kecil setara. Tiap fungsi hanyamengembalikan argumentasinya, jikakonversi tidak bisa dibuat atau takdiperlukan. Sebagai contoh, jikaargumentasi tersebut pada toupperbukan surat huruf kecil, lalu toupperhanya kembalikan argumentasi yangada tanpa mengubahnya. Prototipefungsi-fungsi tersebut adalah:

int toupper(int ch);int tolower(int ch);

kenyataannya fungsi dua veriabel ini

bilangan integer pernyataan sebagaiberikut:

cout << toupper('a'); //prints 65

pada potongan program diatas akanmencetak bilangan integer KodeASCII dari 'A’. Untuk mendapatkancetakan karakter, maka dapatmemasukan hasil kenilai tipe datachar, seperti dalam potonganprogram dibawah ini:

cout <<static_cast<char>(toupper('a'));// printsA

atau dapat juga dengan memberihasil ke nilai sebuah variabel karakterpertama dan kemudian karaktertersebut dicetak:

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

314 Direktorat Pembinaan SMK| 2008

Page 331: 01 bab 01 Dasar Komputer fachkunde OK

Operasi String Bahasa Pemrorgraman

cout << ch; //prints A

Sebagaimana telah disebutkandiatas, fungsi toupper akanmengembalikanya tanpa perubahan,jika hal tersebut buka berupa huruf:

cout <<static_cast<char>(toupper('&'));// prints&

atau suatu huruf tetapi itu sudahmerupakan huruf besar:

cout <<static_cast<char>(toupper('B');// printsB

Karena uraian mengenai toupper dantolower dilewati oleh nilai, fungsitersebut tidak akan mengubahparameter yang mereka miliki:Sebagai gantinya, mereka hanyamengembalikan ekivalensi hurufbesar atau huruf kecil. Sebagaicontoh, di dalam sebuah segmen

program yang berikut, variabel hurufdiatur menjadi nilai 'A'. Fungsi toloweruntuk mengembalikan karakter 'a’,ketika huruf masih berisi 'A'.

char letter =‘A’;char ch =tolower(letter);cout << ch <<endl;cout <<letter;

potongan program diatas kalau dicompile menampilkan hasil sebagaiberikut:

aA

Program berikut dibawah untukmendemontrasikan fungsi toupperdalam sebuah pengulangan sampaiada kemungkian user memasukansalah satu huruf Y atau N.

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

Page 332: 01 bab 01 Dasar Komputer fachkunde OK

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 berikutProgram untuk menghitung luas lingkaranMasukan jari‐jari lingkaran: 77Luas lingkaran adalah 18626.49Akan menghitung lagi? (Y or N) y

Masukan jari‐jari lingkaran: 23Luas lingkaran adalah 1661.90Akan menghitung lagi? (Y or N) n

8.11. Menulis stringSetelah mampu melewati materi

mengenai array, maka anda dapatmenulis fungsi secara sendiri untukmemproses sebuah string. Sebagai

contoh, program dibawah ini adalahmenggunakan sebuah fungsi untukmelakukan copy atau menyalin stringdari 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

Page 333: 01 bab 01 Dasar Komputer fachkunde OK

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 dari29 karakter: hello saya sedang belajarString yang anda masukanadalah:hello saya sedangbelajar

Yang perlu diperhatikan padaprogram diatas adalah pada fungsistringCopy yang tidak menerima satubentuk array. Program tersebuthanya melakukan copy karakter-karakter dari string1 ke dalam string2sampai menemui sebuah hal yangdapat mengakhiri atau tanda nulldalam string1.

Ketika sebuah tanda yangmengakhiri tersebut ditemukan danpengulangan sudah mencapai ujungdri string, statemen terakhir dalam

fungsi memberi suatu tanda batal(karakter '\0' ) hingga selesai string2,dengan demikian hal tersebut dapatdiakhiri dengan baik.

Program dibawah menggunakanhandling function (fungsi untukmenangani) string: nameSlice.Program akan minta pengguna ituuntuk memasukan nama awal danakhir pengguna, yang dipisahkannoleh spasi. Kemudia fungsi mencaristring untuk spasi dan mengganti

2008 | Direktorat Pembinaan SMK 317

Page 334: 01 bab 01 Dasar Komputer fachkunde OK

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 indonesiaNama depan anda adalah: supra

Pengulangan pada variabelpotongannama dimulai saat karakteryang pertama dalam array dan

melakukan scan string, kemudianmencari baik sebuah spasi atauterminator null:

318 Direktorat Pembinaan SMK| 2008

Page 335: 01 bab 01 Dasar Komputer fachkunde OK

Operasi String Bahasa Pemrorgraman

while (userName[count] != ' ' && userName[count]!= '\0') count++;

Jika karakter dalamuserName[count] bukanlah sebuahspasi atau terminator null, countakan ditambah dengan karakterberikutnya yang akan diuji. Dengan

contoh memasukan string namadepan dan nama belakang supraindonesia”, pada program pengulang-an menemukan pemisah spasi“suprapto” dan “indonesia”, padauserName[5]. Ketika pengulanganberhenti, count diatur sampai 5. Akanlebih jelasnya jika memperhatikangambar dibawah ini:

Perulangan akan berhenti ketika menemukan tanda spasi atau userName[5]

s u p r a i n d o n e s i a \00 1 2 3 4 5 6 7 8 9 10 11 1213 14 15 16 subskrip

Begitu pengulangan sudahdiselesaikan, userName[count] akanberisi salah satu spasi atauterminator null. Jika berisi spasi, dandiikuti tanda if statemen kemudianmenggantikannya dengan terminatornull:

if (userName[count] == ' ')userName[count] = '\0';

sehingga dapat diilustrasikan sepertipada gambar dibawah ini:

Ruangan diberi \0 atau tanda sebagai string selesai

s u p r a \0 i n d o n e s i a \00 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16subskrip

8.12. Pointer untuk menguraikan StringPenunjuk pointer sangat

bermanfaat untuk menulis sebuahfungsi proses pada string. Jikaalamat awal sebuah string berubahmenjadi sebuah variabel parameterpenunjuk pointer, maka akan dapat

diasumsikan bahwa semua karakterdari alamat tertinggi akan menahantanda null menjadi bagian dari string.Program dibawah menunjukkansebuah fungsi, countChars, yangmenggunakan penunjuk pointer untuk

2008 | Direktorat Pembinaan SMK 319

Page 336: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Operasi String

menghitung jumlah karakter khusus muncul didalam string.

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

using namespace std;

// Fungsi prototipeint 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

Page 337: 01 bab 01 Dasar Komputer fachkunde OK

Operasi String Bahasa Pemrorgraman

Masukan String (lebih dari 50 karakter): saya akan pergiberangkat ke kantorMasukan karakter dan saya akanmenghitung berapa kali yang munculdalam string yang telah anda tulis: a aMuncul: 7 kali.

Di dalam fungsi countChars, strPtrpoin pada string tersebut akan dicaridan ch berisi karakter untuk mencari.Pengulangan while akan di ulangiketika panjang karakter strPtr poinpada akhir bukan terminator null:

while (*strPtr !='\0')

Dalam pengulangan, statemen ifyang mengikutinya membandingkankarakter strPtr poin dengan karakterdidalam ch:

if (*strPtr ==ch)

Jika keduanya sama, variabel timesakan diincrement. Statemen yangterakhir dalam pengulangan tersebutadalah:

strPtr++;

statemen increment menaikan alamatdalam strPtr. Ini menyebabkan strPtrakan menunjuk karakter berikutnyadidalam sebuah string. Kemudianpengulangan memulai kembali.Ketika strPtr akhirnya menjangkauterminator null, pengulanganmengakhiri dan fungsimengembalikan nilai dalam fungsitime.

8.13. Class String pada C++Dari satu segi pandangan

metode pemrograman yang mudah,library standar class stringmenawarkan beberapa keuntunganpada string. Ketika anda sudahmengetahui dalam bab ini, classstring mempunyai beberapa anggotafungsi dan operator yang mempunyaimuatan lebih. Hal ini jelasmenyederhanakan tugas, sepertipenempatan sebuah karakter ataustring di dalam suatu string, yang jikadilakukan tanpa fungsi akan

mengalami kesulitan danmembosankan untuk melakukanoperasi string.

Setiap program class stringharus menggunakan #includesebagai file header string. Objectstring dapat diciptakan denganbeberapa construktor. Programdibawah menunjukkan duaconstruktor class string: sebagaidefault construktor dan konversikonstruktor string ke menjdai obyekstring.

Program 8.17#include<conio.h>#include <iostream>#include <string>

using namespace std;

2008 | Direktorat Pembinaan SMK 321

Page 338: 01 bab 01 Dasar Komputer fachkunde OK

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 programselain contoh program diatas,perhatikan tabel pemakaian

konsruktor string yang diberikandalam tabel dibawah ini:

Tabel 8.5. Pemakaian Konsruktor String

DEFINITION DESCRIPTIONstring 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, yangmerupakan salinan dari person2. person2 mungkin salah satu objek atau string karakterstring set1(set2, 5); Mendefinisikan string bernama set1 objek yangdiinisialisasi untuk pertama lima karakter dalam karakter array set2.string lineFull('z', 10); Mendefinisikan string benda bernama lineFull diinisialisasi dengan10 'z' karakter.string

firstName(fullName,0, 7);

Mendefinisikan string benda bernama firstname,diinisialisasi dengan substring dari string fullName. Substring adalah tujuh karakter,

Hal yang perlu diketahi pada programdibawah, menggunakan operator =untuk memberi nilai obyek string.

class string memberi muatan lebihpada beberapa operator, yangdigambarkan pada Tabel dibawah.

322 Direktorat Pembinaan SMK| 2008

Page 339: 01 bab 01 Dasar Komputer fachkunde OK

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 <

<Menyisipkan string ke dalam stream.

= Memasukan string pada sebelah kanan ke obyekstring 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 haltersebut merujuk pada karakter pada pengembalian Relational

OperatorsMasing‐masing operator penghubung diimplementasikan: < > <=>= == !=

Program dibawah digunakan untukmendemontrasikan sebagian darioperator string

}Program 8.18

str3 += "GHI";cout << str3 << endl;return 0;

#include <iostream>#include <string>

Keluaran program tersebut diatasadalah sebagai berikut:

using namespace std;

int main(){

string str1, str2,str3;str1 ="ABC";str2 ="DEF";str3 = str1 +str2;

cout << str1 <<endl; cout <<str2 << endl;cout << str3 <<endl;

ABC DEF ABCDEFABCDEFGHI

Class string juga mempunyaibeberapa fungsi anggota. Sebagaicontoh, fungsi size mengembalikanpanjang string. Hal tersebutdidemontrasikan dalam pengulanganFor pada program dibawah ini:

2008 | Direktorat Pembinaan SMK 323

Page 340: 01 bab 01 Dasar Komputer fachkunde OK

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

elsecout << "str1 tidak lebih kecil daripada str2\n";

getch();return 0;

}

Keluaran program diatas adalah sebagai berikut:ABCDEFstr1 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 PENJELASANtheString.append(str); Menambahkan str ke theString. str bisa

menjadi objekatau string karakter array.theString.append(str, x,

n);n jumlah karakter dari str, dimulai pada posisi x, akanditambahkan ke theString. jika TheString terlalu kecil, fungsi akan melakukan copy sejumlah karakter yang mungkin bisa

324 Direktorat Pembinaan SMK| 2008

Page 341: 01 bab 01 Dasar Komputer fachkunde OK

Operasi String Bahasa Pemrorgraman

theString.append(str, n);

N karakter pertama dari array karakter str yangditambahkan 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 theString.assign(str, n); karakter pertama n dari array karakter str ditugaskanke theString.theString.assign(n, 'z'); Memberikan salinan n 'z' menuju theString.

theString.at(x); Mengembalikan karakter pada posisi x dalamstring.theString.begin(); Kembali pada sebuah iterator yang menunjuk kekarakter pertama pada string.theString.capacity(); Mengembalikan ukuran penyimpanan dialokasikanuntuk string.theString.clear(); Membersihkan string dengan menghapus semuakarakter yang disimpan di dalamnya.theString.compare(str); Melakukan perbandingan seperti fungsi strcmpdengan nilai yang sama kembali. str bisa menjadi string objek atau karakter theString.compare(x, n,

str);Membandingkan theString dan str, mulaidari posisi x,dan dilanjutkan terus untuk n karakter.pengembalian nilai seperti strcmp. str bisamenjadi objek string atau karakter array.theString.copy(str, x,

n);menyalin karakter str ke array theString, mulai padaposisi 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 stringdihentikan, 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 daristring di theString. (Untuk informasi lebih lanjut tentang iterators, lihat Bab15).

Returns an iterator pointing to the last character of the string in theString. (For theString.erase(x, n); Erases n karakter dari theString, mulai di posisi x.

2008 | Direktorat Pembinaan SMK 325

Page 342: 01 bab 01 Dasar Komputer fachkunde OK

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

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.insert(x, str); Menyisipkan salinan str ke theString, mulai di posisi x. str mungkin salah satu objek atau string karakterarray.

Inserts a copy of str into theString,beginning at position x. str may betheString.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 diposisi xdengan karakter dalam string str objek.Replaces the n characters in theString beginning at position x with the theString.resize(n, 'z'); Perubahan besarnya alokasi di theString ke n. Nkurang jika dibandingkan dengan ukuran string, string yang dipotonguntuk n karakter. Jika n lebih besar, string yang diperluas dan 'z' yang ditambahkan pada akhir waktu yang cukup untuk mengisi ruang‐ruang baru.

326 Direktorat Pembinaan SMK| 2008

Page 343: 01 bab 01 Dasar Komputer fachkunde OK

Operasi String Bahasa Pemrorgraman

is less than the current size of the string, thestring istruncatedto 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. Thesubstring adalah n karakter dan mulai pada posisi x dari theString.theString.swap(str); Swaps isi dengan theString str.

8.14. Membuat Class String SendiriClass string pada bahasa C++

secara otomatis menangani banyaktugas-tugas yang terlibat dalampenggunaan string, seperti alokasimemori dinamis dan memeriksamargin dan lain sebagainya. Ia jugamerupakann operator overloadseperti + dan =, dan juga memilikibanyak anggota fungsi yangmemudahkan dalam bekerja denganstring. Dalam beberapa bagian, kitaharus membuat sebuah data tipestring dengan banyak kelas fungsi C++.

Dalam proses, kita lihat misalnyapada contoh copy constructorkeberatan dan operator penuh aksi,serta contoh-contoh teknikpemrograman yang berguna sebagaisolusi dari berbaai masalah. KelasMyString yang ditetapkan dalambagian ini adalah jenis data abstrakuntuk menangani string. Memilikibanyak keunggulan yang dimiliki olehkelas C++ string yang diberikan olehStandard Template Library: Memori yang dteralokasi secara

dinamis untuk setiap string yangtersimpan dalam MyString objek.Programmer yang menggunakankelas ini tidak perlu khawatir

dengan seberapa besar untukmembuat array.

Strings mungkin akan ditugaskanke objek dengan MyString =operator. Programmer yangmenggunakan kelas ini tidak perlumemanggil fungsi strcpy.

Satu string mungkin concatenatedlain dengan + = operator. Inimenghilangkan kebutuhan untukfungsi strcat.

Strings mungkin akan diuji untukkesetaraan dengan == operator.Programmer yang menggunakankelas ini tidak perlu memanggilfungsi strcmp.

Pada sebuah Kelas MyStringmemiliki pointer sebagai anggota dansecara dinamis mengalokasikanmemori untuk menyimpan nilai string,konstruksi salinan disediakan. Fungsiini akan menyebabkan objek diaturdengan benar datanya ketikadiinisialisasi dengan obyek MyStringlain.

Kelas MyString memiliki 2overloaded = operator. Yang pertamaadalah untuk menempatkan satuMyString ke objek lain. fungsiOperator ini dipanggil ketika operanddi sebelah kanan dari tanda = adalah

2008 | Direktorat Pembinaan SMK 327

Page 344: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Operasi String

MyString objek, seperti yang terlihat pada segmen kode berikut:

MyString first("Hello"),second;second =first;

Kedua versi MyString = dari operatoruntuk menempatkan tradisional stringke MyString objek. Operator fungsi inidipanggil ketika operand di kanan =adalah sebuah string konstan ataupointer ke sebuah string (sepertinama sebuah char array). Hal iniditunjukkan pada segmen programberikut:

MyStringname;char who[] ="Jimmy";name =who;

Operator + = dirancang untukmenggabungkan string padaMyString kanan ke kiri pada objek.Seperti operator =, MyString memilikidua versi =. + Versi pertama inidirancang untuk bekerja pada saatyang tepat operand adalah MyStringobyek lain, seperti yang ditunjukkandalam program ini segmen:

MyString first("Hello "),second("world");first +=second;

Kedua versi dari operator + = akandipanggil ketika operand sebelahkanan adalah string literal ataupointer ke karakter :

MyStringfirst("Hello ");first +="World";

Objek MyString yang memilikikelebihan beban versi dari operator== untuk melakukan ujiankesetaraan. Seperti operator lainnya,

versi yang pertama dirancang untukbekerja dengan objek MyStringlainnya dan yang kedua dirancanguntuk bekerja dengan string C++konvensional. == Fungsi akankembali jika string berada di sebelahkanan operand sesuai dengananggota str panggilan objek. Jikakedua operands string tidak cocok,fungsi return false. fungsi Operator inimemungkinkan programmermenggunakan kelas ini untukmembangun penghubung ekspresiseperti ini:

MyString name1("Supra"), name2("Supra");if (name1 ==name2)

cout << "nama adalah sama.\n";else

cout << "nama adalah berbeda\n";

MyStringname1("Suprapto");if (name1 =="Supra")

cout << "nama adalah sama.\n";else

cout << "nama adalah berbeda.\n";

Objek MyString memiliki duaversi yan berkelebihan beban > lebihbesar daripada operator untukmelakukan tes, dan < operator untukmelakukan kurang dari tes. Versipertama dari masing-masingdirancang untuk bekerja denganobjek lain MyString dan yang keduaini dirancang untuk bekerja dengan C+ + tradisional string. (fungsiperpustakaan menggunakan fungsistrcmp untuk menentukan apakahsebuah lebih daripada atau kurangdaripada hubungan yang ada.)

Sebuah fungsi > return benar jikastr anggota panggilan objek lebihbesar daripada string dalam operand

328 Direktorat Pembinaan SMK| 2008

Page 345: 01 bab 01 Dasar Komputer fachkunde OK

Operasi String Bahasa Pemrorgraman

kanan. Jika tidak, fungsi return false.Yang <fungsi return true jika stranggota panggilan objek kurang daristring dalam operand kanan. Jikatidak, mereka kembali palsu.Operator fungsi ini memungkinkanprogrammer menggunakan kelas iniuntuk membangun penghubungekspresi seperti yang ditampilkandalam program ini segmen:

MyString name1("Suprapto"), name2("Supra");if (name1 >name2)

cout << "Suprapto lebih besardaripada Supra\n";

else

cout << "Suprapto tidal lebih besar daripada Supra.\n";

MyStringname3("Suprapto");

if (name3 <"Supra")

cout << "Suprapto lebih kecil daripada Supra.\n";

else

cout << "Suprapto tidak lebih kecil daripada\n";

Pada fungsi > = kembali benar,jika str anggota panggilan objek yanglebih besar dari atau sama denganstring yang ada di sebelah kananoperand. Jika tidak, fungsi returnsalah. Fungsi <= return benar jika stranggota panggilan objek kurang dariatau sama dengan string yang ada disebelah kanan operand. Jika tidak,mereka kembali palsu. Operatorfungsi ini memungkinkan programmermenggunakan kelas ini untukmembangun penghubung ekspresiseperti yang ditampilkan dalamsegmen program ini:

MyString name1("Suprapto"), name2("Supra");if (name1 >= name2)

cout << "Suprapto adalah lebih besar atau sama dengan Supra.\n";

elsecout << "Suprapto

lebih kecil daripada Supra.\n";

MyString name3("Suprapto");if (name3 <= "Supra")

cout << "Suprapto lebih kecil atau sama dengan Supra.\n";

Objek MyString memiliki duaversi > = operator untuk melakukanoperasi lebih besar daripada atau tessama dengan, dan <= operator untukmelakukan kurang dari atau teskesamaan. Versi pertama darimasing-masing dirancang untukbekerja dengan objek lain MyStringdan yang kedua ini dirancang untukbekerja dengan C++ tradisionalstring.

elsecout << "Suprapto lebih

besar samadengan

Supra.\n";

Program dibawah menunjukkanbagaimana program MyStringmemperlihatkan rangkaian stringnya.Selain itu, kode utama programmendemonstrasikan bagaimanaMyString memungkinkan programmeruntuk memperlakukan string lebihbanyak yang lain seperti mengikutkantipa data didalamnya.

Program 8.20

Page 346: 01 bab 01 Dasar Komputer fachkunde OK

2008 | Direktorat Pembinaan SMK 329

Page 347: 01 bab 01 Dasar Komputer fachkunde OK

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 berikutObject1: Ini Object2: adalah Object3: menguji. Object4: IniObject5: adalah hanya menguji. String1: sebuah pengujian.object1: Ini adalah menguji. Ini hanya menguji sebuah pengujian.

8.15. Studi Kasus

Page 348: 01 bab 01 Dasar Komputer fachkunde OK

330 Direktorat Pembinaan SMK| 2008

Page 349: 01 bab 01 Dasar Komputer fachkunde OK

Operasi String Bahasa Pemrorgraman

Sebagai programmer untukprogrammer lanjut pada SoftwareEnterprises, kita biasanya akandiminta untuk mengembangkan satukelas yang bernama mata penyisipankoma dan tanda dolar ($) di lokasiyang sesuai dalam sebuah stringyang berisi jumlah dolar tidak

diformat. Kelas konstruktor harusmenerima string objek atau pointer kestring bahasa C yang berisi nilaiseperti 1084567,89. Kelas harusmenyediakan fungsi anggota yangmengembalikan obek string menjadisejumlah formatted-dollar, seperti $1.084.567,89.

Tabel 8.8. Keanggotaan Variabel

MEMBER VARIABEL

PENJELASANOriginal Obyek string menahan string asli

yang bersifat unformatted.formatted Obyek string menahan string yang bersifat

formatted.

Tabel 8.9. Fungsi Keanggotaan

FUNGSI KEANGGOTAAN

PENJELASANConstructor Disertakan dalam obyek string sebagai

argumen. Obyekdisalin ke original member, dan memanggil fungsi keanggotaan dollarFormat Menyalin keanggotaan original menjadi formatmember. Tanda koma dan dolar disertakan dalam memasukkan ke lokasigetOriginal 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

Page 350: 01 bab 01 Dasar Komputer fachkunde OK

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 LatihanJawablah soal latihan dibawah ini dengan baik dan benar.1. Apa yang dimaksud dengan string2. Tulislah program sederhana dengan string untuk menampilkan tulisan

"Hallo saya siswa smk"3. Buatlah program untuk menggabungkan dua string "hello" dan "apa

khabar"4. Apa perbedaan anatara string dengan pointer5. Tulislah program yang menggunakan pointer untuk operasi string6. Sebutkan beberapa fungsi string pada bahasa c++7. Tulislah program yang digunakan untuk membandingkan dua string8. Sebutkan fungsi untuk menangani string pada bahasa c++9. Buatlah program untuk mengkonversi string10. Apa yang dimaksud dengan fungsi topupper dan tolower11. Sebutkan beberapa operator string pada bahasa c++

332 Direktorat Pembinaan SMK| 2008

Page 351: 01 bab 01 Dasar Komputer fachkunde OK

Array Bahasa Pemrorgraman

BAB 9ARRAY

9.1. Pengertian Array9.2. Deklarasi Array9.3. Inisialisasi Array9.4. Array multi dimensi9.5. Mengurutkan element Array9.6. Contoh program array9.7. Soal Latihan

9.1. Pengertian ArrayTipe data array menjelaskan

jangkauan nilai yang dapatditampung pada sebuah variabel dankumpulan operasi yang dapatdilakukan terhadap variabel tersebut.Dengan pengecualian pada stringkarakter, semua tipe yang telahdipelajari sampai saat ini hanya dapatmenampung sebuah nilai.

Pada saat tertentu program yangdibuat dibutuhkan untukmenyelesaikan suatu permasalahanyang dikehendaki suatu variabel yangdapat menampung banyak nilai.Sebagai contoh variabel skorbarangkali mencatat skor ujian dari100 siswa. Demikian juga variabelgaji mungkin menampung gaji yangberlainan dari masing-masingpegawai suatu perusahaan.

Array adalah struktur data yangdapat menyimpan sejumlah nilaibertipe sama, sebagai contoh kitadapat menciptakan sebuah arrayyang dapat menampung 100 nilaibertipe int dan array kedua yang

dapat menampung 25 nilai bertipefloat. Setiap nilai yang ditugaskan kearray harus bertipe sama denganarray tersebut

Array adalah variabel yangmampu menyimpan sejumlah nilaiyang bertipe sama. Untukmendeklarasikan sebuah array, harusdisebutkan tipe dari array yang dibuatmisalnya int, float atau double danjuga ukuran array. Untuk menentukanukuran array,perlu ditempatkanjumlah nilai yang dapat disimpanarray dalam sebuah tanda kurungkurawal siku yang terletak sesuahnama array.

Deklarasi berikut sebagai contohuntuk menciptakan array bernamaskor yang mampu menyimpan 100skor nilai yang bertipe int.

intskor[100];

Pada saat dideklarasikan sebuaharray, compiler C mengalokasikanmemori yang cukup untuk

2008 | Direktorat Pembinaan SMK 333

Page 352: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Array

menampung semua elemen sesuaidengan yang dideklarasikan.Masukan pertama berada pada lokasi0. Sebagai contoh berdasarkan arrayskor, pernyataan berikut menugaskannilai 80 pada elemen pertama dariarray

skor[0] =80;

Karena elemen pertama dariarray dimulai dengan offset 0, makaelemen terakhir dari array adalahsatu lokasi sebelum ukuran array.Berdasarkan array skor diatas,pernyataan berikut menugaskan nilaike elemen terakhir dari array.

skor[99] =75;

Untuk inisialisasi array adabeberapa macam yang seringdilakukan sebagai contoh perhatikanpotongan program berikut ini :

char title[] = "DasarPemrograman";char section [64] ="Arrays";

Pada kasus yang pertama,compiler C akan mengalokasikan 17byte untuk menampung string. Padakasus yang kedua, compiler akanmengalokasikan array 64 byte,menginisialisasi enam karakter yangyang pertama dengan huruf-huruf“Arrays” dan karakter NULL.Kebanyakan compiler juga akanmenginisialisasi lokasi byte-bytetersisa dengan NULL. Pada saatdideklarasikan array dengan tipe lain,kita juga dapat menginisialisasinyadengan cara yang sama. Sebagaicontoh pernyataan berikutmenginisialisasi array integer scoresdengan nilai 80, 70, 90, 85 dan 80.

int scores[5] = {80, 70, 90, 85, 80} ;

Pada saat kita menugaskan nilaiawal ke suatu array , kita harusmelingkupi nilai-nilai tersebut dengantanda kurung kurawal{}. Dalam halini, ukuran array sesuai denganjumlah nilai yang ditugaskan ke array.Akan tetapi pernyataan berikut akanmenugaskan empat nilai titikmengambang ke array yang dapatmenyimpan 64 nilai.

float salaries[64] ={2500000.0,3200000.0, 4400000.0, 5500000.0};

Tergantung dari compiler yangdigunakan, nilai-nilai yang ditugaskanke elemen-elemen yang tidak secaraeksplisit ditugaskan mungkin diisidengan 0. Sebagai pegangan kitaharus tidak menganggap bahwacompiler akan menginisialisasielemen-elemen yang lain. Jika kitatidak menyebutkan ukuran array,kompiler akan mengalokasikanmemori yang hanya cukup untukmenampung nilai-nilai yangdisebutkan. Deklarasi array berikutmenciptakan array yang cukupmenampung tiga buah nilai yangbertipe long.

long planets[] = {1234L, 5678L, 12347L};

Array adalah suatu variabel yangterdiri dari sekumpulan data dimanadata-data tersebut mempunyai tipedata yang sama. Setiap datadisimpan dalam alamat memori yangberbeda-beda dan disebut denganelemen array. Setiap elemenmempunyai nilai indek sesuai denganurutannya. Melalui indek inilah kitadapat mengakses data-data tersebut.

334 Direktorat Pembinaan SMK | 2008

Page 353: 01 bab 01 Dasar Komputer fachkunde OK

Array Bahasa Pemrorgraman

Indek dari elemen array ini, baikdalam bahasa C++ maupun Javadimulai dari 0, bukan 1 seperti dalambahasa Pascal.

Dalam beberapa literatur, arraysering disebut (diterjemahkan)sebagai larik. Array adalah kumpulandari nilai-nilai data bertipe samadalam urutan tertentu yangmenggunakan sebuah nama yangsama. Nilai-nilai data di suatu arraydisebut dengan elemen-elemenarray. Letak urutan dari elemen-elemen array ditunjukkan oleh suatusubscript atau indeks. Suatu arrayberdimensi satu dideklarasikan dalambentuk umum berupa:

tipe_datanama_var[ukuran];

dimana : tipe_data : untuk menyatakan tipe

dari elemen array, misalnya int, char, float.

nama_var : nama variabel array ukuran : untuk menyatakan jumlah

maksimal elemen array.Contoh pendeklarasian array :

floatnilai_tes[5];

pada program diatas menyatakanbahwa array nilai_tes mengandung 5elemen bertipe float. Pada bahasa C,data array akan disimpan dalammemori yang berurutan. Elemenpertama mempunyai indeks bernilai0. Jika variabel nilai_tesdideklarasikan sebagai array dengan5 elemen, maka elemen pertamamemiliki indeks sama dengan 0, danelemen terakhir memiliki indeks 4.Bentuk umum pengaksesan arrayadalah:

nama_var[indeks]

sehingga, untuk array nilai_tes,maka:

nilai_tes[0] elemen pertama dari nilai_tesnilai_tes[4] elemen ke‐5 dari nilai_tes\

perhatikan contoh berikut ini:

nilai_tes[0] =70;scanf(“%f”,&nilai_tes[2]);

Contoh pertama merupakanpemberian nilai 70 ke nilai_tes[0].Sedangkan contoh 2 merupakanperintah untuk membaca databilangan dari keyboard dan diberikanke nilai_tes[2]. Pada contoh 2 ini

&nilai_tes[2]

berarti “alamat dari nilai_tes[2]”. Perludiingat bahwa scanf() memerlukanargument berupa alamat dari variabelyang digunakan untuk menyimpannilai masukan. Selengkapnyaperhatikan contoh program di bawahini.

Sebuah array dapat diinisialisasisekaligus pada saat dideklarasikan.Untuk mendeklarasikan array, nilai-nilai yang diinisialisasikan dituliskandi antara kurung kurawal ({}) yangdipisahkan dengan koma.

int jum[12] = {31, 28, 31, 30,31, 30, 31,31, 30, 31, 30,31};

Ada beberapa variasi caramendeklarasikan sebuah array(dalam hal ini yang berdimensi satu),di antaranya adalah sebagai berikut :

2008 | Direktorat Pembinaan SMK 335

Page 354: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Array

int numbers[10]; int numbers[10] = {34, 27, 16}; int numbers[ ] = {2, -3, 45, 79, -14,

5, 9, 28, -1, 0}; char text[ ] = "Welcome to New

Zealand."; float radix[12] = {134.362,

1913.248}; double radians[1000];Array dideklarasikan dengan tanda [ ](bracket), baik dalam bahasa C++dan Java. Bentuk umum dari tipedata array adalah :

tipe_datanama_array[jumlah_elemen]

Jika ingin mendeklarasikansebuah array dengan tipe datainteger dengan nama a dan jumlahelemen array-nya 10 maka kodenyaadalah :

inta[10];

Dalam bahasa Javapendeklarasian array lebih variarif.Selain dengan kode seperti di atas,Java juga dapat mendeklarasikanarray dalam bentuk :

int[ ]a;

Kemudian setelah melakukandeklarasi array, baik dengan kodeyang pertama maupun yang kedua,Java harus menciptakan (membuat)objek terlebih dahulu sebelum arraydapat digunakan karena dalam Javaarray merupakan sebuah Class. Caramenciptakan objek array dalam Javaadalah :

a = newint[10];

Dalam Java pendeklarasianarray dan pembuatan objek arraydapat dilakukan alam satu sintak,yaitu :

int[ ] a = newint[10];

atau

int a[ ] = newint[10];

Baik C++ maupun Java, untukmengakses elemen array, misalnyaelemen ke-10 dari array dankemudian menampung nilainyadalam sebuah variabel x, makasintaknya adalah :

x=a[9];

Untuk memasukkan data ke dalamarray, sintak yang digunakan adalah :

a[nomor_elemen] =data;

a[0] =5; a[1]= 6;a[2] =7;danseterusnya.

Agar lebih efisien dan efektif,maka pemasukan data dalam arraydapat menggunakan perulanganseperti berikut ini :

for (i=0; i<jumlah_data; i++) { cout << “a[“ << i << “] = “; cin >> a[i];

}

Berikut contoh program lengkapdalam bahasa C++ adalah :

Program 9.1

336 Direktorat Pembinaan SMK | 2008

Page 355: 01 bab 01 Dasar Komputer fachkunde OK

Array Bahasa Pemrorgraman

#include <iostream>

using namespace std;

int a[10],jumlah=10;bool cari(int cariData,int nElemen) {

inti;

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

intdata;for(int i=0;i<jumlah; i++){ cout << "a[" << i<< "] = "; cin >>data;input(data,i);}

2008 | Direktorat Pembinaan SMK 337

Page 356: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Array

tampil(jumlah);int cariData = 12;if (cari(cariData,jumlah)==false)

cout << "Data " << cariData << " tidak ditemukan" << endl;

elsecout << "Data " << cariData << " ditemukan" << endl;

hapus(89,jumlah); jumlah‐‐; hapus(0,jumlah); jumlah‐‐; tampil(jumlah);

}

Program di atas terdiri dariempat function yaitu function cari()yang digunakan untuk mencari datadalam array, function input()digunakan untuk memasukkan datadalam array, hapus() untukmenghapus data dalam array, danfunction tampil() untuk menampilkandata dalam array.

Keempat function tersebutkemudian dipanggil satu per satuoleh program utama adalah kodeuntuk memasukkan data dalam arraydengan argumen pemanggilanfunction input() sebanyak sepuluh kalidengan menggunakan perulangan.

Setelah memasukkan dataselesai, maka data yang telahdimasukan dalam array kemudianditampilkan dengan menggunakanargument. Function tampil()mengakses data array satu persatudan kemudian menampilkannya.

Pencarian data dilakukan olehprogram utama. Function pencariandata ini (cari()) dilakukan denganmengunjungi atau mengakses dataarray satu persatu dan kemudianmembandingkan data pada setiapelemen indek dengan data yangdicari. Jika nilai datanya samadengan nilai data yang dicari, makaproses pencarian data dihentikan.Jika tidak, maka pencarian terusdilakukan sampai semua data arraydiakses. Jika proses pencarian yangdilakukan sama dengan jumlahelemen array, maka data yang dicaritidak ditemukan. Proses pencarianseperti ini merupakan metode linieratau sekuensial (Linear / SequentialSearch).

Program ini melakukan prosespenghapusan data sebanyak dua kalidimana setiap kali melakukanpenghapusan data maka jumlahelemen array dikurangi satu.

Keluaran dari program tersebut adalah:a[0] =18 a[1]= 12a[2] =34 a[3]= 44a[4] =89 a[5]= 34

338 Direktorat Pembinaan SMK |

2008

Page 357: 01 bab 01 Dasar Komputer fachkunde OK

Array Bahasa Pemrorgraman

a[6] =63 a[7]= 24a[8] =67 a[9]= 318 12 34 44 89 34 6324 67 3Data 12ditemukanData 89dihapusData 0 tidak terhapus<tidak ada>2 34 44 34 6324 67

9.2. Deklarasi ArrayArray adalah variabel yang

mampu menyimpan sejumlah nilaiyang bertipe sama. Untukmendeklarasikan sebuah array, harusdisebutkan tipe dari array yang dibuatmisalnya int, float atau double danjuga ukuran array. Untuk menentukanukuran array,perlu ditempatkanjumlah nilai yang dapat disimpanarray dalam sebuah tanda kurungkurawal siku yang terletak sesuahnama array. Deklarasi berikutsebagai contoh untuk menciptakanarray bernama skor yang mampumenyimpan 100 skor nilai yangbertipe int.

intskor[100];

Pada saat dideklarasikansebuah array, compiler Cmengalokasikan memori yang cukupuntuk menampung semua elemensesuai dengan yang dideklarasikan.Masukan pertama berada pada lokasi0. Sebagai contoh berdasarkan arrayskor, pernyataan berikut menugaskannilai 80 pada elemen pertama dariarray

skor[0] = 80;

Karena elemen pertama dariarray dimulai dengan offset 0, makaelemen terakhir dari array adalahsatu lokasi sebelum ukuran array.Berdasarkan array skor diatas,pernyataan berikut menugaskan nilaike elemen terakhir dari array.

skor[99] = 75;

Inisialisasi array adalahpemberian nilai default pada array.Pemberian nilai default ini dilakukanpada saat array dideklarasikan.

Bentuk umum dari inisialisasiarray ini adalah sebagai berikut :

tipe_data nama_array[jumlah_elemen] ={nilai1,nilai2,…,nilaiN}

Nilai didalam kurung kurawal disebut dengan Initialization List.

int a[10] = { 0, 3, 6, 9, 12, 15, 18, 21, 24,27 };

Untuk lebih jelasnya, perhatikancontoh berikut ini :

Program 9.2.

2008 | Direktorat Pembinaan SMK 339

Page 358: 01 bab 01 Dasar Komputer fachkunde OK

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 array2 4 6 8 10 a[0] = 12 a[1] = 43 a[2] = 67 a[3] = 34 a[4] = 48setelah asa perubahan data array12 43 67 34 48

Program di atas mempunyai tipedata array yang berisi lima elemendimana nilai default dari kelimaelemen array tersebut adalah 2, 4, 6,8, 10 sehingga ketika data array

dipanggil atau ditampilkan makaarray sudah mempunyai data, tidakkosong seperti halnya pada kodeberikut ini.

340 Direktorat Pembinaan SMK | 2008

Page 359: 01 bab 01 Dasar Komputer fachkunde OK

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 perubahandata array0 0 0 00 a[0]= 12a[1] =13 a[2]= 14a[3] =15 a[4]= 16setelah ada perubahandata array12 13 14 1516

Kedua program di atas sama.Bedanya program utama tipe dataarray-nya diinisialisasi, sedangkanprogram yang kedua tidakdiinisialisasi sehingga pada waktudipanggil pertama kali nilainya masih

kosong. Baik pada program pertamamaupun yang kedua, merupakankode untuk memasukkan data barupada array yang artinya data ataunilai default dari array ditimpa dengandata yang baru.

2008 | Direktorat Pembinaan SMK 341

Page 360: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Array

9.3. Inisialisasi ArrayUntuk inisialisasi array ada

beberapa macam yang seringdilakukan sebagai contoh perhatikanpotongan program berikut ini :

char title[] = “Dasar Pemrograman”;char section [64] = “Arrays”;

Pada kasus yang pertama,compiler C akan mengalokasikan 17byte untuk menampung string. Padakasus yang kedua, compiler akanmengalokasikan array 64 byte,menginisialisasi enam karakter yangyang pertama dengan huruf-huruf“Arrays” dan karakter NULL.Kebanyakan compiler juga akanmenginisialisasi lokasi byte-bytetersisa dengan NULL.

Pada saat dideklarasikan arraydengan tipe lain, kita juga dapatmenginisialisasinya dengan carayang sama. Sebagai contohpernyataan berikut menginisialisasiarray integer scores dengan nilai 80,70, 90, 85 dan 80.

int scores[5] = {80, 70, 90, 85, 80} ;

Pada saat kita menugaskan nilaiawal ke suatu array , kita harus

melingkupi nilai-nilai tersebut dengantanda kurung kurawal{}. Dalam halini, ukuran array sesuai denganjumlah nilai yang ditugaskan ke array.Akan tetapi pernyataan berikut akanmenugaskan empat nilai titikmengambang ke array yang dapatmenyimpan 64 nilai.

float salaries[64] ={2500000.0,3200000.0, 4400000.0,5500000.0};

Tergantung dari compiler yangdigunakan, nilai-nilai yang ditugaskanke elemen-elemen yang tidak secaraeksplisit ditugaskan mungkin diisidengan 0. Sebagai pegangan kitaharus tidak menganggap bahwacompiler akan menginisialisasielemen-elemen yang lain. Jika kitatidak menyebutkan ukuran array,kompiler akan mengalokasikanmemori yang hanya cukup untukmenampung nilai-nilai yangdisebutkan. Deklarasi array berikutmenciptakan array yang cukupmenampung tiga buah nilai yangbertipe long.

long planets[] = {1234L, 5678L,12347L};

9.4. Array Multi DimensiArray multi dimensi adalah suatu

array yang mempunyai lebih dari satusubskrip. Array multi dimensi iniaplikasinya antara lain untuk matrik.Adapun deklarasi dari array multidimensi adalah :

tipe_data

nama_array[jumlah_elemen_baris] [jumlah_elemen_kolom];

9.4.1. Array Satu DimensiBanyak array yang hanya

memiliki satu dimensi, sepertisejumlah orang dari setiap umur.

342 Direktorat Pembinaan SMK | 2008

Page 361: 01 bab 01 Dasar Komputer fachkunde OK

Array Bahasa Pemrorgraman

Satu-satunya persyaratan untuk seperti array menggunakan duamenentukan elemen adalah usia indeks. Gambar berikut menyatakanyang berpendapat bahwa unsurhitungan. Karena itu, seperti arrayhanya menggunakan satu indeks

variabel array dua dimensi

saja. Gambar berikut menyatakanvariabel array satu-dimensi.

Gambar 9.1. Array Satu Dimensi Gambar 9.2. Array Dua Dimensi

9.4.2. Array Dua Dimensi9.4.3. Tiga Dimensi

Beberapa array memiliki tigaAda beberapa array dua dimensi, dimensi, seperti nilai dalam tiga

seperti jumlah kantor-kantor di setiap dimensi ruang. Seperti arraylantai di setiap gedung kampus. menggunakan tiga indeks, yangSpesifikasi yang memerlukan kedua dalam hal ini mewakili x, y, z danelemen bangunan dan jumlah lantai, koordinat dari ruang fisik. gambardan setiap elemen yang berpendapat berikut menyatakan variabel untukbahwa untuk menghitung kombinasi mengadakan array tiga dimensi.bangunan dan lantai. Karena itu,

Gambar 9.3. Array 3 Dimensi

2008 | Direktorat Pembinaan SMK 343

Page 362: 01 bab 01 Dasar Komputer fachkunde OK

0 1 2 30 1 2 3 41 5 6 7 82 9 10 11 12

Bahasa Pemrograman Array

Untuk lebih jelasnya mengenaiarray multi dimensi dibawah inidiberikan beberapa contoh array.Arrai dibawah ini merupakan matrik 2X 2 yang menggunakan array.

int matrik[2][2];

Berikut adalah contoh programlengkapnya:

Program 9.4.#include <iostream>

using namespace std;

int main(void) {int t, i, matrik[3][4]; for(t=0; t<3; t++) for(i=0; i<4; i++)

matrik[t][i] = (t*4)+i+1;for(t=0; t<3; t++) {

for(i=0; i<4; i++)cout << matrik[t][i] << " ";

cout << endl;}return 0;

}

Keluaran dari program di atas adalah :1 2 3 45 6 7 89 10 11 12

t

t

Baris ke-5 sampai ke-7 adalahpemasukan data pada matrik.Sedangkan baris ke-8 sampai ke-12adalah menampilkan data matrik.Pada kedua proses tersebut,pemasukan data dan menampilkandata terdapat dua buah perulangan

dimana perulangan pertama adalahuntuk mengidentifikasi baris darimatrik dan perulangan kedua untukmengidentifikasi kolom dari matrik.

Berikut ini adalah contoh untukpenjumlahan dua buah matrik.

344 Direktorat Pembinaan SMK | 2008

Page 363: 01 bab 01 Dasar Komputer fachkunde OK

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

Page 364: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Array

1 2 3 45 6 7 89 10 11 12 13

MATRIK B1 2 3 45 6 7 89 10 11 12

MATRIK C = A +B2 4 6 810 12 141618 20 22 24

9.5. Mengurutkan Elemen ArrayAda banyak sekali metode untuk

mengurutkan data, antara lainExchange Sort, Selection Sort,Insertion Sort, Bubble Sort, Quick

berubah atau tidak. Jika nilaiindek mengalami perubahanmaka data ke-1 ditukar dengandata indek.

Sort, Shell Sort, Binary Insertion Sort, 2. Pada proses 2: variabel indekdan masih banyak lagi. diberi nilai 2 (data ke-2) kemudian

Dari sekian banyak metode, data indek dibandingkan denganhanya metode Exchange Sort, data ke-3. Jika data indek lebihBubble Sort, dan Insertion Sort saja besar maka nilai indeknya digantiyang akan kita bahas karena ketiga dengan 3 (data ke-3).metode ini merupakan metode yang Kemudian data indekpaling mudah dan banyak digunakan.

Untuk metode Selection Sortlangkah-langkahnya adalah sebagaiberikut :1. Proses 1: variabel indek diberi

nilai 1 (data ke-1) kemudian dataindek dibandingkan dengan datake-2. Jika data indek lebih besarmaka nilai indeknya digantidengan 2 (data ke-2), jika tidaknilai indeknya tetap.Kemudian data indekdibandingkan lagi dengan datake-3, lebih besar? Nilai indek ditukar! Demikian seterusnya. Setelah selesai, nilai indekdiperiksa apakah nilai indek

dibandingkan lagi dengan datake-4, lebih besar? Nilai indek ditukar! Demikian seterusnya. Setelah selesai, nilai indekdiperiksa apakah nilai indekberubah atau tidak. Jika nilaiindek mengalami perubahanmaka data ke-2 ditukar dengandata indek.

3. Demikian untuk prosesselanjutnya dimana banyakprosesnya adalah jumlah elemenarray dikurangi satu.

Berikut program lengkap metodeSelection Sort dalam bahasa C++adalah:

346 Direktorat Pembinaan SMK | 2008

Page 365: 01 bab 01 Dasar Komputer fachkunde OK

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

Page 366: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Array

tampil();}

Keluaran program diatas adalah sebagai berikut :57 89 49 51 12 90 1 0 63 2512 49 51 57 89 90 1 0 63 25

Metode Bubble Sort mempunyai 3. Demikian seterusnya sampai datalangkah-langkah sebagai berikut : terakhir, sehingga data1. 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, pembandinganditukar. (pergeseran data) hanya sampai

2. Kemudian membandingkan data pada data terakhir dikurangi satu.ke-2 dengan data ke-3, jika data Kode program lengkapnya dalamke-2 lebih besar, kedua dataditukar lagi.

bahasa C++ adalah sebagai berikut :

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

Page 367: 01 bab 01 Dasar Komputer fachkunde OK

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 250 1 12 25 49 51 57 63 89 90

Metode Insertion Sort miripdengan cara orang mengurutkankartu selembar demi selembar, kartudiambil dan disisipkan (insert) ketempat yang seharusnya. Adapunlangkah-langkahnya adalah sebagaiberikut : Pengurutan dimulai dari data ke-2

sampai dengan data terakhir. Jika ditemukan data yang lebih

kecil atau lebih besar, maka akanditempatkan (diinsert) diposisiyang seharusnya

Program selengkapnya dalambahasa C++ adalah :

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

Page 368: 01 bab 01 Dasar Komputer fachkunde OK

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 250 1 12 25 49 51 57 63 89 90

9.6. Contoh Program ArrayDibawah ini merupakan

beberapa contoh program yangbekerja menggunakan array. Arraymerupakan variabel yang mampumenyimpan sejumlah nilai yangbertipe sama. Pada contoh dibawah

ini menggunakan array yang bekerjasatu dimensi maupun multidimensi(dimensi dua atau tiga). Untuk lebihjelasnya perhatikan beberapa contohdibawah ini:

Program 9.9.Program di bawah ini untuk membaca data kemudian menampilkannya.#include<iostream.h>#include<conio.h>

350 Direktorat Pembinaan SMK | 2008

Page 369: 01 bab 01 Dasar Komputer fachkunde OK

Array Bahasa Pemrorgraman

using namespace std;

void main(){

int data[10]; // array dengan 10 elemen bertipe integerint elemen;

// entri 10 datafor (elemen=0;elemen <= 9;elemen++){

cout << "Data ke ‐ " << elemen << ": ";cin >> data[elemen];}

// tampilkan data setelah entrifor (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 datafor (elemen=0;elemen <= 4;elemen++){

cout << "Data ke ‐ " << elemen << ": " << data[elemen];}

}

Program 9.11.

2008 | Direktorat Pembinaan SMK 351

Page 370: 01 bab 01 Dasar Komputer fachkunde OK

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

Page 371: 01 bab 01 Dasar Komputer fachkunde OK

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 LatihanJawablah soal latihan dibawah ini dengan baik dan benar.1. Apa yang dimaksud dengan array2. Apa kelebihan dan kekurangan program menggunakan array3. Bagaimana cara mendeklarasikan array4. Bagaimana cara menginisialisasi array5. Buatlah program penjumlahan matrik dengan menggunakan array 2

dimensi6. Buatlah salah satu program pengurutan dengan array

2008 | Direktorat Pembinaan SMK 353

Page 372: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Array

354 Direktorat Pembinaan SMK | 2008

Page 373: 01 bab 01 Dasar Komputer fachkunde OK

Rekursif Bahasa Pemrorgraman

BAB. 10REKURSIF

10.1. Pengertian Rekursif10.2. Pengertian Teknik Iteratif10.3. Perbandingan Teknik Rekursif dan Teknik Iteratif10.4. Algoritma Teknik Rekursif10.5. Algoritma Teknik Iteratif10.6. Penerapan Algoritma Rekursif10.7. Penerapan Algoritma Iteratif10.8. Soal Latihan

10.1. Pengertian RekursifRekursi adalah konsep

pengulangan yang penting dalamilmu komputer. Konsep ini dapatdigunakan untuk merumuskan solusisederhana dalam sebuahpermasalahan yang sulit untukdiselesaikan secara iteratif denganmenggunakan loop for, while do.

Pada saat tertentu konsep inidapat digunakan untukmendefinisikan permasalahandengan konsisten dan sederhana.Pada saat yang lain, rekursi dapatmembantu untuk mengekspresikanalgoritma dalam sebuah rumusanyang menjadikan tampilan algoritmatersebut mudah untuk dianalisa.

Rekursif adalah salah satumetode dalam dunia matematikadimana definisi sebuah fungsimengandung fungsi itu sendiri.Dalam dunia pemrograman, rekursidiimplementasikan dalam sebuahfungsi yang memanggil dirinyasendiri. Atau Rekursif merupakan

satu teknik pemrograman dengancara memanggil sebuah fungsi daridirinya sendiri, baik itu secaralangsung maupun tidak langsung.Pemanggilan fungsi rekursif secaralangsung berarti dalam fungsitersebut terdapat statement untukmemanggil dirinya sendiri sedangkansecara tidak langsung berarti fungsirekursif tersebut memanggil 1 ataulebih fungsi lain sebelum memanggildirinya sendiri.

Fungsi rekursif langsungmerupakan rekursif, jika ekspresiyang merealisasikan fungsi tersebutmengandung aplikasi terhadap fungsitersebut.

RealisasiF (<list‐param>)

dependon<kondisi‐basis> : <ekspresi‐1>

2008 | Direktorat Pembinaan SMK 355

Page 374: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Rekursif

<kondisi‐rekurensi> : F<ekspresi‐2>

Fungsi rekursif tidak langsungmerupakan realisasi fungsi yangdapat cross-recursif yaitu jikarealisasi fungsi f mengandung fungsig yang realisasinya adalah aplikasiterhadap f.

RealisasiG (<list‐param>): F (<ekspresi‐1>) F (<list‐param>):

dependon

<kondisi‐basis> : <ekspresi‐1><kondisi‐rekurensi> : G

<ekspresi‐2>

Fungsi merupakan sub programyang sangat bermanfaat dalampemrograman, terutama untukprogram atau proyek yang besar.Manfaat penggunaan subprogramantara lain adalah : Meningkatkan readibility, yaitu

mempermudah pembacaanprogram

Meningkatkan modularity, yaitumemecah sesuatu yang besarmenjadi modul-modul atau bagian-bagian yang lebih kecil sesuaidengan fungsinya, sehinggamempermudah pengecekan,testing dan lokalisasi kesalahan.

Meningkatkan reusability, yaitusuatu sub program dapat dipakaiberulang kali dengan hanyamemanggil sub program tersebuttanpa menuliskan perintah-perintah yang semestinya diulang-ulang.

Sub Program Rekursif adalahsubprogram yang memanggil dirinyasendiri selama kondisi pemanggilandipenuhi. Dengan melihat sifat sub

program rekursif di atas maka subprogram rekursif harus memiliki : kondisi yang menyebabkan

pemanggilan dirinya berhenti(disebut kondisi khusus atauspecial condition)

pemanggilan diri sub program(yaitu bila kondisi khusus tidakdipenuhi)

Secara umum bentuk dari subprogram rekursif memiliki statemenkondisional :

if kondisi khusus takdipenuhithen panggil diri‐sendiri denganparameter yang sesuaielse lakukan instruksi yang akandieksekusi bila kondisi khususdipenuhi

Sub program rekursif umumnyadipakai untuk permasalahan yangmemiliki langkah penyelesaian yangterpola atau langkah-langkah yangteratur. Bila kita memiliki suatupermasalahan dan kita mengetahuialgoritma penyelesaiannya, kadang-kadang sub program rekursif menjadipilihan kita bila memangmemungkinkan untuk dipergunakan.Secara algoritmis (dari segialgoritma, yaitu bila kitamempertimbangkan penggunaanmemori, waktu eksekusi subprogram) sub program rekursif seringbersifat tidak efisien .Dengan demikian sub programrekursif umumnya memiliki efisiensidalam penulisan perintah, tetapikadang tidak efisien secaraalgoritmis. Meskipun demikianbanyak pula permasalahan-permasalahan yang lebih sesuaidiselesaikan dengan cara rekursif(misalnya dalam pencarian/searching).

356 Direktorat Pembinaan SMK | 2008

Page 375: 01 bab 01 Dasar Komputer fachkunde OK

Rekursif Bahasa Pemrorgraman

Untuk dapat memahami prosesyang terjadi dalam sebuah fungsirekursif , perhatikan contoh fungsirekursif berikut :

void rekursi (int a,int b){

If (b==0) return;a++;b‐‐;cout<<"Masuk \ n"<<a <<b;rekursi(a,b);cout<<"Keluar \ n"<<a <<b;

}

Misalkan Fungsi tersebutdipanggil dengan nilai a = 3 dan b = 3maka pertama tama di cek apakah b= 0 (if (b == 0) return), jika samamaka keluar. Ternyata nilai b tidaksama dengan 0 maka tambahkan adengan 1 dan kurangi b dengan 1.Maka keadaan sekarang menjadi a =

4 dan b = 2 . Baris berikutnyamenampilkan nilai a dan b ke layar(printf cout<<"Masuk \ n"<<a <<b;).Kemudian panggil fungsi rekursidengan nilai a = 4 dan b = 2 .Langkah – langkah tersebut diulangterus sampai pemanggilan fungsirekursi dengan nilai a = 6 dan b = 0.Pada saat ini kondisi if bernilai benarsehingga fungsi akan keluar (return)dan melanjutkan perintah setelahpemanggilan fungsi rekursi dengan a= 6 dan b = 0. Yaitu mencetak nilai adan b (cout<<"Keluar \n"<<a << b;).

Setelah mencetak nilai a dan b maka fungsi rekursif akan keluar lagi, dan melanjutkan perintah setelahpemanggilan fungsi rekursifsebelumnya dimana nilai a = 5 dan b= 1 .Demikian seterusnya sampai nilai a =4 dan nilai b = 2. yang tidak lainpemanggilan fungsi rekurif yangpertama. Proses pemanggilan fungsirekursif dapat diilustrasikan:

Langkahke:

Rekursif (3,3) 1 a=4 ; b=2 . Cetak : masuk a=4 || b=21 6 2 a=5 ; b=1 . Cetak : masuk a=5 || b=1Rekursif (4,2) 3 a=6 ; b=0 . Cetak : masuk a=6 || b=02 5 4 a=6 ; b=0 . Cetak : keluar a=6 || b=0Rekursif (5,1) 5 a=5 ; b=1 . Cetak : keluar a=5 || b=13 4 6 a=4 ; b=2 . Cetak : keluar a=4 ||

Rekursif (6,0)

Gambar 10.1. Proses Pemanggilan Fungsi Rekursif

Penggunaan fungsi rekursifmisalnya pada fungsi pangkat,faktorial, dan barisan fibonacci. Marikita lihat satu demi satu. Dalam

fungsi pangkat xy , kita tahu bahwasemua bilangan selain 0, jikadipangkatkan dengan 0 nilainyasama dengan 1. Jika x dipangkatkan

2008 | Direktorat Pembinaan SMK 357

Page 376: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Rekursif

dengan y, dengan y lebih dari 0,maka hasilnya sama dengan xdikalikan dengan x dipangkatkan y –1. Jika dituliskan dalam notasimatematika definisinya adalahsebagai berikut:

Kita lihat di atas pada definisi y >0, bentuk pemangkatan munculkembali di sisi kanan. Itulah yangdisebut rekursif. Definisi rekursifselalu dimulai dengan kasuspenyetop, penghenti, atau kasusdasar dari suatu permasalahan,dalam hal ini terjadi ketika nilai y =0. Definisi rekursif yang lebihkompleks mengandung inti daripermasalahan yang akandipecahkan, namun lebih sederhana.Dalam hal ini yang tadinya xdipangkatkan dengan y, kini bentukpemangkatan menjadi lebihsederhana, yaitu y – 1. Hal inidimaksudkan untuk “menggiring”masalah kompleks ke kasus dasaratau penyetop rekursinya. Untuk x =10 dan y = 0, hasil dari xy adalah 1.Untuk x = 10 dan y = 3 hasilnyadapat digambarkan sebagai berikut:

Konsep rekursifitas banyakditemui di dunia nyata. Istilah inimuncul pertama kali di kajian bidangmatematika. Dalam kasus tertentu,konsep ini memudahkan perumusan

formula. Konsep ini pun difasilitasidalam pemrograman.

Dalam pemrograman, ada 2terminologi yang bisa didefinisikandengan rekursif, yaitu prosedur danfungsi. Seperti halnya dalam bidangmatematika, penggunaan konsep inijuga untuk memudahkanpendefinisian dua terminologitersebut. Bahkan terdapat suatumasalah yang hanya bisadiselesaikan dengan rekursifitas dansangat sulit untuk diselesaikan tanparekursifitas.

Definisi rekursif harus memuatkomponen basis dan komponenrekursif. Dalam pemrograman,komponen ini dapat dipisahkandengan menggunakan perintahanalisa kasus. Misalkan e1 adalahekspresi kondisi untuk basis dan e2adalah ekspresi kondisi untuk bagianrekursif, definisi rekursif dapatdituliskan:

if (e1)then

{bagian basis}else

{bagian rekursif}

Salah satu contoh dari kasusrekursif adalah barisan bilanganfibonacci. Barisan bilangan fibonacciadalah 1, 1, 2, 3, 5, 8, 13, 21, ... .Definisi barisan bilangan fibonacciadalah sebagai berikut. Misalkanfibonacci(i) menyatakan bilanganfibonacci yang ke-i, maka:

fibonacci(i 1) fibobacci(i 2)

fibonacci(i)

,i 2

1 ,i 1,2

358 Direktorat Pembinaan SMK | 2008

Page 377: 01 bab 01 Dasar Komputer fachkunde OK

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)returnn; elsereturn(Fibonaci(n‐2)+Fibonaci(n‐1));

}

Keluaran program diatas adalah:data 1data 2data 3data 5data 8data 13 data 21

Rekursif adalah suatu methodyang memanggil dirinya sendirisecara langsung maupun tidaklansung. Rekursif merupakan teknikpemrograman yang sangat berguna.Dalam beberapa kasus,menggunakan cara rekursimemudahkan pengembangan

program secara natural, langsung,dan simple dalam memecahkanproblem yang susah dipecahkan.Untuk lebih memahami rekursifperhatikan contoh berikut: Contohyang umum untuk memahami teknikrekursif adalah masalah factorial.

2008 | Direktorat Pembinaan SMK 359

Page 378: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Rekursif

4! = 4 x 3 x 2 x 13! = 3 x 2 x 12! = 2 x 11! = 1

Dari contoh di atas bisa diubahcara pandangnya menjadi:

4! = 4 x 3!3! = 3 x 2!2! = 2 x 1!1! = 1

Dengan catatan bahwa 0! = 1maka cara pandang yang kedua bisadlanjutkan menjadi:

4! = 4 x 3!3! = 3 x 2!2! = 2 x 1!1! = 10! = 1

Cara pandang yang kedua inilahyang disebut rekursif, karena dalamproses perhitungan selalu memanggildirinya sendiri. Yaitu factorialmemanggil factorial. Akan tetapi perludicatat bahwa teknik rekursif ini harus

ada terminasinya atau ada saatberhentinya. Pada contoh factorial iniadalah 0!. Yaitu sama dengan 1bukan 0. Dalam istilah matematika 0!ini disebut dengan base step.Sedangkan bagian yang lain disebutrecursive step. Secara umum rumusfactorial dalam bentuk rekursifmenjadi sebagai berikut:

0! = 1; basestepn! = n x (n – 1)!; n > 0recursive step

Jadi proses rekursif itu akanselalu memanggil dirinya sendiridengan variable yang berbeda, danterus dilakukan sampai mencapaibase step sebagai terminasinya.Setelah terminasi maka akanmendapatkan hasil dan selanjutnyahasil tersebut dikembalikan kepemanggilnya untuk dilakukanperhitungan. Hal itu dilanjutkansampai ke pemanggil yang pertamasehingga mendapatkan hasilsebagaimana mestinya. Ilustrasiberikut memberi gambaran tentangproses rekursif.

360 Direktorat Pembinaan SMK | 2008

Page 379: 01 bab 01 Dasar Komputer fachkunde OK

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 IteratifTeknik Iteratif adalah teknik

perulangan atau menghitung secaraberulang. Teknik ini memanfaatkankelebihan komputer sebagai mesinhitung yang mampu melakukanperhitungan secara berulang denganperintah yang sangat sederhana.

Cara ini mudah dilakukan akantetapi memerlukan proses yangpanjang untuk mendapatkan hasil,dan cara ini menggunakan memorilangsung. Contoh factorial carapandang yang pertamamenggunakan teknik iteratif

4! = 4 x 3 x2 x 13! = 3 x 2x 12! = 2x 11! =1

Untuk menghitung n! berartimengkalikan bilangan bulat positifdari 1 sampai dengan n. Pengertianpenghitunganannya terlihat mudah,namun jika n bilangan yang besar jikadihitung tanpa komputer akan sangatsulit dan lama.

Kebanyakan pemrogram pemulamenggunakan cara ini karena lebihjelas algoritmanya.

10.3. Perbandingan Teknik Rekursif dan Teknik IteratifTeknik Iteratif lebih mudah

dimengerti karena jelas tinggalmengurutkan angka-angkanya dari 1atau mungkin 0 sampai dengan n.Operasi yang terjadi bisa tambah(+),

kurang(-), bagi(/), kali(*), kadangkalajuga pangkat atau yang lainnyanamun dapat dikembalikan ke empatoperasi dasar pertama. Kerugianyang pertama teknik ini

2008 | Direktorat Pembinaan SMK 361

Page 380: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Rekursif

membutuhkan memori yang banyakterutama untuk bilangan yang besar.Yang kedua proses iterasi bisamembutuhkan waktu yang lamaapabila bilangannya besar.

Sedang Teknik Rekursif harustahu formulanya dahulu, dalam hal inimana base step-nya, dan manarekursif step-nya. Biasa dipakai olehpemrogram yang sudah agak lanjutdan operasi matematikanyamerupakan operator biasa. Namunmemori yang digunakan bukanmemori langsung penampungvariable namun merupakan stack.Jadi banyak sedikitnya penghitungantergantung dari besarnya kapasitasstack yang dipunyai komputer.Secara rata-rata prosespanghitungan dengan rekursif akanlebih cepat karena kompleksitasnyalebih kecil dibanding dengan iteratif.

Kadang seseorang bertanya, lohsaya kan juga bisa membuat fungsipangkat di atas denganmenggunakan teknik iteratif. Misalnyamenggunakan while loop. Kenapa

harus repot‐repot menggunakanrekursif? Memang benar bahwasemua fungsi rekursif dapat dibuatversi iterasinya. Namun demikian,ada beberapa masalah yang jauhlebih mudah jika dipecahkan denganrekursif. Kode program untukbeberapa masalah rekursif juga relatiflebih mudah dipahami dibandingkanversi iterasinya. Berikut adalah versiiteratif dari fungsi pangkat.Sekaranng perhatikan pada aplikasipermainan menara Hanoi di bawahini

Menara Hanoi ialah salah satupermainan yang dulunya dimainkanoleh seorang pendeta di Hanoi.Tujuan permainan ini ialahmemindahkan n buah pringan daritonggak asal (A) melalui tonggakbantu (B) menuju tonggak tujuan (C).Dengan aturan–aturan bahwapiringan yang lebih kecil tidak bolehberada di bawah piringan yang lebihbesar.

Menara A B C :

a b c

Gambar 10.3. Menara dengan Tiga Piringan

362 Direktorat Pembinaan SMK | 2008

Page 381: 01 bab 01 Dasar Komputer fachkunde OK

Rekursif Bahasa Pemrorgraman

Seperti biasa untuk memecahkanmasalah kita daftarkan dulu langkah-langkah yang diambil mulai n = 1.Dengan dfinisi piringan yang palingatas ialah piringan 1.

Untuk n = 1 : Pindahkan piringan 1 dari A ke CUntuk n = 2 : Pindahkan piringan 1 dari A ke B Pindahkan piringan 2 dari A ke C Pindahkan piringan 3 dari B ke C

Dari contoh diatas dapat diambilkesimpulan , untuk memindahkan Npiringan dari tonggak asal (A) ketonggak tujuan (C) maka piringan keN harus berada di tonggak tujuan (C),sedangkan piringan ke 1 sampai (N -1) harus berada di tonggak bantu (B).Setelah piringan ke 1 sampai (N-1)berada pada tonggak bantu (B),kemudian pindahkan piringan ke 1

sampai (n-1) tersebut dari tonggakbantu (B) ke tonggak tujuan (C).

Nah bagaimana caranyamembawa piringan ke 1 sampai (N-1)dari tonggak asal ke tonggak bantu(B), caranya sama saja yaitu denganmemindahkan piringan ke (n-1) daritonggak asal (A) ke tonggak tujuanyang pada saat ini berada padatonggak (B) sedangkan piringan dari1 sampai ke (N-2) dipindahkan ketonggak bantu yang saat ini berada ditonggak (C) , Setelah piringan ke 1sampai (N-2) berada pada tonggakbantu (C), kemudian pindahkanpiringan ke 1 sampai (N-2) ketonggak tujuan (B) dan seterusnya.

Metode penyelesaian permainanHanoi di atas sering disebut sebagaimetode back tracking, jadi solusidicari dengan cara mundur kebelakang dahulu, baru kemudiansolusi bisa ditemukan. Berikut Listingprogram Menara Hanoi dalambahasa C

Program 10.2include <stdio.h>

void Hanoi(int n,char asal,char bantu, char tujuan)// pindahkan piringan ke n

{ // dari asal menuju tujuan

// melalui bantuif (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

Page 382: 01 bab 01 Dasar Komputer fachkunde OK

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 RekursifTelah disinggung di depan untuk

Teknik Rekursif harus dicari manabase step-nya dan mana rekursifstep-nya. Dari problem yang hendakdipecahkan dicari dahulu keduanya.Apabila sudah ketemu barumelangkah ke prose berikutnya yaitumenentukan pseudocode-nya,sekaligus menentukan apakahmemakai procedure atau function.

Untuk Teknik Rekursif ini lebihcocok memakai function, karenaharus bisa dipanggil di dalamprogram tersebut. Sebagai contohmencari faktorial seperti di atas.Algoritma rekursifnya sebagai berikut:

0! = 1; base stepn! = n x (n – 1)!; n > 0 recursive step

Pseudocode-nya:

Int Faktorial(int n){

If (n==0) Return 1;

ElseReturn n * Faktorial(n‐1)

}

Jika dijalankan gambaran prosesnyasebagai berikut: Misal untuk menghitung 4!

364 Direktorat Pembinaan SMK | 2008

Page 383: 01 bab 01 Dasar Komputer fachkunde OK

Rekursif Bahasa Pemrorgraman

Faktorial(4)

4 x Faktorial(3)

3 xFaktorial(2)

2 xFaktorial(1)

1 x Faktorial(0)

1

Gambar 10.4. Ilustrasi Rekursif Untuk Menghitung 4! (faktorial 4)

Dalam hal ini memang untuk rekursif harus memakai function karenaprocedure tidak dapat dipanggil di dalam procedure itu sendiri.

10.5. Algoritma Teknik IteratifTeknik Iteratif algoritmanya

seperti apa adanya terlihat jadi tidakbegitu rumit. Pada tulisan di atastelah dijelaskan beberapa contohmenghitung faktorial secara iteratif.Untuk lebih jelasnya lihat contohberikut:

Pseudocode Teknik Iteratif:

int Faktorial(int n){

int x = 1;for(int i = 1; i <= n; i++)x = x *

i;return x;

4! = 4 x 3 x 2 x 13! = 3 x 2 x 12! = 2 x 11! = 1

Algoritmanya disini sangat jelasuntuk faktorial menggunakan TeknikIteratif tinggal mengulang operasiperkalian dari 1 sampai denganbanyaknya n.

}

Dapat dilihat di atas bahwaiterasinya adalah mengulangperkalian x = x * i dari i = 1 sampaidengan I = n dengan penambahan 1setiap perubahan i. Perlu diketahuijuga untuk harga awal x harus samadengan 1, jika tidak diberi harga awalmaka hasilnya akan salah.

2008 | Direktorat Pembinaan SMK 365

Page 384: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Rekursif

Jadi jelas sekali perbedaan algoritmaTeknik Rekursif dengan algoritma

Teknik Iteratif.

10.6. Penerapan Algoritma RekursifDibawah ini merupakan

beberapa contoh program rekursifdengan berbagai kasus dilapanganseperti faktorial, program

pemangkatan dan lain sebagainya.Untuk lebih jelasnya perhatikanprogram-program dibawah ini:

Program 10.3. Faktorial:#include <cstdlib>#include <iostream>

using namespace std;

int faktorial(int n){

if (n==0)return 1;

elsereturn 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 RekursifMasukan Nilai n : 4Faktorial (4) = 24

Program 10.4. Pangkat (an):#include <cstdlib>#include <iostream>

366 Direktorat Pembinaan SMK | 2008

Page 385: 01 bab 01 Dasar Komputer fachkunde OK

Rekursif Bahasa Pemrorgraman

using namespace std;

float Pangkat(float a, int n){

if (n==0)return 1;

elsereturn 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 rekursifIstilah Nilai a = 2Istilah Nilai a = 2Hasil 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;

elsereturn n + JumlahInt(n‐1);

2008 | Direktorat Pembinaan SMK 367

Page 386: 01 bab 01 Dasar Komputer fachkunde OK

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 IntegerMasukan Nilai n = 4Jumlah bilangan Integer dari 1 sampai 4 = 10

10.7. Penerapan Algoritma IteratifDibawah ini merupakan

beberapa contoh program iteratifdengan berbagai kasus dilapanganseperti faktorial, programpemangkatan dan lain sebagainya.Setelah memperhatikan contoh

program dibawah ini harapanyamenjadi tahu mengenai perbedaanantara keduanya. Untuk lebihjelasnya perhatikan program-programdibawah ini:

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

Page 387: 01 bab 01 Dasar Komputer fachkunde OK

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 IteratifMasukan Nilai n : 3Faktorial (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)

return1;

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

Page 388: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Rekursif

return EXIT_SUCCESS;}

Keluaran program diatas adalah sebgai berikut:Program Pangkat IteratifIstilah Nilai a = 2Istilah Nilai n = 5Hasil 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 IteratifMasukan Nilai n = 5Jumlah bilangan Integer dari 1 sampai 5 = 15

Dari berbagai contoh aplikasi di atas kiranya cukup jelas nampak ciri-

ciri algoritma program baik secaraTeknik Rekursif maupun Teknik

370 Direktorat Pembinaan SMK | 2008

Page 389: 01 bab 01 Dasar Komputer fachkunde OK

Rekursif Bahasa Pemrorgraman

Iteratif. Apakah semua problem bisadipecahkan secara Teknik Rekursif ?Ternyata tidak semuanya. Apakahjuga harus diselesaikan secaraTeknik Iteratif ? Ternyata juga tidak.Sebagai contoh Jumlah Bilangan

Integer Positif bisa juga diselesaikandengan rumus : n x (n + 1) / 2 atau(n2 + n) / 2 jadi tidak perlu Iteratif.

Perhatikan beberapa kasusberikut ini pun dapat diselesaikandengan rekursif:

1. Menggambar karakter ’*’ sebanyak n***********n=11

Basic :n=0

tidak mencetak apa‐apaRekursif :

n>0 gambar karakter ’*’ sebanyak (n‐1) cetak ’*’

2. Menggambar persegi panjang dengan lebar l dan tinggi t

t = 4

l =11

Basic :n=0 tidak mencetak apa‐apa

Rekursif :n>0

3. Menggambar segitiga/piramid dengan tinggi n mulai kolom k

t =

4 k=0

Basic : n=0

2008 | Direktorat Pembinaan SMK 371

Page 390: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Rekursif

tidak mencetak apa‐apaRekursif :

n>0 gambar piramid dengan tinggi (n‐1) mulai kolom (k+1) cetak karakter ’ ’ sebanyak k cetak karakter ’*’ sebanyak 2n – 1

10.8. Latihan SoalJawablah soal latihan dibawah ini dengan baik dan benar.1. Apa yang dimaksud dengan rekursif, jelaskan2. Apakan perbedaan antara program menggunakan rekursif dan interatif3. Dari soal diatas jelaskan kekurangan dan kelebihan kedua program

tersebut4. Buatlah program faktorial dengan rekursif5. Buatlah program pemangkatan dengan menggunakan rekursif

372 Direktorat Pembinaan SMK | 2008

Page 391: 01 bab 01 Dasar Komputer fachkunde OK

Grafik Bahasa Pemrorgraman

BAB. 11GRAFIK

11.1. Pengertian Grafik11.2. Grafik Library11.3. Grafik Sederhana11.4. Animasi Grafik11.5. Dasar-dasar Game11.6. Soal Latihan

11.1. Pengertian GrafikDalam pemrogram C++ untuk

membuat grafik kita harus mengenalGUI (Graphics User Interface).Windows yang kita kenal merupakanaplikasi yang berjalan di atas GUI,jadi tampilan yang keluar pastiberbasis grafik. Berbeda denganDOS, system operasi ini berbasisteks bukan grafik. Untuk input/outpuberbasis grafik windows mempunyaikumpulan fungsi-fungsi di dalamWindows API (Application ProgramInterface) yang sering juga disebutGDI (Graphics Device Interface).

Apa keistimewaan GDI ?Pemrogram yang berkecimpungdalam dunia grafik dengan DOSmernah merasakan sulitnya membuataplikasi grafik yang kompatibeldengan card monitor, karena resolusicard yang berbeda kadang harusmenyesuaikan dengan membuat rutinyang berbeda.

Dengan menggunakan GDIseorang pemrogram dapat denganmudah membuat aplikasi grafik tanpamempedulikan kompatibilitas dengancard monitor yang dipakai atauperangkat keras yang lain. Hal inidikarenakan Windows sudahmengatur semuanya, jadi pemrogramtinggal konsentrasi membuat aplikasigrafiknya atau pembuatan aplikasicitra.

Selain itu GDI bersifat deviceindependent, artinya tidak tergantungperalatan fisik yang digunakan.Pernyataan untuk membuat lingkaranke layar monitor, maupun ke printer,atau ke plotter sama. Tentu saja halini amat menguntungkan pemrogramkarena hanya mengingat satuperintah saja untuk semua peralatanatau berbagai macam peralatan.

2008 | Direktorat Pembinaan SMK 373

Page 392: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Grafik

11.2. Grafik LibraryPada pemrograman C++

mempunyai library yang disebutOpenGL. Library ini memanfaatkanWindows API dalam prosespembentukan grafik. Denganmenggunakan OpenGL pembuatangrafik jadi sangat mudah. Namundemikian perlu diketahui bahwapemrograman menggunakan libraryharus mengikuti prosedur yang telahditetapkan oleh pembuatnya.

Pada prinsipnya kita tinggalmemodifikasi program yang telahada, pada bagian mana yangdimodifikasi agar sesuai dengankeperluannya itulah yang harus

dipelajari. Untuk lebih jelasnya ikuti langkah-langkah program berikut: Pada saat membuat proyek baru

harus kita arahkan ke libraryOpenGL

Setelah proyek diciptakan makakita langsung mempunyai main()program yang apabila dijalankan(run) langsung ada hasilnya

Selanjutnya tugas pemrogramtinggal memodifikasi bagian-bagian tertentu disesuaikandengan rancangan program yangtelah ditetapkan

Gambaran pembuatan proyek baru seperti berikut:

Gambar 11.1. pembuatan proyek

Pada saat anda sudah memilihmembuat proyek baru maka pilihlanOpenGL sebagai basis proyek ini,seperti terlihat dalam gambar di atas.Setelah OK maka proyek langsung

siap dan di dalamnya sudah adamain() program yang siapditampilkan; program inilah yang siapdimodifikasi. Perhaikan gambar dibawah:

374 Direktorat Pembinaan SMK | 2008

Page 393: 01 bab 01 Dasar Komputer fachkunde OK

Grafik Bahasa Pemrorgraman

Gambar 11.2. proyek OpenGL

Terlihat pada gambar bahwa sudahada main() program dan yang pentingdalam editor terlihat library yanghendak dipakai untuk membuat grafikini. Lihat cara penulisan dibawah ini:

#include<windows>#include<gl/gl.h>

Dua buah header tersebut yangdibutuhkan untuk menghubungilibrary pada saat dibutuhkan olehprogram dalam membentuk grafik.

11.3. Grafik SederhanaPengenalan grafik biasanya

dimulai dengan membuat garis. Garisdi dalam grafik merupakan kumpulantitik-titik yang berupa pixel, resolusipixel akan mempengaruhi hasiltampilan; makin rapat pixel grafikyang dihasilkan makin halussehingga kadang kelihatan jadi lebihindah dan menarik. Perintah dalamOpenGL untuk membuat garis:

Program 11.1glClearColor (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

Page 394: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Grafik

glColor3f (0.0f, 0.0f, 0.0f); glVertex2f (‐0.5f, 0.0f);

glEnd ();

SwapBuffers (hDC);

Setelah dieksekusi potonganprogram diatas maka akanmenampilan hasil grafik sepertigambar dibawah ini:

Gambar 11.3. Garis

Fungsi utama sehingga dapatmenghasilkan grafik seperti gambardi atas adalah:

glColor3f (0.0f, 0.0f, 0.0f);glVertex2f(0.0f,0.5f);glColor3f (0.0f, 0.0f, 0.0f);glVertex2f(0.0f, ‐0.5f);

bisa dipahami bahwa glColor3f(0.0f,0.0f, 0.0f) merupakan perintah untukmember warna titik-titik dari pixelyang dihasilkan oleh glVertex2f(0.0f,0.5f). Sebenarnya masingmasingbaris pada potongan program di atas

merupakan dua perintah bukan satuperintah. Namun karena keduanyasaling terkait satu sama lain makadijadikan satu baris, walaupun jikahendak ditulis pada baris yangberbeda juga tidak mengapa.Penjelasan lebih lanjut, formatglColor3f adalah :

glColor3f(red, green,blue);

Argumen red, green, blue untukmengaktifkan masing-masing diisibilangan pecahan 1 (1.0), untukmematikan diisi bilangan pecahan 0(0.0). Dapat dilihat contoh di atassemuanya dimatikan berarti titik-titikpixel akan berwarna hitam (sepertidilihat di gambar hasil eksekusi).Kombinasi dari ketiga argument iniakan menghasilkan warna yangindah dan sangat menarik. Perludiketahui pula bahwa grafik yangterjadi merupakan grafik Cartesianyaitu grafik yang titik nolnya ditengah, oleh karena itu untukmembuat garis tegak dibutuhkan duaglVertex2f yang masing-masingargumen diisi dengan( 0.0, 0.5) dan(0.0, -0.5). Begitu juga dengan garismendatar dibutuhkan dua glVertex2f,tentu saja dengan argumen yangberbeda dalam hal ini (-0.5, 0.0) dan(0.5, 0.0). Dengan memodifikasiprogram tersebut bisa didapatkantampilan grafik yang menarik.

Selanjutnya harus ada glBegin()dan glEnd(), karena perintah itu

376 Direktorat Pembinaan SMK | 2008

Page 395: 01 bab 01 Dasar Komputer fachkunde OK

Grafik Bahasa Pemrorgraman

merupakan awal dan akhir programgrafik yang dijalankan. Pada glBeginada argumen GL_LINES, inidimaksudkan untuk membuat garis.Sedangkan apabila hendak membuatbentuk yang lain maka perludisesuaikan, contoh adaGL_TRIANGLES untuk segitiga,GL_QUADS untuk segi empat, atauGL_POLYGON untuk segi banyak.

Perintah glClearColor untukmengatur warna latar belakangwindow, dengan format sebagaiberikut :

glClearColor(red, green, blue,alpha);

seperti perintah sebelumnyaargumen yang ada bisa diisi dengan

angka pecahan dan dapatdikombinasikan sehinggamendapatkan warna yang menarik.Pada contoh program ini sengajadibuat putih denganmengkombinasikan red, green, bluesemuanya diisi 1 (1.0). Untukmenciptakan atau mendapatkanperubahan argumen (jika diubah)diperlukan perintah:

glClear(GL_COLOR_BUFFER_BIT);

yang berarti perubahan warna padaperintah sebelumnya disimpan dibuffer yang nanti pada saat eksekusiakan ditampilkan.

Program selengkapnya dapatdilihat 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

Page 396: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Grafik

HGLRC hRC; MSGmsg;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

Page 397: 01 bab 01 Dasar Komputer fachkunde OK

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

Page 398: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Grafik

return 0;

case WM_DESTROY:return 0;

caseWM_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

Page 399: 01 bab 01 Dasar Komputer fachkunde OK

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 sangatpanjang, tetapi itulah yang terjadiapabila memprogram menggunakanlibrary yang tersedia. Namun jikaharus membuat sendiri dari awalmaka pemrograman kita akan lebihlama. Dengan memanfaatkan libraryyang ada maka proses pemrogramanakan menjadi lebih cepat efektif.Seperti telah diuraikan sebelumnyapemrogram tinggal mencari dimanayang harus dimodifikasi sesuaikebutuhan. Contoh untuk mengubah

ukuran window tinggal mengubahargumen di dalam create mainwindow, disana defaultnya adalah 0,0, 256, 256, angka ini dapat diubahuntuk mendapatkan window yangdiinginkan. Begitu pula untuk headerwindow dapat disesuaikan.

Lebih lanjut mengenai grafikuntuk membuat segitiga misalnyadiperlukan tiga buah vertex, sehinggaperintah-perintah yang dibutuhkansegabai berikut:

Program 11.3glClear (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

Page 400: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Grafik

Jangan lupa mengubahGL_LINES pada glBegin menjadiGL_TRIANGLES, kalau tidak diubahmaka yang muncul akan satu garissaja.

Begitu juga untuk membuat segiempat (kotak), segi lima, segi enam,dan sebagainya. Makin banyak segidibutuhkan makin banyak vertex.

11.4. Animasi GrafikPembuatan animasi bentuk-

bentuk dasar dalam OpenGL telahdisediakan. Untuk dapatmemanfaatkannya kita harusmemahami perintah-perintah itubeserta arti argumen-argumen yangdipakainya. Sebagai contoh akandibuat sebuah program yangmenganimasi kotak. Cermati programberikut:

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; HGLRChRC; MSG msg;BOOL bQuit = FALSE;float theta = 0.0f;

/* register window class */

382 Direktorat Pembinaan SMK | 2008

Page 401: 01 bab 01 Dasar Komputer fachkunde OK

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

Page 402: 01 bab 01 Dasar Komputer fachkunde OK

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

Page 403: 01 bab 01 Dasar Komputer fachkunde OK

Grafik Bahasa Pemrorgraman

return 0;

case WM_DESTROY:return 0;

caseWM_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

Page 404: 01 bab 01 Dasar Komputer fachkunde OK

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 akanmenganimasikan kotak denganwarna-warni yang menarik danberputar berlawanan arah jarum jam.Gambar kotak yang terjadi sepertiberikut:

Gambar 11.4. Grafik berwarna warni

Jika diperhatikan atau dipelajaripasti akan Menarik bukan? Warna-

warna tersebut dimunculkan denganmengkombinasikan argumen-argumen pada perintah glColor3f,cermati dalam listing program. Dalamprogram yang sesungguhnya kotaktersebut selain berwarna-warni jugaberputar berlawanan arah putaranjarum jam (counter clockwise).Perintah apa yang membuat kotak iniberputar ? Kita lihat program di atas:

glRotatef (theta, 0.0f,0.0f, 1.0f);

sesuai namanya perintah di ataslahyang menyebabkan kotak iniberputar. Format perintah ini secaralengkapnya sebagai berikut : Argumen pertama theta untuk

mengatur kecepatan putar makinbesar angkanya makin cepatputaran yang terjadi

Argumen kedua jika diisi 1 (1.0)maka kotak akan berputar dengansumbu garis horizontal (mendatar)ke arah tertentu. Untuk memutarke arah yang berlawanan dari

386 Direktorat Pembinaan SMK | 2008

Page 405: 01 bab 01 Dasar Komputer fachkunde OK

Grafik Bahasa Pemrorgraman

contoh, argumen diisi angka -1 (-1.0)

Argumen ketiga juga mirip denganargumen kedua namunberputarnya terhadap sumbuvertical (tegak lurus)

Argumen keempat untuk memutarkotak flat dengan sumbu titik noldiagram cartesius. Jika diisi angka1 (1.0) maka akan berputarberlawanan arah putaran jarumjam (counter clockwise),sedangkan untuk berputar searahdengan arah putaran jarum jam(clockwise) diisi angka -1 (-1.0).Hal yang menarik jika argumen inidiisi angka 0 (0.0) maka kotak

akan zoom in dan zoom outbergantian.

Kombinasi dari argumen-argumenyang ada akan membuat variasipergerakan yang sangat menarik

Untuk mengatur laju perputarananimasi yang terjadi bisa denganmemodifikasi theta, atau denganperintah sleep(argumen). Lajukecepatan putar tergantung padanilai argumen pada sleep, makinbesar angkanya makin lambat bukanmakin cepat. Lebih lanjut dengangrafik, jika akan membuat segi enammaka perubahan yang terjadi sepertiberikut:

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

Page 406: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Grafik

Tentu saja vertex berubahbertambah banyak, banyaknya vertexsesuai dengan jumlah sudut yangdibentuk. Jangan lupa argumen padaglBegin diisi dengan GL_POLYGONsehingga bisa menciptakan segibanyak seperti yang dikehendaki.

Selain glRotatef() pengaturananimasi dapat juga denganglTranslatef(). Dengan perintah inikita dapat menggerakkan obyekkekiri, kekanan, ke atas, maupun kebawah. Contoh program sebagaiberikut:

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

Page 407: 01 bab 01 Dasar Komputer fachkunde OK

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

Page 408: 01 bab 01 Dasar Komputer fachkunde OK

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

Page 409: 01 bab 01 Dasar Komputer fachkunde OK

Grafik Bahasa Pemrorgraman

case WM_CREATE:return 0;

case WM_CLOSE: PostQuitMessage (0); return 0;

case WM_DESTROY:return 0;

caseWM_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

Page 410: 01 bab 01 Dasar Komputer fachkunde OK

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 atasakan menggerakkan sebuah kotakberjalan secara diagonal dari pojokkiri bawah ke kanan atas secaraterus menerus. Akan tetapi jika adapenekanan mouse di taskbar makakotak berhenti, jika penekanandilepas kotak jalan lagi. Untuk selesaibisa menggunakan tombol ESCape.

11.5. Dasar-dasar GameUntuk memahami pembuatan

game contoh program di atas bisadimodifikasi bagian glTranslatef().

Argumen dalam glTranslatef () dibuatvariabel theta untuk argumenpertama, alpha untuk argumenkedua. Theta untuk mengatur gerakhorisontal dan alpha untuk mengaturgerak vertikal. Dengan mengubah-ubah nilai variabel tersebut kita bisamenggerakkan obyek tersebut secarabebas sesuai dengan kehendak.Pada saat obyek bergerak bisa jugadiatur perubahan warna ataudikombinasi sehingga menjadi warna-warni. Untuk lebih jelasnya ikutiprogram 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

Page 411: 01 bab 01 Dasar Komputer fachkunde OK

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

Page 412: 01 bab 01 Dasar Komputer fachkunde OK

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

Page 413: 01 bab 01 Dasar Komputer fachkunde OK

Grafik Bahasa Pemrorgraman

count = 0;theta = ‐0.8f; alpha= ‐0.8f;

}else

count += 1;

r =0.0f; g= 1.0f;b =0.0f;

}else if (count <= 160){

theta +=0.01f; alpha+= 0.01f;count += 1;r =1.0f; g= 0.0f;b =1.0f;

}

Sleep (10);}

}

/* shutdown OpenGL */DisableOpenGL (hWnd, hDC, hRC);

/* destroy the window explicitly */DestroyWindow (hWnd);

return msg.wParam;}

/********************* Window Procedure********************/LRESULT CALLBACK WndProc (HWND hWnd, UINT message,

WPARAM wParam, LPARAM lParam){

switch (message){

2008 | Direktorat Pembinaan SMK 395

Page 414: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Grafik

case WM_CREATE:return 0;

case WM_CLOSE: PostQuitMessage (0); return 0;

case WM_DESTROY:return 0;

caseWM_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

Page 415: 01 bab 01 Dasar Komputer fachkunde OK

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 makakotak akan bergerak secara diagonaldari pojok kiri bawah ke arah pojokkanan atas dengan warna ungu,setelah sampai di pojok kanan atasmaka akan berbalik arah menujupojok kiri bawah lagi dengan warnahijau, begitu seterusnya bolak-balik.Akan tetapi jika kursor menunjuktaskbar dan tombol mouse ditekanmaka gerak obyek akan berhenti danjika tombol dilepas lagi maka obyektersebut gergerak lagi.

Selain argumen-argumenglTranslatef() yang dimodifikasi,argumen glColor3f() juga dibuatvariabel sehingga bisa dimainkanwarnanya menjadi dinamis tidak

monoton. Penambahan variabel padaperintah glColor3f() argumen pertamar, kedua g, ketiga b, sehinggaformatnya menjadi glColor3f(r, g, b).Modifikasi yang lain yaitu menambahvariabel count untuk menghitungbanyaknya gerak. Hal ini perluditambahkan karena pengaturangerak melalui variabel count ini.Contoh ini merupakan dasarpembuatan game yang harusdipelajari untuk bisa dikembangkandikemudian hari. Bagian yang pentingdicermati adalah trik pengaturangeraknya, bagian ini merupakan haltersulit karena harus menemukanalgoritma yang tepat dan efisien.

2008 | Direktorat Pembinaan SMK 397

Page 416: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Grafik

11.6. Latihan SoalJawablah soal latihan dibawah ini dengan baik dan benar.1. Apa yang dimaksud dengan grafik2. Dalam bahasa c++ terdapat library opengl, apa yang dimaksud dengan

istilah tersebut3. Apa keuntungan dan kekurangan menggunakan library opengl4. Buatlah program grafik sederhana untuk menampilkan garis5. Buatlah program grafik sederhana untuk menampilkan poligon6. Buatlah program animasi sederhana dengan memanfaatkan library opengl

398 Direktorat Pembinaan SMK | 2008

Page 417: 01 bab 01 Dasar Komputer fachkunde OK

Operasi File Bahasa Pemrograman

BAB 12OPERASI FILE

12.1. Pengertian File12.2. Class stream12.3. Hirarki class stream12.4. File Input/Output C++12.5. Cara Pembacaan String12.6. Routin-routin konversi File12.7. File Binary dan ASCII12.8. Binary I/O12.9. Buffer12.10. Rutin-rutin pada C++12.11. File sekuensial12.12. Program Operasi FiIe12.13. Soal Latihan

12.1. Pengertian FileFile atau Berkas komputer atau

berkas adalah entitas dari data yangdisimpan di dalam sistem berkasyang dapat diakses dan diatur olehpengguna. File juga dapatdidefinisikan sebagai kumpulaninformasi yang biasanya disimpandalam sebuah disk komputer, dimanainformasi disimpan dalam bentuk file-file yang dikemudian hari dapatdiambil kembali.

Sebuah berkas memiliki namayang unik dalam direktori dimana iaberada. Alamat direktori dimanasuatu berkas ditempatkan diistilahkandengan path. File atau berkasdiorganisasikan dari sejumlah record.Masing-masing record bisa terdiri darisatu atau beberapa field. Setiap fieldterdiri dari satu atau beberapa byte.

2008 | Direktorat Pembinaan SMK 399

Page 418: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa pemrograman Operasi File

Gambar 12.1. Berkas/file

Sistem berkas akan memberikansebuah nama terhadap sebuahberkas agar dapat dikelola denganmudah. Meski oleh sistem berkaspenamaan dilakukan denganmenggunakan angka-angka biner,sistem operasi dapat menerjemahkanangka-angka biner tersebut menjadikarakter yang mudah dipahami.

Sebuah berkas berisi aliran data(data stream) yang berisi sekumpulandata yang saling berkaitan sertaatribut berkas (yang bersifat wajibatau opsional), yang kadang-kadangdisebut properties yang berisiinformasi yang berkaitan denganberkas yang bersangkutan. Informasimengenai kapan sebuah berkasdibuat adalah contoh dari atributberkas.

Ukuran sebuah berkas umumnyadirepresentasikan dalam satuan byte.Jika bilangan terlalu besar untukdirepresentasikan dalam satuan byte,maka dapat menggunakan satuan KB(Kilobyte, yang berarti 1,024 byte),

MB (Megabyte, yang berarti1,048,576 byte), GB (Gigabyte, yangberarti 1,073,741,824 byte), dan TB(Terabyte, yang berarti1,099,511,627,776 byte). Dalammekanisme penyimpanan berkas,komputer akan menyimpan berkasdalam dua jenis ukuran: ukuran fisikdan ukuran logis. Ukuran fisik berkasmerujuk kepada ukuran aktual dariberkas, yakni berapa banyak byteyang terdapat di dalam berkas.Sementara ukuran logis merujukkepada jumlah ruangan yangdialokasikan oleh sistem berkasuntuk menempatkan berkas yangbersangkutan di dalam mediapenyimpanan.

Ukuran berkas fisik umumnyalebih besar dibandingkan denganukuran berkas logisnya. Sebagaicontoh, untuk mengalokasikanberkas berukuran logis 5125 byte,dalam sebuah media penyimpananyang diformat dengan sistem berkasyang menggunakan ukuran unit

400 Direktorat Pembinaan SMK | 2008

Page 419: 01 bab 01 Dasar Komputer fachkunde OK

Operasi File Bahasa Pemrograman

alokasi 4096 byte, komputer akanmengalokasikan dua buah unitalokasi, yang berukuran 4096 dan4096, sehingga menghabiskan 8192byte. Meski ukuran logis berkastersebut 5125 byte, komputermengalokasikan 8192 byte, membuat3067 byte tidak digunakan (disebutsebagai wasted space atau slackspace).

Kebanyakan sebuah programmelibatkan media disk sebagai

tempat untuk membaca ataumenyimpan data. Data sendiridisimpan dalam disk dalam suatukesatuan yang disebut file. Suatu filemerupakan organisasi dari sejumlahrecord. Masing-masing record dapatterdri dari satu atau beberapa fielddan setiap field terdiri dari satu ataubeberapa byte data. Satu byte dataterdiri dari susuan 8 bit data. Strukturdata dari fle ditunjukkan pada gambarberikut 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 sebuahstream yang disimpan dalam mediapenyimpanan luar. Karenamerupakan sebuah stream, operasiyang berlaku pada stream berlakujuga untuk file. Stream adalah suatulogika device yang menghasilkandan menerima informasi atau wadahyang digunakan untuk menampungkeluaran dan menampung alirandata.

12.2. Class streamStream (aliran) merupakan nama

yang secara umum diberikan untuksebuah aliran data. Dalam C++stream ditunjukan oleh sebuah objekdari class khusus, dimana telah kitaketahui cin dan cout merupakanabjek stream. Perbedaan streamyang digunakan untuk menunjukanperbedaan beberapa macam darialiran data. Sebagai contoh sebuahclass ifstream merepresentasikanaliran data dari masukan file-file disk.

2008 | Direktorat Pembinaan SMK 401

Page 420: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa pemrograman Operasi File

Programer C mungkin akanheran dengan melihat kelebihan-kelebihan menggunakan classstream untuk operasi I/O, sebagaiganti dari fungsi-fungsi C sebelumnyaseperi printf() dan scanf() dan operasifile seperti fprintf(), fscanf() dan lainsebagainya. Satu alasannya adalahkesederhanaan. Jika kita pernahmenggunakan format karakter %danda baru akan menyadarinya.Disana ternyata tidak ditemui formatdalam stream semenjak sebuahobjek siap ditunjukan pada tampilankomputer.

Alasam lain adalah bahwa kamudapat memberi beban pada sebuahoperator dan fungsi seperti operatorinsertion (<<) dan extraction (>>),dimana untuk dapat bekerja denganclass tersebut anda harusmembuatnya. Hal ini akan membuatclass anda bekerja pada jalan yangsama sebagai satu-kesatuan tipe. Halini jelas membuat programer lebihmudah dan lebih terbebas darikesalahan.

Anda mungkin heran jika streamI/O ternyata penting jika andamerancang progra dalam sebuahlingkungan dengan Graphic userInterface (GUI) seperti halnyawindows. Dengan menggunakan GUIini secara langsung teks keluaran

ditampilkan pada screen . Anda jugamasih dan selalu membutuhkanmengenai stream pada bahasa C++.Hal ini akan terjadi karena merekatahu jalan terbaik untuk menulis datamenjadi file dan juga memformat datayang aka digunakan kemudian dalamteks I/O atau elemen GUI lainnya.

12.3. Hirarki class streamSebuah class stream diatur

dalam hirarki yang agak komplek.Dengan menggunakan class ini, kitadapat membuat tambahan classdengan menggunakan beberapaclass istream. Operator turunan >>merupakan bagian dari class stream,dan operator insertion << adalahbagian dari class ostream. Keduanyamerupakan class-class yangditurunkan dari class ios. Sebuahobjek cout merepresentasikankeluaran stream keluaran, yangbiasanya diarahkan pada tampilanmonitor. Obyek tersebut sudahdikenal sebagai class penentuostream. Sama halnya dengan cinsebagai obyek penentu istream yangditurunkan dari class istream.

Gambar dibawah ini menunjukanpengaturan class-class yang palingpenting.

402 Direktorat Pembinaan SMK | 2008

Page 421: 01 bab 01 Dasar Komputer fachkunde OK

Operasi File Bahasa Pemrograman

Gambar 12.3. Hirarki Class Stream

Class-class tersebut diatasdigunakan sebagai masukan dankeluaran dan menampilkan padalayar monitor dan keboarddideklarasikan oleh file headerIOSTREAM. Class-class yangdigunakan secara khusus untuk inputatau ouput file pada diskdideklarasikan oleh file headerFSTREAM. Gambar diatasmenunjukan class-class yang manadidalamnya dapat ditemukan dua fileheader tersebut. Selain itu jugaditunjukan beberapa manipulatoryang dideklarasikan dalam IOMANIPdan dalam memori, classdideklarasikan dalam STRSTREAM.

Seperti yang dapat dilihat padagambar diatas, class ios yangmerupakan class dasar pada sebuahhirarky. Class tersebut berisibeberapa konstanta ataukeanggotaan fungsi umum sebagaioperasi masukan dan keluaran.

Class ios juga berisi senuah pointeryang digunakan sebagai classstreambuf. Dimana hal tersebut berisibuffer memori aktual pada saat datadibaca atau ditulis. Biasanyaprogrammer tidak memikirkan classstreambuf, karena hal tersebut akanditangani secara otomatis oleh classlain.

Class istream dan ostreamditurunkan dari ios dan akandigunakan sebagai masukan dankeluaran secara terus-menerus.Class istream berisi seperti fungsiget(), getline(), read() dan operatorekstrasi overloded (>>), sedangkanostream berisi put() dan write() sertaoperator insersi overloaded (<<).

Class iostream adalahditurunkan dari dua class istream danostream melalui multiple inheritance.Class yang diturunkan tersebut akandigunakan oleh beberapa pirantiseperti file pada disk, yang mungkin

2008 | Direktorat Pembinaan SMK 403

Page 422: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa pemrograman Operasi File

akan dibuka sebagai masukan dankeluaran pada saat yang sama. Tigaclass istream_withassign,ostream_withassign daniostream_withassign diwariskan dariistream, ostream dan iostreamsecara berturut-turut.

Class ios adalah kakek darisemua class-class stream dan berisisecara umum dari hal-hal yangpenting yang dibutuhkan untukmengoperasikan stream pada C++.Ada tiga hal penting yaitu pengaturanflag, flag status kesalahan dan filemode operasi. Pengaturan flagmerupakan sekumpulan enum yangdidefinisikan dalam ios. Hal tersebut

merupakan kondisi seperti saklar onatau off yang memilih

12.4. File Input/Output C++Input/output file pada bahasa

C++ ditentukan oleh tiga class yaituclass istream untuk menanganimasukan file, class ostream untukmenangani keluaran file serta classiostream untuk menangani filemasukan atau keluaran. Dalam C++operasi ini berkenaan bahwa filesebagai stream dan saat itu pula filedianggap sebagai aliran byte data.Empat class variabel akan secaraotomatis dibuat ketika programdimulai. Perhatikan tabel dibawah ini:

Tabel 12.1. Variabel class I/O pada C++ yang dikenal

VARIABEL DIGUNAKANcin Console input (standar input)

cout Console output (standar output)cerr Console error (standar error)

clog

Console log

Variabel-variabel tersebut di definisikan dalam file standar include<iostream>. Pada umumnya cindigunakan oleh keyboard dan cout,ceer dan clog digunakan untukmenampilkan ke screen monitor.Kebanyakan sistem operasimemperbolehkan programermengubah arah melalui I/O. sebagaicontoh perintah dibawah ini:

my_prog<file.in

ketika dijalankan program dengannama my_prog dan tugas yangdiberikan cin adalah file.in. ketika

sedang mengerjakan operasi filepada disk, diharuskan menggunakanversi file pada class stream. Dalamhal ini ifstream, ofstream danfstream akan didefinisikan dalam fileinclude <fstream>.

Seandainya programmer inginmembaca 100 angka yang berurutandari sebuah file dengan namanumber.dat misalnya, makaprogrammer harus mendeklarasikanvariabel masukan file sebagai berikut:

ifstreamdata_file;

404 Direktorat Pembinaan SMK | 2008

Page 423: 01 bab 01 Dasar Komputer fachkunde OK

Operasi File Bahasa Pemrograman

kemudian yang dibutuhkan adalah C++ mengambil file pada hardiskyang digunakan. Hal ini dikerjakanmelalui dengan membuka fungsikeanggotaan sebagai berikut:

data_file.open("angka.dat");

sekarang programmer dpat membacafile mengunakan statement yangsama untuk membaca yaitu dengancin. Perhatikan program dibawah ini:

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

assert(i >= 0);assert(i< sizeof(data_array)

/sizeof(data_array[0]));

data_file >> data_array[i];}

Terakhir yang dibutuhkan untukmengetahui bahwa sistem I/O telahmengerjakannya dan kemudianmenuliskan sebagai berikut:

data_file.close( );

instruksi tersebut menutup programyang kemudian dapat menggunakanprogram lagi. C++ memperbolehkanmembuka panggilan yang bervariasidenga construktor, sebagai contohmengganti pada penulisan

ifstream data_file; // Filedibaca dari

data_file.open("angka.dat");

dapat ditulis dengan

ifstreamdata_file("angka.dat");

apalagi sebuah destruktor denganotomatis memanggil close. Padakasus tertentu jika sebuah filenumber.dat hilang, bagaimana dandimana programer akanmemberitahukan permasalahantersebut?. Maka keanggotaan fungsiakan kembali dengan pesankesalahan jika pada fungsi tersebutterdapat masalah, atau kesalahanyang mungkin terjadi. Sehigga untukmenguji apakah terdapat kesalahanatau tidak programer perlumenuliskan potongan programdibawah ini:

if (data_file.bad()) {

cerr << "Unable toopen numbers.dat\n";

exit (8);}

Program tersebut dibawah inimerupakan program pembacaanangka

Program 12.1#include<conio.h>#include <iostream>#include <fstream>#include <cstdlib>

using namespace std;

int main( )

2008 | Direktorat Pembinaan SMK 405

Page 424: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa pemrograman Operasi File

{const int DATA_SIZE = 100; // Jumlah item dalam dataint data_array[DATA_SIZE]; // ukuran dataifstream data_file("angkan.dat"); // file masukanint 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 membacabaris dari data, maka harusmenggunakan fungsi getline. Dimana

delim)

string& the_string, char

hal tersebut didefinisikan padapotongan program dibawah ini:

istream& getline( istream& input_file, string& the_string);

istream& getline( istream& input_file,

fungsi tersebut membaca baris yagdisimpannya dalam string. Sebuahfungsi referensi kembali menuju inputstream. Bentuk kedua dari fungsi inimemperbolehkan programmermenuju baris khusus atau batas

406 Direktorat Pembinaan SMK | 2008

Page 425: 01 bab 01 Dasar Komputer fachkunde OK

Operasi File Bahasa Pemrograman

akhir. Jika tidak dikehendaki maka programer bisa menggunakan

pengaturan default untuk menujubaris baru (‘\n’)

12.5. Pembacaan StringUntuk membaca gaya bahasa

string pada C, dapat menggunakanfungsi getline. Fungsi ini dapatdidefinisikan sebagai berikut:

istream& getline(char *buffer, intlen, char delim = '\n')

dimana parameter-parameter padafungsi ini antara lain:1. Buffer, gaya bahasa string,

dimana string disimpan setelahdilakukan pembacaan

2. Len, panjang buffer yangdigunakan dalam byte. Fungsi iniakan membaca sampai len-1byte data menuju buffer.Parameter ini biasanya disebutdengan sizeof(buffer)

3. Delim, yaitu karakter yangdigunakan.

Fungsi ini akan mengembalikanreferensi menjadi file masukan.Kemudian fungsi ini akan membacaterus-menerus sampai ditemukantanda karakter akhir baris (‘\n’).karakter tanda akhir baris ini tidakdisimpan dalam buffer, yangdisimpan sebagai akhir string adalahjika ditemukan tanda bahwa stringtelah berakhir (‘\0’). Perhatikancontoh dibawah ini:

charbuffer[30];cin.getline(buffer,sizeof(buffer));

Fungsi untuk file keluaran adalahsama dengan file masukan, sebagaicontoh pada deklarasi dibawah ini:

ofstreamout_file("out.dat");

deklarasi diatas merupakanmembuat/menulis file dengan namaout.dat dan dalam penulisan namajuga diperbolehkan mnulis dengannama seperti out_file. Padakenyataanya, construktor dapatmengambil dua argumen tambahan.Definisi penuh dari file keluaranconstruktor adalah:

ofstream::ofstream(const char*name, int mode= ios::out,

int prot = filebuf::openprot);

dimana parameter-parameter padafungsi ini adalah: Name, nama dari nama file yang

ditulis Mode, merupakan sekumpulan

flag/tanda O merah bersama-sama bahwa hal tersebutmerupakan mode open. Flagios::out dibutuhkan sebagai filekeluaran. Flag-flag lain yangdibutuhkan seperti dalam tabeldibawah ini:

2008 | Direktorat Pembinaan SMK 407

Page 426: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa pemrograman Operasi File

Tabel 12.2.Open Flag

FLAG

ARTIios::app menambahkan data ke akhir output file.

ios::ate Pergi ke akhir file ketika dibuka.ios::in Membuka untuk masukan (harus diberikan kepada

fungsi bukaifstream variabel).ios::out Buka file untuk output (harus diberikan kepada fungsi anggotabuka 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::nocreat

eMengalami gagal jika file tersebut tidak ada. (Output file saja.Membuka sebuah file input selalu gagal jika tidak ios::norepla

ceJangan menimpa file yang ada. Jika file ada, menyebabkanrusak ketika buka.

Prot, file protection dimana hal initergantung pada sistem operasiyang digunakan untukmenentukan mode proteksi filetersebut. Misalnya pada UNIXproteksi default sampai 0644untuk baca/tulis sendiri, baca padagroup maupun penulisan lainnya,sedangkan MS-DOS/windowsdefaultnya adalah 0 dalam kondisifile normal.

Perhatikan contoh pernyataandibawah ini:

ofstream out_file("data.new", ios::out| ios::binary| ios::nocreate|

ios::app);

potongan pogram diatas dapatdiartikan digunakan menambahkan(ios::app) data biner menggunakan(ios::binary), kalau file sudah adaatau telah ditemukan filenya(ios::nocreate) sedangkan data.new

merupakan nama file yang akanditulis.

Pada contoh dibawah terdiri darifungsi pendek tersebut digunakanuntuk menulis pesan pada sebuahfile catatan. Sesuatu yang pertamayang dilakukan adalah membukafungsi untuk operasi output (ios::out),menambahkan catatan (ios::app),dengan menulis dari permulaansampai akhir penulisan (ios::ate).Setelah fungsi tersebut menulispesan serta terahir menutup file.

Fungsi ini telah dirancangdengan sederhana, dimana haltersebut juga tidak memperdulikanmengenai efisiensi dan sebagai hasildari fungsi adalah sangat tidakefisien. Masalah tersebut dibuka danditutup setiap saat memanggillog_message. Membuka filemerupakan sebuah operasi yangcukup mahal, dan sesuatu juga harusmempunyai kecepatan lebih tinggi,jika akan membuka file hanya sekalidan mengingatkan tersebut.

408 Direktorat Pembinaan SMK | 2008

Page 427: 01 bab 01 Dasar Komputer fachkunde OK

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 FileUntuk menulis angka pada

printer atau sebuah terminal,programer harus mengkonversiangka ke karakter. Sebuah printerhanya bisa mengerti karakter bukanangka. Sebagai contoh 567 harusdikonversi menjadi tig karake yaitu:“5”, ”6”, dan “7” dan kemudiandicetak.

Operator << digunakan untukmengkonversi data menuju karakterdan meletakanya dalam sebuah file.Fungsi ini adalah sangat flexibel. Haltersebut mengubah integersederhana menjadi variabel tetapatau yang sesuai dengan steringdalam bentuk bilangan hexadesimal,oktal atau desimal dengan penulisan

rata pada margin kiri atau kanan. Jikaselama menulis program tidakmelakukan pengaturan apapun makahasil konversi dalam kondisi default.

Keanggotan fungsi setf danunsetf digunakan untuk mengaturkondisi flag menjadi berlogika set “1"atau clear “0” dimana hal inidigunakan kendali proses konversi.Secara umum bentu penulisan fungsiadalah sebagai berikut:

file_var.setf(flags); // Setflagsfile_var.unsetf(flags); //Clear flags

Tabel dibawah ini merupakan daftarflag dan penjelasnya.

Tabel 12.3. I/O konversi flag

FLAG

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

karakteryang mengisi antara tanda atau dasar karakter dan jumlah itu sendiri.

2008 | Direktorat Pembinaan SMK 409

Page 428: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa pemrograman Operasi File

ios::boolalpha Gunakan versi karakter yang benar dan salah untuk input danoutput.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 diawalidengan "0x".ios::showpoint Menunjukkan titik desimal untuk semua angka floating‐point apakah ia dibutuhkan.

ios::uppercase Ketika konversi heksadesimal angka, menunjukkanangka AFsebagai 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 padaoutput.ios::unitbuf Buffer output.

Jika pada saat mnulis programmenginginkan keluaran berupaformat bilangan hexadesimal, makayang harus dikerjakan adalahmenambah dengan menulispotongan program dibawah ini:

number = 0x3FF;cout << "Dec: " << number <<'\n';

cout.setf( ios::hex);cout << "Hex: " << number <<'\n';

int file_var.width(intsize);

suatu saat output harus ditentukansesuai dengan jumlah karakter yangdigunakan. Sebagai contoh misalnyasejumlah 3 angka, secara umumdikonversi menjadi karakter string “3”.Jika diatur sampai empat, makahasilnya menjadi dimana

menunjukan satu ruang karakter.Perhatikan fungsi dibawah ini:

cout.setf( ios::dec);

ketika di”run”, maka pprogram akanmenghasilkan keluaran sebagaiberikut:

Dec:1023Hex:3ff

Ketika konversi angka ke karakterdilakukan, maka fungsikeanggotaannya ditulis:

int file_var.precision(intdigits);

pernyataan program diatasdigunakan untuk mengatur berapabanyak angkat yang akandimunculkan setelah tanda koma (,).Dan kemudian menuliskan fungsiseperti dibawah ini:

char file_var.fill(charpad);

410 Direktorat Pembinaan SMK | 2008

Page 429: 01 bab 01 Dasar Komputer fachkunde OK

Operasi File Bahasa Pemrograman

program diatas digunakan untukmenentukan karakter, dimanakarakter digunakan sebagaipenambah angka ketika angka terlalukecil. Fungsi-fungsi tersebut dapatdisebut dengan pengarah, atauprogramer dapat menggunakan I/Omanipulator.

Sebuah I/O manipulator adalahsebuah fungsi khusus yangdigunakan dalam pernyataan I/Ountuk mengubah format. Jikadipikirkan sebuah manipulator dapatdianalogikan seperti halnya peluruajaib, dimana ketika ditembakanmelalui/masuk atau setelah keluardari sebuah file, akan mengubahkondisi sebuah file tersebut.Manipulator tidak menyebabkan

beberapa keluaran tetapi hanyamengubah kondisinya saja.

Sebagai contoh padamanipulator hex hanya melakukankonversi keluaran menjadihexadesimal.

#include<iostream>

number =0x3FF;cout << "Number is " << hex<< number<< dec <<'\n';

sebuah file header <iostream>mendefinisikan kumpulan dasar darisebuah menipulator yang dapatdilihat pada tabel dibawah ini:

Tabel 12.4. I/O manipulator

MANIPULATOR DESKRIPSIdec 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‐lineend

sKeluaran pada end‐of‐string (`\0').

flush

Lakukan pembufferan keluaran out.

Selain tebal diatas ada jugamanipulator yang didefinisikan ole file

header <iomanip> dapat dilihat pada tabel dibawah ini:

Tabel 12.5. Fungsi I/O manipulator pada C

MANIPULATOR DESKRIPSIsetiosflags(long flags) Atur pemilih flag konversi.

resetiosflags(long flags)

Reset flag terpilih.setbase(int base) Atur konersi dasar menuju 8, 10, atau 16.

Urutkansecara 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

Page 430: 01 bab 01 Dasar Komputer fachkunde OK

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 keluarkanfloat real = 12.34; // angka yang nyata

cout << "123456789012345678901234567890\n"; // ruler keluarancout << 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:12345678901234567890123456789012<‐12<

‐***12<‐+12**<‐12.34<‐12.3<‐1e+01<‐

12.7. File Binary dan ASCIIAmerican Standard Code for

Information Interchange (ASCII)merupakan kode yang terdiri dari 95

kode karakter dan 33 kode kendali(lihat lampiran 1). Dengan kodeASCII memungkinkan manusia

412 Direktorat Pembinaan SMK | 2008

Page 431: 01 bab 01 Dasar Komputer fachkunde OK

Operasi File Bahasa Pemrograman

pengguna komputer dapat mengertikarena ACSII merupakanpengkodean yang mengacu padabahasa manusia.

Misalnya ketika programermenulis file dengan nama prog.ccsecara otomatis file tersebut berupakode ASCII. Sebuah terminal sepertikeyboard, printer berhubungandengan data karakter. Ketikasesorang menulis angka seperti 1234yang kemudian muncul pada layarmonitor, angka tersebut harusdikonversi menjadi empat karakter(“1”, “2”, “3”, dan “4”) .

Hal yang sama juga ketikaseseorang membaca angka darikeyboard, sebuah data harusdikonversi dari data karakter menjadidata integer. Hal ini dikerjakan olehoperator >>. Karater ASCII “0”mempunyai nilai 48, “1” mempunyainilai 49 dan seterusnya sepertiterlihat pada lampiran kode ASCII.Ketika sesorang akan mengubah digittunggal dari kode ASCII menjadiinteger akan sama halnya andamengubah menjadi data 48.Perhatikan program dibawah ini:

intinteger;charch;

ch ='5';integer = ch ‐48;cout << "Integer " <<integer << '\n';

Daripada mengingat karakter “0”yang lebih sulit dingat dengan 48,lebih baik mengkonversi menjadikarakter ‘0’. Perhatikan programdibawah ini:

integer = ch‐ '0';

komputer bekerja dengan databiner. Ketika komputer membaca dari file ASCII, program pada komputermemproses data karakter melaluiroutine konversi seperti routinekonversi integer yang telahdidefinisikan. Operasi ini akanmenjadi lebih mahal dikarenakanmembutuhkan ruang memori danwaktu. Sebuah file biner tidakmembutuhkan konversi. File-filetersebut umumnya memakai ruang yang kecil dibandingkan file kode ASCII. Kelemahan pada file bineradalah tidak bisa dicetak secaralangsung pada terminal atau printer. Jika file biner dicetak pada printer secara langsung tanpa adanyakonversi yang terjadi adalah data cetak tidak sesuai seperti terlihat“#@$%@^Aa^AA^^JHC%^X". Tentunya apa yang akan terjadi jika dicoba mencetak file biner.

File ASCII marupakan file portbelkarena banyak dipakai. File ini dapatdipindah dari satu mesin ke mesinyang lain dengan sedikit kesalahan.File biner bisa dikatakan pasti tidakportabel. File mana yang harusdigunakan? Dalam beberapa kasusASCII sangat baik.

Alasan ini dikemukakan jikamempunyai data dengan jumlah kecilatau medium waktu konversi tidakbegitu mempengaruhi unjuk kerjaprogram yang telah dibuat. Selain itufile ASCII juga membuat dalammelakukan verifikasi data. Hanyaketika menggunakan sejumlah datayang besar saja akan memakanruang dan mempengaruhi unjuk kerjasehingga diperlukan data dalamformat biner.

2008 | Direktorat Pembinaan SMK 413

Page 432: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa pemrograman Operasi File

12.8. Binary I/OInput atau output file biner dapat

diselesaikan melalui dua fungsikeanggotaan yaitu: read and write.Penulisan atau sintak untukmembaca adalah:

in_file.read(data_ptr, size);

dimana data_ptr merupakan pointer sebagai tempat untuk meletakan data

dan size merupakan angka dalamukuran byte yang akan dibaca.

Fungsi keanggotaan qcount akanmengembalikan sejumlah byte datayang telah dibaca pada akhir. Hal inidimungkinkan akan berkurangdiandingkan dengan jumlah byteyang diminta. Sebagai contohpembacaan yang mungkin ditemuipada akhir file atau ditemukanadanya 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 diatasketika sedang membaca sebuah struktur persegi panjang. Sebuah operator & akan membuat persegipanjang tersebut manuju sebuah pointer. Kemudian sebuah sintak static_cast<char *> dibutuhkansetelah read menginginkan sebuah deretan array. Sebuah operator sizeof digunakan untuk menentukanberapa banyak byte yang dibacasebaik pengecekan tersebut sampai operasi tersebut menjadi berhasil. Sebuah keanggotaan fungsi write telah memanggil secara sekuensial

sama dengan operasi read adalahdengan sintak:

out_file.write(data_ptr, size);

12.9. BufferBuffer atau sering kita

artikan sebagai penahan ataupenyangga suatu memori sebuahdata. Penyangga sebuah I/Otidak bisa ditulis secara langsungpada sebuah file. Sebuah dataakan dijaga keberadaanya dalamsebuah buffer sampai disanacukup untuk menulis

414 Direktorat Pembinaan SMK | 2008

Page 433: 01 bab 01 Dasar Komputer fachkunde OK

Operasi File Bahasa Pemrograman

dalam kapasitas data besar atausampai sebuah buffer disegarkankembali. Sebuah program yangmengikuti dirancang untukdicetak pesan cepat sampaisetiap bagian terselesaikan.Perhatikan potongan programdibawah ini:

cout <<"mulai";do_step_1( );cout << "langkah 1complete";do_step_2( );cout << "langkah 2complete";do_step_3( );cout << "langkah 3complete\n";

sebagai ganti dari menulis sebuahpesan sampai pada tiap langkahselesai, cout pesan tersebutdiletakan dalam sebuah buffer.Hanya setelah program selesai makaselanjutnya buffer memperlehpenyegaran atau pengosongan dansemua pesan yang datangditumpahkan keluar dengan seketika.Sebuah manipulator I/O flush akanmenyegarkan buffer-buffer tersebut.Sifat yang ditulis diatas diberikancontoh seperti pada programdibawah ini:

cout << "mulai" <<flush;do_step_1( );cout << "Langkah 1 complete"<< flush;do_step_2( );cout << "langkah 2 complete"<< flush;do_step_3( );cout << "langkah 3complete\n" <<flush;

karena tiap pernyataan keluaranberakhir dengan flush, sebuahkeluaran akan ditampilkan secaralangsung. Ini artinya bahwa

Page 434: 01 bab 01 Dasar Komputer fachkunde OK

penyelesaian pesan akan datangsesuai dengan waktunya.

Dalam I/O buffer, data ditahandan kemudian dikirim dalam bentukfile, sedangkan dalam I/O tidakterbuffer data secara langsung dikirimdalam bentuk file. Analogi inidisampaikan dalam bentuk kejadiandi lingkunang kita pada sejumlahpenjepit kertas yang jatuh kelantaiseseorang dapat mengambilnyadalam mode buffer atau tanpa buffer.Dengan mode buffer jika andamenggunakan tangan kanan untukmengambil penjepit kertas dankemudian memindahkan penjepit ketangan kiri. Proses tersebut diulang-ulang sampai pada tangan kiri penuhkemudian penjepit tersebutdipindahkan ke dalam kotak yangada diatas meja. Dengan buffer I/Oakan ada media sementara yang

digunakan untuk menampungsebelum dipindahkan ke media yangutama dan lebih besar. Dalam modetanpa buffer, dapat dianalogikanseperti anda mengambil sejumlahpenjepit kertas yang jatuh dilantaidan langsung memasukan kedalamkotak yang berada diatas meja.Pekerjaan ini dilakukan dengantangan kanan tanpa menggunakantangan kiri sebagai penampungsementara.

Dalam kebanyakan kasus, I/Odengan buffer sering digunakandaripada tanpa buffer. Dalam I/Otanpa buffer tiap pembacaan danpenulisan membutuhkanpemanggilan system. Beberapapemanggilan pada sisem operasisangat mahal dan membutuhkanwaktu yang banyak, sehinggadengan I/O yang menggunakan

2008 | Direktorat Pembinaan SMK 415

Page 435: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa pemrograman Operasi File

buffer dapat meminimalkanpanggilan-panggilan yang dilakukan.

I/O tanpa buffer biasanyadigunakan ketika hanya membacaatau menulis data biner dalamjumlah besar ketika kendali langsungdari piranti atau sebuah filedibutuhkan.

Kembali pada penjepit kertasseperti dicontohkan diatas, jikaseseorang menggambil benda kecilseperti penjepit tersebut, tentunyaoran tersebut tidak akan menemuikesulitan menggunakan tangan kirisebagai penahan/penampungsementara. Tetapi jika seseorangmenambil bola meriam yam mana

bendanya lebih besar ddibandingkanpenampungnya maka kasus sepertiini tidak menggunakan buffer.

Sebuah open system,pemanggilan digunakan untukmembuka file tanpa buffer. Sebuahdefinisi makro digunakan dengancara memanggil dari system yangberbeda. Sebagai contoh bekerjapada dua system yang berbedaseperti pada system operasi UNIXdan MS-DOS/windows. Dalam kasustersebut maka sebuah kondisicompilasi (#ifdef/#endif) digunakanuntuk memperbaiki file tersebutseperti contoh program dibawah ini:

#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 adafile_descriptor = open(name, flags, mode); // file baru

dimana, file_descriptor merupakaninteger yang digunakan untukmengidentifikasikan file untuk dibaca,ditulis atau ditutup pemanggilannya.Jika file_descriptor kurang dari 0berarti kesalahan telah terjadi. Namemerupakan nama file. Flag

merupakan definisi dalam file headerfcntl.h, dimana flag tersebutdijelaskan dalam table dibawah.Sedangkan mode adalah modeproteksi file dimana mode inibiasanya 0644.

416 Direktorat Pembinaan SMK | 2008

Page 436: 01 bab 01 Dasar Komputer fachkunde OK

Operasi File Bahasa Pemrograman

Tabel 12.6. Open flag

FLAG ARTIO_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 ispresent).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 saatoperasi membuka file dengan namafile data.txt dalam mode pembacaantext, maka potongan program yangdituliskan adalah sebagai berikut:

data_fd = open("data.txt",O_RDONLY);

selain contoh diatas, bagaimanauntuk membuat sebuah file output.datdapat ditulis, maka potonganprogram adalah sebagai berikut:

out_fd = open("output.dat", O_CREAT|O_WRONLY, 0666);

Pada sintak tersebut diatasmenggunakan operator OR ( | ) yangartinya merupakan pengabungan flagyang melebihi dari satu, untukmempermudah dan mempercepatpenulisan ketika beberapa programtelah berjalan pada awal, dan tiga filesudah terbuka, dimana hal tersebutdapat dideskrisikan pada tabledibawah ini:

Tabel 12.7. Standar file tidak terbufferNOMOR FILE

PENJELASAN0 Standard in1 Standard out2 Standard error

Format dari pemanggilan readadalah:

read_size = read(file_descriptor,buffer, size);

dimana: read_size, merupakanjumlah actual dari byte yang dibaca,0 mengindikasikan akhir file danbilangan negative mengindikasikanadanya kesalahan dalam file.

File_descriptor, merupakansebuah file yang mendeskripsikandari file yang dibuka, buffermerupakan sebuah pointer untukmenempatkan dan meletakan datayang dibaca dari file. Size merupakanukuran data yang dibaca. Hal inimerupakan ukuran dari file yangdiminta. Pada jumlah sebenarnyadari byte yang dibaca mungkin lebih

2008 | Direktorat Pembinaan SMK 417

Page 437: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa pemrograman Operasi File

kecil dibandingkan dengannya.Format pemanggilan penulisanadalah sebagai berikut:

write_size = write(file_descriptor,buffer, size);

pada sintaks diatas, write_sizemerupakan jumlah byte data actualyang ditulis, bilangan negativemenunjukan adanya kesalahan. Filedescriptor adalah file yangmeneskripsikan saat sebuah filedibuka.

Buffer adalah sebuah pointerdimanadata ditulis. Size adalahukuran data yang ditulis. Sebuahsystem akan dicoba untuk ditulisnyadalam jumlah besar, tetapi jika pirantitelah penuh ata disana ada beberapamasalah, sejumlah bilangan dari bytemungkin akan ditulis. Terakhir adalah

melakukan penutupan file dimanasintaknya adalah sebagai berikut:

flag =close(file_descriptor)

pada sintaks tersebut diatas terdapatflag yang digunakan untuk menandaibahwa ketika data 0 untuk menandaibahwa penutupan berhasilsedangkan, bilangan negative ketikamengalami kegagalan atau error. Filedescriptor untuk mendeskripsikansaat file dibuka.

Program dibawah ini merupakanpencopyan file. Operasi inimengunakan I/O tanpa buffer karenaprogram tersebut membutuhkanbuffer yang besar. Program dibuattidak menggunakan I/O buffer untukmembaca 1 KB data dan kemudiandipindahkan menuju buffer denganmenggunakan ifstream dikirimmenuju 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

Page 438: 01 bab 01 Dasar Komputer fachkunde OK

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

Page 439: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa pemrograman Operasi File

Langkah pertama harusmembuat semua ukuran bufferdidefinisikan sebagai nilai konstan,sehingga hal tersebut sangat mudahdimodifikasi, biasanya cukup mudahdiingat yaitu misalnya jika ulkurannya16K maka programmer dapatmenggunakan dengan menuliskan16 * 1024. Atau bentuk konstannyadapat ditulis seperti sebelumnya yaitu16K.

Jika pengguna menggunakanprogram yang tidak sesuai, akanmuncul pesan bahsa hasil atauprogram mengalami kesalahan.Untuk menolongnya ataumembetulkannya maka sebuahpesan akan muncul bagaimanamenggunakan program yang betul.Suatu ketika programmerdimungkinkan tidak mengetahuibahwa buffer telah penuh, sehinggaperlu ditambahkan read_size yangdigunakan untuk menentukan jumlahbyte yang akan ditulis

12.10. Rutin-Rutin pada C++C++ mengizinkan anda untuk

menggunakan library I/O pada Cdidalam program C++. Hal ini terjadibanyak kali terjadi karena seseorangmembutuhkan suatu program C,menterjemahkannya kepada C++,dan tidak ingin mengganggupemanggilan I/O. Dalam beberapahal, library bahasa C yang lama bisalebih baik dan lebih mudahdigunakan dibandingkan denganyang baru dalam hal ini C++.

Sebagai contoh, rutin-rutin stringpada C seperti sscanf dansprintf menggunakan suatu jauhlebih kompak dalam sistim

pengaturannya dibanding C++.Deklarasi-deklarasi pada struktur danfungsi yang digunakan oleh fungsi CI/O disimpan di dalam standar fileinclude <cstdio>.

FILE *file_variable; /*Comment */

sebagai contoh:#include<cstdio>

FILE *in_file; /* Fileberisi data masukan data */

Sebelum suatu file dapatdigunakan, yang harus dibukadengan fungsi adalah fopen. fopenkembali pada sebuah pointer ke filestruktur. Format untuk fopen adalah:

file_variable = fopen(name,mode);

dimana file_variablenya adalah:name adalah sebuah nama yangdigunakan oleh sebuah file seperti("data.txt", "temp.dat", dan lain-lain).Mode merupakan sebagai indikasiapakah file akan dibaca atau ditulis.Mode adalah dengan tanda “w”adalah untuk menulis atau “r” untukmembaca. Fungsi fclose untukmenutup file, dimana format fcloseadalah:

status =fclose(file_variable);

variabel status akan menjadi nojika fclose telah sukses atau bukannol (nonzero) jika mengalamikesalahan.

C menyediakan tiga threelangkah sebelum membuka sebuah

420 Direktorat Pembinaan SMK | 2008

Page 440: 01 bab 01 Dasar Komputer fachkunde OK

Operasi File Bahasa Pemrograman

file. Hal ini dapat dilihat pada daftar dibawah ini:

Table 12.8. FileStandard

FILE DESCRIPTIONstdin 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 membacasebuah karakter dari suatu file. Jikatidak ada lebih banyak data di dalamfile, fungsi kembali secara konstan keEOF (EOF dideskkripsikan pada

cstdio). Yang perlu dicatat bahwafgetc kembalikan satu bilangan bulat,bukan suatu karakter. Ini diperlukankarena EOF flag harus mempunyainilai 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 karakterFILE *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

);}

2008 | Direktorat Pembinaan SMK 421

Page 441: 01 bab 01 Dasar Komputer fachkunde OK

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 sekuensialSequential file (Arsip sekuensial)

adalah sekumpulan rekaman yangdisimpan dalam media penyimpanansekunder komputer, yang dapatdiakses secara sekuensial mulai darirekaman pertama sampai denganrekaman yang terakhir, rekaman perrekaman secara searah. Filesekuensial berisi rekord-rekord datayang tidak mengenal posisi baris ataunomor rekord pada saat aksesnya,dan setiap record dapat mempunyailebar yang berbeda-beda.

Akses terhadapnya selaludimulai dari awal file dan berjalansatu persatu menuju akhir dari file.Dengan demikian, penambahan filehanya dapat dilakukan terhadap akhirfile, dan akses terhadap baris tertentuharus dimulai dari awal file.

Fungsi baku yang terkait denganfile sekuensial ini antara lain adalahfprintf, fscanf, dan rewind . Programberikut menyajikan penanganan filesekuensial tentang data nasabahyang berisi tiga field, yaitu nomoridentitas (account), nama (name),dan posisi tabungannya (balance)untuk (1) menyajikan yangtabungannya bernilai nol, (2)berstatus kredit, dan (3) berstatus

debet. Misalny sebuah file datatersimpan dengan nama klien.dat.

Rekaman terakhir adalahrekaman fiktif, yang menandai akhirdari arsip. Pada beberapaimplementasi, rekaman fiktif inidisebut sebagai EOF (End Of File).Arsip sekuensial berasal dari hasilperekaman (penulisan) yang jugadilakukan rekaman per rekaman.Setiap rekaman boleh berisi typedasar ataupun type terstruktur yangtelah didefinisikan, setiap rekamanstrukturnya sama.

Elemen dari rekaman disebutsebagai "field", ada field (atau jugasekumpulan field) rekaman yangdisebut sebagai "key" karenakekhususannya dalam proses. Jikakey dari setiap rekaman tidak adayang sama (unik), maka key menjadiidentitas rekaman, dan disebut"primary key". Setiap rekaman dapatdiakses dan dikonsultasi (dibaca)menurut urutannya denganpemanggilan primitif akses yangtersedia. Perekaman dapat dilakukanmelalui primitif penulisan.

Perhatikan bahwa suatu arsipsekuensial hanya dapat disiapkanhanya pada salah satu modusoperasi: diakses/dibaca, atau ditulis.

422 Direktorat Pembinaan SMK | 2008

Page 442: 01 bab 01 Dasar Komputer fachkunde OK

Operasi File Bahasa Pemrograman

Dalam definisi arsip sekuensial, tidakpernah sebuah arsip diproses untukkedua modus: dibaca dan sekaligus

ditulis. Primitif-primitif tsb, akandidefinisikan kemudian.

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

2008 | Direktorat Pembinaan SMK 423

Page 443: 01 bab 01 Dasar Komputer fachkunde OK

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

}brea

k;

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

}brea

k;

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

Page 444: 01 bab 01 Dasar Komputer fachkunde OK

Operasi File Bahasa Pemrograman

12.12. Program Operasi FiIeDari uraian operasi file diatas,

dibawah ini merupakan beberapaoperasi file yang sering dilakukansehari-hari. Setiap kita bekerjadengan menggunakan komputer kitabiasanya melakukan operasimembuka file, menulis file,menambah data file, menghapus file,menutip file dan lain sebagainya.Operasi tersebut dilakukan denganmenggunakan mouse atau keyboardsecara langsung

Bagaimana jika hal tersebutdilakukan leh program?. Tentunya haltersebut harus ada instruksi atauperintah-perintah yang digunakanoleh tiap operasi tersebut. Dibawah

ini merupakan beberapa operasi file yang dilakukan dengan bahasa C++.

12.12. 1. Membuka filePerintah membuka file dan

menghubungkannya dengan streamdengan fopen (library stdio.h) danmenutupnya dengan fclose

FILE *fopen(char *nama_file, char*mode)FILE *fclose(FILE *pointer_file)

Dalam membuka file diperlukanmode, dimana hal tersebutmerupakan cara pengaksesan file.Berikut daftar mode yang dapatdigunakan:

Tabel 12.9. Mode operasi file pada C

MODE ARTIr Membuka sebuah file teks untuk pembacaan

w Membuat sebuah file teks untuk penulisana Menambahkan data ke sebuah file teksrb Membuka sebuah file binary untuk pembacaanwb Membuat sebuah file binary untuk penulisanab Menambahkan data ke sebuah file binaryr+ Membuka sebuah file teks untuk

pembacaan/penulisanw+

Membuat sebuah file teks untuk pembacaan/penulisana

+Menambahkan data/membuat file teks untuk pembacaan/penulisan

r+b atau rb+

Membuka sebuah file binary untuk pembacaan/penulisanw+b atau

wb+Membuat sebuah file binary untuk pembacaan/penulisana+b atau

ab+Menambahkan data ke file binary untuk pembacaan/penulisan

Dalam operasi file dilakukan adabeberapa hal yang perlu diperhatikanantara lain: jika operasi openberhasil, fopen() mengembalikan

sebuah file pointer yang valid,sedangkan jika operasi gagal, makafopen() mengembalikan sebuah nullpointer, sehingga harus selalu dicek

2008 | Direktorat Pembinaan SMK 425

Page 445: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa pemrograman Operasi File

pada saat pembukaan file.Perhatikan program dibawah ini:

FILE *fp;if((fp=fopen("fileku.txt","r")==

NULL) {cout << "Error dalam

pembukaan

file\n";exit(1);}

fclose(fp); //menutupstream file

Dibawah ini merupakan fungsi untuk operasi file teks antara lain

a. fgetc() dan fputc(), dimana Sintaknya dapat ditulis:

int fgetc(FILE *fp);int fputc(int ch, FILE *fp);

Program 12.7include <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 ditulisifor (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 karakterputchar(ch); //menampilkan karakter ke layar

}

fclose(fp);

426 Direktorat Pembinaan SMK | 2008

Page 446: 01 bab 01 Dasar Komputer fachkunde OK

Operasi File Bahasa Pemrograman

}

b. fgets() dan fputs(), Sintaknya dapat diltulis sebagai berikut:

int fputs(char *str, FILE *fp);char *fgets(char *str, int num, FILE *fp);

Program 12.8.#include <stdio.h>#include <stdlib.h>

void main(){

FILE *fp;char ch[14];fp = fopen("foo.abc", "w"); //buka file foo.abc untuk ditulisifputs("String Contoh",fp); //menuliskan stringfclose(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()dimana operasi ini mempunyaiciri-ciri sebagai berikut: Mirip dengan sintaks scanf() dan

printf() Dapat digunakan untuk

sembarang file (tidak hanyamonitor/layar)

Dapat menggunakan format dataSintaks adalah sebagai berikut:

int fprintf(FILE *fp, const char *format,…);int fscanf(FILE *fp, const char *format,…);

Program 12.9#include <stdio.h>#include <stdlib.h>

void main(){

2008 | Direktorat Pembinaan SMK 427

Page 447: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa pemrograman Operasi File

FILE *fp;int i;

charx[100];

fp = fopen("foo.abc", "w"); //buka file foo.abc untuk ditulisifprintf(fp, "\nSample Code\n\n"); //menuliskan sesuatufor (i = 1; i <= 10 ; i++) {

fprintf(fp, "i = %d\n", i);}

fclose(fp);

if((fp=fopen("foo.abc","r"))==NULL) { printf("Error membuka file\n"); exit(1);

}while(!feof(fp))

{ fscanf(fp,"%s",&x); puts(x);

}fclose(fp);

}

d. fread() dan fwrite()fungsi operasi ini antara lain: Untuk membaca dan menulis

blok data (misalnya: Karakter,integer, structure,dan lain-lain)

Untuk dapat menggunakanfwrite(), file harus dibuka dengantambahan opsi “b” (binary)

Sintaks:fwrite(void *buffer, int b_byte, int c,file *fp);fread(void *buffer, int b_byte, int c,file *fp);

Keterangan:buffer: pointer ke area di memoriyang menampung data yg akandibaca ke fileb_byte: banyaknya byte data yang akan dibaca/tulis (dapatmenggunakan sizeof(buffer))

c: banyaknya blok data yang akandibaca/ditulisfp: pointer ke file

12.12.2. Menulis FileSalah satu jenis pemrosesan

pada file adalah menulis ataumerekam data ke file. Untuk menulissebuah karakter, bentuk yangdigunakan adalah denganmenggunakan Sintak sebagai berikut:

putc(int ch, file*fp)

dimana fp adalah pointer file yang

dihasilkan oleh fopen() ch adalah karakter yang akan

ditulis.

428 Direktorat Pembinaan SMK | 2008

Page 448: 01 bab 01 Dasar Komputer fachkunde OK

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 FileSetelah 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 potensiyg dimiliki saat "<< "itu " << endl; fileteks.close();

}

perintah fileteks.Open(“C:/catat.txt”);akan membuka file catatan.txt yangada di C:\ . Apabila file tersebutbelum ada maka akan dibuat secaraotomatis, dan apabila sudah ada isifile catatan.txt akan terhapus.

12.12.4. Menambah Data FileSuatu file yang sudah ada

sebelumnya dapat ditambah datayang baru (tidak menghapus data

2008 | Direktorat Pembinaan SMK 429

Page 449: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa pemrograman Operasi File

lama). Caranya adalah denganmenambahkan perintah ios::apppada open().

nama_obyek.open(“nama file”, ios::app)

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 FileDalam penulisan tidak

selamanya jalan yang mulus ditemui.Ada kemungkinan terjadi saat filedibuka, ternyata file tidak ada. Dalam

C++ tersedia fungsi untuk memeriksakondisi-kondisi pada operasi file,sehingga kesalahan saat eksekusidapat dikendalikan. Fungsi yangdimaksud 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 dilakukandalam bentuk karakter. Misalnyaproses penyimpanan data ke filedilakukan setiap karakter, atau

membaca data file karakter perkarakter. Operasi ini didukung olehfunction put() dan get().

Program 12.14. Menyimpan data karakter per karakter ke dalam file.

430 Direktorat Pembinaan SMK | 2008

Page 450: 01 bab 01 Dasar Komputer fachkunde OK

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 LatihanJawablah soal latihan dibawah ini dengan baik dan benar.1. Apa yang dimaksud dengan file2. Apa yang dimaksud dengan kode ascii3. Apakah fungsi buffer pada operasi string4. Buatlah program untuk menulis file dengan nama latih.txt5. Buatlah program untuk menambah data pada file latih.txt6. Buatlah program untuk menghapus file latih.txt7. Apa yang dimaksud dengan file skuensial

2008 | Direktorat Pembinaan SMK 431

Page 451: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa pemrograman Operasi File

432 Direktorat Pembinaan SMK | 2008

Page 452: 01 bab 01 Dasar Komputer fachkunde OK

Pointer Bahasa Pemrorgraman

BAB 13POINTER

13.1 Pemrograman pointer13.2 Deklarasi variabel bertipe pointer13.3 Inisialisasi Pointer13.4 Pointer untuk fungsi13.5 Mengakses dan Mengubah isi Pointer13.6 Array dan Pointer13.7 Pointer dalam Fungsi13.8 Fungsi Pointer ke Static Class Member Function13.9 Fungsi Pointer pada Class anggota Fungsi Non-static13.10 Soal Latihan

13.1. Pemrograman pointerPada programmer pemula hal

yang sulit dipahami adalah pointer.Pointer adalah pada dasarnya samadengan veriabel lain. Dengan pointersetiap variable diletakan pada alamatmemori yang besarnya cukup untukmenampung nilai dari sebuahvariable tipe data. Pada sebuahkomputer PC misalnya satu byte datasecara umum dialokasikan untuk tipedata char, 2 byte untuk tipe datashort, 4 byte untuk tipa data int, longdan float serta 8 byte untuk tipe datadouble. Tiap-tiap byte data memori

mempunyai alamat yang unik.Sebuah variable alamat merupakanalamat dimana sebuah byte datapertama dapat dialokasikan. Sebagaicontoh misalnya dapat didefinisikandalam program sebagai berikut;

char huruf;short angka; float amount;

sehingga pengaturan memorinyadapat diilustrasikan sebagai berikut

2008 | Direktorat Pembinaan SMK 433

Page 453: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Pointer

huruf angka amount

1200 1201 1203

Gambar 13.1. Ilustrasi Pengaturan Data Pada Sebuah Memori

Pada gambar diatas variable letterdiletakan pada alamat 1200, numberpada alamat 1201 dan amount padaalamat 1203.

Ketika programmermendeklarasikan sebuah variable,sama halnya denganmenginformasikan compiler duasesuatu yaitu : nama variable dantipe variable. Misalnya kita akanmendeklarasikan tipe variable integerdengan nama variable k sehinggadapat ditulis:

Intk

Pada tipe variable integer merupakantipe data yang digunakan compilerdimana memori yang terpakai adalahdua byte.

Setiap kali komputer menyimpandata, maka sistem operasi akanmengorganisasikan lokasi padamemori pada alamat yang unik. Misaluntuk alamat memori 1776, hanyasebuah lokasi yang memiliki alamattersebut. Dan alamat 1776 pastiterletak antara 1775 dan 1777.Dalam pointer, terdapat 2 jenisoperator yang biasa digunakan.

Kegunaan pointer yang utamaadalah untuk menyimpan alamatmemori dari sebuah variabel (datatype atau object dari class). Selainmenyimpan alamat dari variabel,pointer juga dapat digunakan untukmenyimpan alamat dari sebuahfungsi (function pointer).

Function pointer telah digunakansejak dikenalkannya bahasa C, danbanyak digunakan untuk sebuahfungsi callback atau untukmeningkatkan readability dari sebuahcode

Anda dapat memperlakukanfunction pointer seperti pointer biasa(pointer ke datatype/object), andadapat menyimpan,mengirimkan,merubah address, atau meng-evaluasi address dari pointer kefungsi ini dengan sifat tambahananda dapat memanggil fungsi yangditunjuk oleh function pointer.

Setiap variabel yangdideklarasikan, disimpan dalamsebuah lokasi memori dan penggunabiasanya tidak mengetahui di alamatmana data tersebut disimpan. DalamC++, untuk mengetahui alamattempat penyimpanan data, dapat

434 Direktorat Pembinaan SMK | 2008

Page 454: 01 bab 01 Dasar Komputer fachkunde OK

Pointer Bahasa Pemrorgraman

digunakan tanda ampersand (&) yangdapat diartikan “alamat”.

Sebenarnya jika programer akanmendeklarasian sebuah variable,seorang programer tidak diharuskanmenentukan lokasi sesungguhnyapada memory, karena hal ini akandilakukan secara otomatis olehkompiler dan operating sysem padasaat run-time.

Jika ingin mengetahui dimanasuatu variable akan disimpan, dapatdilakukan dengan memberikan tandaampersand (&) didepan variable ,yang berarti "address of".Perhatikan contoh dibawah ini:

ted = &andy;

Akan memberikan variable tedalamat dari variable andy, karenavariable andy diberi awalan karakterampersand (&), maka yang menjadipokok disini adalah alamat dalammemory, bukan isi variable. Misalkanandy diletakkan pada alamat 1776kemudian dituliskan instruksi sebagaiberikut :

andy = 25; fred = andy; ted = &andy;

Maka hasilnya adalah sebagaiberikut:

andy

25

1775 1776 1777

Fred Ted

25 1776

Gambar 13.2. Operator Alamat (&)

Dengan menggunakan pointer,kita dapat mengakses nilai yangtersimpan secara langsung denganmemberikan awalan operator asterisk(*) pada identifier pointer, yangberarti "value pointed by". Contoh :

beth =*ted;

(dapat dikatakan:"beth sama dengannilai yang ditunjuk oleh ted") beth =25, karena ted dialamat 1776, dannilai yang berada pada alamat 1776adalah 25.

2008 | Direktorat Pembinaan SMK 435

Page 455: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Pointer

Ted1776

1775 1776 1777

25 memori

25

Gambar 13.3. Operator Reference

beth

Ekspresi dibawah ini semuanyabenar, perhatikan pernyataanprogram dibawah:

andy ==25&andy == 1776 ted == 1776*ted ==25

Ekspresi pertama merupakanassignation bahwa andy=25;. Kedua,menggunakan operator alamat

(address/derefence operator (&)),sehingga akan mengembalikanalamat dari variabel andy. Ketigabernilai benar karena assignationuntuk ted adalah ted = &andy;.Keempat menggunakan referenceoperator (*) yang berarti nilai yangada pada alamat yang ditunjuk olehted, yaitu 25. Maka ekspresi dibawahini pun akan bernilai benar :

*ted ==andy

13.2. Deklarasi variabel bertipe pointerVariabel pointer sering dikatakan

sebagai variabel yang menunjuk keobyek lain. Pada kenyataan yangsebenarnya, variabel pointer berisialamat dari suatu obyek lain (yaituobyek yang dikatakan ditunjuk olehpointer). Sebagai contoh, px adalah

variable pointer dan x adalah variabelyang ditunjuk oleh px. Kalau xberada pada alamat memori (alamatawal) 1000, maka px akan berisi1000. Sebagaimana diilustrasikanpada gambar di bawah ini:

436 Direktorat Pembinaan SMK | 2008

Page 456: 01 bab 01 Dasar Komputer fachkunde OK

Pointer Bahasa Pemrorgraman

zzzzpx

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 berupasembarang tipe yang sudah dibahaspada bab-bab sebelumnya, maupunbab-bab berikutnya. Adapunnama_var_pointer adalah nama darivariabel pointer. Perhatikan contohberikut ini:

int*px;char *pch1,*pch2;

float *greatnumber;

Contoh pertama menyatakan bahwapx adalah variabel pointer yangmenunjuk ke suatu data bertipe int,sedangkan contoh kedua masingpch1 dan pch2 adalah variabelpointer yang menunjuk ke databertipe char.

2008 | Direktorat Pembinaan SMK 437

Page 457: 01 bab 01 Dasar Komputer fachkunde OK

nn

t

eu

n

e

nnn

<

g=

e

=

a

Bahasa Pemrograman

Gambar 13.6. Ilustrasi pendeklarasian variabel pointer

Pointer

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

using namespace std;

int main (){

int nilai1 = 5, nilai2= 15; int * mypointer; mypointer = &nilai1; mypointer = 10; mypointer = &nilai2;*mypointer = 20;

cout < "nilai1==" << nilai1 << "/ nilai2==" << nilai2;return 0;

}

Keluaran pro ram diatas adalah seb gai berikut:Output : nilai1==10 / nilai2==20

Perhatikan bagaimana nilai dari Kemudian memberikan nilai 10 kenilai1 dan nilai2 diubah secara tidak nilai yang ditunjuk oleh mypointer,langsung. Pertama mypointer yaitu alamat dari nilai1, maka secaradiberikan alamat nilai1 dengan tidak langsung nilai1 telahmenggunakan tanda ampersand (&). dimodifikasi. Begitu pula untuk nilai2.

Program 13.2#include <iostream.h>

using namespace std;

438Direktorat Pembinaan SMK | 2008

Page 458: 01 bab 01 Dasar Komputer fachkunde OK

Pointer Bahasa Pemrorgraman

int main (){

int nilai1 = 5, nilai2 = 15;int *p1, *p2;p1 = &nilai1; // p1 = address of nilai1p2 = &nilai2; // p2 = address of nilai2*p1 = 10; // nilai pointed by p1 = 10*p2 = *p1; // nilai pointed by p2 = nilai pointed by p1p1 = p2; // p1 = p2 (nilai of pointer copied)*p1 = 20; // nilai pointed by p1 = 20cout << "nilai1==" << nilai1 << "/ nilai2==" << nilai2;return 0;

}

Keluaran program diatas adalah sebagai berikut:nilai1==10 / nilai2==20

13.3. Inisialisasi PointerDalam melakukan pemrogaman

dengan menggunakan pointer yangpertama perlu dilakukan dalammembuat program adalah denganmelakukan inisialisasi pointertersebut. Untuk lebih jelasnyaperhatikan contoh dibawah ini:

int number; int *tommy =&number;

pernyataan diatas akan sama atauekivalen dengan pernyataan dibawahini:

int number; int *tommy;tommy =&number;

Seperti pada array, inisialisasi isi daripointer dapat dilakukan dengandeklarasi seperti contoh berikut :

char * terry ="hello";

Misalkan kata "hello" disimpan padaalamat 1702 dan seterusnya, makadeklarasi tadi dapat digambarkansebagai berikut:

2008 | Direktorat Pembinaan SMK 439

Page 459: 01 bab 01 Dasar Komputer fachkunde OK

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'atau "hello", walaupun 1702menunjuk pada karakter tersebut.Sehingga jika akan dilakukanperubahan pada karakter 'o' digantidengan tanda '!' maka ekspresi yangdigunakan ada 2 macam :

terry[4] = '!'; *(terry+4) = '!';

Penulisan terry[4] dan *(terry+4),mempunyai arti yang sama. Jikadigambarkan:

‘h’ ‘e’ ‘l’ ‘l’ ‘!’ ‘\0’

1702 1703 1704 1705 1706 1707

terry 1702 terry[4]

*(terry+4)

Gambar 13.8 Deklarasi “Hello” pada Alamat Terry[4] Diisi !

Perhatikan contoh programdibawah, dimana char memerlukan 1byte, short memerlukan 2 bytes danlong memerlukan 4. Terdapat 3 buahpointer :

char *mychar; short *myshort; long *mylong;

ekspresi diatas akan menunjuk pada lokasi dimemory masing-masing1000, 2000 and 3000, sehingga jika dituliskan :

mychar++; myshort++; mylong++;

mychar, akan bernilai 1001, myshort bernilai 2002, dan mylong bernilai3004. Alasannya adalah ketika terjadi pertambahan maka akan

440 Direktorat Pembinaan SMK | 2008

Page 460: 01 bab 01 Dasar Komputer fachkunde OK

Pointer Bahasa Pemrorgraman

ditambahkan dengan tipe yang sama seperti yang didefinisikan berupa

ukuran dalam bytes.

Gambar 13.9. Lokasi Memori Ukuran Byte

Perhatikan ekspresi dibawah ini :

*p++; *p++ =*q++;

Ekspresi pertama equivalen dengan*(p++) dan yang dilakukan adalahmenambahkan p (yaitu alamat yangditunjuk, bukan nilai yangdikandungnya). Ekspresi kedua,yang dilakukan pertama adalahmemberikan nilai *q ke *p dankemudian keduanya ditambahkan 1atau dengan kata lain :

*p = *q; p++; q++;

Tipe pointer void merupakan tipekhusus. void pointers dapatmenunjuk pada tipe data apapun,nilai integer value atau float, maupunstring atau karakter. Keterbatasannyaadalah tidak dapat menggunakanoperator asterisk (*), karena panjangpointer tidak diketahui, sehinggadiperlukan operator type casting atauassignations untuk mengembalikannilai void pointer ketipe datasebenarnya.

Program 13.3include <iostream.h>

using namespace std;

void increase (void* data, int type)

2008 | Direktorat Pembinaan SMK 441

Page 461: 01 bab 01 Dasar Komputer fachkunde OK

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

}

Keluaran program diatas adalah sebagai berikut:6, 10, 13

13.4. Pointer untuk fungsiC++ memperbolehkan operasi

dengan pointer pada function.Kegunaan yang utama adalah untukmemberikan satu function sebagaiparameter untuk function lainnya.

Deklarasi pointer untuk function samaseperti prototype function kecualinama function dituliskan diantaratanda kurung () dan operator asterisk(*) 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

Page 462: 01 bab 01 Dasar Komputer fachkunde OK

Pointer Bahasa Pemrorgraman

int operation (int x, int y, int (*functocall)(int,int)){

int g;g = (*functocall)(x,y);return (g);

}int main (){

int m,n;m = operation (7, 5, addition); n = operation (20, m, minus); cout <<n;return 0;

}

Keluaran program diatas adalah sebagai berikut:8

Dari contoh diatas, minusmerupakan pointer global untukfunction yang mempunyai 2parameters bertipe int, kemudiandiberikan untuk menunjuk functionsubtraction, ditulis dalam satu barisinstruksi :

int (* minus)(int,int) =subtraction;

Agar suatu pointer menunjuk kevariabel lain, mula-mula pointer harusdiisi dengan alamat dari variabelyang akan ditunjuk. Untukmenyatakan alamat dari suatuvariabel, operator & (operator alamat,bersifat unary) bisa dipergunakan,dengan menempatkannya di depannama variabel. Sebagai contoh, bila xdideklarasikan sebagai variabelbertipe int, maka

&x

berarti “alamat dari variabel x”.Adapun contoh pemberian alamat x

ke suatu variable pointer px (yangdideklarasikan sebagai pointer yangmenunjuk ke data bertipe int) yaitu:

px =&x;

Pernyataan di atas berarti bahwa pxdiberi nilai berupa alamat darivariabel x. Setelah pernyataantersebut dieksekusi barulah dapatdikatakan bahwa px menunjuk kevariable x.

Jika suatu variabel sudahditunjuk oleh pointer, variabel yangditunjuk oleh pointer tersebut dapatdiakses melalui variabel itu sendiri(pengaksesan langsung) ataupunmelalui pointer (pengaksesan taklangsung). Pengaksesan taklangsung dilakukan denganmenggunakan operator indirection(tak langsung) berupa simbol *(bersifat unary). Contoh penerapanoperator * yaitu:

*px

2008 | Direktorat Pembinaan SMK 443

Page 463: 01 bab 01 Dasar Komputer fachkunde OK

=

=

=

nn e

Bahasa Pemrograman Pointer

yang menyatakan “isi atau nilai px = &x;variabel/data yang ditunjuk olehpointer px” . Sebagai contoh jika y namun terdapat pernyataanbertipe int, maka sesudah duapernyataan berikut

px = &x;

y = *px;

maka y tidaklah berisi nilai x, sebaby = *px;

px belum diatur agar menunjuk ke

variabel x. Hal seperti ini harapy akan berisi nilai yang sama dengan diperhatikan. Kalau programnilai x. Kedua pernyataan di atas melibatkan pointer, dan pointer belum

diinisialisasi, ada kemungkinan akanpx = &x;

terjadi masalah yang dinamakan

y = *px;

“bug” yang bias mengakibatkan

sebenarnya dapat digantikan dengankomputer tidak dapat dikendalikan(hang). Selain itu tipe variabel pointer

sebuah pernyataan berupa dan tipe data yang ditunjuk harussejenis. Bila tidak sejenis maka akan

y = x;

terjadi hasil yang tidak diinginkan.

Seandainya pada program di atasUntukberikut.

lebih jelasnya lihat gambar

tidak terdapat pernyataan

Gambar 13.10. Ilustrasi Kesalahan Yang Terjadi Karena Tipe Tidak Sejenis

Program 13.5. Mengakses isi suatu variabel melalui pointer.#include <stdio.h>#include <iostream.h>

using namespace std;

444Direktorat Pembinaan SMK | 2008

Page 464: 01 bab 01 Dasar Komputer fachkunde OK

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

Page 465: 01 bab 01 Dasar Komputer fachkunde OK

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

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

Page 466: 01 bab 01 Dasar Komputer fachkunde OK

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

}

13.5. Mengakses dan Mengubah isi PointerProgram berikut memberikan

gambaran tentang pengubahan isisuatu variable secara tak langsung(yaitu melalui pointer). Mula-mula pddideklarasikan sebagai pointer yangmenunjuk ke suatu data bertipe floatdan d sebagai variabel bertipe float.Selanjutnya

d =54.5;

digunakan untuk mengisikan nilai54,5 secara langsung ke variabel d.Adapun

pd =&d;

digunakan untuk memberikan alamatdari d ke pd. Dengan demikian pdmenunjuk ke variabel d. Sedangkanpernyataan berikutnya

*pd = *pd + 10; (atau: *pd+= 10; )

merupakan instruksi untuk mengubahnilai variabel d secara tak langsung.Perintah di atas berarti “jumlahkanyang ditunjuk pd dengan 10kemudian berikan ke yang ditunjukoleh pd”, atau identik denganpernyataan

d = d +10;

Akan tetapi, seandainya tidak adainstruksi

pd =&d;

maka pernyataan

*pd = *pd +10;

tidaklah sama dengan

d = d +10;

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

2008 | Direktorat Pembinaan SMK 447

Page 467: 01 bab 01 Dasar Komputer fachkunde OK

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

Page 468: 01 bab 01 Dasar Komputer fachkunde OK

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

Page 469: 01 bab 01 Dasar Komputer fachkunde OK

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 PointerPada bahasan ini programer

perlu mengerti perbedaan antarapointer dengan array. Keduanyamenggunakan memori yanglokasinya ditentukan, dimanaIdentifier suatu array equivalendengan alamat dari elemen pertama,sedangkan pointer equivalen denganalamat elemen pertama yangditunjuk. Perhatikan deklarasiveriabel sebagai berikut :

int numbers[20];int *p;

maka deklarasi dibawah ini jugabenar :

p =numbers;

dan numbers equivalen, danmemiliki sifat (properties) yang sama.Perbedaannya, user dapatmenentukan nilai lain untuk pointer pdimana numbers akan selalumenunjuk nilai yang sama sepertiyang telah didefinisikan. p,merupakan variable pointer,numbers adalah constant pointer.Karena itu walaupun instruksi diatasbenar, tetapi tidak untuk instruksidibawah ini :

numbers= p;

karena numbers adalah array(constant pointer), dan tidak ada nilaiyang dapat diberikan untuk identifierkonstant (constant identifiers).Perhatikan program dibawah ini:

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

using namespace std;

450 Direktorat Pembinaan SMK | 2008

Page 470: 01 bab 01 Dasar Komputer fachkunde OK

Pointer Bahasa Pemrorgraman

int main (){

intnumbers[5];int *p;p =numbers;*p =10;p++;*p =20;p = &numbers[2]; *p= 30;p = numbers + 3; *p= 40; p = numbers;*(p+4) = 50; for(int n=0; n<5; n++)cout << numbers[n]<< ", ";getch();return0;

}

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

array pada C sangatlah erat. Sebabsesungguhnya array secara internalakan diterjemahkan dalam bentukpointer. Pembahasan berikut akanmemberikan gambaran hubunganantara pointer dan array. Misalnyadideklarasikan di dalam suatu fungsi

static int tgl_lahir[3] = { 01, 09, 64 };

dan

int *ptgl;

Kemudian diberikan instruksi

ptgl = &tgl_lahir[0]; //pointer to array of integer

maka ptgl akan berisi alamat darielemen array tgl_lahir yangberindeks nol. Instruksi di atas bisajuga ditulis menjadi

ptgl =tgl_lahir;

sebab nama array tanpa tandakurung menyatakan alamat awal dariarray. Sesudah penugasan seperti diatas,

*ptgl

dengan sendirinya menyatakanelemen pertama (berindeks samadengan nol) dari array

tgl_lahir.

Page 471: 01 bab 01 Dasar Komputer fachkunde OK

2008 | Direktorat Pembinaan SMK 451

Page 472: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Pointer

13.6.2. Pointer dan StringBeberapa contoh hubungan pointerdan string ditunjukkan pada programberikut.

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 berikutString yang ditunjuk oleh pnegara = INDONESIA

Pada program di atas,

char *pnegara = “INDONESIA”;

akan menyebabkan kompilermengalokasikan variabel pnegarasebagai variabel pointer yangmenunjuk ke obyek bertipe char danmenempatkan konstanta

“INDONESIA” dalam suatu memori,kemudian pointer pnegara akanmenunjuk ke lokasi string“INDONESIA”.

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

Page 473: 01 bab 01 Dasar Komputer fachkunde OK

Pointer Bahasa Pemrorgraman

Pernyataan di atas akan menyerupai akan berisi sebuah addresspernyataan seperti dibawah ini: memory yang tersimpan pada

variabel a (setelah ada sebuahchar negara[] = “INDONESIA”; address memory yang di-assign

ke variabel a tersebut)tetapi sebenarnya kedua pernyataan 3. Menuliskan nama sebuah variabelinisialisasi di depan tidaklah tepat array tanpa indexnyasama. Sebab pnegara adalah pointer Misalnya dideklarasikan(menyatakan alamat) yang dengan o float nilai[5], maka penulisanmudah dapat diatur agar menunjuk nilai artinya sama denganke string lain (bukan string &nilai[0]“INDONESIA”), sedangkan negaraadalah array (array menyatakan

o int b[3][4], maka b[3] adalahsama dengan &b[3][0] dan

alamat yang konstan, tak dapatdiubah). Jadi, ada beberapa carapenulisan ekspresi variabel yangmenghasilkan sebuah addressmemory, di antaranya adalah :1. Menuliskan ampersand di depan

b[0] adalah sama dengan&b[0][0].

Bisa disimpulkan bahwa sebuahvariabel array yang dituliskantanpa kurung siku indexnya adalahsama dengan address memory

sebuah variabel 'normal' dari elemen pertama arrayMisalnya a dideklarasikan sebagaisebuah variabel normal, maka &a

tersebut.1. Hubungan antara pointer dan

akan menghasilkan adressmemory dari variabel a tersebut

2. Menuliskan nama dari sebuahvariabel pointerMisalnya a dideklarasikan sebuah

array. Suatu nama array yangditulis tanpa dengan indeksnyamenunjukkan alamat elemenpertama dari array (versi 1).

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

Page 474: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Pointer

}

2. Hubungan antara pointer dan array. Suatu nama array yang ditulistanpa dengan indeksnya menunjukkan alamat elemen pertama dariarray (versi 2).

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

using namespace std;

main(){

static int tgl_lahir[] = {16, 4, 1974};int *ptgl, i;ptgl = tgl_lahir;printf("Nilai yang ditunjuk oleh ptgl = %d\n", *ptgl);for (i=0; i<3; i++)printf("Nilai dari tgl_lahir[i] = %d\n", *(ptgl+i));getch();return 0;

}

3. Hubungan antara pointer dan array. Suatu nama array yang ditulistanpa dengan indeksnya menunjukkan alamat elemen pertama dariarray (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

Page 475: 01 bab 01 Dasar Komputer fachkunde OK

Pointer Bahasa Pemrorgraman

getch();return 0;

}

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

4. Menukarkan isi 2 string tanpa pemakaian pointer.

Program 13.20#include <stdio.h>#include <string.h>#define PANJANG 20

char nama1[PANJANG] = "AHMAD";char nama2[PANJANG] = "RIFDA";

main(){

char namax[PANJANG];puts("SEMULA : ");printf("nama1 ‐‐> %s\n", nama1); printf("nama2 ‐‐>%s\n", nama2); strcpy(namax, nama1); strcpy(nama1, nama2); strcpy(nama2, namax);puts("KINI : ");printf("nama1 ‐‐> %s\n", nama1);printf("nama2 ‐‐> %s\n", nama2);

}

5. Menukarkan isi 2 string dengan fasilitas pointer.

Program 13.21. Menukarkan isi 2 string dengan fasilitas pointer#include <stdio.h>#include <string.h>char *nama1 = "AHMAD";char *nama2 = "RIFDA";

main(){

char *namax;puts("SEMULA : ");printf("nama1 ‐‐> %s\n", nama1);

2008 | Direktorat Pembinaan SMK 455

Page 476: 01 bab 01 Dasar Komputer fachkunde OK

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 perbedaanantara aplikasi pada nomor 4dengan nomor 56. Mengamati persamaan

penggunaan variable index

pada array dan variable indexpada pointer, untuk menunjuksuatu nilai data di dalam suatuvariable array.

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

untuk menyimpan sejumlah pointer.Sebagai contoh:

char *namahari[10];

456 Direktorat Pembinaan SMK | 2008

Page 477: 01 bab 01 Dasar Komputer fachkunde OK

Pointer Bahasa Pemrorgraman

merupakan pernyataan untukmendeklarasikan array pointer. Arraynamahari terdiri dari 10 elemenberupa pointer yang menunjuk kedata bertipe char.

Gambar 13.12. Array pointer

Array pointer bisa diinisialisasi sewaktu pendeklarasian. Sebagaicontoh:

{“Senin”, “Selasa”,“Rabu”, “Kamis”, “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.

Suatu pointer bisa saja menunjuk kepointer lain. Gambar berikutmemberikan contoh mengenaipointer menunjuk pointer.

static char *namahari[] =

Gambar 13.13. Pointer yang menunjuk pointer

Untuk membentuk rantai pointerseperti pada gambar di atas,pendeklarasian yang diperlukanberupa

intvar_x;

int*ptr1;int**ptr2;

Perhatikan pada deklarasi di depan:var_x adalah variabel bertipe int.ptr1 adalah variabel pointer yang

2008 | Direktorat Pembinaan SMK 457

Page 478: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Pointer

menunjuk ke data bertipe int. ptr2adalah variabel pointer yangmenunjuk ke pointer int. (itulahsebabnya deklarasinya berupa int**ptr2; ). Agar ptr1 menunjuk kevariabel var_x, perintah yang

diperlukan berupa ptr1 =&var_x; Sedangkan supaya ptr2menunjuk ke ptr1, instruksi yangdiperlukan adalah

ptr2 =&ptr1;

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

Page 479: 01 bab 01 Dasar Komputer fachkunde OK

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 dimemori\n", b); printf("c = %p =alamat b di memori\n", c);printf("alamat c di memori =%p\n", &c);

}

13.7. Pointer dalam FungsiPointer dan kaitannya dengan

fungsi yang akan dibahas berikutmeliputi: Pointer sebagai parameterfungsi dan pointer sebagai keluaranfungsi

13.7.1. Pointer SebagaiParameter Fungsi

Penerapan pointer sebagaiparameter yaitu jika diinginkan agarnilai suatu variabel internal dapatdiubah oleh fungsi yang dipanggil.Perhatikan contoh fungsi berikutdibawah ini.

void naikkan_nilai (int *x,int *y){*x = *x+ 2;*y = *y+ 2;}

Fungsi di atas dimaksudkan agarkalau dipanggil, variabel yangberkenaan dengan parameter aktualdapat diubah nilainya, masing-masing dinaikkan sebesar 2. Contohpemanggilan :

naikkan_nilai(&a,&b);

Perhatikan, dalam hal ini variabel adan b harus ditulis diawali operatoralamat (&) yang berarti menyatakanalamat variabel, sebab parameterfungsi dalam pendefinisian berupapointer.

13.7.2. Pointer Sebagai FungsiKeluaran

Suatu fungsi dapat dibuat agarkeluarannya berupa pointer.Misalnya, suatu fungsi menghasilkan

2008 | Direktorat Pembinaan SMK 459

Page 480: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Pointer

keluaran berupa pointer yangmenunjuk ke string nama_bulan,seperti pada contoh berikut.

char *nama_bulan(int n){static char *bulan[]={"Kode bulan salah", "Januari","Februari", Maret","April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "Nopember","Desember"};return ( (n<1 | | n>12) ? bulan[0] :bulan[n] );}

Pada definisi fungsi di atas,

char *nama_bulan()

menyatakan bahwa keluaran fungsinama_bulan() berupa pointer yangmenunjuk ke obyek char (atau string).Dalam fungsi nama_bulan(), mula-mula array bernama bulandideklarasikan dan sekaligusdiinisialisasi agar menunjuk sejumlahstring yang menyatakan nama bulan.Di bagian akhir fungsi, pernyataan

return ( (n<1 || n>12) ?bulan[0] :bulan[n]);

menyatakan bahwa hasil fungsiberupa pointer yang menunjuk ke string “Kode bulan salah”

(bulan[0]) jika masukan fungsi n<1atau n>12

bulan[n] untuk n yang terletakantara 1 sampai dengan 12.

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

Page 481: 01 bab 01 Dasar Komputer fachkunde OK

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

Page 482: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Pointer

}

Program 13.30. Mengakses isi suatu variabel melalui pointer. Tipe variabel

pointer dan tipe data yang ditunjukharus 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 antarapointer dan array. Suatu nama arrayyang ditulis tanpa dengan indeksnya

menunjukkan alamat elemen pertamadari array (versi 1).

#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

Page 483: 01 bab 01 Dasar Komputer fachkunde OK

Pointer Bahasa Pemrorgraman

printf("Nilai dari tgl_lahir[0] = %d\n", tgl_lahir[0]);}

Program 13.33. Hubungan antarapointer dan array. Suatu nama arrayyang ditulis tanpa dengan indeksnya

menunjukkan alamat elemen pertamadari array (versi 2).

#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 antarapointer dan array. Suatu nama arrayyang ditulis tanpa dengan indeksnya

menunjukkan alamat elemen pertamadari array (versi 3).

#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 20char nama1[PANJANG] = "GATUTKACA";char nama2[PANJANG] = "HANOMAN";

main()

2008 | Direktorat Pembinaan SMK 463

Page 484: 01 bab 01 Dasar Komputer fachkunde OK

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 stringGATUTKACA*/printf("nama2 ‐‐> %s\n",nama2);/* nama2 adl pointer yg menunjuk ke stringHANOMAN*/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;

Page 485: 01 bab 01 Dasar Komputer fachkunde OK

b = &a;c = &b;

464 Direktorat Pembinaan SMK | 2008

Page 486: 01 bab 01 Dasar Komputer fachkunde OK

Pointer Bahasa Pemrorgraman

printf("Nilai a = %d atau %d atau %d\n",a, *b, **c);printf("b = %p = alamat a dimemori\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

Page 487: 01 bab 01 Dasar Komputer fachkunde OK

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 Functionpenggunaan function pointer

pada C++ dibatasi, yaitu functionpointer tidak boleh menunjuk pada

function yang berada dalam sebuahclass (class member function) kecualifunction tersebut berjenis static.

class A{

private :public : static void WriteString(char* String);

};

466 Direktorat Pembinaan SMK | 2008

Page 488: 01 bab 01 Dasar Komputer fachkunde OK

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 = newA; B* b = new B;

b‐>Func(a‐>WriteString);

delete a;delete b;

}

Namun terkadang yang menjadimasalah adalah, sebuah memberfunction yang berjenis static, tidak

memiliki akses ke member dari class,sebagai contoh bila kita rubah classA 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

Page 489: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Pointer

maka compiler menyatakan error,bahwa fungsi static tidak dapatmengakses member dari class A.Namun bila kita rubah fungsiWriteString menjadi non-static(dengan menghapus keyword

"static") maka fungsi WriteString tidakdapat di pass melalui argument keB::func (karena function pointer tidakboleh menunjuk fungsi yangmerupakan member class)

13.10.Fungsi Pointer pada Class anggota Fungsi Non-staticSalah satu cara agar kita dapat

membuat function pointer yangmenunjuk ke non-static classmember function bekerja adalahdengan cara memberikan object dariclass yang membernya ingin diakses.Pada masalah sebelumnya

A::WriteString memerlukan akses keprivate member dari A yaitumengakses int A::Privatenumber,maka solusinya kita pass object dariclass A ke argumen dariA::WriteString kode yang sebelumnyadirubah 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

Page 490: 01 bab 01 Dasar Komputer fachkunde OK

Pointer Bahasa Pemrorgraman

A* a = newA; B* b = new B;

b‐>Func(a‐>WriteString,a);

delete a;delete b;

}

Terdapat cara lain menggunakanmember function pointer selaindengan cara di atas. Beberapa halyang harus diperhatikan adalah: Deklarasi Member function harus

dengan menggunakanoperator ::*

Member function pointermemerlukan objek atau pointerke objek supaya dapatdigunakan.

Memanggil member functionpointer menggunakan operator .*atau ->* , tergantung apakahdigunakan dengan objek (ataureference) atau dengan pointer.Yang menjadi masalah di siniadalah kedua operator tersebutmemiliki prioritas yang lebihrendah daripada operator

aplikasi fungsi, sehingga andaakan selalu memerlukan tandakurung untuk menggunakanmember function pointer.

Assignment ke member functionpointer harus selalumenggunakan operator &. Hal iniberbeda dengan function pinterbiasa dimana operator & adalahoptional. Beberapa kompilerakan menerima konstrukassignment tanpa operator &,tapi itu tidak standard. Kompileryang sesuai dengan standard C++98 akan merejectassignment member functionpointer tanpa operator &. untuklebih jelasnya anda dapatmelihat contoh program dibawah:

#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

Page 491: 01 bab 01 Dasar Komputer fachkunde OK

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 LatihanJawablah soal latihan dibawah ini dengan baik dan benar.1. Apa yang dimaksud dengan pointer pada bahasa C++2. Gambarkan pengaturan memori pemrograman menggunakan pointer3. Bagaimana cara mendeklarasikan pointer4. Bagaimana menginisialisasi pointer5. Buatlah pemrograman string menggunakan pointer6. Buatlah program yang menggunakan fungsi pada pointer7. Bagaimana cara mengubah dan mengisi isi pointer8. Apakah perbedaan array dan pointer

470 Direktorat Pembinaan SMK | 2008

Page 492: 01 bab 01 Dasar Komputer fachkunde OK

Class Bahasa Pemrorgraman

BAB 14CLASS

14.1. Obyek dan Class14.2. Tipe Class14.3. Deklarasi Class14.4. Struktur dan kelas14.5. Constructor dan destructor14.6. Overloading Constructor14.7. Menulis Class14.8. Reference this14.9. Overloading Method14.10. Access Modifier14.11. Contoh Program Class14.12. Soal Latihan

14.1. Obyek dan ClassDalam C atau bahasa

pemrograman prosedural lainnya,pemrogramannya berorientasikepada aksi, sedangkanpemrograman C++ cenderungberorientasi pada obyek. Disampingitu, unit program dalam C adalahfungsi, tetapi di dalam C++, unitprogram adalah kelas (class) dimanasuatu obyek (object) secaramendekati kenyataan dapatdiciptakan.

Kelas di dalam C++ merupakanpengembangan dari notasi struct didalam C biasa, yaitu struktur untukmendefinisikan elemen-elemen data.Misalnya didefinisikan data tentangwaktu yang terdiri dari jam, menit,dan detik sebagai berikut:

struct Time {int hour;// nilai jam 0 ‐ 23int minute;// nilai menit 0 ‐ 59int second;// nilai detik 0 ‐ 59

};

Definisi Time ini terdiri dari tigabuah anggota data (data members)yang semuanya bertipe int, yaituhour, minute, dan second. Anggotastruktur dapat terdiri dari berbagaimacam tipe, kecuali tipe Time itusendiri. Berikut adalah contoh-contohdeklarasi variabel dan akses anggotadata dari struktur

Time timeObyek, timeArray[10],

2008 | Direktorat Pembinaan SMK 471

Page 493: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Class

*timePtr;cout <<timeObyek.hour;// mengakses data hour dariobyekcout << timePtr ‐>hour;// mengakses data hour dariobyek// yang ditunjuk oleh pointertimePtr

Untuk melakukan prosespengolahan terhadap obyek data inidiperlukan fungsi-fungsi yang ditulissecara terpisah dari definisistrukturnya. Sebagai contoh, fungsiberikut disusun untuk menuliskanobyek Time dengan bentukhh:mm:ss.

void printTime (constTime &t){

cout << (t.hour < 10 ? "0" : "") <<

t.hour <<":"

<< (t.minute < 10 ? "0" : "") <<

t.minute<< ":"

<< (t.second < 10 ? "0" : "") <<

t.second <<":" ;}

Pada contoh ini terlihat adanyapemisahan antara data danprosedur/fungsi, yang berbedadengan konsep pemrogramanbeorientasi obyek dimana antarakeduanya dibungkus ke dalam satukesatuan dengan menggunakan tipeclass. Pembungkusan(encapsulation) inilah yangmerupakan salah satu ciri utama daripemrograman berorientasi objek.

14.2. Tipe ClassKata kunci class dalam C++

digunakan untuk memodelkan suatuobyek terdiri dari dua anggota, yaitu

atribut yang direpresentasikan

Page 494: 01 bab 01 Dasar Komputer fachkunde OK

sebagai anggota data (datamembers) dan sifat atau operasi-operasi atau prosedur-prosedur yangdirepresentasikan sebagai fungsianggota (member functions). Fungsianggota sering disebut denganmetode pada bahasa pemrogramanberorientasi objek lainnya dandigunakan untuk memberi pesanpada obyek yang bersangkutan.Setiap anggota dari obyek inidikelompokkan berdasarkan sifatakses terhadap anggotaanggotanya,baik dari dalam obyek itu sendirimaupun dari obyek lainnya. Ada tigasifat yang dapat diberikan, yaitupublic, private, dan protected.Perhatikan contoh berikut:

class Time {public: Time();

// default constructorvoid setTime(int, int, int);// member functionvoit print();~Time();// destructorprivate:int hour;// data memberint minute;int second;

};

Anggota kelompok private hanyadapat diakses oleh fungsi anggotadari kelas itu sendiri dan kelas lainyang mempunyai hubungan friend(akan dijelaskan pada babberikutnya). Hal ini berbeda dengankelompok public yang dapat diaksesdari bagian-bagian lainnya dariprogram, sedangkan kelompok

472 Direktorat Pembinaan SMK | 2008

Page 495: 01 bab 01 Dasar Komputer fachkunde OK

Class Bahasa Pemrorgraman

protected hanya dapat diakses oleh {fungsi anggota dari kelas yang bersangkutan dan kelas-kelas lain }

hour = minute = second = 0;

yang menjadi turunannya.Pembatasan akses itu

merupakan information hiding yangberguna antara lain jika representasidata dari kelas berubah, hanya fungsianggota (bukan program daripengguna) yang perlu diambil, danjika ada kesalahan dalam manipulasianggota data dari kelas, hanya fungsianggota yang perlu di-debug, bukanseluruh program.

Fungsi anggota yang namanyasama dengan nama kelas disebutdefault constructor, dan fungsianggota yang namanya terdiri tkitatilde (“~“) diikuti dengan nama kelasdisebut destructors. Constructor akansecara otomatis dipanggil olehkompilator untuk inisialisasi obyek,sedangkan destructor akan secaraotomatis dipanggil oleh kompilatoruntuk dealokasi memori. Nama kelasakan berlaku sebagai kata kuncipenentu untuk suatu tipe data baru,misalnya dengan kelas Time tersebutdapat dibuat deklarasi variabelsebagai berikut:

Time timeObyek1, timeObyek2;

Pada saat deklarasi inilahdiproses fungsi anggota Time() yangmerupakan default constructor darikelas ini. Namun demikian, kelastersebut belum dapat digunakankarena implementasi setiap fungsianggota belum dibuat. Perhatikancontoh implementasi berikut dibawahini:

Time ::Time()

void Time :: setTime( int h = 0, int m = 0,int s = 0 ){

hour = h; minute = m; second = s;

}

voit Time :: print(){

cout << (hour < 10 ? "0" : "")<< hour << ":"<< (minute < 10 ? "0" : "")<< minute << ":"<< (second < 10 ? "0" : "")<< second << ":" ;

}

Operator “::“ adalah scope-operator, yang menunjukkan bahwafungsi yang dituliskan di belakangnyamerupakan anggota dari kelas yangditulis di depannya. Dengandemikian, misalnya void Time ::setTime ( h = 0, m = 0, s = 0 )menunjukkan bahwa fungsi setTimemerupakan anggota dari kelas Time.Suatu fungsi dalam C++ dapatdipanggil dengan nol atau lebihargumen, seperti contoh Time() yangtidak mempunyai argumen, dansetTime ( h = 0, m = 0, s = 0 )mempunyai tiga argumen denganmasing-masing mempunyai nilaidefault. Artinya, fungsi itu dapatdipanggil dengan beberapa caraseperti contoh berikut:

setTime( 10, 30, 25 );// argumen h=10, m=30, s=25setTime( 10, 30);

2008 | Direktorat Pembinaan SMK 473

Page 496: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Class

// argumen h=10, m=30, s=0setTime();// argumen h=0, m=0, s=0

Dengan definisi dan deklarasi kelasTime yang telah dibuat, maka dapatdigunakan sebagai tipe baru sepertipada program berikut (misalnyadefinisi dan deklarasi kelas Timetelah disimpan pada file time.h):

#include <iostream>#include "time.h"

main() { Time t1;t1.setTime(10,30,25);// obyek t1 memiliki hour=10, minute=30, second=25t1.

Mekanisme kelas (class)memungkinkan penggunamendefinisikan tipe data abstrak(ADT). Suatu kelas mempunyaiempat atribut, yaitu:

Anggota-anggota data (datamembers) yang merupakanrepresentasi dari kelas. Suatukelas dapat mempunyai nol ataulebih data member dengan tipeapa saja.

Fungsi-fungsi anggota (membersfunction) yaitu operasi-operasiyang dapat diterapkan padaobyek-obyek dari kelas itu.Sebuah kelas dapat mempunyainol atau lebih fungsi anggota.

Tingkat akses.Setiap anggota suatu kelas dapatditentukan tingkat aksesnyasebagai private, protected ataupublic. Tingkat-tingkat inimengontrol akses ke anggotakelas. Biasanya representasi kelasbersifat private, sedang operasi-operasinya bersifat public.Spesifikasi private/public inimembentuk information hidding.

Nama kelas yang berlaku sebagaitype-specifier.

14.3. Deklarasi ClassClass adalah metode logical

untuk organisasi data dan fungsidalam struktur yang sama. Classdideklarasikan menggunakankeyword class, yang secarafungsional sama dengan keywordstruct, tetapi dengan kemungkinanpenyertaan fungsi sebagai anggota,formatnya sebagai berikut :

class class_name {permission_label_1: member1; permission_label_2: member2;

..

.}object_name;

Dimana class_name adalahnama class(user defined type) danfield optional object_name adalahsatu atau beberapa identifier objekyang valid. Body dari deklarasiberisikan members, yang dapatberupa data ataupun deklarasi fungsi,dan permission labels (optional),dapat berupa satu dari tiga keywordberikut : private:, public: atauprotected:. Digunakan untukmenentukan batasan akses terhadapmembers yang ada :

474 Direktorat Pembinaan SMK | 2008

Page 497: 01 bab 01 Dasar Komputer fachkunde OK

Class Bahasa Pemrorgraman

1. private , anggota class dapatdiakses dari danggota lain padakelas yang sama atau dari class"friend".

2. protected , anggota dapatdiakses dari anggota class yangsama atau class friend , dan jugadari anggota classturunannya(derived).

3. public , anggota dapat diaksesdari class manapun.

Default permission label : privateContoh :

class CRectangle {int x, y;public:void set_values (int,int);int area (void);} rect;

Deklarasi class CRectangle danobject bernama rect. Class ini berisiempat anggota: dua variable bertipeint (x and y) pada bagian private(karena private adalah defaultpermission) dan dua fungsi padabagian public : set_values() danarea(), dimana hanya dideklarasikanpropotype_nya.

Perhatikan perbedaan antaranama classdan nama object. Padacontoh sebelumnya CRectangleadalah nama class(contoh, user-defined type), dan rect adalah objectdari tipe CRectangle. Sama halnyadengan deklarasi berikut :

int a;

int adalah nama class (type)dan a adalah nama object(variable).

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

class CRectangle { int x, y; public:void set_values (int,int);int area (void) {return (x*y);}};

void CRectangle::set_values (int a, int b) {x = a;y = b;}int main () { CRectangle rect; rect.set_values (3,4);cout << "area: " << rect.area();getch();

2008 | Direktorat Pembinaan SMK 475

Page 498: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Class

return 0;}

Keluaran program diatas adalah sebagai berikut:area: 12

Hal baru dari contoh diatasadalah operator :: dari lingkup yangdisertakan dalam pendefinisianset_values(). Digunakan untukmendeklarasikan anggota dari classdiluar class tersebut. Scope operator

(::) menspesifikasikan class dimanaanggota yang dideklarasikan berada,memberikan scope properties yangsama seperti jika dideklarasikansecara langsung dalam class.

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

Page 499: 01 bab 01 Dasar Komputer fachkunde OK

Class Bahasa Pemrorgraman

Perhatikan pemanggilanrect.area() tidak memberikan hasilyang sama dengan pemanggilanrectb.area(). Ini disebabkan karenaobjek dari class CRectanglemempunyai variable sendiri, x dan y,dan fungsi set_value() dan area().

Class terdiri dari dua bagian,yaitu: Class head yaitu kata kunciclass diikuti oleh nama kelas danClass body yaitu class yang diapitkurung kurawal { }, diikuti tkita titikkoma atau daftar deklarasi. Misalnya:

class screen (/*……….*/) ;class screen (/*……….*/) s1 , s2 ;

Dalam class body ditentukandata members, member function dantingkat-tingkat dari informationhidding. Deklarasi untuk datamembers sama dengan deklarasiuntuk variabel, kecuali bahwainisialisasi eksplisit tidakdiperbolehkan.

Perhatikan contoh dibawah ini:

class screen {// height dan width menyatakan jumlah kolom//crusor menunjukkan posisi screensekarang// scr menunjuk ke array height*width

short height, width ;// menyatakan jumlah kolomchar *crusor ;// posisi screen saat inichar scr ;// menunjuk ke array heightwidth

};

Class dapat mendefinisikan datamember berupa reference ke tipedirinya, perhatikan contoh dibawahini:

classlinkScreen{ screenwindow ;linkScreen*next ;linkScreen*prev ;};

Member functions dari suatu kelastidak dideklarasikan di dalam classbody. perhatikan contoh dibawah ini:

class

Screen

{ Public :void home ( ) { cursor = scr ; }void move ( int, int ) ;char get ( ) { return *cusor ;}char get (int , int ) ;void checkRange ( int , int ) ;………

};

Member function yang didefinisikan didalam class-body secara otomatisdianggap inline, dan member functionyang lebih dari satu atau dua barissebaiknya didefinisikan di luar class-body. perhatikan contoh dibawah ini

2008 | Direktorat Pembinaan SMK 477

Page 500: 01 bab 01 Dasar Komputer fachkunde OK

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

1);}

}

cerr << "Koordinat screen ( " << row << ", "<< col << " ) keluar batas \n " ; exit (‐

Member function yang didefinisikan diluar class body, jika ingin dibuat inlineharus secara eksplisit. perhatikancontoh dibawah ini:

inline void screen :: move (int r , int c )// memindahkan cursor keposisi (r,c)

{clockRange (r,c) ;

// koordinatsah ?

int row = (r‐1) *width ;cursor = ser + row + c‐1 ;

}inline void screen :: move (int r , int c )// memindahkan cursor keposisi (r,c)

{clockRange (r,c) ;

// koordinatsah ?

int row = (r‐1) *width ;cursor = ser + row + c‐1 ;

}

Member function dibedakan dari fungsi-fungsi biasa dalam hal-hal: Member function punya hak akses

penuh ke anggota-anggota kelasyang bersifat public maupunprivate. Pada umumnya, fungsi-fungsi biasa dapat di akses hanyaoleh anggota-anggota kelas yangpublic. Tentu saja pada umumnyamember functions suatu kelastidak mempunyai hak akses keanggota-anggota non public darikelas-kelas lainnya.

Member function didefinisikandalam scope dari kelasnya, fungsi-fungsi biasa didefinisikan dalamscope file.

478 Direktorat Pembinaan SMK | 2008

Page 501: 01 bab 01 Dasar Komputer fachkunde OK

Class Bahasa Pemrorgraman

14.4. Struktur dan kelasDalam C++, tipe data struktur

yang dideklarasikan dengan katakunci struct, dapat mempunyaikomponen dengan sembarang tipedata, baik tipe data dasar maupuntipe data turunan, termasuk fungsi.Dengan kemampuan ini, tipe datastruktur menjadi sangat berdayaguna.

Misalnya, pada masalah ketikakita ingin membentuk tipe datastruktur yang namanya kotak. Makadapat dideklarasikan sebagai berikut:

structtkotak{

double panjang;double lebar;

};

struktur kotak menjadi lebih jelasbentuknya.

structtkotak{

double panjang;double lebar;

void SetUkuran(double pj,double lb)

{panjang = pj;lebar = lb;};

};tkotakkotak;

dengan tipe struktur kotak seperti itu,untuk memberi nilai panjang danlebar hanya dengan memanggilfungsi SetUkuran()

tkotakkotak;

Untuk memberi nilai ukuran kotaktersebut, kita dapat menggunakanperintah-perintah ini:

kotak.panjang= 10;kotak.lebar= 7;

Untuk memberi nilai panjang danlebar kotak, salah satu caranyaadalah seperti diatas. Cara lain untukmemberi nilai panjang dan lebaradalah dengan membentuk suatufungsi. Karena fungsi ini hanyadigunakan untuk memberi nilai datapanjang dan lebar suatu kotak,tentunya fungsi ini khusus milik objekkotak, sehingga harus dianggapsebagai truktur kotak. C++ sebagaibahasa pemrograman dapatmendefinisikan anggota tipe strukturyang berupa fungsi. Denganmenambah fungsi tersebut, maka

kotak.SetUkuran(10,7);

Selain punya ukuran panjangdan lebar, kotak juga mempunyaikeliling dan luas. Dengan demikian,kita dapat memasukkan fungsi untukmenghitung keliling dan luas kedalam struktur kotak. Sebagaicatatan, bahwa definisi fungsi yangmenjadi anggota struktur dapatditempatkan di luar tubuh struktur.

Dengan cara ini maka deklarasistruktur kotak menjadi seperti berikut:

struct tkotak{

double panjang;double lebar;void SetUkuran(double pj, double lb);double Keliling();double Luas();

};tkotak kotak;

2008 | Direktorat Pembinaan SMK 479

Page 502: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Class

Class merupakan struktur datadari obyek. Untuk menjelaskantentang class, lihat perbandingannya

dengan struktur. Untuk lebih jelasnyamengenai keduanya perhatikancontoh 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,error tidak ada. Berikutnya struktur diatas kita ganti dengan class,

sehingga program menjadi sepertiberikut dibawah ini:

Program 14.5#include <conio.h>#include <iostream>#include <string.h>

using namespace std;

class siswaSMK

480 Direktorat Pembinaan SMK | 2008

Page 503: 01 bab 01 Dasar Komputer fachkunde OK

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 dicompile, ternyata error muncul. Errortersebut muncul karena class tidakdikenal dalam main(). Kesalahan inisekaligus menunjukkan perbedaan

dengan struktur. Agar program diatas dapat dicompile, ditambahkanperintah public diikuti dengan tkitatitik dua (:), sehingga programnyamenjadi:

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

Page 504: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Class

cout << siswakls3.nis <<endl; cout << siswakls3.nama << endl; cout << siswakls3.umur << endl; getch();return 0;

}

Perintah PUBLIC menyatakanbahwa perintah-perintah yang ada dibawahnya dapat diakses diluar class.Perintah PUBLIC merupakan

termasuk access specifier (penentuakses). Selain PUBLIC, terdapatperintah lain yang termasuk accessspecifier, yaitu PRIVATE.

Program 14.7include <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 yangsama dengan sebelumnya munculyaitu class tidak dapat diakses dimain(). Perintah PRIVATE memberi

pengertian bahwa perintah yang adadibawahnya hanya dapat diaksesdalam class tersebut, yang dalam halini adalah class siswaSMK. variabel

482 Direktorat Pembinaan SMK | 2008

Page 505: 01 bab 01 Dasar Komputer fachkunde OK

Class Bahasa Pemrorgraman

nis, nama, dan umur dalam classsiswaSMK disebut data anggota.

Selain data anggota, kita juga dapat 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, fungsiinisialisasi() dan tampilkan()merupakan fungsi anggota dari class

siswaSMK. Keduanya dibuat publickarena akan diakses dari luar class,sedangkan data anggotanya (nis,

2008 | Direktorat Pembinaan SMK 483

Page 506: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Class

nama, umur) dibuat private. MungkinKita berpikir mengapa programterakhir terlalu panjang, padahal

akan diperoleh hasil yang samadengan program sebelumnya.

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

Page 507: 01 bab 01 Dasar Komputer fachkunde OK

Class Bahasa Pemrorgraman

Cara kedua inilah yang sering dipilih oleh para programmer C++. Berikut

ini contoh-contoh program yangmemanfaatkan 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

Page 508: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Class

siswakls3[i].umur = atoi(temp);cout << endl;

}

// tampilkan semua datacout << "‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐" << endl; cout << "DATA YANGMASUK" << 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 destructorObjek biasanya memerlukan

inisialisasi variabel atau menentukanmemori dinamik selama proses untukmencapai hasil akhie yangdiharapkan dan menghindaripengembalian nilai yang tidakdiharapkan. Untuk mengatasinyadapat digunakan fungsi spesial:

constructor, yang dapatdideklarasikan dengan pemberiannama fungsi dengan nama yangsama untuk class. Fungsi dariconstructor ini akan dipanggil secaraotomatis ketika instance baru darisebuah class dibuat. Pehatikancontoh program dibawah ini:

Program 14.10#include <iostream>

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

Page 509: 01 bab 01 Dasar Komputer fachkunde OK

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 samaseperti contoh sebelumnya. Dalamhal ini, hanya menggantikan fungsiset_values, yang sudah tidak adadengan class constructor. Perhatikancara parameter diberikan keconstructor pada saat instance classdibuat:

CRectangle rect (3,4); CRectangle rectb(5,6);

Destructor berfungsi kebalikandari construktor. Secara otomatisakan dipanggil jika objek di keluarkan

dari memory, ataupun karenakeberadaannya telah selesai(misalnya: jika didefinisikan sebuahobjek local dalam function danfunction tersebut selesai) atau karenamerupakan objek yang secaradinamis ditetapkan dan dikeluarkandengan menggunakan operatordelete. Destuctor harus mempunyainama yang sama dengan class,diberi awalan tile (~) dan tidakmengembalikan nilai. Untuk lebihjelasnya perhatikan contoh dibawahini:

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

Page 510: 01 bab 01 Dasar Komputer fachkunde OK

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 ConstructorSama halnya seperti fungsi,

constructor juga dapat mempunyainama yang sama tetapi mempunyaijumlah dan tipe yang berbeda padaparameternya. Pada saatpemanggilan kompiler akan meng-eksekusi yang sesuai pada saatobjek class di deklarasikan.

Pada kenyataannya, ketikadideklarasikan sebuah class dantidak disebutkan constructornya,maka kompiler secara otomatis akanmengasumsikan dua constructoroverloaded ("default constructor" dan"copy constructor").

Perhatikan contoh dibawah ini:

class CExample {public:int a,b,c;void multiply (int n, int m) { a=n; b=m;c=a*b; };};

Jika tanpa constructor, Kompilersecara otomatis mengasumsikananggota-anggota fungsi constructorberikut :

• Empty constructor Merupakanconstructor tanpa parameters didefinisikan sebagai nop (blok instruksi kosong). Tidak melakukan apapun. CExample::CExample () { };

• Copy constructor Merupakanconstructor dengan satuparameter dengan tipe yang samayang ditetapkan untuk setiapanggota variable class nonstatikobjek yang disalin dari objeksebelumnya.

CExample::CExample (const CExample&rv) {a=rv.a; b=rv.b; c=rv.c;}

Hal yang penting untuk diketahuiadalah, bahwa kedua constructordefault: empty construction dan copyconstructor ada jika tidak adaconstructor lain yang dideklarasikan.Jika terdapat constructor dengansejumlah parameter dideklarasikan,maka tidak satupun dari constructorsdefault ini ada.

488 Direktorat Pembinaan SMK | 2008

Page 511: 01 bab 01 Dasar Komputer fachkunde OK

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 diatasrectb dideklarasikan tanpaparameter, sehingga diinisialisasikandengan constructor tanpaparameters, yang mendeklarasikanwidth dan height dengan nilai 5.Perhatikan jika dideklarasikan objek

baru dan tidak diberikan parametermaka tidak diperlukan tkita kurung ():

CRectangle rectb; // rightCRectangle rectb(); // wrong!

14.7. Menulis ClassSebelum menulis class, langkah

pertama pertimbangkan dimana letakatau programer akan menggunakanclass dan bagaimana class tersebutakan digunakan. Pertimbangkan pula

nama yang tepat dan tuliskan seluruhinformasi atau properti yang ingin kitaisi pada class. Jangan sampai terlupauntuk menuliskan secara urut method

2008 | Direktorat Pembinaan SMK 489

Page 512: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Class

yang akan Kita gunakan dalam class.Dalam pendefinisian class, dituliskan:

<modifier> class<name> {<attributeDeclaration>*<constructorDeclaration>*<methodDeclaration>*}

dimana: <modifier> adalah sebuahaccess modifier, yang dapatdikombinasikan dengan tipe modifierlain.

Pada bagian ini, kita akanmembuat sebuah class yang berisi

record dari siswa. Jika kita telahmengidentifikasikan tujuan daripembuatan class, maka dapatdilakukan emberian nama yangsesuai. Nama yang tepat pada classini adalah StudentRecord. Untukmendefinisikan class, kita tuliskan :

public classStudentRecord{

//area penulisan kode selanjutnya}

Dimana,Public Class ini dapat diakses dari luar packageClass Keyword yang digunakan untuk pembuatan

class (Java)StudentRecord

Identifier yang menjelaskan class

Dalam pendeklarasian atribut,kita tuliskan :

<modifier> <type><name> [=<default_value>];

Langkah selanjutnya adalahmengurutkan atribut yang akandiisikan pada class. Untuk setiapinformasi, urutkan juga tipe data yangyang tepat untuk digunakan.Contohnya, Kita tidak mungkinmenginginkan untuk menggunakantipe data integer untuk nama siswa,atau tipe data string pada nilai siswa.Berikut ini adalah contoh informasiyang akan diisikan pada classStudentRecord :

name‐ String address‐ String age‐ Int

math grade ‐double english grade‐ double science grade‐ double average grade‐ double

Kita dapat menambahkaninformasi lain jika diperlukan. Jika kitatelah menuliskan seluruh atribut yangakan diisikan pada class, selanjutnyakita akan menuliskannya pada kode.Jika kita menginginkan bahwa atribut– atribut tersebut adalah unik untuksetiap object (dalam hal ini untuksetiap siswa), maka kita harusmendeklarasikannya sebagaiinstance variable. Perhatikan contohdibawah ini:

public classStudentRecord{private Stringname;private Stringaddress;

490 Direktorat Pembinaan SMK | 2008

Page 513: 01 bab 01 Dasar Komputer fachkunde OK

Class Bahasa Pemrorgraman

private int age; {private double mathGrade; private double englishGrade; private double scienceGrade; private double average;

private disini menjelaskanbahwa variabel tersebut hanya dapatdiakses oleh class itu sendiri. Objectlain tidak dapat menggunakan

private String name; private String address; private int age;private double mathGrade;private doubleenglishGrade; privatedouble scienceGrade;private double average;private static int studentCount;//area penulisan kode

variabel tersebut secara langsung.Kita akan membahas tentangkemampuan akses padapembahasan selanjutnya. Disampinginstance variable, kita juga dapatmendeklarasikan class variable atauvariabel yang dimiliki classsepenuhnya. Nilai pada variabel inisama pada semua object di classyang sama.

Anggaplah kita menginginkanjumlah dari siswa yang dimiliki dariseluruh class, kita dapatmendeklarasikan satu static variableyang akan menampung nilai tersebut.Kita beri nama variabel tersebutdengan nama studentCount. Berikut penulisan static variable:

public class StudentRecord{

//area deklarasi instance variables

private static int studentCount;

//area penulisan kode selanjutnya}

Kita gunakan keyword : ’static’ untuk mendeklarasikan bahwa variabel tersebut adalah static. Maka keseluruhan kode yang dibuat terlihatsebagai berikut :

public class StudentRecord

selanjutnya}

Sebelum kita membahas methodapa yang akan dipakai pada class,mari kita erhatikan penulisan methodsecara umum. Dalam pendeklarasianmethod, kita tuliskan :

<modifier> <returnType><name>(<parameter>*) {<statement>*}

dimana,<modifier> dapat menggunakan beberapa modifier yang berbeda<returnType> dapat berupa seluruh tipe data, termasuk void<name> identifier atas class<parameter> ::= <tipe_parameter><nama_parameter>[,]

Untuk mengimplementasikanenkapsulasi, kita tidak menginginkansembarang object dapat mengaksesdata kapan saja. Untuk itu, kitadeklarasikan atribut dari classsebagai private. Namun, ada kalanyadimana kita menginginkan object lainuntuk dapat mengakses data private.Dalam hal ini kita gunakan accessormethods.

2008 | Direktorat Pembinaan SMK 491

Page 514: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Class

Accessor Methods digunakanuntuk membaca nilai variabel padaclass, baik berupa instance maupunstatic. Sebuah accessor methodumumnya dimulai dengan penulisanget<namaInstanceVariable>.Method ini juga mempunyai sebuahreturn value. Sebagai contoh, kitaingin menggunakan accessor methoduntuk dapat membaca nama, alamat,nilai bahasa Inggris, Matematika, danilmu pasti dari siswa. Perhatikansalah satu contoh implementasiaccessor method.

public classStudentRecord{

private String name;::

public String getName(){return name;}

}

dimana,public ‐ Menjelaskan bahwamethod tersebut dapat diaksesdari object luar classString ‐ Tipe data return value dari method tersebut bertipe String getName ‐ Nama dari method() ‐ Menjelaskan bahwa method tidak memiliki parameter apapun

Pernyataan berikut,

returnname;

dalam program kita menkitakanakan ada pengembalian nilai darinama instance variable kepemanggilan method. Perhatikan

bahwa return type dari method harussama dengan tipe data seperti datapada pernyataan return. Kita akanmendapatkan pesan kesalahansebagai berikut bila tipe data yangdigunakan tidak sama :

StudentRecord.java:14: incompatible typesfound :intrequired:

java.lang.String return age;^1 error

Contoh lain dari penggunaan accessor method adalah getAverage,

public classStudentRecord{

private String name;::public double getAverage(){

double result = 0;result = (

mathGrade+englishGrade+scienceGrade)/3;

return result;}

}

Method getAverage()menghitung rata – rata dari 3 nilaisiswa dan menghasilkan nilai returnvalue dengan nama result.Bagaimana jika kita menghendakiobject lain untuk mengubah data?Yang dapat kita lakukan adalahmembuat method yang dapatmemberi atau mengubah nilaivariable dalam class, baik itu berupainstance maupun static.

492 Direktorat Pembinaan SMK | 2008

Page 515: 01 bab 01 Dasar Komputer fachkunde OK

Class Bahasa Pemrorgraman

Method semacam ini disebutdengan mutator methods. Sebuahmutator method umumnya tertulisset<namaInstanceVariabel>. Marikita perhatikan salah satu dariimplementasi mutator method :

public class StudentRecord{private String name;

::public void setName(

String temp ){name = temp;

}}

dimana,public ‐ Menjelaskan bahwa method ini dapat dipanggil object luar classvoid ‐ Method ini tidak menghasilkanreturn valuesetName ‐ Nama dari method(String temp) ‐ Parameter yang akan digunakan pada method

Pernyataan berikut :

name = temp;

mengidentifikasi nilai dari tempsama dengan name dan mengubahdata pada instance variable name.Perlu diingat bahwa mutator methodstidak menghasilkan return value.Namun berisi beberapa argumen dariprogram yang akan digunakan olehmethod. Kita dapat mempunyaibanyak return values pada sebuahmethod selama mereka tidak padablok program yang sama. Kita jugadapat menggunakan konstantadisamping variabel sebagai return

value. Sebagai contoh, perhatikanmethod berikut ini:

public String getNumberInWords( int num ){

String defaultNum = "zero";if( num == 1 ){

return"one";

}else if( num == 2){

return"two";

}return defaultNum;

}Kita menggunakan static methoduntuk mengakses static variablestudentCount.

public class StudentRecord{

private static int studentCount;public static

int getStudentCount(){

return studentCount;}

}

dimana,public ‐ Menjelaskan bahwa method ini dapat diakses dari object luar class static ‐ Methodini adalah static dan pemanggilannya menggunakan[namaclass].[namaMethod].misalnya:studentRecord.getStudentCountInt ‐ Tipe return dari method. Mengindikasikan method tersebut harus mempunyai return value berupa integer public ‐ Menjelaskan bahwa method ini dapat diakses dari object luar class getStudentCount ‐ Nama dari method() ‐ Method ini tidak memiliki parameter apapun

2008 | Direktorat Pembinaan SMK 493

Page 516: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Class

Pada deklarasi di atas, methodgetStudentCount() akan selalumenghasilkan return value 0 jika kitatidak mengubah apapun pada kodeprogram untuk mengatur nilainya.

Kita akan membahas pengubahannilai dari studentCount padapembahasan constructor. Berikut iniadalah kode untuk classStudentRecord :

Program 14.13public 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(){

returnname;

}/*** 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

Page 517: 01 bab 01 Dasar Komputer fachkunde OK

Class Bahasa Pemrorgraman

public static intgetStudentCount(){

returnstudentCount;

}}

14.8. Reference thisReference this digunakan untuk

mengakses instance variable yangdibiaskan oleh parameter. Untukpemahaman lebih lanjut, mari kitaperhatikan contoh pada methodsetAge. Dimisalkan kita mempunyaikode deklarasi berikut pada methodsetAge.

kita telah menentukan nilai dariparameter age kepada parameter itusendiri. Hal ini sangat tidak kitakehendaki pada kode program kita.Untuk menghindari kesalahansemacam ini, kita gunakan metodereferensi this. Untuk menggunakantipe referensi ini, kita tuliskan :

public void setAge( intage ){

age = age; //SALAH!!!}

Nama parameter pada deklarasi iniadalah age, yang memiliki penamaanyang sama dengan instance variableage. Parameter age adalah deklarasiterdekat dari method, sehingga nilaidari parameter tersebut akandigunakan. Maka pada pernyataan :

age =age;

this.<namaInstanceVariable>

Sebagai contoh, kita dapat menulisulang kode hingga tampak sebagaiberikut:

public void setAge( intage ){

this.age =age;

}

Method ini akan mereferensikannilai dari parameter age kepadainstance variable dari objectStudentRecord.

14.9. Overloading MethodDalam class yang kita buat,

kadangkala kita menginginkan untukmembuat method dengan nama yangsama namun mempunyai fungsi yangberbeda menurut parameter yangdigunakan. Kemampuan inidimungkinkan dalam pemrogramanJava, dan dikenal sebagaioverloading method. Overloadingmethod mengijinkan sebuah method

dengan nama yang sama namunmemiliki parameter yang berbedasehingga mempunyai implementasidan return value yang berbeda pula.

Daripada memberikan namayang berbeda pada setiappembuatan method, overloadingmethod dapat digunakan padaoperasi yang sama namun berbedadalam implementasinya. Sebagai

2008 | Direktorat Pembinaan SMK 495

Page 518: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Class

contoh, pada class StudentRecordkita menginginkan sebuah methodyang akan menampilkan informasitentang siswa. Namun kita jugamenginginkan operasi penampilandata tersebut menghasilkan outputyang berbeda menurut parameteryang digunakan. Jika

pada saat kita memberikansebuah parameter berupa string,

hasil yang ditampilkan adalah nama,alamat dan umur dari siswa, sedangpada saat kita memberikan 3 nilaidengan tipe double, kitamenginginkan method tersebut untukmenampilkan nama dan nilai darisiswa. Untuk mendapatkan hasilyang sesuai, kita gunakanoverloading method di dalamdeklarasi class StudentRecord.

Program 14.14public 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.15public 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 methodsannaRecord.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

Page 519: 01 bab 01 Dasar Komputer fachkunde OK

Class Bahasa Pemrorgraman

Name:Anna Address:Philippines Age:15

Kemudian akan dihasilkan output sebagai berikut pada panggilan kedua :Name:AnnaMath Grade:80.0English Grade:95.5Science Grade:100.0

Jangan lupakan bahwa overloadedmethod memiliki property sebagai berikut :1. Nama yang sama2. Parameter yang berbeda3. Nilai kembalian (return) bisa sama ataupun berbeda

Telah tersirat pada pembahasansebelumnya, Constructor sangatlahpenting pada pembentukan sebuahobject. Constructor adalah methoddimana seluruh inisialisasi objectditempatkan. Berikut ini adalahproperty dari Constructor :1. Constructor memiliki nama yang

sama dengan class2. Sebuah Constructor mirip dengan

method pada umumnya, namunhanya informasi - informasi berikutyang dapat ditempatkan padaheader sebuah constructor, scopeatau identifikasi pengaksesan(misal: public), nama darikonstuktor dan parameter.

3. Constructor tidak memiliki returnvalue

4. Constructor tidak dapat dipanggilsecara langsung, namun harusdipanggil dengan menggunakanoperator new pada pembentukansebuah class.

Untuk mendeklarasikan constructor, kita tulis,

<modifier> <className> (<parameter>*){<statement>*}

Setiap class memiliki defaultconstructor. Sebuah defaultconstructor adalah constructor yangtidak memiliki parameter apapun.Jika sebuah class tidak memilikiconstructor apapun, maka sebuahdefault constructor akan dibentuksecara implisit: Sebagai contoh, padaclass StudentRecord, bentuk defaultconstructor akan terlihat sepertidibawah ini :

public StudentRecord(){

//area penulisan kode}

Seperti telah kita bahassebelumnya, sebuah constructor jugadapat dibentuk menjadi overloaded.Dapat dilihat pada contoh sebagaiberikut :

Program 14.16public StudentRecord(){

2008 | Direktorat Pembinaan SMK 497

Page 520: 01 bab 01 Dasar Komputer fachkunde OK

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 objekStudentRecord 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 kitaperhatikan kembali deklarasi variabelstatic studentCount yang telah dibuatsebelumnya. Tujuan deklarasistudentCount adalah untukmenghitung jumlah object yangdibentuk pada class StudentRecord.Jadi, apa yang akan kita lakukanselanjutnya adalah menambahkan

nilai dari studentCount setiap kalisetiap pembentukan object padaclass StudentRecord. Lokasi yangtepat untuk memodifikasi danmenambahkan nilai studentCountterletak pada constructor-nya, karenaselalu dipanggil setiap kali objekterbentuk. Perhatikan contoh sebagaiberikut:

Program 14.17public StudentRecord(){

//letak kode inisialisasistudentCount++; //menambah student

}public StudentRecord(String temp){

this.name = temp;studentCount++; //menambah student

498 Direktorat Pembinaan SMK | 2008

Page 521: 01 bab 01 Dasar Komputer fachkunde OK

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 dapatdilakukan secara berangkai, dalamarti Kita dapat memanggil constructordi dalam constructor lain.

Pemanggilan dapat dilakukan denganreferensi this(). Perhatikan contohkode sebagai berikut :

Program 14.18public 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, padasaat baris ke 13 dipanggil akanmemanggil constructor dasar padabaris pertama. Pada saat baris keduadijalankan, baris tersebut akanmenjalankan constructor yangmemiliki parameter String pada bariske-6. Beberapa hal yang patutdiperhatikan pada penggunaan this():

1. Harus dituliskan pada baris pertama pada sebuah constructor

2. Hanya dapat digunakan pada satudefinisi constructor. Kemudianmetode ini dapat diikuti dengankode – kode berikutnya yangrelevan

2008 | Direktorat Pembinaan SMK 499

Page 522: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Class

14.10. Access ModifierPada saat membuat, mengatur

properties dan class methods, kitaingin untuk mengimplementasikanbeberapa macam larangan untukmengakses data. Sebagai contoh,jika Kita ingin beberapa atribut hanyadapat diubah hanya dengan methodtertentu, tentu Kita inginmenyembunyikannya dari object lainpada class. Di JAVA, implementasitersebut disebut dengan accessmodifiers. Terdapat 4 macamaccess modifiers, yaitu: public,private, protected dan default. 3 tipeakses pertama tertulis secara ekplisitpada kode untuk mengindikasikantipe akses, sedangkan yang keempatyang merupakan tipe default, tidakdiperlukan penulisan keyword atastipe.

14.10.1. Akses Default (PackageAccessibility)

Tipe ini mensyaratkan bahwahanya class dalam package yangsama yang memiliki hak aksesterhadap variabel dan methodsdalam class. Tidak terdapat keywordpada tipe ini.Sebagai contoh :

public classStudentRecord{

tersebut berada pada package yangsama dengan letak dari fileStudentRecord.

14.10.2. Akses PublicTipe ini mengijinkan seluruh

class member untuk diakses baik daridalam dan luar class. Object apapunyang memiliki interaksi pada classmemiliki akses penuh terhadapmember dari tipe ini. Sebagai contoh:

public classStudentRecord{

//akses dasar terhadap variabelpublic int name;//akses dasar terhadap metode public String getName(){

returnname;

}}

Dalam contoh ini, variabel name danmethod getName() dapat diakses dariobject lain.

14.10.3. Akses ProtectedTipe ini hanya mengijinkan class

member untuk diakses oleh methoddalam class tersebut dan elemen –elemen subclass. Sebagai contoh :

//akses dasar terhadap variabel int name;//akses dasar terhadap metodeString getName(){

returnname;

}}

public class StudentRecord{

//akses pada variabelprotected int name;//akses pada metode protected String getName(){

returnname;

}Pada contoh diatas, variabel nama }dan method getName() dapat diaksesdari object lain selama object

500 Direktorat Pembinaan SMK | 2008

Page 523: 01 bab 01 Dasar Komputer fachkunde OK

Class Bahasa Pemrorgraman

Pada contoh diatas, variabel name { dan method getName() hanya dapat diakses oleh method internal classdan subclass dari classStudentRecord. Definisi subclassakan dibahas pada bab selanjutnya.

14.10.4. Akses Private

}Tipe ini mengijinkan

//akses dasar terhadap variabel private int name;//akses dasar terhadap metode private String getName(){

return name;}

pengaksesan class hanya dapatdiakses oleh class dimana tipe inidibuat. Sebagai contoh :

public classStudentRecord

Pada contoh diatas, variabel namedan method getName() hanya dapatdiakses olehmethod internal class tersebut.

14.11. Contoh Program ClassKelas merupakan struktur dari

obyek. Deklarasi class sebagaiberikut:

classnama_class

{ private;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐

protected:

‐‐‐‐‐‐‐‐‐‐‐‐

‐‐‐‐‐‐‐‐‐‐‐‐public:void nama_fungsi();

‐‐‐‐‐‐‐‐‐‐‐‐

menciptakan variable

obyek void main()

{ nama_class variable_obyek;}

void nama_class::nama_fungsi(){ definisi fungsi }

private ; data/fungsi yang tidakdapat diakses diluar kelas. protected:data/fungsi yang dapat diakses padakelas tersebut dan friend class.public: data/fungsi yang dapatdiakses 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

Page 524: 01 bab 01 Dasar Komputer fachkunde OK

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;

Page 525: 01 bab 01 Dasar Komputer fachkunde OK

cout<<"============================="<<endl;

502 Direktorat Pembinaan SMK | 2008

Page 526: 01 bab 01 Dasar Komputer fachkunde OK

Class Bahasa Pemrorgraman

cout<< "NIP : "<<nip<<endl; cout<< "NAMA : "<<nama<<endl; cout<< "UMUR : "<<umur<<endl;cout<<"============================="<<endl; }

};

void main(){

}

Pegawai Akuntansicout<<"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(){

contohhitung;cout<<" Masukan x ? ",cin>>hitung.x; cout<<"Masukan y ? ", cin>>hitung.y;cout<<" Hasil x + y = ",

2008 | Direktorat Pembinaan SMK 503

Page 527: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Class

tambah();cout<<" Hasil x * y = ", hitung.kali();

getch()}

14.12. Soal LatihanJawablah soal latihan dibawah ini dengan baik dan benar.1. Apakah fungsi tipe kelas dalam bahasa C2. Sebutkan tujuan dari mendeklarasikan class3. Sebutkan yang digunakan untuk menentukan batasan akses terhadap

member4. Apa yang dimaksud dengan konstruktor dan destruktor5. Jelaskan apa yang dimaksud dengan overloading konstruktor6. Jelaskan bagaimana cara menulis class7. Apa yang dimaksud dengan overloading method8. Apa yang dimakksud dengan akses public, private dan protected

504 Direktorat Pembinaan SMK | 2008

Page 528: 01 bab 01 Dasar Komputer fachkunde OK

Pemrograman Berorientasi Objek Bahasa Pemrorgraman

BAB 15PEMROGRAMAN BERORIENTASI OBJEK

15.1. Pemrograman Object-Oriented dan Prosedural15.2. Perbedaan Object-Oriented dan Prosedural15.3. Pemrograman berorientasi objek15.4. Immutable obyek15.5. Modularitas dan Abstraksi Data15.6. Modularitas dan Penyebunyian Informasi15.7. Interface15.8. Interface dan Class15.9. Hubungan dari Interface ke Class15.10. Pewarisan Antar Interface15.11. Soal Latihan

15.1. Pemrograman Object-Oriented dan ProseduralDalam beberapa forum diskusi

yang membahas programming, salahsatu thread yang selalu hangat danmenarik di bicarakan adalah threadmengenai Object orientedProgramming (OOP). OOP itu sendirisebetulnya adalah konsep lama, tapitopik ini seperti Design pattern,OOAD dan lain sebagainyasepertinya baru hangat dibicarakan diforum diskusi beberapa tahunbelakangan ini. Entah mengapa,mungkin karena bersamaan denganbermunculan framework yang banyakdiantaranya menganut konsep OOP,C++ yangg sekarang sudah full-blown OOP, framework MS .NETyang juga sudah full-blown OOP, dan

banyak lagi. Akhirnya banyak orang-orang di sini yang mulai bertanya-tanya “apa sih OOP tuh?”, “apabedanya dengan prosedural?”, “apauntungnya kalau memakai OOP?.

Sekarang kita tidak perlumembicarakan “Apa itu OOP” danbagaimana membuat / belajar OOP.kita hanya akan memberi contohkonkrit perbedaan dari OOP danProcedural Code, dan kemudianmengambil kesimpulan tentangkeuntungan apa yang bisa kita dapatdari OOP. Dalam buku ini banyakdijelaskan apa itu OOP, penggunaanDesign Patternnya dan bagaimanamengimplementasikannya dalamkode C++.

2008 | Direktorat Pembinaan SMK 505

Page 529: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Pemrograman Berorientasi Objek

15.2. Perbedaan Object-Oriented dan ProseduralBagaimana desain object

oriented berbeda dengan kodeprosedural yang lebih tradisional?Akan sangat mudah untukmengatakan bahwa perbedaanutamanya adalah kode berorientasiobyek memiliki object di dalamnya.Ini tidak betul. Dalam PHP kita akansering menemukan kode proseduralmenggunakan obyek. Kita jugamungkin sering melihat class-classyang mengandung kode proseduraldi dalamnya. Keberadaan class tidakmenjamin adanya desain berorientasiobyek, walau dalam bahasapemrogramman Java sekalipun, yangnotabene “memaksa” kita untukmelakukan apa pun di dalam class.

Satu perbedaan utama antarakode berorientasi obyek dengan kode

prosedural dapat dilihat daribagaimana tanggung jawab(responsibility) didistribusikan. Kodeprosedural akan berupa urut-urutanperintah dan method calls. Kodepemanggil (controlling code)cenderung bertanggung jawab untukmenghandle pengecekan kondisi (if,then, else dst). Kontrol top-down ini –dalam pengembangan aplikasi–dapat menghasilkan duplikasi kodedan saling ketergantungan lintas(antar) proyek. Kode berorientasiobyek mencoba untukmeminimalisasi ketergantungan inidengan cara memindahakanresponsibility untuk meng-handletugas-tugas dari client code ke dalamobyek-obyek di dalam system.

15.3. Pemrograman berorientasi objekObjek adalah kumpulan variabel

dan method (fungsi) yang salingberkaitan. Mungkin kita pernahmenggunakan struct dalam C ataurecord dalam Pascal/Delphi? Dalamstruct dan record, kita bisamengumpulkan tipe-tipe variabelyang berlainan. Nah, objek adalahperkembangan dari struct. Dalamobjek, kita bisa mengumpulkanvariabel-2 dengan tipe yang bolehberbeda-2 dan fungsi-2 yang disebutmethod.

Objek sebenarnya menirukonsep alam. Ilustrasinya seperti ini.Sebutlah suatu objek, misalnyaanjing. Anjing memiliki kondisi:warna, tinggi, lapar, sakit, dll. Selainitu anjing juga memiliki hal-hal yangbiasa dilakukan, seperti:menggonggong, menggigit, goyang

ekor, dan lain-lain. Jadi kondisi padaalam (misal anjing) ditiru denganVariabel sedangkan hal-hal yangbiasa dilakukan ditiru denganMethod. penggabungan antaraVariabel dan Method itulah yangdisebut Enkapsulasi.

Hal penting berikutnya dalamOOP adalah Message. Antara objeksatu dengan objek yang lainberkomunikasi melalui Message.Ketika objek A ingin objek Bmelakukan sesuatu, maka objek Amengirim Message ke objek B.

Contoh: Misalnya objek A adalahICT. Objek B adalah Sepeda.

Jika ICT ingin memindahkan gigisepedanya ke gigi 5, maka ICT akanmengirim Message ke Sepeda

506 Direktorat Pembinaan SMK | 2008

Page 530: 01 bab 01 Dasar Komputer fachkunde OK

Pemrograman Berorientasi Objek Bahasa Pemrorgraman

diketahui sepeda memilikikemampuan/Method pindahGigi)berbunyi pindahGigi(5). Lengkapnyadapat ditulis: Sepeda.pindahGigi(5).Message itu akan dilaksanakan olehSepeda. Kemampuan pindahGigimemerlukan informasi gigi yangdiinginkan, dalam hal ini 5. Makasekarang Variabel (nantinya kitasebut atribut) gigi bernilai 5. Bicaratentang Class, kita bayangkan dalamcontoh sebelumnya bahwa Sepedamilik ICT adalah sepeda gunung (kitasebut SepedaGunung). Tentunyaselain SepedaGunung terdapatsepeda lain seperti SepedaOnta,SepedaTandem, dll. Tapi yang jelas,jenis-jenis tadi termasuk Sepeda.

Jadi Sepeda Gunung adalahInstance dari Sepeda.SepedaGunung memiliki atribut-atribut(seperti gigi, roda, panjang,pedal, dan lain-lain) jugakemampuan(seperti pindahGigi(),belok(), dll) Sepeda. Ada perbedaanantara Object dan Class.

Class adalah blue print ataurancangan dari Object. Jadi dengansatu Class, kita dapat membuatberapapun Object. Inheritance adalahpewarisan sifat. Sebuah Subclassakan mewarisi sifat dari Superclass-nya. Dalam contoh di atas, SepedaGunung akan memiliki atribut gigi,roda dan panjang dan jugakemampuannya yaitu pindah Gigidan belok. Tetapi Subclass tidakharus hanya memiliki sifat dankemampuan yang sama persisdengan Superclassnya, tetapibiasanya ditambahkan sifat dankemampuan lain yangmembedakannya dengan Subclasslain dengan Superclass yang sama.Itulah yang membuat SepedaGunungdan SepedaOnta berbeda.

Subclass juga dapat melakukanOverride terhadap sifat dankemampuan warisan Superclassnya.Misalnya yang dilakukan olehSepedaTandem. SepedaTandemmemiliki lebih dari dua roda dan jugapedal sehingga perlu memilikikemampuan untuk mengaturnya.Sehingga suatu kemampuan warisandari class Sepeda dapat diganti atauditambahkan.

Interface membuat satu classdapat berinteraksi dengan class lainyang benar-benar berbeda. Misalnyadalam Show Room yang menjualMobil, Motor juga Sepeda. Tentu sajaManajerShowRoom harus bisamengatur sepeda-sepeda bersamadengan Mobil-2 dan Motor-2.Masalahnya adalah perbedaan classyang sangat mencolok. Interfacemengatasinya dengan cara: Mencari persamaan antara class-2

yang berbeda tanpa memaksaclass tersebut salingberhubungan.

Membuat method yang inginditerapkan pada class-class.

Istilah-istilah yang digunakan dalam pemrograman berorientasi objek Class adalah blueprint atau

prototype dari object-objec tertentuyang memiliki kesamaan variabledan method.

Object atau insance of classmerupakan software yangmengemas variable-variable dan methodmethod menjadi satukesatuan.

Attribute adalah suatu bentukkarakteristik atau status dari suatuobject.

Method atau behavior dari objectadalah action yang bisa dikerjakan oleh suatu object

2008 | Direktorat Pembinaan SMK 507

Page 531: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Pemrograman Berorientasi Objek

Constructor merupakan methodkhusus yang berfungsi untukinisialisi atau menciptakan suatuobject dari class

Pemrograman BerorientasiObjek sebenarnya bukanlah bahasapemrograman baru, tetapi jalan baruuntuk berpikir dan merancangaplikasi yang dapat membantumemecahkan suatu persoalanmengenai pengembangan perangkatlunak. Pemrograman berorientasiobjek disusun dan dipahami olehilmuwan yang memkitang duniasebagai populasi objek yangberinteraksi antara satu yang satudengan objek yang lain.

Prosedur yang digunakan dalamobjek dipkitang sebagai kepentingankedua karena tergantung pada objekitu sendiri. Tentunya hal tersebutberbeda dengan pemrogramanterstruktur. Pemrograman terstruktur

mempunyai sifat pemisahan datadengan kode yang mengolahnya.Pemrograman Berorientasi Objek(PBO) adalah metode pemrogramanyang meniru cara kitamemperlakukan sesuatu (benda).

Dalam pemrogramanberorientasi obyek, class merupakansebuah design, template, atau blue-print. Dari suatu class dapat dibuatbanyak objek/instance. Analoginyaadalah seperti ini, bayangkan jika kitaseorang arsitek, sebelummembangun rumah tentunya akanmerancang dulu di kertas, jumlah danletak pintu, jendela, dan semuanya,itulah class. Kemudian dari gambarrumah tersebut kita dapatmembangun banyak rumah sesuairancangan yang sudah dibuat.

Masing-masing rumah jaditersebut adalah yang disebut denganobjek/instance.

The first instance

Class

Desain TemplateBlue print

The second instance

n ...... instance

Gambar 15.1. Class Dalam Pemrograman Berorientasi Obyek

Ada empat ciri-ciri atau karakteristikbahasa Pemrograman Berorientasi Objek, antara lain:

15.3.1. AbstraksiUntuk memproses sesuatu dari

dunia nyata dengan menggunakan

komputer kita harus menentukan ciri-ciri / sifat-sifat yang penting yangperlu direpresentasikan ke dalamsistem komputer. Ciri-ciri yang dipilihbergantung dari apa yang akan kitalakukan di dalam sistem tersebut dantergantung dari sudut pkitang yangmelihatnya. Misalnya pada sebuah

508 Direktorat Pembinaan SMK | 2008

Page 532: 01 bab 01 Dasar Komputer fachkunde OK

Pemrograman Berorientasi Objek Bahasa Pemrorgraman

kasus untuk menentukan attribute suatu class mobil pada :

Tabel 15.1. Attribute suatu class mobil

Kantor Polisi Bengkel MobilNo mesin No registrasi PemilikPemilik Waktu Ganti OliBesar Pajak Deskripsi servis

15.3.2. EnkapsulasiPenggabungan data dan method

ke dalam suatu class atau dengankata lain mengkombinasikan sebuahstruktur dengan fungsi yangmemanipulasinya untuk membentuktipe data baru yaitu kelas (class).

Enkapsulasi merupakan suatumekanisme untuk menyembunyikanatau memproteksi suatu proses darikemungkinan interferensi ataupenyalahgunaan dari luar sistem dansekaligus menyederhanakanpenggunaan sistem itu sendiri. Akseske internal sistem diatur sedemikianrupa melalui seperangkat interface.

Contoh sebuah kasus yang adadilapangan misalnya pada sebuahsepeda motor, dimana pada sistempemindahan gigi transmisi, makapengendara tidak perlu tahu detaildari bagaimana proses pemindahangigi itu dilakukan oleh mesin, cukuptahu bagaimana cara menekan gigitransmisi itu. Pedal gigi transmisiyang diinjak pengendara itu

merupakan interface (antar muka)pengendara dengan sistem transmisisepeda motor.

15.3.3. Pewarisanwarisan sifat dari class induk

kepada class anaknya ataumendefinisikan suatu kelas dankemudian menggunakannya untukmembangun hirarki kelas turunan,yang mana masing-masing turunanmewarisi semua akses kode maupundata kelas dasarnya.

Sebagai manusia kitasebenarnya terbiasa untuk melihatobjek yang berada disekitar kitatersusun secara hierarki berdasarkanclassnya masing-masing. Dari sinikemudian timbul suatu konseptentang pewarisan yang merupakansuatu proses dimana suatu classditurunkan dari class lainnyasehingga ia mendapatkkan ciri atausifat dari class tersebut. Perhatikancontoh hirarki berikut ini:

2008 | Direktorat Pembinaan SMK 509

Page 533: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Pemrograman Berorientasi Objek

Binatang

Mamalia Reptile

Anjing Kucing Monyet

Gambar 15.2. Hirarki Pewarisan

Dari hirarki diatas dapat dilihatbahwa, semakin kebawah, classakan semakin bersifat spesifik. Classmamalia memiliki seluruh sifat yangdimiliki oleh binatang, demikianhalnya juga Anjing, kucing danMonyet memiliki seluruh sifat yangditurunkan dari class mamalia.Dengan konsep ini, karakteristik yangdimiliki oleh class binatang cukupdidefinisikan didefinisikan dalamclass binatang saja.

Class mamalia tidak perlumendefinisikan ulang apa yang telah

dimiliki oleh class binatang, karenasebagai class turunannya, ia akanmendapatkan karakteristik dari classbinatang secara otomatis. Demikianjuga dengan class anjing, kucing danmonyet, hanya perlu mendefinisikankarakteristik yang spesifik dimilikioleh classnya masing-masing.Dengan memanfaatkan konseppewarisan ini dalam pemrograman,maka hanya perlu mendefinisikankarakteristik yang lebih umum akandidapatkan dari class darimana iaditurunkan.

15.4. Immutable obyekDalam pemrograman

berorientasi objek, immutable obyekadalah obyek dengan kondisi yangtidak dapat dimodifikasi setelahdibuat. Hal ini berbeda denganmutable objek, dimana obyektersebut dapat dimodifikasi setelahdibuat. Obyek dapat immutablesecara keseluruhan atau hanyabeberapa atribut objek yangditentukan saja, misalnyamenggunakan atribut anggota constdata pada bahasa pemrogramanC++.

Dalam beberapa kasus, obyekdianggap immutable walaupun adabeberapa hal perubahan internalyang digunakan oleh atribut tetapikondisi objek nampaknya tidak bisadiubah secara ekternal dari beberapasudut pkitang. Sebagai contoh,sebuah obyek yang menggunakanmemoization pada cache hasilkomputasi yang baik ini tetap dapattetap dianggap sebagai objek. Awaldari sebuah kondisi tetap objekbiasanya diatur pada posisi berdiri,tetapi dapat juga ditetapkan sebelummenggunakan obyek tersebut.

510 Direktorat Pembinaan SMK | 2008

Page 534: 01 bab 01 Dasar Komputer fachkunde OK

Pemrograman Berorientasi Objek Bahasa Pemrorgraman

Immutable objek sering bergunakarena beberapa biaya operasionalseperti menyalin danmembandingkan dapat diabaikan,menyederhanakan kode program danmempercepat eksekusi. Namun,membuat obyek immutable biasanyatidak tepat jika objek berisi sejumlahbesar data yang berubah-ubah.Karena itu, banyak bahasa yangmempunyai fasilita kedua objektersebut baik mutable dan immutableobyek.

Dalam kebanyakan bahasaberorientasi objek, objek dapatdisebut dengan referensi. Beberapacontoh seperti bahasa Java, C++,C#, VB.NET dan banyak bahasascrip seperti Ruby dan Python.Dalam hal ini, hal-hal apakah kondisiobyek dapat berbeda bila bendadibagi melalui referensi.

Jika obyek yang diketahui adalahimmutable, maka dapat disalin cukupdengan membuat salinan referensi,bukan untuk menyalin seluruh objek.Karena referensi (biasanya hanyaukuran sebuah pointer) biasanya jauhlebih kecil daripada obyek itu sendiri,sehingga lebih mudah dalampenyimpanan di memori danmeningkatkan kecepatan dalameksekusi.

Teknik penyalinan Referensi jauhlebih sulit digunakan pada objekmutable, karena jika ada penggunareferensi ke sebuah obyek mutableyang merubahnya, semua penggunalain akan melihat perubahannya. Jikaini bukan efek dimaksudkan, makaakan lebih sulit untukmemberitahukan ke pengguna yanglain untuk meminta mereka merespondengan benar.

Dalam situasi ini, defensifmenyalin dari seluruh obyek daripada

referensi biasanya lebih mudahnamun solusi mahal. Para pengamatmenyatakan bahwa teknik alternatifuntuk menangani perubahan objekmutabel. Immutable objects dapatberguna dalam aplikasi multi-threaded. Multiple threads dapatbertindak berdasarkan data yangdiwakili oleh immutable objek tanpamemperhatikan data yang diubaholeh thread lainnya. immutable obyekmempunyai pertimbangan ataudianggap lebih aman daripadamutable object atau obyek yangberubah.

Dalam Praktiknya selalumenggunakan referensi pada saatmelakukan copy atau sering dikenalsebagai objek interning. Jika interningdigunakan, dua benda dianggapsama jika dan hanya jika merekareferensi, biasanya digambarkansebagai integers yang keuanyasama. Beberapa bahasa secaraotomatis: misalnya, secara otomatisPython interns string dan lain-lain.

Jika algoritma yang menerapkaninterning dijamin, maka untukmelakukan setiap kasus yangmungkin membandingkan denganobyek untuk mengurangi pointer, danyang penting dalam mendapatkankecepatan maksimal dalam aplikasi.(Bahkan jika algoritma tidak dijaminsecara lengkap, masih adakemungkinan jalan yang cepat untukmeningkatan kasus ketika obyekyang sama dan menggunakanreferensi yang sama.) Interningumumnya hanya berguna untukimmutable benda.

Kadang-kadang kalau bicaratertentu mengenai satu bidang obyekyang immutable. Ini berarti bahwatidak ada cara untuk mengubahkondisi bagian objek, walaupun

2008 | Direktorat Pembinaan SMK 511

Page 535: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Pemrograman Berorientasi Objek

bagian lain dari objek mungkinberubah-ubah. Hal ini dapat,misalnya, untuk membantumenegakkan tertentu secara eksplisitinvariants tentang beberapa datadalam obyek yang sama tinggalmelalui masa objek. Dalam beberapabahasa, hal ini dilakukan dengan katakunci (misalnya "const" di C++, "final"di Java) yang mana dirancang padafield dari obyek yang immutable.

Keimmutablean tidakmenyiratkan bahwa sebagai objekyang disimpan dalam memorikomputer unwriteable. Sebaliknya,keimmutablean adalah kompilasiwaktu membangun dan menunjukkan

apa yang harus dilakukan olehprogrammer.

Dalam bahasa C++ implementasipada sebuah cart akanmemungkinkan penggunamenyatakan sebuah kasus kelasbaru sebagai salah satu const(immutable) atau mutable, sepertiyang dikehendaki, denganmenyediakan dua versi yang berbedadari getItems () method. (Perhatikanbahwa dalam C + + itu tidakdiperlukan dan bahkan mustahil -untuk menyediakan constructorkhusus untuk kasus const.) Template<typename T>. perhatikan potonganprogram dibawah ini:

Program 15.1class 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 DataModularitas dan abstraksi data

dapat didefinisikan Modul atau sebuah unit dari

organisasi sistem perangkat lunakyang membundel sekumpulanentitas (data dan metoda operasi)dan dengan secara telitimengontrol apa "user eksternal"bisa lihat atau gunakan.

Penyembunyian informasi yangdilakukan modul untuk melindungiinformasi dari "user external"dalam penggunaannya (misalnyasoftware error, security) danmerupakan basis dari abstractdata type (ragam data abstraks).

Abstract data type (ADT) atauKumpulan obyek dan metodaoperasi yang mempresentasikan

512 Direktorat Pembinaan SMK | 2008

Page 536: 01 bab 01 Dasar Komputer fachkunde OK

Pemrograman Berorientasi Objek Bahasa Pemrorgraman

sifat-sifat abstraks bagi "user"dengan menyembunyikanbagaimana semua itudirepresentasikan dalamrepresentasi data level yang lebihrendah.

Interface dari modul atauSpesifikasi bagaimana modultersebut dilihat atau digunakanoleh "user" sementara bagianyang private tetap tersembunyi,perhatikan contoh dibawah ini:o Sebuah microwave oven

sebagai suatu modul. Pemakaidapat menggunakannyadengan tersedianya interfacepanel tombol. Pemakai hanyaperlu tahu untuk apa tombol-tombol tersebut dan bagaimanamengoperasikannya. Pemakaitidak perlu tahu mekanismekerja oven tersebut secaraintenal seperti kerja tabungmagnetron, mikrokontrollermekanik penggerak dan lainsebagainya.).

o Window menyediakan sejumlahbutton untuk dapat menutup,memperbesar, memperkecil,dan sebagainya.

15.5.1. Pemrograman ModularBahasa-bahasa pemrograman

modern menyediakan cara-carauntuk dapat membuat sistemperangkat lunak secara modulardemikian, antara lain: Cara untuk mengelompokkan

bersama data dan metoda operasi

Cara untuk mendefinisikaninterface yang "clean"

Cara untuk menyembunyikanrincian internal dari data danmetoda-metoda operasi

Cara untuk kompilasi secaraterpisah misalnya:o Turbo Pascal menyediakan

fasilitas pembuatan TPUdengan definisi interface.

o Bahasa C memungkinkanpembuatan object module(*.obj) dan library (*.a) yangdapat dilink ke modul programutama melalui interface headerfile (*.h).

Dalam bahasa Javamemungkinkan konseppemrograman modular, enkapsulasi,dan abstraksi data dengandisediakannya skema-skema class,interface, dan packages. Enkapsulasidimungkinkan dengan pendefinisianprivate bagi data/metoda yangdisemebunyikan dan public bagidata/metoda yang berperan sebagaiinterface.

Dalam Java terdapat keywordinterface dengan pengertian yanglain. Keword ini digunakan sebagaisuatu definisi teknis yangmenyatakan sekumpulan metodaabstraks yang bisadiimplementasikan dalampendefinisian kelas-kelas obyek.Manfaat definisi interface ini agarobyek-obyek dari sejumlah kelasyang mengimplementasikan interfaceini dapat saling direfer oleh variabelberagam interface ini. Perhatikancontoh dibawah ini:

2008 | Direktorat Pembinaan SMK 513

Page 537: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Pemrograman Berorientasi Objek

Program 15.2interface 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 padamasalah pencarian data (searching).Key data bisa muncul dalam berbagaitipe data: int, float, String, dsb.Fasiltas interface ini dapatmemungkinkan pedefinisan algoritmaumum compareTo() dalam interfaceComparisonKey untuk setiap tipedata. Selanjutnya kelas-kelas yangmengimplementasikan interfacetersebut dapat didefinisikan sesuaidenga tipe data yang dikehendaki.

Dengan fasilitas-fasilitas ini kitabisa mengembangkan sistemperangkat lunak besar dengankomponen-komponennya yangbersifat umum demikian danselanjutnya dapat di-plug-and-playimplementasi dalam berbagai tipedata. Fasilitas Java lain dalam

pendefinisian modularitas dan ADTadalah keyword package. Keywordini membundle sekumpulan kelasyang satu dengan yang lainnya salingmemiliki relasi khusus. Pendefinisianpackage ini memungkinkan kompilasisecara terpisah dan diimport sebagailibrary. Sebagai contoh kasus untukpembahasan modularitas dan ADTadalah suatu kelas Priority Queue.

15.5.2. Priority QueuePriority queue (PQ) adalah suatu

struktur data abstraks yangberperilaku sebagai berikut. PQadalah kumpulan item data yangmasing-masing memiliki tingkatprioritas yang bisa berbeda. Apabilaitem data diambil dari kumpulantersebut maka item data yang

514 Direktorat Pembinaan SMK | 2008

Page 538: 01 bab 01 Dasar Komputer fachkunde OK

Pemrograman Berorientasi Objek Bahasa Pemrorgraman

berprioritas paling tinggi lah yangdiperoleh.

Dalam pengembangannyapertama kali adalahmemformulasikan konsepabstraksnya tanpa harus memikirkantipe datanya, apalagi implementasirincinya. Implementasinya sendiridapat dilakukan dalam duarepresentasi level bawah yangberbeda: array atau linked-list yangdapat belakangan kita buat.

Banyak ditemukan dalammasalah-masalah penjadwalan,misalnya untuk sistem antrian untukpelayanan pasien dalam ruangpraktek dokter, penjadwalanpembayaran tagihan, dsb. Prioritasbisa didefinisikan dalam beberapaaspek. PQ dapat digunakan jugauntuk pengurutan data kengan keydata sebagai harga prioritas:sejumlah data tak terurut dimasukkanke dalam PQ lalu setelah semuamasuk satu demi satu data diambildari PQ. Pada pengurutan menaikmaka data yang diambil ditaruh darikanan ke kiri elemen-elemen array.Pada pengurutan menurun harga keybisa kebalikan dari harga prioritas,

alterntifnya data yang di ambil satudemi satu di taruh dari kiri ke kananelemen-elemen array.

Terdapat sejumlah metodaoperasi yang menjadi 'interface': bagipemakai kelas obyek ini. mengkonstruksikan PQ yang

diinisialisasi kosongPQ = new PriorityQueue();

mendapatkan ukuran (jumlah itemdata) dalam PQ,n = PQ.size();

menyisipkan item baru dalam PQ,PQ.insert(X);

bila PQ tidak kosong, menghapusitem dengan prioritas tertinggidalam PQX = PQ.remove();

Secara sepintas bisa diketahuibahwa terdapat suatu proses internal(yang tidak perlu diketahui oleh user)di dalam skema ini yaitu pengurutanitem data. Implementasi bagaimanapun user "tidak perduli". Contohpenggunaan dalam metodapengurutan data berdasarkan PriorityQueue:

Program 15.3void priorityQueueSort(ComparisonKey[] A) {int n = A.length;PriorityQueue PQ = new PriorityQueue(); // create & inisialisasi PQfor (int i = 0; i < n; i++) PQ.insert(A[i]); // mengisi PQfor (int i = n‐1; i >= 0; i‐‐) A[i] = PQ.remove(); // mengambil satu/satu

}

Selanjutnya contoh penggunaanPQ dengan tipe key integer ini dapatdilihat dalam program lebihlengkapnya. Pada saat ini definisikelas PriorityQueue belumdiimplementasikan. Sebelum

mengimplementasikannya maka keydata item yang sedang kerjakan inidibungkus dalam tipe data yanggenerik yaitu: ComparisonKeysebagai suatu interface.

2008 | Direktorat Pembinaan SMK 515

Page 539: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Pemrograman Berorientasi Objek

interface ComparisonKey {int compareTo(ComparisonKey value); String toString();

}

Selanjutnya ComparisonKey inidiimplementasikan sesuai dengantipe data yang sedang digunakan,dalam hal ini misalnya kitamenggunakan integer (nanti kita lihatbila key bertipe String).

Program 15.4public 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 rendahkelas priority queue ini dapatdiimplementasikan baik dengan arrayatau dengan linked list, dimana haltersebut dijelaskan sebagai berikut: Versi Implementasi Unsorted

Array (berukuran dinamis)PQ menyimpan item data dalamsuatu array yang apabila penuhpanjangnya dapat diperbesarsecara otomatis. Item data masukbegitu saja di bagian belakang.Saat di-remove maka item datadengan key terbesar dicari(dilakukan sequential search). Keyyang diremove tempatnyadigantikan oleh key yang palingbelakang (tidak melakukanpergeseran!)

Versi Implementasi Sorted Linked-list

Saat item data masuk dalam PQmaka langsung ditempatkan padaposisi yang sesuai dalam urutanmenurun (dilakukan pencarianposisi terlebih dulu lalu dilakukaninsert), dan saat di-remove makacukup dilakukan delete-first (nodepertama yang diambil.

Kedua implementasi tersebutberfungsi sama tapi denganimplementasi yang berbeda namunsekali lagi user melihatnya sesuaidengan abstraksi spesifikasi PQ yangditentukan. Dalam prakteknya makakedua versi itu bisa dipilih tanpamengubah modul-modul pemakainyaselama spesifikasinya ditaati.

Selain implementasinya yangbisa berbeda tanpa mengubahrancangan modul tingkat di atasnya,representasi key data pun dapatdiimplementasikan secara berbeda

516 Direktorat Pembinaan SMK | 2008

Page 540: 01 bab 01 Dasar Komputer fachkunde OK

Pemrograman Berorientasi Objek Bahasa Pemrorgraman

karena ComparisonKey yangdidefinisikan abstraks tersebut.Dengan abstraksi ComparisonKey diatas maka key bertipe lain dapatmenggantikan tipe key integer dalam

contoh di atas.ComparisonKey inimemiliki konsep RepresentationIndependent Module. Berikut inirepresentasi String untuk key.

Program 15.5class 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 aplikasinyaperubahan terjadi pada bagian data,

sementara sejumlah metoda tetapsama.

15.6. Modularitas dan Penyebunyian InformasiSaat program menjadi semakin

besar terjadi situasi berbahaya: rumit,sulit melakukan debug, dan hampirtidak mungkin di modifikasi kecualidikembangkan dengan taat dansecara terstruktur. Penulisan programkomputer dilakukan melalui mediumyang memungkinkan bervariasinyacara penulisan ekspresi-ekspresiyang potensial dapat menyebabkanmasalah yang besar. Dekomposisi kedalam komponen-komponennya pundapat bervariasi, bisa saling kait-mengkait secara kompleks atauteratur dalam layer-layer.

Abstraksi prosedural:menyatakan fungsi "apa" (what) yang

dilakukan suatu prosedur. Kita perlumendefinisikan "apa" dari suatuprosedur terpisah dari "bagaimana"(how) cara yang dilakukan proseduruntuk mencapai fungsi tersebut.Setelah terdefinisi dengan baikabstraksi prosedur ini kemudian kitaboleh menuliskan rincian"bagaimana" tersebut, bahkan suatusaat misalnya untuk peningkatanefisiensi makametodologi/algoritmanya dapatdisubstitusikan tanpa mengubahabstraksi proseduralnya.

Jadi pemisahan tersebutmemberi manfaat:

2008 | Direktorat Pembinaan SMK 517

Page 541: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Pemrograman Berorientasi Objek

Memudahkan penggunaan --hanya perlu tahu apa yangdilakukan oleh prosedur P

Memudahkan modifikasi -- rincianpenulisan P dapat diubah tabpamengganggu program secarakeseluruhan (di mana saja padapemanggilan-pemanggian P).

Secara umum pendefinisianabstraksi dengan baik padaperancangan program dapatmengendalikan kompleksitasprogram serta meningkatkanmodifiabilitas. Penyembunyianinformasi (enkapsulasi) baik variabelataupun metoda dalam modul-modulbermanfaat dalam:

Menghindari interferensi entitaslokal dalam modul terhadapentitas bernama sama di luarmodul

Menghindari interferensi entitasdiluar modul terhadap entitas lokaldalam modul terhadap entitasbernama sama

Bahasa berorientasi obyeksemacam C++ atau Javamengakomodasikan enkapsulasi inidengan baik dengan deklarasiprivate. Dalam Java terdapattingkatan lebih lanjut sepain private,yaitu: package, protected, barukemudian public. Istilah packagedalam Java memiliki konsep yangsama dengan istilah unit atau moduledalam bahasa pemrograman lain.

15.7. InterfaceInterface adalah jenis khusus

dari blok yang hanya berisi methodsignature(atau constant ). Interfacemendefinisikan sebuah(signature)dari sebuah kumpulan method tanpatubuh. Interface mendefinisikansebuah cara stkitar dan umum dalammenetapkan sifat-sifat dari class-class. Mereka menyediakan class-class, tanpa memperhatikanlokasinya dalam hirarki class, untukmengimplementasikan sifat-sifat yangumum. Dengan catatan bahwainterface-interface juga menunjukkanpolimorfisme, dikarenakan programdapat memanggil method interfacedan versi yang tepat dari methodyang akan dieksekusi tergantung daritipe object yang melewati pemanggilmethod interface.

Kita akan menggunakaninterface jika kita ingin class yangtidak berhubungan

mengimplementasikan method yangsama. Melalui interface-interface, kitadapat menangkap kemiripan diantaraclass yang tidak berhubungan tanpamembuatnya seolah-olah class yangberhubungan.Mari kita ambil contohclass Line dimana berisi method yangmenghitung panjang dari garis danmembandingkan object Line keobject dari class yang sama.Sekarang, misalkan kita punya classyang lain yaitu MyInteger dimanaberisi method yang membandingkanobject MyInteger ke object dari classyang sama.

Seperti yang kita lihat disini,kedua class-class mempunyaimethod yang mirip dimanamembandingkan mereka dari objectlain dalam tipe yang sama, tetapimereka tidak berhubungan samasekali. Supaya dapat menjalankancara untuk memastikan bahwa dua

518 Direktorat Pembinaan SMK | 2008

Page 542: 01 bab 01 Dasar Komputer fachkunde OK

sebuah interface yang digunakanuntuk mendefinisikan hubungan

Pemrograman Berorientasi Objek Bahasa Pemrorgraman

class-class ini mengimplementasikanbeberapa method dengan tkita yangsama, kita dapat menggunakansebuah interface untuk hal ini. Kitadapat membuat sebuah classinterface, katakanlah interfaceRelation dimana mempunyaideklarasi method pembanding. Relasiinterface dapat dideklarasikansebagai,

public interface Relation{public boolean isGreater( Object a, Object b); public boolean isLess(Object a, Object b); public boolean isEqual( Object a, Object b);}

Alasan lain dalam menggunakaninterface pemrograman object adalahuntuk menyatakan sebuah interfacepemrograman object tanpa

menyatakan classnya. Seperti yangdapat kita lihat nanti dalam bagianInterface vs class, kita dapat benar-benar menggunakan interfacesebagai tipe data. Pada akhirnya, kitaperlu menggunakan interface untukpewarisan model jamak dimanamenyediakan class untuk mempunyailebih dari satu superclass. Pewarisanjamak tidak ditunjukkan di Java,tetapi ditunjukkan di bahasaberorientasi object lain seperti C++.

Perbedaan utama antara sebuahinterface dan sebuah class abstract:method interface tidak punya tubuh,sebuah interface hanya dapatmendefinisikan konstanta daninterface tidak langsung mewariskanhubungan dengan class istimewalainnya, mereka didefinisikan secaraindependent.

15.8. Interface dan ClassSatu ciri umum dari sebuah

interface dan class adalah pada tipemereka berdua. Ini artinya bahwasebuah interface dapat digunakandalam tempat-tempat dimana sebuahclass dapat digunakan. Sebagaicontoh, diberikan class Person daninterface PersonInterface, berikutdeklarasi yang benar:

PersonInterface pi = new Person(); Person pc = new Person();

Bagaimanapun, Kita tidak dapat membuat instance dari sebuah interface. Perhatikan contoh potongan program sebagai berikut:

PersonInterface pi = newPersonInterface();

//COMPILE/ERROR!!!

Ciri umum lain baik interfacemaupun class dapat mendefinisikanmethod. Bagaimanapun, sebuahinterface tidak punya sebuah kodeimplementasi sedangkan pada classmemiliki salah satunya.

Untuk membuat interface, kitatulis sebagai berikut:

public interface [InterfaceName]{

//beberapa method tanpa isi}

Sebagai contoh, mari kita membuat

2008 | Direktorat Pembinaan SMK 519

Page 543: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Pemrograman Berorientasi Objek

antara dua object menurut urutan asli dari object.

public interface Relation{

public boolean isGreater(Object a, Object b);

public boolean isLess(Object a, Object b);

public boolean isEqual(Object a, Object b);}

Sekarang, penggunaan interface,kita gunakan kata kunci implements.Perhatikan contoh program dibawahini:

Program 15.6// Class ini mendefinisikan segmen garispublic class Line implements Relation{

privatedouble x1;privatedouble x2;privatedouble y1;privatedouble y2;public Line(double x1, double x2, doubley1, 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);

}

Page 544: 01 bab 01 Dasar Komputer fachkunde OK

520 Direktorat Pembinaan SMK | 2008

Page 545: 01 bab 01 Dasar Komputer fachkunde OK

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 mencobamengimplementasikan sebuahinterface, selalu pastikan bahwa Kita

mengimplementasikan semuamethod dari interface, jika tidak, Kitaakan menemukan kesalahan ini,

Line.java:4: Line is not abstract and does not override abstract method isGreater(java.lang.Object,java.lang.Object) in Relationpublic class Line implements Relation^1 error

15.9. Hubungan dari Interface ke ClassSebuah class dapat

mengimplementasikan sebuahinterface selama kode implementasiuntuk semua method yangdidefinisikan dalam interface tersedia.Hal lain yang perlu dicatat tentanghubungan antara interface ke class-class yaitu, class hanya dapatmengextend satu superclass, tetapidapat mengimplementasikan banyakinterface.

Sebuah contoh dari sebuah classyang mengimplementasikan interfaceadalah sebagai berikut:

public class Person implementsPersonInterface,LivingThing, WhateverInterface {//beberapa kode di sini

}

Contoh lain dari class yang meng-extend satu superclass danmengimplementasikan sebuahinterface adalah,

public class ComputerScienceStudent extends Studentimplements PersonInterface, LivingThing {//beberapa kode disini}

Catatan bahwa sebuah interfacebukan bagian dari hirarki pewarisanclass. Class yang tidak berhubungandapat mengimplementasikaninterface yang sama.

2008 | Direktorat Pembinaan SMK 521

Page 546: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Pemrograman Berorientasi Objek

15.10. Pewarisan Antar InterfaceInterface bukan bagian dari

hirarki class. sedangkan interfacedapat mempunyai hubunganpewarisan antara mereka sendiri.misalnya, ketika kita punya duainterface StudentInterface daninterface PersonInterface. JikaStudentInterface meng- extendPersonInterface, maka ia akan

mewariskan semua deklarasi method dalam PersonInterface.public interface PersonInterface {. . .}public interface StudentInterface extends PersonInterface {. . .}

15.13.Soal LatihanJawablah soal latihan dibawah ini dengan baik dan benar.1. Apa yang dimaksud dengan pemrograman Object oriented dan prosedural2. Sebutkan perbedaan antara kedua program tersebut3. Berilah gambaran yang jelas mengenai pemroraman OOP4. Apa yang dimaksud dengan abstraksi5. Apa yang dimaksud dengan enkapsulasi6. Apa yang dimaksud dengan pewarisan7. Apa yang dimaksud dengan imutable dan mutable objek8. Apa yang dimaksud dengan bahasa pemrograman modular dan buatlah

program sederhana9. Apa yang dimaksud dengan Priority queue (PQ)

522 Direktorat Pembinaan SMK | 2008

Page 547: 01 bab 01 Dasar Komputer fachkunde OK

Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman

BAB 16INHERITANCE, FRIENDS, POLYMORPHISM DAN OVERLOADING

16.1. Menggunakan Obyek dan Class16.2. Realisasi Prosedur dan Fungsi dalam Class16.3. Class Private , Class Public, dan Class Protected16.4. Friend16.5. Friend class16.6. Inheritance16.7. Class basis virtual16.8. Inheritance between class16.9. Multiple inheritance16.10. Polymorphism16.11. Overloading16.12. Soal Latihan

16.1. Menggunakan Obyek dan ClassUntuk memahami tentang Class

ada baiknya kita bahas mengenaiStruct yang merupakan suatuperintah dalam bahasa C++ sebagaipembentuk tipe data baru. Sebuahcontoh misal tentang kartu pelajar. Didalam kartu pelajar terdapatketerangan tentang IdentitasSekolah, Nama Siswa, Nomor IndukSiswa, Alamat Siswa, Jurusan/Kelas.Pengertian data-data tersebut harus

menjadi satu tidak terpisah-pisah(Identitas Sekolah sendiri, NamaSiswa sendiri, dan sebagainya).

Jadi seakan-akan persis sepertikalau kita melihat kartu pelajar diatas, dalam satu kartu terdapatbeberapa informasi sekaligus. Untukmewujudkan hal tersebut bahasaC++ menyediakan keyword yangdisebut Struct. Contoh penggunaansebagai berikut:

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

using namespace std;

struct KartuPelajar

2008 | Direktorat Pembinaan SMK 523

Page 548: 01 bab 01 Dasar Komputer fachkunde OK

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<<"NamaSiswa : ";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 PelajarAsal Sekolah : SMA N 1 Yogyakarta Nama Siswa : Badu Mahir Banget N I S : 1234Alamat : Jl. Antah Berantah 2009Jurusan / Kelas : X IPA 1

524 Direktorat Pembinaan SMK | 2008

Page 549: 01 bab 01 Dasar Komputer fachkunde OK

Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman

Hasil Pengisian DataPengisian Data Kartu PelajarAsal Sekolah : SMA N 1 Yogyakarta Nama Siswa : Badu Mahir Banget N I S : 1234Alamat : Jl. Antah Berantah 2009Jurusan / Kelas : X IPA 1

Lebih lanjut, struct dalamprogram di atas merupakan tipe databaru yang bernama KartuPelajar, inisama dengan char, int, float dansebagainya. Hal itu lebih diyakinkanpada main() ada perintahKartuPelajar data; dapat dijelaskanbahwa data merupakan variabledengan tipe KartuPelajar. Keywordstruct dalam bahasa C++ dapatdigantikan dengan class seperticontoh di bawah ini:

class KartuPelajar

{public:

char Sekolah[20]; char Nama[25]; char NIS[12];char Alamat[25];char Kelas[10];

};

Potongan program di atasmerupakan pembuatan tipe data barujuga namun menggunakan class,bukan struct. Program selengkapnyaseperti 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

Page 550: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends

cout<<"Pengisian Data Kartu Pelajar"<<endl; cout<<"Asal Sekolah: "; cin.getline(data.Sekolah, sizeof(data.Sekolah)); cout<<"NamaSiswa : ";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 PelajarAsal Sekolah : SMA N 3 YogyakartaNama Siswa : Badu Pakar BangetN I S : 1500Alamat : Jl. Kemana‐mana 007Jurusan / Kelas : X IPA 3

Hasil Pengisian DataPengisian Data Kartu PelajarAsal Sekolah : SMA N 3 YogyakartaNama Siswa : Badu Pakar BangetN I S : 1500Alamat : Jl. Kemana‐mana 007Jurusan / Kelas : X IPA 3

Lalu apa bedanya selainkeyword struct diganti dengan classdan ditambah public: dalam class

tersebut ? Di sinilah konsep objectoriented programming (pemrogramanberorientasi obyek) seharusnya

526 Direktorat Pembinaan SMK | 2008

Page 551: 01 bab 01 Dasar Komputer fachkunde OK

Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman

berbeda. Dalam pemrogramanberorientasi obyek antara data atauvariable dan fungsinya menjadi satukesatuan tidak terpisah seperti struct

di atas. Sehingga fungsi pengisiandata dan pencetakan data menjadisatu dalam class, contoh lengkapsebagai 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

Page 552: 01 bab 01 Dasar Komputer fachkunde OK

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 dapatdilihat bahwa antara variable danmethod menjadi satu dalam class.Selain itu ada perubahan dari contohsebelumnya bahwa variable berubahsifat dari public menjadi private. Halini dimaksudkan untukpenyembunyian data (informationhiding) dari pengguna, sehinggapengguna tidak dapa mengubah-ubah data secara langsung tetapiharus melalui pemanggilan class ataupenurunan (inheritance) class.

Sedangkan method pada classbersifat public, tentunya dimaksudkanagar dapat dipakai secara umum dariclass yang lain atau classturunannya.

Pada contoh program di ataskonten dari method ditulis langsungdalam class, itu merupakan carapertama. Ada cara kedua penulisankonten method di luar class supayalebih leluasa apabila kontennyapanjang. Program lengkapnya sepertiberikut:

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

Page 553: 01 bab 01 Dasar Komputer fachkunde OK

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

Page 554: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends

Penulisan dalam pemrogramanberorientasi obyek lebih lazim contohterakhir, walaupun cara pertama tidaksalah. Dalam contoh cara kedua lebih

menunjukkan ciri-ciri pemrogramanberirientasi obyeknya dibanding carapertama.

16.2. Realisasi Prosedur dan Fungsi dalam ClassSebuah class telah disinggung di

uraian sebelumnya bahwa prosedurmaupun fungsi (method) merupakansatu kesatuan dengan datanya,sering disebut dengan encapsulated.

Prosedur dan fungsi inimerupakan dasar untuk komunikasi

sebuah class dengan class lainnya,dan merupakan nyawanya classtersebut karena pengaturan prosesdari suatu class melalui komponenini. Untuk lebih jelasnya lihat contohdi bawah ini:

Program 16.5#include <cstdlib>#include <iostream>

using namespace std;

class Titik{

int Absis;int Ordinat;

public:void SetAbsis(intx); 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

Page 555: 01 bab 01 Dasar Komputer fachkunde OK

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 merupakanprogram untuk mengolah tentang titikdalam suatu bidang 2 dimensi.Sehingga mempunyai variable x dany. Untuk dapat mengolah data-dataabsis serta ordinat dalam bidang 2dimensi tersebut diperlukan proseduruntuk set absis dan prosedur untukset ordinat. Hal itu dapat dilihat dalamprosedur SetAbsis(int x) danprosedur SetOrdinat(int y);Sedangkan untuk mengambil databaik absis maupun ordinatnyamenggunakan fungsi AmbilAbsis()

dan fungsi AmbilOrdinat() gunapengolahan lebih lanjut, misal untukmencari jarak antara dua titik dalamsuatu bidang 2 dimensi. Dalamprogram di atas juga dimunculkancara pemanggilan obyek denganberbagai cara :

Titik A; pemanggilan obyeksecara biasaTitik* B = &A; pemanggilan obyeksecara pointerTitik& C = A; pemanggilan obyeksecara reference

2008 | Direktorat Pembinaan SMK 531

Page 556: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends

Pemanggilan anggota dari obyekjuga ditunjukkan contoh padapemanggilan biasa dan referenceberbeda dengan apabilapemanggilan obyek secara pointer.Lebih jelasnya seperti berikut:

Titik * B = &A; untukpemanggilan fungsi atau proseduranggota obyek tersebut tidak dapat

menggunakan (.) titik tetapi harusmenggunakan (->) panah. Sepertiprogram di atas untuk memanggilfungsi AmbilAbsis(), makaperintahnya B->AmbilAbsis(). Begitupula untuk prosedur SetAbsis(x),maka perintahnya B->SetAbsis(x).Contoh lain program untukmenentukan kelulusan siswa.

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

Page 557: 01 bab 01 Dasar Komputer fachkunde OK

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

elsereturn "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 satufungsi yang mengembalikan nilaistring yaitu fungsi cek. Fungsi iniakan mengembalikan keterangansebagai status siswa “Lulus” ataupun“Tak Lulus”, sehingga harusmengembalikan nilai string. Keluaranprogram tersebut dapat dilihat sepertidi bawah ini:

Masukkan Data SiswaNama Siswa = akuNIS Siswa = 1234Nilai Siswa = 75

Hasil Ujian SiswaNama Siswa = aku NIS Siswa = 1234Keterangan = Lulus

2008 | Direktorat Pembinaan SMK 533

Page 558: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends

16.3. Class Private , Class Public, dan Class ProtectedPenggunaan private maupun

public biasanya digunakan bersama-sama atau dikombinasikan. Padadasarnya suatu class apabila tidakdituliskan secara default adalahprivate jadi pada prinsipnya classtidak dapat diakses oleh class laindan hanya dapat diakses oleh classitu sendiri. Untuk lebih memahamikita kembali ke contoh aplikasi classyang pertama kali.

class Titik{

int Absis;int Ordinat;

};

Variabel Absis dan Ordinatmerupakan variabel private walaupuntidak ditulis secara eksplisit. Apabiladitulispun hasilnya sama saja, karenasecara default komponen dalamsuatu class adalah private. Dalam halini variabel Absis dan Ordinat tidakbisa diakses secara langsung.

Sebagai gambaran dilihat contohdi bawah ini:

Program 16.7#include <cstdlib>#include <iostream>

using namespace std;

class Titik{

int X;int Y;

};

int main(int argc, char *argv[]){

TitikA; 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 dicompile akan terjadi kesalahandianggap kelas Titik tidak mempunyaimember bernama X dan Y. Jadi X

dan Y tidak dianggap sebagaimember hal ini karena private. Lainhalnya jika diganti menjadi publicseperti berikut:

534 Direktorat Pembinaan SMK | 2008

Page 559: 01 bab 01 Dasar Komputer fachkunde OK

Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman

Program 16.8#include <cstdlib>#include <iostream>

using namespace std;

class Titik{

public:intX;intY;

};

int main(int argc, char *argv[]){

TitikA; A.X= 4;A.Y =6;cout<<"Absis titik A = "<<A.X<<"\n";cout<<"Ordinat titik A ="<<A.Y<<"\n";system("PAUSE");returnEXIT_SUCCESS;

}

Program di atas jikalaudijalankan tidak akan terjadikesalahan, karena variabel X dan Ypublic jadi tidak ada penyembunyianinformasi (information hiding).Keluaran dari program tersebutseperti berikut:

Absis titik A = 4Ordinat titik A = 6

Tapi kalau bisa diubah dari luarmaka data itu terlalu berisiko ibaratsebuah rumah bisa dimasuki orangsekehendak hati, hal ini tidak bolehterjadi. Oleh karena itu variabeltersebut harus tetap private tetapidiberi jalan masuk apabila diperlukanuntuk diganti atau diubah nilainya.Program secara lengkapnya menjadi#include <cstdlib>

Program 16.9#include <iostream>

using namespace std;

class Titik{

2008 | Direktorat Pembinaan SMK 535

Page 560: 01 bab 01 Dasar Komputer fachkunde OK

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

Page 561: 01 bab 01 Dasar Komputer fachkunde OK

Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman

Jadi ada dua pasang methodyang ditambahkan, satu untukmemasukkan data baik X maupun Yyaitu lewat SetAbsis maupunSetOrdinat. Yang kedua untukmenampilkan atau melihat variabel Xataupun Y melalui perintahAmbilAbsis dan AmbilOrdinat. Disiniterlihat bahwa pintu masuk dankeluar melalui jalur tertentu tidak bisalangsung seperti apabila variabel diset public. Ibarat super market disitu

ada pintu masuk dan pintu keluar,untuk mengambil barang-barangyang ada harus melalui prosedurtidak bisa begitu saja. Dapatdisimpulkan untuk mengakses datadalam suatu class yang bersifatprivate bisa dengan membuatmethod yang bersifat public sehinggabisa memanipulasi data/variabel yangada didalamnya. Contoh lain sebagaiberikut:

Program 16.10#include <cstdlib>#include <iostream>

using namespace std;

class A{private:intprivat;

public:intumum;intAmbilPrivat(){ returnprivat; };void SetPrivat(intdata){ privat =data; };

voidTesA();

};

void A::TesA(){

cout<<"Keluaran dariTesA"<<endl;cout<<"Umum ="<<umum<<endl;2008 | Direktorat Pembinaan SMK 537

Page 562: 01 bab 01 Dasar Komputer fachkunde OK

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 dilihatperbedaan pemakaian public danprivate dalam memanipulasi data didalam class, baik dari class itu sendirimaupun dari class turunannya. Dariclass sendiri yaitu class A semuavariabel maupun method bisadiakses lansung, contoh methodTesA().

Tetapi pemanggilan dari classturunannya yaitu class B harusmelalui method public-nya,contohnya pada method TesB() untukmenampilkan data harus pakaiAmbilPrivat tidak langsung variabelprivat seperti TesA(). Tetapi untukvariabel umum bisa dipanggillangsung karena sifatnya public, jadi

538 Direktorat Pembinaan SMK | 2008

Page 563: 01 bab 01 Dasar Komputer fachkunde OK

Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman

tidak ada beda cara pemanggilanbaik TesA() maupun TesB().

Sedangkan untuk pemanggilandi main() baik ContohA yangmerupakan class baru dari class A,dan Contoh B yang merupakan classbaru dari class B tidak adaperbedaan cara pemanggilan. Bisadimengerti karena class B merupaka

turunan public dari class A.Sebenarnya masih ada satu lagi yaitusifat protected. Suatu class yangmemproteksi data-datanya dengansifat protected hanya bisa diaksesdari dirinya sendiri atau dari classturunannya. Lihat contoh berikut danbandingkan dengan sifat private yangtelah dibahas sebelumnya.

Program 16.11#include <cstdlib>#include <iostream>

using namespace std;

class A{protected:int proteksi;

public:int umum;int AmbilProteksi(){ return proteksi; };void SetProteksi(int data){ proteksi = data; };

void TesA();};

void A::TesA(){

cout<<"Keluaran dari TesA"<<endl; cout<<"Umum= "<<umum<<endl; cout<<"Private = "<<proteksi<<endl;

}

class B: public A{public:void TesB();

};

2008 | Direktorat Pembinaan SMK 539

Page 564: 01 bab 01 Dasar Komputer fachkunde OK

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() danTesB() cara mengakses data classsama persis (variabel maupunmethod) contoh variabel umum danvariabel proteksi. Jadi class yangbersifat protected bisa diakseslangsung persis seperti class tersebutmelalui turunannya. Bandingkandengan contoh sebelumnya yaituclass yang bersifat private tidak dapat

diakses langsung dari turunannya.Tetapi harus melalui method yangbersifat public. Namun perludicermati cara macam ini mempunyaikelemahan karena data tersebutseolah-olah menjadi bersifat publicmeskipun dideklarasikan secaraprivate atau protected; Untukmengatasi masalah semacam itu,C++ menyediakan satu keyword,

540 Direktorat Pembinaan SMK | 2008

Page 565: 01 bab 01 Dasar Komputer fachkunde OK

Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman

yaitu friend. Sebuah fungsi atau classyang dideklarasikan dengan sifatfriend dapat mengakses semua

anggota class lain, baik bersifatprivate, protected, maupun public.

16.4. FriendSebelumnya sudah di bahas

bahwa ada tiga macam proteksi bagimember class, yakni: public,protected dan private. Memberprotected dan private tidak bisadiakses dari luar class dimana diadideklarasikan. Walaupun demikianaturan ini dilanggar dengan adanyafriend di dalam class, sehingga kitadapat membuat fungsi eksternal

untuk mengakses member privatedan protected.

Untuk itu kita mendeklarasikanprototype fungsi eksternal yangdimaksud yang akan menambahakses sebelumnya dengan instruksifriend di dalam deklarasi class yangdapat dishare oleh semua member.Perhatikan contoh berikut dimana kitamendeklarasikan friend functionduplicate:

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

Page 566: 01 bab 01 Dasar Komputer fachkunde OK

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 yangmerupakan friend dari CRectangle,kita dapat mengakses member widthdan height dari objek yang berbedadalam tipe CRectangle. Perhatikanbahwa fungsi duplicate() bukanmerupakan anggota dari classCRectangle

Dengan friend function fungsiyang bukan merupakan anggotaclass (diliar class) dapat mengakses

member class yang sifatnyaprivateprotected. Secara umumpenggunaan fungsi friendkelihatannya keluar dari metodologiOOP, sehingga selama masihmemungkinkan lebih baikmenggunakan member yangclassnya sama untuk masalah ini.Seperti pada contoh sebelumnya,akan lebih sederhana jika duplicate()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

Page 567: 01 bab 01 Dasar Komputer fachkunde OK

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 tujuanutama dari pemrograman berorientasiobyek adalah enkapsulasi data danfungsi yang mengakses data didalam class. Pengkapsulanmemberikan keuntungan terutamamemudahkan dalam pemeliharaanprogram dan juga dalam debugging.Namun pengkapsulan untuk obyekyang kompleks terkadang sulitdilakukan, sehingga adakalanyaaturan terpaksa harus dilanggar demitujuan yang harus dicapai. Sepertijika punya rumah ada kamar yangsifatnya pribadi, sehingga tidakdimasuki oleh orang lain. Tetapikadang justru seorang teman yangdianggap sahabat boleh memasukikamar tersebut, itulah analogi darifriend.

Friend pada C++ memangkontradiksi. Disatu pihak dapatmenyederhanakan kompleksitassuatu obyek, tetapi juga dapat

meruntuhkan konsep enkapsulasi,tentu saja jika terlalu banyakdigunakan. Hal ini disebabkan karenafriend memungkinkan pihak di luarclass dapat mengakses anggotaclass termasuk yang bersifat private.Itulah sebabnya friend harusdigunakan seperlunya dan jugadigunakan secara tepat. Apabilaternyata kita terlalu banyakmenggunakan friend maka sebaiknyamerombak rancangan program classyang telah dibuat. Sebaiknya class-class yang menggunakan frienddipecah menjadi beberapa class lain.Secara umum, friend berguna kalauada suatu operasi yang hendakmengakses data dari dua class yangtidak ada kaitannya. Friend jugamemungkinkan untuk menampilkanisi obyek lain.

Salah satu fungsi friend adalahfungsi bukan anggota class yangdapat mengakses anggota class.

2008 | Direktorat Pembinaan SMK 543

Page 568: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends

Fungsi ini dapat dipakai untukmengakses anggota class yangbersifat private maupun protected.

Gambaran fungsi friend dapat dilihat pada program berikut:

Program 16.14#include <cstdlib>#include <iostream>

using namespace std;

#include <cstdlib>#include <iostream>

using namespace std;

class Siswa{

private:char*Nama;char*Kelas; intNIS;

public: Siswa();void inisialisasi(int Nomor, char *Nama,char *Kelas);friend voidtampil_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

Page 569: 01 bab 01 Dasar Komputer fachkunde OK

anggota class. Tidak didahului seperti layaknya memanggil fungsidengan: sebuah class. Jadi fungsi

dianggap sebagai argumentfriendbiasa

Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman

cout<<"Nomor Siswa = "<<swa.NIS<<endl; cout<<"NamaSiswa = "<<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 = 1234Nama Siswa = BaduKelas Siswa = X IPS

Pada contoh di atas, fungsitampil_data() pada class Siswadideklarasikan sebagai fungsi friend.Dengan demikian, fungsi ini dapatmengakses data seperti NIS.Perhatikan saat fungsi inididefinisikan, terlihat bahwa fungsi iniseperti fungsi biasa bukan fungsi dari

tampil_data(sis);

tidak diperbolehkan menyebut namaclass di depan fungsi tersebut seperticontoh berikut:

sis.tampil_data();

Siswa::

di depan nama fungsi.Oleh karena fungsi tampil_data()berkedudukan sebagai fungsi biasamaka cara pemanggilannya jugamengikuti kaidah fungsi biasa,seperti:

bukan anggota suatu class. Sebuahcontoh lain mengenai fungsi friendditunjukkan pada program berikut.Contoh ini menggambarkan fungsifriend yang dapat mengakses tigabuah obyek sekaligus.

Program 16.15#include <cstdlib>#include <iostream>

using namespace std;

2008 | Direktorat Pembinaan SMK 545

Page 570: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends

class HasilUjian{

private: intNIS; 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,friend double nilai_max(HasilUjian a, HasilUjian b,HasilUjian c)

berfungsi mencari nilai terbesardengan fungsi nilai_max() dari tigaobyek a, b, dan c yang merupakanclass HasilUjian. Bagaimana untukpemakaian friend yang lebih dari satu

546 Direktorat Pembinaan SMK | 2008

Page 571: 01 bab 01 Dasar Komputer fachkunde OK

Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman

class ?. Program berikut suatucontoh pemakaian fungsi friend untukmengakses dua buah class. Adaclass PemainWanita dan PemainPria,

kemudian ada fungsi friendinfo_pemain_campuran(). Programselengkapnya sebagai berikut:

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

Page 572: 01 bab 01 Dasar Komputer fachkunde OK

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

class PemainPria;

Pernyataan ini dikenal dengan istilahrefernsi di depan. Hal seperti inidiperlukan mengingat pengenal classPemainPria akan digunakan padapendeklarasian class PemainWanita,yaitu pada baris yang berisi:

friend void info_pemain_campuran(PemainWanita x, PemainPria y);

Deklarasi lengkap PemainPria inidapat diletakkan di belakang. Halyang perlu diperhatikan dalammembuat fungsi friend yang

melibatkan dua buah class yangberbeda atau lebih adalahmendeklarasikan fungsi tersebutpada class-class yang hendakdiakses. Bentuk Pendeklarasiannyapersis sama, seperti contoh baris diatas terdapat di kedua class baikPemainWanita maupun PemainPria.

Para pemrogram C++ biasamelewatkan obyek pada fungsi frienddengan referensi. Hal seperti inisangat bermanfaat untuk obyekberukuran besar. Denganmelewatkan secara referensi,prosesnya menjadi lebih cepat.Deklarasi fungsi friend di atas bisadiuah menjadi seperti berikut ini :

548 Direktorat Pembinaan SMK | 2008

Page 573: 01 bab 01 Dasar Komputer fachkunde OK

Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman

friend void info_pemain_campuran(constPemainWanita &x, const PemainPria&y);

Keyword const di atas menunjukkanbahwa anggota obyek tidakdimaksudkan untuk diubah.Sedangkan symbol & di depan namaargument x dan y menyatakan obyektersebut dilewatkan berdasarkanreferensi. Selain itu perlu juga

disesuaikan pada bagian definisifungsi, perubahannya sebagaiberikut:

voidinfo_pemain_campuran(constPemainWanita &x, constPemainPria &y){

…..}

Secara lengkap sebagai berikut:

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

Page 574: 01 bab 01 Dasar Komputer fachkunde OK

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 samadengan program sebelumnya. Suatufungsi anggota kelas dapatberkedudukan sebagai fungsi friend.Fungsi seperti ini (biasa disebutfungsi anggota friend) dapatmengakses anggota class yangmendeklarasikannya. Sebagai contoh

program di atas dapat dimodifikasiagar fungsi info_pemain_campuran()menjadi fungsi anggota classPemainWanita dan dideklarasikansebagai frien pada class PemainPria.Mula-mula class PemainWanita perludideklarasikan sebagai berikut:

Program 16.18class PemainWanita{private:char *nama;

550 Direktorat Pembinaan SMK | 2008

Page 575: 01 bab 01 Dasar Komputer fachkunde OK

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 info_pemain_campuran() berkedudukan sebagai fungsianggota dari class PemainWanita. Argumen dari fungsi ini berupareferensi dari obyek ber-clasPemainPria. Penyebutan classPemainPria mengharuskan adanya pemberitahuan kepada compilerbahwa PemainPria adalah class.

Oleh karena itu, sebelumdideklarasikan PemainPria perlu diberikan referensi dimuka seperti contoh program sebelumnya.Kemudian bagaimanapendeklarasian pada classPemainPria ? Pada class ini fungsiinfo_pemain_campuran() dideklarasikan sebagai fungsi friend:

Program 16.19class PemainPria{private:char *nama;char *asal;friend void PemainWanita::info_pemain_campuran(const PemainPria &x);

public:PemainPria(char *nam, char *asl);

};

Perhatikan ada perubaha padafungsi info_pemain_campuran(),pada class PemainPria menjadibersifat private dan memakaikeyword friend. Selain itu juga

ditambahkan nama class yangmenjadi friend yaitu PemainWanita.Program selengkapnya sebagaiberikut:

Program 16.20#include <cstdlib>#include <iostream>

using namespace std;

class PemainPria;

class PemainWanita{

2008 | Direktorat Pembinaan SMK 551

Page 576: 01 bab 01 Dasar Komputer fachkunde OK

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

Page 577: 01 bab 01 Dasar Komputer fachkunde OK

Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman

system("PAUSE");return EXIT_SUCCESS;

}

Apa yang dimaksud denganclass friend ? Sesungguhnya suatuclass dapat dijadikan sebagai frienddari class yang lain. Hal seperti inidiperlukan apabila ada dua class dandibutuhkan mengakses bagianprivate maupun protected dari class-class tersebut. Kita lihat contoh

berikut. Misal ada dua kelas yaitu D3dan S1, keduanya mempunyai datatentang banyaknya ruang ataukebutuhan ruang kelas. Sertaruangan D3 dapat dipakai oleh S1,maka pendeklarasian masing-masingclass sebagai berikut:

Program 16.21class D3{private:int ruangD3;

public: D3(){ ruangD3 = 10; }friend class S1;

};

class S1{privat

e:int ruangS1;

public:

S1(){ ruangS1 = 6; }void info_ruang(D3 x);

};

Pada contoh ini, x adalah obyekdengan class D3 yang menjadiargument fungsi info_ruang() padaclass S1. Fungsi dimaksud untukmengakses data ruang_D3 milikobyek x(yang ber-class D3).Masalahnya adalah bahwa dataruangD3 bersifat private, sehinggaclass S1 tidak bisa mengaksesnya.Persoalan yang sama tetap muncul

sekiranya keyword private pada classD3 diganti dengan protected. Sebabseperti diketahui, anggota yangbersifat protected hanya bisa diakseskalau class ini diwariskan ke classturunan. Solusinya dengan classfriend seperti yang terlihat pada barisdibawah konstructor D3(). Dandengan pernyataan ini dapatdiletakkan dimana saja pada class

2008 | Direktorat Pembinaan SMK 553

Page 578: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends

D3, private, protected, maupunpublic. Keluaran program di atassebagai berikut:

Ruang D3 = 10Ruang S1 = 6Total Ruang S1 = 16

16.5. Friend classSebagaimana kita dapat

mendefinisikan friend function, kitajuga dapat mendefinisikan classsebagai friend dari class lain, yang

mengijinkan satu class mengaksesmember private dan protected dariclass lainnya.

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

Page 579: 01 bab 01 Dasar Komputer fachkunde OK

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 kitamendeklarasikan CRectanglesebagai friend dari CSquare,sehingga CRectangle dapatmengakses member private danprotected yang dimiliki classCSquare, yakni CSquare::side, yangmendefinisikan lebar dari segiempat.Kita juga melihat adanya instruksibaru di awal program, yakni

classCSquare;

yang merupakan prototype dari classCSquare. Hal ini diperlukan karenadalam deklarasi CRectangle kitamengacu kepada CSquare (sebagaiparameter dalam fungsi convert() ).Definisi CSquare disertakan di bagian

akhir, sehingga jika kita tidakmengikutkan prototype CSquarediawal class instruksi tersebut akandianggap salah (tidak dikenali).

Perhatikan bahwa penggunaanfriend tidak akan berfungsi jika kitatidak menuliskannya secara eksplisit.Dalam contoh CSquare, CRectangletidak dianggap sebagai suatu friendclass, sehingga CRectangle dapatmengakses member private danprotected milik CSquare tetapi tidaksebaliknya. Agar dua buah classdapat saling mengakses memberprivate dan protected nya makakeduanya harus dideklarasikansebagai friend class dari yang lainseperti pada contoh berikut:

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

class contoh {intx;

public:voidfcontoh1 ();voidfcontoh2 ();friend classcth;

};

class cth {inty;

2008 | Direktorat Pembinaan SMK 555

Page 580: 01 bab 01 Dasar Komputer fachkunde OK

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<<"\nNilaiy = "<<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; cthb;a.fcontoh1(); a.fcontoh2(); b.fcth1(); getch();

}

556 Direktorat Pembinaan SMK | 2008

Page 581: 01 bab 01 Dasar Komputer fachkunde OK

Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman

Keluaran program diatas adalah sebagai berikut:Fungsi contoh 1 anggota class contohNilai x = 3

Fungsi contoh 2 anggota class contohNilai x = 3Nilai y = 5Fungsi cth anggota class cth (private) Nilai x = 5

Fungsi cth 1 anggota class cthNilai y = 3Fungsi cth anggota class cth (private) Nilai x = 5

16.6. InheritanceSalah satu hal penting dalam

class adalah inheritance. Inheritancemengijinkan kita untuk membuatobjek yang diturunkan dari objek lain,sehingga dimungkinkan didalamnyaterdapat member lain selainmembernya sendiri.

Sebagai contoh, misalnya kitaingin mendeklarasikan sederetanclass yang mendeskripsikan polygonseperti CRectangle atau CTriangle.Keduanya dapat dideskripsikandengan dua atribut yakni : alas dantinggi. Hal ini dapat direpresentasikandengan class CPolygon dan dariclass tersebut diturunkan dua classyakni CRectangle dan CTriangle.

Class CPolygon berisi memberyang umum pada semua polygon,dalam contoh ini adalah panjang danlebar (width dan height). CRectangledan CTriangle diturunkan dari classtersebut. Class yang diturunkan dariclass lain mewarisi semua member

yang ada dalam class dasarnya. Halini berarti bahwa jika class dasarnyamemiliki member A dan kitamenurunkannya ke class lain yangmemiliki member B, maka classturunan akan terdiri dari A dan B.Untuk menurunkan class dari yanglain, kita menggunakan operator :(colon) dalam deklarasi class turunandengan cara sebagai berikut:

class derived_class_name: publicbase_class_name;

dimana derived_class_name adalahnama class turunan danbase_class_name adalah nama classyang menjadi dasar. Public dapatdiganti dengan akses lain misalnyaprotected atau private, danmenjelaskan akses untuk memberyang diturunkan, seperti kita dapatlihat pada contoh berikut:

Program 16.24

2008 | Direktorat Pembinaan SMK 557

Page 582: 01 bab 01 Dasar Komputer fachkunde OK

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= 20Hasil pemanggilan fungsi area oleh trgl = 10

Sebagaimana kita lihat objekclass CRectangle dan CTrianglemasing-masing berisi member dariclass CPolygon yakni : width, heightdan set_values(). Protected mirip

dengan private, perbedaan hanyaterjadi pada class turunan. Ketika kitamenurunkan class, memberprotected dari class dasar dapatdigunakan oleh member lain dalam

558 Direktorat Pembinaan SMK | 2008

Page 583: 01 bab 01 Dasar Komputer fachkunde OK

Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman

class turunan, namun memberprivate tidak demikian.

Karena kita ingin width danheight dapat diakses oleh memberdalam class turunan CRectangle danCTriangle dan tidak hanya oleh

member CPolygon, kita pilih aksesprotected daripada private. Kita dapatmebuat ringkasan perbedaan tipeakses berdasarkan siapa yang dapatmengakses, sebagai berikut:

Access

public protected

privateAnggota dari kelas yang sama

yes yes yesAnggota dari turunan kelas

yes yes noBukan anggota yes no no

Dimana "bukan anggota"merepresentasikan referensi dari luarclass, seperti dari main(), dari classlain atau dari fungsi lain baik globalataupun local. Pada contoh diatas,anggota yang diturunkan kepadaCRectangle dan CTriangle diikutidengan hak akses yang samadengan class asalnya, CPolygon:

CPolygon::width //protected accessCRectangle::width //protected accessCPolygon::set_values() // publicaccessCRectangle::set_values() //public access

Ini dikarenakan kita menurunkanclass dari class lain sebagai public,yang perlu diperhatikan adalah:

class CRectangle: publicCPolygon;

public menunjukkan levelminimum proteksi yang berartimember warisan class dasar(CPolygon) harus diikutkan dalamclass baru (CRectangle). Level aksesminimum untuk member yangditurunkan dapat diubah menjadiprotected atau private selain public.Sebagai contoh, daughter adalah

class yang diturunkan dari motheryang didefinisikan sebagai berikut:

class daughter: protected mother;

yang menggunakan protectedsebagai minimum level akses untukmember daughter yang diwarisi darimother. Karena itu, semua memberyang sifatnya public pada motherakan menjadi protected padadaughter, yang merupakan levelminimum dimana ia dapat diwariskan.Tentunya, ini tidak akan menjadihalangan bagi daughter untukmempunyai member public. Minimumlevel hanya akan digunakan untukmember yang diwariskan mother.

Penggunaan umum levelinheritance selain public adalahprivate, yang menyediakanencapsulasi sempurna dalam classdasar, kecuali jika tidak ada yangberanggapan classnya akan dapatdiakses member class dasar dariturunannya. Sehingga dalam banyakkasus class diturunkan dalam bentukpublic. Jika tidak ada level aksesyang ditulis maka dalam class akandianggap private, dan dalam tipestruct dianggap public.

2008 | Direktorat Pembinaan SMK 559

Page 584: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends

Ada empat konversi baku darisuatu class turunan ke class basispubliknya, yaitu:1. Obyek class turunan akan

dikonversi secara implisit ke obyekclass basis publiknya.

2. Reference class turunan akandikonversi secara implisit kereference class basis publiknya.

3. Pointer class turunan akandikonversi secara implisit kepointer class basis publiknya.

Pointer ke suatu member darisuatu class basis akan dikonversisecara implisit menjadi pointer kesuatu member dari suatu publicly-derived-class. Konversi-konversidengan arah sebaliknya memerlukancast secara eksplisit, walaupun perludiingat bahwa hal ini tidak amandalam pemrograman

C++ memungkinkan suatu classmewarisi data ataupun fungsianggota class lain. Sifat ini disebutinheritance. Class yang mewarisi sifatclass lain disebut class turunan(derived class), sedangkan classyang mewariskan sifat ke class laindisebut class dasar(base class).

Konsep inheritance pada C++ inisebenarnya diilhami oleh sifatpewarisan dalam kehidupan nyata.Misal, mata si Upik mirip denganmata ayahnya dan hidungnyamancung mewarisi ibunya.Keuntungan utama dengan adanyainheritance yaitu memungkinkansuatu kode yang telah ditulis mudahsekali untuk digunakan kembali.Contoh jika anda mempunyai classyang telah dipakai dan teruji. Suatusaat anda menemukanpermasalahan yang sama denganclass tersebut maka class tesebutdapat dipergunakan dengan caramenurunkannya sehingga sifat-sifatyang sama bisa dimanfaatkan.

Dengan cara seperti inipengembangan program menjadilebih efisien dan efektif. Juga apabiladiperlukan turunannya dapatmenambahkan sifat-sifat baru sesuaidengan kebutuhan permasalahanpermograman yang sedang dihadapi,bahkan kalau perlu bisa menggantidengan sifat yang berbeda denganclass dasarnya.

Untuk memahami tentangkonsep inheritance, marilah kita cobacontoh berikut :

Program 16.25#include <cstdlib>#include <iostream>

using namespace std;

class basis{private: int A; int B;

560 Direktorat Pembinaan SMK | 2008

Page 585: 01 bab 01 Dasar Komputer fachkunde OK

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 bahwaclass turunan dapat menjalankafungsi info_basis() yang ada padaclass dasar. Hal ini bisa terjadikarena pernyataan tambahan padadeklarasi class turunan, lebihjelasnya lihat pernyataan berikut:

class turunan : public basis{

…..}

Terlihat ada tambahan :publicbasis, itulah yang menyebabkanbahwa class turunan adalah turunandari class basis. Dengan demikianmaka tentu saja dapat mengaksessemua anggota class basis yangbersifat public. Akan tetapi anggota

yang bersifat private tetap tidak dapatdiakses. Jadi yang diwariskan hanyayang bersifat public. Namun demikianapabila hendak mengakses bagianprivate dari class basis dibuatkanfungsi pada class turunan untukmengaksesnya, fungsi inilah nantiyang dipanggil untuk menjalankanatau memanipulasi anggota privateclass dasar. Jadi harus denganperantara tidak dapat langsung.

Pada prinsipnya apabila classturunan bersifat private makasebenarnya sifat-sifat class dasarditurunkan di bagian private,sehingga tidak dapat diakseslangsung. Dan apabila class turunanbersifat public maka sifat-sifat classdasar diturunkan di bagian public,jadi dapat diakses langsung.

2008 | Direktorat Pembinaan SMK 561

Page 586: 01 bab 01 Dasar Komputer fachkunde OK

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

Page 587: 01 bab 01 Dasar Komputer fachkunde OK

Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman

D;public

:void info_dasar();void info_turunan();

};

Dari gambaran di atas jelaskiranya bagaimana dan dimana sifat-sifat class dasar diturunkan di classturunan. Sekali lagi bahwa anggotaclass dasar yang bersifat privatetetap tidak diwariskan ke classturunan. Akan tetapi apabilamenghendaki beberapa data anggotaclass dasar dapat diturunkan makabuatlah bersifat protected. Karenaanggota yang bersifat protected ikutdiwariskan pada class turunan (lihatgambaran di atas). Keyword

protected ini juga dapat diterapkanuntuk class turunan sebagaimanaprivate dan public. Apabila classturunan bersifat protected makasemua anggota protected dan publicclass dasar akan menjadi anggotaprotected pada class turunan.

Untuk lebih meyakinkanbagaimana dan dimana sifat-sifat dariclass dasar diwariskan, analisaprogram berikut yang menggunakankonstruktor dan destruktor.

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

Page 588: 01 bab 01 Dasar Komputer fachkunde OK

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 programmenunjukkan konstruktor kedua classdijalankan semua, ini bisa dipahamikarena konstruktor terletak padabagian public. Begitu pula dengandestructor semua class dijalankanbaik class dasar maupun class

turunan. Namun nama kendaraandiisi dari masukkan nama truk bukankendaraan. Kenapa bisa padahalnama kendaraan bersifat private.Karena pemasukan data namamelalui inisialisasi konstruktor bukanlangsung pada main().

564 Direktorat Pembinaan SMK | 2008

Page 589: 01 bab 01 Dasar Komputer fachkunde OK

Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman

16.7. Class Basis VirtualPenggunaan class basis virtual

adalah untuk mengatasi mekanismepewarisan default sehinggaperancang/pembuat class dapatmenentukan suatu shared-base-class. Tak peduli berapa kali suatuclass basis virtual muncul dalamhirarkhi derivasi, hanya suatuinstance dibuat dan suatu class basisvirtual dispesifikasikan denganmenggunakan kata kunci virtualdalam deklarasinya. Perhatikancontoh dibawah ini:

class D : public virtualB {.....}

pada potongan program diatasmenunjukkan bahwa B adalah suatuclass basis virtual untuk class D. Jikasuatu class basis virtualmendefinisikan konstruktor, classbasis virtual itu harus mendefinisikansuatu konstrutkor yang takmemerlukan argumen. Biasanyasuatu class turunan dapat menginitsecara eksplisit hanya class-classbasis yang langsung di atasnya.Class-class basis virtual merupakanperkecualian.

Class basis virtual di-init olehclass 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

Page 590: 01 bab 01 Dasar Komputer fachkunde OK

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

};

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

};

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

Page 591: 01 bab 01 Dasar Komputer fachkunde OK

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

Page 592: 01 bab 01 Dasar Komputer fachkunde OK

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

Page 593: 01 bab 01 Dasar Komputer fachkunde OK

pto→print():i=0

568 Direktorat Pembinaan SMK | 2008

Page 594: 01 bab 01 Dasar Komputer fachkunde OK

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=4m=5.2~tomat().~sayur().~buah().~tanaman().

Konstruktor class basis virtualselalu dijalankan sebelum konstruktorclass basis nonvirtual, tak peduliposisinya dalam derivation-list.Sedangkan urutan destruktor

sebaliknya, dan jika suatu classturunan melibatkan sekaligusinstance public dan instance privatedari suatu class basis virtual,makayang menang adalah instance public.

Program16.28class

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 classInheritance memungkinkan kita

untuk membuat objek dari objeksebelumnya, sehingga memungkin-an untuk menyertakan beberapaanggota objek sebelumnya ditambahdengan anggota objeknya sendiri.Contoh, membuat class untukmengetahui apakah segi empat(CRectangle), atau (CTriangle).

Masing-masing mempunyai hal yangsama yaitu, dasar dan tinggi. Dapatdirepresentasikan dengan classCPolygon kemudian diturunkanmenjadi CRectangle dan CTriangle.

Class CPolygon dapat berisianggota yang dipakai untuk setiappolygon, dalam hal ini width danheight, dan CRectangle dan

2008 | Direktorat Pembinaan SMK 569

Page 595: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends

CTriangle adalah class turunannya.Class turunan akan menurunkanseluruh anggota yang dimiliki olehclass dasar(parent)nya. Jadi jikaclass paret mempunyai anggota Adan diturunkan pada class laindengan anggota B,maka clas turunanini akan memiliki A dan B.Untuk menurunkan class,menggunakan operator : (colon) padasaat deklarasi, syntax :

class derived_class_name: publicbase_class_name;

Dimana derived_class_nameadalah nama dari derived class danbase_class_name adalah nama dariclass asal. public dapat digantikandengan tipe akses lainnya :protected atau private, Perhatikancontoh program dibawah ini :

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

Page 596: 01 bab 01 Dasar Komputer fachkunde OK

Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman

return EXIT_SUCCESS;}

Keluaran program diatas adalah :20 10

Class CRectangle dan CTriangle masing-masing mengandung anggota dariCPolygon, yaitu : width, height dan set_values().

16.9. Multiple inheritanceDalam C++ memungkinkan

untuk menurunkan field atau methoddari satu atau lebih class denganmenggunakan operator koma dalamdeklarasi class turunan. Contoh, akandibuat class untuk menampilkandilayar (COutput) dan akanditurunkan ke class CRectangle andCTriangle maka dapat dituliskan :

class CRectangle: public CPolygon, public COutput { classCTriangle: public CPolygon, public COutput {

perhatikan contoh program multipleinheritance dibawah ini:

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

Page 597: 01 bab 01 Dasar Komputer fachkunde OK

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.PolymorphismUntuk mempelajari materi

polimorfisme kita harus paham duluterhadap penggunaan pointer daninheritance. Coba anda pahamiinstruksi berikut, jika anda masihbelum paham pelajari kembali materiterkait:

int a::b(c) {}; // Materi Class a‐>b // Materi pointer class a: public b;// Materi Relationships between classes

16.10.1. Pointers to Base ClassSalah satu keuntungan terbesar

dalam menurunkan class adalahbahwa pointer ke class turunanmerupakan tipe yang kompatibeldengan pointer ke class dasar.Bagian ini akan membahas kelebihanC++ dalam hal tersebut. Sebagaicontoh kita akan menuliskan kembaliprogram tentang persegi panjang dansegitiga dalam contoh sebelumnyadengan deklarasi pointer. Perhatikancontoh dibawah ini:

Program 16.31#include <iostream.h>

class CPolygon {

572 Direktorat Pembinaan SMK | 2008

Page 598: 01 bab 01 Dasar Komputer fachkunde OK

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 () { CRectanglerect; 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 = 20Triangle area = 10

Fungsi main membuat duapointer yang menunjuk ke objek dariclass CPolygon, yakni *ppoly1 dan*ppoly2. Kedua pointer tersebutdiinisialisasi dengan alamat objekrect dan trgl, dan karena pointertersebut merupakan objek class

turunan dari Cpolygon, makainisialisasi ini benar. Pointer *ppoly1dan *ppoly2 dideklarasikan dari baseclass. Inisialisasi dengan rect dan trglvalid, namun pointer *ppoly1 dan*ppoly2 tetap tidak dapat mengaksesmember CRectangle dan CTriangle.

2008 | Direktorat Pembinaan SMK 573

Page 599: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends

Untuk alasan ini, ketika area()dipanggil kita tidak mungkinmenggunakan pointer *ppoly1 dan*ppoly2. Untuk membuat agar*ppoly1 dan *ppoly2 dapatmemanggil area(), maka harusdideklarasikan pada base classnyadan tidak hanya di class turunannya.Cara mendeklarasikannya dapat kitalihat di pembahasan materi Virtualmembers.

16.10.2. Virtual memberUntuk mendeklarasikan elemen

sebuah kelas yang akan kitaredefinisika di kelas turunan kitaharus mendauluinya dengan keywordvirtual maka pointer ke obyek yangmenunjuk klas tersebut dapatdigunakan dengan baik.

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; CSegitigatrgl; CSegibanyak poly;CSegibanyak * ppoly1 =&rect; CSegibanyak * ppoly2 = &trgl;

574 Direktorat Pembinaan SMK | 2008

Page 600: 01 bab 01 Dasar Komputer fachkunde OK

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

Sekarang kita punya 3 kelas(CSegibanyak, CSegiempat danCSegitiga) yang memiliki anggotayang sama: lebar, tinggi, set_nilai()dan luas(). Luas() telah didefinisikansebagai virtual karena itu akandidefinisikan kembali pada kelasturunan. Anda dapat melakukanverifikasi jika anda inginmelakukannya denganmenghilangkan keyword virtual darikode program diatas dan kemudiananda eksekusi program tersebut,hasil akan menhadi 0 untuk ketigasegibanyak bukannya 20,10,0. inidisebabkan karena pemanggilanterhadap obyek (CSegiempat::luas(),CSegitiga::luas() danCSegibanyak::luas(), akan mengacuke CSegibanyak::luas() dan akanmemanggil fungsi yang samatersebut (CSegibanyak::luas() ) untuksemua pemanggilan melalui obyekkelas turunan karena pemanggilan-

nya menggunakan pointer dengantipe CSegibanyak. Ini menunjukankepada anda tentang kegunaan darikeyword virtual, yang mengijinkanmember/anggota dari kelas turunandengan nama yang sama denganmember dari kelas dasar (base class)untuk dipanggil dari pointer dengantipe kelas dasar (bas e class) tetapimelaksanakan fungsi tersebut yangdidefinisikan pada kelas turunan.

Untuk memahami polymorphismterlebih lanjut harus mengenal fungsivirtual karena fungsi ini merupakandasarnya. Fungsi anggota dari suatuclass dapat dijadikan fungsi virtual.Jika fungsi ini dideklarasikan kembalipada turunan dan suatu pointer yangmenunjuk class dasar diciptakan,pointer dapat memilih obyek yangtepat sekiranya fungsi anggotatersebut dipanggil via pointer. Untuklebih memahami lihat contoh berikut:

Program 16.33#include <cstdlib>#include <iostream>

2008 | Direktorat Pembinaan SMK 575

Page 601: 01 bab 01 Dasar Komputer fachkunde OK

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

Page 602: 01 bab 01 Dasar Komputer fachkunde OK

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 diatas dan fungsi-fungsi anggota classyang dibuat yaitu makhluk, mamalia,sapi. Class mamalia mewarisi classmakhluk dan class sapi mewarisclass mamalia. Kemudian padadeklarasi class makhluk, perbedaanterletak pada fungsi anggotainformasi() dan keterangan(), fungsianggota informasi() tidak adakeyword virtual didepannya,sedangkan fungsi anggotaketerangan() ada tambahan virtual.Perbedaan class mamalia dan classsapi hamper tidak ada perbedaankecuali narasinya.

Sekarang kita lihat pada bagianmain(). Mula-mula penciptaan obyekbaru yaitu mamal ber-class mamalia,lembu ber-class sapi, dan binatang

merupakan pointer ke class makhluk.Kemudian pointer (binatang) inimenunjuk ke obyek mamal yang ber-class mamalia. Saat fungsi anggotainformasi() dipanggil dari pointer,ternyata yang ditampilkan adalahfungsi anggota dari class makhlukbukan fungsi anggota class mamalia.Tetapi tidakdemikian saat pointermemanggil fungsi anggotaketerangan(), yang ditampilkanadalah fungsi anggota mamaliabukan dari fungsi anggota makhluk.Mengapa demikian ? Disinilahperanan keyword virtual, karenafungsi anggota keterangan() padaclass makhluk diperlakukan sebagaifungsi virtual. Jadi jika perintah :

binatang‐>keterangan();

2008 | Direktorat Pembinaan SMK 577

Page 603: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends

dijalankan akan menyebabkan fungsianggota keterangan() milik mamaliayang diakses karena pointersebelumnya sudah diarahkan keobyek mamal yang ber-classmamalia. Hal serupa juga terjadipada obyek lembu yang ber-classsapi.

Fungsi anggota yang dibuatvirtual perlu dideklarasikan ulangpada setiap class turunan. Bentukdeklarasinya harus sama baik nilaibalik maupun argument-argumenyang dipakai. Namun keyword virtualcukup dinyatakan pada class dasar,dengan sendirinya otomatis fungsianggota tersebut pada class turunanjuga bersifat virtual. Bila fungsi padaclass turunan ternyata berbeda makafungsi tersebut tidak lagi sebagaifungsi virtual, dan pada saatdijalankan kompiler akan memberperingatan duplikasi nama fungsi.

Polymorphism sesuai denganasal-usul kata pembentuknya berarti“mempunyai banyak bentuk”. Dalamwujudnya, polymorphism dapatberoperasi pada dua aras, yaitu saatkompilasi dan saat eksekusi.Overloading terhadap fungsi danoperator merupakan bentukpolymorphism saat kompilasi. Namunorang lebih banyak mengenalpolymorphism saat eksekusi atausering disebut late binding ataudynamic binding. Hal inimenunjukkan kemampuan untukmenangani dua atau lebih bentukobyek yang berlainan pada saateksekusi berlangsung, denganmenyesuaikan lingkungan obyek

bersangkutan. Contoh pada programsebelumnya pada fungsi informasi()dan keterangan().

Kalau diperhatikan program diatas tidak ada penciptaan obyekclass makhluk, yang ada penciptaanpointer ke obyek ber-class makhluk.Pada keadaan seperti ini berartifungsi anggota keterangan() classmakhluk tidak pernah digunakan.Kalau memang tidak hendakdigunakan lebih baik disingkirkan dansebagai penggantinya ditambahkanangka 0 atau dibuat =0; lihatketerangan berikut:

Virtual void keterangan() = 0;

Fungsi inilah yang disebutdengan istilah fungsi virtual murni.Fungsi virtual murni ini sering dipakaisebagai class abstrak, yaitu classyang dideklarasikan tidak untukmenciptakan obyek. Class inimempunyai cirri paling tidakmempunyai sebuah fungsi virtualmurni. Jika class makhluk hendakdibuat class abstrak makaperubahannya sebagai berikut:

classmakhluk{

public:void informasi(){

cout<<"Informasi pada makhluk.."<<endl;

}virtual void keterangan() = 0;

}

578 Direktorat Pembinaan SMK | 2008

Page 604: 01 bab 01 Dasar Komputer fachkunde OK

Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman

16.11.OverloadingKeistimewaan program C++

lainnya adalah adanya fasilitasoperator overloading, yaitupenamaan fungsi tidak seperti padaumumnya, melainkan nama fungsiberupa kata kunci operator diikutidengan lambang operator yangdigunakan. Misalnya nama fungsioperator= yang dapat dipanggildengan hanya menuliskan operator =seperti pada operasi penugasanbiasa, sehingga dapat dibuat fungsipenugasan versi sendiri untuk tipe-tipe data tertentu, seperti kita dapatmenyatakan Time t2 = t1, dansebagainya. Jika kita mempunyaiekspresi dibawah ini :

int a, b,c;a = b+ c;

adalah benar, selama variable-variabel tersebut merupakan tipedata dasar. Namun tidak demikianhalnya dengan contoh berikut:

struct{

char product [50];

float price; } a, b, c;a = b + c;

Tetapi C++ memungkinkan halseperti diatas dengan menggunakanoverload operator. Dibawah iniadalah operator-operator yang dapatdioverload:

+ ‐ * / = < > += ‐=*= /= << >>< <= > >= == != <= >= ++ ‐‐% & ^ ! |~ &= ^= |= && || %= [] ()new delete

Untuk mengoverload operator kitacukup menuliskan satu fungsianggota class dengan namaoperator diikuti dengan operator apayang akan dioverload. Syntaxnyasebagai berikut:

type operator sign(parameters);

Misalnya ketika akan menjumlahkanvector 2 dimensi a(3,1) and b(1,2).Hasilnya adalah sbb: (3+1,1+2) =(4,3). Untuk keperluan ini maka kitadapat mengoverload operator +seperti dalam contoh berikut :

Program 16.34#include <iostream.h>

class CVector {public: intx,y; CVector () {};CVector (int,int);CVector operator + (CVector);

};

CVector::CVector (int a, int b) {x = a;y = b;

2008 | Direktorat Pembinaan SMK 579

Page 605: 01 bab 01 Dasar Komputer fachkunde OK

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 denganbanyaknya pernyataan CVector ygdipakai, perhatikan bahwa beberapamengacu pada class CVector danbeberapa merupakan fungsi.

CVector (int, int);// fungsi CVector (constructor)CVector operator+ (CVector);// fungsi operator+ yang return value‐nya bertipe CVector

Fungsi operator+ dalam classCVector yang bertipe CVectortersebut digunakan untukmengoverload operator + , sehinggapada program untuk menjumlahkanvector a ,b dan hasilnya disimpan divector c kita dapat menggunakansalah satu instruksi berikut:

c = a + b;

c =a.operator+(b);

Perhatikan bahwa kita juga harusmengikutkan empty constructor(tanpa parameter) yang kitadefinisikan dengan blok tanpainstruksi.

CVector (){ };

Ini penting, karena kita mempunyaideklarasi

CVector temp; CVector c:

Sehingga jika empty constructortersebut dihilangkan maka duadeklarasi tersebut menjadi tidak valid.Empty constructor dapat jugadideklarasikan seperti dibawah ini :

580 Direktorat Pembinaan SMK | 2008

Page 606: 01 bab 01 Dasar Komputer fachkunde OK

Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman

CVector () { x=0; y=0; }; dan untuk menyederhanakan penulisan

maka tidak disertakan.

Program 16.35#include <cstdlib>#include <iostream>

using namespace std;

class Time {friend ostream& operator << (ostream&, Time&);

// untuk fungsi cout << obyekpublic: 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

Page 607: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends

hour += (int) (tm/60);}if (hour >>= 24) hour %= 24;}

Time& Time::operator+= (constTime& 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;

}

Page 608: 01 bab 01 Dasar Komputer fachkunde OK

582 Direktorat Pembinaan SMK | 2008

Page 609: 01 bab 01 Dasar Komputer fachkunde OK

Inheritance, Polymorphism,Overloading dan Friends Bahasa Pemrorgraman

Untuk lebih memberikan gambaranlagi tentang penanganan suatuobyek, berikut didefenisikan suatu

tipe kelas intArray untuk pengelolaanarray bilangan bulat yang lebihfleksibel 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 LatihanJawablah soal latihan dibawah ini dengan baik dan benar.

1. Apa yang dimaksud dengan obyek dalam pemrograman2. Apa yang dimaksud dengan kelas3. Apa yang dimaksud dengan enkasulasi4. Apa perbedaan antara class private dan public5. Apa yang dimaksud dengan inheritance6. Buatlah program sederhana dengan inheritance7. Apa yang dimaksud dengan friend8. Apa yang dimaksud dengan operator overloading9. Apa fungsi dari class basis virtual

2008 | Direktorat Pembinaan SMK 583

Page 610: 01 bab 01 Dasar Komputer fachkunde OK

Bahasa Pemrograman Inheritance, Polymorphism,Overloading dan Friends

584 Direktorat Pembinaan SMK | 2008

Page 611: 01 bab 01 Dasar Komputer fachkunde OK

Lampiran 1. Daftar Kode ASCIIDecimal

Octal

Hex Binary Value

Comment00

0000 000 0000000

0NUL Null char

001

001 001 00000001

SOH Start of Header002

002 002 00000010

STX Start of Text003

003 003 00000011

ETX End of Text004

004 004 00000100

EOT End of Transmission005

005 005 00000101

ENQ Enquiry006

006 006 00000110

ACK Acknowledgment007

007 007 00000111

BEL Bell008

010 008 00001000

BS Backspace009

011 009 00001001

HT Horizontal Tab010

012 00A 00001010

LF Line Feed011

013 00B 00001011

VT Vertical Tab012

014 00C 00001100

FF Form Feed013

015 00D 00001101

CR Carriage Return014

016 00E 00001110

SO Shift Out015

017 00F 00001111

SI Shift In016

020 010 00010000

DLE Data Link Escape017

021 011 00010001

DC1 XON Device Control 1018

022 012 00010010

DC2 Device Control 2019

023 013 00010011

DC3 XOFF Device Control 3020

024 014 00010100

DC4 Device Control 4021

025 015 00010101

NAK Negative Acknowledgement02

2026 016 0001011

0SYN Synchronous Idle

023

027 017 00010111

ETB End of Trans. Block024

030 018 00011000

CAN Cancel025

031 019 00011001

EM End of Medium026

032 01A 00011010

SUB Substitute027

033 01B 00011011

ESC Escape028

034 01C 00011100

FS File Separator029

035 01D 00011101

GS Group Separator030

036 01E 00011110

RS Request to Send Record031

037 01F 00011111

US Unit Separator032

040 020 00100000

SP Space033

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

Page 612: 01 bab 01 Dasar Komputer fachkunde OK

042

052 02A 00101010

*043

053 02B 00101011

+044

054 02C 00101100

,045

055 02D 00101101

‐046

056 02E 00101110

.047

057 02F 00101111

/048

060 030 00110000

0049

061 031 00110001

1050

062 032 00110010

2051

063 033 00110011

3052

064 034 00110100

4053

065 035 00110101

5054

066 036 00110110

6055

067 037 00110111

7056

070 038 00111000

8057

071 039 00111001

9058

072 03A 00111010

:059

073 03B 00111011

;060

074 03C 00111100

<061

075 03D 00111101

=062

076 03E 00111110

>063

077 03F 00111111

?064

100 040 01000000

@065

101 041 01000001

A066

102 042 01000010

B067

103 043 01000011

C068

104 044 01000100

D069

105 045 01000101

E070

106 046 01000110

F071

107 047 01000111

G072

110 048 01001000

H073

111 049 01001001

I074

112 04A 01001010

J075

113 04B 01001011

K076

114 04C 01001100

L077

115 04D 01001101

M078

116 04E 01001110

N079

117 04F 01001111

O080

120 050 01010000

P081

121 051 01010001

Q082

122 052 01010010

R083

123 053 01010011

S084

124 054 01010100

T085

125 055 01010101

U

586

Page 613: 01 bab 01 Dasar Komputer fachkunde OK

086

126 056 01010110

V087

127 057 01010111

W088

130 058 01011000

X089

131 059 01011001

Y090

132 05A 01011010

Z091

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

a098

142 062 01100010

b099

143 063 01100011

c100

144 064 01100100

d101

145 065 01100101

e102

146 066 01100110

f103

147 067 01100111

g104

150 068 01101000

h105

151 069 01101001

i106

152 06A 01101010

j107

153 06B 01101011

k108

154 06C 01101100

l109

155 06D 01101101

m110

156 06E 01101110

n111

157 06F 01101111

o112

160 070 01110000

p113

161 071 01110001

q114

162 072 01110010

r115

163 073 01110011

s116

164 074 01110100

t117

165 075 01110101

u118

166 076 01110110

v119

167 077 01110111

w120

170 078 01111000

x121

171 079 01111001

y122

172 07A 01111010

z123

173 07B 01111011

{124

174 07C 01111100

|125

175 07D 01111101

}126

176 07E 01111110

~127

177 07F 01111111

DEL

587

Page 614: 01 bab 01 Dasar Komputer fachkunde OK

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

Page 615: 01 bab 01 Dasar Komputer fachkunde OK

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 variable48 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 uniona structure that assigns multiple variables to the same memorylocation57 unsigned declare an unsigned integer variable

58 using import complete or partial namespaces into the current scope59 virtual create a function that can be overridden by a derived class60 void declare functions or data with no associated data type

61 volatilewarn the compiler about variables that can be modifiedunexpectedly62 wchar_t declare a wide‐character variable

63 while looping construct

589