Linux Fun
Dalam suatu program sering kali lebih mudah kalau dipecah menjadi beberapa fungsi yang masing-masing fungsi melakukan satu tugas tertentu saja. Fungsi yang telah dibuat dapat dipakai berulang-ulang bahkan oleh programmer lain yang tidak mengerti cara kerjanya tapi tahu cara pakainya saja, jadi detil detil yang rumit, yang merupakan bagian operas! dari program, dapat disembunyikan. Dengan dipecah menjadi beberapa fungsi maka pembuatan program menjadi lebih mudah karena kesalahan-kesalahan yang terjadi terlokalisir dalam masing-masing fungsi. Juga organisasi program menjadi lebih baik karena tugas dari fungsi utama main() menjadi sangat sederhana yaitu melakukan pemanggilan dari fungsi-fungsi ini mengikuti urutan yang dikehendaki. Masing-masing fungsi melakukan tugasnya, setelah selesai lalu kembali ke main(). Pemecahan program menjadi fungsi-fungsi ini dikenal sebagai modular programming atau pemrograman tersetruktur.
Fungsi-fungsi dalam C++ pada umumnya mempunyai sifat-sifat sebagai berikut:
- Masing-masing fungsi mempunyai nama, .penamaan fungsi sama seperti penamaan variabel. Nama fLingsi ini diikuti sepasang tanda kurung yang oleh C-H- dipakai untuk membedakan fungsi dengan variabel. Dalam tanda kurung ini dapat berisi argumen-argumen fungsi tersebut. Jika fungsi ini tidak memerlukan argumen maka dalam tanda kurung ini tidak berisi apa-apa, untuk fungsi dalam C++ tanda kurung yang kosong ini umumnya diisi kata kunci void. Jika fungsi memerlukan argumen maka argumen-argumennya dapat berupa variabel-variabel dari berbagai tipe, antara argumen yang satu dengan argumen yang lain dipisahkan dengan koma.
- Badan dari masing-masing fungsi, mulai segera setelah tanda kurung tutup dari nama fungsi, harus dimulai dengan tanda kurung { dan diakhiri dengan tanda kurung }. Ini berarti bahwa badan fungsi minimal terdiri dari satu blok. Badan dari fungsi ini berisi deklarasi variabel-variabel dan penyataan-pemyataan.
Contoh dari suatu fungsi untuk mengkwadratkan bilangan-bilangan bulat adalah sebagai berikut:
void hitung_kuadrat(int n)
{
int kuadrat = 0;
while (kuadrat <= 50)
{
kuadrat = n * n;
cout << “Kuadrat dari ” << n << ” adalah ”
<< kuadrat<< “\n”;
n++;
}
return;
}
Dalam C++, argumen-argumen dari fungsi dapat mempunyai harga default. Jika pada saat fungsi yang mempunyai default argumen ini dipanggil namun argumennya dihilangkan maka kompiler otomatis akan memakai nilai default dari argumen yang dihilangkan tersebut. Jika pada saat dipanggil argumennya diisi maka isi ini yang dipakai. Default argumen ini membuat program menjadi lebih fleksibel, argumen-argumen yang nilai defaultnya tidak perlu diubah tidak perlu diisi namun ada aturan yang perlu diperhatikan.
Bila kita menghilangkan argumen yang pertama maka argumen-argumen selanjutnya juga harus dihilangkan. Kita dapat menghilangkan argumen yang kedua dan mengisi argumen yang pertama. Aturan ini tidak terikat padajumlah argumen. Secara umum aturannya adalah kalau kita menghilangkan suatu argumen maka kita harus menghilangkan semua argumen dikanannya. Contoh program berikut ini memperjelas konsep di atas.
// C1_5.CPP
#include <iostream.h>
// Output program ini adalah :
// pertama = 1, kedua = 2.3, ketiga = 4
// pertama = 5, kedua = 2.3, ketiga = 4
// pertama =6, kedua = 7.8, ketiga =4
// pertama = 9, kedua = 10.11, ketiga =12
//Prototipedari fungsi
void tampilkan(int-l, float=2.3, long=4);
main ()
{
tampilkan(); // semua default
tampilkan(5); // isi argumen pertama
tampilkan(6, 7.8); // isi pertama dan kedua
tampilkan(9, 10.11, 12L); // isi ketiganya
return 0;
}
void tampilkan(int pertama, float kedua, long ketiga)
{
cout << “\npertama = ” << pertama;
cout << “, kedua ==” << kedua;
cout << “, ketiga = ” << ketiga;
return;
}
Perhatikan bahwa untuk memanggil fungsi cukup dengan menulis namanya, termasuk tanda kurung dan argumen-argumennya dan diakhiri dengan titik koma (;.
Pernyataan switch sangat effisien untuk multiway decision/selection yang berdasar pada evaluasi suatu ekpresi yang melibatkan bilangan-bilangan bulat/karakter. Pernyataan switch akan melakukan pencocokan apakah hasil evaluasi ekpresi tersebut cocok dengan salah satu dari sejumlah konstanta. Format dari pernyataan switch adalah :
switch (ekpresi}
{
case konstanta_l:
pernyataan;
.
.
.
break;
case konstanta_2:
pernyataan;
.
.
.
break;
.
.
.
default:
pernyataan;
.
.
.
}
Konstanta diasosiasikan dengan masing masing case. Jika hasil evaluasi ekpresi ada kecocokan dengan salah satu konstanta maka penyataan-pemyataan yang mengikuti case yang cocok tersebut akan dieksekusi. Pemyataan terakhir pada masing masing case biasanya adalah break yang berfungsi untuk menghentikan pemyataan switch. Bila tidak pakai break maka pemyataan-pernyataan pada case yang lain, yang terletak di bawah case yang cocok, akan dieksekusi. Keadaan yang terakhir ini pada umumnya tidak diinginkan.
Contoh program berikut ini menjelaskan pemakaian pemyataan switch.
//C8_3.CPP
#include <iostream.h>
main() {
int c, i=0;
cout << “l. Tambah l\n”;
cout << “2. Kurang l\n”;
cout << “3. Tampilkan\n”;
cout << “0. Exit\n\n\n”;
do{
cin >> c;
switch (c) {
case 1:
i++;
break;
case 2:
i–;
break;
case 3:
cout << i << “\n”;
break;
case 0:
break;
default:
cout << “Error”;
}
} while (c != 0);
return 0;
}
#include Preprocessor Directive
#include preprocessor directive menyisipkan suatu text file yang ada di disk kedalam program. Format dari #include preprocessor directive adalah ;
#include <nama_file> atau
#include “nama_file”
Text file yang disisipkan dapat apa saja namun umumya yang disisipkan adalah header file. Header file ini akan memberi informasi kepada kompiler C++ bagaimana mengiriterpretasikan fungsi-fungsi library yang akan dipakai. Misalnya kompiler C++ memerlukan informasi mengenai fungsi cout,fungsi cin maka perlu disisipkan header file iostream.h sebagai berikut:
#include <iostream.h> atau
#include “iostream.h”
Tampak bahwa untuk menyisipkan text file ada dua pilihan:
- Nama file diantara tanda kurung < dan tanda kurung >, pilihan ini memberitahu preprocessor untuk mencari header file di lokasi default yang telah ditetapkan sebelumnya, pilihan ini biasa dipakai untuk menyisipkan standard header yang terletak pada include file direktori yang telah di set untuk kompiler yang dipakai. Standard header file ini berasal dari kompiler. Programmer pada umumnya tidak melakukan perubahan pada standar header file.
- Nama file diantara sepasang tanda kutip ganda (” “), pilihan ini memberitahu preprocessor untuk mencari dulu header file di direktori yang saat ini aktip kalau tidak ketemu dilanjutkan pencariannya ke lokasi-lokasi yang telah ditetapkan oleh programmer sebelumnya, pilihan ini biasa dipakai untuk menyisipkan non-standard header file. Non-standard header file sering mengalami modifikasi oleh programmer yang membuatnya dan preprocessor selalu menyisipkan yang terbam.
#if, #else dan #endif Preprocessor Directive
Antara kompiler yang satu dengan kompiler yang lainya dapat menggunakan nama yang berbeda untuk suatu header file yang definisinya hampir sama. Misal header file alloc.h pada Borland C++ adalah hampir ekivalen dengan header file malloc.h pada Microsoft C++. Jadi kita perlu sarana untuk menentukan header file yang mana yang harus disisipkan pada saat program dikompile, misalnya program yang dibuat harus mendukung Borland C++ dan Microsoft C++ maka pemakaian preprocessor directivenya adalah sebagai berikut:
#ifdef _BORLAND
#include <alloc.h>
#else
#include <malloc.h>
#endif
Kalau header file ini dikompile dengan Borland C++ maka nama simbolik _BORLAND_ otomatis didefinisikan oleh kompiler sehingga standard header file alloc.h yang disisipkan.
Dalam C++ programmer umumnya membatasi apa saja yang dapat masuk kedalam header file yang dibuat. Header file umumnya hanya memuat defmisi-definisi misalnya tipe, nama variabel ektemal. definisi struktur, konstanta, makro dan prototipe fungsi.
Programmer biasanya menghindari satu header file raksasa yang memuat semua definisi karena memperlambat proses kompilasi. Umumnya programmer lebih menyukai beberapa header file.yang lebih kecil, jadi ada beberapa header file. Kalau satu header file disisipkan lebih dari satu kali secara tidak sengaja (header file dapat bersusun, artinya dalarn suatu header file ada header file yang lain) maka akan ada definisi ulang yang akan menimbulkan kesalahan pada saat program di kompile. Untuk menghindari keadaan ini dapat dipakai preprocessor directive #ifndef, #define dan #endif untuk membuat header file sebagai berikut:
#ifhdef _NAMAFILE_H
#define _NAMAFILE_H
#define VER_NUM “1.00”
#define REL_DATE “27/09/95”
#if _WINDOWS_
#define OS_VER “WINDOWS”
#else
#define OS_VER “DOS
#endif
#endif
Pada saat header file ini dikompile, kompiler pertama-tama melakukan check apakah _NAMAFILE_H telah didefinisikan. Bila belum didefinisikan maka header file ini belum pemah disisipkan sehingga _NAMAFILE_H didefinisikan dulu lalu header file ini disisipkan. Bila _NAMAFILE_H sudah didefinisikan maka isi dari header file ini tidak disisipkan.
Pernyataan if-else dipakai untuk memilih altematip eksekusi dari dua blok pemyataan. Format dari pernyataan if-else adalah:
if {kondisi)
{
pernyataan;
.
.
.
}
else
{
pernyataan;
.
.
.
}
Bila hasil evaluasi kondisi adalah true maka blok pernyataan sesudah if akan dieksekusi, bila false maka blok pernyataan sesudah else akan dieksekusi. Bila jumlah pernyataan sesudah if atau sesudah else hanya satu maka kurung { dan kurung } tidak harus dituliskan. Bagian else dari suatu pernyataan if-else adalah opsional, bila else tidak dipakai dan hasil evaluasi kondisi adalah false maka tidak ada blok pernyataan yang dieksekusi.
Contoh:
if (a < b)
cout << “a < b”;
artinya tampilkan a < b bila nilai a lebih kecil dari nilai b.Jikanilai a lebih besar dari nilai b maka tidak ada blok pernyataan yang dieksekusi.
Pernyataan if-else dapat bersusun, bentuk ini dikenal sebagai multiway decision.
Format dari multiway decision adalah:
if(kondisi_1)
{
pernyataan;
.
.
.
}
else if(kondisi_2)
{
pernyataan;
.
.
.
}
.
.
.
else if (kondisi_n)
{
pernyataan;
.
.
.
}
Penggalan program berikut ini menjelaskan format multiway decision di atas:
if(a < b)
cout << “a < b”;
else if (a == b)
cout << “a == b”;
else if (a > b)
cout << “a > b”;
else
cout << “error”;
Pernyataan for dapat dipakai sebagai alternatip dari pernyataan while. Pernyataan for ini meskipun formatnya lebih komplek dari pernyataan while namun lebih variatif applikasinya.
Format dari pernyataan for adalah :
for (ekpresi_l; ekpresi_2; ekpresi_3)
{
pernyataan;
.
.
.
}
- ekpresi_l dipakai untuk inisialisasi dari variabel yang dipakai untuk mengkontrol ulangan eksekusi dari blok pernyataan yang ada didalam pernyataan for.
- ekpresi_2 dipakai untuk menyatakan suatu kondisi, eksekusi dari blok pernyataan yang ada didalam pernyataan-for akan diulang bila evaluasinya menghasilkan true
- ekpresi_3 dipakai untuk menambah/mengurangi nilai variabel yang dipakai untuk mengkontrol eksekusi dari blok pernyataan yang ada didalam pernyataan for.
Ekpresi_1, ekpresi_2 dan ekpresi_3 adalah opsional sehingga penyataan for yang paling sederhana adalah:
for ( ; ; ; )
{
pernyataan;
.
.
.
}
Pada pernyataan for di atas tidak ada inisialisasi, tidak ada kondisi dan tidak ada penambahan / pengurangan dari variabel yang dipakai untuk mengkontrol ulangan eksekusi sehingga eksekusi dari blok pernyataan didalamnya akan diulang terus. Berikut ini adalah contoh program yang memakai pernyataan for yang sederhana.
//C5_3.CPP
#include <iostream.h>
main ()
{
int ctr;
for (ctr=l; ctr <= 10; ctr++)
{
cout << ctr << “\n”;
}
return 0;
}
Pernyataan while yang ekivalen dengan pemyatan for di atas adalah:
ctr = 1
while (ctr <= 10)
{
cout << ctr << “\n”;
ctr++;
}
Perhatikan bahwa ekpresij, ekpresi_2 dan ekpresi_3 dipisahkan dengan titik koma bukan dengan operator koma. Disini letak keunggulan dari pernyataan for ini karena kita dapat memakai pemisah operator koma untuk menulis lebih dari satu ekpresi pada lokasi ekpresij. ekpresij. atau ekpresij. Misalnya format, berikut ini adalah sah:
for (ekpresi_l; ekpresi_2a, ekpresi_2b, ekpresi_2c; ekpresi_3)
{
pernyataan;
.
.
.
}
Contoh program berikut ini memakai konsep di atas untuk memperoleh hasil hitungan dari bilangan bulat 2 yang dipangkatkan mulai dari nol sampai pangkat tertentu.
//C6_3.cpp
#include <iostream.h>
main ()
{
int n, p , val;
cout << “Input pangkat dari 2 yang terbesar : “;
cin >> n;
cout << “\nPangkat” << “\t” << “Nilai”-
for (p=0, val=l; p <= n; p++)
cout << “\n” << p << “\t” << val;
val *= 2;
}
return 0;
}
Pernyataan for dapat bersusun artinya dalam suatu pernyataan for boleh ada pernyataan for yang lain. Pernyataan for yang lebih dalam akan dieksekusi lebih dulu dari pernyataan for yang luar. Contoh program berikut ini mempunyai dua pernyataan for, pernyataan for yang luar memakai variabel kontrol y sedangkan pernyataan for yang dalam memakai vanabel kontrol x. Hasil eksekusi program ini menunjukkan bahwa pernyataan for yang dalam akan dieksekusi selengkapnya pada setiap penambahan variabel y.
//C7_3.CPP
#include <iostream.h>
main()
{
int x, y;
for(y=l;y<=4;y++)
{
for(x=1;x <=3;x++)
cout << “y” << y << “x” << x << “\t”;
cout << “\n”;
}
return 0;
}
Output dari program ini adalah :
ylxl ylx2 ylx3
y2xl y2x2 y2x3
y3xl y3x2 y3x3
y4xl y4x2 y4x3
Pernyataan while mengevaluasi kondisinya sebelum me-ngeksekusi pernyatan-pemyataan didalamnya Kadang-kadang diinginkan untuk mengeksekusi pernyataan-pernyatan dalam suatu blok terlebih dulu lalu melakukan evaluasi pada suatu kondisi yang ditempatkan pada.akhir blok. Pernyataan do-while dipakai untuk memenuhi keinginan ini.
Format dari pernyataan do-while adalah:
do{
pernyataan;
.
.
.
}
while (kondisi};
Contoh program di bawah ini menjelaskan pemakaian pernyataan do-while. Perbedaan yang sangat penting antara pemyatan while dan pernyataan do-while adalah pernyataan do-while harus dieksekusi paling sedikit satu kali. Kenyataan ini menyebabkan pernyataan while lebih banyak dipakai dari pernyataan do-while.
//C4_3.cpp
/* Do while-loop
Output: 9876543210 */
#include <iostream.h>
main()
{
int i = 9;
do
{
cout << i;
}
while (i–);
return 0;
}
Pernyataan while dipakai untuk mengulang eksekusi dari suatu blok penyataan yang jumlah ulangannya tergantung dari kondisi yang diberikan, sejauh kondisiya true maka ulangan eksekusi dari blok tersebut terus dilakukan. Format dari pernyataan while adalah :
while (kondisi)
{
pernyataan;
.
.
.
}
Kondisi adalah syarat yang dipakai untuk mengakhiri ulangan eksekusi dari blok dalam pernyataan while tersebut. Kondisi ini umumnya menggunakan operator-operator relasional, bila kondtsf-nya lebih dari satu maka antara koridisi yang satu dan lainnya dihubungkan dengan operator-operator logic. Kedua program di bawah ini mencetak nilai dari bilangan bulat i bila kondisi i < 9 adalah true. Perhatikan effek pemakaian prefix dan posfix operator pada variabel i.
//C1_3.CPP
/* Prefix increment while-loop
Output : 12345678 */
#include <iostream.h>
main()
{
int i = 0;
while (++i < 9)
cout << i;
return 0;
}
//C2_3.CPP
/* Postfix increment while-loop
Output : 123456789 */
#include <iostream.h>
main()
{
int i = 0;
while (i++ < 9)
cout << i;
return 0;
}
Perhatikan bahwa kondisi di dalam pernyataan while dianggap true bila hasil evaluasinya tidak sama dengan nol seperti ditunjukkan oleh program di bawah ini.
//C3_3.CPP
/* Finite while-loop
Output: 876543210 */
#include <iostream.h>
main()
{
int i = 9;
while (i–)
cout << i;
return 0;
}
Operator logik yang dipakai dalam C++ adalah :
|
Simbol |
Operasi |
|
& |
AND |
|
| |
OR |
|
^ |
Exclusive OR |
|
<< |
Shift left |
|
<< |
Shift right |
|
~ |
One’s complement |
Operator-operator logic ini melakukan manipulasi bit pada data integer atau character. Karena yang dimanipulasi adalah bit maka lebih enak kalau contoh contoh berikut ini dikonversi dari sistem bilangan desimal, yaitu sistem bilangan berbasis 10, ke sistem bilangan biner, yaitu sistem bilangan yang berbasis 2. Konversi dari sistem bilangan desimal ke sistem bilangan biner lebih mudah kalau dilewatkan sistem bilangan heksadesimal (berbasis 16) dulu. Program berikut ini memakai sebagian dari operator-operator di atas.
// C7_2.CPP
#include <iostream.h>
main()
{
int x1 = 67&63;
int x2 = 67 | 63;
int x3 = ~128 & 255;
int x4 = 9^5;
// Bitwise AND
cout << x1 << “\n”;
//Bitwise OR
cout << x2 << “\n”;
// Bitwise Complement
cout << x3 << “\n”;
// Bitwise XOR
cout << x4;
return 0;
}
Operator &
Suatu pernyataan : 67 & 63 dapat dikonversi dan diproses sebagai berikut:
Operator |
Suatu pernyataan : 67 | 63 dapat dikonversi dan diproses sebagai berikut:
Operator ~
Yang dirnaksud dengan one’s complementing adalah melakukan pembalikan dari bit,misal: 12810 = 00000000100000002 jika semua bit dibalik menjadi:
~12810 = -12910 = 11111111011111112. Kita dapat membatasi outputnya menjadi 8 bit saja dengan melakukan AND masking dengan & 00000000111111112 yaitu & 225.
Suatu pernyataan : -128 & 255 dapat dikonversi dan diproses sebagai berikut:
Operator ^
Suatu pernyataan : 9 ^ 5 dapat dikonversi dan diproses sebagai berikut:
Operator << dan >>
Operator << melakukan pergeseran posisi bit kekiri dari operan sebelah kiri sebanyak yang ditunjukkan oleh operan kanan. Pada setiap proses pergeseran sebelah kanan diisi nol, misalnya: 12 << 310 menjadi 10002 = 810. Operator >> berlaku sebaliknya.
Unary & Operator
Unary & operator dipakai untuk menyatakan suatu reference. Dalam C++ suatu reference dapat dipandang sebagai alias dari suatu variabel. Pada waktu suatu reference dideklarasi, biasanya diasosiasikan dengan suatu variabel sehingga reference ini secara permanen berasosiasi dengan variabel tersebut, keadaan ini tidak dapat diubah misalnya merubah reference tersebut untuk menjadi alias dari suatu variabel yang lain. Contoh program berikut ini mendeklarasi suatu bilangan bulat bemama inl_sebenarnya dan membentahu komputer bahwa intj sebenaniya mempunyai nama lain yaitu int_aliwnya. Juga ditunjukkan bahwa operas; pada salah satunya akan berakibat sama pada yang satunya lagi.
//C8_2.CPP
#include (iostream.h>
main()
{
int int_sebenarnya = 123;
int &int_aliasnya = int_sebenarnya;
cout << ‘\n’ << int_sebenarnya; //123
cout << ‘\n’ << int_aliasnya; // 123
int_aliasnya++;
cout << ‘\n’ << int_sebenarnya; // } 124
cout << ‘\n’ << int_aliasnya; // 124
int_sebenarnya++;
cout << ‘\n’ << int_sebenarnya; //125
cout << ‘\n’ << int_aliasnya; // 125
// Cetak alamat-alamatnya
cout << ‘\n’ << &int_sebenarnya << ” ”
<< &int_aliasnya;
}
Perlu diperhatikan bahwa :
- suatu reference bukan duplikat dari variabel yang diasosiasikan dengan reference tersebut. Program di atas menunjukkan keduanya mempunyai alamat yang sama.
- pemakaian unary & operator tergantung pada konteknya. Pada deklarasi dari variabel inl_al.iawya, unary & operator adalah bagian dari tipe variabel int_aliasnya, yaitu variabel ml_aliasnya mempunyai tipe int & atau reference ke suatu int. Pada pernyataan cout, unary & operator dipakai untuk mendapatkan alamat yang diasosiasikan dengannya.
Operator penaikan (++) dan operator penurunan (–) rnemungkinkan cara singka untuk menaikkan atau menurunkan nilai dari suatu variabel. Pemakaian operator ++ dan — sangat menguntungkan karena selain kompak juga mempercepat eksekusi dari program.
Operator ++ dan — dapat ditempatkan sebelum atau sesudah suatu variabel, Operator ++ dan — ini disebut prefix operator bila ditempatkan sebelum variabel dan disebut postfix bila ditempatkan sesudah variabel. Tabel di bawah ini menunjukkan penambahan dan pengurangan 1 terhadap satu variabel.
|
Operator |
Contoh |
Deskripsi |
Pernyataan yang ekivalen |
| ++ | J++; | posfix | j = j + 1; j += 1; |
| ++ | ++j; | Prefix | j = j + 1; j += 1; |
| — | j–; | postfix | j = j – 1; j -= 1; |
| — | –j; | prefix | j = j – 1; j -= 1; |
Perhatikan bila operator ditempatkan sebelum suatu variabel maka variabel tersebut dinaikan atau diturunkan nilainya sebelum dipakai, jadi nilai variabel tersebut akan ditambah atau dikurangi sebelum dipakai, misalnya:
x=1;
y = ++x;
hasilnya adalah x = 2 dan y = 2, sedangkan:
x = 1;
y = x++;
hasilnya adalah x = 2 dan y = 1. Pemahaman order of precedence sangat penting dalam
memahami ekpresi yang mengandung operator ++ dan –, misalnya:
int I = 1;
int j = 2;
int k = 3;
Setelah dievaluasi maka x = 1 dan k = 2, contoh yang lain:
int i = 0;
int j = -1;
int k = 0;
int i = 1;
Operator logik yang dipakai dalam C++ adalah :
|
Prioritas |
Simbol |
Operator |
|
1 |
! |
Not |
|
2 |
&& |
And |
|
3 |
II |
Or |
Operator logik dalam C++ memungkinkan kita melakukan beberapa tes secara. Simultan dalam pernyataan while atau if-elsc. Tabel di atas menunjukkan, selain operator-operator logik dalam C++,juga prioritas rankingnya. Operator not (!) mempunyai prioritas di bawah tanda kurung dan di atas operator aritmatik. Dua operator logik yang lain, yaitu and (&&) dan or (||), mempunyai prioritas di bawah operator relasional dan di atas operator assignment. Misal kita ingin melakukan dua atau lebih tes secara simultan maka masing-masing kondisi dapat digabung dengan operator logik. and sebagai berikut:
if(test_l && test_2 && test3 .,.)
Kalau kita ingin salah satu atau kombinasi dari suatu grup untuk membuat suatu tes menghasilkan true maka masing-masing kondisi dapat digabung dengan operator logik or sebagi berikut:
if(test 1 || test 2 || test3 …)
Konsep di atas dapat dijelaskan lewat contoh program ini:
// C5_2.CPP
#include <iostream.h>
main ()
{
int a=2, b=4;
if (a ==2 && b==4)
cout << “(a==2 && b=4) adalah true” << “\n”;
else
cout << “(a==2 && b=4) adalah false” << “\n”;
if (a ==3 && b==4)
cout << “(a==3 && b=4) adalah true” << “\n”;
else
cout << “(a==3 && b=4) adalah false” << “\n”;
if (a ==3 || b==4)
cout << “(a==3 || b=4) adalah true” << “\n”;
else
cout << “a==3 || b=4) adalah false” << “\n”;
if (a ==3 || b ==5)
cout << “(a==3 || b=5) adalah true” << “\n”;
else
cout << “(a==3 || b=5) adalah false” << “\n”;
}
Operator not yang mendahului suatu kondisi tes akan membalik hasil tes tersebut, misalnyajika a adalah true maka !a adalah false atau jika a adalah false maka !a adalah true.
C++ adalah bahasa yang effisien. Jika beberapa tes-relasional digabung dengan operator-operator logik, C++ tidak selalu mengevaluasi ekpresi gabungan ini secara penuh, Langkah ini diambil supaya program dapat berjalan lebih cepat tapi juga ada bahayanya misalnya:
if ((5 > 4) || (penjualan < 15) && (15 != 15)) …
C++ hanya melihat kondisi yang pertama saja yaitu (5 > 4). Karena (5 > 4) adalah true dan karena true || selalu menghasilkan true maka C++ akan mengabaikan kondisi-kondisi yang lain. Kadang-kadang kita. terpaksa memecah suatu pemyataan if yang kompiek menjadi beberapa pemyataan if yang lebih sederhana untuk memastikan masing-masing kondisi yang ada pada pemyataan if yang kompiek tersebut dievaluasi.
Operator relasional yang dipakai dalam C++ adalah :
< Lebih kecil dari
<= Lebih kecil atau sama dengan
> Lebih besar dari
>= Lebih besar atau sama dengan
== Sama dengan
!= Tidak sama dengan
Operator-operator relasional di atas adalah opeator biner yang fungsinya melakukan tes pada hubungan diantara kedua operannya, Hasil tes ini adalah true atau false, misalnya :
(5 > 2)
hasilnya adalah true, sedangkan:
(2>5)
hasilnya adalah false.
Operator relasional dipakai dengan pernyataan-pernyataan while dan if-else untuk melakukan tes pada suatu kondisi. Pada suatu while-loop, suatu blok yang terdiri dari banyak pernyataan akan dieksekusi berulang-ulang asalkan hasil tesnya true, misalnya:
n=10;
while (n > 0)
{
cout << n;
n = n – 1;
}
C++ akan mengganti hasil tes yang true dengan 1 dan yang false dengan 0, jadi untuk while-loop di atas, keputusan untuk mengulang loop atau keluar dari loop tergantung dari hasil tes yang dapat 1 atau 0, C++ akan memperlakukan bilangan yang tidak sama dengan nol sebagai true sehingga penggalan program tadi dapat ditulis:
n= 10;
while (n)
{
cout << n;
n = n – 1;
}
Sedangkan untuk pernyataan if-clse, hasil tes yang memutuskan blok mana yang dieksekusi, misalnya :
x=1;
y=2;
if ( x == y )
cout << “x sama dengan y “;
else
cout << “x tidak sama dengan y”;
Operator yang dipakai dalam pernyataan if-else adalah operator sama dengan (==), bukan operator assignment (=), misal penggalan program di atas ditulis:
x=1;
y=2;
if ( x = y )
cout << “x sama dengan y “;
else
cout << “x tidak sama dengan y”;
berarti nilai dari variabel y, karena kesalahan pemakaian operator, ditempatkan di variabel x, sehingga tes pada pemyatan if akan menghasilkan 2, yang diartikan true oleh C++ sehingga pada layar akan tercetak “x sama dengan y”, Hasil ini sudah tentu tidak benar, kalau pemakaian operatornya benar yaitu (x == y) maka nilai variabel x akan dibandingkan dengan nilai variabel y, hasilnya adalah false atau 0 sehingga pada layar akan tercetak “x tidak sama dengan y”.
Order of precedence dari operator-operator relasional ini lebih rendah dari operator-operator aritmatik tetapi lebih tinggi dari operator assignment sehingga ekpresi :
z == y – 1 adalah sama dengan z == (y – 1)
sehingga variabel z akan dibandingkan dengan variabel (y-1). Contoh ekpresi lain:
z == x * x == y adalah sama dengan z = (x *x == y)
disini (x * x === y) menghasilkan true atau false dan hasilnya disimpan dalam variabel z jadi variabel z mempunyai nilai true atau false. Contoh yang lain lagi:
x == y != z adalah sama dengan ((x == y) \= z)
tidak sama dengan (x == (y != z)
karena assosiativitas dari operator-operator relasional adalah dari kiri ke kanan. Contoh pemakaian ekpresi yang terakhir ini adalah sebagai berikut:
// C4_2.CPP
#include <iostream.h>
main ()
{
int x = 2, y = 2, z = 0;
if(x==y !=z)
cout << “true \n”;
else
cout << “false \n”;
}





