PENGULANGAN INSTRUKSI TOPIK 5 PENGULANGAN INSTRUKSI
Pendahuluan Meskipun penggunaan prosedur mampu me-nyingkat instruksi, namun penggunaan prosedur tak mampu menghilangkan sekuens instruksi yang bersifat pengulangan atau repetisi dalam suatu program. Penggunaan instruksi repetisi bersifat meng-hemat penulisan dan membuat struktur logika dari suatu program menjadi lebih sederhana dan jelas sehingga mudah dipahami, dimodifikasi bilamana diperlukan.
Tiga Instruksi Tambahan (1) donothing Instruksi yang tidak berpengaruh apa-apa, dapat ditempatkan dalam urutan mana saja. Contoh: donothing; X = X; donothing pn Mencetak nilai berupa angka desimal. Contoh: pn(3) 3 pn(3+ 4) 7
Tiga Instruksi Tambahan (2) let Mengasosiasikan nama dengan suatu nilai sama halnya dengan mengasosiasi nama dalam argumen suatu prosedur, namun dikerjakan tanpa menulis suatu prosedur. Contoh: let c = ‘+’; pc( c); Urutan terjadi let dalam definisi tidak masalah Contoh: let x = 7 let y = 3 pc( x+y) 10 let y = 4 let x = y+1 pn(x+y) 9
Perulangan Sederhana (1) *** Pola tersebut diwujudkan dengan NL; p*;p*;p*; NL; p*;p*;p* atau def r3(p) = p();p();p() enddef def tiga() = NL; p*;p*;p* enddef r3(tiga)
Perulangan Sederhana (2) Prosedur tersebut meskipun cukup baik tetapi tidak menolong untuk mencetak bujursangkar dengan ukuran yang berbeda-beda, misalkan 4x4, 2x2 dst. Penggunaan perulangan akan sangat menolong dalam hal-hal seperti ini. Salah satu perulangan sederhana dengan times do sbb: times 3 do p* od *** times 4 do NL;p* od akan mencetak sekolom 4 *
Perulangan Sederhana (3) Jadi untuk pola 3x3 * dapat direalisasi sebagai berikut: times 3 do NL; times 3 do p* od od (Program 1)
Times - Do dan Formula Bukan Konstan (1) Seringkali perulangan seperti dalam Program 1 bisa bersifat variabel agar dapat mencetak bujursangkar dengan ukuran yang berbeda. Program 1 dalam bentuk variabel adalah: times n do NL; times m do p* od od (Program 2)
Times - Do dan Formula Bukan Konstan (2) Kalau Program 2 dieksekusi dengan n = m = 3, maka didapatkan pola 3x3. Salah satu cara untuk memberikan nilai adalah dengan menggunakan prosedur sbb: def segiempat(n,m) = times n do NL; times m do p*od od enddef (Program 3)
Repetisi Sebagai Suatu Urutan Langkah (1) Perulangan sederhana seperti times do adalah suatu instruksi perulangan dengan jumlah pengulangan yang bersifat tetap sehingga tidak mampu untuk menangani semua bentuk perulangan yang ada.
Repetisi Sebagai Suatu Urutan Langkah (2) Untuk contoh di bawah akan sulit menggunakan times do * ** *** **** ***** Pola tersebut dapat dicetak menggunakan instruksi: NL; p*; NL; times 2 do p* od NL; times 3 do p* od NL; times 4 do p* od NL; times 5 do p* od (Program 4)
Repetisi Sebagai Suatu Urutan Langkah (3) Namun dapat dilihat bahwa program ini mempunyai struktur yang bersifat perulangan di mana semua baris terdiri dari bentuk sbb: NL; times n do p* od dengan n mempunyai nilai yang berbeda-beda tetapi meningkat secara berurutan. Dapat dibuat prosedur sbb: def tn(n) = NL; times n do p* od enddef tn(1); tn(2); tn(3);tn(4);tn(5) (Program 5)
Repetisi Sebagai Suatu Urutan Langkah (3) Program 5 lebih sederhana dari Program 4, tetapi belum memanfaatkan struktur perulangan, karena masih terdapat suatu set pengulangan <1,2,3,4,5>. Pada bahasa pemrograman, biasanya terdapat bentuk perulangan FOR DO sbb: for n runningthrough 1..5 do NL; times n do p* od od. (Program 6)
Repetisi Sebagai Suatu Urutan Langkah (4) Program 5 digabung dengan Program 6 menjadi for n rt 1..5 do tn(n) od (Program 7)
For Do yang Menghitung Turun (1) Penggunaan for do juga mengijinkan perhitungan turun <5,4,3,2,1>. for n runningbackthrough 5..1 do NL; time n do p* od od (Program 8) Hasil: ***** **** *** ** *
Merencanakan Solusi dengan Perulangan (1) Setiap kali ada persoalan, harus dipilih struktur mana yang paling tepat untuk persoalan tersebut, apakah menggunakan sequence atau perulangan Misal: ******** * * * * * * * * * * *
Merencanakan Solusi dengan Perulangan (2) Langkah 1: mencari penggalan-penggalan urutan Baris pertama: NL;times 7 do p* od Baris kedua: NL; ps;p*; times 4 do ps od; p* Baris ketiga: NL;times 2 do ps od; p*; times 3 do ps od; p* Baris keempat: NL;times 3 do ps od; p*; times 2 do ps od; p*
Merencanakan Solusi dengan Perulangan (3) Ternyata baris ke-2,3,4 dan 5 dari pola 7x7 di atas dapat dicetak menggunakan repetisi for-do. Namun perhatikan juga bahwa program ini bukan suatu repetisi mutlak melainkan suatu sequence (urutan) sbb: cetak baris pertama; cetak baris-baris tengah menggunakan for do; cetak baris terakhir.
Merencanakan Solusi dengan Perulangan (4) Langkah 2: mencari formula yang membuat situasi umum Baris-baris tengah dari pola mempunyai bentuk sbb: NL; times A do ps od; p*; times B do ps od; p* Terlihat bahwa untuk baris kedua A dimulai dari 1 sedangkan B mulai dari 2. Baik A dan B mempunyai maksimum 5.
Merencanakan Solusi dengan Perulangan (5) Program lengkap menjadi sbb: NL; times 7 do p* od; for n rt 1..5 do NL; times n do ps od; p*; times 5-n do ps od; p* od NL; times 6 do ps od; p* (Program 9)
Merencanakan Solusi dengan Perulangan (5) Untuk menggeneralisasikan program ini menjadi nxn segitiga maka 7 dapat diganti dengan n: def segitiga (n) = NL; times n do p* od; for m rt 1..n-2 do NL; times m do ps od; p*; times n-2-m do ps od; p* od NL; times n-1 do ps od; p* enddef (Program 10)
Merencanakan Solusi: Raster Printing (1) Dalam setiap penggambaran pola metoda yang selalu dipakai adalah penggambaran raster yaitu menurut baris per baris. Metoda ini digunakan untuk mencetak sebaris k segitiga dengan ukuran nxn. Jarak antar segitiga satu spasi. **** **** **** *** *** *** ** ** ** * * *
Merencanakan Solusi: Raster Printing (2) Langkah 1: mejelaskan elemen-elemen tipikal dari sequence instruksi yang menghasilkan pola ini Baris 1 NL; times 4 do p* od; ps; times 4 do p* od; ps times 4 do p* od Baris 2: NL; ps; times 3 do p* od; times 2 do ps od; times 3 do p* od;
Merencanakan Solusi: Raster Printing (3) Baris 3: NL; times 2 do ps od; times 2 do p* od; times 3 do ps od; times 2 do p* od; Baris 2 dan 3 memberikan generalisasi sbb NL; times A-1 do ps od; times B do p* od; times A do ps od; times B do p* od;
Merencanakan Solusi: Raster Printing (4) Jika ingin mencetak ekstra spasi di awal baris (sebelum segitiga 1), dapat digunakan perulangan times do NL; times 3 do times A do ps od; times B do p* od; od Atau bisa juga dengan menambahkan ekstra spasi pada akhir baris sbb: NL; times 3 do times A-1 do ps od; ps
Merencanakan Solusi: Raster Printing (5) Misalkan ingin menaruh ekstra spasi di awal baris. A dan B berubah-ubah, karena itu perlu menggunakan for do. Kalau for do dari 4..1, maka A haruslah n dan B haruslah 5-n. for n rt 4..1 do NL; times 3 do times 5-n times do ps od; times n p* od od od (Program 11)
Generalisasi Program 11 Generalisasi Program 11 dari 4 baris dan 3 kolom menjadi n baris dan k kolom. for n rt 4…1 mencetak 4 baris; times 3 datang dari kenyataan untuk mencetak 3 segitiga times 5-n berasal dari kenyataan untuk mencetak 1 spasi lebih dari ukuran segitiga Program yang mencetak n baris dan k kolom segitiga nxn sbb: def row (n, k) = for m rt n...1 do NL; times k do times n+1-m do ps od; times m do p* od od enddef (Program 12)
Generalisasi untuk Bentuk Segitiga yang Berbeda **** **** * * *** *** ** ** ** ** *** *** * * **** **** (A) (B) (C) (D) Program 12 mencetak pola B. Pola D: for n rt 1..4 do NL; times 3 do times n times do p* od; times 5-n ps od od od (Program 13)
Bagaimana kalau * diganti dengan angka? Buat prosedur untuk membuat pola sebagai berikut: 1 1 1 2 2 2 1 2 3 3 3 3
Untuk membuat pola: 1 2 2 3 3 3 for n rt 1..3 do NL; times n do pc(n); NL;
Nomor 1 function apaini(a: integer; b: integer): integer; var x,y,r: integer; begin x := a; y := b; while (y <> 0) do r := x mod y; x := y; y := r; end; apaini := x; Apa hasil dari “writeln(apaini(414, 662));”
Nomor 2 Perhatikan potongan program berikut: n:=10; x:=0; for i:=0 to n do begin x:=x+2*i; end; writeln(x); Berapakah output dari program di atas?
Nomor 3 x = 0 for i = 1 to n do for j = i to n do for k = i to n do x = x + 1 print x What will be printed by the pseudocode above if n=10?
Nomor 4 x = 0 for i = 1 to 9 do for j = 11 to 19 do for k = 1 to 19 do x = x + 1 print x What will be printed by this pseudocode?
Nomor 5 i = 0 while i < 10 do begin j = i while j < 30 do print j j = j + 1 ; end i = i + 1 ; end How many times j will be printed?