MATERI 7

25
MATERI 7 PEMBUKTIAN DENGAN INDUKSI

description

MATERI 7. PEMBUKTIAN DENGAN INDUKSI. 1. Spesifikasi dan Pembuktian. Program yang kita buat harus dapat menjawab apa yang kita inginkan Untuk dapat membuktikan apakah program sudah sesuai dengan keinginan maka harus dibuat SPESIFIKASI - PowerPoint PPT Presentation

Transcript of MATERI 7

MATERI 7

PEMBUKTIAN DENGAN INDUKSI

1. Spesifikasi dan Pembuktian

• Program yang kita buat harus dapat menjawab apa yang kita inginkan

• Untuk dapat membuktikan apakah program sudah sesuai dengan keinginan maka harus dibuat SPESIFIKASI

• Spesifikasi : Pernyataan tentang program harus bisa apa, atau outputnya harus apa.

• Pembuktiannya harus memenuhi tiap spesifikasi

• Ada program yang pembuktiannya langsung terlihat dari outputnya. Tetapi ada program yang harus dibuktikan secara tidak langsung.

• Contoh : Mobil adalah alat angkut dari tempat A dijalan menuju B. Kalau kita ingin pergi dari suatu tempat X menuju tempat Y, kita tidak perlu mencari mobil khusus, tetapi sembarang mobil yang bisa jalan, ada sopir, ada penunjuk arah (peta), ada cukup BBM.

• Bisa jalan, ada sopir, ada peta, cukup BBM, ada jalan SPESIFIKASI, sehingga mobil berlaku umum untuk angkutan

• Spesifikasi program juga harus dinyatakan secara detil

2. Pembuktian dengan Hitungan Maju

• Apa yang kita lakukan selama ini adalah pembuktian suatu nilai tertentu pada instruksi tertentu

• Misalnya : times 3 do print* od

sama dengan : print*; print*; print*; menghasilkan cetakan 3 bintang• Apakah times 89 do print* od benar-benar mencetak

89 bintang ?• Apakah times k do print* od pasti mencetak k

bintang ?

Harus dilihat keteraturannyaSeperti naik tangga, tetapkan titik awal. Jika

ada waktu dan tenaga cukup pasti dapat naik tangga 1 tingkat berikutnya, dan seterusnya hingga sampai langit ...

Spesifikasi dan Tools

Beberapa bahasa pemrograman dirancang secara khusus untuk memenuhi kebutuhan yang khusus pula. Ini yang disebut sebagai tools.

Jadi, untuk memenuhi spesifikasi yang khusus, Anda harus menggunakan tools yang khusus pula. Itulah sebabnya, saat menetapkan spesifikasi program, Anda harus memikirkannya secara detail.

Pembuktian Sederhana

Perhatikan potongan program berikut :times 3 do print* od

Jika output yang dihasilkan program tersebut berupa * * *, maka program tersebut terbukti baik dan sesuai dengan spesifikasi yang ditetapkan.

Selain daripada output * * *, maka program tersebut tidak sesuai dengan spesifikasinya.

Pembuktian Sederhana

Bagaimana untuk membuktikan :times 56 do print* od

Maka harus dipastikan bahwa karakter yang dihasilkan adalah * dan jumlahnya adalah 56 buah. Selain daripada output tersebut, maka program tersebut tidak sesuai dengan spesifikasinya.

Mengenal Induksi

Misalnya di sebuah gurun yang tidak terbatas luasnya, terdapat pasukan yang tidak terbatas pula jumlahnya. Pasukan nomor 1 berdiri di ujung gurun sebelah sini, dan pasukan nomor ~ berdiri di ujung gurun yang sebelah sana. Semua pasukan tersebut harus melaksanakan perintah sang Jenderal.

Mengenal Induksi

Saat sang Jenderal berteriak sekuat tenaga “SERAAANG !!”, ternyata yang bergerak hanya beberapa pasukan saja. Semakin jauh posisi pasukan dari sang Jenderal, semakin tidak ada reaksi dari pasukan tersebut. Kenapa ? Karena letaknya jauh dari sumber suara, sehingga pasukan tidak mendengar perintah sang Jenderal.

Mengenal Induksi

Kemudian sang Jenderal mengubah instruksinya “Apa yg dikerjakan pasukan di sebelahmu, lakukanlah juga dengan segera !”.

Kemudian sang Jenderal berkata kepada pasukan di sebelahnya “SERANG !”. Maka semua pasukan bergerak menyerang musuh. Itulah yang disebut dengan INDUKSI.

Mengenal Induksi

Untuk memastikan semua pasukan mengikuti perintahnya, sang Jenderal hanya perlu memastikan 2 hal saja :1. Seorang prajurit akan mengerjakan hal yang

sama seperti yang dilakukan prajurit di sebelahnya.

2. Prajurit yang posisinya di sebelah sang Jenderal, mengerjakan perintah yang diberikan sang Jenderal kepadanya.

Induksi dan Perulangan

Untuk memastikan perulangan sebuah program bekerja sesuai dengan spesifikasi yang ditetapkan, maka hanya diperlukan untukmemastikan 2 hal saja :

1. Instruksi n+1 akan mengerjakan hal yang sama seperti yang dikerjakan instruksi n.

2. Instruksi n menghasilkan output tunggal seperti yang diinginkan.

Kesalahan dalam Induksi

Kembali ke contoh Jenderal di slide sebelumnya, saat Jenderal berkata “SERANG !”, dan serdadu di sebelahnya bergerak menyerang lawan, maka perintah Jenderal akan dilakukan oleh seluruh pasukan secara benar (sesuai dengan keinginan jenderal).

Tapi jika serdadu di sebelah Jenderal tidak bergerak menyerang musuh, tapi malah ikut berkata “SERANG !”, maka semua serdadu akan berkata “SERANG !” tanpa ada yang bergerak menyerang musuh.

Kesalahan dalam Induksi

Jika program tersebut tanpa where k>0 :times k do print* od

Jika k diganti menjadi 2, maka hasilnyatimes 0 do print* od (tidak menghasilkan *)times 1 do print* od (menghasilkan *)

Dengan demikian, hasilnya tidak sesuai dengan spesifikasi yg telah ditetapkan.

Kesalahan dalam Induksi

Demikian juga dengan program berikut:times k do print* od where k>0

Program tersebut akan menghasilkan output yang benar jika k>0 terpenuhi, misalnya k diganti dengan 2 berarti :times 1 do print* od (menghasilkan *)times 1 do print* od (menghasilkan *)

Tapi jika kita tidak memberikan instruksi where k>0 maka program akan melakukan kesalahan.

Kesalahan juga bisa terjadi karena mengabaikan beberapa kasus (tidak semua kasus dibuktikan)

Induksi Berganda

Hal yang sama harus diperhatikan dalam menggunakan induksi berganda seperti contoh berikut ini :times m do

NL; times n do print* odod

Kita harus berhati-hati saat m dan n bernilai 0.

Induksi Rumit

Meskipun induksi rumit terlihat menggunakan pola logika yang sangat rumit, namun sebenarnya baik induksi berganda maupun induksi rumit menganut prinsip sederhana sebagaimana dianut oleh induksi sederhana, seperti yang telah diuraikan di slide sebelumnya.

Pembuktian dengan Induksi adalah pembuktian yang menggunakan kata-kata argumentatif yang bersifat logis.

Contoh : Buktikan program berikut ini benar dengan menggunakan induksi

def A(n) = for i rt 1...n do NL; times i do p* od odenddef

Jika prosedur tersebut dipanggil dengan A(5), maka outputnya :

***************

Pembuktian secara induktifbuat kalimat proposisi untuk menyatakan

spesifikasi program tersebutP : eksekusi A(k), dimana k>=0, akan mencetak

pola segitiga * dengan ukuran kxkPembuktian : mulai dari nilai batas1. A(0) = for i rt 1..0 do NL; times i do p* od od = tidak melakukan apapun [karena 1..0 adalah deretan kosong] terbukti A(0) tidak melakukan apapun

2. Pa : Eksekusi dari A(k), untuk k>=0, adalah mencetak sebanyak k baris, dimana tiap baris berikutnya berisi sejumlah bintang yang banyaknya kurang 1 dari baris sebelumnya.

diasumsikan (hipotesis) jika A(j) benar untuk j>=0 maka akan tercetak bintang sebanyak j baris, dan tiap barisnya berisi kurang 1 dari baris sebelumnya

3. Tunjukkan bahwa A(j+1) mengikuti hipotesis A(j+1) = for i rt 1 .. j+1 do NL; times i do p* od od = NL; times i do p* od; for i rt 1 .. j do NL; times i do p* od od

= NL; times i do p* od; A(j) perintah NL; times i do p* od; mencetak pola baris pertama dan

A(j) mencetak pola baris2 selanjutnya, dan hasilnya benar sesuai dengan spesifikasi

4. Kesimpulan : karena A(j+1) benar mencetak j+1 bintang pada baris pertama dan mencetak berturut-turut j..1 pada tiap baris, maka benar A(k) mencetak pola k bintang, dan tiap baris mencetak kurang 1 dari baris sebelumnya.

Kesimpulan

Dalam membuat program, kita harus memastikan bahwa program tersebut memiliki spesifikasi yang masuk akal, program tersebut berperilaku sesuai spesifikasi yang ditetapkan, dan program tersebut menghasilkan output sesuai spesifikasinya.

Untuk membuktikan bahwa program tersebut bekerja sesuai yang diharapkan, kita dapat menggunakan logika induksi sederhana dan logika matematis sederhana untuk membuktikan jalannya program tersebut sesuai dengan spesifikasinya atau tidak.

-selesai-