Assalamu'alaikum...
Sebuah fungsi berisi sejumlah pernyataan yang dikemas dalam sebuah nama. Nama ini kemudian dapat di panggil di dalam program utama.
Tujuan pembuatan fungsi :
- Memudahkan dalam mengembangkan program. Program dapat dipecah menjadi beberapa modul.
- Menghemat ukuran program. Hal ini dapat dirasakan ketika ada beberapa deretan pernyataan yang sama yang digunakan di beberapa tempat dalam program.
Gambar 1 diagram pemanggilan fungsi
Untuk memahami Gambar 1, berikut sebuah contoh program yang menggunakan fungsi :
#include<iostream>
#include<iomanip>
using namespace std;
void garis(); //prototipe fungsi garis()
int main(){
garis(); //memanggil fungsi garis ()
cout<<setiosflags(ios::left); //membuat rata kiri
cout<<setw(15)<<"Nama Barang" //setw() memberikan ruang untuk karakter/nilai
<<setw(15)<<"Harga"
<<"Jumlah Barang"<<endl;
garis(); //memanggil fungsi garis ()
cout<<setw(15)<<"Insto"
<<setw(15)<<"20.000"
<<10<<endl;
cout<<setw(15)<<"Baygon"
<<setw(15)<<"10.000"
<<20<<endl;
cout<<setw(15)<<"Kipas Dinding"
<<setw(15)<<"150.000"
<<10<<endl;
cout<<setw(15)<<"Tikar"
<<setw(15)<<"50.000"
<<20<<endl;
garis(); //memanggil fungsi garis ()
}
void garis(){ //fungsi garis ()
for(int i=0;i<50;i++)
cout<<'=';
cout<<endl;
}
#include<iomanip>
using namespace std;
void garis(); //prototipe fungsi garis()
int main(){
garis(); //memanggil fungsi garis ()
cout<<setiosflags(ios::left); //membuat rata kiri
cout<<setw(15)<<"Nama Barang" //setw() memberikan ruang untuk karakter/nilai
<<setw(15)<<"Harga"
<<"Jumlah Barang"<<endl;
garis(); //memanggil fungsi garis ()
cout<<setw(15)<<"Insto"
<<setw(15)<<"20.000"
<<10<<endl;
cout<<setw(15)<<"Baygon"
<<setw(15)<<"10.000"
<<20<<endl;
cout<<setw(15)<<"Kipas Dinding"
<<setw(15)<<"150.000"
<<10<<endl;
cout<<setw(15)<<"Tikar"
<<setw(15)<<"50.000"
<<20<<endl;
garis(); //memanggil fungsi garis ()
}
void garis(){ //fungsi garis ()
for(int i=0;i<50;i++)
cout<<'=';
cout<<endl;
}
Hasil eksekusi program :
Gambar 2 output program fungsi
Pada contoh program diatas, fungsi garis() digunakan untuk menampilkan karakter sama dengan (=) sebanyak 50. Fungsi tersebut dipanggil sebanyak tiga kali di dalam fungsi main().
FUNGSI
1. Prototipe fungsi
Sebuah fungsi tidak dapat dipanggil kecuali sudah dideklarasikan. Deklarasi fungsi disebut juga sebagai prototipe fungsi. Prototipe ini berupa :
- tipe nilai balik fungsi
- nama fungsi
- jumlah dan tipe argumen
- akhiri dengan ;
Beberapa contoh prototipe fungsi :
- int fungsi();
- int fungsi (int angka)
- float fungsi(float);
- void garis();
dan masih banyak lagi.
2. Definisi fungsi
Setiap fungsi yang dipanggil didalam program harus didefinisikan. Letaknya bisa dimana saja. Contoh definisi fungsi :
void garis(){
for(int i=0;i<50;i++)
cout<<'=';
cout<<endl;
}
for(int i=0;i<50;i++)
cout<<'=';
cout<<endl;
}
3. Fungsi dengan nilai balik (return) dan tanpa nilai balik
Seperti contoh void garis() merupakan fungsi yang tidak memiliki nilai balik. Fungsi tersebut hanya untuk menampilkan keterangan saja. Pada fungsi tersebut terlihat bahwa tipe nilai balik yang digunakan adalah void.
Fungsi dengan nilai balik yaitu fungsi yang menggunakan tipe nilai baliknya yaitu : int, long, float, double (semua tipe data selain void). Fungsi ini dilengkapi dengan pernyataan return.
int luas(int p, int l){
return ( p * l );
}
return ( p * l );
}
Pernyataan return pada fungsi digunakan untuk memberikan nilai balik fungsi. Pada contoh diatas, fungsi luas() memberikan nilai balik berupa nilai dari panjang * lebar dalam bentuk bilangan int (integer).
Contoh program :
#include<iostream>
using namespace std;
int luas(int p, int l);
int main()
{
int p, l;
cout<<"Program luas persegi"<<endl;
cout<<"Panjang : ";cin>>p;
cout<<"Lebar : ";cin>>l;
cout<<"Luas persegi : "<< luas ( p , l );
}
int luas (int p, int l)
{
cout<<"ini fungsi luas()"<<endl;
return (p*l);
cout<<"akhir ? ";
}
using namespace std;
int luas(int p, int l);
int main()
{
int p, l;
cout<<"Program luas persegi"<<endl;
cout<<"Panjang : ";cin>>p;
cout<<"Lebar : ";cin>>l;
cout<<"Luas persegi : "<< luas ( p , l );
}
int luas (int p, int l)
{
cout<<"ini fungsi luas()"<<endl;
return (p*l);
cout<<"akhir ? ";
}
Hasil eksekusi program :
Terlihat bahwa string "ini fungsi luas()" ditampilkan terlebih dahulu baru kemudian "Luas persegi : 60". Setelah pernyataan return, pernyataan berikutnnya tidak dikerjakan.
Lingkup Variabel
Memahami tentang lingkup variabel dalam fungsi sangatlah pentiing. Lingkup variabel menetukan keberadaan suatu variabel didalm fungsi. Ada variabel yang hanya bisa dikenal di suatu fungsi ada juga yang bisa diakses oleh semua fungsi.
Variabel Lokal
Variabel jenis ini hanya dikenal di dalam fungsi dimana variabel didefinisiakan.
Sifat variabel lokal :
- variabel hanya diciptakan ketika fungsi dipanggil
- pada saat fungsi berakhir, variabel ini menjadi sirna
- hanya dapat diakses pada fungsi yang mendefinisikannya
Variabel Global
Variabel global merupakan kebalikan dari variabel lokal. Variabel ini di definisikan diluar fungsi manapun, sehingga dapat diakses oleh semua fungsi.
Seandainya dalam suatu program terdapat variabel global, suatu fungsi bisa saja mendefinisikan variabel dengan nama yang sama (tipe bisa sama atau berlainan). Pada keadaan seperti itu maka variabel yang didefinisiakan secara lokal tidak ada kaitannya dengan variabel global.
Contoh program variabel lokal dan global :
#include<iostream>
using namespace std;
int awal = 10; //variabel global
void beda( );
int main( )
{
void beda ( )
{
int awal = 8; //variabel lokal
cout<<"Awal pada fungsi beda = "<<awal<<endl;
awal++;
}
using namespace std;
int awal = 10; //variabel global
void beda( );
int main( )
{
cout<<"Awal = "<<awal<<endl;
awal++; //kenaikan variabel awal yang global
beda();
cout<<"Awal sekarang = "<<awal<<endl;
beda();
}void beda ( )
{
int awal = 8; //variabel lokal
cout<<"Awal pada fungsi beda = "<<awal<<endl;
awal++;
}
Hasil eksekusi :
Dari hasil eksekusi terlihat jelas bahwa variabel lokal tidak mempengaruhi nilai variabel global.
Variabel Statis
Baik variabel lokal atau global bisa berkedudukan sebagai variabel statis. Variabel statis mempunyai sifat :
- Jika variabel lokal berdiri sebagai variabel statis :
- Variabel hanya dapat diakses pada fungsi yang didefinisikan
- variabel tidak hilang ketika eksekusi fungsi berakhir. Nilainya akan tetap dipertahankan, sehingga akan dikenali pada pemanggilan fungsi berikutnya.
- Inisialisasi oleh pemrogram akan dilakukan sekali saja selama program dijalankan. Jika tidak ada inisialisasi eksplisit maka variabel diisi nol.
- Jika variabel global dijadikan variabel statis :
- Dapat diakses oleh semua file yang didefinisikan pada file yang sama dengan variabel global tersebut.
Variabel statis di dapat dengan menambahkan kata static di depan tipe variabel.
Contoh program :
#include<iostream>
using namespace std;
void beda( );
int main( )
void beda ( )
using namespace std;
int awal = 10; //variabel global
void beda( );
int main( )
{
cout<<"Awal = "<<awal<<endl;
awal++; //kenaikan variabel awal yang global
beda();
cout<<"Awal sekarang = "<<awal<<endl;
beda();
}
void beda ( )
{
static int awal = 8; //variabel lokal
cout<<"Awal pada fungsi beda = "<<awal<<endl;
awal++;
awal++;
}
Hasil eksekusi :
Lihat terjadi perubahan nilai awal pada fungsi beda(). Nilai terakhir dari variabel awal pada fungsi beda() disimpan sehingga bukan 8 lagi. Perhatikan perbedaan dengan contoh program sebelumnya (tanpa menambahkan static) sengaja saya samakan programnya agar terlihat jelas perbedaannya.
Pada fungsi juga bisa diberikan nilai bawaan.
Contoh program :
#include<iostream>
using namespace std;
int penjumlahan(int angka_1, int angka_2);
int main( )
{
int angka_1,angka_2;
cout<<"Angka 1 awal : ";cin>>angka_1;
cout<<angka_1 <<" + "<< angka_2 <<" = "<<penjumlahan(angka_1,angka_2)<<endl; //1
cout<<angka_1 <<" - "<< angka_2 <<" = "<<pengurangan(angka_1,angka_2)<<endl; //2
cout<<"Angka 1 akhir : "<<angka_1<<endl;
cout<<"angka 2 akhir : "<<angka_2<<endl;
}
int penjumlahan (int angka_1, int angka_2)
{
return angka_1 + angka_2;
}
int pengurangan (int i, int j)
{
return i - j;
}
int perkalian(int angka_1, int angka_2)
{
angka_2 = 5; //perubahan angka_ 2 menjadi 5
return angka_1 * angka_2;
}
using namespace std;
int penjumlahan(int angka_1, int angka_2);
int pengurangan (int i, int j);
int perkalian(int angka_1, int angka_2);
int main( )
{
int angka_1,angka_2;
cout<<"Angka 1 awal : ";cin>>angka_1;
cout<<"Angka 2 awal : ";cin>>angka_2;
cout<<angka_1 <<" - "<< angka_2 <<" = "<<pengurangan(angka_1,angka_2)<<endl; //2
cout<<angka_1 <<" * "<< angka_2 <<" = "<<perkalian( 3 , angka_2 )<<endl; //3
cout<<"angka 2 akhir : "<<angka_2<<endl;
}
int penjumlahan (int angka_1, int angka_2)
{
return angka_1 + angka_2;
}
int pengurangan (int i, int j)
{
return i - j;
}
int perkalian(int angka_1, int angka_2)
{
angka_2 = 5; //perubahan angka_ 2 menjadi 5
return angka_1 * angka_2;
}
Hasil eksekusi program :
Gambar 3 output program fungsi dengan nilai bawaan
1. penjumlahan(angka_1,angka_2), pada fungsi tersebut nilai yang dibawa yaitu 8 dan 8
2. pengurangan(angka_1,angka_2), angka_1 nilainya dilempar ke variabel i dan angka_2 ke variabel j sehingga i - j akan sama dengan angka_1 - angka_2
3. perkalian( 3 , angka_2 ), pada fungsi ini nilai 3 dan angka_2 yang dilempar ke variabel angka_1 dan angka_2 pada fungsi perkalian(). Sehingga nilai balik dari angka_1 * angka_2 pada fungsi perkalian() memberikan nilai 3 * 5 = 15. Kenapa bukan 3 * 8 ? karena angka_2 diberi nilai sama dengan 5 di dalam fungsi tersebut.
4. angka_1 dan angka_2 pada fungsi main() tidak terjadi perubahan apapun.
Nah segitu dulu mengenai fungsi pada C++.
Semoga bermanfaat. Terimakasih...
No comments:
Post a Comment
Komentar yang bermutu Insyaallah akan mendapatkan berkah