diktat pemrograman c++ pre & header
Post on 11-Feb-2015
175 Views
Preview:
TRANSCRIPT
Danang Widjajanto
Dibiayai dengaPoliteknik Ne
n dana DIPA geri Jakarta Tahun 2008
(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
(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
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
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
# 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
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;
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
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
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
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
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
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
{ 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
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
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
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
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
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
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
• 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
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
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
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
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
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
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
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
//******************************************************** // 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
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
// 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
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
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
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
//*********************************************** // 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
# 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
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
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
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
}
# 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
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
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
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
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
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
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
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
# 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
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
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
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
#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
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
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
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
//************************************** # 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
# 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
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
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
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 << "¶y = " << (¶y) << 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
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
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
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
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
// 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
// ******************************************** // 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
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
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
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
// 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
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
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
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
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
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
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
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
// 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
// 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
} // 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
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;
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
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
{ 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
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
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
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
} }; 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
//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
(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
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
};
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
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
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 104607.1515@compuserve.com
[5] You can program in C++ : A Programaer’s Introduction
http://programerworld.net/books/
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
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
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
top related