Anda di halaman 1dari 21

MODUL IV

FUNGSI

4.1. Pendahuluan
Fungsi didefinisikan sebagai kumpulan instruksi untuk melakukan suatu tugas
tertentu. Seperti telah dijelaskan pada bab 1, program C++ terdiri dari satu atau lebih
fungsi (function). Selama ini, program yang dibuat hanya terdiri dari 1 fungsi, yaitu
fungsi main. Cara ini hanya cocok diterapkan pada program untuk masalah yang
sederhana saja. Pada program untuk masalah yang kompleks disarankan untuk
membagi masalah menjadi sub-masalah yang lebih sederhana dan tiap sub-masalah
dipecahkan dengan sebuah fungsi, lihat gambar 4.1 di bawah. Fungsi sering juga
disebut sebagai modul (module). Beberapa fungsi atau modul ini dapat digabungkan
menjadi satu program yang besar.

Gambar 4.1 Ilustrasi Fungsi

49
Praktikum C++ Dasar

Keuntungan membuat program dengan fungsi adalah:


1. Menyederhanakan pemecahan masalah.
2. Memudahkan dalam mengembangkan program, karena program dibagi-bagi
menjadi beberapa fungsi maka tiap fungsi dapat dikerjakan oleh seorang
programmer sehingga tiap programmer hanya fokus pada sub masalah yang tidak
kompleks.
3. Memudahkan pembacaan program, karena program tidak lagi berisi perintah-
perintah yang sangat rinci.
4. Memperkecil ukuran program. Jika ada beberapa deretan instruksi yang sama
digunakan di beberapa tempat dalam program maka deretan instruksi tersebut
dibuat menjadi sebuah fungsi, dan dipanggil di tempat yang memerlukan.

Ada dua macam fungsi yang dikenal dalam program C++, yaitu:
1. Predefined function: fungsi yang sudah disediakan dalam library C++.
Penggunaannya dengan memanggil header file tempat fungsi itu berada. Beberapa
predefined function dapat dilihat pada tabel 4.1 berikut ini dan contoh
penggunaannya dapat dilihat pada program41.cpp.
2. User-defined function: fungsi yang dibuat oleh programmer.

Tabel 4.1 Contoh Predefined Function


Function Header file Tujuan Tipe Tipe
parameter hasil
abs(x) <stdlib.h> Menghasilkan nilai absolut dari int int
argumen. Contoh: abs(-8) = 8
sin(x) <math.h> Menghasilkan sinus dari sudut x double double
Contoh: sin(0.0) = 0.0 (radian)
cos(x) <math.h> Menghasilkan cosinus dari sudut x double double
Contoh: cos(0.0) = 1.0 (radian)
tan(x) <math.h> Menghasilkan tangen dari sudut x double double
Contoh: tan(0.0) = 0.0 (radian)
y
pow(x,y) <math.h> Menghasilkan x . Jika x negatif double double
maka y harus bilangan bulat.
Contoh: pow(0.16, 0.5) = 0.4
exp(x) <math.h> Menghasilkan ex dengan e = 2.718. double double
Contoh: exp(1.0) = 2.718
sqrt(x) <math.h> Menghasilkan akar dari x. double double
Contoh: y = sqrt(100)
fmod(x,y) <math.h> Menghasilkan modulus (sisa) dari x double double
dibagi y, kedua argumen bertipe
double.
Contoh: fmod(17.5,4.5)

Modul IV : Fungsi 50
Praktikum C++ Dasar

//prog41.cpp
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <conio.h>

using namespace std;


int main()
{
int x;
double u,v;

u = 4.2;
v = 3.0;
cout << u <<" pangkat " << v << " = " << pow(u,v) << endl <<endl;
cout << " 5.0 pangkat 4 = " << pow(5.0, 4) << endl<< endl;
u = u + pow(3.0, 3);
cout << " u = " << u << endl;
cout <<endl;
x = -15;
cout << " nilai absolut dari " << x << " = " << abs(x) << endl;
// system (“pause”);
return 0;
}

Pada program 4.1 di atas, pemanggilan fungsi pow(u,v) dan abs(x) tidak akan berhasil
jika header file (math.h) tidak ada.

4.2. User-defined Function


Tidak semua fungsi yang dibutuhkan programmer tersedia dalam library C++,
karena itu programmer harus membuat sendiri fungsi yang dibutuhkan. Secara umum
user-defined function dibagi menjadi 2 katagori, yaitu
1. Fungsi yang mengembalikan sebuah hasil, atau fungsi dengan statement return.
2. Fungsi yang tidak mengembalikan hasil atau disebut Void function. Fungsi ini
tidak mempuyai statement Return, jika ada hasil yang perlu dikembalikan maka
hasil tersebut dikembalikan dalam parameter fungsi.

4.2.1 Fungsi yang mengembalikan sebuah hasil

Predefined function pada tabel 4.1 di atas adalah contoh dari fungsi yang
mengembalikan sebuah hasil atau fungsi dengan statement return. Fungsi ini selalu
mengembalikan sebuah hasil bersama statement return. Untuk membuat fungsi ini
perhatikan langkah-langkah berikut ini:
1. Tentukan nama fungsi.
2. Tentukan banyaknya parameter
3. Tentukan tipe data dari masing-masing parameter
4. Tentukan tipe data dari nilai yang dihasilkan oleh fungsi
5. Tulis statement yang menjadi isi fungsi (badan fungsi)
6. Akhiri fungsi dengan statement return(ekspresi). Ekspresi adalah tempat
menyimpan hasil dari fungsi yang akan dikembalikan ke statement program yang
memanggil.

Modul IV : Fungsi 51
Praktikum C++ Dasar

Langkah 1 sampai 4 merupakan langkah untuk mendeklarasikan fungsi


(“membe-ritahu” main program bahwa ada fungsi dalam program yang dibuat) dan
langkah 5 dan 6 merupakan langkah untuk mendefinisikan fungsi (menulis statement
program yang akan dieksekusi oleh fungsi). Bentuk umum fungsi:

tipe_fungsi nama_fungsi(daftar parameter)


{
statement;
return(ekspresi)
}

Tipe fungsi adalah tipe data dari hasil fungsi (tipe data dari ekspresi).
Parameter digunakan oleh fungsi untuk menerima data simbolik, yaitu data yang akan
diproses oleh fungsi. Statement return digunakan untuk mengembalikan hasil
(dalam hal ini, ekspresi) ke statement program yang memanggilnya.

Sebagai contoh akan dibuat fungsi bertipe long integer untuk menghitung
bilangan pangkat 3 sebagai berikut:

long pangkat3 (int k)


{
return(k*k*k);
}

Fungsi pangkat3 yang didefinisikan di atas, membutuhkan 1 parameter yang


bertipe integer (int k) dan menghasilkan bilangan yang bertipe long integer (long
pangkat3). Pernyataan return di dalam fungsi di atas digunakan untuk
mengembalikan hasil fungsi ke statement yang memanggilnya.

Setelah fungsi selesai didefinisikan, fungsi dapat dipanggil untuk digunakan.


Pemanggilan fungsi (function call) disertai dengan nilai yang akan diproses oleh
fungsi. Nilai tersebut disebut sebagai argumen. Banyaknya dan tipe argumen yang
digunakan untuk memanggil fungsi harus sama dengan banyaknya dan tipe paremeter
dari fungsi. Pemanggilan fungsi akan menyebabkan alur kontrol program berpindah
ke fungsi, mengeksekusi statement program dalam fungsi sampai selesai lalu kembali
ke statement program yang memanggilnya.

Sebagai contoh fungsi pangkat3 akan dipanggil dalam program42.cpp berikut


ini.

//program42.cpp
#include <iostream>
#include <iomanip>

using namespace std;


long pangkat3 (int k); //deklarasi fungsi kuadrat

int main( )
{
cout << "Bilangan Pangkat3 bilangan" << endl;
for (int bil =200; bil<=1000; bil+=200)

Modul IV : Fungsi 52
Praktikum C++ Dasar

cout <<setw(8)<<bil<<setw(12)<< pangkat3(bil) << endl;


// system ("pause");
}
long pangkat3 (int k)
{
return(k*k*k);
}

Statement return di dalam fungsi digunakan untuk memberikan hasil fungsi


ke statement yang memanggilnya. Pada contoh ini, ketika fungsi pangkat3
dipanggil, argumen bil menggantikan parameter k pada definisi fungsi pangkat3,
dan hasilnya berupa nilai pangkat3 dari argumen bil.

Untuk contoh berikutnya akan dibuat fungsi untuk menentukan bilangan yang
terbesar dari 2 bilangan beserta penggunaannya dalam program (lihat program43.cpp)
// program43.cpp
// mencari bilangan yang lebih besar dari 2 bilangan
#include <iostream>
using namespace std;

double besar(double x, double y); //deklarasi fungsi besar


int main( )
{
double i = 50;
double j = 75;
double a, b, max;

cout << " Diketahui I = " << i << " dan J = " << j << endl;
cout << " Bilangan yang lebih besar adalah: " << besar(i,j) << endl;
cout <<" Ketikkan 2 buah bilangan ";
cin >> a;
cin >> b;
max = besar(a,b); // memanggil fungsi besar
cout << " Bilangan yang lebih besar adalah : " << max <<endl;
// system(“pause”);
return 0;
}

//definisi fungsi besar: menghasilkan bilangan yang terbesar dari 2 bilangan


double besar(double x, double y)
{
if (x >= y)
return(x);
else
return(y);
}

Fungsi di atas, memerlukan 2 parameter yang bertipe double sehingga perlu 2


argumen pula dengan tipe yang sama untuk memanggilnya. Yang perlu diperhatikan
adalah banyaknya tipe data dari parameter fungsi harus sama dengan banyaknya dan
tipe data argumen fungsi ketika fungsi dipanggil.

Setelah fungsi dibuat, fungsi dapat digunakan dimanapun dalam program termasuk di
dalam fungsi yang lain. Sebagai contoh akan dibuat fungsi untuk menentukan
bilangan yang terbesar dari 3 bilangan dengan menggunakan fungsi besar yang sudah
dibuat seperti pada program44.cpp berikut.

Modul IV : Fungsi 53
Praktikum C++ Dasar

// program44.cpp
// mencari bilangan yang lebih besar dari 3 bilangan
#include <iostream>
using namespace std;

double besar(double x, double y); //deklarasi fungsi besar


double besar3(double x, double y, double z); //deklarasi fungsi besar3

int main( )
{
double i = 50;
double j = 75;
double k = 60;
double a, b, c, max;

cout <<" Diketahui I = " << i << " , J = " << j << " dan K = " << k
<< endl;
cout << " Bilangan yang terbesar adalah: " << besar3(i,j,k) << endl;
cout <<" Ketikkan 3 buah bilangan ";
cin >> a;
cin >> b;
cin >> c;
max = besar3(a,b,c); // memanggil fungsi besar
cout << " Bilangan yang terbesar adalah : " << max <<endl;
system(“pause”);
return 0;
}

//definisi fungsi besar: menghasilkan bilangan yang terbesar dari 2 bilangan


double besar(double x, double y)
{
if (x >= y)
return(x);
else
return(y);
}

//definisi fungsi besar3: menghasilkan bilangan yang terbesar dari 3


bilangan,
// dengan menggunakan fungsi besar
double besar3(double x, double y, double z)
{
return besar(x, besar(y,z));
}

Perhatikan fungsi besar3, fungsi ini memanggil fungsi besar sebanyak 2


kali. Pemanggilan fungsi seperti ini disebut pemanggilan secara hirarki, yaitu fungsi
yang memanggil fungsi lainnya. Yang perlu diperhatikan, fungsi yang akan digunakan
harus didefinisikan juga.

Soal Latihan submodul 4.2.1

1. Dengan menggunakan fungsi besar, buatlah program untuk mencari bilangan yang
terbesar dari 10 bilangan.

2. Buatlah program dengan fungsi untuk menentukan apakah angka yang


dimasukkan berupa bilangan ganjil atau bilangan genap.

3. Diketahui persamaan untuk menghitung jarak antara 2 titik dalam koordinat


cartesian:

Modul IV : Fungsi 54
Praktikum C++ Dasar

D = √¿ ¿

Persamaan di atas dapat digunakan untuk menghitung radius dari lingkaran yang
terbentuk oleh ke dua titik tadi. Buatlah fungsi untuk persamaan di atas. Buatlah
program untuk menerima input koordinat 2 buah titik, lalu menentukan jarak,
radius lingkaran, serta keliling dan luas lingkaran yang terbentuk dari ke dua titik
tadi.

4. Seorang nasabah bank meminjam uang sebanyak L dengan bunga sebesar i%


pertahun, dan pembayaran sebanyak m kali pertahun dan lama pinjam selama t
tahun, maka persamaan untuk menghitung besarnya pembayaran cicilan adalah:

Li
R= −mt
1−(1+i)

Buatlah fungsi untuk persamaan di atas, lalu buatlah program untuk menerima
data dan menghitung besarnya cicilan yang harus dibayar nasabah.
5. Perusahaan air bersih menagih pelanggannya berdasarkan jumlah pemakaian air
sesuai tabel berikut ini:
Jumlah pemakaian (m3) Tagihan .
0 – 100 Rp. 200.000,-
101 – 300 Rp. 200.000,- + Rp. 2.500,- untuk setiap m3 di atas 100
lebih dari 301 Rp. 500.000,- + Rp. 3.000,- untuk setiap m3 di atas 300

Pembacaan angka meteran air dilakukan tiap bulan. Buatlah program dengan
fungsi untuk membaca nama pelanggan, angka meter bulan lalu dan angka meter
bulan ini, lalu menghitung jumlah pemakaian air dan jumlah tagihan. Buatlah slip
tagihan yang berisi nama pelanggan, jumlah pemakaian air dan jumlah tagihan
yang harus dibayar. Jika diketahui angka meteran air berupa counter yang terdiri
dari 4 digit, program harus dapat mengatasi kemungkinan angka meter bulan ini
lebih kecil dari angka meter bulan lalu.

6. Buat program dengan fungsi untuk menghitung dan menabelkan hasil dari
persamaaan berikut ini:

F(x,y) = (x2 - y2)/(x2 + y2) untuk x = 2, 4, 6, 8


dan y = 6, 9, 12, 15, 18, 21

7. Buat program dengan fungsi untuk menghitung nilai akhir dan keterangan
“LULUS” jika nilai akhir >= 70, keterangan “TES PERBAIKAN” jika nilai akhir
antara 50 dan 70, dan keterangan “TIDAK LULUS” jika nilai akhir < 50, dari
sekelompok siswa. Komponen nilai akhir adalah tugas 30%, UTS 30% dan UAS
40%. Pada akhir program tampilkan pula banyaknya siswa yang lulus, tes
perbaikan dan tidak lulus.

8. Diketahui rumus konversi suhu dari skala celcius ke skala lain adalah sebagai
berikut:
4
Re amur= Celcius
5
Modul IV : Fungsi 55
Praktikum C++ Dasar

9
Fahrenheit= Celcius+32
5
Kelvin=Celcius+273

Buatlah fungsi yang menerima input nilai suhu pada skala celcius (bertipe real)
dan input jenis suhu hasil konversi yang diinginkan (bertipe karakter) dan
melakukan perhitungan konversi suhu berdasarkan input tersebut dan
menampilkan hasilnya.
Sebagai contoh:
Input: 100, R
Output: 100 derajat Celcius setara dengan 80 derajat Reamur.

9. Bilangan prima adalah bilangan integer n > 1 yang pembaginya adalah 1 dan n
(dirinya sendiri). Buatlah program dengan fungsi untuk menentukan apakah n
bilangan prima atau bukan.

10.a. Buatlah fungsi untuk menghitung faktorial.


10.b. Buatlah program dengan fungsi untuk menghitung koefisien Binomial dengan
menggunakan fungsi untuk menghitung faktorial (lihat no.10.a) :
n!
(nk )= k !(n−k )!

11. Buatlah program dengan fungsi untuk mengkonversikan tanggal seperti contoh
berikut:
input: 01/01/01  output: 01 Januari 2001

12.a. Buatlah fungsi yang menerima sebuah huruf: A, B, C, D, atau E dan


menghasilkan nilai numerik untuk masing-masing huruf (A = 4.0, B = 3.0, C =
2.0, D = 1.0, E = 0.0)
12.b. Buatlah fungsi yang menerima angka integer dan menghasilkan nilai huruf
sesuai dengan ketentuan berikut ini:
- 90.0 – 100 : A - 80.0 – 89.9 : B
- 70.0 – 79.9 : C - 60.0 – 69.9 : D
- 50.0 – 59.9 : E - kurang dari 50.0
:F
12.c. Buatlah program untuk membaca beberapa angka integer dan menghasilkan
nilai huruf dan nilai numerik untuk masing-masing angka integer dengan
menggunakan fungsi yang anda buat pada 12.a dan 12.b. ( fungsi return)

4.2.2. Void Function


Ada kalanya suatu fungsi tidak memiliki nilai yang harus dikembalikan
kepada program yang memanggil. Misalnya fungsi untuk menampilkan suatu
keterangan saja. Fungsi seperti ini, disebut void function. Karena fungsi ini tidak
mengembalikan hasil kepada statement program yang memanggilnya maka void

Modul IV : Fungsi 56
Praktikum C++ Dasar

function tidak memerlukan tipe data dan dipanggil dalam bentuk statement yang
berdiri sendiri. Bentuk umum fungsi ini:

void nama_fungsi(daftar parameter)


{
statement;
.....
}

Sama seperti fungsi sebelumnya, parameter digunakan oleh fungsi untuk


menerima data simbolik dan harus disertakan tipe data dari masing-masing
parameter. Bentuk umum daftar parameter adalah:

(tipedata parameter, tipedata& parameter, ...)

Simbol “&” di belakang tipe data menunjukkan bahwa parameter tersebut


adalah reference parameter. Parameter ini biasanya digunakan untuk menyimpan
hasil (output) dari fungsi. Dengan demikian, hasil fungsi tidak dikembalikan ke
statement program tetapi disimpan dalam parameter output ini. Dengan demikian void
function ini dapat “menghasilkan” satu hasil atau lebih tergantung dari banyaknya
parameter output yang didefinisikan.

Jika fungsi tidak memerlukan parameter maka tetap dituliskan sepasang tanda
kurung setelah nama fungsi. Bentuk umum void function yang tidak memerlukan
parameter:

void nama_fungsi()
{
statement;
.....
}

Sebagai contoh akan dibuat void function tanpa parameter untuk mencetak judul
seperti berikut:
void tampilkan_judul()
{
cout <<”PT Aria Perkasa Manunggal”<<endl;
cout <<”Jl. Kertadipura Tenggara 27R”<<endl;
cout <<”Kudus”<<endl;
}

Setelah fungsi selesai dibuat, maka langkah selanjutnya adalah menggunakan


(memanggil) fungsi dalam bentuk statement seperti berikut:

nama_fungsi(daftar argumen)

Argumen digunakan fungsi untuk menerima data yang sebenarnya yang akan diproses
oleh fungsi dan juga menyimpan hasil dari fungsi jika ada. Tipe data dan banyaknya
argumen harus sama dengan tipe data dan banyaknya parameter dari fungsi yang
dipanggil.

Modul IV : Fungsi 57
Praktikum C++ Dasar

Sebagai contoh akan dibandingkan function dengan return dan void function
untuk operasi tambah dan kurang (lihat program45.cpp di bawah ini).
//program45.cpp
#include <iostream>
using namespace std;

int tambah(int x,int y) // definisi function dengan return


{
int hasil;
hasil=x+y;
return hasil;
}

void kurang(int x, int y) // definisi void function dengan parameter


{
cout<<"Hasil pengurangan bilangan "<<x<<" - "<<y<<" = "<<x-y;
}

int main()
{
int bil,a,b;
cout<<"Masukkan bilangan A : ";cin>>a;
cout<<"Masukkan bilangan B : ";cin>>b;
cout <<endl;
bil=tambah(a,b); //pemanggilan fungsi tambah(a,b)
cout<<"Hasil penambahan bilangan " <<a<<" + "<<b<<" = "<<bil<<endl;
kurang(a,b); //pemanggilan fungsi kurang(a,b)
// system("pause");
}

Pada program45.cpp di atas, perhatikan perbedaan definisi dan pemanggilan


fungsi tambah dan fungsi kurang. Secara umum perbedaan antara fungsi dengan
return dan fungsi dengan void dapat dilihat pada tabel 4.2 di halaman berikut.

Contoh fungsi berikut ini adalah fungsi yang tidak mengembalikan hasil ke
fungsi main karena hasil fungsi langsung dicetak. Fungsi ini digunakan untuk
mencetak karakter ‘*’ dalam bentuk segitiga seperti berikut, untuk n = 5 maka
hasilnya:
*
* *
* * *
* * * *
* * * * *

Tabel 4.2 Perbandingan antara Fungsi dengan return dan Fungsi dengan void
Fungsi dengan return Fungsi dengan void
Deklarasi tipedata namafungsi (daftar_parameter) void namafungsi (daftar_parameter)
Contoh: int tambah(int x, int y) Contoh: void kurang(int x, int y)
Definisi Definisi fungsi selalu diakhiri dengan Tidak ada statement return dalam
statement: definisi fungsi
return (hasil);
Pemanggilan Dalam suatu ekspresi, contoh: Statement berdiri sendiri, contoh:
T = tambah(a,b); kurang(a,b);
Hasil Hanya dan harus menghasilkan sebuah Tidak menghasilkan apapun atau
hasil. menghasilkan lebih dari 1 hasil.

//program star.cpp

Modul IV : Fungsi 58
Praktikum C++ Dasar

#include <iostream>
using namespace std;

void printst(int blank, int starline);

void main()
{
int baris, k, sumblank;

cout<<"Ketikkan banyaknya baris bintang yang dicetak(1 - 20): ";


cin>> baris;
while (baris <0 || baris > 20)
{
cout<<"Banyaknya baris antara 1 - 20" <<endl;
cin >> baris;
}

cout <<endl << endl;


sumblank = 30;
for (k = 1; k <= baris; k++)
{ printst(sumblank, k); //memanggil fungsi printst
sumblank--;
}
}

void printst(int b, int s)


// fungsi untuk mencetak sebaris blank dan *
{
int j;
for (j = 1; j <= b; j++)
cout <<' ';
for (j = 1; j <= s; j++)
cout <<" * ";
cout<<endl;}

Soal Latihan submodul 4.2.2

1. Modifikasi program45.cpp di atas sehingga dapat digunakan untuk menghitung


kali dan bagi selain untuk tambah dan kurang.
2. Modifikasi program star.cpp sehingga dapat mencetak bintang dalam bentuk
segitiga terbalik.
3. Buatlah program dengan void function untuk menentukan apakah angka yang
dimasukkan berupa bilangan ganjil atau bilangan genap.
4. Diketahui persamaan untuk menghitung jarak antara 2 titik dalam koordinat
cartesian:

D = √¿ ¿

Persamaan di atas dapat digunakan untuk menghitung radius dari lingkaran yang
terbentuk oleh ke dua titik tadi. Buatlah fungsi untuk persamaan di atas. Buatlah
program dengan void function untuk menerima input koordinat 2 buah titik, lalu
menentukan jarak, radius lingkaran, serta keliling dan luas lingkaran yang
terbentuk dari ke dua titik tadi.
5. Buat program dengan void function untuk kalkulator sederhana (+ - * /) yang
menerima 2 angka (operan) dan menghasilkan angka hasil ke 4 operator tadi
beserta keterangannya. Sebagai contoh:

Modul IV : Fungsi 59
Praktikum C++ Dasar

Input: 5, 2
Output Operator + :5+2 =7
Operator - :5- 2 =3
Operator * : 5 * 2 = 10
0perator / : 5 / 2 = 0.5
6. Diketahui rumus konversi suhu dari skala celcius ke skala lain adalah sebagai
berikut:
4
Re amur= Celcius
5
9
Fahrenheit= Celcius+32
5
Kelvin=Celcius+273

Buatlah void function yang menerima input nilai suhu pada skala celcius (bertipe
real) dan input jenis suhu hasil konversi yang diinginkan (bertipe karakter) dan
melakukan perhitungan konversi suhu berdasarkan input tersebut dan
menampilkan hasilnya.
Sebagai contoh:
Input: 100, R
Output: 100 derajat Celcius setara dengan 80 derajat Reamur.

7. Bilangan prima adalah bilangan integer n > 1 yang pembaginya adalah 1 dan n
(dirinya sendiri). Buatlah program dengan void fungsi untuk menentukan apakah
n bilangan prima atau bukan.

8.a. Buatlah void fungsi untuk menghitung faktorial.


8.b. Buatlah program dengan fungsi untuk menghitung koefisien Binomial dengan
menggunakan fungsi untuk menghitung faktorial (lihat no.10.a) :
n!
(nk )= k !(n−k )! ( fungsi void )

9. Buatlah program dengan void fungsi untuk mengkonversikan tanggal seperti


contoh berikut:
input: 01/01/01  output: 01 Januari 2001

10.a. Buatlah void fungsi yang menerima sebuah huruf: A, B, C, D, atau E dan
menghasilkan nilai numerik untuk masing-masing huruf (A = 4.0, B = 3.0, C =
2.0, D = 1.0, E = 0.0)
10.b. Buatlah void fungsi yang menerima angka integer dan menghasilkan nilai huruf
sesuai dengan ketentuan berikut ini:
- 90.0 – 100 : A - 80.0 – 89.9 : B
- 70.0 – 79.9 : C - 60.0 – 69.9 : D
- 50.0 – 59.9 : E - kurang dari 50.0
:F
10.c. Buatlah program untuk membaca beberapa angka integer dan menghasilkan
nilai huruf dan nilai numerik untuk masing-masing angka integer dengan
menggunakan fungsi yang anda buat pada 10.a dan 10.b.

Modul IV : Fungsi 60
Praktikum C++ Dasar

4.3 Parameter

Komunikasi (lalu lintas data) antara fungsi dengan statement program yang
memanggilnya dilakukan melalui parameter. Ada 2 jenis parameter yaitu:
1. Value parameter: hanya menerima nilai dari argumen ketika fungsi dipanggil.
Perubahan nilai hanya mempunyai efek di dalam fungsi. Biasanya digunakan
untuk memasukkan data input ke fungsi.
2. Reference parameter: menerima nilai dan lokasi memori dari argumen ketika
fungsi dipanggil. Perubahan nilai mempunyai efek baik di dalam fungsi maupun
setelah fungsi selesai dipanggil. Biasanya digunakan untuk menyimpan hasil
fungsi (output fungsi).

Program46.cpp menunjukkan contoh penggunaan value parameter dan dan


program47.cpp menunjukkan perbedaan penggunaan value dan reference parameter.

//program46.cpp: value parameter


#include <iostream>
using namespace std;

//deklarasi fungsi nilai


void nilai(int n);

int main()
{
int angka = 8;
cout <<"Sebelum pemangilan fungsi: "
<<"Isi variabel angka = " <<angka
<<endl;

// memanggil fungsi nilai


nilai(angka);

cout <<"Setelah pemangilan fungsi: "


<<"Isi variabel angka = " <<angka
<<endl;

return 0;
}

//definisi fungsi nilai


void nilai(int n)
{
cout <<endl<<"Di dalam fungsi: "
<<"Isi variabel angka mula-mula = " <<n
<<endl;

// nilai variabel diubah

n = 15;
cout <<"Di dalam fungsi: "
<<"Isi variabel angka setelah diubah= " <<n
<<endl<<endl;
}

Perhatikan hasil eksekusi program46.cpp, perubahan nilai angka yang dilakukan di


dalam fungsi tidak mempunyai efek setelah fungsi selesai dipanggil karena hasil

Modul IV : Fungsi 61
Praktikum C++ Dasar

fungsi tidak dikembalikan ke program yang memanggilnya serta parameter yang


digunakan berjenis value parameter.
//program47.cpp: value & reference parameter
#include <iostream>
using namespace std;

//deklarasi fungsi
void bacanilai(int& n);
void cetak(int n);

int main()
{
int a;

cout <<"Program untuk mengkonversi angka ke huruf"


<<endl;
bacanilai(a);
cetak(a);
return 0;
}

//definisi fungsi bacanilai


void bacanilai(int& a)
{
cout<<" Masukkan nilai angka : ";
cin>>a;
cout<<endl<<" Nilai yang dimasukkan adalah " << a << endl;
}

//definisi fungsi cetak


void cetak(int b)
{
cout<<" Hasil konversi nilai huruf: ";
if (b >= 90)
cout<<" A" << endl;
else if (b >= 80)
cout<<" B" << endl;
else if (b >= 70)
cout<<" C" << endl;
else if (b >= 60)
cout<<" D" << endl;
else if (b >= 50)
cout<<" E" << endl;
else
cout<<" F" <<endl;
}

Hasil eksekusi Program47.cpp menunjukkan perubahan isi parameter pada fungsi


bacanilai(a), yang sebelum fungsi dipanggil parameter a tidak terdefinisi isinya,
setelah fungsi dipanggil, parameter a sudah berisi nilai dan digunakan oleh fungsi
cetak(a). Untuk lebih jelasnya, dapat dilihat perubahan ini variabel bil1, bil2,
dan kar, setelah pemanggilan fungsi fsatu dan fdua pada propram48.cpp berikut
ini.
//program48.cpp: value & reference parameter
#include <iostream>
using namespace std;

//deklarasi fungsi
void fsatu(int a, int& b, char c);
void fdua(int& x, int y, char& z);

int main()

Modul IV : Fungsi 62
Praktikum C++ Dasar

{
int n1, n2;
char kar;

n1 = 10;
n2 = 15;
kar = 'A';

cout <<" Pada program utama, kondisi awal : "<<endl


<<" bil1 = "<< n1 <<" , bil2 = "<< n2
<<" dan karakter = " << kar <<endl;
cout <<endl;

fsatu(n1, n2, kar);

cout <<" Pada program utama, setelah fungsi fsatu : " <<endl
<<" bil1 = "<< n1 <<" , bil2 = "<< n2
<<" dan karakter = " << kar <<endl;
cout<<endl;

fdua(n1, n2, kar);

cout <<" Pada program utama, setelah fungsi fdua : " << endl
<<" bil1 = "<< n1 <<" , bil2 = "<< n2
<<" dan karakter = " << kar <<endl;

return 0;
}

void fsatu(int a, int& b, char c)


{
int s;

s = a;
a++;
b = b * 2;
c = 'B';

cout <<"Di dalam fungsi fsatu, hasil fungsi : " << endl
<<"bil1 = "<< a <<" , bil2 = "<< b
<<" karakter = " << c
<<" dan s = " << s <<endl;
cout <<endl;
}

void fdua(int& x, int y, char& z)


{
x++;
y = y * 2;
z = 'C';

cout <<"Di dalam fungsi fdua, hasil fungsi : " << endl
<<"bil1 = "<< x <<" , bil2 = "<< y
<<" dan karakter = " << z <<endl;
cout <<endl;
}

Perhatikan hasil eksekusi program48.cpp, tanda “&” pada parameter fungsi


mengakibatkan perubahan parameter yang dilakukan di dalam fungsi mempunyai
dampak juga di luar fungsi. Hal ini dikarenakan, parameter fungsi menggunakan
lokasi memori yang sama dengan argumen fungsi, sehingga perubahan yang
dilakukan di dalam fungsi akan “terasa” efeknya di luar fungsi.

Modul IV : Fungsi 63
Praktikum C++ Dasar

Latihan submodul 4.3

1. Modifikasikan program4.5 di atas sehingga hanya menggunakan sebuah void


function untuk membuat kalkulator sederhana (operasi +, - , * dan /)
2. Diketahui jari-jari dan tinggi selinder. Buat algoritma dengan fungsi untuk
menghitung luas permukaan dan volume selinder

3. Buatlah program dengan fungsi untuk menampilkan menu yang berisi macam-
macam bentuk bangun 2 dimensi (segitiga, persegi panjang, bujur sangkar,
lingkaran, jajaran genjang). Berdasarkan bentuk yang dipilih dari menu, mintalah
data yang diperlukan untuk menghitung luas dan keliling serta menampilkan
hasilnya.

4. Buatlah fungsi untuk menghitung resistansi total beberapa resistor yang dipasang
secara seri dan paralel. Buatlah pula algoritma utamanya

5. Sebuah toko permen menjual barang-barang dagangannya dengan harga $1 atau


kurang. Diasumsikan semua pelanggan membayar dengan uang $1. Buatlah fungsi
yang mempunyai paremeter harga barang dan mencetak banyaknya setiap jenis
koin yang perlu dikembalikan sehingga jumlah koin minimum. Sebagai contoh,
untuk pembelian sebesar $0.33 maka uang kembaliannya adalah $0.67 yang terdiri
dari 2 koin quarter ($0.25), 1 koin dime ($0.10), 1 koin nickel ($0.05), dan 2 koin
penny ($0.01)

6. Buatlah fungsi untuk menghitung keliling, luas permukaan dan volume sebuah
kotak jika diketahui panjang, lebar dan tingginya. Buatlah pula algoritma
utamanya.
Perluas program di atas sehingga selain menghitung keliling, luas dan isi kotak,
juga dapat menghitung keliling, luas dan isi kubus, selinder, kerucut dan bola.
Perhatikan input yang diperlukan untuk menghitung keliling, luas dan isi dari
masing-masing bentuk. ( fungsi void)

4.4. Lingkup Variabel


Berdasarkan tempat definisi suatu variabel, dapat dibedakan ruang lingkup
keberadaan variabel tersebut, yaitu:
1. Variabel global atau variabel eksternal: definisi variabel dilakukan di awal
program (sebelum fungsi main) sehingga keberadaan variabel (eksis) adalah
selama program dijalankan, baik di dalam fungsi main maupun di dalam fungsi
lainnya (lihat contoh program global.cpp).
2. Variabel lokal atau variabel otomatis: definisi variabel dilakukan dalam suatu
fungsi sehingga keberadaan variabel itu hanya selama fungsi dieksekusi. Setelah
fungsi selesai dieksekusi, variabel tersebut tidak ada lagi (lihat contoh program
varlokal.cpp)
3. Variabel static: variabel yang didefinisikan di dalam fungsi tetapi keberadaan
variabel tidak hilang meskipun fungsi telah selesai dieksekusi. Nilai variabel tetap
dipertahankan, sehingga dapat dikenali pada pemanggilan fungsi untuk tahap

Modul IV : Fungsi 64
Praktikum C++ Dasar

berikutnya. Inisialisasi oleh pemrograman dilakukan sekali saja selama program


dijalankan (lihat contoh program varstatis.cpp)
//global.cpp
#include <iostream>
using namespace std;

int lada = 550; //variabel eksternal (global)

void tambah(); //prototipe fungsi

void main()
{
cout << lada << endl;
tambah();
cout << lada << endl;
tambah();
cout << lada << endl;
}
//Definisi fungsi
void tambah()
{
lada++;
}

Perhatikan hasil eksekusi program, meskipun di dalam fungsi main dan tambah
tidak mendefinisikan variabel lada, tetapi variabel ini dikenal di dalam kedua fungsi
tersebut dan nilai dari variabel lada dapat diubah oleh fungsi tambah.

//program varlokal.cpp
#include <iostream>
using namespace std;

void alpha();

void main()
{
int x=22;
double y=2.22
cout << “Pada main: x = “ << x << “ y = “ << y << endl;

alpha();
cout << “Pada main setelah fungsi alpha: x = “ << x << “ y = “ << y <<
endl;
}

//Definisi fungsi
void alpha()
{
int x = 20;
double y = 3.14;
cout << “Pada alpha : x = “ << x << “ y = “ << y << endl;
}

Perhatikan hasil eksekusi progam varlokal.cpp, perubahan yang dilakukan di dalam


fungsi alpha tidak dikenal di fungsi main, karena variabel x dan y yang
didefinisikan di fungsi alpha adalah variabel lokal.

//program varstatis.cpp
#include <iostream>
using namespace std;

void tes();

Modul IV : Fungsi 65
Praktikum C++ Dasar

int main ()
{
int i;
for (i = 1; i <= 5 ; i++)
tes();
return 0;
}

void tes()
{
static int x = 0;
int y = 10;

x = x + 2;
y = y + 1;

cout <<" Di dalam fungsi tes, nilai x = " << x <<" dan y = "
<< y << endl;
}

Perhatikan hasil eksekusi program varstatis.cpp, variabel x yang didefinisikan dalam


fungsi tes berjenis static, sehingga tetap eksis meskipun fungsi tes telah selesai
dieksekusi, tetapi variabel y berjenis lokal, sehingga hanya eksis di dalam fungsi
tes saja.

Soal Latihan Modul 4


1. Buatlah program untuk menerima masukan sekelompok bilangan, lalu
menentukan apakah bilangan tersebut bilangan genap atau bilangan ganjil, dan
menentukan banyaknya bilangan genap dan bilangan ganjil dari kelompok
bilangan yang dimasukkan tadi.
2. Apakah ouput dari program berikut, jelaskan bagaimana terjadinya output
tersebut.
#include <iostream>

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


void dua(int p, int q);
void tiga(int& x, int y);
using namespace std;

int main()
{
int n = 10;

cout <<"Di dalam main, angka mula-mula = " << n << endl << endl;
satu(n, n);

cout <<"Di dalam main, setelah fungsi satu, angka menjadi = "
<< n << endl << endl;

dua(n,n);
cout <<"Di dalam main, setelah fungsi dua, angka menjadi = "
<< n << endl << endl;

tiga(n,n);
cout <<"Di dalam main, setelah fungsi tiga, angka menjadi = "
<< n << endl << endl;

return 0;

Modul IV : Fungsi 66
Praktikum C++ Dasar

void satu(int& a, int& b)


{
cout <<" Di dalam fungsi satu, a mula=mula = "<< a
<<" dan b mula-mula = "<< b << endl;
a = a + 2;
cout <<" Di dalam fungsi satu, setelah penambahan, a menjadi = "
<< a << endl;

b = b * 2;
cout <<" Di dalam fungsi satu, setelah perkaliam, b menjadi = "
<< b << endl << endl;
}

void dua(int p, int q)


{
cout <<" Di dalam fungsi dua, p mula=mula = "<< p
<<" dan q mula-mula = "<< q << endl;
p = q * 2;
cout <<" Di dalam fungsi dua, setelah perkalian, p menjadi = "
<< p << endl;

q = q + 2;
cout <<" Di dalam fungsi dua, setelah penambahan, q menjadi = "
<< q << endl << endl;
}
void tiga(int& x, int y)
{
cout <<" Di dalam fungsi tiga, x mula=mula = "<< x
<<" dan y mula-mula = "<< y << endl;
x = x * x;
cout <<" Di dalam fungsi tiga, setelah perkalian, x menjadi = "
<< x << endl;

y = y + y;
cout <<" Di dalam fungsi tiga, setelah penambahan, y menjadi = "
<< y << endl << endl;
}

3. Apakah ouput dari program berikut, jelaskan bagaimana terjadinya output


tersebut.
#include <iostream>
using namespace std;

int t;

void fsatu (int& a);

int main()
{
t = 15;
cout <<"Di dalam main, angka mula-mula = " << t << endl << endl;
fsatu(t);

cout <<"Di dalam main, setelah fsatu, angka menjadi = "


<< t << endl << endl;
return 0;
}

void fsatu(int& a)
{
cout <<" Di dalam fsatu, a mula=mula = "<< a
<<" dan t mula-mula = "<< t << endl;
a = a + 2;
cout <<" Di dalam fsatu, setelah penambahan, a menjadi = "

Modul IV : Fungsi 67
Praktikum C++ Dasar

<< a <<" dan t menjadi = " << t <<endl;

t = t * 2;
cout <<" Di dalam fsatu, setelah perkaliam, a menjadi = "
<< a <<" dan t menjadi = "<< t << endl << endl;
}

4. Sebuah perusahaan ingin mengkomputerisasikan sistem pembayaran gaji


mingguannya. Sebagai input adalah nama pegawai, jumlah jam kerja seminggu,
upah per jam, status perkawinan, dan banyaknya tanggungan. Dua data yang
terakhir dibutuhkan untuk menentukan besarnya penghasilan tidak kena pajak
(PTKP) dan menghitung pajak penghasilan (PPh). Status perkawinan
direpresentasikan dengan nilai boolean yang menunjukkan apakah si pegawai telah
menikah atau belum. Jumlah jam kerja normal adalah 40 jam, lebih dari itu
dihitung sebagai lembur dan dibayar 1.5 kali upah normal.
Penghasilan yang tidak dikenai pajak (PTKP) dihitung sebagai berikut:
- untuk pegawai tidak menikah: PTKP = Rp. 400.000,-
- untuk pegawai menikah: PTKP ditambah dengan Rp. 350.000,-
- untuk pegawai yang mempunyai tanggungan: PTKP ditambah dengan Rp.
300.000 per tanggungan.
Penghasilan yang dikenai pajak (PKP) adalah upah total – PTKP total.
Pajak penghasilan dihitung berdasarkan besarnya PKP sebagai berikut:
PKP Pajak Penghasilan
Rp. 0 – Rp.1.000.000 0%
Rp. 1.000.001 – Rp. 2.500.000 5%
Rp. 2.500.001 – Rp. 5.000.000 10%
Rp. 5.000.001 – Rp. 10.000.000 15%
Lebih dari Rp. 10.000.000 20%

Buatlah fungsi untuk menghitung upah total, PTKP, dan Pajak Penghasilan.
Buatlah pula program utama untuk menghitung dan mecetak slip gaji yang
diterima oleh seorang pegawai beserta pajak penghasilan yang dibayarnya.

5. Biaya asuransi ladang pertanian yang standar adalah 3.5 persen dari nilai
tanggungan dikalikan luas tanah. Tetapi untuk ladang kacang kedelai, kentang,
bawang merah dan cabai, biaya asuransinya adalah 2 kali biaya standar. Dan
untuk ladang padi, singkong dan jagung, biaya asuransinya adalah 1.5 kali biaya
standar. Seorang petani dapat mempunyai sampai 3 jenis ladang.
a. Buatlah fungsi untuk menghitung biaya asuransi untuk tiap jenis ladang.
b. Buatlah fungsi untuk mencetak slip pembayaran asuransi yang berisi nama
petani, jenis-jenis ladang, biaya asuransi untuk tiap jenis ladang dan nilai
asuransi total yang harus dibayar petani.
c. Buatlah program utama untuk membaca data input nama petani, jenis-jenis
ladangnya, nilai tanggungan per hektar untuk tiap jenis ladang dan luas dari
tiap jenis ladang (hektar). Lalu menggunakan fungsi-fungsi di atas untuk
menghitung besarnya asuransi dari tiap jenis ladang, menghitung besarnya
asuransi total dan mencetak slip pembayaran.

NPM Ganjil NPM Genap


Subbab 4.2.1 (fungsi return) 8 12
Subbab 4.2.2 (fungsi void) 4 8
Subbab 4.3 (fungsi void) 5 6

Modul IV : Fungsi 68
Praktikum C++ Dasar

Subject email: PRAKTKUM PR 4 Kelas B


Kumpul: tgl 02 Oktober 2020 jam 07.00

Nama file: NPM dan nama

Modul IV : Fungsi 69

Anda mungkin juga menyukai