Anda di halaman 1dari 141

C++ Programming 1

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

Compile Linker Executable


Using Source Code File
Object File
Editor

Gambar 1.1. Proses Kompilasi pada C++

ASB/AK
C++ Programming 2

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
NAMA
Benar Salah
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
Ukuran
Tipe Data Rentang Nilai
Memori
char 1 byte -128 hingga +127

ASB/AK
C++ Programming 3

int 2 byte -32768 hingga +32767


long 4 byte -2.147.438.648 hingga
+2.147.438.647
float 4 byte 3.4x10-38 hingga 3.4x1038
double 8 byte 1.7x10-308 hingga 1.7x10308
long double 10 byte 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

ASB/AK
C++ Programming 4

Merupakan sebuah penamaan yang nilainya tidak dapat diubah selama


pelaksanaan program. Sebuah kostanta dideklarasikan sebagai berikut :
const tipe_data nama_variabel = nilai;
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 else operator template


auto enum private this
break extern public typedef
case float protected union
char for register unsigned
class friend return virtual
const goto short void
continue if signed volatile
default lline sizeof while
delete int struct
do long switch
double new static

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( )
{ Fungsi utama
statemen-statement
}

ASB/AK
C++ Programming 5

fungsi_fungsi_lain( )
Fungsi-fungsi lain yang ditulis oleh
{ pemrogram komputer
statement-statement
}

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

ASB/AK
C++ Programming 6

 #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)
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++

ASB/AK
C++ Programming 7

TUGAS 1
1. Apakah hasil tampilan dari program dibawah ini
Simpan dengan nama : tugas11.cpp
//program jumlah
#include<iostream.h>
#include<conio.h> //file library untuk menghapus layar
void main( )
{
int x,y,jumlah; //deklarasi variabel
clrscr( ) ;
x=100; y=50; //pengisian nilai secara langsung ke dalam peubah x dan y

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

ASB/AK
C++ Programming 8

BAB 2
OPERATOR
2.1. Operator
Operator merupakan simbol yang biasa dilibatkan dalam program untuk
melakukan sesuatu operasi atau manipulasi. Misalnya untuk menjumlahkan dua
buah nilai, memberikan nilai ke suatu variabel atau membandingkan kesamaan
dua buah nilai. Bahasa C++ mempunyai beberapa operator yaiitu : Operator
Aritmatika, Operator Penugasan, Operator Penaikan dan Penurunan, Operator
Pemendekan, Operator Relasi dan Logik, dan Operator Bitwise

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 Penjelasan
* Perkalian 2*3
/ Pembagian 7/2
% Sisa 7%2 Khusus untuk tipe data
pembagian integer
+ Penjumlahan 5+4
 Pengurangan 5–4
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”;

ASB/AK
C++ Programming 9

}
Hasil :

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.
ASB/AK
C++ Programming 10

2) Penugasan dalam ungkapan


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

ASB/AK
C++ Programming 11

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


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

ASB/AK
C++ Programming 12

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

ASB/AK
C++ Programming 13

int x;
clrscr( ) ;
x = 2;
cout<<” Nilai awal x = “<<x<<endl;
x+=8;
cout<<” Nilai x menjadi = “<<x<<endl;
x/=2;
cout<<” Nilai x menjadi = “<<x<<endl;
}
Hasil :

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

ASB/AK
C++ Programming 14

#include<iostream.h>
#include<conio.h>
void main( )
{
int a, b, c, d, e, f;
clrscr( ) ;
a=100, b=200, z=150;
c=a==b;
d=a!=b;
e=(z>=a) && (z<=b);
cout<<” a sama dengan b : “<<c<<endl;
cout<<” a tidak sama dengan b : “<<d<<endl;
cout<<” z>=a AND z<=b : “<<e<<endl;
}
Hasil :

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 :

ASB/AK
C++ Programming 16

TUGAS 2
1. Apakah hasil tampilan dari program dibawah ini
Simpan dengan nama : tugas21.cpp
//program jumlah
#include<iostream.h>
#include<conio.h>
{
clrscr( ) ;
int x,y,z;
x=1;
cout<<”Nilai Awal x adalah : “<<x<<endl;
x=x<<1;
cout<<”Nilai x : “<<x<<endl;
y=x + 5;
cout<<”Nilai y : “<<y<<endl;
z=x+ ++y;
z+=x;
cout<<”Nilai z : “<<z<<endl;
}
Hasil :

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

ASB/AK
C++ Programming 17

BAB 3
TEKNIK INPUT OUTPUT
3.1. cout
Pemakaian cout merupakan sebuah obyek untuk meletakkan informasi ke
standar output (monitor).

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 Keterangan
\0 Karakter ber-ASCII nol (karakter null)
\a Karakter bel
\b Karakter backspace
\f Karakter formfeed (ganti halaman)
\n Karakter newline (pindah baris)
\r Karakter carriage return (ke awal baris) tanpa linefeed
\t Karakter tab horizontal
\v Karakter tab vertikal
\\ Karakter \
\‟ Karakter „
\” Karakter “
\? Karakter ?
\ooo Karakter yang nilainya oktalnya ooo (3 digit oktal)
\xhh 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

ASB/AK
C++ Programming 18

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 Keterangan
endl Menyisipkan newline dan mengirimkan isi ke
penyangga
ends Menyisipkan karakter null
flush Mengirimkan isi penyangga keluaran ke piranti
keluaran
dec Mengkonversi ke bilangan basis sepuluh
hex Mengkonversi ke bilangan basis 16 (oktal)
oct Mengkonversi ke bilangan basis 8 (oktal)
setbase(int n) Mengkonversi ke bilangan basis n (n=8, 10 atau 16)
setw(int n) Mengatur lebar field untuk suatu nilai sebesar n
karakter
setfill(int c) Menyetel karakter pemenuh berupa c
setprecicion(int n) Menyetel presisi bilangan pecahan sebesar n digit
setiosflags(long f ) Menyetel format yang ditentukan oleh f.f adalah tanda
format pada tabel 3.3
Resetiosflags(long f Menghapus format yang ditentukan oleh f.f adalah
) tanda format pada tabel 3.3

a. endl

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

ASB/AK
C++ Programming 19

cout<<”Nilai 1 = “<<setw(4)<<nilai1<<endl;
cout<<”Nilai 2 = “<<setw(4)<<nilai2<<endl;
cout<<”Nilai 3 = “<<setw(4)<<nilai3<<endl;
}
Hasil :

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

ASB/AK
C++ Programming 20

cout<<setfill(„*‟)<<setw(8)<<harga<<endl;
cout<<setw(8)<<harga<<endl;
}
Hasil :

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 Menyetel rata-kiri terhadap lebar field yang diatur melalui setw( )
ios::right Menyetel rata-kanan terhadap lebar field yang diatur melalui setw( )
ios::scientific Memformat keluaran dalam bentuk notasi eksponensial
ios::fixed Memformat keluaran dalam bentuk notasi desimal
ios::dec Memformat keluaran dalam basis 8 (oktal)
ios::oct Memformat keluaran dalam basis 16 (hexadesimal)
ios::hex Memformat huruf pada notasi heksadesimal ke bentuk huruf kapital
ios::uppercase Menampilkan awalan 0x untuk bilangan heksadesimal atau 0 (nol)
untuk bilangan oktal

ASB/AK
C++ Programming 21

ios::showbase Menampilkan titik desimal pada bilangan pecahan yang tidak


memiliki bagian pecahan
ios::showpoint Menampilkan titik desimal pada pecahan yang tidak memiliki bagian
pecahan
ios::showpos 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( )
{
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) setw(7)

R p . 4 7 5 0 0 0
R p . 3 5 0 0 0
R p . 7 5 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)

ASB/AK
C++ Programming 22

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

R p . 4 7 5 0 0 0
R p . 3 5 0 0 0
R p . 7 5 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 :

ASB/AK
C++ Programming 23

3.3. cin
C++ menyediakan suatu obyek bernama cin (baca: C in) yang bermanfaat
untuk membaca data dari standar input (keyboard).
Bentuk pernyataan cin untuk membaca data dari keyboard dan meletakkan
ke sebuah variabel. Bentuk pemakaian cin adalah :
cin >> var ;
Tanda >> menunjukkan “pengambilan data dari” piranti masukan, normalnya
adalah keyboard.
Simpan dengan nama file : lat37.cpp
//membaca data bertipe float dan int dari keyboard
#include<iostream.h>
#include<conio.h>

void main( )
{
const float harga=250000;
int jumlah;
float total;

clrscr( ) ;

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;

ASB/AK
C++ Programming 24

clrscr();
cout<<"Kode barang : ";cin>>kode
cout<<"Jumlah : ";cin>>jumlah;
if(kode=='A')
{
strcpy(nama,A);
harga=175000;
total=jumlah*harga;
}
else
if(kode=='B')
{
strcpy(nama,B);
harga=256000;
total=jumlah*harga;
}
else
if(kode==‟C‟)
{
strcpy(nama,C);
harga=475000;
total=jumlah*harga;
}
else
exit(0);

cout<<"============================================="<<endl;
cout<<"Kode"<<setw(10)<<"Nama Brg"<<setw(10)<<"Qty"
<<setw(8)<<"Harga"<<setw(11)<<"Jumlah"<<endl;
cout<<"============================================="<<endl;
cout<<setiosflags(ios::left)<<setw(6)<<kode
<<setiosflags(ios::left)<<setw(13)<<nama
<<setiosflags(ios::right)<<setw(4)<<jumlah
<<setiosflags(ios::right)<<setw(10)<<harga
<<setiosflags(ios::right)<<setw(10)<<total<<endl;
cout<<"============================================="<<endl;
}

Hasil :

ASB/AK
C++ Programming 25

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

ASB/AK
C++ Programming 26

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

Ketentuan soal :
a. Gunakan cin,getch(),setw(),setiosflags(ios::fixed) dan (ios::right)
b. Gunakan identifier : jmlbrg, hrgbrg, bayar, nildisc, disc, total
c. Bayar=jmlbrg*hrgbrg, disc=(nildisc/100)*bayar, total=bayar-disc
Program :

ASB/AK
C++ Programming 27

BAB 4
PERNYATAAN (STATEMENT)
Seperti telah dijelaskan sebelumnya bahwa ungkapan/ pernyataan atau
yang disebut statement berupa instruksi yang menyuruh komputer untuk
melakukan sesuatu. Di dalam bahasa C++ terdapat banyak jenis statement, yaitu
:
4.1 . Statement Kosong
Statement kosong (empty statement atau null statement) adalah statement
yang hanya terdiri dari pengakhir titik koma saja. Statement ini tidak berisi
dengan penyataan apapun, sehingga tidak ada tindakan yang dilakukan.
#include<iostream.h>
#include<conio.h>
void main( )
{
;
}
Hasil dari program di atas adalah hanya menampilkan hasil blank di layar.
Selain menggunakan tanda titik koma saja, untuk menghasilkan blank di layar
kita dapat menggunakan tanda kutip ganda, contoh :
cout<<” “<<endl;
Statement tersebut memberikan instruksi kepada komputer untuk
menampilkan tanda spasi kosong, statement ini banyak digunakan untuk
mengatur format tampilan dari suatu pernyataan yang dikirim ke layar.

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

ASB/AK
C++ Programming 28

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

ASB/AK
C++ Programming 29

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

ASB/AK
C++ Programming 30

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

ASB/AK
C++ Programming 31

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
#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 switch adalah peryataan yang digunakan untuk
menjalankan salah satu pernyataan dari beberapa kemungkinan
pernyataan, berdasarkan nilai dari sebuah ungkapan dan nilai penyeleksi.

ASB/AK
C++ Programming 32

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

ASB/AK
C++ Programming 33

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;
cout<<"Keliling segiempat = " <<kel<<endl;
break;
}
case 3:
{
cout<<"Panjang ? ";cin >> panjang;
cout<<"Lebar ? ";cin >> lebar;
diag = sqrt((panjang*panjang)+(lebar*lebar));
cout<<"Diagonal segiempat = " <<diag<<endl;
break;
}
case 4:
cout<<"Keluar program...bye2" << endl;
break;
default:
cout<<"Anda salah memilih nomor menu..!!!"
<< endl;
break;
}
}
Hasil :

4.4. Pengulangan
Statement kendali pengulangan merupakan sebuah statement dimana
sejumlah instruksi dapat dilaksanakan berulangkali sesuai keinginan. Di dalam

ASB/AK
C++ Programming 34

algoritma pengulangan atau yang sering disebut repetition (loop) dapat dilakukan
sejumlah kali atau sampai kondisi pengulangan tercapai.
Secara konsep algoritma, struktur pengulangan terdiri dari dua, yaitu
pengulangan tanpa kondisi (unconditional looping) dan pengulangan dengan
kondisi (conditional looping).
Bagian struktur pengulangan secara umum terdiri atas dua bagian :
 kondisi pengulangan, yaitu ekspresi boolean yang harus dipenuhi untuk
melaksanakan pengulangan.
 badan (body) pengulangan, yaitu bagian algoritma yang diulang.
Di bawan ini diberikan notasi algoritma untuk struktur pengulangan :

<inisialisasi>
awal pengulangan
badan pengulangan
akhir pengulangan
<terminasi>

Di dalam bahasa C++ ada tiga jenis struktur pengulangan, yaitu : for, while dan
do-while
a. Pengulangan FOR
Pengulangan for adalah struktur pengulangan tanpa kondisi
(unconditional looping) artinya instruksi-instruksi di dalam badan pengulangan
diulang sejumlah kali yang dispesifikasikan. Dalam hal ini, jumlah
pengulangan sudah diketahui sebelum eksekusi program.
Notasi algoritma dari struktur pernyataan for adalah :

for (ungkapan1;ungkapan2;ungkapan3)
pernyataan;

Keterangan:
 Ungkapan1 adalah nilai pencacah awal
 Ungkapan2 adalah nilai pencacah akhir
 Ungkapan3 adalah operator penaikan/penurunan untuk menentukan
banyaknya pengulangan

ASB/AK
C++ Programming 35

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

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;

ASB/AK
C++ Programming 36

jumlah=jumlah+nilai;
}
clrscr( ) ;

rata2=jumlah/N;
cout<<”Rata-rata nilai = “<<rata2<<endl;
}

Hasil :

b. For tersarang (nested for)


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

ASB/AK
C++ Programming 37

#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
void main( )
{
int i, j;
clrscr();
for( i =1; i<=5; i++)
{
for( j =1; j<=3; j++)
cout<<setw(5)<<i<<setw(3)<<j;
cout<<endl;
}
}
Hasil :

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

ASB/AK
C++ Programming 38

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

Aksi atau runtunan akan dilaksanakn selama kondisi bernilai true. Jika
kondisi bernilai false badan pengulangan tidak akan dilaksanakan, yang
berarti pengulangan selesai. Agar kondisi suatu saat bernilai false, maka di
dalam badan pengulangan harus ada instruksi yang mengubah nilai peubah
kondisi.
Simpan dengan nama file : lat49b.cpp :
#include<iostream.h>
#include<conio.h>

void main( )
{
int k; //variabel pencacah
clrscr( ) ;

k = 0; //inisialisasi
while(k < 5)
{
cout<<”Welcome to Information Technology”<<endl;
k++;
} //peubah kondisi yang menyebabkan kondisi bernilai false
}
Hasil :

Keterangan :

ASB/AK
C++ Programming 39

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


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

ASB/AK
C++ Programming 40

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

ASB/AK
C++ Programming 41

cout<<”Lebar ? “;cin>>lebar;
clrscr( ) ;
luas = panjang*lebar;
cout<<”Luas segi empat = “<<luas<<endl;
cout<<”Hitung lagi ? (y/t) ? “;cin>>pil;
} //pil != „y‟
}
Hasil :

d. Pengulangan Do-While
Pernyataan do-while juga berguna untuk mengulang proses. Bentuk dari
pernyataan do-while ini adalah sebagai berikut:
do
{
pernyataan1;
pernyataan2;
...
pernyataanN;
} while(ungkapan);

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 :

ASB/AK
C++ Programming 42

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();
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 pernyataan-
pernyataan itu.

ASB/AK
C++ Programming 43

Karena sifatnya yang tidak berdiri sendiri, pernyataan ini tidak bisa dikatakan
sebagai inti struktur inti pengulangan. Pernyataan break harus menyatu dengan
pernyataan-pernyataan perulangan agar dapat menghasilkan efek.
Simpan dengan nama file : lat49h.cpp :
//melihat efek break pada struktur while
#include<iostream.h>
#include<conio.h>
void main( )
{
int bil = 1;
clrscr( ) ;
while (bil <= 10)
{
if (bil > 5)
break;
cout<<bil<<‟ „;
bil++;
} // peubah kondisi bernilai false (bil  6)
Hasil :

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 :

ASB/AK
C++ Programming 44

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

ASB/AK
C++ Programming 45

Program hanya menjumlahkan jika hanya jika nilai x yang dimasukkan adalah
ganjil, bila nilai x yang dimasukkan adalah genap, maka program akan
mengulang kembali ke iterasi for dan nilai genap tersebut tidak akan
ditampung sampai dimasukkan kembali nilai x yang ganjil.
Di bawah ini diberikan contoh efek continue pada struktur while untuk
menjumlahkan jika hanya nilai genap saja.
Simpan dengan nama file : lat49k.cpp :
//hitung jumlah nilai jika hanya genap
#include<iostream.h>
#include<conio.h>

void main()
{
int k,N,x,jumlah;
clrscr();

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

ASB/AK
C++ Programming 46

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;


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;

ASB/AK
C++ Programming 47

c=a*b;
cout<<”Nilai A*B= “;<<c<<endl;
cout<<”Coba Lagi [Y]=ya [T]=tidak ? “;
for ( ; ; )
{
jawab= toupper(getch());
if ((jawab==‟Y‟) || (jawab==‟T‟))
{
cout<<jawab<<endl;
if (jawab==‟Y‟)
goto hitung;
else
exit(0);
}
}
}

Hasil :

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;

ASB/AK
C++ Programming 48

if(pil==6)
break;
clrscr();

switch(pil)
{
case 1 :
cout<<"Anda memilih menu Input Data"<<endl;
cout<<"Tekan Enter untuk kembali ke MENU"<<endl;
getch();
clrscr();
continue;
case 2 :
clrscr();
cout<<"Anda memilih menu Melihat Laporan Pelanggan"
<<endl;
cout<<"Tekan Enter untuk kembali ke MENU"<<endl;
getch();
clrscr();
continue;
case 3 :
cout<<"Anda memilih menu Menambah Data"<<endl;
cout<<"Tekan Enter untuk kembali ke MENU";
getch();
clrscr();
continue;
case 4 :
cout<<"Anda memilih menu Mencari data"<<endl;
cout<<"Tekan Enter untuk kembali ke MENU"<<endl;
getch();
clrscr();
continue;

case 5 :
cout<<"Maaf data ini sangat rahasia....!!!"<<endl;
goto selesai;
}
}
selesai:
cout<<"Anda tidak diperkenankan membacanya...terima kasih"
<<endl;
}
Hasil :

4.8. Pernyataan exit()


ASB/AK
C++ Programming 49

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)
cout<<"Positif"<<endl;
else
exit(0);
}

Hasil :

TUGAS 4
ASB/AK
C++ Programming 50

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 : Jika Pilihan 2 maka :
Penjumlahan Pengurangan
---------------------- ---------------------
Masukkan Nilai A = 40 Masukkan Nilai A = 40
Masukkan Nilai B = 30 Masukkan Nilai B = 30
Hasil A + B = 70 Hasil A - B = 10
Coba Lagi [Y/T] : Coba Lagi [Y/T] :

Program :

BAB 5
ASB/AK
C++ Programming 51

PROSEDUR

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.

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( )
{ void nama_prosedur( )
……………. {
prosedur( ) ; ………………………
……………. ………………………
……………. ………………………
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
}

ASB/AK
C++ Programming 52

void garis( )
{
cout<<” ================= ”<<endl;
}

Hasil :

Simpan dengan nama file : lat52.cpp :


#include<iostream.h>
#include<conio.h>
void RataRata( ) ;
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

ASB/AK
C++ Programming 53

a. Nama Lokal
Nama-nama (konstanta, peubah, tipe dll) yang dideklarasikan di dalam
bagian DEKLARASI prosedur hanya “dikenal” di dalam badan prosedur
yang bersangkutan. Nama-nama di dalam bagian DEKLARASI prosedur
tersebut dikatakan bersifat “lokal”.
Nama-nama lokal hanya dapat digunakan di dalam prosedur yang
melingkupinya saja. Sedangkan nama-nama yang dideklarasikan di luar
prosedur maupun program utama dikatakan bersifat “global”. Nama-nama
global dapat digunakan di bagian manapun di dalam program baik di
program utama maupun prosedur. Sebagai contoh tinjau program di bawah
ini:
Simpan dengan nama file : lat53.cpp :
#include<iostream.h>
#include<conio.h>
void angka(); //prototype prosedur
void main()
{
int x=22;
float y=3.75;
clrscr();

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 :

ASB/AK
C++ Programming 54

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

ASB/AK
C++ Programming 55

{
clrscr();
JumlahData(); //panggil prosedur jumlah elemen efektif larik
clrscr();
for(k=1;k<=N;k++)
cout<<nilai[k]<<endl;
CariMaks(); //panggil prosedur CariMaks
CariMin(); //panggil prosedur CariMin
}
void JumlahData()
{
cout<<"Jumlah data : ";cin>>N;
for(k=1;k<=N;k++)
{
cout<<"Nilai "<<k<< " = ";
cin >>nilai[k];
}
}
void CariMaks() // prosedur cari nilai maksimum
{
maks=nilai[1];
for(k=2;k<=N;k++)
{
if(nilai[k]>maks)
maks=nilai[k];
}
cout<<"Nilai maksimum = "<<maks<<endl;
}
void CariMin() // prosedur cari nilai minimum
{
min=nilai[1];
for(k=2;k<=N;k++)
{
if(nilai[k]<min)
min=nilai[k];
}
cout<<"Nilai minimum = "<<min<<endl;
}

Hasil :

c. Nama (Variabel) Statis

ASB/AK
C++ Programming 56

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

ASB/AK
C++ Programming 57

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

ASB/AK
C++ Programming 58

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

ASB/AK
C++ Programming 59

prosedur tersebut untuk menampilkan sebuah tulisan C++ dengan cara sebagai
berikut :
tulis_cplus();
Sehingga pada prototipe void tulis_cplus(int jumlah) harus ditulis menjadi :
void tulis_cplus(int jumlah=10);
Maka programnya akan menjadi sebagai berikut:
Simpan dengan nama file : lat58.cpp :
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
void tulis_cplus(int jumlah=10);
void main()
{
clrscr();
tulis_cplus();
}

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(); //mencetak karakter + sebanyak 5 kali


ulang('–„,10); //mencetak karakter – sebanyak 10 kali
ulang('*'); //mencetak karakter * sebanyak 5 kali
}
void ulang(char kar,int jumlah)

ASB/AK
C++ Programming 60

{
for(int i=1;i<=jumlah;i++)
cout<<kar;
cout<<endl; //ganti baris
}

Hasil :

5.6. Referensi
Pada C++ referensi digunakan untuk memberikan nama alias dari variabel.
Bentuk pendeklarasiannya :

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; //deklarasi referensi
clrscr( ) ;

i=10;
cout<<"i = "<<i<<endl;
cout<<"r = "<<r<<endl;
r=55;
cout<<"i = "<<i<<endl;
cout<<"r = "<<r<<endl;
}

Hasil :

ASB/AK
C++ Programming 61

Terlihat bahwa nilai i dan r adalah sama, hal ini disebabkan karena kata kunci
&, yang membuat nilai yang diisikan kepada variabel i dikirim ke variabel r.

5.7. Parameter
Pada hakekatnya, prosedur dengan referensi merupakan suatu teknik
pemrograman modular dimana terjadi pertukaran informasi antar modul dan titik
dimana ia dipanggil. Penggunaan parameter menawarkan mekanisme
pertukaran informasi. Tiap item data ditransfer antara parameter aktual (nyata)
dan parameter formal yang bersesuaian.
Parameter aktual adalah parameter yang disertakan pada waktu pemanggilan
dengan kata lain ia dikirimkan dari modul utama ke modul pada prosedur lain,
sedangkan parameter formal adalah parameter yang dideklarasikan di dalam
bagian header modul prosedur itu sendiri.
Teknik pemrograman modular dengan referensi diakses dengan cara
memanggil namanya dari program pemanggil (prosedur utama) atau modul lain
disertai parameter aktualnya.

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.

ASB/AK
C++ Programming 62

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 :

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

ASB/AK
C++ Programming 63

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

ASB/AK
C++ Programming 64

x = 20 y = 12 z = 32
Karena parameter formal dengan pengiriman parameter secara nilai
sifatnya lokal, maka perubahan-perubahan nilai parameter di prosedur
tidak akan mempengaruhi nilai parameter aktual di modul utama, dengan
demikian nilai parameter c tetap tidak terpengaruh oleh perubahan
parameter z, jadi masih 0 karena pengiriman ini bersifat searah.

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

ASB/AK
C++ Programming 65

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

ASB/AK
C++ Programming 66

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

ASB/AK
C++ Programming 67

Hubungan antara parameter formal dengan parameter aktual adalah sebagai


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

faktorial( N, F );

Parameter formal fak akan digantikan oleh parameter aktual N, dan parameter
formal hasil digantikan oleh parameter aktual F. Karena parameter ini
merupakan parameter masukan/keluaran (by reference) maka nilai pada
parameter formal akan dikirim balik ke parameter aktual, sehingga pada saat
program dijalankan bukan parameter formal hasil yang ditampilkan,
melainkan parameter aktual F.

TUGAS 5
Buatlah Program seperti tampilan dibawah ini.
Simpan dengan nama : tugas51.cpp

ASB/AK
C++ Programming 68

Pilihan
----------------
[1] Perkalian
[2] Pembagian
[3] Keluar
----------------
Pilihan [1..3] :

Ketentuan Soal
Jika pilihan 1 maka : Jika Pilihan 2 maka :
Perkalian Pembagian
---------------------- ---------------------
Masukkan Nilai A = 100 Masukkan Nilai A = 100
Masukkan Nilai B = 20 Masukkan Nilai B = 20
Hasil A x B = 2000 Hasil A / B = 5
Coba Lagi [Y/T] : Coba Lagi [Y/T] :

Program :

BAB 6
FUNGSI

ASB/AK
C++ Programming 69

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

ASB/AK
C++ Programming 70

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

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>

ASB/AK
C++ Programming 71

#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)
{ Panggil fungsi kuadrat disertai
daftar parameter aktualnya
return(I * I);
}

Hasil :

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); //prototype fungsi


void main()

{
clrscr();
for(int k=1;k<=10;k++)
cout<<setw(2)<<k
<<setw(2)<<" f "<<"("<<k<<")= "<<f(k)<<endl;

ASB/AK
C++ Programming 72

int f(int x)
{
return(2*x*x+5*x-8);
}

Hasil :

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();
int x,y,z; Panggil fungsi maks3 disertai
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

ASB/AK
C++ Programming 73

Adakalanya suatu fungsi tidak perlu memiliki nilai balik. Misalnya fungsi
yang hanya dimaksudkan untuk menampilkan suatu keterangan saja. Pada
fungsi seperti ini, tipe nilai balik fungsi yang diperlukan adalah void.
Simpan dengan nama file : lat64.cpp :
//fungsi tanpa nilai balik
#include<iostream.h>
#include<conio.h>
void tampilkan_judul();
void main()
{
clrscr();
tampilkan_judul();
}

void tampilkan_judul()
{
cout<<"U & I Love C++"<<endl;
cout<<"Please Contact Us"<<endl;
cout<<"ARDI Information Technology"<<endl;
}
Hasil :

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
ASB/AK
C++ Programming 74

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 :

BAB 7
ASB/AK
C++ Programming 75

LARIK
7.1. PENDAHULUAN
Sebuah peubah hanya menyimpan sebuah nilai dari tipe tertentu. Ia tidak
dapat menyimpan beberapa buah nilai yang bertipe sejenis. Seringkali kita
perlu mengolah sekumpulan data yang bertipe sama, misalnya hasil ujian 100
orang mahasiswa, tabel harga barang di pasar swalayan, daftar kode wilayah
dalam percakapan interlokal, dan sebagainya.
Secara umum memang larik (array) didefinisikan sebagai struktur data
yang menyimpan elemen yang bertipe sama. Namun pada
pengembangannya larik banyak digunakan untuk mengolah data yang
mempunyai nama dan tipe yang berbeda, seperti hasil ujian mahasiswa
dengan field-field misal NIM, NAMA, NILAI, INDEKS, dsb sehingga
mempunyai tipe yang kompleks. Untuk larik dangan kasus ini kita harus
menggunakan tipe bentukan Record (Structure), agar suatu kumpulan field
dengan tipe data yang berbeda dapat diolah. Tipe larik yang tersusun atas
field-field dengan nama dan tipe yang berbeda disebut sebagai “Larik
Terstruktur”.
Gambaran lojik sebuah larik dapat dijelaskan sebagai berikut:
A
1
2
3
4
5
6
7
8

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

ASB/AK
C++ Programming 76

Angka di dalam kurung siku menyatakan indeks larik. Setiap elemen larik
menyimpan sebuah nilai. Karena seluruh elemen larik bertipe sama maka
nilai yang disimpan oleh setiap elemen juga harus bertipe sama. Gambar 7.2
memperlihatkan larik bernama A yang setiap elemennya berisi nilai ujian akhir
8 orang mahasiswa.
A
1 80
2 75
3 60
4 82
5 59
6 76
7 87
8 71

Gambar 7.2 Elemen larik berisi data tipe integer

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:

ASB/AK
C++ Programming 77

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

ASB/AK
C++ Programming 78

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 dan 5
adalah banyaknya elemen larik */
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 :

ASB/AK
C++ Programming 79

Simpan dengan nama file : lat73.cpp :


//program hitung rata-rata dari kumpulan nilai
#include<iostream.h>
#include<conio.h>

void main()
{
float Nilai[N]; //larik dengan data nilai 5 orang mhs
int k;
float jumlah,Rata2;
clrscr();

jumlah=0;
cout<<"Data Nilai Ujian" << endl;
for(k=1;k<=N;k++)
{
cout<<"Nilai " <<k<<" = ";
cin >> Nilai[k];
jumlah=jumlah+Nilai[k];
}
clrscr();
Rata2=jumlah/N;
cout<<"Rata-rata = "<<Rata2<<endl;
}

Hasil :

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>

ASB/AK
C++ Programming 80

void main()
{
const Nmaks=100; //elemen larik dengan jumlah maksimum 100
float Nilai[Nmaks];
int k,N;
float jumlah,Rata2;
clrscr();
jumlah=0;
cout<<"Jumlah data ? ";
cin >> N;
for(k=1;k<=N;k++)
{
cout<<"Nilai " <<k<<" = ";
cin >> Nilai[k];
jumlah=jumlah+Nilai[k];
}
clrscr();
Rata2=jumlah/N;
cout<<"Data Nilai Ujian" << endl;
for(k=1;k<=N;k++)
cout<<Nilai[k]<<endl;
cout<<"Rata-rata = "<<Rata2<<endl;
}
Hasil :

Bila program dijalankan, maka akan menanyakan jumlah data yang ingin
dimasukkan, yang tidak lain adalah jumlah elemen efektif larik yang ingin
dipakai dari jumlah 100 elemen yang didefinisikan.

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:

ASB/AK
C++ Programming 81

int jum_hari[12] =
{
31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
merupakan contoh pendefinisian larik bernama jum_hari yang terdiri dari 12
elemen bertipe integer dan secara berurutan (dimulai dari indeks 0) diberi nilai
31, 28 dan seterusnya.

31 28 31 30 31 30 31 31 30 31 30 31

0 1 2 3 4 5 6 7 8 9 10 11

C++ secara otomatis akan memberi nilai awal nol terhadap larik yang bersifat
global. Tidak demikian bila larik didefinisikan secara lokal (diatur sendiri oleh
pemrogram).
Simpan dengan nama file : lat74.cpp :
//program inisialisasi larik
#include<iostream.h>
#include<conio.h>
void main()
{
int i;
int jum_hari[12] =
{
31,28,31,30,31,30,31,31,30,31,30,31
};
clrscr( ) ;
for(i=0;i<12;i++)
cout<<"jum_hari["<<i<<"] = "<<jum_hari[i]<<endl;
}
Hasil :

7.6. Mencari Nilai Maksimum Larik

ASB/AK
C++ Programming 82

Terkadang kita ingin mencari nilai maksimum dari suatu larik, misalnya
mencari juara pertama dari sekumpulan skor sebuah pertandingan, mencari
juara kelas dan sebagainya. Pencarian nilai maksimum pada larik haruslah
data bertipe integer atau real.
Bila elemen larik sudah terurut menaik, harga maksimum langsung dapat
diperoleh pada elemen pertamanya. Tetapi bila elemen larik tersusun acak,
kita harus “mengunjungi” seluruh elemen larik satu persatu untuk
mendapatkan nilai maksimum. Terdapat tiga versi algoritma pencarian harga
maksimum:

a.Versi 1 :
Algoritma ini mengasumsikan nilai mula-mula (maks) adalah nilai yang
sangat kecil, misalnya dari kumpulan nilai ujian kita definisikan bahwa nilai
maksimum mula-mula adalah –999.
Teknik dari versi 1 ini dapat dijabarkan sebagai berikut:
 Larik dikunjungi mulai dari elemen pertama.
 Setiap kali mengunjungi elemen larik, bandingkan elemen tersebut
dengan nilai maksimum sementara.
 Jika elemen larik yang sedang dibandingkan lebih besar dari nilai
maksimum sementara, maka nilai pada elemen tersebut menjadi
maksimum sementara sekarang.
 Pada akhir kunjungan (yaitu setelah seluruh elemen larik dikunjungi,
nilai maksimum sementara menjadi nilai maksimum di seluruh elemen
larik.
Sebagai ilustrasi tinjau kembali contoh larik pada Gambar 7.3:
A
1 80
2 75
3 60
4 82
5 59
6 76
7 87
8 71

maks = –999 (nilai maksimum sementara)

ASB/AK
C++ Programming 83

A[1] > maks? Ya maks A[1] (maks = 80)


A[2] > maks? Tidak (maks tetap = 80)
A[3] > maks? Tidak (maks tetap = 80)
A[4] > maks? Ya maks A[4] (maks = 82)
A[5] > maks? Tidak (maks tetap = 82)
A[6] > maks? Tidak (maks tetap = 82)
A[7] > maks? Ya maks A[7] (maks = 87)
A[8] > maks? Tidak (maks tetap = 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;
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 :

ASB/AK
C++ Programming 84

b.Versi 2 :
Pada algoritma versi dua ini, nilai maksimum sementara diinisialisasi
dengan elemen pertama larik. Selanjutnya, larik dikunjungi mulai dari
elemen kedua. Setiap kali mengunjungi elemen larik, bandingkan elemen
tersebut dengan nilai maksimum sementara. Jika elemen larik yang sedang
dibandingkan lebih besar dari nilai maksimum sementara, maka elemen
tersebut menjadi maksimum sementara sekarang. Pada akhir kunjungan
(yaitu setelah seluruh elemen larik dikunjungi), nilai maksimum sementara
menjadi nilai maksimum dari seluruh elemen larik.
Sebagai ilustrasi, tinjau kembali contoh larik pada Gambar di bawah ini:

A
1 80
2 75
3 60
4 82
5 59
6 76
7 87
8 71

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[4] (maks = 82)
A[5] > maks? Tidak (maks tetap = 82)
A[6] > maks? Tidak (maks tetap = 82)
A[7] > maks? Ya maks A[7] (maks = 87)
A[8] > maks? Tidak (maks tetap = 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>

ASB/AK
C++ Programming 85

void main()
{
int nilai[5]; //larik dengan data nilai 5 orang mhs
int k,maks;
clrscr();

for (k=1;k<=5;k++)
{
cout<<"Nilai " <<k<<" = ";
cin >> nilai[k];
}
maks=nilai[1];
for (k=2;k<=5;k++)
{
if (nilai[k] > maks)
maks=nilai[k];
}
cout<<"Nilai terbesar = "<<maks<<endl;
}

Hasil :

Algoritma versi 2 lebih umum dan pasti benar untuk nilai larik apapun (baik
bernilai positif ataupun negatif). Algoritma tetap benar meskipun larik
hanya berukuran 1 elemen A (yaitu N = 1).

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;

ASB/AK
C++ Programming 86

clrscr();
cout<<"================" << endl;
cout<<"Data Nilai Ujian" << endl;
cout<<"================" << endl;
min=999; //nilai minimum sementara
for(k=1;k<=5;k++)
{
cout<<"Nilai " <<k<<" = ";cin >> nilai[k];
if (nilai[k]<min)
min=nilai[k];
}
cout<<"================" << endl;
cout<<"Nilai ujian terendah = "<<min<<endl;
}
Hasil :

b.Versi 2 :
Simpan dengan nama file : lat78.cpp :
//program cari nilai minimum larik dengan
//elemen pertama dianggap nilai minimum sementara
#include<iostream.h>
#include<conio.h>
void main()
{
int nilai[5]; //larik dengan data nilai 5 orang mhs
int k,min;
clrscr();
for(k=1;k<=5;k++)
{
cout<<"Nilai " <<k<<" = ";
cin >> nilai[k];
}
min=nilai[1];
for(k=2;k<=5;k++)
{
if (nilai[k] < min)
min=nilai[k];
}
cout<<"Nilai terkecil = "<<min<<endl;
}

ASB/AK
C++ Programming 87

Hasil :

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.
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 X 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
2 75
3 60
4 82
5 59
6 76
7 87
8 71

ASB/AK
C++ Programming 88

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 6
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 0
a. Versi 1 (pembandingan tanpa peubah boolean)
Hasil: indeks larik tempat X berada
 Setiap elemen larik A dibandingkan dengan X.
 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;

ASB/AK
C++ Programming 89

}
else
cout<<”Maaf data yang Anda cari tidak ada”<<endl;
}
Hasil :

b.Versi 2 (pembandingan dengan peubah boolean)


Hasil: indeks larik tempat X berada.
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;

ASB/AK
C++ Programming 90

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 :


#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'

ASB/AK
C++ Programming 91

Hasil :

7.9 Mengurutkan data


Pengurutan (sorting) adalah proses mengatur sekumpulan obyek menurut
urutan atau susunan tertentu. Urutan obyek tersebut dapat menaik
(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.

ASB/AK
C++ Programming 92

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()
{
int nilai[5]; //larik dengan data nilai 5 orang mhs
int temp; //peubah bantu untuk pertukaran
int i; //pengurutan untuk jumlah langkah
int k; //pencacah untuk pengapungan pada setiap elemen
int N; //jumlah elemen efektif larik
clrscr();

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++) //hanya ada N-1 langkah


{
for(k=N;k>=(i+1);k--) /* 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]<< ' ';
}

ASB/AK
C++ Programming 93

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

ASB/AK
C++ Programming 94

}
}
cout<<endl;
cout<<"Nilai sesudah terurut menaik = ";
for(k=1;k<=5;k++)
cout<<nilai[k]<< ' ';
}

Hasil :

ASB/AK
C++ Programming 95

TUGAS 7
Buatlah Program seperti tampilan dibawah ini.
Simpan dengan nama : tugas71.cpp

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 96

BAB 8
OPERASI STRING
8.1. Pengantar String
Nilai suatu string adalah kumpulan dari nilai-nilai karakter yang berurutan
dalam bentuk larik dimensi satu. Nilai suatu string ditulis di dalam tanda petik
dua ( “ ). Suatu nilai string disimpan di memori dengan diakhiri oleh nilai „\0‟
(null). Misalnya nilai suatu string “ABC” akan disimpan di memori dengan
bentuk :

A B C „ \0„

Sebagai suatu larik karakter, karakter pertama dari nilai string mempunyai
indeks ke nol, karakter kedua mempunyai indeks ke satu dan seterusnya.
Dengan mengetahui bahwa suatu nilai string diakhiri dengan nilai „\0‟, maka
akhir nilai dari suatu string dapat dideteksi.
Program berikut ini akan menampilkan nilai suatu string dalam bentuk
karakter demi karakter dimulai dari karakter pada indeks ke-0 sampai akhir dari
nilai stringnya. Penampilannya karakter demi karakter ini tampak di statement
for yang menggunakan peningkatan I++. Nilai I=0 di statement for menunjukkan
karakter pertama di nilai string. Penampilan karakter ini akan dilakukan terus
selama karakter yang ditampilkan bukan akhir dari nilai string, yang ditunjukkan
oleh kondisi String[ I ] != „\0‟ di statement for.
#include<iostream.h>
#include<conio.h>
void main()
{
char Nilai_String[20]="aBcdE";
int I;
for(I=0;Nilai_String[I]!=0;I++)
cout<<Nilai_String[I]<<' \n';
}

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
ASB/AK
C++ Programming 97

terakhir terdapat karakter NULL (karakter dengan nilai ASCII sama dengan
nol atau disimbolkan dengan „\0‟, yaitu tanda \ diikuti dengan nol).
Bila suatu string hanya berisi karakter NULL, string disebut sebagai string
kosong.
 Karakter NULL merupakan ciri khas pengakhir string pada C++
 Suatu string disebut sebagai string kosong kalau string tidak berisi
suatu karakter-pun. Konstanta string kosong ditulis sebagai berikut:
“”
8.3. Variabel String
Variabel string adalah variabel yang dipakai untuk menyimpan string,
misalnya:
char teks[10];
Merupakan pernyataan untuk mendefinisikan variabel string dengan
panjang maksimal 10 karakter (sudah termasuk karakter NULL). Perlu
diketahui, pernyataan di atas tidak lain adalah untuk mendefinisikan array
bertipe karakter.
Variabel string tidak lain adalah array bertipe char yang mengandung
elemen berupa karakter NULL, yang menyatakan akhir string.

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

ASB/AK
C++ Programming 98

#include<iostream.h>
#include<conio.h>
void main()
{
char teks[13]; //string dengan panjang maksimal 12 karakter
clrscr();
cout<<"Masukkan teks : ";
cin.get(teks,13);

cout<<"Teks yang Anda masukkan adalah "<<teks<<endl;


}

//input data string dengan spasi


#include<iostream.h>
#include<conio.h>
void main()
{
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;

ASB/AK
C++ Programming 99

cout<<"ALAMAT = "<<alamat<<endl;
}

c. Menyalin String
Menyalin string berbeda dengan menyalin bilangan. Misalnya teks1 dan teks2
adalah variabel string, untuk menyalinnya kita tidak bisa memberikan pernyataan:
teks1 = teks2
untuk menyalin string teks1 ke teks2 kita harus memberikan trik seperti
pada contoh program di bawah ini:
//menyalin string
#include<iostream.h>
#include<conio.h>
void main()
{
char teks[ ]="C++ Emang Handal";
char data[25];
int i;

clrscr();

for(i=0;teks[i];i++)
data[i]=teks[i];
data[i]=' \0';
cout<<"Isi data = "<<data<<endl;
}
Berbeda dengan struktur pengulangan bilangan, pada struktur pengulangan
di atas sebuah string diulang sebanyak inisialisasi pada variabel string.
Namun untuk string berspasi harus ada pengakhiran karakter ber-ASCII nol
agar tidak muncul karakter diluar keinginan.
Selain cara di atas, untuk menyalin suatu string dapat digunakan fungsi
bernama strcpy. Bentuk notasinya adalah :
strcpy(string_target, string_asal)
Prototipe fungsi di atas ada dalam file header string.h.
//program salin string pake strcpy
#include<iostream.h>
#include<conio.h>
void main()
{
char teks[ ]="C++ Memang Handal";
char data[20];

clrscr();

strcpy(data,teks);
cout<<"Isi data : "<<data<<endl;
}

d.Fungsi & Makro Berbasis Karakter

ASB/AK
C++ Programming 100

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

ASB/AK
C++ Programming 101

jum_punctuasi++;
if(isdigit(st[i]))
jum_digit++;
}

cout<<endl;
cout<<"Jumlah kapital = "<<jum_kapital<<endl;
cout<<"Jumlah huruf kecil = "<<jum_kecil<<endl;
cout<<"Jumlah digit = "<<jum_digit<<endl;
cout<<"Jumlah punctuasi = "<<jum_punctuasi<<endl;
}

e. Mencari karakter dalam suatu string


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.

ASB/AK
C++ Programming 102

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

ASB/AK
C++ Programming 103

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

ASB/AK
C++ Programming 104

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 Prototype Keterangan
atoi( ) stdlib.h Mengkonversi string argumen menjadi nilai bertipe int
atof( ) stdlib.h Mengkonversi string argumen menjadi nilai bertipe float
atol( ) stdlib.h Mengkonversi string argumen menjadi nilai bertipe long int
_atold( ) stdlib.h Mengkonversi string argumen menjadi nilai bertipe long double

//konversi string ke angka dengan atoi()


#include<iostream.h>
#include<conio.h>
#include<string.h>
#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

ASB/AK
C++ Programming 105

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))
{
strcpy(nama,C);
harga=1200000;
total=jumlah*harga;
}
else
exit(0);

cout<<setw(17)<<""<<"Kuitansi Pembelian"<<endl;
cout<<setw(15)<<""<<"PT. GlobalNet Computer"<<endl;
cout<<endl;
cout<<"======================================================="<<endl;
cout<<"Kode brg"<<setw(12)<<"Nama Brg"<<setw(15)<<"Qty"
<<setw(8)<<"Harga"<<setw(10)<<"Jumlah"<<endl;
cout<<"======================================================="<<endl;
cout<<setiosflags(ios::left)<<setw(12)<<kode
<<setiosflags(ios::left)<<setw(18)<<nama
<<setiosflags(ios::right)<<setw(4)<<jumlah
<<setiosflags(ios::right)<<setw(10)<<harga
<<setiosflags(ios::right)<<setw(10)<<total<<endl;
cout<<"======================================================="<<endl;
}

ASB/AK
C++ Programming 106

BAB 9
STRUKTUR (RECORD)

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

fiel d 1 fiel d 2 fiel d 3 ............. fiel d N

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:

ASB/AK
C++ Programming 107

 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:
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 //pendeklarasian struktur
{
int tahun;
int bulan;
int tanggal;
};
data_tanggal tanggal_lahir; //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

ASB/AK
C++ Programming 108

#include<iostream.h>
#include<conio.h>
void main()
{
struct data_tanggal //pendeklarasian
{
int tahun;
int bulan;
int tanggal;
};
data_tanggal tanggal_lahir; //pendefinisian struktur
//mengakses anggota struktur
tanggal_lahir.tanggal=17;
tanggal_lahir.bulan=8;
tanggal_lahir.tahun=1945;
cout<<"Hari kemerdekaan kita adalah” <<tanggal_lahir.tanggal<<'/'
<<tanggal_lahir.bulan<<'/'
<<tanggal_lahir.tahun<<endl;
}
Bila program dijalankan :
Hari kemerdekaan kita adalah 17/8/1945

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


ASB/AK
C++ Programming 109

#include<iostream.h>
#include<conio.h>
void main()
{
struct data_tanggal //pendeklarasian
{
int tahun;
int bulan;
int tanggal;
};
data_tanggal tgl1,tgl2; //pendefinisian struktur
//penugasan per anggota
tgl1.tanggal=17;
tgl1.bulan=8;
tgl1.tahun=1945;
//penugasan antar variabel struktur
tgl2 = tgl1;
cout<<"Hari kemerdekaan kita adalah "<<tgl2.tanggal<<'/'
<<tgl2.bulan<<'/'
<<tgl2.tahun<<endl;
}
Bila program dijalankan :
Hari kemerdekaan kita adalah 17/8/1945

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;

ASB/AK
C++ Programming 110

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;
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]; angka 5 menunjukkan
banyaknya elemen larik
long gaji;
};
data_pegawai data[5]; /* 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>

ASB/AK
C++ Programming 111

#include<iomanip.h>
void main()
{
const Nmaks=100;
struct data_pegawai
{
char nip[11];
char nama[26];
long gaji;
};
data_pegawai data[Nmaks]; /*pendefinisian struktur data yang
merupakan tipe bentukan variabel
data_pegawai */
int k,N;
clrscr();

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

1 031.02.004 Heru Dwi Wahyono Rp. 2500000

2 031.02.005 Diah Marliani Rp. 1500000

. ……….. ………………. …………….

. ……….. ………………. …………….


100 031.02.103 Wina Nurmaulina Rp. 900000
5

ASB/AK
C++ Programming 112

Larik data dengan 100 elemen. Setiap elemen larik bertipe tersrtuktur (record).
Tiap record terdiri atas field NIP, NAMA dan GAJI

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 tanggal_lahir
{
int tanggal;
struct data_pegawai int bulan;
{ int tahun;
char nip[11]; };
char nama[26];
long gaji;
tanggal_lahir tgl;
};
data_pegawai data[Nmaks];

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

ASB/AK
C++ Programming 113

cout<<"NIP : ";cin>>data[k].nip;
cout<<"Gaji : ";cin>>data[k].gaji;
clrscr();
cout<<"Data kelahiran"<<endl;
cout<<"Tanggal : ";cin>>data[k].tgl.tanggal;
cout<<"Bulan : ";cin>>data[k].tgl.bulan;
cout<<"Tahun : ";cin>>data[k].tgl.tahun;
clrscr();
}
clrscr();
cout<<" DAFTAR GAJI"<<endl;
cout<<" KARYAWAN PT.ELANG PERSADA"<<endl;
cout<<endl;
cout<<"==========================================================="<<endl;
cout<<"No."
<<setw(5)<<"NIP"
<<setw(13)<<"NAMA"
<<setw(25)<<"Tgl Lahir"
<<setw(8)<<"GAJI"<<endl;
cout<<"==========================================================="<<endl;
for(k=0;k<N;k++)
{
cout<<setiosflags(ios::left)<<setw(5)<<k
<<setiosflags(ios::left)<<setw(12)<<data[k].nip
<<setiosflags(ios::left)<<setw(20)<<data[k].nama
<<data[k].tgl.tanggal<<"-"<<data[k].tgl.bulan<<”-“
<<setw(8)<<data[k].tgl.tahun
<<setw(4)<<"Rp."
<<setiosflags(ios::right)<<setw(7)<<data[k].gaji<<endl;
}
cout<<"========================================================="<<endl;
}
Selain bertipe terstruktur, elemen larik juga dapat bertipe larik lain. Contoh
berikut menyajikan struktur tipe bentukan yang cukup kompleks. Misalkan kita
ingin menyimpan data nilai-nilai mata kuliah yang diambil setiap mahasiswa pada
sebuah larik bernama LarikMhs. Pada suatu semester, setiap mahasiswa
mengambil 4 buah mata kuliah. Hal tersebut dapat ditangani dengan
menggunakan struktur di dalam struktur namun dengan tipe larik yang berlainan.
Data yang disimpan dalam larik adalah sebagai berikut:
1. NIM (Nomor Induk Mahasiswa)
2. NamaMhs (Nama Mahasiswa)
3. Mata kuliah (MK) yang diambil mahasiswa tersebut (4 buah), berupa larik:
a. Kode mata kuliah ke-1 d. Kode mata kuliah ke-4
Nama mata kuliah ke-1 Nama mata kuliah ke-4
Nilai mata kuliah ke-1 Nilai mata kuliah ke-4
b. Kode mata kuliah ke-2
Nama mata kuliah ke-2
Nilai mata kuliah ke-2
c. Kode mata kuliah ke-3
Nama mata kuliah ke-3
Nilai mata kuliah ke-3

ASB/AK
C++ Programming 114

struct mata_kuliah
{
const Nmaks=100; char KodeMK[7];
struct data_mhs char NamaMK[20];
{ int nilai;
int nim; };
char nama[26];
mata_kuliah MK[4];
};
data_mhs data[Nmaks];

Pada contoh di atas didefinisikan sebuah struktur mata_kuliah dan


struktur data_mhs. Di dalam struktur data_mhs terdapat deklarasi MK[4] yang
merupakan peubah 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++)
{

ASB/AK
C++ Programming 115

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

ASB/AK
C++ Programming 116

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


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

ASB/AK
C++ Programming 117

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

ASB/AK
C++ Programming 118

float kel;
double luas;
}Lingkaran;

float jari2;
cout<<"Masukkan jari-jari : ";cin>>jari2;

Lingkaran.kel=2*3.14*jari2;
cout<<"Keliling lingkaran = "<<Lingkaran.kel<<endl;
Lingkaran.luas=3.14*jari2*jari2;
cout<<"Luas lingkaran = "<<Lingkaran.luas<<endl;
}
Pada contoh di atas, variabel Lingkaran dideklarasikan sebagai suatu union
sebagai berikut:
union{
float kel;
double luas;
}Lingkaran;
Berarti elemen keliling dan luas akan menempati lokasi memori yang sama
secara bergantian. Besarnya lokasi memori yang akan digunakan adalah
sebesar 8 byte yang merupakan ukuran elemen terbesar (tipe double untuk
elemen luas). Jika digambarkan bentuk penggunaan bersama memori ini
akan tampak sebagai berikut:
Luas

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

ASB/AK
C++ Programming 119

{
struct{
float kel;
double luas;
}Lingkaran;
float jari2;
clrscr();
cout<<"Jari-jari : ";cin>>jari2;
Lingkaran.kel=2*3.14*jari2;
Lingkaran.luas=3.14*jari2*jari2;

cout<<"Keliling lingkaran = "<<Lingkaran.kel<<endl;


cout<<"Luas lingkaran = "<<Lingkaran.luas<<endl;
}

9.11 KATA KUNCI typedef


Bahasa C++ memungkinkan pembuat program untuk mendefinisikan
kembali suatu nama tipe data yang baru berdasarkan tipe data yang lama.
//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 :

x1  x 2 y  y2
x3  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;

ASB/AK
C++ Programming 120

}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;
}
Bila program di atas dijalankan:
Titik P1 :
x1 : 4
y1 : 8
Titik P2 :
x2 : 2
y2 : 6
Titik tengah adalah : P3(3,7)

ASB/AK
C++ Programming 121

BAB 10
POINTER
10.1. Konsep Pointer
Pointer adalah tipe dasar yang rentang nilainya adalah alamat di memori
komputer. Suatu pointer di dalam program dimaksudkan untuk menunjuk ke
suatu alamat memori. Misal diberikan sebuah variabel X berisi harga bertipe
integer dan PX adalah variabel pointer yang akan menunjuk ke variabel X,
maka gambaran lojiknya adalah sebagai berikut :

0xff4
........

0xff2 PX

80 X 0xff2
........

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

ASB/AK
C++ Programming 122

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
cout<<“Alamat X = “<<&X<<endl;
cout<<“PX = “<<PX<<endl;
}
Hasil dari program di atas:
Alamat X = 0x0064fe00
PX = 0x0064fe00
Dari program di atas terlihat bahwa pointer PX menunjuk kepada variabel
X bertipe integer. Karena pointer adalah alamat, maka sel memori yang berisi
nilai pointer berarti menyimpan alamat sel memori yang lain.
Bila PX diisi dengan alamat fisik peubah X, maka nilai yang disimpan oleh
X ditunjuk oleh PX menuju sel memori lain yang bertipe integer dan
alamatnya disimpan di dalam PX.

........
3001h 80 X

3003h 3001h PX
........

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>

ASB/AK
C++ Programming 123

void main()
{
int X=80; //variabel bukan pointer
int *PX; //variabel pointer
clrscr();
cout<<“Nilai X semula : “<<X<<endl;
PX=&X; //pointer menunjuk ke X
*PX=72; //Nilai yang ditunjuk diubah menjadi 72
cout<<“Nilai X sekarang : “<<X<<endl;
}
Hasil dari program di atas :
Nilai X semula : 80
Nilai X sekarang : 72
Pada contoh di atas variabel X ditunjuk oleh variabel pointer PX yang
kemudian diubah nilainya menjadi 72. Sehingga pada pencetakan terakhir
nilai X oleh cout bukan berisi 80 melainkan 72. Namun ingat nilai yang diubah
dari 80 menjadi 72 alamatnya adalah tetap, yaitu pada variabel X hanya
nilainya saja yang berubah.
Hal ini ditunjukkan oleh contoh program di bawah ini:
#include<iostream.h>
#include<conio.h>
void main()
{
int X=80; //variabel bukan pointer
int *PX; //variabel pointer

clrscr();

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


cout<<"Alamat X mula-mula : "<<&X<<endl;

PX=&X; //pointer menunjuk ke X


*PX=72; //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.

ASB/AK
C++ Programming 124

Dapat menunjuk ke
sebarang tipe data

int

float
Pointer void

char

Contoh: …
void *Ptr

#include<iostream.h>
#include<conio.h>
void main()
{
void *Ptr; //pointer tak bertipe

clrscr();

int X=60;
float Y=37.5;

Ptr=&X;
cout<<"Nilai integer yang ditunjuk oleh Ptr : "
<<*(int *)Ptr<<endl;
Ptr=&Y;
cout<<"Nilai pecahan yang ditunjuk oleh Ptr : "
<<*(float *)Ptr<<endl;
}
Hasil dari program di atas :
Nilai integer yang ditunjuk oleh Ptr : 60
Nilai pecahan yang ditunjuk oleh Ptr : 37.5
Bila sebuah pointer didefinisikan sebagai pointer tak bertipe, maka pada saat
pengaksesan nilai yang ditunjuk oleh pointer haruslah sebagai berikut :
*(tipe_data variabel yang ditunjuk oleh pointer *) variabel pointer
Pengaksesan ini bukan hanya berlaku untuk mengambil nilai yang ditunjuk
oleh pointer, melainkan juga mengubahnya.
#include<iostream.h>
#include<conio.h>
void main()
{
clrscr();
void *ptr;
int x=80;

ASB/AK
C++ Programming 125

float y = 72.3;
ptr=&x;
cout<<"Nilai integer mula-mula : "
<<x<<endl;
*(int *)ptr=77;
cout<<"Nilai integer sekarang : "<<x<<endl;

ptr=&y;
cout<<"Nilai pecahan mula-mula : "
<<y<<endl;
*(float *)ptr=51.7;
cout<<"Nilai pecahan sekarang : "
<<y<<endl;
}
Hasil program di atas :
Nilai integer mula-mula : 80
Nilai integer sekarang : 77
Nilai pecahan mula-mula : 72.3
Nilai pecahan sekarang : 51.7

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

ASB/AK
C++ Programming 126

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

Pointer
menunjuk ke
pointer

Untuk membentuk pointer seperti pada gambar di atas diperlukan


pendefinisian sebagai berikut:
int X;
int *ptr1; //satu tanda * di depan ptr1
int **ptr2; //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;

ASB/AK
C++ Programming 127

//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.
//pointer dalam fungsi
#include<iostream.h>
#include<conio.h>
void ubah_nilai(int *x); //prototipe fungsi
void main()
{
int a=168;
clrscr();

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:

ASB/AK
C++ Programming 128

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

ASB/AK
C++ Programming 129

BAB 11
KELAS & OBYEK
11.1. Pendahuluan
Ide dasar pada bahasa berorientasi obyek (OOP) adalah
mengkombinasikan data-data dan fungsi untuk mengakses data menjadi
sebuah kesatuan unit. Unit ini dikenal dengan nama obyek (obyek). Obyek
sebenarnya mencerminkan pola kerja manusia dalam kehidupan sehari-
sehari. Sebuah obyek dapat diibaratkan sebagai departemen-departemen di
dalam sebuah perusahaan bisnis. Contoh departemen:
 Penjualan

 Akunting

 Inventory

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:

Obyek
Data

Fungsi Anggota

Fungsi Anggota

Gambar 11.1 Data dan fungsi pemanipulasi data pada suatu obyek

ASB/AK
C++ Programming 130

Adapun gambar 11.2 melukiskan hubungan antarobyek yang


menganalogikan struktur di perusahaan.

Obyek 1 Dept.
Data Penjualan
Data
Penjualan

Fungsi Anggota 1 Manager

Fungsi Anggota 2 Sekretaris

Dept.
Obyek 2 Inventory
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

ASB/AK
C++ Programming 131

mendengar nama-nama seperti Al-Khuwarizmi, Aljabar dan Abdul Shinna.


Mereka adalah ilmuwan dengan disiplin ilmu yang berbeda-beda, Al-
Khuwarizmi adalah Bapak Algoritma dunia, pencipta metode algoritma,
Aljabar adalah ahli matematik dan Ibnu Shinna adalah ahli dalam bidang
kedokteran. Ilmuwan dapat diilustrasikan sebagai kelas (class) dan mereka-
mereka 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

ASB/AK
C++ Programming 132

Apabila Simba adalah singa, maka Simba juga memiliki sifat-sifat umum dari
singa. Tetapi tentu saja, Simba bisa mempunyai sifat yang lain, misalnya
pendiam atau lucu.
□ Polimorphism (Polimorfisme)
Polimorphism merupakan suatu konsep yang menyatakan sesuatu yang
sama dapat memiliki berbagai bentuk dan perilaku yang berbeda. Istilah ini
berasal dari bahasa Yunani, yang berarti “mempunyai banyak bentuk”.

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: //penambahan kata kunci

ASB/AK
C++ Programming 133

char judul[35];
char pengarang[25];
int jumlah;
};
void main()
{
clrscr();
Buku novel; //pendefinisian obyek
strcpy(novel.judul,"Gun Of The Navarone");
strcpy(novel.pengarang,"Alistair MacLean");
novel.jumlah=12;
cout<<novel.judul<<endl;
cout<<novel.pengarang<<endl;
cout<<novel.jumlah<<endl;
}
Selain menggunakan kata kunci public anggota-anggota pada suatu class
juga dapat menggunakan kata kunci private. Penggunaan private biasa
digunakan pada kelas untuk memproteksi anggota-anggota tertentu pada
kelas, agar tidak dapat diakses di luar kelas secara langsung. Untuk melihat
efek dari private dapat dilihat pada contoh 3 program di bawah ini:
#include<iostream.h>
#include<conio.h>
#include<string.h>
class Buku
{
private:
char judul[35];
char pengarang[25];
int jumlah;
};
void main()
{
clrscr();

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
ASB/AK
C++ Programming 134

terletak di dalam kelas biasa disebut anggota data dan fungsi yang terletak di
dalamnya disebut fungsi anggota (member function).
Konsep obyek ini tentu berbeda jauh dengan cara yang ditempuh pada
program konvensional (bukan berorientasi obyek), yang memisahkan data
dan fungsi yang mengaksesnya. Pada program konvensional, data hanya
diperlakukan sebagai komponen kelas kedua. Fungsi justru berkedudukan
sebagai komponen utama. Pada pemrograman berorientasi obyek, data dan
fungsi harus dirancang secara bersamaan.

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

ASB/AK
C++ Programming 135

{
cout<<"Judul : "<<judul<<endl;
cout<<"Pengarang : "<<pengarang<<endl;
cout<<"Jumlah Buku : "<<jumlah<<endl;
}
};

void main()
{
clrscr();
Buku novel;
novel.inisialisasi("Gun Of The Navarone","Alistair MacLean",12);
novel.info();
}
Pada program di atas, kelas Buku memiliki tiga buah anggota data (judul,
pengarang dan jumlah) dan dua buah anggota fungsi anggota
(inisialisasi()dan info()). Ketiga data anggota dinyatakan sebagai private.
Oleh karena itu, ketiga data ini tidak dapat diakses di luar kelas. Namun data
ini dapat diakes oleh kedua fungsi anggota dan semua fungsi anggota dapat
diakses di luar kelas, mengingat dinyatakan sebagai publik. Melalui kedua
fungsi inilah data kelas dapat diakses, misalnya pada fungsi main().

class Buku
{
private:
char judul[35];
.....
public: anggota data
void inisialisasi(...)
{
.......
}
void info()
{ fungsi anggota
....... fungsi anggota
}
};

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

ASB/AK
C++ Programming 136

Namun ada hal yang perlu diperhatikan. Fungsi anggota seperti di atas dapat
mengenali variabel seperti judul, pengarang dan jumlah, yang tidak lain
adalah data anggota dari kelas buku.
Pernyataan di dalam fungsi main():
Buku novel;
digunakan untuk mendefinisikan obyek bernama novel.
Selanjutnya di dalam fungsi main() ini kita dapat memanggil fungsi
anggota obyek novel dengan cara berikut:
 novel.inisialisasi("Gun Of The Navarone","Alistair MacLean",12);
 novel.info();
Bentuk pemanggilannya :

nama_obyek.nama_fungsi(argumen)

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

ASB/AK
C++ Programming 137

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


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 masing-
masing 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 judul
pengarang pengarang
jumlah 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:

ASB/AK
C++ Programming 139

class Buku
{
private:
char judul[35];
char pengarang[25];
int jumlah;

public:
void inisialisasi(char *Judul, char *Pengarang, int Jumlah)
{
strcpy(judul,Judul);
strcpy(pengarang,Pengarang);
jumlah=Jumlah;
}
void info()
{
.
}
};
Bentuk kedua, pada kelas hanya terdapat deklarasi fungsi anggota
(prototype), sehingga bentuknya menjadi semacam berikut:
class Buku
{
private:
char judul[35];
char pengarang[25];
int jumlah;

public:
void inisialisasi(char *Judul, char *Pengarang, int Jumlah);
void info();
};
Definisi fungsi anggota ditempatkan di luar kelas.
Definisi untuk kedua fungsi anggota pada kelas Buku ditulis menjadi :
void Buku::inisialisasi(char *Judul, char *Pengarang, int Jumlah)
{
strcpy(judul,Judul);
strcpy(pengarang,Pengarang);
jumlah=Jumlah;
}
void Buku::info()
{
cout<<”Judul : “<<judul<<endl;
cout<<”Pengarang : “<<pengarang<<endl;
cout<<”Jumlah Buku : “<<jumlah<<endl;

} Nama kelas
Nama fungsi
anggota

void Buku::info()
{
cout<<”Judul : “<<judul<<endl;

ASB/AK
C++ Programming 140

Operator resolusi
Nama anggota data
lingkup
kelas Buku

Cara kedua ini lebih umum digunakan. Perlu diketahui pada penulisan
Buku::inisialisasi(), dengan sendirinya anggota data kelas Buku dikenali pada
fungsi tersebut.
Di bawah ini diberikan contoh yang menggunakan bentuk penulisan alternatif
fungsi anggota:
//alternatif lain penulisan fungsi anggota
#include<iostream.h>
#include<conio.h>
#include<string.h>
class Buku
{
private:
char judul[35];
char pengarang[25];
int jumlah;
public:
void inisialisasi(char *Judul, char *Pengarang, int Jumlah);
void info();
};

void main()
{
clrscr();
Buku novel;
novel.inisialisasi("Gun of The Navarone","Alistair MacLean",12);
novel.info();
}
void Buku::inisialisasi(char *Judul, char *Pengarang, int Jumlah)
{
strcpy(judul,Judul);
strcpy(pengarang,Pengarang);
jumlah=Jumlah;
}
void Buku::info()
{
cout<<"Judul : "<<judul<<endl;
cout<<"Pengarang : "<<pengarang<<endl;
cout<<"Jumlah buku : "<<jumlah<<endl;
}
Catatan: Jika fungsi anggota mengandung sedikit pernyataan (satu atau dua pernyataan), definisi fungsi
anggota ditulis di dalam deklarasi kelas (contoh sebelum 11.6.1). Tetapi untuk fungsi anggota
yang kompleks, definisinya diletakkan di luar kelas.

/* penulisan anggota data pada fungsi anggota dengan


format kelas::data */

#include<iostream.h>
#include<conio.h>
#include<string.h>

class Movie
{

ASB/AK
C++ Programming 141

private:
char judul[20];
char cast[40];
char genre[30];
public:
void inisialisasi(char *judul, char *cast, char *genre);
void info();
};

void main()
{
clrscr();

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