minggu v subprogram 2008€¦ · motivasi Üpada dasarnya, manusia adalah makhlukyang lemah....
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/1.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/2.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/3.jpg)
Ü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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/4.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/5.jpg)
Ü 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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/6.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/7.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/8.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/9.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/10.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/11.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/12.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/13.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/14.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/15.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/16.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/17.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/18.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/19.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/20.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/21.jpg)
#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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/22.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/23.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/24.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/25.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/26.jpg)
Ü 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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/27.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/28.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/29.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/30.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/31.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/32.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/33.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/34.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/35.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/36.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/37.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/38.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/39.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/40.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/41.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/42.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/43.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/44.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/45.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/46.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/47.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/48.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/49.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/50.jpg)
Ü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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/51.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/52.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/53.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/54.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/55.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/56.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/57.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/58.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/59.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/60.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/61.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/62.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/63.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051810/601a2c92ac40a51aa9086ba6/html5/thumbnails/64.jpg)
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 !