Tuesday, December 20, 2016

Bab 1. C++ Untuk Pemula



Elemen Dasar C++







Pengantar Program C++

Pada bab ini, Anda akan belajar elemen-elemen dasar dan konsep-konsep bahasa pemrograman C++ untuk menciptakan program C++. Untuk memperjelas contoh-contoh dalam mengilustrasikan beragam konsep, akan diberikan penjelasan-penjelasan yang akan mengawal pemahaman Anda. Pada bagian ini, akan disajikan sebuah contoh pemrograman C++. Pada titik ini, Anda tidak perlu cemas dengan detil program. Anda hanya perlu mengetahui pengaruh sebuah statemen keluaran, yang dikenalkan pada program ini.

Contoh 1.1


//********************************************************
// Ini merupakan sebuah contoh program C++. Ia menampilkan
// empat baris teks, termasuk penjumlahan atas dua angka.
//********************************************************
#include <iostream>

using namespace std;

int main()
{
    int angka;

    angka = 6;

    cout << "Program C++ pertamaku." << endl;
    cout << "Penjumlahan atas 2 dan 3 = " << 5 << endl;
    cout << "7 + 8 = " << 7 + 8 << endl;
    cout << "Angka = " << angka << endl;

    return 0;
}

Keluaran Program: (Ketika Anda mengkompilasi dan mengeksekusi program ini, empat baris berikut ditampilkan pada layar).

Program C++ pertamaku.
Penjumlahan atas 2 dan 3 = 5
7 + 8 = 15
Angka = 6

Empat baris teks tersebut ditampilkan dengan mengeksekusi keempat statemen berikut.

cout << "Program C++ pertamaku." << endl;
cout << "Penjumlahan atas 2 dan 3 = " << 5 << endl;
cout << "7 + 8 = " << 7 + 8 << endl;
cout << "Angka = " << angka << endl;

Selanjutnya, akan dijelaskan bagaimana ini terjadi. Pertama-tama perhatikan statemen berikut:

cout << "Program C++ pertamaku." << endl;

Ini merupakan sebuah contoh statemen keluaran C++. Ia menyebabkan komputer untuk mengevaluasi ekspresi yang berada sesudah simbol << dan menampilkan hasilnya pada monitor.

Biasanya, sebuah program C++ memuat beragam ekspresi seperti aritmatik dan string. Sebagai contoh, 7 + 8 merupakan suatu ekspresi aritmatik. Segala sesuatu yang diapit oleh sepasang tanda kutip ganda merupakan sebuah string. Sebagai contoh, “Program C++ pertamaku.” dan “7 + 8 = “ adalah dua buah string. Ekspresi aritmatik dievaluasi sesuai dengan aturan-aturan operasi aritmatik, yang umumnya sama seperti yang Anda pelajari pada aljabar. Nanti pada bab ini, pada Anda akan dijelaskan bagaimana ekspresi aritmatik dan string dibentuk dan dievaluasi.

Selain itu, perhatikan bahwa di dalam sebuah statemen keluaran, endl menyebabkan titik penyisipan berpindah ke awal baris berikutnya. (Di layar, titik penyisipan adalah dimana kursor berada). Oleh karena itu, statemen sebelumnya menyebabkan sistem untuk menampilkan baris teks berikut pada layar.

Program C++ pertamaku.

Sekarang, perhatikan statemen berikut:

cout << "Penjumlahan atas 2 dan 3 = " << 5 << endl;

Statemen keluaran ini memuat dua ekspresi. Ekspresi pertama (sesudah << pertama) adalah “Penjumlahan atas 2 dan 3 = “ dan ekspresi kedua (setelah << kedua) memuat angka 5. Ekspresi “Penjumlahan atas 2 dan 3 = “ merupakan sebuah string. (Perhatikan spasi yang berada setelah =). Ekspresi kedua, yang memuat angka 5 memiliki nilai evaluasi 5. Jadi, keluaran dari statemen tersebut adalah:

Penjumlahan atas 2 dan 3 = 5

Sekarang, perhatikan statemen berikut:

cout << "7 + 8 = " << 7 + 8 << endl;

Pada statemen keluaran ini, ekspresi “7 + 8 = “, adalah sebuah string. Perhatikan ekspresi kedua, 7 + 8. Ekspresi ini memuat angka 7 dan angka 8 dan operator +. Oleh karena itu, hasil ekspresi 7 + 8 adalah penjumlahan atas 7 dan 8, yang menghasilkan 15. Jadi, keluaran dari statemen tersebut adalah:

cout << "7 + 8 = " << 7 + 8 << endl;

Terakhir, perhatikan statemen:

cout << "Angka = " << angka << endl;

Statemen ini memuat string “Angka = “ yang merupakan sebuah string, dan kata angka. Statemen angka = 6; menugaskan nilai 6 kepada angka. Oleh karena itu, ekspresi angka, yang berada setelah  << yang kedua, dievaluasi menjadi 6. Sekarang dapat dipahami bahwa keluaran dari statemen tersebut adalah:

Angka = 6

Statemen terakhir, yaitu,

return 0;

memberikan nilai 0 kepada sistem operasi ketika program berhenti. Statemen ini akan dijelaskan nanti pada bab ini.

Pada bab berikutnya, sampai dijelaskan bagaimana mengkonstruksi sebuah program C++ dengan benar, akan digunakan statemen-statemen keluaran seperti yang baru saja dijelaskan untuk mendeskripsikan beragam konsep. Setelah membaca bab ini, Anda diharapkan dapat menuliskan program C++ sederhana untuk melakukan komputasi sederhana dan menampilkan hasilnya.

Sebelum meninggalkan bagian ini, akan diberikan beberapa poin untuk pemahaman Anda. Program C++ merupakan sekumpulan fungsi, salah satu fungsi tersebut adalah fungsi main. Fungsi adalah sekumpulan statemen, dan ketika dieksekusi, ia diharapkan menyelesaikan tugas tertentu. Contoh program sebelumnya memuat fungsi main.

Baris pertama program adalah:

#include <iostream>

yang membuat Anda dapat menggunakan cout (objek terpradefinisi) untuk menghasilkan keluaran dan manipulasi endl. Baris kedua, yang merupakan

using namespace std;

dipakai agar Anda diijinkan untuk menggunakan cout dan endl tanpa harus menggunakan prefiks ::. Ini berarti bahwa jika Anda tidak mencantumkan statemen ini, maka cout harus dipakai sebagai std::cout dan endl harus dipakai sebagai std::endl. Akan dijelaskan hal ini nanti pada bab ini.

Baris ketujuh memuat:

int main()

Ini merupakan kepala dari fungsi main. Baris kedelapan memuat sebuah kurung kurawal kiri. Ia menandai awal tubuh fungsi main. Kurung kurawal kanan (pada baris terakhir program) merupakan pasangan dari kurung kurawal kiri dan menandai akhir tubuh fungsi main. Perhatikan bahwa di dalam C++, << merupakan sebuah operator, yang dinamakan dengan operator penyisipan.


Dasar Program C++

Program C++ adalah kumpulan yang memuat satu atau lebih subprogram, yang dinamakan fungsi. Beberapa fungsi, yang dikenal dengan fungsi standar atau fungsi terpradefinisi, adalah bagian dari sistem. Tetapi untuk menyelesaikan kebanyakan pekerjaan yang diinginkan, programer harus belajar menulis fungsi buatan sendiri.

Setiap program C++ harus memuat sebuah fungsi, yang dinamakan main. Jadi, jika sebuah program C++ hanya memuat satu fungsi, fungsi itu haruslah fungsi main. Sampai bab 5, selain menggunakan fungsi-fungsi standar, Anda kebanyakan akan bersinggungan dengan fungsi main.

Jika Anda belum pernah menggunakan bahasa pemrograman, program C++ pada contoh 1.1 akan tampak seperti bahasa asing bagi Anda. Untuk memahami kalimat pada bahasa asing, Anda harus belajar alfabet, kata, dan tata-bahasanya (grammer). Hal ini juga berlaku pada bahasa pemrograman. Untuk menuliskan program, Anda harus belajar simbol-simbol spesial, kata-kata, dan aturan-aturan sintaksnya. Aturan sintaks memberitahu Anda statemen (instruksi) mana yang sah (yang dapat diterima oleh bahasa pemrograman), dan mana yang tidak. Anda juga harus belajar aturan semantik, yang menentukan makna instruksi.

Pada bagian ini, Anda akan belajar perihal beberapa simbol spesial pada program C++. Beberapa simbol lain akan diintroduksi bila beberapa konsep baru dijumpai pada bab-bab mendatang. Sama halnya, sintaks dan aturan semantik akan diintroduksi dan didiskusikan secara progresif dengan berjalannya bab-bab pada buku ini.


Komentar
Program yang Anda tulis harus jelas bukan hanya untuk Anda, tetapi juga bagi pembaca program Anda. Sebagai bagian dari praktek pemrograman yang baik, komentar merupakan bagian yang tidak terelakkan. Secara umum, komentar dapat digunakan untuk mengidentifikasi pembuat program, memberikan tanggal kapan program ditulis atau dimodifikasi, memberikan penjelasan singkat atas program, dan menjelaskan makna statemen kunci pada sebuah program.

Komentar diperuntukkan bagi pembaca program, bukan untuk kompiler. Jadi, ketika kompiler mengkompilasi sebuah program untuk memeriksa kesalahan sintaks, ia mengabaikan semua komentar.

Program pada contoh 1.1 memuat komentar berikut:

// Ini merupakan sebuah contoh program C++. Ia menampilkan
// empat baris teks, termasuk penjumlahan atas dua angka.

Ada dua jenis komentar pada program C++, yaitu komentar baris-tunggal dan komentar baris-jamak.

Komentar baris-tunggal diawali dengan // dan dapat ditempatkan di mana saja. Segala sesuatu yang berada setelah // pada suatu baris diabaikan oleh kompiler. Sebagai contoh, perhatikan statemen berikut:

cout << "7 + 8 = " << 7 + 8 << endl;

Anda dapat menempatkan komentar di akhir baris sebagai berikut:

cout << "7 + 8 = " << 7 + 8 << endl;  // menampilkan: 7+ 8 = 15

Komentar ini memuat makna bagi programer pemula.

Komentar baris-jamak diapit di antara /* dan */. Kompiler akan mengabaikan segala sesuatu yang diapit oleh /* dan */. Sebagai contoh, berikut merupakan sebuah contoh komentar baris-jamak:

/*
   Anda dapat mencantumkan komentar yang menempati
   beberapa baris.
*/


Simbol-Simbol Spesial
Unit individual terkecil pada sebuah program yang ditulis pada sembarang bahasa pemrograman adalah sebuah token. Token pada C++ dikategorikan sebagai simbol spesial, simbol kata, dan pengenal (identifier).

Berikut adalah beberapa simbol spesial dalam C++:

+      -      *      /
.      ;      ?      ,
<=     !=     ==     >=

Baris pertama mencakup simbol-simbol matematik untuk penjumlahan, pengurangan, perkalian, dan pembagian. Baris kedua memuat tanda-tanda baca yang diambil dari tata-bahasa Inggris. Perhatikan bahwa koma juga merupakan simbol spesial. Dalam C++, koma dipakai untuk memisahkan tiap item di dalam sebuah daftar atau senarai (list). Tanda baca titik-koma dipakai untuk mengakhiri setiap statemen C++. Anda dapat menciptakan simbol kosong (blank) dengan menekan tombol spasi (hanya sekali) pada papanketik. Baris ketiga memuat beberapa token yang terdiri-dari dua karakter yang dipandang sebagai simbol tunggal. Tidak ada karakter yang boleh ditempatkan di antara dua karakter di dalam token, bahkan tidak karakter spasi.


Katakunci
Kategori kedua dari token adalah simbol kata. Beberapa simbol kata mencakup:

int, float, double, char, const, void, return

Setiap simbol kata di atas dikenal dengan katakunci. Huruf-huruf tersebut harus berupa huruf kecil. Seperti simbol spesial, setiap simbol kata dipandang sebagai simbol tunggal. Selain itu, simbol kata tidak dapat didefinisikan-ulang di dalam sembarang program; yaitu, setiap katakunci tidak dapat dipakai untuk tujuan lain selain yang telah ditetapkan oleh kompiler.





Pengenal
Kategori ketiga dari token adalah pengenal. Pengenal adalah nama-nama yang muncul pada sebuah program, seperti variabel, konstanta, dan fungsi. Semua pengenal harus mentaati aturan-aturan pengenal dalam C++.

Pengenal: Sebuah pengenal C++ memuat huruf, dijit, dan karakter garis-bawah (_) dan harus diawali dengan sebuah huruf atau garis-bawah.

Beberapa pengenal telah terpradefinisi; selebihnya dapat didefinisikan oleh pengguna. Dalam program C++ pada contoh 1.1, cout merupakan pengenal terpradefinisi dan angka adalah pengenal yang diciptakan oleh pengguna. Dua pengenal terpradefinisi yang akan sering Anda jumpai adalah cout dan cin. Anda telah melihat efek penggunaan dari cout. Nanti pada bab ini, Anda akan belajar bagaimana cin, yang dipakai untuk membaca data, bekerja. Tidak seperti katakunci, pengenal terpradefinisi dapat didefinisikan-ulang, tetapi direkomendasikan agar Anda tidak melakukannya.

Pengenal hanya terdiri-dari huruf, dijit, dan karakter garis-bawah; simbol lain tidak diijinkan dipakai untuk membentuk sebuah pengenal.

Dalam C++, pengenal bisa memiliki panjang berapapun yang Anda sukai.


Contoh 1.2


Berikut adalah pengenal-pengenal yang sah di dalam C++:

waktu
ubah
bayarGaji
kounter2

Tabel 1.1 menampilkan beberapa pengenal tak-sah dan menjelaskan mengapa hal itu tidak diijinkan.

Tabel 1.1 Beberapa pengenal tak-sah
Pengenal tak-sah
Penjelasan
mahasiswa sarjan

Tidak boleh ada spasi di antara mahasiswa dan sarjana.
Hallo!
Tanda seru tidak bisa dipakai di dalam sebuah pengenal.
satu+dua
Simbol + tidak bisa dipakai di dalam sebuah pengenal.
2dua
Pengenal tidak bisa diawali dengan sebuah dijit.


Spasi-putih
Setiap program C++ memuat spasi-putih. Spasi-putih mencakup spasi, tab, dan karakter garis-baru (newline). Dalam sebuah program C++, spasi-putih dipakai untuk memisahkan simbol spesial, katakunci, dan pengenal. Spasi-putih tidak dapat ditampilkan, yang berarti bahwa ketika ia ditampilkan pada kertas putih, spasi di antara simbol spesial, katakunci, dan pengenal tercetak putih. Kegunaan spasi-putih dalam sebuah program sangat penting, karena ia dapat membuat program menjadi mudah dibaca.


Tipe Data

Tujuan sebuah program C++ ditujukan untuk memanipulasi data. Sebuah program yang didesain untuk menghitung gaji karyawan akan menjumlahkan, mengurangi, mengalikan, dan membagi angka-angka, dan beberapa angka dipakai untuk merepresentasikan jam kerja dan gaji. Sama halnya, sebuah program yang didesain untuk mengalfabetisasi sebuah kelas dipakai untuk memanipulasi nama-nama. Anda tentu tidak akan mengalikan atau mengurangi nama-nama. Oleh karena itu, C++ mengelompokkan data menjadi beberapa tipe data, dan hanya operasi-operasi tertentu yang dapat diterapkan pada tipe data tertentu. Meskipun hal ini cukup membingungkan bagi programer pemula, C++ telah mengawal programer pemula dengan menyediakan mekanisme pemeriksaan built-in untuk mengantisipasi kesalahan tipe data.

Tipe data C++ dikelompokkan ke dalam tiga kategori dan diilustrasikan pada Gambar 1.1:
1.      Tipe data sederhana
2.      Tipe data terstruktur
3.      Pointer


Gambar 1.1 Tipe data C++


Tipe Data Sederhana
Tipe data sederhana merupakan tipe data fundamental dalam C++ karena ia menjadi blok pembangun untuk tipe data terstruktur, yang akan Anda pelajari mulai dari Bab 8. Ada tiga kategori tipe data sederhana:
1.      Integral, yang merupakan tipe data yang berkaitan dengan integer (bilangan bulat), atau angka-angka tanpa titik desimal.
2.      Titik-mengambang, yang merupakan tipe data yang berkaitan dengan angka-angka desimal.
3.      Enumerasi, yang merupakan tipe data yang diciptakan oleh pengguna.
Tipe data integral selanjutnya dikategorikan ke dalam sembilan kategori: char, short, int, long, bool, unsigned char, unsigned short, unsigned int, dan unsigned long.

Mengapa ada begitu banyak kategori tipe data? Setiap tipe data memiliki himpunan nilai berbeda yang berkaitan dengannya. Sebagai contoh, tipe data char dipakai untuk merepresentasikan integer di antara 128 sampai 127. Tipe data int dipakai untuk merepresentasikan integer di antara -2147483648 dan 2147483647, dan tipe data short dipakai untuk merepresentasikan integer di antara -32768 dan 32767.

Perhatikan bahwa pengenal angka pada contoh 1.1 dapat ditugasi sembarang nilai yang berkaitan dengan tipe data int.

Tipe data mana yang akan Anda gunakan bergantung pada berapa besar angka yang diperlukan program Anda. Pada masa awal pemrograman, komputer dan memori utama sangat mahal. Hanya jumlah kecil memori yang tersedia untuk mengeksekusi program dan memanipulasi data. Akibatnya, programer harus mengoptimasi kegunaan memori. Karena penulisan program dan membuatnya dapat bekerja merupakan proses yang sudah rumit, tidak cemas akan ukuran memori membuat programer sedikit lega. Jadi, untuk menggunakan memori secara efektif, seorang programer dapat melihat tipe data yang digunakan pada sebuah program dan memperhitungkan tipa data mana yang akan digunakan.


Beberapa bahasa pemrograman terbaru hanya memiliki lima kategori atas tipe data sederhana: integer, real, char, bool, dan tipe enumerasi. Tipe-tipe data integral yang digunakan pada buku ini adalah int, bool, dan char.

Tabel 1.2 memberikan beberapa rentang nilai yang berkaitan dengan tiga tipe data dan ukuran memori yang dialokasikan untuk memanipulasi nilai-nilai tersebut.

Tabel 1.2 Nilai-nilai dan alokasi memori untuk tiga tipe data
Tipe data
Nilai
Penyimpanan (dalam byte)
int

-2147483648 sampai 2147483647
4
bool
true dan false
1
char
-128 sampai 127
1


Tipe Data int
Bagian ini akan menjelaskan tipe data int. Diskusi ini juga dapat diterapkan pada tipe data integral yang lain. Integer dalam C++, seperti dalam matematika, adalah angka-angka berikut: -6728, -67, 0, 78, 36782, +763. Perhatikan dua aturan berikut:
1.      Integer positif tidak memerlukan tanda +.
2.      Koma tidak dipakai pada sebuah integer. Ingat bahwa dalam C++, koma dipakai untuk memisahkan tiap item pada sebuah daftar atau senarai. Jadi, 34,56 akan diinterpretasikan sebagai dua integer: 34 dan 56.

Tipe Data bool
Tipe data bool hanya memiliki dua nilai: true dan false. Selain itu, true dan false dikenal pula dengan nilai logikal (Boolean). Tujuan utama dari tipe data ini adalah untuk memanipulasi ekspresi logikal (Boolean). Ekspresi logikal akan didiskusikan secara detil pada Bab 3. Dalam C++, bool, true, dan false adalah katakunci.


Tipe Data char
Tipe data char merupakan tipe data integral yang terkecil. Ia umumnya dipakai untuk merepresentasikan karakter, yaitu huruf, dijit, dan simbol spesial. Jadi, tipe data char dapat merepresentasikan setiap kunci pada papanketik Anda. Ketika menggunakan tipe data char, Anda perlu mengapit setiap karakter dengan sepasang tanda kutip tunggal. Beberapa nilai yang bertipe data char mencakup berikut:

'A', 'a', '0', '*', '+', '$', '&', ' '

Perhatikan bahwa spasi merupakan sebuah karakter dan dapat dituliskan sebagai ‘ ‘ dengan sebuah spasi diapit oleh sepasang tanda kutip tunggal.
Tipe data char hanya membolehkan satu simbol ditempatkan di antara tanda kutip tunggal. Jadi, nilai ‘abc’ bukanlah bertipe char. Selain itu, meskipun ‘!=’ dan simbol-simbol spesial serupa dipandang sebagai satu simbol, ia tidak dipandang sebagai nilai bertipe char. Semua simbol individual pada papanketik yang dapat ditampilkan (dicetak) dipandang sebagai nilai bertipe data char.

Ada beragam himpunan data karakter. Yang paling umum digunakan adalah ASCII (American Standard Code for Information Interchange) dan EBCDIC (Extended Binary-Coded Decimal Interchange Code). Himpunan karakter ASCII mempunyai 128 nilai. Himpunan karakter EBCDIC mempunyai 256 nilai yang diciptakan oleh IBM. Kedua himpunan karakter ditampilkan pada Tabal 1.3 dan Tabel 1.4.

Tabel 1.3 Himpunan karakter ASCII



Setiap nilai pada himpunan karakter ASCII merepresentasikan sebuah karakter. Sebagai contoh, nilai 65 merepresentasikan ‘A’, dan nilai 43 merepresentasikan ‘+’. Setiap karakter ditata sedemikian rupa sehingga nilai yang merepresentasikan ‘B’ adalah 66, jadi ‘A’ lebih kecil dari ‘B’. Sama halnya, ‘+’ lebih kecil dari ‘A’ karena 43 bernilai lebih kecil dari 65.


Tipe Data Titik-Mengambang
Untuk menangani angka-angka desimal, C++ menyediakan tipe data titik-mengambang, yang akan dijelaskan pada bagian ini. Untuk memfasilitasi diskusi, akan ditinjau-ulang sebuah konsep dari mata pelajaran aljabar SMA/SMU:



Anda pasti telah familiar dengan notasi ilmiah. Sebagai contoh:

43872918 = 4.3872918 *  
.0000265 = 2.65 *     
47.9832  = 4.79832 *   

Tabel 1.4 Himpunan karakter EBCDIC


Untuk merepresentasikan angka riil, C++ menggunakan notasi ilmiah (saintifik) yang dikenal dengan notasi titik-mengambang. Tabel 1.5 menunjukkan bagaiman C++ menampilkan beberapa angka riil menggunakan salah satu interpretasi notasi titik-mengambang. Pada notasi titik-mengambang C++, huruf E adalah singkatan dari eksponen.

Tabel 1.5 Contoh angka riil yang ditampilkan menggunakan notasi titik-mengambang C++
Angka riil
Notasi titik-mengambang C++
75.924
7.592400E1
0.18
1.800000E-1
0.0000453
4.530000E-5
-1.482
-1.482000E0
7800.0
7.800000E3

C++ menyediakan tiga tipe data untuk memanipulasi angka desimal: float, double, dan long double. Seperti pada kasus tipe data integral, tipe data float, double, dan long double memiliki himpunan nilai yang berbeda-beda.
float: Tipe data float dipakai dalam C++ untuk merepresentasikan sembarang nilai riil antara -3.4E+38 dan 3.4E+38. Memori yang dialokasikan untuk sebuah nilai bertipe data float adalah 4 byte.

double: Tipe data double dipakai dalam C++ untuk merepresentasikan sembarang nilai riil antara -1.7E308 dan 1.7E+308. Memori yang dialokasikan untuk sebuah nilai bertipe data double adalah 8 byte.

Nilai maksimum dan nilai minimum dari tipe data float dan double bergantung pada sistem. Untuk menemukan kedua nilai ini pada sistem tertentu, Anda dapat memeriksa dokumentasi kompiler Anda.

Selain perbedaan himpunan nilai, ada satu lagi perbedaan antara tipe data float dan double. Jumlah maksimum dari dijit signifikan, yaitu jumlah dijit setelah titik desimal, pada nilai float adalah enam atau tujuh dijit. Jumlah maksimum dari dijit signifikan pada nilai bertipe double adalah 15.

Jumlah maksimum dari dijit signifikan disebut dengan kepresisian. Kadangkala nilai bertipe float disebut dengan kepresisian tunggal, sedangkan nilai bertipe double dinamakan dengan kepresisian ganda. Jika Anda berhadapan dengan angka-angka desimal, maka pada kebanyakan kasus Anda hanya membutuhkan tipe float; jika Anda memerlukan keakuratan lebih dari enam atau tujuh dijit di belakang titik desimal, maka Anda dapat menggunakan tipe double.


Operator Aritmatik dan Keutamaan Operator

Salah satu kegunaan terpenting dari sebuah komputer adalah kemampuannya untuk berhitung. Anda dapat menggunakan operator-operator aritmatik standar untuk memanipulasi tipe data integral dan tipe data titik-mengambang. Ada lima operator aritmatik.

Operator Aritmatik: + (penjumlahan), - (pengurangan atau negasi), * (perkalian), / (pembagian), % (modulus atau sisa).

Anda dapat menggunakan operator +, -, *, dan / terhadap tipe data integral dan tipe data titik-mengambang. Anda dapat menggunakan % hanya terhadap tipe data integral untuk menemukan sisa dari pembagian biasa. Ketika Anda  menggunakan / terhadap tipe data integral, ia akan memberikan hasil bagi dari pembagian biasa. Yaitu, pembagian integral memotong bagian pecahan dari hasil; tidak terjadi pembulatan.

Sejak di bangku sekolah, Anda telah terbiasa dengan beberapa ekspresi aritmatik berikut ini:

       i.   -5
      ii.   8 - 7
    iii.   3 + 4
      iv.   2 + 3 *5
       v.   5.6 + 6.2 *3
     vi.   x + 2 *5 + 6 / y

(Perhatikan bahwa ekspresi (vi), x dan y adalah dua angka yang tak dikenal). Secara formal, ekspresi aritmatik dikonstruksi menggunakan operator aritmatik dan angka. Angka yang ada di dalam ekspresi dikenal dengan operand. Angka yang digunakan untuk mengevaluasi sebuah operator dinamakan dengan operand bagi operator tersebut. Pada ekspresi (i), simbol – menspesifikasi bahwa angka 5 adalah negatif. Pada ekspresi ini, - hanya memiliki satu operand. Operator yang memiliki satu operand dinamakan dengan operator unary.

Pada ekspresi (ii), simbol – dipakai untuk mengurangkan 7 dari 8. Pada ekspresi ini, - memiliki dua operand, 8 dan 7. Operator yang memiliki dua operand dinamakan dengan operator biner atau binary.

Pada ekspresi (iii), yaitu, 3 + 4, 3 dan 4 adalah dua operand untuk operator +. Pada ekspresi ini, operator + memiliki dua operand dan merupakan operator biner. Sekarang perhatikan ekspresi berikut:

+27

Pada ekspresi ini, operator + mengindikasikan bahwa angka 27 adalah positif. Di sini, + hanya memiliki satu operand dan jadi berperan sebagai operator unary.

Dari diskusi ini, dapat dipahami bahwa + dan – adalah masing-masing operator aritmatik unary dan biner. Namun, sebagai operator aritmatik, *, /, dan % adalah operator biner dan jadi memiliki dua operand.

Beberapa contoh berikut menunjukkan bagaimana operator-operator aritmatik, khususnya / dan %, diterapkan terhadap tipe data integral. Seperti yang Anda perhatikan dari contoh-contoh ini, operator / merepresentasikan hasil bagi pada pembagian biasa ketika digunakan terhadap tipe data integral.

Contoh 1.3


Ekspresi aritmatik
Hasil
Penjelasan
2 + 5
7

13 + 89
102

34 - 20
14

45 - 90
-45

2 * 7
14

5 / 2
2
Pada pembagian 5/2, hasil bagi (quotient) adalah 2 dan sisa adalah 1. Oleh karena itu, 5/2 dengan kedua operand bertipe integral dievaluasi akan menghasilkan hasil bagi, yang bernilai 2.

14 / 7
2

34 % 5
4
Pada pembagian 34/5, hasil bagi adalah 6 dan sisa sebesar 4. Oleh karena itu, 34 % 5 dievaluasi menghasilkan sisa, yang bernilai 4.

4 % 6
4
Pada pembagian 4/6, hasil bagi adalah 0 dan sisa sebesar 4. Oleh karena itu, 4 % 6 akan dievaluasi menghasilkan sisa, yaitu bernilai 4.


Program C++ berikut dipakai untuk mengevaluasi ekspresi-ekspresi tersebut:


// Program ini mengilustrasikan bagaimana ekspresi integral
// dievaluasi.

#include <iostream>

using namespace std;

int main()
{
    cout << "2 + 5 = " << 2 + 5 << endl;
    cout << "13 + 89 = " << 13 + 89 << endl;
    cout << "34 - 20 = " << 34 - 20 << endl;
    cout << "45 - 90 = " << 45 - 90 << endl;
    cout << "2 * 7 = " << 2 * 7 << endl;
    cout << "5 / 2 = " << 5 / 2 << endl;
    cout << "14 / 7 = " << 14 / 7 << endl;
    cout << "34 % 5 = " << 34 % 5 << endl;
    cout << "4 % 6 = " << 4 % 6 << endl;

    return 0;
}

Keluaran Program:

2 + 5 = 7
13 + 89 = 102
34 - 20 = 14
45 - 90 = -45
2 * 7 = 14
5 / 2 = 2
14 / 7 = 2
34 % 5 = 4
4 % 6 = 4


Contoh 1.4


Contoh berikut menunjukkan bagaimana operator-operator aritmatik diterapkan terhadap angka-angka titik-mengambang.

// Program ini mengilustrasikan bagaimana ekspresi titik-mengambang
// dievaluasi.

#include <iostream>

using namespace std;

int main()
{
    cout << "5.0 + 3.5 = " << 5.0 + 3.5 << endl;
    cout << "3.0 + 9.4 = " << 3.0 + 9.4 << endl;
    cout << "16.3 - 5.2 = " << 16.3 - 5.2 << endl;
    cout << "4.2 * 2.5 = " << 4.2 * 2.5 << endl;
    cout << "5.0 / 2.0 = " << 5.0 / 2.0 << endl;
    cout << "34.5 / 6.0 = " << 34.5 / 6.0 << endl;
    cout << "34.5 / 6.5 = " << 34.5 / 6.5 << endl;

    return 0;
}

Keluaran Program:

5.0 + 3.5 = 8.5
3.0 + 9.4 = 12.4
16.3 - 5.2 = 11.1
4.2 * 2.5 = 10.5
5.0 / 2.0 = 2.5
34.5 / 6.0 = 5.75
34.5 / 6.5 = 5.30769


Urutan Keutamaan
Ketika lebih dari satu operator aritmatik digunakan di dalam sebuah ekspresi, C++ menggunakan aturan keutamaan operator untuk mengevaluasi ekspresi. Sesuai dengan aturan urutan keutamaan untuk operator-operator aritmatik,

*, /, %

berada pada level keutamaan lebih tinggi dari:

+, -

Perhatikan bahwa operator *, /, dan % memiliki level keutamaan yang sama. Sama halnya, operator + dan – memiliki level keutamaan yang sama.

Ketika operator-operator memiliki level keutamaan yang sama, operasi dilakukan dari kiri ke kanan. Untuk menghindari kebingungan, Anda dapat menggunakan sepasang kurung untuk mengelompokkan ekspresi-ekspresi aritmatik. Sebagai contoh, dengan menggunakan aturan-aturan keutamaan operator,

3 * 7 - 6 + 2 * 5 / 4 + 6

yang berarti bahwa:

         (((3 * 7) – 6) + ((2 * 5) / 4 )) + 6
= ((21 – 6) + (10 / 4)) + 6 (mengevaluasi *)
= ((21 – 6) + 2) + 6 (mengevaluasi /. Perhatikan bahwa ini merupakan pembagian integer.)
= (15 + 2) + 6 (mengevaluasi –)
= 17 + 6 (mengevaluasi + yang pertama)
= 23 (mengevaluasi +)

Perhatikan bahwa penggunaan kurung untuk menegaskan urutan keutamaan. Anda juga dapat menggunakan kurung untuk menghindari urutan aturan keutamaan (lihat contoh 1.5).



Contoh 1.5


Pada ekspresi:

3 + 4 * 5

* dievaluasi sebelum +. Oleh karena itu, hasil dari ekspresi ini adalah 23. Di sisi lain, di dalam ekspresi:

(3 + 4) * 5

+ dievaluasi sebelum * dan hasil dari ekspresi ini adalah 35.


Ekspresi

Pada titik ini, Anda telah mengetahui operator-operator aritmatika. Pada bagian ini, akan didiskusikan ekspresi aritmatik secara detil. Ekspresi aritmatik telah dikenalkan pada bagian sebelumnya.

Jika semua operand (yaitu, angka-angka) di dalam sebuah ekspresi adalah integer, maka ekspresi tersebut dinamakan dengan ekspresi integral. Jika semua operand di dalam sebuah ekspresi adalah angka-angka pecahana, maka ekspresi tersebut dinamakan dengan ekspresi pecahan atau titik-mengambang. Ekspresi integral memberikan hasil integral; ekspresi titik-mengambang memberikan hasil titik-mengambang (desimal). Anda perlu melihat beberapa contoh berikut untuk mengklarifikasi dua definisi ini.

Contoh 1.6


Perhatikan beberapa ekspresi integral C++ berikut:

2 + 3 * 5
3 + x - y / 7
x + 2 * (y - z) + 18

Pada ekspresi-ekspresi tersebut, x, y, dan z merepresentasikan variabel-variabel bertipe integer; yaitu, ketiganya dapat menampung nilai integer. Variabel akan didiskusikan nanti pada bab ini.

Contoh 1.7


Perhatikan ekspresi-ekspresi titik-mengambang C++ berikut:

12.8 * 17.5 - 34.50
x * 10.5 + y - 16.2

Di sini, x dan y merepresentasikan variabel-varibel bertipe titik-mengambang; yaitu, keduanya dapat menampung nilai-nilai titik-mangambang. Variabel akan didiskusikan nanti pada bab ini.



Ekspresi Campuran
Sebuah ekspresi yang memiliki operand-operand dengan pelbagai tipe data dinamakan dengan ekspresi campuran. Ekspresi campuran memuat kedua angka integer dan angka titik-mengambang. Ekspresi-ekspresi berikut adalah contoh ekspresi campuran:

2 + 3.5
6 / 4 + 3.9
5.4 * 2 - 13.6 + 18 / 2

Pada ekspresi pertama, operand + memiliki satu operand integer dan satu lagi operand titik-mengambang. Pada ekspresi kedua, kedua operand bagi operator / adalah integer, operand pertama bagi + adalah hasil dari 6/4, dan operand kedua bagi + adalah sebuah angka titik-mengambang. Ekspresi ketiga merupakan campuran dari angka integer dan angka titik-mengambang. Pertanyaannya adalah bagaimana C++ mengevaluasi ekspresi campuran?

Dua aturan dapat diterapkan ketika mengevaluasi sebuah ekspresi campuran:
1.      Ketika mengevaluasi sebuah operator di dalam suatu ekspresi campuran:
a.       Jika operator memiliki operand-operand bertipe sama (yaitu, keduanya integer atau keduanya titik-mengambang), operator dievaluasi sesuai dengan tipe operand. Operand-operand integer akan memberikan hasil integer; angka-angka titik-mengambang akan memberikan hasil titik-mengambang.
b.      Jika operator memiliki kedua tipe operand (yaitu, satu operand integer dan yang lain angka titik-mengambang), maka selama perhitungan, integer akan diubah menjadi angka titik-mengambang dengan bagian desimal nol dan kemudian operator dievaluasi. Hasilnya adalah sebuah angka titik-mengambang.
2.      Semua ekspresi dievaluasi sesuai dengan aturan-aturan keutamaan; perkalian, pembagian, dan modulus dievaluasi sebelum operator penjumlahan dan pengurangan. Operator-operator dengan level keutamaan yang sama dievaluasi dari kiri ke kanan. Pengelompokan diijinkan untuk penegasan.

Dari kedua aturan ini, dapat dipahami bahwa ketika mengevaluasi sebuah ekspresi campuran, Anda harus berkonsentrasi terhadap satu operator pada suatu waktu, menggunakan aturan-aturan keutamaan. Jika operator yang akan dievaluasi memiliki operand-operand bertipe data sama, maka Anda mengevaluasinya menggunakan Aturan 1 (a). Yaitu, sebuah operator dengan operand-operand integer akan memberikan hasil integer, dan sebuah operator dengan operand-operand titik-mengambang akan memberikan hasil titik-mengambang. Jika operator yang akan dievaluasi memiliki satu operand integer dan satu operand titik-mengambang, maka sebelum mengevaluasi operator ini, Anda perlu mengkonversi operand integer menjadi sebuah angka titik-mengambang dengan bagian desimal nol. Beberapa contoh berikut akan menunjukkan bagaimana mengevaluasi ekspresi campuran.

Contoh 1.8


Ekspresi campuran
Evaluasi
Aturan diterapkan
3 / 2 + 5.5
= 1 + 5.5
= 6.5
3/2 = 1 (pembagian integer; Aturan 1(a))
(1 + 5.5
= 1.0 + 5.5 (aturan 1(b))
= 6.5)
15.6 / 2 + 5
= 7.8 + 5


= 12.8
15.6 / 2
= 15.6/2.0 (aturan 1 (b))
= 7.8
7.8 + 5
= 7.8 + 5.0 (aturan 1(b))
= 12.8
4 + 5 / 2.0
= 4 + 2.5

= 6.5
5 / 2.0 = 5.0 / 2.0 (aturan 1(b))
= 2.5
4 + 2.5 = 4.0 + 2.5 (aturan 1(b))
= 6.5
4 *3 + 7 / 5 – 25.5
= 12+7/5 – 25.5
= 12 + 1 – 25.5
= 13 – 25.5
= -12.5
4 *3 = 12; (aturan 1(a))
7 / 5 = 1 (pembagian integer; aturan 1(a))
12 + 1 = 13; (aturan 1(a))
13 – 25.5 = 13.0 – 25.5 (aturan 1(b))
= -12.5

Program C++ berikut dipakai untuk mengevaluasi ekspresi-ekspresi tersebut:

// Program ini mengilustrasikan bagaimana ekspresi camputan dievaluasi.
#include <iostream>

using namespace std;

int main()
{
    cout << "3 / 2 + 5.5 = " << 3 / 2 + 5.5 << endl;
    cout << "15.6 / 2 + 5 = " << 15.6 / 2 + 5 << endl;
    cout << "4 + 5 / 2.0 = " << 4 + 5 / 2.0 << endl;
    cout << "4 * 3 + 7 / 5 - 25.5 = "
         << 4 * 3 + 7 / 5 - 25.5
         << endl;

    return 0;
}

Keluaran Program:

3 / 2 + 5.5 = 6.5
15.6 / 2 + 5 = 12.8
4 + 5 / 2.0 = 6.5
4 * 3 + 7 / 5 - 25.5 = -12.5


Konversi Tipe (Casting)

Pada bagian sebelumnya, Anda telah belajar bahwa ketika mengevaluasi sebuah ekspresi aritmatik, jika operator memiliki operand-operand campuran, nilai integer akan dikonversi menjadi sebuah nilai titik-mengambang dengan bagian desimal nol. Ketika nilai dari satu tipe data dikonversi secara otomatis menjadi tipe data lain, pemaksaan tipe implisit terjadi. Seperti yang diilustrasikan oleh beberapa contoh sebelumnya, jika Anda tidak hati-hati dengan tipe data, pemaksaan tipe implisit dapat memberikan hasil yang tidak diharapkan.

Untuk menghindari pemaksaan tipe implisit, C++ menyediakan konversi tipe eksplisit lewat penggunaan operator cast. Operator cast, yang juga dikenal dengan konversi tipe atau pemaksaan tipe, mempunyai bentuk berikut:

static_cast<namaTipeData>(ekspresi)

Pertama-tama, ekspresi dievaluasi. Nilainya kemudian dikonversi menjadi sebuah nilai dengan tipe yang dispesifikasi oleh namaTipeData. Dalam C++, static_cast merupakan sebuah katakunci.

Ketika mengkonversi sebuah angka titik-mengambang (desimal) menjadi sebuah integer menggunakan operator cast, Anda hanya perlu membuang bagian desimal dari angka titik-mengambang. Yaitu, angka titik-mengambang akan terpotong. Contoh 1.9 menunjukkan bagaimana operator cast bekerja. Pastikan bahwa Anda memahami bagaimana dua ekspresi terakhir dievaluasi seperti itu.

Contoh 1.9


Ekspresi
Dievaluasi menjadi
static_cast<int>(7.9)
7
static_cast<int>(3.3)
3
static_cast<double>(25)
25.0
static_cast<double>(5 + 3)
= static_cast<double>(8) = 8.0
static_cast<double>(15) / 2
= 15.0 / 2
(karena static_cast<double> (15) = 15.0)
= 15.0 / 2.0 = 7.5
static_cast<double>(15 / 2)
= static_cast<double>(7) (karena 15/2=7)
= 7.0
static_cast<int>(7.8 +
static_cast<double>(15) / 2)
= static_cast<int>(7.8 + 7.5)
= static_cast<int>(15.3)
= 15
static_cast<int>(7.8 +
static_cast<double>(15 / 2))
= static_cast<int>(7.8 + 7.0)
= static_cast<int>(14.8)
= 14

Program C++ berikut dipakai untuk mengevaluasi ekspresi-ekspresi tersebut:

// Program ini mengilustrasikan bagaimana konversi tipe eksplisit bekerja.

#include <iostream>

using namespace std;

int main()
{
    cout << "static_cast<int>(7.9) = "
         << static_cast<int>(7.9)
         << endl;
    cout << "static_cast<int>(3.3) = "
         << static_cast<int>(3.3)
         << endl;
    cout << "static_cast<double>(25) = "
         << static_cast<double>(25)
         << endl;
    cout << "static_cast<double>(5 + 3) = "
         << static_cast<double>(5 + 3)
         << endl;
    cout << "static_cast<double>(15) / 2 = "
         << static_cast<double>(15) / 2
         << endl;
    cout << "static_cast<double>(15 / 2) = "
         << static_cast<double>(15 / 2)
         << endl;
    cout << "static_cast<int>(7.8 + static_cast<double>(15) / 2) = "
         << static_cast<int>(7.8 + static_cast<double>(15) / 2)
         << endl;
    cout << "static_cast<int>(7.8 + static_cast<double>(15 / 2)) = "
         << static_cast<int>(7.8 + static_cast<double>(15 / 2))
         << endl;

    return 0;
}

Keluaran Program:

static_cast<int>(7.9) = 7
static_cast<int>(3.3) = 3
static_cast<double>(25) = 25
static_cast<double>(5 + 3) = 8
static_cast<double>(15) / 2 = 7.5
static_cast<double>(15 / 2) = 7
static_cast<int>(7.8 + static_cast<double>(15) / 2) = 15
static_cast<int>(7.8 + static_cast<double>(15 / 2)) = 14

Perhatikan bahwa nilai dari ekspresi static_cast<double>(25) adalah 25.0. Namun, yang ditampilkan adalah 25 bukan 25.0. Ini karena belum didiskusikan bagaimana menampilkan angka desimal dengan bagian desimal 0 untuk menunjukkan titik desimal dan nol pengekor titik desimal. Bab 2 akan menjelaskan bagaimana menampilkan angka desimal dalam format yang diinginkan.

Anda juga dapat menggunakan operator cast untuk secara eksplisit mengkonversi nilai data char menjadi nilai data int dan nilai data int menjadi nilai data char. Untuk mengkonversi nilai data char menjadi nilai data int, Anda bisa memahaminya dari contoh berikut. Sebagai contoh, dalam himpunan karakter ASCII, static_cast<int> (‘A’) adalah 65 dan static_cast<int>(‘8’) adalah 56. Sama halnya, static_cast<char>(‘65’) adalah ‘A’ dan adalah static_cast<int>(‘56’) adalah ‘8’.


Tipe string

Tipe data string adalah tipe data yang didefinisikan oleh programer. Ia tidak secara langsung tersedia untuk digunakan di dalam sebuah program seperti tipe data sederhana yang lain. Untuk menggunakan tipe data ini, Anda perlu mengakses komponen-komponen program dari pustaka, yang akan didiskusikan nanti pada bab ini. Tipe data string merupakan fitur dari C++ Standar ANSI/ISO.

Sebuah string adalah suatu runtun yang memuat nol atau lebih karakter. String di dalam C++ diapit oleh sepasang tanda kutip ganda. String yang tidak memuat karakter dinamakan dengan string kosong atau null. Berikut adalah beberapa contoh string. Perhatikan bahwa ““ adalah string kosong.

"Danau Toba"
"Jogja"
""

Setiap karakter di dalam sebuah string memiliki posisi relatif. Posisi dari karakter pertama adalah 0, posisi dari karakter kedua adalah 1, dan seterusnya. Panjang dari sebuah string adalah jumlah karakter yang dimuatnya.

Contoh 1.10


String
Posisi karakter di dalam string
Panjang string
"Danau Toba"
Posisi dari 'D' adalah 0.
Posisi dari 'a' pertama adalah 1.
Posisi dari ' ' (spasi) adalah 5.
Posisi dari 'T' adalah 6.
Posisi dari 'b' adalah 8.
10
"Jogja"
Posisi dari 'J' adalah 0.
Posisi dari 'o' adalah 1.
Posisi dari 'g' adalah 2.
Posisi dari 'j' adalah 3.
Posisi dari 'a' adalah 4.

5

Ketika menentukan panjang sebuah string, Anda harus juga menghitung setiap spasi yang ada di dalam string. Sebagai contoh, panjang dari string berikut adalah 33.

“Wanita itu memesonaku setiap saat”

Tipe string lebih kompleks dan tangguh dari tipe data sederhana yang lain. Ia menyediakan banyak operasi untuk memanipulasi string. Sebagai contoh, ia menyediakan beberapa operasi untuk menemukan panjang sebuah string, mengekstrak potongan suatu string, dan membandingkan dua string. Anda akan belajar hal ini pada bab-bab berikutnya.


Masukan

Seperti yang telah dijelaskan sebelumnya, tujuan utama program C++ adalah untuk melakukan perhitungan dan pemanipulasian data. Ingat bahwa data harus dimuat ke memori utama sebelum ia dapat dimanipulasi. Pada bagian ini, Anda akan belajar tentang bagaimana menempatkan data ke dalam memori komputer. Penyimpanan data di dalam memori komputer merupakan sebuah proses dua-langkah:
1.      Menginstruksikan komputer untuk mengalokasikan memori.
2.      Mencantumkan statemen-statemen di dalam program untuk menempatkan data ke dalam memori yang teralokasi.

Mengalokasikan Memori dengan Konstanta dan Variabel
Ketika Anda menginstruksikan komputer untuk mengalokasikan memori, Anda memberitahukannya tentang tidak hanya nama-nama yang akan digunakan untuk tiap lokasi memori, tetapi juga tentang tipe data yang akan disimpan di dalam lokasi memori tersebut. Mengetahui lokasi data sangat esensial, karena data yang disimpan di dalam suatu lokasi memori bisa jadi dibutuhkan di beberapa tempat di dalam program. Seperti yang Anda ketahui, mengetahui tipe data apa yang Anda miliki adalah juga sangat krusial untuk melakukan kalkulasi yang akurat. Hal yang penting pula untuk diketahui adalah apakah data Anda tetap tidak berubah selama eksekusi program atau apakah ia perlu diubah.

Beberapa data perlu tidak berubah (sama) selama eksekusi program. Misalnya, gaji karyawan paruh-waktu biasanya sama dan tidak berubah. Formula konversi yang mengkonversi inci ke sentimeter tidak berubah (sama), karena 1 inci selalu sama dengan 2.54 sentimeter. Ketika disimpan di dalam memori, tipe data ini perlu diproteksi dari pengubahan yang tidak disengaja (aksidental) selama eksekusi program. Dalam C++, Anda dapat memakai sebuah konstanta bernama untuk menginstruksikan program sehingga menandai lokasi-lokasi memori dimana di dalamnya data selalu tetap (tidak berubah) selama eksekusi program.

Konstanta bernama: Sebuah lokasi memori dengan isi yang tidak diijinkan untuk diubah selama eksekusi program.

Untuk mengalokasikan memori, Anda menggunakan statemen deklarasi C++. Sintaks untuk mendeklarasikan sebuah konstanta bernama adalah:

const tipeData pengenal = nilai;

Dalam C++, const adalah katakunci.

Contoh 1.11


Perhatikan beberapa statemen C++ berikut:

const double KONVERSI = 2.54;
const int JUMLAH_MHS = 20;
const char KOSONG = ' ';

Statemen pertama memberitahu kompiler untuk mengalokasikan memori (delapan byte) untuk menyimpan sebuah nilai bertipe double, menamakan ruang memori ini KONVERSI, dan menyimpan nilai 2.54 di dalanya. Selama eksekusi, program menggunakan statemen ini, kapanpun formula konversi diperlukan, ruang memori KONVERSI dapat diakses. Makna dari statemen lain juga sama.

Perhatikan bahwa pengenal untuk konstanta bernama dibuat dengan huruf besar. Meskipun tidak aturan tertulis, para programer C++ umumnya lebih menyukai untuk menggunakan huruf besar untuk menamai konstanta bernama. Selain itu, jika nama sebuah konstanta bernama merupakan kombinasi dari lebih dari satu kata, maka keduanya dipisahkan dengan karakter garis-bawah (_). Sebagai contoh, pada contoh sebelumnya, JUMLAH_MHS menggunakan karakter garis-bawah untuk memisahkan JUMLAH dan MHS.

Konstanta bernama dipakai untuk menyimpan data tetap. Jika Anda ingin mengubah data tetap, Anda tidak perlu mengedit keseluruhan program dan mengubah nilai lama menjadi nilai baru. Tetapi, Anda hanya perlu mengubah di satu tempat saja, mengkompilasi-ulang program, dan mengeksekusinya menggunakan nilai baru tersebut.

Pada beberapa program, data perlu dimodifikasi selama eksekusi program. Sebagai contoh, pada tiap ujian, rerata dari skor ujian dan jumlah peserta ujian bisa berubah. Sama halnya, akibat kenaikan gaji, gaji karyawan tiap bulannya akan berubah. Tipe data ini harus disimpan di dalam sel memori yang memiliki isi yang dapat dimodifikasi selama eksekusi program. Dalam C++, sel memori dengan isi yang dapat dimodifikasi selama eksekusi program dinamakan dengan variabel.

Variabel: Sebuah lokasi memori dengan isi yang dapat berubah selama eksekusi program.

Sintaks untuk mendeklarasikan satu variabel atau banyak variabel adalah:

tipeData pengenal1, pengenal2, . . .;

Contoh 1.12


Perhatikan beberapa statemen berikut:

double jumlahTagihan;
int kounter;
char ch;
int x, y;
string nama;

Statemen pertama memberitahu kompiler untuk mengalokasikan memori yang cukup untuk menyimpan sebuah nilai bertipe double dan menamainya dengan jumlahTagihan. Statemen kedua dan ketiga memiliki konvensi yang sama. Statemen keempat memberitahu kompiler untuk mengalokasikan dua ruang memori yang berbeda, masing-masing cukup besar untuk menyimpan sebuah nilai bertipe int; nama dari ruang memori pertama adalah x; dan nama dari ruang memori kedua adalah y. Statemen kelima memberitahu kompiler untuk mengalokasikan ruang memori untuk menyimpan sebuah string dan menamainya nama.

Sama seperti penamaan konstanta bernama, tidak ada aturan tertulis untuk menamai variabel. Namun, programer C++ umumnya menggunakan huruf kecil untuk mendeklarasikan variabel. Jika sebuah nama variabel merupakan kombinasi dari lebih dari satu kata, maka huruf pertama dari tiap kata, kecuali kata pertama, adalah huruf besar. Sebagai contoh, perhatikan variabel jumlahTagihan pada contoh tersebut.

Mulai sekarang, ketika dikatakan “variabel”, maka itu berarti lokasi memori variabel.

Sekarang setelah tipe data, variabel, dan konstanta telah didefinisikan dan didiskusikan, maka berikut akan diberikan definisi formal atas tipe data sederhana. Tipe data dikatakan sederhana jika variabel atau konstanta bernama dengan tipe tersebut hanya dapat menyimpan satu nilai pada suatu waktu. Sebagai contoh, jika x adalah sebuah variabel int, maka pada suatu waktu, hanya satu nilai yang dapat disimpan di dalam x.


Menempatkan Data ke dalam Variabel
Setelah Anda mengetahui bagaimana mendeklarasikan variabel, pertanyaan berikutnya adalah: Bagaimana Anda menempatkan data ke dalam variabel tersebut? Dalam C++, Anda dapat menempatkan data ke dalam sebuah variabel dengan dua cara:
1.      Menggunakan statemen penugasan C++.
2.      Menggunakan stateman pembacaan.

Statemen Penugasan
Statemen penugasan memiliki format berikut:

variabel = ekspresi;

Di dalam sebuah statemen penugasan, nilai dari ekspresi harus cocok dengan tipe data dari variabel. Ekspresi di sisi kanan dievaluasi terlebih dahulu, dan nilainya ditugaskan kepada variabel (ke dalam sebuah lokasi memori) di sisi kiri.

Sebuah variabel dikatakan diinisialisasi ketika pertama kali sebuah nilai ditempatkan ke dalam variabel tersebut.

Dalam C++, = dikenal dengan operator penugasan.

Contoh 1.13


Dimisalkan bahwa Anda memiliki beberapa deklarasi variabel berikut:

int angka1, angka2;
double penjualan;
char pertama;
string str;

Sekarang, perhatikan beberapa statemen penugasan berikut:

angka1 = 4;
angka2 = 4 * 5 - 11;
penjualan = 0.02 * 1000;
pertama = 'D';
str = "Hari ini cuaca cerah.";
Untuk tiap statemen, komputer pertama-tama mengevaluasi ekspresi di sisi kanan dan kemudian menyimpan nilainya di dalam sebuah lokasi memori yang dinamai oleh pengenal di sisi kiri. Statemen pertama menyimpan nilai 4 di dalam angka1, statemen kedua menyimpan 9 di dalam angka2, statemen ketiga menyimpan 20.0 di dalam penjualan, dan statemen keempat menyimpan karakter D di dalam pertama. Statemen kelima menyimpan string ”Hari ini cuaca cerah.” di dalam variabel str.

Program C++ berikut menunjukkan efek dari statemen-statemen tersebut:

// Program ini mengilustrasikan bagaimana data di dalam
// variabel dimanipulasi.

#include <iostream>
#include <string>

using namespace std;

int main()
{
    int angka1, angka2;
    double penjualan;
    char pertama;
    string str;

    angka1 = 4;
    cout << "angka1 = " << angka1 << endl;

    angka2 = 4 * 5 - 11;
    cout << "angka2 = " << angka2 << endl;

    penjualan = 0.02 * 1000;
    cout << "penjualan = " << penjualan << endl;

    pertama = 'D';
    cout << "pertama = " << pertama << endl;

    str = "Hari ini cuaca cerah.";
    cout << "str = " << str << endl;

    return 0;
}

Keluaran Program:

angka1 = 4
angka2 = 9
penjualan = 20
pertama = D
str = Hari ini cuaca cerah.

Pada sebagian besar program tersebut cukup sederhana. Anda hanya perlu menengok statemen keluaran berikut:

cout << " angka1 = " << angka1 << endl;


Statemen keluaran ini memuat string “angka1 = “, operator <<, dan variabel angka1. Di sini, pertama-tama nilai dari string “angka1 = “ ditampilkan, kemudian nilai dari variabel angka1 ditampilkan. Makna dari statemen-statemen keluaran lain sama.

Sebuah statemen C++ seperti:

angka = angka + 2;

berarti “evaluasi lebih dahulu apapun nilai di dalam angka, tambahkan 2 kepadanya, dan tugaskan nilai baru tersebut ke lokasi memori angka”. Ekspresi di sisi kanan operator penugasan harus dievaluasi lebih dahulu; nilai tersebut kemudian ditugaskan ke lokasi memori yang dispesifikasi oleh variabel di sisi kiri operator penugasan. Jadi, runtun statemen C++:

angka = 6;
angka = angka + 2;

dan statemen:

angka = 8;

keduanya menugaskan 8 kepada angka. Perhatikan bahwa jika angka tidak diinisialisasi, maka statemen angka = angka + 2 akan memberikan hasil yang tidak terduga dan/atau kompiler akan memberikan pesan peringatan yang mengindikasikan bahwa variabel tidak diinisialisasi.

Statemen angka = 5; dibaca sebagai “angka menjadi 5” atau “angka mendapat 5” atau “angka ditugasi nilai 5”. Pembacaan statemen seperti “angka sama dengan 5” adalah tidak tepat, khususnya untuk statemen seperti angka = angka + 2;. Setiap kali sebuah nilai baru ditugaskan kepada angka, nilai lama akan ditimpa.

Contoh 1.14


Dimisalkan bahwa angka1, angka2, dan angka3 adalah variabel-variabel int dan bahwa beberapa statemen berikut dieksekusi secara berurutan:
1.        angka1 = 18;
2.        angka1 = angka1 + 27;
3.        angka2 = angka1;
4.        angka3 = angka2/5;
5.        angka3 = angka3/4;

Tabel berikut menampilkan nilai dari tiap variabel setial eksekusi atas tiap statemen dilakukan. (? mengindikasikan bahwa nilai tidak diketahui. Kotak abu-abu terang di dalam sebuah kotak menunjukkan bahwa nilai dari variabel tersebut berubah.

Dapat diperhatikan bahwa setelah eksekusi atas statemen pada baris 5, angka1 = 45, angka2 = 45, dan angka3 = 2.

Penjejakan nilai-nilai merupakan cara untuk belajar dan berlatih. Anda akan memahami bagaimana menjejak statemen-statemen C++ nanti pada bab ini.




Menyimpan dan Menggunakan Nilai Sebuah Ekspresi
Karena Anda telah mengetahui bagaimana mendeklarasikan variabel dan menempatkan data ke dalamnya, Anda sekarang dapat belajar bagaimana menyimpan nilai dari sebuah ekspresi. Anda kemudian dapat menggunakan nilai ini pada ekspresi lain tanpa menggunakan ekspresi itu sendiri. Untuk menyimpan nilai dari sebuah ekspresi dan menggunakannya pada ekspresi lain, lakukan hal-hal berikut:
1.      Deklarasikan sebuah variabel dengan tipe data sesuai. Sebagai contoh, jika hasil dari ekspresi adalah sebuah integer, maka deklarasikan sebuah variabel int.
2.      Tugaskan nilai dari ekspresi kepada variabel yang telah dideklarasikan, menggunakan statemen penugasan. Tindakan ini akan menyimpan nilai dari ekspresi ke dalam variabel.
3.      Kapanpun nilai dari ekspresi diperlukan, gunakan variabel yang memuat nilainya. Contoh berikut mengilustrasikan konsep ini.

Contoh 1.15


Dimisalkan bahwa Anda memiliki deklarasi berikut:

int a, b, c, d;
int x, y;

Selanjutnya dimisalkan bahwa Anda ingin mengevaluasi ekspresi  dan  dan menugaskan nilai dari kedua ekspresi kepada x dan y. Karena ekspresi  muncul pada kedua ekspresi, Anda dapat pertama-tama menghitung nilai dari ekspresi ini dan menyimpannya di dalam d. Anda kemudian dapat menggunakan nilai dari d untuk mengevaluasi kedua ekspresi, seperti yang ditampilkan pada beberapa statemen:

d = b * b - 4 * a * c;
x = -b + d;
y = -b - d;

Sebelumnya, Anda telah belajar bahwa jika sebuah variabel digunakan pada suatu ekspresi, ekspresi tersebut akan memberikan nilai hanya dan hanya jika variabel tersebut telah diinisialisasi. Anda juga telah belajar bahwa setelah mendeklarasikan sebuah variabel, Anda dapat menggunakan statemen penugasan untuk menginisialisasinya. Adalah mungkin untuk menginisialisasi dan mendeklarasikan variabel pada saat yang bersamaan. Sebelum mendiskusikan bagaimana menggunakan statemen pembacaan, akan dibahas topik penting ini lebih dahulu.


Mendeklarasikan dan Menginisialisasi Variabel
Ketika sebuah variabel dideklarasikan, C++ tidak secara otomatis menempatkan nilai di dalamnya. Dengan kata lain, C++ tidak secara otomatis menginisialisasi variabel. Sebagai contoh, variabel int dan double tidak diinisialisasi dengan 0, seperti yang terjadi pada beberapa bahasa pemrograman. Ketika sebuah variabel dideklarasikan, memori dialokasikan untuknya oleh kompiler.

Memori utama komputer merupakan rentetan sel terurut, dan tiap sel mampu menyimpan sebuah nilai. Selain itu, bahasa mesin adalah sebuah runtun bit 0 atau bit 1. Oleh karena itu, data di dalam sebuah sel memori adalah suatu runtun bit. Bit-bit ini adalah sinyal elektrik, ketika komputer dinyalakan, beberapa dari bit tersebut bernilai 1 dan lainnya bernilai 0. Keadaan dari tiap bit bergantung pada bagaimana sistem bekerja. Namun, ketika Anda menginstruksikan komputer untk menyimpan sebuah nilai tertentu di dalam suatu sel memori, bit-bit ditetapkan sesuai dengan data yang sedang disimpan.

Selama pemanipulasian data, komputer mengambil nilai yang disimpan di dalam sel tertentu dan melakukan kalkulasi. Jika Anda mendeklarasikan sebuah variabel dan tidak menyimpan suatu nilai di dalamnya, maka sel memori tersebut masih memiliki suatu nilai, biasanya nilai dari penetapan bit-bit dari penggunaan terakhirnya, dan Anda tidak mengetahui berapa nilai tersebut.

Jika Anda hanya mendeklarasikan sebuah variabel dan tidak menginstruksikan komputer untuk menempatkan data ke dalam variabel tersebut, nilai dari variabel tersebut dianggap sampah. Namun, komputer bisa saja tidak memberikan peringatan akan hal tersebut. Penggunaan sebuah variabel di dalam suatu ekspresi tanpa terlebih dahulu menginisialisasinya akan memberikan hasil yang tidak diharapkan. Untuk menghindari hal ini, C++ mengijinkan Anda untuk menginisialisasi variabel ketika Anda mendeklarasikannya. Sebagai contoh, perhatikan beberapa statemen C++ berikut dimana di dalamnya variabel-variabel terlebih dahulu dideklarasikan dan kemudian diinisialisasi:

int pertama, kedua;
char ch;
double x;

pertama = 13;
kedua = 10;
ch = ' ';
x = 12.6;

Anda dapat mendeklarasikan dan menginisialisasi variabel-variabel pada waktu bersamaan menggunakan statemen-statemen C++ berikut:

int pertama = 13, kedua = 10;
char ch = ' ';
double x = 12.6;

Statemen C++ pertama mendeklarasikan dua variabel int, pertama dan kedua, dan menyimpan 13 di dalam pertama dan 10 di dalam kedua. Makna dari statemen lain sama.


Statemen Pembacaan
Sebelumnya, Anda telah belajar bagaimana menempatkan data ke dalam variabel menggunakan statemen penugasan. Pada bagian ini, Anda akan belajar bagaimana menempatkan data ke dalam variabel dari divais masukan standar, menggunakan statemen pembacaan (masukan) C++.

Ketika komputer mendapatkan data dari papanketik, pengguna dikatakan beraksi secara interaktif. Penempatan data ke dalam variabel dari divais masukan standar dilakukan dengan penggunaan cin dan operator >>. Sintaks dari cin bersama dengan >> adalah:

cin >> variabel1 >> variabel2 >> ...;

Ini dikenal sebagai statemen pembacaan (masukan). Dalam C++, >> dikenal sebagai operator ekstraksi aliran.

Contoh 1.16


Dimisalkan bahwa mil adalah sebuah variabel bertipe double. Selanjutnya dimisalkan bahwa masukan adalah 73.65. Perhatikan beberapa statemen berikut:

cin >> mil;

Statemen ini menyebabkan komputer untuk membaca masukan, yang bernilai 73.65, dari divais masukan standar dan menyimpannya di dalam variabel mil. Jadi, setelah statemen ini dieksekusi, nilai dari variabel mil adalah 73.65.

Contoh 1.17 selanjutnya akan menjelaskan bagaimana membaca data numerik ke dalam sebuah program.


Contoh 1.17


Dimisalkan bahwa dimiliki beberapa statemen berikut:

int kaki;
int inci;

Dimisalkan bahwa masukan adalah:
23  7

Selanjutnya, perhatikan statemen berikut:

cin >> kaki >> inci;

Statemen ini pertama-tama menyimpan angka 23 ke dalam variabel kaki dan kemudian angka 7 ke dalam variabel inci. Perhatikan bahwa ketika kedua angka ini dimasukkan lewat papanketik, keduanya dipisahkan oleh sebuah spasi. Tetapi, pada kenyataannya, keduanya dapat dipisahkan oleh satu atau lebih spasi atau baris atau karakter tab.

Program C++ berikut menunjukkan pengaruh dari statemen-statemen masukan tersebut:

// Program ini mengilustrasikan bagaimana statemen pembacaan bekerja.

#include <iostream>

using namespace std;

int main()
{
    int kaki;
    int inci;
    cout << "Masukkan dua integer yang dipisahkan dengan spasi: ";
    cin >> kaki >> inci;
    cout << endl;
    cout << "Kaki = " << kaki << endl;
    cout << "Inci = " << inci << endl;

    return 0;
}

Keluaran Program:

Masukkan dua integer yang dipisahkan dengan spasi: 23 7

Kaki = 23
Inci = 7

Program C++ pada contoh 1.18 mengilustrasikan bagaimana membaca string dan data numerik.

Contoh 1.18


// Program ini mengilustrasikan bagaiman membaca string dan data numerik.
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string namaPertama;                                       //Baris 1
    string namaAkhir;                                                //Baris 2
    int usia;                                                        //Baris 3
    double berat;                                             //Baris 4

       cout << "Masukkan nama pertama, nama akhir, usia, "
         << "dan berat, dipisahkan dengan koma."
         << endl;                                             //Baris 5

       cin >> namaPertama >> namaAkhir;                       //Baris 6
        cin >> usia >> berat;                                 //Baris 7

       cout << "Nama: " << namaPertama << " "
            << namaAkhir << endl;                             //Baris 8

       cout << "Usia: " << usia << endl;                      //Baris 9
        cout << "Berat: " << berat << endl;                          //Baris 10

    return 0;                                                        //Baris 11
}

Keluaran Program:

Masukkan nama pertama, nama akhir, usia, dan berat, dipisahkan dengan koma.
Roro Kusumawardani 20 45.45
Nama: Roro Kusumawardani
Usia: 20
Berat: 45.45

Program tersebut bekerja sebagai berikut: Statemen pada baris 1 sampai baris 4 mendeklarasikan variabel namaPertama dan namaAkhir bertipe string, usia bertipe int, dan berat bertipe double. Statemen pada baris 5 merupakan sebuah statemen keluaran dan memberitahu pengguna apa yang perlu dilakukan. Seperti yang ditampilkan pada keluaran program, masukan pada program adalah:

Roro Kusumawardani 20 45.45

Statemen pada baris 6 pertama-tama membaca dan menyimpan string Roro ke dalam variabel namaPertama dan kemudian melompati spasi yang berada sesudah Roro dan membaca dan menyimpan string Kusumawardani ke dalam variabel namaAkhir. Selanjutnya, statemen pada baris 7 pertama-tama melompati spasi yang ada setelah Kusumawardani dan membaca dan menyimpan 20 ke dalam variabel usia dan kemudian melompati spasi yang ada setelah 20 dan membaca dan menyimpan 45.45 ke dalam variabel berat.

Statemen pada baris 8, 9, dan 10 menghasilkan keluaran pada baris ketiga, keempat, dan kelima.

Inisialisasi Variabel
Ingat bahwa, ada dua cara dalam menginisialisasi sebuah variabel: dengan menggunakan statemen penugasan dan dengan menggunakan statemen pembacaan. Perhatikan deklarasi berikut:

int kaki;
int inci;

Perhatikan dua potongan kode berikut:

(a)
(b)
kaki = 35;
inci = 6;
cout << "Total inci = "
     << 12 * kaki + inci;
cout << "Masukkan kaki: ";
cin >> kaki;
cout << endl;
cout << "Masukkan inci: ";
cin >> inci;
cout << endl;
cout << "Total inci = "
     << 12 * kaki + inci;

Pada (a), kaki dan inci diinisialisasi menggunakan statemen penugasan, dan pada (b), variabel-variabel diinisialisasi menggunakan statemen pembacaan. Namun, setiap kali kode pada (a) dieksekusi, kaki dan inci diinisialisasi dengan nilai yang sama kecuali jika Anda mengedit kode sumber, mengubah nilai, dan mengkompilasi-ulang. Di sisi lain, pada (b), setiap kali program dijalankan, Anda diminta untuk memasukkan nilai-nilai untuk kaki dan inci. Oleh karena itu, statemen pembacaan jauh lebih fleksibel daripada statemen penugasan.

Kadangkala diperlukan untuk menginisialisasi sebuah variabel menggunakan statemen penugasan. Ini terjadi jika variabel digunakan hanya untuk perhitungan internal dan bukan untuk pembacaan dan penyimpanan data.

Ingat bahwa C++ tidak secara otomatis menginisialisasi variabel ketika ia dideklarasikan. Beberapa variabel dapat diinisialisasi ketika ia dideklarasikan, sedangkan beberapa variabel lain diinisialisasi menggunakan statemen penugasan atau statemen pembacaan.

Contoh 1.19


Contoh berikutnya akan mengilustrasikan bagaimana statemen penugasan dan statemen pembacaan memanipulasi variabel. Perhatikan deklarasi berikut:

int angka1, angka2;
double z;
char ch;
string nama;

Selain itu, dimisalkan bahwa beberapa statemen berikut dieksekusi secara berurutan:

1.        angka1 = 4;
2.        angka2 = 2 * angka1+ 6;
3.        z = (angka1 + 1) / 2.0;
4.        ch = 'A';
5.        cin >> angka2;
6.        cin >> z;
7.        angka1= 2 * angka2 + static_cast<int>(z);
8.        cin >> nama;
9.        angka2 = angka2 + 1;
10.     cin >> ch;
11.     angka1= angka1+ static_cast<int>(ch);
12.     z = angka1- z;


Tabel 1.6 Nilai tiap variabel pada contoh 1.19


Selain itu, dimisalkan bahwa masukan yang diberikan adalah:

8  16.3  Jenny D

Baris ini memiliki empat nilai, yaitu 8, 16.3, Jenny, dan D, dan tiap nilai dipisahkan oleh sebuah spasi.

Sekarang akan ditentukan nilai dari tiap variabel terdeklarasi setelah statemen terakhir selesai dieksekusi. Untuk menunjukkan secara eksplisit bagaimana statemen tertentu mengubah nilai dari sebuah variabel, nilai dari tiap variabel setelah tiap statemen dieksekusi akan ditampilkan. Pada tabel tersebut, tanda tanya (?) di dalam kotak mengindikasikan bahwa nilai tidak diketahui.

Sebelum statemen 1 dieksekusi, semua variabel tak-terinisialisasi, seperti ditampilkan pada Gambar 1.2.



Gambar 1.2 Variabel-variabel sebelum statemen 1 dieksekusi

Tabel 1.6 menunjukkan nilai tiap variabel setelah eksekusi atas tiap statemen dilakukan.


Operator Inkremen dan Dekremen

Setelah Anda mengetahui bagaimana mendeklarasikan sebuah variabel dan menempatkan data ke dalam suatu variabel, pada bagian ini, Anda akan belajar tentang dua operator lain: operator inkremen dan operator dekremen. Kedua operator ini sangat sering dipakai oleh programer C++ dan merupakan perangkat pemrograman.

Dimisalkan bahwa kounter adalah sebuah variabel int. Statemen:

kounter = kounter + 1;

menginkremen nilai dari kounter sebesar 1. Untuk mengeksekusi statemen penugasan ini, komputer pertama-tama mengeksekusi ekspresi di sisi kanan, yaitu kounter + 1. Ia kemudian menugaskan nilai ini kepada variabel di sisi kiri, yaitu kounter.

Seperti yang akan Anda lihat pada bab-bab berikutnya, statemen-statemen semacam itu seringkali dipakai untuk menjejak berapa kali hal tertentu terjadi. Untuk tujuan itu, C++ menyediakan operator inkremen, ++, yang menambah nilai dari sebuah variabel sebesar 1, dan operator dekremen, --, yang mengurangi nilai sebuah variabel sebesar 1.

Masing-masing operator inkremen dan dekremen memiliki dua bentuk, pra dan pasca. Sintaks dari operator inkremen adalah:

Pra-inkremen: ++variabel
Pasca-inkremen: variabel++

Sintaks untuk operator dekremen adalah:

Pra-dekremen: --variabel
Pasca-dekremen: variabel--

Sekarang, akan didiskusikan beberapa contoh. Statemen:

++kounter;

atau

       kounter++;

menginkremen nilai dari kounter sebesar 1. Sama halnya, statemen:

--kounter;

atau

       kounter--;

mendekremen nilai dari kounter sebesar 1.

Karena kedua operator inkremen dan operator dekremen merupakan bagian integral di dalam C++, nilai dari variabel diinkremen atau didekremen tanpa harus menggunakan statemen penugasan.

Sekarang, Anda telah mengetahui bahwa operator pra-inkremen dan pasca-inkremen menginkremen variabel sebesar 1. Sama halnya, operator pra-dekremen dan pasca-dekremen mendekremen variabel sebesar 1. Pertanyaannya adalah apakah perbedaan antara bentuk pra dan pasca dari kedua operator tersebut? Perbedaannya akan menjadi nyata ketika variabel yang menggunakan kedua operator ini dipakai di dalam suatu ekspresi.

Dimisalkan bahwa x adalah sebuah variabel int. Jika ++x digunakan di dalam suatu ekspresi, nilai dari x pertama-tama diinkremen sebesar 1, dan kemudian nilai baru dari x tersebut dipakai untuk mengevaluasi ekspresi. Di sisi lain, jika x++ dipakai di dalam suatu ekspresi, pertama-tama nilai sekarang dari x dipakai di dalam ekspresi, dan kemudian nilai dari x diinkremen sebesar 1. Contoh berikut akan memperjelas perbedaan antara operator pra-inkremen dan pasca-inkremen.

Dimisalkan bahwa x dan y adalah dua variabel int. Perhatikan dua statemen berikut:

x = 5;
y = ++x;

Statemen pertama menugaskan nilai 5 kepada x. Untuk mengevaluasi statemen kedua, yang menggunakan operator pra-inkremen, pertama-tama nilai dari x diinkremen menjadi 6, dan kemudian nilai ini, 6, ditugaskan kepada y. Seteleh statemen kedua dieksekusi, kedua x dan y memiliki nilai 6.

Sekarang, perhatikan dua statemen berikut:

x = 5;
y = x++;

Seperti sebelumnya, statemen pertama menugaskan 5 kepada x. Pada statemen kedua, operator pasca-inkremen diterapkan terhadap x. Untuk mengeksekusi statemen kedua, pertama-tama nilai dari x, yaitu 5, dipakai untuk mengevaluasi ekspresi, dan kemudian nilai dari x diinkremen menjadi 6. Terakhir, nilai dari ekspresi, yaitu 5, disimpan di dalam y. Setelah statemen kedua dieksekusi, nilai dari x adalah 6, dan nilai dari y adalah 5.

Contoh berikut lebih lanjut mengilustrasikan bagaimana format pra dan pasca dari operator inkremen bekerja.

Contoh 1.20


Dimisalkan bahwa a dan b adalah dua variabel int dan:

a = 5;
b = 2 + (++a);

Statemen pertama menugaskan 5 kepada a. Untuk mengeksekusi statemen kedua, pertama-tama ekspresi 2 + (++a) dievaluasi. Karena operator pra-inkremen diterapkan terhadap a, nilai dari a lebih dahulu diinkremen menjadi 6. Kemudian 2 ditambahkan pada 6 untuk mendapatkan 8, yang kemudian ditugaskan kepada b. Oleh karena itu, setelah statemen kedua dieksekusi, a bernilai 6 dan b bernilai 8.

Di sisi lain, setelah eksekusi atas dua statemen berikut:

a = 5;
b = 2 + (a++);

Nilai dari a adalah 6 sedangkan nilai dari b adalah 7.


Statemen Keluaran

Pada beberapa bagian sebelumnya, Anda telah melihat bagaimana menempatkan data ke dalam memori komputer dan bagaiman memanipulasi data tersebut. Anda juga telah menggunakan beberapa statemen keluaran untuk menampilkan hasil pada divais keluaran standar. Bagian ini akan menjelaskan cukup detil tentang bagaimana kegunaan statemen keluaran untuk menampilkan hasil yang diinginkan.

Dalam C++, menampilkan pada divais keluaran standar dilakukan lewat penggunaan cout dan operator <<. Sintaks umum dari cout dengan << adalah:

cout << ekspresi atau manipulator << ekspresi atau manipulator...;

Ini dinamakan dengan statemen keluaran. Dalam C++, << dikenal dengan operator penyisipan aliran. Penggunaan cout harus menaati dua aturan berikut:
1.      Ekspresi dievaluasi, dan nilainya ditampilkan pada titik penyisipan sekarang pada divais keluaran.
2.      Sebuah manipulator dipakai untuk memformat keluaran. Manipulator tersederhana adalah endl, yang menyebabkan titik penyisipan berpindah ke awal baris berikutnya.

Contoh selanjutnya mengilustrasikan bagaiman sebuah statemen keluaran bekerja. Pada suatu statemen keluaran, string atau ekspresi yang hanya melibatkan satu variabel atau satu nilai dievaluasi ke dirinya sendiri.

Contoh 1.21


Perhatikan beberapa statemen berikut. Keluaran ditunjukkan di sisi kanan tiap statemen.


 Statemen
Keluaran
1
cout << 29 / 4 << endl;
7
2
cout << "Danau Toba." << endl;
Danau Toba
3
cout << 12 << endl;
12
4
cout << "4 + 7" << endl;
4 + 7
5
cout << 4 + 7 << endl;
11
6
cout << 'A' << endl;
A
7
cout << "4 + 7 = " << 4 + 7 << endl;
4 + 7 = 11
8
cout << 2 + 3 * 5 << endl;
17
9
cout << "Danau \nToba." << endl;
Danau
Toba

Perhatikan keluaran dari statemen 9. Ingat bahwa pada C++, karakter garis-baru adalah ‘\n’; ia menyebabkan titik penyisipan untuk berpindah ke awal baris berikutnya sebelum menampilkan sesuatu. Oleh karena itu, ketika \n muncul di dalam sebuah string pada suatu statemen keluaran, ia menyebabkan titik penyisipan berpindah ke awal baris berikutnya pada divais keluaran. Fakta ini menjelaskan mengapa Danau dan Toba ditampilkan pada baris terpisah.

Ingat bahwa semua variabel harus diinisialisasi secara benar; jika tidak, nilai yang disimpan di dalamnya tidak akan masuk akan. Selain itu, ingat bahwa C++ tidak secara otomatis menginisialisasi variabel.

Jika angka adalah sebuah variabel int, maka keluaran dari statemen C++:

cout << angka << endl;


akan bermakna jika dan hanya jika angka telah diberikan sebuah nilai. Sebagai contoh, runtun statemen C++:

angka = 45;
cout << angka << endl;

akan menghasilkan keluaran 45.

Contoh 1.22


Perhatikan program C++ berikut:

// Program ini mengilustrasikan bagaiman statemen keluaran bekerja.

#include <iostream>

using namespace std;

int main()
{
    int a, b;
    a = 65; //Baris 1
    b = 78; //Baris 2

    cout << 29 / 4 << endl;                                          //Baris 3
    cout << 3.0 / 2 << endl;                                         //Baris 4
    cout << "Danau Toba.\n";                                         //Baris 5
    cout << 7 << endl;                                        //Baris 6
    cout << 3 + 5 << endl;                                    //Baris 7
    cout << "3 + 5";                                                 //Baris 8
    cout << endl;                                             //Baris 9
    cout << a << endl;                                        //Baris 10
    cout << "a" << endl;                                      //Baris 11
    cout << (a + 5) * 6 << endl;                              //Baris 12
    cout << 2 * b << endl;                                    //Baris 13

    return 0;
}

Keluaran Program:

7
1.5
Danau Toba.
7
8
3 + 5
65
a
420
156

Untuk sebagian besar kode, keluaran cukup sederhana. Lihat keluaran dari tiap statemen pada baris 7, 8, 9, dan 10. Statemen pada baris 7 menampilkan hasil dari 3 + 5, yaitu 8, dan memindahkan titik penyisipan ke awal baris berikutnya. Statemen pada baris 8 menampilkan string 3 + 5. Perhatikan bahwa statemen pada baris 8 hanya memuat string 3 + 5. Oleh karena itu, setelah menampilkan 3 + 5, titik penyisipan diposisikan setelah 5; ia tidak berpindah ke awal baris berikutnya.

Keluaran statemen pada baris 9 hanya memuat manipulator endl, yang memindahkan titik penyisipan ke awal baris berikutnya. Oleh karena itu, ketika statemen pada baris 10 dieksekusi, keluaran dimulai di awal baris. Selanjutnya, statemen pada baris 10 menampilkan nilai dari a, yaitu 65. Manipulator endl kemudian memindahkan titik penyisipan ke awal baris berikutnya.

Sekarang, perhatikan lebih dekat pada karakter garis-baru, ‘\n’. Perhatikan dua statemen C++ berikut:

cout << "Hallo semua.";
cout << "Nama saya adalah Roro.";

Kedua statemen di atas dieksekusi secara berurutan, maka keluarannya adalah:

Hallo semua. Nama saya adalah Roro.

Sekarang, perhatikan dua statemen C++ berikut:

cout << "Hallo semua.\n";
cout << "Nama saya adalah Roro.";

Keluaran dari kedua statemen C++ di atas adalah:

Hallo semua.
Nama saya adalah Roro.

Ketika \n dijumpai di dalam string, titik penyisipan akan diposisikan di awal baris berikutnya. Perhatikan pula bahwa \n dapat muncul di mana saja di dalam string. Sebagai contoh, keluaran dari statemen:

cout << "Hallo \nsemua. \nNama saya adalah Roro.";

adalah:

Hallo
semua.
Nama saya adalah Roro.

Selain itu, perhatikan bahwa keluaran dari statemen:

cout << '\n';

adalah sama dengan keluaran dari statemen:

cout << "\n";

yang ekivalen dengan keluaran dari statemen:

cout << endl;


Jadi, keluaran dari runtun statemen:

cout << "Hallo semua.\n";
cout << "Nama saya adalah Roro.";

ekivalen dengan keluaran dari runtun statemen:

cout << "Hallo semua." << endl;
cout << "Nama saya adalah Roro.";

Contoh 1.23


Perhatikan statemen C++ berikut:

cout << "Hallo semua.\nNama saya adalah Roro.";

atau

cout << "Hallo semua.";
cout << "\nNama saya adalah Roro.";

atau

cout << "Hallo semua.";
cout << endl << "Nama saya adalah Roro.";

Pada tiap kasus, keluaran dari statemen adalah:

Hallo semua.
Nama saya adalah Roro.

Contoh 1.24


Keluaran dari statemen C++:

cout << "Hitung...\n....1\n.....2\n......3";

atau:

cout << "Hitung..." << endl << "....1" << endl
     << ".....2" << endl << "......3";

adalah:

Hitung...
....1
.....2
......3

Contoh 1.25


Dimisalkan bahwa Anda ingin menampilkan kalimat berikut dalam satu baris sebagai bagian dari suatu pesan:

Hari ini cerah, hangat, dan tidak mendung. Kita dapat pergi berenang.

Nyatalah, Anda akan menggunakan sebuah statemen keluaran untuk menghasilkan keluaran ini. Namun, pada kode pemrograman, statemen ini bisa jadi terlalu panjang untuk ditempatkan pada satu baris statemen. Jadi, Anda dapat menggunakan statemen keluaran jamak sebagai berikut:

cout << "Hari ini cerah, hangat, dan tidak mendung. ";
cout << "Kita bisa pergi berenang." << endl;

Perhatikan bahwa titik-koma di akhir statemen pertama dan pengenal cout di awal statemen kedua. Selain itu, perhatikan bahwa tidak ada manipulator endl di akhir statemen pertama. Di sini, dua statemen keluaran dipakai untuk menampilkan kalimat pada satu baris. Secara ekivalen, Anda dapat menggunakan statemen keluaran berikut untuk menampilkan kalimat ini:

cout << "Hari ini cerah, hangat, dan tidak mendung. "
     << "Kita bisa pergi berenang." << endl;

Pada statemen ini, perhatikan bahwa tidak ada titik-koma di akhir baris pertama, dan pengenal cout tidak muncul di awal baris kedua. Karena tidak ada titik-koma di akhir baris pertama, statemen keluaran ini berlanjut sampai baris kedua. Selain itu, perhatikan tanda kutip ganda di awal dan akhir kalimat pada tiap baris. String dibagi menjadi dua string, tetapi kedua string adalah bagian dari statemen keluaran yang sama.

Jika sebuah string yang muncul di dalam suatu statemen keluaran panjan dan Anda ingin menampilkan string tersebut pada satu baris, maka Anda dapat memecah string dengan menggunakan salah satu dari dua metode sebelumnya. Namun, statemen berikut adalah tidak benar:

cout << "Hari ini cerah, hangat, dan tidak mendung.
Kita bisa pergi berenang." << endl;                           //salah

Dengan kata lain, kunci Enter pada papanketik Anda tidak bisa menjadi bagian dari string. Yaitu, pada kode pemrograman, sebuah string tidak dapat dipecah menjadi lebih dari satu baris dengan menggunakan kunci Enter.

Ingat bahwa karakter garis-baru adalah \n, yang menyebabkan titik penyisipan berpindah ke awal baris berikutnya. Ada beberapa runtun escape dalam C++, yang membolehkan Anda untuk mengendalikan keluaran. Tabel 1.7 mencantumkan beberapa runtun escape yang umum dijumpai.

Tabel 1.7 Beberapa runtun escape yang sering digunakan

Runtun escape
Penjelasan
\n
Garis-baru (newline)
Kursor pindah ke awal baris berikutnya
\t
Tab
Kursor pindah ke perhentian tab berikutnya
\b
Backspace
Kursor bergeser satu spasi ke kiri
\r
Return
Kursor pindah ke awal baris sekarang (bukan baris berikutnya)
\\
Backslash
Garis-miring ditampilkan
\'
Kutip tunggal (single quotation)
Tanda kutip tunggal ditampilkan
\"
Kutip ganda (double quotation)
Tanda kutip ganda ditampilkan

Contoh berikut menunjukkan efek dari beberapa runtun escape.

Contoh 1.26


Keluaran dari statemen:

cout << "Runtun escape garis-baru adalah \\n" << endl;

adalah

Runtun escape garis-baru adalah \n

Keluaran dari statemen:

cout << "Karakter tab direpresentasikan sebagai \'\\t\'" << endl;

adalah

Karakter tab direpresentasikan sebagai ‘\t’

Perhatikan bahwa kutip tunggal dapat pula ditampilkan tanpa menggunakan runtun escape. Oleh karena itu, statemen sebelumnya ekivalen dengan statemen keluaran berikut:

cout << "Karakter tab direpresentasikan sebagai '\\t'" << endl;

Keluaran dari statemen:

cout << "String \"Cerah\" memuat lima karakter." << endl;

adalah:

String “cerah” memuat lima karakter.

Untuk menggunakan cin dan cout di dalam sebuah program, Anda harus mencantumkan file header tertentu. Bagian selanjutnya akan menjelaskan apa itu file header, bagaimana mencantumkan sebuah file header di dalam program, dan mengapa Anda memerlukan file header di dalam sebuah program. Bab 2 akan memberikan penjelasan utuh tentang cin dan cout.


Direktif Praprosesor (Preprocessor Directive)

Hanya sejumlah kecil operasi, seperti operasi aritmatik dan operasi penugasan, yang terdefinisi secara eksplisit dalam C++. Banyak fungsi dan simbol yang dibutuhkan untuk menjalankan sebuah program C++ disediakan sebagai suatu koleksi pustaka. Setiap pustaka memiliki nama dan dikenal sebagai file header. Sebagai contoh, deskripsi atas fungsi-fungsi yang diperlukan untuk melakukan operasi masukan/keluaran (I/O, input/output) dimuat di dalam file header iostream. Sama halnya, deskripsi atas fungsi-fungsi matematik, seperti pangkat, absolut, dan sinus, dimuat di dalam file header cmath. Jika Anda ingin menggunakan fungsi-fungsi I/O atau matematik, maka Anda perlu memberitahu komputer dimana untuk menemukan kode yang diperlukan. Anda menggunakan direktif praprosesor dan nama file header untuk memberitahu komputer tentang lokasi dari kode yang disediakan di dalam pustaka. Direktif praprosesor diproses oleh sebuah program yang dinamakan dengan praprosesor atau preprocessor.

Direktif praprosesor merupakan perintah yang diberikan kepada praprosesor yang menyebabkan praprosesor untuk memodifikasi teks dari sebuah program C++ sebelum ia dikompilasi. Semua perintah praprosesor diawali dengan #. Tidak diperlukan titik-koma di akhir perintah praprosesor karena ia bukanlah statemen C++. Untuk menggunakan sebuah file header di dalam program C++, Anda perlu menggunakan direktif praprosesor include.

Sintaks umum untuk mencantumkan sebuah file header (disediakan oleh IDE) di dalam sebuah program C++ adalah:

#include <namaFileHeader>

Sebagai contoh, statemen berikut mencantumkan file header iostream di dalam sebuah program C++:

#include <iostream>

Direktif praprosesor yang dipakai untuk mencantumkan file header ditempatkan sebagai baris pertama pada program sehingga setiap pengenal yang dideklarasikan pada file header tersebut dapat digunakan pada program. (Ingat bahwa dalam C++, pengenal harus dideklarasikan sebelum ia digunakan).

Perhatikan bahwa perintah praprosesor diproses oleh praprosesor sebelum program dikompilasi oleh kompiler.

namespace dan Menggunakan cin dan cout
Sebelumnya, Anda telah belajar bahwa cin dan cout merupakan pengenal terpradefinisi. Dalam C++ Standar ANSI/ISO, kedua pengenal ini dideklarasikan di dalam file header iostream, tetapi berada di dalam sebuah namespace. Nama dari namespace ini adalah std. (Mekanisme namespace akan didiskusikan pada Bab 7. Untuk sekarang, Anda hanya perlu mengetahui bagaimana menggunakan cin dan cout).

Ada beberapa cara sehingga Anda dapat menggunakan sebuah pengenal yang dideklarasikan di dalam namespace std. Salah satu cara dalam menggunakan cin dan cout adalah dengan memakai std::cin dan std::cout pada seluruh program.

Opsi lain adalah dengan mencantumkan statemen berikut di dalam program Anda:

using namespace std;

Statemen ini muncul setelah statemen #include<iostream>. Anda kemudian dapat menggunakan cin dan cout tanpa membubuhi prefiks std::.  Untuk menyederhanakan penggunaan cin dan cout, buku ini menggunakan cara yang kedua. Yaitu, untuk menggunakan cin dan cout di dalam sebuah program, buku ini akan memuat dua statemen berikut:

#include <iostream>

using namespace std;

Dalam C++, namespace dan using adalah katakunci.

Mekanisme namespace merupakan sebuah fitur dari C++ Standar ANSI/ISO. Semakin Anda mempelajari pemrograman C++,  Anda akan semakin familiar dengan file-file header lainnya. Sebagai contoh, file header cmath memuat beberapa spesifikasi dari fungsi-fungsi matematik. Sama halnya, file header iomanip memuat beberapa spesifikasi dari fungsi-fungsi dan manipulator-manipulator yang membantu Anda dalam memformat keluaran dengan cara tertentu.

Menggunakan Tipe Data string
Ingat bahwa tipe data string adalah tipe data yang didefinisikan oleh pengguna dan secara langsung tidak tersedia di dalam program. Untuk menggunakan tipe data string, Anda perlu mengakses definisinya dari file header string. Oleh karena itu, untuk menggunakan tipe data string di dalam sebuah program, Anda harus mencantumkan direktif praprosesor berikut:

#include <string>


Menciptakan Sebuah Program C++

Pada beberapa bagian sebelumnya, Anda telah cukup belajar beberapa konsep C++ untuk menuliskan program sederhana. Sekarang, Anda siap untuk menciptakan sebuah program C++ yang utuh.

Program C++ merupakan sekumpulan fungsi, salah satunya adalah fungsi main. Oleh karena itu, jika sebuah program C++ hanya memuat satu fungsi, maka ia harus lah fungsi main. Selain itu,  fungsi adalah sekumpulan instruksi yang didesain untuk melakukan tugas tertentu. Sampai Bab 5, Anda hanya akan berhubungan dengan fungsi main.

Statemen untuk mendeklarasikan variabel, statemen untuk memanipulasi data (seperti penugasan), dan statemen untuk membaca dan menampilkan data ditempatkan di dalam fungsi main. Statemen untuk mendeklarasikan konstanta bernama biasanya ditempatkan di luar fungsi main.

Sintaks dari fungsi main yang digunakan pada buku ini memiliki bentuk:

int main()
{
statemen_1
.
.
.
statemen_n

return 0;
}

Pada sintaks dari fungsi main, setiap statemen (statemen_1, ..., statemen_n) biasanya berupa statemen deklaratif atau statemen tereksekusikan (executable). Statemen return 0; harus dicantumkan di dalam fungsi main dan harus merupakan statemen terakhir. Jika statemen return 0; ditempatkan secara salah, maka hasil yang diberikan oleh program bisa jadi tidak seperti yang Anda harapkan. Makna statemen return 0; akan didiskusikan pada Bab 5. Dalam C++, return adalah sebuah katakunci.

Bagian-bagian dasar dari fungsi main adalah kepala dan tubuh. Baris pertama dari fungsi main adalah:

int main()

yang dinamakan dengan kepala fungsi main. Statemen-statemen yang diapit oleh sepasang kurung-kurawal ({ dan }) membentuk tubuh fungsi main.

Statemen deklaratif digunakan untuk mendeklarasikan sesuatu, seperti variabel.

Contoh 1.27


Dua statemen berikut merupakan contoh dari statemen deklaratif:

int a, b, c;
double x, y;

Statemen tereksekusikan (executable) dipakai untuk melakukan perhitungan, memanipulasi data, menciptakan keluaran, menerima masukan, dan lainnya. Beberapa statemen tereksekusikan yang Anda jumpai sejauh ini adalah statemen penugasan, statemen pembacaan/masukan, dan statemen keluaran.

Contoh 1.28


Tiga statemen berikut merupakan contoh dari statemen tereksekusikan:

a = 4;                            //statemen penugasan
cin >> b;                         //statemen masukan/pembacaan
cout << a << " " << b << endl;    //statemen keluaran

Dalam bentuk kasar, sebuah program C++ akan tampak seperti berikut:

//komentar, jika diperlukan

direktif-direktif praprosesor untuk mencantumkan file-file header

using statemen

konstanta-konstanta bernama, jika diperlukan

int main()
{
    statemen_1
    .
    .
    .
    statemen_n

    return 0;
}

Program C++ pada contoh 1.29 menunjukkan dimana mencantumkan statemen-statemen, statemen deklarasi, statemen tereksekusikan, dan seterunya pada program secara umum.

Contoh 1.29


//***************************************************************
// Program ini menunjukkan dimana mencantumkan statemen-statemen,
// menggunakan statemen, konstanta bernama, deklarasi variabel,
// statemen penugasan, dan statemen masukan/keluaran secara umum.
//***************************************************************

#include <iostream>                             //Baris 1

using namespace std;                                   //Baris 2

const int ANGKA = 12;                                  //Baris 3

int main()                                      //Baris 4
{                                               //Baris 5
    int angkaPertama;                                  //Baris 6
    int angkaKedua;                             //Baris 7

    angkaPertama = 18;                          //Baris 8
    cout << "Baris 9: angkaPertama = " << angkaPertama
         << endl;                               //Baris 9

    cout << "Baris 10: Masukkan sebuah integer: ";     //Baris 10
    cin >> angkaKedua;                          //Baris 11
    cout << endl;                               //Baris 12

    cout << "Baris 13: angkaKedua = " << angkaKedua
         << endl;                               //Baris 13

    angkaPertama = angkaPertama + ANGKA + 2 * angkaKedua; //Baris 14

    cout << "Baris 15: Nilai baru dari "
         << "angkaPertama = " << angkaPertama << endl;//Baris 15

    return 0;                                          //Baris 16
}                                               //Baris 17

Keluaran Program:

Baris 9: angkaPertama = 18
Baris 10: Masukkan sebuah integer: 15

Baris 13: angkaKedua = 15
Baris 15: Nilai baru dari angkaPertama = 60

Program sebelumnya bekerja sebagai berikut: Statemen pada baris 1 mencantumkan file header iostream sehingga program dapat melakukan operasi masukan/keluaran. Statemen pada baris 2 menggunakan statemen using namespace sehingga semua pengenal yang dideklarasikan di dalam file header iostream, seperti cin, cout, dan endl, dapat digunakan tanpa membubuhi prefiks std::. Statemen pada baris 3 mendeklarasikan konstanta bernama, ANGKA, dan menetapkan nilainya menjadi 12. Statemen pada baris 4 memuat kepala fungsi main, dan kurung kurawal kiri pada baris 5 menandai awal dari fungsi main. Statemen pada baris 6 dan baris 7 mendeklarasikan variabel angkaPertama dan angkaKedua.

Statemen pada baris 8 menetapkan nilai dari angkaPertama menjadi 18, dan statemen pada baris 9 menampilkan nilai dari angkaPertama. Selanjutnya, statemen pada baris 10 meminta pengguna untuk memasukkan sebuah integer. Statemen pada baris 11 membaca dan menyimpan integer tersebut ke dalam variabel angkaKedua, yang bernilai 15 pada keluaran program. Statemen pada baris 12 memposisikan kursor pada monitor di awal baris berikutnya. Statemen pada baris 13 menampilkan nilai dari angkaKedua. Statemen pada baris 14 mengevaluasi ekspresi: angkaPertama + ANGKA + 2 * angkaKedua dan menugaskan nilai dari ekspresi ini kepada variabel angkaPertama, yang merupakan 60 pada keluaran program. Statemen pada baris 15 menampilkan nilai baru dari angkaPertama. Statemen pada baris 16 memuat statemen return. Kurung kurawal kanan pada baris 17 menandai akhir dari fungsi main.


Bentuk dan Gaya Program

Pada beberapa bagian sebelumnya, Anda telah cukup belajar tentang beberapa konsep dalam menulis program C++. Sebelum menulis program, Anda perlu belajar struktur program yang tepat. Penggunaan struktur yang tepat pada sebuah program C++ akan membuat program menjadi lebih mudah dipahami dan dimodifikasi. Kadangkala sangat menyusahkan untuk memahami dan memodifikasi sebuah program yang secara sintaks benar tetapi tidak memiliki struktur penulisan program yang baik.

Di samping itu, setiap program C++ harus memenuhi aturan-aturan bahasa. Sebuah program C++ harus memuat fungsi main.  Ia juga harus mengikuti aturan sintaks, yang seperti tata-bahasa, memberitahu mana yang benar dan mana yang salah. Aturan-aturan lain berperan untuk memberikan makna presisi pada bahasa; yaitu, mendukung semantika bahasa.

Beberapa bagian ke depan didesain untuk membantu Anda belajar bagaiman menggunakan elemen-elemen pemrograman C++ yang telah Anda pelajari sejauh ini untuk menciptakan sebuah program yang baik (bukan hanya benar secara sintaks). Beberapa bagian ke depan akan merangkum sintaks; kegunaan dari spasi; kegunaan dari titik-koma, kurung-kurawal, dan koma; semantika; penamaan pengenal; prompt line; dokumentasi, termasuk komentar; bentuk dan gaya.

Sintaks
Aturan-aturan sintaks suatu bahasa memberitahu apa yang benar dan apa yang salah. Error pada sintaks dideteksi selama kompilasi. Sebagai contoh, perhatikan beberapa statemen C++ berikut:

int x;        //Baris 1
int y         //Baris 2
double z;     //Baris 3
y = w + x;    //Baris 4

Ketika semua statemen ini dikompilasi, suatu error kompilasi akan terjadi pada baris 2 karena titik-koma hilang setelah deklarasi variabel. Error kompilasi yang kedua terjadi pada baris 4 karena pengenal w digunakan tetapi belum dideklarasikan.

Anda mengetik program menggunakan sebuah editor teks. Ketika program diketik, error hampir tidak terelakkan. Oleh karena itu, ketika program dikompilasi, Anda hampir selalu melihat error sintaks. Sangat mungkin bahwa sebuah error sintaks di suatu tempat akan menyebabkan error sintaks di beberapa statemen lain. Sering dijumpai bahwa pengabaian sebuah karakter dapat menyebabkan empat atau lima pesan error. Namun, ketika error sintaks pertama diperbaiki dan program dikompilasi-ulang, beberapa error sintaks yang diakibatkan oleh error sintaks ini akan hilang. Oleh karena itu, Anda sebaiknya memperbaiki error sintaks secara berurutan, seperti yang dicantumkan oleh kompiler. Begitu Anda menjadi familiar dan berpengalaman dengan C++, Anda akan belajar bagaiman secara cepat mendeteksi dan memperbaiki error sintaks. Selain itu, kompiler tidak hanya menemukan error sintaks, tetapi juga memberitahukan ancar-ancar atau kisi-kisi dan kadangkala memberitahu pengguna di mana error sintaks berada dan bagaimana memperbaikinya.

Kegunaan Spasi
Dalam C++, Anda menggunakan satu atau lebih spasi untuk memisahkan angka-angka ketika data dimasukkan (dibaca). Spasi juga digunakan untuk memisahkan katakunci dan pengenal satu sama lain dari simbol lain. Spasi tidak dapat berada di dalam sebuah katakunci atau pengenal.

Kegunaan Titik-Koma, Kurung-Kurawal, dan Koma
Semua statemen C++ harus diakhiri dengan titik-koma. Titik-koma juga dikenal dengan penghenti (terminator) statemen.

Perhatikan bahwa kurung-kurawal, { dan }, bukanlah statemen C++, meskipun ia seringkali muncul pada sebuah baris dan tanpa kode lain. Anda dapat memandang kurung-kurawal sebagai pembatas (delimiter), karena ia mengapit tubuh sebuah fungsi dan memisahkannya dari bagian-bagian program lain. Kurung-kurawal mempunyai beberapa kegunaan lain, yang akan dijelaskan nanti.

Ingat bahwa koma dipakai untuk memisahkan antar item di dalam sebuah daftar. Sebagai contoh, Anda dapat menggunakan koma untuk mendeklarasikan lebih dari satu variabel.

Semantika
Sekumpulan aturan yang memberi makna pada suatu bahasa disebut dengan semantika. Sebagai contoh, aturan urutan keutamaan untuk operator-operator aritmatik merupakan aturan semantik.

Jika sebuah program memuat error sintaks, maka kompiler akan mengingatkan Anda. Apa yang terjadi ketika program memuat error semantik? Sangat mungkin terjadi bahwa Anda telah memperbaiki semua error sintaks di dalam suatu program tetapi tetap saja program masih tidak bisa dijalankan. Dan jika ia bisa dijalankan, program tidak melakukan apa yang Anda inginkan untuk dilakukannya. Sebagai contoh, dua baris kode berikut merupakan ekspresi dengan sintaks tanpa kesalahan:

2 + 3 * 5

dan:

(2 + 3) * 5

Aturan sintaks tidak ada yang salah, tetapi semantika bisa berbeda. Anda akan belajar tentang semantika pada buku ini.

Penamaan Pengenal
Perhatikan dua kelompok statemen berikut:

const double A = 2.54;     //konstanta konversi
double x;                  //variabel untuk memuat sentimeter
double y;                  //variabel untuk memuat inci

x = y * a;

dan:

const double SENTIMETER_PER_INCI = 2.54;
double sentimeter;
double inci;

sentimeter = inci * SENTIMETER_PER_INCI;

Pengenal-pengenal pada kelompok statemen kedua, seperti SENTIMETER_PER_INCI, merupakan pengenal dengan pendokumentasi-diri. Seperti yang dapat Anda lihat, pengenal pendokumentasi-diri dapat membuat komentar menjadi kurang perlu.

Perhatikan pengenal pendokumentasi-diri penjualantahunan. Pengenal ini lebih dari satu kata. Dalam pengenal pendokumentasi-diri, Anda bisa saja secara tak sengaja mencantumkan pengenal yang mengurangi kejelasan dokumentasi Anda. Untuk membuatnya lebih mudah dipahami, Anda bisa memberikan huruf besar pada tiap awal kata baru atau dengan menyisipkan garis-bawah (underscore) sebelum kata baru. Sebagai contoh, Anda bisa menggunakan penjualanTahunan atau penjualan_tahunan untuk menciptakan pengenal yang lebih jelas.

Prompt Line
Bagian dari dokumentasi yang baik adalah penggunaan prompt yang ditulis secara jelas sehingga pengguna akan mengetahui apa yang perlu dilakukan ketika berinteraksi dengan sebuah program. Tidak ada yang lebih membuat pusing daripada harus menjalankan sebuah program dan tidak mengetahui apa yang harus masukkan untuk dibaca program. Prompt line merupakan statemen tereksekusikan yang memberitahu pengguna apa yang perlu dilakukan. Sebagai contoh, perhatikan dua statemen C++ berikut, dimana angka merupakan sebuah variabel int:

cout << "Silahkan masukkan sebuah angka antara 1 dan 10 dan "
     << "tekan kunci Enter" << endl;
cin >> angka;

Ketika kedua statemen tersebut dieksekusi, pertama-tama statemen keluaran akan menyebabkan baris teks berikut tampil di layar:

Silahkan masukkan sebuah angka antara 1 dan 10 dan tekan kunci Enter

Setelah melihat baris teks ini, pengguna mengetahui apa yang perlu dimasukkan dan menekan kunci Enter. Jika program hanya memuat statemen kedua, pengguna tidak akan mengetahui apakah yang harus dimasukkan suatu angka atau karakter atau yang lain. Ini merupakan contoh prompt line.

Pada sebuah program, kapanpun masukan diperlukan dari pengguna, Anda harus mencantumkan prompt line yang diperlukan. Di samping itu, prompt line harus mencakup sebanyak mungkin informasi tentang apa masukan yang dapat diterima oleh program. Sebagai contoh, prompt line sebelumnya tidak hanya memberitahu pengguna untuk memasukkan sebuah angka, tetapi juga memberitahu pengguna bahwa angka harus berada di antara 1 dan 10.


Dokumentasi
Program yang Anda tulis harus jelas bukan hanya untuk Anda, tetapi juga untuk orang lain. Oleh karena itu, Anda harus secara layak mendokumentasikan program Anda. Program yang terdokumentasi secara baik lebih mudah dipahami dan dimodifikasi, bahkan jika Anda telah menuliskan program tersebut pada waktu lampau yang lama. Anda menggunakan komentar untuk mendokumentasikan program. Komentar harus ditempatkan di dalam program untuk menjelaskan tujuan program, mengidentifikasi siapa yang menulisnya, dan menjelaskan tujuan dari statemen tertentu.



Bentuk dan Gaya
Anda mungkin berpikir bahwa C++ mempunyai terlalu banyak aturan. Tetapi, pada kenyataannya, aturan-aturan tersebut memberikan C++ kebebasan yang cukup besar. Sebagai contoh, perhatikan dua cara dalam mendeklarasikan variabel berikut:

int kaki, inci;
double x, y;

dan:

int kaki,inci; double x,y;

Komputer tidak akan kesulitan untuk memahami kedua bentuk ini, tetapi bentuk pertama lebih mudah dibaca dan dipahami. Tentu, pengabaian satu koma atau titik-koma pada kedua bentuk akan menyebabkan pesan-pesan error yang aneh.

Bagaimana dengan spasi? Apakah spasi berguna atau sia-sia? Perhatikan dua statemen berikut:

int a,b,c;

dan:

int a, b, c;

Kedua deklarasi itu bermakna sama. Di sini, spasi di antara pengenal pada statemen kedua tidak bermakna (hanya dipakai untuk mempermudah pembacaan program). Di sisi lain, perhatikan statemen berikut:

inta,b,c;

Statemen ini memuat error sintaks. Tidak adanya spasi di antara int dan pengenal a akan mengubah katakunci int dan pengenal a menjadi sebuah pengenal baru, inta.

Contoh berikut akan mengelaborasi hal ini.

Contoh 1.30


Perhatikan program C++ berikut:

//Sebuah program C++ yang diformat tidak layak.

#include <iostream>
#include <string>
using namespace std;

int main()
{
int angka; double tinggi;
string nama;
cout << "Masukkan sebuah integer: "; cin >> angka; cout << endl;
    cout<<"angka: "<<angka<<endl;
cout<<"Masukkan nama pertama: "; cin>>nama;
    cout<<endl; cout <<"Masukkan tingi: ";
cin>>tinggi; cout<<endl;

cout<<"Nama: "<<nama<<endl;cout<<"Tinggi: "
<<tinggi; cout <<endl;return 0;
}

Program ini secara sintaks benar; kompiler C++ tidak akan mengalami kesulitan pembacaan dan pengkompilasian program ini. Namun, program ini sangat susah dibaca manusia. Program yang Anda tulis sebaiknya ditata dan diformat dengan layak. Perhatikan perbedaannya ketika program ini diformat-ulang:

//Sebuah program C++ yang diformat tidak layak.

#include <iostream>
#include <string>

using namespace std;

int main()
{
    int angka;
    double tinggi;
    string nama;

    cout << "Masukkan sebuah integer: ";
    cin >> angka;
    cout << endl;
    cout << "angka: " << angka << endl;

    cout << "Masukkan nama pertama: ";
    cin >> nama;
    cout << endl;
      
    cout << "Masukkan tingi: ";
    cin >> tinggi;
    cout << endl;

    cout << "Nama: " << nama << endl;
    cout << "Tinggi: " << tinggi;
    cout << endl;

    return 0;
}

Seperti yang dapat Anda lihat, program ini lebih mudah dibaca. Program Anda sebaiknya tertata dan terformat dengan baik. Untuk mendokumentasikan variabel, programer umumnya mendeklarasikan satu variabel per baris. Selain itu, Anda sebaiknya menempatkan sebuah spasi sebelum dan sesudah operator. Ketika Anda mengetikkan program Anda menggunakan IDE, umumnya, program Anda secara otomatis terindentasi (terformat).


Sekali Lagi, Statemen Penugasan

Semua statemen penugasan yang telah Anda lihat sejauh ini dinamakan dengan statemen penugasan sederhana. Pada beberapa kasus tertentu, Anda dapat menggunakan statemen penugasan spesial yang dinamakan dengan statemen penugasan gabungan untuk menuliskan beberapa statemen penugasan sederhana dalam notasi yang lebih singkat atau pendek.

Terkait dengan lima operator aritmatik +, -, *, /, dan %, C++ menyediakan lima operator gabungan +=, -=, *=, /=, dan %=. Perhatikan statemen penugasan sederhana berikut, dimana di dalamnya x dan y adalah variabel int:

x = x * y;

Dengan menggunakan operator gabungan *=, statemen ini dapat ditulis-ulang sebagai:

x *= y;

Secara umum, dengan menggunakan operator gabungan *=, Anda dapat menulis-ulang statemen penugasan sederhana:

variabel = variabel * (ekspresi);

sebagai:

variabel *= ekspresi;

Operator-operator aritmatik gabungan yang lain memiliki konvensi yang sama. Sebagai contoh, dengan menggunakan operator +=, Anda dapat menulis-ulang statemen penugasan sederhana:

variabel = variabel + (ekspresi);

sebagai:

variabel += ekspresi;

Statemen penugasan gabungan membolehkan Anda untuk menulis statemen penugasan sederhana dengan notasi singkat dengan menggabungkan operator aritmatik dengan operator penugasan.


CONTOH PEMROGRAMAN: Mengkonversi Panjang
Tulislah sebuah program yang mengambil panjang sebagai masukan yang diekspresikan dalam kaki dan inci. Program kemudian harus mengkonversi dan menampilkan panjang dalam sentimeter. Diasumsikan bahwa panjang yang diberikan dalam kaki dan inci adalah integer.

Masukan: Panjang dalam kaki dan inci.
Keluaran: Panjang ekivalen dalam sentimeter

Analisa Masalah dan Desain Algoritma
Panjang diberikan dalam kaki dan inci, dan Anda perlu mencari panjang ekivalen dalam sentimeter. Satu inci sama dengan 2.54 sentimeter. Hal pertama yang perlu dilakukan program adalah mengkonversi panjang yang diberikan dalam kaki dan inci menjadi semua dalam inci. Kemudian, Anda dapat menggunakan formula konversi, 1 inci = 2.54 sentimeter, untuk menemukan panjang ekivalen dalam sentimeter. Untuk mengkonversi panjang dari kaki dan inci menjadi ini, Anda hanya perlu mengalikan jumlah kaki dengan 12, karena 1 kaki sama dengan 12 ini.

Sebagai contoh, dimisalkan bahwa masukan adalah 5 kaki dan 7 inci. Anda kemudian dapat mencari total inci sebagai berikut:

totalInci = (12 * feet) + inci
          = 12 * 5 + 7
          = 67

Anda kemudian dapat menerapkan formula konversi, 1 inci = 2.54 sentimeter, untuk menemukan panjang dalam sentimeter.

sentimeter = totalInci * 2.54
           = 67 * 2.54
           = 170.18

Berdasarkan analisis masalah ini, Anda dapat merancang sebuah algoritma sebagai berikut:
1.      Mendapatkan panjang dalam kaki dan inci.
2.      Mengkonversi panjang menjadi total inci.
3.      Mengkonversi total inci menjadi sentimeter.
4.      Menampilkan sentimeter.

Variabel
Masukan pada program adalah dua angka: satu untuk kaki dan satu untuk inci. Jadi, Anda memerlukan dua variabel: satu untuk menyimpan kaki dan yang lain untuk menyimpan inci. Karena program pertama-tama akan mengkonversi panjang yang diberikan dalam inci, Anda memerlukan variabel lain untuk menyimpan total inci. Anda juga memerlukan sebuah variabel untuk menyimpan panjang ekivalen dalam sentimeter. Jadi, Anda memerlukan variabel-variabel berikut:

int kaki;            //variabel untuk menampung kaki
int inci;            //variabel untuk menampung inci
int totalInci;       //variabel untuk menampung total inci
double sentimeter;   //variabel untuk menampung panjang dalam sentimeter

Konstanta Bernama
Untuk menghitung panjang ekivalen dalam sentimeter, Anda perlu mengalikan total inci dengan 2.54. Daripada menggunakan nilai 2.54 secara langsung di dalam program, Anda akan mendeklarasikan nilai ini sebagai sebuah konstanta bernama. Sama halnya, untuk menemukan total inci, Anda perlu mengalikan kaki dengan 12 dan menambahkan inci. Daripada menggunakan 12 secara langsung di dalam program, Anda juga akan mendeklarasikan nilai ini sebagai sebuah konstanta bernama. Penggunaan konstanta bernama akan membuat program lebih mudah dimodifikasi.

const double SENTIMETER_PER_INCI = 2.54;
const int INCI_PER_KAKI = 12;

Program Utama
Pada beberapa bagian sebelumnya, Anda telah menganalisa masalah dan menentukan formula dalam melakukan perhitungan. Anda juga telah menentukan variabel dan konstanta bernama yang dibutuhkan. Sekarang Anda dapat mengembangkan algoritma untuk menyelesaikan masalah yang diberikan.
1.      Meminta pengguna untuk memberikan masukan. (Tanpa prompt line, pengguna hanya akan diberikan layar kosong dan tidak mengetahui apa yang perlu dilakukan.)
2.      Membaca data.
3.      Menampilkan masukan, yaitu menampilkan apa yang dibaca program sebagai masukan. (Tanpa langkah ini, setelah program dieksekusi, Anda tidak akan mengetahui apa yang menjadi masukan program).
4.      Menemukan panjang dalam inci.
5.      Menampilkan panjang dalam inci.
6.      Mengkonversi panjang menjadi sentimeter.
7.      Menampilkan panjang dalam sentimeter.

Menggabungkan Semua
Karena masalah telah dianalisa dan algoritma telah dirancang, langkah selanjutnya adalah menerjemahkan algoritma menjadi kode C++. Karena ini merupakan program C++ utuh pertama yang Anda tulis, akan ditinjau-ulang langkah-langkah yang diperlukan secara berurutan.

Program akan dimulai dengan komentar yang mendokumentasikan tujuan dan fungsionalitasnya. Karena ada masukan pada program (panjang dalam kaki dan inci) dan keluaran (panjang ekivalen dalam sentimeter), Anda akan menggunakan sumber daya sistem untuk operasi masukan/keluaran. Dengan kata lain, program akan menggunakan statemen-statemen masukan untuk membaca data ke dalam program dan statemen-statemen keluaran untuk menampilkan hasil. Karena data akan dibaca dari papanketik dan keluaran akan ditampilkan pada layar, program harus mencantumkan file header iostream. Jadi, statemen pertama pada program, setelah komentar, adalah direktif praprosesor untuk mencantumkan file header ini.

Program ini memerlukan dua tipe lokasi memori untuk manipulasi data: konstanta bernama dan variabel. Secara umum, konstanta bernama menampung data spesial, seperti SENTIMETER_PER_INCI. Tergantung dari kegunaannya, konstanta bernama dapat ditempatkan sebelum fungsi main atau di dalam fungsi main. Jika sebuah konstanta bernama akan digunakan di seluruh bagian program, maka ia umumnya ditempatkan sebelum fungsi main. Hal ini akan dibahas lebih detil pada Bab 6, ketika mendiskusikan fungsi terdefinisi-pengguna. Sampai titik ini, konstanta bernama akan ditempatkan sebelum fungsi main sehingga ia dapat dipakai di seluruh bagian program.

Program ini hanya memiliki satu fungsi, fungsi main, yang akan memuat semua instruksi pemrograman di dalam tubuhnya. Selain itu, program memerlukan variabel-variabel untuk memanipulasi data, dan semua variabel ini akan dideklarasikan di dalam tubuh fungsi main. Alasan dalam mendeklarasikan variabel di dalam tubuh fungsi main akan dijelaskan pada Bab 6. Tubuh fungsi main juga akan memuat beberapa statemen C++ untuk mengimplementasikan algoritma yang telah dirancang. Oleh karena itu, tubuh fungsi main memiliki bentuk berikut:

int main()
{
    mendeklarasikan variabel-variabel

    statemen-statemen

    return 0;
}

Untuk menuliskan program konversi panjang secara utuh, ikuti langkah-langkah berikut:
1.      Awali program dengan komentar untuk kepentingan dokumentasi.
2.      Cantumkan file header yang diperlukan program.
3.      Deklarasikan konstanta bernama, jika ada.
4.      Tulis definisi atas fungsi main.


Program Utuh

//**********************************************************
// Program untuk mengkonversi pengukuran dalam kaki dan inci
// menjadi sentimeter menggunakan formula bahwa 1 inci sama
// dengan 2.54 sentimeter.
//**********************************************************

//File header
#include <iostream>

using namespace std;

//Konstanta bernama
const double SENTIMETER_PER_INCI = 2.54;
const int INCI_PER_KAKI = 12;

int main ()
{
    //Mendeklarasikan variabel
    int kaki, inci;
    int totalInci;
    double sentimeter;

    //Statemen: Langkah 1 - Langkah 7
    cout << "Masukkan dua integer, satu untuk kaki dan "
         << "satu untuk inci: ";         //Langkah 1
    cin >> kaki >> inci;                 //Langkah 2
    cout << endl;

    cout << "Angka-angka yang Anda masukkan adalah " << kaki
         << " untuk kaki dan " << inci
         << " untuk inci. " << endl;            //Langkah 3

    totalInci = INCI_PER_KAKI * kaki + inci; //Langkah 4

    cout << "Jumlah total inci = "
         << totalInci << endl;           //Langkah 5

    sentimeter = SENTIMETER_PER_INCI * totalInci; //Langkah 6

    cout << "Jumlah sentimeter = "
         << sentimeter << endl;          //Langkah 7

    return 0;
}

Keluaran Program:

Masukkan dua integer, satu untuk kaki dan satu untuk inci: 15 7

Angka-angka yang Anda masukkan adalah 15 untuk kaki dan 7 untuk inci.
Jumlah total inci = 187
Jumlah sentimeter = 474.98







No comments:

Post a Comment