BAB 1
PENGENALAN PROGRAM C++
Linker
Object File
ASB/AK
C++ Programming 2
b. Tipe Data
Tipe data dibagi dua, yaitu :
Tipe data dasar, dan
Tipe bentukan yang merupakan bentukan dari tipe data dasar
ASB/AK
C++ Programming 3
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;
Pada contoh di atas didefinisikan sebuah peubah x bertipe int, kemudian
peubah tersebut menjadi tipe data baru untuk mendefinisikan variabel
“saya”. Sehingga variabel “saya” secara deklarasi mempunyai tipe data
yang sama, yaitu int. ( Dibahas lebih lanjut pada bab struktur )
c. Konstanta
ASB/AK
C++ Programming 4
ASB/AK
C++ Programming 5
fungsi_fungsi_lain( )
Fungsi-fungsi lain yang ditulis oleh
{ pemrogram komputer
statement-statement
}
2) Fungsi main()
Program C++ memang tidak pernah lepas dari fungsi. Sebab fungsi
adalah salah satu dasar penyusun blok pada C++. Sebuah program C++
minimal mengandung sebuah fungsi, yaitu fungsi main().
Fungsi ini menjadi awal dan akhir eksekusi program C++. Setelah
mengenal struktur program C++, sekarang kita coba untuk membuat
program sederhana pada C++ yang menampilkan pesan “Selamat
Datang”. Perhatikan contoh program dibawah ini :
//program tampil pesan Selamat Datang
#include<iostream.h>
void main( )
{
cout<<”Selamat Datang”<<endl;
}
ASB/AK
C++ Programming 6
ASB/AK
C++ Programming 7
TUGAS 1
1. Apakah hasil tampilan dari program dibawah ini
Simpan dengan nama : tugas11.cpp
//program jumlah
#include<iostream.h>
#include<conio.h> //file library untuk menghapus layar
void main( )
{
int x,y,jumlah; //deklarasi variabel
clrscr( ) ;
x=100; y=50; //pengisian nilai secara langsung ke dalam peubah x dan y
Hasil :
ASB/AK
C++ Programming 8
BAB 2
OPERATOR
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
ASB/AK
C++ Programming 9
}
Hasil :
b. Operator Penugasan
ASB/AK
C++ Programming 11
ASB/AK
C++ Programming 12
int x, y;
clrscr( ) ;
x = 5;
y = 10 + x++;
cout<<” x = “<<x<<endl;
cout<<” y = “<<y<<endl;
}
Hasil :
ASB/AK
C++ Programming 13
int x;
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 :
ASB/AK
C++ Programming 14
#include<iostream.h>
#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 :
{
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 :
ASB/AK
C++ Programming 16
TUGAS 2
1. Apakah hasil tampilan dari program dibawah ini
Simpan dengan nama : tugas21.cpp
//program jumlah
#include<iostream.h>
#include<conio.h>
{
clrscr( ) ;
int x,y,z;
x=1;
cout<<”Nilai Awal x adalah : “<<x<<endl;
x=x<<1;
cout<<”Nilai x : “<<x<<endl;
y=x + 5;
cout<<”Nilai y : “<<y<<endl;
z=x+ ++y;
z+=x;
cout<<”Nilai z : “<<z<<endl;
}
Hasil :
ASB/AK
C++ Programming 17
BAB 3
TEKNIK INPUT OUTPUT
3.1. cout
Pemakaian cout merupakan sebuah obyek untuk meletakkan informasi ke
standar output (monitor).
3.2. Manipulator
ASB/AK
C++ Programming 18
Manipulator Keterangan
endl Menyisipkan newline dan mengirimkan isi ke
penyangga
ends Menyisipkan karakter null
flush Mengirimkan isi penyangga keluaran ke piranti
keluaran
dec Mengkonversi ke bilangan basis sepuluh
hex Mengkonversi ke bilangan basis 16 (oktal)
oct Mengkonversi ke bilangan basis 8 (oktal)
setbase(int n) Mengkonversi ke bilangan basis n (n=8, 10 atau 16)
setw(int n) Mengatur lebar field untuk suatu nilai sebesar n
karakter
setfill(int c) Menyetel karakter pemenuh berupa c
setprecicion(int n) Menyetel presisi bilangan pecahan sebesar n digit
setiosflags(long f ) Menyetel format yang ditentukan oleh f.f adalah tanda
format pada tabel 3.3
Resetiosflags(long f Menghapus format yang ditentukan oleh f.f adalah
) tanda format pada tabel 3.3
a. endl
b. setw()
void main( )
{
int nilai1 = 1210,
nilai2 = 250,
nilai3 = 23;
clsrcr( ) ;
ASB/AK
C++ Programming 19
cout<<”Nilai 1 = “<<setw(4)<<nilai1<<endl;
cout<<”Nilai 2 = “<<setw(4)<<nilai2<<endl;
cout<<”Nilai 3 = “<<setw(4)<<nilai3<<endl;
}
Hasil :
cout<<setw(0)<<bil<<endl;
cout<<setw(1)<<bil<<endl;
cout<<setw(2)<<bil<<endl;
cout<<setw(3)<<bil<<endl;
cout<<setw(4)<<bil<<endl;
cout<<setw(5)<<bil<<endl;
}
Hasil :
c. setfill()
ASB/AK
C++ Programming 20
cout<<setfill(„*‟)<<setw(8)<<harga<<endl;
cout<<setw(8)<<harga<<endl;
}
Hasil :
d. ends
e. setiosflags()
ASB/AK
C++ Programming 21
void main( )
{
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 p . 4 7 5 0 0 0
R p . 3 5 0 0 0
R p . 7 5 0 0
ASB/AK
C++ Programming 22
<<harga2<<endl;
cout<<setw(3)<<”Rp.”<<setiosflags(ios::right)<<setw(7)
<<harga3<<endl;
}
Hasil :
R p . 4 7 5 0 0 0
R p . 3 5 0 0 0
R p . 7 5 0 0
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
void main()
{
float harga=225.20;
clrscr();
cout<<setw(3)<<"U$."<<setiosflags(ios::right)<<setw(7)<<setiosflags(ios::
fixed)<<setprecision(2)<<harga
<<endl;
cout<<setw(3)<<"U$."<<setiosflags(ios::right)<<setw(7)<<setiosflags(ios::
fixed)<<setprecision(1)<<harga
<<endl;
cout<<setw(3)<<"U$."<<setiosflags(ios::right)<<setw(7)<<setiosflags(ios::
fixed)<<setprecision(0)<<harga
<<endl;
cout<<setw(3)<<"U$."<<setiosflags(ios::right)<<setw(7)<<setiosflags(ios::
scientific)<<setprecision(2)<<harga<<endl;
}
Hasil :
ASB/AK
C++ Programming 23
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 ;
Tanda >> menunjukkan “pengambilan data dari” piranti masukan, normalnya
adalah keyboard.
Simpan dengan nama file : lat37.cpp
//membaca data bertipe float dan int dari keyboard
#include<iostream.h>
#include<conio.h>
void main( )
{
const float harga=250000;
int jumlah;
float total;
clrscr( ) ;
total=jumlah*harga;
ASB/AK
C++ Programming 24
clrscr();
cout<<"Kode barang : ";cin>>kode
cout<<"Jumlah : ";cin>>jumlah;
if(kode=='A')
{
strcpy(nama,A);
harga=175000;
total=jumlah*harga;
}
else
if(kode=='B')
{
strcpy(nama,B);
harga=256000;
total=jumlah*harga;
}
else
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
#include<iostream.h>
#include<conio.h>
void main()
{
char karakter;
clrscr();
Hasil :
ASB/AK
C++ Programming 26
TUGAS 3
Buatlah Program seperti tampilan dibawah ini.
Simpan dengan nama : tugas31.cpp
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 :
ASB/AK
C++ Programming 27
BAB 4
PERNYATAAN (STATEMENT)
Seperti telah dijelaskan sebelumnya bahwa ungkapan/ pernyataan atau
yang disebut statement berupa instruksi yang menyuruh komputer untuk
melakukan sesuatu. Di dalam bahasa C++ terdapat banyak jenis statement, yaitu
:
4.1 . Statement Kosong
Statement kosong (empty statement atau null statement) adalah statement
yang hanya terdiri dari pengakhir titik koma saja. Statement ini tidak berisi
dengan penyataan apapun, sehingga tidak ada tindakan yang dilakukan.
#include<iostream.h>
#include<conio.h>
void main( )
{
;
}
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
menampilkan tanda spasi kosong, statement ini banyak digunakan untuk
mengatur format tampilan dari suatu pernyataan yang dikirim ke layar.
ASB/AK
C++ Programming 28
a. Statement Pemilihan IF
Statement penyeleksian kondisi (pemilihan) dinyatakan oleh pernyataan
if, pernyataan ini dipakai untuk mengambil keputusan berdasarkan suatu
kondisi. Bentuk pernyataan if mempunyai beberapa kondisi :
Satu kasus atau dua kasus atau lebih (if – else)
Statement kendali penyeleksian kondisi satu kasus digambarkan oleh
notasi algoritma di bawah ini :
Simpan dengan nama file : lat41.cpp :
//program menyatakan sebuah bilangan genap bila habis dibagi 2
#include<iostream.h>
#include<conio.h>
void main( )
{
int bil;
clrscr( ) ;
cout<<”Masukkan nilai bilangan : “;cin>>bil;
if (bil % 2 == 0)
cout<<”Bilangan tersebut adalah genap”<<endl;
else
cout<<”Bilangan tersebut adalah ganjil”<<endl;
}
Hasil :
ASB/AK
C++ Programming 29
else // (z x dan z y)
cout<<”Bilangan terbesar adalah “<<z<endl;
}
Hasil :
IF Tersarang
ASB/AK
C++ Programming 30
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 :
cout<<"Umur ? ";cin>>usia;
if(usia > 17)
ASB/AK
C++ Programming 31
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 :
ASB/AK
C++ Programming 32
switch
{
case ungkapan1;
pernyataan_1;
break;
case ungkapan2;
pernyataan_2;
break;
....
default /* optional */
pernyataan_x; /* optional * /
}
cout<<"============================="<<endl;
cout<<setw(5)<<""<<"MENU UTAMA"<< endl;
cout<<"============================="<<endl;
cout<<"1. Hitung Luas "<<endl;
cout<<"2. Hitung Keliling "<<endl;
cout<<"3. Hitung Diagonal "<<endl;
cout<<"4. Keluar Program "<<endl;
cout<<"============================="<<endl;
ASB/AK
C++ Programming 33
switch(pil)
{
case 1:
{
cout<<"Panjang ? ";cin >> panjang;
cout<<"Lebar ? ";cin >> lebar;
luas = panjang*lebar;
cout<<"Luas segiempat = " <<luas<<endl;
break;
}
case 2:
{
cout<<"Panjang ? ";cin >> panjang;
cout<<"Lebar ? ";cin >> lebar;
kel = 2*panjang*lebar;
cout<<"Keliling segiempat = " <<kel<<endl;
break;
}
case 3:
{
cout<<"Panjang ? ";cin >> panjang;
cout<<"Lebar ? ";cin >> lebar;
diag = sqrt((panjang*panjang)+(lebar*lebar));
cout<<"Diagonal segiempat = " <<diag<<endl;
break;
}
case 4:
cout<<"Keluar program...bye2" << endl;
break;
default:
cout<<"Anda salah memilih nomor menu..!!!"
<< endl;
break;
}
}
Hasil :
4.4. Pengulangan
Statement kendali pengulangan merupakan sebuah statement dimana
sejumlah instruksi dapat dilaksanakan berulangkali sesuai keinginan. Di dalam
ASB/AK
C++ Programming 34
algoritma pengulangan atau yang sering disebut repetition (loop) dapat dilakukan
sejumlah kali atau sampai kondisi pengulangan tercapai.
Secara konsep algoritma, struktur pengulangan terdiri dari dua, yaitu
pengulangan tanpa kondisi (unconditional looping) dan pengulangan dengan
kondisi (conditional looping).
Bagian struktur pengulangan secara umum terdiri atas dua bagian :
kondisi pengulangan, yaitu ekspresi boolean yang harus dipenuhi untuk
melaksanakan pengulangan.
badan (body) pengulangan, yaitu bagian algoritma yang diulang.
Di bawan ini diberikan notasi algoritma untuk struktur pengulangan :
<inisialisasi>
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
(unconditional looping) artinya instruksi-instruksi di dalam badan pengulangan
diulang sejumlah kali yang dispesifikasikan. Dalam hal ini, jumlah
pengulangan sudah diketahui sebelum eksekusi program.
Notasi algoritma dari struktur pernyataan for adalah :
for (ungkapan1;ungkapan2;ungkapan3)
pernyataan;
Keterangan:
Ungkapan1 adalah nilai pencacah awal
Ungkapan2 adalah nilai pencacah akhir
Ungkapan3 adalah operator penaikan/penurunan untuk menentukan
banyaknya pengulangan
ASB/AK
C++ Programming 35
cout<<abjad<<endl;
nilai akhir
}
Hasil :
jumlah=0;
cout<<”Jumlah data : “;cin>>N;
clrscr( ) ;
for(k=1;k<=N;k++)
{
cout<<”Nilai “<<k<<” : “;cin>>nilai;
ASB/AK
C++ Programming 36
jumlah=jumlah+nilai;
}
clrscr( ) ;
rata2=jumlah/N;
cout<<”Rata-rata nilai = “<<rata2<<endl;
}
Hasil :
ASB/AK
C++ Programming 37
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
void main( )
{
int i, j;
clrscr();
for( i =1; i<=5; i++)
{
for( j =1; j<=3; j++)
cout<<setw(5)<<i<<setw(3)<<j;
cout<<endl;
}
}
Hasil :
for(baris=1;baris<=tinggi;baris++);
{
for(kolom=1;kolom<=baris;kolom++)
cout<< „ * „;
cout<<endl; /* pindah baris dari bintang
pertama ke bintang berikutnya */
}
}
Hasil :
c. Pengulangan While
ASB/AK
C++ Programming 38
While (ungkapan)
{
pernyataan1;
pernyataan2;
...
pernyataanN;
}
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; //variabel pencacah
clrscr( ) ;
k = 0; //inisialisasi
while(k < 5)
{
cout<<”Welcome to Information Technology”<<endl;
k++;
} //peubah kondisi yang menyebabkan kondisi bernilai false
}
Hasil :
Keterangan :
ASB/AK
C++ Programming 39
ASB/AK
C++ Programming 40
ASB/AK
C++ Programming 41
cout<<”Lebar ? “;cin>>lebar;
clrscr( ) ;
luas = panjang*lebar;
cout<<”Luas segi empat = “<<luas<<endl;
cout<<”Hitung lagi ? (y/t) ? “;cin>>pil;
} //pil != „y‟
}
Hasil :
d. Pengulangan Do-While
Pernyataan do-while juga berguna untuk mengulang proses. Bentuk dari
pernyataan do-while ini adalah sebagai berikut:
do
{
pernyataan1;
pernyataan2;
...
pernyataanN;
} while(ungkapan);
ASB/AK
C++ Programming 42
ASB/AK
C++ Programming 43
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<<‟ „;
bil++;
} // peubah kondisi bernilai false (bil 6)
Hasil :
ASB/AK
C++ Programming 44
jumlah=jumlah+x;
}
clrscr();
cout<<"Jumlah = "<<jumlah<<endl;
}
Hasil :
ASB/AK
C++ Programming 45
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 :
//hitung jumlah nilai jika hanya genap
#include<iostream.h>
#include<conio.h>
void main()
{
int k,N,x,jumlah;
clrscr();
k=1;
jumlah=0;
while(k<=N)
{
cout<<"Nilai "<<k<<" : ";cin>>x;
if(x%2!=0){
cout<<"Masukkan hanya bilangan genap..!! \a"<<endl;
continue; /* kembali ke struktur while bila nilai x yang
dimasukkan adalah ganjil */
}
jumlah=jumlah+x;
k++;
}
cout<<"Jumlah = "<<jumlah<<endl;
}
Hasil :
ASB/AK
C++ Programming 46
selesai:
cout<<"Selesai...."<<endl;
}
Hasil :
ASB/AK
C++ Programming 47
c=a*b;
cout<<”Nilai A*B= “;<<c<<endl;
cout<<”Coba Lagi [Y]=ya [T]=tidak ? “;
for ( ; ; )
{
jawab= toupper(getch());
if ((jawab==‟Y‟) || (jawab==‟T‟))
{
cout<<jawab<<endl;
if (jawab==‟Y‟)
goto hitung;
else
exit(0);
}
}
}
Hasil :
cout<<setw(10)<<"================================"<<endl;
cout<<setw(20)<<"MENU UTAMA"<<endl;
cout<<setw(10)<<"================================"<<endl;
cout<<setw(10)<<"1. Entry Data"<<endl;
cout<<setw(10)<<"2. Customer Report"<<endl;
cout<<setw(10)<<"3. Add Data"<<endl;
cout<<setw(10)<<"4. Find Data"<<endl;
cout<<setw(10)<<"5. Accounting Report"<<endl;
cout<<setw(10)<<"6. Keluar program"<<endl;
cout<<setw(10)<<"================================"<<endl;
cout<<setw(10)<<"Pilih nomor menu (1/2/3/4/5/6): ";
cin >>pil;
ASB/AK
C++ Programming 48
if(pil==6)
break;
clrscr();
switch(pil)
{
case 1 :
cout<<"Anda memilih menu Input Data"<<endl;
cout<<"Tekan Enter untuk kembali ke MENU"<<endl;
getch();
clrscr();
continue;
case 2 :
clrscr();
cout<<"Anda memilih menu Melihat Laporan Pelanggan"
<<endl;
cout<<"Tekan Enter untuk kembali ke MENU"<<endl;
getch();
clrscr();
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 :
if(bil>=0)
cout<<"Positif"<<endl;
else
exit(0);
}
Hasil :
TUGAS 4
ASB/AK
C++ Programming 50
Pilihan
----------------
[1] Penjumlahan
[2] Pengurangan
[3] Keluar
----------------
Pilihan [1..3] :
Ketentuan Soal
Jika pilihan 1 maka : Jika Pilihan 2 maka :
Penjumlahan Pengurangan
---------------------- ---------------------
Masukkan Nilai A = 40 Masukkan Nilai A = 40
Masukkan Nilai B = 30 Masukkan Nilai B = 30
Hasil A + B = 70 Hasil A - B = 10
Coba Lagi [Y/T] : Coba Lagi [Y/T] :
Program :
BAB 5
ASB/AK
C++ Programming 51
PROSEDUR
void main( )
{ void nama_prosedur( )
……………. {
prosedur( ) ; ………………………
……………. ………………………
……………. ………………………
prosedur( ) ; }
…………….
}
ASB/AK
C++ Programming 52
void garis( )
{
cout<<” ================= ”<<endl;
}
Hasil :
Hasil :
ASB/AK
C++ Programming 53
a. Nama Lokal
Nama-nama (konstanta, peubah, tipe dll) yang dideklarasikan di dalam
bagian DEKLARASI prosedur hanya “dikenal” di dalam badan prosedur
yang bersangkutan. Nama-nama di dalam bagian DEKLARASI prosedur
tersebut dikatakan bersifat “lokal”.
Nama-nama lokal hanya dapat digunakan di dalam prosedur yang
melingkupinya saja. Sedangkan nama-nama yang dideklarasikan di luar
prosedur maupun program utama dikatakan bersifat “global”. Nama-nama
global dapat digunakan di bagian manapun di dalam program baik di
program utama maupun prosedur. Sebagai contoh tinjau program di bawah
ini:
Simpan dengan nama file : lat53.cpp :
#include<iostream.h>
#include<conio.h>
void angka(); //prototype prosedur
void main()
{
int x=22;
float y=3.75;
clrscr();
void angka()
{
int x = 55;
float y = 5.63;
Hasil :
ASB/AK
C++ Programming 54
b. Nama Global
Nama global adalah nama yang didefinisikan di luar prosedur manapun.
Nama ini dikenal di semua prosedur. Tinjau contoh program di bawah ini :
Simpan dengan nama file : lat53.cpp :
//prosedur dengan nama global
#include<iostream.h>
#include<conio.h>
int x=20; int y=23;
void angka( ) ;
void main( )
{
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 :
ASB/AK
C++ Programming 55
{
clrscr();
JumlahData(); //panggil prosedur jumlah elemen efektif larik
clrscr();
for(k=1;k<=N;k++)
cout<<nilai[k]<<endl;
CariMaks(); //panggil prosedur CariMaks
CariMin(); //panggil prosedur CariMin
}
void JumlahData()
{
cout<<"Jumlah data : ";cin>>N;
for(k=1;k<=N;k++)
{
cout<<"Nilai "<<k<< " = ";
cin >>nilai[k];
}
}
void CariMaks() // prosedur cari nilai maksimum
{
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 :
ASB/AK
C++ Programming 56
angka();
angka();
angka();
cout<<"Pada program utama nilai A = "<<A<<endl;
}
void angka()
{
static int A=100;
A++;
cout<<"Pada prosedur nilai A = "<<A<<endl;
}
Hasil :
ASB/AK
C++ Programming 57
Hasil :
ASB/AK
C++ Programming 58
ASB/AK
C++ Programming 59
prosedur tersebut untuk menampilkan sebuah tulisan C++ dengan cara sebagai
berikut :
tulis_cplus();
Sehingga pada prototipe void tulis_cplus(int jumlah) harus ditulis menjadi :
void tulis_cplus(int jumlah=10);
Maka programnya akan menjadi sebagai berikut:
Simpan dengan nama file : lat58.cpp :
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
void tulis_cplus(int jumlah=10);
void main()
{
clrscr();
tulis_cplus();
}
ASB/AK
C++ Programming 60
{
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 :
i=10;
cout<<"i = "<<i<<endl;
cout<<"r = "<<r<<endl;
r=55;
cout<<"i = "<<i<<endl;
cout<<"r = "<<r<<endl;
}
Hasil :
ASB/AK
C++ Programming 61
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
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.
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;
Hubungan antara parameter formal di prosedur dengan parameter aktual
di prosedur utama adalah sebagai berikut:
void hitung(int x, int y);
hitung(a,b);
ASB/AK
C++ Programming 63
Hasil :
hitung(a,b,c);
Parameter formal x akan diisi nilai parameter aktual a, yaitu 20
Parameter formal y akan diisi nilai parameter aktual b, yaitu 12
Parameter formal z akan diisi nilai parameter aktual c, yaitu 0
Pada modul prosedur, parameter formal z kemudian berganti nilai sebesar
x+y, sehingga parameter formal z berubah menjadi sebesar 20+12=32.
Nilai akhir dari parameter x,y,z adalah:
ASB/AK
C++ Programming 64
x = 20 y = 12 z = 32
Karena parameter formal dengan pengiriman parameter secara nilai
sifatnya lokal, maka perubahan-perubahan nilai parameter di prosedur
tidak akan mempengaruhi nilai parameter aktual di modul utama, dengan
demikian nilai parameter c tetap tidak terpengaruh oleh perubahan
parameter z, jadi masih 0 karena pengiriman ini bersifat searah.
int a,b,c;
a=20;b=12;c=0;
hitung(a,b,c);
cout<<"a = "<<a<<" b = "<<b<<" c = "<<c<<endl;
}
Hasil :
ASB/AK
C++ Programming 65
hitung(a,b,c);
Terlihat bahwa pengiriman parameter by reference merupakan pengiriman
dua arah (bolak-balik), sehingga perubahan nilai di parameter formal akan
mempengaruhi nilai parameter aktual juga. Pada contoh di atas, nilai
parameter aktual c akan mengikuti perubahan dari parameter formal Z.
Sehingga setelah titik pemanggilan nilai parameter aktual yang tadinya 0 akan
digantikan (substitute) oleh perubahan nilai parameter formal z, sehingga
akhir dari nilai parameter aktual c adalah 32 dan bukan 0.
temp=a;
a=b;
b=temp;
}
Hasil :
ASB/AK
C++ Programming 66
Hasil :
ASB/AK
C++ Programming 67
faktorial( N, F );
Parameter formal fak akan digantikan oleh parameter aktual N, dan parameter
formal hasil digantikan oleh parameter aktual F. Karena parameter ini
merupakan parameter masukan/keluaran (by reference) maka nilai pada
parameter formal akan dikirim balik ke parameter aktual, sehingga pada saat
program dijalankan bukan parameter formal hasil yang ditampilkan,
melainkan parameter aktual F.
TUGAS 5
Buatlah Program seperti tampilan dibawah ini.
Simpan dengan nama : tugas51.cpp
ASB/AK
C++ Programming 68
Pilihan
----------------
[1] Perkalian
[2] Pembagian
[3] Keluar
----------------
Pilihan [1..3] :
Ketentuan Soal
Jika pilihan 1 maka : Jika Pilihan 2 maka :
Perkalian Pembagian
---------------------- ---------------------
Masukkan Nilai A = 100 Masukkan Nilai A = 100
Masukkan Nilai B = 20 Masukkan Nilai B = 20
Hasil A x B = 2000 Hasil A / B = 5
Coba Lagi [Y/T] : Coba Lagi [Y/T] :
Program :
BAB 6
FUNGSI
ASB/AK
C++ Programming 69
ASB/AK
C++ Programming 70
Nama fugsi
Argumen
ASB/AK
C++ Programming 71
#include<iomanip.h>
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)
{ Panggil fungsi kuadrat disertai
daftar parameter aktualnya
return(I * I);
}
Hasil :
{
clrscr();
for(int k=1;k<=10;k++)
cout<<setw(2)<<k
<<setw(2)<<" f "<<"("<<k<<")= "<<f(k)<<endl;
ASB/AK
C++ Programming 72
int f(int x)
{
return(2*x*x+5*x-8);
}
Hasil :
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);
}
ASB/AK
C++ Programming 73
Adakalanya suatu fungsi tidak perlu memiliki nilai balik. Misalnya fungsi
yang hanya dimaksudkan untuk menampilkan suatu keterangan saja. Pada
fungsi seperti ini, tipe nilai balik fungsi yang diperlukan adalah void.
Simpan dengan nama file : lat64.cpp :
//fungsi tanpa nilai balik
#include<iostream.h>
#include<conio.h>
void tampilkan_judul();
void main()
{
clrscr();
tampilkan_judul();
}
void tampilkan_judul()
{
cout<<"U & I Love C++"<<endl;
cout<<"Please Contact Us"<<endl;
cout<<"ARDI Information Technology"<<endl;
}
Hasil :
TUGAS 6
ASB/AK
C++ Programming 74
Program :
BAB 7
ASB/AK
C++ Programming 75
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
pengembangannya larik banyak digunakan untuk mengolah data yang
mempunyai nama dan tipe yang berbeda, seperti hasil ujian mahasiswa
dengan field-field misal NIM, NAMA, NILAI, INDEKS, dsb sehingga
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
ASB/AK
C++ Programming 76
Angka di dalam kurung siku menyatakan indeks larik. Setiap elemen larik
menyimpan sebuah nilai. Karena seluruh elemen larik bertipe sama maka
nilai yang disimpan oleh setiap elemen juga harus bertipe sama. Gambar 7.2
memperlihatkan larik bernama A yang setiap elemennya berisi nilai ujian akhir
8 orang mahasiswa.
A
1 80
2 75
3 60
4 82
5 59
6 76
7 87
8 71
ASB/AK
C++ Programming 77
int L[5];
char Nama[5] [25];
float Nilai[20];
void main()
{
int Nilai[5];
int k; // indeks larik
clrscr();
for (k=1; k<=5; k++)
{
cout<<”Nilai “ <<k<< “ = “;
cin >> Nilai[k];
}
clrscr();
cout<<”===============================”<<endl;
cout<<”Data Nilai Ujian Akhir Semester”<<endl;
cout<<”===============================”<<endl;
for(k=1; k<=5; k++)
cout<< setiosflags(ios::right)<<setw(6)<<Nilai[k]<< endl;
cout<<”===============================”<<endl;
}
ASB/AK
C++ Programming 78
Hasil :
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 :
ASB/AK
C++ Programming 79
void main()
{
float Nilai[N]; //larik dengan data nilai 5 orang mhs
int k;
float jumlah,Rata2;
clrscr();
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;
}
Hasil :
ASB/AK
C++ Programming 80
void main()
{
const Nmaks=100; //elemen larik dengan jumlah maksimum 100
float Nilai[Nmaks];
int k,N;
float jumlah,Rata2;
clrscr();
jumlah=0;
cout<<"Jumlah data ? ";
cin >> N;
for(k=1;k<=N;k++)
{
cout<<"Nilai " <<k<<" = ";
cin >> Nilai[k];
jumlah=jumlah+Nilai[k];
}
clrscr();
Rata2=jumlah/N;
cout<<"Data Nilai Ujian" << endl;
for(k=1;k<=N;k++)
cout<<Nilai[k]<<endl;
cout<<"Rata-rata = "<<Rata2<<endl;
}
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.
ASB/AK
C++ Programming 81
int jum_hari[12] =
{
31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
merupakan contoh pendefinisian larik bernama jum_hari yang terdiri dari 12
elemen bertipe integer dan secara berurutan (dimulai dari indeks 0) diberi nilai
31, 28 dan seterusnya.
31 28 31 30 31 30 31 31 30 31 30 31
0 1 2 3 4 5 6 7 8 9 10 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 :
//program inisialisasi larik
#include<iostream.h>
#include<conio.h>
void main()
{
int i;
int jum_hari[12] =
{
31,28,31,30,31,30,31,31,30,31,30,31
};
clrscr( ) ;
for(i=0;i<12;i++)
cout<<"jum_hari["<<i<<"] = "<<jum_hari[i]<<endl;
}
Hasil :
ASB/AK
C++ Programming 82
Terkadang kita ingin mencari nilai maksimum dari suatu larik, misalnya
mencari juara pertama dari sekumpulan skor sebuah pertandingan, mencari
juara kelas dan sebagainya. Pencarian nilai maksimum pada larik haruslah
data bertipe integer atau real.
Bila elemen larik sudah terurut menaik, harga maksimum langsung dapat
diperoleh pada elemen pertamanya. Tetapi bila elemen larik tersusun acak,
kita harus “mengunjungi” seluruh elemen larik satu persatu untuk
mendapatkan nilai maksimum. Terdapat tiga versi algoritma pencarian harga
maksimum:
a.Versi 1 :
Algoritma ini mengasumsikan nilai mula-mula (maks) adalah nilai yang
sangat kecil, misalnya dari kumpulan nilai ujian kita definisikan bahwa nilai
maksimum mula-mula adalah –999.
Teknik dari versi 1 ini dapat dijabarkan sebagai berikut:
Larik dikunjungi mulai dari elemen pertama.
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 nilai pada elemen tersebut menjadi
maksimum sementara sekarang.
Pada akhir kunjungan (yaitu setelah seluruh elemen larik dikunjungi,
nilai maksimum sementara menjadi nilai maksimum di seluruh elemen
larik.
Sebagai ilustrasi tinjau kembali contoh larik pada Gambar 7.3:
A
1 80
2 75
3 60
4 82
5 59
6 76
7 87
8 71
ASB/AK
C++ Programming 83
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 :
ASB/AK
C++ Programming 84
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:
A
1 80
2 75
3 60
4 82
5 59
6 76
7 87
8 71
ASB/AK
C++ Programming 85
void main()
{
int nilai[5]; //larik dengan data nilai 5 orang mhs
int k,maks;
clrscr();
for (k=1;k<=5;k++)
{
cout<<"Nilai " <<k<<" = ";
cin >> nilai[k];
}
maks=nilai[1];
for (k=2;k<=5;k++)
{
if (nilai[k] > maks)
maks=nilai[k];
}
cout<<"Nilai terbesar = "<<maks<<endl;
}
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).
ASB/AK
C++ Programming 86
clrscr();
cout<<"================" << endl;
cout<<"Data Nilai Ujian" << endl;
cout<<"================" << endl;
min=999; //nilai minimum sementara
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;
}
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;
}
ASB/AK
C++ Programming 87
Hasil :
ASB/AK
C++ Programming 88
ASB/AK
C++ Programming 89
}
else
cout<<”Maaf data yang Anda cari tidak ada”<<endl;
}
Hasil :
ASB/AK
C++ Programming 90
Hasil :
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'
ASB/AK
C++ Programming 91
Hasil :
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 )
ASB/AK
C++ Programming 92
ASB/AK
C++ Programming 93
Hasil :
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;
ASB/AK
C++ Programming 94
}
}
cout<<endl;
cout<<"Nilai sesudah terurut menaik = ";
for(k=1;k<=5;k++)
cout<<nilai[k]<< ' ';
}
Hasil :
ASB/AK
C++ Programming 95
TUGAS 7
Buatlah Program seperti tampilan dibawah ini.
Simpan dengan nama : tugas71.cpp
Program :
ASB/AK
C++ Programming 96
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 :
A B C „ \0„
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';
}
terakhir terdapat karakter NULL (karakter dengan nilai ASCII sama dengan
nol atau disimbolkan dengan „\0‟, yaitu tanda \ diikuti dengan nol).
Bila suatu string hanya berisi karakter NULL, string disebut sebagai string
kosong.
Karakter NULL merupakan ciri khas pengakhir string pada C++
Suatu string disebut sebagai string kosong kalau string tidak berisi
suatu karakter-pun. Konstanta string kosong ditulis sebagai berikut:
“”
8.3. Variabel String
Variabel string adalah variabel yang dipakai untuk menyimpan string,
misalnya:
char teks[10];
Merupakan pernyataan untuk mendefinisikan variabel string dengan
panjang maksimal 10 karakter (sudah termasuk karakter NULL). Perlu
diketahui, pernyataan di atas tidak lain adalah untuk mendefinisikan array
bertipe karakter.
Variabel string tidak lain adalah array bertipe char yang mengandung
elemen berupa karakter NULL, yang menyatakan akhir string.
void main()
{
char teks[13]; //string dengan panjang maksimal 12 karakter
clrscr();
cout<<"Masukkan sebuah teks : ";
cin >>teks;
cout<<"Teks yang Anda masukkan adalah "<<teks<<endl;
}
ASB/AK
C++ Programming 98
#include<iostream.h>
#include<conio.h>
void main()
{
char teks[13]; //string dengan panjang maksimal 12 karakter
clrscr();
cout<<"Masukkan teks : ";
cin.get(teks,13);
cout<<"NAMA = "<<nama<<endl;
ASB/AK
C++ Programming 99
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>
#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;
}
Berbeda dengan struktur pengulangan bilangan, pada struktur pengulangan
di atas sebuah string diulang sebanyak inisialisasi pada variabel string.
Namun untuk string berspasi harus ada pengakhiran karakter ber-ASCII nol
agar tidak muncul karakter diluar keinginan.
Selain cara di atas, untuk menyalin suatu string dapat digunakan fungsi
bernama strcpy. Bentuk notasinya adalah :
strcpy(string_target, string_asal)
Prototipe fungsi di atas ada dalam file header string.h.
//program salin string pake strcpy
#include<iostream.h>
#include<conio.h>
void main()
{
char teks[ ]="C++ Memang Handal";
char data[20];
clrscr();
strcpy(data,teks);
cout<<"Isi data : "<<data<<endl;
}
ASB/AK
C++ Programming 100
ASB/AK
C++ Programming 101
jum_punctuasi++;
if(isdigit(st[i]))
jum_digit++;
}
cout<<endl;
cout<<"Jumlah kapital = "<<jum_kapital<<endl;
cout<<"Jumlah huruf kecil = "<<jum_kecil<<endl;
cout<<"Jumlah digit = "<<jum_digit<<endl;
cout<<"Jumlah punctuasi = "<<jum_punctuasi<<endl;
}
hasil=strchr(teks,'B');
cout<<hasil<<endl;
}
Hasil program diatas : BCDE
ASB/AK
C++ Programming 102
letak=cari_kar(teks,'D');
cout<<"Huruf 'D' ada di urutan ke "<<letak<<endl;
}
int cari_kar(char *S, char D)
{
int i;
for(i=0;S[i];i++)
if(S[i]==D)
return(i+1);
return(0);
}
clrscr( ) ;
ASB/AK
C++ Programming 103
st[i] = toupper(st[i]);
cout<<st<<endl;
}
int hasil=strcmp(str1,str2);
if(hasil==0)
cout<<str1<<" = "<<str2<<endl;
else
if(hasil<0)
cout<<str1<<" < "<<str2<<endl;
else //(hasil > 0)
cout<<str1<<" > "<<str2<<endl;
}
Bila program dijalankan:
String pertama : a
String kedua : A
a>A
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:
ASB/AK
C++ Programming 104
clrscr( ) ;
/* 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 nama[25];
int hasil,jumlah;
long harga,total;
clrscr();
ASB/AK
C++ Programming 105
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))
{
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;
}
ASB/AK
C++ Programming 106
BAB 9
STRUKTUR (RECORD)
Gambar 9.1
Gambaran Lojik Struktur dengan N Buah Field
ASB/AK
C++ Programming 107
tahun
bulan
tanggal
nama tipe struktur merupakan sebuah nama tipe bentukan yang
didefinisikan sendiri oleh pemrogram.
ASB/AK
C++ Programming 108
#include<iostream.h>
#include<conio.h>
void main()
{
struct data_tanggal //pendeklarasian
{
int tahun;
int bulan;
int tanggal;
};
data_tanggal tanggal_lahir; //pendefinisian struktur
//mengakses anggota struktur
tanggal_lahir.tanggal=17;
tanggal_lahir.bulan=8;
tanggal_lahir.tahun=1945;
cout<<"Hari kemerdekaan kita adalah” <<tanggal_lahir.tanggal<<'/'
<<tanggal_lahir.bulan<<'/'
<<tanggal_lahir.tahun<<endl;
}
Bila program dijalankan :
Hari kemerdekaan kita adalah 17/8/1945
#include<iostream.h>
#include<conio.h>
void main()
{
struct data_tanggal //pendeklarasian
{
int tahun;
int bulan;
int tanggal;
};
data_tanggal tgl1,tgl2; //pendefinisian struktur
//penugasan per anggota
tgl1.tanggal=17;
tgl1.bulan=8;
tgl1.tahun=1945;
//penugasan antar variabel struktur
tgl2 = tgl1;
cout<<"Hari kemerdekaan kita adalah "<<tgl2.tanggal<<'/'
<<tgl2.bulan<<'/'
<<tgl2.tahun<<endl;
}
Bila program dijalankan :
Hari kemerdekaan kita adalah 17/8/1945
ASB/AK
C++ Programming 110
else
cout<<”Isi kedua struktur berbeda”<<endl;
struct tanggal_lahir
{
int tanggal;
struct data_pegawai int bulan;
{ int tahun;
char nip[11]; };
char nama[26];
long gaji;
tanggal_lahir tgl;
};
data_pegawai data;
#include<iostream.h>
#include<conio.h>
ASB/AK
C++ Programming 111
#include<iomanip.h>
void main()
{
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();
Bila digambarkan struktur lojik larik data ditunjukkan pada tabel di bawah ini:
NIP NAMA GAJI
ASB/AK
C++ Programming 112
Larik data dengan 100 elemen. Setiap elemen larik bertipe tersrtuktur (record).
Tiap record terdiri atas field NIP, NAMA dan GAJI
struct tanggal_lahir
{
int tanggal;
struct data_pegawai int bulan;
{ int tahun;
char nip[11]; };
char nama[26];
long gaji;
tanggal_lahir tgl;
};
data_pegawai data[Nmaks];
ASB/AK
C++ Programming 113
cout<<"NIP : ";cin>>data[k].nip;
cout<<"Gaji : ";cin>>data[k].gaji;
clrscr();
cout<<"Data kelahiran"<<endl;
cout<<"Tanggal : ";cin>>data[k].tgl.tanggal;
cout<<"Bulan : ";cin>>data[k].tgl.bulan;
cout<<"Tahun : ";cin>>data[k].tgl.tahun;
clrscr();
}
clrscr();
cout<<" DAFTAR GAJI"<<endl;
cout<<" KARYAWAN PT.ELANG PERSADA"<<endl;
cout<<endl;
cout<<"==========================================================="<<endl;
cout<<"No."
<<setw(5)<<"NIP"
<<setw(13)<<"NAMA"
<<setw(25)<<"Tgl Lahir"
<<setw(8)<<"GAJI"<<endl;
cout<<"==========================================================="<<endl;
for(k=0;k<N;k++)
{
cout<<setiosflags(ios::left)<<setw(5)<<k
<<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 (Nomor Induk Mahasiswa)
2. NamaMhs (Nama Mahasiswa)
3. Mata kuliah (MK) yang diambil mahasiswa tersebut (4 buah), berupa larik:
a. Kode mata kuliah ke-1 d. Kode mata kuliah ke-4
Nama mata kuliah ke-1 Nama mata kuliah ke-4
Nilai mata kuliah ke-1 Nilai mata kuliah ke-4
b. Kode mata kuliah ke-2
Nama mata kuliah ke-2
Nilai mata kuliah ke-2
c. Kode mata kuliah ke-3
Nama mata kuliah ke-3
Nilai mata kuliah ke-3
ASB/AK
C++ Programming 114
struct mata_kuliah
{
const Nmaks=100; char KodeMK[7];
struct data_mhs char NamaMK[20];
{ int nilai;
int nim; };
char nama[26];
mata_kuliah MK[4];
};
data_mhs data[Nmaks];
void main( )
{
const Nmaks=100;
struct mata_kuliah
{
char KodeMK[7];
char NamaMK[15];
int nilai;
};
struct data_mhs
{
int nim;
char nama[26];
mata_kuliah MK[4];
};
data_mhs data[Nmaks];
int k,i,N;
clrscr();
cout<<"Jumlah Mahasiswa : ";cin>>N;
clrscr();
for(k=0;k<N;k++)
{
cout<<"Data Mahasiswa "<<(k+1)<<endl;
cout<<"Nama : ";cin>>data[k].nama;
cout<<"NIM : ";cin>>data[k].nim;
clrscr();
for(i=0;i<4;i++)
{
ASB/AK
C++ Programming 115
for(k=0;k<N;k++)
{
cout<<setiosflags(ios::left)<<setw(12)<<data[k].nim
<<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 :
=================================================================
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
ASB/AK
C++ Programming 116
TI3021 Ekonomi_Teknik 69
IF3057 BPTR 71
=================================================================
NIM
data[Nmaks] Nama
Kode MK
MK[4] Nama MK
Nilai
clrscr();
ASB/AK
C++ Programming 117
}
clrscr();
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{
ASB/AK
C++ Programming 118
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;
}
Pada contoh di atas, variabel Lingkaran dideklarasikan sebagai suatu union
sebagai berikut:
union{
float kel;
double luas;
}Lingkaran;
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
Keliling
ASB/AK
C++ Programming 119
{
struct{
float kel;
double luas;
}Lingkaran;
float jari2;
clrscr();
cout<<"Jari-jari : ";cin>>jari2;
Lingkaran.kel=2*3.14*jari2;
Lingkaran.luas=3.14*jari2*jari2;
cout<<"Jari-jari ? ";cin>>jari2;
adhi=3.14*jari2*jari2;
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 :
x1 x 2 y y2
x3 dan y 3 1
2 2
ASB/AK
C++ Programming 120
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;
}
Bila program di atas dijalankan:
Titik P1 :
x1 : 4
y1 : 8
Titik P2 :
x2 : 2
y2 : 6
Titik tengah adalah : P3(3,7)
ASB/AK
C++ Programming 121
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 :
0xff4
........
0xff2 PX
80 X 0xff2
........
ASB/AK
C++ Programming 122
#include<iostream.h>
#include<conio.h>
void main()
{
int X=80; //variabel bukan pointer
int *PX; //variabel pointer
clrscr();
PX=&X; //mengisi variabel pointer dengan variabel alamat X
cout<<“Alamat X = “<<&X<<endl;
cout<<“PX = “<<PX<<endl;
}
Hasil dari program di atas:
Alamat X = 0x0064fe00
PX = 0x0064fe00
Dari program di atas terlihat bahwa pointer PX menunjuk kepada variabel
X bertipe integer. Karena pointer adalah alamat, maka sel memori yang berisi
nilai pointer berarti menyimpan alamat sel memori yang lain.
Bila PX diisi dengan alamat fisik peubah X, maka nilai yang disimpan oleh
X ditunjuk oleh PX menuju sel memori lain yang bertipe integer dan
alamatnya disimpan di dalam PX.
........
3001h 80 X
3003h 3001h PX
........
#include<iostream.h>
#include<conio.h>
ASB/AK
C++ Programming 123
void main()
{
int X=80; //variabel bukan pointer
int *PX; //variabel pointer
clrscr();
cout<<“Nilai X semula : “<<X<<endl;
PX=&X; //pointer menunjuk ke X
*PX=72; //Nilai yang ditunjuk diubah menjadi 72
cout<<“Nilai X sekarang : “<<X<<endl;
}
Hasil dari program di atas :
Nilai X semula : 80
Nilai X sekarang : 72
Pada contoh di atas variabel X ditunjuk oleh variabel pointer PX yang
kemudian diubah nilainya menjadi 72. Sehingga pada pencetakan terakhir
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; //variabel bukan pointer
int *PX; //variabel pointer
clrscr();
ASB/AK
C++ Programming 124
Dapat menunjuk ke
sebarang tipe data
int
float
Pointer void
char
Contoh: …
void *Ptr
#include<iostream.h>
#include<conio.h>
void main()
{
void *Ptr; //pointer tak bertipe
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;
}
Hasil dari program di atas :
Nilai integer yang ditunjuk oleh Ptr : 60
Nilai pecahan yang ditunjuk oleh Ptr : 37.5
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;
ASB/AK
C++ Programming 125
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 :
Nilai integer mula-mula : 80
Nilai integer sekarang : 77
Nilai pecahan mula-mula : 72.3
Nilai pecahan sekarang : 51.7
void main()
{
clrscr();
char *namahari[]={"Senin","Selasa","Rabu","Kamis","Jum'at",
"Sabtu","Minggu"};
for(int i=0;i<7;i++)
cout<<namahari[i]<<endl;
}
Pada contoh di atas, masing-masing nilai yang ditunjuk oleh elemen pointer dari array namahari dapat
diakses melalui indeksnya ( namahari[ i ] ).
ASB/AK
C++ Programming 126
}
clrscr();
for(k=0;k<5;k++)
cout<<*(Pnilai+k)<<endl;
getch();
}
Pointer
menunjuk ke
pointer
ASB/AK
C++ Programming 127
ubah_nilai(&a)
ASB/AK
C++ Programming 128
ASB/AK
C++ Programming 129
BAB 11
KELAS & OBYEK
11.1. Pendahuluan
Ide dasar pada bahasa berorientasi obyek (OOP) adalah
mengkombinasikan data-data dan fungsi untuk mengakses data menjadi
sebuah kesatuan unit. Unit ini dikenal dengan nama obyek (obyek). Obyek
sebenarnya mencerminkan pola kerja manusia dalam kehidupan sehari-
sehari. Sebuah obyek dapat diibaratkan sebagai departemen-departemen di
dalam sebuah perusahaan bisnis. Contoh departemen:
Penjualan
Akunting
Inventory
Obyek
Data
Fungsi Anggota
Fungsi Anggota
Gambar 11.1 Data dan fungsi pemanipulasi data pada suatu obyek
ASB/AK
C++ Programming 130
Obyek 1 Dept.
Data Penjualan
Data
Penjualan
Dept.
Obyek 2 Inventory
Data Data
Inventory
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
berorientasi obyek yaitu metode. Adapun pemanggilan fungsi anggota sering
disebut pengiriman pesan ke obyek.
ASB/AK
C++ Programming 131
ASB/AK
C++ Programming 132
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)
Polimorphism merupakan suatu konsep yang menyatakan sesuatu yang
sama dapat memiliki berbagai bentuk dan perilaku yang berbeda. Istilah ini
berasal dari bahasa Yunani, yang berarti “mempunyai banyak bentuk”.
cout<<Novel.judul<<endl;
cout<<Novel.pengarang<<endl;
cout<<Novel.jumlah<<endl;
}
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: //penambahan kata kunci
ASB/AK
C++ Programming 133
char judul[35];
char pengarang[25];
int jumlah;
};
void main()
{
clrscr();
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;
}
Selain menggunakan kata kunci public anggota-anggota pada suatu class
juga dapat menggunakan kata kunci private. Penggunaan private biasa
digunakan pada kelas untuk memproteksi anggota-anggota tertentu pada
kelas, agar tidak dapat diakses di luar kelas secara langsung. Untuk melihat
efek dari private dapat dilihat pada contoh 3 program di bawah ini:
#include<iostream.h>
#include<conio.h>
#include<string.h>
class Buku
{
private:
char judul[35];
char pengarang[25];
int jumlah;
};
void main()
{
clrscr();
terletak di dalam kelas biasa disebut anggota data dan fungsi yang terletak di
dalamnya disebut fungsi anggota (member function).
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.
void info()
ASB/AK
C++ Programming 135
{
cout<<"Judul : "<<judul<<endl;
cout<<"Pengarang : "<<pengarang<<endl;
cout<<"Jumlah Buku : "<<jumlah<<endl;
}
};
void main()
{
clrscr();
Buku novel;
novel.inisialisasi("Gun Of The Navarone","Alistair MacLean",12);
novel.info();
}
Pada program di atas, kelas Buku memiliki tiga buah anggota data (judul,
pengarang dan jumlah) dan dua buah anggota fungsi anggota
(inisialisasi()dan info()). Ketiga data anggota dinyatakan sebagai private.
Oleh karena itu, ketiga data ini tidak dapat diakses di luar kelas. Namun data
ini dapat diakes oleh kedua fungsi anggota dan semua fungsi anggota dapat
diakses di luar kelas, mengingat dinyatakan sebagai publik. Melalui kedua
fungsi inilah data kelas dapat diakses, misalnya pada fungsi main().
class Buku
{
private:
char judul[35];
.....
public: anggota data
void inisialisasi(...)
{
.......
}
void info()
{ fungsi anggota
....... fungsi anggota
}
};
ASB/AK
C++ Programming 136
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.
Pernyataan di dalam fungsi main():
Buku novel;
digunakan untuk mendefinisikan obyek bernama novel.
Selanjutnya di dalam fungsi main() ini kita dapat memanggil fungsi
anggota obyek novel dengan cara berikut:
novel.inisialisasi("Gun Of The Navarone","Alistair MacLean",12);
novel.info();
Bentuk pemanggilannya :
nama_obyek.nama_fungsi(argumen)
ASB/AK
C++ Programming 137
kelas sama
judul judul
pengarang pengarang
jumlah jumlah
fiksi = novel
#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;
cout<<"Jumlah buku : "<<jumlah<<endl;
}
};
void main()
{
clrscr();
Buku novel,fiksi; //pendefinisian obyek
//memberi nilai terhadap dua obyek
fiksi=novel;
fiksi.info();
}
ASB/AK
C++ Programming 139
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()
{
.
}
};
Bentuk kedua, pada kelas hanya terdapat deklarasi fungsi anggota
(prototype), sehingga bentuknya menjadi semacam berikut:
class Buku
{
private:
char judul[35];
char pengarang[25];
int jumlah;
public:
void inisialisasi(char *Judul, char *Pengarang, int Jumlah);
void info();
};
Definisi fungsi anggota ditempatkan di luar kelas.
Definisi untuk kedua fungsi anggota pada kelas Buku ditulis menjadi :
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;
} Nama kelas
Nama fungsi
anggota
void Buku::info()
{
cout<<”Judul : “<<judul<<endl;
ASB/AK
C++ Programming 140
Operator resolusi
Nama anggota data
lingkup
kelas Buku
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.
#include<iostream.h>
#include<conio.h>
#include<string.h>
class Movie
{
ASB/AK
C++ Programming 141
private:
char judul[20];
char cast[40];
char genre[30];
public:
void inisialisasi(char *judul, char *cast, char *genre);
void info();
};
void main()
{
clrscr();
void Movie::info()
{
cout<<"Judul : "<<judul<<endl;
cout<<"Pemain : "<<cast<<endl;
cout<<"Rating : "<<genre<<endl;
}
Pada pernyataan :
void Movie::inisialisasi(char *judul, char *cast, char *genre)
{
strcpy(Movie::judul,judul);
} nama anggota
nama kelas
ASB/AK