Algoritma Pemrograman
Modul 9-2:
Fungsi
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
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
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
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
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
Angka ke kata (1 digit)
• Algoritma Angka_1_digit
• { menterjemahkan angka 1 digit menjadi kata }
•
• Deklarasi.
• integer angka;
• string kata;
• fungsi digit (input integer d)  string;
•
• Deskripsi.
• { masukkan angka-nya }
• write (“masukkan angkanya : “);
• read (angka);
• { panggil fungsi-nya }
• kata  digit (angka);
• { tampilkan hasil }
• write ( angka, “ = “, kata );
9/10/2014 Algoritma Pemrograman, @SUARGA 7
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
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
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
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
{ angka dari 0 hingga 9 }
else angka2  ‘ ‘;
if ( d1 = 0 )
then angka1  “nol“;
else angka1  digit ( d1 );
endif.
endif.
endif.
write ( angka, ‘ = ‘ , angka2 + angka1 );
9/10/2014 Algoritma Pemrograman, @SUARGA 12
• 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
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
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
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
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
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
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
9/10/2014 Algoritma Pemrograman, @SUARGA 20
9/10/2014 Algoritma Pemrograman, @SUARGA 21
9/10/2014 Algoritma Pemrograman, @SUARGA 22
9/10/2014 Algoritma Pemrograman, @SUARGA 23
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
9/10/2014 Algoritma Pemrograman, @SUARGA 25
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
• 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
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
• 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
• 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
9/10/2014 Algoritma Pemrograman, @SUARGA 31
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
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
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
9/10/2014 Algoritma Pemrograman, @SUARGA 35
2 digit angka ke kata dalam C++
//Angka2Digit.cpp
//mengubah 2 digit angka ke kata
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
using namespace std;
//prototype
string digit(int d);
int main() {
int angka, d2, d1;
string angka1, angka2;
char ulang;
angka1=""; angka2="";
ulang = 'Y';
while (ulang =='Y') {
do {
cout << "Masukkan 2 digit angka n";
cout << "Negatif berarti EXIT : ";
cin >> angka;
} while (angka > 99);
9/10/2014 Algoritma Pemrograman, @SUARGA 36
if (angka >= 0) {
d2 = angka / 10;
d1 = angka % 10;
// angka >= 20
if (d2 > 1) {
angka2 = digit(d2) + "puluh";
if (d1 == 0) {
angka1 = "";
}
else angka1 = digit(d1);
}
// angka 10 hingga 19
else if (d2 == 1) {
if (d1==0) {
angka2 = "Sepuluh";
angka1 = "";
}
else if (d1==1) {
angka2 = "Sebelas";
angka1 = "";
}
9/10/2014 Algoritma Pemrograman, @SUARGA 37
else {
angka2 = digit(d1) + "belas";
angka1 = "";
}
}
// angka 0 hingga 9
else {
angka2 = "";
if (d1 == 0)
angka1 = digit(d1);
else
angka1 = digit(d1);
}
cout << angka << " = " << angka2 << " "
<< angka1 << "nn";
}
else ulang = 'N';
}
system("PAUSE");
return 0;
}
9/10/2014 Algoritma Pemrograman, @SUARGA 38
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
9/10/2014 Algoritma Pemrograman, @SUARGA 40

Algoritma pemrograman 14

  • 1.
  • 2.
    Konsep Fungsi • Fungsipada 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: • FungsiMatematis : 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 • AlgoritmaTanggal_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
  • 7.
    Angka ke kata(1 digit) • Algoritma Angka_1_digit • { menterjemahkan angka 1 digit menjadi kata } • • Deklarasi. • integer angka; • string kata; • fungsi digit (input integer d)  string; • • Deskripsi. • { masukkan angka-nya } • write (“masukkan angkanya : “); • read (angka); • { panggil fungsi-nya } • kata  digit (angka); • { tampilkan hasil } • write ( angka, “ = “, kata ); 9/10/2014 Algoritma Pemrograman, @SUARGA 7
  • 8.
    Fungsi digit (inputinteger 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 { menterjemahkanangka 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
  • 12.
    { angka dari0 hingga 9 } else angka2  ‘ ‘; if ( d1 = 0 ) then angka1  “nol“; else angka1  digit ( d1 ); endif. endif. endif. write ( angka, ‘ = ‘ , angka2 + angka1 ); 9/10/2014 Algoritma Pemrograman, @SUARGA 12
  • 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> usingnamespace 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 parameteraktual 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, callby 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
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
    Function Overloaded • Namayang sama digunakan beberapa fungsi, biasa-nya dalam pemanggilan tipe parameter menjadi acuan dari fungsi yang akan dipanggil. 9/10/2014 Algoritma Pemrograman, @SUARGA 24
  • 25.
  • 26.
    Fungsi Rekursif • Proseduratau 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 darikomputasi 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 padabentuk 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
  • 31.
  • 32.
    1-digit angka kekata 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
  • 35.
  • 36.
    2 digit angkake kata dalam C++ //Angka2Digit.cpp //mengubah 2 digit angka ke kata #include <cstdio> #include <cstdlib> #include <iostream> #include <cstring> using namespace std; //prototype string digit(int d); int main() { int angka, d2, d1; string angka1, angka2; char ulang; angka1=""; angka2=""; ulang = 'Y'; while (ulang =='Y') { do { cout << "Masukkan 2 digit angka n"; cout << "Negatif berarti EXIT : "; cin >> angka; } while (angka > 99); 9/10/2014 Algoritma Pemrograman, @SUARGA 36
  • 37.
    if (angka >=0) { d2 = angka / 10; d1 = angka % 10; // angka >= 20 if (d2 > 1) { angka2 = digit(d2) + "puluh"; if (d1 == 0) { angka1 = ""; } else angka1 = digit(d1); } // angka 10 hingga 19 else if (d2 == 1) { if (d1==0) { angka2 = "Sepuluh"; angka1 = ""; } else if (d1==1) { angka2 = "Sebelas"; angka1 = ""; } 9/10/2014 Algoritma Pemrograman, @SUARGA 37
  • 38.
    else { angka2 =digit(d1) + "belas"; angka1 = ""; } } // angka 0 hingga 9 else { angka2 = ""; if (d1 == 0) angka1 = digit(d1); else angka1 = digit(d1); } cout << angka << " = " << angka2 << " " << angka1 << "nn"; } else ulang = 'N'; } system("PAUSE"); return 0; } 9/10/2014 Algoritma Pemrograman, @SUARGA 38
  • 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
  • 40.