DAFTAR ISI
Halaman
Halaman
Halaman
I. PENDAHULUAN
Contoh :
#include <iostream.h>
// Program ini menuliskan “Selamat Pagi.”
main()
{
cout << “Selamat Pagi.\n”;
return 0;
}
main() selalu ada dalam program C++ (dibutuhkan), yang menyatakan awal
dari program.
Selamat Pagi.
Simbol << disebut insertion operator atau output operator (operator keluaran).
Contoh :
Pernyataan cout << 999 akan menampilkan bilangan 999 di layar monitor.
cout disebut juga sebagai suatu stream, yang mengeluarkan keluaran seperti suatu
aliran (stream).
Contoh :
#include <iostream.h>
// Program berikut menggambarkan keluaran sekuensial dari beberapa string.
main()
{
cout << “Sela” << “mat “ << “Pagi.\n”;
return 0;
}
Bentuk umum :
#include <string.h>
7
di atas main().
Contoh :
#include <iostream.h>
#include <string.h>
// Program berikut memeriksa fungsi strlen().
main()
{
cout << strlen(“Selamat Pagi.\n”) << ‘\n’;
cout << strlen(“Selamat Pagi.”) << ‘\n’;
cout << strlen(“Selamat”) << ‘\n’;
cout << strlen(“S”) << ‘\n’;
cout << strlen(“”) << ‘\n’;
return 0;
}
Keluarannya :
14
13
7
1
0
variabel = ekspresi;
8
Yang akan diolah lebih dulu adalah ekspresi, baru hasilnya merupakan nilai dari
variabel.
Tanda “=” adalah operator penugasan (assignment operator).
Contoh :
#include <iostream.h>
// Sebuah contoh sederhana untuk menggambarkan penugasan.
main()
{
int n;
n = 66;
cout << n << endl;
return 0;
}
Keluarannya adalah
66
Konstanta simbolik endl mempunyai arti yang sama dengan endline character ‘\
n’ dan akan membersihkan buffer keluaran.
Suatu deklarasi dari suatu variabel adalah sebuah pernyataan yang memberikan
informasi tentang variabel kepada compiler C++. Sintaksnya adalah
type variable;
Contoh : deklarasi
int n;
Setiap variabel harus mempunyai sebuah tipe. Tipe memberitahu kepada compiler
bagaimana nilai-nilai variabel disimpan dan digunakan.
Pada beberapa komputer, tipe int terdiri dari semua nilai integer yang berada dalam
jangkauan (range) dari -32.768 sampai dengan 32.767.
9
C++ adalah suatu bahasa pemrograman yang berorientasi obyek (object oriented
programming language). Yang antara lain berarti bahasa yang baik digunakan pada
sistem-sistem simulasi, yang memuat interaksi objek, seperti suatu sistem kendali di
bandara. Sebagai suatu simulasi, objek dari sistem (pesawat, orang, bagasi dan lain-
lain) dalam program komputer dinyatakan oleh variabel-variabel.
Contoh :
#include <iostream.h>
// Program berikut menggambarkan deklarasi variabel.
main()
{
int x, y1; // deklarasi variabel x dan y1
x = 50;
y1 = 12;
int y2 = 55; // deklarasi variabel y2, dengan nilai awal 55
cout << x << “, “ << y1 << “, “ << y2 << endl;
return 0;
}
Keluarannya adalah :
50, 12, 55
Deklarasi variabel juga dapat dilakukan untuk lebih dari satu variabel. Pernyataan
int x, y1;
Contoh :
10
#include <iostream.h>
// Sebuah program sederhana untuk menggambarkan token.
main()
{
int n = 99;
cout << n << endl;
return 0;
}
Keluarannya adalah
99
Keyword disebut juga sebagai reserved word, karena memang telah disediakan
oleh bahasa pemrograman yang bersangkutan untuk digunakan dan tidak perlu
mendefinisikannya kembali. Adapun cara penulisannya harus seperti yang telah
ditetapkan.
Contoh :
11
#include <iostream.h>
// Program berikut memperlihatkan inisialisasi sebuah variabel.
main()
{
int amir = 40;
int mirna = 30;
int sum = amir + mirna;
cout << amir << “ + “ << mirna << “ = “ << sum << endl;
return 0;
}
Keluarannya adalah
40 + 30 = 70
Secara umum, akan lebih baik untuk menginisialisasi variabel pada saat variabel
tersebut dideklarasikan.
Contoh :
#include <iostream.h>
// Program berikut memperlihatkan inisialisasi sebuah variabel.
main()
{
int n1, n2 = 50, n3, n4, n5 = 40, n6;
cout << n2 << “, “ << n5 << endl;
return 0;
}
Keluarannya adalah
50, 40
Beberapa compiler (seperti Borland C++) akan memberi peringatan jika ada variabel
tidak diinisialisasikan.
Sebuah penugasan adalah sebuah ekspresi dengan suatu nilai. Nilai dari ekspresi
x = 25;
adalah 25. Dan seperti nilai yang lain, nilai dari sebuah penugasan dapat digunakan
dalam penugasan lainnya, seperti
y = (x = 25);
y = x = 25;
#include <iostream.h>
// Program berikut memperlihatkan bahwa sebuah penugasan merupakan
bagian
// dari suatu ekspresi yang lebih besar.
main()
{
int m, n;
m = (n = 65) + 10; // (n = 65) adalah suatu ekspresi penugasan
cout << m << “, “ << n << endl;
return 0;
}
Keluarannya adalah
75, 65
int n = 65;
int m = n + 10;
Dalam beberapa situasi penugasan embedded membuat program lebih enak dibaca.
Sebagai contoh, pernyataan tunggal berikut lebih baik dibandingkan bila
menggunakan 8 pernyataan yang terpisah
n1 = n2 = n3 = n4 = n5 = n6 = n7 = n8 = 65535;
Sebuah penugasan berantai tidak dapat digunakan sebagai inisialisasi dalam suatu
deklarasi.
#include <iostream.h>
tidak diakhiri dengan tanda semicolon, karena bentuk tersebut bukanlah suatu
pernyataan, tetapi merupakan preprocessing directive.
Bahasa pemrograman C++ adalah suatu bahasa yang bebas bentuknya, dimana
penempatan elemen programnya dalam baris atau pada halamannya bebas.
Akibatnya pemrogram mempunyai kebebasan yang penuh dalam membentuk
programnya. Meskipun demikian sangat dianjurkan menyusun program dengan
bentuk yang beraturan. Berikut adalah anjuran bagaimana sebuah program C++
disusun.
Letakkan semua bentuk #include pada bagian awal (paling atas) dari file.
Letakkan setiap pernyataan pada suatu baris baru.
Masukkan semua pernyataan dalam suatu blok.
Berikan sebuah spasi diantara operator, seperti : n = 5.
14
Bilangan integer adalah semua bilangan (positif dan negatif) yang tidak memuat
tanda titik desimal. Unsigned integer adalah bilangan integer yang non-negatif.
C++ mempunyai sembilan tipe integer, yaitu
Perbedaaan dari ke sembilan tipe ini terletak pada jangkauan nilai yang diijinkan
untuknya. Jangkauan ini juga ditentukan oleh sistem komputer yang digunakan.
Sebagai contoh dalam PC DOS, jangkauan int berkisar antara - 32.768 sampai
dengan 32.767, sementara dalam workstation UNIX jangkauannya dapat mencapai
-2.147.483.648 sampai dengan 2.147.483.647.
Contoh program berikut memperlihatkan jangkauan dari semua tipe integar pada
mesin. Nama-nama SCHAR_MIN, LONG_MAX dan sebagainya adalah konstanta
yang disimpan dalam file <limits.h>, sehingga preprocessor directive nya adalah
#include <limits.h>
Contoh :
#include <iostream.h>
#include <limits.h>
// Mencetak konstanta-konstanta yang tersimpan dalam limits.h.
main()
{
cout << “minimum char = “ << CHAR_MIN << endl;
cout << “maximum char = “ << CHAR_MAX << endl;
cout << “minimum short = “ << SHRT_MIN << endl;
cout << “maximum short = “ << SHRT_MAX << endl;
cout << “minimum int = “ << INT_MIN << endl;
cout << “maximum int = “ << INT_MAX << endl;
cout << “minimum long = “ << LONG_MIN << endl;
cout << “maximum long = “ << LONG_MAX << endl;
cout << “minimum signed char = “ << SCHAR_MIN << endl;
cout << “maximum signed char = “ << SCHAR_MAX << endl;
cout << “maximum unsigned char = “ << UCHAR_MAX << endl;
cout << “maximum unsigned short = “ << USHRT_MAX << endl;
cout << “maximum unsigned = “ << UINT_MAX << endl;
15
Keluarannya adalah
Keluaran di atas adalah dari workstation UNIX. Terlihat hanya terdapat enam
macam integer yang berbeda, yaitu
Penjelasan : short integer memerlukan lokasi memori sebanyak 2 byte (16 bit) dalam
mesin, karena jangkauannya adalah –32.768 s.d. 32.767 meliputi 65.536 = 216
kemungkinan nilai.
Pada PC yang bekerja dalam Borland C++, semua prosedur di atas mempunyai
jangkauan yang sama kecuali int dan unsigned, yaitu
Contoh :
#include <iostream.h>
// Mencoba operator aritmatik.
main()
{
int m = 38, n = 5;
cout << m << “ + “ << n << “ = “ << (m + n) << endl;
cout << m << “ - “ << n << “ = “ << (m - n) << endl;
cout << “ - “ << n << “ = “ << (- n) << endl;
cout << m << “ * “ << n << “ = “ << (m * n) << endl;
cout << m << “ / “ << n << “ = “ << (m / n) << endl;
cout << m << “ % “ << n << “ = “ << (m % n) << endl;
return 0;
}
Keluarannya adalah
38+ 5 = 43
38– 5 = 33
–5=–5
38 * 5 =190
38 / 5 = 7
38 % 5 = 3
17
Contoh lain :
#include <iostream.h>
// Mencoba operator aritmatik.
main()
{
int m = -14, n = 5, q = m/n, r = m%n;
cout << “ m = “ << m << endl;
cout << “ n = “ << n << endl;
cout << “q = “ << q << endl;
cout << “ r = “ << r << endl;
cout << “q*n + r = “ << “(“ << q << “)*( “ << n << “) + “
<< r << “ = “ << q*n + r << “ = “ << m << endl;
return 0;
}
Keluarannya adalah
m = -14
n=5
q = -2
r = -4
q*n + r = (-2)*(5) + -4 = -14 = -14
Contoh :
#include <iostream.h>
// Mencoba operator naik dan turun.
main()
{
int m = 44, n = 66;
cout << “m = “ << m << “, n = “ << n << endl;
++m;
--n;
cout << “m = “ << m << “, n = “ << n << endl;
m++;
n--;
cout << “m = “ << m << “, n = “ << n << endl;
18
return 0;
}
Keluarannya adalah
m = 44, n = 66
m = 45, n = 65
m = 46, n = 64
Bila digunakan dalam pernyataan yang berdiri sendiri, ++m dan m++ keduanya
ekivalen dengan penugasan
m = m +1;
n = n – 1;
Tetapi bila digunakan sebagai sub-ekspresi (ekspresi dalam ekspresi), operasi pre-
increment ++m berbeda dengan operasi post-increment m++. Pre-increment akan
menaikkan dulu nilai variabel sebelum menggunakannya dalam ekspresi yang lebih
besar (lebih luas, diluarnya), dimana post-increment menaikkan nilai variabel hanya
setelah menggunakan nilai variabel yang berlaku saat itu dari variabel dalam
ekspresi yang lebih besar (lebih luas, diluarnya).
Contoh :
#include <iostream.h>
// Mencoba operator naik dan turun.
main()
{
int m = 66, n;
n = ++m;
cout << “m = “ << m << “, n = “ << n << endl;
n = m++;
cout << “m = “ << m << “, n = “ << n << endl;
cout << “m = “ << m++ << endl;
cout << “m = “ << m << endl;
cout << “m = “ << ++m << endl;
return 0;
}
19
Kelurannya adalah
m = 67, n = 67
m = 68, n = 67
m = 68
m = 69
m = 70
Contoh :
#include <iostream.h>
main()
{
int n = 5, x;
x = ++n * --n;
cout << “n = “ << n << “,x = “ << x << endl;
cout << ++n << “ “ << ++n << “ “ << ++n << endl;
return 0;
}
Keluarannya adalah
n = 5, x = 25
876
dengan op adalah suatu operator biner. Akibat dari penugasan kombinasi ini sama
dengan
n += 8;
n = n + 8;
Contoh :
#include <iostream.h>
// Mencoba operator kombinasi.
main()
{
int n = 44;
n += 9;
cout << n << endl;
n -= 5;
cout << n << endl;
n *= 2;
cout << n << endl;
return;
}
Keluarannya adalah
53
48
96
Contoh :
#include <iostream.h>
#include <limits.h>
// Test overflow untuk tipe short integer.
main()
{
short n = SHRT_MAX –1;
cout << n++ << endl;
cout << n++ << endl;
cout << n++ << endl;
cout << n++ << endl;
return 0;
}
Keluarannya adalah
32766
32767
-32768
-32767
Kebanyakan komputer menangani keadaan overflow dengan cara berikut. Nilai yang
ada dibalikkan kembali, dimana bilangan yang datang di atas nilai maksimumnya
adalah nilai yang minimum. Jadi hal ini merupakan suatu kesalahan.
Overflow maupun underflow adalah salah satu bentuk dari kesalahan pada saat run-
time (run-time error). Bentuk kesalahan sejenis adalah pembagian dengan bilangan
nol.
Dalam C++ tipe karakter char adalah salah satu bentuk dari tipe integer.
Hal ini berarti sebuah variable dari tipe char dapat digunakan dalam
ekspresi integer seperti integer-integer yang lain. Contoh berikut
memperlihatkan operator aritmatik integer diterapkan ke dalam variabel
char,
22
char c = 54;
char d = 2*c – 7;
c += d%3;
Nama char digunakan karena bila variabel dari tipe ini merupakan masukan atau
keluaran, akan diintepretasikan sebagai karakter. Tetapi bila sebuah karakter
sebagai masukan, sistem secara otomatis menyimpannya dalam kode ASCII sebagai
nilai dari integer tipe char. Dan bila sebuah variabel tipe char adalah keluaran,
sistem secara otomatis akan mengirimkan karakter yang bersangkutan ke aliran
keluaran.
C++ mendefinisikan tiga buah tipe integer 8 bit, yaitu char, signed char dan
unsigned char. Tetapi hanya dua yang jelas. Tipe char dari signed char ataupun
unsigned char tergantung dari jenis komputernya. Penggunaan tipe char untuk
karakter biasa. Penggunaan tipe unsigned char untuk bentuk string yang sangat
pendek. Sedangkan signed char tidak secara eksplisit sering digunakan.
Contoh :
#include <iostream.h>
// Test keluaran dari tipe char
main()
{
char c = 64;
cout << c++ << “ “; // mencetak ’@’ dan menaikkan c ke 65
cout << c++ << “ “; // mencetak ‘A’ dan menaikkan c ke 66
cout << c++ << “ “; // mencetak ‘B’ dan menaikkan c ke 67
cout << c++ << endl; // mencetak ‘C’ dan menaikkan c ke 68
c = 96;
cout << c++ << “ “; // mencetak ‘’’ dan menaikkan c ke 97
cout << c++ << “ “; // mencetak ‘a’ dan menaikkan c ke 98
cout << c++ << “ “; // mencetak ‘b’ dan menaikkan c ke 99
cout << c++ << endl; // mencetak ‘c’ dan menaikkan c ke 100
return 0;
}
Keluarannya adalah
@ABC
‘abc
Contoh :
# include <iostream.h>
// Test keluaran tipe char
main()
{
char x = ‘A’;
cout << x++ << “ “ << int(x) << endl; // mencetak ‘A’ dan 65
cout << x++ << “ “ << int(x) << endl; // mencetak ‘B’ dan 66
cout << x++ << “ “ << int(x) << endl; // mencetak ‘C’ dan 67
return 0;
}
Keluarannya adalah
A 65
B 66
C 67
24
Dalam C++ masukan analog dengan keluaran. Hanya berbeda dalam aliran datanya,
dimana dalam pernyataan keluaran cout, aliran data keluar; sedangkan dalam
pernyataan masukan cin, aliran data masuk. Cin merupakan perintah untuk
memasukkan data secara interaktif (melalui console/monitor).
#include <iostream.h>
// Memasukkan bilangan melalui keyboard
main()
{
int umur;
cout << “Berapakah umur anda ? “;
cin >> umur;
cout << “Dalam 10 tahun, umur anda akan menjadi “ << umur + 10 <<
“.\n”;
return 0;
}
Keluarannya :
Contoh lain :
25
#include <iostream.h>
main()
{
char pertama, kedua;
cout << “Masukkan inisial anda : \n”;
cout << “\tInisial nama pertama : “;
cin >> pertama;
cout << “\tInisial nama kedua : “;
cin >> kedua;
cout << “Apa kabar “ << pertama << “. “ << kedua << “?\n”;
return 0;
}
Keluarannya adalah
Contoh lain :
#include <iostream.h>
main()
{
char pertama, kedua;
cout << “Masukkan inisial pertama dan kedua anda : ”;
cin >> pertama >> kedua;
cout << “Apa kabar “ << pertama << “. “ << kedua << “?\n”;
return 0;
}
Keluarannya adalah
Contoh lain :
26
#include <iostream.h>
main()
{
char pertama, kedua;
cout << “Masukkan inisial pertama dan kedua anda : ”;
cin >> pertama >> kedua;
cout << “Apa kabar “ << pertama << “. “ << kedua << “?\n”;
return 0;
}
Keluarannya adalah
Catatan : Bila tipe char adalah integer, cin akan mengabaikan semua bentuk spasi
(contohnya blank, tab dan baris baru), bila membaca masukan.
Bentuk umumnya :
if (kondisi) pernyataan;
Contoh :
#include <iostream.h>
main()
{
int n, d;
cout << “Masukkan dua buah bilangan integer : ”;
cin >> n >> d;
if (n%d == 0) cout << n << “ habis dibagi oleh “ << d << endl;
return 0;
}
27
Keluarannya adalah
Bentuk umumnya :
if (kondisi) pernyataan1;
else pernyataan2;
Contoh :
#include <iostream.h>
main()
{
int n, d;
cout << “Masukkan dua buah bilangan integer : ”;
cin >> n >> d;
if (n%d == 0) cout << n << “ habis dibagi oleh “ << d << endl;
else cout << n << “ tidak habis dibagi oleh “ << d << endl;
return 0;
}
Keluarannya adalah
Contoh lain :
#include <iostream.h>
main()
{
int n, d;
cout << “Masukkan dua buah bilangan integer : ”;
cin >> n >> d;
if (n%d) cout << n << “ tidak habis dibagi oleh “ << d << endl;
else cout << n << “ tidak habis dibagi oleh “ << d << endl;
return 0;
}
Keluarannya adalah
Contoh :
#include <iostream.h>
// Menentukan bilangan yang lebih besar
main()
{
int m, n;
cout << “Masukkan dua buah bilangan integer : ”;
cin >> m >> n;
if (m > n) cout << m << endl;
else cout << n << endl;
return 0;
}
29
Keluarannya adalah
Contoh lain :
#include <iostream.h>
// Menentukan bilangan terbesar dari tiga buah bilangan integer
main()
{
int n1, n2, n3;
cout << “Masukkan tiga buah bilangan integer : ”;
cin >> n1 >> n2 >> n3;
int max = n1;
if (n2 > max) max = n2;
if (n3 > max) max = n3;
cout << “Bilangan terbesar adalah “ << max << endl;
return 0;
}
Keluarannya adalah
{
int temp = x;
x = y;
y = temp;
}
#include <iostream.h>
30
Keluarannya adalah
#include <iostream.h>
// Mengurutkan bilangan secara ascending (dari dua buah bilangan integer)
main()
{
int x, y;
cout << “Masukkan dua buah bilangan integer : ”;
cin >> x >> y;
if (x < y) cout << “Bilangan terurut adalah “ << x << “ “ << y << endl;
else cout << “Bilangan terurut adalah “ << y << “ “ << x << endl;
return 0;
}
Keluarannya adalah
Kata kunci (keyword) dalam suatu pemrograman adalah suatu kata yang telah
didefinisikan dan tersedia untuk suatu penggunaaan khusus. Cara penulisannya tidak
dapat diubah, ditambah atau dikurangi.
Dalam bahasa pemrograman lainnya sering disebut sebagai reserved words, dan
nama-nama yang mendahuluinya disebut standard identifiers.
&& p && q dievaluasi sama dengan 1 kedua nilai p dan q sama dengan 1.
|| p || q dievaluasi sama dengan 1, jika salah satu nilai p atau q sama dengan 1.
! !p dievaluasi sama dengan 1, jika nilai p sama dengan 0.
Contoh :
#include <iostream.h>
// Menentukan bilangan terbesar dari tiga buah bilangan integer
main()
{
int a, b, c;
cout << “Masukkan tiga buah bilangan integer : ”;
cin >> a >> b >> c;
if (a >= b && a >= c) cout << “Bilangan terbesar adalah “ << a << endl;
if (b >= a && b >= c) cout << “Bilangan terbesar adalah “ << b << endl;
if (c >= a && c >= b) cout << “Bilangan terbesar adalah “ << c << endl;
return 0;
}
32
Keluarannya adalah
Contoh lain :
#include <iostream.h>
// Menentukan apakah seseorang itu terdaftar atau tidak.
// Diijinkan untuk menjawab ya atau tidak dengan Y/y atau T/t.
main()
{
char jawaban;
cout << “Apakah anda terdaftar (y/t) : ”;
cin >> jawaban;
if (jawaban == ‘Y’ || jawaban == ‘y’) cout << “Anda terdaftar.\n”;
else cout << “ Anda tidak terdaftar.\n”;
return 0;
}
Keluarannya adalah
Contoh lain :
#include <iostream.h>
// Program menentukan apakah sebuah bilangan habis membagi bilangan
lainnya.
main()
{
int n, d;
cout << “Masukkan dua buah bilangan integer positif : ”;
cin >> n >> d;
if (d > 0 && n%d == 0) cout << d << “ habis membagi “ << n << endl;
else cout << d << “ tidak habis membagi “ << n << endl;
return 0;
}
Keluarannya adalah
if (d > 0)
if (n%d == 0)
cout << d << “ habis membagi “ << n << endl;
else
cout << d << “ tidak habis membagi “ << n << endl;
else
cout << d << “ tidak habis membagi “ << n << endl;
Penggalan program :
if (a > 0)
if ( b > 0) ++a;
else
if (c > 0)
if (a < 4) ++b;
else
if (b < 4) ++c;
else --a;
else
if (c < 4) --b;
else --c;
else
a = 0;
if (a > 0)
if (b > 0) ++a;
else if (c > 0)
if (a < 4) ++ b;
else if (b < 4) ++c;
else --a;
else if (c < 4) --b;
else--c;
else
a = 0;
#include <iostream.h>
// Menentukan bilangan terbesar dari tiga buah bilangan integer
main()
{
int a, b, c, max;
cout << “Masukkan tiga buah bilangan integer : ”;
cin >> a >> b >> c;
if (a > b)
if (a > c) max = a; // a > b dan a > c
else max = c; // c>= a > b
else
if (b > c) max = b; // b >= a dan b > c
else max = c; // c >= b >= a
cout << “Bilangan terbesar adalah “ << max << endl;
return 0;
}
Keluarannya adalah
35
Contoh lain :
#include <iostream.h>
// Mengkonversikan nilai test dalam bentuk indeks A, B, C, D atau E
main()
{
int nilai;
cout << “Masukkan nilai test : ”;
cin >> nilai;
if (nilai > 100) cout << “Salah !! Nilai diluar jangkauan. “;
else if (nilai >= 90) cout << “Nilai indeks = “ << ‘A’ ;
else if (nilai >= 80) cout << “Nilai indeks = “ << ‘B’ ;
else if (nilai >= 70) cout << “Nilai indeks = “ << ‘C’ ;
else if (nilai >= 60) cout << “Nilai indeks = “ << ‘D’ ;
else if (nilai >= 0) cout << “Nilai indeks = “ << ‘E’ ;
else cout << Salah !! Nilai diluar jangkauan. “;
return 0;
}
Keluarannya adalah
switch (ekspresi) {
case konstanta1 : listpernyataan1;
case konstanta2 : listpernyataan2;
:
:
case konstantaN : listpernyataanN;
default : listpernyataan;
}
Contoh :
#include <iostream.h>
// Program berikut memberikan akibat yang sama dengan program
sebelumnya.
main()
{
int nilai;
cout << “Masukkan nilai test : ”; cin >> nilai;
if (nilai > 100) cout << “Salah !! Nilai diluar jangkauan. \n “;
switch (nilai/10) {
case 10 :
case 9 : cout << ‘A’ << endl; break;
case 8 : cout << ‘B’ << endl; break;
case 7 : cout << ‘C’ << endl; break;
case 6 : cout << ‘D’ << endl; break;
case 5 :
case 4 :
case 3 :
case 2 :
case 1 :
case 0 : cout << ‘E’ << endl; break;
default : cout << Salah !! Nilai diluar jangkauan. \n“;
}
return 0;
}
37
Pertama-tama program akan membagi nilai dengan 10. Bila dimasukkan nilai = 48,
ekspresi nilai/10 mengevaluasi menjadi 4. Selanjutnya nilai ini ditempatkan dalam
list case, dan setiap pernyataan sampai break akan dieksekusi. Rentang semua case
menurun sampai case 0 dan pernyataan break akan dieksekusi. Fenomena seperti ini
dikenal sebagai jatuh terus (fall through).
C++ mengijinkan bentuk penyingkatan suatu kasus khusus dari pernyataan if … else,
yang disebut operator ekspresi kondisional dan menggunakan simbol ? dan : dalam
bentuk
min = x < y ? x : y;
akan menunjuk nilai x ke min jika x < y, sebaliknya akan menunjuk nilai y ke min.
Operator ekspresi kondisional pada umumnya hanya digunakan bila kondisi dan
kedua ekspresinya sangat sederhana.
Jangkauan dari sebuah identifier adalah bagian dari program yang dapat
digunakan. Contohnya, variabel tidak dapat digunakan sebelum
dideklarasikan dulu, sehingga jangkauannya dimulai dari saat
dideklarasikan.
#include <iostream.h>
// Jangkauan variabel
main()
{
x = 11; // Salah !! Ini tidak dalam jangkauan x
int x;
{
x = 22; // Benar !! Ini dalam jangkauan x
y = 33; // Salah !! Ini tidak dalam jangkauan y.
int y;
x = 44; // Benar !! Ini dalam jangkauan x.
y = 55; // Benar !! Ini dalam jangkauan y.
}
x = 66; // Benar !! Ini dalam jangkauan x.
y = 77; // Salah !! Ini tidak dalam jangkauan y.
return 0;
}
#include <iostream.h>
int x = 11; // x ini bersifat global
main()
{ // mulai jangkauan dari main()
int x = 22;
{ // mulai jangkauan dari blok internal
int x = 33;
cout <<”Dalam blok bagian dalam main() : x = “ << x << endl;
} //akhir jangkauan dari blok internal
cout << “Dalam main() : x = “ << x << endl;
cout << “Dalam main() : ::x = “ << ::x << endl;
return 0;
} // akhir jangkauan dari main()
Keluarannya adalah
Selain dari tipe-tipe data yang telah didefinisikan sebelumnya, seperti int dan char,
C++ juga mengijinkan pemrogram untuk mendefinisikan tipe datanya sendiri. Hal
ini dapat dikerjakan melalui beberapa cara, dan yang paling canggih adalah
menggunakan kelas-kelas (classes) (yang akan dibahas dibagian belakang). Dalam
bagian ini akan dibahas tipe data yang didefinisikan oleh user, dalam bentuk yang
lebih sederhana.
Suatu tipe enumeration adalah suatu tipe integral yang didefinisikan oleh user,
dengan bentuk umum seperti berikut
Dengan enum adalah kata kunci dalam C++, namatipe berarti sebuah identifier
yang nama tipenya didefinisikan, dan enumeratorlist berarti sebuah list identifier
yang mendefinisikan konstanta integer.
Contoh berikut mendefinisikan tipe enumeration Semester, yang terdiri dari tiga
kemungkinan nilai, yaitu sebuah variabel yang tipenya dapat
Dan dapat menggunakan variabel-variabel tersebut dan nilai tipe tersebut sebagai
tipe-tipe yang didefinisikan sebelumnya
s1 = genap;
s2 = ganjil;
if (s1 == s2) cout << “Semester yang sama. \n”;
40
Jika nilai integer ditunjuk hanya untuk beberapa enumerator, maka nilai-nilai yang
lain akan merupakan nilai yang berurutan, seperti
enum bulan {jan =1, feb, maret, april, mei, juni, juli, agust, sept, okt, nov,
des};
Enumerator adalah konstanta integer yang sederhana, maka sah saja untuk
mempunyai beberapa enumerator yang berbeda dengan nilai yang sama, seperti
Tipe enumeration biasa digunakan untuk membuat kode, agar mudah untuk
dipahami.
Contohnya :
Dalam beberapa kasus, C++ mengijinkan obyek dari satu tipe digunakan dalam tipe
lain yang diharapkan. Hal ini dikenal sebagai konversi tipe. Contoh konversi tipe
41
yang paling umum adalah dari sebuah tipe integer ke tipe integer yang lain, dan
konversi dari tipe integer ke tipe floating point.
Secara umum sebuah tipe integer dapat digunakan oleh tipe integer lain yang
diharapkan jika tipe yang diharapkan mempunyai peringkat yang lebih tinggi.
Sebagai contoh, suatu char dapat digunakan oleh tipe int yang diinginkan karena
tipe int mempunyai peringkat yang lebih tinggi dibandingkan dengan tipe char.
Contoh :
#include <iostream.h>
main()
{
char c = ‘A’;
short m = 22;
int n = c + m;
cout << “n = “ << n << endl;
return 0;
}
Keluarannya adalah
n = 87
Contoh lain :
#include <iostream.h>
enum Warna {merah, jingga, kuning, hijau, biru, ungu};
main()
{
Warna x = biru;
Cout << “x = “ << x << endl;
return 0;
}
Keluarannya adalah
x=4
42
Iterasi adalah pengulangan dari sebuah pernyataan atau blok pernyataan dalam suatu
program. C++ mempunyai tiga pernyataan iterasi, yaitu pernyataan while,
pernyataan do … while dan pernyataan for. Pernyataan-pernyataan iterasi biasa juga
disebut dengan istilah lup (loop).
Pertama-tama kondisi dievaluasi. Jika kondisi tidak sama dengan nol (benar),
pernyataan dieksekusi dan kondisi dievaluasi lagi. Kedua langkah ini diulangi
sampai hasil evaluasi dari kondisi adalah nol (salah).
Contoh :
#include <iostream.h>
// Program mencari nilai pangkat tiga dari suatu bilangan
// Program berhenti bila data bilangannya bernilai 0.
main()
{
int n;
cout << “Masukkan bilangan integer positif. Berakhir bila bilangan = 0.\
n\t: “;
cin >> n;
while (n > 0) {
cout << n << “ pangkat tiganya adalah “ << n*n*n << “\n\t: “;
cin >> n;
}
return 0;
}
Keluarannya adalah
43
#include <iostream.h>
// Program mencari jumlah kuadrat dari 1 sampai n
main()
{
int i=1, n, sum = 0;
cout << “Masukkan sebuah bilangan integer : “; cin >> n;
while (i <= n) {
sum += i * i;
i ++;
}
cout << “Penjumlahan kuadrat dari pertama sampai ke “ << n << “
adalah “
<< sum << endl;
return 0;
}
Keluarannya adalah
Contoh :
#include <iostream.h>
// Program menghitung fungsi faktorial : n! = (n)(n-1)…(3)(2)(1).
main()
{
int n, f = 1;
cout << “Masukkan sebuah bilangan integer : “; cin >> n;
cout << n << “ faktorial adalah “;
do {
f *= n;
n --;
} while (n > 1);
cout << f << endl;
return 0;
}
Keluarannya adalah
#include <iostream.h>
// Program menghitung fungsi faktorial : n! = (n)(n-1)…(3)(2)(1).
45
main()
{
int n;
unsigned f = 1; // unsigned f atau unsigned short f.
cout << “Masukkan sebuah bilangan integer : “; cin >> n;
cout << n << “ faktorial adalah “;
do {
f *= n;
n --;
} while (n > 1);
cout << f << endl;
return 0;
}
Keluarannya adalah
Sebuah lup dikontrol oleh tiga bagian, yaitu sebuah inisialisasi, sebuah kondisi
kontinuitas dan perubahannya. Dalam contoh sebelumnya terlihat bahwa variabel
kontrol lupnya adalah n, yang merupakan nilai inisialisasi yaitu cin >> n, kondisi
kontinuitasnya adalah n > 1, dan perubahannya adalah n--. Bila ketiga bagian ini
sederhana saja, maka lup dapat di set sebagai suatu lup for, yang biasanya lebih
sederhana dari pada lup while atau lup do … while.
Inisialisasi, kondisi kontinuitas atau perubahannya dapat kosong.
#include <iostream.h>
// Program mencari jumlah kuadrat dari 1 sampai n
main()
46
{
int n, sum = 0;
cout << “Masukkan sebuah bilangan integer : “; cin >> n;
for (int i = 1; i <= n; i++)
sum += i * i;
cout << “Penjumlahan kuadrat dari pertama sampai ke “ << n << “
adalah “
<< sum << endl;
return 0;
}
Keluarannya adalah
Contoh lainnya :
#include <iostream.h>
// Program menghitung fungsi faktorial : n! = (n)(n-1)…(3)(2)(1).
main()
{
int n, unsigned f = 1; // unsigned f atau unsigned short f.
cout << “Masukkan sebuah bilangan integer : “; cin >> n;
for (int i = 2; i <= n; i++)
f *= i;
cout << n << “ faktorial adalah “ << f << endl;
return 0;
}
Keluarannya adalah
#include <iostream.h>
// Program membaca deretan bilangan positif, diakhiri bilangan integer 0.
// Juga menentukan bilangan maksimum dan minimumnya.
main()
{
int n, min, max;
cout << “Masukkan bilangan integer. Akhiri dengan 0 :\n”;
cin >> n;
for (min = max = n; n > 0; ) {
if (n < min) min = n; // min dan max adalah terkecil dan
terbe
else if (n > max) max = n; // sar dari seluruh bilangan yang
dibaca.
cin >> n;
}
cout << “min = “ << min << “ dan max = “ << max << endl;
return 0;
}
Keluarannya adalah
Sebuah sentinel adalah sebuah nilai khusus dari suatu variabel yang digunakan untuk
mengakhiri masukan lup. Pada contoh di atas, nilai 0 digunakan sebagai sebuah
sentinel.
{
for (int m = 1, n = 8; m < n; m++, n--)
cout << “m = “ << m << “,n = “ << n << endl;
return 0;
}
Keluarannya adalah
m = 1, n = 8
m = 2, n = 7
m = 3, n = 6
m = 4, n = 5
Bagian inisialisasi lup for mendeklarasikan dua variabel kontrol, yaitu m dan n.
Inisialisasi m adalah 1 dan n adalah 8. Bagian perubahan menggunakan operator
koma untuk memasukkan kedua ekspresi perubahan, yaitu m++ dan n--. Lup akan
berlanjut sepanjang nilai m < n.
Contoh :
#include <iostream.h>
main()
{
while (1) {
if (i > n) break; // lup berhenti disini bila i > n
sum += i * i;
i ++;
return 0;
}
Sepanjang (i <= n), lup akan kontinyu. Begitu (i > n), pernyataan break
mengeksekusi dan lup segera berhenti.
Contoh lain :
#include <iostream.h>
// Program membaca sederetan bilangan integer positif, mengakhiri dengan 0
dan
// mencetak nilai rata-ratanya.
49
main()
{
int n, count = 0, sum = 0;
cout << “ Masukkan bilangan integer positif. Akhiri dengan 0 :\n”;
for ( ; ; ) {
cout << “\t” << count + 1 << “: “;
cin >> n;
if (n == 0) break;
++count;
sum += n;
}
cout << “Nilai rata-rata dari “ << count << “ buah bilangan adalah “
<< float (sum) / count << endl;
return 0;
}
Keluarannya adalah
Catatan : bila tidak terdapat break, maka akan merupakan lup yang tak
hingga, karena pernyataan for nya berbentuk for ( ; ; ).
Pernyataan break akan melompati semua pernyataan dalam blok lup dan
akan melanjutkan pernyataan berikutnya setelah lup. Pernyataan
continue mirip dengan itu, kecuali dia tidak mengakhiri lup, melainkan
pergi ke bagian awal dari blok lup untuk memulai iterasi berikutnya.
Contoh :
#include <iostream.h>
50
main()
{
int n;
for ( ; ; ) {
cout << “Masukkan bilangan integer : “; cin >> n;
if (n%2 == 0) continue;
else if (n%3 == 0) break;
cout << “\tLanjutkan lup berikutnya.\n”
}
cout << “\tAkhiri lup.\n”;
return 0;
}
Keluarannya adalah
#include <iostream.h>
main()
{
int a, b, c;
cin >> a>> b >> c;
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++)
for (int k = 0; k < c; k++)
if (i*j*k > 100) goto esc;
else cout << i*j*k << “ “;
esc : cout << endl;
}
return 0;
}
Bila pernyataan goto yang terletak di lup yang paling dalam dicapai,
maka program akan keluar ke pernyataan keluaran pada bagian
terbawah dari lup yang paling luar.
Ada cara lain untuk keluar dari lup ini, yaitu dengan me-reset variabel
kendali lup dengan mengganti pernyataan if di dalam lup-k dengan
Hal ini akan menyebabkan lup-j dan lup-k berakhir, karena kondisi
kontinyu j < b dan k < c akan salah. Ini adalah metoda hacker’s, karena
nilai-nilai set artifisial dari variabel kendali j dan k untuk mencapai
keluaran yang diinginkan adalah sebagai efek sampingan saja.
int done = 0;
for (int i = 0; i < a && !done; i++) {
52
Tetapi cara ini tidak praktis, masih lebih baik menggunakan pernyataan
goto untuk mengakhiri lup bersarang ini.
Dalam C++ terdapat tiga macam tipe bilangan riel, yaitu float, double
dan long double. Pada kebanyakan sistem, double menggunakan jumlah
byte dua kali dari float. Float menggunakan 4 byte, double
menggunakan 8 byte dan long double menggunakan 8, 10, 12, atau 16
byte.
Tipe yang digunakan dalam bilangan riel disebut tipe floating point,
karena cara penyimpanannya dalam internal komputer. Pada
kebanyakan sistem, sebuah bilangan seperti 123.45 akan dikonversikan
ke bentuk biner
123.45 = 1111011.011100112
123.45 = 0.1111011011100112 x 27
Untuk tipe double 64 bit, mantisa disimpan dalam segmen 52 bit dan
eksponen dalam segmen 11 bit.
#include <iostream.h>
main()
{
cout << “Jumlah byte yang digunakan : \n”;
cout << “\t char : “ << sizeof (char) << endl;
cout << “\t short : “ << sizeof (short) << endl;
cout << “\t int : “ << sizeof (int) << endl;
cout << “\t long : “ << sizeof (long) << endl;
cout << “\t unsigned char : “ << sizeof (unsigned char) << endl;
cout << “\tunsigned short : “ << sizeof (unsigned short) << endl;
cout << “\t unsigned int : “ << sizeof (unsigned int) << endl;
cout << “\t unsigned long : “ << sizeof (unsigned long) << endl;
cout << “\t signed char : “ << sizeof (signed char) << endl;
cout << “\t float : “ << sizeof (float) << endl;
cout << “\t double : “ << sizeof (double) << endl;
cout << “\t long double : “ << sizeof (long double) << endl;
}
Keluaran berikut adalah untuk jenis workstation UNIX. Pada mesin ini,
int dan long adalah ekivalen; unsigned int dan unsigned long adalah
ekivalen; double dan long double juga ekivalen. Dengan kata lain, kata
“long” sama saja artinya dengan yang reguler.
54
#include <float.h>
#include <iostream.h>
#include <float.h>
main()
{
int fbit = 8*sizeof (float); // setiap byte terdiri dari 8 bit.
cout << “float menggunakan : \t” << fbit << “ bit : \n\t\t “
<< FLT_MANT_DIG – 1 << “ bit untuk mantisa \n\t\t”
<< fbit – FLT_MANT_DIG << “ bit untuk eksponen \n\t\t
“
<< 1 << “ bit untuk tanda bilangan
\n”
<< “untuk mendapatkan :“ << FLT_DIG << “ digit berarti\
n”
<< “dengan nilai minimum : “ << FLT_MIN << endl;
<< “dan nilai maksimum : “ << FLT_MAX << endl;
return 0;
}
Keluaranya adalah
55
#include <iostream.h>
main()
{
int n = 32;
float x = 3.14159;
x += n; // nilai 32 secara otomatis diubah menjadi
32.0
56
Secara umum, jika T adalah sebuah tipe dan v adalah suatu nilai dari
tipe lainnya, maka ekspresi
T(v)
n = int (eksp);
#include <iostream.h>
// Program mengkonversikan sebuah double ke sebuah int.
main()
{
double v = 1234.56789;
int n = int (v);
cout << “v = “ << v << “, n = “ << n << endl;
57
return 0;
}
Keluarannya adalah
v = 1234.57, n = 1234
Jika sebuah tipe dikonversikan ke tipe yang lebih tinggi, operator tipe
case tidak diperlukan. Perhatikan contoh berikut.
#include <iostream.h>
main()
{
char c = ‘A’; cout << “ char c = “ << c << endl;
short k = c; cout << “ short k = “ << k << endl;
int m = k; cout << “ int m = “ << m << endl;
long n = m; cout << “ long n = “ << n << endl;
float x = n; cout << “ float x = “ << x << endl;
double y = x; cout << “ double y = “ << y << endl;
return 0;
}
Keluarannya adalah
char c = A
short k = 65
int m = 65
long n = 65
float x = 65
double y = 65
Nilai integer karakter ‘A’ dalam kode ASCII adalah 65. Nilai ini
disimpan sebagai suatu char dalam c, sebagai suatu short dalam k,
sebagai suatu int dalam m, dan sebagai suatu long dalam n. Nilai ini
selanjutnya dikonversikan ke nilai floating point 65.0 dan disimpan
sebagai suatu float dalam x dan sebagai suatu double dalam y.
Perhatikan bahwa pencetakan nilai integer c sebagai suatu karakter, dan
selanjutnya pencetakan bilangan riel x dan y sebagai integer karena
bagian pecahannya adalah 0.
58
Karena sangat mudah untuk mengkonversikan tipe integer dan tipe riel
dalam C++, maka sangatlah mudah juga untuk membedakan keduanya.
Secara umum, integer digunakan untuk menghitung segala sesuatu yang
diskrit, sedangkan riel digunakan untuk mengukur skala yang kontinyu.
Hal ini berarti nilai-nilai integer adalah eksak, sementara nilai-nilai riel
adalah aproksimasi.
#include <iostream.h>
main()
{
double x = 1000/3.0; cout << “x = “ << x << endl;
double y = x – 333.0; cout << “y = “ << y << endl;
double z = 3*y – 1.0; cout << “z = “ << z << endl;
if ( z == 0) cout << “z == 0. \n”;
else cout << “z tidak sama dengan 0. \n”;
return 0;
}
Keluarannya adalah
x = 333.333
y = 0.333333
z = -5.68434e-14
z tidak sama dengan 0.
59
1
Secara aritmatik yang pasti, variabel akan mempunyai nilai x = 333 3 , y
1 1
= 3 dan z = 0. Tetapi 3 tidak dapat direpresentasikan secara pasti
sebagai suatu nilai floating point. Ketidak telitian ini direfleksikan
dalam bentuk nilai residu untuk z.
Contoh ini juga menggambarkan suatu masalah yang melekat pada
penggunaan tipe floating point dalam memeriksa persamaan
kondisional. Kondisi (z == 0) akan gugur bila z nilainya mendekati nol.
#include <iostream.h>
main()
{
double x;
cout << “Masukkan float : “; cin >> x;
cout << “Kebalikannya adalah “ << 1/x << endl;
return 0;
}
Keluarannya adalah
Suatu obyek adalah suatu daerah yang berbatasan dalam memori yang
mempunyai suatu alamat, suatu ukuran, suatu tipe dan suatu nilai.
Alamat dari suatu obyek adalah alamat memori dari byte pertama.
Ukuran dari suatu obyek adalah suatu jumlah byte yang ditempatinya
dalam memori. Nilai dari suatu obyek adalah konstanta yang
menentukan secara aktual bit yang disimpan dalam lokasi memori; dan
tipe obyek menggambarkan bagaimana bit diintepretasikan.
Sebagai contoh :
int n = 22;
mempunyai alamat memori 0x3fffcd6, ukuran 4, tipe int dan nilai 22.
(Alamat memori adalah suatu bilangan heksadesimal).
Tipe suatu obyek ditentukan oleh pemrogram. Nilai suatu obyek juga
dapat ditentukan oleh pemrogram pada saat compile, atau ditentukan
pada saat run. Ukuran obyek ditentukan oleh compiler. Sebagai contoh,
dalam GNU C++ suatu int mempunyai ukuran 4, sementara dalam
Borland C++ mempunyai ukuran 2. Alamat suatu obyek ditentukan oleh
sistem operasi komputer pada saat run.
Contoh :
#include <iostream.h>
main()
{
const char BEEP = ‘\b’;
const int MAXINT = 2147483647;
int n = MAXINT/2;
const float KM_PER_MI = 1.60934;
const double PI = 3.14159265358979323846;
return 0;
}
IV. FUNGSI-FUNGSI
Agar suatu program yang besar dapat ditata dengan baik, pemrogram
dapat membuatnya dalam bentuk subprogram-subprogram.
Subprogram-subprogram ini biasa disebut sebagai fungsi. Fungsi-fungsi
ini dapat dicoba dan di compile secara terpisah dan dapat digunakan
dalam program-program yang bebeda.
#include <iostream.h>
#include <math.h>
// Mencoba untuk menggunakan fungsi akar pangkat dua (sqrt).
main()
{
for (int i = 0; i < 6; i++)
cout << “\t” << i << “\t” << sqrt (i) << endl;
return 0;
}
Keluarannya adalah
0 0
1 1
2 1.41421
3 1.73205
4 2
5 2.23607
Contoh lain :
#include <iostream.h>
#include <math.h>
// Menghitung nilai trigonometri sin2x = 2 sin x cos x.
main()
{
for (float x = 0; x < 2; x += 0.2)
63
cout << “\t” << x << “\t” << sin (2*x) << “\t” << 2*sin(x)*cos(x) <<
endl;
return 0;
}
Keluarannya adalah
0 0 0
0.2 0.389418 0.389418
0.4 0.717356 0.717356
0.6 0.932039 0.932039
0.8 0.999574 0.999574
1 0.909297 0.909297
1.2 0.675463 0.675463
1.4 0.334988 0.334988
1.6 -0.0583744 -0.0583744
1.8 -0.442521 -0.442521
Dalam C++ terdapat file header lain, yaitu <iostream.h> dan <fstream.h>.
Fungsi yang didefinisikan oleh pemrogram terdiri dari 2 bagian, yaitu judul (header)
dan isinya (body).
Judul dari sebuah fungsi terdiri dari tipe return, nama dan list parameter. Untuk
contoh di atas, tipe return adalah int, nama adalah PangkatTiga, dan list
parameternya adalah int x. Jadi judul untuk fungsi pangkat tiga adalah
Isi dari sebuah fungsi adalah blok kode yang mengikuti judulnya. Berisi kode yang
menjalankan aksi dari fungsi, termasuk pernyataan return yang memuat nilai fungsi
yang akan dikembalikan ke yang memanggilnya. Isi dari fungsi PangkatTiga adalah
{
return x*x*x;
}
Biasanya isi dari fungsi cukup besar. Meskipun demikian, judulnya tetap
hanya berada dalam satu baris.
Pernyataan return dari sebuah fungsi mempunyai dua manfaat, yaitu akan
mengakhiri fungsi dan mengembalikan nilainya ke program pemanggil.
return ekspresi;
dengan ekspresi adalah sebuah ekspresi yang nilainya dinyatakan untuk sebuah
variabel yang tipenya sama seperti tipe fungsi return.
#include <iostream.h>
// Fungsi pangkat x tiga dari bilangan integer.
int PangkatTiga (int x)
{
return x*x*x;
}
// Mencoba fungsi PangkatTiga :
main()
{
int n = 1;
while (n != 0) {
cin >> n;
cout << PangkatTiga (n) << endl;
}
return 0;
}
Keluarannya adalah
5
125
-6
-216
0
0
Perhatikan bahwa fungsi PangkatTiga() didefinisikan di atas fungsi main(). Hal ini
disebabkan compiler C++ harus tahu tentang fungsi PangkatTiga() sebelum dia
digunakan dalam main().
#include <iostream.h>
// Fungsi menentukan nilai yang lebih besar dari dua bilangan integer.
int max (int x, int y)
{
if ( x < y) return y;
else return x;
}
main()
{
int m, n;
do {
cin >> m >> n;
cout << max (m, n) << endl;
} while (m != 0);
return 0;
}
4. Deklarasi Fungsi dan Definisi Fungsi
Pengertian deklarasi fungsi berbeda dengan definisi fungsi. Suatu deklarasi fungsi
adalah judul fungsi yang sederhana yang diikuti oleh tanda semicolon (;). Sedangkan
suatu definisi fungsi adalah fungsi yang lengkap, terdiri dari judul dan isinya. Suatu
deklarasi fungsi disebut juga sebagai suatu prototipe fungsi.
Suatu deklarasi fungsi seperti layaknya suatu deklarasi variabel, yang memberitahu
compiler semua informasi yang dibutuhkan untuk meng-compile file. Compiler
tidak perlu mengetahui bagaimana fungsi bekerja (isinya). Dia hanya perlu tahu
nama fungsi, jumlah dan tipe parameternya, dan tipe return-nya. Hal ini merupakan
informasi yang dimuat secara lengkap dalam judul fungsi.
Juga seperti sebuah deklarasi variabel, suatu deklarasi fungsi harus muncul di atas
semua nama fungsi yang digunakannya. Berbeda dengan definisi fungsi, yang dapat
diletakkan terpisah dari deklarasinya, dan dapat muncul dimana saja diluar fungsi
main() dan biasanya dituliskan setelah fungsi tersebut atau dalam file yang terpisah.
Variabel-variabel yang di list dalam list parameter fungsi disebut
parameter-parameter formal atau argumen-argumen formal. Variabel-
variabel lokal seperti ini hanya ada selama eksekusi fungsi yang
bersangkutan. Dalam contoh di atas, parameter-parameter formalnya
adalah x dan y.
Variabel-variabel yang di list dalam pemanggilan fungsi disebut parameter-
parameter aktual atau argumen-argumen aktual. Sama seperti variabel lainnya dalam
program utama (main program), variabel-variabel tersebut harus dideklarasikan
sebelum digunakan dalam pemanggilan. Dalam contoh di atas, parameter-parameter
aktualnya adalah m dan n.
Contoh program berikut sama dengan program yang sebelumnya, hanya deklarasi
fungsi muncul di atas program utama dan definisi fungsinya seperti berikut.
#include <iostream.h>
67
Perhatikan bahwa parameter formal x dan y di list dalam judul pada definisi (seperti
biasanya), tetapi bukan definisi.
Terlihat bahwa perbedaan antara suatu deklarasi fungsi dan suatu deklarasi variabel
tidaklah banyak, khususnya jika fungsi tidak mempunyai parameter. Sebagai contoh,
dalam suatu program yang mengolah string, diperlukan sebuah variabel yang
disebut length untuk menyimpan panjang string.Tetapi sebuah alternatif yang layak
akan dimiliki sebuah fungsi yang menghitung string, berapapun yang diperlukan
untuk menyimpan atau mengubah nilai.
Fungsi akan dideklarasikan sebagai
5. Kompilasi Terpisah
Definisi-definisi fungsi sering di-compile secara bebas dalam file-file yang terpisah.
Sebagai contoh, semua fungsi yang dideklarasikan dalam Pustaka Standard C di-
compile secara terpisah. Salah satu alasan untuk memisahkan kompilasi adalah
untuk menyembunyikan informasi, yaitu informasi yang penting melengkapi
kompilasi program tetapi tidak penting untuk dimengerti oleh pemrogram (dari
program yang tersembunyi).
68
File test_max.c
#include <iostream.h>
int max (int, int);
// Test driver untuk fungsi max.
main()
{
int m, n;
do {
cin >> m >> n;
cout << max (m, n) << endl;
} while (m != 0);
}
File max.c
Perintah aktual yang digunakan untuk meng-compile file di atas tergantung pada
sistemnya masing-masing.
Perintah pertama adalah meng-compile fungsi max. Perintah kedua meng-compile
test driver secara terpisah. Perintah ketiga me-link keduanya untuk menghasilkan
modul test_max yang dapat dilaksanakan (executable module), yang akan di-run
dengan perintah ke-empat.
Salah satu manfaat dari kompilasi secara terpisah adalah program dapat di-test
secara terpisah sebelum program pemanggilnya dituliskan.
Contoh berikut adalah fungsi menghitung nilai faktorial dari n buah bilangan.
Fungsi di atas mempunyai dua lokal variabel, yaitu n dan f. Parameter n lokal karena
dideklarasikan dalam list parameter fungsi. Variabel f lokal karena dideklarasikan
dalam bagian isi dari fungsi.
Program utamanya seperti berikut.
#include <iostream.h>
int faktorial (int);
main()
{
for (int i = -1; i < 6; i++)
cout << “ “ << faktorial (i);
cout << endl;
return 0;
}
Keluarannya adalah
0 1 1 2 6 24 120
n!
P ( n,k )=
( n−k ) !
Sebagai contoh,
5! 5! 120
P (5,2 ) = = = =20
( 5−2 ) ! 3! 6
70
terdapat 20 permutasi yang berbeda dari 2 item yang diambil dari sebuah set yang
berisi 5 item.
Program utamanya
#include <iostream.h>
int perm (int, int);
main()
{
for (int i = -1; i < 8; i++) {
for (int j = -1; j <= i+1; j++)
cout << “ “ << perm (i, j);
cout << endl;
}
return 0;
}
Keluarannya adalah
00
010
0110
01220
013660
0 1 4 12 24 24 0
0 1 5 20 60 120 120 0
0 1 6 30 120 360 720 720 0
0 1 7 42 210 840 2520 5040 5040 0
6. Fungsi void
Dalam bahasa pemrograman lainnya, suatu fungsi disebut sebagai suatu prosedur
atau suatu subrutin. Fungsi seperti ini tidak perlu harus mengembalikan
(menghasilkan) suatu nilai (tetapi dapat hanya mengeluarkan judul saja).
Suatu tipe merinci suatu set dari nilai-nilai. Sebagai contoh, tipe short merinci set
bilangan integer dari –32.768 sampai dengan 32.767.
Tipe void merinci set kosong. Akibatnya tidak ada variabel yang dapat
dideklarasikan dengan tipe void. Suatu fungsi void tidak mengembalikan nilai
apapun.
71
Contoh berikut mencetak fungsi hari dalam bentuk literal, masukannya adalah bulan,
hari dan tahun dalam bentuk numerik.
#include <iostream.h>
void cetakHari (int, int, int);
main()
{
int bulan, hari, tahun;
do {
cin >> bulan >> hari >> tahun;
cetakHari (bulan, hari, tahun);
} while (bulan > 0);
}
Keluarannya adalah
5 28 1959
Mei 28, 1959
12 29 1989
Desember 29, 1989
000
72
7. Fungsi-Fungsi Boolean
#include <iostream.h>
#include <ctype.h>
main()
{
for (int k = 0; k < 128; k++)
printKategoriKarakter (k);
}
Contoh di atas menggambar beberapa ide baru. Ide utamanya adalah penggunaan
fungsi Boolean isdigit(), islower(), isupper(), isspace(), iscntrl() dan ispunct().
Sebagai contoh, pemanggilan isspace (k) mentest karakter k untuk menentukan yang
mana yang merupakan karakter spasi. (Terdapat enam buah karakter spasi, yaitu
karakter tab horizontal \t, karakter baris baru \n, karakter tab vertical \v, karakter
form feed \f, karakter carriage return \r dan karakter spasi). Jika k adalah salah satu
dari ke-enam karakter ini, maka fungsi mengembalikan (return) nilai “1” untuk
“benar”; sebaliknya akan mengembalikan nilai “0” untuk “salah”.
Contoh lain, fungsi Boolean digunakan untuk men-test bilangan integer yang
merupakan bilangan prima.
#include <iostream.h>
int isPrime (int);
main()
{
for (int n = 1; n < 50; n++)
if (isPrime (n)) cout << n << “ “;
cout << endl;
}
Keluarannya adalah
2 3 5 7 11 13 17 19 23 31 37 41 43 47
Contoh lain, yaitu tahun kabisat. Tahun kabisat adalah tahun yang habis dibagi oleh
4 dan bulan Februari mempunyai hari sebanyak 29. Selain dari pada itu, tahun
74
dengan kelipatan 100 (contohnya tahun 1800 dan tahun 1900) bukanlah suatu tahun
kabisat, kecuali tahun dengan kelipatan 400 (tahun 2000).
#include <iostream.h>
int isTahunKabisat (int);
{
int n;
do {
cin >> n;
if (isTahunKabisat (n)) cout << n << “ adalah suatu tahun kabisat. \n”;
else cout << n << “ adalah bukan suatu tahun kabisat.\n”;
} while (n > 1);
return 0;
}
Keluarannya adalah
1995
1995 adalah bukan suatu tahun kabisat.
1996
1996 adalah suatu tahun kabisat.
1990
1990 adalah bukan suatu tahun kabisat.
2000
2000 adalah tahun kabisat.
0
0 adalah suatu tahun kabisat.
75
Sampai saat ini, semua parameter yang telah disampaikan terlihat dalam
fungsi-fungsi yang dilalukan dengan nilai. Hal ini berarti bahwa
ekspresi yang digunakan dalam pemanggilan fungsi dievaluasi pertama
kali kemudian nilai yang dihasilkan dinyatakan ke paramater yang
dimaksud dalam fungsi list parameter sebelum fungsi mulai dieksekusi.
Sebagai contoh, dalam pemanggilan PangkatTiga (x), jika x mempunyai
nilai 4, maka nilai 4 adalah yang dilalukan ke variabel lokal n sebelum
fungsi mulai mengeksekusi pernyataan-pernyataannya. Karena nilai 4
hanya dipakai secara lokal dalam fungsi, variabel x tidak dipengaruhi
oleh fungsi. Jadi variabel x adalah sebuah parameter yang “read only”.
Contoh, fungsi “swap” adalah suatu fungsi yang biasa digunakan dalam
pengurutan data.
{
float temp = x;
x = y;
y = temp;
}
#include <iostream.h>
void swap (float&, float&);
Keluarannya adalah
25 –5.252
-5.252 25
Deklarasi fungsi
void swap (float&, float&);
memuat operator referensi & untuk tiap parameter referensi, sekalipun
parameternya sendiri diabaikan.
#include <iostream.h>
void f(int x, int& y) { x = 88; y = 99; }
main()
{
int a = 22, b = 33;
cout << “a = “ << a << “, b = “ << b << endl;
f (a, b);
cout << “a = “ << a << “, b = “ << b << endl;
}
Keluarannya adalah
a = 22, b = 33
a = 22, b = 99
int x; int& x;
Parameter formal x adalah suatu Parameter formal x adalah suatu
variabel lokal. referensi lokal.
Merupakan duplikat dari parameter Merupakan sinonim untuk
aktual. parameter aktual.
Tidak dapat mengubah parameter Dapat mengubah parameter aktual.
aktual.
Parameter aktual dapat berupa Parameter aktual harus berupa
sebuah konstanta, variabel atau sebuah variabel.
ekspresi.
Parameter aktual adalah “read Parameter aktual adalah “read
only”. write”
#include <iostream.h>
void MenghitungLingkaran (double&, double&, double);
main()
{
double r, a, c;
cout << “Masukkan jari-jarinya : “;
cin >> r;
MenghitungLingkaran (a, c, r);
79
Keluarannya adalah
#include <iostream.h>
void f (int, int&, const int&)
main()
{
int a = 22, b = 33, c = 44;
cout << “a = “ << a << “, b = “ << b << “, c = “ << c << endl;
f (a, b, c);
cout << “a = “ << a << “, b = “ << b << “, c = “ << c << endl;
}
Keluarannya adalah
80
a = 22, b = 33, c = 44
x = 66, y = 77, z = 44
a = 22, b = 77, c = 44
main()
{ // awal jangkauan main()
int x = 22;
{ // awal jangkauan dari blok internal
int x = 33;
cout << “Dalam blok di dalam main() : x = “ << x <<
endl;
} // akhir dari jangkauan blok internal
cout << “Dalam main() : x = “ << x << endl;
cout << “Dalam main() : ::x = “ << ::x << endl; // mengakses
x global
f ();
g ();
81
void f ()
{ // awal jangkauan dari f ()
int x = 44;
cout << “Dalam f () : x = “ << x << endl;
} // akhir dari jangkauan f ()
void g ()
{ // awal jangkauan g ()
cout << “Dalam g () : x = “ << x << endl;
} // akhir jangkaun g ()
Keluarannya adalah
11. Overloading
main()
{
82
cout << max (99, 77) << “ “ << max (55, 66, 33) << “ “ << max
(3.4, 7.2) << endl;
}
Keluarannya adalah
99 66 7.2
Untuk mengakhiri program dari dalam suatu fungsi selain fungsi main(),
tidak dapat digunakan pernyataan return. Pernyataan return hanya akan
mengakhiri fungsi yang ada pada saat itu (current) dan mengembalikan
kendali ke fungsi permintaan. Cara lain untuk mengakhiri program dan
dapat digunakan dimanapun serta dalam fungsi apapun adalah dengan
fungsi exit(), yang didefinisikan dalam file header <stdlib.h>.
#include <iostream.h>
#include <stdlib.h>
main()
{
double x;
cin >> x;
cout << kebalikandari (x);
}
84
main()
{
double x = 2.0003;
cout << “p(x, 7) = “ << p (x, 7) << endl;
cout << “p(x, 7, 6) = “ << p (x, 7, 6) << endl;
cout << “p(x, 7, 6, 5) = “ << p (x, 7, 6, 5) << endl;
cout << “p (x, 7, 6, 5, 4) = “ << p (x, 7, 6, 5, 4) << endl;
}
double p (double x, double a0, double a1, double a2, double a3)
{
return a0 + (a1 + (a2 + a3*x)*x)*x;
}
p(x, 7) = 7
p(x, 7, 6) = 19.0018
p(x, 7, 6, 5) = 39.0078
p (x, 7, 6, 5, 4) = 71.0222
V. DERET (ARRAYS)
Jika nama deret adalah a, maka a[0] adalah nama elemen yang berada
pada posisi 0; a[1] adalah nama elemen yang berada pada posisi 1, dan
seterusnya. Secara umum, elemen ke- i berada pada posisi ke i−1.
Sehingga bila sebuah deret mempunyai n elemen, nama-nama mereka
adalah a[0], a[1], a[2], …, a[n-1].
#include <iostream.h>
87
Contoh lain :
#include <iostream.h>
// Program menggunakan konstanta simbolik untuk mendeklarasikan
// dan memroses deret.
main()
{
const int ukuran = 4;
double a[ukuran];
cout << “Masukkan “ << ukuran << “ buah bilangan riel :\n “;
for (int i = 1; i <= ukuran; i++) {
cout << i << “ : “;
cin >> a[i-1];
}
cout << “Berikut keluarannya dalam format berkebalikan :\n”;
for (i = ukuran - 1; i >= 0; i--)
cout << “\ta[“ << i << “] = ” << a[i] << endl;
return 0;
88
tipe nama-deret[ukuran-deret];
double a[ukuran];
Contoh program.
#include<iostream.h>
main()
{
double a[4] = {22.2, 44.4, 66.6, 88.8};
for (int i = 0; i < 4; i++)
cout << “a[“ << i << “] = “ << a[i] << endl;
}
89
a[0] = 22.2
a[1] = 44.4
a[2] = 66.6
a[3] = 88.0
Jika jumlah elemen dalam deret lebih dari pada yang terdapat dalam list,
maka sisa elemennya diberi nilai nol (0).
#include<iostream.h>
main()
{
double a[4] = {22.2, 88.8};
for (int i = 0; i < 4; i++)
cout << “a[“ << i << “] = “ << a[i] << endl;
}
a[0] = 22.2
a[1] = 88.0
a[2] = 0.0
a[3] = 0.0
Jika deklarasi sebuah deret tidak memuat list inisialisasi, maka elemen-
elemen kemungkinan akan berisi nilai yang sembarang.
#include<iostream.h>
main()
{
double a[4];
for (int i = 0; i < 4; i++)
cout << “a[“ << i << “] = “ << a[i] << endl;
}
a[0] = 2.122e-314
a[1] = 2.05154e-289
a[2] = 3.31558e-316
a[3] = 7.48088e-309
Penulisan
double a[]
Bila suatu fungsi melalukan sebuah deret dengan cara ini, sebenarnya
hanya melalukan alamat dari sel memori dimana deret dimulai. Nilainya
91
#include<iostream.h>
const int ukuran = 100;
main()
{
double a[ukuran];
int n;
getArray (a, n);
cout << “Deret mempunyai “ << n << “ elemen. Yaitu :\n”;
printArray (a,n);
}
Keluarannya adalah
92
#include<iostream.h>
void mencari (int& cari, int& lokasi, int a[], int n, int target);
main()
{
int a[] = {55, 22, 99, 66, 44, 88, 33,77}, target, cari, lok;
do {
cout << “Target : “;
cin >> target;
mencari (cari, lok, a, 8, target);
if (cari) cout << target << “ pada a[“ << lok << “].\n”;
else cout << target << “ tidak ditemukan.\n”;
94
Keluarannya adalah
Target : 33
33 pada a[6].
Target : 44
44 pada a[4].
Target : 50
50 tidak ditemukan.
Target : 0
0 tidak ditemukan.
#include<iostream.h>
main ()
{
float a[8] = {55.5, 22.2, 99.9, 66.6, 44.4, 88.8, 33.3, 77.7);
print (a, 8);
sort (a, 8);
print (a, 8);
}
// Bubble sort :
void sort (float a[], const int n)
{
for (int i = n-1; i > 0; i--)
for (int j = 0; j < i; j++)
if (a[j] > a[j+1]) swap (a[j], a[j+1]);
}
Keluarannya adalah
55 22 99 66 44 88 33 77
22 33 44 55 66 77 88 99
void mencari (int& cari, int& lokasi, int a[], int n, int target);
main()
{
int a[] = {22, 33, 44, 55, 66, 77, 88, 99}, target, cari, lok;
do {
cout << “Target : “;
cin >> target;
mencari (cari, lok, a, 8, target);
if (cari) cout << target << “ pada a[“ << lok << “].\n”;
else cout << target << “ tidak ditemukan.\n”;
} while (target != 0);
}
void mencari (int& cari, int& lokasi, int a[], int n, int target)
{
int kiri = 0, kanan = n-1;
cari = 0;
while (!cari && kiri <= kanan) {
lokasi = (kiri + kanan)/2; // titik tengah
97
Keluarannya adalah
Target : 33
33 pada a[1].
Target : 99
44 pada a[7].
Target : 50
50 tidak ditemukan.
Target : 22
22 pada a[0].
Target : 0
0 tidak ditemukan.
7. Menggunakan deret Dengan Tipe-Tipe Enumeration
#include<iostream.h>
main ()
{
enum Hari (minggu, senin, selasa, rabu, kamis, jum’at,
sabtu);
float tinggi[sabtu+1] = {23.5, 24.5, 25.2, 24.8, 23.9, 24.3, 24.1};
for (Hari hari = minggu; hari <= sabtu; hari++)
cout << “Tinggi temperatur untuk hari “ << hari << “
adalah “
<< tinggi[hari] << endl;
}
Keluarannya adalah
#include<iostream.h>
enum Boolean {salah, benar};
void getInfo (Boolean& Menikah, Boolean& PasanganBekerja);
main ()
{
Boolean Menikah, PasanganBekerja;
getInfo (Menikah, PasanganBekerja);
if (Menikah) {
cout << “Anda menikah.\n”;
if (PasanganBekerja) cout << “Pasangan anda bekerja.\
n”;
else cout << “Pasangan anda tidak bekerja.\n”;
} else cout << “Anda tidak menikah.\n”;
}
void getInfo (Boolean& Menikah, Boolean& PasanganBekerja)
{
char jawaban;
cout << “Anda menikah ? “; cin >> jawaban;
Menikah = (jawaban == ‘y’ || jawaban == ‘Y’);
if (Menikah) {
cout << “Apakah pasangan anda bekerja ? “; cin >>
jawaban;
PasanganBekerja = (jawaban == ‘y’ || jawaban ‘Y’);
} else PasanganBekerja = salah;
}
Keluarannya adalah
Anda menikah ? y
Apakah pasangan anda bekerja ? y
Anda menikah.
Pasangan anda bekerja.
Anda menikah ? Y
Apakah pasangan anda bekerja ? T
Anda menikah.
99
Anda menikah ? t
Anda tidak menikah.
8. Deret Multidimensional
double a[32][10][4];
yang merupakan suatu deret berdimensi tiga dengan dimensi 32, 10 dan
4.
Pernyataan
a[25][8][3] = 99.99;
akan menunjuk nilai 99.99 ke elemen yang diidentifikasi oleh indeks
(25,8,3).
#include<iostream.h>
main ()
{
int a[3][5];
baca (a);
print (a);
}
Keluarannya adalah
Baris 2 : 15 25 35 45 55
11 22 33 44 55
10 20 30 40 50
15 25 35 45 55
#include<iostream.h>
const jmlmhs = 3;
const jmlkuis = 5;
typedef int Nilai [jmlmhs] [jmlkuis];
void baca (Nilai);
void printratakuis (const Nilai);
void printratakelas (const Nilai);
main ()
{
Nilai nilai;
cout << “Masukkan nilai “ << jmlkuis << “ kuis untuk setiap
mahasiswa :\n”;
baca (nilai);
cout << “Rata-rata kuis adalah :\n”;
printratakuis (nilai);
cout << “Rata-rata kelas adalah :\n”;
printratakelas (nilai);
}
Keluarannya adalah
Masukkan nilai 5 kuis untuk setiap mahasiswa :
Mahasiswa ke 1 : 8 7 9 8 9
Mahasiswa ke 2 : 9 9 9 9 8
Mahasiswa ke 3 : 5 6 7 8 9
Rata-rata kuis adalah :
Mahasiswa ke 1 : 8.2
Mahasiswa ke 2 : 8.8
Mahasiswa ke 3 : 7
Rata-rata kelas adalah :
Kuis ke 1 : 7.33333
Kuis ke 2 : 7.33333
Kuis ke 3 : 8.33333
Kuis ke 4 : 8.33333
Kuis ke 5 : 8.66667
#include<iostream.h>
int jmlnol (int a[] [4] [3], int n1, int n2, int n3);
main()
{
int a[2] [4] [3] = { { {5, 0, 2}, {0, 0, 9}, {4, 1, 0}, {7, 7, 7}},
{ {3, 0, 0}, {8, 5, 0}, {0, 0, 0}, {2, 0, 9} } };
cout << “Deret ini mempunyai angka nol sebanyak : “
<< jmlnol (a, 2, 4, 3) << “ buah.\n”;
}
int jmlnol (int a[] [4] [3], int n1, int n2, int n3)
{
int hitung = 0;
for (int i = 0; i < n1; i++)
for (int j = 0; j < n2; j++)
for (int k = 0; k < n3; k++)
if (a[i] [j] [k] == 0) ++hitung;
return hitung;
}
Keluarannya adalah
DAFTAR PUSTAKA
1. Zamir, Saba, C++ Primer for Non C Programmers, Mc. Graw Hill, 1995.
2. Shammas, Namir C., C/C++ Mathematical Algorithms for Scientists and
Engineers, Mc. Graw Hill, 1996.
3. Hubbard, John, Programming with C++, Schaum’s Outlines Series, Mc. Graw
Hill, 1996.
4. Savitch, Walter, Problem Solving with C++ - The Object of Programming,
Addison Wesley, Fourth Ed., 2003.
5. Perry, Greg & Marcus, Johnson, Turbo C++ By Example – The Easiest Way to
Learn How to Program!, QUE, 1992.
6. Perry, Paul J., Do-it-Yourself Turbo C++ - The Simplest Way to Program with
Turbo C/C++!, SAMS Publishing, 1992.
105
Syllabus :
References :
1. Zamir, Saba, C++ Primer for Non C Programmers, Mc. Graw Hill, 1995.
2. Shammas, Namir C., C/C++ Mathematical Algorithms for Scientists and
Engineers, Mc. Graw Hill, 1996.
3. Hubbard, John, Programming with C++, Schaum’s Outlines Series, Mc. Graw
Hill, 1996.
106
Syllabus :
References :
1. Kafura, Dennis, Object Oriented Software Design and Construction with C++,
Prentice Hall, 1998.
2. Coad, P. & Nicola, J., Object Oriented Programming, Prentice Hall, 1993
3. Zamir, Saba, C++ Primer for Non C Programmers, Mc. Graw Hill, 1995.
107
Syllabus :
References :
1. Preiss, Bruno R., Data Structures and Algorithms with Object Oriented Design
Patterns in C++, John Wiley & Sons, Inc., 1999.
2. Heileman, Gregory L., Data Structures, Algorithms, and Object Oriented
Programming, Mc. Graw Hill, 1996.