Wednesday, February 17, 2010

Fungsi dalam Bahasa C


Fungsi dalam pemrograman berarti suatu bagian kode atau blok program yang digunakan untuk menjalankan suatu proses tertentu. Disadari atau tidak, pada saat kita pertama kali membuat program, sebenarnya kita sudah membuat apa yang dinamakan fungsi ini, yaitu fungsi main. Yang akan dibahas di sini adalah tentu saja fungsi yang lain (fungsi di luar fungsi main). Lalu apa gunanya ada fungsi selain fungsi main? Fungsi-fungsi ini nantinya akan memudahkan kita dalam membuat program. Dengan menggunakan fungsi, source code yang kita buat akan menjadi lebih ringkas dan tentu saja program kita menjadi lebih efektif. Contoh kasusnya seperti ini: Kita diperintahkan membuat program yang menggambar tiga buah segitiga. Jika tanpa fungsi, source-nya akan terlihat seperti ini:

#include
void main(){
printf("  /\\ \n");
printf(" /  \\ \n");
printf(" ----   \n");

printf("  /\\ \n");
printf(" /  \\ \n");
printf(" ----   \n");

printf("  /\\ \n");
printf(" /  \\ \n");
printf(" ----   \n")
}



Jika dijalankan, source di atas akan menghasilkan tiga buah gambar segitiga. Sekarang masalahnya, bagaimana jika kita diperintahkan membuat 20 buah gambar segitiga? Bisa dibayangkan panjang source code yang akan kita buat nantinya. Di sinilah peranan fungsi. Dengan fungsi kita hanya perlu menggambar segitiga hanya satu kali. Loh, ga percaya?

#include
void segitiga();

void main(){
segitiga();
segitiga();
segitiga();
}

void segitiga(){
printf("  /\\ \n");
printf(" /  \\ \n");
printf(" ----   \n");
}

Jika kamu jalankan source di atas, hasilnya akan sama saja dengan source di awal tadi. Nah, jika kita menginginkan 20 buah segitiga, alangkah praktisnya jika kita membuatnya dengan sedikit jurus loop.
#include<stdio.h>

void segitiga();

void main(){
int i;

for(i=0;i<20;i++){
segitiga();
}
}

void segitiga(){
printf("  /\\ \n");
printf(" /  \\ \n");
printf(" ----  \n");
}
Wow! Jauh lebih praktis bukan? Eit, tunggu dulu, ngomong-ngomong bagaimana caranya bikin fungsi? Adakah ketentuan dan aturannya? Ya, tentu saja! Berikut akan kujelaskan bagian-bagian fungsi terlebih dahulu. Ada dua bagian penting dari fungsi, yaitu prototype fungsi dan definisi fungsi. Yang mana prototype? Yang mana juga yang definisi? Lihat saja source di bawah ini... (perhatikan bagian comment)
#include<stdio.h>

void segitiga(); //prototype fungsi

void main(){
segitiga();
segitiga(); //fungsi dipanggil di fungsi main
segitiga();
}

void segitiga(){  //definisi fungsi
printf("  /\\ \n");
printf(" /  \\ \n");
printf(" ----   \n");
}
Ok, kukira sudah jelas di sana bagian-bagian dari fungsi. Berikut adalah aturan penulisan fungsi: Syntax penulisan prototype fungsi:
tipe_data nama_fungsi(argument-1, argumen-2, argumen-n);
Prototype fungsi ini tidak perlu ditulis jika kamu menuliskan definisi fungsi di atas fungsi main. Tipe data di sini digunakan untuk menentukan nilai kembalian (return value). Jika fungsi yang kamu buat tidak memerlukan return value, kamu bisa menuliskan void seperti source di atas. Sedangkan argument adalah nilai yang akan di masukkan ke dalam fungsi untuk diproses. Syntax penulisan argumen seperti ini: tipe_data nama_variabel. Syntax penulisan definisi fungsi:
tipe_data nama_fungsi(argument){
statement;
}
Program gambar segitiga yang kujelaskan di awal tadi adalah contoh fungsi yang tidak memerlukan argumen dan return value. Supaya lebih mantab, sekarang kuberikan contoh fungsi yang memiliki kedua komponen tersebut.
//program penghitung 2 pangkat n

#include 
int duapangkat(int n);

void main(){
int hasil;

hasil=duapangkat(3); //argument yang dimasukkan adalah 3
printf("%d", hasil);

}

int duapangkat(int n){
int i, hasil=1;

for(i=0;i<n;i++){
hasil*=2;
}

return hasil;
}
Source di atas adalah program yang menghitung hasil dari 2 pangkat n (tergantung dari argument yang dimasukkan, contoh di atas argumentnya 3). Eh, source di atas masih bisa disingkat loh! Pake fungsi rekursif. Wah, apa lagi tuh? Fungsi Rekursif Fungsi rekursif adalah fungsi yang memanggil dirinya sendiri. Dengan fungsi rekursif kita bisa menyelesaikan program yang menggunakan perulangan rumit dengan source yang lebih ringkas. Ok, kita buat saja program dua pangkat ini dengan fungsi rekursif...
#include<stdio.h>

int duapangkat(int n);

void main(){
int hasil;

hasil=duapangkat(3);
printf("%d", hasil);

}

int duapangkat(int n){
if(n==0){
return 1;
}else{
return 2 * duapangkat(n-1);
}
}
Well, tidak ada perulangan sama sekali. Dengan melihat pengkondisiannya, kuharap kamu paham dengan penggunaan fungsi rekursif ini. Fungsi duapangkat di atas akan selalu memanggil dirinya sendiri selama nilai n lebih besar dari nol.

3 comment(s):

Anonymous said...

Kalau secara inti gmana mas maksudnya function?

ml3nz said...

sip, ijin kopas om..buat bahan tugas ya???

Daestra said...

bagus..bagus

Post a Comment

feel free to write your comment here.. :)