BAGIAN I ELEMEN DASAR C++ xxn BAB 1 PENGENALAN C++ 1.1 Pendahuluan Pada mulanya bahasa komputer digunakan untuk membantu dalam melakukan perhitungan-perhitungan telemetri. Ketika itu, bahasa yang digunakan masih primitif sekali karena masih berupa bahasa mesin yang hanya mengenal angka 1 dan 0. Selanjutnya bahasa mesin tersebut disederhzanakan menjadi bahasa yang agak dipahami dengan menghadirkan statemen-statemen khusus yang disebut dengan istilah mnemonic seperti ADD, MOV, JMP dan yang lainnya. Bahasa ini disebut dengan bahasa assembly yang masih termasuk ke dalam bahasa tingkat rendah (low level language). Tahun 1969, laboratorium Bell AT&T di Muray Hill, New Jersey menggunakan bahasa assembly ini untuk mengembangkan sistem operasi UNIX. Maksudnya adalah untuk membuat sistem operasi yang dapat bersifat 'programmer-friendly'. Setelah UNIX berjalan, Ken Thompson, seorang pengembang sistem di laboratorium tersebut mengembangkan bahasa baru dengan nama bahasa B. Huruf B ini diambil dari BCPL. Bahasa B ini kemudian digunakan untuk menulis ulang atau merevisi sistem operasi UNIX. Oleh karena bahasa B ini masih bersifat interpret dan lambat, maka pada tahun 1971, sistem operasi UNIX kemudian ditulis ulang dengan menggunakan bahasa C, yaitu bahasa pemrograman yang Bab 1: PengenaJan C-* dikembangkan oleh Dennis Ritchie, seorang pengembang sistem di laboratorium yang sama. Sampai sekarang bahasa C masih digunakan untuk melakukan pengembangan-pengembangan program dan sistem-sistem operasi, diantaranya sistem operasi Windows. Alas an itulah yang menjadikan bahasa C sangat populer di dunia pemrograman, khususnya untuk industri perangkat lunak. Namun sayangnya bahasa C merupakan bahasa yang masih tergolong susah untuk dipelajari karena masih bersifat prosedural murni. Untuk membentuk satu objek, kita harus melakukan banyak sekali penulisan kode. Hal ini tentu dapat dikatakan sebagai sebuah kelemahan. Untuk mengatasi masalah ini, pada tahun 1983, seorang doktor bemama Bjarne Stroustrup yang juga bekerja di laboratorium yang sama menciptakan bahasa baru yaitu bahasa C + + yang merupakan bahasa hibryd dari bahasa C. Bahasa C + + didasarkan atas bahasa C sehingga kita dapat melakukan kompilasi program-program yang ditulis dalam bahasa C dengan menggunakan kompiler C + + . Keistimewaan dari bahasa C + + adalah karena bahasa ini mendukung pemrograman berarah objek atau yang lebih sering dikenal dengan istilah Object Oriented Programming (OOP). 1.2 C dan C++ Seperti telah dikemukakan sebelumnya bahwa kedua bahasa ini (C dan C + + ) merupakan bahasa yang sangat populer dalam dunia pengembangan perangkat lunak. Kedua bahasa ini digolongkan ke dalam bahasa tingkat menengah (middle level language). Sisi lain, yaitu di sisi akademis, seorang profesor yang bernama Niklaus Wirth di Politeknik Zurich, Swiss, mengembangkan bahasa tingkat tinggi (high level language) yang disebut dengan bahasa Pascal untuk mengajarkan algoritma kepada para mahasiswanya. Maka dari itu, di lingkungan akademis bahasa Pascal lebih populer dibandingkan bahasa C atau C+ + . Sebagai bahan pengetahuan bagi Anda, berikut ini pengelompokan tingkatan dari bahasa pemrograman. Pemrograman C++ Bahasa Tingkat Tinggi Ada Modula-2 Pascal COBOL FORTRAN BASIC Bahasa Tingkat Menengah Java C++ C FORTH Bahasa Tingkat Rendah Macro-Assembler Assembler Dari tabel tersebut dapat kita lihat bahwa bahasa pemrograman yang terdapat pada bagian paling atas merupakan bahasa pemrograman yang paling mudah untuk dipahami. Sebagai contoh, C adalah bahasa yang lebih sulit di bandingkan C + + dan C + + adalah bahasa yang lebih sulit dibandingkan dengan bahasa Java, dan seterusnya. Semenjak dikembangkan, bahasa C dan C++ banyak digunakan untuk mengembangkan program-program aplikasi di bidang telekomunikasi, finansial atau bisnis dan sistem operasi. Bahkan sampai saat ini, pembuatan program-program untuk permainan komputer (game) sebagian besar masih menggunakan bahasa C/C++. Menurut Bjarne Stroustrup (pencipta C + + ) , alasan mengapa C diambil sebagai bahasa dasar dari pembentukan bahasa C + + adalah sebagai berikut: • Dapat dihubungkan dengan bahasa tingkat rendah • Berjalan di manapun dan untuk masalah apapun • Berjalan mulus dalam sistem operasi UNIX Bab 1: Pengenalan O 1.3 Konsep Kompilasi dan Eksekusi Program kode program (source code) 1.3.3 •• preprosesor Assembler Assembler menerima keluaran dari kompiler C + + dan akan membuat sebuah kode objek. Jika dalam kode program kita tidak menggunakan fungsi-fungsi yang terdapat pada library lain, maka kode objek ini akan langsung dieksekusi menjadi file EXE. i• kompiler kode assembly Preprocessor Mula-mula kode program akan dimasukkan ke bagian preprosesor, yaitu yang diawali dengan tanda # (pound) dan menghasilkan file yang akan dilewatkan ke dalam kompiler. Beberapa preprosesor tersebut diantaranya adalah sebagai berikut. • #include • # define • #ifdef • dan Iain-lain Kompiler C++ Kompiler akan menerjemahkan kode program yang telah dilewatkan oleh preprosesor ke dalam bahasa assembly. Sebelum melangkah lebih jauh dengan pembentukan program C + + , maka sebaiknya kita mengetahui terlebih dahulu konsep dari sebuah kompilasi dan eksekusi program di dalam C/C+ + . Berikut ini gambar yang mengilustrasikan proses kompilasi dan eksekusi program di dalam C/C + + . 1.3.1 1.3.2 •• 1.3.4 Link Editor Bagian ini dikerjakan jika kode program yang kita buat menggunakan fungsi-fungsi luar yang disimpan dalam suatu library lain. Link Editor akan mengkombinasikan kode objek dan library yang ada untuk menjadikan sebuah file EXE. assembler kode objek library ;• link editor 1 F File EXE Pembahasan lebih lanjut mengenai preprosesor ini dapat Anda lihat pada bab preprocessor dj'recnVe. Pemrograman C++ 1.4 Kerangka Program C++ Setiap program yang ditulis dalam bahasa C/C + + pasti akan memiliki sebuah fungsi utama dengan nama main ( ) . Selanjutnya jika kita ingin mendefinisikan fungsi-fungsi lain maka kita akan melakukannya di luar fungsi utama tersebut. Dalam C+ + , kode yang dibaca adalah kode-kode yang terdapat pada fungsi utama. Jika ternyata terdapat pemanggilan fungsi lain, maka program akan mencari nama fungsi tersebut untuk dieksekusi. Setelah mengeksekusi fungsi tersebut, maka program akan kembali ke dalam fungsi utama, begitu seterusnya. Sebagai bahan perbandingan, di bawah ini akan diberikan kerangka umum yang ditulis dalam bahasa C dan C+ + . Maksudnya agar Anda dapat membedakan mana yang harus dilakukan dan mana yang sebaiknya ditinggalkan dalam membuat program di dalam C+ + . Berikut ini kerangka umum dari program yang ditulis dalam bahasa C, Bab 1: Pengenalan ^include <stdio.h> Adapun kerangka lengkap dari program yang ditulis dalam C+ + adalah seperti terlihat di bawah ini. ^include <iostream.h> // Prototype fungsi tipe_data nama_fungsil{parameterl, parameter2/ tipe_data nama_fungsi2(parameter!, parameter2, // Prototype fungsi tipe_data nama_fungsil{parameter!, parameter2, tipe_data nama_fungsi2(parameterl, parameter2, // Fungsi utama int main(void) { Statemen_yang_akan_di lakukan; // Fungsi utama int main() t Statemen_yang_akan_dilakukan; return 0; return 0; // Implementasi fungsi tipe_data nama_fungsil (parameterl, parameter2, Statemen_yang,_akan__dilakukan ; // Implementasi fungsi tipe_data nama_fungsil{parameterl, parameter2, ...) { Statemen_yang_akan_dilakukan; tipe_data nama_£ungsi2 (parameterl, parameter2, S t a t emen_y ang_akan_di 1 akukan ; tipe__data nama_fungsi2{parameterl, parameter2, Statemen_yang_akan_dilakukan; Perhatikan kata kunci void di atas, di dalam bahasa C itu masih banyak digunakan, namun di dalam program C+ + sebaiknya hindari penggunaannya, karena hal itu merupakan redundan. Sedangkan nilai 0 pada statemen return 0 di atas berfungsi untuk mengembalikan nilai ke sistem operasi. Prototype di atas bersifat opsional, artinya kita juga diizinkan untuk mendefinisikan fungsi-fungsi sebelum menulis fungsi utama tanpa menuliskan prototype. Selain bentuk di atas kita juga diizinkan untuk menuliskan fungsi utama seperti sintaks di bawah ini. Perlu sekali untuk diperhatikan bahwa file header yang digunakan di dalam bahasa C + + untuk proses input/output (I/O) standar adalah iostream.h, sedangkan di dalam bahasa C file header yang digunakan untuk keperluan yang sama adalah stdio.h. Untuk lebih memahaminya, berikut ini dituliskan dua buah program sederhana yang masing-masing ditulis di dalam bahasa C dan C+ + . void main ( } { , Statemen_yang_akan_di lakukan; 1.4.1 Sintaks di atas berlaku juga untuk bahasa C+ + . Namun di dalam buku ini, sintaks yang akan digunakan untuk menuliskan fungsi utama adalah sebagai berikut. int m a i n ( ) { Staternen_yang_akan_dilakukan; Program yang Ditulis dalam Bahasa C Kode Program 1-1 ^include <stdio.h> int main(void) ( int. X; return 0;= /* Menampilkan teks untuk informasi */ printf{"Masukkan sebuah bilangan bulat : "); /* Membaca nilai dari keyboard dan menyimpannya Pemrograrnan O+ Bab 1: Pengenalan C++ ke dalam variabel X */ scanf ("%d", &X) ; 1.5 /* Menampilkan nilai yang telah dimasukkan */ printf ( "Bilangan yang telah Anda masukkan adalah File header (file dengan ekstensi .h) adalah file yang berisi fungsifungsi dan telah dikompilasi sebelumnya. Apabila kita akan menggunakan suatu file header tertentu, maka kita akan mendaftarkannya melalui directive #include. Sebagai contoh, di dalam kode program, kita akan menggunakan cout dan cin. Sedangkan kita tahu bahwa keduanya terdapat dalam file header iostream. h, maka kita akan melakukan pendaftaran dalam program kita melalui sintaks berikut. ^^^^^^^^^^^^^^^^^^^ return 0; Contoh hasil yang akan diberikan dari program di atas adalah sebagai berikut : Masukkan sebuah bilangan bulat: 10 Bilangan yang telah Anda masukkan adalah 10 1.4.2 File .H (Header File) ^include <iostream.h> Program yang ditulis dalam bahasa C++ Kode Program 1-2 1.6 C++ Klasik dan C++ Modern Pada bagian ini kita akan membahas sekilas tentang perbedaan yang terdapat dalam kompiler C++ lama (klasik) dengan C+ + modern (C + + yang telah memenuhi standar ANSI/ISO). Perbedaan yang paling tampak adalah pada kompiler C + + lama masih menggunakan namespace global, sedangkan pada C + + modern yang digunakan adalah namespace std. Hal inilah yang menyebabkan terdapatnya sedikit perbedaan penulisan antara C++ lama dan standar. Untuk lebih memahaminya, berikut ini kerangka umum penulisan program yang digunakan dalam C + + lama dan C + + standar. ^include <iostream.h> int main() { int X; // Menampilkan teks untuk informasi cout«"Masukkan sebuah bilangan bulat : " ,// Mewbaca nilai dari keyboard dan menyimpannya // ke dalam variabel X cin»X; = // Menampilkan nilai yang telah dimasukkan cout«"Bilangan yang telah Anda masukkan adalah *«X; 1.6.1 return 0; Pada Kompiler C++ Lama tinclude <iostream.h> Contoh hasil yang akan diberikan dari program di atas adalah sebagai berikut: int main( } { return 0; Masukkan sebuah bilangan bulat: 10 Bilangan yang telah Anda masukkan adalah 10 Pemrograman Bab 1: Pengenalan 1.6.2 Pada Kompiler C++ Standar ^^ BAB 2 KOMENTAR, IDENTIFIER DAN TIPE DATA ^include <iostream > using namespace atd; int rnain() t return 0; I Seperti yang kita lihat bahwa pada C++ standar penulisan file header iostream sudah tidak diikuti lagi dengan ekstensi .h. Dalam buku ini kita akan selalu menggunakan bentuk kedua, yaitu bentuk yang telah memenuhi standar penulisan kode untuk C + + standar. Namun perlu diperhatikan bahwa untuk menuliskan kode menggunakan bentuk kedua, diperlukan pula kompiler C + + yang telah mendukung semua fitur yang terdapat dalam C + + Standar. Maka dari itu, buku ini menyertakan CD yang berisi kompiler C/C++ yang dilengkapi dengan IDE (Integrated Development Environment) yang mudah untuk digunakan. Adapun cara installasi dari kompiler tersebut dapat Anda lihat pada Lampiran F - Instalasi dan Penggunaan MinGW Developer Studio. 2.1 Pendahuluan Pada setiap pemrograman, kita tidak dapat terlepas dari penggunaan tipe data dan pengenal atau pengidentifikasi (identifier). Kehadiran dari dua elemen ini sangatlah penting, walaupun sebenarnya untuk program yang sangat sederhana terkadang kita tidak perlu menggunakan identifier. Sebagai contoh untuk program yang menampilkan sebuah teks dan bilangan, misalnya seperti program di bawah ini. Kode Program 2-1 ftinclude <iostrearn> using namespace std; int m a i n ( ) . cout«"Teks ini digunakan sebagai contoh"«endl; cout«2+5; return 0; } Statemen cout di atas berfungsi untuk menampilkan keluaran (output) ke layar monitor. Statemen ini hanya akan dikenali jika kita mendaftarkan library iostream yang tersimpan dalam namespace Pemrograman Bab 2: Komentar, Identifier, dan Tipe Data std. Hal ini akan kita pelajari lebih jauh pada bab Input/Output (I/O). Sedangkan endl berfungsi untuk memindahkan cursor ke baris baru. Dalam bab ini kita hanya akan membahas mengenai beberapa elemen-elemen dasar yang diperlukan dalam pemrograman C + + , seperti: komentar, pengenal (identifier) dan tipe data. 2.2 Komentar Dalam proses pengembangan sebuah program, tentunya kita disibukkan dengan penulisan sintaks-sintaks yang begitu banyak dan 'tampak' rumit sehingga akan sulit untuk dipahami oleh orang lain. Untuk menangani masalah ini, sebagai programmer kita sebaiknya menambahkan komentar untuk menjelaskan algoritma dan keterangan-keterangan yang diperlukan dalam program. Hal ini akan membantu dalam proses pemeliharaan (maintenance) dari program yang telah kita buat. Komentar program didefmisikan sebagai bagian dari sintaks program yang tidak ikut dibaca pada saat proses kompilasi. Dengan kata lain, komentar tidak akan mempengaruhi jalannya program. Dalam bahasa C+ + , komentar dibagi menjadi dua jenis yaitu komentar yang hanya terdiri dari satu baris dan komentar yang terdiri dari beberapa baris. Berikut ini penjelasan dari keduanya. 2.2.1 // ini adalah komentar untuk satu baris penulisan di atas akan menyebabkan kesalahan, karena teks "untuk satu baris" tidak akan dianggap sebagai komentar melainkan akan dianggap sebagai tiga buah identifier yang tidak dikenali. Namun sebaliknya, kita juga hams hati-hati dalam menggunakan tanda ini. Ingat, tanda ini tidak dapat digunakan untuk komentar yang bersifat sisipan. Misalnya pada potongan sintaks program di bawah ini. int // Mendeklarasikan variabel berupa bilangan X; Penulisan seperti ini akan menyebabkan kesalahan karena X; akan dianggap sebagai komentar dan tidak berperan sebagai identifier. Seharusnya kita menuliskan komentar tersebut seperti pada sintaks berikut: int X; 2.2.2 // Mendeklarasikan variabel berupa bilangan Menggunakan Tanda /*...*/ Berbeda dengan tanda //, tanda ini dapat digunakan untuk menuliskan komentar yang banyaknya satu baris atau lebih. Komentar dimulai dari tanda /* sampai ditemukan tanda */. Contoh penggunaannya dapat dilihat di bawah ini. ^^^^^ Ini adalah komentar,yang banyaknya satu baris */ Ini adalah komentar panJang yang banyaknya lebih dari satu baris */ Menggunakan Tanda // Tanda ini digunakan untuk menuliskan komentar yang banyaknya hanya satu baris. Gaya penulisan komentar seperti ini hanya terdapat pada C + + , sedangkan pada bahasa C tidak akan dikenali. Jika kita menggunakan tanda ini untuk menuliskan komentar yang lebih dari satu baris, maka teks di belakang tanda // tetap menjadi komentar. Namun, teks yang terdapat pada baris selanjutnya akan tetap dibaca oleh kompiler sehingga akan menyebabkan terjadinya kesalahan (error) pada saat proses kompilasi program. Berikut ini adalah contoh penggunaannya. // Ini adalah komentar untuk satu baris Namun perhatikan, bagaimana jika komentar di atas dituliskan seperti berikut: Pemrograman Dengan menggunakan tanda ini, kita juga dapat menuliskan komentar yang bersifat sisipan. Misalnya pada penulisan sintaks di bawah ini. int /* file ini digunakan untuk proses I/O pada .C++ */ X; Namun perlu diperhatikan bahwa kita tidak dapat melakukan komentar yang beruntun (nested comment), misalnya jika kita menuliskan berikut: /* ini adalah /* contoh komentar */ beruntun */ Jika kita amati penulisan komentar di atas, secara logika mungkin bisa dikatakan 'benar', namun jika ditinjau dari sisi program, hal ini jelas 'salah'. Alasannya adalah karena tanda */ yang ditemukan pertama kali akan dianggap sebagai penutup tanda /* pertama. Bab 2: Komentar, Identifier, dan Tipe Data Dengan alasan ini, maka untuk kasus di atas yang dianggap sebagai komentar adalah teks "Ini adalah /* contoh komentar", sedangkan teks yang terdapat setelah tanda */ pertama, yaitu teks "beruntun */" akan tetap dianggap sebagai bagian program dan akan dibaca pada saat proses kompilasi. Hal ini tentu akan menyebabkan kesalahan, sehingga Anda harus berhati-hati dalam menggunakan komentar sisipan. 2.3 Identifier Identifier adalah suatu pengenal atau pengidentifikasi yang kita deklarasikan agar kompiler dapat mengenalinya. Identifier sendiri dapat berupa nama variabel, konstanta, fungsi, kelas, template maupun namespace. Namun dalam hal ini kita hanya akan membahas identifier yang berperan sebagai variabel dan konstanta saja, sedangkan bentuk identifier lainnya akan kita bahas secara khusus dalam bab tersendiri. Identifier yang berperan sebagai variabel dan konstanta berfungsi untuk menampung sebuah nilai yang digunakan dalam program. Indentifikasi ini dilakukan untuk mempermudah proses penanganan data atau nilai, misalnya untuk memasukkan dan menampilkan nilai. Sebagai gambaran, di bawah ini adalah sebuah contoh program yang menggunakan dua buah identifier di dalamnya. kunci (keyboard). Dalam C + + , proses penyimpanan nilai seperti ini dinyatakan dengan statemen cin. Berbeda dengan statemen cout yang menggunakan operator «, pada statemen cin operator yang digunakan adalah operator ». Dalam menentukan atau membuat identifer dalam program, kita harus memperhatikan halhal berikut: » Karena bahasa C + + bersifat case sensitive, maka C + + juga akan membedakan variabel yang ditulis dengan huruf kapital dan huruf kecil. Misalnya variabel A tentunya akan berbeda dengan variabel a. • Identifier tidak boleh berupa angka atau diawali dengan karakter yang berupa angka. Contoh : long 1000; long 2X; long X2; • • return 0 ? Pada program di atas kita mempunyai dua buah identifier, yaitu Teks dan X. Pada saat program dijalankan, identifier tersebut akan digunakan untuk menyimpan nilai yang dimasukkan dari papan Pemrograman identifier berupa angka identifier diawali berupa angka identifier tidak diawali Identifier tidak boleh mengandung spasi. Contoh : int Bilangan__Bulat; int BilanganBulat; int _BilanganBulat; // // // // // SALAH, identifier mengandung spasi BENAR BENAR BENAR Identifier tidak boleh mengunakan karakter-karakter simbol (#, @, ?, !,$, dll). Contoh: long I s a t u ; long dua@; 'long tittga; • int main ( ) t char Teks [20] ,int X; cout«"Masukkan sebuah kata : "; cin»Teks; cout«"Masukkan sebuah angka : "; cin»X; cout«Teks«endl; // bisa ditulis dengan cout«X«'\n' cout«X; SALAH karena SALAH karena oleh karakter BENAR karena oleh angka int Bilangan Bulat; Kode Program 2-2 ^include <iostream> using namespace std; // // // // // // SALAH / / SALAH // SALAH Identifier tidak boleh menggunakan kata kunci (.keyword) yang terdapat pada C+ + . Contoh : long break; // SALAH karena menggunakan kata kunci long return; // break // SALAH karena menggunakan kata kunci // return Nama identifier sebaiknya disesuaikan dengan kebutuhannya, artinya jangan sampai orang lain bingung hanya karena salah dalam penamaan identifier. Sebisa mungkin, hindarilah penggunaan nama identifier yang sama dengan identifier yang digunakan oleh C+ + . Berdasarkan jenisnya, identifier sendiri dibagi ke dalam dua bagian yaitu konstanta dan variabel. Adapun penjelasan lebih detilnya dapat Anda lihat pada sub bab di bawah ini. Bab 2; Komentar, Identifier, dan Tipe Data 2.3.1 misalnya 10. Jika kita menggunakan sintaks di atas maka kita hams melakukan perubahan terhadap semua bilangan 5 yang ada dengan bilangan 10. Untuk itu, dalam kasus ini sebaiknya kita menjadikan bilangan 5 tersebut ke dalam suatu konstanta sehingga jika terjadi perubahan kita hanya melakukan perubahan nilai terhadap konstantanya saja. Berikut ini program yang merupakan program perbaikan dari program sebelumnya. Konstanta Konstanta adalah jenis identifier yang bersifat konstan atau tetap, artinya nilai dari konstanta di dalam program tidak dapat diubah. Konstanta berguna untuk menentukan nilai yang merupakan tetapan, misalnya nilai pi (77), kecepatan cahaya dan lainnya. Dengan mendefinisikan konstanta yang bersifat global, maka kita dapat menggunakannya di setiap bagian program. Dalam C + + , terdapat dua buah cara untuk membuat sebuah konstanta, yaitu dengan menggunakan preprocessor directive #def ine dan menggunakan kata kunci const. Kode Program 2-4 #include <iostream> tdefine MAX 5; using namespace std; a. Menggunakan Preprocessor Directive tidefine int main() { int A[MAX]; for (int C=0; C<MAX; C++) A[C] = C * 10; Kita dapat menggunakan makro untuk mendefinisikan sebuah konstanta, yaitu dengan menggunakan preprocessor directive #define. Untuk mengetahui lebih jauh tentang manfaat penggunaan konstanta, perhatikan program di bawah ini. for (int C=0; c<MAX; C + + ) { cout«A[c]«endl; Kode Program 2-3 ^include <iostream> return 0; using namespace std; int main() { int A[5] for (int C=0; C<5; C++) { A[C] = C * 10; ) for (int c=0; c<5; C++) ( cout«A [ c ] «endl ; b. Menggunakan Kata Kunci const Selain dari cara di atas, dalam C++ kita dapat mendefinisikan sebuah konstanta dengan menggunakan kata kunci const. Berikut ini adalah bentuk umumnya. const tipe_data nama^konstanta = nilai_tetapan; Contoh pendeklarasian konstanta-konstanta adalah sebagai berikut: return 0 ; , ••BHI^HiH Anda bingung? Jika Anda belum memahami maksud dari sintaks program di atas, itu 'wajar' dan Anda tidak perlu cemas karena semuanya akan kita pelajari pada bab-bab selanjutnya dalam buku ini. Namun, yang perlu Anda perhatikan di sini adalah bilangan 5 di atas. Bilangan tersebut muncul beberapa kali dalam program, hal ini akan merepotkan jika temyata kita ingin melakukan perubahan terhadap bilangan tersebut dengan bilangan yang lain, Pemrograman C++ const double PI = 3 . 1 4 ; Untuk dapat lebih memahaminya, berikut ini dituliskan sebuah sintaks program yang merupakan implementasi dari penggunaan kata kunci const. Bab 2: Komentar, Identifier, dan Tipe Data Kode Program 2-5 a. tfinclu.de <iostream> Jika kita sedang membuat program dan kita membutuhkan sebuah variabel yang dapat dikenali oleh semua lingkungan dalam program kita, maka kita harus mendefinisikan variabel tersebut sebagai variabel yang bersifat gobal. Kita telah mengetahui bahwa program dalam bahasa C + + selalu terdapat fungsi utama dengan nama m a i n ( ) . Jika kita mendeklarasikan sebuah variabel di luar fungsi, maka dengan sendirinya kompiler akan menganggap variabel tersebut sebagai variabel global. Berikut ini adalah contoh program yang rnenunjukkan penggunaan variabel yang bersifat global. using namespace std; const int Variabel Global MAX = 5; int mainO { int A[MAX]; for {int C=0; C<MAX; C + + ) { A [ C ] = C * 10; } for (int c=0; c<MAX; C + + ) { cout«A [c] «endl ; } Kode Program 2-6 return Q ; ^include <iostream> using namespace std; 2.3.2 Variabel int A; Berbeda dengan konstanta yang mempunyai nilai tetap, variabel adalah sebuah identifier yang mempunyai nilai dinamis. Arti kata 'dinamis' di sini bermaksud bahwa nilai variabel tersebut dapat kita ubah sesuai kebutuhan dalam program. Berikut ini adalah bentuk umum pendeklarasian sebuah variabel dalam C + +. tipe__data nama_variabel; Sebenarnya bentuk umum ini sudah dijelaskan pada bagian awal yaitu pada bagian yang menerangkan pendeklarasian identifier, hanya di sini lebih dikhususkan lagi, yaitu hanya untuk variabel. Jika kita akan mendeklarasikan beberapa variabel yang bertipe sama, maka kita dapat menyingkat penulisannya dengan menggunakan bentuk umum di bawah ini. tipe_data nama_variabell, nama_variabe!2, naraa_variabe!3; Contoh : int A, B, C; Sedangkan jika kita ingin rnelakukan inisialisasi, maka sintaksnya dapat di ganti dengan menggunakan sintaks berikut: int // Variabel A adalah variabel global // karena dideklarasikan di luar fungsi // Membuat fungsi utama int main() ( A = 10; // Memasukkan (assign) nilai ke dalam It variabel cout«"Nilai A = "«A«endl; return 0; Variabel Lokal Berbeda sekali dengan variabel global, variabel lokal adalah variabel yang hanya dikenali oleh suatu fungsi saja, artinya tidak dikenal oleh lingkungan luar di dalam program yang kita buat. Adapun bentuk pendeklarasian variabel yang bersifat lokal ini harus berada dalam lingkup fungsi yang dimaksud. Berikut ini contoh pendeklarasian variabel yang bersifat lokal. Kode Program 2-7 A=10, B=15, C=25; ^include <iostream> using namespace std; Pemrograman Bab 2: Komentar, Identifier, dan Tipe Data Hasil dari program di atas adalah sebagai berikut // Membuat fungsi utama int mainO t int A; // Variabel A bersifat: lokal dan hanya dikenali // oleh fungsi main() Nilai X sebelum assignment :0 Nilai X setelah assignment :10 A = 10; // Memasukkan (assign) nilai ke dalam // variabel cout«"Nilai A = *«A«endl; Pada hasil di atas dapat kita lihat bahwa jika kita tidak melakukan inisialisasi dan kita sudah memanggil variabel tersebut, maka nilai yang akan ditampilkan oleh kompiler adalah nilai 0. Berikut ini jika program di atas ditambahkan proses inisialisasi. return 0; ) Jika kita menambahkan fungsi lain di dalam program, dan kita mengakses variabel A yang telah dideklarasikan di dalam fungsi main ( } , maka program tidak akan dapat dijalankan karena fungsi baru yang kita tambahkan tentu tidak dapat mengenali variabel A di atas. Hal ini merupakan bukti nyata bahwa variabel A di atas bersifat lokal. c. Kode Program 2-9 ^include <iostream> using namespace std; int main(} { int X = 5; cout«"Nilai X sebelum dilakukan assignment : u«endl; X = 10; cout«"Nilai X sesudah dilakukan assignment : *«endl; Inisialisasi Variabel Dalam penulisan program ada saatnya kita hams melakukan inisialisasi nilai terhadap sebuah variabel yang dideklarasikan. Artinya jika kita tidak melakukan pengisian nilai terhadap variabel tersebut, maka variabel masih berisi nilai default. Hal ini sebenarnya sudah disinggung di atas, namun di sini akan kita bahas kembali melalui contoh-contoh program. Berikut ini contoh program yang tidak melakukan inisialisasi nilai awal. return 0; Hasil dari program di atas adalah sebagai berikut: Nilai X sebelum assignment Nilai X setelah assignment Kode Program 2-8 :5 ; 10 #include <iostream> d. using namespace std; int main(} { int X; // Menampilkan nilai X sebelum // dilakukan pemasukkan nilai (assignment) cout«"Nilai X sebelum dilakukan assigment : ''«endl; X = 10; n «endl; cout«"Nilai X sesudah dilakukan assignment Variabel Statis Variabel statis adalah variabel yang menempati ruang memori komputer secara permanen, artinya nilai terakhir dari variabel ini akan terus disimpan. Dalam C + +, untuk menyatakan variabel statis adalah dengan menggunakan kata kunci static. Adapun bentuk umum pendeklarasiannya adalah seperti yang tampak di bawah ini. static tipe_data nama_variabel; return 0,- Pemrograman O+ Bab 2: Komentar, Identifier, dan Tipe Data Seperti halnya variabel biasa, variabel statis ini juga dibagi ke dalam dua jenis, yaitu variabel statis lokal dan variabel statis global. I. Nilai fungsi pada pemanggilan pertama Nilai fungsi pada pemanggilan kedua Nilai fungsi pada pemanggilan ketiga Variabel Statis Lokal Variabel statis lokal ini diterapkan di dalam suatu fungsi, sehingga nama variabelnya hanya akan dikenali di dalam fungsi saja. Namun perlu diperhatikan bahwa nilai terakhir yang dihasilkan akan terus disimpan. Dengan demikian setiap pemanggilan fungsi yang sama pasti akan memberikan hasil yang berbeda. Untuk mengetahui lebih jauh mengenai variabel statis, perhatikanlah dua program di bawah ini. a. Hasil yang akan diperoleh dapat dilihat di bawah ini. Menggunakan variabel biasa b. : 10 : 10 : 10 Menggunakan variabel statis Kode Program 2-11 ^include <iostream> using namespace std; using namespace std; // ATembuat fungsi dengan nama contoh int contohO { static int A = // Mendeklarasikan // variabel statis lokal A = A + 10; return A; // Membuat fungsi dengan nama contoh int contohO { int A = 0; // Mendeklarasikan variabel biasa // Fungsi utama int main() { Kode Program 2-10 ^include <iostream> A = A + 10; return A; int x, y, z; x = contoh(J; int main(} ( int x, y, 2; x = content) y = contohO z = contoh() // Mendeklarasikan variabel x, y // dan z // Memanggil fungsi contohO // untuJc yang pertama kali // Memanggil fungsi contohO // untuk yang kedua kali // Memanggil fungsi contohO // untuk yang ketiga kali // Menampilkan nilai // fungsi cout«"Nilai fungsi "«x«endl; cout«"Nilai fungsi "«y«endl; cout«"Nilai fungsi "«z«endl; y = contohO ; 2 - contoh(}; yang telah diproses di dalam pada pemanggilan pertama : pada pemanggilan kedua pada pemanggilan ketiga // Mendeklarasikan // variabel x, y dan z // Memanggil fungsi contohO // untuk yang pertama kali //Memanggil fungsi contohO // untuk yang kedua kali // Memanggil fungsi contohO //untuk yang ketiga kali // Menampilkan nilai // fungsi cout«"Nilai fungsi "«x«endl,cout«"Nilai fungsi "«y«endl; cout«"Nilai fungsi "«z«endl; yang telah diproses di dalam pada pemanggilan pertama : pada pemanggilan kedua pada pemanggilan ketiga : : : return 0; : Hasil yang akan diperoleh dapat dilihat di bawah ini. return 0; Pemrograman C++ Bab 2: Komentar, Identifier, dan Tipe Data I e. Nilai fungsi pada pemanggilan pertama Nilai fungsi pada pemanggilan kedua Nilai fungsi pada pemanggilan ketiga 10 20 30 Jika kita amati hasil program di atas, nilai dari setiap pemanggilan fungsi akan memberikan hasil yang berbeda. Konsepnya sederhana, yaitu pada pemanggilan fungsi yang pertama kali nilai variabel A masih bernilai 0 (sesuai dengan inisialisasi). Fungsi akan menambahkan nilai tersebut dengan 10, maka nilai yang dikembalikan fungsi contohf) adalah 10. Sampai di sini, karena variabel A adalah variabel statis maka pada saat pemanggilan fungsi yang kedua, variabel A masih menyimpan nilai 10, bukan 0. Dengan demikian pemanggilan fungsi kedua tentu akan menambahkan nilai A dengan nilai 10, sehingga nilai yang dikembalikan adalah 20, begitu seterusnya. 2. Tidak seperti variabel biasa yang berada di memori, variabel register ini akan disimpan di register CPU. Dengan demikian, untuk mengisikan atau mengubah nilai dari variabel register tentunya tidak memerlukan akses memori sehingga prosesnya juga akan lebih cepat. Dalam C + + , variabel register hanya dapat diisi oleh tipe data char, int dan pointer saja serta hanya boleh dideklarasikan sebagai variabel lokal ataupun parameter dari sebuah fungsi. Untuk mendeklarasikan variabel register, kita harus mengunakan kata kunci register. Bentuk umum dari pendeklarasian variabel register adalah sebagai berikut : register tipe_data nama_variabel; Berikut ini adalah contoh program yang menggunakan variabel register. Kode Program 2-12 ^include <iostream> using namespace std; Variabel Statis Global Dalam memogram dengan bahasa C + + , kita diizinkan untuk melakukan pembuatan fungsi-fungsi dalam file yang terpisah dari program utama. Untuk kasus-kasus tertentu dimana variabel statis lokal tidak dapat digunakan, kita dapat membuat file terpisah yang mempunyai variabel statis global. Sebagai gambaran dari pemahaman materi ini, perhatikanlah contoh penggunaannya dalam potongan sintaks program di bawah ini. static int A; Variabel Register // Mendeklarasikan variabel statis global void set_NilaiA(int aa} ; int get_NilaiA( ) ; // Membuat fungsi untuk menghitung M* int Hitung (register int M, register int e) { register int temp; temp = 1; for ( ; e; e--) { temp = temp * M; // Fungsi utama int main() { int X; X = Hitung(5, 3); cout«X«endl; // Melakukan perhitungan 53 return 0; void set_NilaiA(int aa) A = aa; Jika Anda masih bingung dengan kehadiran struktur pengulangan for di atas, Anda dapat lihat lebih detail pada bab pengulangan. int get_NilaiA() A = A + 10; return A; 1 Pemrograman C+ 2: Komentar, Identifier, dan Tipe Data 2.4 Tipe Data signed short int long int Tipe data berfungsi untuk merepresentasikan jenis dari sebuah nilai yang terdapat dalam program. Sebagai contoh kita mempunyai suatu data dengan nilai 2, maka 2 termasuk ke dalam tipe bilangan bulat. Begitupun dengan data yang bernilai "Rahasia C+ + ", maka data tersebut dikategorikan ke dalam tipe teks (string], Kesalahan dalam menyebutkan tipe data akan menyebabkan program yang kita buat tidak dapat dijalankan. Oleh karena itu, kita harus pandai dalam menentukan tipe data yang akan digunakan sesuai kebutuhan program yang kita buat. Dalam bahasa C + + , tipe data dibagi menjadi tiga bagian besar yaitu tipe dasar, tipe bentukan dan tipe enumerasi. 2.4.1 signed long int unsigned long int 16 Sama seperti short 32 32 -2.147.483.648 sampai 2.147.483.647 Sama seperti long 32 0 sampai 4.294.967.295 int int Berikut ini contoh program yang menggunakan tipe bilangan bulat di dalamnya. Kode Program 2-13 #include <iostream> using namespace std; int main() { int x; // Mendeklarasikan variabel x dengan tipe data // int x = 3; // Melakukan assigment terhadap variabel x cout«"Nilai x = "«x; Tipe Data Dasar Dalam C + + terdapat beberapa tipe data dasar yang telah didefinisikan, yaitu yang digolongkan ke dalam tipe bilangan bulat (integer], bilangan riil (floating-point], tipe logika (boolean], tipe karakter / teks (character / string]. Tipe-tipe tersebut adalah tipe yang siap digunakan tanpa adanya proses manipulasi terlebih dahulu. Hasil yang diperoleh dari program di atas adalah sebagai berikut: a. Nilai x - 3 return 0; Tipe Bilangan Bulat Tipe data ini digunakan untuk data-data angka yang tidak mengandung angka di belakang koma. Misalnya 21, 3, 78 dan sebagainya. Tipe data yang termasuk ke dalam kategori ini adalah seperti yang terlihat pada tabel di bawah ini. int Ukuran {dalam bit) 16atau32 unsigned int 16atau32 signed int 16atau32 short int 16 16 Tipe Data unsigned short int Rentang -32.768 sampai 32.767 atau -2,147,483,648 sampai 2,147,483,647 0 sampai 65.535 atau 0 sampai 4,294,967,295 Sama seperti int -32.768 sampai 32.767 0 sampai 65.535 Pemrograman b. Tipe Bilangan Riil Tipe ini adalah tipe yang merepesentasikan data-data bilangan yang mengandung angka di belakang koma, misalnya 3.78, 21.03, dan banyak lagi yang lainnya. Adapun tipe data yang termasuk ke dalam kategori ini adalah seperti yang ditunjukkan pada tabel di bawah ini. Tipe Data Ukuran (dalam bit) Rentang Presisi float 32 double 64 long double 80 1.2E-38 sampai 3.4E+38 2.3E-308 sampai 1.7E+308 3.4E-4932to1.1E+4932 6 digit presisi 15 digit presisi 19 digit presisi Bab 2; Komentar, Identifier, dan Tipe Data Berikut ini contoh program yang menggunakan tipe bilangan desimal di dalamnya. Kode Program 2-14 ^include <iostream> using namespace std; int main() { double y; // Mendeklarasikan variabel y dengan tipe // data double y = 222.134; // Melakukan assigment terhadap variabel // x cout«"Nilai y = "«x; Sebagai contoh adalah karakter 'A', 'a', ' ', '!', '#' dan sebagainya merupakan tipe char, sedangkan "Mengungkap", "Rahasia", "C + + ", "Budi", "Raharjo" adalah contoh dari tipe char*. Untuk lebih memudahkan Anda dalam membedakan tipe karakter dan string adalah tanda yang mengapitnya. Dalam C+ + , tipe karakter diapit oleh tanda petik tunggal ('), sedangkan tipe string diapit oleh tanda petik ganda ("). Adapun tipe data dalam kategori ini yang didefinisikan oleh ANSI/ISO C++ Standard adalah seperti yang terlihat pada tabel di bawah ini. Ukuran (dalam b/i) Tipe Data return 0; J Hasil yang diperoleh dari program di atas adalah sebagai berikut : Nilaiy = 222.134 Rentang char 8 -1 28 sampai 1 27 atau 0 sampai 255 unsigned char signed char 8 0 sampai 255 8 -128 sampai 127 Berikut ini adalah program yang menunjukkan penggunaan tipe data char dan char*. c. Tipe Logika Kode Program 2-15 Tipe ini merepresentasikan data-data yang hanya mengandung dua buah nilai, yaitu nilai logika (boolean). Nilai logika itu sendiri hanya terdiri dari nilai benar (direpresentasikan dengan nilai selain nol, biasanya nilai 1) dan salah (direpresentasikan dengan nilai 0). Untuk sebagian kompiler C++ tertentu yang telah memenuhi standar ANSI/ISO, tipe ini telah dinyatakan dalam tipe bool. Dalam pemrograman, nilai ini umumnya lebih dikenal dengan nilai true (benar) dan false (salah). d. Tipe Karakter / String Tipe ini merepresentasikan data-data yang berupa karakter. Tipe data ini dinyatakan dengan tipe char, sedangkan untuk string (=kumpulan karakter) dinyatakan sebagai pointer dari tipe char, yaitu yang dituliskan dengan char*. Pemrograman C++ ^include <iostream> using namespace std; int main() { // Mendeklarasikan variabel Karakter dengan nilai ;'A' char Karakter = 'A'; // Mendeklarasikan variabel Teks dengan nilai "Kata1 char* Teks = "Kata"; char TEKS[10] = "Coba"; cout«Karakter«endl ; cout«Teks«endl ; cout«TEKS«endl ; return 0; l^HHHHHHlBHHi Hasil yang diperoleh dari program di atas adalah sebagai berikut : Bab 2: Komentar, Identifier, dan Tipe Data A Kata Coba 2.4.2 Tipe Data Bentukan Tipe data bentukan adalah tipe data yang dibuat sendiri sesuai kebutuhan dalam program yang akan kita buat. Tipe ini lebih dikenal dengan sebutan dalam bahasa asing, yaitu user defined types. Adapun yang termasuk ke dalam tipe bentukan adalah array (larik), struktur dan enumerasi. Jika Anda pernah memogram dengan bahasa Pascal, maka struktur ini dikenal dengan istilah rekaman (record). a. Struktur Sesuai dengan namanya, struktur adalah tipe data bentukan yang menyimpan lebih dari satu variabel bertipe sama maupun berbeda. Untuk membuat tipe data struktur dalam C+ + , kita harus mendeklarasikannya dengan menggunakan kata kunci struct. Jika Anda pernah mempelajari bahasa pemrograman PASCAL, maka istilah struktur ini lebih dikenal dengan istilah record (rekaman), serta bentuk pendeklarasiannya adalah dengan menggunakan kata kunci record. Berikut ini bentuk umum pendeklarasian tipe data struktur di dalam C++. struct nama_struktur { tipe_data variabel 1 ; tipe_data variabel2j Ingat, dalam pendeklarasian struktur kita harus mengakhirinya dengan tanda titik koma atau semicolon (;). Jika kita telah membuat tipe data bentukan baru yang berjenis struktur tentu kita akan menggunakannya di dalam pendeklarasian sebuah variabel. Pada saat itu, kita harus melakukan pengaksesan terhadap isi dari struktur tersebut dengan menggunakan operator titik (.). Sebagai contoh sederhana untuk menerangkan tipe data struktur adalah dengan melihat suatu objek, misalnya siswa. Kita tahu bahwa siswa pasti mempunyai NIS (Nomor Induk Siswa), nama, alamat serta data pribadi lainnya. Kasus ini dapat kita implementasikan ke dalam tipe struktur. Adapun contoh bentuk implementasinya adalah sebagai berikut : // Membuat tipe struktur dengan nama SISWA struct SISWA { char NIS [8] ; char Nama [25] ; char Alamat [20] ; char Kata [15] ; // Menggunakan tipe SISWA dalam mendeklarasikan variabel // A SISWA A; // Melakukan pengisian nilai terhadap variabel A A. NIS = "DOG96549"; A. Nama = "Budi Rahar jo" ; A. Alamat = "Gelatik 391"; A.Kota = "Bandung"; Untuk mengetahui lebih jauh mengenai struktur, perhatikan contoh program di bawah ini. Kode Program 2-16 ^include <iostream> using namespace std; int main() { struct char char char char SISWA { NIS [8] ; Nama [25] ; Alamat [20] ; Kota[15] ; SISWA A; // Mendeklarasikan variabel A yang // bertipe SISWA A. NIS = "DOD98021"; A. Nama = "Arista"; 2: Kornentar, Identifier, dan Tipe Data A.Alamat = "Kopo"; A.Kota = "Bandung"; // Menampilkan nilai yang diisikan ke layar cout«A. NIS«endl ; cout«A.Nama«endl; cout«A.Alamat«endl; cout«A.Kota«endl; return 0; Hasil yang diperoleh dari program di atas adalah sebagai berikut: jenis kelamin dapat kita bentuk ke dalam tipe enumerasi. Dalam bahasa C+ + , untuk mendefinisikan tipe enumerasi adalah dengan menggunakan kata kunci enum. Berikut ini adalah bentuk umum untuk mendefinisikannya. enum nama_tipe { nllai_l, nilai_2, ...}; Sebagai contoh, di bawah ini dituliskan contoh-contoh pendefinisian tipe enumerasi. . enum JENIS_KELAMIN {Pria, Wanita}; enum HARI {Minggu, Senin, Selasa, Rabu, Sabtu); enum WARNA_PRIMER {Merah, Biru, Hijau); Kamis, Jumat, Berikut ini adalah contoh implementasinya di dalam program. DOD98021 Arista Kopo Bandung Kode Program 2-17 #include <iostream> * using namespace std; . Dalam bahasa C + + , pedeklarasian variabel yang bertipe struktur dapat dituliskan langsung pada saat pendefinisan tipe struktur yang bersangkutan. Misalnya kita akan mendeklarasikan variabel A, B dan C yang bertipe SI SWA, maka penulisannya dapat dilakukan seperti di bawah ini. // Membuat tipe struktur dengan narna SISWA dan // menggunakannya // langsung untuk mendeklarasikan variabel A, B dan C b. enum JENIS_KELAMIN { Pria, Wanita } int m a i n f } { , struct SISWA { char N I S [ 8 ] ; char Nama[20]; JENIS_KELAMIN gender; } A; A.NIS = "DQD98021"; A.Nama = "Arista"; A.gender = Wanita; struct SISWA { char NIS[8]; char Nama[25]; char Alamat[20] ; char Kota[15] ; cout«"NIS cout«"Nama cout«"Gender } A, B, C; return 0; Enumerasi "«A.NIS«endl; " «A. Nama« endl ; "«A. gender«endl ; Hasil yang diperoleh dari program di atas adalah sebagai berikut; Tipe enumerasi adalah tipe data yang nilainya terbatas pada nilai-nilai yang telah didefinisikan saja. Tipe enumerasi digunakan untuk membentuk tipe data yang nilainya bersifat pasti. Misalnya untuk mendefinisikan tipe jenis kelamin, nama hari, warna primer dan sebagainya. Kita tahu bahwa jenis kelamin hanya terdiri dari pria dan wanita saja, maka Pemrograman C++ NIS Nama Gender : DOD98021 : Arista :1 Bab 2: Komentar, Identifier, dan Tipe Data Nilai 1 di atas menunjukkan indeks dari nilai yang terdapat dalam tipe JENIS_KELAMIN. Sebagai catatan bahwa indeks diawali dari 0 (nol), maka nilai Wanita pada tipe JENIS__KELAMIN di atas adalah 1, sedangkan Pria akan bernilai 0. 2.5 Kode Program 2-18 tinclude <iostrearn> using namespace std; int m a i n ( } { // Mendeklarasikan variabel NAMA dengan tipe char dan // lebar 5 karakter char NAMA[5]; Null Terminated String Dalam C + + , string yang digunakan bertipe null terminated string, yaitu jenis string yang diakhiri oleh karakter null ('\0'), bukan nol. Kita tahu bahwa string adalah kumpulan (array) dari karakter, oleh karena itu jika kita akan mendeklarasikan variabel bertipe string, maka kita harus melebihkan lebar sebanyak satu karakter untuk posisi karakter null. Sebagai contoh kita akan melakukan deklarasi variabel yang bertipe string dan mengisikannya dengan teks 'Budi1, maka bentuk deklarasinya adalah sebagai berikut: // Mendeklarasikan variabel yang bertipe string dengan lebar 5 char NAMA[5]; // Mengisikan nilai ke dalam variabel NAMA NAMA = "Budi"; Jika kita amati potongan sintaks di atas, sebenarnya kita hanya mengisikan 4 karakter ke dalam variabel NAMA, sedangkan sisa ruang-nya akan digunakan untuk menempatkan karakter null. Untuk lebih jelasnya perhatikan ilustrasi di samping ini. // Mengisikan nilai ke dalam variaJbeJ NAMA NAMA = "Budi"; cout« "Karakter ke-0 cout«"Karakter ke-1 cout«"Karakter ke-2 cout«"Karakter ke-3 cout« "Karakter ke-4 "«NAMA { 0 ] «endl; "«NAMA[l]«endl; "«NAMA [ 2 ] «endl; "«NAMA[3]«endl; "«NAMA[4]«endl; return 0; Hasil yang diperoleh dari program di atas adalah sebagai berikut : Karakter ke-0 Karakter ke-1 Karakter ke-2 : Karakter ke-3 Karakter ke-4 Dalam C + + , terdapat beberapa fungsi siap pakai yang berguna untuk menyelesaikan masalah-masalah yang berkaitan dengan string. Untuk menggunakan fungsi-fungsi tersebut kita harus mendaftarkan file header string.h (untuk C + + lama) atau <cstring> (untuk C + + standar). Berikut ini fungsi-fungsi yang dimaksudkan : Fungsi strcpy() Dalam mengisikan nilai ke variabel yang bertipe string, kita tidak perlu memasukkan karakter null secara manual, karena C + + secara otomatis akan menambahkannya. Untuk membuktikan hal ini, perhatikanlah program di bawah ini. Pernrograraan C++ Bentuk umum dari fungsi strcpy ( ) dapat dilihat di bawah ini. Fungsi ini berguna untuk melakukan penyalinan (copy) string dari S2 ke SI. Contoh penggunaannya dalam program adalah sebagai berikut: Bab 2: Komentar, Identifier, dan Tipe Data I Kode Program 2-19 // Melakukan pengisian nilai terhadap variabel SI dan // 52 ^include <iastream> ^include <cstring> 51 = "CONTOH"; 52 = "salin string"; using namespace std; // Melakukan penyalinan string dari variabel S2 ke // variabel SI StrcpytSl, 32, 4 ) ; int main() { char SI [50] ; char* S2; // Menampilkan nilai dari variabel SI cout«Sl«endl ,- // Melakukan pengisian nilai terhadap variabel S2 S2 = "Ini adalah contoh penyalinan string"; return 0; // Melakukan penyalinan string dari variabel 32 ke // variabel SI strcpytSl, S2); Hasil yang diperoleh dari program di atas adalah sebagai berikut : // Menampilkan nilai darl variabel SI cout«Sl«endl ; saliOH return 0; ' Hasil yang diperoleh dari program di atas adalah sebagai berikut: 3, Fungsi strdup ( ) Bentuk umum dari fungsi strdup ( } dapat dilihat di bawah ini. char* strdup(const char* S); Ini adalah contoh penyalinan string 2. Fungsi ini sebenarnya mirip dengan fungsi strcpy ( } , yaitu untuk melakukan duplikasi string. Contoh penggunaannya dalam program adalah sebagai berikut: Fungsi strncpy ( ) Bentuk umum dari fungsi strncpy ( ) dapat dilihat di bawah ini. char* strncpy{char* SI, const char* S2, size_t n ) ; Fungsi ini berguna untuk menyalin string sebanyak n karakter dari variabel S2 ke variabel S1. Contoh penggunaannya dalam program adalah sebagai berikut; Kode Program 2-20 Kode Program 2-21 ^include <iostream> tinclude <cstring> using namespace std; : int main() { char* S.I; char* S2; ^include <iostream> ^include <cstring> // Melakukan pengisian nilai terhadap variabel SI 51 = "Contoh Duplikasi String"; using namespace std; // Melakukan duplikasi string dari variabel SI ke // variabel 52 52 = strdup(Sl); int main() { char SI [50] ,char* S2; // Menampilkan nilai dari variabel 52 Pemrograman C++ 2: Komentar, Identifier, dan Tipe Data B Hasil yang diperoleh dari program di atas adalah sebagai berikut: Hasil yang diperoleh dari program di atas adalah sebagai berikut: Contoh Duplikasi String 4. return 0; Teks Gabungan 5. Fungsi strncat ( ) Bentuk umum dari fungsi strncat ( ) dapat dilihat di bawah Fungsi strcat ( ) ini. Bentuk umum dari fungsi strcat ( ) dapat dilihat di bawah . mi. char* atrcat(char* Si, const char* S2); Fungsi ini berguna untuk menggabungkan (concat) string dari S2 ke posisi akhir dari SI. Contoh penggunaannya dalam program adalah sebagai berikut: char* strncatfchar* SI, const char* S2, size_t n); Fungsi ini berguna untuk menggabungkan n karakter dari variabel S2 ke posisi akhir dari variabel Si. Contoh penggunaannya dalam program adalah sebagai berikut: Kode Program 2-23 Kode Program 2-22 # include <iostream> tfinclude <cstring> ^include <iostream> ^include <string> using namespace std; using namespace std int mainO { char* SI; char* S2; int mainf) { char* Si; char* S2; char* spasi = " "; // Melakukan pengisian nilai terhadap variabel SI dan // 52 // Melakukan pengisian nilai terhadap variabel SI dan // S3 51 = "Teks"; 52 = "Gabungan"; // Menambahkan karakter spasi (' V ke dalam variabel // SI strcat(SI, spasi}; // Melakukan penggabungan string yang terdapat // pada variabel SI dan S2 strcat(SI, S2); // Menampilkan nilai dari variabel Si // setelah proses penggabungan cout«Sl«endl ,- 51 = "Nama saya adalah "; 52 = "Budi Raharjo"; // Menggabungkan 4 karakter dari variabel S3 ke // variabel SI strncat (SI, S2, 4); // Menampilkan nilai dari variabel Si // setelah dilakukan penggabungan cout«Sl«endl; return 0; Hasil yang diperoleh dari program di atas adalah sebagai berikut : Pemrograman C++ Bab 2: Komentar, Identifier, dan Tipe Data I 7. Nama saya adalah Budi 6. Fungsi strlen ( ) Bentuk umum dari fungsi strlen ( ) dapat dilihat di bawah mi. size_t strlen{const char* S); Fungsi ini berguna untuk mengembalikan panjang string dari S. Contoh penggunaannya dalam program adalah sebagai berikut: Kode Program 2-24 ^include <iostream> ^include <cstring> Bentuk umum dari fungsi strcmp ( ) dapat dilihat di bawah Ini. int •trcmp(const char* SI, const char* S2); Fungsi ini berguna untuk membandingkan string yang terdapat pada variabel S1 dan S 2. Nilai yang akan dikembalikan yaitu : • 0 (nol): hal ini terjadi jika SI sama dengan S2 • kurang dari 0 (negatif) : hal ini terjadi jika SI lebih kecil dari S2 • lebih dari 0 (positif) : hal ini terjadi jika Si lebih besar dariS2 Contoh penggunaannya dalam program adalah berikut: using namespace std; int main( ) ( char* SI; char* S2; int panjang_Sl, panjang_S2; // // 51 52 Fungsi strcmp ( ) sebagai Kode Program 2-25 ^include <iostream> ^include <cstring> Melakukan pengisian nilai terhadap variabel SI dan S2 = "Budi"; = "Raharjo"; panjang_Sl = strlen(Sl); panjang_S2 = strlen{S2) ; // Menampilkan nilai dari variabel panjang_Sl'dan // panjang_S2 cout«"Panjang SI : "«panjang_Sl«endl; cout«"Panjang S2 : "«panjang_S2«endl; return 0 ; Hasil yang diperoleh dari program di atas adalah sebagai berikut : using namespace std; int main(J { char* SI; char* S2? // // 51 52 Melakukan pengisian nilai yang sama terhadap variabel SI dan 52 = "COBA"; = "COBA";" // Menampilkan hasil perbandingan string // dari variabel Si dan S2 cout«"Hasil perbandingan : "«strcmp(Sl, S2}«endl; // Melakukan perubahan nilai terhadap variabel SI 51 = "Coba"; // Menampilkan kembali hasil perbandingan string // dari variabel SI dan S2 cout«"Hasil;perbandingan : "«strcmp(Sl, S2}«endl; Panjang SI : 4 Panjang S2 : 7 // Melakukan perubahan nilai terhadap variabel S2 52 = "coba"; // Menampilkan kembali hasil perbandingan;string : Pemrograman Bab 2: Komentar, Identifier, dan Tipe Data // dari variabel SI dan S2 cout«"Hasil perbandingan : "«strcmp (SI , S2)«endl; g Fungsi strchr ( ) Bentuk umum dari fungsi strchr ini. return 0 ; Contoh hasil yang diperoleh dari program di atas adalah sebagai berikut : dapat dilihat di bawah Fungsi ini akan mencari lokasi karakter dari suatu string. Jika karakter ditemukan, maka fungsi ini akan mengembalikan pointer dari string yang dimulai dari karakter tersebut, tetapi jika tidak maka fungsi akan mengembalikan nilai 0. Contoh penggunaannya dalam program adalah sebagai berikut: Hasil perbandingan : 0 Hasil perbandingan : 32 Hasil perbandingan : -32 Kode Program 2-27 8. Fungsi strrev ( ) #include <iostream> ^include <cstring> Bentuk umum dari fungsi strrev ( ) dapat dilihat di bawah using namespace std; ini. char* strrev(char* S ) ; int mainf) { char* S = "C++ adalah segalanya bagiku"; char* PStr; Fungsi ini berguna untuk membalikkan string dari variabel S. Contoh penggunaannya dalam program adalah sebagai berikut : // Melakukan pencarian karakter '+' di dalam variabel S PStr = strchr(S, '+'); Kode Program 2-26 tinclude <iostreara> #include <cstring> // Menampilkan nilai dari variabel PStr cout« PStr«endl; using namespace std; return 0; int main() { char* S = "Budi Raharjo"; Hasil yang diperoleh dari program di atas adalah sebagai berikut : // Melakukan penulisan string mulai dari // posisi akhir variabel S strrev(S); + 4- adalah segalanya bagiku // Menampilkan nilai dari variabel S setelah dibalik cout« S«endl; return 0; 1 Hasil yang diperoleh dari program di atas adalah sebagai berikut: ojrahaR iduB Pemrograman 10. Fungsi strstr ( ) Bentuk umum dari fungsi strstr ( ) dapat dilihat di bawah ini. char* strstr(const? char* S, const char* substr); Fungsi ini akan mencari lokasi substring dari suatu string. Jika substring ditemukan, maka fungsi ini akan mengembalikan pointer dari string yang dimulai dari substring tersebut, tetapi jika tidak maka fungsi akan Bab 2: Komentai, Identifier, dan Tipe Data mengembalikan nilai 0. Konsep yang terdapat pada fungsi adalah sama seperti fungsi strchr ( ) . Contoh penggunaannya dalam program adalah sebagai berikut : Fungsi ini akan mengubah string yang tersimpan dalam variabel S menjadi huruf kecil. Berikut ini adalah contoh penggunaannya dalam program. Kode Program 2-28 Kode Program 2-29 #include <iostream> #include <cstring> ^include <iostream> #include <cstring> using namespace std; using namespace std; int main ( ) { char* S = "Pencipta C++ adalah Bjarne Stroustrup"; char* PStr; int main() { char* S = "CONTOH MENGECILKAN HURUF"; char* hasil; // Melakukan pencarian substring "Bjarne" di dalam // variabel S PStr = strstr{S, 'Bjarne'); // Mengubah string dari variabel S menjadi huruf kecil hasil = strlwr(S); // Menampilkan nilai dari variabel PStr cout« PStr«endl; // Menampilkan nilai dari variabel hasil ,cout« hasil«endl; return 0; return 0; 2.5.1 ) Basil yang diperoleh dari program di atas adalah sebagai berikut : Hasil yang diperoleh dari program di atas adalah sebagai berikut: Bjarne Stroustrup contoh mengecilkan huruf b. Konversi String Bentuk umum dari fungsi strupr ( ) dapat dilihat di bawah Dalam pembuatan sebuah program kerap kali kita dituntut untuk melakukan perubahan terhadap format string, misalnya mengubah string menjadi huruf kapital ataupun sebaliknya. Untuk melakukan hal ini, C + + telah menyediakan dua buah fungsi, yaitu strlwr ( ) dan s t r u p r ( ) . a. Fungsi strupr o ITU. char* strupr(char* S); Fungsi ini akan mengubah string yang tersimpan dalam variabel S menjadi huruf kapital. Berikut ini adalah contoh penggunaannya dalam program. Kode Program 2-30 Fungsi Bentuk umum dari fungsi strlwr { } dapat dilihat di bawah ini. _ char* strlwr{char* S); Pemrograman C++ ^include ; <iostream> ftinclu.de <cstring> using namespace std; int mainO { — Bab 2: Komentar, Identifier, dan Tipe Data I char* S = "coritoh membesarkan huruf"; char* hasil; // ke dalam variabel S cin»S; // Mengubah string dari variabel 5 menjadi huruf keci hasil = strupr(S); // Menampilkan kembali nama yang telah dimasukkan cout«"Hai "«s«", apa kabarmu?"«endl; // Menampilkan nilai dari variabel hasil cout« hasil«endl; return 0; return 0; 1 Hasil yang diperoleh dari program di atas adalah sebagai berikut : Hai Arista, apa kabarmu? CONTOH MEMBESARKAN HURUF 2.5.2 Input String Jika kita hanya menggunakan statemen cin dalam memasukkan string ke sebuah variabel, maka kita akan mengalami kesulitan jika ternyata string yang kita masukkan tersebut mengandung spasi (karakter ' '). Hal ini disebabkan spasi pertama yang ditemukan dalam sebuah string yang dimasukkan melalui keyboard akan dianggap sebagai karakter null. Untuk lebih memahami konsep input string, perhatikan contoh-contoh program di bawah ini. Pada saat kita melakukan input berupa string ke sebuah variabel dan string tersebut tidak mengandung spasi, maka hal itu itu tidak akan menjadi masalah. Berikut ini contoh program yang menunjukkan hal tersebut. Kode Program 2-31 tfinclude pada saat program di atas dijalankan dan misalnya kita mengisikan nama tesebut dengan string "Arista", maka hal ini tidak menimbulkan masalah. Adapun hasil yang akan diberikan adalah sebagai berikut : < lost re emb- Namun, apa yang terjadi bila kita memasukkan string "Arista Destriana"? Temyata hasil yang diberikan masih tetap sama seperti di atas, padahal hasil yang kita inginkan adalah seperti yang tampak di bawah ini. Hai Arista Destriana, apa kabarmu? Kita tentu tidak menginginkan hal ini terjadi. Oleh karena itu, untuk menjawab kasus ini kita harus menggunakan fungsi getline ( ) . Adapun bentuk umum dari fungsi getline { ) ini dapat dilihat di bawah ini. kistream getline(char* b u f f e r , int ukuran, char delimiter = ' \ n ' ) ; fcistream getline(signed char* b u f f e r , int ukuran, char delimiter = ( \ n ' } ; Sdstream getline(unsigned char* b u f f e r , int ukuran, char delimiter = ( \ n ' ) ; Setelah mengetahui fungsi getline ( } , sekarang kita kembali ke pokok permasalahan kita yaitu dengan memperbaiki program di atas dengan sintaks berikut: using namespace std; ir.t main ( ) { Kode Program 2-32 char S [ 2 0 1 ; ^include <iostream> cout« "Masukkan nama Anda : "; using namespace std; // Meminta input dari user dan menyimpan nilainya Pemrograman Bab 2: Komentar, Identifier, dan Tipe Data int main ( ) { BAB 3 OPERATOR char S[20] ; cout«"Masukkan nama Anda : ",// Meminta input dari user menggunakan fungsi getline cin.getline(S, sizeof(S) - 1); // Menampi 1 kan kembali nama yang telah dimasukkan cout«"Hai "«S«", apa kabarmu?"«endl; return 0; Atau kita juga dapat menggunakan objek string, yaitu dengan menuliskannya seperti di bawah ini. Kode Program 2-33 #include <iostream> #include <cstring> using namespace std; int 3.1 main ( ) ( string S; cout«"Masukkan nama Anda : "; // Meminta input dari user menggunakan fungsi getline getline (cin, S) ; // Menampilkan kembali nama yang telah dimasukkan cout«"Hai "«S«", apa kabarmu?"«endl; return 0; Hasil yang diberikan oleh kedua program di atas adalah sama. Jika kita memasukkan string "Arista Destriana", maka hasil yang akan ditampilkan adalah sesuai dengan apa yang kita inginkan seperti tampak di bawah ini. Pendahuluan Dalam pengembangan sebuah program kerap kali dituntut untuk mendefinisikan operasi-operasi di dalamnya, baik itu berupa operasi perhitungan, perbandingan maupun yang lainnya. Untuk melakukan hal ini tentunya kita harus menggunakan operator, Pada bagian ini Anda akan dikenalkan dengan operator-operator yang terdapat pada bahasa C++ beserta penggunaannya di dalam program. Bahasa C++ sendiri menawarkan banyak operator untuk melakukan pemecahan masalah-masalah tertentu di dalam program. Dalam buku ini operator-operator tersebut akan dikelompokkan ke dalam 4 bagian, yaitu operator assignment, unary, binary dan ternary. Sebagai pengenalan bagi Anda, sebelum melangkah ke pembahasan yang lebih jauh, berikut ini istilah-istilah yang harus diketahui dalam bekerja dengan operator. Misalnya jika terdapat suatu statemen yang berupa persamaan matematika dan dituliskan sebagai berikut: Hai Arista Destriana, apa kabarmu? Pemrograman C++ Bab 2: Koraentar, Identifier, dan Tipe Data cout« "Mylnteger cout« "MyDouble C = 5-r ? Maka: C C = 5 + 7 3.2 disebut dise disebut disebut disebut disebut disebut dengan dengan dengan dengan dengan dengan varlabel operator assignment operand ekspresi operator aritmetika (penambahan) statemen aritmetika Operator Assignment Operator assignment adalah operator yang berfungsi untuk memasukkan (assign) nilai ke dalam suatu variabel ataupun konstanta. Operator ini dilambangkan dengan tanda sama dengan (=). Berikut ini contoh program yang menggunakan operator tersebut. Kode Program 3-1 ^include <iostream> using namespace std; int main () { // Mendeklarasikan konstanta // dengan melakukan assignment dengan nilai 3.14 const PI = 3.14; // Mendeklarasikan variabel-variabel // Mendeklarasikan char MyChar; // Mendeklarasikan char* MyString; // Mendeklarasikan int Mylnteger; // Mendeklarasikan double MyDouble; // double variabel variabel variabel variabel bertipe char bertipe char* bertipe int bertipe // Melakukan assignment terhadap variabel-variabel di atas MyChar « v C'; MyString = "Mengungkap Rahasia C + + " ; Mylnteger « 21; MyDouble = 21.0378; // Menampilkan nilai dari variabel-variabel di atas cout«"MyChar : "«MyChar«endl ; cout«"MyString : "«MyString«endl; Pemrograman C-» : "«Mylnteger«endl; : u«MyDouble; Hasil yang akan diberikan dari program di atas adalah sebagai berikut: MyChar MyString Mylnteger MyDouble 3.3 :C : Mengungkap Rahasia C+ + : 21 : 21.0378 Operator Unary Dalam ilmu matematika yang disebut dengan operator unary adalah operator yang hanya melibatkan sebuah operand. Adapun yang termasuk ke dalam operator unary adalah seperti tampak pada tabel di bawah ini. Operator + ++ — Jenis Operasi Membuat nilai positif Membuat nilai negatif Increment Decrement Contoh +7 ~7 C+ + C-- Berikut ini contoh program yang di dalamnya menggunakan operator plus ( + ) dan minus (-). Kode Program 3-2 ^include <iostream> using namespace std; int main() { int X; float Y; X = +5; // Dapat ditulis dengan X = 5, // yang berarti memasukkan nilai positif 5 Bab 2: Komentar, Identifier, dan Tipe Data I Y ~ -2.12; // M&nasukkan nilai negatif 2.12 // // Menampilkan nilai yang disimpan dalasri variabel X dan Y cout« "Nilai X : "«x«endl; cout«"Nilai Y : "«Y«endl; // Mengubah nilai X menjadi negatif pre -increment _ variabel/ // Melakukan pro -Increment Untuk lebih memahami konsep yang terdapat di dalamnya, berikut ini disajikan contoh program yang merupakan implementasi dari pre-increment dan post-increment. // Menampilkan kembali nilai yang disimpan // dalam variabel X dan Y cout«"Nilai X : "«X«endl; cout«"Nilai Y : "«Y«endl; Kode Program 3-3 ^include <iostreain> * using namespace std; return 0; 1 Hasil yang akan diberikan oleh program di atas adalah sebagai berikut: Nilai X : 5 Nilai Y: -2.12 int main( ) { int C; // Mendeklarsikan variabel C // Mengisikan nilai ke dalam variabel C dengan nilai 5 C = 5,- Nilai X : -5 Nilai Y : 2.12 Setelah statemen Y = -Y, maka nilai yang terdapat dalam variabel Y menjadi 2.12 (positif). Hal ini disebabkan karena kita menegatifkan nilai negatif, yaitu -(-2.12). 3.3.1 Mtelakukan Increment Increment adalah suatu penambahan nilai yang terjadi pada sebuah variabel. Adapun operator yang digunakan untuk melakukan increment adalah operator ++. Operator ini akan menambahkan nilai dari suatu variabel dengan nilai 1. Terdapat dua buah jenis increment yang terdapat dalam bahasa C+ +, yaitu pre-increment dan post-increment. Arti dari preincrement adalah melakukan penambahan nilai sebelum suatu variabel itu diproses, sedangkan post-increment merupakan kebalikannya, yaitu melakukan proses terlebih dahulu sebelum dilakukan penambahan nilai. Adapun bentuk umum dari preincrement dan post-increment dapat dilihat di bawah ini. Pemrograman C++ // Melakukan pre-increment cout« "Nilai C awal : "«C«endl; cout«"Nilai ++C : "«++c«endl; cout«"Nilai C akhir ;: "«C«endl; : cout«' \n' ; / Mengubah nilai yang terdapat dalam variabel C // dengan nilai 10 C = 10; // Melakukan cout«"Nilai cout«"Nilai cout«"Nilai post -increment C awal : "«C«endl; C++ : "«c++«endl; C akhir ; "<<C«endl; return 0; Hasil yang akan diberikan dari program di atas adalah sebagai berikut : Nilai C awal Nilai++C Nilai C akhir ;5 ;6 ;6 Nilai C awal : 10 Bab 2: Komentar, Identifier, dan Tipe Data Nilai C + + Nilai C akhir cout«"Nilai C-3>ut«"Nilai C akhir 10 11 "«C--«endl; tt «C«endl; return 0; Coba Anda perhatikan hasil di atas. Pada saat kita melakukan preincrement, nilai C dinaikkan dulu sebelum diproses {dalam hal ini ditampilkan ke layar) sehingga yang tampil adalah nilai 6. Sedangkan pada saat melakukan post-increment nilai dari variabel C diproses (ditampilkan) lebih dahulu sebelum dinaikkan nilainya. Hal ini menyebabkan nilai yang ditampilkan masih tetap 10. Namun pada saat pemanggilan nilai C setelah proses post-increment, nilai C tentu telah bertambah satu, sehingga yang ditampilkan adalah 11. 3.3.2 Hasil yang akan diberikan dari program di atas adalah sebagai berikut: Nilai C awal Nilai --C Nilai C akhir 5 4 4 Nilai C awal Nilai C-Nilai C akhir 10 10 9 Decrement Decrement merupakan kebalikan dari proses increment, yaitu menurunkan (mengurangi) nilai dari suatu variabel. Sama juga seperti pada increment, decrement juga dibagi ke dalam dua jenis yaitu pre-decrement dan post-decrement. Berikut ini program yang menunjukkan penggunaan decrement. Kode Program 3-4 3.4 Operator Binary Operator binary adalah operator yang digunakan dalam operasi yang melibatkan dua buah operand. Dalam bahasa C + + , operator binary ini dikelompokkan lagi ke dalam empat jenis, yaitu operator aritmetika, logika, relasional dan bitwise. ftinclude <iostream> using namespace std; int main() { int C; 3.4.1 // Mendeklarasikan variabel C // Mengisikan nilai ke dalam variabel C dengan nilai 5 C = 5; // Melakukan cout«"Nilai cout«"Nilai cout«"Nilai cout«' \n' ; pre-increment C awal : "«C«endl; --C : "«--C«endl; C akhir : "«C«endl; // Mengubah nilai yang terdapat dalam variabel C // dengan nilai 10 C = 10; // Melakukan post-decrement cout«"Nilai C awal "«C«endl; Pemrograman Operator Aritmetika Operator aritmetika adalah operator yang digunakan untuk melakukan operasi-operasi aritmetika seperti penjumlahan, pengurangan dan sebagainya. Adapun yang termasuk dalam operator aritmetika di dalam C + + adalah seperti yang tampak pada tabel di bawah ini. Operator Jenis Operasi Contoh + Penjumlahan 2 + 3 = 5 - Pengurangan 5 - 3 = 2 * / % Perkalian 2 * 3 = 6 Pembagian Sisa bagi (modulus,) 10.0 Bab 2: Komentar, Identifier, dan Tipe Data 10 / 3.0 = 3.3333 % 3 = 1 int Z; // Mendeklarasikan variabel Z sebagai // penampung nilai hasil operasi Untuk lebih memahaminya, berikut ini disajikan contoh-contoh program yang menggunakan operator aritmetika. a. // Melakukan operasi pengurangan Z - X - Y; Menggunakan Operator Plus (+) // Menampilkan hasil penjumahan COUt«X«" - " Kode Program 3-5 ^include <iostream> } using namespace std; Hasil yang akan diberikan dari program di atas adalah sebagai berikut: int main() { // Mendeklarasikan variabel X (diisi nilai 10) // dan Y (diisi nilai 3) int return 0; X = 10, Y * 3; 10 - 3 = 7 // Mendeklarasikan variabel Z sebagai penampung // nilai hasil operas! int Z; c. // Melakukan operasi penjumlahan Z = X + Y; ) Menggunakan Operator * Kode Program 3-7 // Menampilkan hasil penjumahan cout«X«" + #include <iostream> return 0; using namespace std; Hasil yang akan diberikan dari program di atas adalah sebagai berikut: int main( ) { // Mendeklarasikan variabel X (diisi nilai 10) // dan Y (diisi nilai 3) int X = 10, Y = 3; int 2; // Mendeklarasikan variabel Z sebagai // penampung nilai hasil operasi 10 + 3 = 13 // Melakukan operasi perkalian Z * X * Y; b. Menggunakan Operator Minus (-) // Menampilkan hasil penjumahan cout«X«" * Kode Program 3-6 return 0 ; ^include <iostream> } using namespace std; Hasil yang akan diberikan dari program di atas adalah sebagai berikut : int main() { // Mendeklarasikan variabel X (diisi nilai 10) // dan Y (diisi nilai 3) int X = 10, Y = 3; Pemrograman O+ 10 * 3 = 30 Bab 2: Komentar, Identifier, dan Tipe Data d. int X = 10, Y = 3; Menggunakan Operator I int Z; // Mendeklarasikan variabel Z sebagai // penampung nilai hasil operasi Kode Program 3-8 ^include <iostream> using namespace std; // Melakukan operasi pembagian dan menyimpan // sisa baginya ke dalam Z Z = X H Y; int main() { // Mendeklarasikan variabel X, Y dan Z bertipe int int X = 10, Y = 3; int Z; // Menampilkan sisa bagi dari operasi pembagian X / Y cout«X«" % "«Y«" = "«Z; return 0; // Mendeklarasikan variabel A, B dan C bertipe float float A = 10.0, Y = 3.0; float C; Hasil yang akan diberikan dari program di atas adalah sebagai berikut: // Melakukan operasi pembagian pada bilangan bulat Z = X / Y; 10 % 3 = 1 // Melakukan operasi pembagian pada bilangan desimal // (floating-point) C = A / B; // Menampilkan hasil pembagian cout«X«" / "«Y«" = u«Z«endl; cout«A«" 3.4.2 return 0; 1 Hasil yang akan diberikan dari program di atas adalah sebagai berikut: Operator logika adalah operator yang digunakan untuk melakukan operasi dimana nilai yang dihasilkan dari operasi tersebut hanya berupa nilai benar (true) dan salah (false], Nilai ini disebut dengan nilai boolean. Boolean sendiri ditemukan oleh seorang matematikawan Inggris yang bernama George Bool. Dalam bahasa C+ + , nilai benar tersebut direpresentasikan dengan bilangan selain 0 (biasanya nilai I), sedangkan nilai salah direpresentasikan dengan nilai 0. Namun, dalam bahasa C + + modern yang telah mendukung tipe bool, nilai benar direpresentasikan dengan nilai true dan nilai salah dengan nilai false. Dalam buku ini, kita hanya akan memakai nilai 0 dan 1 untuk merepresentasikan nilai salah dan benar. Adapun yang termasuk ke dalam operator logika dalam C + + adalah seperti yang tampak pada tabel di bawah ini. 10/3 =3 10.0/3.0= 3.33 e. Operator Logika Menggunakan Operator % Kode Program 3-9 ^include <iostream> using namespace std; int main() { // Mendeklarasikan variabel X (diisi nilai 10) // dan Y (diisi nilai 3) Pemrograman C++ Operator Jenis Operasi && AND (dan) i OR (atau) NOT" (negasi) Contoh i && i = i 1 || 0 - 1 10 * 1 Bab 2: Komentar, Identifier, dan Tipe Data a. Operator && (AND) X Y X&&Y 1 1 1 0 1 0 0 0 0 0 1 0 Sebagai bukti pemyataan tersebut, berikut. perhatikan 1 1 0 0 = = = = "< "< "< "< using namespace std; program int rnain{) cout«"l cout«"l cout«"0 cout«"0 1 = "«(0 l)«endl; 0)«endl; 0} «endl ; l)«endl; return 0; Hasil yang akan diberikan dari proram di atas adalah sebagai berikut: l)«endl; 0)«endl; 0}«endl; l)«endl; return 0; 0=1 0=0 1=1 Hasil yang akan diberikan dari program di atas adalah sebagai berikut: 1 && 1 = 1 1 && 0 - 0 0 && 0 = 0 0 && 1 = 0 b. 1 ^include <iostream> using namespace std; 1 0 0 1 1 Kode Program 3-11 ^include <iostream> { && && && && 0 X||Y 1 1 0 Berikut ini program yang membuktikannya. Kode Program 3-10 int main{} cout«"l cout«"l cout«"0 cout«"0 ; Y 1 0 X Operasi AND hanya akan menghasilkan nilai 1 (benar) jika semua operand-nya bernilai benar, namun jika tidak, maka operasi tersebut akan mengahasilkan nilai 0 (salah). Berikut ini tabel yang menunjukkan hasil dari operasi AND. c. Operator! (NOT) Nilai yang dihasilkan dari operasi NOT adalah kebalikan dari nilai yang dikandung di dalamnya. Jika nilai awal adalah 1 (benar), maka setelah operasi NOT maka nilainya menjadi 0 (salah), begitu juga sebaliknya. Berikut ini tabel yang menunjukkan hasil dari operasi NOT. Operator II (OR) Operasi OR hanya akan menghasilkan nilai 0 (salah) jika semua operand-nya bernilai salah, namun jika tidak, maka operasi tersebut akan menghasilkan nilai 1 (benar). Berikut ini tabel yang menunjukkan hasil dari operasi OR. Pemrograman C++ X !X 1 0 0 1 2: Komentar, Identifier, dan Tipe Data Berikut ini program yang membuktikannya. Kode Program 3-12 ^include <iostream> using namespace std? int mainf) { cout«"!l = " cout«"!0 = "«!0«endl; return 0; ) Hasil yang akan diberikan dari proram di atas adalah sebagai berikut: Namun bagaimana jika terdapat ekspresi seperti di bawah ini? 9HMBHBHBBBHI Untuk menentukan nilai dari ekspresi tersebut mula-mula kita tentukan (1 && 1), hasilnya adalah 1 (kita sebut dengan nilai ke-1). Kemudian (0 1), hasilnya adalah 1 (kita sebut dengan nilai ke-2). Langkah selanjutnya adalah melakukan operasi AND terhadap nilai ke-1 dan nilai ke-2, yaitu (1 && 1), menghasilkan nilai 1. Terakhir, nilai 1 ini kita negasikan, yaitu dengan menggunakan ! 1, maka akan mengsilkan nilai akhirO. 3.4.3 Jenis Operas! Contoh > < >= <=i~ Lebih besar Lebih Kecil Lebih besar atau sama dengan Lebih kecil atau sama dengan Sama dengan Tidak sama dengan (5 > 2) = 1 (5 < 2) = 0 Operator Relasional Operator relasional adalah operator yang digunakan untuk menentukan relasi atau hubungan dari dua buah operand. Operator ini ditempatkan di dalam sebuah ekspresi, yang kemudian akan menentukan benar atau tidaknya sebuah ekspresi. Adapun yang termasuk dalam operator relasional di dalam C + + adalah seperti yang tampak pada tabel di bawah ini. Pemrograman C++ (5 >= 5 = 1 (5 <= 2 = 0 (5 == 2 - 0 (5 = 1 != 2 Operator ini banyak digunakan untuk melakukan pengecekan sebuah ekspresi (kondisi) dalam struktur percabangan yang baru akan dibahas pada bab selanjutnya dalam buku ini. 3.4.4 II = 0 !0 = 1 ! ( d && i) && (o || i ) j Operator Operator Bitwise Tidak seperti kebanyakan bahasa pemrograman lainnya, C/C + + mendukung penuh operator-operator bitwise. Operator bitwise sendiri berguna untuk melakukan operasi-operasi yang berhubungan dengan pemanipulasian bit. Sejak bahasa C diciptakan, bahasa C banyak digunakan untuk lebih memudahkan pemrograman yang berhubungan dengan alat. Hal ini disebabkan karena bahasa tersebut mendukung operasi-operasi bitwise yang biasanya dilakukan dengan menggunakan bahasa assembly. Walaupun demikian, pada kenyataannya, untuk menyelesaikan kasus-kasus tertentu bahasa C/C + + masih hams menggunakan bahasa assembly yang disisipkan di dalamnya. Hal ini disebut dengan istilah inline assembly, yang akan dibahas pada lampiran di dalam buku ini. Sebagai catatan bahwa operator bitwise ini hanya dapat dilakukan pada operand yang bertipe char dan int saja karena ini berkoresponden dengan tipe byte atau word di dalam bit. Adapun yang termasuk dalam operator bitwise dalam C + + adalah seperti yang tampak pada tabel di bawah ini. )perator C \ Jenis Operasi AND Contoh OR 1 1 & 0 = 0 0 = 1 A Exclusive OR (XOR) 1 NOT -1 = 0 2: Komentar, Identifier, dan Tipe Data 1 = 0 » Shift Right 5 « 1 = 10 « Shift Left 10 » 1 = 5 Fungsi dari operator &, dan - di atas adalah sarna dengan operator &&, | dan ! pada operator logika, perbedaannya hanya operator-operator bitwise ini bekerja bit demi bit, sedangkan pada operator logika bekerja untuk setiap nilai. Namun sekarang yang perlu Anda ketahui di sini adalah penggunaan operator ^ , » dan Untuk lebih memudahkan Anda dalam memahami penggunaannya, ingatlah bahwa setiap pergeseran satu bit, operator ini akan membagi suatu nilai dengan 2. Sebagai contoh, jika kita melakukan operasi 16 » 1, maka hasilnya adalah 8. Sedangkan jika 16 » 2, maka hasilnya adalah 4. Berikut ini program yang menunjukkan kasus tersebut. Kode Program 3-13 tinclude <iostream> using namespace std; a. Operator Operator ini digunakan untuk melakukan operasi exclusive OR (XOR). Adapun hasil dari operasi ini akan bernilai 1 (benar) jika satu operand-nya (bukan salah satu) bemilai benar, selain itu akan menghasilkan nilai 0 (salah). Dengan demikian, jika kedua operand-nya bernilai 1 (benar), maka hasil dari operasi ini adalah 0 (salah). Untuk lebih memahaminya, berikut ini tabel yang menyatakan hasil dari operasi XOR. X A // Menggeser 1 bic ke kanan dari bentuk biner bilangan // 16 X = 16 » 1; // Menggeser 2 bit ke kanan dari bentuk biner bilangan // 16 Y = 16 » 2; // Menampilkan hasil cout«"16 » l = "«x«endl; , cout«"16 » 2 = "«Y; Y 1 X Y 0 1 . return 0; } 0 0 0 0 1 1 Hasil yang akan diperoleh dari program di atas adalah sebagai berikut: 1 1 0 Sebagai contoh, kita akan melakukan operasi 120 127, maka hasilnya adalah sebagai berikut: 120 dalam bentuk bilangan biner 01111000 01111111 127 dalam bentuk bilangan biner /•v 00000111 b. int main() { int X, Y; hasil = 7 16 » 1 = 8 16 » 2 = 4 Untuk mengilustrasikan proses tersebut, perhatikan ta£>el di bawah ini. Nilai X X dalam Bentuk Biner Hasil 16 X = 16 00010000 Operator» X = 16 » 1 00001000 8 Operator » (shift right) digunakan untuk melakukan perpindahan bit ke arah kanan. Adapun bentuk umum dari X = 16 » 2 00000100 4 X = 16 » 3 00000010 2 penggunaan operator ini dapat dituliskan seperti berikut. nilai » banyaknya_pergeseran_bit_ke_arah_kanan X = 16 » 4 00000001 1 Pemrograman Bab 2: Komentar, Identifier, dan Tipe Data c. Operator« X = 1 «2 X = 1 «3 X = 1 «4 Operator « (shift left) merupakan kebalikan dari operator », yaitu digunakan untuk melakukan perpindahan bit ke arah kiri. Adapun bentuk umum dari penggunaan operator ini dapat dituliskan seperti berikut. ^^^^^^^ 00000100 00001000 00010000 16 nilai « banyaknya_pergeseran_bit_ke_arah__kiri Kebalikan dari operator » yang membagi nilai dengan 2, pada operator « justru akan mengalikan nilai dengan 2. Misalnya, 1 « 1 akan menghasilkan nilai 2. Sedangkan jika 1 « 2 maka nilai yang dihasilkan adalah 4. Berikut ini contoh program yang akan membuktikan hal tersebut. Kode Program 3-14 ^include <iostream> using namespace std; int main( ) { int X, Y; // Menggeser 1 bit ke kiri dari bentuk biner bilangan 1 X = 1 « 1; // Menggeser 2 bit ke kiri dari bentuk biner bilangan 1 Y = 1 « 2; // Menampilkan hasil cout«"l « 1 = "«X«endl; cout«"l « 2 = "«Y; 3.5 Operator Ternary Operator ternary adalah operator yang digunakan dalam operasi yang melibatkan tiga buah operand. Adapun operator yang digunakan untuk menyatakannya adalah operator ? ;. Konsep yang mendasari operasi ini adalah suatu percabangan (pemilihan) yang didasarkan atas kondisi tertentu. Berikut ini bentuk umum dari penggunaan operator ternary. Ekspresil ? Ekspresi2 i Ekpresi3; Jika ekspresil bernilai benar, maka program akan mengeksekusi ekpresi2. Sedangkan jika ekspresil bernilai salah maka yang dieksekusi adalah ekspresi3. Berikut ini contoh program yang menggunakan operator tersebut. Kode Program 3-15 ^include <iostream> using namespace std; int main(} { return 0; int X; Hasil yang akan diperoleh dari program di atas adalah sebagai berikut : // Meminta user untuk memasukkan nilai X dari keyboard cout«"Masukkan nilai X : "; cin»X; cout«' \n' ; X • (x < 0) ? -X i X; // Melakukan pengecekan terhadap nilai 1«1 = 2 1 « 2= 4 // x Untuk mengilustrasikan proses tersebut, perhatikan tabel di bawah ini. Nilai X X dalam Bentuk Biner Hasil x 00000001 1 X = 1 « 1 00000010 2 // Menampilkan nilai X setelah proses pengecekan cout«" | X | = "«X; return 0; Contoh hasil yang akan diberikan dari program di atas adalah sebagai berikut: Pemrograman C+ 2: Komentar, Identifier, dan Tipe Data BAB 4 PERCABANGAN Masukkan nilai X : -15 X I = 15 Sebagai tambahan bagi Anda, jika program di atas dalam bentuk struktur if maka sintaksnya adalah sebagai berikut: Kode Program 3-16 ^include <iostream> using namespace std; int main() [ int X; cout«"Masukkan nilai X : "; cin»X; if (X < 0} X - -X; // Melakukan pengecekan 4.1 // Menampilkan nilai X setelah proses pengecekan cout«"| X | = "«X; return 0; Jika Anda masih bingung dengan kehadiran struktur if di atas, lihat bab selanjutnya yang membahas mengenai percabangan. Pendahuluan Salah satu permasalahan yang pasti ditemui dalam pembuatan program adalah suatu percabangan. Percabangan yang dimaksud di sini tidak lain adalah suatu pemilihan statemen yang akan dieksesusi dimana pemilihan tersebut didasarkan atas kondisi tertentu. Di dalam C + + , terdapat dua buah jenis struktur yang digunakan untuk mengimplementasikan suatu percabangan, yaitu dengan menggunakan struktur if dan struktur switch. Statemen-statemen yang terdapat dalam sebuah blok percabangan akan dieksekusi hanya jika kondisi yang didefinisikan terpenuhi (bernilai benar). Artinya jika kondisi tidak terpenuhi {bernilai salah), maka statemen-statemen tersebut juga tidak ikut dieksekusi atau dengan kata lain akan diabaikan oleh kompiler. Untuk lebih memahami konsep percabangan, perhatikan kalimat di bawah ini. "Jika Audi lulus uj ian maka Andi akan dibelikan sepeda irotor oleh ayannya." Coba Anda amati, pada kalimat di atas yang merupakan kondisi adalah lulus ujian. Pada kasus ini sepeda motor hanya akan dibeli jika Andi lulus ujian. Sebaliknya, jika tidak lulus, maka sepeda motor pun tidak akan dibeli. Suatu percabangan dapat terdiri dari satu kondisi maupun lebih. Pada bab ini kita akan membahas secara detil implementasi dari percabangan yang terdapat pada bahasa C + + . Pemrograman C-* Bab 4: Percabangan 4.2 Struktur Satu Kondisi Struktur ini merupakan struktur yang paling sederhana karena hanya melibatkan satu buah ekspresi yang akan diperiksa. Bentuk umum dari struktur percabangan yang memiliki satu kondisi adalah sebagai berikut : .I Namun yang jelas, program di atas akan menampilkan teks "Nilai yang Anda masukkan adalah bilangan p o s i t i f " jika user memasukkan nilai yang lebih besar dari nol. Kita juga dapat menggunakan operator | dan && dalam menentukan sebuah ekspresi. Berikut ini contoh yang mengimplementasikan hal tersebut. // Jika terdapat lebih dari satu statemen Kode Program 4-2 if (kondisi) { Statement; Statemen2; ^include <iostream> using namespace std; // Jika hanya terdapat satu statemen, dapat ditulis // seperti di bawah int main{) { int bilangan; char huruf; // Meminta user untuk memasukkan sebuah bilangan cout«"Masukkan sebuah. bilangan bulat : "; cin»bilangan; if (kondisi} Statemen; Sebagai contoh untuk menerapkan konsep yang terdapat pada bagian ini, berikut ini disajikan beberapa contoh program. Kode Program 4-1 if ((bilangan > 0) && (bilangan < 10)} cout«bilangan«" lebih besar dari nol dan V1 \ "lebih kecil dari sepuluh"; // Meminta user untuk memasukkan sebuah huruf cout« "Masukkan sebuah huruf : "; ^include <iostream> using namespace std; if int main() { int nilai; // Memberikan informasi agar user memasukkan // sebuah bilangan bulat cout«"Masukkan sebuah bilangan bulat : "; // Membaca nilai yang dimasukkan dari keyboard dan disimpan // ke variabel nilai cin»nilai; "// Menampilkan sebuah teks jika nilai yang tersimpan // lebih besar dari nol if (nilai > 0) cout«"Nilai yang Anda masukkan adalah bilangan positif"; return 0; } Hasil dari program di atas bersifat dinamis, artinya tidak setiap proses eksekusi program akan memberikan hasil yang sama, karena hasilnya tentu tergantung kepada nilai yang dimasukkan oleh user. Pemrograman (huruf == 'A') (huruf == ' a ' ) j (huruf == VI') (huruf == l i ' ) j (huruf == 'U' | (huruf == ' u ' ) (huruf == 'E') (huruf == ' e ' ) {huruf == '0' I (huruf == v c cout«huruf«" adalah salah satu huruf vokal' return 0 ; Contoh hasil yang diberikan dari program di atas adalah sebagai berikut : Masukkan sebuah bilangan bulat: 6 6 lebih besar dari nol dan lebih kecil dari sepuluh Masukkan sebuah huruf : A A adalah salah satu huruf vokal Bab 4: Percabangan 4.3 Struktur Dua Kondisi Masukkan bilangan bulat yang akan diperiksa : 11 11 adalah bilangan ganjil Struktur percabangan jenis ini sedikit lebih kompleks bila dibandingkan dengan Struktur yang hanya memiliki satu buah kondisi. Sebenarnya konsepnya sangat sederhana, yaitu pada Struktur jenis ini terdapat sebuah statemen khusus yang berguna untuk mengatasi kejadian apabila kondisi yang didefinisikan tersebut tidak terpenuhi (bernilai salah). Adapun bentuk umum dari struktur percabangan jenis ini adalah sebagai berikut: if {kondisi} { Statemen_j ika_kondi si_terpenuhi; } else { Statementika_kondisi_tidak_terpenuhi; > Untuk lebih memahami konsep dari struktur percabangan jenis ini, di bawah ini disajikan beberapa contoh program yang mengimplementasikan hal tersebut. Berikut ini adalah contoh program yang akan menentukan suatu bilangan apakah temiasuk ke dalam bilangan genap atau ganjil. Adapun sintaks programnya dapat dilihat di bawah ini. Kode Program 4-3 Coba Anda amati hasil di atas, pada saat program dijalankan user memasukkan bilangan 11 dan nilai tersebut akan disimpan ke dalam variabel bil. Selanjutnya program melakukan pengecekan terhadap nilai yang terdapat dalam variabel tersebut melalui ekspresi (bil % 2 == 0}. Maksud dari ekspresi tersebut adalah melakukan pengecekan apakah nilai dari variabel tersebut habis di bagi dua (sisa = 0) atau tidak. Jika ya, maka bilangan tersebut tentu akan termasuk ke dalam bilangan genap. Namun pada kasus ini karena 11 tidak dapat habis dibagi dua maka program akan memilih statemen yang terdapat pada bagian else. Contoh lain yang dapat diambil untuk menerangkan hal ini adalah pada saat kita membuat program untuk melakukan validasi nilai pada proses pembagian bilangan. Untuk lebih jelasnya perhatikan sintaks program di bawah ini. Kode Program 4-4 t include <iostream> include <iomanip> ttinclude <iostream> using namespace std; using namespace std; inC main() { double X, Y, Z; int itiaint) { int bilangan;: // Meminta user untuk inemasukkan bilangan cout«"Masukkan bilangan yang akan dibagi : "; cout«"Masukkan bilangan bulat yang akan diperiksa : "; cin»bilangan; cin»X; cout«"Masukkan bilangan pembagi : "; cin»Y; // Melakukan pengecekan bilangan apakah habis // dibagi dua atau tidak if (bil % 2 == 0) { cout«bil«" adalah bilangan genap"; } else { cout«bil«" adalah bilangan ganjil"; } // Menghindari terjadinya pembagian dengan 0 if (Y == 0) { cout«"Kesalahan ; Bilangan pembagi tidak boleh NOL"; } else { // Melakukan proses pembagian bilangan X dengan Y Z = X/Y; return 0; Contoh hasil yang akan diberikan oleh program di atas adalah seperti tampak di bawah. Pemrograman C-* // Mengeset presisi dari hasil bagi dengan nilai dua angka // di belakang koma cout.precision = 2; // Menampilkan hasil bagi Bab 4: Percabangan cout«"Hasil bagi = "«Z; 1 int main( ) { int bil; return 0; I cout«"Masukkan sebuah bilangan bulat yang akan diperiksa : } Contoh hasil yang diberikan dari program di atas adalah sebagai berikut : cin»bil; if {bil > 0) { cout«bil«" adalah bilangan POSITIF"; ) else if (bil < 0} { cout«bil«" adalah bilangan NEGATIF"; } else { cout«"Anda memasukkan bilangan NOL"; Masukkan bilangan yang akan dibagi : 10 Masukkan bilangan pembagi :3 Hasil bagi = 3.33 return 0; 4.4 Struktur Tiga Kondisi Struktur jenis ini merupakan struktur percabangan yang biasanya membingungkan para programmer pemula. Percabangan jenis ini merupakan perluasan dari struktur yang memiliki dua kondisi di atas, yaitu dengan menyisipkan (menambahkan) satu atau lebih kondisi ke dalamnya. Bentuk umum dari struktur percabangan yang memiliki lebih dari dua kondisi adalah seperti yang tampak di bawah ini. if (kondisil) { Statemen_jika_kondisil_terpenuhi ; } else i£ (kondisi2) { Statemen_jika_kondisi2_terpenuhi; } else if (kondisi3) { Statemen_jika_kondisi3_terpenuhi ; else [ Statemen_jika_semua_kondisi_diatas_tidak_terpenuhi; } Sebagai contoh untuk menerapkan konsep ini adalah pada saat kita menentukan sebuah bilangan bulat, apakah bilangan tersebut termasuk bilangan positif, negatif atau nol. Adapun sintaks programnya dapat dilihat di bawah ini. Contoh hasil yang diberikan dari program di atas adalah sebagai berikut : Masukkan sebuah bilangan yang akan diperiksa : -6 -6 adalah bilangan NEGATIF Untuk dapat lebih memahami konsep dari percabangan yang memiliki tiga kondisi atau lebih ini, coba Anda ingat kembali pelajaran matematika dalam menentukan akar-akar persamaan kuadrat dengan menggunakan rumus ABC. Kita tahu bahwa bentuk umum dari persamaan kuadrat adalah y = ax2 + bx + c, dan untuk menentukan akar-akar dari persamaan tersebut sebelumnya kita harus melakukan perhitungan koefisien untuk mendapatkan nilai determinan (D) yaitu dengan menggunakan rumus berikut: o « b 2 - 4.a.c flHHHHMHMMHHHHB Setelah nilai determinan diketahui, terdapat tiga kemungkinan yang dapat menentukan akar-akar pesamaan tersebut, yaitu : a. Jika D > 0, maka x} dan x2 bersifat riil dan berbeda. Rumus untuk penentuan nilainya adalah sebagai berikut: x, = (-b + VD) / 2a Kode Program 4-5 x2 = (-b - VD) / 2a ^include <iostream> b. Jika D = 0, maka x, dan x2 bersifat riil dan sama. using namespace std; c. Jika D < 0, maka x: dan x2 bersifat imaginer Pemrograman Bab 4: Percabangan Sekarang kita kembali ke pokok permasalahan kita dengan mengimplementasikan kasus di atas ke dalam program. Adapun sintaksnya dapat dilihat di bawah ini. Kode Program 4-6 ftinclude <iostream> // M&nasukkan header <cmath> untuk memanggil fungsi sqrt() ^include <cmath> int main ( ) { int a, b, c; float D, xl, x2; int flag; untuk nilai nilai nilai x2 = 2 Sebagai contoh terakhir dari penggunaan statemen if bersarang ini, di sini kita akan membuat program yang dapat menentukan nilai indeks (A, B, C, D dan E) dari nilai akhir yang didapatkan oleh seorang mahasiswa. Untuk menjawab kasus ini, misalnya kita telah mempunyai ketentuan untuk penilaian, yaitu sebagai berikut: using namespace std; // Meminta user cout«"Masukkan cout«"Masukkan cout«"Masukkan cout«endl; Masukkan nilai a : 1 Masukkan nilai b : -5 Masukkan nilai c : 6 menentukan koefisien persamaan kuadrat a : "; cin»a; b : " ; cin»b; c : "; cin»c; // Menghitung nilai determinan D = (b*b) - (4*a*c) ; // Menentukan akar-akar persamaan kuadrat if (D > 0) { xl = ( (-b} + sqrt(D)) / (2*a) ; x2 = ((-b) - sqrt(D) ) / (2*a) ; : flag = 1; -} else if (D;== 0)" { xl = ( (-b) + sqrt(Dj) / (2*a) ; x2 = xl; flag - 1; } else { flag = 0; // Menampilkan akar-akar persamaan kuadrat if (flag == l) { // dapat .ditulis dengan if (flag) < cout«:''xl = "«xl«endl; cout«:''x2 = "«x2«endl; } else { J cout«"xl dan x2 imaginer"; return 0; Contoh hasil yang diberikan dari program di atas adalah sebagai berikut : nilai > 85 70 <, nilai < 85 55 ^ nilai < 70 40 <, nilai < 55 nilai < 40 Dengan ketentuan di atas, maka kita dapat menuliskan sintaks dari program tersebut seperti di bawah ini. Kode Program 4-7 finclude <iostream> sing namespace std; it m a i n ( ) { double nilai; char indeks; // Meminta user untuk menentukan nilai // .yang diperoleh dalam bentuk bilangan cdut«"Masukkan nilai yang diperoleh : "; cin»nilai; // Melakukan konversi nilai menjadi nilai indeks if (nilai >= 85) { indeks = ' A ' ; else if (nilai >= 70) ( indeks = ' B ' ; ."} else if (nilai >= 55) { indeks = 1 C ' ; } else if {nilai >= 40) { indeks = 1 D' ,} else { indeks = ' E ' ; } // Menampilkan nilai indeks yang didapatkan cout«"Nilai indeks dari nilai "«nilai«" adalah "«indeks; return 0 ; Berikut ini adalah contoh-contoh program yang mengimplementasikan konsep percabangan dengan menggunakan kata Icunci switch. Sebagai contoh pertama, kita akan membuat program yang dapat menentukan nama hari dari nilai bilangan yang dimasukkan. Sintaksnya dapat dilihat di bawah ini. Contoh hasil dari program di atas adalah sebagai berikut Masukkan nilai yang diperoleh : 76 Nilai indeks dari nilai 76 adalah B Kode Program 4-8 #include <iostream> using namespace std; int main() { int bil; 4.5 Pemilihan Menggunakan Kata Kunci switch cout<-<"Masukkan sebuah bilangan (1..7) : cin»bil; switch (bil ) { case 1 : cout«"Hari ke-"«bil«" adalah MINGGU"; break; case 2 : cout«"Hari ke-"«bil«" adalah SENIN"; break ; case 3 : cout«"Hari ke-"«bil«" adalah SELASA"; break; tt case 4 : cout«"Hari ke- «bil«" adalah RABU"; break ; case 5 : cout«"Hari ke-u«bil«" adalah KAMIS"; break ; case 6 : cout«"Hari ke-"«bil«" adalah JUMAT"; break; case 7 : cout«"Hari ke-"«bil«" : adalah SABTU"; break; default : cout«"Tidak terdapat nama hari ke-"«bil; Selain menggunakan struktur if, C + + juga menawarkan kepada kita untuk dapat melakukan pemilihan dengan menggunakan kata kunci switch. Bentuk urnum dari struktur percabangan yang menggunakan kata kunci switch ini adalah sebagai berikut: switch (ekspresi) { ; case nilai_konstanl case nilai_konstan2 : Statemen_statemen; break; : Statemen_statemen; break; case nilai_konstanN : Statemen_statemen; break; default Statemen_statemen_altematif; Tipe data dari ekspresi di atas haruslah bilangan bulat atau karakter. Selain tipe tersebut, C + + tidak mengizinkan. Sedangkan statenien default berguna untuk mengeksekusi statemen alternatif, yaitu jika nilai yang kita masukkan ternyata tidak sesuai dengan nilai-nilai konstan yang telah didefinisikan. Kita dapat mendefinisikan nilai konstan tersebut dengan menggunakan statatemen case. Dalam bahasa C standar kita diizinkan untuk menuliskan 257 buah statemen case dalam sebuah struktur percabangan yang menggunakan kata kunci switch, sedangkan C++ mengizinkan 16.384 buah. Namun, pada prakteknya sebaiknya kita membatasi pemilihan tersebut untuk efisiensi program yang kita buat. Statemen break di atas berfungsi sebagai statemen peloncatan, hal ini akan kita bahas lebih detil dalam bab pengulangan. Pemrograman C++ return 0; ) Contoh hasil yang diberikan dari program di atas adalah sebagai berikut : Masukkan sebuah bilangan (1..7) : 3 Hari ke-3 adalah SELASA Namun apa yang terjadi jika kita memasukkan nilai yang lebih kecil dari 1 atau lebih besar dari 7? Tanpa menjalankan program tersebut, sebenarnya kita sudah mengetahui bahwa yang akan dieksekusi adalah statemen yang terdapat pada pilihan default. Bab 4: Percabangan Untuk membuktikan hal ini, misalnya kita memasukkan nilai 10, maka program di atas akan memberikan hasil seperti di bawah ini. BAB 5 PENGULANGAN Masukkan sebuah bilangan (1..7): 10 Tidak terdapat nama hari ke-10 Sama halnya seperti struktur percabangan yang menggunakan statemen i f , struktur yang menggunakan statemen switch juga dapat dituliskan secara bersarang, Sebagai gambaran dari pernyataan ini, statemen switch bersarang dapat dirurnuskan seperti di bawah ini. switch (ekspresil) { case nilai_konstanl i { switch (ekspresi2) { case nilai_konstanA t Statemen_statemen; break; case nilai_konstanB i Statemen_statemen; break/ } break; } case nilai_konstan2 * { Statemen_statemen; break; 5.1 Walaupun C + + mengizinkan hal ini, namun pada prakteknya cara seperti ini jarang sekali dijumpai dalam program-program yang ditulis dengan C + + karena alasan efisiensi. Pendahuluan Pengulangan adalah suatu proses yang melakukan statemenstatemen dalam sebuah program secara terus-menerus sampai terdapat kondisi untuk menghentikannya. Struktur pengulangan akan sangat membantu dalam efisiensi program. Untuk mengetahui konsep ini secara mendasar, perhatikan program di bawah ini Kode Program 5-1 ^include <iostream> using namespace std; int main{) { menyukai menyukai menyukai menyukai menyukai menyukai menyukai menyukai menyukai menyukai Pemrograrnan Bab 5: Pengulangan C++"«endl; C++*«endl; C+ + "«endl; C++"«endl; C++"«endl; C++"«endl; C++"«endl; C++"«endl; C++"«endl; C++"«endl; // Untuk pengulangan yang sifatnya menaik (increment) for (variabel = nilai_awal; kondisi; variabe !+•*•) { Statemen_yang_akan_diulang; Maksud dari program di atas adalah untuk menampilkan teks "Saya sangat menyukai C++" sebanyak sepuluh kali. Jika ditinjau dari hasilnya, program di atas memang benar tetapi secara algoritma hal tersebut jelas salah karena tidak efisien, baik dilihat dari segi waktu maupun besarnya ukuran program yang dihasilkan. Mungkin untuk sepuluh kali pengulangan kita belum melihat bahwa program tersebut tidak efisien, namun bagaimana jika kita ingin menampilkan teks di atas sebanyak 500 atau bahkan 1000 kali? Jika kita menggunakan cara seperti di atas, tentu waktu dan tenaga kita akan terbuang sia-sia. Maka dari itu, dalam menghadapi kasus-kasus seperti ini, kita hams menggunakan struktur pengulangan. Namun untuk melakukan pengulangan statemen, tentunya kita harus mengenal dengan baik aturan-aturan yang terdapat di dalamnya sehingga kita dapat terhindar dari kesalahan-kesalahan yang tidak diinginkan. Dalam bahasa C+ + terdapat tiga buah jenis struktur pengulangan, yaitu struktur for, struktur while dan struktur do-while. Penjelasan mengenai setiap jenis tersebut dapat dilihat dalam masing-masing sub bab di bawah ini. 5.2 // Untuk pengulangan yang sifatnya menurun (decrement) for ( var i abel = ni lai_awal ; kondi si ; variabel - - ) { Statemen_yang_akan_diulang; } Sebagai catatan bahwa jika kita melakukan pengulangan yang sifatnya menaik (increment) maka nilai awal dari variabel yang kita definisikan haruslah lebih kecil dari nilai akhir yang dituliskan dalam kondisi (ekspresi). Sebaliknya, jika kita akan melakukan pengulangan yang sifatnya menurun (decrement) maka nilai awal harus lebih besar dari nilai akhir. Berikut ini contoh program yang menunjukkan pengulangan dengan menggunakan struktur for. Program akan ditulis dalam dua tipe, yaitu tipe menaik dan menurun. a. Pengulangan yang sifatnya menaik Kode Program 5-2 ttinclude <iostream> using namespace std; int m a i n ( ) { int C; for ( C = 0 ; C<10; C + + ) { cout«"Saya sangat menyukai C+ + "«endl; } Struktur for return 0; } Struktur pengulangan jenis ini digunakan untuk melakukan pengulangan yang telah diketahui banyaknya. Jenis ini merupakan jenis struktur pengulangan yang paling mudah dipahami. Untuk melakukan pengulangan dengan menggunakan struktur ini, kita harus memiliki sebuah variabel sebagai indeksnya. Namun perlu sekali untuk diperhatikan bahwa tipe data dari variabel yang akan digunakan sebagai indeks haruslah tipe data yang mempunyai urutan yang teratur, misalnya tipe data int (0,1,2,...) atau char ('a 1 , 'b1, 'c',...}. Adapun bentuk umum dari struktur for tampak di bawah ini. adalah seperti yang Pemrograman C++ b. Pengulangan yang sifatnya menurun Kode Program 5-3 ttinclude <iostream> using namespace std; int m a i n ( ) { int C; for (C=10; 00; C--) { cout«"Saya sangat menyukai C++"«endl, J return 0; Bab 5: Pengulangan Kedua program di atas jika dijalankan akan menghasilkan hasil yang sama, yaitu sebagai berikut: Say a sang at menyukai C+ + Say a sang at menyukai C + + Saya sang at menyukai C+ + Saya sangat menyukai C+ + Saya sangat menyukai C+ + Saya sangat menyukai C + + Saya sangat menyukai C+ + Saya sangat menyukai C+ + Saya sangat menyukai C+ + Saya sangat menyukai C+ + PENGULANGAN MENAIK 1 2 3 4 5 6 7 8 9 10 PENGULANGAN MENURUN 10 9 Jika Anda masih merasa bingung tentang perbedaan antara pengulangan yang sifatnya menaik dan menurun, coba perhatikan kembali program di bawah ini. Kode Program 5-4 ^include <iostream> using namespace std; Secara default, struktur for akan menaikkan atau menurunkan nilai dari sebuah variabel indeks dengan nilai 1, namun bagaimana jika kita ingin menaikkan nilai tersebut dengan nilai yang lain? Jawabnya adalah dengan menggantikan operator increment atau decrement dengan statemen yang kita definisikan sendiri. Berikut ini contoh program yang menaikkan nilai variabel indeks dengan nilai 5. int m a i n ( ) { CQUt«" PENGULANGAN MENAIK"«endl ; for (C=0; C<10; C + + ) { cout«C+l«endl ; // Membuat spasi vertikal c o u t « ' \ n ' ; // dapat ditulis cout«endl/ C0ut«" PENGULANGAN MENURUN"«endl ; for (J=10; J>0; J--) { cout«J«endl ,* Kode Program 5-5 ttinclude <iostream> using namespace std; return 0; ^Hi^HH^HMHHHMMHH^IHM^HHBHI Hasil yang akan diberikan dari program di atas adalah sebagai berikut ; Pemrograman C-» int main() { for (in 00;. C<25; C+5) { cout«C+l«endl ; ) return 0; Bab 5: Pengulangan Hasil yang akan diberikan oleh program di atas adalah sebagai berikut: 1 5 10 15 20 25 Nilai A = a Nilai B = 0 Nilai C = 1 Nilai A = b Nilai B = 5 Nilai C = 10 Nilai A = c Nilai B = 10 Nilai C - 100 5.2.1 Struktur for dengan Banyak Variabel Struktur for di dalam C + + dapat juga melibatkan lebih dari satu variabel, namun yang jelas satu diantaranya akan digunakan sebagai indeks pengulangan.Untuk memahami konsepnya, berikut ini disajikan sebuah contoh program dimana di dalamnya terdapat Struktur for yang melibatkan tiga buah variabel, yaitu A, B dan C. Nilai A = d Nilai B = 15 Nilai C = 1000 ) ^ ''' Nilai A = e Nilai B = 20 Nilai C = 10000 Kode Program 5-6 ^include <iostream> 5.2.2 using namespace std; int main() { char A; int B; int C; for (A='a'( // variabel A (bertipe char) akan digunakan // sebagai indeks pengulangan // variabel B akan digunakan untuk // menampung nilai penjumlahan // variabel C akan digunakan untuk // menampung nilai perkalian C=l; A<='e'; A++, B=B+5, C=C*10) ( cout«"Nilai A = "«A«endl; cout«"Nilai B = "«B«endl; cout«"Nilai C = "«C«endl; cout«endl; return 0 ; Hasil yang akan diperoleh dari program di atas sebagai berikut : Pemrograman C-* Struktur for Bersarang Sama halnya seperti pada percabangan, pada Struktur pengulangan juga dapat juga diterapkan pengulangan bersarang (nested looping). Pada bagian ini hanya akan diterangkan pengulangan bersarang dengan menggunakan Struktur for. Konsepnya sangat sederhana, yaitu dalam sebuah pengulangan terdapat pengulangan yang lainnya. Bentuk umum dari struktur for bersarang dapat dirumuskan seperti di bawah ini. for (variabell»nilai_awal; kondisil; variabell++) { for (variabe!2=nilai_awal; kondisi2; variabel2++) { for (variabe!3-nilai_awal; kondisiS; variabe!3++) { Statemen_statemen_yang_akan_diulang; Jika kita lihat dari rumusan di atas, pada setiap pengulangan pertama program akan menyelesaikan pengulangan kedua.Begitu juga pada setiap pengulangan kedua, program akan menyelesaikan Bab 5: Pengulangan pengulangan ketiga, begitu seterusnya. Untuk lebih jelasnya, perhatian contoh program berikut dimana di dalamnya terdapat dua struktur for yang saling berkaitan. Kode Program 5-7 tidak akan pernah dieksekusi oleh program. Adapun bentuk umum dari struktur pengulangan while ini adalah seperti yang tampak di kawah ini. j_tt__^^^^^^___^^__^^^^ while (kondisi) { Statemen_statemen_yang_akan_diulang; > ^include <iostream> * Berikut ini contoh program di atas yang ditulis kembali dengan menggunakan struktur while. using namespace std; int main ( ) ( for (int >=1; j<=10; for (int k=l; k<=j; k+ cout«k*j«' ' ; } cout«' \n' -, Kode Program 5-8 ^include <iostream> using namespace std; int m a i n ( ) ( int C; return 0; } // Melakukan inisialisasi nilai terhadap // varlabel C Jika dijalankan, program di atas akan memberikan hasil sebagai berikut : while (C<10) { cout«"Saya sangat menyukai C++"«endl; C++; /* Statemen ini berguna untuk menaikkan nilai, dan setelah bernilai 10, maka pengulangan akan dihentikan */ 1 24 369 4812 16 5 10 15 20 25 6 12 18 24 30 36 7142128354249 8 16 24 32 40 48 56 64 91827364554637281 10 20 30 40 50 60 70 80 90 100 5.3 // Mendeklarasikan varaiebl C sebagai // indeks pengulangan return 0; Sama seperti sebelumnya, program ini juga akan memberikan hasil sebagai berikut : Struktur while Struktur pengulangan jenis ini adalah pengulangan yang melakukan pengecekan kondisi di awal blok struktur. Kita tahu bahwa pengulangan hanya akan dilakukan jika kondisi yang didefinisikan di dalamnya terpenuhi (bemilai benar). Hal ini berarti jika kondisi yang didefinisikan tidak terpenuhi (bernilai salah) maka statemen-statemen yang terdapat dalam blok pengulangan pun Peinrograman Saya sangat menyukai C+ + Saya sangat menyukai C+ + Saya sangat menyukai C+ + Saya sangat menyukai C + + Saya sangat menyukai C+ + Saya sangat menyukai C+ + Saya sangat menyukai C+ + Saya sangat menyukai C + + Saya sangat menyukai C+ + Saya sangat menyukai C+ + Bab 5: Pengulangan Namun perlu sekali diperhatikan bahwa untuk melakukan pengulangan dengan menggunakan struktur while, kita hams berhati-hati dalam menentukan inisialisasi nilai awal dan memanipulasi nilai tersebut supaya pengulangan akan berhenti sesuai dengan yang diinginkan. Bagi programmer pemula, hal ini biasanya sering terlupakan sehingga pengulangan akan dilakukan secara terus-menerus karena kondisi yang didefinisikan selalu bernilai benar. Berikut ini contoh program yang akan melakukan pengulangan secara terus menerus karena tidak terdapatnya staternen untuk menghentikan pengulangan. Kode Program 5-9 // Contoh Program yang SALAH cout«"Masukkan bilangan yang akan dihitung : "; cin»B!LC = BIL; COUt«C«"! - »; while (C >= 1) { faktorial *= C; // bentuk singkat // dari faktorial faktorial * C/ if (C != 1) { COUt«C«" X "; } else { cout«C«" = " ; } C--; // Menurunkan nilai yang terdapat pada variabel C } cout«f aktorial ; return 0; #include <iostream> Program di atas adalah program yang akan menghitung nilai faktorial dari sebuah bilangan bulat. Adapun contoh hasil yang akan diberikan oleh program di atas adalah seperti yang tampak di bawah ini. using namespace std; int main() { int C; // Mendeklarasikan varaiebl C // sebagai indeks pengulangan C - 0; // Melakukan inisialisasi nilai terhadap variabel C while (C<10) { cout«"Saya sangat menyukai C++"«endl; /* Pada baris ini tidak terdapat staternen sehingga C akan terus bernilai 0 dan kondisi C<10 akan selalu bernilai benar sehingga pengulangan akan terus dilakukan */ } return 0; Masukkan bilangan yang akan dihitung : 5 5! = 5 x 4 x 3 x 2 x 1 = 120 Selain contoh-contoh di atas, masih banyak contoh pengulangan lain yang dapat diterapkan dengan menggunakan struktur while, termasuk penggunaan struktur whi 1 e bersarang. Berikut ini contoh program yang mengimplementasikannya. Kode Program 5-11 #include <iostream> Struktur pengulangan while juga dapat melakukan pengulangan yang sifatnya menurun (decrement). Berikut ini contoh program yang mengimplementasikan hal tersebut. using namespace std; int main() { int J = 10; int K; Kode Program 5-10 - while (J >= 1) ( K = 1; while (K <= J) { cout«K*J«' ', K++; } cout«' \n' ; J--; ^include <iostream> using namespace std; int main{) ( int BIL; long faktorial = 1; Pemrograrnan Bab 5: Pengulangan Kode Program 5-12 ^include <iostream> return 0; using namespace std; Hasil yang akan diperoleh dari program di atas adalah sebagai berikut : int main{) { int C = 0; 10 20 30 40 50 60 70 80 90 100 do { 91827364554637281 8 16 24 32 40 48 56 64 7 14 21 28 35 42 49 6 12 18 24 30 36 5 10 15 20 25 48 1216 369 24 1 5.4. cout«"Saya sangat menyukai C++"«endl; C++; } while (C < 10); return 0; Sama seperti sebelumnya, program di atas juga akan memberikan hasil sebagai berikut: Struktur do-while Berbeda dengan struktur while yang melakukan pengecekan kondisi di awal blok perulangan, pada struktur do-while kondisi justru ditempatkan di bagian akhir. Hal ini tentu menyebabkan struktur pengulangan ini minimal akan melakukan satu kali proses walaupun kondisi yang didefinisikan tidak terpenuhi (bernilai salah). Berikut ini bentuk umum dari struktur do-while. do { Statemen_yang_akan_diulang; . } while {kondisi);--" Sama seperti lainnya, struktur pengulangan jenis ini juga dapat digunakan untuk kasus-kasus di atas, hanya saja kita harus teliti dan berhati-hati dalam mendefinisikan kondisi yang terdapat di dalamnya. Berikut ini contoh program yang diambil dari kasus sebelumnya, namun di sini kita akan menggunakan struktur do-while. Pemrograman C++ Saya sangat menyukai C + + Saya sangat menyukai C+ + Saya sangat menyukai C+ + Saya sangat menyukai C+ + Saya sangat menyukai C+ + Saya sangat menyukai C+ + Saya sangat menyukai C+ + Saya sangat menyukai C+ + Saya sangat menyukai C + + Saya sangat menyukai C+ + Contoh lain yang dapat digunakan untuk mengimplementasikan jenis struktur do-while adalah pembuatan program untuk menentukan nilai faktor persekutuan terbesar dari dua buah bilangan bulat. Misalnya kita memasukkan dua buah bilangan bulat yaitu 8 dan 12, maka faktor persekutuan terbesar dari kedua bilangan tersebut adalah 4. Untuk lebih jelasnya perhatikan label di bawah ini. Bilangan 8 12 Faktor 1,2,4,8 1,2,3,4,6,12 Bab 5: Pengulangan Seperti yang kita lihat di atas bahwa faktor yang sama dan paling jbesar dari bilangan 8 dan 12 adalah 4. Di sini, kita akan membuat program yang dapat menentukan faktor persekutuan terbesar tersebut dengan menggunakan struktur do - wh i 1 e. Adapun sintaks programnya adalah sebagai berikut : Kode Program 5-13 ^include <iostream> using namespace std; int mainO { int J - 10; inC K; COUt«K*J«' * ; int main() { int Bill, Bil2; int sisa; K++; : "; cin»Bill; : "; cin»Bi!2; ) while (K <= J); cout«' \n' ; J—; } while (J >=*!); return 0; // Melakukan pertukaran nilai if (Bill < Bil2) { int temp = Bill; Bill = Bil2; Bil2 = temp; 1 Program tersebut akan memberikan hasil sebagai berikut 10 20 30 40 50 60 70 80 90 100 918273645 546372 81 8 16 24 32 40 48 56 64 7 14 21 28 35 42 49 do { sisa = Bill % Bil2; Bill = Bil2; Bil2 = sisa; } while (sisa != 0) ; 612 18243036 510 152025 4 8 12 16 369 24 1 cout«"\nFaktor persekutuan terbesar = "«Bill; > include <iostream> do { K = 1; do { using namespace std; cout«"Masukkan bilangan pertama cout« "Masukkan bilangan kedua Kode Program 5-14 return 0; Contoh hasil yang diperoleh dari program di atas adalah sebagai berikut: Masukkan bilangan pertama : 8 Masukkan bilangan kedua : 12 Faktor persekutuan terbesar = 4 Apa yang dapat Anda simpulkan tentang jenis-jenis pengulangan? Jika kita amati, sebenarnya setiap jenis tersebut dapat diterapkan pada kasus apapun, asalkan kita mendefinisikannya dengan benar. Namun pada prakteknya, kita harus pandai dalam memilih jenis pengulangan yang sesuai dengan kasus yang kita hadapi. Sekarang kita akan mencoba melakukan pembuatan program dengan menggunakan struktur do-while bersarang. Adapun sintaks programnya dapat dilihat di bawah ini. Pemrograman Bab 5: Pengulangan 5.5 cout«"Nilai C = "«C; Statemen Peloncatan HBHI^^^^IHHHHIHl^lHl^^^^ffi return 0; Jika kita menggunakan struktur pengulangan, seringkali kita juga dituntut untuk melakukan peloncatan statemen. Kata 'peloncatan1 di sini artinya kita memaksa agar pengeksekusian statemen berjalan sesuai urutan yang kita inginkan, yaitu dengan cara meloncat dari statemen yang satu ke statemen yang lain. Dalam bahasa C + + , terdapat 4 fitur yang berguna untuk melakukan hal ini, yaitu kata kunci break, continue, goto dan fungsi exit ( ) . 5.5.1 Menggunakan Kata Kunci break Kata kunci ini berfungsi untuk menghentikan proses pengulangan dan program akan langsung meloncat ke statemen yang berada di bawah blok pengulangan yang bersangkutan. Untuk dapat memahami penggunaannya, di sini kita akan membuat contoh program yang dapat menuliskan teks " C on t oh pengulangan dalam C++" sebanyak 10 kali. Namun perlu untuk diperhatikan bahwa di sini kita akan memaksa proses pengulangan dengan mendefinisikan kondisi yang selalu bernilai benar. Adapun struktur pengulangan yang kita pilih untuk menjawab kasus ini adalah struktur while. Sintaks programnya dapat dilihat di bawah ini. Kode Program 5-15 ^include <iostream>, using namespace std; // Mendeklarasikan tipe baru yang hanya memiliki // nilai FALSE dan TRUE enum BOOLEAN { FALSE, TRUE }; int main() { // Mendeklarasikan variabel seb&gai indeks pengulangan // dan diisi dengan nilai 0 int C = 0; while (TRUE) { cout«"Contoh pengulangan dalam C++"«endl; if (c == 9) break; C++; Pemrograman C-* } Jika dijalankan, program di atas akan memberikan hasil sebagai berikut: Contoh pengulangan Contoh pengulangan Contoh pengulangan Contoh pengulangan Contoh pengulangan Contoh pengulangan Contoh pengulangan Contoh pengulangan Contoh pengulangan Contoh pengulangan Nilai C = 9 dalam C + + dalam C + + dalam C + + dalam C + + dalam C + + dalam C + + dalam C+ + dalam C + + dalam C + + dalam C+ + Statemen while (TRUE) merupakan statemen yang memaksa program untuk selalu melakukan pengulangan, sehingga program tersebut harus memiliki statemen yang dapat menghentikan pengulangan tersebut. Dan untuk melakukan hal ini, kita harus menggunakan kata kunci break. Karena kita ingin melakukan pengulangan sebanyak sepuluh kali maka kita harus menempatkan kata kunci break pada saat variabel C bernilai 9. Kenapa 9? Jawabnya adalah karena nilai indeks yang kita definisikan dimulai dari 0. Setelah itu program akan meloncat langsung ke statemen yang terdapat di bawah blok pengulangan tanpa mengeksekusi lagi statemen C++; (baris program yang berada di bawah kata kunci break) yang terdapat di dalam blok pengulangan. 5.5.2 Menggunakan Kata Kunci continue Berbeda sekali dengan kata kunci break yang berguna untuk menghentikan pengulangan, kata kunci continue ini justru berfungsi untuk melanjutkan proses pengulangan. Dengan kata lain, kata kunci ini akan menyebabkan program meloncat ke statemen awal yang terdapat dalam blok pengulangan. Bab 5: Pengulangan Berikut ini adalah contoh program dimana di dalamnya terdapat penggunaan struktur pengulangan yang menggunakan kata kunci continue. juga tidak perlu dilakukan pendeklarasian seperti halnya sebuah variabel karena label hanya digunakan untuk tanda saja sehingga tidak memiliki tipe data. Kode Program 5-16 Untuk lebih jelasnya, perhatikan program di bawah ini dimana di dalamnya terdapat struktur pengulangan yang menggunakan kata kunci goto. # include <iostreaia> using namespace std; Kode Program 5-17 enuiti BOOLEAN ( FALSE, TRUE }; int tfinclu.de <iostream> main ( ) { int X; BOOLEAN STOP = FALSE; while (1STOP) { cout«"Masukkan nilai X : if (X <= 0) { STOP = TRUE; continue; J using namespace std; enum BOOLEAN { FALSE, TRUE }; int main{) { int C = 0; cin»X; while (TRUE) { cout«C+l«end; if {C == 9) { goto MyLabel; \ return 0; C++; 1 Untuk mengetahui penggunaan kata kunci continue, di atas menggunakan variabel STOP. Sebenarnya pengulangan akan dihentikan ketika terdapat statemen STOP = TRUE, tetapi karena di bawah statemen tersebut terdapat kata kunci continue maka pengulangan akan dilanjutkan kembali. Hal ini merupakan bukti nyata bahwa kata kunci continue itu berfungsi untuk meneruskan proses pengulangan. Pada program di atas, pengulangan baru akan dihentikan ketika user memasukkan nilai X yang lebih besar dari 0. 5.5.3 // Meloncat ke label MyLabel Menggunakan Kata Kunci goto Jika ditinjau dari bahasan mengenai struktur pengulangan, penggunaan kata kunci goto ini dapat mewakili penggunaan kata kunci break maupun continue, tergantung dimana kita menempatkan label. Label di sini berfungsi untuk menyatakan lokasi yang akan dituju. Perlu juga diperhatikan bahwa untuk menuliskan suatu label haruslah menggunakan tanda titik dua (:) di belakang nama label tersebut. Dalam mendefinisikan nama label Pemrograman C++ MyLabel: // Lokasi yang akan dituju return 0; } Hasil dari program di atas adalah sebagai berikut 1 2 3 4 5 6 7 8 9 10 Jika kita amati secara teliti, penggunaan kata kunci goto pada kasus ini sama halnya seperti penggunaan kata kunci break. Bab 5: Pengulangan Kata kunci goto tidak hanya dapat digunakan dalam struktur pengulangan saja, melainkan dapat digunakan dimana saja. Berikut ini contoh lain dari penggunaan kata kunci goto. BOOLEAN { FALSE, TRUE }; ,t maint) ( Kode Program 5-18 int X = 1, Y; while (TRUE) { cout«"Masukkan nilai Y : "; cin»Y; ^include <iostream> using namespace std; // Menghindari pembagian dengan NOL if (Y == 0) { exit(O); // KeJuar dari aplikasi int maint) ( cout«"Mengungkap Rahasia C++"«endl; ) goto BR; // Meloncat ke label BR return 0; cout«"01eh : Budi Raharjo"«endl; cout«"Tahun 20Q3"«endl; } BRi // Mendefinisikan label dengan nama BR cout«"Penerbit INFORMATIKA Bandung"; return 0; } Jika dijalankan, program di atas akan memberikan hasil sebagai berikut: Parameter 0 yang terdapat pada fungsi exit ( ) di atas berfungsi untuk melakukan terminasi program secara normal. Parameter yang lain yang dapat dilewatkan pada fungsi ini adalah EXIT_SUCCESS dan EXIT_FAILURE. Namun perlu untuk diperhatikan bahwa dalam menggunakan fungsi exit { ) kita hams memasukkan file header stdlib.h. (untuk C++ lama) atau <cstdlib> (untuk C++ standar). Mengungkap Rahasia C+ + Penerbit INFORMATIKA Bandung Hal ini disebabkan karena penggunaan kata kunci goto yang memaksa program untuk meloncat ke label yang dituju. 5.5.4 Menggunakan Fungsi exit () Berbeda dengan statemen-statemen peloncatan yang lain, fungsi e x i t ( ) ini berfungsi untuk proses terminasi atau keluar dari program. Berikut ini adalah contoh program yang mengimplementasikan hal tersebut. Kode Program 5-19 ^include <iostream> tfinclude <cstdlib> using namespace std; Pemrograman Bab 5: Pengulangan