Fungsi, Parameter, Rekursi Daniel Riano Kaparang Book reference: • Jogiyanto. Konsep Dasar Pemrograman Bahasa C. Andi Star. Yogyakarta. 2006 • Kristanto Andri. Algoritma dan Pemrograman dengan C. Graha Ilmu. Yogyakarta. 2009. Fungsi adalah suatu bagian dari program yang dimaksudkan untuk mengerjakan suatu tugas tertentu dan letaknya dipisahkan dari bagian program yang menggunakannya (Jogiyanto, 2006). Bahasa C dibentuk dari kumpulan fungsi. Fungsi banyak digunakan untuk dua alasan utama: ◦ Fungsi menjadikan program C mempunyai struktur yang jelas. ◦ Fungsi dapat digunakan untuk menghindari penulisan yang sama secara berulang Function Secara umum fungsi terdiri dari definisi fungsi dan tubuh fungsi. Definisi fungsi berisi tipe dari fungsi, nama fungsi dan parameter jika diperlukan. Tubuh fungsi berisi statement-statement yang akan melakukan tugas yang diberikan kepada fungsi itu sendiri. Tipe_data nama_fungsi (param1, param2,…,param-N){ Statement1; Statement2; . . Statement-M; } Mendefinisikan Fungsi Parameter dalam C terdiri dari parameter formal dan parameter aktual (Kristanto, 2009). Parameter formal adalah variabel yang ada pada daftar parameter dalam definisi fungsi. Parameter aktual adalah parameter yang dapat berupa variabel atau konstanta maupun ungkapan yang dipakai dalam pemanggilan fungsi. Ada 2 cara melewatkan nilai dari parameter dalam fungsi: ◦ Passing by value. ◦ Passing by reference. Parameter #include <stdio.h> int FindMax(int n1, int n2); Void PrintMax(int m); int main(){ int i=5, j=7, k; k=FindMax(i,j); PrintMax(k); return 0; } Contoh 1 Fungsi int FindMax(int n1, int n2){ if(n1>n2){ return n1; } else{ return n2; } } void PrintMax(int m){ printf(“Max number is : %d\n”, m); } Yang dikirimkan ke fungsi adalah nilai dari datanya, bukan alamat memori letak dari datanya. Fungsi yang menerima kiriman nilai akan menyampaikannya di alamat yang terpisah dari nilai aslinya yang digunakan oleh bagian program yang memanggil fungsi. Karena alasan ke-2 di atas, maka perubahan nilai di fungsi tidak akan merubah nilai asli di bagian program yang memanggil fungsi walaupun keduanya menggunakan nama variabel yang sama. Passing by value merupakan pengiriman searah yaitu dari bagian program yang memanggil fungsi ke fungsi yang dipanggil. Pengiriman suatu nilai dapat dilakukan untuk suatu ungkapan tidak hanya untuk sebuah variabel atau element array atau konstanta saja. Passing by value #include <stdio.h> void PassByValue (float A,float B, char C); main() { char C='a'; float A=25, *Alamat_A; Alamat_A = &A; printf("PASS BY VALUE (PROGRAM UTAMA) : \n"); printf("Nilai A adalah %f di alamat %p \n", A, Alamat_A); printf("Nilai A/3 adalah %f \n", A/3); printf("Nilai karakter C adalah %c \n \n", C); PassByValue(A, A/3, C); } void PassByValue(float A, float B, char C) { float *Alamat_A; Alamat_A = &A; A = 7; printf("PASS BY VALUE (DI FUNGSI) : \n"); printf("Nilai A adalah %f di alamat %p \n", A, Alamat_A); printf("Nilai A/3 adalah %f \n", A/3); printf("Nilai karakter C adalah %c \n \n", C); } Contoh 2 Passing by value Yang dikirimkan ke fungsi adalah alamat letak dari nilai datanya, bukan nilai dari datanya. Fungsi yang menerima kiriman alamat ini akan menggunakan alamat yang sama untuk mendapatkan nilai datanya. Karena alasan ke-2 di atas, maka perubahan nilai dari fungsi akan merubah nilai asli di bagian program yang memanggil fungsi. Passing by reference merupakan perngiriman dua arah, yaitu dari bagian program yang memanggil fungsi ke fungsi yang dipanggil dan sebaliknya. Passing by value tidak dapat dilakukan untuk suatu ungkapan, hanya untuk sebuah variabel atau elemen larik konstanta saja. Passing by reference #include <stdio.h> void PassByRefference (float *A,float B, char *C); void main() { char C='a'; float A=25, *Alamat_A; Alamat_A = &A; printf("PASS BY REFFERENCE (PROGRAM UTAMA) : \n"); printf("Nilai A adalah %f di alamat %p \n", A, Alamat_A); printf("Nilai A/3 adalah %f \n", A/3); printf("Nilai karakter C adalah %c \n \n", C); PassByRefference(&A, A/3, &C); } void PassByRefference(float *A, float B, char *C) { float *Alamat_A; Alamat_A = A; *A=7; printf("PASS BY REFFERENCE (DI FUNGSI) : \n"); printf("Nilai A adalah %f di alamat %p \n", *A, Alamat_A); printf("Nilai B adalah %f \n", B/3); printf("Nilai karakter C adalah %c \n \n", *C); } Contoh 3 Passing by reference Rekursi merupakan fungsi yang memanggil dirinya sendiri. Dalam kondisi ini akan terjadi perulangan pemanggilan fungsi dan akan berhenti ketika kondisi terpenuhi. Iterasi, proses perulangan dengan statement yang sama akan berhenti jika kondisi terpenuhi. Penggunaan rekursi dan iterasi bergantung pada kebutuhan program, karena rekursi akan mengambil memori cukup banyak. Rekursi & Iterasi int faktorial(int n){ if(n==1) return 1; else return (n*faktorial(n-1)); } Contoh rekursi Void main(){ for (int i=1; i<5; i++){ i=i*i+1; } } Contoh iterasi