Diktat Pemrograman C++ Pre & Header

97
Danang Widjajanto Dibiayai denga Politeknik Ne n dana DIPA geri Jakarta Tahun 2008

Transcript of Diktat Pemrograman C++ Pre & Header

Page 1: Diktat Pemrograman C++ Pre & Header

Danang Widjajanto

Dibiayai dengaPoliteknik Ne

n dana DIPA geri Jakarta Tahun 2008

Page 2: Diktat Pemrograman C++ Pre & Header

(i)

Prakata Buku ini ditulis sebagai buku pendamping kelanjutan dari Diktat Kuliah

Pemrograman 1 yang telah penulis buat sebelumnya. Peserta kuliah dianggap telah menguasai dasar-dasar algoritma pemrograman dan penerapannya menggunakan bahasa C++. Di Mata Kuliah ini dipelajari berbagai fasilitas yang ada di bahasa pemrograman C++ (yang umumnya juga ada di bahasa pemrograman yang lain) seperti array, file pustaka, string, dan lain-lain.

Perlu ditekankan disini bahwa untukmempelajari Diktat ini mahasiswa harus sudah menguasai Diktat Pemrograman 1 terlebih dahulu. Merasa masih belum begiatu paham dengan apa yang ada di dikatat sebelumnya, sangat disarankan untuk kembali mempelajari diktat pemrograman 1. Indikator bahwa mahasiswa telah menguasai adalah dengan mencoba menjawab pertanyaanpertanyaan yang ada di setiap bab. Jika anda bisa menjawab sendiri pertanyaan-pertanyaan atau latihan-latihan yang ada di maka artinya mahasiswa telah menguasai materi yang ada.

Sebagaimana diktat yang pertama, buku ini juga masih memiliki sangat banyak kekurangan. Untuk itu penulis mohon maaf yang sebesar-besarnya kepada para mahasiswa yang menggunakannya. Kritik dan saran untuk perbaikan akan penulis terima dengan lapang dada.

Sebenarnya trend pemrograman pada saat ini mengarah ke Pemrograman berorientasi obyek. Pada bab terkahir dari buku ini diperkenalkan apa yang dimaksud dengan permrograman berorientasi obyek. Bagi mahasiswa yang berminat untuk medalami pemrograman komputer, Penulis merekomendasikan untuk mempelajari bahasa Java. Saat ini bahasa Java merupakan bahasa pemrograman berorientasi obyek yang paling sempurna dibandingkan bahasa yang lain. Sintaks-sintaks yang ada di pemrograman Java sangat mirip dengan sintaks bahasa C++, karena sebagian besar tim yang mengembangkan bahasa Java basisnya adalah pakar-pakar bahasa C++.

Sebagai akhir kata, Diktat pemrogmanan 1 dan 2 sebenarnya adalah masih dapat digolongkan sebagai Pemrograman komputer dasar. Untuk dapat menjadi programer yang sebenarnya dibutuhkan latihan-latihan dan pengalaman membuat aplikasi yang sebenarnya.

Semoga buku ini bermanfaat bagi mahasiswa atau siapapun yang mau menggunakannya. jazakumullah khoir.

Depok, Oktober 2008

Danang Wijayanto

Page 3: Diktat Pemrograman C++ Pre & Header

(ii)

DAFTAR ISI

halaman

PRAKATA (i)

DAFTAR ISI (ii)

BAB 1 ARRAY 1 DIMENSI 1

BAB 2 ARRAY 2 DIMENSI & 3 DIMENSI 4

BAB 3 ALGORITMA PENGURUTAN DATA 8

BAB 4 PENGENALAN FUNGSI 13

BAB 5 VARIABEL LOKAL DAN VARIABEL GLOBAL 19

BAB 6 FUNGSI DENGAN ARGUMEN INPUT DAN NILAI

BALIK 23

BAB 7 PENGELOLAAN STRING 31

BAB 8 FILE HEADER 36

BAB 9 PRE PROCESSOR 42

BAB 10 PENGENALAN POINTER 51

BAB 11 ARRAY POINTER DAN POINTER YG MENUNJUK KE

POINTER 55

BAB 12 MANAJEMEN MEMORI DINAMIS 60

BAB 13 VARIABEL STRUKUR 64

BAB 14 OPERASI FILE 70

BAB 15 PENGENALAN PEMROGRAMAN BERORIENTASI

OBYEK 78

DAFTAR PUSTAKA

Page 4: Diktat Pemrograman C++ Pre & Header

ARRAY 1 DIMENSI Array tidak lain adalah kumpulan data bertipe sama yang menggunakan nama yang

sama. Dengan menggunakan array sejumlah variabel dapat memakai nama yang sama.

Antara satu variabel dengan variabel lainnya dibedakan dengan menggunakan subscript.

Subscript tersebut berupa sebuah bilanagan yang diletakkan didalam kurung siku tepat

sesudah nama variabel. Melalui subscript inilah masing-masing elemen dapat diakses.

Array dapat dibedakan menjadi :

• Array berdimensi satu

• Array berdimensi dua

• Array berdimensi tiga

Untuk memberikan gambaran cobalah program berikut ini. Program ini meminta pemakai

untuk memasukkan 5 buah data temperatur dari keyboard. Kelima data tersebut

disimpan pada sebuah variabel array bernama suhu. Selanjutnya data yang ada pada

array tersebut ditampilkan ke layar.

Contoh Program No.1 //******************************************************** // Nama Program : suhu.cpp * // Contoh program yang menggunakan array * // ******************************************************* # include <iostream.h> void main() { float suhu[ 5 ]; // deklarasi array dengan 5 elemen bertipe float // Membaca data dari keyboard dan meletakkan ke array cout << "Masukkan 5 buah data suhu " << endl; for (int i=0 ; i<5 ; i++) { cout << (i+1) << " : "; cin >> suhu[ i ]; } // Menampilkan isi array ke layar cout << "Data suhu yang Anda masukkan : " << endl; for (i=0 ; i<5 ; i++) cout << suhu[ i ] << endl; }

Keterangan :

• Sebagaimana variabel biasa, sebelum digunakan variabel array harus

dideklarasikan dulu diawal program.

• Masing-masing elemen array dapat diakses dengan menggunakan subscrit

karena ukuran arraynya 5 maka subscriptnya adalah 0,1,2,3, dan 4.

Diktat Kuliah : Pemrograman Komputer 2 Bab 1 : 1

Page 5: Diktat Pemrograman C++ Pre & Header

suhu[0] menyatakan elemen aray ke 1

suhu[1] menyatakan elemen array ke 2

suhu[2] menyatakan elemen array ke 3

suhu[3] menyatakan elemen array ke 4

suhu[4] menyatakan elemen array ke 5

Berikut ini adalah contoh lain program menggunakan array untuk menghitung nilai rata-

rata suhu

Contoh Program No.2 //*********************************************** // Nama Program : suhu2.cpp * // Contoh program yang menggunakan array * // Untuk menghitung nilai rata-rata suhu * // ********************************************** # include <iostream.h> const int JUM_DATA = 5; // deklarasi konstanta integer agar program

// lebih luwes void main() { float suhu[ JUM_DATA ]; // deklarasi array float total; // untuk menampung suhu total // Membaca data dari keyboard dan meletakkan ke array cout << "Masukkan data suhu " << endl; for (int i=0 ; i<JUM_DATA ; i++) { cout << (i+1) << " : "; cin >> suhu[ i ]; } // Menghitung nilai rata-rata total = 0; // mula-mula diisi dengan nol for (i=0 ; i<JUM_DATA ; i++) total += suhu[ i ]; // tambahkan isi suhu[ i ] ke total cout << "suhu rata-rata = " << total / JUM_DATA << endl; } Pemberian Nilai Awal Terhadap Array

Seperti halnya variabel biasa variabel array juga dapat diberi nilai awal misalnya :

int jum_hari[12] =

{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

Contoh Program No.3 //******************************************************** // Nama Program : Jumlah_Hari.cpp * // Contoh pemberian nilai awal terhadap array * //********************************************************

Diktat Kuliah : Pemrograman Komputer 2 Bab 1 : 2

Page 6: Diktat Pemrograman C++ Pre & Header

# include <iostream.h> # include <iomanip.h> void main() { // Pendefenisian array jumlah_hari dan pemberian nilai awal int jumlah_hari[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; // Tampilkan isi jumlah_hari for (int i=0 ; i<12 ; i++) { cout << "jumlah_hari[ " << i << " ] = " << jumlah_hari[ i ] << endl; } } Tugas :

1. Buat program menggunakan array untuk menampilkan deret

Sn = 3n2 + 5n - 7 dg n = 1, 2,3, . . . s/d . 10

2. Buat program menggunakan array untuk menghitung jumlah kumulatif dari soal

diatas

3. Buatlah program menggunakan aray untuk menampilkan hari-hari dalam seminggu

untuk mendeklarasikan variabel text gunakan deklarasi

char *hari[7]. --> elemen ke-1 adalah hari[0], elemen ke-2 adalah hari[1] dst.

Untuk Latihan dirumah :

1. Program mencari bilangan terbesar dari suatu kumpulan angka

2. Program mencari bilangan terkecil dari suat kumpulan angka

3. Program menghitung selisih bilangan terbesar dan terkecil dari suatu kumpulan angka

4. Program mensortir bilangan ganjil dari suatu kumpulan angka

5. Program mensortir bilangan genap dari suatu kumpulan angka

Diktat Kuliah : Pemrograman Komputer 2 Bab 1 : 3

Page 7: Diktat Pemrograman C++ Pre & Header

ARRAY 2 DIMENSI & 3 DIMENSI

C++ memungkinkan pemakaian Array berdimensi 2 atau 3. Array ini dapa digunakan

untuk berbagai keperluan. Misalnya data jumlah kelulusan mahasiswa Jurusan Teknik

Elektro Politeknik Negeri Jakarta dari tahun ke tahun dapat disimpan dalam bentuk array

2 dimensi.

Tabel Data Kelulusan :

Program Studi 2001 2002 2003 2004

TeknikListrik 75 71 80 69

Teknik Elektronika 68 71 70 67

Teknik Telekomunikasi 35 37 33 36

Untuk menyimpan data ini diperlukan array dengan dimensi 3 x 4. Pendeklarasian array

nya adalah sbb.

int data_lulus[3][4];

int menyatakan bahwa data yang disimpan bertipe integer (bilangan bulat)

[3][4] menyatakan array terdiri dari 3 baris dan 4 kolom

maka anggauta-anggauta array tersebut masing-masing menyimpan 1 bilangan

sbb.

data_lulus [0][0] --> menyimpan bilangan 75

data_lulus [1][0] --> menyimpan bilangan 68

data_lulus [1][1] --> menyimpan bilangan 71

data_lulus [2][3] --> menyimpan bilangan 36

dst.

Contoh Program No.1

//******************************************************* // Nama Program : lulus.cpp * // Contoh program yang menggunakan array 2 dimensi * // ****************************************************** # include <iostream.h> void main() { int data_lulus[3][4]; // Array berdimensi dua int tahun, jurusan; // Memberikan nilai awal ke variabel array

Diktat Kuliah : Pemrograman Komputer 2 Bab 2 : 4

data_lulus [0][0] = 75;

Page 8: Diktat Pemrograman C++ Pre & Header

data_lulus [0][1] = 71; data_lulus [0][2] = 80; data_lulus [0][3] = 69; data_lulus [1][0] = 68; data_lulus [1][1] = 71; data_lulus [1][2] = 70; data_lulus [1][3] = 67; data_lulus [2][0] = 35; data_lulus [2][1] = 37; data_lulus [2][2] = 33; data_lulus [2][3] = 36;

// Proses untuk memperoleh informasi kelulusan while(1) { cout << "Jurusan (0 = TL, 1 = TE, 2 = TT) : "; cin >> jurusan; if ((jurusan==0) || (jurusan==1) || (jurusan == 2)) break; // keluar dari while } while(1) { cout << "Tahun (2001 - 2004) : "; cin >> tahun; if ((tahun>=2001) && (tahun<= 2004)) {

tahun = tahun - 2001;// konversi ke 0, 1, 2, atau 3 break; // keluar dari while } } cout << "Jumlah yang lulus = " << data_lulus[jurusan][tahun] << endl; } Keterangan :

Mula-mula program menciptakan sebuah array 2 dimensi dengan ukuran 3x4, selanjutnya

mengisi data jumlah kelulusan ke array tersebut. Kemudian program meminta user

memasukkan data jurusan dan tahun dari keyboard. Program dibuat sedemekian rupa

sehingga masukan dipastikan berada dalam jangkauan array, jika lebih maka program

tidak akan memberikan reaksi.

Pemberian nilai awal array pada program diatas dapat dilakukan dengan cara lain yang

lebih singkat sbb.

data_lulus [3][4] = { 75 , 71 , 80 , 69

68 , 71 , 70 , 67

335 , 37 , 33 , 36 }

Berikut ini adalah contoh lain program menggunakan array berdimensi 3 untuk

membentuk tulisan huruf A dan B pada layar monitor

Diktat Kuliah : Pemrograman Komputer 2 Bab 2 : 5

Page 9: Diktat Pemrograman C++ Pre & Header

Contoh Program No.2 //******************************************************** // Nama Program : huruf.cpp * // Contoh program yang menggunakan array * // Berdimensi tiga * // ******************************************************* # include <iostream.h> void main() { // Pendefinisian array berdimensi tiga dan emberian nilai awal int huruf [2][8][8] = { { { 0 , 1 , 1 , 1 , 1 , 1 , 0 , 0 } , { 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 } , { 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 } , { 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 } , { 1 , 1 , 0 , 0 , 0 , 0 , 1 , 0 } , { 1 , 1 , 0 , 0 , 0 , 0 , 1 , 0 } , { 1 , 1 , 0 , 0 , 0 , 0 , 1 , 0 } , { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } } , { { 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 } , { 1 , 0 , 0 , 0 , 0 , 1 , 0 , 0 } , { 1 , 0 , 0 , 0 , 0 , 1 , 0 , 0 } , { 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 } , { 1 , 1 , 0 , 0 , 0 , 0 , 1 , 0 } , { 1 , 1 , 0 , 0 , 0 , 0 , 1 , 0 } , { 1 , 1, 1 , 1 , 1 , 1 , 1 , 0 } , { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } } }; int i, j, k;

for ( i=1 ; i<2 ; i++) { for ( j=1 ; j<8 ; j++ ) { for ( k=1 ; k<8 ; k++) { if (huruf[i][j][k]==1) cout << ‘\xDB’ ; else cout << ‘x20’ ; // spasi } cout << endl; // pindah baris } cout << endl; // baris kosong } }

Diktat Kuliah : Pemrograman Komputer 2 Bab 2 : 6

Page 10: Diktat Pemrograman C++ Pre & Header

Untuk Latihan Dirumah :

1. Program mencari bilangan terbesar dari sebuah array integer 2 dimensi

2. Buat program penjumlahan 2 buah matrix menggunakan array 2 dimensi

3. Buat program mirip contoh no2 tapi untuk membentuk 3 huruf M, N, dan Z

4. Buat program untuk menghitung determinan dari matrix 2 x 2

Diktat Kuliah : Pemrograman Komputer 2 Bab 2 : 7

Page 11: Diktat Pemrograman C++ Pre & Header

ALGORITMA PENGURUTAN DATA

Pengurutan data merupakan salah satu permasalahan umum yang sering djumpai dalam

pemrograman. Terdapat beberapa metode untuk mengurutkan data yang banyak

digunakan secara umum yaitu :

1. Buble Sort

2. Maximum / Minimum Sort

3. Selection Sort

4. Insertion Sort

5. Heap Sort

6. Quick Sort

7. Merge Sort

8. Shell Short

Disini kita hanya akan membahasa 3 metode yang pertama saja.

1. Metode Pengurutan Buble Sort (Metode Gelembung)

Meotode ini terinspirasi oleh kenyataan bahwa gelembung sabun yang mengapung

diatas permukaan air. Hal ini disebabkan berat jenis gelembung yang lebih kecil dari

berat jenis air. Konsep dari fenomena tersebut kemudian diterapkan sebagai metode

pengurutan data dalam array. Dalam metode ini daa dengan nilai terkecil akan

diapungkan ke posisi atas dan sebaliknya data dengan nilai terbesar akan berada di posisi

terbawah. Sebagai contohmisalnya ada 5 data array sbb

X[0] X[1] X[2] X[3] X[4]

25 22 18 20 15

Program pengurutan dengan metode gelembung adalah sebagai berikut :

// Pengurutan data dengan mengguanakan // metode bubble sort (gelembung) # include <iostream.h> void main() { const N = 5; int X[N] = { 25, 22, 18, 20, 15}; int i, j, tampung; // Menampilkan data sebelum pengurutan cout << "Data sebelum diurutkan : " << endl; for (i=0; i<5; i++) {

Diktat Kuliah : Pemrograman Komputer 2 Bab 3: 8

Page 12: Diktat Pemrograman C++ Pre & Header

cout << "X[" << i <<"] = " << X[i] << endl; } // Melakukan proses pengurutan data

for (i=0; i<(N-1); i++) { for (j=(N-1); j>i; j--) { if ( X[j] < X[j-1] )

{ tampung = X[j]; X[j] = X[j-1]; X[j-1] = tampung;

} }

} // Menampilkan data setelah pengurutan cout << endl << endl; cout << "Data setelah diurutkan : " << endl; for (i=0; i<5; i++) { cout << "X[" << i <<"] = " << X[i] << endl; } } Penjelasan :

Tahap 0 (Data awal) “

X[0] X[1] X[2] X[3] X[4]

25 22 18 20 15

Tahap 1

X[0] X[1] X[2] X[3] X[4]

15 25 22 18 20

Tahap 2

X[0] X[1] X[2] X[3] X[4]

15 18 25 22 20

Tahap 3

Diktat Kuliah : Pemrograman Komputer 2 Bab 3: 9

Page 13: Diktat Pemrograman C++ Pre & Header

X[0] X[1] X[2] X[3] X[4]

15 18 20 25 22

Tahap 4

X[0] X[1] X[2] X[3] X[4]

15 18 20 22 25

2. Metode Pengurutan Maksimum

Disini kita hanya akan menggunakan metode maksimum saja, karena konsep yang

terdapat pad metode minimum sama persis dengan metode maksimum.

Berikut ini adalah contoh listing program pengurutan data dengan metode maksimum.

// Pengurutan data dengan mengguanakan // metode maximum # include <iostream.h> void main() { const N=5; // Banyaknya data yang akan diurutkan float X[N]={25,22,18,20,15}; // data yang akan diurukan float tampung_max,XK; // menampung nilai terbesar int i,j,j_max,K; // indeks array // Menampilkan data sebelum pengurutan cout << "Data sebelum diurutkan : " << endl; for (i=0; i<N; i++) { cout << "X[" << i <<"] = " << X[i] << endl; } // Melakukan proses pengurutan data for (i=(N-1);i>0;i--) { K = i; //index array yg akan diisi dengan nilai maksimum // mencari nilai terbesar diantara X[1] s/d X[K] j_max = 1; // index array yg memilii nilai terbesar // dimulai dari : 1 tampung_max=X[j_max]; // variabel untuk menyimpan nilai max // sementara for (j=0;j<=K;j++) { // mencari nilai terbesar dari X[1] s/d X[K-1] if (X[j]>tampung_max)

Diktat Kuliah : Pemrograman Komputer 2 Bab 3: 10

Page 14: Diktat Pemrograman C++ Pre & Header

{ j_max = j; tampung_max = X[j_max]; } } XK = X[K]; X[K] = X[j_max]; X[j_max] = XK; } // Menampilkan data setelah pengurutan cout << endl << endl; cout << "Data setelah diurutkan : " << endl; for (i=0; i<N; i++) { cout << "X[" << i <<"] = " << X[i] << endl; } } Penjelasan :

Tahap 0 (Data awal)

X[0] X[1] X[2] X[3] X[4]

25 22 18 20 15

Tahap 1

X[0] X[1] X[2] X[3] X[4]

15 22 18 20 25

Tahap 2

X[0] X[1] X[2] X[3] X[4]

15 20 18 22 25

Tahap 3

Diktat Kuliah : Pemrograman Komputer 2 Bab 3: 11

Page 15: Diktat Pemrograman C++ Pre & Header

X[0] X[1] X[2] X[3] X[4]

15 18 20 22 25

Tahap 4

X[0] X[1] X[2] X[3] X[4]

15 18 20 22 25

Latihan Soal :

1. Jelaskan perbedaan apa persamaan dan perbedaan antara metode pengurutan data

buble sort dan maksimum sort

2. Modifikasi contoh program maksimum sort menjadi metode minimum sort

3. Buat Flow chart dari metode gelembung

4. Buat Flow chart dari metode minimum sort

Diktat Kuliah : Pemrograman Komputer 2 Bab 3: 12

Page 16: Diktat Pemrograman C++ Pre & Header

PENGENALAN FUNGSI Fungsi dalam bahasa C sebenarnya adalah sebuah unit program kecil yang mandiri.

Sebuah program bahasa C (termasuk C++) adalah sekumpulan fungsi-fungsi yang saling

terkait satu sama lain sedemikian rupa sehingga membentuk suatu program yang utuh.

Kalau dianalogikan dengan perangkat keras maka fungsi dapat diibaratkan dengan

modul-modul yang membentuk sebuah sistim perangkat keras.

Misalnya sebuah pesawat radio penerima modulnya terdiri dari : antene, power suply,

tuner (rangkaian penangkap sinyal radio), pre amplifier, amplifier, speaker, casing, dsb.

Semua modul-modul tersebut dirangkai dengan cara yang tepat maka jadilah sebuah

pesawat radio.

Setiap fungsi mempunyai sebuah nama, dengan menggunakan nama ini satu fungsi

dapat memanggil / memerintahkan fungsi yang lain untuk dijalankan / dieksekusi.

Tujuan pembuatan fungsi adalah :

1. Memudahkan dalam pengembangan program. Karena dengan cara ini sebuah

program yang besar dapat dipecah-pecah menjadi beberapa program yang

ukurannya kecil sehingga mudah untuk ditangani.

2. Menghemat ukuran program. Manfaat ini terasa kalau ada beberapa deretan

instruksi yang sama digunakan di beberapa tempat dalam program.

Contoh Program No.1 //********************************************* // Nama Program : buku.cpp * // Contoh pembuatan dan pemanggilan fungsi * // ********************************************* # include <iostream.h> # include <iomanip.h> void garis(); // prototipe fungsi void main() {

garis(); // pemanggilan fungsi garis cout << setiosflags (ios::left) ; // atur rata kiri cout << setw(26) << “J U D U L B U K U”

<< “PENGARANG” << endl; garis(); // panggil kembali fungsi garis cout << setw(26) << “Mastering Borland C++”

<< “Tom Swan “ << endl; cout << setw(26) << “Turbo C++ By Example”

<< “Greg Perry & M Johnson “ << endl; cout << setw(26) << “Converting C to Turbo C++”

<< “Len Dorfman “ << endl; garis(); // panggil kembali fungsi garis }

Diktat Kuliah : Pemrograman Komputer 2 Bab 4 : 13

Page 17: Diktat Pemrograman C++ Pre & Header

void garis() {

int i; for ( i=0; i<49 ; i++ )

cout << ‘-‘ ; cout << endl;

} Keterangan :

• Pada contoh diatas fungsi garis() digunakan untuk menampilkan 49 buah

karakter minus (-). Fungsi ini dipanggil tiga kali oleh fungsi main().

• Setiap program bahasa C selal dieksekusi mulai dari fungsi main, selanjutnya

fungsi main ini dapat memanggil fungsi-fungsi yang lain sesuai kebutuhan.

• Setiap fungsi juga dapat memanggil fungsi yang lain (kecuali fungsi main) sesuai

keperluan.

• deskripsi perintah setiosflags, setw adanya di file header iomanip.h. Maka jika

anda lupa menuliskan #include <iomanip.h> diawal program, program akan

memberikan pesan kesalahan karena perintah setiosflags dan setw tidak dikenal.

Format penulisan fungsi adalah sebagai berikut :

# include <file header yang diperlukan oleh fungsi> tipe_data_kembalian_fungsi nama_fungsi (tipe_data_argumen1 nama_argumen1, tipe_data_argumen1 nama_argumen2, tipe_data_argumen1 nama_argumen3,

dst . . . . . . . . . . . . . . . . . . . . . . .) { isi fungsi . . . . . . }

• Pada contoh program 1 diatas terdapat 2 fungsi yaitu fungsi main() dan

garis().

• tipe_data_kembalian pada fungsi main() dan garis() adalah void atau kosong

artinya kedua fungsi tersebut tidak mengembalikan suatu nilai apapun

• tipe_data_argumen dan argumen pada fungsi main() dan garis() tidak ada atau

kosong artinya kedua fungsi tersebut tidak membutuhkan suatu argumen

masuka ketika dieksekusi

Diktat Kuliah : Pemrograman Komputer 2 Bab 4 : 14

Page 18: Diktat Pemrograman C++ Pre & Header

Berikut ini adalah contoh lain program yang melibatkan beberapa fungsi sekaligus.

Contoh Program No.2 //************************************************ // Nama Program : operasi_aritmatika.cpp * // Contoh program yang untuk melakukan * // perhitungan aritmatika sederhana * // ************************************************ # include <iostream.h> void tambah(); // prototip fungsi tambah() void kurang(); // prototip fungsi kurang() void kali(); // prototip fungsi kali() void bagi(); // prototip fungsi bagi() int a,b; float c; void main() {

cout << "Operasi Aritmetik Sederhana : " << endl; cout << "(tambah, kurang, kali, dan, bagi)" << endl << endl; cout << "Masukkan 2 buah bilangan yang akan dikenai operasi ” << ”aritmatika" << endl << endl; cout << "masukkan bilangan pertama lalu tekan enter : "; cin >> a; cout << "masukkan bilangan kedua lalu tekan enter : "; cin >> b; cout << endl; // ganti baris tambah(); // pemanggilan fungsi tambah() kurang(); // pemanggilan fungsi kurang() kali(); // pemanggilan fungsi kali() bagi(); // pemanggilan fungsi bagi()

} void tambah() {

c = a + b; cout << a << " ditambah " << b << " hasilnya " << c << endl;

} void kurang() {

c = a - b; cout << a << " dikurangi " << b << " hasilnya " << c << endl;

} void kali() {

c = a * b; cout << a << " dikalikan " << b << " hasilnya " << c << endl;

} void bagi() {

c = a / b; cout << a << " dibagi " << b << " hasilnya " << c << endl;

}

Diktat Kuliah : Pemrograman Komputer 2 Bab 4 : 15

Page 19: Diktat Pemrograman C++ Pre & Header

Contoh progrm yang lain. Contoh Program No.3

//****************************************** // Nama Program : KonversiSuhu.cpp * // Contoh lain pemanggilan fungsi * // ********************************************************* # include <iostream.h> # include <conio.h> # include <stdlib.h> void celcius_to_farenheit(); // prototip fungsi void farenheit_to_reamur(); // prototip fungsi void reamur_to_kelvin(); // prototip fungsi void main() { char pilihan;

clrscr(); while (1) {

cout << "Program Konversi Suhu " << endl; cout << "---------------------------------" << endl; cout << "Pilih salah satu pilihan berikut ini : " << endl ; cout << "Tekan angka 1 untuk konversi Celcius ke Farenheit "

<< endl; cout << "Tekan angka 2 untuk konversi Farenheit ke Reamur"

<< endl; cout << "Tekan angka 3 untuk konversi Reamur ke Kelvin"

<< endl; cout << "Tekan angka 9 untuk keluar dari program " << endl

<< endl; // _______________________________________________________ // program akan menunngu respon yang benar diberikan oleh user // jika tidak ada response user, program akan menunggu terus // menerus

while (1) {

pilihan = getch(); if ((pilihan == '1') || (pilihan == '2') || (pilihan == '3') || (pilihan == '9')) {

clrscr(); cout << "Anda memilih " << pilihan << endl;

break; }

}; // _______________________________________________________

if (pilihan=='1') celcius_to_farenheit();

else if (pilihan == '2') farenheit_to_reamur();

else if (pilihan == '3') reamur_to_kelvin();

Diktat Kuliah : Pemrograman Komputer 2 Bab 4 : 16

Page 20: Diktat Pemrograman C++ Pre & Header

else // artinya pilihannya pasti ‘9’ exit(0);

} } //______________________________________________ // defenisi fungsi : void celcius_to_farenheit() { float C,F; cout << "CELCIUS TO FARENHEIT" << endl; cout << "Masukkan suhu Celcius : "; cin >> C; F = (9/5)*C + 32; cout << C << " Celcius = " << F << " Farenheit"; getch(); } void farenheit_to_reamur() { float F, R; cout << "FARENHEIT TO REAMUR" << endl; cout << "Masukkan suhu Farenheit : "; cin >> F; R = (F - 32)* (4/9); cout << F << " Farenheit = " << R << " Reamur"; getch(); } void reamur_to_kelvin() { float R, K; cout << "REAMUR TO KELVIN" << endl; cout << "Masukkan suhu Reamur : "; cin >> R;

K = (R*5)/4 + 273;

cout << R << " Reamur = " << K << " Kelvin"; getch(); }

Keterangan :

• Pada contoh diatas pada fungsi main() terdapat 2 loop while(1), artinya loop

tersebut akan dilaksanakan terus menerus tanpa henti karena logika while nya

selalu bernilai 1 / benar / true.

• Untuk menghentikan loop diatas digunakan instruksi break dan fungsi exit(0).

• break digunakan untuk keluar dari sebuah loop

• exit() digunakan untuk keluar dari program sama sekali

Diktat Kuliah : Pemrograman Komputer 2 Bab 4 : 17

Page 21: Diktat Pemrograman C++ Pre & Header

• Fungsi getch (ada di file heder conio.h) akan menyebabkan program menunggu

user menekan salah satu tombol keyboard, fungsi getch akan memberikan suatu

nilai kembalian berupa sebuah character sesuai dengan tombol keyboard yang

ditekan.

Tugas di Kelas:

1. Coba praktekan kode program pada contoh program no 1

2. Jelaskan apa yang dimaksud dengan fungsi menurut pemahamanmu dengan

bahasamu sendiri

3. Jelaskan pemahanmu tentang fungsi yang ada pada contoh program no 1.

a) Jelaskan baris maksud dari //*********************** baris 1

b) Jelaskan maksud dari void garis(); // prototipe fungsi baris 7

c) Jelaskan maksud dari garis(); baris 10

d) Jelaskan maksud dari garis(); baris 23

4. Jelaskan potongan program berikut ini (ada di contoh program no 3)

void celcius_to_farenheit() { float C,F; cout << "CELCIUS TO FARENHEIT" << endl; cout << "Masukkan suhu Celcius : "; cin >> C; F = (9/5)*C + 32; cout << C << " Celcius = " << F << " Farenheit"; getch(); }

5. Buat flow chart dari ketiga contoh program diatas

Untuk latihan di rumah

1. Buat program mencari luas dan keliling lingkaran.

Program terdiri darii 3 fungsi yaitu fungsi main(), keliling() dan luas().

2. Buat program untuk menghitung nilai rata-rata, mencari bilangan terbesar, dan

menghitung jumlah kumulatif dari suatu kumpulan bilangan. Program terdiri dari

empat fungsi yaitu fungsi main(), average(), bigest() dan kumulatif()

Diktat Kuliah : Pemrograman Komputer 2 Bab 4 : 18

Page 22: Diktat Pemrograman C++ Pre & Header

VARIABEL LOKAL DAN VARIABEL GLOBAL Variabel-variabel yang digunakan di suatu fungsi dapat ditentukan ruang lingkupnya,

apakah hanya dikenal diblok statemen saja, atau didalam fungsi saja atau semua bagian

program. Terdapat tiga macam bentuk variabel yang mempunyai ruang lingkup berbeda,

yaitu :

1. variabel lokal

1. Variabel global

2. Variabel statik

Variabel Lokal / Variabel Otomatis :

Variabel lokal atau variabel otomatis adalah variabel yang namanya dan nilainya hanya

dikenal di suatu blok statemen tertentu saja atau didalam suatu fungsi. Untuk membuat

suatu variabel menjadi bersifat lokal, maka variabel ini harus dideklarasikan di dalam blok

bersangkutan. Variabel lokal akan dihapus dari blok memori jika proses sudah

meninggalkan blok statemen letak variabel lokalnya.

Contoh Program No.1

//******************************************************** // Nama Program : tambah.cpp * // Contoh penggunaan variabel lokal * // ******************************************************* # include <iostream.h> void tambah(); // prototipe fungsi void main() { int a,b,Hasil; a = 6; b = 7; tambah(); Hasil = a + b; cout << endl << endl; cout << "Penjumlahan variabel lokal dalam lingkup ”

<< ”fungsi main() : " << endl; cout << "a + b = " << Hasil; } void tambah() { int a,b,Jumlah; a = 8; b = 3; Jumlah = a + b; cout << "Penjumlahan variabel lokal dalam lingkup “

<< ”fungsi tambah() : " << endl; cout << "a + b = " << Jumlah; }

Diktat Kuliah : Pemrograman Komputer 2 Bab 5 : 19

Page 23: Diktat Pemrograman C++ Pre & Header

Keterangan :

• Pada contoh diatas variabel a dan b digunakan 2 kali. Pertama variabel a dan b

digunakan sebagai variabel lokal dalam lingkup fungsi main(). Kemudian

variabela a dan b juga digunakan sebagai variabel lokal dalam lingkup fungsi

tambah().

• walaupun nama variabelnya sama a dan b, namun kedua variabel a dan b tidak

saling berhubungan sama sekali. Variabel a dan b dalam lingkup fungsi main() tidak dikenali oleh statemen dalam fungsi tambah(). Demikian juga sebaliknya,

variabel a dan b dalam fungsi tambah() tidak dikenali dalam fungsi main().

Berikut ini adalah contoh lain program menggunakan variabel lokal. Contoh Program No.2 // ********************************************** // Nama Program : alpha.cpp * // Memperlihatkan efek variabel lokal * // ********************************************** # include <iostream.h> void alpha(); // prototip fungsi void main() { int x = 22; // variabel lokal pada main double y = 2.22; // ini juga cout << "Pada main() : x = " << x << " y = " << y << endl; alpha(); // pemanggilan fungsi alpha() cout << "Pada main() : x = " << x << " y = " << y << endl; } // Defenisi fungsi alpha void alpha() { int x = 20; // variabel lokal pada alpha() double y = 3.14; // begitu juga variabel ini cout << "Pada alpha() : x = " << x << " y = " << y << endl; }

Keterangan :

Jika program dieksekusi akan tampak bahwa perubahan x dan y pada alpha tidak

mempengaruhi variabel bernama sama pada main(). Ini membuktikkan bahwa variabel-

variabel tersebut bersifat lokal sehingga hanya dikenali oleh fungsi yang

mendefinisikannya.

Diktat Kuliah : Pemrograman Komputer 2 Bab 5 : 20

Page 24: Diktat Pemrograman C++ Pre & Header

Variabel Global / Variabel External :

Variabel Global atau variabel eksternal merupakan kebalikan dari variabel lokal. Variabel

global adalah variabel yang didefenisikan diluar fungsi manapun. Dinamakan variabel

global karena variabel ini dikenali oleh semua fungsi. Berikut ini adalah contoh progaram

yang melibatkan variabel eksternal.

Contoh Program No.3

//*********************************************** // Nama Program : Global.cpp * // Contoh penggunaan variabel global * // ********************************************** # include <iostream.h> int obladi; // deklarasi variabel eksternal void tambah(); // prototipe fungsi void main() { cout << obladi << endl; tambah(); cout << obladi << endl; tambah(); cout << obladi << endl; } //________________________________________________________________ // defenisi fungsi : void tambah() { obladi++; // Nilai variabel eksternal dinaikkan satu } Keterangan :

Jika program dieksekusi akan terlihat bahwa

• Sekalipun di dalam fungsi main() dan tambah() tidak adak pendefeinisian

(atau pendeklarasian) variabel obladi, ternyata variabel ini dikenal oleh kedua

fungsi ini.

• Nilai dari variabel obladi dapat diubah dari dalam fungsi tambah.

Sekarang ada pertanyaan, Bagaimana jika dalam suatu problam terdapat satu variabel

lokal yang sama namanya dengan variabel global ?. Berikut ini adalah contoh program

dengan kasus seperti itu.

Contoh Program No.4

//************************************************ // Nama Program : Global_Lokal.cpp * // Contoh penggunaan variabel global dan lokal * // dengan nama yang sama * //************************************************ # include <iostream.h> int fernando = 55; // deklarasi variabel eksternal // sekaligus memberikan nilai awal

Diktat Kuliah : Pemrograman Komputer 2 Bab 5 : 21

Page 25: Diktat Pemrograman C++ Pre & Header

void bravo(); // prototipe fungsi void main() { cout << “main() : fernando = “ << fernando << endl; bravo(); cout << “main() : fernando = “ << fernando << endl; } //______________________________________________ // defenisi fungsi : void bravo() { int fernando; // variabel lokal fernando = 77; cout << “bravo() : fernando = “ << fernando << endl; } Tampak bahwa perubahan variabel fernando pada fungsi bravo() tidak mengubah

variabel global yang mempunyai nama yang sama

Variabel Statis :

Variabel Statis adalah variabel ang mempunyai sifat-sifat khusus yaitu nilainya akan terus

dipertahankan dan tidak akan hilang selama program masih berjalan.

variabel statis didelarasikan dengan menggunakan kata kunci static pada deklarasinya

contoh :

static int variabel_a;

Tugas :

1. Buat program untuk menunjukkan perbedaan variabel global dan variabel lokal .

Program terdiri dari fungsi main(), dan fungsi naik(). pada kedua fungsi tersebut

terdapat variabel dengan tipe integer yang mempunyai nama yang sama yaitu x

disamping itu ada satu variabel global bernama y.

2. Buat program yang mendeklarasikan sebuah variabel integer berbentuk array yang

sifatnya global. Program tersebut dilengkapi dengan fungsi-fungsi untuk mencari

bilangan terbesar, bilangan terkecil, nilai rata-rata, dan jumlah kumulatifnya.

3. Buat fungsi untuk menghitung nilai dari polinomial :

a.x3 + b.x2 + c.x + d

dengan a, b, c, d, dideklarasikan sebagai variabel global dan diberi nilai awal

x array bilangan integer 1, 2,3,4, .... 10

Diktat Kuliah : Pemrograman Komputer 2 Bab 5 : 22

Page 26: Diktat Pemrograman C++ Pre & Header

FUNGSI DENGAN ARGUMEN INPUT DAN NILAI BALIK

FUNGSI DENGAN NILAI BALIK :

Sampai sejauh ini kita telah meempelajari penggunaan fungsi untuk memecah program

menjadi modul-modul kecil agar mudah dikelola. Sebenarnya ada 2 kelengkapan fungsi

yang belum dipelajari yaitu nilai balik fungsi dan argumen input pada fungsi.

Nilai balik fungsi dapat dipandang sebagai keluaran atau output fungsi sedangkan

argumen fungsi dapat dipandang sebagai masukan atau input pada sebuah fungsi. Untuk

sekarang ini pembahasan akan difokuskan pada nilai balik fungsi. Minggu depan baru

akan dibahas tentang argumen fungsi.

Apa yang dimaksud dengan nilai balik fungsi. Nilai balik fungsi adalah nilai yang

dihasilkan oleh fungsi setelah suatu fungsi selesai dieksekusi. Nilai yang dikembalikan

oleh sebuah fungsi dapat bermacam-macam jenisnya. Misalnya dapat berupa sebuah

bilangan integer, float, sebuah karakter, dsb.

Tipe atau jenis dari nilai yang dikembalikan oleh sebuah fungsi ditentukan oleh prototipe

atau defenisi fungsi. tipe nilai kembalian yang disebutkan pada prototipe fungsi harus

sama dengan yang disebutkan pada defenisi fungsi.

Berikut ini adalah contoh prototipe dan defenisi fungis dengan nilai balik.

// prototipe fungsi long kuadrat_x(); --------------------- // defenisi fungsi long kuadrat_x(); { return (x * x) ; } Pernyataan return pada defenisi diatas dimaksudkan untuk memberikan nilai balik dari

fungsi. Jenis data yang diberikan setelah statemen return tersebut harus klop / cocok

dengan tipe data yang disebutkan pada prototipe dan defenisi fungsi. Pada contoh ini

tidak terlihat pendeklarasian terhadap x, maka agar x dapat dikenali x harus

dideklarasikan ditempat lain sebagai variabel global.

Berikut ini adalah contoh program selengkapnya :

Contoh Program No.1

//*************************************** // Nama Program : kuadrat.cpp * // Contoh fungsi dengan nilai balik * //*************************************** # include <iostream.h>

Diktat Kuliah : Pemrograman Komputer 2 Bab 6 : 23

Page 27: Diktat Pemrograman C++ Pre & Header

long x; // deklarasi variabel global x long kuadrat_x(); // prototipe fungsi dengan nilai balik bertipe long void main() { x = 2; cout << " Nilai x yang ke-1 = " << x << endl; x = kuadrat_x(); cout << " Nilai x yang ke-2 = " << x << endl; x = kuadrat_x(); cout << " Nilai x yang ke-3 = " << x << endl; } long kuadrat_x() // defenisi fungsi { return (x * x) ;

}

Berikut ini contoh lain program yang mengandung fungsi dengan nilai balik

Contoh Program No.2

//************************************************ // Nama Program : Faktorial.cpp * // Contoh fungsi dengan nilai balik * // *********************************************** # include <iostream.h> long F; // deklarasi variabel global F long Faktorial(); // prototipe fungsi void main() { F = 4; cout << “Faktorial dari 4 = “ << Faktorial(); } long Faktorial() // defenisi fungsi { long FFF = 1; do { FFF = FFF * F; F = F-1; } while (F > 1); return FFF; }

Catatan :

Jika sebuah fungsi dideklarasikan dengan tipe data void, artinya fungsi tersebut tidak

mempunyai nilai balik.

Tugas :

1. Buat program yang mendeklarasikan sebuah variabel integer berbentuk array yang

sifatnya global. Program tersebut dilengkapi dengan fungsi-fungsi yang nilai

Diktat Kuliah : Pemrograman Komputer 2 Bab 6 : 24

Page 28: Diktat Pemrograman C++ Pre & Header

baliknya adalah bilangan terbesar, bilangan terkecil, nilai rata-rata, dan jumlah

kumulatifnya.

2. Buat fungsi yang nilai kembaliannya adalah hasil dari polinomial :

a.x3 + b.x2 + c.x + d

dengan a, b, c, d, dideklarasikan sebagai variabel global dan diberi nilai awal

x adalah array bilangan integer 1, 2,3,4, .... 10

Untuk Latihan di Rumah :

1. Buat fungsi dengan nilai kembaliannya adalah

a) luas segi tiga

b) keliling segitiga

c) luas trapesium

d) keliling trapesium

e) luas lingkaran

f) keliling lingkaran

2. Buat fungsi yang nilai kembaliannya adalah

a) konversi Celcius ke Farenheit

b) konversi Farenheit ke Celcius

c) Dolar ke Rupiah

d) Rupiah ke dolar

e) mil ke km

f) km ke mil

FUNGSI DENGAN ARGUMEN INPUT DAN NILAI BALIK:

Apa yang dimaksud dengan argumen fungsi. Argumen fungsi (atau disebut juga

parameter input fungsi) adalah nilai yang diberikan pada fungsi pada saat pemanggilan

fungsi. Nilai yang yang diberikan ke fungsi dapat bermacam-macam tipenya. Misalnya

dapat berupa sebuah bilangan integer, sebuah karakter, suatu array bilangan riil, dsb.

Tipe dari nilai yang diberikan ke sebuah fungsi ditentukan oleh prototipe atau defenisi

fungsi. tipe argumen yang disebutkan pada prototipe fungsi harus sama dengan yang

disebutkan pada defInisi fungsi.

Berikut ini adalah contoh prototipe dan definisi fungsi dengan argumen input.

Contoh Program No.1

Diktat Kuliah : Pemrograman Komputer 2 Bab 6 : 25

Page 29: Diktat Pemrograman C++ Pre & Header

//******************************************************** // Nama Program : bigest.cpp * // Contoh program yang menggunakan argumen * // untuk menentukan bilangan terbesar dari 3 bilangan * //******************************************************** # include <iostream.h> int bigest(int a, int b, int c); // prototipe fungsi (deklarasi fungsi) void main() { int a = 23, b = 62, c = 5;

cout << "bigest(a,b,c) = " <<bigest(a,b,c) << endl; cout << "bigest(35,45,300) = " <<bigest(35,45,300) << endl; cout << "bigest(a,100,c) = " <<bigest(a,100,c) << endl; } int bigest(int a, int b, int c) { int mostbig; if ((a>b) && (a>c)) mostbig = a; else if ((b>a) && (b>c)) mostbig = b; else mostbig = c; return mostbig; } Berikut ini adalah modifikasi dari contoh program no 2 pada minggu ke-3 namun dengan

modifikasi sehingga fungsinya menggunakan nilai balik dan argumen.

Contoh Program No.2

Berikut ini adalah contoh lain program yang melibatkan beberapa fungsi sekaligus. Contoh Program No.2

//************************************************ // Nama Program : operasi_aritmatika.cpp * // Contoh program yang untuk melakukan * // perhitungan aritmatika sederhana * // menggunakan fungsi dengan nilai balik dan * // argumen * // ************************************************ # include <iostream.h> float tambah (float a, float b); // prototip fungsi tambah() float kurang (float a, float b); // prototip fungsi kurang() float kali (float a, float b); // prototip fungsi kali() float bagi (float a, float b); // prototip fungsi bagi(); void main() { float x,y,z; cout << "Operasi Aritmetik Sederhana : " << endl; cout << "(tambah, kurang, kali, dan, bagi)" << endl << endl;

Diktat Kuliah : Pemrograman Komputer 2 Bab 6 : 26

Page 30: Diktat Pemrograman C++ Pre & Header

cout << "Masukkan 2 buah bilangan yang akan dikenai operasi aritmatika " << endl << endl; cout << "masukkan bilangan pertama lalu tekan enter : "; cin >> x; cout << "masukkan bilangan kedua lalu tekan enter : "; cin >> y; cout << endl; // ganti baris

cout << “Eksekusi fungsi tambah : “ << endl; z = tambah(x,y); cout << x << “ + “ << y << “ = “ << z << endl << endl;

cout << “Eksekusi fungsi kurang : “ << endl; z = kurang(x,y); cout << x << “ - “ << y << “ = “ << z << endl << endl; cout << “Eksekusi fungsi kali : “ << endl; z = kali(x,y); cout << x << “ x “ << y << “ = “ << z << endl << endl; cout << “Eksekusi fungsi bagi : “ << endl; z = bagi(x,y); cout << x << “ / “ << y << “ = “ << z << endl << endl; } float tambah(float a, float b) { return (a+b); } float kurang(float a, float b) { return (a-b); } float kali(float a, float b) { return (a*b); } float bagi(float a, float b) { return (a/b);

} Berikut ini adalah modifikasi dari contoh program konversi suhu pada minggu-4 namun

dimodifikasi sehinggan sekarang menggunakan fungsi dengan nilai balik

Contoh Program No.3

//****************************************** // Nama Program : KonversiSuhu.cpp *

Diktat Kuliah : Pemrograman Komputer 2 Bab 6 : 27

Page 31: Diktat Pemrograman C++ Pre & Header

// Contoh lain pemanggilan fungsi * // ***************************************** # include <iostream.h> # include <conio.h> # include <stdlib.h> float celcius_to_farenheit(float celcius); // prototip fungsi float farenheit_to_reamur(float farenheit); // prototip fungsi float reamur_to_kelvin(float reamur); // prototip fungsi void main() { float suhu,SUHU; char pilihan; while (1) // artinya while selalu bernilai benar { clrscr(); cout << "PROGRAM KONVERSI SUHU : " << endl; cout << "Pilihan 1 Konversi Celcius ke Farenheit " << endl; cout << " 2 Konversi Farenheit ke Reamur" << endl; cout << " 3 Konversi Reamur ke Kelvin" << endl; cout << "--------------------------------------------" << endl; cout << "Masukkan nilai suhu yang akan dikonversi : ";

cin >> suhu; cout << endl; cout << "Pilih salah satu pilihan berikut ini : " << endl ; cout << "Tekan angka 1 untuk konversi Celcius ke Farenheit "

<< endl; cout << "Tekan angka 2 untuk konversi Farenheit ke Reamur" << endl; cout << "Tekan angka 3 untuk konversi Reamur ke Kelvin" << endl; cout << "Tekan angka 9 untuk keluar dari program " << endl << endl; // _______________________________________________________ // program akan menunggu respon yang benar diberikan jika tidak // program akan menunggu terus menerus

while (1) { pilihan = getch();

if ((pilihan == '1') || (pilihan == '2') || (pilihan == '3') || (pilihan == '9'))

{ cout << "Anda memilih "<< pilihan << endl; break; } }; // _______________________________________________________ if (pilihan=='1')

Diktat Kuliah : Pemrograman Komputer 2 Bab 6 : 28

Page 32: Diktat Pemrograman C++ Pre & Header

SUHU = celcius_to_farenheit(suhu); else if (pilihan == '2') SUHU = farenheit_to_reamur(suhu); else if (pilihan == '3') SUHU = reamur_to_kelvin(suhu); else // artinya pilihannya pasti '9' exit(0); cout << "Hasil konversi suhu adalah : " << SUHU; getch(); } } //______________________________________________ // defenisi fungsi : float celcius_to_farenheit(float celcius) { float F; F = (9.0/5)*celcius + 32; return F; } float farenheit_to_reamur(float farenheit) { float R; R = (farenheit - 32)* (4.0/9); return R; } float reamur_to_kelvin(float reamur) { float K; K = (reamur*5.0)/4 + 273; return K;

} Tugas :

1. Buat fungsi yang dapat digunakan untuk menghitung faktorial dari sebuah bilangan

bulat. Test fungsi tersebut dalam sebuah program.

2. Buat Fungsi untuk menghitung nilia permutasi dari dua buah bilangan

contoh : 1012120

)123()12(12345

!3)!35(!5)3,5( ===

−=

xxxxxxxx

xP

Test fungsi tersebut dalam sebuah program

3. Buat sebuah fungsi untuk mengkoonversi nilai detik menjadi jam, menit detik.

contoh : 5000 detik = 1 jam, 23 menit, 20 detik

Diktat Kuliah : Pemrograman Komputer 2 Bab 6 : 29

Page 33: Diktat Pemrograman C++ Pre & Header

Test fungsi tersebut dalam sebuah program.

Untuk latihan di rumah :

1. Fungsi untuk mencari bilangan terbesar dari suatu kumpulan angka

2. Fungsi untuk mencari bilangan terkecil dari suat kumpulan angka

3. Fungsi untuk menghitung selisih bilangan terbesar dan terkecil dari suatu kumpulan

angka

4. Fungsi untuk mensortir bilangan ganjil dari suatu kumpulan angka

5. Fungsi untuk mensortir bilangan genap dari suatu kumpulan angka

6. Buat fungsi untuk menampilkan deret

Sn = 3n2 + 5n - 7 dg n = 1, 2,3, . . . s/d . 10

7. Buat fungsi untuk menghitung jumlah kumulatif dari suatu kumpulan bilangan

Diktat Kuliah : Pemrograman Komputer 2 Bab 6 : 30

Page 34: Diktat Pemrograman C++ Pre & Header

PENGELOLAAN STRING String adalah istilah yang digunakan dalam pemrograman komputer untuk menyatakan

sederetan karakter atau text. Kita sudah sering menggunakan string dalam contoh-

contoh program terdahulu. misalnya pernyataan : cout << “Halo C++” << endl;

Rangkaian karakter yang diapit 2 tanda petik itulah yang disebut string.

Nilai string dapat disimpan dalam sebuah variabel. Variabel yang digunakan untuk

menyimpan nilai string disebut variabel string

contoh :

char teks[10] // deklarasi variabel string bernama teks dg panjang 10

karakter

Jadi variabel string tidak lain adalah array dari variabel char.

Setelah suatu variabel string dideklarasikan, variabel tersebut dapat diisi dengan suatu

nilai string dengan menggunakan statemen cin

Contoh Program No.1

//******************************************************* // Nama Program : string1.cpp * // Contoh program yang menggunakan variabel string * // dan pengisian variabel tsb melalui cin * //******************************************************* # include <iostream.h> # include <conio.h> void main() { char teks[13]; // string dengan panjang maksimal 12 karakter cout << “Masukkan sebuah kata “ << endl; cin >> teks; cout << “Yang anda masukkan : “ << teks << endl; } Jika anda coba mengetikkan 2 buah kata yang dipisahkan oleh spasi, ternyata bahwa

karakter-karakter yang terletak sesudah spasi tidak dapat ditampung oleh variabel teksi

diatas. Ini disebabkan operator >> pada cin hanya bisa membaca masukan hingga

terdapat spasi, tab, atau enter.

Jadi bagaimana caranya agar spasi tetap dapat dibaca ? Caranya dengan menggunakan

fungsi anggauta getline yang ada pada obyek cin.

Contoh Program No.2

Diktat Kuliah : Pemrograman Komputer 2 Bab 7 : 31

Page 35: Diktat Pemrograman C++ Pre & Header

//*********************************************** // Nama Program : String2.cpp * // Contoh program yang menggunakan string * // Untuk membaca 2 kata atau lebih * //*********************************************** # include <iostream.h> # include <conio.h> void main() { char teks[13]; // String dengan panjang maksimal 12 karakter cout << “Masukkan sebuah atau beberapa kata “ << endl; cin.getline (teks, sizeof(teks)); cout << “Yang anda masukkan : “ << teks; } Contoh Program No.3

//***************************************** // Nama Program : String3.cpp * //***************************************** # include <iostream.h> # include <conio.h> void main() { char nama[25]; char alamat[35]; cout << “Nama Anda : “ ; cin.getline(nama, sizeof(nama)); cout << “Alamat : “ ; cin.getline(alamat,sizeof(alamat)); cout << “NAMA = “ << nama << endl; cout << “ALAMAT = “ << alamat << endl; } Inisialisasi String :

Suatu variabel string dapat diberi nilai awal seperti halnya variabel lain.

contoh :

char bahasa[] = { ‘C’ , ‘+’ , ‘+’ , ‘\0’ };

Tampak bahwa elemen terakhir pada inisialisasi diatas berupa karakter NULL. Bentuk

inisialiasi tsd dapat dilakukan dengan cara yang lebih mudah sbb.

char bahasa[] = “C++”;

Contoh Program No.4

//***************************************** // Nama Program : String4.cpp * //*****************************************

Diktat Kuliah : Pemrograman Komputer 2 Bab 7 : 32

Page 36: Diktat Pemrograman C++ Pre & Header

# include <iostream.h> void main() { char bahasa[] = “C++”; // Inisialisasi string cout << bahasa << endl; }

Menyalin String :

Menyalin string berbeda dengan menyalin bilangan. Misalnya teks1, dan teks2

adalahvariabel string. Anda tidak dapat memeberikan pernyataan teks1 = teks2; untuk

menyalin string teks2 ke teks1. caranya adalah sbb.

Contoh Program No.5

//*********************************************** // Nama Program : String5.cpp * // Menyalin string karakter demi karakter * //*********************************************** # include <iostream.h> void main() { char teks[] = “C++ Oke”; char data [25];

for (int i = 0; teks[i] ; i++) data[i] = teks[i];

data [i] = ‘\0’; // karakter NULL sebagai penutup cout << “Isi data : “ << data << endl;

} Disamping cara diatas C++ menyediakan fungsi khusus untuk melakukan tugas

enyalinan string. Fungsi tersebut bernama strcpy(). Fungsi tersebut ada didalam file

header string.h

Contoh Program No.6

//*************************************** // Nama Program : String5.cpp * // Menyalin string dg fungsi strcpy() * //*************************************** # include <iostream.h> # incude <string.h> void main() { char teks[] = “C++ Oke”; char data [25]; strcpy(data, teks); // Menyalin isi teks ke data cout << “Isi data : “ << data << endl; }

Tugas :

Diktat Kuliah : Pemrograman Komputer 2 Bab 7 : 33

Page 37: Diktat Pemrograman C++ Pre & Header

1. Buat program untuk menghitung jumlah karakter dalam sebuah string.

Untuk latihan di rumah :

1. Buat program untuk mengecek apakah sebuah nama mahasiswa yang diinput ada

didalam daftar nama yang telah dibuat sebelumya.

Bantuan : Gunakan variabel array char berdimensi dua.

//******************************************************** // Nama Program : Tugas Minggu8.cpp * // ******************************************************* # include <iostream.h> void main() { int panjang; char String1[] ="Pengantar Algoritma dan Pemrograman"; for (int i=0; String1[i]; i++) {panjang = i;} cout << "panjang String1 = " << panjang << " karakter"; }

Tambahan STRING

Dalam pengembangan sebuah program sering sekali dibutuhkan manipulasi string. Yang

termasuk manipulasi string ini misalnya :

• Proses pencarian

• Proses penyalinan

• Proses pembandingan

• Proses yg lain.

Diktat Kuliah : Pemrograman Komputer 2 Bab 7 : 34

Page 38: Diktat Pemrograman C++ Pre & Header

Untuk keperluan tersebut kompiler C/C++ telah menyediakan file header tersendiri yang

dinamakan file string.h

Penggabungan string

Fungsi strcat(), strncat()

Menghitung panjang string

Fungsi strlen()

Menyalin string

Fungsi strcpy(), strncpy(), strdup()

Membandingkan string

Fungsi strcmp(), strncpy()

Pencarian string()

Fungsi strchr(), strrchr(), strspn(), strcspn(), strpbrk, strstr

Konversi string

Fungsi strlwr(), strupr()

Contoh : gunakan help

Diktat Kuliah : Pemrograman Komputer 2 Bab 7 : 35

Page 39: Diktat Pemrograman C++ Pre & Header

FILE HEADER File header adalah file pustaka yang ada di bahasa C. File header ditandai dengan extensi

*.h , misalnya iostream.h , conio.h , math.h , stdlib.h. dsb. Compiler C menyediakan

banyak sekali file header untuk berbagai kebutuhan dalam pemrograman. Kita sebagai

user juga dapat membuat file header sendiri yang sesuai dengan kebutuhan sendiri.

Apa sebenarnya file header itu ?. Sebenarnya file header adalah file yang berisi

kumpulan prototipe fungsi- fungsi yang sejenis kegunaannya. Misalnya file header

math.h berisi fungsi-fungsi untuk mengerjakan berbagai operasi matematik seperti

operasi trigonometri, logaritma, dsb.

Ada perbedaan antara file header yang disediakan oleh compeler C dengan file header

yang kita buat sendiri. File header yang disediakan oleh vendor C hanya berisi prototipe

fungsi-fungsi tanpa defenisi dari fungsi tersebut. Defenisi fungsi telah dicompile dan

hasil compilenya telah dijadikan satu dengan program compiler C nya.

Jika kita membuat file header sendiri, maka cara yang termudah adalah kita tempatkan

file defenisi menjadi satu dengan file headernya seperti yang akan kita coba nanti.

Contoh Program No.1

// ******************************************************* // Nama File : aritmati.h // File ini berisi prototipe dan defenisi funsi-fungsi // Untuk melakukan operasi2 Aritmatika sederhana // yaitu tambah, kurang, kali, dan bagi // ******************************************************* # ifndef _aritmatika # define _aritmatika double tambah(double a, double b); // prototipe fungsi tambah double kurang(double a, double b); // prototipe fungsi kurang double kali(double a, double b); // prototipe fungsi kali double bagi(double a, double b); // prototipe fungsi bagi double tambah(double a, double b) // defenisi fungsi tambah { return (a+b); } double kurang(double a, double b) // defenisi fungsi kurang { return (a-b); } double kali(double a, double b) // defenisi fungsi kali { return (a*b); } double bagi(double a, double b) // defenisi fungsi bagi { return (a/b);

Diktat Kuliah : Pemrograman Komputer 2 Bab 8 : 36

}

Page 40: Diktat Pemrograman C++ Pre & Header

# endif

Berikut ini adalah program yang menggunakan file header diatas

/ ***************************************************** // Nama File : runarit.cpp * // File ini berisi program yang menggunakan * // fungsi-fungsi yang telah didefenisikan di * // file header aritmatika.h * //***************************************************** # include <iostream.h> # include "aritmati.h" void main() { double a,b; a = 57.34; b = 34.71; cout << "a = " << a << endl; cout << "b = " << b << endl; cout << endl; cout << " a + b = " << tambah(a,b); cout << endl; cout << " a - b = " << kurang(a,b); cout << endl; cout << " a * b = " << kali(a,b); cout << endl; cout << " a / b = " << bagi(a,b); cout << endl; } Keterangan :

• Pada file aritmatika.h, baris : # ifndef _aritmatika

berfungsi untuk memeriksa ada tidaknya pengnal dengan nama _aritmatika , Kalau

tidak ada , maka bagian yang terletak antara #ifndef _aritmatika dan # endif akan

diproses pada saat kompilasi, sebaliknya jika telah ada pengenal dengan nama

aritmatika.h maka bagian tersebut dilewati atau tidak diproses sama sekali.

• Pada file aritmatika.h, baris : # define _aritmatika

berfungsi untuk mendefenisikan pengenal _aritmatika, dan pendefenisian ini hanya

akan dilakukan kalau sebelumnya belum terdapat pengenal _aritmatika.

Hal seperti ini banyak dijumpai pada file-file header. Tujuannya adalah untuk

menghindari adanya penyertaan barisfile header sama lebih dari satu kali.

• Kalau anda perhatikan ada 2 cara pendeklarsian file header yang berbeda pada file

runaritmatika.cpp yaitu :

1. # include <iostream.h> dan

Diktat Kuliah : Pemrograman Komputer 2 Bab 8 : 37

Page 41: Diktat Pemrograman C++ Pre & Header

2. # include “aritmatika.h”

Bentuk pertama mengisyaratkan bahwa pencarian file dilakukan pada

direktori(=folder) khusus (yaitu direktori “include” yang dapat disetel melalui

compiler). Sedangkan beantuk kedua menyatakan bahwa pencarian file dilakukan

pertama kali pada direktori kerja, jika tidak ditemukan maka akan dicoaba dicari di

direktori yang tercantum pada variabel lingkungan barnama PATH.

Contoh Program No.2

//*********************************************** // Nama File : listrik.h * // File header yang berisi fungsi-fungsi * // untuk menghitung kasus2 rangkaian listrik * //*********************************************** # ifndef _listrik # define _listrik double RSeri(double R1, double R2); // prorotipe fungsi RSeri double RParalel(double R1, double R2); // prototipe fungsi RParalel double CSeri(double C1, double C2, double Hz); // prototipe fungsi CSeri double CParalel(double C1, double C2, int Hz); // prototipe fungsi CParalel double LSeri(double L1, double L2, int Hz); // prototipe fungsi LSeri double LParalel(double L1, double L2, int Hz); // prototipe fungsi LParalel double RSeri(double R1, double R2) // defenisi fungsi RSeri { return(R1+R2); } double RParalel(double R1, double R2) // defenisi fungsi RParalel { return (R1*R2)/(R1+R2); } double CSeri(double C1, double C2, double Hz) // defenisi fungsi CSeri { double CTotal,Xc; CTotal = (C1*C2)/(C1+C2); Xc = 1 / (2*3.14*CTotal*Hz); return Xc; } double CParalel(double C1, double C2, int Hz) // defenisi fungsi CParalel { double CTotal,X_C; CTotal = C1+C2; X_C = 1 / (2*3.14*CTotal*Hz);

Diktat Kuliah : Pemrograman Komputer 2 Bab 8 : 38

Page 42: Diktat Pemrograman C++ Pre & Header

return X_C; } double LSeri(double L1, double L2, int Hz) // defenisi fungsi LSeri { double LTotal,X_L; LTotal = L1+L2; X_L = 2*3.14*LTotal*Hz; return X_L; } double LParalel(double L1, double L2, int Hz) // defenisi fungsi LParalel { double LTotal,X_L; LTotal = (L1*L2)/(L1+L2); X_L = 2*3.14*LTotal*Hz; return X_L; } # endif

Berikut ini adalah program yang menggunakan file header diatas

// ********************************************************** // Nama File : Hitung.cpp * // Contoh program yang menggunakan file header diatas * //*********************************************************** # include <iostream.h> # include <conio.h> # include "listrik.h" char fungsi_berulang() {

char pilih; double R1,R2,C1,C2,L1,L2,Hz; clrscr();

cout << "MENGHITUNG NILAI TAHANAN PENGGANTI RANGKAIAN SERI & PARALEL :\n"

cout << "-------------------------------------------------------------\n" cout << "(menggunakan fungsi2 yg tersedia di file headerPengganti.h\n"; cout << "Pilih salah satu perhitungan dibawah ini \n"; cout << "Tekan angka 1 untuk menghitung rangkaian seri R murni \n"; cout << "Tekan angka 2 untuk menghitung rangkaian paralel R murni \n"; cout << "Tekan angka 3 untuk menghitung rangkaian seri C murni \n"; cout << "Tekan angka 4 untuk menghitung rangkaian paralel C murni \n"; cout << "Tekan angka 5 untuk menghitung rangkaian seri L murni \n"; cout << "Tekan angka 6 untuk menghitung rangkaian paralel L murni \n"; cout << "Tekan angka 9 untuk keluar dari program \n";

cout << endl << endl; cout << endl;

Diktat Kuliah : Pemrograman Komputer 2 Bab 8 : 39

Page 43: Diktat Pemrograman C++ Pre & Header

do { pilih = getch(); } while((pilih!='1') & (pilih!='2') & (pilih!='3')& (pilih!='4') & (pilih!='5') & (pilih!='6') & (pilih!='9')); if (pilih == '1') { cout << "anda memilih 1 " << endl; cout << "Nilai Resistensi 1 (ohm) = "; cin >> R1; cout << "Nilai Resistensi 2 (ohm) = "; cin >> R2; cout << endl; cout << "Nilai Tahanan Pengganti = " << RSeri(R1,R2) << " ohm" << endl; } else if (pilih == '2') { cout << "anda memilih 2 " << endl; cout << "Nilai Resistensi 1 (ohm) = "; cin >> R1; cout << "Nilai Resistensi 2 (ohm) = "; cin >> R2; cout << endl; cout << "Nilai Tahanan Pengganti = " << RParalel(R1,R2) << " ohm" << endl; } else if (pilih == '3') { cout << "anda memilih 3 " << endl; cout << "Nilai Kapasitor 1 (Mikro Farad) = "; cin >> C1; cout << "Nilai Kapasitor 2 (Mikro Farad) = "; cin >> C2; cout << "Frekunsi Rangkaian (Hertz) = "; cin >> Hz; cout << endl; cout << "Nilai Tahanan Pengganti = " << CSeri(C1,C2,Hz) << " ohm" << endl; } else if (pilih == '4') { cout << "anda memilih 4 " << endl; cout << "Nilai Kapasitor 1 (Mikro Farad) = "; cin >> C1; cout << "Nilai Kapasitor 2 (Mikro Farad) = "; cin >> C2; cout << "Frekunsi Rangkaian (Hertz) = "; cin >> Hz; cout << endl; cout << "Nilai Tahanan Pengganti = " << CParalel(C1,C2,Hz) << " ohm" << endl; } else if (pilih == '5') { cout << "anda memilih 5 " << endl; cout << "Nilai Induktor 1 (Henri) = "; cin >> L1; cout << "Nilai Induktor 2 (Henri) = "; cin >> L2; cout << "Frekunsi Rangkaian (Hertz) = "; cin >> Hz; cout << endl; cout << "Nilai Tahanan Pengganti = " << LSeri(L1,L2,Hz) << " ohm" << endl; } else if (pilih == '6') { cout << "anda memilih 6 " << endl; cout << "Nilai Induktor 1 (Henri) = "; cin >> L1; cout << "Nilai Induktor 2 (Henri) = "; cin >> L2; cout << "Frekunsi Rangkaian (Hertz) = "; cin >> Hz; cout << endl; cout << "Nilai Tahanan Pengganti = " << LParalel(L1,L2,Hz) << " ohm" << endl; }

Diktat Kuliah : Pemrograman Komputer 2 Bab 8 : 40

Page 44: Diktat Pemrograman C++ Pre & Header

else { cout << "anda memilih untuk keluar " << endl; } return pilih; } void main() { char pilih; do { pilih = fungsi_berulang(); cout << endl << endl; cout << "tekan sembarang tombol ..."; getch(); // menunggu sembarang tombol ditekan } while (pilih != '9'); }

Tugas :

1. Coba kerjakan kedua contoh program diatas. Coba juga bagaimana jika file

headernya diletakkan di directory include digabungkan dengan file header

bawaan dari compiler C++

2. Tambahkan fungsi-fungsi yang lain pada file header listrik.h.

Fungsinya bebas sesuai, tapi usahakan yang sesuai dengan bidang listrik. Test

fungsi-fungsi yang anda buat dengan menggunakan program yang di buat sendiri

3. Buatlah File header yang dinamai konversi.h

Didalam file header tersebut buatlah fungsi-fungsi yang digunakan untuk

mengkonversi berbagai satuan.

contoh :

Celcius ke Farenheit, km ke mil, m3 ke galon, dsb,

Untuk latihan di rumah :

1. Buat file header pribadi anda sendiri yang berisi kumpulan fungsi-fungsi yang

pernah anda buat selama mengikuti kuliah pemrograman.

2. Pelajari fungsi-fungsi yang tersedia di file header math.h

uji coba fungsi-fungsi tersebut dalam sebuah program yang anda susun sendiri

Petunjuk : Gunakan fasilitas help yang ada di compiler Borland C++.

3. Pelajari fungsi-fungsi yang tersedia di file header string.h

uji coba fungsi-fungsi tersebut dalam sebuah program yang anda susun sendiri

Petunjuk : Gunakan fasilitas help yang ada di compiler Borland C++.

Diktat Kuliah : Pemrograman Komputer 2 Bab 8 : 41

Page 45: Diktat Pemrograman C++ Pre & Header

PRE PROCESSOR Preprocessor menyebabkan bahasa C mempunyai kemampuan lebih dibandingkan

dengan bahasa yang lain. Tidak semua bahasa menyediakan hal ini. Instruksi

preprocessor dalam bahasa C dimulai dengan karakter # yang ditulis paling kiri.

Preprocessor C menyediakan empat buah fasilitas yang dapat digunakan untuk

keperluan-keperluan tertentu dalam pembuatan program. Keperluan-keperluan tersebut

adalah sbb.

• Menyertakan file header dalam program yang kita kerjakan

• Mendefenisikan makro yang dapat mempersingakat penulisan kode program

• Melakukan pengkondisian pada saat kompilasi

Melakukan kontrol pada baris program. Sebagai contoh apabila program yang kita tulis

terpisah dalam dua buah file dan kita akan menggabungkan keduanya maka kita dapat

menggunakan preprocessor untuk menginformasikan dimana letak baris-baris tertentu.

Kata-kata kunci yang termasuk didalam preprocessor dalam bahasa C adalah sebagai

berikut

# include # if # ifdef

# define # elif # ifndef

# pragma # else # undef

# error # endif # line

Instruksi preprocessor yang paling banyak digunakan adalah #define dan #include.

#define

Preprocessor ini digunakan untuk mendefenisikan suatu makro, yaitu

mendefenisikan suatu identifier dengan suatu nilai tertentu.

Contoh :

#include <iostream.h> #define akhir 10 #define mulai { #define selesai } main() mulai int i; for (i=1; i<=akhir; i++) mulai cout << "Ke "; cout << i; cout << endl; selesai

Diktat Kuliah : Pemrograman Komputer 2 Bab 9 : 42

Page 46: Diktat Pemrograman C++ Pre & Header

selesai

Bila program ini dijalankan, hasilnya adalah sbb.

Penjelasan :

Dengan didefenisikannya sebagai berikut

#define akhir 10 #define mulai { #define akhir } Berarti bila digunakan pengenal (identifier) “akhi”r maka dianggap bernilai 10, dan

bentuk “{“ bisa diganti dengan kata “mulai”, demikian juga bentuk “{“ dapat diganti

dengan kata selesai.

Contoh lain :

#include <iostream.h> #define phi 3.1415926536 #define utama main #define mulai { #define selesai } #define tulis cout << #define pecahan float utama() mulai pecahan luas,r; r = 10; luas = phi * r * r; tulis "luas lingkaran = "; tulis luas; selesai Jika program ini dijalankan , akan didapatkan hasil :

Diktat Kuliah : Pemrograman Komputer 2 Bab 9 : 43

Page 47: Diktat Pemrograman C++ Pre & Header

Kesimpulannya kita dapa mendefenisikan sendiri kata-kata kunci didalam bahasa c

dengan kata-kata bahasa indonesia, sehingga kita dapat membuat program dengan

bahasa indonesia.

Makro juga dapat mengandung parameter seperti halnya sebuah fungsi sehingga makro

seperti ini sering pula disebut dengan makro fungsi. Berikut ini contoh pendefenisian

makro yang ada parameternya.

# include <iostream.h> # define F(x) ((x*x) + (x) + 3) # define ABS(x) ((x)>=0 ? (x) : -(x)) # define BIGER(x,y) (x>y ? x : y) void main() { cout << F(5) << endl; cout << ABS(-4000) << endl; cout << BIGER(5,120); }

Hal yang perlu diperhatikan dalam membuat makro fungsi adalah penggunaan tanda

kurung. Berikut ini contoh pengaruh penggunaan tanda kurung pada makro yang kita

buat.

# include <iostream.h> # define KWADRAT(x) x * x # define KUADRAT(x) (x) * (x) void main() { // jika x berupa satu nilai sederhana hasilnya sama cout << "KWADRAT(2) = " << KWADRAT(2) << endl; cout << "KUADRAT(2) = " << KUADRAT(2) << endl; cout << endl; // jika x berupa ekspresi hasilnya akan berbeda cout << "KWADRAT(2+3) = " << KWADRAT(2+3) << endl; cout << "KUADRAT(2+3) = " << KUADRAT(2+3) << endl; cout << endl; }

Hasil outputnya adalah sebagai berikut

Diktat Kuliah : Pemrograman Komputer 2 Bab 9 : 44

Page 48: Diktat Pemrograman C++ Pre & Header

# include Kita telah sering menggunakan instruksi cout dan cin dalam program yang kita buat.

Sebenarnya instruksi-instruksi tersebut bukan merupakan kata kunci (untuk mudahnya

terjemahkan saja dengan “kata asli”) bahasa C++. Sebenarnya cout dan cin adalah

fungsi-fungsi yang terletak didalam file header “iostream.h”. sehingga jika kita hendak

menggunakan instruksi tersebut, file header iostream.h harus dilibatkan didalam program

kita. Cara melibatkan file header iostream.h kedalam program kita adalah dengan

menggunakan preprocessor #include.

Kitapun dapat membuat file header kita sendiri. Misalnya kita mempunyai fungsi-

fungsi yang pernah kita buat dan kita ingin melibatkannya dalam program kita yang baru.

Pada contoh sebelumnya kita telah mendefenisikan kata-kata kunci C dengan

menggunakan bahasa indonesia. Jika setiap kali membuat program kita harus

mendefenisikan ulang terus menerus, hal ini tentu tidak praktis. Defenisi makro tersebut

dapa kita pisahkan dalam file header tersendiri, dan jika dibutuhkan kita dapat

melibatkannya dalam program yang akan kita buat kemudian.

Contoh :

Defenisi makro berikut ini akan dibuat dalam file tersendiri, yaitu dengan nama file

danang.h. Isi dari file ini adalah sebagai berikut.

#include <iostream.h> #define utama main #define mulai { #define selesai } #define tulis cout << #define ganti_baris cout << endl #define baca cin >> #define pecahan float #define bulat int #define jika if #define sebaliknya else #define dan && #define atau || #define untuk for #define kerjakan do #define selagi while #define terus continue #define menuju goto #define kasus case

Selanjutnya program yang akan menggunakan makro-makro tersebut dapat melibatkan

file danang.h dengan instruksi

#include “danang.h”

# include "danang.h" utama() mulai pecahan a; tulis "Nilai A ? "; baca a;

Diktat Kuliah : Pemrograman Komputer 2 Bab 9 : 45

Page 49: Diktat Pemrograman C++ Pre & Header

tulis "Nilai A = "; tulis a; selesai Contoh selengkapnya adalah sebagai berikut.

Program untuk menampilkan tahun kabisat dan bukan bukan kabisat

# include "danang.h" utama() mulai bulat tahun, tahun1, tahun2; tulis "Mulai dari tahun ? "; baca tahun1; tulis "Sampai dengan tahun ? "; baca tahun2; ganti_baris; untuk (tahun=tahun1; tahun<=tahun2; tahun++) mulai jika (tahun%4==0 dan tahun%100!=0 atau tahun%400==0) mulai tulis tahun; tulis " adalah tahun kabisat"; ganti_baris; selesai sebaliknya mulai tulis tahun; tulis " bukan tahun kabisat"; ganti_baris; selesai selesai selesai Bila program dijalankan, hasilnya adalah sebagai berikut

Diktat Kuliah : Pemrograman Komputer 2 Bab 9 : 46

Page 50: Diktat Pemrograman C++ Pre & Header

Pengkondisian dalam proses Kompilasi Dalam proses kompilasi kita juga dapat melakukan pengecekan kondisi terhadap

kompilator, yaitu dengan menggunakan directive #if, # ifdef, atau #ifndef. Masing-

masing penggunaan dari directive tersebut diakhiri dengan directive #endif.

#if dan #endif Directive ini digunakan untuk melakukan pengecekan terhadap suatu nilai tertentu.

Artinya apabila kondisi terpenuhi maka pernyataan yang terdapat pada blok pengecekan

akan dieksekusi sedangkan apabila kondisi bernilai salah (tidak terpenuhi) maka

pernyataan tersebut akan diabaikan. Berikut ini pernyataan umum dari penggunaan

directive #if

#if kondisi statemen_yang_akan_dieksekusi; …. #endif

Contoh : # include <iostream.h> # define MAX 3 void main() { # if MAX > 5 cout << "Nilai MAX lebih besar dari 5" ; # endif }

#else dan #elif

Directive #else dan #elif ditujukan untuk melakukan pengecekan kondisi yang banyaknya

lebih dari satu

Contoh :

# include <iostream.h> # define MAX 5 void main() { # if MAX > 5 cout << "Nilai MAX lebih besar dari 5" ; # elif MAX == 5 cout << "Nilai MAX sama dengan 5 "; # else cout << "Nilai MAX lebih kecil dari 5"; # endif }

Diktat Kuliah : Pemrograman Komputer 2 Bab 9 : 47

Page 51: Diktat Pemrograman C++ Pre & Header

operator defined

Untuk melakukan pengecekan terhadap suatu makro, apakah sudah didefenisikan atau

belum digunakan operator defined

Contoh :

# include <iostream.h> # if defined (__WIN32__) # define OS "Windows" # elif defined (_LINUX_) # define OS "LINUX" # else # define OS "Tidak diketahui" # endif void main() { cout << "Sistim Operasi = " << OS; }

#ifdef, #ifndef, #undef

Dalam bahasa C sebenarnya telah tersedia directive yang fungsinya untuk mengencek

apakah suatu makro sudah didefenisikan atau belum sehingga tidak perlu menggunakan

operator defined.

Directive Keterangan

# ifdef Sama dengan if define(), tapi tidak menggunakan tanda kurung

# ifndef Sama dengan if not defined()

# undef digunakan untuk melakkukan penghapusan terhadap makro tertentu. Hal ini

dilakukan jika suatu makro sudah tidak diperlukan lagi kehadirannya dalam suatu

program.

Contoh :

# include <iostream.h> # ifndef X # define X 10 // Mendefenisikan makro X # endif void main() { #ifdef X cout << "Makro X terdefinisi\n"; cout << "Nilai X = " << X << endl; #undef X

Diktat Kuliah : Pemrograman Komputer 2 Bab 9 : 48

Page 52: Diktat Pemrograman C++ Pre & Header

#endif #ifndef X cout << "Makro sudah tidak terdefenisi\n"; # else cout << "Makro masih terdefinis\n"; #endif }

#error

Directive ini digunakan untuk menampilkan pesan kesalahan yang terdapat pada saat proses kompilasi.

Contoh :

# include <iostream.h> # define MAX 200 void main() { # if MAX > 100 #error Nilai maksimal yang diizinkan adalah 100 # endif }

Pada saat proses kompilasi, kompilator akan menampilkan pesan kesalahan yaitu dengan

teks “Nilai maksimal yang diizinkan adalah 100”

Makro-makro yang telah didefensisikan dalam bahasa C __FILE__ , __LINE__ , __DATE__ , __TIME__ , dan __STDC__

Bahasa C (dan C++ juga tentunya) telah menyediakan beberapa makro-makro yang siap

pakai. Makro-makro siap pakai ini sering disebut dengan “predefined macro”

__FILE__ : Digunakan untuk mendapatkan nilai berupa string yang merupakan nama file

dari program yang kita tulis.

__LINE__ : Digunakan untuk mengambil bilangan bulat yang merupakan nomor baris

yang pada program yang sedang ditulis

__DATE__ : Digunakan untuk mendapatkan tanggal yang aktif didalam komputer yang

sedang kita pakai

__TIME__ : Digunakan untuk mendapatkan waktu yang sedang aktif didalam komputer

yang sedang kita pakai

__STDC__ : Digunakan untuk mendapatkan informasi tentang kompilator C yang sedang

kita pakai, apakah merupakan kompiler C standar atau bukan

Diktat Kuliah : Pemrograman Komputer 2 Bab 9 : 49

Page 53: Diktat Pemrograman C++ Pre & Header

Contoh :

# include <iostream.h> void main() { cout << "Nama file dari kkode program ini adalah : " << __FILE__ << endl; cout << "Nomor baris dari baris ini adalah : " << __LINE__ << endl; cout << "Sekarang adalah tanggal : " << __DATE__ << endl; cout << "Waktu sekarang adalah : " << __TIME__ << endl; # if defined(__STDC__) { cout << "Kompiler C Standar "; } # else { cout << "Belum merupakan Kompiler C standar "; } # endif }

Diktat Kuliah : Pemrograman Komputer 2 Bab 9 : 50

Page 54: Diktat Pemrograman C++ Pre & Header

PENGENALAN POINTER Apa yang dimaksud dengan pointer. Pointer (penunjuk) adalah suatu jenis variabel yang

berisi alamat dari suatu lokasi memori tertentu. Jadi isi dari pointer bukan suatu nilai data

tertentu melainkan alamat memori. Memori yang dimaksudkan disini adalah memori

yang ada di RAM komputer.

Yang menjadi pertanyaan sekarang , untuk apa alamat dari suatu lokasi memori perlu

dijadikan suatu variabel. Kegunaanya banyak sekali, dengan adanya pointer pemrogram

dapat mengakses langsung ke memori tertentu, hal ini memberikan peningkatan

fleksibilitas yang sangat tinggi pada pemrogram. Pemrogram yang ahli dapat

memanfaatkan pointer sedemikian rupa sehingga program yang dihasilkannya menjadi

lebih efisien, lebih cepat, dan lebih fleksibel.

Aturan pemberian nama kepada pointer sama dengan aturan pemberian nama kepada

variabel-variabel yang lain.

Bahasa C menyediakan 2 macam operatator untuk operasi poiinter yaitu operator “*” dan

operator “&” . Kedua operator ini merupakan operator-operator unary.

Deklarasi pointer :

Seperti halnya variabel-variabel biasa, variabel pointer harus dideklarasikan terlebih

dahulu sebelum dapat digunakan. Variabel pointer dideklarasikan dengan nama variabel

didahului tanda asterik “*”. Pada umumnya bentuk umum deklarasi pointer adalah sbb. :

tipe *nama_variabel_pointer

Suatu variabel pointer dapat dideklarasikan dengan menggunakan tipe apapun sepert int,

float, double, char, dll.

Variabel yang dideklarasikan dapat juga langsung diberi nilai awal.

Contoh Program No.1

//*********************************************** // Nama Program : pointer1.cpp * // Contoh deklarasi pointer * // dengan pemberian nilai awal * // ********************************************** # include <iostream.h> main() { int v_int; int *v_pint; v_pint = &v_int; v_int = 37; cout << "variabel integer v_int bernilai " << v_int << " berada di alamat " << v_pint; }

Diktat Kuliah : Pemrograman Komputer 2 Bab 10 : 51

Page 55: Diktat Pemrograman C++ Pre & Header

Keterangan :

Posisi pointer dan variabel pada program diatas dapat diilustrasikan pada gambara

berikut ini :

0000 0000

0000 1111

alamat : 0x 16A72AC3

alamat : 0x 16A72AC4

alamat : 0x 16A72AC5

alamat : 0x 16A72AC6

alamat : 0x 16A72AC7

0x 16A72AC3

M E M O R I R A M

v_int

v_pint

Variabele v_int bertipe integer artinya variabel tersebut digunakan untuk menyimpan

data bernilai integer. Pada compiler C, data integer membutuhkan tempat penyimpanan

sebesar 2 byte. Setiap lokasi memori berisi satu byte data. Jadi setiap data bertipe

integer akan menempati 2 buah lokasi memori.

Gambar diatas menunjukkan variabel v_int menempati lokasi beralamat 0x 16A72AC3 (0x artinya bilangan heksa desimal) dan 0x 16A72AC4. Alamat 16A72AC3 dan

16A72AC4 tersebut masing-masing berisi 0000 0000 dan 0000 1111. atau 15. (Perlu

diketahui bahwa dalam komputer digital semua nila data disimpan dalam bentuk biner)

Variabel pointer v_pint telah diberi nilai awal oleh pernyataan v_pint = &v_int,

Pernyataan tersebut artinya isi v_pint dengan alamat dari variabel v_int. Karena variabel

v_int beralamat di 0x 16A72AC3 v _pint akan diisi dengan nilai tersebut.

Alamat dari suatu variabel dapat diketahui dengan mudah. Caranya tambahkan operator

alamat berupa simbol “&” didepan nama variabel. Dengan mengirimkan ke cout alamat

dari suatu variabel akan ditampilkan ke layar. Berikut ini contoh programnya.

Contoh Program No.2

//************************************** // Nama Program : pointer2.cpp // Contoh menampilkan alamat // dari suatu variabel

Diktat Kuliah : Pemrograman Komputer 2 Bab 10 : 52

Page 56: Diktat Pemrograman C++ Pre & Header

//************************************** # include <iostream.h> void main() { int alif = 5; float ba = 7.5; double ta = 17.777; cout << "Isi variabel : " << endl; cout << "alif = " << alif << endl; cout << "ba = " << ba << endl; cout << "ta = " << ta << endl; cout << "\nAlamat variabel : " << endl; cout << "alif = " << &alif << endl; cout << "ba = " << &ba << endl; cout << "ta = " << &ta << endl; } Mengakses Nilai yang Ditunjuk Pointer

Pointer dapat digunakan untuk mengakses suatu nilai. Caranya adalah dengan

menggunakan opeator “*” didepan nama pointer

Contoh Program No.3

//***************************************************** // Nama Program : pointer3.cpp * // Contoh pengaksesan nilai menggunakan pointer * //***************************************************** # include <iostream.h> void main() { int vint = 55; // variabel bukan pointer int *pint; // variabel pointer pint = &vint; // pointer menunjuk ke vint cout << “Nilai yang ditunjuk oleh pint : “ << *pint << endl; cout << “Nilai yang ditunjuk oleh pint dapat diubah “ << endl; *pint = 77; cout << “Nilai yang ditunjuk oleh pint sekarang : “ << *pint << endl; } OPERASI POINTER

Variabel pointer dapat dioperasikan seperti halnya variabel biasa. Dapat dioperasikan

secara aritmatika, dan dapat dibandingkan secara logika

Operasi Penugasan

Suatu variabel pointer dapat memeroleh penugasan dari variabel pointer lainnya.

Contoh :

//**************************************************************** // Nama Program : pointer4.cpp * // Contoh Operasi Penugasan Pointer * // ***************************************************************

Diktat Kuliah : Pemrograman Komputer 2 Bab 10 : 53

Page 57: Diktat Pemrograman C++ Pre & Header

# include <iostream.h> void main() { float Y, *X1, *X2; Y = 12.34; X1 = &Y; X2 = X1; // penugasan variabel pointer X1 ke X2 cout << “Alamat variabel biasa Y = “ << &Y << endl; cout << “Alamat variabel pointer X1 = “ << X1 << endl; cout << “Alamat variabel pointer X2 = “ << X2 << endl; }

Tugas :

1. Buat program yang isinya adalah :

a) Mendefinisikan suatu variabel pointer bertipe double

b) Memberi nilai awal ke variabel pointer tersebut dengan alamat suatu variabel

non pointer.

c) Menampilkan nilai yang ditunjuk oleh pointer tsb

d) Mengubah nilai yang ditunjuk pointer tsb sekaligus menampilkannya

2. Buat program yang menampilkan alamat dari suat variabel pointer bertipe

integer, float, double, dan char. Ubah nilai dari variabel-variabel tersebut

selanjutnya cek apakah alamatnya jadi berubah ?

3. Cobalah program yang mirip dengan contoh soal terakhir namun dengan tipe data

yang berbeda-beda.

Untuk latihan di rumah :

1. Buat program untuk menyimpan kumpulan suatu angka bertipe float dengan

menggunakan variabel pointer. Manipulasi angka-angka tersebut dengan

menggunaqkan fungsi kuadrat yang telah anda buat dahulu.

2. Coba dengan tipe data yang lain dan manipulasi dengan fungsi-fungsi lain yang

pernah anda buat

Diktat Kuliah : Pemrograman Komputer 2 Bab 10 : 54

Page 58: Diktat Pemrograman C++ Pre & Header

ARRAY POINTER DAN POINTER YG MENUNJUK KE POINTER

Array dan pointer mempunyai hubungan yang sangat dekat. Secara internal array juga

menyatakan alamat. Misalnya didefenisikan

int tgl_lahir[] = { 24, 6, 1965 } dan int *Ptgl;

Agar pointer Ptgl menunjuk ke array diperlukan pernyataan berupa :

ptgl = tgl_lahir;

Perhatikan dengan seksama pernyataan diatas tak ada tand “&” didepan tgl_lahir. Hal ini

disebabkan karena nama array sebenarnya sudah menyatakan alamat, oleh karena itu

tanda & tidak diperlukan.

Contoh Program 1

//******************************************************** // Nama Program : Arraypointer1.cpp * // Contoh pointer yang menunjuk ke array * // ******************************************************* # include <iostream.h> void main() { int tgl_lahir[] = { 24, 6, 1965 }; int *ptgl; ptgl = tgl_lahir; // ptgl menunjuk ke array cout << "Nilai yang ditunjuk oleh ptgl : " << *ptgl << endl; cout << "Nilai dari tgl_lahir(0) : " << tgl_lahir[0] << endl; cout << "Nilai yang ditunjuk oleh (ptgl+1) : " << *(ptgl+1) << endl; cout << "Nilai dari tgl_lahir(1) : " << tgl_lahir[1] << endl; cout << "Nilai yang ditunjuk oleh (ptgl+2) : " << *(ptgl+2) << endl; cout << "Nilai dari tgl_lahir(2) : " << tgl_lahir[2] << endl; }

1. Pointer dan String Hubungan antara pointer dan string ditunjukkan oleh program berikut ini.

Contoh Program 2

//******************************************************** // Nama Program : PointerString.cpp * // Contoh pointer yang menunjuk ke string * // ******************************************************* # include <iostream.h> void main() { char *ptokoh = “Gatotkaca”; // ptkoh menunjuk ke string cout << ptokoh << endl; }

Diktat Kuliah : Pemrograman Komputer 2 Bab 11 : 55

Page 59: Diktat Pemrograman C++ Pre & Header

Pada contoh diatas perintah : char *ptokoh = “Gatotkaca” akan menyebabkan C++

• Mengalokasikan ptokoh sebagai variabel pointer yang menunjuk ke data bertipe

char dan menempatkan konstan string “Gatotkaca” ke suatu lokasi di memori

komputer.

• Kemudian ptokoh akan menunjuk ke lokasi string “Gatotkaca”

Pernyataan diatas menyerupai pernyataan :

char tokoh[] = “Gatotkaca”;

Perbedaannya :

• ptokoh adalah pointer yang dengan mudah dapat diatur agar menunjuk ke data

string

• tokoh adalah array yang menyatakan alamat yang konsta, tidak dapat diubah.

Yang dapat diubah adalah elemen arraynya.

Perbedaan ini ditunjukkan pada program berikut :

Contoh Program No.3

//************************************************************************ // Nama Program : PointerString2.cpp * // Contoh program yang menunjukkan perbedaan * // Array karakter dan pointer yang menunjuk ke string * // *********************************************************************** # include <iostream.h> void main() { char tokoh[] = "Gatotkaca"; char *ptokoh = "Gatotkaca"; cout << "tokoh = " << tokoh << endl; cout << "ptokoh = " << ptokoh << endl; // tokoh++; // tidak diperkenankan ptokoh++; // diperkenankan cout << "ptokoh = " << ptokoh << endl; }

2. ARRAY POINTER Suatu array dapat digunakan untuk menyimpan sejumlah pointer. Misalnya :

char *namahari[7];

merupakan pernyataan untuk mendefenisikan array namahari yang berisi 7 buah elemen

berupa pointer. Pointer ini menunjuk ke data bertipe char.

Diktat Kuliah : Pemrograman Komputer 2 Bab 11 : 56

char *namahari[7]

namahari

Page 60: Diktat Pemrograman C++ Pre & Header

Contoh Program No.4

//*********************************************** // Nama Program : ArrayPtr * // Contoh Array Pointer * // ********************************************** # include <iostream.h> void main() { char *namahari[] = { “Senin” , “Selasa” , “Rabu” , “Kamis” “Jumat” , “Sabtu” , “Minggu” }; for (int i=0 ; i<7 ; i++) cout << namahari[i] << endl; } Contoh lain

//******************************************************** // Nama Program : ArrayPtr * // Contoh Array Pointer * // ******************************************************* # include <iostream.h> void main() { float a[3] = {1,2,3}; cout << "int a[3]={1,2,3}" << endl << endl; cout << "a[0]=" << a[0] << " ";

cout << "&a[0]=" << a << endl; cout << "a[1]=" << a[1] << " ";

cout << "&a[1]=" <<(a+1) << endl; cout << "a[2]=" << a[2] << " ";

cout << "&a[2]=" <<(a+2) << endl; float *paray[3]; cout << endl; cout << "&paray = " << (&paray) << endl; paray[0] = a; paray[1] = a+1; paray[2] = a+2; cout << "paray = " << (paray) << endl; cout << endl; cout << "paray[0] = " << paray[0] << endl; cout << "*paray[0] = " << *paray[0] << endl;

Diktat Kuliah : Pemrograman Komputer 2 Bab 11 : 57

Page 61: Diktat Pemrograman C++ Pre & Header

cout << "paray[1] = " << paray[1] << endl; cout << "*paray[1] = " << *paray[1] << endl; cout << "paray[2] = " << paray[2] << endl; cout << "*paray[2] = " << *paray[2] << endl; }

2.1. POINTER MENUNJUK KE POINTER Suatu pointer dapat saja menunjuk ke ponter lain seperti ditunjukkan pada gambara

berikut ini

ptr2 ptr1 var_x

pointer menunjukke pointer

Untuk membentuk rantai pointer seperti itu diperluikan pendefenisian sbb.

int var_x; int *ptr1; // satu tanda * di depan ptr1 int **ptr2; // dua tanda * di depan ptr2

Pada pendefinisan diatas :

var_x adalah variabel bertipe integer

ptr1 adalah variabel pointer yang menunjuk ke data bertipe integer

ptr2 adalah variabel pointer yang menunjuk ke pointer int

Agar ptr1 menunjuk ke variabel var_x, perintah yang diperlukan berupa :

ptr1 = &var_x;

sedangkan supaya ptr2 menunjuk ke ptr1 diperlukan perintah

ptr2 = &ptr1;

Contoh Program No.5

//******************************************************** // Nama Program : ArrayPtr * // Contoh Array Pointer * // ******************************************************* # include <iostream.h> void main() { int var_x = 273; Diktat Kuliah : Pemrograman Komputer 2 Bab 11 : 58

Page 62: Diktat Pemrograman C++ Pre & Header

int *ptr1; // pointer ke variabel bukan pointer int **ptr2; // pointer ke pointer cout << “var_x = “ << var_x << endl; // Penugasan alamat ptr1 = &var_x; // ptr1 menunjuk ke var_x ptr2 = &ptr1; // ptr2 menunjukk ke ptr1 // Mengakses nila var_x melalui ptr1 cout << “ *ptr1 = “ << *ptr1 << endl; // Mengakses nilai var_ x melalui ptr2 cout << “ **ptr2 = “ << **ptr2 << endl; } Tugas :

1. Buat program menggunakan array untuk menciptakan deret

Sn = 3n2 + 5n - 7 dg n = 1, 2,3, . . . s/d . 10

selanjutnya akses array tersebut dengan menggunakan pointer

2. Buat program menggunakan array untuk menghitung jumlah kumulatif dari soal

diatas namun pengaksesan dengan menggunakan pointer.

3. Buatlah program menggunakan aray untuk menampilkan hari-hari dalam seminggu

untuk mendeklarasikan variabel text gunakan deklarasi

char *hari[7]. --> elemen ke-1 adalah hari[0], elemen ke-2 adalah hari[1] dst

Untuk latihan di rumah :

Semua program dibawah ini menggunakan pointer

1. Program mencari bilangan terbesar dari suatu kumpulan angka

2. Program mencari bilangan terkecil dari suat kumpulan angka

3. Program menghitung selisih bilangan terbesar dan terkecil dari suatu kumpulan

angka

4. Program mensortir bilangan ganjil dari suatu kumpulan angka

5. Program mensortir bilangan genap dari suatu kumpulan angka

Diktat Kuliah : Pemrograman Komputer 2 Bab 11 : 59

Page 63: Diktat Pemrograman C++ Pre & Header

MANAJEMEN MEMORI DINAMIS Pengelolaan memori didalam program dapat dilakukan secara dinamis. Pada saat

program dijalankan, suatu memori dapat dipesan untuk digunakan dan jika sudah tidak

diperlukan dapat dibebaskan. Hal seperti ini sangat bermanfaat untuk

mengimplementasikan struktur data seperti pada link list dan tree.

Pada bahasa C++ pengalokasian memori secara dinamis dilakukan dengan menggunakan

operator bernama new and delete. Operator new digunakan untuk untuk

mengalokasikan memori yang ada pada heap , sedangkan operator delete digunakan

untuk mendealokasikan memori yang sebelumnya telah dialokasikan menggunakan

operator new.

Konsep Pengalokasian Memori

Pada saat program yang dibuat dengan C++ dijalankan, terdapat sejumlah memori yang

tidak terpakai. Memori ini dikenal dengan nama heap. Memori inilah yang dapat dipakai

untuk menciptakan variabel dinamis (variabel yang dialikasikan secara dinamis). Ukuran

memori heap sangatlah bervariasi, tergantung pada model memori yang digunakan oleh

compiler dan juga sistim operasi.

stackheap

data

code

Memori

Pengalokasian memori dilakukan menggunakan perintah sebagai berikut :

int *ptr_i; // pendefenisian pointer ptr_i = new int; // pengalokasian memori

?

ptr_i

heap

setelah int *ptr_i :

Diktat Kuliah : Pemrograman Komputer 2 Bab 12 : 60

Page 64: Diktat Pemrograman C++ Pre & Header

setelah ptr_i = new int : ptr_i

heap

variabel dinamis

bertipe int

Berikut ini contoh program pengalokasian memori dinamis

// ***************************************************** // Contoh pengalokasian variabel dinamis // dan pengaksesan terhadap variabel dinamis // ***************************************************** # include <iostream.h> # include <conio.h> void main() { clrscr(); int *ptr_i; ptr_i = new int; *ptr_i = 50; // Mengisi variabel dinamis // Menampilkan isi variabel dinamis cout << "*ptr_i = " << *ptr_i << endl; }

Array Dinamis

Memori dinamis juga dapat dikenakan pada variabel array. Bahkan perlu diketahui bahwa

hubungan antara aray dan pointer pada bahasa C adalah dekat sekali. Untuk

menerangkan hal ini anggaplah sekarang sekarang kita memiliki array A yang terdiri dari

10 elemen yang bertipe int serta pointer P yang menunjuk ke tipe int. Sekarang apabila

kita mengeset poiinter tersebut untuk menunjuk ke elemen pertama array, maka kita

dapat mengakses elemen-elemen dari array A tersebut dengan menggunakan pointer P

Berikut ini contoh program menunjukkan hubungan antara array dengan pointer.

# include <iostream.h> void main() { // Mendeklarasikan array A dan sekaligus menginisialisasinya int A[10] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100}; // Mendeklaraisikan variabel untuk indeks pengulangan int i; // mendeklarasikan pointer P dan mengesetnya

Diktat Kuliah : Pemrograman Komputer 2 Bab 12 : 61

Page 65: Diktat Pemrograman C++ Pre & Header

// untuk menunjuk ke alamat dari A[0] int *P = &A[0]; // Menampilkan elemen arary dengan menggunakan // akses array biasa dan pointer cout << "Menggunakan array \t\tMenggunakan Pointer \n"; for (i=0; i<10; i++) { cout << A[i] << "\t\t\t\t" << *P << endl; P++; } }

Dari hasil yang didapatkan terlihat bahwa pengaksesan elemen array dengan cara biasa

dan dengan cara menggunakan pointer akan memberikan hasil yang sama. diatas kita

melakukan increment terhadap pointer. Perlu ditekankan disini bahwa operasi aritmatika

yang dapat dilakukan pada pointer hanya operasi penjumlahan dan pengurangan saja.

Sedangkan operasi perkalian dan pembagian tidak dapat dilakkukan

String dinamis

Pengalokasian string dinamis sama seperti pengalokasian array dinamis, mengingat string

adalah jenis khusus array. Berikut ini adalah contoh program pengalokasian string secara

dinamis.

# include <iostream.h> //# include <conio.h> const int MAKS = 255; void main() { char *kalimat; kalimat = new char[MAKS]; cout << "Masukkan sebuah kalimat : " << endl; cin.getline(kalimat, MAKS); cout << "Kalimat yang anda masukkan : " << endl; cout << kalimat << endl; }

Membebaskan memori :

Setelah suaatu variabel dinamis tidak diperlukan lagi, variabel tersebut dapat dihapus,

sehingga memori yang digunakannya dapat digunakan lagi oleh variabel dinamis yang

lain. Penghapusan variabel dinamis dilakukan dengana menggunakan nama variabel

dinamis yang bersangkutan.

Contoh :

Diktat Kuliah : Pemrograman Komputer 2 Bab 12 : 62

Page 66: Diktat Pemrograman C++ Pre & Header

// ******************************************** // Contoh penghapusan variabel dinamis // ******************************************** # include <iostream.h> # include <conio.h> void main() { clrscr(); double *ptrd = new double (123.45); float *ptrf = new float (3.14); int *ptri = new int (78); cout << "*ptrd = " << *ptrd << endl; cout << "*ptrf = " << *ptrf << endl; cout << "*ptri = " << *ptri << endl; // Menghapus variabel delete ptrd; delete ptrf; delete ptri; }

berikut ini adalah contoh pembebasan array dinamis

// ******************************************** // Contoh penghapusan variabel dinamis // ******************************************** # include <iostream.h> # include <conio.h> # include <stdlib.h> # include <time.h> void main() { clrscr(); double *acak = new double[5]; //array randomize(); for (int i=0; i<5; i++) *(acak+i) = random(20000) / double(random(500)); // Tampilkan isi array dinamis for (i=0; i<5; i++) cout << *(acak+i) << endl; // Hapus array delete [] acak; }

Diktat Kuliah : Pemrograman Komputer 2 Bab 12 : 63

Page 67: Diktat Pemrograman C++ Pre & Header

VARIABEL STRUKUR Variabel struktur bermanfaat untuk mengelompokkan sejumlah data dengan tipe yang

berlainan. Untuk dapat menggunakan variabel struktur pertama-tama kita harus

mendefenisikan variabel tersebut. Dengan mendefenisikan sebuah variabel struktur

sebenarnya kita sedang membuat sebuah tipe data baru. Berikut ini contoh sebuah

program yang mendefenisikan, mendeklarasikan dan menggunakan sebuah struktur.

// ******************************************* // contoh pendefenisian, pendeklarasian dan // pengaksesan variabel struktur struktur // ******************************************* # include <iostream.h> # include <conio.h> void main() { struct data_tanggal // pendefinisiaan { int tahun; int bulan; int tanggal; }; data_tanggal tanggal_lahir; // pendeklarasian // pengaksesan / penggunaan tanggal_lahir.tanggal = 1; tanggal_lahir.bulan = 9; tanggal_lahir.tahun = 1990; cout << tanggal_lahir.tanggal << '/' << tanggal_lahir.bulan << '/' << tanggal_lahir.tahun << endl; }

Keterangan : • Pendefinisan variabel struktur dilakukan dengan menggunakan kata kunci struct.

Pogram diatas mendefenisikan sebuah variabel struktur dengan nama data_tanggal.

Selanjutnya data_tanggal akan dikenal sebagai sebuah tipe data baru dalam program

kita.

• Pendeklarasian variabel struktur dilakukan dengan cara yang sama seperti

pendeklarasian variabel yang lain. Disini kita mendeklarasian sebuah variabal

bernama tanggal_lahir dengan tipe data data_tanggal.

• Penggunaan atau pengaksesan variabel struktur dilakukan dengan menggunakan

nama variabel struktur diikuti titik (dot) dan nama angauta variabel yang

dikehendaki.

Diktat Kuliah : Pemrograman Komputer 2 Bab 13 : 64

Page 68: Diktat Pemrograman C++ Pre & Header

Penugasan Variabel Struktur

Pemberian nilai terhadap suatu variabel struktur dapat dilakukan dalam bentuk

var1 = var2; sepanjang kedua variabel struktur bertipe sama.

Misalnya :

data_tanggal tgl_1, tgl_2;

maka penugasan bentuk : tgl_2 = tgl_1 diperbolehkan.

Cobalah sendiri buat program untuk membuktikannya

Pembandingan Struktur

Pembandingan dua buah struktur tidak dapat dilakukan secara langsung.

Misalnya :

data_tanggal tgl_1, tgl_2;

maka pembandingan sbb : if (tgl_1 == tgl_2) tidak diperbolehkan.

Untuk membandingkan dua buah struktur , masing-masing anggauta harus dibandingkan

secara sendiri-sendiri.

Contoh :

if ((tgl_1.tahun == tgl_2.tahun) && (tgl_1.tahun == tgl_2.tahun) && (tgl_1.tahun == tgl_2.tahun) ) diperbolehkan

Cobalah sendiri buat program untuk membuktikannya

Struktur didalam Struktur

Suatu struktur juga dapat mengandung struktur yang lain Contoh :

struct data_pegawai { struct nip; char nama[25]; data_tanggal tanggal_lahir; } data_pegawai rec_peg;

Disini didefenisikan struktur bernama data pegawai dimana salah satu anggaut

didalamnya bertipe data struktur juga yaitu.

Diktat Kuliah : Pemrograman Komputer 2 Bab 13 : 65

Page 69: Diktat Pemrograman C++ Pre & Header

Gambar berikut ini menunjukkan anggauta dari variabel rec_peg.

rec_peg

nip

tanggal_lahir

nama tahun

tanggal

bulan

Struktur dan Fungsi

Suatu struktur juga dapat berkedudukan sebagai argumen fungsi.

ada 4 kemungkinan penggunaan struktur dalam sebuah fungsi

1. Melewatkan variabel struktur ke fungsi berdasarkan nilai (Pass by Value)

2. Melewatkan variabel struktur ke fungsi berdasarkan alamat (Pass by Reference)

3. Melewatkan variabel struktur ke fungsi sebagai menggunakan pointer

4. Variabel struktur sebagai nilai balik fungsi

1. Melewatkan variabel struktur ke fungsi berdasarkan nilai (Pass by Value)

// ***************************************************** // contoh melewatkan struktur ke fungsi sebagai nilai // ***************************************************** # include <iostream.h> # include <conio.h> // Deklarasi Struktur struct koordinat { int x; int y; }; void tampilkan_posisi (koordinat posisi); // Prototipe Fungsi void main() { koordinat posisi; // deklarasi variabel struktur "koordinat" posisi.x = 27; posisi.y = 55; tampilkan_posisi (posisi); }

Diktat Kuliah : Pemrograman Komputer 2 Bab 13 : 66

Page 70: Diktat Pemrograman C++ Pre & Header

// defeninsi fungsi void tampilkan_posisi (koordinat posisi) { cout << "posisi x = " << posisi.x << endl; cout << "posisi y = " << posisi.y << endl; } 2. Melewatkan variabel struktur ke fungsi berdasarkan alamat (Pass by Reference)

// ************************************************************ // contoh melewatkan struktur ke fungsi berdasarkan alamat // ************************************************************ # include <iostream.h> # include <conio.h> // Deklarasi Struktur struct koordinat { int x; int y; }; void ubah_posisi (koordinat &posisi); // Prototipe Fungsi void main() { koordinat posisi; // deklarasi variabel struktur "koordinat" posisi.x = 12; posisi.y = 34; cout << "isi Semula : " << endl; cout << "posisi x = " << posisi.x << endl; cout << "posisi y = " << posisi.y << endl; cout << endl; ubah_posisi (posisi); cout << "Isi sekarang : " << endl; cout << "posisi x = " << posisi.x << endl; cout << "posisi y = " << posisi.y << endl; } // defeninsi fungsi void ubah_posisi (koordinat &posisi) { posisi.x = 24; posisi.y = 76; }

Diktat Kuliah : Pemrograman Komputer 2 Bab 13 : 67

Page 71: Diktat Pemrograman C++ Pre & Header

3. Melewatkan variabel struktur ke fungsi sebagai menggunakan pointer

// ********************************************************* // contoh melewatkan struktur ke fungsi sebagai pointer // ********************************************************* # include <iostream.h> # include <conio.h> // Deklarasi Struktur struct koordinat { int x; int y; }; void ubah_posisi (koordinat *posisi); // Prototipe Fungsi void main() { koordinat posisi; // deklarasi variabel struktur "koordinat" posisi.x = 12; posisi.y = 34; cout << "isi Semula : " << endl; cout << "posisi x = " << posisi.x << endl; cout << "posisi y = " << posisi.y << endl; cout << endl; ubah_posisi (&posisi); // parameter berupa alamat cout << "Isi sekarang : " << endl; cout << "posisi x = " << posisi.x << endl; cout << "posisi y = " << posisi.y << endl; } // defeninsi fungsi void ubah_posisi (koordinat *posisi) { (*posisi).x = 24; (*posisi).y = 76; }

Keterangan tambahan penting

Tanda kurung pada penulisan : (*posisi).x = 24; mempunyai makna khusus. Tanpa

adanya tanda kurung notasi *posisi.x mempunyai makana yang berbeda karena operator

titik mempunyai prioritas yang lebih tinggi dibandingkan operator *

Bentuk semacam (*posisi).x dapat ditulis menjadi posisi->x operator -> disebut

operator panah

Diktat Kuliah : Pemrograman Komputer 2 Bab 13 : 68

Page 72: Diktat Pemrograman C++ Pre & Header

4. Variabel struktur sebagai nilai balik fungsi

// ************************************************************* // contoh fungsi yang melewatkan nilai balik berupa struktur // ************************************************************ # include <iostream.h> # include <conio.h> # include <dos.h> // Deklarasi Struktur struct data_tanggal { int tahun; int bulan; int tanggal; }; data_tanggal tgl_kini (void); // prototipe void main() { data_tanggal tg; tg = tgl_kini(); cout << "Tanggal sekarang : " << tg.tanggal << '-' << tg.bulan << '-' << tg.tahun << endl; } // defeninsi fungsi data_tanggal tgl_kini (void) { date dt; // date adalah struktur pada DOS.H data_tanggal tg; getdate(&dt); // peroleh tanggal sekarang tg.tanggal = dt.da_day; tg.bulan = dt.da_mon; tg.tahun = dt.da_year; return(tg); }

Diktat Kuliah : Pemrograman Komputer 2 Bab 13 : 69

Page 73: Diktat Pemrograman C++ Pre & Header

OPERASI FILE

Sejauh ini data-data yang digunakan dalam program masih disimpan didalam

memori komputer (RAM), sehingga ketika program terhenti maka data tersebut akan

hilang. Untuk menyimpan data-data tersebut kita memerlukan alat bantu, alat bantu

disini adalah berupa file. Agar data tidak hilang maka file tidak disimpan dalam memori

komputer (RAM) tapi disimpan dalam suatu media magnetik berupa hardisk atau disket.

Data-data yang disimpan di sini akan bersifat semi permanen, artinya kita dapat

menambahkan menghapus ataupun mengubah isi dari data-data tersebut.

Berdasarkan isi datanya file-file dibagi dalam dua jenis yaitu : File teks dan file

biner. Sebagai seorang programer kita harus mengetahui bagaimana cara untuk

menciptakan, membuat ataupun menghapus suatu file ke atau dari dalam disk. Selain itu

kita juga harusdapat melakukan manipulasi terhadap isi file tersebut. Untuk itu akan

dibahas operasi-operasi apa saja yang dapat dilakukan terhadap suatu file serta

bagaimana cara melakukannya dalam bahasa C.

Bahasa C menyediakan sebuah struktur yang digunakan untuk pengaksesan

sebuah file, struktur tersebut dinamakan “FILE” . Struktur FILE didefenisikan dalam file

header <stdio.h>. Struktur tersebut digunakan untuk menyimpan informasi-informasi

yang akan diakses dari file, misalnya : lokasi file (path), ukuran file (dalam satuan byte),

data-data yang terkandung didalamya serta informasi-informasi lainnya.

Yang harus dilakukan untuk mendapatkan informasi struktur FILE terrsebut

adalah mendeklarasikan sebuah pointer yang menunjuk ke struktur FILE. Pointer

semacam ini dinamakan pointer file. Berikut ini contoh pendeklarasian pointer ke file

yang dimaskud diatas

FILE *nama_pointer_ke file;

Selanjutnya kita dapat menggunakan pointer tersebut untuk mendapatkan informasi-

informasi file yang akan kita akses didalam program.

Membuka File

Sebelum menggunakan file di dalam suatu program, kita harus

menghubungkannya terlebih dahulu dengan cara membuka file tersebut. Adapun fungsi

yang digunkan untuk melakukan hal tersebut adalah fungsi fopen(), yaitu fungsi yang

terdapat di dalam file header <stdio.h>. Berikut ini prototipe dari fungsi fopen()

FILE *fopen (char *namafile, char *mode);

Mode-mode yang dapat digunakan telah didefenisikan untuk fungsi fopen() adalah sbb

Mode Keterangan

r File dibuka untuk proses pembacaan(reading). Apabila file belum ada

maka proses gagal dan fungsi fopen() akan mengembalikan nilai NULL

Diktat Kuliah : Pemrograman Komputer 2 Bab 14 : 70

Page 74: Diktat Pemrograman C++ Pre & Header

w File dibuka untuk proses penulisan (writing). Apabila file belum ada

maka file akan dibuat. Sebaliknya apabile file yang disebutkan sudah

ada, maka file tersebut akan dihapus tanpa adanya peringatan terlebih

dahulu, selanjutnya akan dibuat file baru (dengan data yang kosong)

a File dibuka untuk proses penambahan data. Apabila file belum ada maka

file akan dibuat. Jika filw telah ada maka data akan dimasukkan ke

dalam file denan menambahkannya pada bagian akhir dari data lama

(end of file)

r+ File dibuka untuk proses pembacaan(reading). Apabila file belum ada

maka proses gagal dan fungsi fopen() akan mengembalikan nilai NULL

w+ File dibuka untuk proses pembacaan dan penulisan. Apabila file belum

ada maka file akan dibuat. Sebaliknya apabile file yang disebutkan

sudah ada, maka file tersebut akan .

a+ File dibuka untuk proses pembacaan dan penambahan data. Apabila file

belum ada maka file akan dibuat. Jika filw telah ada maka data akan

dimasukkan ke dalam file denan menambahkannya pada bagian akhir

dari data lama (end of file)

Contoh :

# include <stdio.h> # include <stdlib.h> # include <iostream.h> int main() { // Mendeklarasikan pointer ke file dengan nama pf FILE *pf; char karakter; // Variabel bantu untuk menampung data dari file // membuka file dan menampungnya ke dalam pointer pf pf = fopen("D:/COBA.TXT","r"); // Mengecek apakah file tersebut dapat dibuka atau tidak if (pf != NULL) { // apabila berhasil while ((karakter = getc(pf)) != EOF) {

//selama data masih ada cout << karakter; } } else { // apabile gagal cout << "Kesalahan : File COBA.TXT tidak dapat dibuka"; exit (EXIT_FAILURE); // keluar program dengan nilai 1 } return 0; }

Diktat Kuliah : Pemrograman Komputer 2 Bab 14 : 71

Page 75: Diktat Pemrograman C++ Pre & Header

Menutup File

Setelah melakukan pengaksesan terhadap suatu file melalui fungsi fopen(), maka

sebaiknya kita memutuskan koneksi dari pointer file ke file eksternal yang bersangkutan.

Caranya dengan menggunakan fungsi fclose(). Hal ini dilakukan untuk menjaga

keamanan karena dapat saja dalam sistim operasi suatu file diakses secara simultan oleh

beberapa program lain yang sedang dijalankan. Jadi sebaiknya kita sesegera mungkin

menutup koneksi terhadap suatu file apabila file tersebut sudah tidak digunakan lagi

didalam program.

Contoh :

# include <stdio.h> # include <stdlib.h> # include <iostream.h> int main() { // Mendeklarasikan pointer ke file dengan nama pf FILE *pf; int counter; // variabel bantu untuk menampung banyaknya // baris dalam file char string[256]; // Variabel bantu untuk menampung string // di setiap baris // membuka file dan menampungnya ke dalam pointer pf pf = fopen("D:/COBA.TXT","r"); // Mengecek apakah file tersebut dapat dibuka atau tidak if (pf != NULL) { // apabila berhasil counter = 0; // Mula2 banyaknya baris sama dengan nol cout << "Data yang terdapat didalam file : " << endl; cout << "--------------------------------- " << endl; while ( (fgets(string, 256, pf) ) ) { cout << string; // Mencetak setiap baris ke layar monitor counter++; // banyaknya bari bertambah satu } } else { cout << "Kesalahan : File COBA.TXT tidak dapat dibuka"; exit (EXIT_FAILURE); // sama dengan exit(1) } // Menampilkan banyaknya baris yang didapatkan cout << "\n-------------------------------------\n"; cout << "\nBanyaknya baris yang ditemukan : " << counter; fclose(pf); //Menutup file return 0; }

Diktat Kuliah : Pemrograman Komputer 2 Bab 14 : 72

Page 76: Diktat Pemrograman C++ Pre & Header

Membaca data dari File

Pada program sebelumnya kit amelihat bahwa kita menggunakan fungsi getc()

dan fungsi fgets(). Kedua fungsi tersebut adalah fungsi yang digunakan untuk membaca

data dari file. Artinya data yang terdapat didalam file kita tampung dalam suatu variabel

dan variabel tersebut nantinya dapat kita gunakan untuk kebutuhan program.

Fungsi getc()

Fungsi getc() digunakan untuk mengambil atau membaca sebuah karakter yang terdapat

didalam file. Prototipe dari fungsi getc() adalah :

int getc (FILE *fp)

Ada fungsi lain yang mirip fungsi getc() ini yaitu fungsi getchar(). Bedanya fungsi

getchar digunakan untuk membaca karakter dari keyboard yang ditulis sebagai masukkan

dalam program sedangkan fungsi getc() digunakan untuk secara langsung membaca

karakter demi karakter yang terdapat didalam file. Dengan kata lain fungsi getchar()

digunakan dalam program-program yang tidak ada hubungannya dengan file.

Berikut ini contoh program untuk menghitung banyaknya huruf vokal (a,i,u,e ,o

atau A.I,U,E,O) yang terdapat dalam suatu file text.

# include <stdio.h> # include <stdlib.h> # include <iostream.h> void main() { char karakter; // untuk menampung karakter yang terdapat didalam file // Mendeklarasikan 5 buah counter untuk vokal A, I, U, e, O // Mula-mula setiap counter bernilai 0 int counter[5] = {0, 0, 0, 0, 0}; FILE *pf; char namafile[256]; // untuk menamppung nama file yang akan dibuka // Meminta user untuk memasukkan nama file yf akan diproses cout << "Masukkan nama file (beserta lokasinya) : "; gets (namafile); if ((pf=fopen(namafile, "r")) != NULL ) { cout << "\nData dalam file " << namafile << endl; cout << "-----------------------------------------" << "-------------------" << endl; while ((karakter = getc(pf)) != EOF) { // Mencetak karakter ke layar monitor cout << karakter; // Melakukan perhitungan vokal switch (karakter) { case 'a' : case 'A' : counter[0]++; break; // vokal A

Diktat Kuliah : Pemrograman Komputer 2 Bab 14 : 73

Page 77: Diktat Pemrograman C++ Pre & Header

case 'i' : case 'I' : counter[1]++; break; // vokal I case 'u' : case 'U' : counter[2]++; break; // vokal U case 'e' : case 'E' : counter[3]++; break; // vokal E case 'o' : case 'O' : counter[4]++; break; // vokal O default : { } // tidak melakukan apa-apa } } // akhir dari while cout << "-----------------------------------------" << "-------------------"; } else { cout << "kesalahan : File " << namafile << " tidak dapat dibuka"; exit (EXIT_FAILURE); } // Menampilkan hasil perhitungan cout << "\nDaftar huruf vokal yang ditemukan dalam file : \n\n"; cout << "Vokal A \t : " << counter[0] << endl; cout << "Vokal I \t : " << counter[1] << endl; cout << "Vokal U \t : " << counter[2] << endl; cout << "Vokal E \t : " << counter[3] << endl; cout << "Vokal O \t : " << counter[4] << endl; fclose(pf); // menutup file }

Fungsi fgets()

Fungsi fgets digunakan untuk membaca satu baris data yang terdapat di dalam file.

Adapunprototipenya adalah sebagai berikut

char *fgets (char *str, int n, FILE *fp);

Parameter str digunakan untuk menyimpan string yang merupakan nilai kembalian dari

fungsi tersebut, n berguna untuk menentukan panjang string maksimal yang akan

dimasukkan ke string str. Sedangkan parameter fp merupakan pointer ke struktur FILE.

Berikut ini contoh program yang akan menunjukkan kembali penggunaan fungsi

fgets().

# include <stdio.h> # include <stdlib.h> # include <iostream.h> # define MAX 256 void main () { FILE *pf; char str[256]; // variabel untuk menampung string setiap baris pf = fopen("D:/coba.txt", "r"); cout << "membaca data dari file (D:/coba.txt) : \n"; if (pf != NULL) {

Diktat Kuliah : Pemrograman Komputer 2 Bab 14 : 74

Page 78: Diktat Pemrograman C++ Pre & Header

// Membaca 2 baris pertama dari data yang terdapat dalam file for (int i=0; i<2; i++) { fgets (str, MAX, pf); // Menampilkan variabel str ke layar cout << "Baris ke " << (i+1) << " : " << str; } } else { cout << "Kesalahan : File coba.txt tidak dapat dibuka "; exit (EXIT_FAILURE); } fclose(pf); }

Menulis data ke dalam File

Ada beberapa fungsi yang dapat digunakan untuk menuliskan data kedalam file. Dua

diantaranya adalah fungsi putc() dan fputs().

Fungsi putc()

Fungsi putc merupakan kebalikan dari fungsi getc(), yaitu diugunakan untuk menuliskan

sebuah karakter ke dalam file. Prototipe fungsi ini adalah sbb.

int putc (int c, FILE *fp);

Parameter c diatas digunakan untuk menampung karakter yang akan ditulis atau

dimasukkan ke dalam file, sedangkan fp merupakan pointer ke file tujuan. Berikut ini

contoh program yang menggunakan fungsi fputs(). Disini fungsi fputs() akan digunakan

untuk melakukan penyalinan file.

# include <stdio.h> # include <stdlib.h> # include <iostream.h> // Mendefenisikan fungsi untuk proses copy file int CopyFile (FILE *filesumber, FILE *filetujuan) { char karakter;; // Membaca data dari file sumber dan menuliskannya ke file tujuan while ((karakter=getc(filesumber)) != EOF) { putc (karakter, filetujuan); } return 1; } void main() { FILE *pfsumber, *pftujuan; char namafilesumber[256], namafiletujuan[256]; // Meminta user untuk memasukkan nama file sumber dan tujuan cout << "Melakukan penyalinan file \n"; cout << "Nama file sumber \t : "; gets(namafilesumber); cout << "Nama file tujuan \t : "; gets(namafiletujuan);

Diktat Kuliah : Pemrograman Komputer 2 Bab 14 : 75

Page 79: Diktat Pemrograman C++ Pre & Header

// Membuka file sumber untuk proses pembacaan data pfsumber = fopen(namafilesumber, "r"); if (pfsumber == NULL) { cout << "Kesalahan : File " << namafilesumber << " tidak dapat dibuka"; exit (EXIT_FAILURE); } // Membuka file tujuan untuk proses penulisan data pftujuan = fopen(namafiletujuan, "w"); // Melakukan copy file if (CopyFile (pfsumber, pftujuan)) { cout << "\nProses copy file berhasil"; } else { cout << "\nProses copy file gagal"; } // Menutuf file fclose(pftujuan); fclose(pfsumber); }

Fungsi fputs()

Fungsi fputs() merupakan kebalikan dari fungsi getc(), yaitu digunakan untuk menuliskan

sebuah baris kedalam file. Prototipe fungsi ini adalah sebagai berikut

char fputs (char *str, FILE *fp)

Parameter str digunakan untuk menampung string yang akan dimasukkan atau dituliskan

kedalam file, sedangkan fp merupakan pointer yang menunjuk ke file tujuan. Apabile

berhasil, fungsi ini akan mengembalikan nilai non negatif. Apabila gagal maka nilai yang

dikembalikan adalah EOF (End Of File). Berikut ini contoh program menggunakan fungsi

fputs()

# include <stdio.h> # include <stdlib.h> # include <iostream.h> void main() { FILE *pf; // Membuat file baru dengan nama PUTS.TXT untuk diisi data pf = fopen("D:/PUTS.TXT", "w+"); if (pf != NULL) { // Menulis data ke file fputs ("Toko Buku GRAMEDIA\n",pf); fputs ("Depok",pf); cout << "Penulisan berhasil ..."; } else { cout << "Kesalahan : File PUTS.TXT tidak dapat dibuka"; exit (EXIT_FAILURE);

Diktat Kuliah : Pemrograman Komputer 2 Bab 14 : 76

Page 80: Diktat Pemrograman C++ Pre & Header

} // Menutuf file fclose(pf); }

Mendeteksi EOF (End Of File)

Pada program diatas kita telah sering menggunakan makro EOF, untuk mendeteksi akhir

dari suatu file. Makro EOF didefenisikan didalam file header <stdio.h>. Namun makro

EOF tersebut hanya digunakan untuk file teks. Apabila kita akan melakukan pembacaan

dari file biner maka untuk menandai akir file kita harus menggunakan fungsi feof().

Prototipe dari fungsi feof() adalah sbb.

int feof() (FILE *fp);

Fungsi feof() akan mengemabalikan nilai 0 selama akhir file belum ditemukan dan selain

nilai 0 apabile akhir file telah ditemukan.

Sebagai tambahan bahwa untuk membaca suatu karakter dari suatu file biner digunakan

fungsi fgetc(), dan untuk menuliskan suatu karakter ke dalam file biner kita gunakan

perintah fputc(). Parameter dari fungsi fgetc() dan fputc() sama persis dengan

parameter fungsi getc() dan putc() pada pengaksesan file text.

Manajemen File

Yang dimaksud dengan manajemen file disini adalah aktivitas penempatan file-file sesuai

dengan tempat dan direktorinya masing-masing. Untuk melakukan hal tersebut

diperlukan proses penyalinan (copy), perubahan, dan penghapusan file.

Hal yang perlu diperhatikan pada saat kita mendefnisikan fungsi tersebut adalah kita

harus mengeset mode dari file yang akan dibuka menjadi mode biner (“rb” atau “wb”).

Ini bertujuan agar fungsi tersebut juga dapat digunakan untuk melakukan penyalinen file

biner.

Untuk pengubahan nama file, C menyediakan sebuah fungsi khusus yang bernama

rename(), yang ada di dalam file header stdio.h. Prototipe dari fungsi rename() adalah

sebagai berikut.

int rename (const char *oldname, const char *newname);

Fungsi ini akan mengembalikan nilai 0 apabila proses berhasil dan –1 apabila gagal.

Untuk penghapusan file, C menyediakan sebuah fungsi khusus yang bernama remove(),

yang ada di dalam file header stdio.h. Prototipe dari fungsi rename() adalah sebagai

berikut.

int remove (const char *filename);

Fungsi ini akan mengembalikan nilai 0 apabila proses berhasil dan –1 apabila gagal. Diktat Kuliah : Pemrograman Komputer 2 Bab 14 : 77

Page 81: Diktat Pemrograman C++ Pre & Header

PENGENALAN PEMROGRAMAN BERORIENTASI OBYEK Pengantar

Pemrograman Berorientasi Objek sebenarnya bukanlah bahasa pemrograman baru, tetapi

jalan baru untuk berpikir dan merancang aplikasi yang dapat membantu memecahkan

persoalan mengenai engembangan perangkat lunak. Pemrograman berorientasi objek

disusun dan dipahami oleh ilmuwan yang memandang dunia sebagai populasi objek yang

berinteraksi dengan yang lain. Prosedur yang digunakan dalam objek dipandang sebagai

kepentingan kedua karena tergantung pada objek itu sendiri.

Tentunya hal tersebut berbeda dengan pemrograman terstruktur. Pemrograman

terstruktur mempunyai sifat pemisahan data dengan kode yang mengolahnya

Pemrograman Berorientasi Objek (PBO) adalah metode pemrograman yang meniru cara

kita memperlakukan sesuatu(benda). Ada tiga karakteristik bahasa Pemrograman

Berorientasi Objek, yaitu :

1. Pengkapsulan (Encapsulation) : mengkombinasikan suatu struktur dengan fungsi

yang emanipulasinya untuk membentuk tipe data baru yaitu kelas (class).

2. Pewarisan (Inheritance) : mendefinisikan suatu kelas dan kemudian

menggunakannya untuk membangun hirarki kelas turunan, yang mana masing-

masing turunan mewarisi semua akses kode maupun data kelas dasarnya.

3. Polimorphisme (Polymorphism) : memberikan satu aksi untuk satu nama yang

dipakai bersama pada satu hirarki kelas, yang mana masing-masing kelas hirarki

menerapkan cara yang sesuai dengan dirinya.

Struktur dan kelas

Dalam C++, tipe data struktur yang dideklarasikan dengan kata kunci struct, dapat

mempunyai komponen dengan sembarang tipe data, baik tipe data dasar maupun tipe

data turunan, termasuk fungsi. Dengan kemampuan ini, tipe data struktur menjadi

sangat berdaya guna.

Misalnya, kita ingin membentuk tipe data struktur yang namanya kotak. Maka dapat

dideklarasikan sebagai berikut:

struct tkotak { double panjang; double lebar; }; tkotak kotak;

Untuk memberi nilai ukuran kotak tersebut, kita dapat menggunakan perintahperintah

ini:

kotak.panjang = 10;

Diktat Kuliah : Pemrograman Komputer 2 Bab 15 : 78

kotak.lebar = 7;

Page 82: Diktat Pemrograman C++ Pre & Header

Untuk memberi nilai panjang dan lebar kotak, salah satu caranya adalah seperti di atas.

Cara lain untuk memberi nilai panjang dan lebar adalah dengan membentuk suatu fungsi.

Karena fungsi ini hanya digunakan untuk memberi nilai data panjang dan lebar suatu

kotak, tentunya fungsi ini khusus milik objek kotak, sehingga harus dianggap sebagai

anggota struktur kotak. C++ sebagai ahasa pemrograman dapat mendefinisikan

anggota tipe struktur yang berupa fungsi.

Dengan menambah fungsi tersebut, maka struktur kotak menjadi lebih jelas bentuknya.

struct tkotak {

double panjang; double lebar; void SetUkuran(double pj, double lb) {

panjang = pj; lebar = lb;

}; }; tkotak kotak;

dengan tipe struktur kotak seperti itu, untuk memberi nilai panjang dan lebar hanya

dengan memanggil fungsi SetUkuran()

kotak.SetUkuran(10,7);

Selain punya ukuran panjang dan lebar, kotak juga mempunyai keliling dan luas. Dengan

demikian, kita dapat memasukkan fungsi untuk menghitung keliling dan luas ke dalam

struktur kotak.

Sebagai catatan, bahwa definisi fungsi yang menjadi anggota struktur dapat ditempatkan

di luar tubuh struktur. Dengan cara ini maka deklarasi struktur kotak menjadi seperti

berikut:

struct tkotak {

double panjang; double lebar; void SetUkuran(double pj, double lb); double Keliling(); double Luas();

}; tkotak kotak;

contoh penerapan struktur kotak dapat dilihat dalam program berikut:

#include<iostream.h>

#include<conio.h> struct tkotak {

Diktat Kuliah : Pemrograman Komputer 2 Bab 15 : 79

Page 83: Diktat Pemrograman C++ Pre & Header

double panjang; double lebar; void SetUkuran(double pj, double lb); double Keliling(); double Luas(); }; int main() {

tkotak kotak; kotak.SetUkuran(10,7); cout<<"Panjang : "<<kotak.panjang<<endl; cout<<"Lebar : "<<kotak.lebar<<endl; cout<<"Keliling : "<<kotak.Keliling()<<endl; cout<<"Luas : "<<kotak.Luas()<<endl; getch(); return 0;

} void tkotak::SetUkuran(double pj, double lb) {

panjang = pj; lebar = lb;

} double tkotak::Keliling() {

return 2*(panjang+lebar); } double tkotak::Luas() {

return panjang*lebar; }

Tampilan Output:

Panjang : 10

Lebar : 7

Keliling : 34

Luas : 70

Bentuk program di atas, adalah contoh gaya pemrograman berorientasi prosedur

(terstruktur) yang sudah mengubah pola pikirnya menjadi berorientasi objek. Dalam

pemrograman berorientasi objek, jika kita telah menentukan suatu objek tertentu, maka

objek tersebut kita definisikan dalam bentuk tipe baru yang namanya kelas.

Tipe data kelas didefinisikan dengan kata kunci (keyword) class, yang merupakan

generalisasi dari pernyataan struct. Pernyataan struct secara umum digantikan dengan

pernyataan class. Jika objek kotak dideklarasikan dalam bentuk kelas, maka deklarasinya

mirip dengan struktur.

class tkotak

Diktat Kuliah : Pemrograman Komputer 2 Bab 15 : 80

Page 84: Diktat Pemrograman C++ Pre & Header

{ double panjang; double lebar; public: void SetUkuran(double pj, double lb); double Keliling(); double Luas();

}; tkotak kotak; Dalam deklarasi kelas tersebut, muncul kata public. Data atau fungsi yang dideklarasikan

di bawah kata kunci public mempunyai sifat dapat diakses dari luar kelas secara

langsung. Dalam deklarasi tersebut, variabel panjang dan lebar tidak bersifat public,

sehingga tidak dapat diakses secara langsung dari luar kelas. Dengan demikian perintah-

perintah di bawah ini tidak dapat dijalankan.

kotak.panjang = 10; kotak.lebar = 7; cout<<”Panjang : ”<<kotak.panjang<<endl; cout<<”Lebar : “<<kotak.lebar<<endl;

Inilah yang membedakan struktur dan kelas. Dalam kelas, masing-masing data dan fungsi anggota diberi sifat tertentu. Jika semua anggota kelas bersifat public, maka kelas sama dengan struktur.

Untuk dapat mengakses data panjang dan lebar pada kelas tkotak harus dilakukan oleh

fungsi yang menjadi anggota kelas dan bersifat public. Pada deklarasi kelas tkotak, satu-

satunya jalan untuk memberi nilai

panjang dan lebar adalah dengan menggunakan fungsi SetUkuran(). Untuk mengambil

nilai panjang dan lebar juga harus dilakukan oleh fungsi yang menjadi anggota kelas.

Misalnya, kita definisikan fungsi GetPanjang() dan GetLebar() untuk mengambil nilai

panjang dan lebar.

Sebagai contoh:

//program class #include<iostream.h> #include<conio.h> class tkotak {

double panjang; double lebar; public: void SetUkuran(double pj, double lb); double Keliling(); double Luas(); double GetPanjang(); double GetLebar();

}; int main() {

tkotak kotak;

Diktat Kuliah : Pemrograman Komputer 2 Bab 15 : 81

Page 85: Diktat Pemrograman C++ Pre & Header

kotak.SetUkuran(10,7); cout<<"Panjang : "<<kotak.GetPanjang()<<endl; cout<<"Lebar : "<<kotak.GetLebar()<<endl; cout<<"Keliling : "<<kotak.Keliling()<<endl; cout<<"Luas : "<<kotak.Luas()<<endl; getch(); return 0;

} void tkotak::SetUkuran(double pj, double lb) {

panjang = pj; lebar = lb;

} double tkotak::Keliling() {

return 2*(panjang+lebar); } double tkotak::Luas() {

return panjang*lebar; } double tkotak::GetPanjang() {

return panjang; } double tkotak::GetLebar() {

return lebar; }

Tampilan Output:

Panjang : 10

Lebar : 7

Keliling : 34

Luas : 70 Dapat dilihat dari contoh program, bentuk pendefinisian kelas adalah sebagai berikut:

Tipe Nama_Kelas::NamaFungsi() {

IsiFungsi }

Untuk mendefinisikan variabel kelas, digunakan deklarasi :

Nama_Kelas Nama_Variabel;

Contoh :

Tkotak kotak; Pengkapsulan(Encapsulation)

Diktat Kuliah : Pemrograman Komputer 2 Bab 15 : 82

Page 86: Diktat Pemrograman C++ Pre & Header

Salah satu keistimewaan C++ adalah pengkapsulan. Pengkapsulan adalah

mengkombinasikan suatu struktur dengan fungsi yang memanipulasinya untuk

membentuk tipe data baru yaitu kelas(class).

Kelas akan menutup rapat baik data maupun kode. Akses item di dalam kelas

dikendalikan. Pengendalian ini tidak hanya berupa data tetapi juga kode. Saat kelas akan

digunakan, kelas harus sudah dideklarasikan. Yang penting, pemakai kelas mengetahui

deskripsi kelas, tetapi bukan implementasinya. Bagi pemakai, detail internal kelas tidak penting. Konsep ini disebut penyembunyian informasi (information hiding).

Untuk menggunakan kelas, kita perlu mengetahui sesuatu tentangnya. Kita perlu

mengetahui fungsi apa yang bisa digunakan dan data apa saja yang dapat diakses.

Fungsi yang dapat digunakan dan data yang dapat diakses disebut antarmuka pemakai

(user interface). Antarmuka pemakai menceritakan bagaimana kelas berperilaku, bukan

bagaimana kelas dibuat. Kita tidak perlu mengetahui implementasi kelas. Sekali kelas

dibuat, kita bisa memakainya berulang-ulang. Bagi pandangan pemakai, kelas adalah

kotak hitam dengan perilaku tertentu.

Kendali Akses terhadap Kelas

Tugas kelas adalah untuk menyembunyikan informasi yang tidak diperlukan oleh

pemakai. Ada tiga macam pemakai kelas:

1. kelas itu sendiri

2. pemakai umum

3. kelas turunan

Setiap macam pemakai mempunyai hak aksesnya masing-masing. Hak akses ini ditandai

dengan kenampakan anggota kelas. Kelas pada C++ menawarkan tiga aras kenampakan

anggota kelas (baik anggota data maupun fungsi anggota):

1. private

Anggota kelas private mempunyai kendali akses yang paling ketat. Dalam bagian

private, hanya fungsi anggota dari kelas itu yang dapat mengakses anggota

private atau kelas yang dideklarasikan sebagai teman (friend).

2. public

Dalam bagian public, anggotanya dapat diakses oleh fungsi anggota kelas itu

sendiri, instance kelas, fungsi anggota kelas turunan. Suatu kelas agar bisa

diakses dari luar kelas, misalnya dalam fungsi main(), perlu mempunyai hak

akses publik. Hak akses ini yang biasanya digunakan sebagai perantara antara

kelas dengan dunia luar.

3. protected

Suatu kelas dapat dibuat berdasarkan kelas lain. Kelas baru ini mewarisi sifat-

sifat dari kelas dasarnya. Dengan cara ini bisa dibentuk kelas turunan dari

beberapa tingkat kelas dasar. Bila pada kelas dasar mempunyai anggota dengan

Diktat Kuliah : Pemrograman Komputer 2 Bab 15 : 83

Page 87: Diktat Pemrograman C++ Pre & Header

hak akses terproteksi, maka anggota kelas ini akan dapat juga diakses oleh kelas

turunannya. Anggota kelas terproteksi dibentuk dengan didahului kata kunci

protected. Pada bagian protected, hanya fungsi anggota dari kelas dan kelas-

kelas turunannya yang dapat mengakses anggota.

Contoh program :

//File persegiPJ.Cpp #include <iostream.h> class PersegiPanjang {

protected : int panjang; int lebar;

public : PersegiPanjang(int pj, int lb) {

panjang = pj; lebar = lb;

} int Panjang() {

return panjang; } int Lebar() {

return lebar; } int Keliling() {

return 2*(panjang+lebar); } int Luas() {

return panjang*lebar; } void Skala(float sk) {

panjang *= sk; lebar *= sk;

}

void TulisInfo() {

cout<<"Panjang : "<<panjang<<endl <<"Lebar :"<<lebar<<endl

<<"Keliling :"<<Keliling()<<endl <<"Luas :"<<Luas()<<endl;

Diktat Kuliah : Pemrograman Komputer 2 Bab 15 : 84

Page 88: Diktat Pemrograman C++ Pre & Header

} }; Simpan file di atas dengan nama PersegiPJ.Cpp Kemudian lanjutkan pembuatan program berikut pada halaman baru: // penggunaan kelas persegi panjang #include "PersegiPJ.Cpp" void main() {

PersegiPanjang pp1(10,5); pp1.Skala(2); pp1.TulisInfo(); getch();

}

Konstruktor dan Destruktor

Konstruktor adalah fungsi khusus anggota kelas yang otomatis dijalankan pada saat

penciptaan objek (mendeklarasikan instance). Konstruktor ditandai dengan namanya,

yaitu sama dengan nama kelas. Konstruktor tidak mempunyai tipe hasil, bahkan juga

bukan bertipe void. Biasanya konstruktor dipakai untuk inisialisasi anggota data dan

melakukan operasi lain seperti membuka file dan melakukan alokasi memori secara

dinamis. Meskipun konstruktor tidak harus ada di dalam kelas, tetapi jika diperlukan

konstruktor dapat lebih dari satu.

Tiga jenis konstruktor:

1. Konstruktor default : tidak dapat meneriman argumen, anggota data diberi nilai

awal tertentu

2. Konstruktor penyalinan dengan parameter : anggota data diberi nilai awal berasal

dari parameter.

3. Konstruktor penyalinan objek lain : parameter berupa objek lain, anggota data

diberi nilai awal dari objek lain.

Perhatikan contoh berikut:

Diktat Kuliah : Pemrograman Komputer 2 Bab 15 : 85

Page 89: Diktat Pemrograman C++ Pre & Header

//Program Konstruktor #include<iostream.h> #include<conio.h> class titik {

int x; int y; public:

titik() //konstruktor default { x=0; y=0; } titik(int nx, int ny) // konstruktor penyalinan { x=nx; y=ny; } titik(const titik& tt) // konstruktor penyalinan objek { x=tt.x; y=tt.y; } int NX() { return x; } // fungsi anggota biasa int NY() { return y; } // fungsi anggota biasa

}; void main() {

titik t1; // objek dg konstruktor default titik t2(10, 20); // objek dg konstruktor penyalinan titik t3(t2); // objek dg konstruktor penyalinan objek cout<<”t1 = ”<< t1.NX() << “, “<<t1.NY()<<endl; cout<<”t2 = ”<< t2.NX() << “, “<<t2.NY()<<endl; cout<<”t3 = ”<< t3.NX() << “, “<<t3.NY()<<endl; getch();

}

Hasil keluaran program: t1 = 0,0

t2 = 10,20

t3 = 10,20

Objek t1 diciptakan dengan otomatis menjalankan konstruktor default. Dengan demikian

anggota data diberi nilai x=0, dan y = 0. Penciptaan objek t2 diikuti dengan menjalankan

konstruktor kedua, mengakibatkan anggota data diberi nilai x=10 dan y=20. Terakhir, t3

diciptakan dengan menyalin objek dari t2, mengakibatkan pemberian nilai kepada

anggota data sama dengan objek t2.

Destruktor

Destruktor adalah pasangan konstruktor. Pada saat program menciptakan objek secara

otomatis konstruktor akan dijalankan, yang biasanya dimaksudkan untuk memberi nilai

awal variabel private. Sejalan dengan ini, C++ menyediakan fungsi destruktor

Diktat Kuliah : Pemrograman Komputer 2 Bab 15 : 86

Page 90: Diktat Pemrograman C++ Pre & Header

(penghancur atau pelenyap) yang secara otomatis akan dijalankan pada saat berakhirnya

kehidupan objek. Fungsi destruktor adalah untuk mendealokasikan memori dinamis yang

diciptakan konstruktor. Nama destruktor sama dengan nama kelas ditambah awalan

karakter tilde(~).

Perhatikan contoh berikut:

// Contoh Konstruktor dan Destruktor #include<iostream.h> class Tpersegi {

int *lebar, *panjang; public:

Tpersegi (int, int); ~Tpersegi(); int Luas() {return (*lebar * *panjang);}

}; Tpersegi::Tpersegi(int a, int b) {

lebar = new int; panjang = new int; *lebar = a; *panjang = b;

} Tpersegi::~Tpersegi() {

delete lebar; delete panjang;

} int main() {

Tpersegi pers(3,4), persg(5,6); cout<< “Luas pers = ”<<pers.Luas()<<endl; cout<< “Luas persg = ”<<persg.Luas()<<endl; return 0;

}

Pewarisan (Inheritance)

Suatu kelas dapat diciptakan berdasarkan kelas lain. Kelas baru ini mempunyai sifat-sifat

yang sama dengan kelas pembentuknya, ditambah sifat-sifat khusus lainnya. Dengan

pewarisan kita dapat menciptakan kelas baru yang mempunyai sifat sama dengan kelas

lain tanpa harus menulis ulang bagian-bagian yang sama. Pewarisan merupakan unsur

penting dalam pemrograman berorientasi objek dan merupakan blok bangunan dasar

pertama penggunaan kode ulang (code reuse).

Jika tidak ada fasilitas pewarisan ini, maka pemrograman dalam C++ akan tidak banyak

berbeda dengan pemrograman C, hanya perbedaan dalam pengkapsulan saja yang

menggunakan kelas sebagai pengganti struktur. Yang perlu menjadi catatan di sini

adalah bahwa data dan fungsi yang dapat diwariskan hanya yang bersifat public dan

Diktat Kuliah : Pemrograman Komputer 2 Bab 15 : 87

Page 91: Diktat Pemrograman C++ Pre & Header

protected. Untuk data dan fungsi private tetap tidak dapat diwariskan. Hal ini disebabkan

sifat protected yang hanya dapat diakses dari dalam kelas saja.

Sifat pewarisan ini menyebabkan kelas-kelas dalam pemrograman berorientasi objek

membentuk hirarki kelas mulai dari kelas dasar, kelas turunan pertama, kelas turunan

kedua dan seterusnya. Sebagai gambaran misalnya ada hirarki kelas unggas.

Unggas

Burung BebekAyam

Ayam HutanAyam Kampung

Sebagai kelas dasar adalah Unggas. Salah satu sifat Unggas adalah bertelur dan

bersayap. Kelas turunan pertama adalah Ayam, Burung dan Bebek. Tiga kelas turunan ini

mewarisi sifat kelas dasar Unggas yaitu bertelur dan bersayap. Selain mewarisi sifat kelas

dasar, masing-masing kelas turunan mempunyai sifat khusus, Ayam berkokok, Burung

terbang dan Bebek berenang. Kelas Ayam punya kelas turunan yaitu Ayam Kampung dan

Ayam Hutan. Dua kelas ini mewarisi sifat kelas Ayam yang berkokok. Tetapi dua kelas ini

juga punya sifat yang berbeda, yaitu: Ayam Kampung berkokok panjang halus sedangkan

Ayam hutan berkokok pendek dan kasar.

Jika hirarki kelas Unggas diimplementasikan dalam bentuk program, maka secara

sederhana dapat ditulis sebagai berikut:

//Program Kelas Unggas #include<iostream.h> #include<conio.h> class Unggas {

public: void Bertelur() {cout<<"Bertelur"<<endl; }

}; class Ayam : public Unggas {

public: void Berkokok() {cout<<"Berkokok"<<endl; }

}; class Burung : public Unggas {

public: void Terbang() {cout<<"Terbang"<<endl; }

Diktat Kuliah : Pemrograman Komputer 2 Bab 15 : 88

};

Page 92: Diktat Pemrograman C++ Pre & Header

class Bebek : public Unggas {

public: void Berenang() {cout<<"Berenang"<<endl; }

}; class AyamKampung : public Ayam {

public: void Berkokok_Panjang_Halus() {cout<<"Berkokok Panjang Halus"<<endl; }

}; class AyamHutan : public Ayam {

public: void Berkokok_Pendek_Kasar() {cout<<"Berkokok Pendek Kasar"<<endl; }

}; void main() {

cout <<"Sifat bebek adalah:"<<endl; Bebek bk; bk.Bertelur(); bk.Berenang(); cout<<endl; cout<<"Sifat ayam adalah:"<<endl; Ayam ay; ay.Bertelur(); ay.Berkokok(); cout<<endl; cout<<"Sifat ayam kampung adalah:"<<endl; AyamKampung ayk; ayk.Bertelur(); ayk.Berkokok(); ayk.Berkokok_Panjang_Halus(); getch();

}

Dapat dilihat, bahwa kelas Ayam dan kelas Bebek dapat menjalankan fungsi Bertelur()

yang ada dalam kelas Unggas meskipun fungsi ini bukan merupakan anggota kelas Ayam

dan kelas Bebek.

Kelas AyamKampung dapat menjalankan fungsi Berkokok() yang ada dalam kelas Ayam

walaupun dua fungsi tersebut bukan merupakan anggota kelas AyamKampung. Sifat-sifat

di atas yang disebut dengan pewarisan (inheritance).

Polimorfisme

Polimorfisme merupakan fitur pemrograman berorientasi objek yang penting setelah

pengkapsulan dan pewarisan. Polimorfisme berasal dari bahasa Yunani, poly(banyak) dan

morphos (bentuk). Polimorfisme menggambarkan kemampuan kode C++ berperilaku

berbeda tergantung situasi pada waktu run (program berjalan).

Konstruksi ini memungkinkan untuk mengadakan ikatan dinamis (juga disebut ikatan

tunda, atau ikatan akhir). Kalau fungsi-fungsi dari suatu kelas dasar didefinisikan ulang

atau ditindih pada kelas turunan, maka objek-objek yang dihasilkan hirarki kelas berupa Diktat Kuliah : Pemrograman Komputer 2 Bab 15 : 89

Page 93: Diktat Pemrograman C++ Pre & Header

objek polimorfik. Polimorfik artinya mempunyai banyak bentuk atau punya kemampuan

untuk mendefinisi banyak bentuk.

Perhatikan kelas sederhana berikut :

#include <iostream.h> class TX {

public: double FA(double p) { return p*p; } double FB(double p) { return FA(p) / 2; }

}; class TY : public TX {

public: double FA(double p) { return p*p*p; }

}; void main() {

TY y; cout << y.FB(3) << endl;

}

Kelas TX berisi fungsi FA dan FB, dimana fungsi FB memanggil fungsi FA. Kelas TY, yang

merupakan turunan dari kelas TX, mewarisi fungsi FB, tetapi mendefinisikan kembali

fungsi FA. Yang perlu diperhatikan di sini adalah fungsi TX::FB yang memanggil fungsi

TY::FA dalam konteks perilaku polimorfisme. Berapakah output dari program ini?

Jawabnya adalah 4.5 dan bukan 13.5! Mengapa?

Jawabannya adalah karena kompiler memecahkan ungkapan Y.FB(3) dengan

menggunakan fungsi warisan TX::B, yang akan memanggil fungsi TX::FA. Oleh karena itu

fungsi TY::FA ditinggalkan dan tidak terjadi perilaku polimorfisme.

C++ menetapkan persoalan ini dan mendukung perilaku polimorfisme dengan

menggunakan fungsi virtual. Fungsi virtual, yang mengikat kode pada saat runtime,

dideklarasikan dengan menempatkan kata kunci virtual sebelum tipe hasil fungsi.

Untuk program di atas, kode double FA(double p) tulis menjadi virtual double FA(double

p) baik di kelas TX maupun yang ada di kelas TY. Dengan perubahan ini maka output

dari program di atas menjadi 13.5

Diktat Kuliah : Pemrograman Komputer 2 Bab 15 : 90

Page 94: Diktat Pemrograman C++ Pre & Header

Lampiran - 1

DAFTAR PUSTAKA

[1] Abdul Kadir. Pemrograman C++ . Penerbit ANDI Yogyakarta.

2001

[2] Ir Eko Nugroho MS. Pemrograman Terstruktur Menggunakan

Turbo Pascal Penerbit ANDI Yogyakarta 2002

[3] Sams Publishing, Teach Yourself C++ in 21 Days, Second

Edition http://www.mcp.com

[4] Peter Aitken , Bradley L. Jones , Teach Yourself C in 21 Days,

Sams.net , Bradley L. Jones [email protected]

[5] You can program in C++ : A Programaer’s Introduction

http://programerworld.net/books/

Page 95: Diktat Pemrograman C++ Pre & Header

GARIS BESAR PROGRAM PENGAJARAN

Nama Mata Kuliah : Pemrograman Komputer 2 Pengembang : Ir. Danang Widjajanto MT Kode Mata Kuliah : Tahun

dikembangkan : 2007

Sistim Kredit Semester

: 2 (dua) Penelaah Materi :

Deskripsi Singkat Mata Kuliah

: Merupakan kelanjutan dari Mata Kuliah Pemrograman 1, Peserta kuliah dianggap telah menguasai dasar-dasar algoritma pemrograman dan penerapannya menggunakan bahasa C++. Di Mata Kuliah ini dipelajari berbagai fasilitas yang ada di bahasa pemrograman C++ (yang umumnya juga ada di bahasa pemrograman yang lain) seperti array, file pustaka, string, dan lain-lain

Kompetensi Umum : Mengetahui berbagai macam fasilitas pemrograman yang ada di bahasa pemrograman C++ Memahami konsep dasarnya, kapan dan bagaimana penggunaannya Mampu mempraktekannya secara langsung di komputer Mempunyai dasar untuk pengembangan selanjutnya dalam pembuatan aplikasi komputer yang sebenarnya

NO KOMPETENSI KHSUSUS

PENGALAMAN BELAJAR

POKOK BAHASAN SUB POKOK BAHASAN METODE ESTIMASI WAKTU

KEPUSTAKAAN

1. Array 1, dimensi, 2 dimensi

Array / Larik • Pengertian array • Deklarasi array • Pemberian Nilai awal • Pengisian • Array 2 dimensi, dan 3 dimensi

4 jam

2. Algoritma Pengurutan Data

Algoritma Sorting • Pengertian sorting • Macam-macam teknik

pengurutan data • Metode Gelembung • Metode Maximum

• Ceramah • Demonstasi • Tanya jawab

4 jam

Pemrograman C++ Menggunakan Turbo C++ dan Borland C++ Abdul Kadir Pengenalan Komputer Jogiyanto H.M. Pemrpgrama C dan Implementasinya I Made Joni & Budi Raharjo

3. Pengenalan Fungsi

• Membaca diktat di rumah

• Mendengarkan penjelasan dosen.

• Mempraktekan di komputer Lab

• Diskusi dengan taman sekelas

• Mengerjakan soal Latihan dan tugas-tugas

• Membaca diktat di

rumah Pengenalan Fungsi • Tujuan penggunaan fungsi • Ceramah 4 jam Teknik Pemrograman

GBPP Pemrograman Komputer 2 Jurusan Teknik Elektro Politeknik Negeri Jakarta 2007 hal 1 of 3

Page 96: Diktat Pemrograman C++ Pre & Header

NO KOMPETENSI KHSUSUS

PENGALAMAN BELAJAR

POKOK BAHASAN SUB POKOK BAHASAN METODE ESTIMASI WAKTU

KEPUSTAKAAN

• Struktur fungsi dalam bahasa C • Fungsi Utama, dan fungsi

pendukung • Pemanggilan fungsi • Variabel Lokal dan variabel

global

Pascal Budi Raharjo

4. Fungsi dengan argumen dan nilai balik

• Mendengarkan penjelasan dosen.

• Mempraktekan di komputer Lab

• Diskusi dengan taman sekelas

• Mengerjakan soal Latihan dan tugas-tugas

Fungsi • Nilai balik fungsi • Argumen Input Fungsi • Pemanggilan fungsi dengan nilai

balik • Pemanggilan fungsi dengan

argumen input • Pemanggilan fungsi dengan

argumen input dan nilai balik

• Demonstasi • Tanya jawab

4 jam Pemrograman Borland C++ Builder Imam Heyanto, Budi Raharjo

5. Pengelolaan String String • Pengertian string • Hubungan string dan array pada

bahasa C++ • Inisialisasi String • Pengelolaan String

4 jam

6. Pre Pocessor & File Header

File pustaka • Pengertian File pustaka • File header dalam bahasa C++ • Pendeklarasian file header

menggunakan Pre Processor • Penggunaan Pre Processor yang

lain.

4 jam

7. Pengenalan Pointer Pointer • Pengertian pointer • Deklarasi pointer • Operasi pointer

4 jam

GBPP Pemrograman Komputer 2 Jurusan Teknik Elektro Politeknik Negeri Jakarta 2007 hal 2 of 3

Page 97: Diktat Pemrograman C++ Pre & Header

NO KOMPETENSI KHSUSUS

PENGALAMAN BELAJAR

POKOK BAHASAN SUB POKOK BAHASAN METODE ESTIMASI WAKTU

KEPUSTAKAAN

8. Array pointer dan pointer menunjuk ke pointer

Pointer • Pointer dan string • Array pointer • Pointer menunjuk ke pointer

4 jam

9. Manakemen Memori Dinamis

• Membaca diktat di rumah

• Mendengarkan penjelasan dosen.

• Mempraktekan di komputer Lab

• Diskusi dengan taman sekelas

• Mengerjakan soal Latihan dan tugas-tugas

Memori Dinamis Konsep pengalokasian memori Pembebasan Memori Array dinamis String dinamis

• Ceramah • Demonstasi • Tanya jawab

4 jam

10. Variabel Struktur Variabel Struktur Pengertian variabel struktur Deklarasi Struktur Pembandingan Struktur Struktur dalam struktur Struktur dan Fungsi

4 jam

11. Operasi File Penanganan File Pengertian File Membuka File Membaca data di File Menulis data ke dalam File

4 jam

12. Pengenalan OOP Object Oriented Program

Struktur dan kelas Konsep Enkapsulasi Kendali akses terhadap kelas Konstruktor dan destruktor Pewarisan Polimorfisme

GBPP Pemrograman Komputer 2 Jurusan Teknik Elektro Politeknik Negeri Jakarta 2007 hal 3 of 3