6. Materi 6: Modular6.1. Sekilas tentang Pemrograman Modular
Ada sebuah pernyataan dari Al-Khawarizmi:
Untuk mencapai suatu tujuan besar, maka tujuan tersebut harus dibagi-bagi menjadi
tujuan kecil sampai tujuan kecil itu merupakan tujuan yang dapat dicapai
berdasarkan kondisi dan potensi yang dimiliki saat itu.
Pernyataan Al-Khawarizmi dapat dijadikan analogi mengenai pemrograman
modular. Pemrograman modular adalah memprogram dengan membagi program
menjadi beberapa bagian procedure (prosedur) dan function (fungsi). Prosedur adalah
bagian program yang tidak mengembalikan hasil proses ke bagian pemanggilnya.
Sedangkan fungsi adalah bagian program yang akan mengembalikan suatu nilai hasil
dari proses ke bagian pemanggilnya. Namun, pemrograman dalam bahasa C maupun
C++ istilah prosedur tidak digunakan, bagian-bagian program tersebut hanya disebut
dengan fungsi.
Fungsi adalah sekumpulan perintah operasi program yang dapat menerima
argumen input dan dapat memberikan hasil output yang dapat berupa nilai ataupun
sebuah hasil operasi. Hasil akhir fungsi akan berupa sebuah nilai balik (return) .
Nama fungsi yang didefinisikan sendiri oleh pemrogram tidak boleh sama
dengan nama build-in function pada compiler C++.
Keuntungan menggunakan fungsi
1. Rancangan Top - down dengan teknik Sub goal, program besar dapat dibagi
menjadi modul-modul yang lebih kecil.
2. Dapat dikerjakan oleh lebih dari satu orang dengan koordinasi yang relatif
mudah.
3. Mencari kesalahan relatif lebih mudah karena alur logika lebih jelas, dan
kesalahan dapat dilokalisir dalam satu modul.
4. Modifikasi dapat dilakukan, tanpa mengganggu program secara keseluruhan.
5. Mempermudah dokumentasi.
Contoh pembagian program menjadi beberapa subprogram
Sifat-sifat fungsi yang baik adalah :
Fan-In yang tinggi, yaitu makin sering suatu fungsi dipanggil oleh pengguna,
makin tinggi nilai fan-in.
Fan-Out yang rendah, makin sedikit tugas yang dilakukan oleh suatu fungsi
makin rendah nilai fan-out. Dengan demikian, makin spesifik tugas yang
dikerjakan oleh modul tersebut.
Self-Contained, atau memenuhi kebutuhannya sendiri.
Contoh fungsi untuk menuliskan garis:
Output dari program diatas adalah:
6.2. Deklarasi Fungsi
Fungsi dalam bahasa C dan C++ dapat ditulis dengan sintaks berikut:type function_name(<argument_list>){
<statement_list>return value
}
type → tipe data dari return value.
function_name → nama fungsi
argument_list → variable input
statement_list → kumpulan instruksi
6.3. Prototipe Fungsi
Sebuah fungsi tidak dapat dipanggil kecuali sudah dideklaraikan, deklarasi
fungsi dikenal dengan sebutan prototipe fungsi.
Prototipe fungsi berupa :
1. Nama Fungsi
2. Tipe nilai fungsi
3. Jumlah dan tipe parameter
4. Dan diakhiri dengan titik koma, sebagaimana pada pendeklarasian variabel.
Contoh:
1. long kuadrat (long l) ;
Fungsi kuadrat ( ) mempunyai argumen bertipe long dan nilai balik bertipe
long.
2. void garis ( );
Fungsi garis ( ) tidak memiliki argumen dan nilai baliknya tidak ada (void).
3. double maks (double x, double y)
Fungsi maks( ) mempunyai dua buah argumen, dengan masing-masing
argumen bertipe double.
Contoh dalam program:
6.4. Variable Lokal dan Variable GlobalGlobal Identifier:Ciri-ciri variable global adalah:
- Identifier yang dideklarasikan di luar fungsi dan ditempatkan di atas semua
fungsi dalam suatu program.
- Jangkauan meliputi seluruh program.
- Identifier yang dideklarasikan secara global, dapat dideklarasikan kembali
(redeclared) di subprogram.
Ciri-ciri variable lokal adalah:
- Identifier yang dideklarasikan di dalam fungsi, termasuk daftar parameter.
- Jangkauan terbatas pada fungsi itu sendiri.
Lebar jangkauan antara variable global dan lokal adalah:
6.5. Passing value
7. Ada 2 jenis cara untuk mengirimkan argumen yaitu:
1. Passing by Value
yang dikirimkan adalah nilai (value) dari variable yang dikirim sebagai
argumen.
Perubahan terhadap argumen yang terjadi di dalam fungsi tidak akan
mempengaruhi nilai dari variable tersebut dari fungsi pemanggil ( hanya 1
arah yaitu masuk ke fungsi ).
Pengiriman suatu nilai dapat dilakukan dengan untuk suatu ungkapan,
tidak hanya sebuah variable.
Contoh fungsi dengan passing by value
Output:
2. Passing by Reference
Pada cara ini yang dikirimkan adalah reference (pointer/acuan) dari
variable yang dikirim sebagai argumen.
Perubahan argumen di dalam fungsi, akan mempengaruhi nilai variable
pada pemanggil. Karena yang dikirimkan adalah pointer.
Jenis data yang dikirim sebagai argumen harus berupa variable, tidak
dapat berupa bilangan konstan.
Pada C/C++ diperkenalkan reference parameter untuk menghindari
penggunaan pointer untuk melakukan passing by Reference.
Contoh fungsi dengan passing by reference:/*fungsi dengan passing by referencepada fungsi untuk menukar dua variable*/
#include <iostream.h>
void tukar(int *a, int *b);
int main(){ int a = 6; int b = 3; cout << "Sebelum ditukar:" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl << endl;
tukar(&a,&b);
cout << "****************" << endl; cout << "Setelah ditukar:" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl << endl; cin.get();}
void tukar(int *a, int *b){ int temp; temp = *b; *b = *a; *a = temp; }
Output:
6.6. Fungsi Rekursif
Rekursif adalah suatu proes dari fungsi yang memanggil dirinya secara
berulang-ulang. Karena proses dilakukan berulang-ulang maka harus ada kondisi yang
mengakhiri prosesnya. Jika tidak maka proses tidak akan pernah berhenti sampai
memori yang digunakan tidak dapat menampung lagi.
Salah satu implementasi dari fungsi rekursif adalah pada masalah faktorial.
Faktorial dari bilangan bulat positif n didefinisikan sebagai berikut:
n! = n.(n-1)!, jika n > 1
n! = 1, jika n = 0 atau n = 1
contoh penggunaan fungsri rekursif dalam program untuk masalah faktorial tersebut
adalah sebagai berikut:/*fungsi rekursif untuk faktorial*/
#include <conio.h>#include <iostream.h>
long faktorial(long n);
int main(){ long n; long temp; cout << "input number: "; cin >> n; temp = faktorial(n); cout << n << "! = " << temp; getch();}
long faktorial(long n){ long f; if(n>1) { f = n*faktorial(n-1); return(f); } else if(n==0 || n==1) return(1);}
Output:
Keterangan program:
- Fungsi utama (main) memanggil fungsi faktorial() dengan mengirimkan nilai
n (dalam contoh diatas nilai n yang dikirim adalah 5) yang maksudnya akan
dilakukan perhitungan 5 faktorial dan hasil perhitungan faktorial akan
disimpan dalam variable temp.
- Jika nilai n pertama kali yang diberikan oleh fungsi utama lebih besar dari 1,
maka proses rekursif akan dilakukan. Misalnya nilai n adalah 5, maka proses
rekursif yang pertama adalah:
f = 5 * faktorial(n-1);
proses ini akan memanggil kembali fungsi dirinya sendiri dengan
mengirimkan nilai 4 sebagai nilai n yang baru. Karena nilai n masih lebih
besar dari 1, maka proses rekursif ke-2 akan dilakukan dengan hasilnya adalah
4 * faktorial(3). Untuk n adalah 3, hasil yang diperoleh oleh rekursif adalah
3*faktorial(2) dan seterusnya hingga nilai n adalah 1. Untuk nilai n sama
dengan 1 ini, statement return(1) akan mengembalikan proses ke bagian yang
memanggilnya, yaitu statement setelah statement f = 5*faktorial(n-1).
Statement return(f) kemudian baru mengembalikan proses ke fungsi utama.
6.7. Exercise
1. Buatlah program dengan menggunakan fungsi untuk menyelesaikan
persamaan: f ( x )=x2+3 x+2
2. Buatlah program untuk menghitung besarnya diskon yang diberikan atas
besarnya sejumlah pembelian, dengan ketentuan sebagai berikut:
- Jika belanja dibawah Rp 1.000.000 maka tidak mendapat diskon
- Jika belanja dimulai dari Rp 1.000.000 sampai dengan Rp 5.000.000,
maka mendapat diskon sebesar 20%
- Jika belanja diatas Rp 5.000.000 maka mendapat diskon sebesar 35%
- Fungsi yang dibuat bernama diskon()
- Input adalah besar nilai pembelian
- Output adalah besar diskon dan besar harga yang harus dibayarkan
3. Buatlah program untuk menghitung jumlah pembayaran pada perpustakaan
“KECIL-KECILAN”. (fungsi yang dibuat adalah untuk menentukan tarif).
Dengan ketentuan sebagai berikut:
Kode Jenis Jenis Buku Tarif
C Cerpen 1000
K Komik 2000
N Novel 3000
4. Buatlah program (dengan menggunakan fungsi) untuk membilang suatu
bilangan. Misalkan user menginputkan bilangan 1532. Maka program akan
menampilkan “seribu lima ratus tiga puluh dua”.
5. Buatlah fungsi untuk mengecek suatu bilangan apakah bilangan prima atau
bukan. Contoh, user menginputkan “3”, maka program akan menampilkan
“3 adalah bilangan prima”.