Fungsi, atau dalam beberapa literatur ada yang mengistilahkan subrutin, subprogram maupun prosedur, adalah salah satu teknik pemrograman untuk meningkatkan modularitas program yang akan dibuat. Semakin besar tingkat modularitasnya, maka kecenderungannya adalah program itu akan relatif semakin baik. Mengapa? Karena program yang size-nya besar, banyak baris kode, akan dipecah menjadi modul-modul yang ukurannya lebih kecil. Beberapa keuntungannya adalah dalam hal efisiensi dan kemudahan dalam debugging. Dikatakan efisien karena konsep fungsi akan merangkum bagian tugas-tugas yang sama cukup dengan menuliskan kode program satu kali saja tetapi bisa dipanggil/ dijalankan berulang kali sepanjang program. Di sisi lain, jumlah baris kode program yang semakin sedikit akan memudahkan dalam menelusuri kesalahan yang ditemukan. Penggunaan konsep fungsi juga akan mengakibatkan isi dari void main() akan menjadi semakin ringkas.
Fungsi yang void sering disebut juga prosedur. Disebut void karena fungsi tersebut tidak mengembalikan suatu nilai keluaran yang didapat dari hasil proses fungsi tersebut.
#include #include void luas(int &ls, int p, int l) { ls = p*l; } main() { int pj,lb, hsl; cout<<“Panjang = “;cin>>pj; cout<<“Lebar = “;cin>>lb; luas(hsl,pj,lb); cout<<“\nLuasnya = “< getch();
Fungsi non-void disebut juga function. Disebut non-void karena mengembalikan nilai kembalian yang berasal dari keluaran hasil proses function tersebut .
#include #include int luas(int p, int l) {return (p*l); } main(){ int pj,lb; cout<<“Panjang = “;cin>>pj; cout<<“Lebar = “;cin>>lb; cout<<“\nLuasnya = “< getch(); }
(tergantung dari tipe data hasil balik yang akan diberikan oleh Fungsi dapat berupa double, float tergantung dari ketepatan yang diinginkan. Khusus untuk Fungsi yang tidak ditulis tipenya maka akan dianggap bertipe int atau char), nama_Fungsi (merupakan nama yang dibentuk sendiri oleh programmer) dan argumen1, argumen 2,… atau disebut juga alat komunikasi untuk data yang dikirimkan dari bagian program yang memanggil Fungsi. Untuk Fungsi yang tidak menggunakan argumen cara penulisannya menjadi tipe_fungsi nama_Fungsi(void)
Prosedur adalah fungsi yang tidak mengembalikan nilai, maka dari itu penggunaan prosedur selalu menggunakan void karena void tidaklah mengembalikan nilai.Tujuan dari penggunaan prosedur salah satunya adalah untuk mendefinisikan masing – masing tugas. #include<iostream.h> void volume_limas() { double p, l, t; cout<<“Volume limas segi empat”<<endl; cout<<“Masukkan panjang: “; cin>>p; cout<<“Masukkan lebar: “; cin>>l; cout<<“Masukkan tinggi: “; cin>>t; cout<<“Volume limas segi empat: “<<p*l*t/3<<endl; } void volume_kerucut() { double r, t; cout<<“Volume kerucut”<<endl; cout<<“Masukkan jari2: “; cin>>r; cout<<“Masukkan t: “; cin>>t; cout<<“Volume kerucut: “<<3.14*r*r*t/3<<endl; } void volume_bola() { double r; cout<<“Volume bola”<<endl; cout<<“Masukkan nilai r= “; cin>>r; cout<<“Volume bola= “<<4*3.14*r*r*r/3<<endl; } int main() { volume_limas(); volume_kerucut(); volume_bola(); return 0; } berikut screenshot dari program diatas:
int main() { statement-statement; return 0; } Jika fungsi utama tersebut telah melaksanakan tugasnya maka fungsi utama terebut akan mengembalikan nilai 0 dan sebaliknya jika tidak berhasil maka fungsi utama tersebut akan mengembalikan nilai mengembalikan nilai mengembalikan nilai mengembalikan nilai –1. Supaya Fungsi/prosedur dapat digunakan harus dapat dipanggil dari bagian program yang membutuhkannya, untuk itu suatu Fungsi/prosedur harus diberi nama. Aturan penamaan Fungsi/prosedur sama dengan aturan penamaan variabel dan/atau konstanta. Pada C/C++, untuk mendeklarasikan fungsi tambahan kita dapat menuliskannya sebagai berikut.
argumen1, argumen 2,… atau disebut juga sebagai parameter input/output tergantung fungsi argumen tersebut sebagai alat komunikasi untuk data yang dikirimkan dari bagian program yang memanggil atau dikirimkan dari prosedur tersebut.
Pada C/C++, secara lengkap penulisan fungsi/prosedur tambahan dan fungsi utama serta pemaanggilannya dapat ditulis sebagai berikut : #include <library header> tipe_fungsi nama_Fungsi(argumen1, argumen2,….) prototipe fungsi void nama_Prosedur(argumen1, argumen2,….) /Prosedur int main() { printf(“%…”,nama_fungsi(argumen)): atau Pemanggilan fungsi variabel = nama_fungsi(argumen); printf(“%…”,variabel): nama_prosedur(argumen1, argumen2,…); Pemanggilan proses argumen ex : printf(”%…”,argumen1); dst Prosedur return 0; }
Fungsi hanya akan mengembalikan sebuah nilai ke bagian yang memanggilnya atau dengan kata lain sebuah fungsi hanya mengerjakan satu tugas saja, sedangkan prosedur akan mengembalikan satu atau lebih nilai atau bahkantidak mengembalikan nilai sama sekali ke bagian yang memanggilnya, atau dengan kata lain sebuah prosedur dapat mengerjakan lebih dari satu tugas Kelebihan program yang menggunakan fungsi tambahan selain fungsi utamanya diantaranya :
Hal ini disebabkan karena proses penyelesaian untuk suatu masalah dipecah menjadi beberapa sub masalah/ pemecahan masalah tersebut ke dalam bentuk fungsi yang lebih sederhana akan membuat program menjadi lebih mudah dimengerti dibandingkan jika semuanya dilakukan dalam fungsi utama saja.
Karena suatu sub masalah diselesaikan dalam fungsi/prosedur yang terpisah maka (seharusnya) hal tersebut tidak akan mempengaruhi perintah yang ada pada fungsi/prosedur yang lain. Tidak seperti jika dikerjakan dalam fungsi utama atau bagian utama, sebuah perintah tertentu pada suatu baris program memungkinkan akan memberi pengaruh yang tidak dikehendaki ke perintah pada baris program yang lain. Dalam pembuatan sebuah fungsi/prosedur yang baik, perintah-perintah yang ada dalam suatu fungsi/prosedur seharusnya tidak mempengaruhi perintah-perintah yang ada di fungsi/prosedur yang lain (independen) Fungsi/prosedur yang pernah dibuat dapat dipakai kembali di program yang lain untuk menyelesaikan masalah yang berbeda, sehingga pada pembuatan program berikutnya akan menjadi semakin mudah karena kita sudah mempunyai beberapa fungsi/prosedur tambahan yang dapat dimanfaatkan (contohnyaLibrary header dalam bahasa C/C++). Hal ini akan membantu seorang programmer untuk menyelesaiakan suatu program dengan waktu yang lebih singkat.
Dengan adanya fungsi/prosedur penulisan kumpulan baris program yang sama di tempat yang berbeda dapat dikurangi atau dapat ditulis satu kali saja dalam fungsi/prosedur, jika bagian program membutuhkan perintah tersebut tinggal memanggil fungsi/prosedur tersebut. Sehingga program yang dibuat menjadi lebih efisien dan ukurannyapun menjadi lebih kecil Penulisan kumpulan baris program yang sama secara berulang-ulang ditempat yang berbeda akan mengakibatkan program menjadi tidak konsisten, karena jika terdapat kesalahan dalam kumpulan baris program tersebut maka programmer harus mengingat kembali posisi kumpulan baris program tersebut. Sebaliknya jika kumpulan baris program yang sama dibuat dalam bentuk fungsi/prosedur maka jika ada kesalahan perintah, programmer tinggal memperbaikinya pada fungsi/prosedur tersebut.
Karakteristik pengiriman parameter ini diantaranya :
terpisah dari nilai aslinya yang digunakan oleh bagian program yang memanggil fungsi/prosedur terbsebut,
memanggil fungsi/prosedur walaupun keduanya menggunakan nama variabel yang sama,
ke fungsi/prosedur yang dipanggil,
Contoh : Program dengan menggunakan pengiriman parameter passing by value #include<stdio.h> int Tambah5(int X) { X = X + 5; printf(“\n Nilai di dalam fungsi A = %d”,X); return X; } int main() { //deklarasi data int A; //input nilai printf(“Masukan Nilai A : “);scanf(“%d”,&A); //menampilkan nilai awal printf(“\n sebelum fungsi dijalankan A = %d”,A); //panggil fungsi Tambah5 printf(“\n Hasil Fungsi %d + 5 = %d\n”,A,Tambah5(A)); //menampilkan nilai akhir printf(“\n setelah fungsi dijalankan A = %d”,A); return 0; }
passing by referencepassing by reference passing by reference Karakteristik pengiriman parameter ini diantaranya :
untuk mendapatkan nilai datanya,
Contoh : Program dengan menggunakan pengiriman parameter #include<stdio.h> int Tambah5(int &A) //tanda & digunakan untuk menunjukan reference dari variabel A { A = A + 5; printf(“\n Nilai di dalam fungsi A = %d”,A); return A; } int main() { //deklarasi data int A; //input nilai printf(“Masukan Nilai A : “);scanf(“%d”,&A); //menampilkan nilai awal printf(“\n sebelum fungsi dijalankan A = %d”,A); //panggil fungsi Tambah5 printf(“\n Hasil Fungsi %d + 5 = %d\n”,A,Tambah5(A)); //menampilkan nilai akhir printf(“\n setelah fungsi dijalankan A = %d”,A); return 0; }
Karakteristik pengiriman parameter ini diantaranya :
Contoh : Program dengan menggunakan pengiriman parameter passing by pointer #include<stdio.h> void Tukar(int *A, int *B) //tanda * digunakan untuk menunjukan { //pointer atau alamat dari variabel A dan B int Temp; Temp = *A; *A = *B; *B = Temp;; printf(“\n Nilai di dalam fungsi –> A = %d dan B = %d”,*A,*B); printf(“\n Alamat di dalam fungsi –>A = %d dan B = %d”,A,B); } int main() { //deklarasi data int A,B; //input nilai printf(“Masukan Nilai A : “);scanf(“%d”,&A); printf(“Masukan Nilai B : “);scanf(“%d”,&B); //menampilkan nilai awal printf(“\n sebelum fungsi dijalankan nilai A = %d dan B = %d”,A,B); printf(“\n sebelum fungsi dijalankan alamat A = %d dan B = %d”,&A,&B); //panggil fungsi Tukar Tukar(&A,&B); //menampilkan nilai akhir printf(“\n setelah fungsi dijalankan nilai A = %d dan B = %d”,A,B); printf(“\n sebelum fungsi dijalankan alamat A = %d dan B = %d”,&A,&B); return 0; } |