2. Konsep Fungsi
• Fungsi pada hakekatnya serupa dengan
prosedur tetapi dalam pelaksanaannya harus
mengembalikan suatu nilai ke program yang
menggunakan (memanggil) fungsi. Prosedur
tidak harus mengembalikan nilai, hanya bisa
mengembalikan nilai melalui parameter
input/output (in-out), atau variabel global.
9/10/2014 Algoritma Pemrograman, @SUARGA 2
3. Bentuk Umum
Fungsi nama_fungsi ( parameter formal ) tipe_hasil
{ spesifikasi fungsi }
Deklarasi
{ variabel lokal }
Deskripsi
{ langkah / proses yang dilakukan oleh fungsi }
…………….
…………….
{ pengembalian nilai }
return hasil.
9/10/2014 Algoritma Pemrograman, @SUARGA 3
4. Contoh sederhana:
• Fungsi Matematis : f(x) = x2 + 8x + 10.
Fungsi F ( input real x ) real
{ menghitung nilai fungsi f(x) = x^2 + 8x + 10 }
Deklarasi
real y;
Deskripsi
y x * x + 8 * x + 10;
return y;
9/10/2014 Algoritma Pemrograman, @SUARGA 4
5. Fungsi Nama-Bulan
• Algoritma Tanggal_Lahir
• { algoritma ini memanggil fungsi untuk menampilkan nama bulan }
•
• Deklarasi
• integer tanggal, bulan, tahun;
• string nama_bulan;
• fungsi Nama_bulan ( input integer bln ) string;
•
• Deskripsi
• write ( “tanggal : “ ); read ( tanggal );
• write ( “bulan : “ ); read ( bulan );
• write ( “tahun : “ ); read ( tahun );
•
• nama_bulan Nama_bulan ( bulan );
• write ( tanggal, ‘ – ‘, nama_bulan, ‘ – ‘, tahun );
•
9/10/2014 Algoritma Pemrograman, @SUARGA 5
6. fungsi Nama_bulan ( input integer bln ) string
{ fungsi yang mengembalikan nama bulan berdasarkan angka bulan }
Deklarasi
string nama_bln;
Deskripsi
case ( bln )
1 : nama_bln “Januari”;
2 : nama_bln “Februari”;
3 : nama_bln “Maret”;
4 : nama_bln “April”
…
11 : nama_bln “Nopember”;
12 : nama_bln “Desember”;
endcase.
return nama_bln;
9/10/2014 Algoritma Pemrograman, @SUARGA 6
8. Fungsi digit (input integer d ) string
{ fungsi yang mengubah angka menjadi kata }
Deklarasi.
string kata;
Deskripsi
case ( d )
0 : kata “nol”;
1 : kata “satu”;
2 : kata “dua”;
3 : kata “tiga”;
4 : kata “empat”;
5 : kata “lima”;
6 : kata “enam”;
7 : kata “tujuh”;
8 : kata “delapan”;
9 : kata “sembilan”;
endcase.
return kata;
9/10/2014 Algoritma Pemrograman, @SUARGA 8
9. Angka ke Kata (2 digit)
• Selanjutnya bagaimana menterjemahkan angka
maksimum 2 digit (maksimum 99) kedalam kata. Angka
tersebut harus dipisahkan menjadi d2 puluhan dan d1
satuan, dengan cara sebagai berikut:
d2 angka 10; yaitu hasil bagi bulat dari angka
dengan 10
d1 angka % 10; yaitu sisa pembagian dari angka
dengan 10
• Misalnya : angka 25, maka d2 = 2 dan d1 = 5,
kemudian d2 diterjemahkan ke kata dan ditambah kata
“puluh” disambung dengan terjemahan d1 dalam kata,
sehingga: angka = digit(d2) + “puluh “ + digit(d1).
9/10/2014 Algoritma Pemrograman, @SUARGA 9
10. Algoritma Angka_2_digit
{ menterjemahkan angka maksimum dua digit menjadi kalimat }
Deklarasi.
integer angka, d2, d1;
string angka1, angka2;
fungsi digit ( input integer d ) string;
Deskripsi.
write ( “Masukkan angka 2 digit : “);
read ( angka );
d2 angka 10;
d1 angka % 10;
{ perlu diseleksi apakah angka diatas 20 atau dibawah 20 }
9/10/2014 Algoritma Pemrograman, @SUARGA 10
11. if ( d2 > 1 )
then angka2 digit ( d2 ) + “puluh”;
if ( d1 = 0 )
then angka1 ‘ ‘;
else angka1 digit ( d1 ) ;
endif.
{ angka 10 hingga 19 }
else if ( d2 = 1 )
then if ( d1 = 0 )
then angka2 “sepuluh”;
angka1 ‘ ‘;
else if ( d1 = 1 )
then angka2 “sebelas”;
angka1 ‘ ‘;
else angka2 digit ( d1 ) + “belas”;
angka1 ‘ ‘;
endif.
endif.
9/10/2014 Algoritma Pemrograman, @SUARGA 11
13. • fungsi digit ( input integer d ) string
• { menterjemahkan digit ke dalam satu kata }
• Deklarasi
• string kata;
• Deskripsi
• case ( d )
• 1 : kata “satu”;
• 2 : kata “dua”;
• 3 : kata “tiga”;
• 4 : kata “empat”;
• 5 : kata “lima”;
• 6 : kata “enam”;
• 7 : kata “tujuh”;
• 8 : kata “delapan”;
• 9 : kata “sembilan”;
• endcase.
• return kata;
9/10/2014 Algoritma Pemrograman, @SUARGA 13
14. Fungsi dalam C++
• Pada hakekatnya cara mendefinisikan Prosedur
dan Fungsi dalam C++ tidak ada perbedaan
menyolok.
tipe_return Nama_fungsi(argume) {
… isi fungsi ….
return (hasil);
}
• Prosedur biasa-nya memakai tipe void artinya
tidak mengembalikan nilai.
• Fungsi memakai tipe sesuai dengan tipe data dari
variabel yang dikembalikan (return variable).
9/10/2014 Algoritma Pemrograman, @SUARGA 14
15. contoh
/*******************************************
* Triangle -- compute area of a triangle *
* *
* Parameters *
* width -- width of the triangle *
* height -- height of the triangle *
* *
* Returns *
* area of the triangle *
*******************************************/
float triangle(float width, float height)
{
float area; // Area of the triangle
area = width * height / 2.0;
return (area);
}
Fungsi dipanggil sbb: LuasSegi3 = triangle( 10, 5) , menghasilkan 25.0
9/10/2014 Algoritma Pemrograman, @SUARGA 15
16. Call by Value
• Secara default C++ mengenal parameter
dalam bentuk call-by-value, yaitu parameter
aktual hanya menyerahkan nilai-nya ke
argumen. Sehingga walaupun nilai dari
argumen ini berubah di-dalam fungsi nilai
paramter aktual-nya tidak berubah.
9/10/2014 Algoritma Pemrograman, @SUARGA 16
17. Contoh Call-by-Value
#include <iostream>
using namespace std;
// This function won't work
// C++ mengenal call by Value
void inc_counter(int counter)
{
++counter;
}
main()
{
int a_count = 0; // Random counter
inc_counter(a_count);
// nilai a_count tetap nol
cout << a_count << 'n';
return (0);
}
9/10/2014 Algoritma Pemrograman, @SUARGA 17
18. Call-by-Reference
• Agar parameter aktual ber-interaksi dengan
argumen maka harus dilakukan call-by-reference.
• Yaitu dengan menambahkan simbol ‘&’ didepan
argumen, misalnya:
void inc_counter(int &counter)
{
++counter;
}
9/10/2014 Algoritma Pemrograman, @SUARGA 18
19. contoh
// Works, call by reference
#include <iostream>
using namespace std;
// perhatikan argumen memakai &
void inc_counter(int &counter)
{
++counter;
}
main ()
{
int a_count = 0; // Random counter
inc_counter(a_count);
// hasilnya 1
cout << a_count << 'n';
return (0);
}
9/10/2014 Algoritma Pemrograman, @SUARGA 19
24. Function Overloaded
• Nama yang sama digunakan beberapa fungsi,
biasa-nya dalam pemanggilan tipe parameter
menjadi acuan dari fungsi yang akan dipanggil.
9/10/2014 Algoritma Pemrograman, @SUARGA 24
26. Fungsi Rekursif
• Prosedur atau fungsi rekursif adalah prosedur
atau fungsi yang secara berulang kali memanggil
dirinya sendiri, hingga dicapainya suatu kondisi
yang membuatnya berhenti.
• Suatu prosedur atau fungsi boleh saja ditulis
normal tanpa rekursif namun apabila komputasi
yang dilaksanakannya merupakan suatu proses
yang berulang maka ada baiknya ditulis rekursif
agar kelihatan lebih sederhana.
• Pada hakekatnya prosedur rekursif biasanya di-
eksekusi lebih lama dibanding perulangan biasa,
karena secara internal prosedur rekursif memakai
“stack memory” yang biasanya terbatas.
9/10/2014 Algoritma Pemrograman, @SUARGA 26
27. • Sebagai contoh, ketika menghitung faktorial,
katakanlah 6!, maka secara normal bisa ditulis
sebagai:
fact = 6 * 5 * 4 * 3 * 2 * 1 = 720;
atau dalam bentuk perulangan:
fact = 1;
for i=2 to 6
fact = fact * i;
9/10/2014 Algoritma Pemrograman, @SUARGA 27
28. bentuk rekursif dari komputasi faktorial ini dapat
ditulis juga sebagai berikut:
6! = 6 * 5!
= 6 * 5 * 4!
= 6 * 5 * 4 * 3!
= 6 * 5 * 4 * 3 * 2!
= 6 * 5 * 4 * 3 * 2 * 1!
= 6 * 5 * 4 * 3 * 2 * 1 * 0!
dimana 0! = 1.
9/10/2014 Algoritma Pemrograman, @SUARGA 28
29. • Terlihat pada bentuk tersebut diatas adanya proses
perhitungan yang rekursif, karena secara berulang
memanggil fungsi faktorial dengan dimensi yang
berkurang. Bentuk formula rekursif ini dapat
didefinisikan sebagai berikut:
n! = 1 bila n = 0
= n*(n-1)! bila n > 0
bentuk fungsi rekursifnya sebagai berikut:
fungsi factorial(N) int
if (N = 0)
then return 1
else return (N*factorial(N-1));
9/10/2014 Algoritma Pemrograman, @SUARGA 29
30. • Dalam C++, fungsi ini bisa ditulis sbb:
long faktorial (long N) {
if (N == 0)
return (1);
else
} return (N*Factorial(N-1));
• Cara lain:
long factorial (long a) {
if (a > 1)
return (a * factorial(a-1));
else
return(1);
}
9/10/2014 Algoritma Pemrograman, @SUARGA 30
32. 1-digit angka ke kata dalam C++
//Angka1Digit.cpp
//mengubah digit angka ke kata
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
using namespace std;
//prototype
string digit(int d);
int main() {
int angka;
string kata="";
char ulang;
ulang = 'Y';
9/10/2014 Algoritma Pemrograman, @SUARGA 32
33. while (ulang =='Y') {
cout << "Masukkan 1 digit angka n";
cout << "Negatif berarti EXIT : ";
cin >> angka;
if (angka >= 0) {
kata = digit(angka);
cout << angka << " = " << kata << "nn";
}
else ulang = 'N';
}
system("PAUSE");
return 0;
}
9/10/2014 Algoritma Pemrograman, @SUARGA 33
34. string digit(int d) {
string kata;
kata = "? angka";
switch(d) {
case 0 : kata = "nol"; break;
case 1 : kata = "satu"; break;
case 2 : kata = "dua"; break;
case 3 : kata = "tiga"; break;
case 4 : kata = "empat"; break;
case 5 : kata = "lima"; break;
case 6 : kata = "enam"; break;
case 7 : kata = "tujuh"; break;
case 8 : kata = "delapan"; break;
case 9 : kata = "sembilan"; break;
default : cout << "bukan 1 digitn";
}
return kata;
}
9/10/2014 Algoritma Pemrograman, @SUARGA 34
39. string digit(int d) {
string kata;
kata = "? angka";
switch(d) {
case 0 : kata = "nol"; break;
case 1 : kata = "satu"; break;
case 2 : kata = "dua"; break;
case 3 : kata = "tiga"; break;
case 4 : kata = "empat"; break;
case 5 : kata = "lima"; break;
case 6 : kata = "enam"; break;
case 7 : kata = "tujuh"; break;
case 8 : kata = "delapan"; break;
case 9 : kata = "sembilan"; break;
default : cout << "bukan 2 digitn";
}
return kata;
}
9/10/2014 Algoritma Pemrograman, @SUARGA 39