Apa yang dimaksud fungsi pada c++

Pengertian Fungsi pada C++. Fungsi adalah sekumpulan perintah yang dapat menerima argumen input dan dapat memberikan hasil output yang dapat berupa nilai ataupun sebuah hasil operasi. Fungsi merupakan suatu bagian dari program yang dimaksudkan untuk mengerjakan suatu tugas tertentu dan letaknya terpisah dari program yang memanggilnya. Fungsi merupakan elemen utama dalam bahasa C karena bahasa C sendiri terbentuk dari kumpulan fungsi. Dalam setiap program bahasa C, minimal terdapat satu fungsi yaitu fungsi main(). Fungsi banyak diterapkan dalam program-program C yang terstruktur.

Fungsi terdiri dari dua jenis fungsi build-in dan fungsi user defined. Fungsi build-in adalah fungsi standar yang sudah siap untuk digunakan karena sudah terdapat dalam compiler bahasa pemrograman, sedangkan fungsi user defined adalah fungsi yang didefinisikan oleh pemrogram. Fungsi yang akan dibicarakan sekarang adalah fungsi user defined.

Nama fungsi yang didefinisikan sendiri oleh pemrogram tidak boleh sama dengan nama fungsi build-in pada compiler C++. Fungsi digunakan agar pemrogram dapat menghindari penulisan bagian program (kode) berulang-ulang dengan kode yang sama, dapat menyusun kode program agar terlihat lebih terstruktur, dan kemudahan dalam debugging program (mempunyai readability yang tinggi) sehingga lebih mudah untuk dikembangkan.

Daftar

1. Struktur Fungsi pada C++

2. Parameter Fungsi pada C++

3. Melewatkan Parameter

4. Pernyataan Return()

5. Variabel pada Fungsi

6. Pointer sebagai Argumen Fungsi

7. Array sebagai Argumen Fungsi

8. Struktur Sebagai Argumen Fungsi

9. Fungsi Rekursif

10. Fungsi Overloading

1. Struktur Fungsi pada C++

Sebelum sebuah fungsi digunakan atau dipanggil, suatu fungsi harus dideklarasikan dan didefinisikan terlebih dahulu.

Pengertian deklarasi fungsi berbeda dengan definisi fungsi. Suatu deklarasi fungsi adalah judul fungsi yang sederhana yang diakhiri dengan tanda semicolon (;) atau sering disebut dengan Prototipe fungsi. Sedangkan definisi fungsi adalah fungsi yang lengkap, terdiri dari judul dan isinya. Suatu deklarasi fungsi disebut juga sebagai prototipe fungsi.

Suatu deklarasi fungsi seperti layaknya suatu deklarasi variabel, yang memberitahu compiler semua informasi yang dibutuhkan untuk mengompilasi file. Compiler tidak perlu mengetahui bagaimana fungsi bekerja, yang perlu diketahui adalah nama fungsi, banyak dan tipe parameternya, dan tipe balikannya (return). Hal ini merupakan informasi yang dimuat secara lengkap dalam judul fungsi.

Seperti sebuah deklarasi variabel, suatu deklarasi fungsi juga harus muncul di atas semua nama fungsi yang digunakannya. Berbeda dengan definisi fungsi, yang dapat diletakkan terpisah dari deklarasinya dan dapat muncul di mana saja di luar fungsi main() dan biasanya dituliskan setelah fungsi main() atau dalam file terpisah yang jika ingin digunakan tinggal menambah prepocessor #include “nama_file” pada file utama. Jika definisi fungsi diletakkan di atas fungsi main() maka deklarasi fungsi atau prototipe fungsi tidak diperlukan. Dalam suatu program sangat disarankan untuk menggunakan prototipe fungsi. Pemakaian prototipe fungsi mempunyai keungtungan, antara lain:

  • Kompiler akan melakukan konversi antara tipe parameter dalam definisi dan parameter fungsi.
  • Jika jumlah parameter yang digunakan dalam definisi fungsi dan pada saat pemanggilan fungsi berbeda atau tidak sama maka akan menunjukkan kesalahan.

Variabel-variabel yang terdapat di dalam parameter fungsi disebut parameter-parameter formal atau argumen-argumen formal. Variabel lokal seperti ini hanya ada selama eksekusi fungsi yang bersangkutan. Variabel yang di-list dalam pemanggilan fungsi disebut parameter-parameter aktual atau argumen-argumen aktual. Sama seperti variabel lainnya dalam program utama, variabel-variabel tersebut harus dideklarasikan sebelum digunakan dalam pemanggilan.

Bentuk umum pendeklarasian fungsi adalah:

tipe_fungsi nama_fungsi(parameter_fungsi);

Contoh:

float Jumlah(float a, float b);

Sedangkan bentuk umum pedefinisian fungsi adalah:

penentu_tipe_fungsi nama_fungsi(parameter_fungsi) {           statement1;           statement2;           ...           statementn; }

dimana:

  • nama_fungsi, boleh dituliskan secara bebas dengan ketentuan tidak menggunakan spasi dan sama dengan nama fungsi build in.
  • parameter_fungsi, diletakkan di antara tanda kurung yang terletak di belakang nama fungsi.
  • statement diletakkan di antara kurung kurawal buka dan tutup (“{“ dan “}”).
  • penentu_tipe_fungsi merupakan tipe data keluaran dari fungsi.

Hal-hal yang perlu diperhatikan dalam penggunaan fungsi:

  1. Kalau tipe fungsi tidak disebutkan, maka akan dianggap sebagai fungsi dengan nilai keluaran bertipe integer.
  2. Untuk fungsi yang memiliki keluaran bertipe bukan integer, maka diperlukan pendefinisian penentu tipe fungsi.
  3. Untuk fungsi yang tidak mempunyai nilai keluaran maka dimasukkan ke dalam tipe void.
  4. Pernyataan yang diberikan untuk memberikan nilai akhir fungsi berupa pernyataan return.
  5. Suatu fungsi dapat menghasilkan nilai balik bagi pemanggilnya.
  6. Fungsi yang mempunyai parameter, maka banyaknya parameter harus sama, parameter aktual yang bersesuaian dengan parameter formal harus mempunyai tipe data yang sama dan nama parameter tidak harus sama.

Program berikut ini diberikan fungsi yang tidak memiliki nilai keluaran.

//fungsi yang tidak memiliki nilai keluaran

void Tukar(int &a, int &b);

{

     int c;

     c = a;

     a = b;

     b = c;

}

Program berikut ini diberikan fungsi yang memiliki keluaran.

//fungsi yang memiliki nilai keluaran

int Maksimum(int a, int b);

{

     if(a>b)

           return (a);

     else

           return (b);

}

Baca Juga  Pengertian dan Contoh Program Sorting pada C++

2. Parameter Fungsi pada C++

Pada saat pemanggilan dan pendefinian suatu fungsi, terdapat parameter fungsi. Terdapat 2 (dua) jenis parameter, yaitu Parameter Formal dan Parameter Aktual.

  1. Parameter Formal adalah parameter yang ada pada daftar parameter dalam definisi fungsi.
  2. Parameter Aktual adalah parameter yang dipakai dalam pemanggilan fungsi

Apa yang dimaksud fungsi pada c++

3. Melewatkan Parameter

Cara melewatkan suatu parameter dari parameter aktual ke dalam parameter formal dapat dilakukan dengan dua cara, yaitu:

  1. Pemanggilan Secara Nilai (Call by Value)
  2. Pemanggilan Secara Referensi (Call by Reference)

3.1. Pemanggilan Secara Nilai (Call by Value)

Call by value akan menyalin nilai dari parameter aktual ke parameter formasi. File yang dikirimkan ke fungsi adalah nilai dari datanya, bukan alamat memori letak dari datanya. Fungsi yang menerima kiriman nilai akan menyimpannya di alamat terpisah dari nilai aslinya yang digunakan oleh bagian program yang memanggil fungsi. Perubahan nilai di fungsi (parameter formal) tidak akan mengubah nilai asli di bagian program yang memanggilnya. Pengiriman parameter secara nilai adalah pengiriman searah (komunikasi satu arah), yaitu dari bagian program yang memanggil fungsi ke fungsi yang dipanggil. Pengiriman suatu nilai dapat dilakukan untuk suatu ungkapan, tidak hanya untuk sebuah variabel, elemen array atau konstanta saja.

/* Program Fungsi dengan Call by Value Nama File : Lat_fungsi_01 */ #include #include void Tukar(int a, int b); void main() { int a=8, b=-5; cout<<"Nilai a dan b sebelumnya : "<Perhatikan program di atas. Pada saat pemanggilan fungsi Tukar(a,b) memiliki dua parameter aktual yang dikirimkan ke parameter formal pada void Tukar(int x, int y). Nilai parameter a dikirimkan ke parameter x dan nilai parameter b dikirimkan ke parameter y. Hal ini dapat dilakukan karena tipe data parameter yang bersesuaian sama walaupun nama pada parameter formal dan parameter aktual berbeda. Di dalam fungsi terjadi penukaran nilai x terhadap y, dan demikian sebaliknya nilai y terhadap x dengan menggunakan variabel z sebagai variabel temporer. Sekalipun terjadi pertukaran nilai di dalam fungsi tetapi setelah kembali ke fungsi main ternyata tidak terjadi pertukaran nilai.

3.2. Pemanggilan Secara Referensi (Call by Reference)

Pemanggilan secara Referensi merupakan upaya untuk melewatkan alamat dari suatu variabel ke dalam fungsi. Alamat yang dikirimkan ke fungsi adalah alamat letak dari nilai datanya, bukan nilai datanya.

Fungsi yang menerima kiriman alamat ini akan menggunakan alamat yang sama untuk mendapatkan nilai datanya. Hal ini dapat dilakukan dimana parameter formal diawali dengan operator alamat (&). Parameter yang menggunakan operator & adalah parameter yang bersifat output atau bersifat input/output. Perubahan nilai pada fungsi akan mengubah nilai asli di bagian program yang memanggil fungsi. Pengiriman parameter secara referensi adalah pengiriman dua arah atau komunikasi dua arah, yaitu dari fungsi pemanggil ke fungsi yang dipanggil dan juga sebaliknya. Pengiriman secara acuan tidak dapat dilakukan untuk suatu ungkapan.

/* Program Fungsi dengan Call by Reference Nama File : Lat_Fungsi_02 */ #include #include void Tukar(int &a, int &b); void main() { int a=8, b=-5; cout<<"Nilai a dan b sebelum ditukar : "<Perhatikan program di atas. Pada saat pemanggilan fungsi Tukar(a,b) memiliki dua parameter aktual yang dikirimkan ke parameter formal pada void Tukar(int &x, int &y). Nilai parameter a dikirimkan ke parameter x dan nilai parameter b dikirimkan ke parameter y. Hal ini dapat dilakukan karena tipe data parameter yang bersesuaian sama walaupun nama pada parameter formal dan parameter aktual berbeda. Di dalam fungsi terjadi penukaran nilai x terhadap y, dan demikian sebaliknya nilai y terhadap x dengan menggunakan variabel z sebagai variabel temporer. Karena yang dikirikan adalah alamat masing-masing parameter aktual, sehingga terjadi pertukaran nilai di dalam fungsi maka akan berakibat setelah kembali ke fungsi main.

4. Pernyataan Return()

Pernyataan return() digunakan untuk mengirimkan nilai dari suatu fungsi kepada fungsi lain yang memanggilnya. Pernyataan return() diikuti oleh argumen yang berupa nilai yang akan dikirimkan. Pernyataan return() dapat diletakkan pada baris mana saja. Yang jelas, begitu pernyataan return() dieksekusi maka eksekusi terhadap fungsi juga berakhir.

Program berikut digunakan untuk menentukan  bilangan terbesar dari tiga buah bilangan.

/* Program Fungsi dengan pernyataan Return() Nama File : Lat_Fungsi_03 */ #include #include int Maksimum(int a, int b, int c); void main() { int a=8, b=12, c=-5; cout<<"Nilai a = "< Besar) Besar = y; if(z > Besar) Besar = z; return (Besar); }

5. Variabel pada Fungsi C++

Penggolongan Variabel berdasarkan Kelas Penyimpanan (Storage Class) dibagi atas 3, yaitu:

  1. Variabel Lokal
  2. Variabel Eksternal atau Global
  3. Variabel Statis

5.1. Variabel Lokal

Variabel lokal adalah variabel yang dideklarasikan di dalam fungsi dan hanya dikenal di dalam fungsi yang bersangkutan. Sifat-sifat variabel lokal:

  • Secara otomatis akan diciptakan ketika fungsi dipanggil dan akan lenyap ketika proses eksekusi terhadap fungsi berakhir.
  • Hanya dikenal oleh fungsi tempat variabel dideklarasikan.
  • Tidak ada inisialisasi secara otomatis (saat variabel diciptakan nilainya random).
  • Dideklarasikan dengan menambahkan kata “auto” (opsional).

Baca Juga  Queue pada C++ (9/10)

5.2. Variabel Global (eksternal)

Variabel global (eksternal) adalah variabel yang dideklarasikan di luar fungsi yang bersifat global, artinya dapat digunakan bersama-sama tanpa harus dideklarasikan lagi. Sifat-sifat variabel global:

  • Dikenal (dapat diakses) oleh semua fungsi.
  • Jika tidak diberi nilai awal secara otomatis berisi nilai nol.
  • Dideklarasikan dengan menambahkan kata “extern” (optional).

5.3. Variabel Statis

Variabel statis adalah variabel yang nilainya tetap dan bisa berupa variabel lokal (internal) dan variabel global (eksternal). Sifat-sifat variabel statis:

  • Jika bersifat internal (lokal), maka variabel hanya dikenal oleh fungsi tempat variabel dideklarasikan.
  • Jika bersifat eksternal (global), maka variabel dapat dipergunakan oleh semua fungsi yang terletak pada program yang sama.
  • Nilai variabel statis tidak akan hilang walau eksekusi terhadap fungsi telah berakhir.
  • Inisialisasi hanya perlu dilakukan sekali saja, yaitu pada saat fungsi dipanggil pertama kali.
  • Jika tidak diberi nilai awal secara otomatis berisi nilai nol.
  • Dideklarasikan dengan menambahkan kata “static”.

6. Pointer sebagai Argumen Fungsi

Pointer biasa digunakan sebagai argumen fungsi jika nilai argumen yang dimaksudkan untuk diubah di dalam fungsi. Pada pengiriman secara referensi kita telah melakukan hal yang sama dengan pointer bila berkedudukan sebagai argumen fungsi. Hal ini dilakukan dengan cara menambahkan operator & di depan argumen pada parameter aktual dan operator * di depan argumen pada parameter formal (tentu saja pada prototipe fungsi juga). Perhatikan Lat_Fungsi_02a berikut.

/* Program Fungsi dengan Call by Reference Nama File : Lat_Fungsi_02a */ #include #include void Tukar(int *a, int *b); void main() { int a=8, b=-5; cout<<"Nilai a dan b sebelum ditukar : "<Baca juga : Pengertian dan Contoh Program Pointer pada C++

7. Array sebagai Argumen Fungsi

Array juga dapat berkedudukan sebagai parameter di dalam fungsi. Perhatikan program Lat_Fungsi_04 berikut ini merupakan fungsi dengan argumen array satu dimensi.

/* Program Array satu dimensi sebagai Argumen fungsi Nama File : Lat_Fungsi_04 */ #include #include #include #include const int N-100; void Baca(int Nilai[], int &M); void Cetak(int Nilai[N], int &M); void Jumlah(int Nilai[N], int &M, int &Jlh, float &Rata); main() { int M; int Nilai[N]; int Jlh=0; float Rata; cout<<"Banyak Elemen : "; cin>>M; Baca(Nilai, M); //memanggil fungsi Baca cout<<"\nElemen Elemen : "; Cetak(Nilai, M); //memanggil fungsi Cetak Jumlah(Nilai, M, Jlh, Rata); //memanggil fungsi Jumlah cout<<"\nJumlah Bilangan : "<>Nilai[i]; } } void Jumlah(int Nilai[], int &M, int &Jlh, float & Rata) { int i; for(i=0;iPerhatikan program di atas. Pemanggilan fungsi kita sebutkan argumen-argumen yang akan dikirim, yaitu argumen Nilai yang merupakan variabel array dan argumen M yang merupakan variabel yang menyatakan banyaknya elemen array. Dalam prototipe fungsi kita lihat bahwa argumen Nilai diikuti atau tanpa dengan indeksnya yang dituliskan dalam pasangan siku pembuka dan siku penutup, sedangkan argumen M diawali dengan operator &. Di dalam definisi fungsinya argumen untuk variabel array-nya dalam hal ini argumen Nilai diikuti dengan pasangan siku pembuka dan siku penutup tanpa menuliskan indeksnya.

Baca juga : Pengetian dan Contoh Program Array pada C++

Untuk fungsi dengan argumen array dua dimensi, pada prototipe fungsinya kita dapat menuliskan indeks baris dan indeks kolom atau hanya menuliskan indeks kolomnya saja. Program Lat_Fungsi_05 berikut ini digunakan untuk membaca elemen matriks, mencetak elemen matriks dan menghitung jumlah dan selisih dua matriks.

/* Program Array dua dimensi sebagai Argumen fungsi Nama File : Lat_Fungsi_05 */ #include #include #include const int Brs=5; const int Klm=5; void Baca(int Mat_a[][Klm], int &Brs, int &Klm); void Cetak(int Mat_A[][Klm], int &Brs, int &Klm); void Jumlah(int Mat_a[][Klm], int Mat_B[][Klm], int Mat_C[][Klm], int &Brs, int &Klm); void Selisih(int Mat_A[Brs][Klm], int Mat_B[Brs][Klm], int Mat_C[Brs][Klm], int &Brs, int &Klm); main() { int Brs1, Klm1, Brs2, Klm2; int Mat_A[Brs][Klm], Mat_B[Brs][Klm]; int Mat_C[Brs][Klm], Mat_D[Brs][Klm]; cout<<"Banyak Baris Matriks A = "; cin>>Brs1; cout<<"Banyak Kolom Matriks A = "; cin>>Klm1; cout<<"Banyak Baris Matriks B = "; cin>>Brs2; cout<<"Banyak Kolom Matriks B = "; cin>>Klm2; cout<<"Elemen Matriks A : \n"; Baca(Mat_A, Brs1, Klm1); cout<<"\nElemen Matriks B : \n"; Baca(Mat_B, Brs1, Klm1); coutt<<"\nMatriks A : \n"; Cetak(Mat_a, Brs1, Klm1); cout<<"\nMatriks B : \n"; Cetak(Mat_B, Brs1, Klm1); if(Brs1==Brs2 && Klm1==Klm2) { Jumlah(Mat_A, Mat_B, Mat_C, Brs1, Klm1); Selisih(Mat_A, Mat_B, Mat_D, Brs1, Klm1); cout<<"\nMatriks C = A + B : \n"; Cetak(Mat_C, Brs1, Klm1); cout<<"\nMatriks D = A - B : \n"; Cetak(Mat_D, Brs1, Klm1); } else cout<<"Kedua Matriks tidak dapat dijumlah dan dikurangkan.."; getch(); } void Cetak(int Mat_A[][Klm], int &Brs, int &Klm) { int i, j; for(i=0;i

Baca Juga  Single Linked List pada C++ Pengertian dan Contoh Program

8. Struktur Sebagai Argumen Fungsi

Argumen suatu fungsi juga dapat berupa struktur. Untuk melewatkan struktur sebagai argumen fungsi dapat dilakukan dengan menuliskan nama variabel yang bertipe struktur di parameter aktual dan nama tipe struktur yang diikuti dengan nama variabel yang didahului dengan operator & (jika pengiriman secara referensi, sedangkan jika pengiriman secara nilai maka operator & tidak perlu dituliskan).

/* Program structure sebagai Argumen Fungsi Nama File : Lat_Fungsi_06 */ #include #include #include struct Mahasiswa { char Nim[9]; char Nama[25]; char Alamat[40]; short Umur; }; void Baca(Mahasiswa &Mhs); void Cetak(Mahasiswa &Mhs); main() { Mahasiswa Mhs; cout<<"Membaca Nilai Anggota Struktur \n"; Baca (Mhs); cout<<"\nMencetak Nilai Anggota Struktur "; Cetak(Mhs); getch(); } void Baca(Mahasiswa &Mhs) { cout<<"Nim : "; cin.getline(Mhs.Nim,9); cout<<"Nama : "; cin.getline(Mhs.Nama,25); cout<<"Alamat : "; cin.getline(Mhs.Alamat,40); cout<<"Umur : "; cin>>Mhs.Umur; } void Cetak(Mahasiswa &Mhs) { cout<<"\nNIM : "<< Mhs.Nim; cout<<"\nNama : "<< Mhs.Nama; cout<<"\nAlamat : "<< Mhs.Alamat; cout<<"\nUmur : "<< Mhs.Umur; }

Program Lat_Fungsi_06 di atas juga dapat ditulis tidak menggunakan pengiriman secara referensi tetapi ditulis dengan menggunakan pointer, seperti pada Lat_Fungsi_07.

/* Program structure dgn Pointer sebagai Argumen Fungsi Nama File : Lat_Fungsi_07 */ #include #include #include struct Mahasiswa { char Nim[9]; char Nama[25]; char Alamat[40]; short Umur; }; void Baca(Mahasiswa *Mhs); void Cetak(Mahasiswa *Mhs); main() { Mahasiswa Mhs; cout<<"Membaca Nilai Anggota Struktur \n"; Baca (&Mhs); cout<<"\nMencetak Nilai Anggota Struktur "; Cetak(&Mhs); getch(); } void Baca(Mahasiswa *Mhs) { cout<<"Nim : "; cin.getline(Mhs->Nim,9); cout<<"Nama : "; cin.getline(Mhs->Nama,25); cout<<"Alamat : "; cin.getline(Mhs->Alamat,40); cout<<"Umur : "; cin>>Mhs->Umur; } void Cetak(Mahasiswa *Mhs) { cout<<"\nNIM : "<< Mhs->Nim; cout<<"\nNama : "<< Mhs->Nama; cout<<"\nAlamat : "<< Mhs->Alamat; cout<<"\nUmur : "<< Mhs->Umur; }

Baca juga : Pengertian dan Contoh Program Struct pada C++

9. Fungsi Rekursif

Fungsi rekursif adalah suatu fungsi yang memanggil dirinya sendiri. Pada beberapa persoalan, fungsi rekursif sangat berguna karena mempermudah solusi. Namun demikian, fungsi rekursif juga memiliki kelemahan, yakni memungkinkan terjadinya overflow pada stack, yang berarti stack tidak lagi mampu menangani permintaan pemanggilan fungsi karena kehabisan memori (stack adalah area memori yang dipakai untuk variabel lokal untuk mengalokasikan memori ketika suatu fungsi dipanggil. Oleh sebab itu harus ada jaminan bahwa proses rekursif akan berhenti pada suatu waktu tertentu, yang menyebabkan pemanggilan fungsi berhenti. Oleh karena itu, jika bisa diselesaikan dengan metode iteratif, gunakanlah metode iteratif.

Bentuk umum fungsi rekursif:

return_data_type    function_name(parameter_list)

{

     ...

     function_name(parameter_list);

     ...

}

Salah satu penggunaan rekursif biasanya digunakan dalam menghitung perpangkatan dua buah bilangan, faktorial dari suatu bilangan bulat, menentukan suku pada deret fibonacci, Tower Hanoi, dan lain sebagainya. Dalam buku ini hanya memberi contoh program perpangkatan dua buah bilangan.

Untuk menghitung perpangkatan dua buah bilangan (x^n) secara rekursif dilakukan dengan cara berikut:

  • Xn = x, jika n=1
  • Xn = x * xn-1 jika n ≠ 1
/* Program Fungsi Overloading Nama File : Lat_Fungsi_09 */ #include #include #include int Pangkat(int x, int n); void main() { int x, n; cout<<"Masukkan Nilai x = "; cin>>x; cout<<"Masukkan Nilai n = "; cin>>n; cout<10. Fungsi Overloading

Mendefinisikan beberapa fungsi yang memiliki nama yang sama tetapi parameter yang berbeda. Kompiler C akan memanggil fungsi yang berdasarkan tipe data argumennya atau banyaknya argumen dan tipe data argumen pada pemanggilan fungsinya.

Berikut program overloading dengan memanggil fungsi berdasarkan tipe data argumennya.

/* Program Fungsi Overloading Nama File : Lat_Fungsi_10 */ #include #include(stdio.h) #include int Kali(nt x); long Kali(long y); double Kali(double z); void main() { cout<<"Hasil Fungsi Overloading Kali(77777) = "<