FUNGSI / FUNCTION
Kompetensi dasar:
Mampu membuat fungsi dalam pemecahan masalah.
Indikator kompetensi:
1. Memahami perlunya fungsi
2. Mampu memilih kapan menggunakan tipe fungsi tertentu
3. Mampu mendeklarasikan fungsi
4. Mampu membedakan variabel lokal dan global
5. Mampu melakukan pemanggilan fungsi dari fungsi lain
6. Mampu membuat aplikasi lengkap yang mengandung fungsi berbagai tipe berikut pemanggilannya di fungsi lainnya
Fungsi merupakan subprogram dan berguna untuk menjadikan program dapat lebih besifat modular sehingga akan mudah dipahami dan dapat digunakan kembali, baik untuk program itu sendiri maupun program lain yang memiliki proses yang sama.
Perlunya Fungsi, Jika kita dihadapkan oleh suatu permasalahan yang besar, untuk mempermudah pemecahannya, maka akan lebih baik jika dibagi-bagi menjadi sub permasalahan yang lebih kecil. Berikut ini gambar yanga mengilustrasikan keberadaan fungsi dalam sebuah program.
| | | | |||
| | | | ||||
| |
| | ||||
| | | | ||||
| |
|
| ||||
| | ||||||
Letak fungsi:
- Dapat diletakkan sebelum main()
- Dapat juga diletakkan setelah main(). Namun jika fungsi diletakkan setelah main, sebelum main harus dituliskan prototype fungsinya.
Bentuk umum pendefinisian fungsi :
tipe_fungsi nama_fungsi(parameter_formal)
{ instruksi
dan deklarasi var lokal
}
Ada 2 tipe fungsi :
- void
Fungsi tanpa return value.
- bukan void (int, float, char dll …..)
Fungsi dengan return value.
Nama fungsi dapat dipilih sembarang, tetapi tetap mempertimbangkan syarat sebagaimana jika kita memilih identifier.
Petunjuk membuat fungsi:
- Agar lebih mudah anggap bahwa membuat fungsi sama dengan membuat program.
- Tentukan variabel input dan variabel outputnya.
Fungsi tipenya bukan void (return value /fungsi by value) :
a. tipe fungsi sama dengan tipe output
b. parameter formal (parameter value) fungsi adalah variabel inputnya.
c. Instruksi fungsi = instruksi program dengan menghilangkan instruksi untuk menginputkan data pada variable input, dan instruksi untuk menampilkan hasil dari variable output.
d. Cek kembali apakah masih ada variable yang belum dideklarasikan. Jika ada, maka deklarasikan sebagai variable local.
e. Diakhiri dengan instruksi :
return var_output;
Fungsi yang tipenya void (tanpa return value / fungsi by reference) :
a. tipe fungsinya void
b. Parameter formal fungsi ada dua macam:
· parameter value, adalah variable inputnya.
· Parameter reference/address, adalah variable outputnya
c. Instruksi fungsi = instruksi program dengan menghilangkan instruksi untuk menginputkan data pada variable input, dan instruksi untuk menampilkan hasil dari variable output.
Pemanggilan fungsi:
1. Fungsi yang tipenya void
nama_fungsi(parameter_aktual);
2. Fungsi yang tipenya bukan void
nama_var = nama_fungsi(parameter_aktual);
nama_var harus dideklarasikan dulu, tipenya harus sama dengan tipe output fungsi
Contoh :
a. Fungsi mencari luas persegi panjang.
Input : p, l à int
Output: ls à int
Karena outputnya ada 1 variabel maka dapat dibuat fungsi dengan return value maupun tanpa return value.
I. Fungsi dengan return value /fungsi by value
Contoh 1:
#include <iostream.h>
#include <conio.h>
int luas(int p, int l)
{ int ls;
ls = p*l;
return ls; }
main(){
int pj,lb,hsl;
cout<<"Panjang = ";cin>>pj;
cout<<"Lebar = ";cin>>lb;
hsl=luas(pj,lb);
cout<<"\nLuasnya = "<<hsl;
getch();}
Contoh 2:
#include <iostream.h>
#include <conio.h>
int luas(int p, int l)
{return (p*l); }
main(){
int pj,lb;
cout<<"Panjang = ";cin>>pj;
cout<<"Lebar = ";cin>>lb;
cout<<"\nLuasnya = "<<luas(pj,lb);
getch();}
II. Fungsi tanpa return value (tipenya void) / fungsi by reference
Contoh 3:
#include <iostream.h>
#include <conio.h>
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 = "<<hsl;
getch();}
b. Fungsi mencari luas dan keliling persegi panjang (dalam satu fungsi).
Input : p, l à int
Output: ls,kl à int
Karena outputnya ada 2 variabel maka hanya dapat dibuat fungsi tanpa return value, tipenya void, sebagai berikut:
Contoh 4:
#include <iostream.h>
#include <conio.h>
void luas(int &ls, int &kl, int p, int l)
{ ls = p*l;
kl = 2*(p+l); }
main(){
int pj,lb, hsl1,hsl2;
cout<<"Panjang = ";cin>>pj;
cout<<"Lebar = ";cin>>lb;
luas(hsl1,hsl2,pj,lb);
cout<<"\nLuasnya = "<<hsl1;
cout<<"\nKelilingnya = "<<hsl2;
getch();}
c. Fungsi menampilkan tulisan dilayar.
Input : tdk ada
Output: tdk ada
Karena outputnya tdk ada maka hanya dapat dibuat fungsi tanpa return value, tipenya void.
Misalnya fungsi tersebut dimasukkan ke dalam contoh program 4, maka menjadi sebagai berikut:
Contoh 5:
#include <iostream.h>
#include <conio.h>
void luas(int &ls, int &kl, int p, int l)
{ ls = p*l;
kl = 2*(p+l); }
void cetak()
{cout<<"MENCARI LUAS DAN KELILING PERSEGI PANJANG\n\n";}
main(){
cetak();
int pj,lb, hsl1,hsl2;
cout<<"Panjang = ";cin>>pj;
cout<<"Lebar = ";cin>>lb;
luas(hsl1,hsl2,pj,lb);
cout<<"\nLuasnya = "<<hsl1;
cout<<"\nKelilingnya = "<<hsl2;
getch();}
Contoh 6:
#include <iostream.h>
#include <conio.h>
void luas(int &ls, int &kl, int p, int l);
void cetak();
main(){
cetak();
int pj,lb, hsl1,hsl2;
cout<<"Panjang = ";cin>>pj;
cout<<"Lebar = ";cin>>lb;
luas(hsl1,hsl2,pj,lb);
cout<<"\nLuasnya = "<<hsl1;
cout<<"\nKelilingnya = "<<hsl2;
getch();
}
void luas(int &ls, int &kl, int p, int l)
{ ls = p*l;
kl = 2*(p+l); }
void cetak()
{cout<<"MENCARI LUAS DAN KELILING PERSEGI PANJANG\n\n";}
Variabel local dan global
Variabel global dapat diakses oleh semua fungsi dalam program. Variabel global sangat berbahaya karena secara tidak sengaja dapat termodifikasi oleh instruksi-instruksi dalam programnya sehingga pemakaian variabel global ini harus seminimal mungkin.
Deklarasinya adalah sebelum deklarasi fungsi.
Sedangkan variabel lokal hanya dapat diakses oleh fungsi dimana variabel lokal tersebut didefinisikan sehingga scope dari variabel lokal tersebut teriindungi. Variabel lokal tidak dapat diubah atau bahkan dihapus oleh fungsi-fungsi yang lain.
Deklarasinya adalah di dalam fungsi yang menggunakannya.
Contoh 7:
#include <iostream.h>
#include <conio.h>
int i=5;
void fungsi()
{ i+=2;
cout<<"\nNilai i dari fungsi = "<<i;
}
main() {
i+=3;
cout<<"\nNilai i dari main = "<<i;
fungsi();
getch();}
Keterangan :
i adalah variabel global, sehingga akan dikenali di semua bagian program. Akibatnya jika ada pernyataan yang mengubah nilai i maka tentunya nilainya akan menyesuaikan.
Variabel static dan dynamic
Istilah automatik dan statik menjelaskan apa yang terjadi pada suatu variabel lokal dalam suatu fungsi sesaat setelah fungsi ini selesai dipanggil dan eksekusi program kembali ke prosedur yang memanggil.
Default dari variabel lokal dalam suatu fungsi adalah automatik artinya variabel lokal tersebut dihapus pada saat fungsi selesai dipanggil.
Untuk mendefinisikan suatu variabel automatik, tambahkan awalan auto pada deflnisi variabel tersebut.
Karena default dari variabel lokal adalah automatik maka awalan auto ini optional, jadi boleh dihilangkan
Kebalikan dari variabel automatik adalah variabel statik yaitu tidak dihapus pada saat fungsi berakhir. Semua variabel global adalah statik.
Variabel lokal yang sifatnya automatic dapat diubah menjadi static. Untuk membuat suatu variabel lokal statik, tambahkan awalan static pada definisi variabel lokal tersebut. Variabel lokal statik tidak kehilangan nilainya pada saat fungsi berakhir dan tetap lokal dalam fungsi tersebut. Jika fungsi yang mengandung variabel lokal statik ini dipanggil lagi maka nilai variabel ini masih ada.
Untuk pemahaman konsep diatas, bandingkan output dari Contoh 8 berikut ini.
Contoh 8:
#include <iostream.h>
#include <conio.h>
void fungsi()
{ int j=7;
j+=2;
cout<<"\nNilai j dari fungsi = "<<j;
}
main() {
fungsi();
fungsi();
getch();}
III. Fungsi dengan parameter pointer
Parameter keluaran yaitu parameter yang berfungsi untuk menampung nilai yang dihasilkan dari proses di dalam fungsi. Parameter keluaran ini digunakan dalam fungsi tipe void (tanpa return value),dengan kata lain parameter tersebut digunakan sebagai nilai keluaran dari sebuah fungsi. Dengan demikian parameter keluaran ini harus dilewatkan berdasarkar alamat atau referensinya, yaitu menggunakan pointer atau reference.
Sedangkan pointer adalah variabel yang menyimpan alamat atau lokasi memori dari data atau variabel lain
Contoh penggunaan pointer :
#include <iostream.h>
#include <conio.h>
main() {
int x,*y;
y=&x;
x=5;
cout<<"Nilai x = "<<x;//5
cout<<"\nAlamat memori yang ditempati x = "<<&x;
cout<<"\n\nNilai y = "<<*y;//5
cout<<"\nAlamat memori yang ditempati y = "<<*y;//5
getch();}
Keterangan :
Karena *y menempati alokasi memori yang sama dengan x, akibatnya data yang tersimpan di dalamnyapun akan sama. Jika ada instruksi yang menginisialisasi x, otomatis juga akan menginisialisasi *y.
Contoh 9 :
#include <iostream.h>
#include <conio.h>
void luas(int *ls, int p, int l)
{ *ls = p*l; }
main(){
int pj,lb,ls;
cout<<"Panjang = ";cin>>pj;
cout<<"Lebar = ";cin>>lb;
luas(&ls,pj,lb);
cout<<"\nLuasnya = "<<ls;
getch();}
Contoh 10 :
#include <iostream.h>
#include <conio.h>
void luas(int *ls,int *kel, int p, int l);
main(){
int pj,lb,ls,kl;
cout<<"Panjang = ";cin>>pj;
cout<<"Lebar = ";cin>>lb;
luas(&ls,&kl,pj,lb);
cout<<"\nLuasnya = "<<ls;
cout<<"\nKelilingnya = "<<kl;
getch();}
void luas(int *ls,int *kel, int p, int l)
{ *ls = p*l;
*kel = 2*(p+l);}
IV. Fungsi dengan parameter bertipe array
Array adalah sebuah variabel yang menyimpan sekumpulan data yang memiliki tipe sama. Setiap data tersebut menempati lokasi atau alamat memori yang berbeda-beda dan
tipe_data nama_array[jumlah_element];
selanjutnya disebut dengan element array. Element array tersebut dapat kita akses melalui indeks yang terdapat di dalamnya.
Bentuk umum pendeklarasian array :
Contoh penggunaan array :
#include <iostream.h>
#include <conio.h>
main(){
int A[5]; //deklarasi array
//input element array
for (int i=0;i<5;i++)
{ cout<<"A["<<i<<"] = ";
cin>>A[i];
}
getch();}
Contoh menampilkan nilai pada array
#include <iostream.h>
#include <conio.h>
main(){
int A[5]; //deklarasi array
//input element array
for (int i=0;i<5;i++)
{ cout<<"A["<<i<<"] = ";
cin>>A[i];
}
//menampilkan isi dari elemen array
for(int c=0;c<5;c++)
{ cout<<"Nilai yang terdapat paada elemen ke "<<c+1
<<" adalah = "<<A[c]<<endl;
}
getch();}
Contoh 11 :
#include <iostream.h>
#include <conio.h>
//input element array dalam fungsi
void inputarray(int A[],int N)
{for (int i=0;i<N;i++)
{ cout<<"Masukkan nilai A["<<i<<"] = ";
cin>>A[i];
}
}
//fungsi tampil elemen array
void outputarray(int A[],int N)
{for (int i=0;i<N;i++)
{ cout<<"Nilai yang terdapat paada elemen ke "<<i+1
<<" adalah = "<<A[i]<<endl;
}
}
main(){
int A[100]; //elemen maksimal 100
int bykelemen;
cout<<"Input banyak elemen yang diinginkan =";
cin>>bykelemen;
cout<<endl<<endl;
//pemanggilan fungsi input array
inputarray(A,bykelemen);
cout<<endl<<endl;
//pemanggilan fungsi output array
outputarray(A,bykelemen);
getch();}
Contoh 12 :
#include <iostream.h>
#include <conio.h>
//input element array dalam fungsi
void inputarray(int A[],int N)
{ for (int i=0;i<N;i++)
{ cout<<"Masukkan nilai A["<<i<<"] = ";
cin>>A[i];
}
}
//fungsi tampil elemen array
int outputarray(int A[],int N)
{ int jumlah=0;
for (int i=0;i<N;i++)
{cout<<"Nilai elemen array ke "<<i+1
<<" adalah = "<<A[i]<<endl;
jumlah+=A[i];
}
return jumlah;
}
main(){
int A[100]; //elemen maksimal 100
int bykelemen;
int hasil;
cout<<"Input banyak elemen yang diinginkan =";
cin>>bykelemen;
cout<<endl<<endl;
//pemanggilan fungsi input array
inputarray(A,bykelemen);
cout<<endl<<endl;
//pemanggilan fungsi output array
hasil=outputarray(A,bykelemen);
cout<<endl<<endl;
cout<<"Hasil penjumlahan array = "<<hasil;
getch();}



0 komentar:
Posting Komentar