Fungsi adalah sebuah blok pernyataan yang berisi sejumlah pernyataan yang dikemas dalam sebuah nama yang dapat dipanggil beberapa kali dibeberapa tempat dalam program.
Tujuan pembuatan fungsi :
Deklarasi / prototipe sebuah fungsi berupa :
Format deklarasi untuk fungsi yang menghasilkan nilai balik :
Tipe Nama_fungsi(daftar_parameter);
Format deklarasi untuk fungsi yang tidak menghasilkan nilai balik :
void Nama_fungsi(daftar_parameter);
Definisi fungsi
Setiap fungsi yang dipanggil didalam program harus didefinisikan terlebih dahulu yang letaknya bisa dimana saja. Khusus untuk fungsi yang disediakan oleh sistem, definisi sebenarnya sudah ada dalam pustaka yang disebut file header.
Fungsi tanpa Nilai Balik
Adakalanya suatu fungsi tidak perlu memiliki nilai balik. Misalnya fungsi yang hanya dimasudkan untuk menampilkan suatu keterangan saja. Pada fungsi seperti ini, tipe nilai balik fungsi yang diperlukan adalah void.
Contoh :
void tampilkan_judul ()
{
cout << “PT. Maju Mundur” << endl;
cout << “Jl. Buntu No. 76” << endl;
cout << “Yogyakarta” << endl;
}
pada contoh fungsi diatas, tidak ada pernyataan return, mengingat fungsi tidak memiliki nilai balik. Namun penggunaan pernyataan return secara eksplisit juga diperkenankan. Dalam hal ini digunakan berbentuk :
return
Jadi contoh diatas dapat ditulis :
void tampilkan_judul ()
{
cout << “PT. Maju Mundur” << endl;
cout << “Jl. Buntu No. 76” << endl;
cout << “Yogyakarta” << endl;
return;
}
Contoh program :
Hasil eksekusi :
PT. Maju Mundur
Jl. Buntu No. 76
Yogyakarta
==========================
Argumen fungsi
Argumen fungsi adalah nilai bawaan yang akan disertakan saat pemanggilan fungsi.
Contoh :
Hasil eksekusi :
1. Teks ini tercetak 10 kali
2. Teks ini tercetak 10 kali
3. Teks ini tercetak 10 kali
4. Teks ini tercetak 10 kali
5. Teks ini tercetak 10 kali
6. Teks ini tercetak 10 kali
7. Teks ini tercetak 10 kali
8. Teks ini tercetak 10 kali
9. Teks ini tercetak 10 kali
10. Teks ini tercetak 10 kali
Pada contoh diatas pada fungsi cetak mempunyai argumen fungsi bernama jum bertipe int. Pada pemanggilan fungsi cetak harus disertai dengan jumlah argumen yang akan diberikan pada saat fungsi dipanggil. cetak(10);
Contoh program yang mengandung fungsi untuk mencetak teks ditengah layar dan mencetak teks pada koordinat tertentu :
Hasil eksekusi :
TULISAN INI TERCETAK DI TENGAH LAYAR
====================================
Tulisan ini tercetak pada baris 4 kolom 3
Lingkup variabel
Lingkup variabel menentukan keberadaan suatu variabel tertentu dalam fungsi. Ada variabel yang hanya dikenal di suatu fungsi dan tidak dikenal pada fungsi lain. Namun ada juga variabel yang dapat diakses oleh semua fungsi.
Variabel Otomatis
Variabel yang didefinisikan di dalam suatu fungsi berlaku sebagai variabel lokal bagi fungsi. Artinya, variabel tersebut hanya dikenal didalam fungsi tempat variabel didefinisikan. Sifat dari variabel otomatis adalah :
Contoh program :
Hasil ekseskusi :
Pada main() : x = 22 y = 2.22
Pada coba() : x = 20 y = 3.14
Pada main() : x = 22 y = 2.22
Variabel Eksternal
Variabel eksternal adalah variabel yang didefinisikan diluar fungsi manapun. Variabel ini dikenal juga sebagai variabel global, sebab variabel ini dikenal disemua fungsi. Contoh program :
Hasil eksekusi :
50
51
52
Contoh program :
extern nilai;
nilai ++ ; // Variabel eksternal dinaikkan
}
Variabel Statis
Variabel eksternal maupun otomatis dapat berkedudukan sebagai variabel statis. Suatu variabel statis mempunyai sifat :
Contoh program :
Hasil eksekusi :
Saya_ingat () : mana = 78
Saya_ingat () : mana = 79
Saya_ingat () : mana = 80
main() : mana = 50
Fungsi Dengan Nilai Balik
Adalah fungsi yang memberikan nilai balik ke pemanggil fungsi.
Contoh :
// Prototipe funsi
long kuadrat (long l);
-------------------------------------
// Definisi fungsi
long kuadrat(long l)
{
return(l * l);
}
Pernyataan return di dalam fungsi digunakan untuk memberikan nilai balik fungsi. Pada contoh diatas, fungsi kuadrat() memberikan nilai balik berupa nilai kuadrat dari argumen.
Contoh program :
Hasil eksekusi :
200 40000
400 160000
600 360000
800 640000
1000 1000000
1200 1440000
1400 1960000
1600 2560000
1800 3240000
Contoh program yang mengandung fungsi tanpa nilai balik dan fungsi dengan nilai balik :
Operator Resolusi Lingkup
Pada C++ terdapat operator dua buah tanda titik dua ( :: ). Operator ini disebut operator resolusi lingkup (scope resolution). Kegunaanya untuk mengakses variabel yang didefinisikan diluar suatu fungsi.
Contoh program :
Hasil eksekusi :
5.6789 50
5.6789 77
Referensi
Referensi digunakan untuk memberikan nama alias dari variabel. Bentuk pendeklarasiannya : int &ref = nama_variable ;
Tanda & mengawali nama referensi.
Setelah pendeklarasian seperti diatas, ref menjadi nama alias dari nama_variabel. Penggubahan nilai terhadap nama_variabel dapat dilakukan melalui nama_variabel itu sendiri atau melalui referensi ref, sebagaimana dapat dilihat pada contoh dibawah ini.
Contoh program :
Hasil eksekusi :
i = 10
r = 1
i = 10
r = 55
Tampak bahwa pengubahan nilai terhadap i maupun r memberikan efek sama.
Operator juga bekerja pada suatu variabel maupun referensinya dengan efek yang sama. Contoh :
Hasil eksekusi :
i = 55 r = 55
i = 56 r = 56
i = 57 r = 57
Operator ++ pada i maupun r akan mengubah nilai keduanya, karena i dan r menyiratkan memori yang sama.
Dalam fungsi pengiriman argumen dapat bersifat berdasar nilai dan berdasar referensi. Pengiriman argumen berdasarkan nilai yaitu argumen yang dikirimkan dimaksudkan tidak untuk diubah
sekembalinya dari pemanggilan fungsi. Sedangkan pengiriman argumen berdasar referensi yaitu argumen yang dikirimkan dimaksudkan untuk diubah sekembalinya dari pemanggilan fungsi.
Hasil eksekusi :
Nilai 1 : 10
Nilai 2 : 20
Nilai 1 sebelum tukar : 10
Nilai 2 sebelum tukar : 20
Nilai 1 dalam tukar : 20
Nilai 2 dalam tukar : 10
Nilai 1 sesudah tukar : 10
Nilai 2 sesudah tukar : 20
Pada contoh diatas fungsi tukar memiliki dua argumen fungsi yang pengirimannya berdasar nilai karena sekembali dari pemanggilan fungsi argumen yang dikirimkan nilainya tetap. Sehingga fungsi tukar diatas tidak menghasilkan nilai sesuai dengan yang diharapkan yaitu menukar kedua nilai yang dikirimkan. Untuk mengatasi permasalahan diatas maka argumen pada fungsi tukar dikirimkan secara referensi :
Hasil eksekusi :
Nilai 1 : 10
Nilai 2 : 20
Nilai 1 sebelum tukar : 10
Nilai 2 sebelum tukar : 20
Nilai 1 dalam tukar : 20
Nilai 2 dalam tukar : 10
Nilai 1 sesudah tukar : 20
Nilai 2 sesudah tukar : 10
Array sebagai argumen fungsi
Array dapat juga berkedudukan sebagai parameter dalam argumen fungsi :
Inline Function
Inline function dengan cukup menyisipkan kata-kata inline didepan tipe nilai balik fungsi dalam pendefinisian fungsi. Contoh :
inline int jumlah (int x, int y)
{
return(x + y);
}
inline function disarankan dipakai pada fungsi yang sering dipanggil dan ukurannya kecil (terdiri satu atau dua pernyataan), terutama jika dilibatkan pada pernyataan pengulangan proses (while, for dan dowhile). Misalnya pada bentuk seperti berikut :
for (int i = 1; i < 100; i++)
cout << i << “.” << jumlah (i, 2 * i) << endl;
jika fungsi jumlah() tidak ditulis sebagai inline function, proses tersebut akan menjadi relatif lambat.
Contoh program :
Function Overloading
Function Overloading atau Overloading terhadap fungsi memungkinkan sebuah fungsi dapat menerima bermacam-macam tipe dan memberikan nilai balik yang bervariasi pula.
Contoh program :
Hasil eksekusi :
4
149388260
1.44
Rekursi
Fungsi dalam C++ dapat dipakai secara rekursi, artinya suatu fungsi dapat memanggil fungsi yang merupakan dirinya sendiri. Penerapan rekursi diantaranya untuk menghitung nilai :
Xn
Dengan n merupakan bilangan bulat positif. Solusi dari persoalan ini berupa :
Jika n = 1 maka Xn = X
Selain itu : Xn = X * Xn – 1
Contoh program :
Hasil elsekusi :
Menghitung x ^ y
x = 3
y = 4
3 ^ 4 = 81
Tujuan pembuatan fungsi :
- Memudahkan dalam mengembangkan program, karena program dipecah menjadi programprogram yang lebih kecil.
- Menghemat ukuran program, ini akan terasa kalau ada beberapa deretan instruksi yang sama digunakan pada beberapa tempat didalam program.
Deklarasi / prototipe sebuah fungsi berupa :
- Nama fungsi
- Tipe nilai balik fungsi
- Jumlah dan tipe argumen
Format deklarasi untuk fungsi yang menghasilkan nilai balik :
Tipe Nama_fungsi(daftar_parameter);
Format deklarasi untuk fungsi yang tidak menghasilkan nilai balik :
void Nama_fungsi(daftar_parameter);
Definisi fungsi
Setiap fungsi yang dipanggil didalam program harus didefinisikan terlebih dahulu yang letaknya bisa dimana saja. Khusus untuk fungsi yang disediakan oleh sistem, definisi sebenarnya sudah ada dalam pustaka yang disebut file header.
Fungsi tanpa Nilai Balik
Adakalanya suatu fungsi tidak perlu memiliki nilai balik. Misalnya fungsi yang hanya dimasudkan untuk menampilkan suatu keterangan saja. Pada fungsi seperti ini, tipe nilai balik fungsi yang diperlukan adalah void.
Contoh :
void tampilkan_judul ()
{
cout << “PT. Maju Mundur” << endl;
cout << “Jl. Buntu No. 76” << endl;
cout << “Yogyakarta” << endl;
}
pada contoh fungsi diatas, tidak ada pernyataan return, mengingat fungsi tidak memiliki nilai balik. Namun penggunaan pernyataan return secara eksplisit juga diperkenankan. Dalam hal ini digunakan berbentuk :
return
Jadi contoh diatas dapat ditulis :
void tampilkan_judul ()
{
cout << “PT. Maju Mundur” << endl;
cout << “Jl. Buntu No. 76” << endl;
cout << “Yogyakarta” << endl;
return;
}
Contoh program :
/**
* -------------------------------
* Contoh Pembuatan Fungsi
* -------------------------------
**/
#include <iostream.h>
#include <conio.h>
//prototipe fungsi
void garis();
void tampilkan_judul();
//fungsi utama
void main()
{
clrscr();
tampilkan_judul();
garis();
getch();
}
//definisi fungsi
void garis()
{
cout<<"=========================="<<endl;
}
void tampilkan_judul ()
{
cout << "PT. Maju Mundur" << endl;
cout << "Jl. Buntu No. 76" << endl;
cout << "Yogyakarta" << endl;
return;
}
Hasil eksekusi :
PT. Maju Mundur
Jl. Buntu No. 76
Yogyakarta
==========================
Argumen fungsi
Argumen fungsi adalah nilai bawaan yang akan disertakan saat pemanggilan fungsi.
Contoh :
/**
* -------------------------------
* Argumen Fungsi
* -------------------------------
**/
#include <iostream.h>
#include <conio.h>
void cetak(int jum);
void main()
{
clrscr();
cetak(10);
getch();
}
void cetak(int jum)
{
for(int i = 1; i <= jum; i++)
cout<<i<<". Teks ini tercetak 10 kali"<<endl;
}
Hasil eksekusi :
1. Teks ini tercetak 10 kali
2. Teks ini tercetak 10 kali
3. Teks ini tercetak 10 kali
4. Teks ini tercetak 10 kali
5. Teks ini tercetak 10 kali
6. Teks ini tercetak 10 kali
7. Teks ini tercetak 10 kali
8. Teks ini tercetak 10 kali
9. Teks ini tercetak 10 kali
10. Teks ini tercetak 10 kali
Pada contoh diatas pada fungsi cetak mempunyai argumen fungsi bernama jum bertipe int. Pada pemanggilan fungsi cetak harus disertai dengan jumlah argumen yang akan diberikan pada saat fungsi dipanggil. cetak(10);
Contoh program yang mengandung fungsi untuk mencetak teks ditengah layar dan mencetak teks pada koordinat tertentu :
/**
* -------------------------------
* Contoh program mencetak teks
* ditengah layar
* -------------------------------
**/
#include <iostream.h>
#include <conio.h>
void hapus()
{
clrscr();
}
void henti()
{
getch();
}
//prototipe fungsi mencetak pada koordinat tertentu
void cetak(int klm, int brs, char *teks);
//prototipe fungsi mencetak pada tengah layar
void cetakc(int brs, char *teks);
void main()
{
hapus();
cetakc(1,"TULISAN INI TERCETAK DI TENGAH LAYAR");
cetakc(2,"====================================");
cetak(3,4,"Tulisan ini tercetak pada baris 4 kolom 3");
henti();
}
//definisi fungsi
void cetak(int klm, int brs, char *teks)
{
gotoxy(klm,brs);cout<<teks;
}
void cetakc(int brs, char *teks)
{
gotoxy(40-strlen(teks)/2,brs);cout<<teks;
}
Hasil eksekusi :
Tulisan ini tercetak pada baris 4 kolom 3
Lingkup variabel
Lingkup variabel menentukan keberadaan suatu variabel tertentu dalam fungsi. Ada variabel yang hanya dikenal di suatu fungsi dan tidak dikenal pada fungsi lain. Namun ada juga variabel yang dapat diakses oleh semua fungsi.
Variabel Otomatis
Variabel yang didefinisikan di dalam suatu fungsi berlaku sebagai variabel lokal bagi fungsi. Artinya, variabel tersebut hanya dikenal didalam fungsi tempat variabel didefinisikan. Sifat dari variabel otomatis adalah :
- Variabel akan diciptakan pada saat fungsi dipanggil dan variabel akan sirna pada saat fungsi berakhir.
- Variabel hanya dikenal pada fungsi yang mendefinisikan.
Contoh program :
#include <iostream.h>
#include <conio.h>
void coba(); // Prototipe fungsi
void main()
{
int x = 22; // Variabel lokal pada main()
double y = 2.22;
clrscr();
cout << "Pada fungsi main() : x = " << x
<< " y = " << y << endl;
coba(); // Panggil fungsi alpha
cout << "Pada fungsi main() : x = " << x
<< " y = " << y << endl;
getch();
}
// Definisi fungsi alpha()
void coba()
{
int x = 20; // Variabel lokal pada coba()
double y = 3.14;
cout << "Pada fungsi coba() : x = " << x
<< " y = " << y << endl;
}
Hasil ekseskusi :
Pada main() : x = 22 y = 2.22
Pada coba() : x = 20 y = 3.14
Pada main() : x = 22 y = 2.22
Variabel Eksternal
Variabel eksternal adalah variabel yang didefinisikan diluar fungsi manapun. Variabel ini dikenal juga sebagai variabel global, sebab variabel ini dikenal disemua fungsi. Contoh program :
#include <iostream.h>
#include <conio.h>
int nilai = 50; // Variabel eksternal
void tambah(); // Prototipe fungsi
void main()
{
clrscr();
cout << nilai << endl;
tambah();
cout << nilai << endl;
tambah();
cout << nilai << endl;
getch();
}
// Definisi fungsi
void tambah ()
{
nilai ++ ; // Variabel eksternal dinaikkan
}
Hasil eksekusi :
50
51
52
Contoh program :
#include <iostream.h>
#include <conio.h>
int nilai = 50; // Variabel eksternal
void tambah(); // Prototipe fungsi
void main()
{
clrscr();
cout << nilai << endl;
tambah();
cout << nilai << endl;
tambah();
cout << nilai << endl;
getch();
}
// Definisi fungsi
void tambah ()
{
extern nilai;
nilai ++ ; // Variabel eksternal dinaikkan
}
Variabel Statis
Variabel eksternal maupun otomatis dapat berkedudukan sebagai variabel statis. Suatu variabel statis mempunyai sifat :
- Jika variabel lokal berdiri sebagai variabel statis, maka :
- Variabel tetap hanya dapat diakses pada fungsi yang mendefinisikannya
- Variabel tidak hilang saat eksekusi fungsi berakhir
- Inisialisasi oleh pemrogram akan dilakukan sekali saja selama program dijalankan.
- Jika variabel eksternal dijadikan sebagai variabel statis,variabel ini dapat diakses oleh semua file yang didefinisikan pada file yang sama dengan variabel eksternal tersebut.
Contoh program :
/**
* -------------------------------
* Variabel Statik
* -------------------------------
**/
#include <iostream.h>
#include <conio.h>
void saya_ingat(); // Prototipe fungsi
void main()
{
int mana = 50;
clrscr();
saya_ingat();
saya_ingat();
saya_ingat();
cout << " main() : mana = " << mana << endl;
getch();
}
// Pada fungsi berikut
// mana didefinisikan sebagai variabel statis
void saya_ingat()
{
static int mana = 77; // variabel statis
mana ++; // Naikkan sebesar 1
cout << " Saya_ingat () : mana = " << mana << endl;
}
Hasil eksekusi :
Saya_ingat () : mana = 78
Saya_ingat () : mana = 79
Saya_ingat () : mana = 80
main() : mana = 50
Fungsi Dengan Nilai Balik
Adalah fungsi yang memberikan nilai balik ke pemanggil fungsi.
Contoh :
// Prototipe funsi
long kuadrat (long l);
-------------------------------------
// Definisi fungsi
long kuadrat(long l)
{
return(l * l);
}
Pernyataan return di dalam fungsi digunakan untuk memberikan nilai balik fungsi. Pada contoh diatas, fungsi kuadrat() memberikan nilai balik berupa nilai kuadrat dari argumen.
Contoh program :
#include <iostream.h>
#include <iomanip.h>
#include <conio.h>
long kuadrat(long l); // prototipe fungsi
void main()
{
clrscr();
for ( long bil = 200; bil < 2000; bil+= 200 )
cout << setw(8) << bil
<< setw(8) << kuadrat(bil) << endl;
getch();
}
// Definisi fungsi
long kuadrat(long l)
{
return( l * l );
}
Hasil eksekusi :
200 40000
400 160000
600 360000
800 640000
1000 1000000
1200 1440000
1400 1960000
1600 2560000
1800 3240000
Contoh program yang mengandung fungsi tanpa nilai balik dan fungsi dengan nilai balik :
/**
* -------------------------------
* Contoh Program tanpa nilai balil
* -------------------------------
**/
#include <iostream.h>
#include <conio.h>
#include <string.h>
void judul();
char tanya();
void isi();
char huruf(float rat);
void cetak(int a, int b, char *tek)
{
gotoxy(b,a);cout<<tek;
}
void cetakc(int a, char *teks)
{
gotoxy(40-((strlen(teks)/2)),a);cout<<teks;
}
void main()
{
judul();
isi();
getch();
}
void judul()
{
cetakc(1,"DAFTAR NILAI");
cetakc(2,"PRODI TEKNIK INFORMATIKA");
cetak(4,4,"====================================================================");
cetak(5,4,"|");
cetak(5,7,"No");
cetak(5,10,"|");
cetak(5,14,"NIM");
cetak(5,21,"|");
cetak(5,27,"N A M A");
cetak(5,44,"|");
cetak(5,46,"UTS");
cetak(5,50,"|");
cetak(5,52,"UAS");
cetak(5,56,"|");
cetak(5,58,"TUGAS");
cetak(5,64,"|");
cetak(5,66,"NILAI HRF");
cetak(5,76,"|");
cetak(6,4,"====================================================================");
}
void isi()
{
int nim,uts,uas,tugas,tot; char nama[15],maxnm[15],minnm[15];
float rata, maxnil,minnil,ratkelas,totrat;
char jawab;
static int i = 1;
maxnil=0;minnil=100;totrat=0;
do
{
gotoxy(4,6+i);cout<<"|";
gotoxy(7,6+i);cout<<i;
gotoxy(10,6+i);cout<<"|";
gotoxy(12,6+i);cin>>nim;
gotoxy(21,6+i);cout<<"|";
gotoxy(23,6+i);cin>>nama;
gotoxy(44,6+i);cout<<"|";
gotoxy(46,6+i);cin>>uts;
gotoxy(50,6+i);cout<<"|";
gotoxy(52,6+i);cin>>uas;
gotoxy(56,6+i);cout<<"|";
gotoxy(58,6+i);cin>>tugas;
gotoxy(64,6+i);cout<<"|";
tot=uts+uas+tugas;
rata=tot/3;
totrat=totrat+rata;
ratkelas=totrat/i;
if (rata>maxnil)
{
maxnil=rata;
strcpy(maxnm,nama);
}
if (rata<minnil)
{
minnil=rata;
strcpy(minnm,nama);
}
gotoxy(69,6+i);cout<<huruf(rata);
gotoxy(76,6+i);cout<<"|";
jawab=tanya();
if (jawab=='t')
{
gotoxy(4,7+i);
cout<<"==============================================================";
gotoxy(4,8+i);cout<<"Jumlah data : "<<i;
gotoxy(4,9+i);cout<<"Rata kelas : "<<ratkelas;
gotoxy(4,10+i);cout<<"Nilai tertinggi : "<<maxnil;
gotoxy(30,10+i);cout<<"Nama : "<<maxnm;
gotoxy(4,11+i);cout<<"Nilai terendah : "<<minnil;
gotoxy(30,11+i);cout<<"Nama : "<<minnm;
}
i++;
}
while(jawab!='t');
}
char tanya()
{
char jw;
cetak(3,20,"Input data lagi[Y/T]? : ");
cin>>jw;
gotoxy(20,3);clreol();
return(jw);
}
char huruf(float rat)
{
if (rat>80)
return('A');
else if (rat>70)
return('B');
else if (rat>60)
return('C');
else if (rat>50)
return('D');
else
return('E');
}
Operator Resolusi Lingkup
Pada C++ terdapat operator dua buah tanda titik dua ( :: ). Operator ini disebut operator resolusi lingkup (scope resolution). Kegunaanya untuk mengakses variabel yang didefinisikan diluar suatu fungsi.
Contoh program :
/**
* -------------------------------
* Contoh Resulusi Lingkup
* -------------------------------
**/
#include <iostream.h>
#include <conio.h>
int x = 50; // Variabel eksternal
void main()
{
double x; // Definisi variabel lokal
clrscr();
x = 5.678901234; // Variabel lokal yang diberi nilai
cout << x << " " << ::x << endl;
::x = 77; // Variabel eksternal yang diberi nilai
cout << x << " " << ::x << endl;
getch();
}
Hasil eksekusi :
5.6789 50
5.6789 77
Referensi
Referensi digunakan untuk memberikan nama alias dari variabel. Bentuk pendeklarasiannya : int &ref = nama_variable ;
Tanda & mengawali nama referensi.
Setelah pendeklarasian seperti diatas, ref menjadi nama alias dari nama_variabel. Penggubahan nilai terhadap nama_variabel dapat dilakukan melalui nama_variabel itu sendiri atau melalui referensi ref, sebagaimana dapat dilihat pada contoh dibawah ini.
Contoh program :
/**
* -------------------------------
* Contoh Refrensi
* -------------------------------
**/
#include <iostream.h>
#include <conio.h>
void main()
{
int i ;
int &r = i; // Deklarasi referensi
clrscr();
i =10;
cout << "i = " << i << endl;
cout << "r = " << r << endl;
r = 55;
cout << "i = " << i << endl;
cout << "r = " << r << endl;
getch();
}
Hasil eksekusi :
i = 10
r = 1
i = 10
r = 55
Tampak bahwa pengubahan nilai terhadap i maupun r memberikan efek sama.
Operator juga bekerja pada suatu variabel maupun referensinya dengan efek yang sama. Contoh :
#include <iostream.h>
#include <conio.h>
void main()
{
int i = 55;
int &r = i; // Referensi
clrscr();
cout << "i = " << i << " r = " << r <<endl;
i ++ ;
cout << "i = " << i << " r = " << r << endl;
r ++ ;
cout << "i = " << i << " r = " << r << endl;
getch();
}
Hasil eksekusi :
i = 55 r = 55
i = 56 r = 56
i = 57 r = 57
Operator ++ pada i maupun r akan mengubah nilai keduanya, karena i dan r menyiratkan memori yang sama.
Dalam fungsi pengiriman argumen dapat bersifat berdasar nilai dan berdasar referensi. Pengiriman argumen berdasarkan nilai yaitu argumen yang dikirimkan dimaksudkan tidak untuk diubah
sekembalinya dari pemanggilan fungsi. Sedangkan pengiriman argumen berdasar referensi yaitu argumen yang dikirimkan dimaksudkan untuk diubah sekembalinya dari pemanggilan fungsi.
#include <iostream.h>
#include <conio.h>
void tukar(int a, int b);
void main()
{
int nil1,nil2;
cout<<"Nilai 1 : ";
cin>>nil1;
cout<<"Nilai 2 : ";
cin>>nil2;
cout<<"Nilai 1 sebelum tukar : "<<nil1<<endl;
cout<<"Nilai 2 sebelum tukar : "<<nil2<<endl;
tukar(nil1,nil2);
cout<<"Nilai 1 sesudah tukar : "<<nil1<<endl;
cout<<"Nilai 2 sesudah tukar : "<<nil2<<endl;
getch();
}
void tukar(int a, int b)
{
int tmp;
tmp = a;
a = b;
b = tmp;
cout<<"Nilai 1 dalam tukar : "<<a<<endl;
cout<<"Nilai 2 dalam tukar : "<<b<<endl;
}
Hasil eksekusi :
Nilai 1 : 10
Nilai 2 : 20
Nilai 1 sebelum tukar : 10
Nilai 2 sebelum tukar : 20
Nilai 1 dalam tukar : 20
Nilai 2 dalam tukar : 10
Nilai 1 sesudah tukar : 10
Nilai 2 sesudah tukar : 20
Pada contoh diatas fungsi tukar memiliki dua argumen fungsi yang pengirimannya berdasar nilai karena sekembali dari pemanggilan fungsi argumen yang dikirimkan nilainya tetap. Sehingga fungsi tukar diatas tidak menghasilkan nilai sesuai dengan yang diharapkan yaitu menukar kedua nilai yang dikirimkan. Untuk mengatasi permasalahan diatas maka argumen pada fungsi tukar dikirimkan secara referensi :
#include <iostream.h>
#include <conio.h>
void tukar(int &a, int &b);
void main()
{
int nil1,nil2;
cout<<"Nilai 1 : ";
cin>>nil1;
cout<<"Nilai 2 : ";
cin>>nil2;
cout<<"Nilai 1 sebelum tukar : "<<nil1<<endl;
cout<<"Nilai 2 sebelum tukar : "<<nil2<<endl;
tukar(nil1,nil2);
cout<<"Nilai 1 sesudah tukar : "<<nil1<<endl;
cout<<"Nilai 2 sesudah tukar : "<<nil2<<endl;
getch();
}
void tukar(int &a, int &b)
{
int tmp;
tmp = a;
a = b;
b = tmp;
cout<<"Nilai 1 dalam tukar : "<<a<<endl;
cout<<"Nilai 2 dalam tukar : "<<b<<endl;
}
Hasil eksekusi :
Nilai 1 : 10
Nilai 2 : 20
Nilai 1 sebelum tukar : 10
Nilai 2 sebelum tukar : 20
Nilai 1 dalam tukar : 20
Nilai 2 dalam tukar : 10
Nilai 1 sesudah tukar : 20
Nilai 2 sesudah tukar : 10
Array sebagai argumen fungsi
Array dapat juga berkedudukan sebagai parameter dalam argumen fungsi :
/**
* -------------------------------
* Contoh Array sebagai argumen fungsi
* -------------------------------
**/
#include <iostream.h>
#include <conio.h>
const int brs = 10;
const int klm = 10;
void jumlah(int a[brs][klm],int b[brs][klm],int c[brs][klm], int jbr, int jkl);
void main()
{
int mat_a[brs][klm], mat_b[brs][klm], mat_c[brs][klm];
int br,kl;
clrscr();
cout<<"Masukan jumlah Baris : ";
cin>>br;
cout<<"masukan Jumlah kolom : ";
cin>>kl;
for(int i=0;i<br;i++) //input matrik A
{
for(int j=0;j<kl;j++)
{
cout<<" Matrik A["<<i<<"]["<<j<<"] = ";
cin>>mat_a[i][j];
}
}
for(int i=0;i<br;i++) //input matrik B
{
for(int j=0;j<kl;j++)
{
cout<<" Matrik B["<<i<<"]["<<j<<"] = ";
cin>>mat_b[i][j];
}
}
jumlah(mat_a,mat_b,mat_c,br,kl);
clrscr();
cout<<"Matrik A"<<endl; //menampilkan matrik A
for(int i=0;i<br;i++)
{
for(int j=0;j<kl;j++)
{
cout<<mat_a[i][j]<<" ";
}
cout<<endl;
}
cout<<"\nMatrik B"<<endl; //menampilkan matrik B
for(int i=0;i<br;i++)
{
for(int j=0;j<kl;j++)
{
cout<<mat_b[i][j]<<" ";
}
cout<<endl;
}
cout<<"\nMatrik C hasil penjumlahan"<<endl;
for(int i=0;i<br;i++) //menampilkan matrik C
{
for(int j=0;j<kl;j++)
{
cout<<mat_c[i][j]<<" ";
}
cout<<endl;
}
getch();
}
void jumlah(int a[brs][klm],int b[brs][klm],int c[brs][klm],int jbr, int jkl)
{
for(int i=0;i<jbr;i++)
{
for(int j=0;j<jkl;j++)
{
c[i][j]=a[i][j]+b[i][j];
}
}
}
Inline Function
Inline function dengan cukup menyisipkan kata-kata inline didepan tipe nilai balik fungsi dalam pendefinisian fungsi. Contoh :
inline int jumlah (int x, int y)
{
return(x + y);
}
inline function disarankan dipakai pada fungsi yang sering dipanggil dan ukurannya kecil (terdiri satu atau dua pernyataan), terutama jika dilibatkan pada pernyataan pengulangan proses (while, for dan dowhile). Misalnya pada bentuk seperti berikut :
for (int i = 1; i < 100; i++)
cout << i << “.” << jumlah (i, 2 * i) << endl;
jika fungsi jumlah() tidak ditulis sebagai inline function, proses tersebut akan menjadi relatif lambat.
Contoh program :
/**
* -------------------------------
* Contoh Inline Function
* -------------------------------
**/
#include <iostream.h>
#include <conio.h>
// Definisi fungsi sebagai inline
inline int jumlah(int x, int y)
{
return(x + y );
}
void main()
{
clrscr();
for (int i = 1; i < 100; i ++ )
cout << i << " . " << jumlah(i, 2 * i) << endl;
getch();
}
Function Overloading
Function Overloading atau Overloading terhadap fungsi memungkinkan sebuah fungsi dapat menerima bermacam-macam tipe dan memberikan nilai balik yang bervariasi pula.
Contoh program :
/**
* -------------------------------
* Contoh Fungsi Overloading
* -------------------------------
**/
#include <iostream.h>
#include <conio.h>
// Prototipe fungsi
int kuadrat (int i);
long kuadrat(long l);
double kuadrat(double d);
void main()
{
cout << kuadrat(2) << endl;
cout << kuadrat(66666) << endl;
cout << kuadrat(1.2) << endl;
getch();
}
// Definisi fungsi
int kuadrat (int i)
{
return(i * i);
}
long kuadrat (long l)
{
return(l * l);
}
double kuadrat (double d)
{
return(d * d);
}
Hasil eksekusi :
4
149388260
1.44
Rekursi
Fungsi dalam C++ dapat dipakai secara rekursi, artinya suatu fungsi dapat memanggil fungsi yang merupakan dirinya sendiri. Penerapan rekursi diantaranya untuk menghitung nilai :
Xn
Dengan n merupakan bilangan bulat positif. Solusi dari persoalan ini berupa :
Jika n = 1 maka Xn = X
Selain itu : Xn = X * Xn – 1
Contoh program :
/**
* -------------------------------
* Contoh Rekursi
* -------------------------------
**/
#include <iostream.h>
#include <conio.h>
long int pangkat ( int x, int n);
void main()
{
int x, y;
clrscr();
cout << "Menghitung x ^ y "<< endl;
cout << "x = " ;
cin >> x ;
cout << "y = " ;
cin >> y ;
cout << x << " ^ " << y << " = "
<< pangkat(x, y) << endl;
getch();
}
long int pangkat(int x, int n)
{
if (n == 1 )
return(x);
else
return(x * pangkat(x, n - 1));
}
Hasil elsekusi :
Menghitung x ^ y
x = 3
y = 4
3 ^ 4 = 81

Komentar
Posting Komentar
Kritik, Saran dan Komentar Kami tunggu