Advertisements
C++

Belajar C++ #11 : Membuat Prosedur & Fungsi di C++

Anak Males – Di dalam bahasa pemrograman termasuk C++ fungsi atau prosedur sering digunakan untuk membungkus sebuah program menjadi bagian bagian kecil.

Tujuannya adalah supaya program tidak menumpuk pada fungsi main() saja.

Apa yang terjadi jika kita mempunyai sebuah program yang lebih besar dan kompleks dan semua block kode nya diletakan di dalam fungsi main() maka kita akan kesulitan membacanya di kemudian hari.

Oleh karena itulah kita akan membutuhkan sebuah fungsi yang akan kita bahas pada tutorial C++ kali ini.

Karena sebelumnya kita sudah membahas sebuah array. Jika belum mengerti tentang array bisa di baca terlebih dahulu.

Baca Disini : Pengertian Array C++

Apa Itu Fungsi ?

Fungsi adalah sudatu blok kode program yang bertugass untuk menyelesaikan suatu permasalahan spesifik tertentu.

Contohnya seperti melakukan perhitungan, memanipulasi string, proses baca/tulis file dan masih banyak lagi.

Fungsi bisa menerima input dan menghasilkan output. Kita sebenarnya sudah sangat sering membuat sebuah fungsi yaitu main().

Namun fungsi ini memang sudah seharusnya ada di setiap bahasa pemrograman C++ karena fungsi inilah yang akan di eksekusi pertama kali saat program berjalan.

Seperti yang sudah kita bahas, jika kebanyakan kode menumpuk pada main, maka akan sulit untuk kita membacanya.

Dengan adanya fungsi, kode program bisa menjadi lebih mudah untuk di maintenance.

Fungsi juga akan meminimalisir adanya penulisan kode yang berulang.

Terus bagaimana cara membuat fungsi di C++ ? Mari kita bahas selengkapnya.

Cara Membuat Fungsi Di Bahasa C++

Bentuk umum fungsi pada C++ bisa kita buat seperti di bawah ini.

int nama_fungsi(int parameter){
   aksi;

   return nilai;
}

Fungsi biasanya akan mengembalikan sebuah nilai dari hasil prosesnya. Karena itulah kita harus menentukan tipe data untuk nilai yang akan di kembalikan.

Baca Juga : Latihan C++ Keliling Lingkaran

Apabila fungsi tersebut tidak memiliki nilai kembalian, maka kita harus menggunakan tipe void untuk menyatakan fungsi tersebut tidak akan mengembalikan apa apa.

Contohnya seperti di bawah ini.

void nama_fungsi(){
    cout << "Ini adalah sebuah fungsi\n";
}

Kenapa tidak ada parameter ? Sebenarnya untuk parameter sendiri bersifat opsional, boleh di isi boleh juga tidak di isi.

Tergantung dengan fungsi yang di buat, jika fungsi tersebut membutuhkan input maka kita harus membuat parameter.

Namun fungsi yang tidak menerima sebuah input kadang juga bisa di sebut dengan prosedur.

Mari kita coba untuk membuat fungsi pada program C++ supaya kita tau bagaimana caranya membuat fungsi lebih baik dan mudah di baca.

#include <iostream>
using namespace std;

void cetak(string c){
    cout << c << endl;
}
int main()
{
    cetak("Pemrograman C++");
    cetak("Anak Males");
    return 0;
}

Hasilnya

output fungsi
output fungsi

Dengan mendefinisikan fungsi cetak(), kita bisa memanggil fungsi tersebut untuk menampilkan teks yang berbeda ke layar.

Yang artinya, fungsi hanya perlu di definikan satu kali, namun bisa di panggil berkali kali.

Baca Juga : Latihan Program C++ Luas dan Keliling Segitiga

Untuk fungsi yang mempunyai nilai balik, contohnya seperti di bawah ini.

double kali(double a, double b){
   return a * b
}

Pada kode di atas, kita mendefinisikan fungsi dengan nama kali(). Fungsi tersebut mempunyai dua parameter yang bertipe double (a dan b) dan mengembalikan nilai yang beripe double.

Karena fungsi kali() merupakan fungsi yang mengembalikan/menghasilkan nilai, maka fungsi tersebut dapat diperlakukan sebagaimana layaknya variabel, misalnya di tampung ke variabel lain, di tampilkan langsung bahkan bisa menjadi parameter untuk fungsi lain.

Kita akan mencoba membuat beberapa fungsi dengan nilai balik yang berbeda beda.

Buatlah sebuah file cpp kemudian masukan kode program di bawah ini.

#include <iostream>
#include <iomanip>
using namespace std;

//mendefinisikan fungsi yang mengembalikan nilai bertipe double
double kali(double a, double b){
    return a * b;
}
//mendefinisikan fungsi yang mengembalikan nilai bertipe string
string sambung(string s1, string s2){
    return s1 + s2;
}
//mendefinisikan fungsi yang mengembalikan nilai bertipe bool
bool ganjil(int x){
    return (x % 2 !=0);
}
int main()
{
    double hasil1;
    string hasil2;
    bool hasil3;

    //memanggil fungsi
    hasil1 = kali(10.0,2.0);
    hasil2 = sambung("Pemrograman", " C++");
    hasil3 = ganjil(99);

    //menampilkan hasil
    cout << fixed;
    cout << "Hasil perkalian : " << hasil1 << endl;
    cout << "Hasil penyambungan : " << hasil2 << endl;
    cout << "99 merupakan bilangan ganjil : " << (hasil3 ? "true" : "false") << endl;
    return 0;
}

Hasilnya seperti di bawah ini

output fungsi C++
output fungsi

Deklarasi Fungsi C++

C++ juga mendukung adanya deklarasi terhadap sebuah fungsi. Definisi fungsi bisa di tulis secara terpisah pada bagian lain atau bahkan file lain.

Baca Juga : Latihan C++ Volume Bola

Perhatikan program fungsi berikut ini.

double kali(double a, double b);  //deklarasi fungsi

double kali(double a, double b){   //definisi fungsi
    return a * b;
}

Dengan begitu, maka jika kita implementasikan ke dalam sebuah progra C++ full adalah sebagai berikut ini.

#include <iostream>
#include <iomanip>
using namespace std;

//deklarasi fungsi
double kali(double a, double b);
string sambung(string s1, string s2);
bool ganjil(int x);

int main()
{
    double hasil1;
    string hasil2;
    bool hasil3;

    //memanggil fungsi
    hasil1 = kali(10.0,2.0);
    hasil2 = sambung("Pemrograman", " C++");
    hasil3 = ganjil(99);

    //menampilkan hasil
    cout << fixed;
    cout << "Hasil perkalian : " << hasil1 << endl;
    cout << "Hasil penyambungan : " << hasil2 << endl;
    cout << "99 merupakan bilangan ganjil : " << (hasil3 ? "true" : "false") << endl;
    return 0;
}

//mendefinisikan fungsi yang mengembalikan nilai bertipe double
double kali(double a, double b){
    return a * b;
}
//mendefinisikan fungsi yang mengembalikan nilai bertipe string
string sambung(string s1, string s2){
    return s1 + s2;
}
//mendefinisikan fungsi yang mengembalikan nilai bertipe bool
bool ganjil(int x){
    return (x % 2 !=0);
}

Hasilnya akan tetap sama yaitu seperti berikut ini.

output fungsi

Namun dengan menggunakan deklarasi fungsi seperti di atas, maka definisi fungsi bisa ditulis setelah atau di bawah fungsi main.

Baca Juga : Membuat Program C++ Luas dan Keliling Persegi panjang

Pemisahan antara bagian deklarasi fungsi dan definisi fungsi pada umumnya di lakukan dengan membuat header file dengan ekstensi.h.

Fungsi Menggunakan Parameter

Pada umumnya fungsi mempunyai satu atau beberapa parameter, meskipun sebenarnya bisa saja kita mendefinisikan fungsi tanpa parameter.

Apa itu parameter ?

Parameter adalah suatu nilai berupa variabel yang di kirimkan kedalam fungsi, kemudian akan ikut di proses di dalam badan fungsi.

Dengan adanya parameter, suatu fungsi bisa memberikan hasil yang dinamis atau berubah ubah setiap fungsi tersebut di panggil.

Baca Juga : Contoh Program C++ Luas Permukaan Tabung

void cetak(){
  cout << "Pemrograman C++ Anak Males";
}

Potongan kode diatas menunjukan fungsi yang dibuat tanpa parameter. Untuk menampilkan 3 teks “Pemrogrmaan C++ Anak Males” ke layar maka kita perlu memanggil fungsi tersebut tiga kali.

cetak();
cetak();
cetak();

Namun jika kita ingin menampilkan sepuluh teks, kita juga perlu memanggil sebanyak 10x. Lantas bagaimana jika kita perlu menampilkan sebanyak seribu ?.

Jawabannya adalah dengan mengombinasikan dengan kode perulangan C++. Kalau tidak tau perulangan maka harus belajar terlebih dahulu.

Belajar disini : Cara Membuat Perulangan C++

Atau bisa lihat kode program berikut ini untuk mengkombinasikannya dengan perulangan.

void cetak(int n){
   for (auto i {0}; i<n; i++){
      cout << "Pemrograman C++ Anak Males" << endl;
   }
}

Dengan kode diatas maka kita hanya perlu menampilkan teks tiga kali hanya dengan sepotong kode berikut ini.

cetak(3)

Jika ingin 10 bagaimana ?

cetak(10)

Sangat mudah kan ?.

Parameter & Argumen

Parameter formal adalah sebuah parameter yang terdapat pada bagian definisi fungsi, contohnya seperti potongan kode berikut ini.

Baca Juga : Contoh Program C++ Keliling Segitiga

double kali(double a, double b){
   return a * b;
}

Didalam kode tersebut a dan b disebut dengan parameter formal atau yang biasanya disebut sebagai parameter biasa saja.

Sedangkan untuk parameter aktual adalah parameter yang dikirimkan atau dilewatkan pada saat pemanggilan fungsi, seperti yang ditunjukan pada contoh berikut ini.

Baca Juga : Macam macam array C++

double bil1 {10.0}, bil2 {2.0}, hasil {};

//memanggil fungsi kali
hasil = kali(bil1, bil2);

Dalam contoh ini, bil1 dan bil2 disebut dengan parameter aktual atau yang sering disebut dengan argumen.

Meski demikian, istilah parameter dan argumen kadang dianggap sebagai sesuatu yang sama dan digunakan secara bergantian.

Pass-by-Value & Pass-by-Reference

Dalam bahasa pemrogaman, parameter bisa dilewatkan kedalam suatu fungsi menggunakan dua cara yaitu sebagai berikut.

  • Pass-by-Value : Melewatkan parameter berdasarkan nilai
  • Pass-by-Reference : Melewatkan parameter berdasarkan refrensi maupun alamat memori.

Di dalam mekanisme Pass-by-Value akan terdapat proses penyalinan nilai dari argumen ke dalam parameter.

Karena argumen dan parameter adalah dua buah variabel yang berbeda dan masing masing menempati alamat memori yang berbeda pula.

Maka perubahan nilai yang terjadi pada parameter tidak akan berpengaruh terhadap nilai argumen.

Bedanya dengan Pass-by-Reference adalah argumen dan parameter akan menunjuk alamat memori yang sama.

Baca Juga : Contoh Program C++ Keliling Persegi

Dengan demikian, jika nilai di dalam alamat memori berubah, maka keduaya akan ikut berubah, dengan kata lain parameter formal hanya merupakan alian(nama lain) atau refrensi dari argumen.

Tentu berbicara mengenai topik ini akan sedikit membingungkan. Maka dari itu daripada bingung mending langsung praktikan kedalam sebuah programnya.

#include <iostream>
using namespace std;

//melewatkan paramerter berdasarkan nilai
void tukar(int a, int b){
    int c = a;
    a = b;
    b = c;
}
int main()
{
    int x{10} , y{20};

    //menampilkan nilai sebelum di tukar
    cout << "Sebelum ditukar\n";
    cout << "x: " << x << endl;
    cout << "y: " << y << endl;

    //memanggil fungsi tukar()
    tukar(x,y);

    //memanggil nilai setelah di tukar
    cout << "Setelah ditukar\n";
    cout << "x: " << x << endl;
    cout << "y: " << y << endl;
    return 0;
}

Hasilnya

output parameter Pass-by-Value
output parameter Pass-by-Value

Kode diatas adalah contoh pengiriman parameter menggunakan Pass-by-Value.

Nilai x akan disalin ke a dan y akan disalin ke dalam b, oleh karena itulah perubahan nilai yang terjadi pada variabel a dan b tentu tidak akan merubah nilai x dan y.

Agar nilai x dan y bisa berubah ketika a dan b diubah maka kita perlu menjadikan a dan b sebagai refrensi yaitu dengan menambahkan tanda & di depan parameter a dan b.

Baca juga : Apa saja jump statement di C++

Menggunakan cara ini, x dan a akan menempati satu alamat memori yang sama, demikian juga y dan b.

Pengiriman seperti ini juga disebut dengan Pass-by-Reference.

Bingung ? Mungkin kita bisa langsung mencoba lihat perbedaannya di dalam kode program C++ nya.

#include <iostream>
using namespace std;

//melewatkan paramerter berdasarkan refrensi
void tukar(int& a, int& b){
    int c = a;
    a = b;
    b = c;
}
int main()
{
    int x{10} , y{20};

    //menampilkan nilai sebelum di tukar
    cout << "Sebelum ditukar\n";
    cout << "x: " << x << endl;
    cout << "y: " << y << endl;

    //memanggil fungsi tukar()
    tukar(x,y);

    //memanggil nilai setelah di tukar
    cout << "Setelah ditukar\n";
    cout << "x: " << x << endl;
    cout << "y: " << y << endl;
    return 0;
}

Hasilnya seperti berikut ini.

output parameter Pass-by-Reference
output parameter Pass-by-Reference

Tau perbedaan kode diatas ? Coba perhatikan potongan kode berikut supaya tau dimana letak perbedaannya.

//melewatkan paramerter berdasarkan refrensi
void tukar(int& a, int& b){
    int c = a;
    a = b;
    b = c;
}

Nah, di dalam void tukar terdapat int yang di tambahkan tanda & yang menandakan ini adalah menggunakan parameter Pass-by-Reference.

C++ Tidak Mendukung Adanya Fungsi Di Dalam Fungsi

Kalau ngomongin parameter tidak akan ada habisnya, karena masih banyak sekali macam macam parameter yang harus kita bahas.

Namun apakah pernah bertanya jika di dalam C++ tidak mendukung fungsi di dalam fungsi ?.

Pada beberapa bahasa pemrograman lain, fungsi bisa di definisikan di dalam fungsi lainnya atau yang biasa di sebut dengan nested function.

Fungsi bagian dalam ini bersifat lokal dan hanya dikenal oleh fungsi tempat fungsi bagian dalam tersebut di definisikan.

Baca juga : Latihan C++ keliling jajar genjang

Dan di C++ sayang sekali tidak mendukung adanya fungsi di dalam fungsi.

Berikut ini adalah kode program yang akan terjadi error jika terdapat fungsi di dalam fungsi.

#include <iostream>
#include <cmath>
using namespace std;

double hipotenusa(double a, double b){
    double kuadrat(double n){
        return n*n;
    }
    return sqrt(kuadrat (a) + kuadrat(b));
}
int main()
{
    double x (3.0), y(4.0);

    //memanggil fungsi hiponenusa()
    cout << "sisi miring segitiga siku siku = " << hipotenusa(x,y);
    return 0;
}

Kode tersebut akan error dan tidak akan bisa di kompilasi. Karena memang C++ tidak mengijinkan adanya nested function.

Fungsi Rekursif

Fungsi rekursif adalah fungsi yang di dalamnya terdapat sebuah pemanggilan terhadap dirinya sendiri.

Jadi singkatnya fungsi rekursif adalah fungsi tersebut memanggil fungsi tersebut. Fungsi ini banyak di gunakan di dalam proses pengurutan ataupun pencarian datadi dalam kasus struktur data.

Contohnya seperti tree (Pohon) ataupun teori teori komputasi lainnya.

Untuk kebutuhan standar, fungsi rekursif sebenarnya jarang digunakan, namun kita akan mencoba membuatnya menggunakan bahasa pemrograman C++.

#include <iostream>
#include <cmath>
using namespace std;

int faktorial(int n){
    if(n < 0){
        cout << "Salah : Nilai tidak boleh negatif";
        exit(EXIT_FAILURE);
    }
    if(n <= 1)return 1;
    return n * faktorial(n-1); //memanggil dirinya sendiri
}
int main()
{
    int a,f;

    cout << "Masukan nilai a : ";
    cin >> a;

    f = faktorial(a);

    cout << a << "! = " << f;
    return 0;
}

Hasilnya seperti berikut ini.

output fungsi C++ rekursif
output fungsi C++ rekursif

Pada fungsi faktorial() diatas terdapat sebuah perintah yang memanggil dirinya sendiri yaitu

return n * faktorial(n-1);

Cara kerja dari fungsi tersebut adalah sebagai berikut ini.

  1. Pada saat n=9, fungsi akan melakukan perintah 9*8!
  2. Pada saat n=8, fungsi akan melakukan perintah 8*7!
  3. Pada saat n=7, fungsi akan melakukan perintah 7*6!
  4. Pada saat n=6, fungsi akan melakukan perintah 6*5!
  5. Pada saat n=2, fungsi akan melakukan perintah 2*1!
  6. Pada saat n=1, fungsi akan melakukan perintah 1!

Penutup

Mungkin kita akan sudahi terlebih dahulu tutorial C++ kali ini sampai jumpa di tutorial C++ lainnya. Habis ini kita akan belajar yang namanya pointer dan refrences

You may also like...

Popular Posts

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *