Pertemuan 3(Fungsi, Parameter, Rekursi)

advertisement
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
Download