Fungsi 2
DASAR PEMROGRAMAN
Cara Melewatkan Parameter Ada 2 cara melewatkan parameter ke dan dari fungsi : • Pemanggilan dengan Nilai (Call by value) • Pemanggilan dengan Referensi (Call by Reference) 1. Pemanggilan dengan Nilai
a b
Parameter aktual
disalin
x y
Parameter formal
2
¾Nilai dari parameter aktual akan disalin ke parameter formal ¾Nilai parameter aktual tidak bisa berubah meskipun nilai parameter formalnya berubah //contoh pemanggilan dengan nilai #include <stdio.h> void tukar(int,int); main() { int a,b; a=88; b=77; printf("Nilai sebelum pemanggilan fungsi\n"); printf("a= %d b= %d\n\n", a,b ); tukar(a,b); printf("Nilai sesudah pemanggilan fungsi\n"); printf("a= %d b=%d\n\n",a,b); } void tukar(int x, int y) { int z; //variabel sementara z=x; x=y; y=z; printf("Nilai di akhir fungsi tukar\n"); printf("x= %d y= %d\n\n",x,y); }
3
Proses Penukaran nilai x
y
z
x
y
z
88
77
?
88
77
88
Mula-mula
Sesudah : z=x
x
y
z
x
y
z
77
77
88
77
88
88
Sesudah : x=y
Sesudah : y=z
4
2. Pemanggilan dengan Referensi ¾Upaya untuk melewatkan alamat dari suatu variabel ke dalam fungsi ¾Untuk mengubah isi suatu variabel di luar fungsi dimana pelaksanaan pengubahan dilakukan di dalam fungsi - Modifikasi pada parameter formal : tukar(int *px, int *py) { int z;
Variabel pointer Æ menunjuk ke variabel lain
z= *px; *px=*py; *py=z; ……
- Modifikasi untuk parameter aktual : tukar(&a,&b);
variabel diawali dengan & menyatakan alamat dari a dan alamat dari b
5
px
py
alamat a
alamat b
a
b
Variabel pointer px menunjuk ke variabel a dan variabel pointer py menunjuk ke variabel b
6
//contoh pemanggilan dengan referensi #include <stdio.h> void tukar(int *px,int *py); main() { int a,b; a=88; b=77; printf("Nilai sebelum pemanggilan fungsi\n"); printf("a= %d b= %d\n\n", a,b ); tukar(&a,&b); printf("Nilai sesudah pemanggilan fungsi\n"); printf("a= %d b=%d\n\n",a,b); } void tukar(int *px, int *py) { int z; //variabel sementara z=*px; *px=*py; *py=z; printf("Nilai di akhir fungsi tukar\n"); printf("x= %d y= %d\n\n",*px,*py); }
7
Jenis-jenis Variabel berdasarkan kelas penyimpanan (storage class)
Jenis-jenis variable pada C
Variabel lokal Variabel eksternal Variabel statis Variabel register
Hanya akan dibahas variabel lokal dan variabel eksternal saja. 8
Variabel Lokal
Hanya dikenal didalam fungsi tempat variabel tersebut dideklarasikan. Setelah fungsi selesai dijalankan, variabel lokal tersebut otomatis akan hilang. Tidak ada inisialisasi secara otomatis (saat variabel diciptakan, nilainya tak menentu). 9
Contoh Variabel Lokal void fung_1(void); main() { int i = 20; fung_1(); printf("nilai i di dalam main() = %d\n", i); } void fung_1(void) { int i = 11; printf("nilai i di dalam fung_1() = %d\n", i); }
10
Variabel Eksternal
Dapat diakses oleh semua fungsi Kalau tak diberi nilai, secara otomatis diinisialisasi dengan nilai sama dengan nol.
11
Contoh#1 Variabel Eksternal #include <stdio.h> int i = 273; /* variabel eksternal */ void tambah(void); main() { printf("Nilai awal i = %d\n", i); i += 7; printf("Nilai i kini = %d\n", i); tambah(); printf("Nilai i kini = %d\n", i); tambah(); printf("Nilai i kini = %d\n", i); } void tambah(void) { i++; }
12
Contoh#2 Variabel Eksternal #include <stdio.h> int i = 273; /* variabel eksternal */ void tambah(void); main() { extern int i; /* variabel eksternal */ printf("Nilai awal i = %d\n", i); i += 7; printf("Nilai i kini = %d\n", i); tambah(); printf("Nilai i kini = %d\n", i); tambah(); printf("Nilai i kini = %d\n", i); } void tambah(void) { int i; /* variabel lokal */ i++; }
13
Menciptakan Sejumlah Fungsi Pada C semua fungsi bersifat sederajat. Suatu fungsi tidak dapat didefinisikan di dalam fungsi yang lain, tetapi suatu fungsi boleh memanggil fungsi yang lain, dan tak tergantung pada peletakan definisi fungsi pada program
fungsi_a()
fungsi_b()
fungsi_c()
14
Contoh Program dengan beberapa fungsi //program dengan beberapa fungsi #include <stdio.h> void fungsi_1(void); void fungsi_2(void); main() { fungsi_1(); } void fungsi_1(void) { printf("Fungsi 1 dijalankan\n"); fungsi_2(); } void fungsi_2(void) { printf("Fungsi 2 dijalankan\n"); }
15
Rekursi Fungsi dapat dipakai secara rekursi, yaitu dapat memanggil dirinya sendiri Contoh :
If n==1, xn = x Else : xn=x*xn-1
xn
Jika x=2 dan n=3, maka 23 = 2 * 22
8
22= 2 * 21
4
21 = 2
2
16
Contoh Program rekursi //rekursi untuk mencari faktorial #include<stdio.h> int faktorial(int); main() { int x; printf("MENCARI FAKTORIAL DARI X\n"); printf("Masukkan nilai x : "); scanf("%d",&x); printf("Nilai faktorial dari x = %d adalah %d\n",x,faktorial(x)); } int faktorial(int m) { if(m==1) return(1); else return(m=m*faktorial(m-1)); }
17
Tugas 1.
Buat program untuk menghitung volume dari tabung dan kerucut Jari-jari lingkaran dan tinggi tabung / kerucut didapat dari keyboard.
2.
Buat program yang berisi menu pilihan untuk operasi penjumlahan, pengurangan dan perkalian dari dua buah bilangan bulat yang didapat dari keyboard. Jadikan supaya program ini dapat memilih berulang-ulang
18