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

dokumen-dokumen yang mirip
Algoritma Pemrograman 2B (Pemrograman C++)

Function. Function adalah satu blok instruksi yang dieksekusi ketika dipanggil dari bagian lain dalam suatu program. Format dari function :

Contoh function 1 : Output : // function example The result is 8 #include <iostream.h>

Minggu III STRUKTUR PEMILIHAN (KONTROL PROGRAM)

VI. FUNGSI. Fungsi Main ( ) Fungsi a ( ) Fungsi b ( ) Fungsi c ( ) Fungsi c1 ( ) Fungsi c2 ( ) Fungsi c3 ( ) Bentuk umumnya :

KONSEP DASAR. menyusunnya menjadi potongan-potongan mudah untuk ditangani dibanding. conquer.

Pertemuan Function. Obyektif Praktikum : 1. Mengerti konsep dasar penggunaan Function

MODUL PRAKTIKUM. MODUL I - VIII Modul penuntun dan bahan praktikum matakuliah algoritma dan pemograman

Pemrograman Dasar C. Minggu 6

PROCEDURE DAN FUNCTION

Algoritma dan Pemrograman Lanjut. Pertemuan Ke-5 Rekursif

PERTEMUAN V PEMROGRAMAN TERSTRUKTUR DENGAN VISUAL C Setiap bahasa C mempunyai satu fungsi dengan nama main (program utama).

SUB PROGRAM P E N G A N TA R P R O G R A M S T U D I. Institut Teknologi Sumatera

FUNGSI II. Variabel Statis. Sifat variabel statis: Sintaks: static tipe_data nama_variabel; Contoh: static int angka;

Alpro & Strukdat 1 C++ (Sub Program) Dwiny Meidelfi, S.Kom., M.Cs.

SUB PROGRAM (FUNGSI)

Komentar, Identifier, Konstanta dan Variabel

Spesifikasi: Ukuran: 14x21 cm Tebal: 225 hlm Harga: Rp Terbit pertama: Februari 2005 Sinopsis singkat:

Algoritma dan Pemrograman. Pertemuan Ke-11 Function

Algoritma dan Pemrograman Tahar Agastani Teknik Informatika UIN

int fungsi_2() { int main() { fungsi_1(); fungsi_2(); return 0;

MODUL 10 Fungsi 10.1 Kompetensi 10.2 Alat Dan Bahan: 10.3 Ulasan Teori: Dasar Fungsi Deklarasi Fungsi

SOAL C++ Created by Yuli Astuti,S.Kom Copyright 2009

Program pendek dan simple = mudah dihandle. Program besar, banyak dan kompleks = tidak

PEMROGRAMAN TERSTRUKTUR PERTEMUAN VI KOMPONEN KOMPONEN PEMROGRAMAN TERSTRUKTUR

PEMROGRAMAN BERORIENTASI OBJEK

Program pendek dan simple = mudah dihandle. Program besar, banyak dan kompleks = tidak

Subprogram (dalam Bahasa C++ + Flowchart)

MODUL 7 FUNGSI A. Tujuan. B. Petunjuk. C. Dasar Teori

Bahasa C melengkapi fasilitas modular dengan menggunakan fungsi pada setiap SubProgram. Contoh pembagian program menjadi beberapa subprogram.

PEMROGRAMAN DAN METODE NUMERIK Semester 2/ 2 sks/ MFF 1024

Kurikulum Qt. Chapter 5 Pointer dan References. Agenda. Apa itu Pointer? Memory Komputer. Mengambil Alamat Memory dari Variabel

ALGORITMA DAN STRUKTUR DATA POINTER DAN FUNCTION

Fungsi 1. Ekohariadi FT Unesa

FUNGSI. tipe Tipe nilai yang dihasilkan oleh fungsi. Jika tidak dinyatakan, hasil fungsi dianggap bilangan bulat (int)

FUNGSI. Blok fungsi juga diawali dengan kata cadangan Begin dan di akhiri dengan kata cadangan End dan titik koma.

MODUL PRAKTIKUM ALGORITMA DAN STRUKTUR DATA April 1, 2010 BAB 8 REKURSIF

Fungsi 2. Ekohariadi FT Unesa

Kurikulum Qt. Chapter 4 Function. Fungsi

MODUL. Pointer. Modul Praktikum C++ Dasar Pemrograman Komputer JURUSAN TEKNIK ELEKTRO FAKULTAS TEKNIK

Algoritma Pemrograman

Aplikasi Rekursif dalam Analisis Sintaks Program

Program menjadi terstruktur Dapat mengurangi pengulangan kode program. Fungsi dapat diimplementasikan dalam tiga bentuk :

Algoritma Pemrograman

Algoritma Pemrograman

Pengenalan C++ Oleh : Dewi Sartika

Pertemuan 4 ELEMEN-ELEMEN BAHASA PEMROGRAMAN

BAB 6. FUNGSI. Tujuan penggunaan fungsi : 1. Program menjadi terstruktur 2. Dapat mengurangi pengulangan kode program.

STRUKTUR DASAR ALGORITMA DAN PEMROGRAMAN STMIK AMIKOM YOGYAKARTA

4. Arrays. int billy [5]; maka setiap elemen array billy akan di-inisialisasikan sebagai 0 :

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA LABSHEET ALGORITMA DAN STRUKTUR DATA

Kisi-Kisi Ujian Tengah Semester Algoritma dan Pemrograman Lanjut

Pemrograman Dasar L A T I H A N M E T H O D / F U N G S I M E T H O D R E K U R S I F

5. Fungsi. S. Indrianii L, M.T

Pertemuan Arrays. Obyektif Praktikum : 1. Memahami penggunaan Array. 2. Dapat menerapkan array dengan elemen multidimensi

REKURSIF. Arkham Zahri Rakhman, S.Kom., M.Eng. Rev.: Dr. Fazat Nur Azizah

Konsep Pemrograman. Bab 7. Fungsi1. Konsep Pemrograman Politeknik Elektronika Negeri Surabaya 2006 PENS-ITS. Umi Sa adah

Fungsi. Fungsi. Dasar Komputer & Pemrograman 1. dipecah Sub Program. Program. Dasar Komputer & Pemrograman TC22052 Kartika Firdausy - UAD

Kurikulum Qt. { Basic OOP } Chapter 4. Function

BAHASA PEMROGRAMAN 1 (PERTEMUAN 3)

Keg. Pembelajaran 2 : Mengenal Bahasa C++

Algoritme dan Pemrograman

Minggu IV : Teori dan Workshop. PERULANGAN (LOOP/Iterasi/Repetisi)

PROCEDURE DAN FUNCTION

E STRUKTUR DATA & E PRAKTIK STRUKTUR DATA. Pointer & Function. Alfa Faridh Suni, S.T., M.T. PTIK

INF-103 Pemrograman II FUNGSI C++ Dr. Taufik Fuadi Abidin, M.Tech Irvanizam, M.Sc. Program Studi Informatika FMIPA UNIVERSITAS KUALA

LATIHAN SOAL (FUNGSI & PROSEDUR)

8.1 FUNGSI, DEKLARASI DAN DEFINISI NYA

Function. // function example. #include <iostream.h> int addition (int a, int b) { int r; r=a+b; return (r); }

VARIABEL & TIPE DATA PEMROGRAMAN C++

PROCEDURE DAN FUNCTION

Algoritma dan Struktur Data

VARIABEL, TIPE DATA DAN EKSPRESI Bab 2

FUNCTIONS. Function adalah satu blok instruksi yang akan dieksekusi ketika dipanggil dari bagian lain dalam suatu program.

Pemgrograman Modular. Keuntungan:

Rekursif. Rekursif adalah salah satu metode dalam dunia matematika dimana definisi sebuah fungsi mengandung fungsi itu sendiri.

BAB 6 FUNGSI TUJUAN PRAKTIKUM

BAB VII. FUNCTION. A. Pengantar Function. #include <iostream.h> #include <conio.h> { clrscr(); // detail function

Algoritma Pemrograman

MODUL. Fungsi (Function) Modul Praktikum C++ Dasar Pemrograman Komputer JURUSAN TEKNIK ELEKTRO FAKULTAS TEKNIK

Tipe Data dan Variabel. Dosen Pengampu Muhammad Zidny Naf an, M.Kom

MODUL 1 Alur Seleksi dengan C++

FUNGSI MINGGU KE: 4 TUJUAN: Mahasiswa dapat memahami definisi fungsi. Mahasiswa dapat mendefinisikan fungsi. Mahasiswa dapat menggunakan fungsi.

Praktikum 6. Konsep Rekursi Perbandingan Perulangan biasa dan Rekursi Implementasi Rekursi dalam Bahasa C

Method. Pemrograman Dasar Sistem Informasi PTIIK Herman Tolle

Dasar Komputer & Pemrograman 2A

PERTEMUAN 7 REVIEW (QUIZ)

Konsep Dasar Pemrograman Dan Pengenalan C++

Algoritma Pemrograman

REKURSIF. Dari bahan Dasar Pemrograman oleh: Arkham Zahri Rakhman Rev.: Fazat Nur Azizah

LANGKAH-LANGKAH MENULISKAN PROGRAM DALAM TURBO C++

MODUL ALGORITMA DAN PEMROGRAMAN. STMIK AMIKOM Yogyakarta. Rajif Agung Yunmar, S.Kom., M.Cs.

A. TUJUAN 1. Memecah program dalam fungsi fungsi yang sederhana. 2. Menjelaskan tentang pemrograman terstruktur.

BAB V Tujuan 5.1 Rekursi Dasar

PERTEMUAN 3 KONSEP TIPE DATA

SL 1201 Materi tentang Fungsi

OPERASI PERNYATAAN KONDISI

IT234 ALGORITMA DAN STRUKTUR DATA FUNGSI

Fungsi : Dasar Fungsi

Yudha Dwi P. N. S.Kom. Pertemuan 3 Aturan Penulisan Teks Algoritma

Transkripsi:

subprogram Minggu V

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

Beberapa fungsi kepustakaan math.h ctype.h stdlib.h string.h Berisi fungsi matematika dan konstanta Fungsi char : tolower, isdigit, Fungsi utilitas Fungsi char array

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 sukardiikuti

Cara kerja fungsi

Fungsi sebagai kotak hitam Menyembunyikan detail Dapat menggunakan fungsi tanpa tahu apa yang ada di dalamnya

Bagian 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) { Badanfungsi

Pemanggilan fungsi (function call) output = function( input1, input2) argument (input1 dan input2) menyediakan informasi ke program Mengembalikan harga (informasi) kembali ke fungsi yang memanggilnya

Mendefinisikan dan memanggil Fungsi Return type Nama Daftar Parameter Afile.cpp Definisi Function void tampilkan_pesan ( void ) Function { header cout << Dalam fungsi tampilkan_pesan \n ; main function Function call void main ( void ) { cout << Di dalam main\n ; tampilkan_pesan( ); cout << Kembali ke main.\n ; Program Output: Di dalam main Dalam fungsi tampilkan_pesan Kembali ke main

MemanggilFungsi Return type Nama Daftar Parameter Definisi Function main function Function call 3. Badan fungsi dieksekusi sampai selesai void tampilkan_pesan ( void ) { cout << Dalam fungsi tampilkan_pesan \n ; void main ( void ) { Afile.cpp 2. Function call cout << Di dalam main\n ; dieksekusi dan mengarah ke definisi tampilkan_pesan( ); fungsi cout << Kembali ke main.\n ; 4. Setelah fungsi selesai dieksekusi Program Output: 1. Eksekusi program mulai di sini Di dalam main Dalam fungsi tampilkan_pesan Kembali ke main

Prototipe Fungsi Prototipe Fungsi menginformasikan kompiler tentang return type fungsi, banyak dan tipe parameternya main function Function call Definisi fungsi #include <iostream.h> void tampilkan_pesan ( void ); void main ( void ) { cout << Di dalam main\n ; Afile.cpp Semicolon diperlukan tampilkan_pesan( ); Function cout << Kembali ke main.\n ; header harus sama dengan prototipe void tampilkan_pesan ( void ) { cout << Dalam fungsi tampilkan_pesan \n ;

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 mengakibatkannilai y bertambah dengan 5 x dikatakan sebagai variabel independen (input) y dikatakan sebagai variabel dependen(output)

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;

Fungsi yang tak mengembalikan nilai Misalkan akan dicetak bilangan dari 1 sampai n Bahasa 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;

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 menukarnilai dari dua variabel. Analisis : Misalkan kita punya variabel A = 3 dan B = 5 (input) Output : A = 5 dan B = 3

Langkah algoritma TEMP A B 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

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

#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;

Passing Parameter (versi 1) 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; 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 &)

Argumen Default Argumen default dilewatkan parameter bila saat fungsi dipanggil tidak menyertakan argumen const float phi = 3.14; void luas_lingkaran(int r=0) { cout << phi*r*r <<endl; Fungsi di atas dapat dipanggil dengan : luas_lingkaran(); // output : 0 luas_lingkaran(3); // output : 28.26

Jenis parameter Ada 2 jenis parameter yang dideklarasikan dalam subprogram, yaitu : parameter nilai (value parameter) : variabel yang dikirimkan tidak mengalami perubahan sekeluardari subprogram) parameter variabel (variable parameter) : variabel yang dikirimkan tidak mengalami perubahan sekeluardari subprogram)

Jenis parameter Jenis parameter parameter nilai parameter variabel Bentuk umum fungsi : Bahasa C++ menggunakan const 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)

Template Adakalanya kita ingin melewatkan berbagai jenis parameter (bisa int,float, dll.) tetapi harusnya fungsi hanya satu saja gunakan template

#include <iostream.h> Bahasa C++ 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;

Mengapa menggunakan Fungsi? Membagi program ke dalam unit (modul) kecil yang mudah diatur (di-manage) Setiap unit terpisah Program yang besar menjadi mudah dimodifikasi dan dirawat Menyederhanakan program Jika suatu tugas dilakukan beberapa kali dalam program, panggil fungsi jika diperlukan

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

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.

#include <iostream.h> Bahasa C++ 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;

Kasus 5.3. Dengan menggunakan fungsi ln dan exp, buatlah fungsi untuk menghasilkan nilai x y Analisis : Dengan menggunakan sifat logaritma : ln(x y ) = y*ln(x) exp(ln(x y )) = exp(y*ln(x)) x y = exp(y*ln(x))

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;

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 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

#include <iostream.h> #include <math.h> Bahasa C++ 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;

Bahan bacaan (kuis) [A4] Chapter 9: Functions [S1] Ch 6: Functions [S2] 3.1 Functions Command line Inline function Pelajarialgoritma (+ analisis + buat contoh) Listing 3.3 Recursive integer-to-hexadecimal conversion (bandingkan dengan Listing 3.21) [S3] Recursive Function Calls, Pelajari algoritma power [S4] Chapter 3. Recursion,pelajarimekanisme stack, tail recursion, 3.3 Questions and Answers [S5] 9.5 Recursion,pelajarialgoritma sum

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

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)

Fungsi rekursif Fungsi 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

Prosedurrekursif Prosedur 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

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.

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 #include <iostream.h> Bahasa C++ 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;

Iteratif Versus Rekursif Cetaklah suatu kalimat dengan cara iteratif maupun cara rekursif. Iteratif #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; Rekursif #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;

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). 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!

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 hukumkomutatif, gcd(c,d) = gcd(d,c).

fungsi gcd(c, d : integer) : integer versi iteratif 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 versi rekursif Deskripsi if (d=0) then gcd c else if (c<d) then gcd else gcd gcd(c-d, d) gcd(d,c)

versi iteratif int gcd(int c, int d) { int r; while (d > 0) { r = c % d; c = d; d = r; return (c); versi rekursif int gcd(int c, int d) { if (d==0) return(c); if (c<d) return(gcd(d,c)); return(gcd(c-d, d));

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 : 5 2 + 6 2 + 7 2 + 8 2 + 9 2 + 10 2 Pohon rekursinya adalah sebagai berikut :

Going 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

Going 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

Two-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

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

Top Down Programming Merancang program dengan memecahnya menjadi bagian yang lebih kecil Mulai dengan perencanaan global kemudian mengisi detailnya pada setiap level sampai lengkap

Abstraksi Merujuk ke aksi dan menghindaridetail untuk berkonsentrasipada substansi Dapat menggunakan hal yang kompleks dengan usaha yang kecil Nama fungsi akan merefleksikan peri laku nya

Tugas Buat analisis cara kerja dari fungsi rekursif berikut : int factors(int n, int m) { 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 ); if (n%m!= 0) return 0; return 1 + factors(n/m, m); Cobalah dengan berbagai macam argumen. Contoh : zeros(20020); factors(1020, 2);

Kriteria Laporan Kriteria 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!

Minggu Depan Array 1 dimensi Persiapan mid term Materi : dari awal sampai dengan subprogram termasuk rekursif Menerima pertanyaan apabila ada materi yang belum dikuasai. Siapkan pertanyaan dari rumah!