550 likes | 723 Views
Subprogram Minggu V – VI. Wahyu Pujiyono yywahyup@yahoo.com Teknik Informatika Universitas Ahmad Dahlan. Motivasi. 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.
E N D
SubprogramMinggu V – VI WahyuPujiyonoyywahyup@yahoo.comTeknikInformatikaUniversitas Ahmad Dahlan
Motivasi • 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)
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 }
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 berbeda • Sederetan operasi yang kompleks yang membuat arus program sukar diikuti
Fungsi sebagai kotak hitam • Menyembunyikan detail • Dapat menggunakan fungsi tanpa tahu apa yang ada di dalamnya
output = function( input1, input2) • argument (input1 dan input2) menyediakan informasi ke program • Mengembalikan harga (informasi) kembali ke fungsi yang memanggilnya
Function • 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
Fungsi 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 5 • x dikatakan sebagai variabel independen (input) • y dikatakan sebagai variabel dependen (output)
Fungsi yang tak mengembalikan nilai • Misalkan akan dicetak bilangan dari 1 sampai n
Raptor :http://tutorialalgorithm.comjudul : Function in raptor
Fungsi 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
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
Raptor :http://tutorialalgorithm.comjudul :Sub-program parameters in raptor : swap
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
Versi 2 void 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 &)
Jenis 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)
Jenis parameter • Bentuk umum fungsi :
Template • Adakalanya kita ingin melewatkan berbagai jenis parameter (bisa int,float, dll.) tetapi harusnya fungsi hanya satu saja gunakan template
Kasus 5.2. • Buatlah fungsi yang menentukan nilai terbesar dari 2 bilangan bulat.
Overloading 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.
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))
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)
Fungsi 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”.
Ciri 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.
Ciri perulangan • Kapan mulai • Kapan berhenti • Berapa kali diulang Raptor :http://tutorialalgorithm.comjudul : How To : Recursion in the raptor
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)
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.
Iteratif Versus Rekursif • Cetaklah suatu kalimat dengan cara iteratif maupun cara rekursif.
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.
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).
Harga r 0 terakhir dicapai adalah r = 2. Inilah hasil dari gcd(190,34).
Versi 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).
Macam-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.
Contoh kasus • Hitunglah nilai dari : 52 + 62 + 72 + 82 + 92 + 102 • Pohon rekursinya adalah sebagai berikut :