minggu v subprogram 2008€¦ · motivasi Üpada dasarnya, manusia adalah makhlukyang lemah....

64
subprogram subprogram Minggu V

Upload: others

Post on 29-Sep-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

subprogramsubprogramMinggu V

Page 2: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

MotivasiMotivasiÜPada dasarnya, manusia adalah makhluk yang

lemah. ÜContoh : Untuk membangun gedung, tentulah

dibangun dari bata satu ke bata yang lain. Dari ruang ke ruang yang lain dst.

ÜMetode : Divide & Conquer (dibagi-bagi menjadi bagian yang lebih kecil, lalu selesaikan masalah yang dihadapi)

Page 3: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

ÜGedung bisa diibaratkan sebagai fungsi main() sedangkan bagian yang lebih kecil merupakan fungsi yang menyelesaikan tugas tertentu.

ÜContoh :int main(void) // fungsi utama { float z;

z = sqrt(9); // fungsi kepustakaan}

Page 4: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Beberapa fungsi kepustakaanBeberapa fungsi kepustakaan

Fungsi char arraystring.hFungsi utilitasstdlib.hFungsi char : tolower, isdigit, …ctype.h

Berisi fungsi matematika dan konstanta

math.h

Page 5: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Ü Bila kepustakaan tidak menyediakan fungsi yang kita perlukanà buat fungsi sendiri (user defined function)

Ü Kapan fungsi diperlukan ?Sesuatu yang dikerjakan beberapa kali dalam program Sesuatu yang akan dikerjakan pada program yang berbedaSederetan operasi yang kompleks yang membuat arus program sukar diikuti

Page 6: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Cara kerja fungsi Cara kerja fungsi

Page 7: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Fungsi sebagai kotak hitamFungsi sebagai kotak hitamÜMenyembunyikan detailÜDapat menggunakan fungsi tanpa tahu apa yang

ada di dalamnya

Page 8: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Bagian fungsiBagian fungsiÜ Return type : tipe data dari harga yang dikembalikan

oleh fungsi Ü Nama : identifier yang deskriptif dan valid Ü Daftar parameter : variabel yang menangani harga yang

dilewatkan ke fungsiÜ Badan : pernyataan yang melakukan operasi fungsiÜ Bentuk umum :

Return_type Nama (daftar parameter) {Badan fungsi

}

Page 9: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Pemanggilan fungsi (function call)Pemanggilan fungsi (function call)output = function( input1, input2)

• argument (input1 dan input2) menyediakan informasi ke program

• Mengembalikan harga (informasi) kembali ke fungsi yang memanggilnya

Page 10: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Mendefinisikan dan memanggil FungsiMendefinisikan dan memanggil Fungsi

void tampilkan_Pesan ( void ){cout << “Dalam fungsi tampilkan_Pesan \n”;

}

void main ( void ){

cout << “Di dalam main\n”;tampilkan_Pesan( );cout << “Kembali ke main.\n”;

}

Afile.cpp

Definisi Function

main function

Function call

Return type Nama Daftar Parameter

Function header

Di dalam mainDalam fungsi tampilkan_PesanKembali ke main

Program Output:

Page 11: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Memanggil FungsiMemanggil Fungsi

void tampilkan_Pesan ( void ){cout << “Dalam fungsi tampilkan_Pesan \n”;

}

void main ( void ){

cout << “Di dalam main\n”;tampilkan_Pesan( );cout << “Kembali ke main.\n”;

}

Afile.cpp

Definisi Function

main function

Function call

Return type Nama Daftar Parameter

Di dalam mainDalam fungsi tampilkan_PesanKembali ke main

Program Output:

1. Eksekusi program mulai di sini

2. Function call dieksekusi dan mengarah ke definisi fungsi

3. Badan fungsi di-eksekusi sampai selesai

4. Setelah fungsi selesai dieksekusi

Page 12: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Prototipe Fungsi

void tampilkan_Pesan ( void ){cout << “Dalam fungsi tampilkan_Pesan \n”;

}

void main ( void ){

cout << “Di dalam main\n”;tampilkan_Pesan( );cout << “Kembali ke main.\n”;

}

Afile.cpp

Definisi fungsi

main function

Function call

#include <iostream.h>

void tampilkan_Pesan ( void );

Prototipe Fungsi menginformasikankompiler tentang return type fungsi, banyak dan tipe parameternya

Semicolon diperlukan

Function header harus sama dengan prototipe

Page 13: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

FunctionFunctionÜFungsi pada dasarnya mengembalikan nilai

(return value)ÜFungsi yang tidak mengembalikan nilai à

prosedur (yang dikembalikan void)ÜAdakalanya ada lebih dari satu parameter yang

berubah nilainya dalam fungsi

Page 14: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Fungsi yang mengembalikan 1 nilaiFungsi yang mengembalikan 1 nilaiÜPengertiannya sama dengan fungsi dalam

matematikaÜContoh :

Fungsi y = f(x)= x + 5. Untuk setiap harga x maka akan mengakibatkan nilai y bertambah dengan 5x dikatakan sebagai variabel independen (input)y dikatakan sebagai variabel dependen (output)

Page 15: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Bahasa C++ #include <iostream.h> int tambah5(int x) { return (x+5); } main() { int x, y; cout << "Masukkan harga x : "; cin >> x; y = tambah5(x); cout << "Setelah masuk fungsi bernilai : " << y; return 0; }

Page 16: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Fungsi yang tak mengembalikan nilaiFungsi yang tak mengembalikan nilai

ÜMisalkan akan dicetak bilangan dari 1 sampai nBahasa C++

#include <iostream.h> void cetak(int n) { int i; for (i=1; i<=n; i++) cout << "Harga n = " << i << endl; } main() { int n; cout << "Masukkan harga n : "; cin >> n; cetak(n); return 0; }

Page 17: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Fungsi yang mengubah nilai parameterFungsi yang mengubah nilai parameter

ÜDinamakan pass by referenceÜFungsi menggunakan variabel asal (tidak

menggunakan copy)ÜArgumen harus berupa variabel, tidak boleh

konstantaÜDapat mengembalikan lebih dari satu nilai

Page 18: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Contoh :Contoh :

ÜBuatlah fungsi untuk menukar nilai dari dua variabel.

ÜAnalisis :ÜMisalkan kita punya variabel A = 3 dan B = 5

(input)ÜOutput : A = 5 dan B = 3

Page 19: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Langkah algoritma Langkah algoritma TEMP

No. Langkah Algoritma

1. temp diisi A temp ß A

2. (A kosong) A diisi B A ß B

3. (B kosong) B diisi temp B ß temp

A B

Page 20: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

prosedur tukar (input/output a : integer; b : integer) {menukar isi dua nilai a menjadi nilai b, demikian pula sebaliknya} Deklarasi

temp : integer Deskripsi

temp ß a a ß b

b ß temp

Page 21: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

#include <iostream.h> void tukar (int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; } main() { int a = 3, b = 5; cout << "Sebelum Tukar\n"; cout << "Isi Nilai1 = " << a << endl; cout << "Isi Nilai2 = " << b << endl; tukar (&a,&b); cout << "Sesudah Tukar\n"; cout << "Isi Nilai1 = " << a << endl; cout << "Isi Nilai2 = " << b << endl; return 0; }

Page 22: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Passing Parameter (versi 1)Passing Parameter (versi 1)Ü Dari contoh terakhir, terlihat ada

pernyataan :tukar (&a,&b);

Ü Pernyataan ini dinamakan function call. Tanda & (alamat) dimaksudkan bahwa parameter a dan b nantinya dapat diubah dalam fungsi.

Ü Sebagai konsekuensinya dalam badan fungsi menjadi :

void tukar (int *a, int *b)Ü Tanda * menandakan variabelnya

bertipe pointer

main() { int a = 3, b = 5; cout << "Sebelum Tukar\n"; cout << "Isi Nilai1 = " << a << endl; cout << "Isi Nilai2 = " << b << endl; tukar (&a,&b); cout << "Sesudah Tukar\n"; cout << "Isi Nilai1 = " << a << endl; cout << "Isi Nilai2 = " << b << endl; return 0; }

Page 23: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Versi 2Versi 2void swap( double & a, double & b){

double temp;temp = a;a = b;b = temp;

}ÜPemanggilan fungsi di atas sama dengan cara

call by value (tanpa tanda &)

Page 24: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Argumen DefaultArgumen DefaultÜ Argumen default dilewatkan parameter bila saat fungsi

dipanggil tidak menyertakan argumen

Ü Fungsi di atas dapat dipanggil dengan :Ü luas_lingkaran(); // output : 0Ü luas_lingkaran(3); // output : 28.26

const float phi = 3.14;

void luas_lingkaran(int r=0) {

cout << phi*r*r << endl;

}

Page 25: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Jenis parameterJenis parameterÜAda 2 jenis parameter yang dideklarasikan

dalam subprogram, yaitu :parameter nilai (value parameter) : variabel yang dikirimkan tidak mengalami perubahan sekeluar dari subprogram)parameter variabel (variable parameter) : variabel yang dikirimkan tidak mengalami perubahan sekeluar dari subprogram)

Page 26: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Ü Jenis parameter

ÜBentuk umum fungsi :

Jenis parameter Bahasa C++

parameter nilai menggunakan const

parameter variabel melalui pointer

Karakteristik Bahasa C++

mulai dengan … tipe hasil

nilai akhir dari fungsi return(hasil akhir)

Prototipe tipe_hasil nama(deklarasi variabel)

contoh float rata(larik x, int n)

Page 27: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

TemplateTemplateÜAdakalanya kita ingin melewatkan berbagai jenis

parameter (bisa int,float, dll.) tetapi harusnyafungsi hanya satu saja à gunakan template

Page 28: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Bahasa C++ #include <iostream.h> template<class T> T tambah5(T x) { return (x+5); } main() { int x; float y; cout << "Masukkan harga x (integer) : "; cin >> x; cout << "Setelah masuk fungsi bernilai : " << tambah5(x) << endl; cout << "Masukkan harga x (float) : "; cin >> y; cout << "Setelah masuk fungsi bernilai : " << tambah5(y); return 0; }

Page 29: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Mengapa menggunakan Fungsi ?Mengapa menggunakan Fungsi ?ÜMembagi program ke dalam unit (modul) kecil

yang mudah diatur (di-manage)Setiap unit terpisahProgram yang besar menjadi mudah dimodifikasi dan dirawat

ÜMenyederhanakan programJika suatu tugas dilakukan beberapa kali dalam program, panggil fungsi jika diperlukan

Page 30: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Kasus 5.2.Kasus 5.2.ÜBuatlah fungsi yang menentukan nilai

terbesar dari 2 bilangan bulat.

Fungsi maksimum2(input a, b : integer) : integer Deskripsi if (a>b) then return a else return b

Page 31: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Overloading FunctionOverloading FunctionÜKadang diinginkan beberapa fungsi yang

namanya sama namun dengan banyak parameter yang berbeda à overloading function

Contoh :ÜFungsi untuk mencari maksimum dari 2 bilangan

dan untuk mencari maksimum dari 3 bilangan.

Page 32: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Bahasa C++ #include <iostream.h> int max(int x, int y) {

return (x > y ? x : y); } int max(int x, int y, int z) {

int m = (x > y ? x : y); // m = max(x,y) return (z > m ? z : m);

} int main() { cout << "Maksimum 2 bilangan : " << max(99,77) << endl; cout << "Maksimum 3 bilangan : " << max(55,66,33); return 0; }

Page 33: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Kasus 5.3.Kasus 5.3.ÜDengan menggunakan fungsi ln dan exp,

buatlah fungsi untuk menghasilkan nilai xy

Analisis :ÜDengan menggunakan sifat logaritma :

ln(xy) = y*ln(x)exp(ln(xy)) = exp(y*ln(x))

xy = exp(y*ln(x))

Page 34: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Fungsi Pangkat(input x, y : integer) {Menghitung nilai dari x pangkat y} Deskripsi

pangkat ß exp(y*ln(x))

Bahasa C++

#include <iostream.h> #include <math.h> float pangkat(int x, int y) { return(exp(y*log(x))); } main() { float hasil; int a, b; cout << "Menghitung hasil perpangkatan\n"; cout << "Tulis sebuah bilangan : "; cin >> a; cout << "Mau dipangkat berapa : "; cin >> b; hasil = pangkat(a,b); cout << a << " pangkat " << b << " = " << hasil; return 0; }

Page 35: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Kasus 5.4.Kasus 5.4.ÜBuatlah fungsi perkalian 2 bilangan bulat

dengan menggunakan operator penjumlahan.

Analisis :ÜMisalkan a dikalikan b (input)ÜProses :

a x b = a + a + a + … + a (sebanyak b kali)

Page 36: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Fungsi kali(input a, b : integer) : integer { Menghitung hasil perkalian a dan b menggunakan Operator

Penjumlahan }

Deklarasi

hasil, i : integer

Deskripsi

hasil ß 0 for i ß1 to b do hasil ß hasil + a kali ß hasil

Page 37: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Bahasa C++ #include <iostream.h> #include <math.h> int kali(int m, int n) { int i, hasil=0; for (i=1; i<=abs(n); i++) hasil += m; if (n<0) return(-hasil); else return(hasil); } main() { int a, b; cout << "Masukkan bilangan : "; cin >> a; cout << "Akan dikali dengan : "; cin >> b; cout << "Nilai " << a << " x " << b << " = " << kali(a,b); return 0; }

Page 38: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Bahan bacaan (kuis)Bahan bacaan (kuis)Ü [A4] Chapter 9: FunctionsÜ [S1] Ch 6: FunctionsÜ [S2] 3.1 Functions

Command lineInline functionPelajari algoritma (+ analisis + buat contoh) Listing 3.3 Recursive integer-to-hexadecimal conversion (bandingkandengan Listing 3.21)

Ü [S3] Recursive Function Calls, Pelajari algoritma powerÜ [S4] Chapter 3. Recursion, pelajari mekanisme stack, tail

recursion, 3.3 Questions and AnswersÜ [S5] 9.5 Recursion, pelajari algoritma sum

Page 39: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Fungsi RekursifFungsi RekursifÜadalah fungsi yang melakukan proses

perulangan dengan cara memanggil dirinya sendiri.

Überbeda dengan versi iteratif yang menggunakan perulangan for, while maupun do while.

ÜFungsi rekursif dapat dipandang sebagai sebuah “operator”.

Page 40: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Ciri fungsi rekursifCiri fungsi rekursifÜKasus penyetop. Dalam kasus ini terdapat

nilai konstan (return value)ÜKasus pemanggilan rekursif. Dalam kasus

ini terdapat pemanggilan fungsi itu sendiri, tetapi harus mengarah kepada kasus penyetop.

Page 41: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Ciri perulanganCiri perulanganÜKapan mulaiÜKapan berhentiÜBerapa kali diulang

Page 42: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Kasus 5.5.Kasus 5.5.ÜBuatlah fungsi faktorial secara rekursif

untuk mencari n!.Analisis :ÜKasus penyetop (= nilai awal) n = 0 atau n = 1

yaitu bernilai konstan 1ÜKasus rekursif :

n * faktorial (n-1)

Page 43: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Fungsi rekursifFungsi rekursifFungsi faktorial(input n : integer) : longint

Deklarasi i : integer faktorial : long integer

Deskripsi (rekursif) if (n=0) or (n=1) then

faktorial ß 1 else faktorial ß n * faktorial(n-1)

Deskripsi (iteratif) faktorial ß1 for i ß 1 to n do faktorial ß faktorial * i

Page 44: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Prosedur rekursifProsedur rekursifProsedur cetak(input n : integer)

Deklarasi i : integer

Deskripsi (rekursif)

// nilai awal n

if (n>0) // kasus penyetop cetak(n-1) // pemanggilan rekursi write(n) endif

Deskripsi (iteratif)

// nilai awal 1 // nilai akhir n // naik 1 setiap kali berulang for i ß1 to n write(i) endfor

Page 45: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Kasus 5.6.Kasus 5.6.Diberikan deret Fibonacci sebagai berikut :

1, 1, 2, 3, 5, 8, …Ü Buatlah fungsi yang menghitung suku ke-n dari

deret Fibonacci dengan menggunakan cara rekursif.

Ü Analisis :Ü Suku ke-n dari deret Fibonacci diperoleh dengan

rumus :fibonacci(n) = fibonacci(n-1) + fibonacci(n-2)

dengan nilai awal untuk n=1 dan n=2 berharga 1.

Page 46: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

fungsi fibonacci (input n : integer) : integer Deskripsi

if (n = 1) or (n = 2) then fibonacci ß 1 { kasus penyetop } else fibonacci ß fibonacci(n-1) + fibonacci(n-2) { kasus rekursif } endif

Bahasa C++

#include <iostream.h> int fibonacci (int n) { if ((n == 1) || (n == 2)) return(1); else return(fibonacci(n-1) + fibonacci(n-2)); } main() { int i, n; cout << "Sampai suku ke : "; cin >> n; for (i = 1; i <= n; i++) cout << fibonacci(i) << " "; return 0; }

Page 47: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Iteratif Versus RekursifIteratif Versus RekursifÜCetaklah suatu kalimat dengan cara iteratif

maupun cara rekursif.Iteratif Rekursif

#include <iostream.h> #include <string.h> void balik(char *s) { int i; for (i=strlen(s)-1; i>=0; i--) cout << s[i]; } main(){ char *kata = "Algoritma"; balik(kata); return 0; }

#include <iostream.h> #include <string.h> void balik(char *s) { if (*s != '\0') { balik(&s[1]); cout << s[0]; } } main() { char *kata = "Algoritma"; balik(kata); return 0; }

Page 48: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Kasus 5.8.Kasus 5.8.ÜBuatlah algoritma iteratif dan rekursif untuk

menghitung gcd dari dua bilangan bulat positif.

ÜAnalisis :Ü Jika n ≠ 0 dan m integer non negatif, kita dapat

menulis m = q.n + r untuk suatu integer non negatif q dan r dengan 0 ≤ r < n.

Page 49: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Contoh : Ü Jika n = 3, m = 16 maka 16 = 5(3) + 1, yaitu q =

5 dan r = 1.Ü Jika n = 10, m = 3 maka 3 = 0(10) + 3, yaitu q =

0 dan r = 3.ÜUntuk mencari nilai gcd dari dua integer. kita

bisa menggunakan cara menulis di atas. Misalkan kita mau cari gcd(190,34).

Page 50: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

ÜHarga r ≠ 0 terakhir dicapai adalah r = 2. Inilah hasil dari gcd(190,34).

34 | 190 à 190 = 5(34) + 20, r = 20

20 | 34 à 34 = 1(20) + 14, r = 14

14 | 20 à 20 = 1(14) + 6, r = 6

6 | 14 à 14 = 2(6) + 2, r = 2

2 | 6 à 6 = 3(2) + 0, r = 0 stop !

Page 51: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Versi rekursif gcdVersi rekursif gcdÜgcd didefinisikan sebagai berikut :

gcd(c,d) = c, jika d = 0= gcd(c-d, d), jika d > 0 dan c > d.

Überlaku hukum komutatif, gcd(c,d) = gcd(d,c).

Page 52: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

fungsi gcd(c, d : integer) : integer versi iteratif versi rekursif

Deskripsi while (d > 0) do r ß c mod d c ß d { menyimpan harga r terakhir } d ß r { harga r terakhir untuk

menghentikan perulangan } endwhile gcd ß c

Deskripsi if (d=0) then gcd ß c else if (c<d) then gcd ß gcd(d,c) else gcd ß gcd(c-d, d)

Page 53: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

versi iteratif versi rekursif

int gcd(int c, int d) { int r; while (d > 0) { r = c % d; c = d; d = r; } return (c); }

int gcd(int c, int d) { if (d==0) return(c); if (c<d) return(gcd(d,c)); return(gcd(c-d, d)); }

Page 54: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Macam-macam Metode RekursiMacam-macam Metode RekursiÜ Going Down Recursion (rekursi menurun), yaitu

parameter menurun nilainya sampai dicapai kasus berhenti

Ü Going Up Recursion (rekursi menaik), yaitu parameter menaik nilainya sampai dicapai kasus berhenti

Ü Two Half (rekursi separuh-separuh), rekursi dibagi menjadi 2 bagian, di mana setiap bagian juga merupakan subprogram rekursi.

Page 55: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Contoh kasusContoh kasusÜHitunglah nilai dari :

52 + 62 + 72 + 82 + 92 + 102

ÜPohon rekursinya adalah sebagai berikut :

Page 56: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Going Down RecursionGoing Down Recursion

Going Down Recursion pemanggilan rekursi return value

GDR(5,10) ⇓ GDR(5,9)+10*10 ⇑ 25+36+49+64+81+100=355

GDR(5,9) ⇓ GDR(5,8) + 9*9 ⇑ 25+36+49+64+81=255

GDR(5,8) ⇓ GDR(5,7) + 8*8 ⇑ 25+36+49+64=174

GDR(5,7) ⇓ GDR(5,6) + 7*7 ⇑ 25+36+49=110

GDR(5,6) ⇓ GDR(5,5) + 6*6 ⇑ 25+36=61

GDR(5,5) 5*5 ⇑ 25

Page 57: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Going Up RecursionGoing Up Recursion

Going Up Recursion pemanggilan rekursi return value

GUR(5,10) ⇓ GUR(6,10)+ 5*5 ⇑ 100+81+64+49+36+25=355

GUR(6, 10) ⇓ GUR(7,10) + 6*6 ⇑ 100+81+64+49+36=330

GUR(7, 10) ⇓ GUR(8,10) + 7*7 ⇑ 100+81+64+49=294

GUR(8, 10) ⇓ GUR(9,10) + 8*8 ⇑ 100+81+64=245

GUR(9, 10) ⇓ GUR(10,10) + 9*9 ⇑ 100+81=181

GUR(10, 10) 10*10 ⇑ 100

Page 58: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Two-Half RecursionTwo-Half Recursion

Two Half rekursif call return value rekursif call return value TF(5,10) ⇓ TF(5,7) + TF(8,10) ⇑ 110+245=355

TF(5,7) ⇓ TF(5,6) + TF(7,7) ⇑ 61+49=110 TF(8,10) ⇓ TF(8,9)+TF(10,10) ⇑ 145+10*10=245

TF(5,6) ⇓ TF(5,5) + TF(6,6) ⇑25+36=61 TF(8,9) ⇓ TF(8,8)+TF(9,9) ⇑ 64+81=145

TF(5,5) ⇑ 5*5=25 TF(8,8) ⇑ 8*8=64

TF(6,6) ⇑ 6*6=36 TF(9,9) ⇑ 9*9=81

Page 59: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Keuntungan menggunakan fungsi Keuntungan menggunakan fungsi ÜProgram yang dikerjakan team dalam proyek

besarÜMenyederhanakan tugas-tugasÜSetiap fungsi adalah unit terpisahÜPendekatan pemrograman Top DownÜAbstraksi proseduralÜ Information hidingÜReuseability

Page 60: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Top Down ProgrammingTop Down ProgrammingÜMerancang program dengan memecahnya

menjadi bagian yang lebih kecilÜMulai dengan perencanaan global kemudian

mengisi detailnya pada setiap level sampai lengkap

Page 61: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

AbstraksiAbstraksiÜMerujuk ke aksi dan menghindari detail untuk

berkonsentrasi pada substansiÜDapat menggunakan hal yang kompleks dengan

usaha yang kecilÜNama fungsi akan merefleksikan “peri laku”nya

Page 62: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

TugasTugasÜBuat analisis cara kerja dari fungsi rekursif

berikut :int zeros( int n ) {

if ( n == 0 ) return 1;

if ( n < 10 ) return 0;

if ( n % 10 == 0 )

return 1 + zeros( n / 10 );

else

return zeros( n / 10 );

}

int factors(int n, int m) {

if (n%m != 0) return 0;

return 1 + factors(n/m, m);

}

Cobalah dengan berbagai macam argumen.

Contoh :

zeros(20020);

factors(1020, 2);

Page 63: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Kriteria LaporanKriteria LaporanÜ Dengan memanggil fungsi, gambarlah menggunakan

stack, perubahan pemanggilan pada proses rekursi (seperti contoh faktorial)

Ü Simpulkan cara kerjanya dengan kalimat naratif(cerita)Ü Buatlah versi iteratifnya !

Petunjuk : pelajari karakteristik perulangan (for, while, do .. While) beserta dengan karakteristik rekursi. Carilah kesamaan dari 2 mtode tersebut

Ü Boleh bekerja berkelompok tetapi tetap mengumpulkan sendiri-sendiri. Bila kerja berkelompok tulislah di sebelah kanan atas pekerjaan anda : BERKELOMPOK

Ü Bila tidak tertulis : BERKELOMPOK, diasumsikan bekerja sendiri. Apabila ada kesamaan dengan pekerjaan mahasiswa lain à tidak dinilai !

Page 64: Minggu V Subprogram 2008€¦ · Motivasi ÜPada dasarnya, manusia adalah makhlukyang lemah. ÜContoh : Untuk membangun gedung, tentulah dibangun dari bata satu ke bata yang lain

Minggu DepanMinggu DepanÜArray 1 dimensiÜPersiapan mid term

Materi : dari awal sampai dengan subprogram termasuk rekursifMenerima pertanyaan apabila ada materi yang belum dikuasai. Siapkan pertanyaan dari rumah !