Anda di halaman 1dari 141

C++ Programming

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

pelaksanaannya dan disebut Compiler.


Perrhatikan proses penerjemahan pada bahasa C++ dibawah ini.
Linker
Object File

Using
Editor

Compile
Source Code

Linker
Object File

Executable
File

Gambar 1.1. Proses Kompilasi pada C++

ASB/AK

C++ Programming

1.2. Deklarasi Variabel dan Tipe Data


a. Variabel
Variabel merupakan sebuah penamaan dalam program yang nilainya
dapat diubah saat pelaksanaan program. Pendeklarasian variabel harus
diikuti dengan jenis tipe data yang ingin didefinisikan. Pendeklrasian
variabel beserta tipe datanya adalah sebagai berikut :
tipe_data nama_variabel;

Penamaan suatu variabel mempunyai syarat-syarat sebagai berikut :


Tidak boleh ada spasi, contoh : data pegawai;
Tidak boleh ada operator aritmatika, contoh : data-pegawai;
Tidak boleh ada angka didepan nama variabel, contoh : 6Siswa
Tidak boleh ada karakter khusus seperti #, $, %, ^, dan sebagainya.
Contoh penamaan yang benar dan salah dapat dilihat pada tabel di bawah
ini :
KETERANGAN
Benar
Salah

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

-128 hingga +127


-32768 hingga +32767
-2.147.438.648

hingga

+2.147.438.647
ASB/AK

C++ Programming

float
double
long double

4 byte
8 byte
10 byte

3.4x10-38 hingga 3.4x1038


1.7x10-308 hingga 1.7x10308
3.4x10-4932 hingga 3.4x104932

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
Merupakan sebuah penamaan yang nilainya tidak dapat diubah selama
pelaksanaan program. Sebuah kostanta dideklarasikan sebagai berikut :
const tipe_data nama_variabel = nilai;

ASB/AK

C++ Programming

Berbeda dengan variabel, sebuah konstanta harus diisikan nilainya


langsung pada saat pendeklarasian.
Contoh : const int nilai = 70;
d. Keyword (kata kunci)
Merupakan pengenal khusus yang digunakan bagi proses kompilasi, dan
kata kunci ini tidak dapat digunakan sebagai variabel atau identifier.
asm
auto
break
case
char
class
const
continue
default
delete
do
double

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

1.3. Memulai Pemrograman C++


a. Tampilan Program
Didalam

tampilan

pemrograman

C++

menyediakan

fasilitas

IDE

(Integrated Development Environment), dimana semua proses pembuatan


program dapat dilakukan melalui fasilitas ini. Program ini memiliki modus teks
(CUI/ Character User Interface) dan modus grafis (GUI/ Graphical

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

Fungsi-fungsi lain yang ditulis


oleh pemrogram komputer

ASB/AK

C++ Programming

Gambar 1.2. Penulisan program pada C++


Bagian-bagian pada struktur penulisan program C++ :
1) File Header
File header merupakan file-file yang berisi berbagai deklarasi, seperti
fungsi, variabel, dan sebagainya. File header diikuti dengan kata #include
didepannya

yang

akan

menginstruksikan

kepada

kompiler

untuk

menyisipkan file library, misal : <iostream.h>, <iomanip.h>, <conio.h>


dan sebagainya.
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;
}

Pada contoh program di atas :

//program tampil pesan Selamat Datang, merupakan komentar yang

tidak akan diproses oleh program. Selain menggunakan tanda garis


miring dua ( // ), sebuah komentar dalam C++ dapat berupa simbol ( /*
komentar */ ).
Contoh : /* program tampil pesan Selamat Datang */

#include, merupakan instruksi kepada kompiler untuk menyisipkan file

lain saat program dikompilasi. Dalam C++ semua operasi yang


dilibatkan dalam program berada pada file-file pustaka (library file)

ASB/AK

C++ Programming

dengan nama extension file-nya adalah .h Misal operasi input dan


output standar diletakkan di file pustaka <iostream.h>

void main( ) , merupakan fungsi main( ) yang merupakan awal dan akhir

dari pembuatan program.

Semua yang terletak di dalam tanda { } disebut blok. Tanda { pada


fungsi main (awal tubuh fungsi) menyatakan awal eksekusi program.
Sedangkan tanda } pada fungsi main( ) merupakan akhir eksekusi
program. Kata void yang mendahului main( ) dipakai untuk menyatakan
bahwa fungsi ini tidak memiliki nilai balik.

Di dalam tanda { } terkandung sejumlah unit yang disebut pernyataan


(statement). Pada contoh di atas :
cout<<Selamat Datang<<endl;

merupakan contoh sebuah pernyataan. Pada contoh di atas,


pernyataan tersebut digunakan untuk menampilkan tulisan yang
terletak pada sepasang tanda petik ganda. Dalam hal ini, tulisan yang
terletak pada sepasang tanda petik ganda di atas disebut konstanta
string.
Setiap pernyataan harus diakhiri dengan tanda titik koma ( ; ).

Perintah endl (end line) digunakan untuk mengakhiri baris pernyataan


dan akan berpindah baris baru dan bukan tersambung ke kanan.
Contoh : cout<<Selamat Datang<<endl;
cout<<Saya suka C++<<endl;

Hasil output dari program di atas adalah :


Selamat Datang
Saya suka C++

Berbeda bila kita membuat pernyataan string sebagai berikut :


cout<<Selamat Datang
<< Saya suka C++<<endl;

Pada tampilan hasil program akan menjadi :


Selamat Datang Saya suka C++

TUGAS 1
1. Apakah hasil tampilan dari program dibawah ini
ASB/AK

C++ Programming

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
jumlah=x+y;

//statement ungkapan menghitung jumlah x dan y

cout<<x<< + <<y<< = <<jumlah<<endl;

/* menampilkan nilai

jumlah ke piranti keluaran atau layar */


}

Hasil :

2. Buatlah program seperti pada tampilan dibawah ini.


Simpan dengan nama file : tugas12.cpp
Harga Barang adalah : 5000
Jumlah Barang adalah : 10
Barang terjual adalah: 3
Maka :
Sisa Barang Sekarang : 7
Harga Bayar adalah : 15000

3. Buatlah program seperti pada tampilan dibawah ini.


Simpan dengan nama file : tugas13.cpp
Saya sekarang mulai memahami bahasa C++
Nama saya adalah : ARDI //gunakan variabel
ARDI berusia 18 tahun dan 2 tahun lagi berumur 20 tahun

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

2.2. Macam-macam Operator


a. Operator Aritmatika
Operator aritmatika pada bahasa C++ merupakan operator yang
tergolong sebagai operator binary atau unary, karena harus mempunyai
lebih dari satu operand (Lihat tabel 2.1) :
Tabel 2.1 Operator Aritmatika
Operator

Keterangan

Contoh

Perkalian

2*3

Pembagian

7/2

Sisa
pembagian

7%2

Penjumlahan

5+4

Pengurangan

54

Penjelasan

Khusus untuk tipe data


integer

Simpan dengan nama file : lat21.cpp


#include <iostream.h>
void main()
{
int a,b,c,d,e;
a=5,b=10,c=15;
d=a+b*c-b;
e=c%b;
cout << Hasil D adalah

: <<d<<endl;

cout << Hasil penaikan nilai D : <<d++<<endl;


cout << Sisa bagi c%b

: <<e<<endl;

}
Hasil :

ASB/AK

C++ Programming

Simpan dengan nama file : lat22.cpp


//hitung nilai diskriminan
#include<iostream.h>
#include<conio.h>
void main( )
{
int a,b,c,d;
clrscr( ) ;
a=5; b=600; c=5;
d=b*b-4*a*c;
cout<<Nilai diskriminan = <<d<<endl;
}
Hasil :

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

Pada contoh berikut, operator penugasan dipakai di dalam pernyataan


penugasan dan ungkapan.
a = 2 + (b =1);
Variabel b mula-mula diisi nilai 1, kemudian variabel a diisi dengan hasil
ungkapan 2+1.
3) Penugasan berganda
Suatu penugasan berganda berbentuk seperti contoh berikut :
a = b = c = d = e = 1;
Pada bentuk seperti ini, mula-mula e diisi dengan 1, kemudian d diisi
dengan e, c diisi dengan d, b diisi dengan c dan a diisi dengan a.
Pernyataan diatas identik dengan :
a = 1; b =1; c =1; d = 1; e =1;
c. Operator Penaikan dan Penurunan
Berkaitan dengan operasi aritmatika, C++ seperti bahasa pendahulunya
C, menyediakan operator yang disebut sebagai operator penaikan
(increment) dan operator penurunan (decrement). Kedua operator ini
digunakan pada operand bertipe bilangan bulat (integer).
Tabel 2.2 Operator penurunan & penaikan
Operator

Keterangan

++

Operator penaikan

--

Operator penurunan

Operator penaikan digunakan untuk menaikkan nilai variabel sebesar


satu, sedangkan operator penurunan dipakai untuk menurunkan nilai
variabel sebesar satu. Penempatan operator terhadap variabel dapat
dilakukan di muka atau di belakangnya.
Penempatan operator terhadap variabel dibedakan menjadi dua :

Penaikan di depan

Penaikan di belakang

1) Penaikan/ penurunan di depan


Operator

penaikan/

penurunan

di

depan

variabel

bila

hanya

mengandung satu operand tidak ada perbedaannya, namun bila sudah


mengandung

dua

operand

akan

mempunyai

perbedaan.

Pada

penaikan/penurunan di depan, variabel yang terhubung oleh operator ini

ASB/AK

C++ Programming

11

akan diprioritaskan terlebih dahulu untuk dinaikkan/ diturunkan terlebih


dahulu sebesar nilai yang didefinisikan. Perhatikan contoh dibawah ini :
Simpan dengan nama file : lat23.cpp
//melihat efek penaikan di depan variabel
#include<iostream.h>
#include<conio.h>
void main( )
{
int x, y;
clrscr( ) ;
x = 5;
y = 10 + ++x;
cout<< x = <<x<<endl;
cout<< y = <<y<<endl;
}

Hasil :

Pada contoh program di atas, nilai x dinaikkan terlebih dahulu sebesar


satu sehingga bernilai 6, kemudian baru dijumlahkan dengan 10.
Sehingga hasil nilai y adalah 16.
2) Penaikan/ penurunan di belakang
Pada penaikan/penurunan di belakang, variabel yang terhubung oleh
operator ini akan dinaikkan/diturunkan di akhir sebesar nilai yang
didefinisikan. Di bawah ini diberikan contoh program operator penaikan/
penurunan di depan variabel :
Simpan dengan nama file : lat24.cpp
//melihat efek penaikan di depan variabel
#include<iostream.h>
#include<conio.h>
void main( )
{
int x, y;
ASB/AK

C++ Programming

12

clrscr( ) ;
x = 5;
y = 10 + x++;
cout<< x = <<x<<endl;
cout<< y = <<y<<endl;
}

Hasil :

Pada contoh program di atas, nilai x dinaikkan di akhir setelah


dijumlahkan dengan 10. Oleh karena itu hasil dari nilai x = 6 dan y = 15.

d. Operator Majemuk (Pemendekan)


Operator majamuk (pemendekan) merupakan operator yang berfungsi
untuk memendekkan penulisan operasi penugasan seperti :
x = x + 2;

menjadi x += 2;

y = y * 4;

menjadi y *= 4;

Daftar berikut memberikan seluruh kemungkinan operator kombinasi


dalam suatu pernyataan dan pernyataan padanannya.
Tabel 2.3 Operator majemuk
Operator

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

Simpan dengan nama file : lat25.cpp


//melihat efek penaikan di depan variabel
#include<iostream.h>
#include<conio.h>
void main( )
{
int x;
ASB/AK

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 :

e. Operator Relasi dan Logik


Operator relasi banyak diterapkan pada statement kendali. Operator ini
biasa digunakan untuk membandingkan dua buah nilai. Keseluruhan
operator relasi pada C++ dapat dilihat pada tabel 2.4 di bawah ini :
Tabel 2.4 Operator Relasi dan logik
Operator

Keterangan

==

Sama dengan (bukan penugasan)

!=

Tidak sama dengan

>

Lebih dari

<

Kurang dari

>=

Lebih dari atau sama dengan

<=

Kurang dari atau sama dengan

&&

Dan (AND)

||

Atau (OR)

Tidak (NOT)

Hasil ungkapan ini bernilai :


Jika nilai x sama dengan nilai y maka bernilai 1
Jika nilai x tidak sama dengan y maka bernilai 0
Simpan dengan nama file : lat26.cpp
//melihat relasi dan logik
#include<iostream.h>
ASB/AK

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 :

f. Operator Manipulasi bit (bitwise)


Operator ini digunakan untuk memanipulasi data dalam bentuk bit.
Perhatikan pada tabel 2.5 di bawah ini :
Tabel 2.5 Operator Relasi dan logik
Operator

Keterangan

NOT (komplemen)

<<

Geser bit ke kiri

>>

Geser bit ke kanan

&

Dan (AND)

XOR

Atau (OR)

Simpan dengan nama file : lat26.cpp


//melihat relasi dan logik
#include<iostream.h>
#include<conio.h>
void main( )
{
ASB/AK

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

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 :

2. Jawablah pertanyaan dibawah ini dengan benar dan tepat !


a. Sebutkan macam-macam operator :
..

b. Tanda operator && pada operator logik mempunyai arti :

c. Berapakah nilai untuk 100+50-10*2/2*4 = ( buktikan


dengan membuat program tersebut ) simpan dengan nama file :
tugas22.cpp

BAB 3
ASB/AK

C++ Programming

17

TEKNIK INPUT OUTPUT


3.1. cout
Pemakaian cout merupakan sebuah obyek untuk meletakkan informasi ke
standar output (monitor).
cout<<Selamat Belajar C++ \n;

Pada contoh di atas terdapat karakter khusus berupa newline yang


penulisannya berupa \n yang menyatakan akhir statement (pindah baris).
Karakter-karakter seperti \n di atas dikenal dengan sebutan escape sequence.
Pada C++ terdapat sejumlah karakter yang tergolong sebagai escape sequence,
seperti yang tercantum pada tabel 3.1 di bawah ini:
Tabel 3.1 Karakter-karakter khusus
Karakter
\0
\a
\b
\f
\n
\r
\t
\v
\\
\
\
\?
\ooo
\xhh

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)

Sebagai contoh, pernyataan berikut akan menampilkan tulisan Masukkan


hanya bilangan ganjil disertai bunyi bel:
cout<<Masukkan hanya bilangan ganjil!! \a \n;

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

Simpan dengan nama file : lat32.cpp


//mengatur lebar tampilan suatu nilai
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
void main( )
{
int bil=123;
clrscr( ) ;
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()
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;

Pernyataan di atas mengirimkan tiga buah karakter (a,b dan c) serta


sebuah karakter null. Pada layar, ends akan menimbulkan sebuah karakter
kosong.
e. setiosflags()
Manipulator setiosflags() merupakan manipulator yang dapat dipakai
untuk mengontrol sejumlah tanda format yang tercantum pada tabel 3.3 di
bawah ini:
Tabel 3.3 Tanda format untuk menampilkan setiosflags( ) dan resetiosflags( )
Nama

Keterangan

Tanda format
ios::left
ios::right
ios::scientific
ios::fixed
ios::dec
ios::oct
ios::hex
ios::uppercase

Menyetel rata-kiri terhadap lebar field yang diatur melalui setw( )


Menyetel rata-kanan terhadap lebar field yang diatur melalui setw( )
Memformat keluaran dalam bentuk notasi eksponensial
Memformat keluaran dalam bentuk notasi desimal
Memformat keluaran dalam basis 8 (oktal)
Memformat keluaran dalam basis 16 (hexadesimal)
Memformat huruf pada notasi heksadesimal ke bentuk huruf kapital
Menampilkan awalan 0x untuk bilangan heksadesimal atau 0 (nol)

ios::showbase

untuk bilangan oktal


Menampilkan titik desimal pada bilangan pecahan yang tidak

ios::showpoint

memiliki bagian pecahan


Menampilkan titik desimal pada pecahan yang tidak memiliki bagian

ios::showpos

pecahan
Untuk menampilkan tanda + pada bilangan positif

Simpan dengan nama file : lat34.cpp


//penggunaan tanda ios::left untuk rata-kiri
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
void main( )
{
ASB/AK

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 :

Hasil tersebut ditunjukkan oleh tabel di bawah ini:


setw(3)

R
R
R

p
p
p

setw(7)

.
.
.

4
3
7

7
5
5

5
0
0

0
0
0

0
0

Simpan dengan nama file : lat35.cpp


//penggunaan tanda ios::right untuk rata-kanan
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
void main( )
{
int harga1=475000;
int harga2=35000;
int harga3=7500;
clrscr();
cout<<setw(3)<<Rp.<<setiosflags(ios::right)<<setw(7)
<<harga1<<endl;
cout<<setw(3)<<Rp.<<setiosflags(ios::right)<<setw(7)
<<harga2<<endl;
cout<<setw(3)<<Rp.<<setiosflags(ios::right)<<setw(7)
<<harga3<<endl;
}

Hasil :

Hasil tersebut ditunjukkan oleh tabel di bawah ini:


setw(3)

setw(7)

0
ASB/AK

C++ Programming
R
R

p
p

22
.
.

5
7

0
5

0
0

0
0

Simpan dengan nama file : lat36.cpp


//penggunaan manipulator setprecicion dengan tanda ios::fixed dan
ios::scientific
#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 :

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>
ASB/AK

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 :

Simpan dengan nama file : lat38.cpp :


//membaca data bertipe karakter
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
void main()
{
const char A[]="Vibra 128";
const char B[]="Live Value";
const char C[]="Santa Cruz";
char nama[20],kode;
int jumlah;
long harga,total;
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
ASB/AK

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 :

3.4. Fungsi getch() dan getche()


Fungsi getch()dan getche()berguna untuk membaca sebuah karakter tanpa
perlu menekan Enter. Selain itu fungsi ini juga dapat dipakai untuk membaca
tombol seperti Spasi, Tab ataupun Enter dan juga banyak dipakai oleh
pemrogram untuk menunggu menekan sebarang tombol agar keluar dari
program.
Apabila fungsi ini digunakan, file header bernama conio.h harus disertakan
dalam program. Namun ada perbedaan antara fungsi getch()dan getche():

getch() : tidak menampilkan karakter dari tombol yang ditekan

getche() : menampilkan karakter dari tombol yang ditekan

ASB/AK

C++ Programming

25

Simpan dengan nama file : lat39.cpp :


//melihat efek penggunaan fungsi getch() dan getche()
#include<iostream.h>
#include<conio.h>
void main()
{
char karakter;
clrscr();
cout<<"Masukkan sebuah : ";
karakter=getch();
cout<<"Anda mengetik "<<karakter<<endl;
cout<<"Masukkan lagi sebuah karakter : ";
karakter=getche();
cout<<endl;
//ganti spasi
cout<<"Anda mengetik "<<karakter<<endl;
cout<<"Tekan sebarang tombol untuk keluar dari program..!!"
<<endl;
getch();
}

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

berupa instruksi yang menyuruh komputer untuk

melakukan sesuatu. Di dalam bahasa C++ terdapat banyak jenis statement, yaitu
:
4.1 . Statement Kosong
ASB/AK

C++ Programming

27

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.
4.2 . Statement Ungkapan
Statement ungkapan (expression statement) merupakan statement yang
dibentuk dari suatu ungkapan yang diakhiri dengan titik koma.
Fahreinhat = Celcius*1,8 + 32;
y = x + 2;

4.3 . Statement Kendali


Statement kendali (control statement) merupakan statement yang berfungsi
mengendalikan proses dari program. Mengendalikan proses dari program dapat
berupa : Penyeleksian kondisi (Pemilihan), Pengulangan, atau Lompatan
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 :
ASB/AK

C++ Programming

28

//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 :

Simpan dengan nama file : lat42.cpp :


//mencari bilangan terbesar dari tiga buah bilangan bulat
#include<iostream.h>
#include<conio.h>
void main( )
{
int x,y,z;
clrscr( ) ;
cout<<Nilai x ? ;cin>>x;
cout<<Nilai y ? ;cin>>y;
cout<<Nilai z ? :cin>>z;
if ((x > y) && (x > z))
cout<<Bilangan terbesar adalah <<x<<endl;
else
if ((y > x) && (y > z))
cout<<Bilangan terbesar adalah <<y<<endl;
else
// (z x dan z y)
cout<<Bilangan terbesar adalah <<z<endl;
}

Hasil :

Simpan dengan nama file : lat43.cpp :


//mencari indeks dari nilai ujian mahasiswa
ASB/AK

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

berada di dalam lingkungan statement if lainnya. Bentuk notasi algoritma


statement if tersarang adalah sebagai berikut:
Simpan dengan nama file : lat44.cpp :
/* mencari nilai terbesar dari tiga buah bilangan bulat
menggunakan if tersarang */
#include<iostream.h>
#include<conio.h>
void main()
{
int A,B,C;
clrscr();
cout<<"Masukkan nilai A : ";cin>>A;
cout<<"Masukkan nilai B : ";cin>>B;
cout<<"Masukkan nilai C : ";cin>>C;
ASB/AK

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 :

Simpan dengan nama file : lat45.cpp :


//seleksi spg dengan if tersarang
#include<iostream.h>
#include<conio.h>
void main()
{
int usia;
clrscr();
cout<<"Umur ? ";cin>>usia;
if(usia > 17)
if(usia < 30)
cout<<"Diterima"<<endl;
else
//(usia >= 30)
cout<<"Ditolak"<<endl;
else //(usia <= 17)
cout<<"Ditolak"<<endl;
}

Hasil :

Simpan dengan nama file : lat46.cpp :


//seleksi rating berdasar badan sensor film
ASB/AK

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 :

b. Statement pemilihan switch


Pernyataan
menjalankan

switch

salah

satu

adalah

peryataan

pernyataan

dari

yang

digunakan

beberapa

untuk

kemungkinan

pernyataan, berdasarkan nilai dari sebuah ungkapan dan nilai penyeleksi.


Secara singkatnya, pernyataan ini merupakan bentuk pernyataan pemilihan
berganda.
Statement switch juga diunakan untuk menyederhanakan bentuk
pernyataan if, namun pada prinsipnya memang ada struktur program yang
harus menggunakan statement switch ataupun if.
Notasi algoritma untuk pernyataan switch pada C++ adalah sebagai
berikut :
switch
{
case ungkapan1;
pernyataan_1;
break;
case ungkapan2;
ASB/AK

C++ Programming

32
pernyataan_2;
break;

....
default
/* optional */
pernyataan_x; /* optional * /
}

Pada pernyataan switch, ungkapan dapat berupa ungkapan, konstanta


ataupun variabel. Adapun ungkapan1, ungkapan2 dan seterusnya dapat
berupa sebarang konstanta bertipe int atau char.
Program berikut memberikan gambaran pemakaian switch. Program
digunakan untuk menghitung luas, keliling dan diagonal dari suatu persegi
panjang yang berbentuk menu :
Simpan dengan nama file : lat46.cpp :
//Program menu hitung Segi empat
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<iomanip.h>
void main()
{
int pil;
float panjang,lebar,luas,kel,diag;
clrscr();
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;
cout<<"Pilih nomor menu (1/2/3/4): ";
cin >> pil;
cout<<"============================="<<endl;
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;
ASB/AK

C++ Programming

33

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


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>

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

(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
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

Batas penaikan/ penurunan


ASB/AK

C++ Programming

35

for (abjad =A; abjad<=Z; abjad++)


cout<<abjad<<endl;
}

nilai akhir

Hasil :

Simpan dengan nama file : lat48.cpp :


//hitung rata-rata nilai
#include<iostream.h>
#include<conio.h>
void main( )
{
int k;
//pencacah
int N;
//jumlah data nilai
float nilai, //nilai yang dimasukkan
jumlah, //pencatat jumlah total nilai
rata2; //rata-rata nilai
clrscr( ) ;
jumlah=0;
cout<<Jumlah data : ;cin>>N;
clrscr( ) ;
for(k=1;k<=N;k++)
{
cout<<Nilai <<k<< : ;cin>>nilai;
jumlah=jumlah+nilai;
}
clrscr( ) ;
rata2=jumlah/N;
cout<<Rata-rata nilai = <<rata2<<endl;
}

Hasil :

b. For tersarang (nested for)

ASB/AK

C++ Programming

36

For tersarang merupakan pernyataan for di dalam pernyataan for


lainnya. Perulangan for yang berada di dalam akan diproses terlebih
dahulu sampai waktu habis, kemudian perulangan for yang lebih luar baru
akan bertambah, mengerjakan perulangan for yang lebih dalam lagi.
Notasi algoritma untuk for tersarang adalah sebagai berikut:
for(ungkapan1; ungkapan2; ungkapan3)
begin
for(ungkapan1; ungkapan2; ungkapan3)
begin
pernyataan1;
pernyataan2;
...
pernyataanN;
end
end

Simpan dengan nama file : lat49.cpp :


//melihat efek for tersarang
#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 :

ASB/AK

C++ Programming

37

Simpan dengan nama file : lat49a.cpp :


//membuat segitiga bintang
#include<iostream.h>
#include<conio.h>
void main( )
{
int tinggi,
//menyatakan tinggi segitiga
baris,
//pencacah untuk baris
kolom;
//pencacah untuk kolom
clrscr( ) ;
cout<<Tinggi segitiga : ;cin>>tinggi;
clrscr( ) ;
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
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 :

Badan pengulangan berisi dua instruksi, yaitu:


cout<<Welcome to Information Technology<<endl; dan
k++;

Kondisi pengulangan adalah k< 5, artinya selama k masih < 5, maka


badan pengulangan boleh dimasuki.

k harus terdefinisi nilainya sebelum pengulangan dilaksanakan pertama


kali.

Instruksi yang mengubah nilai peubah kondisi adalah k++; dimana


instruksi ini mencacah jumlah pengulangan, sehingga jika k 5,
pengulangan dihentikan.

Pada akhir pengulangan, nilai k 5.


Simpan dengan nama file : lat49c.cpp :
ASB/AK

C++ Programming

39

//menghitung rata-rata nilai


#include<iostream.h>
#include<conio.h>
void main( )
{
int k,N;
float x,rata2;
clrscr( ) ;
cout<<Jumlah data : ;cin >> N;
clrscr( ) ;
jumlah=0;
k=1;
while(k<N)
{
cout<<Nilai <<k<< : ;cin>>x;
jumlah=jumlah+x;
}
// k 5
clrscr( ) ;
rata2=jumlah/N;
cout<<Rata-rata nilai = <<rata2<<endl;
}

Hasil :

Simpan dengan nama file : lat49d.cpp :


//hitung jumlah deret
#include<iostream.h>
#include<conio.h>
void main( )
{
int k,x, jumlah;
clrscr( ) ;
jumlah=0;
k=1;
cout<<Nilai X <<k<< : ;cin>>x;
while(x != 999)
{
jumlah=jumlah+x;
cout<<Nilai X <<k<< : ;cin>>x;
k++;
}
// x = 999
clrscr( ) ;
cout<<Jumlah deret = <<jumlah<<endl;
}
ASB/AK

C++ Programming

40

Hasil :

Pada program di atas sebelum nilai x diisi dengan 999 yang


merupakan peubah kondisi bernilai false maka badan pengulangan masih
tetap dimasuki.
Selain itu, pernyataan while juga dapat digunakan untuk menekan
suatu tombol karakter agar proses program dapat diulang atau tidak.
Simpan dengan nama file : lat49e.cpp :
//program tekan tombol y untuk mengulang dan t untuk keluar
#include<iostream.h>
#include<conio.h>
void main( )
{
float panjang, lebar, luas;
char pil;
clrscr( ) ;
pil = y ;
while(pil == y)
{
cout<<Panjang ? ;cin>>panjang;
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

ASB/AK

C++ Programming

41

Pernyataan do-while juga berguna untuk mengulang proses. Bentuk dari


pernyataan do-while ini adalah sebagai berikut:
do
{
pernyataan1;
pernyataan2;
...
pernyataanN;
} while(ungkapan);

Bentuk pernyataan1 hingga pernyataanN dijalankan secara berulang


sampai ungkapan bernilai salah (sama dengan nol). Namun berbeda dengan
while, pengujian ungkapan dilakukan dibelakang (setelah bagian pernyataan).
Simpan dengan nama file : lat49f.cpp :
#include<iostream.h>
#include<conio.h>
void main( )
{
int k;
//variabel pencacah
clrscr( ) ;
k=0;
//inisialisasi
do {
cout<< Welcome to Information Technology<<endl;
k++;
} while(k< 5);
}

Hasil :

Simpan dengan nama file : lat49g.cpp :


//konversi Celcius ke Fahreinhat
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
void main( )
{
float Celcius, Fahreinhat;
clrscr();
ASB/AK

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

// peubah kondisi bernilai false (bil 6)

Hasil :

Simpan dengan nama file : lat49i.cpp :


//program berhenti bila nilai x yang dimasukkan 50
#include<iostream.h>
#include<conio.h>
void main()
{
int k,N;
float x,jumlah,rata2;
clrscr();
cout<<"Jumlah data : ";cin>>N;
jumlah=0;
k=0;
while(k<N)
{
cout<<"X"<<(k+1)<<" = ";cin>>x;
if(x >= 50)
break;
//keluar dari struktur while
jumlah=jumlah+x;
k++;
}
clrscr();
rata2=jumlah/k;
cout<<"Rata-rata = "<<rata2<<endl;
}

Hasil :

Dapat disimpulkan bahwa dengan adanya pernyataan break, sebuah


pengulangan dibatasi oleh dua kondisi, yaitu pernyataan break dan batas
pengulangan dari struktur itu sendiri.
4.6. Pernyataan Continue
Kegunaan dari pernyataan continue merupakan kebalikan dari break.
Pernyataan continue dipakai untuk mengarahkan eksekusi ke putaran atau iterasi

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;

/* kembali ke struktur for bila nilai x yang


dimasukkan adalah genap */

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

//hitung jumlah nilai jika hanya genap


#include<iostream.h>
#include<conio.h>
void main()
{
int k,N,x,jumlah;
clrscr();
cout<<"Jumlah data : ";cin>>N;
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 :

4.7. Pernyataan goto dan berlabel


Pernyataan goto adalah pernyataan yang mengarahkan eksekusi ke
pernyataan yang berlabel (pernyataan yang di awali oleh suatu nama label dan
tanda titik dua (:).
Bentuk pernyataan goto dan pernyataan berlabel:
goto label;
label : pernyataan;

Simpan dengan nama file : lat49l.cpp :


//melihat efek goto
#include<iostream.h>
#include<conio.h>
void main()
{
clrscr();
cout<<"Tes goto "<<endl;
ASB/AK

C++ Programming

46

goto selesai;
cout<<"Hai saya kok tidak disapa"<<endl;
selesai:
cout<<"Selesai...."<<endl;
}

Hasil :

Simpan dengan nama file : lat49m.cpp


#include<iostream.h>
#include<conio.h>
#include<ctype.h>//untuk toupper()
#include<stdlib.h>//untuk exit()
void main()
{
char jawab;
long int a,b,c;
hitung :
clrscr();
cout<<Nilai A= ;cin>>a;
cout<<Nilai B= ;cin>>b;
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 :

ASB/AK

C++ Programming

47

Simpan dengan nama file : lat49n.cpp :


#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
void main()
{
int pil;
clrscr();
pil=1;
while(pil != 6){
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;
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();
ASB/AK

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 :

4.8. Pernyataan exit()


Suatu eksekusi program dapat dihentikan melalui pemanggilan fungsi exit().
Hal ini biasa dilakukan jika di dalam suatu eksekusi terdapat suatu kondisi yang
tidak dikehendaki. Bila fungsi ini digunakan, maka file header stdlib.h perlu
disertakan.
Simpan dengan nama file : lat49n.cpp :
//menghentikan program dengan exit()
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
void main()
{
int bil;
cout<<"Masukkan nilai bilangan : ";cin>>bil;
if(bil>=0)
ASB/AK

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] :

Jika Pilihan 2 maka :


Pengurangan
--------------------Masukkan Nilai A = 40
Masukkan Nilai B = 30
Hasil A - B
= 10
Coba Lagi [Y/T] :
ASB/AK

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 :

Memudahkan dalam mengembangkan program. Hal ini merupakan kunci


dalam pembuatan program yang terstruktur.

Menghemat ukuran program, bila ada sederetan instruksi yang sama


digunakan pada beberapa tempat di dalam program.

ASB/AK

C++ Programming

51

5.2. Pemanggilan Prosedur


Prosedur diakses dengan cara memanggil nama (prototype) nya dari
program pemanggil, diikuti dengan daftar parameter aktual (bila ada). Karena
prosedur menghasilkan nilai, maka nilai tersebut dapat ditampung dalam sebuah
peubah yang bertipe sama dengan tipe prosedur (lihat diagram pemanggilan
prosedur).
void main( )
{
.
prosedur( ) ;
.
.
prosedur( ) ;
.
}

void nama_prosedur( )
{

Gambar 5.1. Pemanggilan prosedur


Simpan dengan nama file : lat51.cpp :
//prosedur membuat garis
#include<iostream.h>
#include<conio.h>
void garis( ) ;
// prototype prosedur garis
void main( )
{
clrscr( ) ;
garis( ) ;
// panggil prosedur garis
cout<<Selamat Belajar C++<<endl;
garis( ) ;
// panggil prosedur garis
}
void garis( )
{
cout<< ================= <<endl;
}

Hasil :

Simpan dengan nama file : lat52.cpp :


#include<iostream.h>
#include<conio.h>
void RataRata( ) ;
ASB/AK

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 :

5.3. Nama Lokal, Global dan Statis


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 :
ASB/AK

C++ Programming

53

#include<iostream.h>
#include<conio.h>
void angka();
void main()
{
int x=22;
float y=3.75;
clrscr();

//prototype prosedur

cout<<"Pada program utama x = "<<x


<<" y = "<<y<<endl;
angka();

//panggil prosedur angka

}
void angka()
{
int x = 55;
float y = 5.63;
cout<<"Pada prosedur angka x = "<<x
<<" y = "<<y<<endl;
}

Hasil :

Tampak bahwa perubahan x dan y pada angka( ) tidak mempengaruhi


nama (variabel)

bernama sama

pada

main( ) (program utama). Ini

membuktikan bahwa nama-nama tersebut bersifat lokal bagi masing-masing


prosedur yang mendefinisikannya.
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( )
ASB/AK

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 :

Simpan dengan nama file : lat54.cpp :


//cari nilai maksimum dan minimum dengan nama global
#include<iostream.h>
#include<conio.h>
const Nmaks=100;
int k,maks,min,N;
int nilai[Nmaks];
void JumlahData( ) ; //prototype prosedur jumlah elemen
void CariMaks( ) ;
//prototype cari nilai maksimum larik
void CariMin( ) ;
//prototype cari nilai minimum larik
void main()
{
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
{
ASB/AK

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 :

c. Nama (Variabel) Statis


Baik nama global maupun lokal dapat berkedudukan sebagai variabel
statis. Suatu variabel statis mempunyai:

Jika variabel lokal berdiri sebagai variabel statis, maka:

variabel

tetap

hanya

dapat

diakses

pada

prosedur

yang

mendefinisikannya.

variabel tidak hilang saat eksekusi berakhir. Nilainya akan dikenali


pada pemanggilan prosedur untuk tahap berikutnya,

Inisialisasi oleh pemrogram akan dilakukan sekali saja selama


program dijalankan. Jika tidak ada inisialisasi secara eksplisit,
variabel diisi dengan nol.

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

nama global tersebut (hal ini bermanfaat pada pemrograman file


berganda atau kode program ditaruh pada beberapa file.
Nama statis diperoleh dengan menambahkan kata kunci static di
depan tipe variabel pada pernyataan pendefinisian. Sebagai contoh :
Simpan dengan nama file : lat55.cpp :
//program melihat efek dari
//variabel statis
#include<iostream.h>
void angka();
void main()
{
int A=20;
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 :

Terlihat bahwa nilai A = 100 hanya diinisialisasikan sekali kemudian


dinaikkan sebesar 1 (oleh A++; ), setelah itu nilai yang dinaikkan akan
disimpan di dalam memori kemudian dinaikkan kembali oleh perintah A++; .
Oleh karena itu, nilai pada prosedur yang muncul adalah terurut menaik
sejumlah penaikan yang didefinisikan, yaitu 101, 102, 103 dan bukan 101,
101, 101 (jika static tidak digunakan).

5.4. Operator Lingkup


Pada C++ terdapat operator berupa dua buah tanda titik-dua ( : : ). Operator
ini disebut resolusi lingkup (scope resolution operator). Kegunaannya untuk
mengakses variabel yang didefinisikan di luar suatu prosedur. Hal ini sangat
bermanfaat kalau di dalam suatu prosedur yang hendak mengakses variabel
tersebut terdapat variabel lokal (variabel yang didefinisikan di dalam prosedur
ASB/AK

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 :

Program di atas memperlihatkan bahwa walaupun di dalam prosedur terdapat


variabel lokal yang namanya sama dengan nama variabel eksternal, kedua
variabel di atas tetap dapat diakses (Pada bahasa C, variabel global tidak dapat
diakses dengan keadaan biasa kecuali ditambah notasi ::x ).

5.5. Nilai Bawaan untuk Argumen Prosedur


Salah satu keistimewaan C++ yang sangat bermanfaat dalam pemrograman
adalah adanya kemampuan untuk menyetel nilai bawaan (default ) argumen
prosedur. Argumen-argumen yang mempunyai nilai bawaan nantinya dapat tidak
disertakan di dalam pemanggilan prosedur dan dengan sendirinya C++ akan
menggunakan nilai bawaan dari argumen yang tidak disertakan.
Sebelum membahas penyetelan nilai bawaan dari argumen prosedur,
perhatikan contoh berikut:
Simpan dengan nama file : lat57.cpp :
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
void tulis_cplus(int jumlah);
void main()
ASB/AK

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 :

Bila pemanggilan prosedur diubah menjadi tulis_cplus() maka akan terjadi


kesalahan,

sebab

dalam

prototipe

telah

disebutkan,

bahwa

prosedur

tulis_cplus( ) mempunyai argumen bertipe int, namun pada pernyataan di depan


tidak terdapat argumen di dalam tanda ( ) .
Pada

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();

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

59

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 :

Pada pemanggilan nama prototoype tulis_cplus( ) tidak perlu lagi diberikan


argumen berupa angka untuk melakukan pengulangan.
Simpan dengan nama file : lat59.cpp :
#include<iostream.h>
#include<conio.h>
void ulang(char kar='+', int jumlah=5);
void main()
{
clrscr();
ulang();
ulang(',10);
ulang('*');

//mencetak karakter + sebanyak 5 kali


//mencetak karakter sebanyak 10 kali
//mencetak karakter * sebanyak 5 kali

}
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

int &ref = nama_variabel;

Tanda & mengawali nama referensi.


Setelah pendeklarasian seperti di atas, ref menjadi nama alias dari
nama_variabel. Pengubahan nilai terhadap nama_variabel dapat dilakukan
melalui nama_variabel itu sendiri ataupun melalui referensi ref, sebagaimana
dapat dilihat pada contoh di bawah ini:
Simpan dengan nama file : lat59a.cpp :
//program prosedur dengan referensi
#include<iostream.h>
#include<conio.h>
void main( )
{
int i;
int &r=i;
clrscr( ) ;

//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;

Hubungan antara parameter formal di prosedur dengan parameter aktual


di prosedur utama adalah sebagai berikut:
void hitung(int x, int y);
hitung(a,b);

Terlihat bahwa nilai-nilai parameter aktual a dan b di prosedur (modul)


utama dikirimkan ke parameter formal x dan y. Dengan demikian, nilai
parameter x dan y di prosedur akan berisi nilai yang sama dengan
parameter a dan b di prosedur utama. Sehingga nilai a=20 dan b=12 akan
langsung diisikan pada x dan y kemudian akan menghasilkan nilai z yaitu
z=x+y =20+12=32. Dan ingat karena z dideklarasikan di dalam bagian
prosedur maka dia bersifat lokal dan hanya dapat digunakan pada bagian
prosedur yang mendefinisikannya.
Simpan dengan nama file : lat59c.cpp :
#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;
ASB/AK

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 :

Hubungan dari pengiriman parameter secara nilai adalah sebagai berikut:


void hitung(int x, int y, int z);

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:
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.
b. Parameter Masukan/Keluaran (Parameter by Reference)
Pada teknik pemrograman menggunakan parameter masukan/keluaran
(parameter by reference), bila parameter aktual diubah nilainya di dalam
badan prosedur, maka sesudah pemanggilan prosedur nilai parameter aktual
di titik pemanggilan juga berubah. Berbeda dengan parameter masukan yang
ASB/AK

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 :

Hubungan antara parameter formal dengan parameter aktual dengan


pengiriman parameter by reference adalah sebagai berikut:
void hitung(int &x, int &y, int &z);

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
ASB/AK

C++ Programming

65

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.
Simpan dengan nama file : lat59e.cpp :
//prosedur dengan parameter referensi
#include<iostream.h>
#include<conio.h>
void tukar(int &a, int &b);
void main()
{
int a,b;
clrscr();
a=23;b=71;
cout<<"Nilai sebelum ditukar : "<<endl;
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
tukar(a,b);
cout<<"Nilai sesudah ditukar : "<<endl;
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
}
void tukar(int &a, int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}

Hasil :

Dengan menggunakan referensi, nilai a dan b pada program utama


main( ) dapat

ditukarkan

dari

dalam

prosedur

tukar( ) .

Pada

saat

pemanggilan :
tukar(a,b);

dilakukan, C++ akan mengirimkan alamat dari variabel a dan b di program


utama secara otomatis ke prosedur tukar( ) . Oleh karena itu, nilainya dapat
ASB/AK

C++ Programming

66

diubah. Parameter dengan referensi sangat berguna untuk melewatkan


struktur atau objek yang besar ke dalam prosedur. Dengan memakai
parameter by reference, hanya alamat yang akan dilewatkan dan bukan
struktur atau objek itu sendiri. Keuntungannya mempercepat eksekusi dan
menghemat stack (untuk meletakkan argumen ke stack pada saat
pemanggilan prosedur)
Selain itu akan membuat argumen struktur atau objek gampang dipakai di
dalam prosedur itu sendiri.
Simpan dengan nama file : lat59f.cpp :
//prosedur cari faktorial dengan parameter by reference
#include<iostream.h>
#include<conio.h>
void faktorial(int &fak, int &hasil);
void main()
{
int N,F;
clrscr();
cout<<"Berapa faktorial : ";cin>>N;
faktorial(N,F);
cout<<N<<" Faktorial = "<<F<<endl;
}
void faktorial(int &fak, int &hasil)
{
int k;
hasil=1;
for(k=2;k<=fak;k++)
hasil=hasil*k;
}

Hasil :

Hubungan antara parameter formal dengan parameter aktual adalah sebagai


berikut:
void faktorial(int &fak, int &hasil)

faktorial( N, F );
ASB/AK

C++ Programming

67

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
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] :

Jika Pilihan 2 maka :


Pembagian
--------------------Masukkan Nilai A = 100
Masukkan Nilai B = 20
Hasil A / B
= 5
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

1. x = 2, maka f (2) = 2.22 + 5.2 8 = 10


2. x = 1, y = 2, maka H(1,2) = 3.1 2 + 1.2 = 3

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.

6.2. Pendefinisian Fungsi


Sebagaimana halnya prosedur, struktur fungsi sama dengan struktur
algoritma yang sudah kita kenal: ada bagian header yang berisi nama fungsi
dan spesifikasi fungsi, bagian DEKLARASI, dan badan fungsi. Setiap fungsi
mempunyai nama yang unik serta daftar parameter formal. Notasi algoritma
untuk mendefinisikan fungsi adalah:

function nama_fungsi( input daftar parameter formal) tipe hasil


{ spesifikasi fungsi, menjelaskan apa yang dilakukan dan yang
dikembalikan oleh fungsi }
DEKLARASI
{ semua nama yang dipakai di dalam algoritma fungsi dideklarasikan
disini. Nama yang didefinisikan di dalam DEKLARASI lokal hanya
dikenal dan dipakai di dalam fungsi ini saja }
DESKRIPSI
{ badan fungsi, berisi instruksi-instruksi untuk menghasilkan nilai yang
akan dikembalikan oleh fungsi }
return hasil { pengembalian nilai yang dihasilkan fungsi }
Bila ditranslasikan ke dalam bahasa C++, maka notasi algoritma untuk
fungsi dalam bahasa C++ adalah:

ASB/AK

C++ Programming

70

Nama fugsi
Argumen

long kuadrat(long I)

Tidak diakhiri tanda titik


koma

{
return (I * I);
}

Tipe argumen
Menentukan nilai
balik

Tipe nilai balik

Pernyataan return di dalam fungsi digunakan untuk memberikan nilai


balik fungsi. Pada contoh di atas, fungsi kuadrat( ) memberikan nilai balik
berupa nilai kuadrat dari argumen.

6.3. Pemanggilan Fungsi


Fungsi dipanggil dengan cara memanggil namanya dari program
pemanggil, diikuti dengan daftar parameter aktual. Perhatikan contoh program
di bawah ini:

Simpan dengan nama file : lat61.cpp :


//membuat sendiri fungsi kuadrat
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
int kuadrat(int I);

//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);
}

Panggil fungsi kuadrat disertai


daftar parameter aktualnya

Hasil :
ASB/AK

C++ Programming

71

Karena nilai balik berada dimana fungsi tersebut berada, maka


pemanggilan fungsi dapat langsung digunakan untuk dicetak hasilnya,
sebagai berikut:
cout<<kuadrat(k)<<endl;

Karena parameter pada fungsi selalu merupakan parameter masukan (by


value), maka nilai parameter aktual akan dikirimkan ke tipe data pada
argumen fungsi. Sehingga pada pengisian nilai k=1, nilai tersebut akan dikirim
ke parameter formal fungsi berupa I.
Simpan dengan nama file : lat62.cpp :
//program fungsi f(x)=2x2 + 5x 8 didalam selang (1 s/d 10) dengan selang 1
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
int f(int x);
void main()

//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

Simpan dengan nama file : lat63.cpp :


//fungsi mencari bilangan terbesar dari 3 buah bil bulat
#include<iostream.h>
#include<conio.h>
int maks3(int a, int b, int c);
//prototype fungsi
void main()
{
clrscr();
Panggil fungsi maks3 disertai
int x,y,z;
daftar parameter aktualnya

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);
}

6.4. Fungsi Tanpa Nilai Balik


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;
ASB/AK

C++ Programming

73

Hasil :

Namun pada hakekatnya, fungsi tanpa nilai balik adalah merupakan


prosedur, dimana kita harus memanggil prototype dari prosedur tersebut
tanpa melibatkan obyek cout.
Tetapi pernyataan return secara eksplisit juga diperkenankan.

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

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
ASB/AK

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

Gambar 7.1 Gambaran lojik elemen larik

Larik yang bernama A dengan delapan buah elemen dapat dibayangkan


sebagai kumpulan kotak yang terurut (vertikal atau horizontal) seperti yang
diperlihatkan pada gambar 7.1 di atas. Tiap kotak pada larik diberi indeks
integer 1,2,3, , 8. Tiap elemen larik ditulis dengan notasi A[1], A[2], , A[8].
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

75

60

82

59

76

87

71

Gambar 7.2 Elemen larik berisi data tipe integer

ASB/AK

C++ Programming

76

7.2. Mendefinisikan Larik di dalam DEKLARASI


Larik adalah struktur data yang statik, artinya jumlah elemen larik harus
sudah diketahui sebelum program dieksekusi. Jumlah elemen larik tidak
dapat diubah, ditambah, atau dikurangi selama pelaksanaan program.
Mendefinisikan larik di bagian DEKLARASI berarti:
1. Mendefinisikan banyaknya elemen larik, dan
2. Mendefinisikan tipe eleman larik
Mendefinisikan banyaknya elemen larik berarti memesan sejumlah tempat di
memori sebanyak elemen larik yang bersangkutan. Tipe elemen larik dapat
berupa tipe dasar (integer, real, boolean, string), tipe terstruktur (tipe
bentukan seperti record), atau bahkan bertipe larik lain.
Contoh pendefinisian larik di dalam bagian DEKLARASI:
Misal:
L adalah nama peubah yang mempunyai 5 buah elemen yang bertipe
integer. Indeks larik bertipe integer dimulai dari 1.
Nama adalah peubah larik yang mempunyai 5 buah elemen bertipe
string dengan panjang string 25.
Nilai adalah peubah larik yang mempunyai 20 buah elemen yang bertipe
real.
Cara mendefinisikan ketiga buah peubah larik tersebut pada C++ adalah:
int L[5];
char Nama[5] [25];
float Nilai[20];

7.3. Cara Mengacu Elemen Larik


Elemen larik diacu melalui indeksnya. Nilai indeks harus terdefinisi.
Dengan mengacu pada larik yang sudah didefinisikan sebelum ini, maka
contoh-contoh cara mengacu elemen larik adalah:
Misal indeks larik didefinisikan sebagai peubah k bertipe integer, maka
cara mengacu eleman larik tersebut adalah:
L[k];
Nama[k];
Nilai[k]
ASB/AK

C++ Programming

77

Elemen larik juga dapat diacu melalui isi nilai dari indeks larik tersebut:
L[4]

{ mengacu elemen ke-empat dari larik L }

Simpan dengan nama file : lat71.cpp :


//Program larik berisi nilai ujian Mahasiswa
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
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;
}

Hasil :

Simpan dengan nama file : lat72.cpp :


//program larik data nama mahasiswa
#include<iostream.h>
#include<conio.h>
void main()
{
char Nama[5][25]; //larik dengan data nama 5 orang mhs
/* angka 25 menunjukkan panjang string
adalah banyaknya elemen larik */

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 :

Simpan dengan nama file : lat73.cpp :


//program hitung rata-rata dari kumpulan nilai
#include<iostream.h>
#include<conio.h>
void main()
{
float Nilai[N];
int k;
float jumlah,Rata2;
clrscr();

//larik dengan data nilai 5 orang mhs

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 :

7.4. Jumlah Elemen Efektif Larik


Seringkali sebuah elemen dalam larik yang didefinisikan di dalam
DEKLARASI tidak kita gunakan semua. Bila larik A didefinisikan 100 elemen,
mungkin tidak seluruh 100 elemen yang dipakai. Jumlah elemen efektif larik
disimpan di dalam nama peubah tertentu, misalnya N. Namun perlu diingat
bahwa jumlah elemen larik sudah harus diisi sebelumnya.
Simpan dengan nama file : lat74.cpp :
//program hitung rata-rata dari kumpulan nilai
//dengan elemen efektif
#include<iostream.h>
#include<conio.h>
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;
}
ASB/AK

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.

7.5. Inisialisasi Larik


Menginisialisasikan larik adalah memberikan harga awal untuk seluruh
elemen larik. Seperti halnya variabel biasa, larik juga dapat diberi nilai awal
(diinisialisasi) pada saat didefinisikan. Cara mendeklarasikan elemen larik
yang diberi nilai awal adalah:

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
0

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

//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 :

7.6. Mencari Nilai Maksimum Larik


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.

ASB/AK

C++ Programming

82

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

maks = 999

80

75

60

82

59

76

87

71

(nilai maksimum sementara)

A[1] > maks? Ya

maks

A[1]

A[2] > maks? Tidak

(maks tetap = 80)

A[3] > maks? Tidak

(maks tetap = 80)

A[4] > maks? Ya

maks

A[5] > maks? Tidak

(maks tetap = 82)

A[6] > maks? Tidak

(maks tetap = 82)

A[7] > maks? Ya

maks

A[8] > maks? Tidak

(maks tetap = 87)

A[4]

A[7]

(maks = 80)

(maks = 82)

(maks = 87)

(proses perbandingan selesai, karena seluruh elemen larik sudah dikunjungi),


sehingga diperoleh:
maks = 87

(nilai maksimum larik)

Simpan dengan nama file : lat75.cpp :


//program cari nilai maksimum
#include<iostream.h>
#include<conio.h>
void main()
{
int nilai[5];
//larik dengan data nilai 5 orang mhs
int maks,k;
ASB/AK

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]

(nilai maksimum sementara, maks = 80)

A[2] > maks? Tidak

(maks tetap = 80)

A[3] > maks? Tidak

(maks tetap = 80)

A[4] > maks? Ya

maks

A[5] > maks? Tidak

(maks tetap = 82)

A[6] > maks? Tidak

(maks tetap = 82)

A[7] > maks? Ya

maks

A[8] > maks? Tidak

(maks tetap = 87)

A[4]

A[7]

(maks = 82)

(maks = 87)

(proses perbandingan selesai, karena seluruh elemen larik sudah dikunjungi),


sehingga diperoleh:
maks = 87

(nilai maksimum larik)

Simpan dengan nama file : lat76.cpp :


//program cari nilai maksimum larik dengan
//elemen pertama larik dianggap sebagai nilai maksimum sementara
#include<iostream.h>
#include<conio.h>
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;
}
ASB/AK

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).

7.7. Mencari nilai minimum larik


Teknik mencari nilai minimum pada larik dikembangkan dengan cara
pemikiran yang sama seperti pencarian harga maksimum larik.
a.Versi 1 :
Simpan dengan nama file : lat77.cpp :
//program cari nilai minimum
#include<iostream.h>
#include<conio.h>
void main()
{
int nilai[5];

//larik dengan data nilai 5 orang mhs

int min,k;
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;

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 :

7.8. Mencari Nilai Tertentu di dalam Larik


Mencari sesuatu di dalam sekumpulan data sering kita lakukan, misalnya
mencari No. Telp di dalam buku telepon, alamat dan sebagainya. Algoritma
pencarian merupakan algoritma yang sangat penting, karena program
komputer umumnya berisi proses menyimpan, mencari, memanipulasi dan
menulis data.
ASB/AK

C++ Programming

87

Sama halnya mencari nilai maksimum dan minimum, pencarian data


tertentu di dalam larik juga merupakan proses mengunjungi elemen larik satu
per satu, mulai dari elemen pertama dengan membandingkan apakah elemen
tersebut sama dengan nilai yang dicari. Jika sama, maka pencarian sukses,
dan jika belum sama, maka pencarian dilanjutkan ke elemen berikutnya.
Proses pencarian diteruskan sampai nilai yang dicari ditemukan atau seluruh
elemen larik sudah diperiksa.
Masalah pencarian nilai tertentu pada larik dijelaskan sebagai berikut:
Diketahui sebuah larik integer

yang sudah terdefinisi nilai elemen-

elemennya. Diberikan nilai X yang bertipe integer. Carilah apakah nilai X


terdapat di dalam larik. Kalau X ditemukan, i x diisi dengan indeks tempat X
berada

(hanya

kemunculan

yang

pertama

kali

ditemukan

yang

dipertimbangkan dalam masalah ini). Sebaliknya kalau X tidak ditemukan di


dalam larik tersebut, i x diisi dengan nilai 0. Sebagai contoh perhatikan
gambar dibawah ini :
A
1

80

75

60

82

59

76

87

71

Misal nilai yang dicari adalah X = 76


Pemeriksaan dilakukan terhadap elemen larik berisi nilai 80, 75, 60, 82, dan 59
X ditemukan pada elemen (indeks) ke-6, jadi i x

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

a. Versi 1 (pembandingan tanpa peubah boolean)


Hasil: indeks larik tempat X berada
Setiap elemen larik A dibandingkan dengan X.

ASB/AK

C++ Programming

88

Proses pembandingan terus dilakukan selama elemen A[k] tidak sama


dengan X dan indeks larik belum sama dengan N.
Pembandingan dihentikan bila A[k] = X atau indeks larik sudah sama
dengan N. Nilai yang dikembalikan adalah indeks larik (ix) tempat X
ditemukan.
Jika X tidak ditemukan maka ix diisi dengan 0.
Simpan dengan nama file : lat79.cpp :
//program cari data pada larik
#include<iostream.h>
#include<conio.h>
void main()
{
const Nmaks=100;
int nilai[Nmaks];
int k,N,x,ix;
clrscr();
cout<<"Jumlah data : ";
cin >>N;
clrscr();
for(k=1;k<=N;k++)
{
cout<<"Nilai " <<k<<" = ";
cin >> nilai[k];
}
cout<<"Masukkan data yang ingin dicari: ";cin >>x;
k=1;
while((k<N)&&(nilai[k] != x))
{
k++;
}
// k = N atau nilai[k] = x
if (nilai[k] == x)
{
ix =k;
cout<<Data ditemukan pada indeks ke <<ix<<endl;
}
else
cout<<Maaf data yang Anda cari tidak ada<<endl;
}

Hasil :

b.Versi 2 (pembandingan dengan peubah boolean)


Hasil: indeks larik tempat X berada.
ASB/AK

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 :

Simpan dengan nama file : lat79a.cpp :


ASB/AK

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 :

7.9 Mengurutkan data


Pengurutan (sorting) adalah proses mengatur sekumpulan obyek menurut
urutan atau susunan tertentu. Urutan obyek tersebut dapat menaik
ASB/AK

C++ Programming

91

(ascending) atau menurun (descending). Bila N buah obyek (data) disimpan


di dalam larik A, maka pengurutan menaik berarti menyusun elemen larik
sedemikian sehingga:
A[1] A[2] A[3] A[N]

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();

//larik dengan data nilai 5 orang mhs


//peubah bantu untuk pertukaran
//pengurutan untuk jumlah langkah
//pencacah untuk pengapungan pada setiap elemen
//jumlah elemen efektif larik

cout<<"Jumlah data : ";cin>>N;


for(k=1;k<=N;k++)
{
cout<<"Nilai " <<k<<" = ";
cin >> nilai[k];
}
cout<<"Nilai sebelum terurut menaik = ";
for(k=1;k<=N;k++)
cout<<nilai[k]<< ' ';
cout<<endl;
for(i=1;i<=(N-1);i++)
{
for(k=N;k>=(i+1);k--)

//hanya ada N-1 langkah


/* pembandingan dilakukan hanya
sampai indeks ke-2 */

{
if(nilai[k]<nilai[k-1])

/* membandingkan antara nilai


pada elemen maksimum dgn
(elemen-1) maksimum */

{
temp=nilai[k];
nilai[k]=nilai[k-1];
nilai[k-1]=temp;
}
}
}
for(k=1;k<=N;k++)
cout<<nilai[k]<< ' ';
}

Hasil :

2. Pengurutan Pilih (Selection sort)


Pengurutan pilih digunakan atas dasar gagasan memilih elemen
maksimum/minimum dari larik, lalu menempatkan elemen maksimum
/minimum itu pada awal atau akhir larik (elemen terujung). Selanjutnya
elemen terujung tersebut diisolasi dan tidak disertakan pada proses
ASB/AK

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';
}

8.2. Konstanta String


Suatu konstanta string ditulis dengan awalan dan akhiran tanda petik ganda
( ). Misalnya:
C++

Konstanta string seperti di atas disimpan dalam memori secara


berurutan. Setiap karakter menempati memori sebesar 1 byte. Setelah
karakter yang 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

ASB/AK

C++ Programming

97

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.

8.4. Memasukkan Data String dari Keyboard


a.Data String Tanpa Spasi
Setelah suatu variabel string didefinisikan, kita dapat mengisikan data ke
variabel tersebut. Pemasukan data dapat ditangani oleh cin.
//input data string tanpa spasi
#include<iostream.h>
#include<conio.h>
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;
}

b.Data String Dengan Spasi


Untuk memasukkan variabel string dengan spasi maka diperlukan
sebuah perintah cin.get(nama_variabel, panjang_string).
//input data string dengan spasi
#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<<"Teks yang Anda masukkan adalah "<<teks<<endl;
}
//input data string dengan spasi
#include<iostream.h>
#include<conio.h>
void main()
ASB/AK

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;
}

Bila program di atas dijalankan:


Masukkan teks 1 : Bahasa C++
Masukkan teks 2 : Teks pertama yang Anda masukkan adalah Bahasa C++
Teks kedua yang Anda masukkan adalah

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;
}

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;
}

d.Fungsi & Makro Berbasis Karakter


Pada C++ terdapat sejumlah fungsi ataupun makro (semacam fungsi,
tetapi didefinisikan dengan #define) yang berbasis karakter. Fungsi dan
makro ini berguna untuk menganalisis karakter-karakter yang terdapat pada
suatu string ataupun untuk melakukan konversi (misalnya huruf besar diubah
menjadi kapital).
Sejumlah makro dengan awalan is, mempunyai kaidah sebagai berikut:
int isalnum(int c);
int isalpha(int c);
int isascii(int c);
int iscntrl(int c);
ASB/AK

C++ Programming

100

int isdigit(int c);


int isgraph(int c);
int islower(int c);
int isprint(int c);
int ispunct(int c);
int isspace(int c);
int isupper(int c);
int isxdigit(int c);
Keseluruhan makro ini didefinisikan pada file ctype.h. Oleh karena itu jika
makro ini digunakan, pada program harus terdapat baris berisi:
#include<ctype.h>
//contoh pemakaian islower(), isupper()
//isdigit() dan ispunct()
#include<iostream.h>
#include<conio.h>
#include<ctype.h>
void main()
{
char st[128];
int i;
int jum_kapital=0,
jum_kecil=0,
jum_punctuasi=0,
jum_digit=0;
clrscr();
cout<<"Masukkan string apa saja "<<endl;
cin.getline(st,sizeof(st));
for(i=0;st[i];i++)
{
if(islower(st[i]))
jum_kecil++;
if(isupper(st[i]))
jum_kapital++;
if(ispunct(st[i]))
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;
}

e. Mencari karakter dalam suatu string

ASB/AK

C++ Programming

101

Mencari karakter di dalam suatu string berbeda dengan mencari suatu


data berbentuk numeric di dalam larik walaupun secara konsep string
adalah kumpulan karakter berupa larik dimensi satu.
Hal ini dikarenakan penulisan karakter dengan string adalah berbeda,
A adalah karakter dan A adalah string. Sehingga peubah yang
dideklarasikan sebagai string tidak dapat menampung nilai berberntuk
karakter.
C++ menyediakan fungsi pustaka strchr() untuk mencari nilai suatu
karakter di dalam suatu string, namun teknik ini lebih banyak digunakan
untuk menyatakan suatu karakter sebagai kata kunci terhadap suatu
tindakan.
//mencari nilai karakter dalam suatu string
#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<ctype.h>
void main()
{
char teks[]="ABCDE";
char *hasil;
clrscr();
hasil=strchr(teks,'B');
cout<<hasil<<endl;
}

Hasil program diatas : BCDE


Pada contoh di atas fungsi strchr() digunakan untuk mencari nilai
karakter B di variabel teks. Nilai karakter ini ada di nilai string yang dicari,
sehingga fungsi strchr() akan memberikan hasil alamat dari karakter B
tersebut dan alamat ini kemudian akan disimpan di variabel pointer hasil.
Jika variabel pointer hasil ini ditampilkan untuk nilai string, maka mulai dari
alamat tersebut sampai dengan akhir nilai stringnya akan ditampilkan.
Fungsi strchr() hanya memberikan hasil berupa alamat letak dari
karakter di nilai string yang dicari. Fungsi ini tidak memberikan nilai letak
urutan karakter yang dicari di nilai string. Berikut diberikan fungsi buatan
yang akan menghasilkan nilai letak urutan karakter yang dicari di nilai string.

//mencari nilai karakter di dalam string dan


//menampilkannya berikut indeksnya
#include<iostream.h>
#include<conio.h>
ASB/AK

C++ Programming

102

int cari_kar(char *S, char D);


void main()
{
char teks[]="ABCDE";
int letak;
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);
}

f. toupper() dan tolower()


Fungsi toupper() berguna untuk memperoleh huruf kapital dari suatu
huruf kecil. Nilai balik fungsi ini akan berupa seperti argumennya kalau
argumen berisi huruf kecil.
Adapun fungsi tolower() adalah kebalikan dari toupper() . Fungsi ini
memberikan nilai balik berupa:

huruf kecil, bila argumen berisi huruf kecil

nilai seperti argumen kalau argumen tidak berupa huruf kecil

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;
}

g. Membandingkan Dua Buah String


Pembandingan dua buah string dapat dilakukan dengan mudah melalui
fungsi strcmp() . Misalnya, s1 dan s2 berupa variabel string, maka:
strcmp(s1, s2)
akan memberikan nilai bertipe int berupa:

ASB/AK

C++ Programming

103

nilai negatip, apabila s1 < s2

nilai nol, bila s1 = s2

nilai positip, bila s1 > s2

//membandingkan dua buah string dengan strcmp


#include<iostream.h>
#include<conio.h>
#include<string.h>
void main()
{
char str1[20];
char str2[20];
clrscr();
cout<<"String pertama : ";
cin.getline(str1,sizeof(str1));
cout<<"String kedua : ";
cin.getline(str2,sizeof(str2));
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:
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

//konversi string ke angka dengan atoi()


#include<iostream.h>
#include<conio.h>
#include<string.h>
ASB/AK

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);

/ *konversi string inputan dari keyboard


menjadi bilangan bertipe int */

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

pengelompokkan sejumlah data dengan tipe yang berlainan. Hampir semua


pembuatan program pasti menggunakan konsep struktur data, seperti Larik
Terstruktur dimana terdiri dari field-field dengan tipe data yang berbeda.

ASB/AK

C++ Programming

106

Struktur biasa juga disebut dengan rekaman (record), dimana rekaman


disusun oleh satu atau lebih field (Gambar 7.1). Tiap field menyimpan data
tipe dasar tertentu atau tipe bentukan lain yang sudah didefinisikan
sebelumnya.

field

field

field

.............

field

Gambar 9.1
Gambaran Lojik Struktur dengan N Buah Field

9.2 Deklarasi Variabel Struktur


Pada C++ sebuah struktur dideklarasikan sebagai berikut:
struc nama_tipe_struktur
{
tipe_data1 nama_variabel1;
tipe_data2 nama_variabel2;

tipe_dataN nama_variabelN;
};
Sebagai contoh:
struc data_tanggal
{
int tahun;
int bulan;
int tanggal;
};

Pada contoh di atas, dideklarasikan sebuah struktur bernama data_tanggal


yang terdiri tiga buah anggota berupa:

tahun

bulan

tanggal

nama tipe struktur merupakan sebuah nama tipe bentukan yang


didefinisikan sendiri oleh pemrogram.

9.3 Mendefinisikan Variabel Struktur


Apabila suatu struktur telah dideklarasikan, struktur ini dapat digunakan
untuk mendefinisikan suatu variabel, misalnya:
ASB/AK

C++ Programming

107

data_tanggal tanggal_lahir;

merupakan pendefinisian variabel struktur bertipe struktur tanggal lahir.


Dengan demikian tanggal_lahir merupakan variabel (nama) bentukan dari
sebuah struktur data_tanggal. Dengan adanya pendefinisian ini, tanggal_lahir
memiliki tiga buah anggota yaitu:

tahun

bulan

tanggal

Sehingga bentuk dari pendefinisian variabel struktur di atas dengan deklarasi


struktur yang telah dibuat adalah:
struc data_tanggal
{
int tahun;
int bulan;
int tanggal;
};
data_tanggal tanggal_lahir;

//pendeklarasian struktur

//pendefinisian variabel struktur

9.4 Mengakses Anggota Struktur


Jika dideklarasikan tanggal_lahir adalah peubah (variabel) bertipe
data_tanggal yang beranggotakan tahun, bulan dan tanggal, maka cara
mengacu tiap field pada tanggal_lahir adalah:
tanggal_lahir.tanggal = 21;
tanggal_lahir.bulan = 8;
tanggal_lahir.tahun = 1976;
//contoh pendeklarasian, pendefinisian dan
//pengaksesan struktur
#include<iostream.h>
#include<conio.h>
void main()
{
struct data_tanggal

//pendeklarasian

{
int tahun;
int bulan;
int tanggal;
};
data_tanggal tanggal_lahir;

//pendefinisian struktur
ASB/AK

C++ Programming

108

//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

9.5 Penugasan Struktur


Pemberian nilai terhadap suatu struktur dapat dilakukan dengan bentuk:
var1 = var2

sepanjang kedua variabel adalah variabel struktur bertipe sama. Misal


terdapat pendefinisian :
data_tanggal tgl1 tgl2;

Bentuk penugasannya adalah sebagai berikut :


tgl2 = tgl1;

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

//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

9.6 Pembandingan Struktur


Pembandingan dua buah struktur tidak dapat dilakukan secara langsung.
Misalnya terdapat pendefinisian sebagai berikut:
data_tanggal tgl1,tgl2;

Pembandingan sebagai berikut:


if(tgl1 == tgl2)
pernyataan;

tidak akan diterima sewaktu kompilasi.


Untuk membandingkan dua buah struktur, masing-masing anggota harus
dibandingkan secara sendiri-sendiri. Sebagai contoh:
if ((tgl1.tahun == tgl2.tahun)&&
(tgl1.bulan == tgl2.tahun)&&
(tgl1.tanggal == tgl2.tanggal))
cout <<Isi kedua struktur sama<<endl;
else
cout<<Isi kedua struktur berbeda<<endl;

9.7 Struktur di dalam Struktur


Adakalanya sebuah struktur juga bisa mengandung struktur lain. Misal
didefinisikan sebuah struktur tanggal_lahir di dalam struktur data_pegawai.
struct tanggal_lahir
{
int tanggal;
ASB/AK

C++ Programming

110

struct data_pegawai

int bulan;
int tahun;

{
char nip[11];
char nama[26];
long gaji;
tanggal_lahir tgl;
};
data_pegawai data;

};

9.8 Larik Struktur


Sebagaimana telah dijelaskan sebelumnya, bahwa larik terstruktur dapat
menampung sekumpulan data dengan tipe yang berbeda, misal didefinisikan
sebuah larik A yang menyimpan nip, nama dan gaji dari sekumpulan data
pegawai dengan tipe yang berbeda. Maka cara mendeklarasikan larik tersebut
adalah dengan melibatkan fungsi struktur yang sudah dibahas sebelumnya:
struc data_pegawai

//pendeklarasian struktur

{
char nama[26];
char nip[11];
long gaji;
};
data_pegawai data[5];

angka 5 menunjukkan
banyaknya elemen larik

/* pendefinisian variabel data yang


merupakan tipe bentukan dari variabel
data_pegawai */

Pada contoh di atas didefinisikan sebuah larik bernama data dengan


jumlah elemen sebanyak 5 buah yang menampung data nama, nip dan gaji.
Sebagaimana halnya larik biasa, larik terstruktur diakses dengan mengacu
pada indeks larik tersebut. Untuk lebih jelasnya perhatikan contoh program di
bawah ini:
#include<iostream.h>
#include<conio.h>
#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();
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).

Tiap record terdiri atas field NIP, NAMA dan GAJI


Cara mengacu elemen Data :
data[2].nip

//mengacu field nip dari elemen kedua larik

data[2].nama

//mengacu field nama dari elemen kedua larik

Adakalanya sebuah larik terstruktur juga bisa mengandung struktur lain


yang bukan bertipe larik. Misal didefinisikan sebuah struktur tanggal_lahir di
dalam struktur data_pegawai.

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
};

//larik struktur yang mengandung struktur lain bukan bertipe larik


#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
void main()
{
const Nmaks=100;
struct tanggal_lahir
{
int tanggal;
int bulan;
int tahun;
};
struct data_pegawai
{
char nip[11];
char nama[25];
long gaji;
tanggal_lahir tgl; //pendefinisian struktur tgl yang merupakan
//tipe bentukan variabel tanggal_lahir
};
data_pegawai data[Nmaks]; //pendefinisian struktur data yang merupakan
//tipe bentukan variabel data_pegawai
int k,N;
clrscr( ) ;
cout<<"Jumlah karyawan : ";cin>>N;
clrscr();
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();
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
ASB/AK

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

(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
Nama mata kuliah ke-1
Nilai mata kuliah ke-1

d. Kode mata kuliah ke-4


Nama mata kuliah ke-4
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

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];

Pada contoh di atas didefinisikan sebuah struktur mata_kuliah dan


struktur data_mhs. Di dalam struktur data_mhs terdapat deklarasi MK[4] yang

ASB/AK

C++ Programming
merupakan

peubah

114
sturktur

mata_kuliah.

Sedangkan

variabel

data

merupakan deklarasi dari struktur data_mhs.


Program lengkapnya adalah sebagai berikut:
// program larik struktur yang mengandung struktur lain bertipe larik lain
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
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++)
{
cout<<"Kode MK "<<(i+1)<< : ";cin>>data[k].MK[i].KodeMK;
cout<<"Nama MK "<<(i+1)<<" : ";cin>>data[k].MK[i].NamaMK;
cout<<"Nilai
"<<(i+1)<<" : ";cin>>data[k].MK[i].nilai;
clrscr();
}
}
clrscr( ) ;
cout<<setw(10)<< <<DAFTAR NILAI MAHASISWA"<<endl;
cout<<setw(13)<< <<SEMESTER GENAP"<<endl;
cout<<endl;
cout<<"======================================================"<<endl;
cout<<"NIM";
cout<<setw(13)<<"NAMA";
cout<<setw(25)<<"Kode MK";
cout<<setw(9)<<"Nama MK";
cout<<setw(13)<<"Nilai"<<endl;
cout<<"======================================================"<<endl;
for(k=0;k<N;k++)
{
cout<<setiosflags(ios::left)<<setw(12)<<data[k].nim
ASB/AK

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
=================================================================

Secara struktur pohon pendeklarasian struktur di atas dapat digambarkan


sebagai berikut:
NIM

data[Nmaks]

Nama
Kode MK
MK[4]

Nama MK
Nilai

9.9 Pengurutan Larik Struktur


ASB/AK

C++ Programming

116

Pengurutan larik terstruktur pada dasarnya adalah sama dengan


pengurutan pada larik bukan terstruktur. Ketika sebuah field pada larik
dijadikan acuan sebagai data yang akan di urut maka yang lain akan
mengikuti field yang dijadikan acuan tersebut.
//pengurutan larik terstruktur dengan metode bubble sort
//yang mengacu berdasar field Cust.ID bertipe int
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
#include<string.h>
void main()
{
const Nmaks=100;
struct customer
{
int no;
char nama[10];
char tlp[10];
char city[12];
};
customer A[Nmaks];
int k,i,N;
int tmp;
char temp[10];
char sementara[10];
char temporary[12];
clrscr();
cout<<"Jumlah data : ";cin>>N;
for(k=0;k<N;k++)
{
cout<<"Data Customer "<<(k+1)<<" : "<<endl;
cout<<"Cust.ID : ";cin>>A[k].no;
cout<<"Name : ";cin>>A[k].nama;
cout<<"Telp. : ";cin>>A[k].tlp;
cout<<"City : ";cin>>A[k].city;
clrscr();
}
clrscr();
for(i=0;i<(N-1);i++)
//hanya ada (N-1) langkah(pass)
{
for(k=(N-1);k>=(i+1);k--)
{
if(A[k].no < A[k-1].no) //membandingkan antara nilai
//pada elemen maks dengan (elemen-1) maks
{
tmp=A[k].no;
A[k].no=A[k-1].no;
A[k-1].no=tmp;
strcpy(temp,A[k].nama);
strcpy(A[k].nama,A[k-1].nama);
strcpy(A[k-1].nama,temp);
strcpy(sementara,A[k].tlp);
strcpy(A[k].tlp,A[k-1].tlp);
strcpy(A[k-1].tlp,sementara);
strcpy(temporary,A[k].city);
strcpy(A[k].city,A[k-1].city);
ASB/AK

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;
}

Pada contoh di atas, variabel Lingkaran dideklarasikan sebagai suatu union


sebagai berikut:
union{
float kel;
double luas;
}Lingkaran;

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

Penggunaan elemen keliling dan luas dilakukan secara bergantian. Di


contoh program ini, pertama yang akan dihitung adalah keliling dari lingkaran
yang hasilnya disimpan di elemen keliling. Nilai ini kemudian ditampilkan
terlebih dahulu sebelum luas lingkaran dihitung. Jika nilai elemen keliling
tidak ditampilkan terlebih dahulu, maka nilainya akan tertindih oleh elemen
luas, karena lokasi memorinya sama.
Bandingkan bila program di atas menggunakan struktur dan bukan union,
maka runtunan terhadap tampilan luas dan keliling lingkaran boleh
ditempatkan dimana saja, karena menggunakan elemen memori yang
berbeda, sehingga kapasitas memori yang dipakai lebih besar. Perhatikan
contoh di bawah ini:
//program tanpa union
#include<iostream.h>
#include<conio.h>
void main()
{
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<<"Keliling lingkaran = "<<Lingkaran.kel<<endl;
cout<<"Luas lingkaran = "<<Lingkaran.luas<<endl;
}

9.11KATA KUNCI typedef


Bahasa C++ memungkinkan pembuat program untuk mendefinisikan
kembali suatu nama tipe data yang baru berdasarkan tipe data yang lama.
ASB/AK

C++ Programming

119

//kata kunci typedef


#include<iostream.h>
#include<conio.h>
void main()
{
typedef float luas;
luas adhi;
float jari2;
cout<<"Jari-jari ? ";cin>>jari2;
adhi=3.14*jari2*jari2;
cout<<"Luas lingkaran = "<<adhi<<endl;
}

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

Sebagai contoh, P1(4,8) dan P2(2,6), maka P3(3,7).


Programnya adalah sebagai berikut:
//program hitung titik tengah
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
void main()
{
typedef struct{
float x,y;
}titik;
/* variabel titik akan menjadi tipe data baru berupa
struktur yang memiliki anggota variabel
x dan y bertipe float */
titik P1,P2,P3;

//variabel P1,P2 dan P3 bertipe titik

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

Bila program di atas dijalankan:


Titik P1 :
x1 : 4
y1 : 8
Titik P2 :
x2 : 2
y2 : 6
Titik tengah adalah : P3(3,7)

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

........

10.2. Mengetahui Alamat Suatu Variabel


Suatu variabel dapat diketahui alamatnya secara mudah dengan
menambahkan operator alamat berupa simbol &, di depan nama variabel.
Contoh berikut memperlihatkan sebuah pendefinisian variabel X berisi harga
integer yang akan ditampilkan nilainya berikut alamat dimana variabel
tersebut disimpan di dalam memori.
#include<iostream.h>
#include<conio.h>
void main()

{
int X=80;
clrscr();
cout<<Nilai X = <<X<<endl;
cout<<Alamat X = <<&X<<endl;
}

Hasil dari program di atas adalah:


Nilai X

= 80

Alamat X = 0x0064fe00

10.3. Mendefinisikan dan Mengisi Variabel Pointer


Suatu variabel pointer didefinisikan dengan bentuk sebagai berikut:
tipe_data *nama_variabel

Mengisi variabel pointer adalah dengan menunjuknya ke variabel lain yang


berisi alamat. Tipe variabel pointer harus sama dengan tipe variabel yang
ditunjuknya. Bila suatu variabel pointer didefinisikan berarti nilai yang ditunjuk
oleh variabel pointer akan diisikan ke dalam variabel pointer tersebut.
#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
ASB/AK

C++ Programming

122

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

3003h

3001h

PX

........

Sel-sel memori. Angka 3001h (dalam hexadesimal)


menyatakan alamat fisik sel, X menyatakan alamat lojiknya,
sedangkan 80 adalah nilai yang disimpan sel. Angka 3003h
adalah alamat pointer PX dan 3001h adalah alamat yang
ditunjuk oleh pointer PX dan kemudian disimpan oleh variabel
pointer PX tersebut.
Sesungguhnya pointer bukanlah menyimpan nilai dari tipe
data yang didefinisikan, melainkan hanya alamat dimana nilai
dari tipe data yang didefinisikan tersebut disimpan
#include<iostream.h>
#include<conio.h>
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
ASB/AK

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;

//variabel bukan pointer


//variabel pointer

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

cout<<"Nilai X sekarang : "<<X<<endl;


cout<<"Alamat X sekarang : "<<PX<<endl;
}

Hasil dari program di atas :


Nilai X semula : 80
Alamat X mula-mula : 0x0064fe00
Nilai X sekarang : 72
Alamat X sekarang : 0x0064fe00

10.4. Pointer void


Pointer void adalah pointer yang tak bertipe. Suatu pointer void adalah
pointer yang dapat menunjuk

ke sebarang tipe data. Misalnya, Anda dapat

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

//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;
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
ASB/AK

C++ Programming

125

Nilai pecahan sekarang : 51.7

10.5. Array Pointer


Suatu array dapat digunakan untuk menyimpan sejumlah pointer. Sebagai
contoh:
char *namahari[7] ;

merupakan pernyataan untuk mendefinisikan array namahari yang berisi 7


buah elemen berupa pointer. Pointer ini menunjuk ke data bertipe char.
//array pointer
#include<iostream.h>
#include<conio.h>
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 ] ).
//pointer tipe larik
#include<iostream.h>
#include<conio.h>
void main()
{
int k;
int nilai[5];
int *Pnilai;
clrscr();
Pnilai=nilai; //penugasan pointer ke array
for(k=0;k<5;k++){
cout<<"Nilai "<<(k+1)<<" : ";cin>>nilai[k];
}
clrscr();
for(k=0;k<5;k++)
cout<<*(Pnilai+k)<<endl;
getch();
}

10.6. Pointer Menunjuk Pointer


Suatu pointer dapat menunjuk ke pointer lain. Gambaran mengenai hal ini
ditunjukkan pada gambar di bawah ini:
ptr2

ptr1

Pointer
menunjuk ke
pointer

ASB/AK

C++ Programming

126

Untuk membentuk pointer seperti pada gambar di atas diperlukan


pendefinisian sebagai berikut:
int X;
int *ptr1;
int **ptr2;

//satu tanda * di depan ptr1


//dua tanda ** di depan ptr2

Pada pendefinisian di atas :

X adalah variabel bertipe int.

ptr1 adalah variabel pointer yang menunjuk ke data bertipe int.

ptr2 adalah variabel pointer yang menunjuk ke pointer int.

Agar ptr1 menunjuk ke variabel X, diperlukan perintah berupa :


ptr1 = &X;

Sedangkan supaya ptr2 menunjuk ke variabel pointer ptr1, diperlukan


perintah :
ptr2 = &ptr1;
//pointer menunjuk ke pointer
#include<iostream.h>
#include<conio.h>
void main()

{
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;
}

Hasil program di atas :


Nilai X = 279
*ptr1 = 279
**ptr2 = 279

10.7. Pointer dan Fungsi


Sebuah pointer digunakan dalam argumen fungsi kalau nilai argumen
dimaksudkan untuk diubah di dalam fungsi. Hal ini serupa dengan konsep
parameter referensi. Namun ada perbedaan antara referensi dengan konsep
pointer dalam fungsi.
ASB/AK

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

cout<<"Nilai mula-mula untuk a : "<<a<<endl;


ubah_nilai(&a);

//alamat yang dilewatkan

cout<<"Nilai sekarang untuk a : "<<a<<endl;


}
void ubah_nilai(int *x)
{
*x=160;
}
Hubungan pointer dalam fungsi hampir serupa dengan parameter dengan referensi, perbedaannya
adalah pada pointer hanya alamatnya saja yang dilewatkan dan menunjuk ke alamat variabel a,
sehingga posisi nilai 160 untuk a bukan berada di alamat x, melainkan tetap di variabel a berada.

void ubah_nilai(int *x)

ubah_nilai(&a)

Alamat parameter aktual a yang berisi nilai mula-mula 168 dikirim ke x,


karena ada pengubahan nilai x di dalam fungsi, yaitu sebesar 160, nilai ini
dikirim balik ke alamat a. Sehingga nilai a sekarang berisi dengan alamat
yang sama dengan nilai a mula-mula. Perhatikan contoh program di bawah
ini:
//pointer dalam fungsi yang menunjukkan alamat dari variabel
//yang diubah melalui fungsi adalah sama
#include<iostream.h>
#include<conio.h>
void ubah_nilai(int *x);
void main()
{
int a=168;
clrscr();
cout<<"Nilai mula-mula untuk a : "<<a<<endl;
cout<<"Alamat mula-mula a
: "<<&a<<endl;
ubah_nilai(&a);
//alamat yang dilewatkan
cout<<"Nilai sekarang untuk a : "<<a<<endl;
}
void ubah_nilai(int *x)
{
*x=160;
cout<<"Alamat sekarang a : "<<x<<tuh kan sama!!!<<endl;
}

ASB/AK

C++ Programming

128

Hasil dari program di atas adalah:


Nilai mula-mula untuk a : 168
Alamat mula-mula a : 0x0064fe00
Alamat sekarang a : 0x0064fe00 tuh kan sama!!!
Nilai sekarang untuk a : 160

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 sehariASB/AK

C++ Programming

129

sehari. Sebuah obyek dapat diibaratkan sebagai departemen-departemen di


dalam sebuah perusahaan bisnis. Contoh departemen:
Penjualan
Akunting
Inventory

Pembagian

departemen

dalam

perusahaan

merupakan

untuk

memudahkan pengoperasian perusahaan. Sebagai gambaran, bila Anda


seorang manager di sebuah perusahaan dan menginginkan data dari
departemen berbeda, maka Anda mengutus seorang sekretaris untuk
mengambil data tersebut. Nah begitu juga pada konsep obyek, bila kita
bermaksud menggunakan obyek kita cukup mengirimkan suatu pesan ke
obyek dan obyek itu sendiri yang akan menanganinya.
Sebuah gambaran tentang obyek dapat dilihat pada gambar 11.1 di bawah
ini:

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

menganalogikan struktur di perusahaan.

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

Fungsi Anggota, Metode, Data, Variabel Dinamis

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.

11.2. Obyek dan Kelas


Dalam terminologi PBO (pemrograman berorientasi obyek), obyek
sebenarnya adalah anggota dari kelas (class). Dengan kata lain, kelas adalah
kumpulan dari beberapa obyek yang sama. Sebagai analogi ini, kita sering
mendengar nama-nama seperti Al-Khuwarizmi, Aljabar dan Abdul Shinna.
Mereka adalah ilmuwan dengan disiplin ilmu yang berbeda-beda, AlKhuwarizmi adalah Bapak Algoritma dunia, pencipta metode algoritma,
Aljabar adalah ahli matematik dan Ibnu Shinna adalah ahli dalam bidang

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

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.

11.3. Dari Struktur ke Kelas


Kelas merupakan struktur data dari obyek. Untuk menjelaskan tentang
kelas, dapat dibandingkan dengan struktur, karena struktur mempunyai
persamaan dengan kelas.
Di bawah ini diberikan dua buah contoh program dengan menggunakan
struktur dan kelas:
#include<iostream.h>
#include<conio.h>
#include<string.h>
struct buku
{
char judul[35];
char pengarang[25];
int jumlah;
};
void main()
{
clrscr();
buku Novel;

//pendefinisian variabel struktur

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;
}

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();

//penambahan kata kunci

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;
}

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();
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;
}

Bila program di atas dikompilasi maka akan terjadi kesalahan, mengingat


penggunaan private hanya diperuntukkan bagi anggota class saja.
Private pada kelas dapat diibaratkan dengan suatu klub yang hanya
diperuntukkan bagi anggotanya saja. Semua fasilitas klun dapat diakses oleh
anggota. Tidak demikian halnya dengan orang luar (bukan anggota).

11.4. Menambahkan Fungsi Anggota


Konsep obyek pada C++ sebenarnya digunakan untuk menyatukan data
dan fungsi yang mengakses data dalam suatu wadah. Selanjutnya data yang
terletak di dalam kelas biasa disebut anggota data dan fungsi yang terletak di
dalamnya disebut fungsi anggota (member function).

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

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:
void inisialisasi(...)
{
.......
}
void info()
{
.......
}
};

anggota data

fungsi anggota
fungsi anggota

Data dan fungsi anggota

Pendefinisian fungsi anggota pada kelas Buku mempunyai aturan seperti


halnya fungsi biasa. Misalnya untuk fungsi inisialisasi();
void inisialisasi(char *Judul, char *Pengarang, int Jumlah)
{
strcpy(judul,Judul);
strcpy(pengarang,Pengarang);
jumlah=jumlah;
}

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

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)

Pada contoh pertama (), ketiga argumen di atas digunakan untuk


memberikan nilai terhadap ketiga anggota data obyek novel dan pada contoh
kedua () ketiga anggota data dari obyek novel ditampilkan (perhatikan
definisi fungsi anggota info()).

11.5. Mendefinisikan Beberapa Obyek


Beberapa obyek dengan kelas sama dapat didefinisikan sebagaimana
pendefinisian variabel biasa (bukan obyek). Misalnya :
Buku novel,fiksi;

Merupakan pernyataan untuk pendefinisian obyek bernama novel dan


fiksi. Kelasnya sama, yaitu Buku. Tampak, nama kelas mendahului namanama obyek.
Perlu diketahui, jika terdapat lebih dari sebuah obyek dan obyek-obyek
tersebut mempunyai kelas yang sama, data anggota pada masing-masing
obyek bersifat terpisah. Untuk melihat hal ini perhatikan program di bawah ini:
/* memperlihatkan ketidaktergantungan anggota data pada dua buah
obyek yang mempunyai kelas sama */
#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);
ASB/AK

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().

11.6. Penugasan Nilai Antarobyek


C++ memungkinkan penyalinan antar obyek dapat dilakukan dengan
mudah, yaitu menggunakan operator penugasan (=). Sebagai contoh, dua
buah obyek berkelas Buku diciptakan melalui pernyataan :
Buku novel,fiksi;
fiksi=novel;

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

/* memperlihatkan ketidaktergantungan anggota data pada dua buah


obyek yang mempunyai kelas sama */
#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
novel.inisialisasi("Gun of The Navarone","Alistair MacLean",12);
//penugasan obyek
fiksi=novel;
//menampilkan informasi yang terdapat pada obyek fiksi
fiksi.info();
}

11.7. Alternatif Penulisan Fungsi Anggota


Cara mendefinisikan fungsi anggota sebenarnya ada dua macam. Cara
pertama adalah sesuai dengan contoh di atas, yakni fungsi anggota
didefinisikan di dalam deklarasi kelas.
Misalnya:
class Buku
{
private:
char judul[35];
char pengarang[25];
ASB/AK

C++ Programming

139

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;
}

Operator resolusi
lingkup

Nama anggota data


kelas Buku

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.

/* penulisan anggota data pada fungsi anggota dengan


format kelas::data */
#include<iostream.h>
#include<conio.h>
#include<string.h>
class Movie
{
private:
char judul[20];
char cast[40];
char genre[30];
ASB/AK

C++ Programming

141

public:
void inisialisasi(char *judul, char *cast, char *genre);
void info();
};
void main()
{
clrscr();
Movie film;

//pendefinisian obyek

film.inisialisasi("DOG SOLDIERS","Stean Pertwee/Kevin McKidd",


"Action/Dewasa");
//menampilkan data pada obyek film
film.info();
}
void Movie::inisialisasi(char *judul, char *cast, char *genre)
{
strcpy(Movie::judul,judul);
strcpy(Movie::cast,cast);
strcpy(Movie::genre,genre);
}
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

Anda mungkin juga menyukai