Anda di halaman 1dari 40

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 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 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 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 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 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 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.
9/10/2014
return kata; 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 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 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 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 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 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 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 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 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 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 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 19
9/10/2014 20
9/10/2014 21
9/10/2014 22
9/10/2014 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 24
9/10/2014 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 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 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 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 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 30
9/10/2014 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 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 << "\n\n";
}
else ulang = 'N';
}
system("PAUSE");
return 0;
}

9/10/2014 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 digit\n";
}
return kata;
}
9/10/2014 34
9/10/2014 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 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 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 << "\n\n";
}
else ulang = 'N';
}
system("PAUSE");
return 0;
}
9/10/2014 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 digit\n";
}
return kata;
}

9/10/2014 39
9/10/2014 40

Anda mungkin juga menyukai