Penjelasan Bahasa Pemograman Lengkap PDF
Penjelasan Bahasa Pemograman Lengkap PDF
Untuk SMK
Penulis : Suprapto
Kadarisman Tejo Yuwono
Totok Sukardiyono
Adi Dewanto
Tim Penulis
ii
DAFTAR ISI
iii
iv
BAB 7 FUNGSI
7.1. Pendahuluan .................................................................................... 253
7.2. Fungsi Void ....................................................................................... 255
7.3. Pemanggilan Fungsi ......................................................................... 255
7.4. Prototipe Fungsi ............................................................................... 262
7.5. Pengiriman data pada Fungsi ........................................................... 264
7.6. Passing Data by Value ..................................................................... 269
7.7. Pernyataan Kembali ......................................................................... 271
7.8. Mengembalikan Nilai dari Fungsi ..................................................... 272
7.9. Pengembalian Nilai Boolean ............................................................ 276
7.10. Menggunakan Fungsi dalam program menu .................................... 277
7.11. Variabel Lokal dan Global ............................................................... 279
7.12. Variabel Static Local ......................................................................... 284
7.13. Soal Latihan ...................................................................................... 287
BAB 9. ARRAY
9.1. Pengertian Array ............................................................................... 333
9.2. Deklarasi Array ................................................................................. 339
9.3. Inisialisasi Array ................................................................................ 342
9.4. Array multi dimensi ........................................................................... 342
9.5. Mengurutkan element Array ............................................................. 346
9.6. Contoh program array ...................................................................... 350
9.7. Soal Latihan ...................................................................................... 353
vi
vii
BAB 1
DASAR-DASAR PEMROGRAMAN KOMPUTER
1.1. Pendahuluan
1.2. Perangkat Keras Komputer
1.3. Arsitektur Komputer
1.4. Kerja Komputer
1.5. Sistem Bilangan
1.6. Pemrograman Komputer
1.7. Bahasa Pemrograman
1.8. Penulisan Bahasa Pemrograman
1.9. Element Bahasa Pemrograman
1.10. Bahasa C++
1.11. Struktur Bahasa C++
1.12. Input/output
1.13. Soal Latihan
1.1. Pendahuluan
Setiap orang yang bekerja digunakan oleh orang lain selain ahli
biasanya membutuhkan alat bantu bedah.
untuk menyelesaikan pekerjaannya Ada beberapa peralatan yang
supaya menjadi lebih mudah. digunakan oleh beberapa profesi,
Seorang tukang kayu misalnya misalnya: obeng digunakan oleh ahli
membutuhkan palu, gergaji dan mesin, tukang kayu, tukang listrik dan
pengukur. Ahli mesin membutuhkan lain sebagainya. Selain obeng,
kunci pas dan obeng. Seorang teknisi komputer juga merupakan sebuah
elektronika membutuhkan multimeter, peralatan yang digunakan oleh
oscilloscope dan solder untuk banyak profesi, sehingga hal tersebut
menyelesaikan pekerjaannya. sangat sulit dikategorikan pada
Beberapa peralatan bantu bidang apa.
tersebut dapat dikategorikan sesuai Selain seperti dijelaskan diatas
dengan jenis pekerjaannya, misalnya komputer juga mencakup banyak
seorang ahli bedah, maka orang pekerjaan yang berbeda atau boleh
tersebut harus mempunyai peralatan jadi dapat dikatakan menjadi
yang didesain secara khusus untuk peralatan yang paling serbaguna
melakukan operasi. Peralatan yang pernah dibuat.
tersebut tentunya tidak biasa Pemanfaatan komputer oleh
seorang akuntan, digunakan untuk
2008 | Direktorat Pembinaan SMK 1
Da
asar-dasar Pemro
ograman Kompu
uter Bahasa Pemro
orgraman
Ga
ambar. 1.2. Perangkat
P K
Keras Sebuah Sistem Ko
omputer
Perangka
at lunak me engendalikann dalam komputer. Secara umum
fungsi dan op
perasi sebuaah komputerr. lapisan akan saling berhubbungan
Adda bebera
apa lapisan (layerr) dengan layer diatas atau
pe
erangkat lunnak yang digunakan di dibawahhnya.
Gamb
bar. 1.3. Lap
pisan Perang
gkat Lunak
yang benar. Perangkat lunak ini aplikasi dan mengakses file memori
bersifat permanen dan disimpan luar seperti Compact Disk (CD).
dalam memori komputer. Perangkat Sistem operasi, secara umum
lunak inilah yang dikenal sebagai menyediakan satu set tool untuk
firmware program aplikasi, melakukan suatu
Firmware digunakan untuk mekanisme pengaksesan monitor,
meletakan program bootloader. disk drive, dan seterusnya.
Bootloader adalah sebuah program Kenyataan dilapangan sebuah
khusus dan dijalankan oleh prosesor komputer tidak semua menggunakan
ketika membaca sistem operasi dari sistem operasi. Sering juga komputer
disk atau memori nonvolatile yang bersifat sangat sederhana dan
kemudian menempatkannya di dalam langsung menjalankan tugasnya.
memori. Bootloader biasanya dimiliki Pada permasalahan tertentu, seperti
komputer desktop dan workstation. router jaringan, perangkat lunaknya
Lapisan perangkat lunak diatas terintegrasi dan sangat sederhana
firmware, adalah sistem operasi. proses pengembangan.
Perangkat lunak ini berfungsi Perangkat lunak pada lapisan
mengendalikan operasi komputer, paling tinggi adalah perangkat lunak
mengorganisir penggunaan memori aplikasi yang merupakan program
dan mengendalikan peralatan seperti yang langsung berhubungan dengan
keyboard, mouse, monitor, disk drive, kemampuan sebuah komputer.
dan sebagainya. Sistem operasi juga Kemampuan sebuah komputer
memberikan fsilitas kepada user sangat tergantung pada aplikasi
untuk melakukan antarmuka dengan perangkat lunak sistem.
piranti lain, menjalankan program
Da
asar-dasar Pemro
ograman Kompu
uter Bahasa Pemro
orgraman
Gambar.1..5. Aliran Da
ata pada seb
buah Kompu
uter
200
08 | Direktorat Pembinaan
P SMK
K 7
1.3.2. Memori
Memori digunakan untuk diputus, dan jenis memori ini sering
menyimpan perangkat lunak yang disebut dengan Volatail memory.
berupa data maupun obcode sebuah Kedua jenis memori tersebut
prosesor. Memori dapat mempunyai kelebihan serta
dikategorikan menjadi memori yang kelemahan masing-masing, sehingga
dapat menyimpan data secara penggunaannyapun disesuaikan
permanen walaupun listrik yang dengan kebutuhan masing-masing.
mengalir pada memori tersebut Memori diimplementasikan
diputus dan memori ini sering disebut dalam bentuk chip yang didalamnya
Nonvolatail memory (tidak mudah berisi ribuan komponen elektronika.
berubah isinya), dan memori yang Memori ini dapat digambarkan dalam
bersifat sementara atau data yang blok diagram seperti gambar
disimpan dalam memori tersebut dibawah:
akan hilang jika listrik yang mengalir
1.3.3. Input/Output
Dalam sebuah komputer, piranti tersebut terdapat piranti
prosesor dan memori berhubungan perekaman informasi berbentuk disk
dengan berbagai piranti luar yang atau disket. Piranti tersebut sering
dihubungkannya. Karena berbagai dikenal dengan pheriperal. Biasanya
piranti tersebut merupakan suatu peripheral dibuat oleh berbagai
yang ditambahkan dengan prosesor, perusahaan untuk berbagai
maka piranti tersebut sering dikenal kegunaan.
sebagai piranti peripheral. Piranti Pada piranti tertentu, bagian
tersebut melakukan komunikasi sistem pengelolaan piranti itu dibuat
dengan prosesor yang diatur juga oleh perusahaan pembuat
melalui protocol tertentu. piranti bersangkutan. Tentunya
Selanjutnya, berbagai piranti tersebut pembuatan bagian sistem operasi
memerlukan pengaturan yang dalam pengelolaan piranti itu telah
hal ini dilakukan oleh sistem operasi. disesuaikan dengan sistem operasi
Sesuai dengan arah yang pada umumnya ada di dalam
penyalurannya, dalam komputer sistem komputer.
dikenal sebagai piranti Input Bagian sistem operasi untuk
(masukan), piranti output (keluaran), pengelolaan piranti peripheral itu
dan piranti input output (masukan secara khusus, diatur oleh
keluaran). Diantara berbagai jenis pengendali piranti secara umum,
Da
asar-dasar Pemro
ograman Kompu
uter Bahasa Pemro
orgraman
Gam
mbar 1.7 Gra
afik Nilai Teg
gangan Analog Terhada
ap Waktu
Sistem yang
y memp proses nilaai menggu unakan An nalog to Digital
disskrit (langgkah demi langkah) Convertter (ADC). ADC men ngubah
dinnamakan diggital. Pada sistem
s digita
al sinyal kontinyu
k menjadi sinyal diskrit
un
ntuk menu unjukkan suatu
s nila
ai dengan menyampllingnya tiap p detik
diggunakan simbol yang dinamakan n (tiap satuan
s waaktu). Perhhatikan
diggit. Sinyal pada gam mbar diatass gambarr dibawah inii.
da
apat didigitalkan dengann
Komputerr adalah
h sebuah
h direpressentasikan oleh
o sinyal listrik.
pe
erangkat elektronik.
e Data yangg Sinyal yang d
digunakan bisa
da
apat diolah
h adalah data yang g dianaloggikan denggan saklar listrik,
200
08 | Direktorat Pembinaan
P SMK
K 17
Ba
ahasa Pemrogram
man Dasar-dasarr Pemrograman Komputer
K
ya
aitu tombol off (matii) atau on n hidup, maka kom mputer membaca
(hidup). Jika saklar pada
a kondisi offf, sebagaii angka 1. Perhatikan
P g
gambar
maka kompu uter memba aca sebaga ai berikut:
da
ata 0, jika saklar dalam kondissi
0 1bit
1
1 1
1bit
0110 4
4bit
10011101 8
8bit
Sistem bilangan
b bin
ner disusun
n Pen
ngolahan data
d yang paling
da
ari angka-a angka, sam ma sepertti sering digunakan saat ini adalah
sisstem bilan ngan desim mal (sistemm pengolaah kata (w word processsing)..
billangan 10) yang sering g digunakan
n Ketika melakukan
m suatu pengolahan
sa
aat ini. Tetapi
T untuuk desima al kata, komputer bekerja dengan d
menggunakan n angka 0 sampai 9, keyboarrd. Ada 101 tombol yang
sisstem bila
angan bin
ner hanya
a mewakili karakter alphabet
a A, B, C,
menggunakan n angka 0 daan 1. dan setterusnya. Se
elain itu juga
a akan
1
18 Direktoratt Pembinaan SM
MK | 2008
Bilangan35,27
271hex=1001110001bin
Sehinggamenjadi
1 =0001 1001110001bin
7 =0111
2 =0010
1001110001bin =271hex
Jikadipecahmenjadi
0001 =1 271hex
0111 =7
0010 =2
dari 128 karakter yang masing- Hampir semua karakter pada ASCII
masing berukuran 7-bit. Bila juga terdapat pada set karakter
menggunakan ukuran 8-bit maka EBCDIC.
karakternya menjadi 256 atau 28.
Program 1.1
#include<conio.h>
#include<iostream>
usingnamespacestd;
intmain()
{
doublejam,besar,bayar;
cout<<"BerapaJamKamubekerja?";
cin>>jam;
cout<<"Berapabesargajitiapjamnya?";
cin>>besar;
bayar=jam*besar;
cout<<"KamumendapatkanGaji(Rp)"<<bayar<<endl;
getch();
return0;
}
data jumlah jam kerja kemudian diisi menghitung dengan mengalikan data
10 dan memasukan gaji tiap jamnya tersebut sehingga data keluaran akan
150000 maka komputer akan muncul 150000.
NAMA PENJELASAN
BASIC Beginners Allpurpose Symbolic Instruction Code, bahasa pemrograman
yang biasa digunakan untuk merancang program sederhana pada
programerpemula
FORTRAN Formula Translator, Bahasa pemrograman yang dirancang untuk
menyelesaikanalgoritmamatematikayangkompleks
COBOL Common BusinessOriented Language. Bahasa pemrograman yang
dirancangpadaaplikasibisnis
Pascal Pemrograman terstruktur, bersifat umum, dan biasanya bahasa
pemrograminibanyakdiajarkan
C Pemrogram terstruktur, bersifat umum. Bahasa ini dikembangkan oleh
belllaboratories.BahasaCinidapatdigunakansebagaibahasaarastinggi
danarasrendah.
C++ DasarpengembanganC.C++dapatdigunakansebagaibahasaberorientasi
objek,yangtidakditemukanpadabahasaC.Bahasainijugadikembangkan
olehlaboratoriumBell
C# C# atau C sharp. Bahasa ini ditemukan oleh microsoft untuk
mengembangkanaplikasipadaaplikasimicrosoft.NET
Java Bahasainimerupakanbahasaberorientasiobjekyangdikembangkanoleh
Sum Microsistem. Dengan java memungkinkan untuk pengembangan
programyangberjalanpadajaringaninternetataupadawebbrowser.
VISUALBASIC Bahasa pemrograman microsoft dimana bahasa ini bertujuan untuk
pengembangan perangkat lunak yang dapat memudahkan programmer
dalammembuataplikasiberbasiswindows.
ini menunjukan proses translasi dari compiler dan linker yang hal tersebut
file sumber menjadi file executable. dilakukan dengan satu aksi tunggal.
Seluruh proses pada gambar
tersebut dilakukan oleh preprosesor,
Gambar 1.13. proses translasi dari file sumber menjadi file executable
a. Deklarasi Variable:
Perhatikan deklarasi antara dua word var, kemudian diikuti dengan
buah program yang berbeda. nama variable (identifier) yang ingin
Dibawah ini merupakan deklarasi digunakan, dan kemudian tipe data
dari variable tersebut. Sedangkan
program yang digunakan oleh
pada C, deklarasi diawali dengan tipe
bahasa pascal dan bahasa C. data variable baru diikuti dengan
perhatikan perbedaan antara dua nama variable (identifier). Suatu
bahasa tersebut. identifier harus diawali oleh karakter
bukan angka, tetapi tidak boleh
Bahasa Pascal mengandung karakter khusus seperti
Var I,i2 :Integer; * , - + / \ = < > . ? & dan sebagainya.
Pada bahasa Pascal, identifier tidak
s :String; bersifat case sensitive, maksudnya,
huruf besar ataupun huruf kecil
Bahasa C dianggap sama. Sebaliknya pada
Int 1,12; Bahasa C, identifier bersifat case
Char s[100]; sensitive, sehingga variable s dan S
akan dianggap dua identifier yang
Untuk mendeklarasikan variable berbeda.
pada Pascal, digunakan reserved
b. Deklarasi Konstanta:
Dalam melakukan deklarasi nilai constphi=3.14;
konstanta atau nilai tetap, dilakukan
dengan cara menulis const. Konstanta yaitu nilai yang tetap. Jadi
perhatikan contoh penulisan program jika mengacu pada contoh di atas,
dibawah ini: maka nilai phi tidak dapat diubah-
ubah dan akan selalu 3.14
Bahasa C
structdatasiswa{
char nama[30];
char alamat[30];
char telp[20];
}
enumhari=(senin,selasa,rabu,kamis,jumat,Sabtu,mingu);
Bahasa Pascal
TypeTdatasiswa=^dataSiswa
Datasiswa =record
Nama :String[30];
Alamat :String[30];
Telp :String[20];
end;
typehari=(senin,selasa,rabu,kamis,jumat,Sabtu,mingu);
d. Deklarasi Procedure/Function:
Untuk membahas masalah funsi pada C Perhatikan potongan
procedure pada bahasa Pascal dan program dibawah ini:
Pada bahasa C
voidcetak(char8string);
intTambah(inta,intb);
1.8.2. Statement
Bagian statement merupakan bukan blok utama program maka
bagian program yang berisi perintah reserved word end diakhiri dengan
yang akan dieksekusi /dijalankan. tanda titik koma (;). Sebaliknya pada
Pada bahasa Pascal, bagian bahasa C, dimulai dari deklarasi
statement selalu diawali dengan variable hingga akhir statement
reserved word begin dan end. diawali dan diakhiri dengan tanda
Apabila blok statement adalah blok kurung kurawal { dan }. Berikut
utama program, maka reserved word adalah contoh potongan kode untuk
end harus diakhiri dengan tanda implementasi menghitung luas
titik(.), sebaliknya jika blok statement lingkaran dengan Bahasa.
Program 1.2
#include<stdio.h>
voidmain()
{
constphi=3.24;
floatdiameter,radius,luas;
scanf("%f",&diameter);
radius=diameter/2.0;
luas=phi*radius*radius;
printf("%f",Luas);
}
2008 | Direktorat Pembinaan SMK 37
dipisahkan dengan satu atau lebih sendiri maupun orang lain yang
spasi, tab, baris baru, atau komentar. membaca kode program tersebut.
Pada bahasa Pascal, teks yang
b. Komentar berada di antara kurung kurawal
Komentar yaitu teks (kumpulan pembuka {dan kurung kurawal tutup }
karakter) yang diabaikan oleh akan dianggap sebagai komentar.
Compiler. Komentar sangat berguna Selain itu, dapat pula menggunakan
untuk memberi catatan mengenai tanda (* sebagai pembuka komentar,
bagian program tertentu sebagai dan tanda *) sebagai penutup.
referensi baik bagi programmer itu Perhatikan contoh program dibawah:
begin
{CetakhelloWorldOlehSaya}
Writeln(HelloWorld);
end.
Pada bahasa C, teks yang berada di juga akan dianggap komentar satu
antara tanda /* dan tanda */ akan baris. Berikut adalah contoh
dianggap sebagai komentar. Dan penggunaan komentar pada bahasa
untuk teks yang ada setelah tanda // C:
voidmain(){
//CetakhelloWorld
//OlehSaya
printf(HelloWorld);
}
c. Identifier
Identifier merupakan kumpulan ABCDEFGHIJKLMNOPQRSTUVWXYZ
karakter yang digunakan sebagai
penanda untuk nama variable, nama Selanjutnya boleh menggunakan
tipe data, fungsi, prosedur, dan karakter angka ( 0 1 2 3 4 5 6 7 8 9 )
sebagainya. Aturan penulisan maupun karakter non angka tersebut
identifier pada bahasa Pascal dan di atas, namun tidak boleh
bahasa C dapat dikatakan serupa. menggunakan karakter khusus
Yaitu: suatu identifier harus diawali seperti + - * / ? ! { } [ ] dan
oleh karakter non angka sebagai sebagainya. Berikut adalah contoh-
berikut: contoh identifier yang benar maupun
salah.
_abcdefghijklmnopqrstuvwxyz
_nama Benar
no_Telpon Benar
bilangan2 Benar
4data Salah,karenadiawaliolehkarakterangka:4data
teks? Salah,karenamengandungkarakterkhusus/special:Teks?
intmain()
{
doublejam,besar,bayar;
printf("BerapaJamKamubekerja?");
scanf(jam);
printf("Berapabesargajitiapjamnya?");
scantf(besar);
bayar=jam*besar;
printf("KamumendapatkanGaji(Rp)",bayar<<endl;
return0;
}
intmain()
{
doublejam,besar,bayar;
cout<<"BerapaJamKamubekerja?";
cin>>jam;
cout<<"Berapabesargajitiapjamnya?";
cin>>besar;
bayar=jam*besar;
cout<<"KamumendapatkanGaji(Rp)"<<bayar<<endl;
return0;
}
Program 1.5
#include<iostream>
intmain()
{
doublejam,besar,bayar; //tipedatadouble
cout<<"BerapaJamKamubekerja?"; //tampilkankatatersebut
cin>>jam; //masukanjam
cout<<"Berapabesargajitiapjamnya?"; //tampilkankatatersebut
cin>>besar; //masukanbesargajitiapjam
bayar=jam*besar; //kalikanjamdengangajitiapjam
cout<<"KamumendapatkanGaji(Rp)"<<bayar<<endl;//jumlahgajitotal
return0;
42 Direktorat Pembinaan SMK | 2008
Program 1.6
#include<iostream.h>
voidmain()
{
charpesan[]="Hello,C++programmers!";
cout<<pesan;
return0;
}
#defineSIZE30
intarray[SIZE];
for(registerinti=0;i<SIZE;i++)
{
cout<<array[i];
}
Program 1.7
#include<conio.h>
#include<iostream>
usingnamespacestd;
intmain()
{
charpesan[]="Hello,ProgrammerC++!";
cout<<pesan;
getch();
return0;
}
voidmain()
{
intx;
printf("Masukkansebuahbilangan:\n");
scanf("%d",&x);
printf("Bilanganyangdimasukkanadalah%d\n",x);
2008 | Direktorat Pembinaan SMK 45
voidmain()
{
intx;
cout<<"Masukkansebuahbilangan:"<<endl;
cin>>x;
cout<<"Bilanganyangdimasukkanadalah"<<x<<endl;
}
voidmain()
{
inta;
cout<<"masukkansuatubilangan:";
cin>>a;
cout<<"nilaitersebutditambah1='<<a+1;
return0;
}
BAB 2
BAHASA DAN ALGORITMA PEMROGRAMAN
Tabel Rasio pernyataan bahasa tingkat tinggi dengan kode bahasa rakitan
yang setara. (Mc. Connell, h 46)
Tabel 2.2. Rasio bahasa tingkat tinggi dengan kode bahasa rakitan
BAHASA RASIO
Assembler 1:1
ADA 1:4.5
Quick/Turbo/Basic 1:5
C 1:2.5
FORTRAN 1:3
PASCAL 1:3.5
1. Masukkansembarangbilangansebanyaktigabuah.
2. Ambilbilanganpertamadansetmaksimumnyasamadenganbilanganpertama.
3. Ambilbilangankeduadanbandingkandenganmaksimum.
4. Apabila bilangan kedua lebih besar dari maksimum maka ubah maksimumnya
menjadisamadenganbilangankedua.
5. Ambilbilanganketigadanbandingandenganmaksimum.
6. Apabila bilangan ketiga lebih besar dari maksimum maka ubah lagi maksimum
nyamenjadisamadenganbilanganketiga.
7. Variabelmaksimumakanberisibilanganyangterbesardantampilkanhasilnya.
1. Masukkana,b,danc.
2. maka.
3. Jikab>mak,kerjakanlangkahke4.Jikatidak,kerjakanlangkahke5.
4. makb.
5. Jikac>mak,kerjakanlangkahke6.Jikatidak,kerjakanlangkahke7.
6. makc.
7. Tulismak.
4) Keluaran
Keluaran adalah hasil dari
Gambar 2.1. Simbol masukan pemrosesan data dan merupakan
jawaban atas permasalahan yang
2) Masukan manual ada. Keluaran ini harus
Untuk masukan secara manual ditampilkan pada layar monitor
yang dimasukkan melalui agar dapat dibaca oleh pengguna
keyboard, atau perangkat input program. Sama seperti aturan
lainnya seperti barcode reader, pada simbol-simbol sebelumnya,
kita dapat menggunakan simbol penulisan hasil pemrosesan data
masukan secara manual. Sama dapat dilakukan secara satu per
dengan simbol masukan, pada satu maupun secara keseluruhan.
simbol masukan manual ini untuk
alasan efisiensi ruang gambar
biasanya masukan juga dituliskan
bersamaan secara keseluruhan.
5) Percabangan
Yang dimaksud dengan
Gambar 2.2. Simbol masukan percabangan disini adalah suatu
manual kegiatan untuk mengecek atau
memeriksa suatu keadaan
3) Proses apakah memenuhi suatu kondisi
Data yang dimasukan kemudian tertentu atau tidak. Jadi dalam
diproses untuk menghasilkan percabangan ini, kita harus
jawaban atas persoalan yang menuliskan kondisi apa yang
ingin dipecahkan. Kegiatan harus dipenuhi oleh suatu
memproses data ini disimbolkan keadaan. Hasil dari pemeriksaan
dengan persegi panjang. Sama keadaan ini adalah YA atau
seperti simbol pada masukan, TIDAK. Jika pemeriksaan
penulisan operasi-operasi pada keadaan menghasilkan kondisi
data dapat dilakukan secara satu yang benar, maka jalur yang
per satu maupun secara dipilih adalah jalur yang berlabel
keseluruhan. YA, sedangkan jika pemeriksaan
keadaan menghasilkan kondisi
yang salah, maka jalur yang
dipilih adalah jalur yang berlabel suatu sub rutin pada program
TIDAK. Berbeda dengan aturan utama (main program) yang akan
pada simbol-simbol sebelumnya, anda pelajari pada bagian atau
penulisan kondisi harus dilakukan bab lain pada buku ini. Aturan
secara satu per satu (satu notasi penulisan simbol sub rutin sama
percabangan untuk satu kondisi). dengan simbol percabangan,
yaitu penulisan nama sub rutin
dilakukan secara satu per satu.
6) Sub rutin
Gambar 2.6. Simbol sub rutin
Sub rutin adalah suatu bagian
dalam program yang dapat
7) Arah aliran
melakukan (atau diberi) tugas
Arah aliran merupakan jalur yang
tertentu. Jadi sub rutin
harus diikuti dan merupakan garis
merupakan program kecil yang
penghubung yang
menjadi bagian dari suatu
menghubungkan setiap langkah
program yang besar. Sub rutin
pemecahan masalah yang ada
ada dua macam, yaitu prosedur
dalam flow chart. Arah aliran ini
(procedure) dan fungsi (function).
disimbolkan dengan anak panah
Perbedaan antara keduanya
adalah setelah dipanggil prosedur
tidak mengembalikan suatu nilai
sedangkan fungsi selalu
mengembalikan suatu nilai.
Dalam bahasa C++ kedua sub
rutin tersebut dijadikan satu yaitu
Gambar 2.7. Simbol arah aliran
function, sedangkan untuk Java
menggunakan class dimana
8) Terminator
keduanya bisa diatur untuk dapat
Terminator berfungsi untuk
mengembalikan nilai atau tidak
menandai titik awal dan titik akhir
dapat mengembalikan nilai. Sub
dari suatu flow chart. Simbol
rutin ini akan didiskusikan pada
terminator ini diberi label MULAI
bab tersendiri.
untuk menandai titik awal dari
Sub rutin memiliki suatu flow
flow chart dan label SELESAI
chart yang berdiri sendiri diluar
untuk menandai titik akhir dari
flow chart utama. Jadi dalam
flow chart. Jadi dalam sebuah
simbol sub rutin, kita cukup
flow chart harus ada dua simbol
menuliskan nama sub rutinnya
terminator, yaitu simbol
saja, sama seperti jika kita
terminator untuk MULAI dan
melakukan pemanggilan terhadap
SELESAI.
58 Direktorat Pembinaan SMK | 2008
Mulai
a, b, c
Ya
Maksimum < b Maksimum b
Maksimum a Tidak
Ya
Maksimum < c Maksimum c
Tidak
Maksimum
Selesai
Algoritma bilangan_terbesar
{algoritmainimencaribilanganterbesardaritigabilanganyangdimasukkan}
deklarasi
a,b,c,mak:integer
deskripsi
read(a,b,c)
maka
if(mak<b)
makb
elseif(mak<c)
makc
endif
write(mak)
4) BC
5) TulisAdanB
Mulai
A 19
B 33
C A
A B
B C
A, B
Selesai
Algoritma tukar_data
{algoritmainidigunakanuntukmenukarkanduabuahdata}
deklarasi
a,b,c:integer
deskripsi
a19
b33
ca
ab
bc
write(a,b)
1. #include<iostream>
2. usingnamespacestd;
3. intmain(){
4. inta=19,b=33;
5. intc=a;
6. a=b;
7. b=c;
8. cout<<a=<<a<<endl;
9. cout<<b=<<b;
10. return0;
11.}
1. classtukarData{
2. publicstaticvoidmain(String[]args){
3. inta=19,b=33;
4. intc=a;
5. a=b;
6. b=c;
7. System.out.println("a="+a);
8. System.out.println("b="+b);
9. }
10. }
1. #include<iostream>
2. usingnamespacestd;
3. intmain(){
4. inta,b,c,mak;
5. cout<<"Bilanganpertama=";
6. cin>>a;
7. cout<<"Bilangankedua=";
8. cin>>b;
9. cout<<"Bilanganketiga=";
10. cin>>c;
11. mak=a;
12. if(mak<b)mak=b;
13. elseif(mak<c)mak=c;
14. cout<<"Bilanganterbesarnya="<<mak;
15. return0;
16. }
1. importjava.util.Scanner;
2. importjava.io.*;
3. classbilTerbesar{
4. publicstaticvoidmain(String[]args){
5. inta,b,c;
6. Scannerinput=newScanner(System.in);
7. System.out.print("Bilanganpertama=");
8. a=input.nextInt();
9. System.out.print("Bilangankedua=");
10. b=input.nextInt();
11. System.out.print("Bilanganketiga=");
12. c=input.nextInt();
13. intmak=a;
14. if(mak<b)mak=b;
15. elseif(mak<c)mak=c;
16. System.out.print("Bilanganterbesarnya="+mak);
17. }
18. }
1) Masukkana,b,danc.
2) Jikaa>b,makakerjakanlangkahke3.Jikatidak,kerjakanlangkake5.
3) Jikaa>c,makakerjakanlangkahke4.Jikatidak,kerjakanlangkake7.
4) maka.
5) Jikab>c,kerjakanlangkahke6.Jikatidak,kerjakanlangkahke7.
6) makb.
7) makc.
8) Tulismak.
Mulai
a, b, c
Ya Ya
a>b a>c Maksimum a
Tidak Tidak
Ya
Maksimum b b>c
Tidak
Maksimum c
Maksimum
Selesai
Algoritma bilangan_terbesar
{algoritma ini mencari bilangan terbesar dari tiga bilangan yang dimasukkan
secaraacak}
deklarasi
a,b,c,mak:integer
deskripsi
read(a,b,c)
if(a>b)
if(a>c)
maka
elsemakc
endif
else
if(b>c)
makb
elsemakc
endif
endif
write(mak
1. #include<iostream>
2. usingnamespacestd;
3. intmain(){
4. inta,b,c,mak;
5. cout<<"Bilanganpertama=";
6. cin>>a;
7. cout<<"Bilangankedua=";
8. cin>>b;
9. cout<<"Bilanganketiga=";
10. cin>>c;
11. if(a>b){
12. if(a>c)
13. mak=a;
14. elsemak=c;
15. }
16. else{
17. if(b>c)
18. mak=b;
19. elsemak=c;
20. }
21. cout<<"Bilanganterbesarnya="<<mak;
22. return0;
23. }
Klausa if() pada source code di dalam klausa if() (baris ke-11)
baris ke-12 sampai dengan baris ke- bagian else (baris ke-16). Sedangkan
14 ada di dalam klausa if() baris ke- penerjemahan algoritma ke dalam
11. Sedangkan klausa if() baris ke-17 bahasa Java adalah (perhatikan baris
sampai dengan baris ke-19 juga ada ke-13 sampai dengan baris ke-22) :
1. importjava.util.Scanner;
2. importjava.io.*;
3. classbilBesar{
4. publicstaticvoidmain(String[]args){
5. inta,b,c,mak;
6. Scannerinput=newScanner(System.in);
7. System.out.print("Bilanganpertama=");
8. a=input.nextInt();
9. System.out.print("Bilangankedua=");
10. b=input.nextInt();
11. System.out.print("Bilanganketiga=");
12. c=input.nextInt();
13. if(a>b){
14. if(a>c)
15. mak=a;
16. elsemak=c;
17. }
18. else{
19. if(b>c)
20. mak=b;
21. elsemak=c;
22. }
23. System.out.print("Bilanganterbesarnya="+mak);
24. }
25. }
A B
Mulai
Ya
angka angka 2 hari Senin
Tidak
Ya
angka 1 hari Minggu
Ya
angka 3 hari Selasa
Tidak
Tidak
A B
Ya
angka 4 hari Rabu
Tidak
Ya
angka 5 hari Kamis
Tidak
Ya
angka 6 hari Jumat
Tidak
Ya
angka 7 hari Sabtu
Tidak
hari
Selesai
Algoritma nama_hari
{algoritma ini digunakan untuk mengetahui nama hari dari bilangan bulat
yangdimasukkan}
deklarasi
angka :integer
hari :char
deskripsi
read(angka)
if(angka1)
hariMinggu
elseif(angka2)
hariSenin
elseif(angka3)
hariSelasa
elseif(angka4)
hariRabu
elseif(angka5)
hariKamis
elseif(angka6)
hariJumat
elseif(angka7)
hariSabtu
else
hariTidakadanamahari
endif
write(hari)
Algoritma nama_hari
{algoritma ini digunakan untuk mengetahui nama hari dari bilangan bulat
yangdimasukkan}
deklarasi
angka :integer
hari :char
deskripsi
read(angka)
switch(angka)
case1:hariMinggu
case2:hariSenin
case3:hariSelasa
case4:hariRabu
case5:hariKamis
case6:hariJumat
case7:hariSabtu
default:hariTidakadanamahari
endswitch
write(hari)
1. #include<iostream>
2. #include<cstring>
3. usingnamespacestd;
4. intmain(){
5. intangka;
6. stringhari;
7. cout<<"Bilangan=";
8. cin>>angka;
9. if(angka==1)hari="Minggu";
10. elseif(angka==2)hari="Senin";
11. elseif(angka==3)hari="Selasa";
12. elseif(angka==4)hari="Rabu";
13. elseif(angka==5)hari="Kamis";
14. elseif(angka==6)hari="Jumat";
15. elseif(angka==7)hari="Sabtu";
16. elsehari="tidakada";
17. cout<<"Namaharike"<<angka<<"adalah"<<hari;
18. return0;
19. }
1. #include<iostream>
2. #include<cstring>
3. usingnamespacestd;
4. intmain(){
5. intangka;
6. stringhari;
7. cout<<"Bilangan=";
8. cin>>angka;
9. switch(angka){
10. case1:hari="Minggu";
11. break;
12. case2:hari="Senin";
13. break;
14. case3:hari="Selasa";
15. break;
16. case4:hari="Rabu";
17. break;
18. case5:hari="Kamis";
19. break;
20. case6:hari="Jumat";
21. break;
22. case7:hari="Sabtu";
23. break;
24. default:hari="tidakada";
25. }
26. cout<<"Namaharike"<<angka<<"adalah="<<hari;
27. return0;
28. }
1. importjava.util.Scanner;
2. importjava.io.*;
3. classbab2_03{
4. publicstaticvoidmain(String[]args){
5. intangka;
6. Stringhari;
7. Scannerinput=newScanner(System.in);
8. System.out.print("Bilangan=");
9. angka=input.nextInt();
10. if(angka==1)hari="Minggu";
11. elseif(angka==2)hari="Senin";
12. elseif(angka==3)hari="Selasa";
13. elseif(angka==4)hari="Rabu";
14. elseif(angka==5)hari="Kamis";
15. elseif(angka==6)hari="Jumat";
16. elseif(angka==7)hari="Sabtu";
17. elsehari="tidakada";
18. System.out.print("Namaharike"+angka+"adalah="+hari);
19. }
20. }
1. importjava.util.Scanner;
2. importjava.io.*;
3. classbab2_03_2{
4. publicstaticvoidmain(String[]args){
5. intangka;
6. Stringhari;
7. Scannerinput=newScanner(System.in);
8. System.out.print("Bilangan=");
9. angka=input.nextInt();
10. switch(angka){
11. case1:hari="Minggu";
12. break;
13. case2:hari="Senin";
14. break;
15. case3:hari="Selasa";
16. break;
17. case4:hari="Rabu";
18. break;
19. case5:hari="Kamis";
20. break;
21. case6:hari="Jumat";
22. break;
23. case7:hari="Sabtu";
24. break;
25. default:hari="tidakada";
26. }
27. System.out.print("Namaharike"+angka+"adalah="+hari);
28. }
29. }
1) Masukanjumlah(n)datayangdiinginkan.
2) Selamajumlahdatayangdimasukkankurangdarin,kerjakanlangkahke
3danke4.Jikatidakkerjakanlangkahke5.
3) Masukandata.
4) Tambahkandatayangdimasukkandengandatasebelumnya.
5) Hitungrataratadata.
6) Tampilkanbesarrataratanya.
1) Masukkann
2) i0
3) Sum0
4) Selamai<n,kerjakanlangkahke5,6,dan7.
5) Masukkandata[i]
6) SumSum+data[i]
7) i++
8) Rata2Sum/n
9) TulisRata2
Mulai
i0
Sum 0
Tidak Ya
i<n
Data[i]
Rata2 Sum / n
Rata2
Selesai
sebesar satu tingkat. Data pada array ini akan dibahas pada bab
permasalahan ini disimpan dalam tersendiri.
tipe data array (data[i]). Tipe data
Algoritma hitung_rata2
{algoritmainidigunakanuntukmenghitungrataratadarisejumlahdatayang
dimasukkanmelaluikeyboard}
deklarasi
i,n,sum,data[20] :integer
rata2 :float
deskripsi
read(n)
i0
sum0
while(i<n)
read(data[i])
sum+=data[i]
i++
endwhile
rata2sum/n
write(rata2)
Algoritma hitung_rata2
{algoritmainidigunakanuntukmenghitungrataratadarisejumlahdatayang
dimasukkanmelaluikeyboard}
deklarasi
i,n,sum,data[20] :integer
rata2 :float
deskripsi
read(n)
sum0
for(i=0;i<n;i++)
read(data[i])
sum+=data[i]
endfor
rata2sum/n
write(rata2)
1. #include<iostream>
2. usingnamespacestd;
3. intmain(){
4. intn,i=0,sum=0,data[20];
5. floatrata2;
6. cout<<"Jumlahdata(maksimum20data)=";
7. cin>>n;
8. while(i<n){
9. intj=i+1;
10. cout<<"Masukkandatake"<<j<<":";
11. cin>>data[i];
12. sum+=data[i];
13. i++;
14. }
15. rata2=sum/n;
16. cout<<"Rataratanya="<<rata2;
17. return0;
18. }
1. #include<iostream>
2. usingnamespacestd;
3. intmain(){
4. intn,i,sum=0,data[20];
5. floatrata2;
6. cout<<"Jumlahdata(maksimum20)=";
7. cin>>n;
8. for(i=0;i<n;i++){
9. intj=i+1;
10. cout<<"Masukkandatake"<<j<<":";
11. cin>>data[i];
12. sum+=data[i];
13. }
14. rata2=sum/n;
15. cout<<"Rataratanya="<<rata2;
16. return0;
17. }
1. importjava.util.Scanner;
2. importjava.io.*;
3. classbab2_03{
4. publicstaticvoidmain(String[]args){
5. intn,i=0,sum=0;
6. int[]data=newint[20];
7. floatrata2;
8. Scannerinput=newScanner(System.in);
9. System.out.print("Jumlahdata(mak.20)=");
10. n=input.nextInt();
11. while(i<n){
12. intj=i+1;
13. System.out.print("Masukkandatake"+j+":");
14. data[i]=input.nextInt();
15. sum+=data[i];
16. i++;
17. }
18. rata2=sum/n;
19. System.out.print("Rataratanya="+rata2);
20. }
21. }
1. importjava.util.Scanner;
2. importjava.io.*;
3. classbab2_03_2{
4. publicstaticvoidmain(String[]args){
5. intn,i,sum=0;
6. int[]data=newint[20];
7. floatrata2;
8. Scannerinput=newScanner(System.in);
9. System.out.print("Jumlahdata(mak.20)=");
10. n=input.nextInt();
11. for(i=0;i<n;i++){
12. intj=i+1;
13. System.out.print("Datake"+j+":");
14. data[i]=input.nextInt();
15. sum+=data[i];
16. }
17. rata2=sum/n;
18. System.out.print("Rataratanya="+rata2);
19. }
20. }
Mulai A
Ya
m, n fpb n r=0
Tidak
mn
m>n Tidak Ya nr
Tidak r != 0
rm%n
fpb n
Ya
rm%n
fpb
Selesai
1. #include<iostream>
2. usingnamespacestd;
3. intmain(){
4. intm,n,r,fpb;
5. do{
6. cout<<"Masukkanbilanganpertama=";
7. cin>>m;
8. cout<<"Masukkanbilangankedua=";
9. cin>>n;
10. }while(m<n);
11. r=m%n;
12. if(r==0)fpb=n;
13. else{
14. while(r!=0){
15. m=n;
16. n=r;
17. r=m%n;
18. fpb=n;
19. }
20. }
21. cout<<"FPBnya="<<fpb;
22. return0;
23. }
BAB 3
TIPE DATA DAN OPERATOR
3.2. Indentifier
Identifier adalah nama yang kunci (keyword) yang dimiliki oleh
didefinisikan oleh programmer dan C++. Keywords atau kata kunci
digunakan untuk mewakili sebuah merupakan inti pada bahasa dan
elemen pada program. Nama memiliki tujuan tertentu. Tabel
variabel merupakan salah satu dibawah ini menunjukkan daftar
contoh dari identifier. Programmer lengkap kata kunci C++. Dan yang
dapat memilih sendiri nama sebuah perlu diperhatikan pada bahasa C
variabel pada C++, selama tidak adalah bahwa semua harus huruf
menggunakan salah satu dari kata kecil.
PENULISAN KETERANGANIDENTIFIER
Nomor
Nama
Nilai_siswadata1
PenulisanBenar
Rekam_1
_temp
$harga_jual
1data
Nomorsiswa,namasiswa
if
PenulisanSalah
2_jalan
2$
main
dan range jangkauan yang dimiliki ditandai dengan dua tanda kutip
lebih tinggi. Derajat ketelitian untuk tunggal (.) sebagai pembatasnya.
floating point 7 digit, sedangkan misalnya: A, b, &, !.
double precision 16 digit. Selain itu juga ada beberapa diantara
konstanta data karakter yang ditulis
dengan diawali tanda \ (penempatan
3.3.2. Konstanta Teks/String. tanda \ setelah tanda petik tunggal
Konstanta teks atau string pembuka).
adalah suatu konstanta yang nilai Karakter ini dinamakan
tetapnya berupa teks. Konstanta teks rangkaian escape (escape
dibedakan dalam dua jenis, yaitu: sequence), sehingga disebut dengan
konstanta karakter rangkaian escape.
a. Konstanta data karakter Beberapa karakter rangkaian escape,
Konstanta data karakter terdiri antara lain :
dari sebuah karakter saja dan
KARAKTER KETERANGAN
\a Untukbunyibell(alert)
\b Mundursatuspasi(backspace)
\f Gantihalaman(formfeed)
\n Gantibarisbaru(newline)
\r Kekolompertama,barisyangsama
\v Tabulasivertical
\0 Nilaikosong(null)
\ Karakterpetiktunggal
\ Karakterpetikganda
\\ Karaktergarismiring
Helo,LagiBelajar
BahasaPemrograman,DiSekolahmuya?
#definenomor100 constintnomor=100;
#definephi3.14 constfloatphi=3.14;
#definehurufK constcharhuruf=K;
#definenamaHello constStringnama=Hello;
#definephi3.14
#definehuruf'K'
#definenama"Hello"
usingnamespacestd;
main()
{
cout<<"Nilaikonstantanomor:"<<nomor;
cout<<"\nNilaikonstantaphi:"<<phi;
cout<<"\nNilaikonstantahuruf:"<<huruf;
cout<<"\nNilaikonstantanama:"<<nama;
getch();
return0;
}
Pada program dibawah ini hasil akan menghasilkan hasil yang sama
setelah decompile akan sama dengan program sebelumnya.
dengan program diatas. Program Perhatikan pada penggunaan
dibawah merupakan salah satu konstanta dalam aplikasi program
contoh penulisan yang berbeda tetapi dibawah ini:
Program3.2
#include<conio.h>
#include<iostream>
constintnomor=100;
constfloatphi=3.14;
constcharhuruf='K';
constcharnama[]="Hello";
usingnamespacestd;
main()
{
cout<<"Nilaikonstantanomor:"<<nomor;
cout<<"\nNilaikonstantaphi:"<<phi;
cout<<"\nNilaikonstantahuruf:"<<huruf;
cout<<"\nNilaikonstantanama:"<<nama;
getch();
return0;
}
<tipedata><namavariabel>[=nilaiawal];
<tipedata><namavariabel1>[=nilaiawal],,<namavariabeln>[=nilaiawal];
Program 3.3
#include<conio.h>
#include<iostream>
usingnamespacestd;
voidtampil(void);
main()
{
autointi=11;
tampil();
cout<<"\nidalammain()="<<i;
getch();
return0;
}
voidtampil(void)
{
autointi=10;
cout<<"\nidalamtampil()="<<i;
}
Program 3.4
#include<conio.h>
#include<iostream>
usingnamespacestd;
/*variabeljdisinimerupakanvariabeleksternalbagi
fungsikalidanfungsimain,sehinggavariabeljdapat
diaksesolehsemuafungsiyangadayaitukalidanmain*/
intj=1;
voidkali(void);
main()
{
cout<<"Nilaiawalj="<<j<<"\n";
j=j*5;
cout<<"Nilaijkemudian="<<j<<"\n";
kali();
cout<<"Nilaijkini="<<j<<"\n";
kali();
cout<<"Nilaijsekarang="<<j<<"\n";
getch();
return0;
}
voidkali(void)
{
j*=10;
}
Program 3.5
#include<conio.h>
#include<iostream>
usingnamespacestd;
voidtambah(void);
main()
{
intk=100;
tambah();
tambah();
cout<<"Nilaikdalammain()="<<k<<"\n";
getch();
return0;
}
voidtambah(void)
{
staticintk;//variabelstatis
k++;
cout<<"Nilaikdalamtambah()="<<k<<"\n";
}
Program 3.6
#include<conio.h>
#include<iostream>
usingnamespacestd;
main()
{
registerintn,jml;//variabelregister
intm=242;
for(n=1;n<=m;n++)
jml+=n;
cout<<"1+2+3+...+="<<m<<jml;
getch();
return0;
}
Program 3.7
include<iostream>
usingnamespacestd;
main()
{
charhuruf_1='C',huruf_2='+';
cout<<"TipeDataCharpada"<<huruf_1<<huruf_2<<huruf_2;
getch();
return0;
}
3.5.3. Tipe Data String larik atau array dari tipe data char,
String adalah deretan karakter sedangkan dalam bahasa java string
yang diakhiri dengan sebuah karakter merupakan tipe data referensi atau
kosong. Konstanta bertipe ditulis sebuah objek. Contoh dibawah
diantara tanda petik dua ( .). merupakan deklarasi string dalam C:
Dalam bahasa C string merupakan
chartek[]="C++";
charkata[]={'C','+','+'};
Program 3.8
#include<conio.h>
#include<iostream>
usingnamespacestd;
main()
{
charhuruf[]="TipeDataStringpadaC++";
cout<<huruf;
getch();
return0;
}
3.5.4. Tipe Data Bilangan Bulat bilangan bulat yang memiliki range
dari bilangan negatip sampai positip
Tipe data ini digunakan untuk dan bilangan bulat tak bertanda
data-data angka yang tidak (unsigned integer), yang merupakan
mengandung angka di belakang bilangan bulat yang hanya memiliki
koma (int) atau digunakan untuk range nilai positip saja.
menyatakan bilangan bulat. Tipe data yang termasuk ke
Perubahan tanda bilangan pada dalam bilangan bulat adalah: yang
bilangan bulat dapat diset dalam dua pertama, char atau signed char dan
tipe, yaitu: bilangan bulat bertanda unsigned char atau byte dalam java
(signed integer), yang merupakan dan pascal. Rentang nilai signed char
mulai -128 sampai 127. Kedua,
2008 | Direktorat Pembinaan SMK 105
rentang nilai unsigned char mulai 0 Rentang nilai unsigned int mulai
sampai 255, short int atau signed 0 sampai 65.535, dan keempat
short int dan unsigned short int. adalah long int atau signed long int
Rentang nilai signed short int mulai - dan unsigned long int. Rentang nilai
32.768 sampai 32.767. Rentang nilai signed long int mulai -21474836478
unsigned short int mulai 0 sampai sampai 2147483647. Rentang nilai
65.535. Ketiga adalah int atau signed unsigned long int mulai 0 sampai
int dan unsigned int. Rentang nilai 4294967295. Rentang di atas untuk
signed int mulai -32.768 sampai tipe data bilangan bulat dalam 16 bit.
32.767.
Program 3.9
#include<conio.h>
#include<iostream>
usingnamespacestd;
main()
{
106 Direktorat Pembinaan SMK | 2008
shortintssintmin=32768,ssintmak=32767;
unsignedshortintusintmak=65535;
intintmin=32768,intmak=32767;
unsignedintuintmak=65535;
longintslintmin=2147483648,slintmak=2147483647;
unsignedlongintulintmak=4294967295;
cout<<"\nRangesignedshortint:"<<ssintmin<<ssintmak;
cout<<"\nRangeunsignedshortint:"<<usintmak;
cout<<"\nRangesignedint :"<<intmin<<intmak;
cout<<"\nRangeunsignedint:"<<uintmak;
cout<<"\nRangesignedlongint:"<<slintmin<<slintmak;
cout<<"\nRangeunsignedlongint:"<<ulintmak;
getch();
return0;
}
usingnamespacestd;
main()
{
floatfloatmin=3.4E38,floatmak=3.4E+38;
doubledoublemin=1.7E308,doublemak=1.7E+308;
longdoubleldoublemin=3.4E4932,ldoublemak=1.1E+4932;
cout<<"Rangefloat:\n"<<floatmin<<floatmak;
cout<<"Rangedouble:\n"<<doublemin<<doublemak;
cout<<"Rangelongdouble:\n"<<ldoublemin<< ldoublemak;
getch();
return0;
}
Rangefloat :0.000000s/d3399999952144364250000000000000.0
Rangedouble :0.000000E+00s/d1.700000E=300
Rangelongdoble :0s/d1.1E+4932
Program 3.11
include<conio.h>
#include<iostream>
usingnamespacestd;
main()
{
enumboolean{FALSE,TRUE};
enumbooleankondisi;
kondisi=TRUE;
if(kondisi)
cout<<"Kondisi:"<<kondisi;
else
{
kondisi=FALSE;
cout<<"Kondisi:"<<kondisi;
}
getch();
return0;
}
void*action; intmatrix[2][3];
intivalue=100;
action=&ivalue; Untuk lebih jelasnya mengenai tipe
data array akan dijelaskan dalam bab
selanjutnya yang membahas array.
3.5.9. Tipe Data Pointer
Pointer adalah variable yang
berisi nilai alamat suatu lokasi
memori tertentu. Deklarasi penunjuk 3.5.11. Tipe Data Struct, Union
dilakukan dengan menspesifikasikan Tipe data ini digunakan untuk
*, sebelum nama varibel/konstanta. mendeklarasikan sekelompok data
Contoh deklarasi pointer adalah yang memiliki tipe yang berlainan.
sebagai berikut: struct: elemennya berada dilokasi
memori yang berbeda, dan union:
char*p; elemennya ada dilokasi memori yang
sama. Perhatikan potongan program
dibawah ini:
usingnamespacestd;
intmain()
{
doubleregHours=40.0,
otHours=10,
regPayRate=18.25,
otPayRate=27.78,
regWages,
otWages,
totalWages;
regWages=regPayRate*regHours;
otWages=otPayRate*otHours;
totalWages=regWages+otWages;
cout<<"UpahuntukmingguiniadalahRp."<<totalWages<<endl;
getch();
return0;
}
Program 3.13
#include<conio.h>
#include<iostream>
usingnamespacestd;
main()
{
inthitung=0,loop;
loop=++hitung;
cout<<"Loop=%d,Hitung="<<loop<<hitung;
loop=hitung++;
cout<<"Loop=%d,Hitung="<<loop<<hitung;
getch();
return0;
}
Program 3.14
#include<conio.h>
#include<iostream>
usingnamespacestd;
main()
{
inthitung=10,loop;
loop=hitung;
cout<<"Loop=,Hitung="<<loop<<hitung;
loop=hitung;
cout<<"Loop=,Hitung="<<loop<<hitung;
getch();
return0;
}
sizeof(tipedata);
sizeof(char);
sizeof(int);
Program 3.15
#include<conio.h>
#include<iostream>
usingnamespacestd;
main()
{
cout<<"Sizeofchar="<<sizeof(char);
114 Direktorat Pembinaan SMK | 2008
cout<<"Sizeofshortint=\n"<<sizeof(shortint);
cout<<"Sizeofint=\n"<<sizeof(int);
cout<<"Sizeoflongint=\n"<<sizeof(longint);
cout<<"Sizeoffloat=\n"<<sizeof(float);
cout<<"Sizeofdouble=\n"<<sizeof(double);
cout<<"Sizeoflongdouble=\n"<<sizeof(longdouble);
getch();
return0;
}
Program 3.16
#include<conio.h>
#include<iostream>
usingnamespacestd;
main()
{
intx=67,y; /*varpointermenunjukkedataygbertipeint*/
int*px; //pxdiisidenganalamatdarivarx
px=&x; //ydiisidengannilaiyangditunjukolehpx
y=*px;
cout<<"\nAlamatx="<<&x;
cout<<"\nIsipx="<<px;
cout<<"\nIsix="<<x;
cout<<"\nNilaiyangditunjukolehpx="<<*px;
cout<<"\nNilaiy="<<y;
getch();
return0;
}
Program 3.17
#include<conio.h>
#include<iostream>
usingnamespacestd;
main()
{
/*operasiaritmatika
denganbilanganbulat*/
intv,w,x,y,z;
v=100;
w=3;
x=v/w;
y=v%w;
z=v*ww+v%v/w;
cout<<"OperasiAritmatikapadaBilanganBulat\n";
cout<<"X=\n"<<v<<w;
cout<<"=\n"<<x;
cout<<"Y="<<v<<w;
cout<<"="<<y;
cout<<"Z=\n"<<v<<w<<w<<v<<v<<w;
cout<<"=\n"<<z;
getch();
return0;
}
Program 3.18
#include<conio.h>
#include<iostream>
usingnamespacestd;
main()
{
floata,b,c,d,e;
a=100.0;
b=3.0;
c=a/b;
d=100%3;
e=a*bb+100%100/b;
cout<<"\nOperasiAritmatikapadaBilanganReal\n\n";
cout<<"C=\n"<<a<<b;
cout<<"=\n"<<c;
cout<<"D=\n"<<a<<b;
cout<<"=\n"<<d;
cout<<"E=\n"<<a<<b<<b<<a<<a<<b;
cout<<"=\n"<<e;
getch();
return0;
}
z=((100*3)(3+((100%100)/3)))
=(300(3+((100%100)/3)))
=(300(3+(0/3)))
=(300(3+0))
=(3003)
=297
Program3.19
include<conio.h>
#include<iostream>
usingnamespacestd;
main()
{
intx,x1,x2,y,y1,y2,z,z1,z2,a,b,c;
a=125;
b=100;
c=25;
x1=a<b;
x2=a>b;
y1=c<=b;
y2=c>=b;
z1=a==c;
z2=a!=c;
x=x1&&x2;
y=y1||y2;
z=!z1;
cout<<"\nA="<<a<<b<<c;
cout<<"\nX1=";
cout<<"\n="<<a<<b;
cout<<"\n="<<x1;
cout<<"\nX2=";
cout<<"\n="<<a<<b;
cout<<"\n="<<x2;
cout<<"\nY1=";
cout<<"\n="<<c<<b;
cout<<"\n="<<y1;
cout<<"\nY2=";
cout<<"\n="<<c<<b;
cout<<"\n="<<y2;
cout<<"\nZ1=";
cout<<"\n="<<a<<c;
cout<<"\n="<<z1;
cout<<"\nZ2=";
cout<<"\n="<<a<<b;
cout<<"\n="<<z2;
cout<<"\nX=";
cout<<"\n="<<x1<<x2;
2008 | Direktorat Pembinaan SMK 121
cout<<"\n="<<x;
cout<<"Y\n=";
cout<<"\n="<<y1<<y2;
cout<<"\n="<<y;
cout<<"Z\n=";
cout<<"\n="<<z1;
cout<<"\n="<<z;
getch();
return0;
}
Perhatikan contoh operasi bitwise XOR antara data 9D dengan 2D maka akan
menghasilkan data 11D
9D =00001001BdiXORdengan
2D =00000010B
11D =00001011B<=hasilXOR
Atau contoh lain misalnya antara data 9D dengan 7D maka akan dihasilkan
data 14D seperti dibawah ini:
9D =00001001BdiXORdengan
7D =00000111B
14D =00001110B<=hasilXOR
A B AXORB
0 0 0
1 0 1
0 1 1
1 1 0
Pada tabel XOR tersebut diatas baik 0 semua atau 1 semua. Dalam
adalah: data keluaran akan bernilai 0 operasi aritmetika sebuah data 9D
jika data masukannya bernilai sama misalnya akan digeser kekanan atau
2008 | Direktorat Pembinaan SMK 123
1x =>00000100B=4D
2x =>00000010B=2D
9D =00001001BdiANDdengan
2D =00000010B
0D =00000000B<=hasilAND
9D =00001001BdiORdengan
2D =00000010B
11D =00001011B<=hasilOR
9D =00001001BdiNOTmenjadi:
~9D =11110110B=10Dmodelkomplemen2
10D =00001010B
10D =11110101Bmodelkomplemen1
=11110110Bmodelkomplemen2
usingnamespacestd;
main()
{
intu,v,w,x,y,z;
u=9<<2;
v=9>>2;
w=9&2;
x=9^2;
y=9|2;
z=~9;
cout<<"U=9<<2\n";
cout<<"=%d\n",u;
cout<<"V=9>>2\n";
cout<<"=%d\n",v;
cout<<"W=9&2\n";
cout<<"=%d\n",w;
cout<<"X=9^2\n";
cout<<"=%d\n",x;
cout<<"Y=9|2\n";
cout<<"=%d\n",y;
cout<<"Z=~9\n";
cout<<"=%d\n",z;
getch();
return0;
}
Contoh program diatas menunjukkan bahwa hasil operasi dari operator relasi
atau operator logika hanya mempunyai satu nilai dari dua nilai kebenaran,
yaitu :
nilai=80;Artinya:variablenilaidiisidengan80
A=x*y;Artinya:variableAdiisidenganhasilperkalianantaraxdany.
jikanilai_awal=80dannilai_akhir=75,makamaksim=80(samadengannilai_awal)
jikanilai_awal=75dannilai_akhir=80,makamaksim=80(samadengannilai_akhir)
jikanilai_awal=75dannilai_akhir=75,makamaksim=75(samadengannilai_akhir)
usingnamespacestd;
main()
{
inta,b,c,d;
a=80;
b=75;
c=a>b?a:b;
cout<<"Mencarinilaiyanglebihtinggi\n\n";
cout<<"a=\n"<<a<<b;
cout<<"c=\n";
cout<<"=\n"<<a<<b<<a<<b;
cout<<"=\n\n"<<c;
a=75;
b=80;
c=a>b?a:b;
cout<<"Mencarinilaiyanglebihtinggi\n\n";
cout<<"a=\n"<<a<<b;
cout<<"c=\n";
cout<<"=\n"<<a<<b<<a<<b;
cout<<"=\n"<<c;
getch();
return0;
}
c =a>b?a:b
=80>75?80:75
=80
MencariNilaiyanglebihtinggi
a =75
b =80
c =a>b?:b
=75>80?75:80
=80
shortintdata3=714;
bytedata4=34;
floatata6=1.733;//tipedatapecahan
doubleata5=4.967;//tipedatapecahan
chardata7='C';
enumboolean{false,true};
enumbooleankondisi;
kondisi=true;
chardata8[6];
data8[]=kondisi==1?"true":"false";
printf("NilaiLong:%ld\n"<<data1;
cout<<"NilaiInt:%d\n"<<data2;
cout<<"NilaiShort:%hd\n"<<data3;
cout<<"NilaiByte:%d\n"<<data4;
cout<<"NilaiDouble:%lf\n"<<data5;
cout<<"NilaiFloat:%f\n"<<data6;
cout<<"NilaiChar:%c\n"<<data7;
cout<<"NilaiBoolean:%s\n"<<data8;
getch(;
return0;
}
BAB 4
STRUKTUR PERULANGAN
4.1. Perulangan
4.2. Operator Increment dan Decrement
4.3. Ekspresi Matematika ++ dan --
4.4. Penghitung
4.5. Pernyataan FOR
4.6. Pernyataan NESTED - FOR
4.7. Pernyataan WHILE
4.8. Pernyataan NESTED-WHILE
4.9. Perulangan Do-WHILE
4.10. Pernyataan NESTED DO-WHILE
4.11. Perulangan Tidak Berhingga
4.12. Pernyataan Break
4.13. Pernyataan Continue
4.14. Pernyataan Goto
4.15. Soal Latihan
4.1. Perulangan
Perulangan atau iterasi atau disebut loop. Dengan memakai loop,
yang biasa disebut dengan looping suatu proses yang berulang misalnya
adalah proses melakukan tindakan menampilkan angka 1 sampai 1000
yang sama secara berulang-ulang atau tulisan yang sama sebanyak
atau berkali-kali sampai batas yang sepuluh kali di layar dapat
telah ditentukan. Perulangan diimplementasikan dengan kode
digunakan untuk menjalankan satu program yang pendek.
atau beberapa pernyataan sebanyak Pada pemrograman proses
beberapa kali. Dengan kata lain, perulangan dibagi menjadi 2 jenis,
perulangan dipakai untuk yaitu: Perulangan yang telah
menjalankan beberapa pernyataan diketahui jumlah perulangannya
dengan hanya menuliskan sebelum perulangan tersebut di
pernyataan tersebut satu kali. Hal ini lakukan. Jenis perulangan ini
banyak sekali dijumpai dalam dilakukan dengan penyataan for. Dan
pemrograman. kedua adalah perulangan yang belum
Perulangan proses dalam di ketahui jumlah perulangannya
bahasa pemrograman ditangani sebelum perulangan tersebut
dengan suatu mekanisme yang dilakukan. Perulangan jenis ini terdiri
Program 4.1
#include<iostream>
usingnamespacestd;
intmain()
{
intbigVal=10,smallVal=1;
cout<<"vabesaradalah"<<bigVal<<"danvalkeciladalah"<<smallVal<<endl;
smallVal++;
bigVal;
cout<<"vabesaradalah"<<bigVal<<"danvalkeciladalah"<<smallVal<<endl;
++smallVal;
bigVal;
cout<<"vabesaradalah"<<bigVal<<"danvalkeciladalah"<<smallVal<<endl;
return0;
}
a=2; x=10;
b=5; if(x++>10)
c=++(a*b); //Error! cout<<"xlebihbesardaripada10.\n";
4.4. Penghitung
Kadang-kadang penting bagi dengan 10, jadi loop harus iterasi 10
sebuah program untuk melacak kali. Program tersebut dibawah akan
jumlah Iterasi yang dilakukan dalam menampilkan angka 1 sampai
satu loop. Misalnya, Program dengan 10 dan kemudian
dibawah menampilkan sebuah tabel dikuadratkan:
yang terdiri dari angka 1 sampai
Program 4.2.
include<iostream>
usingnamespacestd;
intmain()
{
intnum=1; //inisialisasipenghitung
cout<<"AngkaAngkakuadrat\n";
cout<<"\n";
while(num<=10)
{
cout<<num<<"\t\t"<<(num*num)<<endl;
num++; //penghitungIncrement
134 Direktorat Pembinaan SMK | 2008
}
return0;
}
1 1
2 4
3 9
4 16
5 25
6 36
7 49
8 64
9 81
10 100
Program 4.3
#include<iostream>
usingnamespacestd;
intmain()
{
intnum=0;
cout<<"AngkaAngkakuadrat\n";
cout<<"\n";
while(num++<10)
cout<<num<<"\t\t"<<(num*num)<<endl;
return0;
}
1 1
2 4
3 9
4 16
5 25
6 36
7 49
8 64
9 81
10 100
numdibandingkandengan10,kemudiandiincrement.
Bilapernyataancoutdilaksanakan,num1bernilailebih
besardariitupengujiantersebut.
while(num++<10)
cout<<num<<"\t\t"<<(num*num)<<endl;
Di dalam looping, num selalu memiliki < bukan <=. Ketika variabel num
nilai lebih dari 1 dibanding bernilai 9 maka diuji, sehingga akan
sebelumnya nilai 10. Itulah mengapa menjadi bernilai 10 pada pernyataan
penghubung operator menggunakan cout.
forloop.
for(initialization;test;update)
{
pernyataan;
pernyataan;
//tempatbanyaknyapernyataan
for(inisialisasi;syaratperulangan;pengubahnilaipencacah)
pernyataan;
for(ungkapan1;ungkapan2;ungkapan3)
pernyataan;
for(inisialisasi;syaratpengulangan;pengubahnilaipencacah)
{
pernyataan_1;
pernyataan_2;
Pernyataan_n;
}
Berikut ini adalah sebuah diagram alir pernyataan FOR adalah sebagai berikut:
Inisialisasi
Loop=1
pengubahnilaipencacah
loop++atauloop=loop+1
Pernyataan
Cetakbilangan
cout<<loop<<"";
Syarat Benar
perulangan
Loop<=10
Salah
Program 4.4
#include<conio.h>
#include<iostream>
usingnamespacestd;
intmain()
{
intnum;
cout<<"AngkaAngkakuadrat\n";
cout<<"\n";
for(num=1;num<=10;num++)
cout<<num<<"\t\t"<<(num*num)<<endl;
getch();
return0;
}
1 1
2 4
3 9
4 16
5 25
6 36
7 49
8 64
9 81
10 100
Step1.Melakukaninisialisasiekspresi.
Step2.Mengevaluasitesekspresi.Jikamemang,lanjutkeStep3.
Jikatidak,menghentikanloop
Step4.Melakukanupdateekspresi.
Kembalikestep2.
for(num=1;num<=10;num++)
cout<<num<<"\t\t"<<(num*num)<<endl;
Step3.Jalankantubuhperulangan.
Meskipun pada umumnya gaya loop, jika sudah dilakukan atau jika
pemrograman diatas dianggap jelek, tidak ada initialization diperlukan.
tetapi satu atau beberapa kalimat Berikut dibawah ini adalah contoh
perulangan dapat diabaikan. program perulangan dalam
Initialization ekspresi yang mungkin melakukan pengaksesan sebelum
dapat dihilangkan dari dalam kurung perulangan:
intnum=1;
for(;num<=10;num++)
cout<<num<<"\t\t"<<(num*num)<<endl;
Kita juga dapat mengabaikan perulangan atau jika tidak ada yang
pembaruan ekspresi, jika sedang diperlukan. perulangan berikut ini
dilakukan di tempat lain didalam untuk bekerja seperti loop while.
intnum=1;
for(;num<=10;)
{
cout<<num<<"\t\t"<<(num*num)<<endl;
num++;
}
for(;;)
cout<<"HelloWorld\n";
for(number=2;number<=100;number+=2)
cout<<number<<endl;
for(number=10;number>=0;number)
cout<<number<<endl;
for(number=1;number<=10;cout<<number++);
Program 4.5
#include<iostream>
#include<iomanip>
usingnamespacestd;
intmain()
{
constintNUM_DAYS=7;
intcount;
doubletotal;
for(count=1,total=0.0;count<=NUM_DAYS;count++)
{
doublesales;
cout<<"Masukkanpenjualanuntukhari"<<count<<":";
cin>>sales;
total+=sales;
}
cout<<fixed<<showpoint<<setprecision(2);
cout<<"Totalpenjualanadalah$"<<total<<endl;
return0;
}
doublesales;
for(count=1,total=0.0;count<=NUM_DAYS;count++,total+=sales)
{
cout<<"Masukkanpenjualanuntukhari"<<count<<":";
cin>>sales;
Program 4.6
#include<conio.h>
#include<iostream.h>
usingnamespacestd;
intmain()
{
intloop;
for(loop=1;loop<=10;loop++)
cout<<loop<<"";
getch();
return0;
}
Padaloop=1ditampilkan:1disambungdenganloopke2
Padaloop=2ditampilkan:2disambungdenganloopke3
Padaloop=10ditampilkan:10
Pada loop = 11 proses iterasi selesai atau berhenti karena nilai ini sudah tidak
memenuhisyaratyangditentukan,yaitu:11<=10.
Selanjutnya adalah:
Kenaikan terhadap variabel
getch(); pengendali loop bisa diatur jaraknya
dengan mengatur stepnya. Misalnya
meminta masukan sembarang untuk jarak kenaikkannya 2, maka
tombol, perintah ini dimaksudkan dinyatakan dengan:
untuk menahan hasil tampilan dilayar
supaya tetap nampak dan akan Loop+=2
menutup sampai adanya sembarang
tombol ditekan. Hal diatas sama artinya sama
dengan program dibawah ini:
return0;
Loop=loop+2
untuk memberi nilai kembalian pada
fungsi main. Pada program di atas, Pada contoh yang melibatkan
kenaikan terhadap variabel pernyataan for diatas, kenaikan
pengendali loop sebesar 1 (positif), variabel pengendali loop berupa nilai
yang dinyatakan dengan ungkapan: positif. Sebenarnya kenaikan
terhadap variabel pengendali loop
loop++ dapat pula diatur supaya bernilai
negatif, seperti dicontohkan pada
artinya ungkapan tersebut sama program dibawah ini. Program
dengan: dibawah akan mencetak bilangan
dari 10 hingga 1 secara menurun.
loop=loop+1
Program 4.7
#include<conio.h>
#include<iostream.h>
usingnamespacestd;
intmain()
{
intloop;
for(loop=10;loop>=1;loop)
cout<<loop<<"";
getch();
return0;
}
Program 4.8
#include<conio.h>
#include<iostream.h>
usingnamespacestd;
intmain()
{
intloop;
for(loop=1;loop<=10;loop+=2)
cout<<loop<<"";
getch();
return0;
}
Program 4.9
#include<conio.h>
#include<iostream.h>
usingnamespacestd;
intmain()
{
charhuruf;
for(huruf='A';huruf<='Z';huruf++)
cout<<"Hurufabjad="<<huruf<<"\n";
getch();
for(huruf='A';huruf<='Z';huruf+=13)
cout<<"Hurufabjad="<<huruf<<"\n";
getch();
for(huruf='z';huruf>='a';huruf)
cout<<"Hurufabjad="<<huruf<<"\n";
getch();
2008 | Direktorat Pembinaan SMK 145
for(huruf='z';huruf>='a';huruf=8)
cout<<"Hurufabjad="<<huruf<<"\n";
getch();
return0;
}
Hurufabjad=z for(;;)
Hurufabjad=r pernyataan;
Hurufabjad=j
Hurufabjad=b Lalu bagaimana cara keluar dari
loop tersebut. Caranya adalah
Perhatikan instruksi huruf -=8. dengan menggunakan pernyataan
Kadang-kadang dijumpai adanya yang dirancang khusus untuk keluar
pernyataan FOR yang tidak dari loop. Pernyataan itu adalah
mengandung bagian ungkapan yang break yang akan dijelaskan dalam
lengkap (beberapa ungkapan sub bahasan tersendiri. Pernyataan
dikosongkan). Dengan cara ini, maka break digunakan untuk keluar dari
pernyataan adalah sebagai berikut: satu blok loop for. Perhatikan
program FOR untuk menampilkan
for(loop=1;loop<=10;loop+=2) warna seperti program berikut:
cout<<loop<<"";
Program 4.10
#include<stdio.h>
#include<conio.h>
usingnamespacestd;
intmain(void)
{
inti=0;
for(;;)
{
i++;
textattr(i+((i+1)<<4));
cprintf("Warnaatribut\r\n");
if(i==20)break;
}
getch();
return0;
}
Program 4.11
#include<stdio.h>
#include<conio.h>
usingnamespacestd;
main()
{
intn=0;
for(;;)
{
++n;
gotoxy(n,n);
textcolor(n);
cprintf("warnake%d\n",n);
}
getch();
return0;
}
for(inisialisasi;syaratpengulangan;pengubahnilaipencacah)
{
for(inisialisasi;syaratpengulangan;pengubahnilaipencacah)
{
pernyataan;
}
}
Selain pernyataan diatas, nested For dapat juga ditulis seperti dibawah ini:
for(inisialisasi;syaratpengulangan;pengubahnilaipencacah)
{
for(inisialisasi;syaratpengulangan;pengubahnilaipencacah)
{
for(inisialisasi;syaratpengulangan;pengubahnilaipencacah)
{
..
for(inisialisasi;syaratpengulangan;pengubahnilaipencacah)
{
pernyataan;
}
.
}
Program4.12
#include<conio.h>
#include<iostream.h>
usingnamespacestd;
intmain()
{
inta,b;
for(a=1;a<=5;a++)
{
cout<<"\n";
for(b=a;b<=5;b++)
cout<<a<<"";
}
getch();
return0;
}
333
44
5
pernyataan
Kondisi
Benar
Salah
Program 4.13
#include<conio.h>
#include<iostream.h>
usingnamespacestd;
intmain()
{
intloop=1;
while(loop<=10)
cout<<loop++<<"";
getch();
return0;
}
Program 3.14
#include<conio.h>
#include<iostream.h>
usingnamespacestd;
intmain()
{
intloop=10;
while(loop>=1)
cout<<loop<<"";
getch();
return0;
}
Program 4.15
#include<conio.h>
#include<iostream.h>
usingnamespacestd;
intmain()
{
intloop=1;
while(loop<=10)
{
cout<<loop<<"";
2008 | Direktorat Pembinaan SMK 153
loop+=2;
}
getch();
return0;
}
Program 4.16
#include<conio.h>
#include<iostream.h>
usingnamespacestd;
intmain()
{
charhuruf='A';
while(huruf<='Z')
cout<<"Hurufabjad="<<huruf++<<"\n";
getch();
huruf='A';
while(huruf<='Z')
{
cout<<"Hurufabjad="<<huruf<<"\n";
huruf+=13;
}
getch();
huruf='z';
while(huruf>='a')
cout<<"Hurufabjad="<<huruf<<"\n";
getch();
huruf='z';
while(huruf>='a')
{
cout<<"Hurufabjad="<<huruf<<"\n";
huruf=8;
}
getch();
return0;
while(syarat)
{
while(syarat)
{
pernyataan;
}
}
Selain cara penulisan pernyataan ditulis diatas, dapat juga ditulis sebagai
berikut:
while(syarat)
{
while(syarat)
{
..
while(syarat)
{
pernyataan;
}
.
}
}
Program 4.17
#include<conio.h>
#include<iostream.h>
#include<math.h>
usingnamespacestd;
intmain(void)
{
introw=0;
while(row<=3)
{
intcol=1;
while(col<=3row)
{
cout<<"";
col++;
}
col=0;
while(col<=row)
{
cout<<""<<(int)pow(2,col);
col++;
}
col=row1;
while(col>=0)
{
cout<<""<<(int)pow(2,col);
col;
}
cout<<"\n";
row++;
}
getch();
return0;
}
Program 4.18
#include<iostream.h>
#include<conio.h>
usingnamespacestd;
voidmain()
{
intcacah=0,data=0,jumlah=0;
while(data!=1)
{
cout<<"Masukkandataangka:";
cin>>data;
jumlah+=data;
cacah++;
}
cout<<"Jumlahdataadalah:"<<jumlah"<<endl;
cout<<"Ratarata:"<<jumlah/cacah;
}
do
pernyataan;
while(syarat/kondisi)
pernyataan
Benar
Kondisi
Salah
do
{
Pernyataan;
Pernyataan;
}
while(syarat)
Program 4.19
#include<conio.h>
#include<iostream.h>
usingnamespacestd;
intmain()
{
intloop=1;
do
cout<<loop++<<"";
while(loop<=10);
getch();
return0;
}
Program 4.20
#include<conio.h>
#include<iostream.h>
usingnamespacestd;
intmain()
{
intloop=10;
do
cout<<loop<<"";
while(loop>=1);
getch();
return0;
}
Program 4.21
#include<conio.h>
#include<iostream.h>
usingnamespacestd;
intmain()
{
intloop=1;
do
{
cout<<loop<<"";
loop+=2;
}
while(loop<=10);
getch();
return0;
}
do
{
do
{
pernyataan;
}
while(syarat);
}
while(syarat);
pernyataan diatas dapat juga ditulis seperti potongan pernyataan dibawah ini:
do
{
do
{
..
do
{
pernyataan;
}
while(syarat);
..
}
while(syarat);
}
while(syarat);
Program 4.22
#include<conio.h>
#include<iostream.h>
#include<math.h>
#include<stdlib.h>
usingnamespacestd;
intmain(void)
{
introw=0;
do
{
intcol=0;
do
{
cout<<"";
col++;
162 Direktorat Pembinaan SMK | 2008
}
while(col<=3row);
col=0;
do
{
cout<<""<<(int)pow(2,col);
col++;
}
while(col<=row);
col=row1;
do
{
cout<<""<<(int)pow(2,col);
col;
}
while(col>=0);
cout<<"\n";
row++;
}
while(row<=3);
getch();
return0;
}
Program 4.23
#include<conio.h>
#include<iostream.h>
usingnamespacestd;
intmain()
{
intb;
for(b=6;b>=1;b++)
cout<<b;
getch();
return0;
}
Program 2.24
#include<conio.h>
#include<iostream.h>
usingnamespacestd;
intmain(void)
{
intjumlah=0;
intbilangan;
for(bilangan=0;bilangan<20;bilangan++)
{
jumlah+=bilangan;
if(jumlah>=100)break;
}
cout<<"DeretBilangan:1+2+...+"<<bilangan<<endl;
cout<<"JumlahDeretBilangan="<<jumlah;
getch();
return0;
}
Program 4.25
#include<conio.h>
#include<iostream.h>
usingnamespacestd;
intmain(void)
{
intjumlah=0;
intbilangan=0;
while(bilangan<20)
{
bilangan++;
jumlah+=bilangan;
if(jumlah>=100)break;
}
cout<<"DeretBilangan:1+2+...+"<<bilangan<<endl;
cout<<"JumlahDeretBilangan="<<jumlah;
getch();
return0;
}
Program 4.26
#include<conio.h>
#include<iostream.h>
usingnamespacestd;
intmain(void)
{
intjumlah=0;
intbilangan=0;
do
{
bilangan++;
jumlah+=bilangan;
if(jumlah>=100)break;
}
while(bilangan<20);
cout<<"DeretBilangan:1+2+...+"<<bilangan<<endl;
cout<<"JumlahDeretBilangan="<<jumlah;
getch();
return0;
}
Program 4.27
#include<conio.h>
#include<iostream.h>
usingnamespacestd;
intmain(void)
{
intjumlah=0;
intbilangan;
for(bilangan=1;bilangan<=20;bilangan++)
{
if(bilangan==10||bilangan==11)continue;
jumlah+=bilangan;
}
cout<<"DeretBilangan:1+2+...+9+12+13+...+"<<bilangan1<<endl;
cout<<"JumlahDeretBilangan="<<jumlah;
getch();
return0;
}
Program 4.28
#include<conio.h>
#include<iostream.h>
usingnamespacestd;
intmain(void)
{
intjumlah=0;
intbilangan=0;
while(bilangan<20)
{
bilangan++;
if(bilangan==10||bilangan==11)continue;
jumlah+=bilangan;
}
cout<<"DeretBilangan:1+2+...+9+12+13+...+"<<bilangan<<endl;
cout<<"JumlahDeretBilangan="<<jumlah;
getch();
return0;
}
JumlahDeretBilangan=189
Program 4.29
#include<conio.h>
#include<iostream.h>
usingnamespacestd;
intmain(void)
{
intjumlah=0;
intbilangan=0;
do
{
bilangan++;
if(bilangan==10||bilangan==11)continue;
jumlah+=bilangan;
}
while(bilangan<20);
cout<<"DeretBilangan:1+2+...+9+12+13+...+"<<bilangan<<endl;
cout<<"JumlahDeretBilangan="<<jumlah;
getch();
return0;
}
Program 4.30
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
usingnamespacestd;
main()
{
inta,b;
charlagi;
atas:
cout<<"MasukkanBilangan=";
cin>>a;
b=a%2;
cout<<"Nilai"<<a<<"%2adalah="<<b;
cout<<"\n\nInginHitungLagi[Y/T]:";
lagi=getche();
if(lagi=='Y'||lagi=='y')gotoatas;
getch();
return0;
}
BAB 5
STATEMENT KENDALI
EKPRESI NILAI
x<y salah,karenaxlebihkecildaripaday
x>y Betul,karenaxlebihbesardaripaday
x>=y Betul,karenaxlebihbesaratausamadengany
x<=y Salah,karenaxlebihkecilatausamadengany
y!=x Betul,karenaytidaksamadenganx
Program 5.1.
#include<conio.h>
#include<iostream>
usingnamespacestd;
intmain()
{
boolnilaiBetul,nilaiSalah;
intx=5,y=10;
nilaiBetul=x<y;
nilaiSalah=y==x;
cout<<"Benaradalah"<<nilaiBetul<<endl;
cout<<"Salahadalah"<<nilaiSalah<<endl;
getch();
return0;
}
PERNYATAAN KELUARAN
z=x<y zsamadengan0karenaxtidakkurangdaripaday
cout<<(x>y); Tampilkan1karenaxlebihbesardaripaday.
z=x>=y; zsamadengan1karenaxlebihbesarsamadengany.
cout<<(x<=y); Tampilkan0karenaxtidakkurangsamadengany
z=y!=x; zsamadengan1karenaytidaksamadenganx
cout<<(x==y+3); Tampilkan1karenaxsamadengany+3
==!=
>>=<<=
Berikut ini adalah sebuah contoh berekspresi ini, a > b akan dievaluasi
bagaimana operator diterapkan. Jika terlebih dahulu. Ketika 9 tidak lebih
a = 9, b = 24, dan c = 0, pernyataan besar dari 24, maka hal tersebut
berikut ini akan menyebabkan a akan mengevaluasi salah atau 0.
bernilai 1 akan ditampilkan. Kemudian ketika C == 0 maka akan
dihasilkan. Ketika c tidak sama
cout<<(c==a>b); dengan 0, hal tersebut akan
menghasilkan nilai betul, atau 1.
Karena adanya nilai yang relatif Sehingga nilai 1 akan dimasukkan ke
diutamakan dari operator dalam dalam output stream dan ditampilkan.
5.3. Statement IF
Anda mungkin berpikir mengenai hingga dapat mencapai tujuan.
pernyataan dalam program Program-program yang ditulis ini
procedural seperti langkah-langkah adalah seperti halnya sebuah "jalan"
yang diambil sebagai individu. Untuk dimana pelaksanaannya harus diikuti.
mencapai tujuan tersebut , maka Perhatikan langkah program dibawah
harus dimulai dari awal dan mengikuti ini:
setiap langkah, satu setelah yang lain
#include<iostream>
usingnamespacestd;
intmain()
{
doublepanjang,lebar,luas;
cout<<"masukanpanjangsegiempat:";
cin>>panjang;
cout<<"Masukanlebarsegiempat:";
cin>>lebar;
luas=panjang*lebar;
cout<<"Luasnya:"<<luas<<endl;
return0;
}
Program 5.2
#include<iostream>
#include<iomanip>
usingnamespacestd;
intmain()
{
intscore1,score2,score3;
doubleaverage;
cout<<"Masukan3nilaiUjiandansayaakanmencarirataratanya:";
cin>>score1>>score2>>score3;
average=(score1+score2+score3)/3.0;
cout<<fixed<<showpoint<<setprecision(1);
cout<<"RatarataNilaiAndaAdalah"<<average<<endl;
if(average==100)
{
cout<<"Selamat.!";
cout<<"NilaiAndaSempurna!\n";
}
return0;
}
Jika dalam program tersebut pada potongan program seperti dibawah ini:
if(average==100)
{
cout<<"Selamat.!";
cout<<"NilaiAndaSempurna!\n";
}
Maka potongan program tersebut tanpa ada ucapan selamat atau "
diatas akan menampilkan data tulisan Selamat.! ". Gambar dibawah ini
"selamat.! ".., jika data yang menunjukkan bentuk pernyataan
dimasukan sama dengan seratus. yang digunakan pada pernyataan IF
Jika tidak maka hanya akan dan flowchart visual dapat dijelaskan
menampilkan rata-rata nilainya saja cara kerjanya sebagai berikut:
salah
Kondisi
Betul
Pernyataan
if(ekspresi)
{
Pernyataan1;
Pernyataan2;
.
.
Pernyataann;
}
if(average==100)
cout<<"selamat!NilaiandaSempurna!\n";
if(kondisi)
{
statement1;
statement2;
..
}
Program 5.3
#include<iostream.h>
#include<conio.h>
usingnamespacestd;
intmain()
{
intusia;
cout<<"BerapausiaAnda:";
cin>>usia;
if(usia<17)
cout<<"Andatidakbolehmenontonbioskop";
getch();
return0;
}
if(kondisi)
{
statement1;
statement2;
..}
else{
statement1;
statement2;
}
Program 5.4
#include<iostream.h>
#include<conio.h>
usingnamespacestd;
intmain()
{
intusia;
cout<<"BerapausiaAnda:";
cin>>usia;
if(usia<17)
cout<<"Andatidakbolehmenontonbioskop";
else
cout<<"Andabolehmenontonbioskop";
getch();
return0;
}
if(bil%2!=0)
cout<<Bilanganganjil;
if(bil%2)
cout<<Bilanganganjil
if(kondisi1)
statement1;
elseif(kondisi2)
statement2;
elseif(kondisi3)
statement3;
.
.
elsestatement;
if(Kondisi)
{
Perintahyangakandieksekusijikakondisibernilaitrue
}
else
{
Perintahyangakandieksekusijikakondisibernilaifalse
}
if(x>5)
{
y=10;
}
if(x>y)
{
y=x;
}
if(x>val(angka))
{
y=20;
}
Suatu ketika akan ditemui pula dari satu kondisi. Untuk itu digunakan
penggunaan instruksi IF .. THEN tambahan blok IF..THEN..ELSE IF
statements, dimana isntruksi ini statements. Perhatikan contoh
digunakan untuk mengevaluasi lebih program dibawah ini:
if(x<5)
cout<<Nilaixkurangdari5;
else
if(x<10)
cout<<NilaiXantara5dan9;
else
cout<<Nilaixlebihdari9;
if(hari=senin)
{
if(jam=6.30)
{
}
}
Program 5.5
#include<stdio.h>
#include<conio.h>
#include<iostream>
usingnamespacestd;
main()
{
doubletot_beli,potongan=0,jum_bayar=0;
cout<<"TotalPembelianRp.";
cin>>tot_beli;
if(tot_beli>=50000)
potongan=0.2*tot_beli;
cout<<"BesarnyaPotonganRp.";
jum_bayar=tot_belipotongan;
cout<<"JumlahyangharusdibayarkanRp.",jum_bayar;
getch();
return0;
}
Betul salah
Kondisi
Pernyataan 1 Pernyataan 2
if(kondisi)
{
Pernyataan1
}
else
{
Pernyataan2
}
Program 5.6
#include<conio.h>
#include<iostream>
usingnamespacestd;
intmain()
2008 | Direktorat Pembinaan SMK 185
Bahasa Pemrograman Statement Kendali
{
intnumber;
cout<<"masukanbilanganbulatdansayaakanmemilahnyadenganIF\n";
cout<<"adalahganjilataugenap.";
cin>>number;
if(number%2==0)
cout<<number<<"adalahgenap.\n";
else
cout<<number<<"adalahganjil.\n";
getch();
return0;
}
Program 5.7
#include<stdio.h>
#include<conio.h>
#include<iostream>
usingnamespacestd;
main()
{
doubletot_beli,potongan=0,jum_bayar=0;
cout<<"TotalPembelianRp.";
cin>>tot_beli;
if(tot_beli>=50000)
potongan=0.2*tot_beli;
else
potongan=0.05*tot_beli;
cout<<"BesarnyaPotonganRp."<<potongan<<endl;
jum_bayar=tot_belipotongan;
cout<<"JumlahyangharusdibayarkanRp.",jum_bayar;
getch();
return0;
}
Program 5.8
#include<conio.h>
#include<iostream>
usingnamespacestd;
intmain()
{
doublenum1,num2,quotient;
cout<<"MasukanAngka:";
cin>>num1;
cout<<"MasukanAngkaLain:";
cin>>num2;
if(num2==0)
{
cout<<"Pembagianoleh0tidakmungkindilakukan.\n";
cout<<"silakanmasukanangkalagi,";
cout<<"Angkalainyanglebihbesardaripada0.\n";
}
else
{
quotient=num1/num2;
cout<<"Thequotientof"<<num1<<"dividedby";
cout<<num2<<"is"<<quotient<<".\n";
}
getch();
return0;
}
ifsangatdingin,pakailahmantelyangtebal,
else,jikadingin,memakaijaketyangtipis,
else,jikaberangin,memakaibajuhem,
else,jikapanas,tidakperlumemakaijaket.
Betul
Kondisi1 Pernyataan1
salah
Betul
Kondisi2 Pernyataan2
salah
Betul
Kondisin Pernyataann
salah
Dari gambar diatas dapat diuraikan dalam pernyataan umu IF/ELSE IF adalah
sebagai berikut:
if(kondisi1)
{
Pernyataan1;
}
elseif(kondisi2)
{
Pernyataan2;
}
.
.
elseif(kondisin)
{
Pernyataann;
}
Program 5.9
#include<conio.h>
#include<iostream>
usingnamespacestd;
intmain()
{
inttestScore;
chargrade;
cout<<"MasukanNilaiAngkamakasayaakanmengujinya\n";
cout<<"NilaiKonversihurufadalah:";
cin>>testScore;
if(testScore<60)
grade='F';
elseif(testScore<70)
grade='D';
elseif(testScore<80)
grade='C';
elseif(testScore<90)
grade='B';
elseif(testScore<=100)
grade='A';
cout<<"GradeAndaAdalah"<<grade<<".\n";
getch();
return0;
}
GradeAndaAdalahA.
Tidak Ya
SkorTest
< 60 ?
Tidak Ya Nilai=F
SkorTest
< 70 ?
Tidak Ya
Nilai=D
SkorTest
< 80 ?
Tidak Ya Nilai=C
SkorTest
< 90 ?
Tidak Ya Nilai=B
SkorTest
<=100 ?
Nilai=A
Program 5.10
#include<conio.h>
#include<iostream>
usingnamespacestd;
intmain()
{
intskortest;
charnilai;
cout<<"MasukanNilaiAngkamakasayaakanmengujinya\n";
cout<<"NilaiKonversihurufadalah:";
cin>>skortest;
if(skortest<60)
nilai='F';
if(skortest<70)
nilai='D';
if(skortest<80)
nilai='C';
if(skortest<90)
nilai='B';
if(skortest<=100)
nilai='A';
cout<<"NilaiAndaAdalah"<<nilai<<".\n";
getch();
return0;
}
yang pertama pernyataan IF akan sana. Ini terus sampai semua jika
menyebabkan nilai 'F' ada pernyataan dijalankan. Yang
memasukannya ke variabel grade. terakhir akan menyebabkan 'A' akan
Namun, karena pernyataan ditugaskan untuk "grade".
berikutnya jika tidak tersambung ke Pada program dibawah
pernyataan pertama, maka hal menggunakan pernyataan if/else if
tersebut akan dieksekusi dengan untuk melaksanakan konversi nilai
baik. ketika testScore kurang dari 70, hurif (A, B, C, D, or F) menjadi nilai
dan menyebabkan nilai 'D' angka. Perhatikan program dibawah
ditugaskan ke grade, dan mengganti ini:
'F' yang sebelumnya disimpan di
Program 5.11
#include<conio.h>
#include<iostream>
usingnamespacestd;
intmain()
{
inttestScore;
chargrade;
boolgoodScore=true;
cout<<"MasukanNilaiAngkamakasayaakanmengujinya\n";
cout<<"NilaiKonversihurufadalah:";
cin>>testScore;
if(testScore<60)
grade='F';
elseif(testScore<70)
grade='D';
elseif(testScore<80)
grade='C';
elseif(testScore<90)
grade='B';
elseif(testScore<=100)
grade='A';
else
goodScore=false;
if(goodScore)
cout<<"GradeAndaAdalah"<<grade<<".\n";
else
{
2008 | Direktorat Pembinaan SMK 195
Bahasa Pemrograman Statement Kendali
cout<<testScore<<"Adalahskorandayangtidaksah.\n";
cout<<"Silakanmasukanskordibawah100.\n";
}
getch();
return0;
}
if(syarat)
{
perintah;
perintah;
}
elseif(syarat)
{
perintah;
perintah;
}
else
{
perintah;
perintah;
}
Rp. 20.000 ditambah dengan uang komisi Rp. 20% dari pendapatan
komisi Rp. 15% dari pendapatan yang diperoleh hari itu.
yang diperoleh hari itu. Kasus yang ada di perusahaan
Bila salesman dapat menjual tersebut dapat diatasi dengan
barang diatas Rp. 500.000 ,- , menggunakan program IF-Else-IF,
akan diberikan uang jasa sebesar dimana programnya adalah sebagai
Rp. 30.000 ditambah dengan uang berikut:
Program 5.12
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
usingnamespacestd;
intmain()
{
floatpendptan,jasa=0,komisi=0,total=0;
cout<<"PendapatanHariiniRp.";
cin>>pendptan;
if(pendptan>=0&&pendptan<=200000)
{
jasa=10000;
komisi=0.1*pendptan;
}
elseif(pendptan<=500000)
{
jasa=20000;
komisi=0.15*pendptan;
}
else
{
jasa=30000;
komisi=0.2*pendptan;
}
/*menghitungtotal*/
total=komisi+jasa;
cout<<"UangJasaRp."<<jasa<<endl;
cout<<"UangKomisiRp."<<komisi<<endl;
cout<<"============================="<<endl;
cout<<"HasilTotalRp."<<total<<endl;
getch();
return0;
}
if(syarat)
if(syarat)
perintah;
else
perintah;
else
if(syarat)
perintah;
else
perintah;
Program 5.13
#include<conio.h>
#include<iostream>
usingnamespacestd;
intmain()
{
charpekerja,barululus;
cout<<"Jawablahpertanyaandibawahini\n";
cout<<"denganjawabanYuntukYaatau";
cout<<"TuntukTidak\n";
cout<<"ApakahAndaBekerja?";
cin>>pekerja;
cout<<"telahkanAndaselesaisekolah";
cout<<"dalamduatahunini?";
cin>>barululus;
if(pekerja=='Y')
{
if(barululus=='Y')
{
cout<<"Kwalitasandakhusus";
cout<<"tertarik?\n";
}
}
getch();
return0;
}
Program 5.14
#include<conio.h>
#include<iostream>
usingnamespacestd;
intmain()
{
charpekerja,barululus;
cout<<"Jawablahpertanyaandibawahini\n";
cout<<"denganjawabanYuntukYaatau";
cout<<"TuntukTidak\n";
cout<<"ApakahAndaBekerja?";
cin>>pekerja;
cout<<"telahkanAndaselesaisekolah";
cout<<"dalamduatahunini?";
cin>>barululus;
if(pekerja=='Y')
{//Nestedif
if(barululus=='Y')
{
cout<<"Kwalitasandakhusus";
cout<<"Andatertarik\n";
}
else
{
cout<<"AndaharusLulusdari";
cout<<"sekolahpalinglama2tahun\n";
cout<<"danberkwalitas.\n";
}
}
else
{
cout<<"Andaharusmenjadipekerjayangberkwalitas.\n";
}
getch();
200 Direktorat Pembinaan SMK | 2008
Statement Kendali Bahasa Pemrorgraman
return0;
}
Program 5.15
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
usingnamespacestd;
intmain()
{
floatpendptan,jasa=0,komisi=0,total=0;
cout<<"PendapatanHariiniRp.";
cin>>pendptan;
if(pendptan>=0&&pendptan<=200000)
{
jasa=10000;
komisi=0.1*pendptan;
}
else
2008 | Direktorat Pembinaan SMK 201
Bahasa Pemrograman Statement Kendali
{
if(pendptan<=500000)
{
jasa=20000;
komisi=0.15*pendptan;
}
else
{
jasa=30000;
komisi=0.2*pendptan;
}
}
/*menghitungtotal*/
total=komisi+jasa;
cout<<"UangJasaRp."<<jasa<<endl;
cout<<"UangKomisiRp."<<komisi<<endl;
cout<<"============================="<<endl;
cout<<"HasilTotalRp."<<total<<endl;
getch();
return0;
}
if(suhu<20&&waktu>12)
cout<<"suhutelahmencapailevelyangberbahaya";
Perhatikan bahwa kedua kalimat besar daripada 12. Jika salah satu
yang diANDkan bersama adalah penghubung teresebut salah, seluruh
kalimat yang lengkap untuk ekspresi yang dihasilkan juga salah
mengevaluasi benar atau salah. dan pernyataan cout tidak dijalankan.
Pertama suhu <20 dievaluasi untuk Tabel dibawah meruapkan tabel
menghasilkan hasil benar atau salah. kebenaran untuk operator &&.
Kemudian menit> 12 dievaluasi untuk Kebenaran tabel berisi semua
menghasilkan hasil benar atau salah. kemungkinan kombinasi nilai yang
Kemudian kedua hasil tersebut mungkin dimiliki oleh dua kalimat,
diANDkan sehingga akan Sebagaimana dalam tabel
mendapatkan hasil akhir untuk menunjukkan, kedua sub-ekspresi
seluruh ekspresi. Pernyataan cout harus benar untuk operator &&
hanya akan dijalankan jika suhu sehingga akan menghasilkan nilai
kurang dari 20 dan waktunya lebih yang benar pula.
Operator && dapat digunakan IF. Program dibawah ini adalah versi
untuk mempermudah program- Program sebelumnya yang kemudian
program lain yang akan ditulis ulang dengan operator logika.
menggunakan pernyataan NESTED Perhatikan program dibawah ini:
Program 5.16
#include<conio.h>
#include<iostream>
usingnamespacestd;
intmain()
{
charpekerja,barululus;
cout<<"Jawablahpertanyaandibawahini\n";
cout<<"denganjawabanYuntukYaatau";
cout<<"TuntukTidak\n";
cout<<"ApakahAndaBekerja?";
cin>>pekerja;
cout<<"telahkanAndasekolah";
cout<<"dalamduatahunini?";
cin>>barululus;
if(pekerja=='Y'&&barululus=='Y') //menggunakan&&
{ //logicaloperator
cout<<"Kwalitasandaspesial";
cout<<"danandatertarik.\n";
}
else
{
cout<<"andaharusbekerjadanmempunyai\n";
cout<<"lulusandarisekolahSMKdalam\n";
cout<<"waktupalinglama3tahun.\n";
}
getch();
204 Direktorat Pembinaan SMK | 2008
Statement Kendali Bahasa Pemrorgraman
return0;
}
5.8.2. Operator ||
Operator || yang dikenal sebagai Pernyataan cout akan dijalankan jika
operator logika OR. Dua kalimat yang suhu kurang dari 20 ATAU suhu lebih
diperlukan sebagai operand akan besar dari 100. Jika salah satunya
membuat kalimat benar bila salah benar, maka seluruh ekspresi akan
satu dari sub-kalimat yang benar. menghasilkan keluaran benar dan
Berikut dibawah ini adalah contoh pernyataan cout akan dijalankan.
sebuah pernyataan IF yang Setelah cout dijalankan maka akan
menggunakan operator || menghasilkan keluaran "suhu dalam
level yang berbahaya". Table
if(suhu<20||suhu>100) dibawah ini merupakan table
cout << "suhu dalam level yang kebenaran operator OR
berbahaya.";
Program 5.17
#include<conio.h>
#include<iostream>
usingnamespacestd;
intmain()
{
doubleincome;
intyears;
cout<<"ApakahinimasukantahunanAnda?";
cin>>income;
cout<<"berapabanyakandabekerjasetiaptahunnya"
<<"Pekerjaanandasekarang?";
cin>>years;
if(income>=35000||years>5)//Usesthe||logicaloperator
cout<<"KwalifikasiAnda.\n";
else
{
cout<<"Andaakanmendapatkangajipalingtidak$35,000ataulebih\n";
cout<<"setelahbekerjalebihdarilimatahun.\n";
}
getch();
return0;
}
5.8.3. Operator !
Operator ! akan melakukan maka operator ! akan membalik
operasi logika NOT. Dibutuhkan menjadi salah, dan jika ekspresi
sebuah operand atau sebeliknya salah, maka akan dibalik menjadi
seperti benar atau salah. Dengan benar. Dibawah ini adalah suatu
kata lain, jika ungkapan itu benar,
Program 5.18
#include<iostream>
usingnamespacestd;
intmain()
{
doubleincome;
intyears;
cout<<"ApakahinimasukantahunanAnda?";
cin>>income;
cout<<"berapabanyakandabekerjasetiaptahunnya"<<"Pekerjaananda?
";
cin>>years;
if(!(income>=35000||years>5)) //menggunakanoperator!
2008 | Direktorat Pembinaan SMK 207
Bahasa Pemrograman Statement Kendali
{
cout<<"Andaakanmendapatkangajipalingtidak$35,000atau
lebih\n";
cout<<"setelahbekerjalebihdarilimatahun.\n";
}
else
cout<<"KwalifikasiAnda.\n";
return0;
}
if(moreData==true)
canbewrittensimplyas
if(moreData)
andthetest
if(moreData==false)
canbewrittensimplyas
if(!moreData)
z=20;
Ekspresikeduayangakan Ekspresiketigayang
Ekspresipertama
dieksekusijikaekspresipertama akandieksekusijika
yangakandiuji
benar ekspresipertamasalah
X< 0 ? Y=10 : Z = 20
Gambar 5.7. aturan yang diakukan oleh tiga sub-ekspresi
(x<0)?(y=10):(z=20);
a=x>100?0:1
Nilai akan ditetapkan baik 0 atau 1, tergantung apakah x lebih besar dari 100.
Pernyataan tersebut dapat dinyatakan dalam pernyataan IF/ELSE sebagai
berikut:
if(x>100)
a=0;
else
a=1;
Program 5.19
#include<conio.h>
#include<iostream>
#include<iomanip>
usingnamespacestd;
intmain()
{
constdoublePAY_RATE=50.0;
doublehours,charges;
cout<<"Berapajamandabekerja?";
cin>>hours;
hours=hours<5?5:hours;//Conditionaloperator
charges=PAY_RATE*hours;
cout<<fixed<<showpoint<<setprecision(2);
cout<<"Besargajiandaadalah$"<<charges<<endl;
getch();
return0;
}
switch(variabel)
{
casevalue1:statement1;
break;
casevalue2:statement2;
break;
..
default:statement;/*optional*/
break;
}
Program 5.20
#include<conio.h>
#include<iostream>
usingnamespacestd;
voidmain()
{
intbil;
cout<<"Masukkanbilangan:";
cin>>bil
switch(bil)
{
case1:cout<<"Andamemasukkanbil.satu";
break;
case2:cout<<"Andamemasukkanbil.dua";
break;
case3:cout<<"Andamemasukkanbil.tiga";
break;
default:cout<<"Andamemasukkanbilselain1,2,dan3";
break;
}
}
switchnama_variabel
{
casenilai_1:{
Perintahyangakandieksekusijikamemenuhinilai_1;
break;}
casenilai_2:{
Perintahyangakandieksekusijikamemenuhinilai_2;
break;}
default:{
Perintahyangakandieksekusijikatidakmemenuhisemua;
exit(0);}
}
SelectCaseintAge
Case5 :lblTitle.Caption="Kindergarten"
Case6 :lblTitle.Caption="1stGrade"
Case7 :lblTitle.Caption="2ndGrade"
Case8 :lblTitle.Caption="3rdGrade"
Case9 :lblTitle.Caption="4thGrade"
Case10 :lblTitle.Caption="5thGrade"
Case11 :lblTitle.Caption="6thGrade"
CaseElse:lblTitle.Caption="Advanced"
EndSelect
switch(ekspresiintegerataukarakter)
{
casekonstanta1:
perintah;
perintah;
break;
casekonstanta2:
perintah;
perintah;
break;
default:
perintah;
perintah;
}
Program 5.21
include<stdio.h>
#include<conio.h>
#include<iostream.h>
usingnamespacestd;
main()
{
charkode;
cout<<"MasukkanKodeBarang[A..C]:";
cin>>kode;
switch(kode)
{
case'A':
cout<<"AlatOlahRaga";
break;
case'B':
cout<<"AlatElelktronik";
break;
case'C':
cout<<"AlatMasak";
break;
default:
cout<<"AndaSalahMemasukankode";
break;
}
getch();
}
Program 5.22
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
usingnamespacestd;
main()
{
charkode;
cout<<"MasukkanKodeBarang[A..C]:";
cin>>kode;
switch(kode)
{
case'A':
case'a':
cout<<"AlatOlahRaga";
break;
case'B':
case'b':
Cout<<"AlatElelktronik";
break;
case'C':
case'c':
cout<<"AlatMasak";
break;
default:
cout<<"AndaSalahMemasukankode";
break;
}
getch();
return0;
}
switch(kondisi)
{
case1:pernyataan1;
break;
case2:pernyataan2;
break;
.....
.....
casen:pernyataann;
break;
default:pernyataanm
}
Program 5.23
#include<conio.h>
#include<iostream>
usingnamespacestd;
intmain(){
intAngkaBulan,Tahun,JumlahHari;
cout<<"AngkaBulan:";
cin>>AngkaBulan;
cout<<"Tahun:";
cin>>Tahun;
switch(AngkaBulan){
case1:
case3:
case5:
case7:
case8:
case10:
case12:JumlahHari=31;break;
case4:
case6:
case9:
case11:JumlahHari=30;break;
case2:if(Tahun%4==0)JumlahHari=29;
elseJumlahHari=28;break;
}
cout<<"Jumlahhari"<<JumlahHari;
getch();
return0;
}
Program 5.24
#include<conio.h>
#include<iostream>
usingnamespacestd;
main(){
intOp1,Op2,Pilih;
floatHasil;
cout<<"Operand1:";
cin>>Op1;
cout<<"Operand2:";
cin>>Op2;
cout<<"1.Operator+\n";
cout<<"2.Operator\n";
cout<<"3.Operator*\n";
cout<<"4.Operator/\n";
cout<<"PilihOperator:";
cin>>Pilih;
switch(Pilih){
case1:{Hasil=Op1+Op2;break;}
case2:{Hasil=Op1Op2;break;}
case3:{Hasil=Op1*Op2;break;}
case4:{if(Op2!=0)
cout<<Op1/Op2;
else
cout<<"error";
break;}
}
printf("Hasildariperhitungantersebutadalah%f",Hasil);
getch();
return0;
}
IfKondisiThen
Perintahyangakandieksekusijikakondisibernilaitrue
ELSE
Perintahyangakandieksekusijikakondisibernilaifalse
EndIf
IF<ekspresiboolean>then
Perintah_1
Else
Perintah_2
Endif
IF<ekspresiboolean1>then
Perintah1
Elseif<ekspresiboolean2>then
Perintah2
Elseif<ekspresibooleann>then
Perintahn
ElsePerintahn+1
Endif
Program 5.25
#include<conio.h>
#include<iostream>
usingnamespacestd;
main(){
intBil;
cout<<"masukanbilangan:";
cin>>Bil;
if(Bil%2==0)
{
cout<<"bilangangenap";
}
else
{
cout<<"bilanganganjil";
}
getch();
return0;
}
Program 5.26
#include<conio.h>
#include<iostream>
usingnamespacestd;
main(){
intA,B,C,maks;
cout<<"A:";
cin>>A;
cout<<"B:";
cin>>B;
cout<<"C:";
cin>>C;
if((A>B)&&(A>C))
maks=A;
elseif((B>A)&&(B>C))
maks=B;
else
maks=C;
cout<<"bilanganterbesaradalah"<<maks;
getch();
return0;
}
Program 5.27
#include<conio.h>
#include<iostream>
#include<iomanip>
usingnamespacestd;
intmain()
{
intchoice,months;
doublecharges;
//Displaymenupilihan
cout<<"\t\tMenuAnggotaKlubKesehatan\n\n";
cout<<"1.KeanggotaaStandardDewasa\n";
cout<<"2.KeanggotaanAnak\n";
cout<<"3.KeanggotaanMasyarakatSenior\n";
cout<<"4.KeluarProgram\n\n";
cout<<"MasukanPilihanAnda:";
cin>>choice;
cout<<fixed<<showpoint<<setprecision(2);
if(choice==1)
{
cout<<"UntukberapaBulan?";
cin>>months;
charges=months*40.00;
cout<<"Totalpembayaranyaadalah:$"<<charges<<endl;
}
elseif(choice==2)
{
cout<<"UntukberapaBulan?";
cin>>months;
charges=months*20.00;
cout<<"Totalpembayaranyaadalah:$"<<charges<<endl;
}
elseif(choice==3)
{
cout<<"UntukberapaBulan?";
cin>>months;
charges=months*30.00;
cout<<"Totalpembayaranyaadalah:$"<<charges<<endl;
}
elseif(choice!=4)
{
cout<<"Pilihanyangvalidadalahantara1sampai4\n";
cout<<"Programakanmemilihlagidarisalahsatumenudiatas\n";
}
getch();
return0;
}
1.KeanggotaaStandardDewasa
2.KeanggotaanAnak
3.KeanggotaanMasyarakatSenior
4.KeluarProgram
MasukanPilihanAnda:3
UntukberapaBulan?3
Totalpembayaranyaadalah:$90.00
BAB 6
PROSEDUR DAN SUBROUTIN
6.1. Prosedur
6.2. Parameter Prosedur
6.3. Pemanggilan Prosedur
6.4. Sub Rutin
6.5. Sub Rutin Dalam Bahasa Pemrograman
6.6. Function yang Mengembalikan Nilai
6.7. Function yang Tidak Mengembalikan Nilai
6.8. Function Call Function
6.9. Call by Value dan Call by References
6.10. Parameter dengan Nilai Default
6.11. Overloading
6.12. Soal Latihan
6.1. Prosedur
Prosedur adalah sederetan Ketika kentangnya terhidang, jadi
instruksi algoritmik yang diberi nama, sup, digoreng atau direbus saja ?
dan akan menghasilkan efek neto Maka kita harus membatasi dengan
yang terdefinisi. Prosedur jelas keadaan awal yang menjadi titik
menyatakan suatu aksi dalam konsep tolak mengupas kentang dan
algoritma yang dibicarakan pada keadaan akhir yang ingin dicapai
cerita Mengupas kentang. Dimana supaya dapat merencanakan efek
contoh ini dari aksi yang dilakukan neto yang diinginkan. Sehingga hal
pleh Ibu Tati yang mengupas kentang tersebut dapat ditentukan:
untuk mempersiapkan makan malam Initial state (I.S. keadaan awal),
sebagai berikut. Pernyataan ini T0, adalah kentang sudah ada di
mencakup hal yang luas ruang kantong kentang, yang ditaruh di
lingkupnya, misalnya : rak di dapur, di mana ibu Tati akan
Apakah kentangnya harus dibeli mengupasnya
dulu atau sudah ada di dapur ? Final state (F.S. keadaan akhir),
Apakah yang dimaksud dengan T1, kentang dalan keadaan
mengupas kentang untuk makan terkupas di panci, siap untuk
malam berarti sampai dengan dimasak dan kantong kentangnya
kentang terhidang ? harus dikembalikan ke rak lagi.
Input :R:integer,tahanan(Ohm)danA:integer,arus(Ampere)
Proses :menghitungV=R*A
Output:V:integer,tegangan(Volt)
Program VOLTAGE1
{Programyangmembacatahanandanarus,menghitungVoltagedan
mencetakhasilperhitungan}
Kamus:
R :integer{tahanandalamohm}
A :integer{arusdalamohm}
V :integer{tegangandalamohm}
procedure PROSES1
{Proseduruntuk"memproses"tahanandanarusmenjaditegangan}
Algoritma:
input(R,)
PROSES1
output(V)
Procedure PROSES1
{I.S :diberikanhargaRdanAyangtelahterdefinisi}
{FS :memprosesRdanAsehinggadihasilkanVyaitutegangandengan
rumus :V=R*A}
Kamuslokal:
Algoritma:
VR*A
Program VOLTAGE2
{Programyangmembacatahanandanarus,menghitungVoltagedan
mencetakhasilperhitungan}
Kamus:
R :integer{tahanandalamohm}
A :integer{arusdalamohm}
V :integer{tegangandalamohm}
Procedure PROSES2
(Input:R,A:integer;OutputV:integer)
{Proseduruntuk"memproses"tahananRdanarusAmenjadi
teganganV}
Algoritma:
input(R,)
PROSES2(R,A,V)
output(V)
intmain(){ intfungsi_1(){
. .
fungsi_1(); return0;
. }
fungsi_2();
.
return0;
intfungsi_2(){
}
.
return0;
}
Gambar 6.1.SubRutin
tipe_datanama_fungsi(daftar_parameter)
{
isidarifungsi
return<ekspresi>
}
/*functionakanmenghasilkannilai1jikacsamadengans,sebaliknyabernilai0jikac
tidaksamadengans*/
intcek(chars,charc){
if(s==c)return1;
return0;
}
classricek{
publicintcek(chars,charc){
if(s==c)return1;
return0;
}
}
digunakan oleh class lain, dalam hal function method cek(). Berikut ini
ini untuk mengecek suatu karakter adalah kode lengkap dari kedua
karena class ricek() mempunyai program di atas
.
Perhatikan Program dalam bahasa C++ :
#include<iostream>
usingnamespacestd;
intcek(chars,charc){
if(s==c)return1;
return0;
}
intmain(void){
chara,b;
a='a';
b='a';
cout<<cek(a,b)<<endl;
return0;
}
classricek{
publicintcek(chars,charc){
if(s==c)return1;
return0;
}
}
classricekApp{
publicstaticvoidmain
(String[]args){
ricekck=newricek();
chara='a',b='b';
System.out.println(ck.cek(a,b));
}
}
cout<<"FPBnya=";
cout<<fpb()<<endl;
}
Nilai dari function fpb() di atas untuk bahasa Java nilai method fpb() dari
bahasa C++ pasti 6 karena nilai dari class hitung() juga pasti tetap, yaitu 6
a dan b telah ditetapkan besarnya, karena nilai a dan b juga telah
yaitu 24 dan 18. Sedangkan untuk ditentukan (a=78 dan b=24).
Atau dengan kata lain, suatu function sehingga tipe data-nya juga harus
yang mempunyai nilai. integer.
Karena mempunyai nilai inilah Dengan demikian dapat
maka suatu function yang disimpulkan bahwa ciri dari function
mengembalikan nilai harus yang mengembalikan nilai adalah :
mempunyai tipe data sesuai dengan Function tersebut mempunyai tipe
nilai yang dihasilkannya. Perhatikan data.
baris ke-2 pada function cek() pada Diakhiri dengan klausa return.
contoh sebelumnya. Function cek() Berikut contoh program C++
digunakan menghasilkan nilai integer yang menggunakan function dimana
(lihat baris ke-3 dan ke-4) yaitu 0 function-nya dapat mengembalikan
atau 1 (return 0 dan return 1), nilai
1. #include<iostream>
2. usingnamespacestd;
3. intfpb(inta,intb){
4. inthasil;
5. intr=a%b;
6. if(r==0)hasil=b;
7. else{
8. while(r!=0){
9. a=b;b=r;
10. r=a%b;
11. hasil=b;
12. }
13. }
14. return(hasil);
15. }
16. voidmain(){
17. intm,n;
18. do{
19. cout<<"Bilanganpertama=";
20. cin>>m;
21. cout<<"Bilangankedua=";
22. cin>>n;
23. }while(m<n);
24. cout<<"FPBnya="<<fpb(m,n)<<endl;
25. }
Keluaran programnya :
Bianganpertama =24
Bilangankedua =20
FPBnya =4
Baris ke-3 sampai dengan ke-16 data integer juga, yaitu a dan b (baris
merupakan sub rutin (function) yang ke-3). Function tersebut juga
bernama fpb(). Sedangkan baris ke- mempunyai variabel hasil yang
17 sampai dengan ke-26 merupakan bertipe data integer (baris ke-4).
program utamanya. Program utama Function fpb() ini nilainya akan sama
ini akan memanggil function fpb() dengan variabel hasil (baris ke-15).
melalui suatu argumen (lihat baris ke- Variabel a, b, dan hasil
25). Function fpb() bertugas untuk merupakan variabel lokal dimana
melakukan pencarian faktor ketiga variabel ini hanya berfungsi
persekutuan besar dari dua buah pada function fpb() saja. Variabel a
bilangan yang dimasukkan di dan b bertugas untuk menerima data
program utama (lihat baris ke-19 yang dikirim oleh program lain yang
sampai dengan ke-24). Setelah memanggilnya sedangkan variabel
selesai melakukan tugasnya, maka hasil digunakan untuk menyimpan
function fpb() akan mempunyai nilai data hasil pencarian faktor
yang langsung ditampilkan pada persekutuan besar (baris ke-6 dan
program utama. baris ke-12). Untuk permasalahan
Function fpb() mempunyai tipe yang sama dengan menggunakan
data integer dan mempunyai dua bahasa Java adalah sebagai berikut:
buah parameter formal yang bertipe
1. importjava.util.Scanner;
2. importjava.io.*;
3. classhitung{
4. publicintfpb(inta,intb){
5. inthasil=0;
6. intr=a%b;
7. if(r==0)hasil=b;
8. else{
9. while(r!=0){
10. a=b;
11. b=r;
12. r=a%b;
13. hasil=b;
14. }
15. }
16. returnhasil;
17. }
18. }
19. classsekutuBesar{
20. publicstaticvoidmain(String[]args){
21. hitungsekutu=newhitung();
22. intm,n;
23. Scannerinput=newScanner(System.in);
24. do{
25. System.out.print("Bilanganpertama=");
26. m=input.nextInt();
27. System.out.print("Bilangankedua=");
28. n=input.nextInt();
29. }while(m<n);
30. System.out.println("Bilanganterbesarnya="+sekutu.fpb(m,n));
31. }
32. }
Keluaran programnya :
Bilanganpertama =36
Bilangankedua =28
Bilanganterbesarnya =4
1. #include<iostream>
2. usingnamespacestd;
3. voidfpb(inta,intb){
4. inthasil;
5. intr=a%b;
6. if(r==0)hasil=b;
236 Direktorat Pembinaan SMK | 2008
7. else{
8. while(r!=0){
9. a=b;
10. b=r;
11. r=a%b;
12. hasil=b;
13. }
14. }
15. cout<<"FPBnya="<<hasil<<endl;
16. }
17. voidmain(){
18. intm,n;
19. do{
20. cout<<"Bilanganpertama=";
21. cin>>m;
22. cout<<"Bilangankedua=";
23. cin>>n;
24. }while(m<n);
25. fpb(m,n);
26. }
Keluaran programnya :
Bilanganpertama =30
Bilangankedua =18
FPBnya =6
1. importjava.util.Scanner;
2. importjava.io.*;
3. classhitung{
4. publicvoidfpb(inta,intb){
5. inthasil=0;
6. intr=a%b;
7. if(r==0)hasil=b;
8. else{
9. while(r!=0){
10. a=b;
11. b=r;
12. r=a%b;
13. hasil=b;
14. }
15. }
16. System.out.println("Bilanganterbesarnya="+hasil);
17. }
18. }
19. classsekutuBesar{
20. publicstaticvoidmain(String[]args){
21. hitungsekutu=newhitung();
22. intm,n;
23. Scannerinput=newScanner(System.in);
24. do{
25. System.out.print("Bilanganpertama=");
26. m=input.nextInt();
27. System.out.print("Bilangankedua=");
28. n=input.nextInt();
29. }while(m<n);
30. sekutu.fpb(m,n);
31. }
32.}
Keluaran programnya :
Bilanganpertama =44
Bilangankedua =36
Bilanganterbesarnya =4
intfungsi_1(){ intfungsi_3(){
intmain(){ . .
. fungsi_3(); fungsi_4();
fungsi_1(); . return0;
. return0; } intfungsi_4(){
fungsi_2(); } .
. return0;
return0; }
} intfungsi_2(){
.
return0;
}
Gambar 6.2. Sub rutin yang tidak hanya dipanggil oleh program utama
Berikut adalah contoh sub rutin yang memanggil sub rutin lainnya.
1. #include<iostream>
2. usingnamespacestd;
3. voidfpb(inta,intb){
4. inthasil;
5. intr=a%b;
6. if(r==0)hasil=b;
7. else{
8. while(r!=0){
9. a=b;
10. b=r;
11. r=a%b;
12. hasil=b;
13. }
14. }
15. cout<<"FPBnya="<<hasil<<endl;
16. }
17. voidinput_data(){
2008 | Direktorat Pembinaan SMK 239
18. intm,n;
19. do{
20. cout<<"Bilanganpertama=";
21. cin>>m;
22. cout<<"Bilangankedua=";
23. cin>>n;
24. }while(m<n);
25. fpb(m,n);
26. }
27. voidmain(){
28. input_data();
29. }
Program di atas mempunyai dua function lain yaitu function fpb() (baris
buah function, yaitu function fpb() dan ke-25) setelah user memasukkan
function input_data(). Pertama kali data untuk bilangan pertama dan
function yang dipanggil oleh program bilangan kedua. Sedangkan kode
utama adalah function input_data() program dalam bahasa Java untuk
(baris ke-28). Kemudian function permasalahan yang sama adalah:
input_data() melakukan pemanggilan
1. importjava.util.Scanner;
2. importjava.io.*;
3. classhitung{
4. publicvoidfpb(inta,intb){
5. inthasil=0;
6. intr=a%b;
7. if(r==0)hasil=b;
8. else{
9. while(r!=0){
10. a=b;
11. b=r;
12. r=a%b;
13. hasil=b;
14. }
15. }
16. System.out.println("Bilanganterbesarnya="+hasil);
17. }
18. }
19. classinput_data{
20. publicvoiddata_input(){
21. hitungsekutu=newhitung();
22. intm,n;
23. Scannerinput=newScanner(System.in);
24. do{
25. System.out.print("Bilanganpertama=");
26. m=input.nextInt();
27. System.out.print("Bilangankedua=");
28. n=input.nextInt();
29. }while(m<n);
30. sekutu.fpb(m,n);
31. }
32. }
33. classsekutuBesar{
34. publicstaticvoidmain(String[]args){
35. input_datamasukan=newinput_data();
36. masukan.data_input();
37. }
38. }
1. #include<iostream>
2. usingnamespacestd;
3. intsqr(intx){
4. x=x*x;
5. return(x);
6. }
7. intmain(void){
8. intt=10;
9. cout<<sqr(t)<<","<<t<<endl;
10. return0;
11. }
Nilaiawal Nilaivariabeltdisalinke
t=10 parameterfungsisqr()
x=10
Pemanggilankembali Prosesdifunction
variabelt sqr()
t=10 x=100atau
sqr()=100
Untuk permasalahan yang sama dalam bahasa Java adalah sebagai berikut :
1. importjava.io.*;
2. classkuadrat{
3. publicintsqr(intx){
4. x=x*x;
5. return(x);
6. }
7. }
8. classpower{
9. publicstaticvoidmain(String[]args){
10. kuadrata=newkuadrat();
11. intt=10;
12. System.out.println(a.sqr(t)+","+t);
13. }
14. }
1. #include<iostream>
2. usingnamespacestd;
3. voidtukar(int*x,int*y){
4. inttemp;
5. temp=*x;
6. *x=*y;
7. *y=temp;
8. }
9. intmain(void){
10. inti,j;
11. i=10;
12. j=20;
13. cout<<"Mulamula:"<<endl;
14. cout<<"Nilaii:"<<i<<endl;
15. cout<<"Nilaij:"<<j<<endl;
16. tukar(&i,&j);
17. cout<<endl<<"Setelahditukar:" <<endl;
18. cout<<"Nilaii:"<<i<<endl;
19. cout<<"Nilaij:"<<j<<endl;
20. return0;
21. }
2008 | Direktorat Pembinaan SMK 243
Setelahditukar:
NilaiI :20
Nilaij :10
Baris ke-14 dan 15, digunakan dan ke-19). Ternyata variabel i dan j
untuk menampilkan nilai dari variabel telah tertukar. Hal ini terjadi karena
i dan j yang nilainya masing-masing pada function tukar() menyalin alamat
10 dan 20. Setelah dilakukan memori yang menyimpan variabel i
penukaran dengan memanggil dan j dan kemudian menukar isinya
function tukar() pada baris ke-16, sehingga jika variabel i dan j jika
program kemudian memanggil dipanggil nilainya akan berubah
kembali variabel i dan j (baris ke-18 karena isinya telah ditukar.
Nilaiawal Alamatmemoriyang
i=10,j=20 menyimpannilaidarivariabelx
danydisalinkeparameter
fungsitukar()
x = 10, y=20
Pemanggilankembali Prosespenukarandi
variabelidanj functiontukar()
i=20,j=10 x=20,y=10
1. #include<iostream>
2. usingnamespacestd;
3. doubleluas_segi3(intalas,inttinggi=10){
4. return(0.5*alas*tinggi);
5. }
6. voidmain(){
7. inta=15,t=20;
8. cout<<"Luassegitiga=";
9. cout<<luas_segi3(a,t)<<endl;
10. cout<<endl;
11. cout<<"Luassegitiga=";
12. cout<<luas_segi3(a)<<endl;
13. }
6.11. Overloading
Overloading adalah function- 2. Function tersebut mempunyai
function yang ada dalam suatu jumlah parameter formal yang
program dimana function-function sama tetapi tipe data yang
tersebut mempunyai nama yang berbeda.
sama tetapi parameter formal-nya 3. Function-function tersebut
berbeda-beda antara yang satu mempunyai jumlah parameter
dengan yang lainnya. Ada tiga jenis formal yang berbeda dan tipe
overloading, yaitu: data dari parameter formal
1. Function tersebut mempunyai tersebut juga berbeda.
jumlah parameter formal yang Berikut ini diberikan contoh untuk
berbeda tetapi tipe data-nya function-function yang mempunyai
sama. jumlah parameter formal yang
berbeda tetapi tipe data-nya sama.
1. classhitung{
2. publicvoidluas_segi3(intalas){
3. inttinggi=10;
4. doubleluas=0.5*alas*tinggi;
5. System.out.println("Luassegitiga1="+luas);
6. }
7. publicvoidluas_segi3(intalas,inttinggi){
8. doubleluas=0.5*alas*tinggi;
9. System.out.println("Luassegitiga2="+luas);
10. }
11. publicvoidluas_segi3(intalas, inttinggi,intbagi){
12. doubleluas=(0.5*alas*tinggi)/bagi;
13. System.out.println("Luassegitiga2dibagi"+bagi+"="+luas);
14. }
15. }
16. classoverload1{
17. publicstaticvoidmain(String[]args){
18. hitungsekutu=newhitung();
19. sekutu.luas_segi3(10);
20. sekutu.luas_segi3(10,15);
21. sekutu.luas_segi3(10,15,3);
22. }
23. }
1. #include<iostream>
2. usingnamespacestd;
3. voidluas_segi3(intalas){
4. inttinggi=10;
5. cout<<"Luassegitiga1="<<(0.5*alas*tinggi)<<endl;
6. }
7. voidluas_segi3(char*alas){
8. cout<<alas<<endl;
9. }
10. voidmain(){
11. luas_segi3(10);
12. luas_segi3("Belajarpemrograman");
13. }
1. classhitung{
2. publicvoidluas_segi3(intalas){
3. inttinggi=10;
4. doubleluas=0.5*alas*tinggi;
5. System.out.println("Luassegitiga1="+luas);
6. }
7. publicvoidluas_segi3(Stringalas){
8. System.out.println(alas);
9. }
10. }
11. classoverload2{
12. publicstaticvoidmain(String[]args){
13. hitungsekutu=newhitung();
14. sekutu.luas_segi3(10);
15. sekutu.luas_segi3("Belajarpemrograman");
16. }
17. }
Contoh untuk function-function yang yang berbeda dan tipe data yang
mempunyai jumlah parameter formal berbeda pula adalah seperti berikut:
19. luas_segi3("Belajarpemrograman");
20. luas_segi3("Belajarpemrogramanlagi",3);
21. }
1. classhitung{
2. publicvoidluas_segi3(intalas){
3. inttinggi=10;
4. doubleluas=0.5*alas*tinggi;
5. System.out.println("Luassegitiga1="+luas);
6. }
7. publicvoidluas_segi3(Stringalas){
8. System.out.println(alas);
9. }
10. publicvoidluas_segi3(Stringalas,intdata){
11. System.out.println(alas+":");
12. System.out.println("Pangkatduadari"+data+"adalah"+(data*data));
13. }
14. }
15. classoverload3{
16. publicstaticvoidmain(String[]args){
17. hitungsekutu=newhitung();
18. sekutu.luas_segi3(10);
19. sekutu.luas_segi3("Belajar pemrograman");
20. sekutu.luas_segi3("Belajar pemrograman",3);
21. }
22. }
BAB 7
FUNGSI
7.1. Pendahuluan
7.2. Fungsi Void
7.3. Pemanggilan Fungsi
7.4. Prototipe Fungsi
7.5. Pengiriman data pada Fungsi
7.6. Passing Data by Value
7.7. The return Statement
7.8. Returning a Value from a Function
7.9. Returning a Boolean Value
7.10. Menggunakan Fungsi dalam program menu
7.11. Variabel Lokal dan Global
7.12. Soal Latihan
7.1. Pendahuluan
Fungsi adalah kumpulan Misalnya pada sebuah buku yang
pernyataan yang melakukan tugas memiliki seribu halaman, tetapi tidak
tertentu. Sejauh ini Anda telah dibagi ke dalam bab atau bagian.
menggunakan fungsi dalam dua cara: Jika ingin mencoba untuk
(1) Anda telah membuat sebuah menemukan satu topik dalam buku
fungsi bernama utama dalam setiap ini akan sangat sulit. Real-world
program yang telah ditulis, dan (2) program dapat dengan mudah ada
Anda memiliki fungsi library disebut ribuan baris kode, dan kecuali
seperti sqrt dan pow. Dalam bab ini mereka modularized, mereka bisa
akan mempelajari cara membuat jadi sangat sulit untuk mengubah dan
fungsi yang dapat digunakan seperti memelihara.
fungsi library pada C++. Alasan lain untuk menggunakan
Salah satu alasan mengapa fungsi adalah untuk bahwa fungsi
menggunakan fungsi adalah untuk menyederhanakan program. Jika
memecah program ke dalam sebuah tugas tertentu dilakukan di beberapa
program yang lebih kecil sehingga tempat di sebuah program, sebuah
mudah dikelola. Setiap unit modul, fungsi dapat ditulis sekali saja untuk
diprogram sebagai fungsi terpisah. melakukan tugas itu, dan kemudian
nama Parameterlist
return
body
intmain()
{
Cout<<HelloSiswaSMK\n;
return0;
}
Contoh program diatas merupakan baris pendefinisian int main () yang disebut
dengan function header.
voidTampilPesan()
{
cout<<"HellofromthefunctionTampilPesan.\n";
}
Program 7.1.
#include<conio.h>
#include<iostream>
usingnamespacestd;
voidTampilPesan()
{
cout<<">>SalamHellodarifungsiTampilPesan.\n";
intmain()
{
cout<<"HellodariprogramUtama.\n";
cout<<"\n";
TampilPesan();//memanggilTampilPesan
cout<<"\n";
cout<<"kemblikeFungsiUtamalagi.\n";
getch();
return0;
}
>>SalamHellodarifungsiTampilPesan.
kemblikeFungsiUtamalagi.
Fungsi TampilPesan disebut oleh nama fungsi yang diikuti oleh tanda
baris utama adalah: TampilPesan(); kurung dan titik koma. Coba kita
Baris ini digunakan untuk fungsi bandingkan dengan fungsi header
panggilan. Dimana hal ini merupakan seperti berikut:
FunctionHeader voidTampilPesan()
FunctionCall TampilPesan();
voidTampilPesan()
{
cout<<">>SalamHellodarifungsiTampilPesan.\n";
}
intmain()
{
cout<<"HellodariprogramUtama.\n";
TampilPesan();
cout<<"kemblikeFunsgiUtamalagi.\n";
getch();
return0;
}
Program 7.2.
#include<conio.h>
#include<iostream>
usingnamespacestd;
voidTampilPesan()
{
2008 | Direktorat Pembinaan SMK 257
cout<<">>SalamHellodarifungsiTampilPesan.\n";
}
intmain()
{
cout<<"HellodariprogramUtama.\n";
cout<<"\n";
for(intcount=0;count<5;count++)
TampilPesan(); //memanggilFungsiTampilPesan
cout<<"\n";
cout<<"kemblikeFunsgiUtamalagi.\n";
getch();
return0;
}
>>SalamHellodarifungsiTampilPesan.
>>SalamHellodarifungsiTampilPesan.
>>SalamHellodarifungsiTampilPesan.
>>SalamHellodarifungsiTampilPesan.
>>SalamHellodarifungsiTampilPesan.
kemblikeFunsgiUtamalagi.
Setiap program dapat dimungkinkan dibawah ini memiliki tiga fungsi: yaitu
untuk memiliki banyak fungsi atau utama, fungsi pertama dan fungsi
sebuah fungsi dalam sebuah kedua. Untuk lebih jelas perhatikan
program. Program dibawah 7.3. program dibawah ini:
Program 7.3
#include<conio.h>
#include<iostream>
usingnamespacestd;
voidpertama()
{
cout<<">>SayasekarangsedangdiFungsiPertama.\n";
}
voidkedua()
258 Direktorat Pembinaan SMK | 2008
{
cout<<">>SayasekarangsedangdiFungsiKedua.\n";
}
intmain()
{
cout<<"SayasedangdiprogramUtama.\n";
pertama();//pemanggilanfungsipertama
kedua(); //pemanggilanfungsikedua
cout<<"SayakembalikeProgramUtama.\n";
getch();
return0;
}
Dalam program diatas fungsi utama pertama dan kedua dengan instruksi
terdiri dari pemanggilan fungsi sebagai berikut:
pertama();
kedua();
voidpertama()
{
cout<<">>SayasekarangsedangdiFungsiPertama.\n";
}
voidkedua()
{
cout<<">>SayasekarangsedangdiFungsiKedua.\n";
}
intmain()
{
cout<<"SayasedangdiprogramUtama.\n";
pertama();
kedua();
cout<<"SayakembalikeProgramUtama.\n";
getch();
return0;
}
Gambar 7.3. Pemanggilan lebih dari satu fungsi
Program 7.4.
#include<conio.h>
#include<iostream>
usingnamespacestd;
voidPalingDalam()
{
cout<<"SayasekarangsedangdidalamfungsiPalingDalam.\n";
}
voidAgakDalam()
{
cout<<"sekarangsayasedangdifungsiAgakDalam.\n";
PalingDalam();//panggilFungsi
cout<<"SekarangsayaKembalikefungsiAgakDalam.\n";
}
intmain()
{
cout<<"sayasekarangsedangdidalamfungsiUtama.\n";
AgakDalam();//PanggilFungsi
cout<<"SayakembalikeFungsiUtamaLagi.\n";
getch();
return0;
}
voidAgakDalam()
{
cout<<"sekarangsayasedangdifungsiAgakDalam.\n";
PalingDalam();//panggilFungsi
cout<<"SekarangsayaKembalikefungsiAgakDalam.\n";
}
voidPalingDalam()
{
cout<<"SayasekarangdidalamfungsiPalingDalam.\n";
}
intmain()
{
cout<<"sayasekarangsedangdidalamfungsiUtama.\n";
AgakDalam();//PanggilFungsi
cout<<"SayakembalikeFungsiUtamaLagi.\n";
getch();
return0;
}
voidTampilPesan();
Prototipe tersebut diatas tampak ada titik koma dibagian akhir. Sebuah
mirip dengan fungsi header, kecuali pernyataan fungsi akan
262 Direktorat Pembinaan SMK | 2008
Program 7.5.
#include<conio.h>
#include<iostream>
usingnamespacestd;
//PrototipeFungsi
voidpertama();
voidkedua();
intmain()
{
cout<<"Sayasedangdiprogramutama.\n";
pertama(); //memanggilfungsipertama
kedua(); //memanggilfungsikedua
cout<<"Kembalidalamprogramutamalagi.\n";
getch();
return0;
}
voidpertama()
{
cout<<"sayasekarangdidalamfungsipertama.\n";
}
voidkedua()
{
cout<<"sayasekarangdidalamfungsikedua.\n";
}
sayasekarangdidalamfungsipertama.
sayasekarangdidalamfungsikedua.
Kembalidalamprogramutamalagi.
result=pow(2,4);
voidTampilNilai(intnum)
{
cout<<"Nilainyaadalah"<<num<<endl;
}
Program 7.6.
264 Direktorat Pembinaan SMK | 2008
#include<conio.h>
#include<iostream>
usingnamespacestd;
//PrototipeFungsi
voidTampilNilai(int);
intmain()
{
cout<<"Sayasedangmemasukan5kefungsiTampilNilai.\n";
TampilNilai(5);//CallTampilNilaidenganargument5
cout<<"Sekarangsayasudahkembalikeprogramutama.\n";
getch();
return0;
}
voidTampilNilai(intnum)
{
cout<<"Besarnilainyaadalah:"<<num<<endl;
}
Dalam prototype fungsi tersebut diatas yang perlu diperhatikan adalah pada
TampilNilai:
voidTampilNilai(int); //functionprototype
voidTampilNilai(intnum);
TampilNilai(5);
voidTampilNilai(intnum)
{
cout<<"Besarnilainyaadalah:"<<num<<endl;
}
Gambar 7.5. Fungsi prototipe
Program 7.7.
#include<conio.h>
#include<iostream>
usingnamespacestd;
//PrototipeFungsi
voidTampilNilai(int);
intmain()
{
cout<<"SayasedangmengisikanbeberapanilaipadaTampilNilai.\n";
TampilNilai(5);//PanggilTampilNilaidenganargument5
TampilNilai(10);//PanggilTampilNilaidenganargument10
TampilNilai(2);//PanggilTampilNilaidenganargument2
TampilNilai(16);//PanggilTampilNilaidenganargument16
cout<<"sekarangsayakembali.\n";
getch();
return0;
}
voidTampilNilai(intnum)
{
cout<<"Nilainyaadalah"<<num<<endl;
}
TampilNilai(3 + 5);
TampilNilai (4.7);
Program 7.8.
#include<conio.h>
#include<iostream>
usingnamespacestd;
//PrototipeFungsi
voidTambahan(int,int,int);
intmain()
{
intvalue1,value2,value3;
cout<<"MasukanTigabilanganIntegersdansayaakanmenampilkan";
cout<<"Penjumlahan:";
cin>>value1>>value2>>value3;
Tambahan(nilai1,nilai2,nilai3);//CallTambahandengan3arguments.
getch();
return0;
}
voidTambahan(intnum1,intnum2,intnum3)
{
cout<<(num1+num2+num3)<<endl;
}
voidTambahan(intnum1,intnum2,intnum3)
Tambahan(nilai1,nilai2,nilai3);
Tambahan(intnilai1,intnilai2,intnilai3);
Tambahan(nilai1,nilai2,nilai3);
voidTambahan(intnum1,intnum2,intnum3)
{
cout<<(num1+num2+num3)<<endl;
}
Gambar 7.6. Fungsi dengan beberapa Parameter
showSum(5,10,15);
Tambahan(15,5,10);
Program 7.9.
include<iostream>
usingnamespacestd;
voidchangeThem(int,double);
intmain()
{
intwhole=12;
doublereal=3.5;
cout<<"dalamnilaimainadaIah"<<whole<<endl;
cout<<"dannilairealadalah"<<real<<endl<<endl;
changeThem(whole,real);//memanggilchangeThemdengan2arguments
cout<<"sekarangkembalidalammainlagi,nilainyaadalah";
cout<<"semuanyamasih"<<whole<<endl;
cout<<"dannilairealadalahmasih"<<real<<endl;
return0;
}
voidchangeThem(inti,doubled)
{
i=100;
d=27.5;
cout<<"dalamfungsichangeThemnilainyadiubahmenjadi";
cout<<i<<endl;
cout<<"dannilainyadiubahmenjadi"<<d<<endl<<endl;
}
Argumen Asli
12
Fungsi Parameter
12
Program 7.10.
#include<iostream>
usingnamespacestd;
voiddivide(double,double);
intmain()
{
doublenum1,num2;
cout<<"masukanduaangkayangakandibagi\n";
cout<<"angkayangkedua:";
cin>>num1>>num2;
divide(num1,num2);
return0;
}
voiddivide(doublearg1,doublearg2)
{
if(arg2==0.0)
{
cout<<"maaf,tidakbisadibagidenganbilangannol.\n";
return;
}
cout<<"jawabanyaadalah:"<<(arg1/arg2)<<endl;
}
Argumen
Argumen
Fungsi Nilai Kembali
Argumen
Argumen
Program 7.11
#include<iostream>
usingnamespacestd;
intpersegi(int);
intmain()
{
intnumber,result;
cout<<"Masukanangkayangakandiakarkan:";
cin>>number;
hasil=persegi(number);
cout<<number<<"Hasilnyaadalah"<<hasil<<endl;
return0;
}
intpersegi(intnumber)
{
returnnumber*number;
}
hasil=persegi(number);
hasil=persegi(number);
20
400 intpersegi(intnumber)
{
returnnumber*number;
}
cout<<number<<"persegiadalah"<<persegi(number)<<endl;
Dari program diatas kita sudah nilai yang dikembalikan oleh fungsi
mengetahui bagaimana nilai sebagai penghubung dalam
dikembalikan oleh fungsi dan pengujian sebuah ekspresi
ditempatkan ke variabel atau dicetak. aritmatika. Perhatikan contoh berikut
Program tersebut diatas Juga yang menggunakan dua pernyataan
memungkinkan untuk menggunakan yang sempurna:
if(persegi(number)>100)
cout<<"persegibesar\n";
sum=1000+persegi(number);
Program 7.12
#include<iostream>
#include<iomanip>
usingnamespacestd;
doublegetRadius();
doublesquare(double);
intmain()
{
constdoublePI=3.14159;
doublerad;
cout<<fixed<<showpoint<<setprecision(2);
cout<<"Programiniuntukmenghitungluaslingkaran.\n";
rad=getRadius();
cout<<"Luasnyaadalah:"<<PI*square(rad)<<endl;
return0;
}
doublegetRadius()
{
doubleradius;
cout<<"masukanjarijarilingkaran:";
cin>>radius;
returnradius;
}
doublesquare(doublenumber)
{
returnnumber*number;
}
Program 7.13
#include<iostream>
usingnamespacestd;
boolisEven(int);
intmain()
{
intval;
cout<<"masukanbilanganinteger:";
cout<<"jikaganjilataugenap:";
cin>>val;
if(isEven(val))
cout<<val<<"adalahgenap.\n";
else
cout<<val<<"adalahganjil.\n";
return0;
}
boolisEven(intnumber)
{
if(number%2)
returnfalse; //Bilanganadalahganjil
else
returntrue; //bilanganadalahgenap.
}
Program 7.14
#include<iostream>
#include<iomanip>
#include<string>
usingnamespacestd;
//Functionprototypes
voiddisplayMenu();
intgetChoice();
voidcomputeFees(string,double,int);
constdoubleADULT_RATE=40.00,
SENIOR_RATE=30.00,
CHILD_RATE=20.00;
intmain()
{
intchoice,
months;
cout<<fixed<<showpoint<<setprecision(2);
do
{displayMenu();
choice=getChoice();
if(choice!=4)
{
2008 | Direktorat Pembinaan SMK 277
cout<<"berapajumlahbanyaknyabulan:?";
cin>>months;
switch(choice)
{
case1:computeFees("Dewasa",ADULT_RATE,months);
break;
case2:computeFees("Anak",CHILD_RATE,months);
break;
case3:computeFees("Senior",SENIOR_RATE,months);
}
}
}while(choice!=4);
return0;
}
voiddisplayMenu()
{
cout<<"\nmenukeanggotaanklubkesehatan\n\n";
cout<<"1.Keanggotaandewasa\n";
cout<<"2.Keangotaananak\n";
cout<<"3.senior\n";
cout<<"4.Keluar\n\n";
}
intgetChoice()
{
intchoice;
cin>>choice;
while(choice<1||choice>4)
{
cout<<"pilihanhanyano14tekanenter.";
cin>>choice;
}
returnchoice;
}
voidcomputeFees(stringmemberType,doublerate,intmonths)
{
cout<<endl
<<"tipekeanggotaan:"<<memberType<<""
<<"bayaranperbulanRp"<<rate<<endl
<<"Jumlahbulan:"<<months<<endl
<<"Total:Rp."<<(rate*months)
<<endl<<endl;
}
Program 7.15
#include<iostream>
usingnamespacestd;
voidanotherFunction();
intmain()
{
intnum=1;
cout<<"Dalamprogramutatma,numadalah:"<<num<<endl;
anotherFunction();
cout<<"Kembalidalamprogramutama,nummasih"<<num<<endl;
return0;
}
voidanotherFunction()
{
intnum=20; //variabelLocal
cout<<"DalamanotherFunction,numadalah:"<<num<<endl;
}
Fungsimain
Variabelnumhanyaterlihatpada
Intnum=1; programutama
FungsianotherFunction
Variabelnumhanyaterlihatpada
intnum=20; anotherFunction
Program 7.16
#include<iostream>
usingnamespacestd;
voidanotherFunction(); //Fungsiprototipe
intnum=2; //variabelGlobal
intmain()
{
cout<<"dalamprogramutama,numadalah"<<num<<endl;
anotherFunction();
cout<<"kembalidariprogramutama,numadalah"<<num<<endl;
return0;
}
voidanotherFunction()
{
cout<<"dalamfungsianotherFunction,numadalah"<<num<<endl;
num=50;
cout<<"tetapi,sekarangtelahdiubahmenjadi"<<num<<endl;
}
Program 7.17
#include<iostream>
usingnamespacestd;
intglobalNum; //variabelGlobal.Otomatisdiaturkenull.
intmain()
{
cout<<"globalNumadalah"<<globalNum<<endl;
return0;
}
Jika sebuah fungsi memiliki variabel hanya dapat dilihat oleh fungsi. Hal
lokal dengan nama yang sama ini ditunjukkan oleh Program dibawah
sebagai variabel global, variabel lokal ini:
Program 7.18
#include<iostream>
usingnamespacestd;
//Funsiprototipe
voidtexas();
voidarkansas();
intcows=10; //variabelglobal
intmain()
{
cout<<"Disanabanyak"<<cows<<"cowsdiprogramutama.\n";
texas();
arkansas();
cout<<"Kembalidalamprogramutama,disanabanyak"<<cows<<"cows.\n";
return0;
}
voidtexas()
{intcows=100; //variabelLocal
cout<<"disana"<<cows<<"cowsditexas.\n";
}
voidarkansas()
{intcows=50; //variabelLocal
cout<<"Thereare"<<cows<<"cowsinarkansas.\n";
}
Program 7.19
#include<iostream>
#include<iomanip>
usingnamespacestd;
//Fungsiprototipe
voidringUpSale();
//variabelGlobal
constdoubleTAX_RATE=0.06;
doubletax,sale,total;
intmain()
{
charagain;
cout<<fixed<<showpoint<<setprecision(2);
do
{
ringUpSale();
cout<<"Apakahdisanaadaadasesuatuyangdapatdijual?";
cin>>again;
}
while(again=='y'||again=='Y');
tax=sale*TAX_RATE;
total=sale+tax;
cout<<"\nPajakpenjualannyaadalah"<<tax<<endl;
cout<<"TotalPembayaranadalah"<<total<<endl;
return0;
}
voidringUpSale()
{ //VariabelLocal
intqty;
doubleunitPrice,tax,thisSale,subTotal;
cout<<"\nJumlah:";
cin>>qty;
cout<<"Hargapersatuan:";
cin>>unitPrice;
thisSale=qty*unitPrice; //totalhargaunit
sale+=thisSale; //Updatevariabelglobalpenjualan
tax=thisSale*TAX_RATE;//pembayaranpajakuntukitem
subTotal=thisSale+tax; //subtotaluntuktiapitem
cout<<"hargauntuktiapitem:"<<thisSale<<endl;
cout<<"pajakuntuktiapitem:"<<tax<<endl;
cout<<"SubTotaluntuktiapitem:"<<subTotal<<endl;
}
Program 7.20
#include<iostream>
usingnamespacestd;
//Fungsiprototipe
voidshowLocal();
intmain()
{
showLocal();
showLocal();
return0;
}
voidshowLocal()
{
intlocalNum=5;//variabelLocal
cout<<"localNumadalaj"<<localNum<<endl;
localNum=99;
Program 7.21
#include<iostream>
usingnamespacestd;
//Fungsiprototipe
voidshowStatic();
intmain()
{
for(intcount=0;count<5;count++)
showStatic();
return0;
}
voidshowStatic()
{
staticintstatNum;//Staticlocalvariable
cout<<"statNumadalah"<<statNum<<endl;
statNum++;
}
Program 7.22
#include<iostream>
usingnamespacestd;
voidshowStatic();
intmain()
{
for(intcount=0;count<5;count++)
showStatic();
return0;
}
voidshowStatic(void)
{
staticintstatNum=5;
cout<<"statNumadalah"<<statNum<<endl;
statNum++;
}
BAB 8
OPERASI STRING
Program 8.2
#include<iostream>
usingnamespacestd;
intmain()
{
stringstoredAt="disimpanpada";
char*p,*q;
//memasukanstringkepointersebagaichar
p="Hello";
q="Bailey";
//pernyataanberikutsamadengan
cout<<p<<q<<endl;
//cetakalamatdimanastringCdisimpan
cout<<p<<storedAt<<int(p)<<endl;
cout<<q<<storedAt<<int(q)<<endl<<int("stringlainnya");
return0;
}
Program 8.3
#include<iostream>
usingnamespacestd;
intmain()
{
constintLENGTH=80;
charline[LENGTH];
intcount=0;
cout<<"Masukankalimattidaklebihdari"
<<LENGTH1<<"characters:\n";
cin.getline(line,LENGTH);
cout<<"KalimatyangandaMasukanAdalah:\n";
while(line[count]!='\0')
{
cout<<line[count];
count++;
}
return0;
}
Program 8.4
#include<iostream>
usingnamespacestd;
intmain()
{
constintNAME_LENGTH=50;
char*pname;
pname=newchar[NAME_LENGTH]; //alokasipenyimpanan
cout<<"MasukannamaAnda:";
cin>>pname; //cetaknama
cout<<"Hello"<<pname;
return0;
String1
H e l l o \0
String2
W o r l d ! \0
String2
W o r l d ! \0
if(sizeof(string1)>=(strlen(string1)+strlen(string2)+1))
strcat(string1,string2);
else
cout<<"String1tidakcukupbesaruntukkeduastringtersebut.\n";
Program 8.5.
#include<iostream>
usingnamespacestd;
intmain()
{
constintLENGTH=40;
charfirstString[LENGTH],secondString[LENGTH];
cout<<"Masukanstring:";
cin.getline(firstString,LENGTH);
cout<<"Masukanstringlain:";
cin.getline(secondString,LENGTH);
if(firstString==secondString)
cout<<"Yangandamasukanstringnyasama\n";
else
cout<<"StringTidakSama.\n";
return0;
}
Program 8.6
#include<iostream>
#include<cstring>
usingnamespacestd;
intmain()
{
constintLENGTH=40;
charfirstString[LENGTH],secondString[LENGTH];
cout<<"MasukanString:";
cin.getline(firstString,LENGTH);
cout<<"Masukanstringlain:";
cin.getline(secondString,LENGTH);
if(strcmp(firstString,secondString)==0)
cout<<"Yangandamasukanstringnyasama\n";
else
cout<<"Stringtidaksama.\n";
return0;
}
Program 8.7
include<conio.h>
#include<iostream>
#include<cstring>
#include<iomanip>
usingnamespacestd;
intmain()
{
constdoubleA_PRICE=100.00,B_PRICE=150.00;
constintPART_LENGTH=8;
charpartNum[PART_LENGTH];
cout<<"kodenomergandaadalah:\n";
cout<<"\tKotakbesar,kodenomernya:S14729A\n";
cout<<"\tRakBesar,kodenomernya:S14729B\n";
cout<<"masukankodenomeryangada\n";
cout<<"inginmembeli:";
cin>>setw(9);
cin>>partNum;
cout<<showpoint<<fixed;
cout<<setprecision(2);
if(strcmp(partNum,"S14729A")==0)
cout<<"harganyaadalah$"<<A_PRICE<<endl;
elseif(strcmp(partNum,"S14729B")==0)
cout<<"harganyaadalah$"<<B_PRICE<<endl;
else
cout<<partNum<<"nomeryangdimasukantidaksah.\n";
getch();
return0;
2008 | Direktorat Pembinaan SMK 301
Program 8.8
#include<conio.h>
#include<iostream>
#include<cstring>
usingnamespacestd;
intmain()
{
constintPANJANG_NAMA=30;
charname1[PANJANG_NAMA],name2[PANJANG_NAMA];
cout<<"MasukanNama(lastName):";
cin.getline(name1,PANJANG_NAMA);
cout<<"MasukanNamaLain:";
cin.getline(name2,PANJANG_NAMA);
cout<<"Disininamaakandiurutkanberdasarkanalphabet:\n";
if(strcmp(name1,name2)<0)
cout<<name1<<endl<<name2<<endl;
elseif(strcmp(name1,name2)>0)
cout<<name2<<endl<<name1<<endl;
else
cout<<"AndamemasukannamayangSAMA!\n";
getch();
return0;
}
FUNGSI PENJELASAN
strlen Menerimastringsebagaiargumen.Pernyataanpanjangstring(tidak
termasuknullterminator.ContohPenggunaan:len=strlen(nama);
strcat Menerimaduastringsebagaiargumen.Fungsimenambahkanisistring
keduauntukpertamastring.(Yangpertamaadalahstringdiubah,kedua
stringtersebutdibiarkantidakberubah.)
ContohPenggunaan:strcat(string1,string2);
strcpy Menerimaduastringsebagaiargumen.Fungsisalinankeduastringuntuk
pertamastring.Stringmiliknyakeduastringdibiarkantidakberubah.
ContohPenggunaan:strcpy(string1,string2);
strncpy Menerimaduastringdanargumeninteger.Argumenyangketiga,sebuah
2008 | Direktorat Pembinaan SMK 303
Program 8.9
#include<conio.h>
#include<iostream>
#include<string>
usingnamespacestd;
intmain()
{
constintN_ITEMS=5,S_LENGTH=31;
charprods[5][S_LENGTH]={"TV311televisi31inch",
"CD111CDPlayer",
"MC123MesinCuci",
"TM456tapeMobil",
"PC955PersonalComputer"};
charlookUp[S_LENGTH],*strPtr=NULL;
intindex;
cout<<"\tProductDatabase\n\n";
cout<<"MasukanKodeangkaproductuntukmencaridata:";
cin.getline(lookUp,S_LENGTH);
for(index=0;index<N_ITEMS;index++)
{
strPtr=strstr(prods[index],lookUp);
if(strPtr!=NULL)
break;
}
if(strPtr==NULL)
cout<<"kodetidaksesuaidenganproduk.\n";
else
cout<<prods[index]<<endl;
getch();
return0;
}
ProductDatabase
2008 | Direktorat Pembinaan SMK 305
strPtr=strstr(prods[index],lookUp);
8.7. Konversi String/Numeric
Fungsi strstr mencari string yang Ada suatu perbedaan besar
sesuai oleh prods[index] karena antara nomor yang disimpan sebagai
nama yang dimasukkan oleh string dan yang disimpan sebagai
pengguna, yang mana disimpan nilai klasifikasi. String "26792"
dalam lookUp. Jika lookUp ditemukan sebenarnya tidak sebagai nomor,
di dalam prods[index], fungsi akan tetapi rangkaian yang diwakili kode-
mengembalikan alamatnya. Dalam kode ASCII untuk setiap digit-digit
kasus tersebut, statemen if dari nomor. Rangkaian tersebut
menyebabkan pengulangan akan menggunakan enam byte dari
berakhir. memori termasuk kode akhir string
(null).
if(strPtr!=NULL) Karena itu bukan sebagai nomor
break; nyata, maka tidak mungkin untuk
melaksanakan operasi matematik
Di luar pengulangan tersebut, sesuai dengannya, kecuali jika hal tersebut
statemen IF-ELSE untuk menentukan dikonversi menjadi nilai numerik.
jika string dimasukkan oleh pengguna Beberapa fungsi yang ada dalam
ditemukan dalam array. Jika tidak, pustaka C++ untuk mengubah
maka akan menginformasikan penyajian string angka ke dalam nilai
kepada pengguna bahwa tidak ada numerik dan sebaliknya. Tabel
produk yang sesuai ditemukan. dibawah menunjukan fungsi-fungsi
Sebaliknya, nomor produk dan tersebut:
deskripsi akan ditampilkan:
FUNGSI PENJELASAN
atoi Dalam string sebagai argument. Fungsi untuk mengubah String
menjadiintegerdanmengembalikannilai.
ContohPenggunaan:num=atoi("4569");
atol Dalam bahasa c, string sebagai argument. Fungsi untuk mengubah
Stringmenjadilongintegerdanmengembalikannilai.
306 Direktorat Pembinaan SMK| 2008
ContohPenggunaan:lnum=atol("500000");
atof MenerimaCstringsebagaiargumen.Fungsimengubahstringkedua
yang kembali dan nilai. Gunakan fungsi ini mengkonversi string ke
floatataudouble.
ContohPenggunaan:fnum=atof("3,14159")
itoa Mengkonversi sebuah integer ke string. Argumen pertama, nilai,
adalah integer. Hasilnya akan disimpan di lokasi yang oleh kedua
argumen, string. Argumen yang ketiga, basis, merupakan integer. It
menentukan penomoran system yang dikonversi integer yang harus
dinyatakandalam(8=oktal,desimal=10,16=heksadesimal,dll).
ContohPenggunaan:itoa(nilai,string,basis);
longbigNum; charnumArray[10];
bigNum=atol("500000"); itoa(1200,numArray,10);
cout<<numArray<<endl;
sebagaimana yang diinginkan, fungsi
atof menerima sebuah argumentasi Sebuah potongan program
string dan melakukan konversi string tersebut diatas akan mengkonversi
menjadi double. Sebuah nilai numerik bilangan integer 1200 menjadi string.
Program 8.10
#include<conio.h>
#include<iostream>
#include<cstring>//untukstrcmp
#include<cstdlib>//untukatoi
usingnamespacestd;
intmain()
{
constintLENGTH=20;
charinput[LENGTH];
inttotal=0,count=0;
doubleaverage;
cout<<"Programiniakanmencarirataratabilangan.\n";
cout<<"MasukanbilanganpertamaatautekanQuntukkeluar:";
cin.getline(input,LENGTH);
while((strcmp(input,"Q")!=0)&&(strcmp(input,"q")!=0))
{
total+=atoi(input);
count++;
cout<<"MasukanbilanganselanjutnyaatautekanQuntukkeluar:";
cin.getline(input,LENGTH);
}
if(count!=0)
{
average=double(total)/count;
cout<<"Reratanyaadalah:"<<average<<endl;
}
getch();
return0;
}
FUNGSI
PENJELASAN
KARAKTER
isalpha Returnsbetul(angkabukanangkanol)jikaargumenadalah
hurufalfabet.Returnssalahjikaargumenbukanhuruf.
isalnum Returnbetul(angkabukanangkanol)jikaargumenberupa
hurufatauangka.Sebaliknyareturnadalahsalah.
isdigit Returnsbetul(angkabukanangkanol)jikaargumenadalah
angka0sampai9.Sebaliknyaselainitusalah.
islower Returnbetul(angkabukanangkanol)jikaargumenberupa
hurufkecil.Sebaliknyajikatidakmakasalah.
isprint Returnbetul(angkabukanangkanol)jikaargumenberupa
karakteryangdapatdicetak(termasukspasi).jikatidakmaka
Returnsalah.
ispunct Returnsbetul(angkabukanangkanol)jikaargumenyang
dicetakadalahkarakterselainangka,huruf,atauruang.Selain
itusalah.
isupper Returnsbetul(angkabukanangkanol)jikaargumenadalah
hurufbesar.Selainitusalah
isspace Returnbetul(angkabukanangkanol)jikaargumenberupa
karakterspasi,selainitusalah.
Karakterspasiadalahsalahsatudarikarakterberikutini:spasi''
vertikaltab'\v'linebaru\ntab\t
Program 8.11
#include<conio.h>
#include<iostream>
#include<cctype>
usingnamespacestd;
intmain()
{
charinput;
cout<<"Masukankarakterbebas:";
cin.get(input);
cout<<"karakteryangdimasukanadalah:"<<input<<endl;
cout<<"KodeASCIInyaadalah:"<<int(input)<<endl;
if(isalpha(input))
cout<<"Ituadalahkarateralfabet.\n";
if(isdigit(input))
cout<<"Ituadalahdigitnumerik.\n";
if(islower(input))
cout<<"Hurufyangandamasukanadalahhurufkecil.\n";
if(isupper(input))
cout<<"Hurufyangandamasukanadalahhurufbesar.\n";
if(isspace(input))
cout<<"ituadalahkarakterspasi.\n";
getch();
return0;
}
Program 8.12
#include<conio.h>
#include<iostream>
#include<cctype>
usingnamespacestd;
booltestNum(char[]);
constintNUM_LENGTH=8;
constintALPHA_LENGTH=3;
intmain()
{
charcustomer[NUM_LENGTH];
cout<<"masukannomerpelanggandalamForm";
cout<<"LLLNNNN\n";
cout<<"(LLL=hurufdanNNNN=angka):";
cin.getline(customer,NUM_LENGTH);
if(testNum(customer))
cout<<"Nomerpelangganyangdimasukanvalid\n";
else
{
cout<<"haltersebuttidaksesuaidenganformat";
cout<<"angkapelanggan.\ncontohnyaadalahsepertidibawahini:\n";
cout<<"ABC1234\n";
}
getch();
return0;
}
//MendefinisikanFungsiTestNumb.
booltestNum(charcustNum[])
{
for(intcount=0;count<ALPHA_LENGTH;count++)
{
if(!isalpha(custNum[count]))
returnfalse;
}
for(intcount=ALPHA_LENGTH;count<NUM_LENGTH1;count++)
{
if(!isdigit(custNum[count]))
returnfalse;
}
returntrue;
}
Keluaran program diatas jika yang dimasukan salah adalah sebagai berikut:
masukannomerpelanggandalamFormLLLNNNN
(LLL=hurufdanNNNN=angka):sasfewfrw
haltersebuttidaksesuaidenganformatangkapelanggan.
contohnyaadalahsepertidibawahini:
ABC1234
Dalam program diatas, nomor yang diuji bukan berupa alfabet. Jika
pelanggan diharapkan terdiri dari hal ini terjadi pada beberapa dari tiga
huruf alfabet yang diikuti oleh digit- yang karakter pertama, fungsi
digit. Kemudian fungsi testNum testNum akan salah. Demikian juga,
menerima sebuah array dan menguji karakter keempat berikutnya diuji
karakter awal sesuai dengan dengan pengulangan berikut ini:
pengulangan berikut ini:
for(count=ALPHA_LEN;count<
for(count=0;count<ALPHA_LEN; NUM_LENGTH1;count++)
count++) {
{ if(!isdigit(custNum[count]))
if(!isalpha(custNum[count])) returnfalse;
returnfalse; }
}
Fungsi isdigit akan bernilai benar
Fungsi isalpha untuk jika argumentasi merepresentasikan
mengembalikan kondisi benar jika karakter tentang semua digit 0
argumentasi adalah satu karakter sampai 9. Operator ! digunakan untuk
alfabet. operator ! digunakan menentukan jika karakter yang diuji
didalamnya, jika statemen tersebut bukan sebuah digit. Ini terjadi
untuk menentukan apakah karakter biasanya pada empat karakter
2008 | Direktorat Pembinaan SMK 313
FUNGSI DEFINISI
toupper Mengembalikanhurufbesarsetaradenganargumen.
tolower Mengembalikanlowercasesetaradenganargumen
atau suatu huruf tetapi itu sudah potongan program diatas kalau di
merupakan huruf besar: compile menampilkan hasil sebagai
berikut:
cout<<static_cast<char>(toupper('B');
//printsB a
A
Karena uraian mengenai toupper dan
tolower dilewati oleh nilai, fungsi Program berikut dibawah untuk
tersebut tidak akan mengubah mendemontrasikan fungsi toupper
parameter yang mereka miliki: dalam sebuah pengulangan sampai
Sebagai gantinya, mereka hanya ada kemungkian user memasukan
mengembalikan ekivalensi huruf salah satu huruf Y atau N.
besar atau huruf kecil. Sebagai
contoh, di dalam sebuah segmen
Program 8.13
#include<conio.h>
#include<iostream>
#include<cctype>
#include<iomanip>
usingnamespacestd;
intmain()
{
constdoublePI=3.14159;
doubleradius;
chargo;
cout<<"Programuntukmenghitungluaslingkaran\n";
cout<<setprecision(2);
cout<<fixed;
do
{
2008 | Direktorat Pembinaan SMK 315
Masukanjarijarilingkaran:23
Luaslingkaranadalah1661.90
Akanmenghitunglagi?(YorN)n
Program 8.14
#include<conio.h>
#include<iostream>
usingnamespacestd;
voidstringCopy(char[],char[]);
intmain()
{
constintS_LENGTH=30;
charfirst[S_LENGTH],second[S_LENGTH];
cout<<"masukanstringdengantidaklebihdari"
<<S_LENGTH1<<"karakter:\n";
cin.getline(first,S_LENGTH);
stringCopy(first,second);
cout<<"Stringyangandamasukanadalah:\n"<<second<<endl;
getch();
return0;
}
//DefinisiFungsistringCopy*
voidstringCopy(charstring1[],charstring2[])
{
intindex=0;
while(string1[index]!='\0')
{
string2[index]=string1[index];
index++;
}
string2[index]='\0';
}
Program 8.15
#include<conio.h>
#include<iostream>
usingnamespacestd;
voidpotogannama(char[]);
intmain()
{
constintPANJANG_NAMA=41;
charname[PANJANG_NAMA];
cout<<"MasukannamadepandannamaakhirAndadengandipisahkan";
cout<<"denganspasi:\n";
cin.getline(name,PANJANG_NAMA);
potogannama(name);
cout<<"Namapertamaandaadalah:"<<name<<endl;
getch();
return0;
}
//DefinisiFungsipotogannama.
voidpotogannama(charuserName[])
{
intcount=0;
while(userName[count]!=''&&userName[count]!='\0')
count++;
if(userName[count]=='')
userName[count]='\0';
}
PerulanganakanberhentiketikamenemukantandaspasiatauuserName[5]
s u p r a i n d o n e s i a \0
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
subskrip
Ruangandiberi\0atautandasebagaistringselesai
s u p r a \0 i n d o n e s i a \0
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
subskrip
Program 8.16
#include<conio.h>
#include<iostream>
usingnamespacestd;
//Fungsiprototipe
intcountChars(char*,char);
intmain()
{
constintPANJANG_S=51;
charuserString[PANJANG_S],letter;
cout<<"MasukanString(lebihdari"<<PANJANG_S1<<"karakter):";
cin.getline(userString,PANJANG_S);
cout<<"Masukankarakterdansayaakanmenghitungberapa\n";
cout<<"kaliyangmunculdalamstringyangtelahandatulis:";
cin>>letter;
cout<<letter<<"Muncul:";
cout<<countChars(userString,letter)<<"kali.\n";
getch();
return0;
}
//DefinisicountChars.
intcountChars(char*strPtr,charch)
{
inttimes=0;
while(*strPtr!='\0')
{
if(*strPtr==ch)
times++;
strPtr++;
}
returntimes;
}
MasukanString(lebihdari50karakter):sayaakanpergiberangkatkekantor
Masukankarakterdansayaakanmenghitungberapa
kaliyangmunculdalamstringyangtelahandatulis:a
aMuncul:7kali.
Program 8.17
#include<conio.h>
#include<iostream>
#include<string>
usingnamespacestd;
2008 | Direktorat Pembinaan SMK 321
intmain()
{
stringucapan;
stringnama("suprapto");
ucapan="Halo";
cout<<ucapan<<nama<<endl;
getch();
return0;
}
DEFINITION DESCRIPTION
stringalamat; Definisiobjekstringyanglangsungdisebutkan
stringnama("suprapto"); Mendefinisikanstringbendabernamanama,
diinisialisasidengan"suprapto"
stringperson1(person2); Mendefinisikanstringbendabernamaperson1,yang
merupakansalinandariperson2.person2mungkinsalah
satuobjekataustringkarakterarray.
stringset1(set2,5); Mendefinisikanstringbernamaset1objekyang
diinisialisasiuntukpertamalimakarakterdalam
karakterarrayset2.
stringlineFull('z',10); MendefinisikanstringbendabernamalineFull
diinisialisasidengan10'z'karakter.
stringfirstName(fullName, Mendefinisikanstringbendabernamafirstname,
0,7); diinisialisasidengansubstringdaristringfullName.
Substringadalahtujuhkarakter,mulaipadaposisi0.
Hal yang perlu diketahi pada program class string memberi muatan lebih
dibawah, menggunakan operator = pada beberapa operator, yang
untuk memberi nilai obyek string. digambarkan pada Tabel dibawah.
OVERLOADED PENJELASANOPERATOR
>> Ekstrakkarakterstreamdanmasukkankarakterkedalamstring.
Karakterakandicopysampaimenemuispasiatauakhirkalimat
dansekaligusmenhitungkaraktermasukan.
<< Menyisipkanstringkedalamstream.
= Memasukanstringpadasebelahkanankeobyekstringpada
sebelahkiri.
+= Menambahkancopyanstringpadastringsebelahkananke
obyekstringpadasebelahkiri.
+ Mengembalikanstringyangmerupakanrangkaiandaridua
operandstring
[] Melaksanakantandanotasiarray,sepertinama[x].dimanahal
tersebutmerujukpadakarakterpadapengembalianposisix.
Relational Masingmasingoperatorpenghubungdiimplementasikan:<><=
Operators >===!=
usingnamespacestd; ABC
DEF
intmain() ABCDEF
{ ABCDEFGHI
stringstr1,str2,str3;
str1="ABC";
str2="DEF"; Class string juga mempunyai
str3=str1+str2; beberapa fungsi anggota. Sebagai
contoh, fungsi size mengembalikan
cout<<str1<<endl; panjang string. Hal tersebut
cout<<str2<<endl; didemontrasikan dalam pengulangan
cout<<str3<<endl; For pada program dibawah ini:
Program 8.19
#include<conio.h>
#include<iostream>
#include<string>
usingnamespacestd;
intmain()
{
stringstr1,str2,str3;
str1="ABC";
str2="DEF";
str3=str1+str2;
for(intx=0;x<str3.size();x++)
cout<<str3[x];
cout<<endl;
if(str1<str2)
cout<<"str1adalahlebihkecildaripadastr2\n";
else
cout<<"str1tidaklebihkecildaripadastr2\n";
getch();
return0;
}
Tabel dibawah ini merupakan daftar dari banyak string yang merupakan
anggota class string variasi yang dibebankan.
ANGGOTAFUNGSI PENJELASAN
theString.append(str); MenambahkanstrketheString.strbisamenjadiobjek
ataustringkarakterarray.
theString.append(str,x,n); njumlahkarakterdaristr,dimulaipadaposisix,akan
ditambahkanketheString.jikaTheStringterlalukecil,
fungsiakanmelakukancopysejumlahkarakteryang
mungkinbisadicopy.
theString.append(str,n); Nkarakterpertamadariarraykarakterstryang
ditambahkanketheString.
theString.append(n,'z'); Nmenambahkansalinan'z'untuktheString.
theString.assign(str); MemberikanstrketheString.Parameterstrdapat
menjadiobyekstringatauCstring.
theString.assign(str,x,n); jumlahnkarakterdaristr,dimulaipadaposisix,
ditugaskanketheString.jikaTheStringterlalukecil,
fungsiakanmenyalinbanyakkaraktermungkin.
theString.assign(str,n); karakterpertamandariarraykarakterstrditugaskan
ketheString.
theString.assign(n,'z'); Memberikansalinann'z'menujutheString.
theString.at(x); Mengembalikankarakterpadaposisixdalamstring.
theString.begin(); Kembalipadasebuahiteratoryangmenunjukke
karakterpertamapadastring.
theString.capacity(); Mengembalikanukuranpenyimpanandialokasikan
untukstring.
theString.clear(); Membersihkanstringdenganmenghapussemua
karakteryangdisimpandidalamnya.
theString.compare(str); Melakukanperbandingansepertifungsistrcmp
dengannilaiyangsamakembali.strbisamenjadi
stringobjekataukarakterarray.
theString.compare(x,n,str); MembandingkantheStringdanstr,mulaidariposisix,
dandilanjutkanterusuntuknkarakter.pengembalian
nilaisepertistrcmp.strbisamenjadiobjekstringatau
karakterarray.
theString.copy(str,x,n); menyalinkarakterstrkearraytheString,mulaipada
posisix,untuknkarakter.TheStringjikaterlalukecil,
makafungsiakanmenyalinkaraktersemampu
mungkin.
theString.c_str(): MengembalikannilaiCstringstringobjek.
theString.data(); Kembalikarakterarrayyangberisinullstring
dihentikan,karenadisimpandalamtheString.
theString.empty(); ReturnstruejikatheStringkosong.
ReturnstrueiftheStringisempty.
theString.end(); Kembalikesebuahiteratoryangterakhirkarakterdari
stringditheString.(Untukinformasilebihlanjut
tentangiterators,lihatBab15).
Returnsaniteratorpointingtothelastcharacterof
thestringintheString.(Formoreinformationon
iterators,seeChapter15.)
theString.erase(x,n); ErasesnkarakterdaritheString,mulaidiposisix.
2008 | Direktorat Pembinaan SMK 325
islessthanthecurrentsizeofthestring,thestringis
truncated
toncharacters.Ifnisgreater,thestringisexpanded
and'z'isappendedattheendenoughtimestofillthe
newspaces.
theString.size(); PernyataanpanjangstringpadatheString.
theString.substr(x,n); Kembalimelakukansalinansuatusubstring.The
substringadalahnkarakterdanmulaipadaposisix
daritheString.
theString.swap(str); SwapsisidengantheStringstr.
kanan. Jika tidak, fungsi return false. Pada fungsi > = kembali benar,
Yang <fungsi return true jika str jika str anggota panggilan objek yang
anggota panggilan objek kurang dari lebih besar dari atau sama dengan
string dalam operand kanan. Jika string yang ada di sebelah kanan
tidak, mereka kembali palsu. operand. Jika tidak, fungsi return
Operator fungsi ini memungkinkan salah. Fungsi <= return benar jika str
programmer menggunakan kelas ini anggota panggilan objek kurang dari
untuk membangun penghubung atau sama dengan string yang ada di
ekspresi seperti yang ditampilkan sebelah kanan operand. Jika tidak,
dalam program ini segmen: mereka kembali palsu. Operator
fungsi ini memungkinkan programmer
MyStringname1("Suprapto"), menggunakan kelas ini untuk
name2("Supra"); membangun penghubung ekspresi
if(name1>name2) seperti yang ditampilkan dalam
cout<<"Supraptolebihbesar segmen program ini:
daripadaSupra\n";
else MyStringname1("Suprapto"),
cout<<"Supraptotidallebihbesar name2("Supra");
daripadaSupra.\n"; if(name1>=name2)
cout<<"Supraptoadalahlebihbesar
MyStringname3("Suprapto"); atausamadenganSupra.\n";
else
if(name3<"Supra") cout<<"Supraptolebihkecil
cout<<"Supraptolebihkecil daripadaSupra.\n";
daripadaSupra.\n";
else MyStringname3("Suprapto");
cout<<"Supraptotidaklebihkecil if(name3<="Supra")
daripada\n"; cout<<"Supraptolebihkecilatau
samadenganSupra.\n";
Objek MyString memiliki dua else
versi > = operator untuk melakukan cout<<"Supraptolebihbesarsama
operasi lebih besar daripada atau tes denganSupra.\n";
sama dengan, dan <= operator untuk
melakukan kurang dari atau tes Program dibawah menunjukkan
kesamaan. Versi pertama dari bagaimana program MyString
masing-masing dirancang untuk memperlihatkan rangkaian stringnya.
bekerja dengan objek lain MyString Selain itu, kode utama program
dan yang kedua ini dirancang untuk mendemonstrasikan bagaimana
bekerja dengan C++ tradisional MyString memungkinkan programmer
string. untuk memperlakukan string lebih
banyak yang lain seperti mengikutkan
tipa data didalamnya.
Program 8.20
usingnamespacestd;
intmain()
{
MyStringobject1("Ini"),object2("adalah");
MyStringobject3("menguji.");
MyStringobject4=object1; //panggilcopyconstructor.
MyStringobject5("adalahhanyamenguji.");
charstring1[]="sebuahpengujian.";
cout<<"Object1:"<<object1<<endl;
cout<<"Object2:"<<object2<<endl;
cout<<"Object3:"<<object3<<endl;
cout<<"Object4:"<<object4<<endl;
cout<<"Object5:"<<object5<<endl;
cout<<"String1:"<<string1<<endl;
object1+="";
object1+=object2;
object1+="";
object1+=object3;
object1+="";
object1+=object4;
object1+="";
object1+=object5;
cout<<"object1:"<<object1<<endl;
return0;
}
MEMBERVARIABEL PENJELASAN
Original Obyekstringmenahanstringasliyangbersifat
unformatted.
formatted Obyekstringmenahanstringyangbersifatformatted.
FUNGSIKEANGGOTAAN PENJELASAN
Constructor Disertakandalamobyekstringsebagaiargumen.Obyek
disalinkeoriginalmember,danmemanggilfungsi
keanggotaandolarrFormat.
dollarFormat Menyalinkeanggotaanoriginalmenjadiformat
member.Tandakomadandolardisertakandalam
memasukkankelokasibentukkeanggotaan.
getOriginal Mengambalikankeanggotaanoriginal
getFormatted Mengembalikanbentukkeanggotaan
usingnamespacestd;
intmain()
{
stringinput;
cout<<"Masukanjumlahdollarkerekeningdenganformnnnnn.nn:";
cin>>input;
Currencydollars(input);
cout<<"disinirekeningdiatur:\n";
BAB 9
ARRAY
Program 9.1
336 Direktorat Pembinaan SMK | 2008
#include<iostream>
usingnamespacestd;
inta[10],jumlah=10;
boolcari(intcariData,intnElemen){
inti;
for(i=0;i<nElemen;i++){
if(a[i]==cariData)
break;
}
if(i==nElemen)returnfalse;
elsereturntrue;
}
voidinput(intdata,inti){
a[i]=data;
}
voidhapus(intdata,intnElemen){
inti;
for(i=0;i<nElemen;i++){
if(data==a[i])
break;
}
if(i==nElemen) cout<<"Data"<<data<<"tidakterhapus(tidakada)"<<endl;
else{
for(intj=i;j<nElemen1;j++){
a[j]=a[j+1];
}
cout<<"Data"<<data<<"dihapus"<<endl;
}
}
voidtampil(intnElemen){
for(inti=0;i<nElemen;i++)
cout<<a[i]<<"";
cout<<endl;
}
voidmain(){
intdata;
for(inti=0;i<jumlah;i++){
cout<<"a["<<i<<"]=";
cin>>data;
input(data,i);
}
2008 | Direktorat Pembinaan SMK 337
tampil(jumlah);
intcariData=12;
if(cari(cariData,jumlah)==false)
cout<<"Data"<<cariData<<"tidakditemukan"<<endl;
else
cout<<"Data"<<cariData<<"ditemukan"<<endl;
hapus(89,jumlah);
jumlah;
hapus(0,jumlah);
jumlah;
tampil(jumlah);
}
a[6]=63
a[7]=24
a[8]=67
a[9]=3
1812344489346324673
Data12ditemukan
Data89dihapus
Data0tidakterhapus<tidakada>
2344434632467
Program 9.2.
2008 | Direktorat Pembinaan SMK 339
#include<iostream>
usingnamespacestd;
inta[5]={2,4,6,8,10},jumlah=5;
voidinput(intdata,inti){
a[i]=data;
}
voidtampil(intnElemen){
for(inti=0;i<nElemen;i++)
cout<<a[i]<<"";
cout<<endl;
}
voidmain(){
intdata;
cout<<"Belumadaperubahandataarray"<<endl;
tampil(jumlah);
for(inti=0;i<jumlah;i++){
cout<<"a["<<i<<"]=";
cin>>data;
input(data,i);
}
cout<<"Setelahadaperubahandataarray"<<endl;
tampil(jumlah);
}
Program 9.3.
#include<iostream>
usingnamespacestd
inta[5],jumlah=5;
voidinput(intdata,inti){
a[i]=data;
}
voidtampil(intnElemen){
for(inti=0;i<nElemen;i++)
cout<<a[i]<<"";
cout<<endl;
}
voidmain(){
intdata;
cout<<"Belumadaperubahandataarray"<<endl;
tampil(jumlah);
for(inti=0;i<jumlah;i++){
cout<<"a["<<i<<"]=";
cin>>data;
input(data,i);
}
cout<<"Setelahadaperubahandataarray"<<endl;
tampil(jumlah);
}
atu-satunya
Sa persyara
atan untukk seperti array me enggunakann dua
menentukan elemen adalaha usia
a indeks. Gambar be erikut menyatakan
ya
ang berpen ndapat bahwa unsur variabell array dua dimensi
d
hittungan. Karena itu, seperti arrayy
ha
anya meng ggunakan satu
s indekss
sa
aja. Gamba ar berikut menyatakan n
ariabel array satu-dimensi.
va
Gambar 9.1
1. Array Satu
u Dimensi Gambar 9.2. Arra
ay Dua Dime
ensi
9.4.3. Tiga
T Dimen
nsi
9.4.2. Array Dua Dimensi Beb
berapa arra ay memilikki tiga
Ada bebe erapa array dua
d dimensi, dimensii, seperti nilai dalam m tiga
seeperti jumlah
h kantor-kan
ntor di setiap
p dimensii ruang. Seperti array
lan
ntai di se etiap gedunng kampus. menggu unakan tiga indeks, yang
Sppesifikasi ya
ang memerllukan kedua a dalam hal ini mew wakili x, y, z dan
ele
emen bangu unan dan juumlah lantai, koordina
at dari ruaang fisik. gambar
g
daan setiap ele
emen yang berpendapa
b t berikut menyataka an variabel untuk
baahwa untuk menghitung g kombinassi mengad dakan array tiga dimensi.
baangunan da an lantai. Karena itu,
G
Gambar 9.3.. Array 3 Dim
mensi
200
08 | Direktorat Pembinaan
P SMK
K 343
Program 9.4.
#include<iostream>
usingnamespacestd;
intmain(void){
intt,i,matrik[3][4];
for(t=0;t<3;t++)
for(i=0;i<4;i++)
matrik[t][i]=(t*4)+i+1;
for(t=0;t<3;t++){
for(i=0;i<4;i++)
cout<<matrik[t][i]<<"";
cout<<endl;
}
return0;
}
t
0 1 2 3
0 1 2 3 4
t
1 5 6 7 8
2 9 10 11 12
Program 9.5.
#include<iostream>
usingnamespacestd;
intmain(void){
intt,i,A[3][4],B[3][4],C[3][4];
for(t=0;t<3;t++)
for(i=0;i<4;i++)
A[t][i]=(t*4)+i+1;
cout<<"MATRIKA"<<endl;
for(t=0;t<3;t++){
for(i=0;i<4;i++)
cout<<A[t][i]<<"";
cout<<endl;
}
for(t=0;t<3;t++)
for(i=0;i<4;i++)
B[t][i]=(t*4)+i+1;
cout<<endl;
cout<<"MATRIKB"<<endl;
for(t=0;t<3;t++){
for(i=0;i<4;i++)
cout<<B[t][i]<<"";
cout<<endl;
}
for(t=0;t<3;t++)
for(i=0;i<4;i++)
C[t][i]=A[t][i]+B[t][i];
cout<<endl;
cout<<"MATRIKC=A+B"<<endl;
for(t=0;t<3;t++){
for(i=0;i<4;i++)
cout<<C[t][i]<<"";
cout<<endl;
}
return0;
}
Keluaran program :
MATRIKA
1234
5678
910111213
MATRIKB
1234
5678
9101112
MATRIKC=A+B
2468
10121416
18202224
Program 9.6
#include<iostream>
usingnamespacestd;
inta[10];
voidinput(intdata,inti){
a[i]=data;
}
voidtampil(){
for(inti=0;i<10;i++)
cout<<a[i]<<"";
cout<<endl;
}
voidtukar(intdata1,intdata2){
longtemp=a[data1]; a[data1]=a[data2];
a[data2]=temp;
}
voidselectionSort(){
inti,j,indek;
for(i=0;i<51;i++){
indek=i;
for(j=i+1;j<5;j++)
if(a[indek]>a[j])
indek=j;
tukar(i,indek);
}
}
voidmain(){
input(57,0);
input(89,1);
input(49,2);
input(51,3);
input(12,4);
input(90,5);
input(1,6);
input(0,7);
input(63,8);
input(25,9);
tampil();
selectionSort();
2008 | Direktorat Pembinaan SMK 347
tampil();
}
Program 9.7
#include<iostream>
usingnamespacestd;
inta[10];
voidinput(intdata,inti){
a[i]=data;
}
voidtampil(){
for(inti=0;i<10;i++)
cout<<a[i]<<"";
cout<<endl;
}
voidtukar(intdata1,intdata2){
longtemp=a[data1];
a[data1]=a[data2];
a[data2]=temp;
}
voidbubSort(){
inti,j;
for(i=101;i>1;i)
for(j=0;j<i;j++)
if(a[j]>a[j+1])tukar(j,j+1);
}
348 Direktorat Pembinaan SMK | 2008
voidmain(){
input(57,0);
input(89,1);
input(49,2);
input(51,3);
input(12,4);
input(90,5);
input(1,6);
input(0,7);
input(63,8);
input(25,9);
tampil();
bubSort();
tampil();
}
Program 9.8.
#include<iostream>
usingnamespacestd;
inta[10];
voidinput(intdata,inti){
a[i]=data;
}
voidtampil(){
for(inti=0;i<10;i++)
cout<<a[i]<<"";
cout<<endl;
}
voidinsertionSort(){
2008 | Direktorat Pembinaan SMK 349
inti,j;
for(i=1;i<10;i++){
longtemp=a[i];
j=i;
while(j>0&&a[j1]>=temp){
a[j]=a[j1];
j;
}
a[j]=temp;
}
}
voidmain(){
input(57,0);
input(89,1);
input(49,2);
input(51,3);
input(12,4);
input(90,5);
input(1,6);
input(0,7);
input(63,8);
input(25,9);
tampil();
insertionSort();
tampil();
}
Program 9.9.
Program di bawah ini untuk membaca data kemudian menampilkannya.
#include<iostream.h>
#include<conio.h>
350 Direktorat Pembinaan SMK | 2008
usingnamespacestd;
voidmain()
{
intdata[10]; //arraydengan10elemenbertipeinteger
intelemen;
//entri10data
for(elemen=0;elemen<=9;elemen++)
{
cout<<"Datake"<<elemen<<":";
cin>>data[elemen];
}
//tampilkandatasetelahentri
for(elemen=0;elemen<=9;elemen++)
{
cout<<"Datake"<<elemen<<":"<<data[elemen];
}
}
Program 9.10.
Program untuk menampilkan data array dari hasil inisialisasi:
include<iostream.h>
#include<conio.h>
usingnamespacestd;
voidmain()
{
intdata[5]={4,1,0,9,8};
intelemen;
//tampilkandata
for(elemen=0;elemen<=4;elemen++)
{
cout<<"Datake"<<elemen<<":"<<data[elemen];
}
}
Program 9.11.
Program untuk mencari data dari array, dan menampilkan nomor elemennya.
#include<iostream.h>
#include<conio.h>
voidmain()
{
intx;
intdata[10]={4,1,0,9,8,5,1,2,3,7};
intelemen,ketemu;
cout<<"Datayangdicari:";
cin>>x;
ketemu=0;
for(elemen=0;elemen<=9;elemen++)
{
if(data[elemen]==x)
{ketemu=!
ketemu;
break;
}
}
if(ketemu==0)cout<<"Datatidakditemukan";
elsecout<<"Dataadadielemen:"<<elemen;
}
Program 9.12.
Program untuk menampilkan data terbesar (maks) dari suatu array.
#include<iostream.h>
#include<conio.h>
usingnamespacestd;
voidmain()
{
intdata[10]={4,1,0,9,8,5,1,2,3,7};
intelemen,max;
max=data[0];
for(elemen=0;elemen<=9;elemen++)
{
if(data[elemen]>max)max=data[elemen];
elsemax=max;
}
cout<<"Nilaimaksimumadalah:"<<max;
}
Array di atas adalah array dimensi satu. Bagaimana dengan array dimensi
dua? Berikut ini contoh penggunaan array dua dimensi:
Program 9.13.
#include<iostream.h>
#include<conio.h>
usingnamespacestd;
voidmain()
{
intj,k;
intdata[5][3]={{3,4,1},{2,3,0},{1,1,2},{5,9,4},{6,6,2}};
for(j=0;j<=4;j++)
{
for(k=0;k<=2;k++)
cout<<"data["<<j<<"]["<<k<<"]="<<data[j][k]<<endl;
}
}
BAB. 10
REKURSIF
Langkahke:
Rekursif(3,3) 1 a=4;b=2.Cetak:masuka=4||b=2
1 6 2 a=5;b=1.Cetak:masuka=5||b=1
Rekursif(4,2) 3 a=6;b=0.Cetak:masuka=6||b=0
2 5 4 a=6;b=0.Cetak:keluara=6||b=0
Rekursif(5,1) 5 a=5;b=1.Cetak:keluara=5||b=1
3 4 6 a=4;b=2.Cetak:keluara=4||b=2
Rekursif(6,0)
fibonacci(i 1) fibobacci(i 2) , i 2
fibonacci(i)
1 , i 1,2
usingnamespacestd;
intFibonaci(int);
intmain()
{
intn=7;
for(inti=1;i<=n;i++)
cout<<"\ndata"<<Fibonaci(i);
getch();
return0;
}
intFibonaci(intn)
{
if(n<=2)
returnn;
else
return(Fibonaci(n2)+Fibonaci(n1));
}
4!=4x 3! 6
3!=3x 2! 2
2!=2x 1! 1
1!=1x 0! 1
0!=1
Menara A B C :
a b c
Program 10.2
include<stdio.h>
voidHanoi(intn,charasal,charbantu,chartujuan)
//pindahkanpiringanken
{ //dariasalmenujutujuan
//melaluibantu
if(n==0)return;
Hanoi(n1,asal,tujuan,bantu); //pindahkanpiringanken1
//dariasalkebantumelalui
//tonggaktujuan
printf("Pindahpiringke%dkedari%cke%c\n",n,asal,tujuan);
Hanoi(n1,bantu,asal,tujuan) //pindahkanpiringanken1
//daribantumenujutujuan
//melaluasal
}
intmain(void)
{
intn;
printf("Jumlahpiringan?");
scanf("%d",&n);
Hanoi(n,'a','b','c');
return0;
}
Faktorial(4)
4xFaktorial(3)
3xFaktorial(2)
2xFaktorial(1)
1xFaktorial(0)
Dalam hal ini memang untuk rekursif harus memakai function karena
procedure tidak dapat dipanggil di dalam procedure itu sendiri.
usingnamespacestd;
intfaktorial(intn)
{
if(n==0)
return1;
else
returnn*faktorial(n1);
}
intmain(intargc,char*argv[])
{
intn;
cout<<"ProgramFaktorialRekursif\n";
cout<<"MasukkanNilain:";
cin>>n;
cout<<"Faktorial("<<n<<")="<<faktorial(n)<<"\n";
system("PAUSE");
returnEXIT_SUCCESS;
}
usingnamespacestd;
floatPangkat(floata,intn)
{
if(n==0)
return1;
else
returna*Pangkat(a,n1);
}
intmain(intargc,char*argv[])
{
floata;
intn;
cout<<"ProgramPangkatRekursif\n";
cout<<"IsilahNilaia=";
cin>>a;
cout<<"IsilahNilain=";
cin>>n;
cout<<"Hasildari"<<a<<"pangkat"<<n<<"adalah"<<Pangkat(a,n)<<"\n";
system("PAUSE");
returnEXIT_SUCCESS;
}
usingnamespacestd;
intJumlahInt(intn)
{
if(n==1)
return1;
else
returnn+JumlahInt(n1);
intmain(intargc,char*argv[])
{
intn;
cout<<"ProgramJumlahInteger\n";
cout<<"MasukkanNilain=";
cin>>n;
cout<<"JumlahbilanganIntegerdari1sampai"<<n<<"="<<JumlahInt(n)<<"\n";
system("PAUSE");
returnEXIT_SUCCESS;
}
usingnamespacestd;
intFaktorial(intn)
{
intx=1;
for(inti=1;i<=n;i++)
x=x*i;
returnx;
}
intmain(intargc,char*argv[])
{
368 Direktorat Pembinaan SMK |2008
intn;
cout<<"ProgramFaktorialIteratif\n";
cout<<"MasukkanNilain:";
cin>>n;
cout<<"Faktorial("<<n<<")="<<Faktorial(n)<<"\n";
system("PAUSE");
returnEXIT_SUCCESS;
}
usingnamespacestd;
floatPangkat(floata,intn)
{
floathasil=1;
if(n==0)
return1;
for(inti=1;i<=n;i++)
{
hasil=hasil*a;
}
returnhasil;
}
intmain(intargc,char*argv[])
{
floata;
intn;
cout<<"ProgramPangkatIteratif\n";
cout<<"IsilahNilaia=";
cin>>a;
cout<<"IsilahNilain=";
cin>>n;
cout<<"Hasildari"<<a<<"pangkat"<<n<<"adalah"<<Pangkat(a,n)<<"\n";
system("PAUSE");
returnEXIT_SUCCESS;
}
usingnamespacestd;
intJumlahInt(intn)
{
inthasil=0;
for(inti=1;i<=n;i++)
{
hasil=hasil+i;
}
returnhasil;
}
intmain(intargc,char*argv[])
{
intn;
cout<<"ProgramJumlahIntegerIteratif\n";
cout<<"MasukkanNilain=";
cin>>n;
cout<<"JumlahbilanganIntegerdari1sampai"<<n<<"="<<JumlahInt(n)<<"\n";
system("PAUSE");
returnEXIT_SUCCESS;
}
Iteratif. Apakah semua problem bisa Integer Positif bisa juga diselesaikan
dipecahkan secara Teknik Rekursif ? dengan rumus : n x (n + 1) / 2 atau
Ternyata tidak semuanya. Apakah (n2 + n) / 2 jadi tidak perlu Iteratif.
juga harus diselesaikan secara Perhatikan beberapa kasus
Teknik Iteratif ? Ternyata juga tidak. berikut ini pun dapat diselesaikan
Sebagai contoh Jumlah Bilangan dengan rekursif:
tidakmencetakapaapa
Rekursif :n>0
gambarpiramiddengantinggi(n1)mulaikolom(k+1)
cetakkaraktersebanyakk
cetakkarakter*sebanyak2n1
BAB. 11
GRAFIK
Pada saat anda sudah memilih siap dan di dalamnya sudah ada
membuat proyek baru maka pilihlan main() program yang siap
OpenGL sebagai basis proyek ini, ditampilkan; program inilah yang siap
seperti terlihat dalam gambar di atas. dimodifikasi. Perhaikan gambar di
Setelah OK maka proyek langsung bawah:
Program 11.1
glClearColor(1.0f,1.0f,1.0f,0.0f);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_LINES);
glColor3f(0.0f,0.0f,0.0f);glVertex2f(0.0f,0.5f);
glColor3f(0.0f,0.0f,0.0f);glVertex2f(0.0f,0.5f);
glColor3f(0.0f,0.0f,0.0f);glVertex2f(0.5f,0.0f);
2008 | Direktorat Pembinaan SMK 375
glColor3f(0.0f,0.0f,0.0f);glVertex2f(0.5f,0.0f);
glEnd();
SwapBuffers(hDC);
glColor3f(red,green,blue);
Program 11.2.
#include<windows.h>
#include<gl/gl.h>
/**************************
*FunctionDeclarations
**************************/
LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,
WPARAMwParam,LPARAMlParam);
voidEnableOpenGL(HWNDhWnd,HDC*hDC,HGLRC*hRC);
voidDisableOpenGL(HWNDhWnd,HDChDC,HGLRChRC);
/**************************
*WinMain
**************************/
intWINAPIWinMain(HINSTANCEhInstance,
HINSTANCEhPrevInstance,
LPSTRlpCmdLine,
intiCmdShow)
{
WNDCLASSwc;
HWNDhWnd;
HDChDC;
2008 | Direktorat Pembinaan SMK 377
HGLRChRC;
MSGmsg;
BOOLbQuit=FALSE;
floattheta=0.0f;
/*registerwindowclass*/
wc.style=CS_OWNDC;
wc.lpfnWndProc=WndProc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hInstance=hInstance;
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wc.lpszMenuName=NULL;
wc.lpszClassName="GLSample";
RegisterClass(&wc);
/*createmainwindow*/
hWnd=CreateWindow(
"GLSample","OpenGLSample",
WS_CAPTION|WS_POPUPWINDOW|WS_VISIBLE,
0,0,256,256,
NULL,NULL,hInstance,NULL);
/*enableOpenGLforthewindow*/
EnableOpenGL(hWnd,&hDC,&hRC);
/*programmainloop*/
while(!bQuit)
{
/*checkformessages*/
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
/*handleordispatchmessages*/
if(msg.message==WM_QUIT)
{
bQuit=TRUE;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
else
{
/*OpenGLanimationcodegoeshere*/
glClearColor(1.0f,1.0f,1.0f,0.0f);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_LINES);
glColor3f(0.0f,0.0f,0.0f);glVertex2f(0.0f,0.5f);
glColor3f(0.0f,0.0f,0.0f);glVertex2f(0.0f,0.5f);
glColor3f(0.0f,0.0f,0.0f);glVertex2f(0.5f,0.0f);
glColor3f(0.0f,0.0f,0.0f);glVertex2f(0.5f,0.0f);
glEnd();
SwapBuffers(hDC);
}
}
/*shutdownOpenGL*/
DisableOpenGL(hWnd,hDC,hRC);
/*destroythewindowexplicitly*/
DestroyWindow(hWnd);
returnmsg.wParam;
}
/********************
*WindowProcedure
********************/
LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,
WPARAMwParam,LPARAMlParam)
{
switch(message)
{
caseWM_CREATE:
return0;
caseWM_CLOSE:
PostQuitMessage(0);
2008 | Direktorat Pembinaan SMK 379
return0;
caseWM_DESTROY:
return0;
caseWM_KEYDOWN:
switch(wParam)
{
caseVK_ESCAPE:
PostQuitMessage(0);
return0;
}
return0;
default:
returnDefWindowProc(hWnd,message,wParam,lParam);
}
}
/*******************
*EnableOpenGL
*******************/
voidEnableOpenGL(HWNDhWnd,HDC*hDC,HGLRC*hRC)
{
PIXELFORMATDESCRIPTORpfd;
intiFormat;
/*getthedevicecontext(DC)*/
*hDC=GetDC(hWnd);
/*setthepixelformatfortheDC*/
ZeroMemory(&pfd,sizeof(pfd));
pfd.nSize=sizeof(pfd);
pfd.nVersion=1;
pfd.dwFlags=PFD_DRAW_TO_WINDOW|
PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER;
pfd.iPixelType=PFD_TYPE_RGBA;
pfd.cColorBits=24;
pfd.cDepthBits=16;
pfd.iLayerType=PFD_MAIN_PLANE;
iFormat=ChoosePixelFormat(*hDC,&pfd);
SetPixelFormat(*hDC,iFormat,&pfd);
/*createandenabletherendercontext(RC)*/
*hRC=wglCreateContext(*hDC);
wglMakeCurrent(*hDC,*hRC);
}
/******************
*DisableOpenGL
******************/
voidDisableOpenGL(HWNDhWnd,HDChDC,HGLRChRC)
{
wglMakeCurrent(NULL,NULL);
wglDeleteContext(hRC);
ReleaseDC(hWnd,hDC);
}
Program 11.3
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIAGLES);
glColor3f(0.0f,0.0f,0.0f);glVertex2f(0.0f,0.5f);
glColor3f(0.0f,0.0f,0.0f);glVertex2f(0.5f,0.5f);
glColor3f(0.0f,0.0f,0.0f);glVertex2f(0.5f,0.5f);
glEnd();
Program 11.4
#include<windows.h>
#include<gl/gl.h>
/**************************
*FunctionDeclarations
**************************/
LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,
WPARAMwParam,LPARAMlParam);
voidEnableOpenGL(HWNDhWnd,HDC*hDC,HGLRC*hRC);
voidDisableOpenGL(HWNDhWnd,HDChDC,HGLRChRC);
/**************************
*WinMain
**************************/
intWINAPIWinMain(HINSTANCEhInstance,
HINSTANCEhPrevInstance,
LPSTRlpCmdLine,
intiCmdShow)
{
WNDCLASSwc;
HWNDhWnd;
HDChDC;
HGLRChRC;
MSGmsg;
BOOLbQuit=FALSE;
floattheta=0.0f;
/*registerwindowclass*/
wc.style=CS_OWNDC;
wc.lpfnWndProc=WndProc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hInstance=hInstance;
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wc.lpszMenuName=NULL;
wc.lpszClassName="GLSample";
RegisterClass(&wc);
/*createmainwindow*/
hWnd=CreateWindow(
"GLSample","OpenGLSample",
WS_CAPTION|WS_POPUPWINDOW|WS_VISIBLE,
0,0,256,256,
NULL,NULL,hInstance,NULL);
/*enableOpenGLforthewindow*/
EnableOpenGL(hWnd,&hDC,&hRC);
/*programmainloop*/
while(!bQuit)
{
/*checkformessages*/
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
/*handleordispatchmessages*/
if(msg.message==WM_QUIT)
{
bQuit=TRUE;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
else
{
/*OpenGLanimationcodegoeshere*/
glClearColor(1.0f,1.0f,1.0f,0.0f);
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glRotatef(theta,0.0f,0.0f,1.0f);
glBegin(GL_QUADS);
glColor3f(1.0f,0.0f,0.0f);glVertex2f(0.5f,0.5f);
glColor3f(0.0f,1.0f,0.0f);glVertex2f(0.5f,0.5f);
glColor3f(0.0f,0.0f,1.0f);glVertex2f(0.5f,0.5f);
glColor3f(0.0f,0.0f,0.0f);glVertex2f(0.5f,0.5f);
glEnd();
glPopMatrix();
SwapBuffers(hDC);
theta+=1.0f;
Sleep(1);
}
}
/*shutdownOpenGL*/
DisableOpenGL(hWnd,hDC,hRC);
/*destroythewindowexplicitly*/
DestroyWindow(hWnd);
returnmsg.wParam;
}
/********************
*WindowProcedure
********************/
LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,
WPARAMwParam,LPARAMlParam)
{
switch(message)
{
caseWM_CREATE:
return0;
caseWM_CLOSE:
PostQuitMessage(0);
return0;
caseWM_DESTROY:
return0;
caseWM_KEYDOWN:
switch(wParam)
{
caseVK_ESCAPE:
PostQuitMessage(0);
return0;
}
return0;
default:
returnDefWindowProc(hWnd,message,wParam,lParam);
}
}
/*******************
*EnableOpenGL
*******************/
voidEnableOpenGL(HWNDhWnd,HDC*hDC,HGLRC*hRC)
{
PIXELFORMATDESCRIPTORpfd;
intiFormat;
/*getthedevicecontext(DC)*/
*hDC=GetDC(hWnd);
/*setthepixelformatfortheDC*/
ZeroMemory(&pfd,sizeof(pfd));
pfd.nSize=sizeof(pfd);
pfd.nVersion=1;
pfd.dwFlags=PFD_DRAW_TO_WINDOW|
PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER;
pfd.iPixelType=PFD_TYPE_RGBA;
pfd.cColorBits=24;
pfd.cDepthBits=16;
pfd.iLayerType=PFD_MAIN_PLANE;
iFormat=ChoosePixelFormat(*hDC,&pfd);
SetPixelFormat(*hDC,iFormat,&pfd);
/*createandenabletherendercontext(RC)*/
*hRC=wglCreateContext(*hDC);
wglMakeCurrent(*hDC,*hRC);
/******************
*DisableOpenGL
******************/
voidDisableOpenGL(HWNDhWnd,HDChDC,HGLRChRC)
{
wglMakeCurrent(NULL,NULL);
wglDeleteContext(hRC);
ReleaseDC(hWnd,hDC);
}
glRotatef(theta,0.0f,0.0f,1.0f);
Program 11.5
/*OpenGLanimationcodegoeshere*/
glClearColor(0.0f,0.0f,0.0f,1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glRotatef(theta,0.0f,0.0f,1.0f);
glBegin(GL_POLYGON);
glColor3f(1.0f,0.0f,0.0f);glVertex2f(0.3f,0.54f);
glColor3f(0.0f,1.0f,0.0f);glVertex2f(0.3f,0.54f);
glColor3f(0.0f,0.0f,1.0f);glVertex2f(0.61f,0.0f);
glColor3f(0.0f,1.0f,1.0f);glVertex2f(0.3f,0.54f);
glColor3f(1.0f,1.0f,0.0f);glVertex2f(0.3f,0.54f);
glColor3f(1.0f,1.0f,1.0f);glVertex2f(0.61f,0.0f);
glEnd();
glPopMatrix();
SwapBuffers(hDC);
theta+=2.0f;
Sleep(1);
2008 | Direktorat Pembinaan SMK 387
Program 11.6
#include<windows.h>
#include<gl/gl.h>
/**************************
*FunctionDeclarations
**************************/
LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,
WPARAMwParam,LPARAMlParam);
voidEnableOpenGL(HWNDhWnd,HDC*hDC,HGLRC*hRC);
voidDisableOpenGL(HWNDhWnd,HDChDC,HGLRChRC);
/**************************
*WinMain
**************************/
intWINAPIWinMain(HINSTANCEhInstance,
HINSTANCEhPrevInstance,
LPSTRlpCmdLine,
intiCmdShow)
{
WNDCLASSwc;
HWNDhWnd;
HDChDC;
HGLRChRC;
MSGmsg;
BOOLbQuit=FALSE;
floattheta=1.0f;
floatalpha=1.0f;
/*registerwindowclass*/
wc.style=CS_OWNDC;
wc.lpfnWndProc=WndProc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hInstance=hInstance;
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wc.lpszMenuName=NULL;
wc.lpszClassName="GraphGL";
RegisterClass(&wc);
/*createmainwindow*/
hWnd=CreateWindow(
"GraphGL","OpenGLGraphicsAnimation",
WS_CAPTION|WS_POPUPWINDOW|WS_VISIBLE,
0,0,512,512,
NULL,NULL,hInstance,NULL);
/*enableOpenGLforthewindow*/
EnableOpenGL(hWnd,&hDC,&hRC);
/*programmainloop*/
while(!bQuit)
{
/*checkformessages*/
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
/*handleordispatchmessages*/
if(msg.message==WM_QUIT)
{
bQuit=TRUE;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
else
{
/*OpenGLanimationcodegoeshere*/
glClearColor(1.0f,1.0f,1.0f,1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glTranslatef(theta,alpha,0.0f);
glColor3f(1.0f,0.0f,1.0f);
glRectf(0.2,0.2,0.2,0.2);
glPopMatrix();
SwapBuffers(hDC);
if(theta>=1.0)
{
theta=1.0f;
alpha=1.0f;
}
elseif(theta<=1.0)
{
theta+=0.01f;
alpha+=0.01f;
}
Sleep(10);
}
}
/*shutdownOpenGL*/
DisableOpenGL(hWnd,hDC,hRC);
/*destroythewindowexplicitly*/
DestroyWindow(hWnd);
returnmsg.wParam;
}
/********************
*WindowProcedure
********************/
LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,
WPARAMwParam,LPARAMlParam)
{
switch(message)
{
caseWM_CREATE:
return0;
caseWM_CLOSE:
PostQuitMessage(0);
return0;
caseWM_DESTROY:
return0;
caseWM_KEYDOWN:
switch(wParam)
{
caseVK_ESCAPE:
PostQuitMessage(0);
return0;
}
return0;
default:
returnDefWindowProc(hWnd,message,wParam,lParam);
}
}
/*******************
*EnableOpenGL
*******************/
voidEnableOpenGL(HWNDhWnd,HDC*hDC,HGLRC*hRC)
{
PIXELFORMATDESCRIPTORpfd;
intiFormat;
/*getthedevicecontext(DC)*/
*hDC=GetDC(hWnd);
/*setthepixelformatfortheDC*/
ZeroMemory(&pfd,sizeof(pfd));
pfd.nSize=sizeof(pfd);
pfd.nVersion=1;
pfd.dwFlags=PFD_DRAW_TO_WINDOW|
PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER;
pfd.iPixelType=PFD_TYPE_RGBA;
pfd.cColorBits=24;
pfd.cDepthBits=16;
2008 | Direktorat Pembinaan SMK 391
pfd.iLayerType=PFD_MAIN_PLANE;
iFormat=ChoosePixelFormat(*hDC,&pfd);
SetPixelFormat(*hDC,iFormat,&pfd);
/*createandenabletherendercontext(RC)*/
*hRC=wglCreateContext(*hDC);
wglMakeCurrent(*hDC,*hRC);
/******************
*DisableOpenGL
******************/
voidDisableOpenGL(HWNDhWnd,HDChDC,HGLRChRC)
{
wglMakeCurrent(NULL,NULL);
wglDeleteContext(hRC);
ReleaseDC(hWnd,hDC);
}
Program 11.7
#include<windows.h>
#include<gl/gl.h>
/**************************
*FunctionDeclarations
**************************/
LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,
392 Direktorat Pembinaan SMK | 2008
WPARAMwParam,LPARAMlParam);
voidEnableOpenGL(HWNDhWnd,HDC*hDC,HGLRC*hRC);
voidDisableOpenGL(HWNDhWnd,HDChDC,HGLRChRC);
/**************************
*WinMain
**************************/
intWINAPIWinMain(HINSTANCEhInstance,
HINSTANCEhPrevInstance,
LPSTRlpCmdLine,
intiCmdShow)
{
WNDCLASSwc;
HWNDhWnd;
HDChDC;
HGLRChRC;
MSGmsg;
BOOLbQuit=FALSE;
floattheta=0.8f;
floatalpha=0.8f;
intcount=0;
floatr,g,b;
/*registerwindowclass*/
wc.style=CS_OWNDC;
wc.lpfnWndProc=WndProc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hInstance=hInstance;
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wc.lpszMenuName=NULL;
wc.lpszClassName="GraphGL";
RegisterClass(&wc);
/*createmainwindow*/
hWnd=CreateWindow(
"GraphGL","OpenGLGraphics",
WS_CAPTION|WS_POPUPWINDOW|WS_VISIBLE,
0,0,512,512,
NULL,NULL,hInstance,NULL);
/*enableOpenGLforthewindow*/
EnableOpenGL(hWnd,&hDC,&hRC);
/*programmainloop*/
while(!bQuit)
{
/*checkformessages*/
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
/*handleordispatchmessages*/
if(msg.message==WM_QUIT)
{
bQuit=TRUE;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
else
{
/*OpenGLanimationcodegoeshere*/
glClearColor(1.0f,1.0f,1.0f,1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glTranslatef(theta,alpha,0.0f);
glColor3f(r,g,b);
glRectf(0.2,0.2,0.2,0.2);
glPopMatrix();
SwapBuffers(hDC);
if(count>160)
{
theta=0.01f;
alpha=0.01f;
if(count==320)
{
count=0;
theta=0.8f;
alpha=0.8f;
}
else
count+=1;
r=0.0f;
g=1.0f;
b=0.0f;
}
elseif(count<=160)
{
theta+=0.01f;
alpha+=0.01f;
count+=1;
r=1.0f;
g=0.0f;
b=1.0f;
}
Sleep(10);
}
}
/*shutdownOpenGL*/
DisableOpenGL(hWnd,hDC,hRC);
/*destroythewindowexplicitly*/
DestroyWindow(hWnd);
returnmsg.wParam;
}
/********************
*WindowProcedure
********************/
LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,
WPARAMwParam,LPARAMlParam)
{
switch(message)
{
2008 | Direktorat Pembinaan SMK 395
caseWM_CREATE:
return0;
caseWM_CLOSE:
PostQuitMessage(0);
return0;
caseWM_DESTROY:
return0;
caseWM_KEYDOWN:
switch(wParam)
{
caseVK_ESCAPE:
PostQuitMessage(0);
return0;
}
return0;
default:
returnDefWindowProc(hWnd,message,wParam,lParam);
}
}
/*******************
*EnableOpenGL
*******************/
voidEnableOpenGL(HWNDhWnd,HDC*hDC,HGLRC*hRC)
{
PIXELFORMATDESCRIPTORpfd;
intiFormat;
/*getthedevicecontext(DC)*/
*hDC=GetDC(hWnd);
/*setthepixelformatfortheDC*/
ZeroMemory(&pfd,sizeof(pfd));
pfd.nSize=sizeof(pfd);
pfd.nVersion=1;
pfd.dwFlags=PFD_DRAW_TO_WINDOW|
PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER;
pfd.iPixelType=PFD_TYPE_RGBA;
pfd.cColorBits=24;
pfd.cDepthBits=16;
pfd.iLayerType=PFD_MAIN_PLANE;
iFormat=ChoosePixelFormat(*hDC,&pfd);
SetPixelFormat(*hDC,iFormat,&pfd);
/*createandenabletherendercontext(RC)*/
*hRC=wglCreateContext(*hDC);
wglMakeCurrent(*hDC,*hRC);
/******************
*DisableOpenGL
******************/
voidDisableOpenGL(HWNDhWnd,HDChDC,HGLRChRC)
{
wglMakeCurrent(NULL,NULL);
wglDeleteContext(hRC);
ReleaseDC(hWnd,hDC);
}
BAB 12
OPERASI FILE
File
VARIABEL DIGUNAKAN
cin Consoleinput(standarinput)
cout Consoleoutput(standaroutput)
cerr Consoleerror(standarerror)
clog Consolelog
data_file.open("angka.dat"); ifstreamdata_file("angka.dat");
Program 12.1
#include<conio.h>
#include<iostream>
#include<fstream>
#include<cstdlib>
usingnamespacestd;
intmain()
{
constintDATA_SIZE=100; //Jumlahitemdalamdata
intdata_array[DATA_SIZE]; //ukurandata
ifstreamdata_file("angkan.dat"); //filemasukan
inti; //penghitungLoop
if(data_file.bad()){
cerr<<"Error:tidakdapatmembukafileangka.dat\n";
exit(8);
}
for(i=0;i<DATA_SIZE;++i){
assert(i>=0);
assert(i<sizeof(data_array)/sizeof(data_array[0]));
data_file>>data_array[i];
}
inttotal; //Totalangka
total=0;
for(i=0;i<DATA_SIZE;++i){
assert(i>=0);
assert(i<sizeof(data_array)/sizeof(data_array[0]));
total+=data_array[i];
}
cout<<"Totaldarisemuaangkaadalah:"<<total<<'\n';
getch();
return(0);
}
FLAG ARTI
ios::app menambahkandatakeakhiroutputfile.
ios::ate Pergikeakhirfileketikadibuka.
ios::in Membukauntukmasukan(harusdiberikankepadafungsibuka
ifstreamvariabel).
ios::out Bukafileuntukoutput(harusdiberikankepadafungsianggota
bukaofstreamvariabel).
ios::binary Filebinary(jikatidakada,makafiledibukasebagaifileASCII).
ios::trunc Membuangisiyangadasaatmembukafileuntukmenulis.
ios::nocreate Mengalamigagaljikafiletersebuttidakada.(Outputfilesaja.
Membukasebuahfileinputselalugagaljikatidakadafile.).
ios::noreplace Jangan menimpa file yang ada. Jika file ada, menyebabkan
rusakketikabuka.
Prot, file protection dimana hal ini merupakan nama file yang akan
tergantung pada sistem operasi ditulis.
yang digunakan untuk Pada contoh dibawah terdiri dari
fungsi pendek tersebut digunakan
menentukan mode proteksi file
untuk menulis pesan pada sebuah
tersebut. Misalnya pada UNIX file catatan. Sesuatu yang pertama
proteksi default sampai 0644 yang dilakukan adalah membuka
untuk baca/tulis sendiri, baca pada fungsi untuk operasi output (ios::out),
group maupun penulisan lainnya, menambahkan catatan (ios::app),
sedangkan MS-DOS/windows dengan menulis dari permulaan
defaultnya adalah 0 dalam kondisi sampai akhir penulisan (ios::ate).
Setelah fungsi tersebut menulis
file normal.
pesan serta terahir menutup file.
Perhatikan contoh pernyataan Fungsi ini telah dirancang
dibawah ini: dengan sederhana, dimana hal
tersebut juga tidak memperdulikan
ofstreamout_file("data.new", mengenai efisiensi dan sebagai hasil
ios::out|ios::binary|ios::nocreate| dari fungsi adalah sangat tidak
ios::app); efisien. Masalah tersebut dibuka dan
ditutup setiap saat memanggil
potongan pogram diatas dapat log_message. Membuka file
diartikan digunakan menambahkan merupakan sebuah operasi yang
(ios::app) data biner menggunakan cukup mahal, dan sesuatu juga harus
(ios::binary), kalau file sudah ada mempunyai kecepatan lebih tinggi,
atau telah ditemukan filenya jika akan membuka file hanya sekali
(ios::nocreate) sedangkan data.new dan mengingatkan tersebut.
Program 12.2.
#include<iostream>
#include<fstream>
usingnamespacestd;
voidlog_message(conststring&msg)
{
ofstreamout_file("data.log",
if(out_file.bad())
out_file<<msg<<endl;
return;
}
FLAG ARTI
ios::skipws loncatikarakteryangmendahuluispasisebagaimasukan.
ios::left Outputsebelahkiridibenarkan.
ios::right Outputseblahkanandibenarkan.
ios::internal Numerikkeluaranadalahmemasukkanpaddedolehkarakter
yangmengisiantaratandaataudasarkarakterdanjumlahitu
sendiri.
2008 | Direktorat Pembinaan SMK 409
Bahasa pemrograman Operasi File
ios::boolalpha Gunakan versi karakter yang benar dan salah untuk input dan
output.
ios::dec Outputdalamdasarangka10,formatdesimal.
ios::oct Keluaranangkadenganformat8angkaoktal.
ios::hex Outputdalamformatangka16,heksadesimal.
ios::showbase Mencetak indikator inti pada setiap awal nomor. Misalnya,
angkaheksadesimalyangdiawalidengan"0x".
ios::showpoint Menunjukkan titik desimal untuk semua angka floatingpoint
apakahiadibutuhkan.
ios::uppercase Ketika konversi heksadesimal angka, menunjukkan angka AF
sebagaihurufbesar.
ios::showpos Menempatkantandapositifsebelumsemuanomor.
ios::scientific Mengkonversi semua angka floatingpoint untuk notasi ilmiah
padaoutput.
ios::fixed Mengkonversi semua floatingpoint nomor ke titik tetap pada
output.
ios::unitbuf Bufferoutput.
cout.setf(ios::dec); intfile_var.precision(intdigits);
MANIPULATOR DESKRIPSI
dec Keluaranangkadalamformatdesimal.
hex Keluaranangkadalamformathexadesimal.
oct Keluaranangkadalamformatoktal.
ws Loncatispacepadamasukan.
endl Keluaranpadaendofline
ends Keluaranpadaendofstring(`\0').
flush Lakukanpembufferankeluaranout.
Selain tebal diatas ada juga header <iomanip> dapat dilihat pada
manipulator yang didefinisikan ole file tabel dibawah ini:
MANIPULATOR DESKRIPSI
setiosflags(longflags) Aturpemilihflagkonversi.
resetiosflags(longflags) Resetflagterpilih.
setbase(intbase) Aturkonersidasarmenuju8,10,atau16.Urutkan
secaraumumdec,hex,oct.
setw(intwidth) Aturlebarkeluaran.
setprecision(intprecision) Aturpresisidarikeluaranfloatingpoint.
setfill(charch) Aturkarakteryangdiblok/ditandai.
2008 | Direktorat Pembinaan SMK 411
Bahasa pemrograman Operasi File
program 12.3
#include<conio.h>
#include<iostream>
#include<iomanip>
usingnamespacestd;
intmain()
{
intnumber=12; //angkauntukkeluarkan
floatreal=12.34; //angkayangnyata
cout<<"123456789012345678901234567890\n"; //rulerkeluaran
cout<<number<<"<\n";
cout<<setw(5)<<number<<"<\n";
cout<<setw(5)<<setfill('*')<<number<<"<\n";
cout<<setiosflags(ios::showpos|ios::left)<<setw(5)<<number<<"<\n";
cout<<real<<"<\n";
cout<<setprecision(1)<<setiosflags(ios::fixed)<<real<<"<\n";
cout<<setiosflags(ios::scientific)<<real<<"<\n";
getch();
return(0);
}
struct{
intwidth;
intheight;
}rectangle;
in_file.read(static_cast<char*>(&rectangle),sizeof(rectangle));
if(in_file.bad()){
cerr<<"Tidakdimungkinkanmembacarectangle\n";
exit(8);
}
if(in_file.gcount()!=sizeof(rectangle)){
cerr<<"Error:tidakbisauntukmembaca\n";
cerr<<"I/Omengalamierror,EOFtidakbisadihitung\n";
}
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#ifdef__MSDOS__ //jikabekerjapadaMSDOS
#include<io.h> //memanggilincludefilei/opadaMSDOS
#else /*__MSDOS__*/
#include<unistd.h> //memanggilincludefilei/opadaUNIX
#endif /*__MSDOS__*/
FLAG ARTI
O_RDONLY Openforreadingonly.
O_WRONLY Openforwritingonly.
O_RDWR Openforreadingandwriting.
O_APPEND Appendnewdataattheendofthefile.
O_CREAT Create file (the file mode parameter required when this flag is
present).
O_TRUNC Ifthefileexists,truncateitto0length.
O_EXCL Failiffileexists.
O_BINARY Openinbinarymode(olderUnixsystemsmaynothavethisflag).
Sebagai contoh pada saat Tabel 12.7. Standar file tidak terbuffer
operasi membuka file dengan nama NOMORFILE PENJELASAN
file data.txt dalam mode pembacaan 0 Standardin
text, maka potongan program yang 1 Standardout
dituliskan adalah sebagai berikut:
2 Standarderror
data_fd=open("data.txt",O_RDONLY);
Format dari pemanggilan read
adalah:
selain contoh diatas, bagaimana
untuk membuat sebuah file output.dat
read_size = read(file_descriptor, buffer,
dapat ditulis, maka potongan
program adalah sebagai berikut: size);
Program 12.4.
#include<conio.h>
#include<iostream>
#include<cstdlib>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
usingnamespacestd;
#ifdef__WIN32__ //jikakitamenggunakanWindows32
#include<io.h> //includefilei/obekerjapadaWindows32
#else /*__WIN32__*/
#include<unistd.h> //includefilei/obekerjapadaunix
#endif /*__WIN32__*/
constintBUFFER_SIZE=(16*1024);//menggunakanbuffer16k
intmain(intargc,char*argv[])
{
charbuffer[BUFFER_SIZE];//bufferdata
intin_file; //inputfiledescriptor
intout_file; //outputfiledescriptor
intread_size; //numberofbytesonlastread
if(argc!=3){
cerr<<"Error:Angkasebagaiarugmensalah\n";
cerr<<"penggunaanyaadalah:copy<from><to>\n";
exit(8);
}
in_file=open(argv[1],O_RDONLY);
if(in_file<0){
cerr<<"Error:tidakbisadibuka"<<argv[1]<<'\n';
exit(8);
}
out_file=open(argv[2],O_WRONLY|O_TRUNC|O_CREAT,0666);
if(out_file<0){
cerr<<"Error:Tidakbisadibuka"<<argv[2]<<'\n';
exit(8);
}
while(true){
read_size=read(in_file,buffer,sizeof(buffer));
if(read_size==0)
break;//akhirfile
if(read_size<0){
cerr<<"Error:kesalahanbaca\n";
exit(8);
}
write(out_file,buffer,(unsignedint)read_size);
}
close(in_file);
close(out_file);
getch();
return(0);
}
FILE DESCRIPTION
stdin Standarmasukan(membukauntukdibaca).
PadabahasaC++ekivalendengancin.
stdout Standardkeluaran(membukauntukditulis).
PadabahasaC++ekivalendengancout.
stderr Standardsalah(membukauntukditulis).
PadabahasaC++ekivalalendengancerr.
(dalam bahasa C tidak ada sedangkan dalam bahasa C++
ekivalendenganclog.
usingnamespacestd;
constcharFILE_NAME[]="input.txt";//namafilemasukan
intmain()
{
intcount=0; //jumlahkarakter
FILE*in_file; //masukanfile
intch; //karakteratauEOFflagdarimasukan
in_file=fopen(FILE_NAME,"rb");
if(in_file==NULL){
cerr<<"tidakbisamembukaFile"<<FILE_NAME<<'\n';
exit(8);
}
while(true){
2008 | Direktorat Pembinaan SMK 421
Bahasa pemrograman Operasi File
ch=fgetc(in_file);
if(ch==EOF)
break;
++count;
}
cout<<"jumlahkarakter"<<FILE_NAME<<"adalah"<<count<<'\n';
fclose(in_file);
return(0);
}
Program 12.6
#include<stdio.h>
usingnamespacestd;
voidmain(){
intrequest,account;
floatbalance;
charname[25];
FILE*cfPtr;
if((cfPtr=fopen("klien.dat","r+"))==NULL)
printf("Filecouldnotbeopened\n");
else{
printf("Enterrequest\n"
"1Listaccountswithzerobalances\n"
"2Listaccountswithcreditbalances\n"
"3Listaccountswithdebitbalances\n"
"4Endofrun\n?");
scanf("%d",&request);
2008 | Direktorat Pembinaan SMK 423
Bahasa pemrograman Operasi File
while(request!=4){
fscanf(cfPtr,"%d%s%f",&account,name,&balance);
switch(request){
case1:
printf("\nAccountswithzerobalances:\n");
while(!feof(cfPtr)){
if(balance==0)
printf("%10d%13s7.2f\n",account,name,balance);
fscanf(cfPtr,"%d%s%f",&account,name,&balance);
}
break;
case2:
printf("\nAccountswithcreditbalances:\n");
while(!feof(cfPtr)){
if(balance<0)
printf("%10d%13s7.2f\n",account,name,balance);
fscanf(cfPtr,"%d%s%f",&account,name,&balance);
}
break;
case3:
printf("\nAccountswithdebitbalances:\n");
while(!feof(cfPtr)){
if(balance>0)
printf("%10d%13s7.2f\n",account,name,balance);
fscanf(cfPtr,"%d%s%f",&account,name,&balance);
}
break;
}
rewind(cfPtr);
printf("\n?");
scanf("%d",&request);
}
printf("Endofrun.\n");
fclose(cfPtr);
}
}
MODE ARTI
r Membukasebuahfileteksuntukpembacaan
w Membuatsebuahfileteksuntukpenulisan
a Menambahkandatakesebuahfileteks
rb Membukasebuahfilebinaryuntukpembacaan
wb Membuatsebuahfilebinaryuntukpenulisan
ab Menambahkandatakesebuahfilebinary
r+ Membukasebuahfileteksuntukpembacaan/penulisan
w+ Membuatsebuahfileteksuntukpembacaan/penulisan
a+ Menambahkandata/membuatfileteksuntuk
pembacaan/penulisan
r+bataurb+ Membukasebuahfilebinaryuntukpembacaan/penulisan
w+batauwb+ Membuatsebuahfilebinaryuntukpembacaan/penulisan
a+batauab+ Menambahkandatakefilebinaryuntuk
pembacaan/penulisan
Dalam operasi file dilakukan ada sebuah file pointer yang valid,
beberapa hal yang perlu diperhatikan sedangkan jika operasi gagal, maka
antara lain: jika operasi open fopen() mengembalikan sebuah null
berhasil, fopen() mengembalikan pointer, sehingga harus selalu dicek
2008 | Direktorat Pembinaan SMK 425
Bahasa pemrograman Operasi File
Dibawah ini merupakan fungsi untuk operasi file teks antara lain
a. fgetc()danfputc(),dimanaSintaknyadapatditulis:
intfgetc(FILE*fp);
intfputc(intch,FILE*fp);
Program 12.7
include<stdio.h>
#include<stdlib.h>
usingnamespacestd;
intmain()
{
FILE*fp;
inti;
intch;
fp=fopen("foo.abc","w"); //bukafilefoo.abcuntukditulisi
for(i=0;i<10;i++){ //loopuntukmeletakkankarakter2
fputc('A',fp); //menuliskankarakterA
fputc('\n',fp); //menuliskanpergantianbaris
}
fclose(fp);
if((fp=fopen("foo.abc","r"))==NULL){
cout<<"Errorreadingfile...\n";
exit(1);
}
while(ch!=EOF){ //bacafilesampaitandaEOF(EndofFile)
ch=fgetc(fp); //ambilsatukarakter
putchar(ch); //menampilkankarakterkelayar
}
fclose(fp);
b. fgets()danfputs(),Sintaknyadapatdiltulissebagaiberikut:
intfputs(char*str,FILE*fp);
char*fgets(char*str,intnum,FILE*fp);
Program 12.8.
#include<stdio.h>
#include<stdlib.h>
voidmain()
{
FILE*fp;
charch[14];
fp=fopen("foo.abc","w"); //bukafilefoo.abcuntukditulisi
fputs("StringContoh",fp); //menuliskanstring
fclose(fp);
if((fp=fopen("foo.abc","r"))==NULL){
printf("Errorreadingfile...\n");
exit(1);
}
puts(fgets(ch,sizeof(ch),fp)); //cetakstringdifookelayar
fclose(fp);
}
Program 12.9
#include<stdio.h>
#include<stdlib.h>
voidmain()
{
FILE*fp;
inti;
charx[100];
fp=fopen("foo.abc","w");//bukafilefoo.abcuntukditulisi
fprintf(fp,"\nSampleCode\n\n");//menuliskansesuatu
for(i=1;i<=10;i++){
fprintf(fp,"i=%d\n",i);
}
fclose(fp);
if((fp=fopen("foo.abc","r"))==NULL){
printf("Errormembukafile\n");
exit(1);
}
while(!feof(fp)){
fscanf(fp,"%s",&x);
puts(x);
}
fclose(fp);
}
Keterangan: dimana
buffer: pointer ke area di memori fp adalah pointer file yang
yang menampung data yg akan dihasilkan oleh fopen()
dibaca ke file ch adalah karakter yang akan
b_byte: banyaknya byte data yang ditulis.
akan dibaca/tulis (dapat
menggunakan sizeof(buffer))
Program 12.10
#include"stdio.h"
#include"conio.h"
#defineCTRL_Z26
voidmain(){
file*pf; /*pointerkefile*/
charkar;
if((pf=fopen("COBA.TXT","w"))==NULL)/*ciptakanfile*/
{cputs("Filetakdapatdiciptakan!\r\n");
exit(1); /*selesai*/
}
while((kar=getche())!=CTRL_Z)
putc(kar,pf); /*tuliskefile*/
fclose(pf); /*tutupfile*/
}
nama_obyek.close();
voidmain(){
ofstreamfileteks;
fileteks.open("C:/Catat.txt");
fileteks<<"Untukmencapaitujuanygbesar,makatujuanitu"<<endl;
fileteks<<"harusdibagibagimenjaditujuankecil"<<endl;
fileteks<<"sampaitujuanitumerupakantujuanygdapat"<<"dicapai"<<endl;
fileteks<<"berdasarkankondisidanpotensiygdimilikisaat"<<"itu"<<endl;
fileteks.close();
}
perintah fileteks.Open(C:/catat.txt);
akan membuka file catatan.txt yang
ada di C:\ . Apabila file tersebut 12.12.4. Menambah Data File
belum ada maka akan dibuat secara Suatu file yang sudah ada
otomatis, dan apabila sudah ada isi sebelumnya dapat ditambah data
file catatan.txt akan terhapus. yang baru (tidak menghapus data
2008 | Direktorat Pembinaan SMK 429
Bahasa pemrograman Operasi File
Program 12.12
#include<iostream.h>
#include<fstream.h>
voidmain(){
ofstreamfileteks;
fileteks.open("C:/catatan.txt",ios::app);
fileteks<<endl;
fileteks<<"Oleh:AlKhowarizmi<<endl;
fileteks.close();
}
Program 12.13.
#include<iostream.h>
#include<fstream.h>
voidmain(){
ifstreamfileteks;
{
ifstreamdigunakanu/membacafile
}
fileteks.open("C:/catatan.txt");
if(fileteks.fail())cout<<"Maaffiletakdapatdibuka/"<<"tidakditemukan";
fileteks.close();
}
#include<iostream.h>
#include<fstream.h>
voidmain()
{
ofstreamfileteks;
fileteks.open("C:/contoh.txt");
fileteks.put('A');
fileteks.put('B');
fileteks.put('C');
fileteks.close();
}
voidmain()
{
charkarakter;
ifstreamfileteks;{}
fileteks.open("C:/contoh.txt");
while(!fileteks.eof())
{
fileteks.get(karakter);
cout<<karakter;
}
fileteks.close();
}
12.17.Soal Latihan
Jawablah soal latihan dibawah ini dengan baik dan benar.
1. Apa yang dimaksud dengan file
2. Apa yang dimaksud dengan kode ascii
3. Apakah fungsi buffer pada operasi string
4. Buatlah program untuk menulis file dengan nama latih.txt
5. Buatlah program untuk menambah data pada file latih.txt
6. Buatlah program untuk menghapus file latih.txt
7. Apa yang dimaksud dengan file skuensial
BAB 13
POINTER
andy
25
1775 1776 1777
Fred Ted
25 1776
Ted
1776
25 memori
25
beth
Gambar 13.3. Operator Reference
px
zzzz 1000
Alamat
1000 ?
X
tipe_data *nama_var_pointer
Dimana type merupakan tipe dari data yang ditunjuk, bukan tipe dari pointer-
nya. Dengan tipe dapat berupa float*greatnumber;
sembarang tipe yang sudah dibahas
pada bab-bab sebelumnya, maupun Contoh pertama menyatakan bahwa
bab-bab berikutnya. Adapun px adalah variabel pointer yang
nama_var_pointer adalah nama dari menunjuk ke suatu data bertipe int,
variabel pointer. Perhatikan contoh sedangkan contoh kedua masing
berikut ini: pch1 dan pch2 adalah variabel
pointer yang menunjuk ke data
int*px; bertipe char.
char*pch1,*pch2;
Gambar
G 13.6
6. Ilustrasi pe
endeklarasia
an variabel pointer
p
Prrogram 13.1
#innclude<iostre eam>
#innclude<conio o.h>
ussingnamespaacestd;
inttmain()
{
intnilai1=5,nilai2==15;
int*m
mypointer;
mypoin nter=&nilai1 1;
mypoin nter=10;
mypoin nter=&nilai2 2;
*mypointer=20;
cout<<<"nilai1=="<<nilai1<<"/nilai2=="<<nilai2;
return0;
}
Perhatika
an bagaiman na nilai darri Kemudian memberikan nilai 10 ke
nillai1 dan nila
ai2 diubah secara
s tidakk ang ditunjukk oleh myp
nilai ya pointer,
lanngsung. Pertama mypointer amat dari niilai1, maka secara
yaitu ala
dibberikan allamat nilai1 dengan n tidak langsung nilai1 telah
menggunakan n tanda amp persand (&). dimodifiikasi. Begitu pula untuk nilai2.
Prrogram 13.2
#in
nclude<iostre
eam.h>
ussingnamespaacestd;
4
438 Direktoratt Pembinaan SM
MK | 2008
Pointer Bahasa Pemrorgraman
intmain()
{
intnilai1=5,nilai2=15;
int*p1,*p2;
p1=&nilai1; //p1=addressofnilai1
p2=&nilai2; //p2=addressofnilai2
*p1=10; //nilaipointedbyp1=10
*p2=*p1; //nilaipointedbyp2=nilaipointedbyp1
p1=p2; //p1=p2(nilaiofpointercopied)
*p1=20; //nilaipointedbyp1=20
cout<<"nilai1=="<<nilai1<<"/nilai2=="<<nilai2;
return0;
}
h e l l o \0
1702 1703 1704 1705 1706 1707
terry 1702
terry berisi nilai 1702 dan bukan 'h' terry[4] = '!'; *(terry+4) = '!';
atau "hello", walaupun 1702
menunjuk pada karakter tersebut. Penulisan terry[4] dan *(terry+4),
Sehingga jika akan dilakukan mempunyai arti yang sama. Jika
perubahan pada karakter 'o' diganti digambarkan:
dengan tanda '!' maka ekspresi yang
digunakan ada 2 macam :
h e l l ! \0
1702 1703 1704 1705 1706 1707
Program 13.3
include<iostream.h>
usingnamespacestd;
voidincrease(void*data,inttype)
{
switch(type)
{
casesizeof(char):(*((char*)data))++;break;
casesizeof(short):(*((short*)data))++;break;
casesizeof(long):(*((long*)data))++;break;
}
}
intmain()
{
chara=5;
shortb=9;
longc=12;
increase(&a,sizeof(a));
increase(&b,sizeof(b));
increase(&c,sizeof(c));
cout<<(int)a<<","<<b<<","<<c;
return0;
}
usingnamespacestd;
intaddition(inta,intb)
{return(a+b);}
intsubtraction(inta,intb)
{return(ab);}
int(*minus)(int,int)=subtraction;
intoperation(intx,inty,int(*functocall)(int,int))
{
intg;
g=(*functocall)(x,y);
return(g);
}
intmain()
{
intm,n;
m=operation(7,5,addition);
n=operation(20,m,minus);
cout<<n;
return0;
}
ya
ang menya atakan isi atau nila ai px=&x;
ariabel/data yang dittunjuk oleh
va h
po
ointer px . Sebagai coontoh jika y namun terdapat
t perrnyataan
be
ertipe int, maka sesudah dua a
pe
ernyataan beerikut y=*px;
ussingnamespaacestd;
4
444 Direktoratt Pembinaan SM
MK | 2008
Pointer Bahasa Pemrorgraman
main()
{ inty,x=87;
int*px;
px=&x;
y=*px;
cout<<"Alamatx=\n"<<&x;
cout<<"Isipx=\n"<<px;
cout<<"Isix=\n"<<x;
cout<<"Nilaiyangditunjukolehpx=\n"<<*px;
cout<<"Nilaiy=\n"<<y;
}
Mengakses isi suatu variabel melalui pointer. Tipe variabel pointer dan tipe
data yang ditunjuk harus sejenis
Program 13.6
#include<conio.h>
#include<iostream.h>
usingnamespacestd;
main()
{
int*pu;
intnu;
intu=1234;
pu=&u;
nu=*pu;
cout<<"Alamatdariu=\n"<<&u;
cout<<"Isipu=\n"<<pu;
cout<<"Isiu=\n"<<u;
cout<<"Nilaiyangditunjukolehpu=\n"<<*pu;
cout<<"Nilainu=\n"<<nu;
getch();
return0;
}
Program 13.7
#include<conio.h>
#include<iostream.h>
usingnamespacestd;
main()
{
intz=20,s=30;
int*pz,*ps;
pz=&z;
ps=&s;
*pz+=*ps;
cout<<"z=\n"<<z;
cout<<"s=\n"<<s;
getch();
return0;
}
Program 13.8
#include<conio.h>
#include<iostream.h>
usingnamespacestd;
main()
{
charc='Q';
char*char_pointer=&c;
cout<<"\n"<<c<<*char_pointer;
c='/';
cout<<"\n"<<c<<*char_pointer;
*char_pointer='(';
cout<<"\n"<<c<<*char_pointer;
getch();
return0;
}
Program 13.9
#include<conio.h>
#include<iostream>
usingnamespacestd;
intmain()
{
intx=1,y=2;
int*ip;
ip=&x;
y=*ip;
x=ip;
*ip=3;
cout<<"x="<<x;
cout<<"y="<<y;
getch();
return0;
}
Program 13.10
#include<conio.h>
#include<iostream>
usingnamespacestd;
main()
{
floatd=54.5f,*pd;
cout<<"Isidmulamula=\n"<<d;
pd=&d;
*pd+=10;
cout<<"Isidsekarang=\n"<<d;
getch();
return0;
}
Program 13.11
#include<conio.h>
#include<iostream>
usingnamespacestd;
main()
{
inti1,i2,*p1,*p2;
i1=9;
p1=&i1;
i2=*p1/22*3;
p2=p1;
cout<<"i1="<<i1;
cout<<"i2="<<i2;
cout<<"*p1="<<*p1;
cout<<"*p2="<<*p2;
getch();
return0;
}
Program 13.12
#include<conio.h>
#include<iostream>
usingnamespacestd;
main()
{
intcount=10,*temp,sum=7;
temp=&count;
*temp=32;
temp=∑
*temp=count;
sum=*temp*4;
cout<<"count=%d,*temp=%d,sum=%d\n"<<count<<*temp<<sum;
getch();
return0;
}
Program 13.13
#include<conio.h>
#include<iostream>
usingnamespacestd;
main()
{
intcount=13,sum=9,*x,*y;
x=&count;
*x=27;
y=x;
x=∑
*x=count;
sum=*x/2*3;
cout<<"count=%d,sum=%d,*x=%d,*y=%d\n"<<count<<sum<<*x<<*y;
getch();
return0;
}
Program 13.14
#include<conio.h>
#include<iostream>
usingnamespacestd;
intr,q=7;
intgo_crazy(int*,int*);
main()
{
int*ptr1=&q;
int*ptr2=&q;
2008 | Direktorat Pembinaan SMK 449
Bahasa Pemrograman Pointer
r=go_crazy(ptr1,ptr2);
cout<<"q=%d,r=%d,*ptr1=%d,*ptr2=%d\n"<<q<<r<<*ptr1<<*ptr2;
ptr2=&r;
go_crazy(ptr2,ptr1);
cout<<"q=%d,r=%d,*ptr1=%d,*ptr2=%d\n"<<q<<r<<*ptr1<<*ptr2;
}
intgo_crazy(int*p1,int*p2)
{
intx=5;
r=12;
*p2=*p1*2;
p1=&x;
return*p1*3;
}
Program 13.15
#include<conio.h>
#include<iostream>
usingnamespacestd;
intmain()
{
intnumbers[5];
int*p;
p=numbers;
*p=10;
p++;
*p=20;
p=&numbers[2];*p=30;
p=numbers+3;*p=40;
p=numbers;*(p+4)=50;
for(intn=0;n<5;n++)
cout<<numbers[n]<<",";
getch();
return0;
}
Program 13.16
#include<conio.h>
#include<iostream>
usingnamespacestd;
main()
{
/*pnegaramenunjukkonstantastring"INDONESIA"*/
char*pnegara="INDONESIA";
cout<<"Stringyangditunjukolehpnegara=";
puts(pnegara);//printf("%s\n",pnegara);
getch();
return0;
}
char*pnegara=INDONESIA;
pnegara
I N D O N E S I A \0
Program 13.17
#include<conio.h>
#include<iostream>
usingnamespacestd;
main()
{
staticinttgl_lahir[]={16,4,1974};
int*ptgl;
cout<<"\nNilaiyangditunjukolehptgl="<<*ptgl;
cout<<"\nNilaidaritgl_lahir[0]="<<tgl_lahir[0];
getch();
return0;
2008 | Direktorat Pembinaan SMK 453
Bahasa Pemrograman Pointer
2. Hubungan antara pointer dan array. Suatu nama array yang ditulis
tanpa dengan indeksnya menunjukkan alamat elemen pertama dari
array (versi 2).
Program 13.18
#include<conio.h>
#include<iostream>
usingnamespacestd;
main()
{
staticinttgl_lahir[]={16,4,1974};
int*ptgl,i;
ptgl=tgl_lahir;
printf("Nilaiyangditunjukolehptgl=%d\n",*ptgl);
for(i=0;i<3;i++)
printf("Nilaidaritgl_lahir[i]=%d\n",*(ptgl+i));
getch();
return0;
}
3. Hubungan antara pointer dan array. Suatu nama array yang ditulis
tanpa dengan indeksnya menunjukkan alamat elemen pertama dari
array (versi 3).
Program 13.19
#include<conio.h>
#include<iostream>
usingnamespacestd;
main()
{
staticinttgl_lahir[]={16,4,1974};
inti;
int*ptgl;
ptgl=tgl_lahir;
printf("Nilaiyangditunjukolehptgl=%d\n",*ptgl);
for(i=0;i<3;i++)
printf("Nilaidaritgl_lahir[i]=%d\n",*ptgl++);
454 Direktorat Pembinaan SMK | 2008
Pointer Bahasa Pemrorgraman
getch();
return0;
}
Program 13.20
#include<stdio.h>
#include<string.h>
#definePANJANG20
charnama1[PANJANG]="AHMAD";
charnama2[PANJANG]="RIFDA";
main()
{
charnamax[PANJANG];
puts("SEMULA:");
printf("nama1>%s\n",nama1);
printf("nama2>%s\n",nama2);
strcpy(namax,nama1);
strcpy(nama1,nama2);
strcpy(nama2,namax);
puts("KINI:");
printf("nama1>%s\n",nama1);
printf("nama2>%s\n",nama2);
}
printf("nama2>%s\n",nama2);
namax=nama1;
nama1=nama2;
nama2=namax;
puts("KINI:");
printf("nama1>%s\n",nama1);
printf("nama2>%s\n",nama2);
}
Program13.22.
main()
{
intnilai[10]={86,75,98,66,56,76,80,95,70,60};
intindex,*ip;
printf("Mencetakmenggunakanarray\n");
printf("Daftarnilaisiswa\n\n");
for(index=0;index<10;index++)
printf("%3d",nilai[index]);
puts("\n");
printf("Mencetakmenggunakanpointerdanindex\n");
printf("Daftarnilaisiswa\n\n");
for(index=0;index<10;index++)
printf("%3d",*(nilai+index));
puts("\n");
printf("Mencetakmenggunakanpointer\n");
printf("Daftarnilaisiswa\n\n");
ip=&nilai;
for(index=0;index<10;index++)
printf("%3d",*ip++);
}
namahari[0]berisialamatyang
menunjukkestringSenin.
namahari[1]berisialamatyang
menunjukkestringSelasa.
namahari[2]berisialamatyang
menunjukkestringRabu.
dansebagainya.
Gambar 13.12. Array pointer
Suatu pointer bisa saja menunjuk ke
Array pointer bisa diinisialisasi pointer lain. Gambar berikut
sewaktu pendeklarasian. Sebagai memberikan contoh mengenai
contoh: pointer menunjuk pointer.
staticchar*namahari[]=
program 13.23
#include<stdio.h>
main()
{
staticchar*days[]={"Sunday","Monday","Tuesday",
"Wednesday","Thursday", "Friday","Saturday"};
inti;
for(i=0;i<6;++i)
printf("%s\n",days[i]);
}
#include<stdio.h>
main()
{
inta,*b,**c;
a=155;
b=&a;
c=&b;
printf("Nilaia=%datau%datau%d\n",a,*b,**c);
printf("b=%p=alamatadimemori\n",b);
printf("c=%p=alamatbdimemori\n",c);
printf("alamatcdimemori=%p\n",&c);
}
printf("Nilaivar_x=**ptr2=%d\n\n",**ptr2);
printf("ptr1=&var_x=%p\n",ptr1);
printf("ptr2=&ptr1=%p\n",ptr2);
printf("&ptr2=%p\n",&ptr2);
}
Program 13.26.
#include<stdio.h>
main()
{
inta,*b,**c;
a=1975;
b=&a;
c=&b;
printf("Nilaia=%datau%datau%d\n",a,*b,**c);
printf("b=%p=alamatadimemori\n",b);
printf("c=%p=alamatbdimemori\n",c);
printf("alamatcdimemori=%p\n",&c);
}
Program 13.28. Fungsi dengan keluaran berupa pointer yang menunjuk string.
#include<stdio.h>
char*nama_bulan(intn);
main()
460 Direktorat Pembinaan SMK | 2008
Pointer Bahasa Pemrorgraman
{
intbl;
printf("Bulan1..12:");
scanf("%d",&bl);
printf("Bulanke%dadalah%s\n",bl,nama_bulan(bl));
}
char*nama_bulan(intn)
{
staticchar*bulan[]=
{
"Kodebulansalah",
"Januari",
"Februari",
"Maret",
"April",
"Mei",
"Juni",
"Juli",
"Agustus",
"September",
"Oktober",
"November",
"Desember"
};
return((n<1||n>12)?bulan[0]:bulan[n]);
}
main()
{
inty,x=87;/*x&ybertipeint*/
int*px;
/*varpointerygmenunjukkedatayangbertipeint*/
px=&x;/*pxdiisidgnalamatdarivariabelx*/
y=*px;/*ydiisidgnnilaiyangditunjukolehpx*/
printf("Alamatx=%p\n",&x);
printf("Isipx=%p\n",px);
printf("Isix=%d\n",x);
printf("Nilaiyangditunjukolehpx=%d\n",*px);
printf("Nilaiy=%d\n",y);
2008 | Direktorat Pembinaan SMK 461
Bahasa Pemrograman Pointer
Program 13.30. Mengakses isi suatu pointer dan tipe data yang ditunjuk
variabel melalui pointer. Tipe variabel harus sejenis.
#include<stdio.h>
main()
{
int*pu;
intnu;
intu=1234;
pu=&u;
nu=*pu;
printf("Alamatdariu=%p\n",&u);
printf("Isipu=%p\n",pu);
printf("Isiu=%d\n",u);
printf("Nilaiyangditunjukolehpu=%d\n",*pu);
printf("Nilainu=%d\n",nu);
}
#include<stdio.h>
main()
{
staticinttgl_lahir[]={16,4,1974};
int*ptgl;
printf("Nilaiyangditunjukolehptgl=%d\n",*ptgl);
462 Direktorat Pembinaan SMK | 2008
Pointer Bahasa Pemrorgraman
printf("Nilaidaritgl_lahir[0]=%d\n",tgl_lahir[0]);
}
#include<stdio.h>
main()
{
staticinttgl_lahir[]={16,4,1974};
int*ptgl,i;
ptgl=tgl_lahir;
printf("Nilaiyangditunjukolehptgl=%d\n",*ptgl);
for(i=0;i<3;i++)
printf("Nilaidaritgl_lahir[i]=%d\n",*(ptgl+i));
}
#include<stdio.h>
main()
{
staticinttgl_lahir[]={16,4,1974};
inti;
int*ptgl;
ptgl=tgl_lahir;
printf("Nilaiyangditunjukolehptgl=%d\n",*ptgl);
for(i=0;i<3;i++)
printf("Nilaidaritgl_lahir[i]=%d\n",*ptgl++);
}
#include<stdio.h>
#include<string.h>
#definePANJANG20
charnama1[PANJANG]="GATUTKACA";
charnama2[PANJANG]="HANOMAN";
main()
2008 | Direktorat Pembinaan SMK 463
Bahasa Pemrograman Pointer
{
charnamax[PANJANG];
puts("SEMULA:");
printf("nama1>%s\n",nama1);
printf("nama2>%s\n",nama2);
strcpy(namax,nama1);
strcpy(nama1,nama2);
strcpy(nama2,namax);
puts("KINI:");
printf("nama1>%s\n",nama1);
printf("nama2>%s\n",nama2);
}
char*nama1="GATUTKACA";
char*nama2="HANOMAN";
main()
{
char*namax;
puts("SEMULA:");
printf("nama1>%s\n",nama1);
/*nama1adlpointerygmenunjukkestringGATUTKACA*/
printf("nama2>%s\n",nama2);
/*nama2adlpointerygmenunjukkestringHANOMAN*/
namax=nama1;
nama1=nama2;
nama2=namax;
puts("KINI:");
printf("nama1>%s\n",nama1);
printf("nama2>%s\n",nama2);
}
printf("Nilaia=%datau%datau%d\n",a,*b,**c);
printf("b=%p=alamatadimemori\n",b);
printf("c=%p=alamatbdimemori\n",c);
printf("alamatcdimemori=%p\n",&c);
}
voidnaikkan_nilai(int*x,int*y)
{
*x=*x+2;
*y=*y+2;
}
Program 13.40. Fungsi dengan keluaran berupa pointer yang menunjuk string.
#include<stdio.h>
char*nama_bulan(intn);
main()
{
intbl;
printf("Bulan1..12:");
scanf("%d",&bl);
printf("Bulanke%dadalah%s\n",bl,nama_bulan(bl));
}
char*nama_bulan(intn)
{
staticchar*bulan[]=
{
"Kodebulansalah",
"Januari",
"Februari",
"Maret",
"April",
"Mei",
"Juni",
"Juli",
"Agustus",
"September",
"Oktober",
"November",
"Desember"
};
return((n<1||n>12)?bulan[0]:bulan[n]);
}
classA
{
private:
public:staticvoidWriteString(char*String);
};
voidA::WriteString(char*String)
{
printf("A::WriteString():%s",String);
}
classB
{
private:
public:voidFunc(void(*Writer)(char*str));
};
voidB::Func(void(*Writer)(char*str))
{
Writer("classBwriting\"hello...!\"");
}
intmain(void)
{
A*a=newA;
B*b=newB;
b>Func(a>WriteString);
deletea;
deleteb;
}
classA
{
private:intprivatenumber;
public:staticvoidWriteString(char*String);
};
voidA::WriteString(char*String)
{
printf("A::privatenumber=%d",privatenumber);
printf("A::WriteString():%s",String);
}
classA
{
private:intprivatenumber;
public:staticvoidWriteString(char*String,A*Self);
};
voidA::WriteString(char*String,A*Self)
{
printf("A::privatenumber=%d\n",Self>privatenumber);
printf("A::WriteString():%s",String);
}
classB
{
private:
public:voidFunc(void(*Writer)(char*str,A*Self),A*NeedToPass);
};
voidB::Func(void(*Writer)(char*str,A*Self),A*NeedToPass)
{
Writer("classBwriting\"hello...!\"",NeedToPass);
}
intmain(void)
{
A*a=newA;
B*b=newB;
b>Func(a>WriteString,a);
deletea;
deleteb;
}
#include<iostream>
usingstd::cout;
usingstd::endl;
classSomeMumboJumboClass{
inti;
public:
voida_method();
SomeMumboJumboClass(intp):i(p){}
};
voidSomeMumboJumboClass::a_method(){
cout<<"themumbojumboclasshasamembervariablewithvalue="<<i<<
endl;
}
typedefvoid(SomeMumboJumboClass::*MemberFunctionptr)();//inicara
mendekrarasikantypedefdarinonstaticmemberfunction
intmain(){
SomeMumboJumboClassc(2);//deklarasikansebuahobjek
void(SomeMumboJumboClass::*the_mem_fun_ptr)();
the_mem_fun_ptr=&SomeMumboJumboClass::a_method;
c.a_method();//pemanggilantanpafunctionpointer
(c.*the_mem_fun_ptr)();//pemanggilandenganfunctionpointer
SomeMumboJumboClass*d=newSomeMumboJumboClass(3);//iniadalah
pointerkeobjek
d>a_method();//pemanggilannormal
(d>*the_mem_fun_ptr)();//pemanggilandenganpointerfungsi
MemberFunctionptrthe_mem_fun_ptr2=
&SomeMumboJumboClass::a_method;//deklarasidandefinisimemberfunction
pointer
(c.*the_mem_fun_ptr2)();//bisadigunakansepertiini
(d>*the_mem_fun_ptr2)();//atausepertiini
deleted;
}
BAB 14
CLASS
Program 14.1
#include<conio.h>
#include<iostream>
usingnamespacestd;
classCRectangle{
intx,y;
public:
voidset_values(int,int);
intarea(void){return(x*y);}
};
voidCRectangle::set_values(inta,intb){
x=a;
y=b;
}
intmain(){
CRectanglerect;
rect.set_values(3,4);
cout<<"area:"<<rect.area();
getch();
2008 | Direktorat Pembinaan SMK 475
return0;
}
Program 14.2
#include<conio.h>
#include<iostream>
usingnamespacestd;
classCRectangle{
intx,y;
public:
voidset_values(int,int);
intarea(void){return(x*y);}
};
voidCRectangle::set_values(inta,intb){
x=a;
y=b;
}
intmain(){
CRectanglerect,rectb;
rect.set_values(3,4);
rectb.set_values(5,6);
cout<<"rectarea:"<<rect.area()<<endl;
cout<<"rectbarea:"<<rectb.area()<<endl;
getch();
return0;
}
Perhatikan pemanggilan };
rect.area() tidak memberikan hasil
yang sama dengan pemanggilan
rectb.area(). Ini disebabkan karena Class dapat mendefinisikan data
objek dari class CRectangle member berupa reference ke tipe
mempunyai variable sendiri, x dan y, dirinya, perhatikan contoh dibawah
dan fungsi set_value() dan area(). ini:
Class terdiri dari dua bagian,
yaitu: Class head yaitu kata kunci
class diikuti oleh nama kelas dan classlinkScreen{
Class body yaitu class yang diapit screenwindow;
kurung kurawal { }, diikuti tkita titik linkScreen*next;
koma atau daftar deklarasi. Misalnya: linkScreen*prev;
};
classscreen(/*.*/);
classscreen(/*.*/)s1,s2; Member functions dari suatu kelas
tidak dideklarasikan di dalam class
Dalam class body ditentukan body. perhatikan contoh dibawah ini:
data members, member function dan
tingkat-tingkat dari information
hidding. Deklarasi untuk data classScreen{
members sama dengan deklarasi
untuk variabel, kecuali bahwa Public:
inisialisasi eksplisit tidak
voidhome(){cursor=scr;}
diperbolehkan.
voidmove(int,int);
Perhatikan contoh dibawah ini:
charget(){return*cusor;}
classscreen{ charget(int,int);
//heightdanwidthmenyatakanjumlah voidcheckRange(int,int);
kolom
//crusormenunjukkanposisiscreen };
sekarang
//scrmenunjukkearrayheight*width
Member function yang didefinisikan di
Program 14.3
#include"screen.h"
#include<iostream.h>
#include<stdlib.h>
usingnamespacestd;
voidscreen::checkRange(introw,intcol)//validasikoordinat
{
if(row<1||row>height||col<1||col>width)
{
cerr<<"Koordinatscreen("<<row<<","<<col<<")keluarbatas\n";exit(
1);
}
}
Program 14.4
#include<conio.h>
#include<iostream>
#include<string.h>
usingnamespacestd;
structsiswaSMK
{
charnis[12];
charnama[25];
intumur;
};
voidmain()
{
siswaSMKsiswakls3;
strcpy(siswakls3.nis,"95514060");
strcpy(siswakls3.nama,"Suprapto");
siswakls3.umur=20;
cout<<siswakls3.nis<<endl;
cout<<siswakls3.nama<<endl;
cout<<siswakls3.umur<<endl;
getch();
return0;
}
Program 14.5
#include<conio.h>
#include<iostream>
#include<string.h>
usingnamespacestd;
classsiswaSMK
{
charnis[12];charnama[25];
intumur;
};
voidmain()
{
siswaSMKsiswakls3;
strcpy(siswakls3.nis,"95514060");
strcpy(siswakls3.nama,"Suprapto");
siswakls3.umur=20;
cout<<siswakls3.nis<<endl;
cout<<siswakls3.nama<<endl;
cout<<siswakls3.umur<<endl;
getch();
return0;
}
Program 14.6
#include<conio.h>
#include<iostream>
#include<string.h>
usingnamespacestd;
classsiswaSMK
{
charnis[12];charnama[25];
intumur;
};
voidmain()
{
siswaSMKsiswakls3;
strcpy(siswakls3.nis,"95514060");
strcpy(siswakls3.nama,"suprapto");
siswakls3.umur=20;
cout<<siswakls3.nis<<endl;
cout<<siswakls3.nama<<endl;
cout<<siswakls3.umur<<endl;
getch();
return0;
}
Program 14.7
include<iostream>
#include<conio.h>
#include<string.h>
usingnamespacestd;
classsiswaSMK
{private:
charnis[12];
charnama[25];
intumur;
};
intmain()
{
siswaSMKsiswakls3;
strcpy(siswakls3.nis,"95514060");
strcpy(siswakls3.nama,"suprapto");
siswakls3.umur=20;
cout<<siswakls3.nis<<endl;
cout<<siswakls3.nama<<endl;
cout<<siswakls3.umur<<endl;
getch();
return0;
}
nis, nama, dan umur dalam class Selain data anggota, kita juga dapat
siswaSMK disebut data anggota. menambahkan fungsi anggota.
Program 14.7
#include<iostream>
#include<conio.h>
#include<string.h>
usingnamespacestd;
classsiswaSMK
{
private:
charnis[12];
charnama[25];
intumur;
public:
voidinisialisasi(char*NISSIS,char*NAMASIS,intUMURSIS)
{
strcpy(nis,NISSIS);
strcpy(nama,NAMASIS);
umur=UMURSIS;
}
voidtampilkan()
{
cout<<nis<<endl;
cout<<nama<<endl;
cout<<umur<<endl;
}
};
voidmain()
{
siswaSMKsiswakls3;
siswakls3.inisialisasi("95514060","Suprapto",20);
siswakls3.tampilkan();
}
nama, umur) dibuat private. Mungkin akan diperoleh hasil yang sama
Kita berpikir mengapa program dengan program sebelumnya.
terakhir terlalu panjang, padahal
Program 14.8
#include<iostream.h>
#include<conio.h>
#include<string.h>
classsis
{
private:
charnis[12];
charnama[25];
intumur;
public:
voidinisialisasi(char*NISSIS,char*NAMASIS,intUMURSIS);
voidtampilkan();
};
voidmain()
{
sissiswakls3;
siswakls3.inisialisasi("95514060","Suprapto",20);
siswakls3.tampilkan();
}
voidsis::inisialisasi(char*NISSIS,char*NAMASIS,intUMURSIS)
{
strcpy(nis,NISSIS);
strcpy(nama,NAMASIS);
umur=UMURSIS;
}
voidsis::tampilkan()
{
cout<<nis<<endl;
cout<<nama<<endl;
cout<<umur<<endl;
}
Cara kedua inilah yang sering dipilih ini contoh-contoh program yang
oleh para programmer C++. Berikut memanfaatkan class
classsiswaSMK
{
public:
charnis[20];
charnama[50];
intumur;
voidtampilkan(char*NISSIS,char*NAMASIS,intUMURSIS)
{
cout<<"NISSIS:"<<NISSIS<<endl;
cout<<"NAMASIS:"<<NAMASIS<<endl;
cout<<"UMUR:"<<UMURSIS<<endl;
}
};
voidmain()
{
siswaSMKsiswakls3[50]; //tipedataarray
chartemp[10];intn,i;
clrscr();
cout<<"<<ENTRIDATASISWASMKD3"<<endl;
cout<<endl;
cout<<"JumlahsiswaSMK:";
cin.getline(temp,sizeof(temp));
n=atoi(temp);
for(i=0;i<=n1;i++)
{
cout<<"DATA"<<i+1<<endl;
cout<<"NISSISWASMK:";
cin.getline(siswakls3[i].nis,sizeof(siswakls3[i].nis));
cout<<"NAMASISWASMK:";
cin.getline(siswakls3[i].nama,sizeof(siswakls3[i].nama));
cout<<"UMUR:";
cin.getline(temp,sizeof(temp));
2008 | Direktorat Pembinaan SMK 485
siswakls3[i].umur=atoi(temp);
cout<<endl;
}
//tampilkansemuadata
cout<<""<<endl;
cout<<"DATAYANGMASUK"<<endl;
cout<<""<<endl;
for(i=0;i<=n1;i++)
{
cout<<"DATASISWASMK"<<i+1<<endl;
siswakls3[i].tampilkan(siswakls3[i].nis,siswakls3[i].nama,
siswakls3[i].umur);
cout<<endl;
}
getch();
}
Program 14.10
#include<iostream>
classCRectangle{
intwidth,height;
public:
CRectangle(int,int);
intarea(void){return(width*height);}
};
CRectangle::CRectangle(inta,intb){
width=a;
height=b;
}
intmain(){
CRectanglerect(3,4);
CRectanglerectb(5,6);
cout<<"rectarea:"<<rect.area()<<endl;
cout<<"rectbarea:"<<rectb.area()<<endl;
}
Program 14.11
#include<iostream.h>
classCRectangle{
int*width,*height;
public:
CRectangle(int,int);
~CRectangle();
intarea(void){return(*width**height);}
};
CRectangle::CRectangle(inta,intb){
width=newint;
height=newint;
*width=a;
*height=b;
}
CRectangle::~CRectangle(){
deletewidth;
2008 | Direktorat Pembinaan SMK 487
deleteheight;
}
intmain(){
CRectanglerect(3,4),rectb(5,6);
cout<<"rectarea:"<<rect.area()<<endl;
cout<<"rectbarea:"<<rectb.area()<<endl;
return0;
}
Program 14.12
#include<iostream.h>
classCRectangle{
intwidth,height;
public:
CRectangle();
CRectangle(int,int);
intarea(void){return(width*height);}
};
CRectangle::CRectangle(){
width=5;
height=5;
}
CRectangle::CRectangle(inta,intb){
width=a;
height=b;
}
intmain(){
CRectanglerect(3,4);
CRectanglerectb;
cout<<"rectarea:"<<rect.area()<<endl;
cout<<"rectbarea:"<<rectb.area()<<endl;
}
yang akan Kita gunakan dalam class. record dari siswa. Jika kita telah
Dalam pendefinisian class, dituliskan: mengidentifikasikan tujuan dari
pembuatan class, maka dapat
<modifier>class<name>{ dilakukan emberian nama yang
<attributeDeclaration>* sesuai. Nama yang tepat pada class
<constructorDeclaration>* ini adalah StudentRecord. Untuk
<methodDeclaration>* mendefinisikan class, kita tuliskan :
}
publicclassStudentRecord
dimana: <modifier> adalah sebuah {
access modifier, yang dapat //areapenulisankode
dikombinasikan dengan tipe modifier selanjutnya
lain. }
Pada bagian ini, kita akan
membuat sebuah class yang berisi
Dimana,
Public Classinidapatdiaksesdariluarpackage
Class Keywordyangdigunakanuntukpembuatanclass(Java)
StudentRecord Identifieryangmenjelaskanclass
privateintage; {
privatedoublemathGrade; privateStringname;
privatedoubleenglishGrade; privateStringaddress;
privatedoublescienceGrade; privateintage;
privatedoubleaverage; privatedoublemathGrade;
privatedoubleenglishGrade;
private disini menjelaskan privatedoublescienceGrade;
bahwa variabel tersebut hanya dapat privatedoubleaverage;
diakses oleh class itu sendiri. Object privatestaticintstudentCount;
lain tidak dapat menggunakan //areapenulisankode
variabel tersebut secara langsung. selanjutnya
Kita akan membahas tentang }
kemampuan akses pada
pembahasan selanjutnya. Disamping Sebelum kita membahas method
instance variable, kita juga dapat apa yang akan dipakai pada class,
mendeklarasikan class variable atau mari kita erhatikan penulisan method
variabel yang dimiliki class secara umum. Dalam pendeklarasian
sepenuhnya. Nilai pada variabel ini method, kita tuliskan :
sama pada semua object di class
yang sama. <modifier><returnType>
Anggaplah kita menginginkan
<name>(<parameter>*){
jumlah dari siswa yang dimiliki dari
<statement>*
seluruh class, kita dapat
mendeklarasikan satu static variable }
yang akan menampung nilai tersebut.
Kita beri nama variabel tersebut dimana,
dengan nama studentCount. Berikut <modifier>dapatmenggunakan
penulisan static variable: beberapamodifieryangberbeda
<returnType>dapatberupaseluruhtipe
publicclassStudentRecord data,termasukvoid
{ <name>identifieratasclass
<parameter> ::= <tipe_parameter>
//areadeklarasiinstancevariables <nama_parameter>[,]
privatestaticintstudentCount;
//areapenulisankodeselanjutnya Untuk mengimplementasikan
} enkapsulasi, kita tidak menginginkan
sembarang object dapat mengakses
Kita gunakan keyword : static untuk data kapan saja. Untuk itu, kita
mendeklarasikan bahwa variabel deklarasikan atribut dari class
tersebut adalah static. Maka sebagai private. Namun, ada kalanya
keseluruhan kode yang dibuat terlihat dimana kita menginginkan object lain
sebagai berikut : untuk dapat mengakses data private.
Dalam hal ini kita gunakan accessor
publicclassStudentRecord methods.
dimana, publicclassStudentRecord
publicMenjelaskanbahwamethodini {
dapatdipanggilobjectluarclass privatestaticintstudentCount;
voidMethodinitidakmenghasilkan publicstaticint
returnvalue getStudentCount(){
setNameNamadarimethod returnstudentCount;
(Stringtemp)Parameteryangakan }
digunakanpadamethod }
Program 14.13
publicclassStudentRecord
{
privateStringname;
privateStringaddress;
privateintage;
privatedoublemathGrade;
privatedoubleenglishGrade;
privatedoublescienceGrade;
privatedoubleaverage;
privatestaticintstudentCount;
/**
*MenghasilkannamadariSiswa
*/
publicStringgetName(){
returnname;
}
/**
*Mengubahnamasiswa
*/
publicvoidsetName(Stringtemp){
name=temp;
}
//areapenulisankodelain
/**
*MenghitungrataratanilaiMatematik,**Ilmu Pasti
*/
publicdoublegetAverage(){
doubleresult=0;
result=(mathGrade+englishGrade+scienceGrade)/3;
returnresult;
}
/**
*MenghasilkanjumlahinstanceStudentRecord
*/
publicstaticintgetStudentCount(){
returnstudentCount;
}
}
publicvoidsetAge(intage){ this.<namaInstanceVariable>
age=age;//SALAH!!!
} Sebagai contoh, kita dapat menulis
ulang kode hingga tampak sebagai
Nama parameter pada deklarasi ini berikut:
adalah age, yang memiliki penamaan
yang sama dengan instance variable publicvoidsetAge(intage){
age. Parameter age adalah deklarasi this.age=age;
terdekat dari method, sehingga nilai }
dari parameter tersebut akan
digunakan. Maka pada pernyataan : Method ini akan mereferensikan
nilai dari parameter age kepada
age=age; instance variable dari object
StudentRecord.
Program 14.14
publicvoidprint(Stringtemp){
System.out.println("Name:"+name);
System.out.println("Address:"+address);
System.out.println("Age:"+age);
}
publicvoidprint(doubleeGrade,doublemGrade,doublesGrade)
System.out.println("Name:"+name);
System.out.println("MathGrade:"+mGrade);
System.out.println("EnglishGrade:"+eGrade);
System.out.println("ScienceGrade:"+sGrade);
}
Program 14.15
publicstaticvoidmain(String[]args)
{
StudentRecordannaRecord=newStudentRecord();
annaRecord.setName("Anna");
annaRecord.setAddress("Philippines");
annaRecord.setAge(15);
annaRecord.setMathGrade(80);
annaRecord.setEnglishGrade(95.5);
annaRecord.setScienceGrade(100);
//overloadedmethods
annaRecord.print(annaRecord.getName());
annaRecord.print(annaRecord.getEnglishGrade(),
annaRecord.getMathGrade(),
annaRecord.getScienceGrade());
}
Name:Anna
Address:Philippines
Age:15
Program 14.16
publicStudentRecord(){
2008 | Direktorat Pembinaan SMK 497
//areainisialisasikode;
}
publicStudentRecord(Stringtemp){
this.name=temp;
}
publicStudentRecord(Stringname,Stringaddress){
this.name=name;
this.address=address;
}
publicStudentRecord(doublemGrade,doubleeGrade,doublesGrade){
mathGrade=mGrade;
englishGrade=eGrade;
scienceGrade=sGrade;
}
publicstaticvoidmain(String[]args)
{
//membuat3objek
StudentRecordannaRecord=newStudentRecord("Anna");
StudentRecordbeahRecord=newStudentRecord("Beah","Philippines");
StudentRecordcrisRecord=newStudentRecord(80,90,100);
//areapenulisankodeselanjtunya
}
Sebelum kita lanjutkan, mari kita nilai dari studentCount setiap kali
perhatikan kembali deklarasi variabel setiap pembentukan object pada
static studentCount yang telah dibuat class StudentRecord. Lokasi yang
sebelumnya. Tujuan deklarasi tepat untuk memodifikasi dan
studentCount adalah untuk menambahkan nilai studentCount
menghitung jumlah object yang terletak pada constructor-nya, karena
dibentuk pada class StudentRecord. selalu dipanggil setiap kali objek
Jadi, apa yang akan kita lakukan terbentuk. Perhatikan contoh sebagai
selanjutnya adalah menambahkan berikut:
Program 14.17
publicStudentRecord(){
//letakkodeinisialisasi
studentCount++;//menambahstudent
}
publicStudentRecord(Stringtemp){
this.name=temp;
studentCount++;//menambahstudent
498 Direktorat Pembinaan SMK | 2008
}
publicStudentRecord(Stringname,Stringaddress){
this.name=name;
this.address=address;
studentCount++;//menambahstudent
}
publicStudentRecord(doublemGrade,doubleeGrade,doublesGrade){
mathGrade=mGrade;
englishGrade=eGrade;
scienceGrade=sGrade;
studentCount++;//menambahstudent
}
Program 14.18
publicStudentRecord(){
this("somestring");
publicStudentRecord(Stringtemp){
this.name=temp;
}
publicstaticvoidmain(String[]args)
{
StudentRecordannaRecord=newStudentRecord();
}
Program 14.19
#include<iostream>
#include<conio.h>
usingnamespacestd;
classPegawai
{public:
charnip[35];
charnama[25];
2008 | Direktorat Pembinaan SMK 501
intumur;
};
voidmain()
{
Pegawaiproduksi,akuntansi;
strcpy(produksi.nip,"200322");
trcpy(produksi.nama,"Wijaya");
produksi.umur=35;
cout<<"=================================="<<endl;
cout<<"NIP =",cout<<produksi.nip<<endl;
cout<<"NAMA =",cout<<produksi.nama<<endl;
cout<<"UMUR =",cout<<produksi.umur<<endl;
cout<<"=================================="<<endl;
akuntansi=produksi;
cout<<"NIP =",cout<<akuntansi.nip<<endl;
cout<<"NAMA =",cout<<akuntansi.nama<<endl;
cout<<"UMUR =",cout<<akuntansi.umur<<endl;
cout<<"=================================="<<endl;
}
Program 14.20
#include<iostream>
#include<conio.h>
usingnamespacestd;
classPegawai
{public:
charnip[6];
charnama[25];
intumur;
voidisidata(char*nip,char*nama,intumur)
{strcpy(nip,nip);
strcpy(nama,nama);
umur=umur;}
voidtampil_biodata();
{
cout<<endl;
cout<<"============================="<<endl;
cout<<"NIP :"<<nip<<endl;
cout<<"NAMA :"<<nama<<endl;
cout<<"UMUR :"<<umur<<endl;
cout<<"============================="<<endl;}
};
voidmain()
{
PegawaiAkuntansi
cout<<"INPUTKANDATAKARYAWAN"<<endl;
cout<<"NIP(6)=",cin>>Akuntansi.nip;
cout<<"NAMA(20)=",cin>>Akuntansi.nama;
cout<<"UMUR(2)=",cin>>Akuntansi.umur;
Akuntansi.isidata(Akuntansi.nip,Akuntansi.nama,Akuntansi.umur);
Akuntansi.tampil_biodata();
}
Program 14.21
#include<iostream>
#include<conio.h>
usingnamespacestd;
classcontoh
{public:
intx;
inty;
inttambah()
{
cout<<(x+y)<<endl;;
return0;}
intkali()
{
cout<<(x*y)<<endl;
}
};
voidmain()
{
contohhitung;
cout<<"Masukanx?",cin>>hitung.x;
cout<<"Masukany?",cin>>hitung.y;
cout<<"Hasilx+y=",
2008 | Direktorat Pembinaan SMK 503
tambah();
cout<<"Hasilx*y=",
hitung.kali();
getch()
}
PemrogramanBerorientasiObjek BahasaPemrorgraman
BAB 15
PEMROGRAMAN BERORIENTASI OBJEK
BahasaPemrograman PemrogramanBerorientasiObjek
PemrogramanBerorientasiObjek BahasaPemrorgraman
BahasaPemrograman PemrogramanBerorientasiObjek
Class
The second instance
Desain Template
Blue print
n ...... instance
Ada empat ciri-ciri atau karakteristik komputer kita harus menentukan ciri-
bahasa Pemrograman Berorientasi ciri / sifat-sifat yang penting yang
Objek, antara lain: perlu direpresentasikan ke dalam
sistem komputer. Ciri-ciri yang dipilih
15.3.1. Abstraksi bergantung dari apa yang akan kita
Untuk memproses sesuatu dari lakukan di dalam sistem tersebut dan
dunia nyata dengan menggunakan tergantung dari sudut pkitang yang
melihatnya. Misalnya pada sebuah
508 Direktorat Pembinaan SMK | 2008
PemrogramanBerorientasiObjek BahasaPemrorgraman
BahasaPemrograman PemrogramanBerorientasiObjek
Binatang
Mamalia Reptile
Dari hirarki diatas dapat dilihat dimiliki oleh class binatang, karena
bahwa, semakin kebawah, class sebagai class turunannya, ia akan
akan semakin bersifat spesifik. Class mendapatkan karakteristik dari class
mamalia memiliki seluruh sifat yang binatang secara otomatis. Demikian
dimiliki oleh binatang, demikian juga dengan class anjing, kucing dan
halnya juga Anjing, kucing dan monyet, hanya perlu mendefinisikan
Monyet memiliki seluruh sifat yang karakteristik yang spesifik dimiliki
diturunkan dari class mamalia. oleh classnya masing-masing.
Dengan konsep ini, karakteristik yang Dengan memanfaatkan konsep
dimiliki oleh class binatang cukup pewarisan ini dalam pemrograman,
didefinisikan didefinisikan dalam maka hanya perlu mendefinisikan
class binatang saja. karakteristik yang lebih umum akan
Class mamalia tidak perlu didapatkan dari class darimana ia
mendefinisikan ulang apa yang telah diturunkan.
PemrogramanBerorientasiObjek BahasaPemrorgraman
BahasaPemrograman PemrogramanBerorientasiObjek
bagian lain dari objek mungkin apa yang harus dilakukan oleh
berubah-ubah. Hal ini dapat, programmer.
misalnya, untuk membantu Dalam bahasa C++ implementasi
menegakkan tertentu secara eksplisit pada sebuah cart akan
invariants tentang beberapa data memungkinkan pengguna
dalam obyek yang sama tinggal menyatakan sebuah kasus kelas
melalui masa objek. Dalam beberapa baru sebagai salah satu const
bahasa, hal ini dilakukan dengan kata (immutable) atau mutable, seperti
kunci (misalnya "const" di C++, "final" yang dikehendaki, dengan
di Java) yang mana dirancang pada menyediakan dua versi yang berbeda
field dari obyek yang immutable. dari getItems () method. (Perhatikan
Keimmutablean tidak bahwa dalam C + + itu tidak
menyiratkan bahwa sebagai objek diperlukan dan bahkan mustahil -
yang disimpan dalam memori untuk menyediakan constructor
komputer unwriteable. Sebaliknya, khusus untuk kasus const.) Template
keimmutablean adalah kompilasi <typename T>. perhatikan potongan
waktu membangun dan menunjukkan program dibawah ini:
Program 15.1
classCart{
private:
std::vector<T>items;
public:
Cart(conststd::vector<T>&v):items(v){}
std::vector<T>&getItems(){returnitems;}
conststd::vector<T>&getItems()
const{returnitems;}
inttotal()
const{/*returnsumoftheprices*/}
};
PemrogramanBerorientasiObjek BahasaPemrorgraman
BahasaPemrograman PemrogramanBerorientasiObjek
Program 15.2
interfaceXclass{
publicvoidwhataMethod();
}
publicclassAclassimplementsXclass{
publicvoidwhataMethod(){
...//diimplementasikandisini
}
}
publicclassBclassimplementsXclass{
publicvoidwhataMethod(){
...//diimplementasikandisini
}
}
classMainclass{
Xclassa,b;
staticpublicvoidmain(String[]a){
a=newAclass();
b=newBclass();
a.whataMethod();
b.whataMethod();
}
}
PemrogramanBerorientasiObjek BahasaPemrorgraman
berprioritas paling tinggi lah yang alterntifnya data yang di ambil satu
diperoleh. demi satu di taruh dari kiri ke kanan
Dalam pengembangannya elemen-elemen array.
pertama kali adalah Terdapat sejumlah metoda
memformulasikan konsep operasi yang menjadi 'interface': bagi
abstraksnya tanpa harus memikirkan pemakai kelas obyek ini.
tipe datanya, apalagi implementasi mengkonstruksikan PQ yang
rincinya. Implementasinya sendiri diinisialisasi kosong
dapat dilakukan dalam dua PQ=newPriorityQueue();
representasi level bawah yang mendapatkan ukuran (jumlah item
berbeda: array atau linked-list yang data) dalam PQ,
dapat belakangan kita buat. n=PQ.size();
Banyak ditemukan dalam menyisipkan item baru dalam PQ,
masalah-masalah penjadwalan, PQ.insert(X);
misalnya untuk sistem antrian untuk bila PQ tidak kosong, menghapus
pelayanan pasien dalam ruang item dengan prioritas tertinggi
praktek dokter, penjadwalan dalam PQ
pembayaran tagihan, dsb. Prioritas
X=PQ.remove();
bisa didefinisikan dalam beberapa
aspek. PQ dapat digunakan juga
Secara sepintas bisa diketahui
untuk pengurutan data kengan key
bahwa terdapat suatu proses internal
data sebagai harga prioritas:
(yang tidak perlu diketahui oleh user)
sejumlah data tak terurut dimasukkan
di dalam skema ini yaitu pengurutan
ke dalam PQ lalu setelah semua
item data. Implementasi bagaimana
masuk satu demi satu data diambil
pun user "tidak perduli". Contoh
dari PQ. Pada pengurutan menaik
penggunaan dalam metoda
maka data yang diambil ditaruh dari
pengurutan data berdasarkan Priority
kanan ke kiri elemen-elemen array.
Queue:
Pada pengurutan menurun harga key
bisa kebalikan dari harga prioritas,
Program 15.3
voidpriorityQueueSort(ComparisonKey[]A){
intn=A.length;
PriorityQueuePQ=newPriorityQueue();//create&inisialisasiPQ
for(inti=0;i<n;i++)PQ.insert(A[i]);//mengisiPQ
for(inti=n1;i>=0;i)A[i]=PQ.remove();//mengambilsatu/satu
}
BahasaPemrograman PemrogramanBerorientasiObjek
Program 15.4
publicclassPQItemimplementsComparisonKey{
privateintkey;
PQItem(intvalue){
key=value;
}
publicStringtoString(){
returnInteger.toString(key);
}
publicintcompareTo(ComparisonKeyvalue){
inta=this.key;
intb=((PQItem)value).key;
return((a==b)?0:((a>b)?1:1));
}
}
Pada level yang lebih rendah Saat item data masuk dalam PQ
kelas priority queue ini dapat maka langsung ditempatkan pada
diimplementasikan baik dengan array posisi yang sesuai dalam urutan
atau dengan linked list, dimana hal menurun (dilakukan pencarian
tersebut dijelaskan sebagai berikut: posisi terlebih dulu lalu dilakukan
Versi Implementasi Unsorted insert), dan saat di-remove maka
Array (berukuran dinamis) cukup dilakukan delete-first (node
PQ menyimpan item data dalam pertama yang diambil.
suatu array yang apabila penuh Kedua implementasi tersebut
panjangnya dapat diperbesar berfungsi sama tapi dengan
secara otomatis. Item data masuk implementasi yang berbeda namun
begitu saja di bagian belakang. sekali lagi user melihatnya sesuai
Saat di-remove maka item data dengan abstraksi spesifikasi PQ yang
dengan key terbesar dicari ditentukan. Dalam prakteknya maka
(dilakukan sequential search). Key kedua versi itu bisa dipilih tanpa
yang diremove tempatnya mengubah modul-modul pemakainya
digantikan oleh key yang paling selama spesifikasinya ditaati.
belakang (tidak melakukan Selain implementasinya yang
pergeseran!) bisa berbeda tanpa mengubah
Versi Implementasi Sorted Linked- rancangan modul tingkat di atasnya,
list representasi key data pun dapat
diimplementasikan secara berbeda
516 Direktorat Pembinaan SMK | 2008
PemrogramanBerorientasiObjek BahasaPemrorgraman
Program 15.5
classPQItemimplementsComparisonKey{
privateStringkey;
PQItem(Stringvalue){
key=value;
}
publicStringtoString(){
returnkey;
}
publicintcompareTo(ComparisonKeyvalue){
Stringa=this.key;
Stringb=((PQItem)value).key;
returna.compareTo(b); //metodacompareTodalamkelasString
}
}
BahasaPemrograman PemrogramanBerorientasiObjek
15.7. Interface
Interface adalah jenis khusus mengimplementasikan method yang
dari blok yang hanya berisi method sama. Melalui interface-interface, kita
signature(atau constant ). Interface dapat menangkap kemiripan diantara
mendefinisikan sebuah(signature) class yang tidak berhubungan tanpa
dari sebuah kumpulan method tanpa membuatnya seolah-olah class yang
tubuh. Interface mendefinisikan berhubungan.Mari kita ambil contoh
sebuah cara stkitar dan umum dalam class Line dimana berisi method yang
menetapkan sifat-sifat dari class- menghitung panjang dari garis dan
class. Mereka menyediakan class- membandingkan object Line ke
class, tanpa memperhatikan object dari class yang sama.
lokasinya dalam hirarki class, untuk Sekarang, misalkan kita punya class
mengimplementasikan sifat-sifat yang yang lain yaitu MyInteger dimana
umum. Dengan catatan bahwa berisi method yang membandingkan
interface-interface juga menunjukkan object MyInteger ke object dari class
polimorfisme, dikarenakan program yang sama.
dapat memanggil method interface Seperti yang kita lihat disini,
dan versi yang tepat dari method kedua class-class mempunyai
yang akan dieksekusi tergantung dari method yang mirip dimana
tipe object yang melewati pemanggil membandingkan mereka dari object
method interface. lain dalam tipe yang sama, tetapi
Kita akan menggunakan mereka tidak berhubungan sama
interface jika kita ingin class yang sekali. Supaya dapat menjalankan
tidak berhubungan cara untuk memastikan bahwa dua
PemrogramanBerorientasiObjek BahasaPemrorgraman
BahasaPemrograman PemrogramanBerorientasiObjek
Program 15.6
//Classinimendefinisikansegmengaris
publicclassLineimplementsRelation
{
privatedoublex1;
privatedoublex2;
privatedoubley1;
privatedoubley2;
publicLine(doublex1,doublex2,doubley1,doubley2){
this.x1=x1;
this.x2=x2;
this.y1=y1;
this.y2=y2;
}
publicdoublegetLength(){
doublelength=Math.sqrt((x2x1)*(x2x1)+
(y2y1)*(y2y1));
returnlength;
}
publicbooleanisGreater(Objecta,Objectb){
doubleaLen=((Line)a).getLength();
doublebLen=((Line)b).getLength();
return(aLen>bLen);
}
publicbooleanisLess(Objecta,Objectb){
doubleaLen=((Line)a).getLength();
doublebLen=((Line)b).getLength();
return(aLen<bLen);
}
PemrogramanBerorientasiObjek BahasaPemrorgraman
publicbooleanisEqual(Objecta,Objectb){
doubleaLen=((Line)a).getLength();
doublebLen=((Line)b).getLength();
return(aLen==bLen);
}
}
Line.java:4:Lineisnotabstractanddoesnotoverrideabstract
methodisGreater(java.lang.Object,java.lang.Object)in
Relation
publicclassLineimplementsRelation
^
1error
BahasaPemrograman PemrogramanBerorientasiObjek
15.13.Soal Latihan
Jawablah soal latihan dibawah ini dengan baik dan benar.
1. Apa yang dimaksud dengan pemrograman Object oriented dan prosedural
2. Sebutkan perbedaan antara kedua program tersebut
3. Berilah gambaran yang jelas mengenai pemroraman OOP
4. Apa yang dimaksud dengan abstraksi
5. Apa yang dimaksud dengan enkapsulasi
6. Apa yang dimaksud dengan pewarisan
7. Apa yang dimaksud dengan imutable dan mutable objek
8. Apa yang dimaksud dengan bahasa pemrograman modular dan buatlah
program sederhana
9. Apa yang dimaksud dengan Priority queue (PQ)
BAB 16
INHERITANCE, FRIENDS, POLYMORPHISM DAN
OVERLOADING
Program 16.1
#include<cstdlib>
#include<iostream>
usingnamespacestd;
structKartuPelajar
{
charSekolah[20];
charNama[25];
charNIS[12];
charAlamat[25];
charKelas[10];
};
intmain(intargc,char*argv[])
{
KartuPelajardata;
cout<<"PengisianDataKartuPelajar"<<endl;
cout<<"AsalSekolah:";
cin.getline(data.Sekolah,sizeof(data.Sekolah));
cout<<"NamaSiswa:";
cin.getline(data.Nama,sizeof(data.Nama));
cout<<"NIS:";
cin.getline(data.NIS,sizeof(data.NIS));
cout<<"Alamat:";
cin.getline(data.Alamat,sizeof(data.Alamat));
cout<<"Jurusan/Kelas:";
cin.getline(data.Kelas,sizeof(data.Kelas));
cout<<endl<<endl;
cout<<"HasilPengisianData"<<endl;
cout<<"AsalSekolah:"<<data.Sekolah<<endl;
cout<<"NamaSiswa:"<<data.Nama<<endl;
cout<<"NIS:"<<data.NIS<<endl;
cout<<"Alamat:"<<data.Alamat<<endl;
cout<<"Jurusan/Kelas:"<<data.Kelas<<endl;
system("PAUSE");
returnEXIT_SUCCESS;
}
Program 16.2
#include<cstdlib>
#include<iostream>
usingnamespacestd;
classKartuPelajar
{
public:
charSekolah[20];
charNama[25];
charNIS[12];
charAlamat[25];
charKelas[10];
};
intmain(intargc,char*argv[])
{
KartuPelajardata;
2008 | Direktorat Pembinaan SMK 525
cout<<"PengisianDataKartuPelajar"<<endl;
cout<<"AsalSekolah:";
cin.getline(data.Sekolah,sizeof(data.Sekolah));
cout<<"NamaSiswa:";
cin.getline(data.Nama,sizeof(data.Nama));
cout<<"NIS:";
cin.getline(data.NIS,sizeof(data.NIS));
cout<<"Alamat:";
cin.getline(data.Alamat,sizeof(data.Alamat));
cout<<"Jurusan/Kelas:";
cin.getline(data.Kelas,sizeof(data.Kelas));
cout<<endl<<endl;
cout<<"HasilPengisianData"<<endl;
cout<<"AsalSekolah:"<<data.Sekolah<<endl;
cout<<"NamaSiswa:"<<data.Nama<<endl;
cout<<"NIS:"<<data.NIS<<endl;
cout<<"Alamat:"<<data.Alamat<<endl;
cout<<"Jurusan/Kelas:"<<data.Kelas<<endl;
system("PAUSE");
returnEXIT_SUCCESS;
}
Program 16.3
#include<cstdlib>
#include<iostream>
usingnamespacestd;
classKartuPelajar
{
private:
charSekolah[20];
charNama[25];
charNIS[12];
charAlamat[25];
charKelas[10];
public:
voidpengisian()
{
cout<<"PengisianDataKartuPelajar"<<endl;
cout<<"AsalSekolah:";
cin.getline(Sekolah,sizeof(Sekolah));
cout<<"NamaSiswa:";
cin.getline(Nama,sizeof(Nama));
cout<<"NIS:";
cin.getline(NIS,sizeof(NIS));
cout<<"Alamat:";
cin.getline(Alamat,sizeof(Alamat));
cout<<"Jurusan/Kelas:";
cin.getline(Kelas,sizeof(Kelas));
cout<<endl<<endl;
};
voidcetak()
{
cout<<"HasilPengisianData"<<endl;
cout<<"AsalSekolah:"<<Sekolah<<endl;
cout<<"NamaSiswa:"<<Nama<<endl;
cout<<"NIS:"<<NIS<<endl;
cout<<"Alamat:"<<Alamat<<endl;
cout<<"Jurusan/Kelas:"<<Kelas<<endl;
};
};
intmain(intargc,char*argv[])
{
KartuPelajardata;
data.pengisian();
data.cetak();
system("PAUSE");
returnEXIT_SUCCESS;
}
Program 16.4
#include<cstdlib>
#include<iostream>
usingnamespacestd;
classKartuPelajar
{
private:
charSekolah[20];
charNama[25];
charNIS[12];
charAlamat[25];
charKelas[10];
public:
528 Direktorat Pembinaan SMK | 2008
voidpengisian();
voidcetak();
};
voidKartuPelajar::pengisian()
{
cout<<"PengisianDataKartuPelajar"<<endl;
cout<<"AsalSekolah:";
cin.getline(Sekolah,sizeof(Sekolah));
cout<<"NamaSiswa:";
cin.getline(Nama,sizeof(Nama));
cout<<"NIS:";
cin.getline(NIS,sizeof(NIS));
cout<<"Alamat:";
cin.getline(Alamat,sizeof(Alamat));
cout<<"Jurusan/Kelas:";
cin.getline(Kelas,sizeof(Kelas));
cout<<endl<<endl;
};
voidKartuPelajar::cetak()
{
cout<<"HasilPengisianData"<<endl;
cout<<"AsalSekolah:"<<Sekolah<<endl;
cout<<"NamaSiswa:"<<Nama<<endl;
cout<<"NIS:"<<NIS<<endl;
cout<<"Alamat:"<<Alamat<<endl;
cout<<"Jurusan/Kelas:"<<Kelas<<endl;
};
intmain(intargc,char*argv[])
{
KartuPelajardata;
data.pengisian();
data.cetak();
system("PAUSE");
returnEXIT_SUCCESS;
}
Program 16.5
#include<cstdlib>
#include<iostream>
usingnamespacestd;
classTitik
{
intAbsis;
intOrdinat;
public:
voidSetAbsis(intx);
voidSetOrdinat(inty);
intAmbilAbsis();
intAmbilOrdinat();
};
voidTitik::SetAbsis(intx)
{
Absis=x;
}
voidTitik::SetOrdinat(inty)
{
Ordinat=y;
}
intTitik::AmbilAbsis()
{
returnAbsis;
}
intTitik::AmbilOrdinat()
{
returnOrdinat;
}
intmain(intargc,char*argv[])
{
TitikA;
A.SetAbsis(4);
A.SetOrdinat(6);
cout<<"AbsistitikA="<<A.AmbilAbsis()<<"\n";
cout<<"OrdinattitikA="<<A.AmbilOrdinat()<<"\n";
Titik*B=&A;
cout<<"AbsistitikB="<<B>AmbilAbsis()<<"\n";
cout<<"OrdinattitikB="<<B>AmbilOrdinat()<<"\n";
A.SetAbsis(2);
A.SetOrdinat(3);
Titik&C=A;
cout<<"AbsistitikC="<<C.AmbilAbsis()<<"\n";
cout<<"OrdinattitikC="<<C.AmbilOrdinat()<<"\n";
system("PAUSE");
returnEXIT_SUCCESS;
}
Program 16.6
#include<cstdlib>
#include<iostream>
usingnamespacestd;
classSiswa
{
charNama[25];
charNIS[12];
doubleNilai;
public:
voidInpNama();
voidInpNIS();
voidInpNilai();
voidoutput();
char*cek(doublen);
};
voidSiswa::InpNama()
{
cout<<"NamaSiswa=";
cin.getline(Nama,sizeof(Nama));
}
voidSiswa::InpNIS()
{
cout<<"NISSiswa=";
cin.getline(NIS,sizeof(NIS));
}
voidSiswa::InpNilai()
{
cout<<"NilaiSiswa=";
cin>>Nilai;
}
voidSiswa::output()
{
cout<<endl<<"HasilUjianSiswa"<<endl;
cout<<"NamaSiswa="<<Nama<<endl;
cout<<"NISSiswa="<<NIS<<endl;
cout<<"Keterangan="<<cek(Nilai)<<endl;
}
char*Siswa::cek(doublen)
{
if(n>=75)
return"Lulus";
else
return"TakLulus";
}
intmain(intargc,char*argv[])
{
SiswaData;
cout<<"MasukkanDataSiswa"<<endl;
Data.InpNama();
Data.InpNIS();
Data.InpNilai();
Data.output();
system("PAUSE");
returnEXIT_SUCCESS;
}
Program 16.7
#include<cstdlib>
#include<iostream>
usingnamespacestd;
classTitik
{
intX;
intY;
};
intmain(intargc,char*argv[])
{
TitikA;
A.X=4;
A.Y=6;
cout<<"AbsistitikA="<<A.X<<"\n";
cout<<"OrdinattitikA="<<A.Y<<"\n";
system("PAUSE");
returnEXIT_SUCCESS;
}
Program 16.8
#include<cstdlib>
#include<iostream>
usingnamespacestd;
classTitik
{
public:
intX;
intY;
};
intmain(intargc,char*argv[])
{
TitikA;
A.X=4;
A.Y=6;
cout<<"AbsistitikA="<<A.X<<"\n";
cout<<"OrdinattitikA="<<A.Y<<"\n";
system("PAUSE");
returnEXIT_SUCCESS;
}
Program 16.9
#include<iostream>
usingnamespacestd;
classTitik
{
private:
intX;
intY;
public:
voidSetAbsis(intx);
voidSetOrdinat(inty);
intAmbilAbsis();
intAmbilOrdinat();
};
voidTitik::SetAbsis(intx)
{
X=x;
}
voidTitik::SetOrdinat(inty)
{
Y=y;
}
intTitik::AmbilAbsis()
{
returnX;
}
intTitik::AmbilOrdinat()
{
returnY;
}
intmain(intargc,char*argv[])
{
TitikA;
A.SetAbsis(4);
A.SetOrdinat(6);
cout<<"AbsistitikA="<<A.AmbilAbsis()<<"\n";
cout<<"OrdinattitikA="<<A.AmbilOrdinat()<<"\n";
system("PAUSE");
returnEXIT_SUCCESS;
}
Jadi ada dua pasang method ada pintu masuk dan pintu keluar,
yang ditambahkan, satu untuk untuk mengambil barang-barang
memasukkan data baik X maupun Y yang ada harus melalui prosedur
yaitu lewat SetAbsis maupun tidak bisa begitu saja. Dapat
SetOrdinat. Yang kedua untuk disimpulkan untuk mengakses data
menampilkan atau melihat variabel X dalam suatu class yang bersifat
ataupun Y melalui perintah private bisa dengan membuat
AmbilAbsis dan AmbilOrdinat. Disini method yang bersifat public sehingga
terlihat bahwa pintu masuk dan bisa memanipulasi data/variabel yang
keluar melalui jalur tertentu tidak bisa ada didalamnya. Contoh lain sebagai
langsung seperti apabila variabel di berikut:
set public. Ibarat super market disitu
Program 16.10
#include<cstdlib>
#include<iostream>
usingnamespacestd;
classA
{
private:
intprivat;
public:
intumum;
intAmbilPrivat()
{returnprivat;};
voidSetPrivat(intdata)
{privat=data;};
voidTesA();
};
voidA::TesA()
{
cout<<"KeluarandariTesA"<<endl;
cout<<"Umum="<<umum<<endl;
cout<<"Private="<<privat<<endl;
}
classB:publicA
{
public:
voidTesB();
2008 | Direktorat Pembinaan SMK 537
};
voidB::TesB()
{
cout<<"KeluarandariTesB"<<endl;
cout<<"Umum="<<umum<<endl;
cout<<"Private="<<AmbilPrivat()<<endl;
}
intmain(intargc,char*argv[])
{
AContohA;
ContohA.SetPrivat(4);
ContohA.umum=20;
ContohA.TesA();
cout<<endl<<"KeluarandariMain()"<<endl;
cout<<"Umum="<<ContohA.umum<<endl;
cout<<"Private="<<ContohA.AmbilPrivat()<<endl<<endl;
BContohB;
ContohB.SetPrivat(40);
ContohB.umum=200;
ContohB.TesB();
cout<<endl<<"KeluarandariMain()"<<endl;
cout<<"Umum="<<ContohB.umum<<endl;
cout<<"Private="<<ContohB.AmbilPrivat()<<endl<<endl;
system("PAUSE");
returnEXIT_SUCCESS;
}
Program 16.11
#include<cstdlib>
#include<iostream>
usingnamespacestd;
classA
{
protected:
intproteksi;
public:
intumum;
intAmbilProteksi()
{returnproteksi;};
voidSetProteksi(intdata)
{proteksi=data;};
voidTesA();
};
voidA::TesA()
{
cout<<"KeluarandariTesA"<<endl;
cout<<"Umum="<<umum<<endl;
cout<<"Private="<<proteksi<<endl;
}
classB:publicA
{
public:
voidTesB();
};
voidB::TesB()
{
cout<<"KeluarandariTesB"<<endl;
cout<<"Umum="<<umum<<endl;
cout<<"Protected="<<proteksi<<endl;
}
intmain(intargc,char*argv[])
{
AContohA;
ContohA.SetProteksi(4);
ContohA.umum=20;
ContohA.TesA();
cout<<endl<<"KeluarandariMain()"<<endl;
cout<<"Umum="<<ContohA.umum<<endl;
cout<<"Private="<<ContohA.AmbilProteksi()<<endl<<endl;
BContohB;
ContohB.SetProteksi(40);
ContohB.umum=200;
ContohB.TesB();
cout<<endl<<"KeluarandariMain()"<<endl;
cout<<"Umum="<<ContohB.umum<<endl;
cout<<"Private="<<ContohB.AmbilProteksi()<<endl<<endl;
system("PAUSE");
returnEXIT_SUCCESS;
}
yaitu friend. Sebuah fungsi atau class anggota class lain, baik bersifat
yang dideklarasikan dengan sifat private, protected, maupun public.
friend dapat mengakses semua
16.4. Friend
Sebelumnya sudah di bahas untuk mengakses member private
bahwa ada tiga macam proteksi bagi dan protected.
member class, yakni: public, Untuk itu kita mendeklarasikan
protected dan private. Member prototype fungsi eksternal yang
protected dan private tidak bisa dimaksud yang akan menambah
diakses dari luar class dimana dia akses sebelumnya dengan instruksi
dideklarasikan. Walaupun demikian friend di dalam deklarasi class yang
aturan ini dilanggar dengan adanya dapat dishare oleh semua member.
friend di dalam class, sehingga kita Perhatikan contoh berikut dimana kita
dapat membuat fungsi eksternal mendeklarasikan friend function
duplicate:
classCRectangle{
intwidth,height;
public:
voidset_values(int,int);
intarea(void){return(width*height);}
friendCRectangleduplicate(CRectangle);
};
voidCRectangle::set_values(inta,intb){
width=a;
height=b;
}
CRectangleduplicate(CRectanglerectparam)
{
CRectanglerectres;
rectres.width=rectparam.width*2;
rectres.height=rectparam.height*2;
return(rectres);
}
intmain(){
2008 | Direktorat Pembinaan SMK 541
CRectanglerect,rectb;
rect.set_values(2,3);
rectb=duplicate(rect);
cout<<"Hasilnya="<<rectb.area();
}
Program 16.13
#include<iostream.h>
#include<conio.h>
classcontoh{
intx;
voidfcontoh();
public:
voidfcontoh1();
voidfcontoh2();
friendvoidfcontoh3();
};
voidcontoh::fcontoh()
{cout<<"\nFungsifcontohanggotaclasscontoh,bersifatprivate";
}
voidcontoh::fcontoh1()
{x=3;
cout<<"Fungsicontoh1anggotaclasscontoh";
fcontoh();
cout<<"\nNilaix="<<x;}
voidcontoh::fcontoh2()
{cout<<"\n\nFungsicontoh2anggotaclasscontoh";
cout<<"\nNilaix="<<x;}
voidfcontoh3()
{contohb;
b.x=10;
cout<<"\n\nFungsicontoh3bukananggotaclasscontoh";
cout<<"\ntetapimerupakanfungsifrienddariclasscontoh";
cout<<"\nsehinggadapatmengaksesxyangsifatnyaprivate";
cout<<"\ndanmengaksesfcontohyangjugabersifatprivate";
b.fcontoh();
cout<<"\nNilaix="<<b.x;}
main(){
contoha;
a.fcontoh1();
a.fcontoh2();
fcontoh3();
getch();
}
Fungsi ini dapat dipakai untuk Gambaran fungsi friend dapat dilihat
mengakses anggota class yang pada program berikut:
bersifat private maupun protected.
Program 16.14
#include<cstdlib>
#include<iostream>
usingnamespacestd;
#include<cstdlib>
#include<iostream>
usingnamespacestd;
classSiswa
{
private:
char*Nama;
char*Kelas;
intNIS;
public:
Siswa();
voidinisialisasi(intNomor,char*Nama,char*Kelas);
friendvoidtampil_data(Siswaswa);
};
Siswa::Siswa()
{
NIS=0;
Nama="";
Kelas="";
}
voidSiswa::inisialisasi(intNomor,char*Nama,char*Kelas)
{
Siswa::NIS=Nomor;
Siswa::Nama=Nama;
Siswa::Kelas=Kelas;
}
voidtampil_data(Siswaswa)
{
cout<<"NomorSiswa="<<swa.NIS<<endl;
cout<<"NamaSiswa="<<swa.Nama<<endl;
cout<<"KelasSiswa="<<swa.Kelas<<endl;
}
intmain(intargc,char*argv[])
{
Siswasis;
sis.inisialisasi(1234,"Badu","XIPS");
tampil_data(sis);
system("PAUSE");
returnEXIT_SUCCESS;
}
Program 16.15
#include<cstdlib>
#include<iostream>
usingnamespacestd;
2008 | Direktorat Pembinaan SMK 545
classHasilUjian
{
private:
intNIS;
doubleNilai;
public:
HasilUjian(intNomor,doubleNil);
frienddoublenilai_max(HasilUjiana,HasilUjianb,HasilUjianc);
};
HasilUjian::HasilUjian(intNomor,doubleNil):NIS(Nomor),Nilai(Nil)
{
}
doublenilai_max(HasilUjiana,HasilUjianb,HasilUjianc)
{
doublemaks=a.Nilai;
maks=(b.Nilai)>maks?b.Nilai:maks;
maks=(c.Nilai)>maks?c.Nilai:maks;
returnmaks;
}
intmain(intargc,char*argv[])
{
HasilUjianamir(1234,78.6);
HasilUjianendah(1237,88.5);
HasilUjiansiti(1224,58.6);
cout<<"Nilaiujianterbesar:"<<nilai_max(amir,endah,siti)<<endl;
system("PAUSE");
returnEXIT_SUCCESS;
}
Program 16.16
#include<cstdlib>
#include<iostream>
usingnamespacestd;
classPemainPria;
classPemainWanita
{
private:
char*nama;
char*asal;
public:
PemainWanita(char*nam,char*asl);
friendvoidinfo_pemain_campuran(PemainWanitax,PemainPriay);
};
PemainWanita::PemainWanita(char*nam,char*asl)
{
nama=nam;
asal=asl;
}
classPemainPria
{
private:
char*nama;
char*asal;
public:
PemainPria(char*nam,char*asl);
friendvoidinfo_pemain_campuran(PemainWanitax,PemainPriay);
};
PemainPria::PemainPria(char*nam,char*asl)
{
nama=nam;
asal=asl;
voidinfo_pemain_campuran(PemainWanitax,PemainPriay)
{
cout<<"Pemaingandacampuran"<<endl;
cout<<x.nama<<"<"<<x.asal<<">"<<endl;
cout<<y.nama<<"<"<<y.asal<<">"<<endl;
}
intmain(intargc,char*argv[])
{
PemainWanitap_wanita("AnnaKournikova","Rusia");
PemainPriap_pria("RafaelNadal","Spanyol");
info_pemain_campuran(p_wanita,p_pria);
system("PAUSE");
returnEXIT_SUCCESS;
}
Pada program di atas ada baris yang melibatkan dua buah class yang
berisi: berbeda atau lebih adalah
mendeklarasikan fungsi tersebut
classPemainPria; pada class-class yang hendak
diakses. Bentuk Pendeklarasiannya
Pernyataan ini dikenal dengan istilah persis sama, seperti contoh baris di
refernsi di depan. Hal seperti ini atas terdapat di kedua class baik
diperlukan mengingat pengenal class PemainWanita maupun PemainPria.
PemainPria akan digunakan pada Para pemrogram C++ biasa
pendeklarasian class PemainWanita, melewatkan obyek pada fungsi friend
yaitu pada baris yang berisi: dengan referensi. Hal seperti ini
sangat bermanfaat untuk obyek
friendvoid berukuran besar. Dengan
info_pemain_campuran(PemainWanita melewatkan secara referensi,
x,PemainPriay); prosesnya menjadi lebih cepat.
Deklarasi lengkap PemainPria ini Deklarasi fungsi friend di atas bisa
dapat diletakkan di belakang. Hal diuah menjadi seperti berikut ini :
yang perlu diperhatikan dalam
membuat fungsi friend yang
548 Direktorat Pembinaan SMK | 2008
Program 16.17
#include<cstdlib>
#include<iostream>
usingnamespacestd;
classPemainPria;
classPemainWanita
{
private:
char*nama;
char*asal;
public:
PemainWanita(char*nam,char*asl);
friendvoidinfo_pemain_campuran(constPemainWanita&x,constPemainPria
&y);
};
PemainWanita::PemainWanita(char*nam,char*asl)
{
nama=nam;
asal=asl;
}
classPemainPria
{
private:
char*nama;
char*asal;
public:
PemainPria(char*nam,char*asl);
friendvoidinfo_pemain_campuran(constPemainWanita&x,constPemainPria
&y);
};
PemainPria::PemainPria(char*nam,char*asl)
{
nama=nam;
asal=asl;
}
voidinfo_pemain_campuran(constPemainWanita&x,constPemainPria&y)
{
cout<<"Pemaingandacampuran"<<endl;
cout<<x.nama<<"<"<<x.asal<<">"<<endl;
cout<<y.nama<<"<"<<y.asal<<">"<<endl;
}
intmain(intargc,char*argv[])
{
PemainWanitap_wanita("AnnaKournikova","Rusia");
PemainPriap_pria("RafaelNadal","Spanyol");
info_pemain_campuran(p_wanita,p_pria);
system("PAUSE");
returnEXIT_SUCCESS;
}
Program 16.18
classPemainWanita
{
private:
char*nama;
char*asal;
public:
PemainWanita(char*nam,char*asl);
voidinfo_pemain_campuran(constPemainPria&x);
};
Program 16.19
classPemainPria
{
private:
char*nama;
char*asal;
friendvoidPemainWanita::info_pemain_campuran(constPemainPria&x);
public:
PemainPria(char*nam,char*asl);
};
Program 16.20
#include<cstdlib>
#include<iostream>
usingnamespacestd;
classPemainPria;
classPemainWanita
{
2008 | Direktorat Pembinaan SMK 551
private:
char*nama;
char*asal;
public:
PemainWanita(char*nam,char*asl);
voidinfo_pemain_campuran(constPemainPria&x);
};
PemainWanita::PemainWanita(char*nam,char*asl)
{
nama=nam;
asal=asl;
}
classPemainPria
{
private:
char*nama;
char*asal;
friendvoidPemainWanita::info_pemain_campuran(constPemainPria&x);
public:
PemainPria(char*nam,char*asl);
};
PemainPria::PemainPria(char*nam,char*asl)
{
nama=nam;
asal=asl;
}
voidPemainWanita::info_pemain_campuran(constPemainPria&x)
{
cout<<"Pemaingandacampuran"<<endl;
cout<<nama<<"<"<<asal<<">"<<endl;
cout<<x.nama<<"<"<<x.asal<<">"<<endl;
}
intmain(intargc,char*argv[])
{
PemainWanitap_wanita("AnnaKournikova","Rusia");
PemainPriap_pria("RafaelNadal","Spanyol");
p_wanita.info_pemain_campuran(p_pria);
552 Direktorat Pembinaan SMK | 2008
system("PAUSE");
returnEXIT_SUCCESS;
}
Apa yang dimaksud dengan berikut. Misal ada dua kelas yaitu D3
class friend ? Sesungguhnya suatu dan S1, keduanya mempunyai data
class dapat dijadikan sebagai friend tentang banyaknya ruang atau
dari class yang lain. Hal seperti ini kebutuhan ruang kelas. Serta
diperlukan apabila ada dua class dan ruangan D3 dapat dipakai oleh S1,
dibutuhkan mengakses bagian maka pendeklarasian masing-masing
private maupun protected dari class- class sebagai berikut:
class tersebut. Kita lihat contoh
Program 16.21
classD3
{
private:
intruangD3;
public:
D3()
{ruangD3=10;}
friendclassS1;
};
classS1
{
private:
intruangS1;
public:
S1()
{ruangS1=6;}
voidinfo_ruang(D3x);
};
Pada contoh ini, x adalah obyek sekiranya keyword private pada class
dengan class D3 yang menjadi D3 diganti dengan protected. Sebab
argument fungsi info_ruang() pada seperti diketahui, anggota yang
class S1. Fungsi dimaksud untuk bersifat protected hanya bisa diakses
mengakses data ruang_D3 milik kalau class ini diwariskan ke class
obyek x(yang ber-class D3). turunan. Solusinya dengan class
Masalahnya adalah bahwa data friend seperti yang terlihat pada baris
ruangD3 bersifat private, sehingga dibawah konstructor D3(). Dan
class S1 tidak bisa mengaksesnya. dengan pernyataan ini dapat
Persoalan yang sama tetap muncul diletakkan dimana saja pada class
2008 | Direktorat Pembinaan SMK 553
Program 16.22
#include<cstdlib>
#include<iostream>
usingnamespacestd;
classCSquare;
classCRectangle{
intwidth,height;
public:
intarea(void)
{return(width*height);}
voidconvert(CSquarea);
};
classCSquare{
private:
intside;
public:
voidset_side(inta)
{side=a;}
friendclassCRectangle;
};
voidCRectangle::convert(CSquarea){
width=a.side;
height=a.side;
}
intmain(){
CSquaresqr;
CRectanglerect;
sqr.set_side(4);
rect.convert(sqr);
cout<<"Hasilnya="<<rect.area()<<"\n";
system("PAUSE");
returnEXIT_SUCCESS;
}
Keluaran program diatas adalah sebagai berikut:
Hasilnya=16
Program 16.23
#include<iostream.h>
#include<conio.h>
classcontoh{
intx;
public:
voidfcontoh1();
voidfcontoh2();
friendclasscth;
};
classcth{
inty;
2008 | Direktorat Pembinaan SMK 555
voidfcth();
public:
voidfcth1();
friendclasscontoh;
};
voidcth::fcth()
{contohd;
d.x=5;
cout<<"\nFungsicthanggotaclasscth(private)";
cout<<"\nNilaix="<<d.x;
}
voidcontoh::fcontoh1()
{x=3;
cout<<"Fungsicontoh1anggotaclasscontoh";
cout<<"\nNilaix="<<x;}
voidcontoh::fcontoh2()
{cthm;
m.y=5;
cout<<"\n\nFungsicontoh2anggotaclasscontoh";
cout<<"\nNilaix="<<x;
cout<<"\nNilaiy="<<m.y;
m.fcth();}
voidcth::fcth1()
{
y=3;
cout<<"\n\nFungsicth1anggotaclasscth";
cout<<"\nNilaiy="<<y;
fcth();
}
main(){
contoha;
cthb;
a.fcontoh1();
a.fcontoh2();
b.fcth1();
getch();
}
Fungsicontoh2anggotaclasscontoh
Nilaix=3
Nilaiy=5
Fungsicthanggotaclasscth(private)
Nilaix=5
Fungsicth1anggotaclasscth
Nilaiy=3
Fungsicthanggotaclasscth(private)
Nilaix=5
16.6. Inheritance
Salah satu hal penting dalam yang ada dalam class dasarnya. Hal
class adalah inheritance. Inheritance ini berarti bahwa jika class dasarnya
mengijinkan kita untuk membuat memiliki member A dan kita
objek yang diturunkan dari objek lain, menurunkannya ke class lain yang
sehingga dimungkinkan didalamnya memiliki member B, maka class
terdapat member lain selain turunan akan terdiri dari A dan B.
membernya sendiri. Untuk menurunkan class dari yang
Sebagai contoh, misalnya kita lain, kita menggunakan operator :
ingin mendeklarasikan sederetan (colon) dalam deklarasi class turunan
class yang mendeskripsikan polygon dengan cara sebagai berikut:
seperti CRectangle atau CTriangle.
Keduanya dapat dideskripsikan class derived_class_name: public
dengan dua atribut yakni : alas dan base_class_name;
tinggi. Hal ini dapat direpresentasikan
dengan class CPolygon dan dari dimana derived_class_name adalah
class tersebut diturunkan dua class nama class turunan dan
yakni CRectangle dan CTriangle. base_class_name adalah nama class
Class CPolygon berisi member yang menjadi dasar. Public dapat
yang umum pada semua polygon, diganti dengan akses lain misalnya
dalam contoh ini adalah panjang dan protected atau private, dan
lebar (width dan height). CRectangle menjelaskan akses untuk member
dan CTriangle diturunkan dari class yang diturunkan, seperti kita dapat
tersebut. Class yang diturunkan dari lihat pada contoh berikut:
class lain mewarisi semua member
Program 16.24
#include<cstdlib>
#include<iostream.h>
classCPolygon{
protected:
intwidth,height;
public:
voidset_values(inta,intb)
{width=a;height=b;}
};
classCRectangle:publicCPolygon{
public:
intarea(void)
{return(width*height);}
};
classCTriangle:publicCPolygon{
public:
intarea(void)
{return(width*height/2);}
};
intmain(){
CRectanglerect;
CTriangletrgl;
rect.set_values(4,5);
trgl.set_values(4,5);
cout<<"\nHasilpemanggilanfungsiareaolehrect="<<rect.area();
cout<<"\nHasilpemanggilanfungsiareaolehtrgl="<<trgl.area();
system("PAUSE");
returnEXIT_SUCCESS;
}
Ada empat konversi baku dari Konsep inheritance pada C++ ini
suatu class turunan ke class basis sebenarnya diilhami oleh sifat
publiknya, yaitu: pewarisan dalam kehidupan nyata.
1. Obyek class turunan akan Misal, mata si Upik mirip dengan
dikonversi secara implisit ke obyek mata ayahnya dan hidungnya
class basis publiknya. mancung mewarisi ibunya.
2. Reference class turunan akan Keuntungan utama dengan adanya
dikonversi secara implisit ke inheritance yaitu memungkinkan
reference class basis publiknya. suatu kode yang telah ditulis mudah
3. Pointer class turunan akan sekali untuk digunakan kembali.
dikonversi secara implisit ke Contoh jika anda mempunyai class
pointer class basis publiknya. yang telah dipakai dan teruji. Suatu
Pointer ke suatu member dari saat anda menemukan
suatu class basis akan dikonversi permasalahan yang sama dengan
secara implisit menjadi pointer ke class tersebut maka class tesebut
suatu member dari suatu publicly- dapat dipergunakan dengan cara
derived-class. Konversi-konversi menurunkannya sehingga sifat-sifat
dengan arah sebaliknya memerlukan yang sama bisa dimanfaatkan.
cast secara eksplisit, walaupun perlu Dengan cara seperti ini
diingat bahwa hal ini tidak aman pengembangan program menjadi
dalam pemrograman lebih efisien dan efektif. Juga apabila
C++ memungkinkan suatu class diperlukan turunannya dapat
mewarisi data ataupun fungsi menambahkan sifat-sifat baru sesuai
anggota class lain. Sifat ini disebut dengan kebutuhan permasalahan
inheritance. Class yang mewarisi sifat permograman yang sedang dihadapi,
class lain disebut class turunan bahkan kalau perlu bisa mengganti
(derived class), sedangkan class dengan sifat yang berbeda dengan
yang mewariskan sifat ke class lain class dasarnya.
disebut class dasar(base class). Untuk memahami tentang
konsep inheritance, marilah kita coba
contoh berikut :
Program 16.25
#include<cstdlib>
#include<iostream>
usingnamespacestd;
classbasis
{
private:
intA;
intB;
public:
voidinfo_basis()
560 Direktorat Pembinaan SMK | 2008
{cout<<"Info_basis()dijalankan..."<<endl;}
};
classturunan:publicbasis
{
public:
voidinfo_turunan()
{cout<<"Info_turunan()dijalankan..."<<endl;}
};
intmain(intargc,char*argv[])
{
turunananak;
anak.info_basis();
anak.info_turunan();
system("PAUSE");
returnEXIT_SUCCESS;
}
Dari hasil keluaran terlihat bahwa yang bersifat private tetap tidak dapat
class turunan dapat menjalanka diakses. Jadi yang diwariskan hanya
fungsi info_basis() yang ada pada yang bersifat public. Namun demikian
class dasar. Hal ini bisa terjadi apabila hendak mengakses bagian
karena pernyataan tambahan pada private dari class basis dibuatkan
deklarasi class turunan, lebih fungsi pada class turunan untuk
jelasnya lihat pernyataan berikut: mengaksesnya, fungsi inilah nanti
yang dipanggil untuk menjalankan
classturunan:publicbasis atau memanipulasi anggota private
{ class dasar. Jadi harus dengan
.. perantara tidak dapat langsung.
} Pada prinsipnya apabila class
turunan bersifat private maka
Terlihat ada tambahan :public sebenarnya sifat-sifat class dasar
basis, itulah yang menyebabkan diturunkan di bagian private,
bahwa class turunan adalah turunan sehingga tidak dapat diakses
dari class basis. Dengan demikian langsung. Dan apabila class turunan
maka tentu saja dapat mengakses bersifat public maka sifat-sifat class
semua anggota class basis yang dasar diturunkan di bagian public,
bersifat public. Akan tetapi anggota jadi dapat diakses langsung.
classdasar
{
private:
A;
protected:
B;
C;
public:
voidinfo_dasar();
};
classturunan:privatedasar
{
private:
local;
B;
C;
voidinfo_dasar();
protected:
D;
public:
voidinfo_turunan();
};
classdasar
{
private:
A;
protected:
B;
C;
public:
voidinfo_dasar();
};
classturunan:publicdasar
{
private:
local;
protected:
B;
C;
D;
public:
voidinfo_dasar();
voidinfo_turunan();
};
Program 16.26
#include<cstdlib>
#include<iostream>
usingnamespacestd;
classkendaraan
{
private:
char*nama;
public:
kendaraan(char*nm="XXX")
{
nama=nm;
cout<<"Hidupkanmesinanda....."<<endl;
}
~kendaraan()
{
cout<<"Matikanmesinanda....."<<endl;
}
voidinfo_kendaraan()
{
cout<<nama<<"sedangberjalan....."<<endl;
}
};
2008 | Direktorat Pembinaan SMK 563
classtruk:publickendaraan
{
public:
truk(char*nmTr):kendaraan(nmTr)
{
cout<<"Hidupkanmesintrukanda....."<<endl;
}
~truk()
{
cout<<"Matikanmesintrukanda....."<<endl;
}
};
intmain(intargc,char*argv[])
{
trukfuso("TRUKFUSO");
fuso.info_kendaraan();
system("PAUSE");
returnEXIT_SUCCESS;
}
Tomat Tomat
Program 16.27
#include<iostream>
usingnamespacestd;
classtanaman{
public:
2008 | Direktorat Pembinaan SMK 565
tanaman():i(0),f(0){cout<<"tanaman().\n";}
tanaman(intinit_i,floatinitf):i(initi),f(initf)
{cout<<"tanaman(int,float).\n";}
~tanaman(){cout<<"~tanaman().\n";}
voidprint();
private:
inti;
floatf;
};
voidtanaman::print(){
cout<<"i="<<i<<endl;
cout<<"f="<<f<<endl;
}
classbuah:virtualpublictanaman{
public:
buah(intinit_j,floatinit_g):j(init_j),g(init_g)
{cout<<"buah(int,float).\n";}
~buah(){cout<<"~buah().\n";}
voidprint();
private:
intj;
floatg;
};
voidbuah::print(){
tanaman::print();
cout<<"j="<<j<<endl;
cout<<"g="<<g<<endl;
}
classsayur:publicvirtualtanaman{
public:
sayur(intinit_k,floatinit_h):k(init_k),h(inith)
{cout<<"sayur(int,float).\n";}
~sayur(){cout<<"~sayur().\n";}
voidprint();
private:
intk;
566 Direktorat Pembinaan SMK | 2008
floath;
};
voidsayur::print(){
tanaman::print();
cout<<"k="<<k<<endl;
cout<<"h="<<h<<endl;
}
classtomat:publicbuah,publicsayur{
public:
tomat(intinit_l,floatinit_m):buah(init_l,init_m), sayur(intinit_l,
init_m),
l(init_l+2),m(init_m+2.1)
{cout<<"tomat(int,float).\n";}
~tomat(){cout<<"~tomat().\n";}
voidprint();
private:
intl;
floatm;
};
voidtomat::print(){
tanaman::print();
buah::print();
sayur::print();
cout<<"l="<<l<<endl;
cout<<"m="<<m<<endl;
}
main(){
tanaman*pt=newtanaman(2,3.1);
cout<<"pt?print():\n";
pt?print();
deletept;
cout<<endl;
buah*pb=newbuah(2,3.1);
cout<<"pb?print():\n";
pb?print();
deletepb;
cout<<"\n";
sayur*ps=newsayur(2,3.1);
2008 | Direktorat Pembinaan SMK 567
cout<<"ps?print():\n";
ps?print();
deleteps;
cout<<endl;
tomat*pto=newtomat(2,3.1);
cout<<"pto?print():\n";
pto?print();
deletepto;
return0;
}
buah(int,float).
pbprint():
i=0
f=0
j=2
g=3.1
~buah().
~tanaman().
tanaman().
sayur(int,float).
psprint():
i=0
f=0
k=2
h=3.1
~sayur().
~tanaman().
tanaman().
buah(int,float).
sayur(int,float).
tomat(int,float).
ptoprint():
i=0
f=0
i=0
f=0
j=2
g=3.1
i=0
f=0
k=2
h=3.1
l=4
m=5.2
~tomat().
~sayur().
~buah().
~tanaman().
Program16.28
classtanaman{
public:
voidhabitat();
protected:
shorttinggi;
};
classbuah:publicvirtualtanaman{...};
calsssayur:privatevirtualtanaman{...};
classnangka:publicbuah,publicsayur{...};
Program 16.29
#include<iostream.h>
classCPolygon{
protected:
intwidth,height;
public:
voidset_values(inta,intb)
{width=a;height=b;}
};
classCRectangle:publicCPolygon{
public:
intarea(void)
{return(width*height);}
};
classCTriangle:publicCPolygon{
public:
intarea(void)
{return(width*height/2);}
};
intmain(){
CRectanglerect;
CTriangletrgl;
rect.set_values(4,5);
trgl.set_values(4,5);
cout<<rect.area()<<endl;
cout<<trgl.area()<<endl;
system("PAUSE");
570 Direktorat Pembinaan SMK | 2008
returnEXIT_SUCCESS;
}
Program 16.30
#include<iostream.h>
classCPolygon{
protected:
intwidth,height;
public:
voidset_values(inta,intb)
{width=a;height=b;}
};
classCOutput{
public:
voidoutput(inti);};
voidCOutput::output(inti){
cout<<i<<endl;}
classCRectangle:publicCPolygon,publicCOutput{
public:
intarea(void)
{return(width*height);}
};
classCTriangle:publicCPolygon,publicCOutput{
public:
intarea(void)
{return(width*height/2);}
};
intmain(){
CRectanglerect;
CTriangletrgl;
rect.set_values(4,5);
trgl.set_values(4,5);
rect.output(rect.area());
trgl.output(trgl.area());
system("PAUSE");
returnEXIT_SUCCESS;
}
16.10.Polymorphism
Untuk mempelajari materi 16.10.1. Pointers to Base Class
polimorfisme kita harus paham dulu Salah satu keuntungan terbesar
terhadap penggunaan pointer dan dalam menurunkan class adalah
inheritance. Coba anda pahami bahwa pointer ke class turunan
instruksi berikut, jika anda masih merupakan tipe yang kompatibel
belum paham pelajari kembali materi dengan pointer ke class dasar.
terkait: Bagian ini akan membahas kelebihan
C++ dalam hal tersebut. Sebagai
inta::b(c){}; //MateriClass contoh kita akan menuliskan kembali
a>b //Materipointer program tentang persegi panjang dan
classa:publicb; // Materi segitiga dalam contoh sebelumnya
Relationshipsbetweenclasses dengan deklarasi pointer. Perhatikan
contoh dibawah ini:
Program 16.31
#include<iostream.h>
classCPolygon{
protected:
intwidth,height;
public:
voidset_values(inta,intb)
{width=a;height=b;}
};
classCRectangle:publicCPolygon{
public:
intarea(void)
{return(width*height);}
};
classCTriangle:publicCPolygon{
public:
intarea(void)
{return(width*height/2);}
};
intmain(){
CRectanglerect;
CTriangletrgl;
CPolygon*ppoly1=▭
CPolygon*ppoly2=&trgl;
ppoly1>set_values(4,5);
ppoly2>set_values(4,5);
cout<<"Rectanglearea="<<rect.area()<<endl;
cout<<"Trianglearea="<<trgl.area()<<endl;
system("PAUSE");
returnEXIT_SUCCESS;
}
Program 16.32
#include<iostream.h>
classCSegibanyak{
protected:
intlebar,tinggi;
public:
voidset_nilai(inta,intb)
{lebar=a;tinggi=b;}
virtualintluas(void)
{return(0);}
};
classCSegiempat:publicCSegibanyak{
public:
intluas(void)
{return(lebar*tinggi);}
};
classCSegitiga:publicCSegibanyak{
public:
intluas(void)
{return(lebar*tinggi/2);}
};
intmain(){
CSegiempatrect;
CSegitigatrgl;
CSegibanyakpoly;
CSegibanyak*ppoly1=▭
CSegibanyak*ppoly2=&trgl;
CSegibanyak*ppoly3=&poly;
ppoly1>set_nilai(4,5);
ppoly2>set_nilai(4,5);
ppoly3>set_nilai(4,5);
cout<<ppoly1>luas()<<endl;
cout<<ppoly2>luas()<<endl;
cout<<ppoly3>luas()<<endl;
system("PAUSE");
returnEXIT_SUCCESS;
}
Program 16.33
#include<cstdlib>
#include<iostream>
usingnamespacestd;
classmakhluk
{
public:
voidinformasi()
{
cout<<"Informasipadamakhluk....."<<endl;
}
virtualvoidketerangan()
{
cout<<"Keteranganpadamakhluk....."<<endl;
}
};
classmamalia:publicmakhluk
{
public:
voidinformasi()
{
cout<<"Informasipadamamalia....."<<endl;
}
virtualvoidketerangan()
{
cout<<"Keteranganpadamamalia....."<<endl;
}
};
classsapi:publicmamalia
{
public:
voidinformasi()
{
cout<<"Informasipadasapi....."<<endl;
}
virtualvoidketerangan()
{
cout<<"Keteranganpadasapi....."<<endl;
}
};
intmain(intargc,char*argv[])
576 Direktorat Pembinaan SMK | 2008
{
mamaliamamal;
sapilembu;
makhluk*binatang;
binatang=&mamal;
binatang>informasi();
binatang>keterangan();
cout<<""<<endl;
binatang=&lembu;
binatang>informasi();
binatang>keterangan();
system("PAUSE");
returnEXIT_SUCCESS;
}
Informasipadamakhluk
Keteranganpadasapi..
Pressanykeytocontinue...
16.11.Overloading
Keistimewaan program C++ floatprice;}a,b,c;
lainnya adalah adanya fasilitas a=b+c;
operator overloading, yaitu
penamaan fungsi tidak seperti pada Tetapi C++ memungkinkan hal
umumnya, melainkan nama fungsi seperti diatas dengan menggunakan
berupa kata kunci operator diikuti overload operator. Dibawah ini
dengan lambang operator yang adalah operator-operator yang dapat
digunakan. Misalnya nama fungsi dioverload:
operator= yang dapat dipanggil
dengan hanya menuliskan operator = +*/=<>+==*=/=<<>>
seperti pada operasi penugasan <<=>>===!=<=>=++%&^!|
biasa, sehingga dapat dibuat fungsi ~&=^=|=&&||%=[]()newdelete
penugasan versi sendiri untuk tipe-
tipe data tertentu, seperti kita dapat Untuk mengoverload operator kita
menyatakan Time t2 = t1, dan cukup menuliskan satu fungsi
sebagainya. Jika kita mempunyai anggota class dengan nama
ekspresi dibawah ini : operator diikuti dengan operator apa
yang akan dioverload. Syntaxnya
inta,b,c; sebagai berikut:
a=b+c;
typeoperatorsign(parameters);
adalah benar, selama variable-
variabel tersebut merupakan tipe Misalnya ketika akan menjumlahkan
data dasar. Namun tidak demikian vector 2 dimensi a(3,1) and b(1,2).
halnya dengan contoh berikut: Hasilnya adalah sbb: (3+1,1+2) =
(4,3). Untuk keperluan ini maka kita
struct{ dapat mengoverload operator +
charproduct[50]; seperti dalam contoh berikut :
Program 16.34
#include<iostream.h>
classCVector{
public:
intx,y;
CVector(){};
CVector(int,int);
CVectoroperator+(CVector);
};
CVector::CVector(inta,intb){
x=a;
y=b;
CVectorCVector::operator+(CVectorparam){
CVectortemp;
temp.x=x+param.x;
temp.y=y+param.y;
return(temp);
}
intmain(){
CVectora(3,1);
CVectorb(1,2);
CVectorc;
c=a+b;
cout<<c.x<<","<<c.y;
system("PAUSE");
returnEXIT_SUCCESS;
}
Program 16.35
#include<cstdlib>
#include<iostream>
usingnamespacestd;
classTime{
friendostream&operator<<(ostream&,Time&);
//untukfungsicout<<obyek
public:
Time(inth=0,intm=0,ints=0); //defaultconstructor
Time&operator++(); //prefixincrement
Time&operator+=(constTime&); //operator+=
Time&operator+=(constint);
Time&operator+(constTime&); //operator+
Time&operator+(constint);
~Time(){cout<<"Programselesai"<<endl;}//destructor
private:
voidformat(); //memformatnilaiobyek
inthour; //agarsesuai,misalnya:
intminute; //12:65:70?13:06:10
intsecond;
};
Time::Time(inth=0,intm=0,ints=0){
hour=h;
minute=m;
second=s;
}
voidTime::format(){
inttm=minute,ts=second;
if(second>>=60){
second%=60;
minute+=(int)(ts/60);
tm=minute;
}
if(minute>>=60){
minute%=60;
2008 | Direktorat Pembinaan SMK 581
hour+=(int)(tm/60);
}
if(hour>>=24)hour%=24;
}
Time&Time::operator+=(constTime&t){
second=second+t.second;
minute=minute+t.minute;
hour=hour+t.hour;
format;
return*this;
}
Time&Time::operator+=(constintt){
second=second+t;
format;
return*this;
}
Time&Time::operator++(){
second++;
format;
return*this;
}
Time&Time::operator+(constTime&t){
second=second+t.second;
minute=minute+t.minute;
hour=hour+t.hour;
format(hour,minute,second);
return*this;
}
Time&Time::operator+(constintt){
second=second+t;
format(hour,minute,second);
return*this;
}
ostream&operator<<(ostream&ostr,Time&t){
returnostr<<(t.hour<10?"0":"")<<t.hour<<":"
<<(t.minute<10?"0":"")<<t.minute<<":"
<<(t.second<10?"0":"")<<t.second;
}
Program 16.36
#include<iostream.h>
constintarraySize=20; //ukurandefault
classintArray{
public:
intArray(intsz=ArraySize);
intArray(constint*,int);
intArray(constIntArray&);
~intArray(){delete[]ia;}
intArray&operator=(constIntArray&);
int&operator[](int);
intgetSize(){returnsize;}
protected:
init(constint*,int);
intsize;
int*ia;
}
585
586
587
1 asm insertanassemblyinstruction
2 auto declarealocalvariable
3 bool declareabooleanvariable
4 break breakoutofaloop
5 case ablockofcodeinaswitchstatement
6 catch handlesexceptionsfromthrow
7 char declareacharactervariable
8 class declareaclass
9 const declareimmutabledataorfunctionsthatdonotchangedata
10 const_cast castfromconstvariables
11 continue bypassiterationsofaloop
12 default defaulthandlerinacasestatement
13 delete makememoryavailable
14 do loopingconstruct
15 double declareadoubleprecisionfloatingpointvariable
16 dynamic_cast performruntimecasts
17 else alternatecaseforanifstatement
18 enum createenumerationtypes
19 explicit onlyuseconstructorswhentheyexactlymatch
20 export allowstemplatedefinitionstobeseparatedfromtheirdeclara
21 extern tellthecompileraboutvariablesdefinedelsewhere
22 false thebooleanvalueoffalse
23 float declareafloatingpointvariable
24 for loopingconstruct
25 friend grantnonmemberfunctionaccesstoprivatedata
26 goto jumptoadifferentpartoftheprogram
27 if executecodebasedoffoftheresultofatest
28 inline optimizecallstoshortfunctions
29 int declareaintegervariable
30 long declarealongintegervariable
31 mutable overrideaconstvariable
32 namespace partitiontheglobalnamespacebydefiningascope
33 new allocatedynamicmemoryforanewvariable
34 operator createoverloadedoperatorfunctions
35 private declareprivatemembersofaclass
36 protected declareprotectedmembersofaclass
37 public declarepublicmembersofaclass
588
38 register requestthatavariablebeoptimizedforspeed
39 reinterpret_cast changethetypeofavariable
40 return returnfromafunction
41 short declareashortintegervariable
42 signed modifyvariabletypedeclarations
43 sizeof returnthesizeofavariableortype
44 static createpermanentstorageforavariable
45 static_cast performanonpolymorphiccast
46 struct defineanewstructure
47 switch executecodebasedoffofdifferentpossiblevaluesforavariable
48 template creategenericfunctions
49 this apointertothecurrentobject
50 throw throwsanexception
51 true thebooleanvalueoftrue
52 try executecodethatcanthrowanexception
53 typedef createanewtypenamefromanexistingtype
54 typeid describesanobject
55 typename declareaclassorundefinedtype
astructurethatassignsmultiplevariablestothesamememory
56 union
location
57 unsigned declareanunsignedintegervariable
58 using importcompleteorpartialnamespacesintothecurrentscope
59 virtual createafunctionthatcanbeoverriddenbyaderivedclass
60 void declarefunctionsordatawithnoassociateddatatype
warnthecompileraboutvariablesthatcanbemodified
61 volatile
unexpectedly
62 wchar_t declareawidecharactervariable
63 while loopingconstruct
589