BAB 1
PENGENALAN PROGRAM C++
1.1. Perkembangan C++
Brian W. Kernighan dan Denis M. Ritchie dari perusahaan Bell Lab.
menciptakan bahasa C yang diterapkan pada sistem operasi Unix. C merupakan
bahasa tingkat menengah (Middle Level Language).
Kemudian pada tahun 1983, Bjarne Stroustrup dari Bell Lab. AT&T
memperkenalkan bahasa a better C, kemudian bahasa tersebut diberi nama
oleh Rick Mascitti dengan nama C++. Pengertian ++ merupakan simbol operator
peningkatan dari bahasa sebelumnya yaitu C. C++ lebih berorientasi objek
dibanding dengan C yang masih terstruktur. Namun Bahasa C++ masih
merupakan bahasa hybrid, yang berarti peralihan dari bahasa terstruktur menjadi
bahasa pemrograman berorientasi obyek (PBO) atau yang sering disebut dengan
OOP (Object Oriented Programming).
C++ memiliki sifat powerfull and flexible language, portable language, popular
language, dan modular programming. Didalam perkembanganya C++ memiliki
beberapa jenis untuk dioperasikan pada processor dan sistem operasinya,
seperti Microsoft C/C++, Borland Turbo C/C++, Lattice C.
C++ juga merupakan bahasa penerjemah yang seluruh instruksinya
diterjemahkan
sekaligus,
kemudian
dilakukan
proses
kompilasi
untuk
Using
Editor
Compile
Source Code
Linker
Object File
Executable
File
ASB/AK
C++ Programming
NAMA
gaji pegawai
gaji_pegawai
6siswa
siswa6
Titik!
b. Tipe Data
Tipe data dibagi dua, yaitu :
Tipe data dasar, dan
Tipe bentukan yang merupakan bentukan dari tipe data dasar
1) Tipe Data Dasar
Macam-macam tipe data dasar di dalam C++ dapat dilihat pada tabel di
bawah ini :
Tabel 1.1 Ukuran berbagai tipe data dasar
Tipe Data
char
int
long
Ukuran
Memori
1 byte
2 byte
4 byte
Rentang Nilai
hingga
+2.147.438.647
ASB/AK
C++ Programming
float
double
long double
4 byte
8 byte
10 byte
Keterangan :
1. char, merupakan tipe data dasar yang dipakai untuk mendeklarasikan
peubah bilangan bulat, karakter atau string.
2. int, merupakan tipe data dasar untuk menentukan jenis peubah
bilangan bulat.
3. long, merupakan tipe data dasar untuk menentukan jenis peubah
bilangan bulat.
4. float, merupakan tipe data dasar untuk menentukan jenis peubah
bilangan pecahan.
5. double, merupakan tipe data dasar untuk menentukan jenis peubah
bilangan pecahan.
6. long double, merupakan tipe data dasar untuk menentukan jenis
peubah bilangan pecahan.
2) Tipe Bentukan
Merupakan bentukan dari tipe data dasar dengan nama lain. Misal
didefinisikan sebuah peubah x bertipe int, maka peubah x tersebut dapat
menjadi sebuah tipe data baru untuk mendefinisikan nama peubah lain.
Dalam C++ untuk membentuk sebuah tipe bentukan dibutuhkan kata
kunci typedef dengan bentuk sebagai berikut :
typedef int x;
x saya;
ASB/AK
C++ Programming
else
enum
extern
float
for
friend
goto
if
lline
int
long
new
operator
private
public
protected
register
return
short
signed
sizeof
struct
switch
static
template
this
typedef
union
unsigned
virtual
void
volatile
while
tampilan
pemrograman
C++
menyediakan
fasilitas
IDE
User
Interface)
Penulisan pemrograman C++ bersifat case sensitive, maksudnya adalah
penulisan huruf besar dan huruf kecil dianggap berbeda. Contoh :
nama_siswa tidak sama dengan Nama_Siswa.
b. Struktur Penulisan pada Program
Penulisan program C++ dapat dilihat di bawah ini :
void main( )
{
statemen-statement
}
fungsi_fungsi_lain( )
{
statement-statement
}
Fungsi utama
ASB/AK
C++ Programming
yang
akan
menginstruksikan
kepada
kompiler
untuk
ASB/AK
C++ Programming
void main( ) , merupakan fungsi main( ) yang merupakan awal dan akhir
TUGAS 1
1. Apakah hasil tampilan dari program dibawah ini
ASB/AK
C++ Programming
/* menampilkan nilai
Hasil :
BAB 2
OPERATOR
ASB/AK
C++ Programming
2.1. Operator
Operator merupakan simbol yang biasa dilibatkan dalam program untuk
melakukan sesuatu operasi atau manipulasi. Misalnya untuk menjumlahkan dua
buah nilai, memberikan nilai ke suatu variabel atau membandingkan kesamaan
dua buah nilai. Bahasa C++ mempunyai beberapa operator yaiitu : Operator
Aritmatika, Operator Penugasan, Operator Penaikan dan Penurunan, Operator
Pemendekan, Operator Relasi dan Logik, dan Operator Bitwise
Keterangan
Contoh
Perkalian
2*3
Pembagian
7/2
Sisa
pembagian
7%2
Penjumlahan
5+4
Pengurangan
54
Penjelasan
: <<d<<endl;
: <<e<<endl;
}
Hasil :
ASB/AK
C++ Programming
b. Operator Penugasan
Operator penugasan yang berupa simbol sama dengan ( = ) berguna
untuk memberikan suatu nilai ke suatu variabel. Operator ini dapat
dikenakan sebagai ungkapan ataupun berdiri sebagai pernyataan :
1) Penugasan sederhana
Beberapa pernyataan penugasan telah diperkenalkan, sebagai contoh :
a = 1;
a = 2+b;
Pada contoh pertama, variabel a diisi dengan nilai 1. Pada contoh
kedua, variabel a diisi dengan ungkapan 2 + b.
2) Penugasan dalam ungkapan
ASB/AK
C++ Programming
10
Keterangan
++
Operator penaikan
--
Operator penurunan
Penaikan di depan
Penaikan di belakang
penaikan/
penurunan
di
depan
variabel
bila
hanya
dua
operand
akan
mempunyai
perbedaan.
Pada
ASB/AK
C++ Programming
11
Hasil :
C++ Programming
12
clrscr( ) ;
x = 5;
y = 10 + x++;
cout<< x = <<x<<endl;
cout<< y = <<y<<endl;
}
Hasil :
menjadi x += 2;
y = y * 4;
menjadi y *= 4;
Contoh
Keterangan
+=
x+=2
x=x+2
-=
x -=2
x = x 2
*=
x *=2
x=x*2
/=
x /= 2
x=x/2
%=
x %= 2
x = x %2
C++ Programming
13
clrscr( ) ;
x = 2;
cout<< Nilai awal x = <<x<<endl;
x+=8;
cout<< Nilai x menjadi = <<x<<endl;
x/=2;
cout<< Nilai x menjadi = <<x<<endl;
}
Hasil :
Keterangan
==
!=
>
Lebih dari
<
Kurang dari
>=
<=
&&
Dan (AND)
||
Atau (OR)
Tidak (NOT)
C++ Programming
14
#include<conio.h>
void main( )
{
int a, b, c, d, e, f;
clrscr( ) ;
a=100, b=200, z=150;
c=a==b;
d=a!=b;
e=(z>=a) && (z<=b);
cout<< a sama dengan b : <<c<<endl;
cout<< a tidak sama dengan b : <<d<<endl;
cout<< z>=a AND z<=b : <<e<<endl;
}
Hasil :
Keterangan
NOT (komplemen)
<<
>>
&
Dan (AND)
XOR
Atau (OR)
C++ Programming
15
int z;
clrscr( ) ;
z=1
cout<<Nilai awal Z adalah : <<z<<endl;
z=z<<2;
cout<<Nilai Z geser 2 bit kekiri adalah : <<z<<endl;
z=z>>1;
cout<<Nilai Z geser 1 bit kekanan adalah : <<z<<endl;
}
Hasil :
TUGAS 2
ASB/AK
C++ Programming
16
BAB 3
ASB/AK
C++ Programming
17
Keterangan
Karakter ber-ASCII nol (karakter null)
Karakter bel
Karakter backspace
Karakter formfeed (ganti halaman)
Karakter newline (pindah baris)
Karakter carriage return (ke awal baris) tanpa linefeed
Karakter tab horizontal
Karakter tab vertikal
Karakter \
Karakter
Karakter
Karakter ?
Karakter yang nilainya oktalnya ooo (3 digit oktal)
Karakter yang nilai heksadesimalnya adalah hh (dua digit heksadesimal)
3.2. Manipulator
Manipulator umumnya digunakan untuk mengatur format tampilan data.
Misalnya untuk mengatur agar suatu nilai ditampilkan dengan lebar 10 karakter
rata kanan, dan sebagainya.
Tabel 3.2 Manipulator
Manipulator
endl
Menyisipkan
Keterangan
newline dan mengirimkan
isi
ke
ASB/AK
C++ Programming
ends
flush
dec
hex
oct
setbase(int n)
setw(int n)
setfill(int c)
setprecicion(int n)
setiosflags(long f )
Resetiosflags(long
f)
18
penyangga
Menyisipkan karakter null
Mengirimkan isi penyangga keluaran ke piranti
keluaran
Mengkonversi ke bilangan basis sepuluh
Mengkonversi ke bilangan basis 16 (oktal)
Mengkonversi ke bilangan basis 8 (oktal)
Mengkonversi ke bilangan basis n (n=8, 10 atau 16)
Mengatur lebar field untuk suatu nilai sebesar n
karakter
Menyetel karakter pemenuh berupa c
Menyetel presisi bilangan pecahan sebesar n digit
Menyetel format yang ditentukan oleh f.f adalah tanda
format pada tabel 3.3
Menghapus format yang ditentukan oleh f.f adalah
tanda format pada tabel 3.3
a. endl
Manipulator endl digunakan untuk menyisipkan karakter newline.
Dengan kata lain manipulator ini identik dengan \n. Namun pada bahasa
C++ lebih banyak digunakan manipulator ini dibanding manipulator C yang
harus menggunakan karakter khusus \n.
b. setw()
Manipulator setw() bermanfaat untuk mengatur lebar dari suatu tampilan
data.
Simpan dengan nama file : lat31.cpp
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
void main( )
{
int
nilai1 = 1210,
nilai2 = 250,
nilai3 = 23;
clsrcr( ) ;
cout<<Nilai 1 = <<setw(4)<<nilai1<<endl;
cout<<Nilai 2 = <<setw(4)<<nilai2<<endl;
cout<<Nilai 3 = <<setw(4)<<nilai3<<endl;
}
Hasil :
ASB/AK
C++ Programming
19
Hasil :
c. setfill()
Manipulator setfill() berguna untuk mengatur karakter yang dipakai
memenuhi bagian field yang ditentukan setw(), yang tidak dipakai untuk
menampilkan data.
Simpan dengan nama file : lat33.cpp
//pemakaian efek setfill( )
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
void main( )
{
float harga=123.25;
clrcsr( ) ;
cout<<setfill(*)<<setw(8)<<harga<<endl;
cout<<setw(8)<<harga<<endl;
}
Hasil :
ASB/AK
C++ Programming
20
d. ends
Manipulator ends berfungsi untuk menambahkan karakter null (ASCII
nol) ke deretan suatu karakter. Hal seperti ini kadang-kadang diperlukan,
misalnya jika ingin mengirim sejumlah karakter ke file disk dan
mengakhirinya dengan karakter null.
Contoh :
cout<<a<<b<<c<<ends;
Keterangan
Tanda format
ios::left
ios::right
ios::scientific
ios::fixed
ios::dec
ios::oct
ios::hex
ios::uppercase
ios::showbase
ios::showpoint
ios::showpos
pecahan
Untuk menampilkan tanda + pada bilangan positif
C++ Programming
21
int harga1=475000;
int harga2= 35000;
int harga3= 7500;
clrscr( ) ;
cout<<setw(3)<<Rp.<<setiosflags(ios::left)<<setw(7) <<harga1<<endl;
cout<<setw(3)<<Rp.<<setiosflags(ios::left)<<setw(7) <<harga2<<endl;
cout<<setw(3)<<Rp.<<setiosflags(ios::left)<<setw(7) <<harga3<<endl;
}
Hasil :
R
R
R
p
p
p
setw(7)
.
.
.
4
3
7
7
5
5
5
0
0
0
0
0
0
0
Hasil :
setw(7)
0
ASB/AK
C++ Programming
R
R
p
p
22
.
.
5
7
0
5
0
0
0
0
Hasil :
3.3. cin
C++ menyediakan suatu obyek bernama cin (baca: C in) yang bermanfaat
untuk membaca data dari standar input (keyboard).
Bentuk pernyataan cin untuk membaca data dari keyboard dan meletakkan
ke sebuah variabel. Bentuk pemakaian cin adalah :
cin >> var ;
C++ Programming
23
#include<conio.h>
void main( )
{
const float harga=250000;
int jumlah;
float total;
clrscr( ) ;
cout<<Masukkan jumlah barang : ;cin>>jumlah;
total=jumlah*harga;
cout<<Total harga = Rp. <<total<<endl;
}
Hasil :
C++ Programming
24
if(kode==C)
{
strcpy(nama,C);
harga=475000;
total=jumlah*harga;
}
else
exit(0);
cout<<"============================================="<<endl;
cout<<"Kode"<<setw(10)<<"Nama Brg"<<setw(10)<<"Qty"
<<setw(8)<<"Harga"<<setw(11)<<"Jumlah"<<endl;
cout<<"============================================="<<endl;
cout<<setiosflags(ios::left)<<setw(6)<<kode
<<setiosflags(ios::left)<<setw(13)<<nama
<<setiosflags(ios::right)<<setw(4)<<jumlah
<<setiosflags(ios::right)<<setw(10)<<harga
<<setiosflags(ios::right)<<setw(10)<<total<<endl;
cout<<"============================================="<<endl;
}
Hasil :
ASB/AK
C++ Programming
25
Hasil :
TUGAS 3
Buatlah Program seperti tampilan dibawah ini.
Simpan dengan nama : tugas31.cpp
PT. MARI MENGHITUNG
------------------Masukkan Jumlah Barang : 20
Masukkan Harga Barang : Rp. 200000
----------------------Harga yang harus dibayar : Rp. 4000000
Tekan sembarang tombol untk mendapatkan discount !
Masukkan Nilai Discount : 10
Harga Bayar
: Rp. 4000000
Discount
: Rp. 400000
Total Bayar
: Rp. 3600000
ASB/AK
C++ Programming
26
Ketentuan soal :
a. Gunakan cin,getch(),setw(),setiosflags(ios::fixed) dan (ios::right)
b. Gunakan identifier : jmlbrg, hrgbrg, bayar, nildisc, disc, total
c. Bayar=jmlbrg*hrgbrg, disc=(nildisc/100)*bayar, total=bayar-disc
Program :
BAB 4
PERNYATAAN (STATEMENT)
Seperti telah dijelaskan sebelumnya bahwa ungkapan/ pernyataan atau
yang disebut statement
melakukan sesuatu. Di dalam bahasa C++ terdapat banyak jenis statement, yaitu
:
4.1 . Statement Kosong
ASB/AK
C++ Programming
27
Hasil dari program di atas adalah hanya menampilkan hasil blank di layar.
Selain menggunakan tanda titik koma saja, untuk menghasilkan blank di layar
kita dapat menggunakan tanda kutip ganda, contoh :
cout<< <<endl;
Statement
tersebut
memberikan
instruksi
kepada
komputer
untuk
C++ Programming
28
Hasil :
Hasil :
C++ Programming
29
#include<iostream.h>
#include<conio.h>
void main( )
{
float nilai;
char indeks;
clrscr( ) ;
cout<<Nilai ujian ? ;cin>>nilai;
if(nilai > 80)
indeks = A;
else
if(nilai > 69)
indeks = B;
else
if(nilai > 59)
indeks = C;
else
if(nilai > 49)
indeks = D;
else
//nilai 49
indeks = E;
cout<<Indeks = <<indeks<<endl;
}
Hasil :
IF Tersarang
If tersarang (nested if) merupakan bentuk dari suatu statement if yang
C++ Programming
30
clrscr();
if(A>B)
if(A>C)
cout<<"Bilangan terbesar adalah "<<A<<endl;
else
//(C >= A)
cout<<"Bilangan terbesar adalah "<<C<<endl;
else
//(B >= A)
if(B>C)
cout<<"Bilangan terbesar adalah "<<B<<endl;
else
//(C >= B)
cout<<"Bilangan terbesar adalah "<<C<<endl;
}
Hasil :
Hasil :
C++ Programming
31
#include<iostream.h>
#include<conio.h>
void main()
{
int rating;
clrscr();
cout<<"Rating ? ";cin>>rating;
if(rating >= 12)
if(rating < 18)
{
cout<<"Remaja"<<endl;
cout<<"Bimbingan orang tua"<<endl;
}
else
//(usia >= 18)
cout<<"Dewasa"<<endl;
else //(usia < 12)
cout<<"Semua umur"<<endl;
}
Hasil :
switch
salah
satu
adalah
peryataan
pernyataan
dari
yang
digunakan
beberapa
untuk
kemungkinan
C++ Programming
32
pernyataan_2;
break;
....
default
/* optional */
pernyataan_x; /* optional * /
}
C++ Programming
33
Hasil :
4.4.
Pengulangan
Statement kendali pengulangan merupakan sebuah statement dimana
<inisialisasi>
ASB/AK
C++ Programming
34
awal pengulangan
badan pengulangan
akhir pengulangan
<terminasi>
Di dalam bahasa C++ ada tiga jenis struktur pengulangan, yaitu : for, while dan
do-while
a. Pengulangan FOR
Pengulangan
for
adalah
struktur
pengulangan
tanpa
kondisi
Keterangan:
Ungkapan1 adalah nilai pencacah awal
Ungkapan2 adalah nilai pencacah akhir
Ungkapan3 adalah operator penaikan/penurunan untuk menentukan
banyaknya pengulangan
Pencacah haruslah dari tipe data yang memiliki predecessor atau
successor, yaitu integer atau karakter. Pada dasarnya for terdiri dari dua
jenis, yaitu for menaik dan for menurun.
For menaik merupakan bentuk pengulangan dimana nilai pencacah
awal harus lebih kecil dari nilai pencacah akhir dengan ungkapan3 adalah
operator penaikan, sedangkan for menurun adalah sebaliknya dengan
ungkapan3 adalah operator penurunan.
Simpan dengan nama file : lat47.cpp :
//mencetak huruf abjad dari A s/d Z
#include<iostream.h>
#include<conio.h>
void main( )
{
char abjad;
clrscr( ) ;
nilai awal
C++ Programming
35
nilai akhir
Hasil :
Hasil :
ASB/AK
C++ Programming
36
Hasil :
ASB/AK
C++ Programming
37
Hasil :
c. Pengulangan While
Pengulangan while termasuk ke dalam pengulangan dengan kondisi
(conditional looping), merupakan salah satu bentuk pengulangan yang
berguna untuk memproses suatu pernyataan atau beberapa pernyataan
beberapa kali.
Bentuk pernyataan ini :
While (ungkapan)
{
pernyataan1;
pernyataan2;
...
pernyataanN;
}
ASB/AK
C++ Programming
38
Aksi atau runtunan akan dilaksanakn selama kondisi bernilai true. Jika
kondisi bernilai false badan pengulangan tidak akan dilaksanakan, yang
berarti pengulangan selesai. Agar kondisi suatu saat bernilai false, maka di
dalam badan pengulangan harus ada instruksi yang mengubah nilai peubah
kondisi.
Simpan dengan nama file : lat49b.cpp :
#include<iostream.h>
#include<conio.h>
void main( )
{
int k;
clrscr( ) ;
//variabel pencacah
k = 0;
//inisialisasi
while(k < 5)
{
cout<<Welcome to Information Technology<<endl;
k++;
}
//peubah kondisi yang menyebabkan kondisi bernilai false
}
Hasil :
Keterangan :
C++ Programming
39
Hasil :
C++ Programming
40
Hasil :
Hasil :
d. Pengulangan Do-While
ASB/AK
C++ Programming
41
Hasil :
C++ Programming
42
cout<< ===============================<<endl;
cout<<Celcius<<setw(12)<<Fahreinhat<<endl;
cout<< ===============================<<endl;
Celcius=0;
do{
Fahreinhat=1.8*Celcius+32;
cout<<Celcius<<setw(12)<<Fahreinhat<<endl;
Celcius+=10;
} while(Celcius<100);
cout<<================================<<endl;
}
Hasil :
4.5.
Pernyataan Break
Pernyataan
break
telah
diperkenalkan
pada
pernyataan
switch,
kegunaannya yaitu untuk keluar dari switch. Selain digunakan pada pernyataan
switch, break juga banyak digunakan pada pernyataan pengulangan, seperti
for, while dan do-while yang gunanya untuk memaksa keluar dari pernyataanpernyataan itu.
Karena sifatnya yang tidak berdiri sendiri, pernyataan ini tidak bisa dikatakan
sebagai inti struktur inti pengulangan. Pernyataan break harus menyatu dengan
pernyataan-pernyataan perulangan agar dapat menghasilkan efek.
Simpan dengan nama file : lat49h.cpp :
//melihat efek break pada struktur while
#include<iostream.h>
#include<conio.h>
void main( )
{
int bil = 1;
clrscr( ) ;
while (bil <= 10)
{
if (bil > 5)
break;
cout<<bil<< ;
ASB/AK
C++ Programming
bil++;
}
43
Hasil :
Hasil :
ASB/AK
C++ Programming
44
berikutnya pada pernyataan oleh dua kondisi. Efek dari perintah ini pada for,
while dan do-while.
Simpan dengan nama file : lat49j.cpp :
//hitung jumlah nilai jika hanya jika ganjil
#include<iostream.h>
#include<conio.h>
void main()
{
int k,N,x,jumlah;
clrscr();
cout<<"Jumlah data : ";cin>>N;
clrscr();
jumlah=0;
for(k=0;k<N;k++)
{
cout<<"Nilai "<<(k+1)<<" : ";cin>>x;
if(x%2==0)
continue;
jumlah=jumlah+x;
}
clrscr();
cout<<"Jumlah = "<<jumlah<<endl;
}
Hasil :
Program hanya menjumlahkan jika hanya jika nilai x yang dimasukkan adalah
ganjil, bila nilai x yang dimasukkan adalah genap, maka program akan
mengulang kembali ke iterasi for dan nilai genap tersebut tidak akan
ditampung sampai dimasukkan kembali nilai x yang ganjil.
Di bawah ini diberikan contoh efek continue pada struktur while untuk
menjumlahkan jika hanya nilai genap saja.
Simpan dengan nama file : lat49k.cpp :
ASB/AK
C++ Programming
45
Hasil :
C++ Programming
46
goto selesai;
cout<<"Hai saya kok tidak disapa"<<endl;
selesai:
cout<<"Selesai...."<<endl;
}
Hasil :
Hasil :
ASB/AK
C++ Programming
47
C++ Programming
48
continue;
case 3 :
cout<<"Anda memilih menu Menambah Data"<<endl;
cout<<"Tekan Enter untuk kembali ke MENU";
getch();
clrscr();
continue;
case 4 :
cout<<"Anda memilih menu Mencari data"<<endl;
cout<<"Tekan Enter untuk kembali ke MENU"<<endl;
getch();
clrscr();
continue;
case 5 :
cout<<"Maaf data ini sangat rahasia....!!!"<<endl;
goto selesai;
}
}
selesai:
cout<<"Anda tidak diperkenankan membacanya...terima kasih"
<<endl;
}
Hasil :
C++ Programming
49
cout<<"Positif"<<endl;
else
exit(0);
}
Hasil :
TUGAS 4
Buatlah Program seperti tampilan dibawah ini.
Simpan dengan nama : tugas41.cpp
Pilihan
---------------[1] Penjumlahan
[2] Pengurangan
[3] Keluar
---------------Pilihan [1..3] :
Ketentuan Soal
Jika pilihan 1 maka :
Penjumlahan
---------------------Masukkan Nilai A = 40
Masukkan Nilai B = 30
Hasil A + B
= 70
Coba Lagi [Y/T] :
C++ Programming
50
Program :
BAB 5
PROSEDUR
5.1. Pengantar Prosedur
Prosedur merupakan suatu teknik pemrograman modular, yang berarti
sebuah program dipecah menjadi sub-sub program (modul) yang lebih kecil.
Tujuan pembuatan prosedur adalah :
ASB/AK
C++ Programming
51
void nama_prosedur( )
{
Hasil :
C++ Programming
52
void main( )
// Program utama
{
clrscr( ) ;
RataRata( ) ;
//panggil prototype prosedur rata-rata
}
void RataRata( )
// program prosedur rata-rata
{
int k,N;
float x,jumlah,rata2;
cout<<"Jumlah data : ";cin>>N;
jumlah=0;
for(k=1;k<=N;k++)
{
cout<<"X"<<k<< " = ";
cin >>x;
jumlah=jumlah+x;
}
rata2=jumlah/N;
cout<<"Nilai rata-rata = "<<rata2<<endl;
}
Hasil :
C++ Programming
53
#include<iostream.h>
#include<conio.h>
void angka();
void main()
{
int x=22;
float y=3.75;
clrscr();
//prototype prosedur
}
void angka()
{
int x = 55;
float y = 5.63;
cout<<"Pada prosedur angka x = "<<x
<<" y = "<<y<<endl;
}
Hasil :
bernama sama
pada
C++ Programming
54
{
clrscr();
cout<<"Pada program utama nilai x = "<<x
<<" nilai y = "<<y<<endl;
cout<<"Begitu juga pada prosedur "<<endl;
angka();
}
void angka( )
{
cout<<"Nilai x = "<<x
<<" nilai y = "<<y<<endl;
}
Hasil :
C++ Programming
55
maks=nilai[1];
for(k=2;k<=N;k++)
{
if(nilai[k]>maks)
maks=nilai[k];
}
cout<<"Nilai maksimum = "<<maks<<endl;
}
void CariMin()
// prosedur cari nilai minimum
{
min=nilai[1];
for(k=2;k<=N;k++)
{
if(nilai[k]<min)
min=nilai[k];
}
cout<<"Nilai minimum = "<<min<<endl;
}
Hasil :
variabel
tetap
hanya
dapat
diakses
pada
prosedur
yang
mendefinisikannya.
Jika variabel global dijadikan sebagai variabel statis, variabel ini dapat
diakses oleh semua file yang didefinsikan pada file yang sama dengan
ASB/AK
C++ Programming
56
Hasil :
C++ Programming
57
dengan nama yang sama dengan variabel di luar prosedur yang bersangkutan).
Sebagai contoh ditunjukkan oleh program di bawah ini :
Simpan dengan nama file : lat56.cpp :
//melihat efek penggunaan operator resolusi lingkup
#include<iostream.h>
#include<conio.h>
int x=20;
//variabel eksternal
void main()
{
float x;
clrscr();
x=5.678;
//variabel lokal yang diberi nilai
cout<<x<<" "<<::x<<endl;
::x=73;
cout<<x<<" "<<::x<<endl;
}
Hasil :
C++ Programming
58
{
clrscr();
tulis_cplus(10);
}
void tulis_cplus(int jumlah)
{
for(int i=1;i<=jumlah;i++)
{
cout<<setiosflags(ios::right)<<setw(2)<<i<< ' ';
cout<<"C++"<<endl;
}
cout<<"Selesai";
}
Hasil :
sebab
dalam
prototipe
telah
disebutkan,
bahwa
prosedur
C++
pemrogram
dapat
mengatur
agar
argumen
prosedur
tulis_cplus( ) yang bernama jumlah memiliki nilai bawaan misalnya sama dengan
10. Setelah penyetelan nilai bawaan diberikan, pemrogram dapat memanggil
prosedur tersebut untuk menampilkan sebuah tulisan C++ dengan cara sebagai
berikut :
tulis_cplus();
ASB/AK
C++ Programming
59
Hasil :
}
void ulang(char kar,int jumlah)
{
for(int i=1;i<=jumlah;i++)
cout<<kar;
cout<<endl;
}
//ganti baris
Hasil :
5.6. Referensi
Pada C++ referensi digunakan untuk memberikan nama alias dari variabel.
Bentuk pendeklarasiannya :
ASB/AK
C++ Programming
60
//deklarasi referensi
i=10;
cout<<"i = "<<i<<endl;
cout<<"r = "<<r<<endl;
r=55;
cout<<"i = "<<i<<endl;
cout<<"r = "<<r<<endl;
}
Hasil :
Terlihat bahwa nilai i dan r adalah sama, hal ini disebabkan karena kata kunci
&, yang membuat nilai yang diisikan kepada variabel i dikirim ke variabel r.
5.7. Parameter
Pada hakekatnya, prosedur dengan referensi merupakan suatu teknik
pemrograman modular dimana terjadi pertukaran informasi antar modul dan titik
dimana
ia
dipanggil.
Penggunaan
parameter
menawarkan
mekanisme
ASB/AK
C++ Programming
61
pertukaran informasi. Tiap item data ditransfer antara parameter aktual (nyata)
dan parameter formal yang bersesuaian.
Parameter aktual adalah parameter yang disertakan pada waktu pemanggilan
dengan kata lain ia dikirimkan dari modul utama ke modul pada prosedur lain,
sedangkan parameter formal adalah parameter yang dideklarasikan di dalam
bagian header modul prosedur itu sendiri.
Teknik pemrograman modular dengan referensi diakses dengan cara
memanggil namanya dari program pemanggil (prosedur utama) atau modul lain
disertai parameter aktualnya.
a. Parameter Masukan (Pengiriman parameter secara nilai)
Bila parameter dikirim secara nilai (by value), parameter formal di
prosedur akan berisi nilai yang dikirimkan oleh parameter aktual yang
kemudian bersifat lokal di prosedur tersebut. Karena nilai parameter aktual
diisikan ke dalam parameter formal, maka nilai parameter formal di prosedur
tersebut berubah, dan nilai parameter aktual tidak berubah (tetap).
Pengiriman secara nilai ini merupakan pengiriman searah, yaitu dari
parameter aktual ke parameter formal, yang tidak dikirimkan balik dari
parameter formal ke parameter aktual. Karena perubahan nilai parameter di
dalam badan prosedur tidak mengubah nilai parameter aktual, maka nama
parameter
aktual
boleh
berbeda
dengan
parameter
formal
yang
bersesuaian.
Simpan dengan nama file : lat59b.cpp :
//prosedur dengan parameter by value
#include<iostream.h>
#include<conio.h>
void hitung(int x, int y);
void main( )
{
int a,b;
clrscr();
a=20;b=12;
hitung(a,b);
}
void hitung(int x, int y)
{
int z;
z=x+y;
cout<<"Jumlah "<<x<<"+"<<y<<" = "<<z<<endl;
}
Hasil :
ASB/AK
C++ Programming
62
Penjelasan:
Prosedur dimulai dengan deklarasi judul:
void hitung(int x, int y);
Tipe parameter
Parameter formal
Parameter formal
Tipe parameter
Variabel lokal yang hanya digunakan pada prosedur dan tidak termasuk
sebagai parameter formal (parameter nilai), harus didefinisikan sendiri
sebagai berikut:
int z;
C++ Programming
63
hitung(a,b,c);
cout<<"a = "<<a<<" b = "<<b<<" c = "<<c<<endl;
}
void hitung(int x, int y, int z)
{
z=x+y;
cout<<"x = "<<x<<" y = "<<y<<" z = "<<z<<endl;
}
Hasil :
hitung(a,b,c);
C++ Programming
64
dalam hal ini meskipun nilai parameter aktual di dalam badan prosedur
diubah, nilai parameter aktual tersebut tidak berubah di titik pemanggilan.
Parameter masukan/keluaran dideklarasikan di dalam argumen prosedur
dengan menggunakan kata kunci &.
Simpan dengan nama file : lat59d.cpp :
//program prosedur menggunakan parameter by reference
#include<iostream.h>
#include<conio.h>
void hitung(int &x, int &y, int &z);
void main()
{
clrscr();
int a,b,c;
a=20;b=12;c=0;
hitung(a,b,c);
cout<<"a = "<<a<<" b = "<<b<<" c = "<<c<<endl;
}
void hitung(int &x, int &y, int &z)
{
z=x+y;
cout<<"x = "<<x<<" y = "<<y<<" z = "<<z<<endl;
}
Hasil :
hitung(a,b,c);
C++ Programming
65
Hasil :
ditukarkan
dari
dalam
prosedur
tukar( ) .
Pada
saat
pemanggilan :
tukar(a,b);
C++ Programming
66
Hasil :
faktorial( N, F );
ASB/AK
C++ Programming
67
TUGAS 5
Buatlah Program seperti tampilan dibawah ini.
Simpan dengan nama : tugas51.cpp
Pilihan
---------------[1] Perkalian
[2] Pembagian
[3] Keluar
---------------Pilihan [1..3] :
Ketentuan Soal
Jika pilihan 1 maka :
Perkalian
---------------------Masukkan Nilai A = 100
Masukkan Nilai B = 20
Hasil A x B
= 2000
Coba Lagi [Y/T] :
ASB/AK
C++ Programming
68
Program :
BAB 6
FUNGSI
6.1. Pengantar Fungsi
Fungsi adalah modul program yang memberikan/mengembalikan (return)
sebuah nilai dari tipe tertentu (tipe dasar atau tipe bentukan). Definisi fungsi di
dalam program bersesuaian dengan definisi fungsi di dalam matematika. Misal
di dalam matematika kita mengenal cara penulisan fungsi seperti pada contoh
berikut:
1. f (x) = 2x2 + 5x 8
2. H(x, y) = 3x y + xy
Pada contoh kedua di atas, f dan H adalah nama fungsi, sedangkan x dan y
adalah parameter fungsi yang bersangkutan. Nilai yang diberikan oleh fungsi
bergantung pada masukan parameter. Sebagai misal:
ASB/AK
C++ Programming
69
Nilai 10 dan 3 pada kedua contoh di atas adalah nilai yang diberikan (return
value) oleh masing-masing fungsi f dan fungsi H.
Sebagaimana halnya dengan prosedur, fungsi diakses dengan memanggil
namanya. Selain itu, fungsi juga dapat mengandung daftar parameter formal.
Parameter pada fungsi selalu merupakan parameter masukan. Jenis parameter
masukan pada fungsi disebabkan oleh kenyataan bahwa parameter pada
fungsi merupakan masukan yang digunakan oleh fungsi tersebut untuk
menghasilkan nilai.
ASB/AK
C++ Programming
70
Nama fugsi
Argumen
long kuadrat(long I)
{
return (I * I);
}
Tipe argumen
Menentukan nilai
balik
//prototype fungsi
void main()
Parameter masukan (by value)
{
clrscr();
for(int k=1;k<=10;k++)
cout<<setw(2)<<k
<<setw(4)<<kuadrat(k)<<endl;
}
int kuadrat(int I)
{
return(I * I);
}
Hasil :
ASB/AK
C++ Programming
71
//prototype fungsi
{
clrscr();
for(int k=1;k<=10;k++)
cout<<setw(2)<<k
<<setw(2)<<" f "<<"("<<k<<")= "<<f(k)<<endl;
}
int f(int x)
{
return(2*x*x+5*x-8);
}
Hasil :
ASB/AK
C++ Programming
72
cout<<"Nilai x : ";cin>>x;
cout<<"Nilai y : ";cin>>y;
cout<<"Nilai z : ";cin>>z;
cout<<"Bilangan terbesar = "<<maks3(x,y,z)<<endl;
}
int maks3(int a, int b, int c)
{
int temp=a;
if (b>temp)
Hasil :
temp=b;
if (c>temp)
temp=c;
return(temp);
}
C++ Programming
73
Hasil :
TUGAS 6
Buatlah Program seperti tampilan dibawah ini.
Simpan dengan nama : tugas61.cpp
Program untuk mencari bilangan terbesar dan terkecil :
Masukkan Jumlah Bilangan : 3
Bilangan ke 1 : 50
Bilangan ke 2 : 60
Bilangan ke 3 : 20
---------------------------Bilangan Terbesar : 60
Bilangan Terkecil : 20
Program :
ASB/AK
C++ Programming
74
BAB 7
LARIK
7.1. PENDAHULUAN
Sebuah peubah hanya menyimpan sebuah nilai dari tipe tertentu. Ia tidak
dapat menyimpan beberapa buah nilai yang bertipe sejenis. Seringkali kita
perlu mengolah sekumpulan data yang bertipe sama, misalnya hasil ujian 100
orang mahasiswa, tabel harga barang di pasar swalayan, daftar kode wilayah
dalam percakapan interlokal, dan sebagainya.
Secara umum memang larik (array) didefinisikan sebagai struktur data
yang
menyimpan
elemen
yang
bertipe
sama.
Namun
pada
C++ Programming
75
mempunyai tipe yang kompleks. Untuk larik dangan kasus ini kita harus
menggunakan tipe bentukan Record (Structure), agar suatu kumpulan field
dengan tipe data yang berbeda dapat diolah. Tipe larik yang tersusun atas
field-field dengan nama dan tipe yang berbeda disebut sebagai Larik
Terstruktur.
Gambaran lojik sebuah larik dapat dijelaskan sebagai berikut:
A
1
2
3
4
5
6
7
8
80
75
60
82
59
76
87
71
ASB/AK
C++ Programming
76
C++ Programming
77
Elemen larik juga dapat diacu melalui isi nilai dari indeks larik tersebut:
L[4]
Hasil :
dan 5
ASB/AK
C++ Programming
78
int k;
clrscr();
for(k=0;k<5;k++)
{
cout<<"Nama " <<k<<" = ";
cin >> Nama[k];
}
clrscr();
cout<<===============<<endl;
cout<<"Data Nama Mhs" << endl;
cout<<===============<<endl;
for(k=0;k<5;k++)
cout<<Nama[k]<<endl;
cout<<===============<<endl;
}
Hasil :
jumlah=0;
cout<<"Data Nilai Ujian" << endl;
for(k=1;k<=N;k++)
{
cout<<"Nilai " <<k<<" = ";
cin >> Nilai[k];
jumlah=jumlah+Nilai[k];
}
clrscr();
Rata2=jumlah/N;
cout<<"Rata-rata = "<<Rata2<<endl;
ASB/AK
C++ Programming
79
Hasil :
C++ Programming
80
Hasil :
Bila program dijalankan, maka akan menanyakan jumlah data yang ingin
dimasukkan, yang tidak lain adalah jumlah elemen efektif larik yang ingin
dipakai dari jumlah 100 elemen yang didefinisikan.
int jum_hari[12] =
{
31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
28
1
31
2
30
3
31
4
30
5
31
6
31
7
30
8
31
9
30
10
31
11
C++ secara otomatis akan memberi nilai awal nol terhadap larik yang bersifat
global. Tidak demikian bila larik didefinisikan secara lokal (diatur sendiri oleh
pemrogram).
Simpan dengan nama file : lat74.cpp :
ASB/AK
C++ Programming
81
Hasil :
ASB/AK
C++ Programming
82
Jika elemen larik yang sedang dibandingkan lebih besar dari nilai
maksimum sementara, maka nilai pada elemen tersebut menjadi
maksimum sementara sekarang.
maks = 999
80
75
60
82
59
76
87
71
maks
A[1]
maks
maks
A[4]
A[7]
(maks = 80)
(maks = 82)
(maks = 87)
C++ Programming
83
clrscr();
maks=-999;
for (k=1;k<=5;k++)
{
cout<<"Nilai " <<k<<" = "; cin >> nilai[k];
if(nilai[k] > maks)
maks=nilai[k];
}
clrscr();
cout<<"================" << endl;
cout<<"Data Nilai Ujian" << endl;
cout<<"================" << endl;
for (k=1;k<=5;k++)
cout<<setiosflags(ios::right)<<setw(5)<<nilai[k]<<endl;
cout<<"================" << endl;
cout<<"Nilai ujian tertinggi = "<<maks<<endl;
}
Hasil :
b.Versi 2 :
Pada algoritma versi dua ini, nilai maksimum sementara diinisialisasi
dengan elemen pertama larik. Selanjutnya, larik dikunjungi mulai dari
elemen kedua. Setiap kali mengunjungi elemen larik, bandingkan elemen
tersebut dengan nilai maksimum sementara. Jika elemen larik yang sedang
dibandingkan lebih besar dari nilai maksimum sementara, maka elemen
tersebut menjadi maksimum sementara sekarang. Pada akhir kunjungan
(yaitu setelah seluruh elemen larik dikunjungi), nilai maksimum sementara
menjadi nilai maksimum dari seluruh elemen larik.
Sebagai ilustrasi, tinjau kembali contoh larik pada Gambar di bawah ini:
ASB/AK
C++ Programming
84
A
1
80
75
60
82
59
76
87
71
maks = A[1]
maks
maks
A[4]
A[7]
(maks = 82)
(maks = 87)
C++ Programming
85
Hasil :
Algoritma versi 2 lebih umum dan pasti benar untuk nilai larik apapun (baik
bernilai positif ataupun negatif). Algoritma tetap benar meskipun larik
hanya berukuran 1 elemen A (yaitu N = 1).
int min,k;
clrscr();
cout<<"================" << endl;
cout<<"Data Nilai Ujian" << endl;
cout<<"================" << endl;
min=999;
for(k=1;k<=5;k++)
{
cout<<"Nilai " <<k<<" = ";cin >> nilai[k];
if (nilai[k]<min)
min=nilai[k];
}
cout<<"================" << endl;
cout<<"Nilai ujian terendah = "<<min<<endl;
ASB/AK
C++ Programming
86
Hasil :
b.Versi 2 :
Simpan dengan nama file : lat78.cpp :
//program cari nilai minimum larik dengan
//elemen pertama dianggap nilai minimum sementara
#include<iostream.h>
#include<conio.h>
void main()
{
int nilai[5];
//larik dengan data nilai 5 orang mhs
int k,min;
clrscr();
for(k=1;k<=5;k++)
{
cout<<"Nilai " <<k<<" = ";
cin >> nilai[k];
}
min=nilai[1];
for(k=2;k<=5;k++)
{
if (nilai[k] < min)
min=nilai[k];
}
cout<<"Nilai terkecil = "<<min<<endl;
}
Hasil :
C++ Programming
87
(hanya
kemunculan
yang
pertama
kali
ditemukan
yang
80
75
60
82
59
76
87
71
Bila ada dua nilai 76 di dalam elemen larik, hanya elemen yang pertama kali
ditemukan yang dipertimbangkan.
Misal nilai yang dicari adalah X = 20
Pemeriksaan dilakukan terhadap elemen 80, 75, 60, 82, 59, 76, 87, 71
X tidak ditemukan di dalam larik, jadi i x
ASB/AK
C++ Programming
88
Hasil :
C++ Programming
89
Pada versi ini, jika X ditemukan di dalam larik, maka sebuah peubah
boolean yang bernama ketemu diisi dengan nilai true, dan jika X tidak
ditemukan, maka ketemu bernilai false. Nilai yang dikembalikan adalah
indeks larik (ix) tempat X ditemukan. Jika X tidak ditemukan maka ix diisi
0. Algoritma versi 2 ini lebih elegan daripada algoritma versi 1.
Simpan dengan nama file : lat79.cpp :
//Program cari nilai tertentu di dalam larik
//menggunakan peubah boolean
#include<iostream.h>
#include<conio.h>
void main()
{
const Nmaks=100;
int nilai[Nmaks],k,N,x,ix,ketemu;
clrscr();
cout<<"Jumlah data ? ";cin>>N;
for(k=1;k<=N;k++)
{
cout<<"Nilai "<<k<<" = ";
cin>>nilai[k];
}
cout<<"Masukkan nilai yang ingin dicari : ";cin>>x;
k=1;
ketemu=0;
//menyatakan nilai ketemu adalah false
while((k<=N)&&(!ketemu))
{
if(nilai[k]==x)
ketemu=1;
else
k++;
}
//k>N or ketemu
if(ketemu)
{
ix=k;
cout<<Data ditemukan pada indeks ke <<ix<<endl;
}
else
cout<<"Maaf data yang Anda cari tidak ada..!!!<<endl;
}
Hasil :
C++ Programming
90
#include<iostream.h>
#include<conio.h>
void main()
{
const Nmaks=100;
int nilai[Nmaks],k,N,x,ix,ketemu;
char pil;
clrscr();
cout<<"Jumlah data ? ";cin>>N;
for(k=1;k<=N;k++)
{
cout<<"Nilai "<<k<<" = ";
cin>>nilai[k];
}
pil=' y ';
while(pil ==' y')
{
cout<<"Masukkan nilai yang ingin dicari : ";cin>>x;
k=1;
ketemu=0; //menyatakan nilai ketemu adalah false
while((k<=N)&&(!ketemu))
{
if(nilai[k]==x)
ketemu=1;
else
k++;
}
//k >N or ketemu
if(ketemu)
ix=k;
else
ix=0;
cout<<"==================================="<<endl;
cout<<"Data ditemukan pada indeks ke "<<ix<<endl;
cout<<"==================================="<<endl;
cout<<"Cari lagi ( y / t ) ? ";cin>>pil;
}
//pil bukan 'y'
}
Hasil :
C++ Programming
91
Sedangkan
pengurutan
menurun
berarti
menyusun
elemen
larik
sedemikian sehingga:
A[1] A[2] A[3] A[N]
Data yang diurut dapat berupa data bertipe dasar atau tipe rekaman. Jika
data bertipe rekaman, maka harus dijelaskan berdasarkan field apa data
tersebut diurutkan. Field yang dijadikan dasar pengurutan dikenal sebagai
field kunci.
Metode pengurutan data sesungguhnya terdiri dari banyak jenis, namun yang
paling banyak digunakan adalah:
1. Algoritma Pengurutan Gelembung ( Bubble Sort )
2. Algoritma Pengurutan Pilih ( Selection Sort )
1. Pengurutan Gelembung ( Bubble Sort )
Metode pengurutan gelembung ( bubble sort ) diinspirasi oleh gelembung
sabun yang berada di atas permukaan air. Karena berat jenis gelembung
sabun lebih ringan dari berat jenis air, maka gelembung sabun selalu
terapung ke atas permukaan. Secara umum, benda-benda yang berat akan
terbenam dan benda-benda yang ringan akan terapung ke atas permukaan.
Prinsip pengapungan di atas juga digunakan pada pengurutan gelembung.
Apabila kita menginginkan larik terurut menaik, maka elemen larik berharga
paling kecil diapungkan, artinya diangkat ke atas (atau ke ujung kiri larik)
melalui proses pertukaran. Proses pengapungan ini dilakukan sebanyak N-1
langkah (pass) dengan N adalah ukuran larik. Pada akhir setiap langkah ke-I,
larik A[1..N] akan terdiri atas dua bagian yaitu bagian yang sudah terurut,
yaitu A[1..I] dan bagian yang belum terurut, A[I+1..N]. Setelah langkah
terakhir, diperoleh larik A[1..N] yang terurut menaik.
Simpan dengan nama file : lat79b.cpp :
//program urut menaik (ascending) data dengan metode bubble sort
#include<iostream.h>
#include<conio.h>
void main()
ASB/AK
C++ Programming
92
{
int nilai[5];
int temp;
int i;
int k;
int N;
clrscr();
{
if(nilai[k]<nilai[k-1])
{
temp=nilai[k];
nilai[k]=nilai[k-1];
nilai[k-1]=temp;
}
}
}
for(k=1;k<=N;k++)
cout<<nilai[k]<< ' ';
}
Hasil :
C++ Programming
93
selanjutnya. Proses yang sama diulang untuk elemen larik yang tersisa, yaitu
memilih elemen maksimum/minimum berikutnya dan mempertukarkannya
dengan elemen terujung larik sisa. Sebagaimana halnya pada algoritma
pengurutan gelembung, proses memilih nilai maksimum/minimum dilakukan
pada setiap pass. Jika larik berukuran N, maka jumlah pass adalah N-1.
Simpan dengan nama file : lat79c.cpp :
//program urut data dengan metode pilih maksimum
#include<iostream.h>
#include<conio.h>
void main()
{
int nilai[5];
//larik dengan data nilai 5 orang mhs
int imaks,temp,k,j;
clrscr( ) ;
for(k=1;k<=5;k++)
{
cout<<"Nilai " <<k<<" = ";
cin >> nilai[k];
}
cout<<"Nilai sebelum terurut menaik = ";
for(k=1;k<=5;k++)
cout<<nilai[k]<< ' ';
for(k=5;k>=2;k--)
{
imaks=1;
for(j=2;j<=k;j++)
{
if(nilai[j]>nilai[imaks])
{
imaks=j;
}
temp=nilai[imaks];
nilai[imaks]=nilai[k];
nilai[k]=temp;
}
}
cout<<endl;
cout<<"Nilai sesudah terurut menaik = ";
for(k=1;k<=5;k++)
cout<<nilai[k]<< ' ';
}
Hasil :
ASB/AK
C++ Programming
94
TUGAS 7
Buatlah Program seperti tampilan dibawah ini.
Simpan dengan nama : tugas71.cpp
Masukkan Jumlah Data : 4
Bilangan ke 1 : 50
Bilangan ke 2 : 60
Bilangan ke 3 : 20
Bilangan ke 4 : 40
---------------------------Diurutkan besar ke kecil : 60 50 40 20
Diurutkan kecil ke besar : 20 40 50 60
Program :
ASB/AK
C++ Programming
95
BAB 8
OPERASI STRING
8.1. Pengantar String
Nilai suatu string adalah kumpulan dari nilai-nilai karakter yang berurutan
dalam bentuk larik dimensi satu. Nilai suatu string ditulis di dalam tanda petik
dua ( ). Suatu nilai string disimpan di memori dengan diakhiri oleh nilai \0
(null). Misalnya nilai suatu string ABC akan disimpan di memori dengan
bentuk :
\0
ASB/AK
C++ Programming
96
Sebagai suatu larik karakter, karakter pertama dari nilai string mempunyai
indeks ke nol, karakter kedua mempunyai indeks ke satu dan seterusnya.
Dengan mengetahui bahwa suatu nilai string diakhiri dengan nilai \0, maka
akhir nilai dari suatu string dapat dideteksi.
Program berikut ini akan menampilkan nilai suatu string dalam bentuk
karakter demi karakter dimulai dari karakter pada indeks ke-0 sampai akhir dari
nilai stringnya. Penampilannya karakter demi karakter ini tampak di statement
for yang menggunakan peningkatan I++. Nilai I=0 di statement for menunjukkan
karakter pertama di nilai string. Penampilan karakter ini akan dilakukan terus
selama karakter yang ditampilkan bukan akhir dari nilai string, yang ditunjukkan
oleh kondisi String[ I ] != \0 di statement for.
#include<iostream.h>
#include<conio.h>
void main()
{
char Nilai_String[20]="aBcdE";
int I;
for(I=0;Nilai_String[I]!=0;I++)
cout<<Nilai_String[I]<<' \n';
}
Suatu string disebut sebagai string kosong kalau string tidak berisi
suatu karakter-pun. Konstanta string kosong ditulis sebagai berikut:
ASB/AK
C++ Programming
97
C++ Programming
98
{
char teks1[13]; //string dengan panjang maksimal 12 karakter
char teks2[13];
clrscr();
cout<<"Masukkan teks 1 : ";
cin.get(teks1,13);
cout<<"Masukkan teks 2 : ";
cin.get(teks2,13);
cout<<"Teks pertama yang Anda masukkan adalah "<<teks1<<endl;
cout<<"Teks kedua yang Anda masukkan adalah "<<teks2<<endl;
}
Pada saat Anda menekan Enter, Anda tidak diberi kesempatan untuk
memasukkan karakter pada variabel yang kedua. Untuk mengatasi hal ini
maka
diperlukan
sebuah
perintah
cin.getline(nama_variabel,
sizeof(nama_variabel)).
//input data string dengan spasi lebih dari dua variabel
#include<iostream.h>
#include<conio.h>
void main()
{
char nama[20];
//string dengan panjang maksimal 12 karakter
char alamat[25];
clrscr();
cout<<"Masukkan nama : ";
cin.getline(nama,sizeof(nama));
cout<<"Masukkan alamat : ";
cin.getline(alamat,sizeof(alamat));
cout<<"NAMA = "<<nama<<endl;
cout<<"ALAMAT = "<<alamat<<endl;
}
c. Menyalin String
Menyalin string berbeda dengan menyalin bilangan. Misalnya teks1 dan teks2
adalah variabel string, untuk menyalinnya kita tidak bisa memberikan pernyataan:
teks1 = teks2
untuk menyalin string teks1 ke teks2 kita harus memberikan trik seperti
pada contoh program di bawah ini:
//menyalin string
#include<iostream.h>
ASB/AK
C++ Programming
99
#include<conio.h>
void main()
{
char teks[ ]="C++ Emang Handal";
char data[25];
int i;
clrscr();
for(i=0;teks[i];i++)
data[i]=teks[i];
data[i]=' \0';
cout<<"Isi data = "<<data<<endl;
}
C++ Programming
100
ASB/AK
C++ Programming
101
C++ Programming
102
Fungsi-fungsi ini memberikan nilai balik bertipe int dan memilki prototype
pada file ctype.h
//konversi huruf kecil ke kapital dengan toupper( )
#include<iostream.h>
#include<conio.h>
#include<ctype.h>
void main( )
{
char str[] = i love ny campuss;
clrscr( ) ;
for(int i =0; st[i]; i++)
st[i] = toupper(st[i]);
cout<<st<<endl;
}
ASB/AK
C++ Programming
103
Pada operasi string dalam C++, huruf kecil mempunyai nilai yang lebih besar
dari huruf kapital. Besar suatu string juga diukur dari banyaknya karakter yang
dimiliki oleh string tersebut, contoh:
h. Konversi String ke Angka dan Sebaliknya
Dalam bahasa C++ terdapat fungsi bawaan untuk mengkonversi dari
suatu string ke bilangan. Fungsi-fungsi yang tersedia dapat dilihat pada tabel
di bawah ini:
Fungsi untuk konversi string ke angka
Fungsi
atoi( )
atof( )
atol( )
_atold( )
Prototype
stdlib.h
stdlib.h
stdlib.h
stdlib.h
Keterangan
Mengkonversi string argumen menjadi nilai bertipe
Mengkonversi string argumen menjadi nilai bertipe
Mengkonversi string argumen menjadi nilai bertipe
Mengkonversi string argumen menjadi nilai bertipe
int
float
long int
long double
C++ Programming
104
#include<stdlib.h>
void main()
{
char str[10];
int hasil;
clrscr( ) ;
cout<<"Masukkan nilai string : ";cin>>str;
hasil=atoi(str);
cout<<"hasil = "<<hasil<<endl;
}
/* program kode barang dengan inputan berupa string kemudian dikonversikan ke bilangan
bertipe int */
#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
#include<iomanip.h>
void main()
{
char kd_brg1[10]="2A2.310",
kd_brg2[10]="40ATA100",
kd_brg3[10]="753SM";
char kode[8];
char A[]="Philips A2.310";
char B[]="Barracuda 40.7200";
char C[]="SyncMaster 753s";
char nama[25];
int hasil,jumlah;
long harga,total;
clrscr();
cout<<"Kode brg : ";cin>>kode;
hasil=atoi(kode);
cout<<"Jumlah : ";cin>>jumlah;
clrscr();
if(hasil==atoi(kd_brg1))
{
strcpy(nama,A);
harga=375000;
total=jumlah*harga;
}
else
if(hasil==atoi(kd_brg2))
{
strcpy(nama,B);
harga=560000;
total=jumlah*harga;
}
else
if(hasil==atoi(kd_brg3))
ASB/AK
C++ Programming
105
{
strcpy(nama,C);
harga=1200000;
total=jumlah*harga;
}
else
exit(0);
cout<<setw(17)<<""<<"Kuitansi Pembelian"<<endl;
cout<<setw(15)<<""<<"PT. GlobalNet Computer"<<endl;
cout<<endl;
cout<<"======================================================="<<endl;
cout<<"Kode brg"<<setw(12)<<"Nama Brg"<<setw(15)<<"Qty"
<<setw(8)<<"Harga"<<setw(10)<<"Jumlah"<<endl;
cout<<"======================================================="<<endl;
cout<<setiosflags(ios::left)<<setw(12)<<kode
<<setiosflags(ios::left)<<setw(18)<<nama
<<setiosflags(ios::right)<<setw(4)<<jumlah
<<setiosflags(ios::right)<<setw(10)<<harga
<<setiosflags(ios::right)<<setw(10)<<total<<endl;
cout<<"======================================================="<<endl;
}
BAB 9
STRUKTUR (RECORD)
9.1 Pengertian Struktur
Dalam
bahasa
pemrograman,
struktur
merupakan
sebuah
ASB/AK
C++ Programming
106
field
field
field
.............
field
Gambar 9.1
Gambaran Lojik Struktur dengan N Buah Field
tipe_dataN nama_variabelN;
};
Sebagai contoh:
struc data_tanggal
{
int tahun;
int bulan;
int tanggal;
};
tahun
bulan
tanggal
C++ Programming
107
data_tanggal tanggal_lahir;
tahun
bulan
tanggal
//pendeklarasian struktur
//pendeklarasian
{
int tahun;
int bulan;
int tanggal;
};
data_tanggal tanggal_lahir;
//pendefinisian struktur
ASB/AK
C++ Programming
108
diperkenankan. Dalam hal ini, seluruh anggota pada variabel tgl2 diisi dengan
anggota terkait yang ada pada tgl1. Pernyataan di atas merupakan
penyederhanaan dari tiga pernyataan berikut:
tgl2.bulan
= tgl1.bulan;
tgl2.tahun
= tgl1.tahun;
tgl2.tanggal= tgl1.tanggal;
//contoh penugasan struktur
#include<iostream.h>
#include<conio.h>
void main()
{
struct data_tanggal
//pendeklarasian
{
int tahun;
int bulan;
int tanggal;
};
data_tanggal tgl1,tgl2;
//pendefinisian struktur
ASB/AK
C++ Programming
109
C++ Programming
110
struct data_pegawai
int bulan;
int tahun;
{
char nip[11];
char nama[26];
long gaji;
tanggal_lahir tgl;
};
data_pegawai data;
};
//pendeklarasian struktur
{
char nama[26];
char nip[11];
long gaji;
};
data_pegawai data[5];
angka 5 menunjukkan
banyaknya elemen larik
{
const Nmaks=100;
struct data_pegawai
{
char nip[11];
char nama[26];
long gaji;
};
data_pegawai data[Nmaks]; /*pendefinisian struktur data yang
merupakan tipe bentukan variabel
data_pegawai */
int k,N;
clrscr();
cout<<"Jumlah karyawan : ";cin>>N;
clrscr();
ASB/AK
C++ Programming
111
for(k=0;k<N;k++)
{
cout<<"Data karyawan "<<(k+1)<<endl;
cout<<"Nama : ";cin>>data[k].nama;
cout<<"NIP : ";cin>>data[k].nip;
cout<<"Gaji : ";cin>>data[k].gaji;
clrscr();
}
clrscr();
cout<<"
DAFTAR GAJI"<<endl;
cout<<"
KARYAWAN PT.ELANG PERSADA"<<endl;
cout<<endl;
cout<<"================================================"<<endl;
cout<<setw(3)<<"No.";
cout<<setw(5)<<"NIP";
cout<<setw(13)<<"NAMA";
cout<<setw(20)<<"GAJI"<<endl;
cout<<"================================================"<<endl;
for(k=0;k<N;k++)
{
cout<<setiosflags(ios::left)<<setw(5)<<k;
cout<<setiosflags(ios::left)<<setw(12)<<data[k].nip;
cout<<setiosflags(ios::left)<<setw(20)<<data[k].nama;
cout<<setw(4)<<"Rp.";
cout<<setiosflags(ios::right)<<setw(7)<<data[k].gaji<<endl;
}
cout<<"================================================"<<endl;
}
Bila digambarkan struktur lojik larik data ditunjukkan pada tabel di bawah ini:
NIP
031.02.004
031.02.005
..
..
031.02.103
1
2
.
.
100
5Larik
NAMA
Heru Dwi Wahyono
Diah Marliani
.
.
Wina Nurmaulina
GAJI
Rp. 2500000
Rp. 1500000
.
.
Rp. 900000
data dengan 100 elemen. Setiap elemen larik bertipe tersrtuktur (record).
data[2].nama
struct data_pegawai
{
struct tanggal_lahir
{
int tanggal;
int bulan;
int tahun;
ASB/AK
C++ Programming
char nip[11];
char nama[26];
long gaji;
tanggal_lahir tgl;
};
data_pegawai data[Nmaks];
112
};
C++ Programming
113
<<setiosflags(ios::left)<<setw(12)<<data[k].nip
<<setiosflags(ios::left)<<setw(20)<<data[k].nama
<<data[k].tgl.tanggal<<"-"<<data[k].tgl.bulan<<-
<<setw(8)<<data[k].tgl.tahun
<<setw(4)<<"Rp."
<<setiosflags(ios::right)<<setw(7)<<data[k].gaji<<endl;
}
cout<<"========================================================="<<endl;
}
Selain bertipe terstruktur, elemen larik juga dapat bertipe larik lain. Contoh
berikut menyajikan struktur tipe bentukan yang cukup kompleks. Misalkan kita
ingin menyimpan data nilai-nilai mata kuliah yang diambil setiap mahasiswa pada
sebuah larik bernama LarikMhs. Pada suatu semester, setiap mahasiswa
mengambil 4 buah mata kuliah. Hal tersebut dapat ditangani dengan
menggunakan struktur di dalam struktur namun dengan tipe larik yang berlainan.
Data yang disimpan dalam larik adalah sebagai berikut:
1. NIM
2. NamaMhs
(Nama Mahasiswa)
3. Mata kuliah (MK) yang diambil mahasiswa tersebut (4 buah), berupa larik:
a. Kode mata kuliah ke-1
Nama mata kuliah ke-1
Nilai mata kuliah ke-1
const Nmaks=100;
struct data_mhs
{
int nim;
char nama[26];
mata_kuliah MK[4];
};
struct mata_kuliah
{
char KodeMK[7];
char NamaMK[20];
int nilai;
};
data_mhs data[Nmaks];
ASB/AK
C++ Programming
merupakan
peubah
114
sturktur
mata_kuliah.
Sedangkan
variabel
data
C++ Programming
115
<<setiosflags(ios::left)<<setw(22)<<data[k].nama;
for(i=0;i<4;i++)
{
if(i == 0){
cout<<setiosflags(ios::left)<<setw(9)<<data[k].MK[i].KodeMK
<<setiosflags(ios::left)<<setw(15)<<data[k].MK[i].NamaMK
<<setiosflags(ios::right)<<setw(5)<<data[k].MK[i].nilai<<endl;
}
else
// i>0
{
cout<<setw(34)<<" "
<<setiosflags(ios::left)<<setw(9)<<data[k].MK[i].KodeMK
<<setiosflags(ios::left)<<setw(15)<<data[k].MK[i].NamaMK
<<setiosflags(ios::right)<<setw(5)<<data[k].MK[i].nilai<<endl;
}
}
}
cout<<"========================================================="<<endl;
}
Contoh output dari program di atas :
DAFTAR NILAI MAHASISWA
SEMESTER GENAP
=================================================================
NIM
NAMA
Kode MK
Nama MK
Nilai
=================================================================
113980031
Diah_Marliani
TI3021
Ekonomi_Teknik
81
DU2053
Kewiraan
78
TE3073
Teori_Medan
64
TE4072
Jar.Kabel
73
113950035
Eko_Prasetyo
TE2035
Teknik_Digital
72
TE3502
Sist.Transmisi
76
DU2037
Pancasila
85
TI3025
Kewirausahaan
69
311980037
Wida_Sukmawati
IF4052
Struktur_Data
74
IF4053
Kom.Data
76
TI3021
Ekonomi_Teknik
69
IF3057
BPTR
71
=================================================================
data[Nmaks]
Nama
Kode MK
MK[4]
Nama MK
Nilai
C++ Programming
116
C++ Programming
117
strcpy(A[k-1].city,temporary);
}
}
}
cout<<setw(26)<<""<<"DAFTAR CUSTOMER"<<endl;
cout<<setw(24)<<""<<"PT. Global Industry"<<endl;
cout<<endl;
cout<<setw(10)<<""<<"============================================="<<endl;
cout<<setw(10)<<""<<"No."
<<setw(2)<<""<<"Cust.ID"
<<setw(3)<<""<<"Nama"
<<setw(8)<<""<<"Telp."
<<setw(5)<<""<<"City"<<endl;
cout<<setw(10)<<""<<"==========================================="<<endl;
for(k=0;k<N;k++){
cout<<setw(10)<<""
<<setiosflags(ios::left)<<setw(5)<<(k+1)
<<setiosflags(ios::left)<<setw(10)<<A[k].no
<<setiosflags(ios::left)<<setw(12)<<A[k].nama
<<setiosflags(ios::left)<<setw(10)<<A[k].tlp
<<setiosflags(ios::left)<<setw(12)<<A[k].city<<endl;
}
cout<<setw(10)<<""<<"==========================================="<<endl;
}
9.10 UNION
Union menyerupai struktur (termasuk dalam hal pengaksesannya), namun
mempunyai perbedaan yang nyata. Union biasa dipakai untuk menyatakan
suatu memori dengan nama lebih dari satu. Sebagai contoh diberikan
program di bawah ini:
#include<iostream.h>
#include<conio.h>
#include<math.h>
void main()
{
union{
float kel;
double luas;
}Lingkaran;
float jari2;
cout<<"Masukkan jari-jari : ";cin>>jari2;
Lingkaran.kel=2*3.14*jari2;
cout<<"Keliling lingkaran = "<<Lingkaran.kel<<endl;
Lingkaran.luas=3.14*jari2*jari2;
cout<<"Luas lingkaran = "<<Lingkaran.luas<<endl;
}
ASB/AK
C++ Programming
118
Berarti elemen keliling dan luas akan menempati lokasi memori yang sama
secara bergantian. Besarnya lokasi memori yang akan digunakan adalah
sebesar 8 byte yang merupakan ukuran elemen terbesar (tipe double untuk
elemen luas). Jika digambarkan bentuk penggunaan bersama memori ini
akan tampak sebagai berikut:
Luas
byte 7
byte 6
byte 5
byte 4
byte 3
byte 2
byte 1
byte 0
Keliling
C++ Programming
119
Dibaca dua buah titik P1(x1,y1) dan P2(x2,y2) dari piranti masukkan, dimana
x1 dan y1 adalah anggota dari P1 dan x2 dan y2 adalah anggota dari P2.
Buatlah program untuk menghitung titik tengah dari P1 dan P2.
Titik tengah dari dua titik P1 dan P2 adalah P3(x3,y3) yang dihitung dengan
rumus :
x3
x1 x 2
y y2
dan y 3 1
2
2
clrscr();
cout<<"Titik P1 : "<<endl;
cout<<"x1 : ";cin>>P1.x;
cout<<"y1 : ";cin>>P1.y;
clrscr();
cout<<"Titik P2 : "<<endl;
cout<<"x2 : ";cin>>P2.x;
cout<<"y2 : ";cin>>P2.y;
clrscr();
P3.x=(P1.x+P2.x)/2;
P3.y=(P1.y+P2.y)/2;
cout<<"Titik tengah adalah : "<<"P3("<<P3.x<<","<<P3.y<<")"<<endl;
ASB/AK
C++ Programming
120
BAB 10
POINTER
10.1. Konsep Pointer
Pointer adalah tipe dasar yang rentang nilainya adalah alamat di memori
komputer. Suatu pointer di dalam program dimaksudkan untuk menunjuk ke
suatu alamat memori. Misal diberikan sebuah variabel X berisi harga bertipe
integer dan PX adalah variabel pointer yang akan menunjuk ke variabel X,
maka gambaran lojiknya adalah sebagai berikut :
ASB/AK
C++ Programming
121
0xff4
........
0xff2
PX
80
0xff2
........
{
int X=80;
clrscr();
cout<<Nilai X = <<X<<endl;
cout<<Alamat X = <<&X<<endl;
}
= 80
Alamat X = 0x0064fe00
C++ Programming
122
cout<<Alamat X = <<&X<<endl;
cout<<PX
= <<PX<<endl;
}
= 0x0064fe00
80
3003h
3001h
PX
........
C++ Programming
123
nilai X oleh cout bukan berisi 80 melainkan 72. Namun ingat nilai yang diubah
dari 80 menjadi 72 alamatnya adalah tetap, yaitu pada variabel X hanya
nilainya saja yang berubah.
Hal ini ditunjukkan oleh contoh program di bawah ini:
#include<iostream.h>
#include<conio.h>
void main()
{
int X=80;
int *PX;
clrscr();
cout<<"Nilai X semula : "<<X<<endl;
cout<<"Alamat X mula-mula : "<<&X<<endl;
PX=&X;
*PX=72;
//pointer menunjuk ke X
//Nilai yang ditunjuk diubah menjadi 72
mengatur agar pointer ini menunjuk ke tipe data int, tetapi di saat lain diperlukan
untuk menunjuk data bertipe float dan sebagainya.
Dapat menunjuk ke
sebarang tipe data
int
float
Pointer void
char
Contoh:
void *Ptr
ASB/AK
C++ Programming
#include<iostream.h>
#include<conio.h>
void main()
{
void *Ptr;
124
clrscr();
int X=60;
float Y=37.5;
Ptr=&X;
cout<<"Nilai integer yang ditunjuk oleh Ptr : "
<<*(int *)Ptr<<endl;
Ptr=&Y;
cout<<"Nilai pecahan yang ditunjuk oleh Ptr : "
<<*(float *)Ptr<<endl;
}
Bila sebuah pointer didefinisikan sebagai pointer tak bertipe, maka pada saat
pengaksesan nilai yang ditunjuk oleh pointer haruslah sebagai berikut :
*(tipe_data variabel yang ditunjuk oleh pointer *) variabel pointer
Pengaksesan ini bukan hanya berlaku untuk mengambil nilai yang ditunjuk
oleh pointer, melainkan juga mengubahnya.
#include<iostream.h>
#include<conio.h>
void main()
{
clrscr();
void *ptr;
int x=80;
float y = 72.3;
ptr=&x;
cout<<"Nilai integer mula-mula : "
<<x<<endl;
*(int *)ptr=77;
cout<<"Nilai integer sekarang : "<<x<<endl;
ptr=&y;
cout<<"Nilai pecahan mula-mula : "
<<y<<endl;
*(float *)ptr=51.7;
cout<<"Nilai pecahan sekarang : "
<<y<<endl;
}
Hasil program di atas :
C++ Programming
125
ptr1
Pointer
menunjuk ke
pointer
ASB/AK
C++ Programming
126
{
int X=279;
int *ptr1;
int **ptr2;
clrscr();
cout<<"Nilai X = "<<X<<endl;
//penugasan alamat pointer
ptr1=&X;
//ptr1 menunjuk ke alamat X
ptr2=&ptr1;
//ptr2 menunjuk ke pointer ptr2
//mengakses nilai X melalui ptr1
cout<<"*ptr1 = "<<*ptr1<<endl;
//mengakses nilai X melalui ptr2
cout<<"**ptr2 = "<<**ptr2<<endl;
}
C++ Programming
//pointer dalam fungsi
#include<iostream.h>
#include<conio.h>
void ubah_nilai(int *x);
void main()
{
int a=168;
clrscr();
127
//prototipe fungsi
ubah_nilai(&a)
ASB/AK
C++ Programming
128
BAB 11
KELAS & OBYEK
11.1. Pendahuluan
Ide
dasar
pada
bahasa
berorientasi
obyek
(OOP)
adalah
C++ Programming
129
Pembagian
departemen
dalam
perusahaan
merupakan
untuk
Data
Obyek
Fungsi Anggota
Fungsi Anggota
Gambar 11.1 Data dan fungsi pemanipulasi data pada suatu obyek
Adapun
gambar
11.2
melukiskan
hubungan
antarobyek
yang
ASB/AK
C++ Programming
130
Obyek 1
Data
Data
Penjualan
Fungsi Anggota 1
Manager
Fungsi Anggota 2
Sekretaris
Dept.
Penjualan
Dept.
Inventory
Obyek 2
Data
Data
Inventory
Fungsi Anggota 1
Kepala Gudang
Fungsi Anggota 2
Staff
Pada bahasa berorientasi obyek, data yang melekat dalam suatu obyek
biasa disebut variabel instans. Pada C++, istilah yang digunakan adalah data
atau anggota data. Adapun fungsi yang melekat pada suatu obyek disebut
fungsi anggota (member function). Fungsi ini merupakan satu-satunya cara
untuk mengakses terhadap anggota dari obyek. Untuk membaca suatu
anggota data, kita harus memanggil fungsi anggota. Dengan kata lain, data
bersifat tersembunyi bagi fungsi-fungsi di luar fungsi anggota.
Istilah
umum
untuk
fungsi
anggota
pada
bahasa
pemrograman
ASB/AK
C++ Programming
131
kedokteran. Ilmuwan dapat diilustrasikan sebagai kelas (class) dan merekamereka itulah yang disebut obyek.
Karakteristik PBO
Tiga karakteristik utama dari bahasa yang berorientasi obyek adalah:
Encapsulation
Inheritance
Polymorphism
Tiga karakteristik di atas mendukung reusability, yang merupakan salah
satu faktor dari kualitas perangkat lunak. Reusability adalah suatu sifat yang
memperkenankan kelas yang telah di buat dan diuji dapat didistribusikan ke
pemrogram lain untuk dipakai pada program-program mereka. Hal ini
mempunyai kesamaan dengan penulisan fungsi-fungsi bahasa prosedural
yang kemudian diletakkan dalam pustaka (library). Perbedaannya, tingkat
kepemakaian kembali pada program berorientasi obyek lebih tinggi daripada
bahasa prosedural. Sebab, pemrogram dengan mudah dapat menurunkan
sifat-sifat dari suatu kelas dan menambahkan sifat-sifat yang baru (berkat
adanya kemampuan inheritance).
Encapsulation (pengkapsulan)
Pengemasan data dan fungsi dalam wadah bernama obyek dikenal
dengan sebutan Encapsulation (pengkapsulan). Data tidak lagi diperlakukan
sebagai komponen kedua setelah fungsi, melainkan mempunyai kedudukan
yang sama dengan fungsi.
Inheritance (pewarisan)
Inheritance (pewarisan) merupakan sifat dalam bahasa berorientasi
obyek yang memungkinkan sifat-sifat dari suatu kelas diturunkan ke kelas
lain. Analogi dalam dunia nyata misalnya pada Singa. Singa sebagai kelas
mempunyai sifat antara lain:
buas
berkaki empat
Apabila Simba adalah singa, maka Simba juga memiliki sifat-sifat umum
dari singa. Tetapi tentu saja, Simba bisa mempunyai sifat yang lain,
misalnya pendiam atau lucu.
Polimorphism (Polimorfisme)
ASB/AK
C++ Programming
132
Sebuah kelas (class) yang menyerupai struktur di atas dapat dibuat dengan
menggantikan kata struct dengan class, namun pada penggunaan class
perlu ditambahkan kata kunci public disertai tanda titik dua ( : ). Untuk lebih
jelasnya dapat dilihat pada program contoh 2 di bawah ini:
#include<iostream.h>
#include<conio.h>
#include<string.h>
class Buku
{
public:
char judul[35];
char pengarang[25];
int jumlah;
};
void main()
{
clrscr();
ASB/AK
C++ Programming
133
Buku novel;
//pendefinisian obyek
strcpy(novel.judul,"Gun Of The Navarone");
strcpy(novel.pengarang,"Alistair MacLean");
novel.jumlah=12;
cout<<novel.judul<<endl;
cout<<novel.pengarang<<endl;
cout<<novel.jumlah<<endl;
}
ASB/AK
C++ Programming
134
Konsep obyek ini tentu berbeda jauh dengan cara yang ditempuh pada
program konvensional (bukan berorientasi obyek), yang memisahkan data
dan fungsi yang mengaksesnya. Pada program konvensional, data hanya
diperlakukan sebagai komponen kelas kedua. Fungsi justru berkedudukan
sebagai komponen utama. Pada pemrograman berorientasi obyek, data dan
fungsi harus dirancang secara bersamaan.
Misalnya, bila terdapat data :
judul buku
nama pengarang
jumlah buku
di awal perancangan harus dipikirkan fungsi-fungsi dasar yang digunakan
untuk mengakses ketiga data tersebut. Fungsi-fungsi yang dimaksud dapat
berupa:
mengisikan data
menampilkan data
Kemudian juga perlu direncanakan, data atau fungsi mana saja yang
boleh diakses di luar obyek dan yang hanya dipergunakan secara internal
oleh obyek itu sendiri. Dalam hal ini penentu akses public atau private yang
menentukannya. Untuk lebih jelasnya dapat dilihat pada contoh program
11.3.1 di bawah ini:
/* sebuah kelas yang melibatkan anggota data dan
fungsi anggota */
#include<iostream.h>
#include<conio.h>
#include<string.h>
class Buku
{
private:
char judul[35];
char pengarang[25];
int jumlah;
public:
void inisialisasi(char *Judul, char *Pengarang, int Jumlah)
{
strcpy(judul, Judul);
strcpy(pengarang, Pengarang);
jumlah=Jumlah;
}
void info()
{
cout<<"Judul
: "<<judul<<endl;
cout<<"Pengarang : "<<pengarang<<endl;
ASB/AK
C++ Programming
135
Pada program di atas, kelas Buku memiliki tiga buah anggota data (judul,
pengarang
dan
jumlah)
dan
dua
buah
anggota
fungsi
anggota
anggota data
fungsi anggota
fungsi anggota
Namun ada hal yang perlu diperhatikan. Fungsi anggota seperti di atas dapat
mengenali variabel seperti judul, pengarang dan jumlah, yang tidak lain
adalah data anggota dari kelas buku.
ASB/AK
C++ Programming
136
Bentuk pemanggilannya :
nama_obyek.nama_fungsi(argumen)
C++ Programming
137
jumlah=Jumlah;
}
void info()
{
cout<<"Judul
: "<<judul<<endl;
cout<<"Pengarang : "<<pengarang<<endl;
cout<<"Jumlah buku : "<<jumlah<<endl;
}
};
void main()
{
clrscr();
Buku novel,fiksi;
//pendefinisian obyek
//memberi nilai terhadap dua obyek
novel.inisialisasi("Gun of The Navarone","Alistair MacLean",12);
fiksi.inisialisasi("Jurassic Park","Michael Crichton",3);
//menampilkan informasi yang terdapat pada kedua obyek
novel.info();
fiksi.info();
}
Hasil diatas memperlihatkan bahwa data yang terkandung pada masingmasing obyek (novel dan fiksi) berbeda, walaupun menggunakan fungsi
anggota yang sama yaitu inisialisasi().
maka semua anggota data pada obyek fiksi akan diisi sesuai dengan anggota
data pada obyek novel.
kelas sama
Obyek fiksi
Obyek novel
judul
pengarang
jumlah
judul
pengarang
jumlah
fungsi anggota
fungsi anggota
ASB/AK
C++ Programming
138
fiksi = novel
Penugasan antarobyek berkelas sama
C++ Programming
139
int jumlah;
public:
void inisialisasi(char *Judul, char *Pengarang, int Jumlah)
{
strcpy(judul,Judul);
strcpy(pengarang,Pengarang);
jumlah=Jumlah;
}
void info()
{
.....
}
};
Nama kelas
Nama fungsi
anggota
void Buku::info()
{
cout<<Judul : <<judul<<endl;
}
Operator resolusi
lingkup
ASB/AK
C++ Programming
140
Cara kedua ini lebih umum digunakan. Perlu diketahui pada penulisan
Buku::inisialisasi(), dengan sendirinya anggota data kelas Buku dikenali pada
fungsi tersebut.
Di bawah ini diberikan contoh yang menggunakan bentuk penulisan alternatif
fungsi anggota:
//alternatif lain penulisan fungsi anggota
#include<iostream.h>
#include<conio.h>
#include<string.h>
class Buku
{
private:
char judul[35];
char pengarang[25];
int jumlah;
public:
void inisialisasi(char *Judul, char *Pengarang, int Jumlah);
void info();
};
void main()
{
clrscr();
Buku novel;
novel.inisialisasi("Gun of The Navarone","Alistair MacLean",12);
novel.info();
}
void Buku::inisialisasi(char *Judul, char *Pengarang, int Jumlah)
{
strcpy(judul,Judul);
strcpy(pengarang,Pengarang);
jumlah=Jumlah;
}
void Buku::info()
{
cout<<"Judul
: "<<judul<<endl;
cout<<"Pengarang : "<<pengarang<<endl;
cout<<"Jumlah buku : "<<jumlah<<endl;
}
Catatan: Jika fungsi anggota mengandung sedikit pernyataan (satu atau dua pernyataan), definisi fungsi
anggota ditulis di dalam deklarasi kelas (contoh sebelum 11.6.1). Tetapi untuk fungsi anggota
yang kompleks, definisinya diletakkan di luar kelas.
C++ Programming
141
public:
void inisialisasi(char *judul, char *cast, char *genre);
void info();
};
void main()
{
clrscr();
Movie film;
//pendefinisian obyek
Pada pernyataan :
void Movie::inisialisasi(char *judul, char *cast, char *genre)
{
strcpy(Movie::judul,judul);
}
nama anggota
nama kelas
ASB/AK