Anda di halaman 1dari 15

Fungsi

71

VI
VI.1 Pendahuluan

FUNGSI

- Fungsi merupakan bagian (blok) dari kode program yang dirancang untuk melaksanakan tugas tertentu. Fungsi merupakan bagian penting dalam pemrograman C, dengan tujuan: o Program menjadi terstruktur, sehingga mudah dipahami dan mudah dikembangkan. o Dapat mengurangi pengulangan kode (duplikasi kode). - Tugas khusus yang dilakukan suatu fungsi dapat dilihat dari beberapa fungsi standard, seperti misalnya: o getch( ), dengan tugas untuk membaca kode tombol papan ketik yang ditekan. o printf( ), dengan tugas untuk menampiolkan informasi atau data ke layar. - Pada umumnya fungsi memerlukan masukan yang dinamakan sebagai argumen atau parameter. - Masukan ini selanjutnya diolah oleh fungsi dan hasil keluarannya dapat berupa sebuah nilai (disebut nilai keluaran fungsi atau nilai balik fungsi). - Bentuk umum sebuah fungsi adalah sebagai berikut: Penentu_tipe nama_fungsi (daftar parameter) Deklarasi parameter { tubuh fungsi } - Penentu tipe digunakan untuk menentuka tipe keluaran fungsi, yang dapat dilipih dari salah satu tipe data yang berlaku dalam C, seperti char atau int. Jika penentu tipe tidak disebutkan , maka akan dianggap sebagai int. - Sebuah fungsi dapat saja tidak mengandung parameter sama sekali, bahkan tanpa deklarasi parameter. Contoh: Nama funsi Tanpa argumen tidak ada tanda titik-koma awal fungsi tubuh fungsi akhir fungsi

Inisialisasi( ) { return(0); }

Fungsi

72

VI.2 Memberi Nilai Akhir Fungsi - Sebuah fungsi dapat mempunyai nilai keluaran (seperti diperlihatkan pada contoh di atas), dan di dalam tubuh fungsi pernyataan yang diberikan ntuk memberikan nilai kahir fungsi dapat berupa pernyataan return. - Contoh program berikut ini memperlihatkan penyusunan dan penggunaan suatu fungsi. /* ------------------------------------------- */ /* File program : fungsi.c */ /* Contoh pembuatan fungsi */ /* ------------------------------------------- */ #include <stdio.h> inisialisasi(); main() { int x, y; x = inisialisasi(); printf("x = %d\n", x); y = inisialisasi (); printf("y = %d\n", y); } inisialisasi() { return(0); } Contoh hasil eksekusi: C>Fungsi x=0 y=0 Program 6-1 - Program di atas sekaligus menjelaskan bahwa suatu fungsi cukup didefinisikan satu kali, tetapi dapat digunakan beberapa kali untuk menghindari duplikasi kode dan menghemap penulisan program maupun penyimpanan kode dalam memori.

Fungsi

73

- Bagi suatu fungsi, jika suatu pernyataan return dieksekusi, maka eksekusi terhadap fungsi akan berakhir dan nilai pada parameter return akabn menjadi keluaran fungsi. - Untuk fungsi yang tidak memiliki pernyataan return, maka tanda } akan digunakan sebagai tanda akhir eksekusi fungsi). - Pada contoh berikut, fungsi digunakan untuk memperoleh nilai minimum diantara dua nilai yang ada pada parameternya. /* ---------------------------------------------------- */ /* File program : Minimum.c */ /* Contoh fungsi yang mengandung argumen */ /* ----------------------------------------------------- */ #include <stdio.h> minimum(x,y) int x,y; { if (x < y) return(x); else return(y); } main() { int a = 20; int b = 44; int hasil; hasil = minimum(a,b); printf("Nilai terkecil = %d\n", hasil); printf("Nilai terkecil = %d\n", minimum(3,2)); } contoh eksekusi: C>Minimum Nilai terkecil = 20 Nilai terkecil = 2 Program 6-2

Fungsi

74

- Fungsi pada program di atas mempunyai dua buah parameter berupa x dan y. oleh karena itu fungsi juga mengandung bagian untuk mendeklarasikan parameter, berupa : int x, y; - Penentuan nilai keluaran fungsi dilakukan pada tubuh fungsi, dengan pernyataan: if (x < y) return(x); else return(y); - Pernyataan di atas menyatakan: o Jika x < y, maka nilai keluaran fungsi adalah sebesar nilai x o Untuk keadaan selainnya ( x > y), maka keluaran fungsi adalah sebesar y. - Fungsi minimum() dipanggil dua kali. Yang pertama : hasil = minimum(a,b); Yang memberikan nilai terkecil diantara a dan b ke bariabel hasil. - Yang kedua dengan pernyataan: printf("Nilai terkecil = %d\n", minimum(3,2)); berupa instruksi untuk menampilkan nilai terkecil antara 3 dan 2. VI.3 Prototipe Fungsi - Dari kedua contoh program di atas, dapat dilihat bahwa penulisan tubuh fungsi bisa pada awal program maupun pada akhir program. - Pada contoh program 6-2, pendefinisian fungsi dilakukan pada awal program sebelum pernyataan program utama (main()). Model penulisan ini merupakan model klasik. - Pada program 6-1, pendefinisian fungsi dilakukan setelah program utama, namun pada awal program (sebelum program utama), harus dituliskan nama fungsi dan parameternya yang diakhiri dengan tanda titik-koma. - Pendeklarasian fungsi seperti pada program 6-1 dikenal sebagai prototipe fungsi (function prototype). - Prototipe fungsi digunakan untuk menjelaskan kepada kompiler mengenai: o Tipe keluaran fungsi

Fungsi

75

o Jumlah parameter o Tipe dari masing-masing parameter - Bagi kompiler, informasi dalam prototipe akan digunakan untuk memeriksa keabsahan (validitas) parameter dalam pemanggilan fungsi. - Salah satu keuntungan penggunaan prototipe, kompiler akan melakukan konversi seandainya antara tipe parameter dalam definisi dan parameter saat pemanggilan fungsi tidak sama, atau akan menunjukkan kesalahan kalau jumlah parameter dalam definisi dan saat pemanggilan berbeda. /* ----------------------------------------- */ /* File program : Jumlah.c */ /* Contoh fungsi dengan prototipe */ /* ----------------------------------------- */ #include <stdio.h> float jumlah(float x,float y); main() { int a = 6; int b = 3; float c; c = jumlah(a,b); printf("a + b = %g\n",c); printf("Hasil penjumlahan = %g\n", jumlah(20.1, 0.9)); } float jumlah(float x, float y) { return(x + y); } hasil eksekusi : c>Jumlah a+b=9 Hasil penjumlahan = 21 Program 6-3

Fungsi

76

VI.4 Parameter Formal dan Parameter Aktual - Parameter formal adalah variabel yang ada pada daftar parameter dalam definisi fungsi. Pada fungsi jumlah( ) program 6-3, x dan y dinamakan sebagai parameter formal. - Parameter aktual adalah parameter (tidak selamanya menyatakan variabel) yang digunakan dalam pemanggilan fungsi. Pada pernyataan: o c = jumlah(a, b); o y = jumlah(20.1, 0.9); - a dan b merupakan parameter aktual dari fungsi jumlah (), demikian pula 20.1 dan 0.9 (meskipun bukan berupa variabel). VI.5 Cara Melewatkan Parameter - Terdapat dua cara untuk melewatkan parameter ke dalam fungsi, yaitu dengan cara: o Pemanggilan dengan nilai (call by value) o Pemanggilan dengan referensi (call by reference) - Pemanggilan dengan nilai merupakan cara yang digunakan pada contoh fungsi program terdahulu. - Pada pemanggilan dengan nilai, nilai dari parameter aktual akan disalin ke parameter formal. Dengan cara ini nilai parameter aktual tidak bisa berubah sekalipun nilai parameter formal berubah. /* ------------------------------------------- */ /* File program : Tukar.c */ /* Melihat pengaruh 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);

Fungsi

77

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; z = x; x = y; y = z; printf("Nilai diakhir fungsi tukar()\n"); printf("x = %d y = %d\n\n",x,y); } hasil eksekusi : c> Tukar Nilai sebelum pemanggilan fungsi a = 88 b = 77 Nilai diakhir fungsi tukar() x = 77 y = 88 Nilai sesudah pemanggilan fungsi a = 88 b = 77 Program 6-4 - Dari contoh program di atas terlihat bahwa hasil pemanggilan fungsi tukar( ), variabel a dan b (yang dilewatkan ke fungsi tukar ( )) tidak berubah, walaupun pada fungsi tukar ( ) telah terjadi penukaran antara parameter x dan y. - Hal ini terjadi karena x hanyalah salinan dari a dan y salinan dari b, serta definisi fungsi tidak mengembalikan nilai (diawali dengan void dan tidak ada instruksi return( ) ). - Pemanggilan dengan referensi merupakan upaya untuk melewatkan alamat dari suatu variabel ke dalam fungsi. - Cara ini dapat digunakan untuk mengubah isi suatu variabel di leuar fungsi dengan pelaksanaan pengubahan dilakukan di dalam fungsi. - Perubahan pertama terletak dalam definisi fungsi, yakni berupa:

Fungsi

78

tukar(int *px, int *py) { int z; z = *px; *px = *py; *py = z; .. } - Adapun perubahan dalam parameter aktual adalah sebagai berikut: Tukar(&a, &b); /* variabel diawali dengan & */

- Pendeklarasian parameter: int *px, *py; - menyatakan bahwa px dan py adalah suatu variabel pointer, yaitu variabel yang berisi alamat variabel yang lain. - Dalam pemanggilan fungsi &a dan &b masing-masing berarti alamat a dan alamat b
px alamat a py alamat b

Gambar 6.1 Variabel pointer px menunjuk variabel a dan variabel pointer py menunjuk variabel b. /* ---------------------------------------------------------- */ /* File program : Tukar2.c */ /* Melihat pengaruh pemanggilan dengan referensi */ /* ---------------------------------------------------------- */ #include <stdio.h> void tukar (int *px, int *py); main() {

Fungsi

79

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); /* parameter alamat a dan alamat b */ printf("Nilai sesudah pemanggilan fungsi\n"); printf("a = %d b = %d\n\n",a,b); } void tukar (int *px, int *py) { int z; z = *px; *px = *py; *py = z; printf("Nilai diakhir fungsi tukar()\n"); printf("*px = %d *py = %d\n\n",*px,*py); } Hasil eksekusi : c> Tukar2 Nilai sebelum pemanggilan fungsi a = 88 b = 77 Nilai diakhir fungsi tukar() *px = 77 *py = 88 Nilai sesudah pemanggilan fungsi a = 77 b = 88 Program 6-5 VI.6 Penggolongan Variabel Berdasarkan Kelas Penyimpanan - Suatu variabel disamping dapat digolongkan berdasarkan jenis/tipe data, juga dapat digolongkan berdasarkan kelas penyimpanannya (storage class). - Penggolongan berdasarkan kelas penyimpanan berupa:

Fungsi

80

o o o o

Variabel lokal Variabel eksternal Variabel statis Variabel register

VI.6.1 Varibel Lokal - Variabel lokal adalah variabel yang dideklarasikan dalam fungsi, yang mempunyai sifat: o Secara otomatis akn diciptakan ketika fungsi dipanggil dan akan hilang (dari memori) ketika eksekusi terhadap fungsi berakhir. o Hanya dikenal oleh fungsi tempat variabel dideklarasikan o Tidak ada inisialisasi secara otomatis (saat variabel diciptakan nilainya tidak tentu (acak)) - Dalam banyak literatur, variabel lokal disebut juga dengan variabel otomatis. - Contoh variabel lokal adalah: Void fungsi_y(void) { int x; . x adalah variabel lokal bagi . fungsi fungsi_y : }

Gambar 6.2 Variabel Lokal. - Penerapan variabel lokal yaitu jika variabel tersebut hanya digunakan oleh suatu fungsi tertentu, dan tidak dimaksudkan untuk digunakan oleh fungsi yang lain. VI.6.2 Variabel Eksternal - Variabel eksternal merupakan variabel yang dideklarasikan di luar fungsi, dan mempunyai sifat: o Dapat diakses oleh semua fungsi o Jika tidak diberi nilai awal, secara otomatis diinisialisasi dengan nilai sama dengan nol - Contoh penggunaan variabel eksternal diperlihatkan pada contoh program 6-6 berikut ini.

Fungsi

81

/* --------------------------------------------- */ /* File program : Eksternal.c */ /* Penggunaan 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++; } Hasil eksekusi: C>Eksternal Nilai awal I = 273 Nilai I kini = 280 Nilai I kini = 281 Nilai I kini = 282 Program 6-6. - Pada contoh di atas i hanya dideklarasikan di bagian atas program, dan tidak dideklarasikan lagi pada fungsi main() maupun tambah(). - Jadi i merupakan variabel eksternal, sehingga dapat digunakan oleh kedua fungsi yang ada pada program 6-6. - Satu hal yang perlu diingat, variabel eksternal harus dideklarasikan sebelum definisi fungsi yang akan menggunakannya.

Fungsi

82

VI.6.3 Variabel Statis - Variabel statis dapat berupa variabel internal (didefinisikan di dalam fungsi) maupun variabel eksternal. - Variabel statis mempunyai sifat: o Jika variabel statis bersifat internal, maka variabel hanya dikenal oleh fungsi tempat variabel dideklarasikan o Jika variabel statis bersifat eksternal, maka variabel dapat digunakan oleh semua fungsi yang terletal pada file yang sama, tempat variabel statis dideklarasikan. o Berbeda dengan variabel lokal, variabel statis tidak akan hilang sekeluarnya dari fungsi (nilai pada variabel akan tetap diingat). o Inisialisasi hanya dilakukan sekali, yaitu saat fungsi dipanggil yang pertama kali. Jika tidak ada inisialisasi oleh pemrogram maka secara otomatis akan diberi nilai awal nol. - Variabel statis diperoleh dengan menambahkan kata-kunci static di depan penentu tipe-data variabel. static z; /* statis eksternal */

void fungsi_y(void); { static int y; /* statis internal */ : : } /* --------------------------------------------- */ /* File program : Statis.c */ /* Penggunaan variabel statis /* --------------------------------------------- */ #include <stdio.h> void fungsi_y (void); main() { int y = 20; fungsi_y(); fungsi_y(); printf("Nilai y dalam main() = %d\n",y);

*/

Fungsi

83

} void fungsi_y(void) { static int y; y++; printf("Nilai y dalam fungsi_y() = %d\n",y); } Contoh eksekusi: C> Statis Nilai y dalam fungsi_y() = 1 Nilai y dalam fungsi_y() = 2 Nilai y dalam main() = 20 program 6-7 VI.6.4 Variabel Register - Variabel register adalah variabel yang nilainya disimpan dalam register dan bukan dalam memori (RAM). - Variabel register hanya dapat diterapkan pada variabel lokal atau parameter formal, yang bertipe char atau int. - Variabel register biasa digunakan untuk variabel pengendali loop, dengan tujuan untuk mempercepat proses dalam loop, karena register mempunyai kecepatan yang jauh lebih tinggi dibanding RAM - Contoh pemakaian variabel register: /* --------------------------------------------- */ /* File program : Var_reg.c */ /* Penggunaan variabel register */ /* --------------------------------------------- */ #include <stdio.h> main() { register int i; /* variabel register */ int jumlah; for (i=1; i<=100; I++) jumlah++;

Fungsi

84

printf("1+2+ ... +100 = %d\n",jumlah); } Program 6-8 - Buatlah program yang sama tapi tidak menggunakan variabel register, kemudian bandingkan kecepatan kedua program tersebut. Jika belum terlihat perbedaannya, perbesar nilai batas loop, misalnya sampai 10000. - Contoh program berikut ini memperlihatkan perbedaan lama waktu eksekusi antara program yang menggunakan variabel register dengan yang tanpa variabel register. /* --------------------------------------------- */ /* File program : tes_reg.c */ /* Penggunaan variabel register */ /* --------------------------------------------- */ #include <stdio.h> #include <time.h> main() { /* tanpa variabel register */ int i,j; register int a,b; /* variabel register */ long waktu_awal; waktu_awal = time('\0'); for (i=0; i<20000; i++) for(j=0;j<20000;j++) ; printf("Waktu total = %d detik\n",time('\0')- waktu_awal); /* dengan variabel register */ waktu_awal = time('\0'); for (a=0; a<20000; a++) for(b=0;b<20000;b++) ;

Fungsi

85

printf("Waktu total = %d detik\n",time('\0')- waktu_awal); } Contoh hasil eksekusi: C>tes_reg Waktu total = 4 detik Waktu total = 2 detik Program 6-9

Anda mungkin juga menyukai