Algoritma Pemrograman

dokumen-dokumen yang mirip
Algoritma Pemrograman

Algoritma Pemrograman

Algoritma Pemrograman

Algoritma Pemrograman

Algoritma Pemrograman

Algoritma Pemrograman

Algoritma Pemrograman

Algoritma Pemrograman

Algoritma Pemrograman

Algoritma Pemrograman

Algoritma Pemrograman

Algoritma Pemrograman

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

Algoritma Pemrograman

Pertemuan Ke-2 (Teks Algoritma) Rahmady Liyantanto. S1 Teknik Informatika-Unijoyo

Algoritma dan Pemrograman Lanjut. Pertemuan Ke-5 Rekursif

Pertemuan 3 Prosedur dan Fungsi

Pertemuan Ke-5 Penyeleksian Kondisi. Rahmady Liyantanto. liyantanto.wordpress.com. S1 Teknik Informatika-Unijoyo

Algoritma Pemrograman

Algoritma Pemrograman

Algoritma Pemrograman

Algoritma Pemrograman

SATUAN ACARA PERKULIAHAN (SAP) Mata Kuliah : Struktur Data Kode : TIS3213 Semester : III Waktu : 1 x 3 x 50 Menit Pertemuan : 3

Pertemuan 3 Penyeleksian Kondisi

Algoritma Pemrograman

Algoritma Pemrograman

Algoritma Pemrograman

Algoritma Pemrograman

Algoritma Pemrograman

Algoritma Pemrograman

Teori Algoritma. Struktur Algoritma

Algoritma Pemrograman

Pertemuan Ke- 6 dan 7 Pengulangan atau Looping. Rahmady Liyantanto. liyantanto.wordpress.com. S1 Teknik Informatika-Unijoyo

SATUAN ACARA PERKULIAHAN MATA KULIAH PEMROGRAMAN PASCAL * (TK) KODE / SKS: KK /2 SKS

Algoritma Pemrograman

Algoritma Pemrograman

Design and Analysis of Algorithm

Algoritma Pemrograman

PROCEDURE DAN FUNCTION PROCEDURE. Parameter dalam Prosedur: C/: PROGRAM CONTOH_2; VAR p,l,t,vol,panj : real;

Algoritma Pemrograman

Sesi/Perkuliahan ke: VI Tujuan Instruksional Khusus : 4. Pokok Bahasan : Deskripsi singkat : Referensi :

Pertemuan 3 Penyeleksian Kondisi dan Perulangan

Pertemuan Ke-4 Urutan (sequence) Rahmady Liyantanto. liyantanto.wordpress.com. S1 Teknik Informatika-Unijoyo

ALGORITHM. 3 Rekursif Algorithm. Dahlia Widhyaestoeti, S.Kom dahlia74march.wordpress.com

Algoritma Pemrograman

Pertemuan Ke-3 (Tipe Data dan Nama) Rahmady Liyantanto. S1 Teknik Informatika-Unijoyo

Algoritma Pemrograman

Kontrak Kuliah TKC106 - Algoritma Pemrograman Semester Gasal 2011/2012

PERSEGI ANGKA-HURUF VERTIKAL

Algoritma Pemrograman

Design and Analysis of Algorithms CNH2G3- Week 4 Kompleksitas waktu algoritma rekursif part 1

dengan menyebutkan judul prosedurnya. dalam bentuk prosedur-prosedur. diperlukan.

PROCEDURE. Bentuk Umum : PROGRAM judul_program ; PROCEDURE judul_prosedur ; Begin Statement prosedur ; End ; Begin Statement program utama ; end.

Algoritma Pemrograman

Pertemuan 4 Diagram Alur / Flowchart

Sesi/Perkuliahan ke: VII

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

BAB I TUJUAN DAN LANDASAN TEORI

Design and Analysis Algorithm

Universitas gunadarma. pascal. Bab 4- bab 10. Hana Pertiwi S.T

MATERI 5 Procedure. Pendeklarasian suatu procedure pada program : PROGRAM Judul_Program; PROCEDURE Nama_Prosedur; BEGIN. {Statemen prosedur} END.

Materi ke-4 Praktikum Algoritma dan Pemrograman kelas Matematika PEMROGRAMAN MODULAR

Algoritma Pemrograman

Design and Analysis Algorithm. Ahmad Afif Supianto, S.Si., M.Kom. Pertemuan 03

PROGRAM STUDI S1 SISTEM KOMPUTER UNIVERSITAS DIPONEGORO. Oky Dwi Nurhayati, ST, MT

Catatan Kuliah STRUKTUR DATA BAB III REKURSIF

Algoritma Pemrograman

A. TUJUAN PEMBELAJARAN 1. Memahami mengenai konsep rekursif 2. Mampu memecahkan permasalahan dengan konsep rekursif

ALGORITMA PERULANGAN

Pertemuan 6 Array Objektif: 1. Memahami cara mendeklarasi tipe indeks dalam array 2. Dapat membuat program sederhana menggunakan array Pertemuan 6 53

Perulangan Muh. Izzuddin Mahali, M.Cs. Pertemuan 3. Algoritma dan Struktur Data. PT. Elektronika FT UNY

Subprogram. Definisi

A. TUJUAN PEMBELAJARAN

MATERI 4 PENYELEKSIAN KONDISI

PROCEDURE DAN FUNCTION

Bab 1 Algoritma dan Pemrograman Tersruktur

PRAKTIKUM 4 STATEMENT KENDALI

Dasar Komputer & Pemrograman 2A

SUB PROGRAM : PROSEDUR & FUNGSI. Konsep Pemrograman

MODUL PRAKTIKUM ALGORITMA PEMROGRAMAN TEKNIK INFORMATIKA

Algoritma Pemrograman

menunjukkan tipe hasil dari fungsi. sqr, succ dan sebagainya. buat sendiri.

A. TUJUAN PEMBELAJARAN 1. Memahami mengenai konsep rekursif 2. Mampu memecahkan permasalahan dengan konsep rekursif

ALGORITMA TUGAS 2 RESUME ALGORITMA PERCABANGAN DAN ALGORITMA PERULANGAN. Disusun Oleh : Sakina Mawardah Teknik Informatika. Dosen : Asep M. Yusuf, S.

4.1 Struktur Rancangan Puncak-Turun dengan Procedure

Pertemuan 4 Perulangan

BAB VII ALGORITMA DIVIDE AND CONQUER

PENDAHULUAN. Brigida Arie Minartiningtyas, M.Kom

Kontrak Kuliah TKC106 - Algoritma Pemrograman Semester Gasal 2009/2010

Aplikasi Rekursif dalam Analisis Sintaks Program

I. KATA PENGANTAR. Modul Algoritma Pemrograman. Modul Ke-4 - Hal 1

PROSES PENJUALAN BUKU

PERTEMUAN 7 REVIEW (QUIZ)

Konstruksi Dasar Algoritma

PENGANTAR LOGIKA DAN ALGORITMA DENGAN PASCAL

BAB II PROSES REKURSI DAN ITERASI

PROSEDUR DAN FUNCTION

Algoritma Pendukung Kriptografi

A. TUJUAN PEMBELAJARAN 1. Memahami mengenai konsep rekursif 2. Mampu memecahkan permasalahan dengan konsep rekursif

STRUKTUR KENDALI. Memanfaatkan struktur kendali untuk kasus komputasi

Transkripsi:

Algoritma Pemrograman Pertemuan Ke-14 (Rekursi) :: Noor Ifada :: S1 Teknik Informatika-Unijoyo 1

Sub Pokok Bahasan Pendahuluan Faktorial Menara Hanoi S1 Teknik Informatika-Unijoyo 2

Pendahuluan Algoritma rekursi adalah algoritma yang merupakan proses dalam subprogram (dapat berupa fungsi atau prosedur) yang memanggil dirinya sendiri Tidak semua bahasa tingkat tinggi menyediakan kemampuan untuk melakukan algoritma rekursi. Salah satu bahasa tingkat tinggi yang dapat melakukan rekursi adalah Bahasa Pascal Proses rekursi untuk beberapa kasus merupakan algoritma yang baik dan dapat membuat pemecahan masalah lebih mudah. Akan tetapi proses ini banyak menggunakan memori, dikarenakan setiap kali suatu subprogram dipanggil, maka diperlukan sejumlah tambahan memori Dalam menulis suatu fungsi atau prosedur rekursi, yang perlu diperhatikan adalah fungsi atau prosedur tersebut harus mengandung suatu kondisi akhir dari proses rekursi. Kondisi ini diperlukan untuk mencegah terjadinya proses rekursi yang tidak berujung (indefinite), yaitu proses rekursi akan terus dilakukan tanpa berhenti S1 Teknik Informatika-Unijoyo 3

Contoh berikut merupakan proses rekursi yang tidak pernah berakhir, karena tidak mengandung kondisi untuk mengakhirkan rekursi tersebut Algoritma REKURSI_TANPA_AKHIR { Rekursi yang tidak berujung akhir } DEKLARASI (* Program Utama *) { Tidak ada } procedure Rekursi { Menampilkan tulisan Informatika secara terus menerus, karena tidak mengandung kondisi pengakhiran rekursi } DEKLARASI (* Prosedur *) { Tidak ada } DESKRIPSI : (* Prosedur *) write( Informatika ) Rekursi DESKRIPSI : (* Program Utama *) Rekursi S1 Teknik Informatika-Unijoyo 4

Program REKURSI_TANPA_AKHIR; procedure Rekursi; Begin Write( Informatika ); Rekursi; End; Begin Rekursi; End. Bila program ini dijalankan, maka proses rekursi akan terus dijalankan tanpa berhenti sebagai berikut:... Kondisi pengakhiran rekursi dapat dilakukan dengan menggunakan struktur penyeleksian kondisi. Rekursi akan dihentikan bila kondisi telah memenuhi syarat S1 Teknik Informatika-Unijoyo 5

Contoh: Proses rekursi ini akan dilakukan sebanyak 5 kali, yaitu dengan menyeleksi kondisi dari peubah ulang sampai dengan bernilai 5 sebagai berikut: Algoritma REKURSI_DENGAN_AKHIR { Rekursi yang tidak berujung akhir } DEKLARASI (* Program Utama *) ulang : integer procedure Rekursi { Menampilkan tulisan Informatika sebanyak 5 kali } DEKLARASI { Tidak ada } DESKRIPSI : (* Prosedur *) if ulang < 5 then write( Informatika ) ulang ulang + 1 Rekursi endif DESKRIPSI : (* Program Utama *) ulang 0 Rekursi S1 Teknik Informatika-Unijoyo 6

Program REKURSI_DENGAN_AKHIR; Var ulang : integer; procedure Rekursi; Begin if ulang < 5 then begin write( Informatika ); ulang := ulang + 1; Rekursi; end; end; Bila program dijalankan: Informatika Informatika Informatika Informatika Informatika Begin ulang := 0; Rekursi; End. S1 Teknik Informatika-Unijoyo 7

Contoh: Prosedur Deret ini digunakan untuk menampilkan suatu deret bilangan bulat N dari 0 sampai dengan 5 sebagai berikut: Algoritma DERET { Menampilkan deret bilangan bulat N dari 0 sampai 10 } DEKLARASI (* Program Utama *) N : integer procedure Deret(output N : word) DEKLARASI (* Prosedur *) { Tidak ada } DESKRIPSI : (* Prosedur *) write(n) if n < 5 then Deret(N+1) endif DESKRIPSI : (* Program Utama *) N 0 Deret(N) S1 Teknik Informatika-Unijoyo 8

Program DERET_BILANGAN; var N : integer; procedure Deret(N : integer); begin write(n:3); if N < 5 then Deret(N+1); end; begin N := 0; Deret(N); end. Pada prosedur tampak terjadi proses rekursi yaitu bila nilai N masih lebih kecil dari 5, maka prosedur kembali dipanggil oleh prosedur itu sendiri dengan mengirimkan parameter nilai N sebelumnya ditambahkan dengan 1 Bila program dijalankan didapatkan hasil: 0 1 2 3 4 5 S1 Teknik Informatika-Unijoyo 9

Faktorial Faktorial adalah 1x2x3x4x...N (dengan asumsi N lebih besar dari 3) dan dapat dirumuskan dengan: N! = N * (N-1) * (N-2) *... * 1 Perumusan ini dapat didefinisikan secara rekursi sebagai berikut: N! = N * (N-1)! Misal, rekursi nilai 4! Dapat dihitung kembali sebesar 4 * 3!, sehingga 5! menjadi: 5! = 5 * 4 * 3! Secara rekursi nilai 3! adalah 3 * 2!, sehingga nilai 5! menjadi: 5! = 5 * 4 * 3 * 2! Secara rekursi nilai dari 2! adalah 2 * 1, sehingga akhirnya nilai 5! adalah: 5! = 5 * 4 * 3 * 2 * 1 = 120 S1 Teknik Informatika-Unijoyo 10

Algoritma rekursif untuk menghitung N! adalah sebagai berikut: Algoritma HITUNG_FAKTORIAL; { Menghitung faktorial suatu nilangan bulat } DEKLARASI (* Program Utama *) N : integer function FAKTORIAL(input N:integer) integer { mengembalikan nilai n! } DEKLARASI (* Fungsi *) { tidak ada } DESKRIPSI: (* Fungsi *) if N 1 then return 1 else return n*faktorial(n-1) endif DESKRIPSI: (* Program Utama *) write( Berapa faktorial? ) read(n) write( Faktorial =,FAKTORIAL(N)) S1 Teknik Informatika-Unijoyo 11

PROGRAM HITUNG_FAKTORIAL; var N : integer; function Faktorial(N : integer) : integer; begin if N <= 1 then Faktorial := 1 else Faktorial := N * Faktorial(N-1); end; begin write( Berapa faktorial? ); readln(n); write( Faktorial =,Faktorial(N)); end. Bila program ini dijalankan: Berapa Faktorial? 5 Faktorial = 120 Proses rekursi harus mempunyai kondisi terminasi (akhir dari proses rekursi). Kondisi terminasi pada program faktorial ini terletak pada penyeleksian kondisi bila nilai N lebih kecil atau sama dengan 1 sebagai berikut : If N <= 1 then Hasil := 1 Nilai dari N ini tidak akan bernilai 0, karena setelah nilai N menjadi 1, proses rekursi akan diakhiri, kecuali bila akan dihitung sebesar 0!. Nilai 0! adalah 1. Dengan demikian proses rekursi ini dapat didefinisikan : N! = 1 untuk N <= 1 N! = N * (N-1)! untuk N > 1 S1 Teknik Informatika-Unijoyo 12

Menara Hanoi Permasalahan yang merupakan proses rekursi yang terkenal adalah menara Hanoi. Permasalahan menara Hanoi adalah memindahkan sejumlah piringan dari satu menara ke menara yang lain Pemindahan piringan dilakukan satu demi satu dan tidak boleh ada piringan yang lebih kecil yang berada di bawah piringan yang lebih besar. Untuk itu disediakan sebuah menara lagi untuk bantuan pemindahan. Jadi dipergunakan tiga buah menara, yaitu: 1. menara sumber yang berisi piringan yang akan dipindahkan (menara A) 2. menara tujuan piringan (menara C) 3. menara untuk bantuan (menara B) S1 Teknik Informatika-Unijoyo 13

A B C Permasalahan Menara Hanoi: Menara A sebagai sumber Menara C sebagai tujuan Menara B sebagai bantuan S1 Teknik Informatika-Unijoyo 14

Anggaplah jumlah piringan yang akan dipindahkan adalah N piringan. Permasalahan ini dapat dipecahkan dengan langkah sebagai berikut: Jika N = 1, maka langsung pindahkan saja piringan dari menara A ke menara C dan selesai Pindahkan N-1 piringan dari menara A ke menara B, menggunakan menara C sebagai menara bantuan Pindahkan sisa sebuah piringan di A langsung ke C Akhirnya pindahkan sisa sejumlah N-1 piringan di menara B ke menara C dengan menggunakan bantuan menara A Pemindahan N-1 piringan tersebut dilakukan satu per satu dan tidak sekaligus. Proses pemindahan merupakan proses yang berulang-ulang (rekursi) S1 Teknik Informatika-Unijoyo 15

Solusi Algoritma untuk permasalahan menara Hanoi: Algoritma MENARA_HANOI { Pemindahan piringan pada permasalahan Menara Hanoi } DEKLARASI (* Program Utama *) J, L : integer A, B, C: char procedure MenaraHanoi(input J : integer, input A,C,B : char; output L : integer) DEKLARASI (* Prosedur *) { tidak ada } DESKRIPSI: (* Prosedur *) if J = 1 then L L + 1 write( Langkah :,L, ) write( Pindahkan piringan 1 dari menara,a, ke menara,c) else (* Pindahkan N-1 piringan dari menara A ke B menggunakan menara C*) MenaraHanoi(J-1,A,B,C,L) L L + 1 write( Langkah :,L, ) write( Pindahkan piringan,j, dari menara,a, ke menara,c) (* Pindahkan N-1 piringan dari menara B ke C menggunakan menara A *) MenaraHanoi(J-1,B,C,A,L) endif DESKRIPSI: (* Program Utama *) write( Jumlah Piringan? ) readln(j) L 0 A A {menara sumber} B B {menara bantuan} C C {menara tujuan} MenaraHanoi(J,A,C,B,L) S1 Teknik Informatika-Unijoyo 16

Program MENARA_HANOI; var J, L : integer; A, B, C: char; Procedure MenaraHanoi(J:integer; A,C,B:char; Var L:integer); begin if J = 1 then begin L := L + 1; write( Langkah :,L, ); writeln( Pindahkan piringan 1 dari menara,a, ke menara,c); end else begin (* Pindahkan N-1 piringan dari menara A ke B menggunakan menara C*) MenaraHanoi(J-1,A,B,C,L); L := L + 1; write( Langkah :,L, ); writeln( Pindahkan piringan,j, dari menara,a, ke menara,c); (* Pindahkan N-1 piringan dari menara B ke C menggunakan menara A *) MenaraHanoi(J-1,B,C,A,L); end; end; begin write( Jumlah Piringan? );readln(j); L := 0; A := A ; {menara sumber} B := B ; {menara bantuan} C := C ; {menara tujuan} MenaraHanoi(J,A,C,B,L); end. S1 Teknik Informatika-Unijoyo 17

Bila program ini dijalankan untuk memindahkan 4 piringan sebagai berikut: Jumlah piringan? 4 Langkah: 1 Pindahkan piringan 1 dari menara A ke menara B Langkah: 2 Pindahkan piringan 2 dari menara A ke menara C Langkah: 3 Pindahkan piringan 1 dari menara B ke menara C Langkah: 4 Pindahkan piringan 3 dari menara A ke menara B Langkah: 5 Pindahkan piringan 1 dari menara C ke menara A Langkah: 6 Pindahkan piringan 2 dari menara C ke menara B Langkah: 7 Pindahkan piringan 1 dari menara A ke menara B Langkah: 8 Pindahkan piringan 4 dari menara A ke menara C Langkah: 9 Pindahkan piringan 1 dari menara B ke menara C Langkah: 10 Pindahkan piringan 2 dari menara B ke menara A Langkah: 11 Pindahkan piringan 1 dari menara C ke menara A Langkah: 12 Pindahkan piringan 3 dari menara B ke menara C Langkah: 13 Pindahkan piringan 1 dari menara A ke menara B Langkah: 14 Pindahkan piringan 2 dari menara A ke menara C Langkah: 15 Pindahkan piringan 1 dari menara B ke menara C S1 Teknik Informatika-Unijoyo 18

Summary Algoritma rekursi adalah algoritma yang merupakan proses dalam subprogram (dapat berupa fungsi atau prosedur) yang memanggil dirinya sendiri. Yang perlu diperhatikan dalam penulisan fungsi atau prosedur rekursi adalah fungsi atau prosedur tersebut harus mengandung suatu kondisi akhir dari proses rekursi. Kondisi ini diperlukan untuk mencegah terjadinya proses rekursi yang tidak berujung (indefinite), yaitu proses rekursi akan terus dilakukan tanpa berhenti Contoh permasalahan yang dapat diselesaikan dengan lebih baik dan lebih mudah dengan menggunakan algoritma rekursi adalah Permasalahan Faktorial dan Menara Hanoi S1 Teknik Informatika-Unijoyo 19

Daftar Pustaka Jogiyanto HM [1989]. Turbo Pascal, Andi Offset, Yogyakarta. Noor Ifada, ST [2005]. Diktat Matakuliah Algoritma Pemrograman, Hibah Kompetisi A1, Jurusan Teknik Informatika, Universitas Trunojoyo. Rinaldi Munir [2003]. Algoritma dan Pemrograman dengan Pascal dan C edisi Kedua, Penerbit Informatika, Bandung. S1 Teknik Informatika-Unijoyo 20