REPETITION / PERULANGAN LOOP/Iteration MATERI 6 REPETITION / PERULANGAN LOOP/Iteration
Pendahuluan Meskipun penggunaan prosedur mampu me-nyingkat instruksi, namun penggunaan prosedur tak mampu menghilangkan sekuens instruksi yang bersifat perulangan 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.
Perulangan/Repetisi Sederhana Perhatikan pola berikut : *** Pola tersebut diwujudkan dengan perintah : 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 Prosedur tersebut meskipun cukup baik tetapi tidak menolong untuk mencetak bujursangkar dengan ukuran yang berbeda-beda, misalkan 4x4, 2x2 dst. Penggunaan perulangan/repetisi akan sangat menolong dalam hal-hal seperti ini. Salah satu perulangan sederhana dengan perintah times-do sbb: times 3 do p* od mencetak *** times 4 do NL; p* od mencetak sekolom 4 *
Perulangan Sederhana Jadi, jika ingin menyederhanakan : p*; p*; p* Kita bisa merubahnya menjadi: times 3 do p* od Di mana 3 adalah batasan berapa kali perulangan akan dilakukan, p* adalah perintah yang akan diulang. Sedangkan times, do, dan od adalah syntax perintah.
Perulangan Sederhana Syntax perulangan : times F do P od Hal-hal yg perlu diperhatikan adalah : Batasan perulangan (F) tidak boleh diisi dengan angka negatif. Jika F diisi dengan angka nol, maka tidak akan ada perulangan yang dilakukan. F bisa diisi dengan sebuah persamaan/rumus, misalnya 8-2 atau 2+3, selama hasil akhirnya bukan bilangan negatif.
Perulangan di dalam Perulangan Perhatikan pola berikut ini : **** **** **** Jika kita ingin mendapatkan bentuk seperti di atas, kita harus melakukan perulangan ke kanan dan perulangan ke bawah.
Perulangan di dalam Perulangan Perintah yg benar adalah : times 3 do NL; times 4 do p* od od Di mana jika program dijalankan, akan menghasilkan 4 perulangan ke kanan dan 3 perulangan ke bawah (yang masing2 menjalankan 4 perulangan ke kanan).
Perulangan di dalam Perulangan Jadi untuk pola 3x3 * dapat direalisasi sebagai berikut: times 3 do NL; times 3 do p* od od {program 6.1}
Perulangan di dalam Perulangan Perhatikan program berikut: times 3 do times 3 do p* od od; NL Ada berapa * dan NL yang tercetak?
Times-do dan Formula Bukan Konstan Seringkali perulangan bisa bersifat variabel agar dapat mencetak bujursangkar dengan ukuran yang berbeda. Perhatikan program perulangan dalam bentuk variabel berikut: times n do NL; times m do p* od od {program 6.2}
Times-do dan Formula Bukan Konstan Kalau Program 6.2 dieksekusi dengan n = m = 3, maka didapatkan pola 3x3. Salah satu cara untuk memberikan nilai adalah dengan menggunakan prosedur sebagai berikut: def rect(n,m) = times n do NL; times m do p* od od enddef (Program 6.3) Jika dipanggil : rect(2,4), apa outputnya?
Penulisan yang terstruktur Perhatikan program berikut ini : times 2 do NL; times 40 do NL; times 20 do p* od od od Program itu akan membingungkan kita saat konsentrasi kita melemah. Solusinya, gunakan penulisan yang terstruktur : times 2 do NL; times 40 do NL; times 20 do p* od od
Perulangan di dalam Sequence 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.
Perulangan di dalam Sequence Jika ingin mencetak pola berikut ini : * ** *** **** ***** Maka programnya seperti berikut ini: NL; p*; (atau bisa juga ditulis NL; times 1 do p* od 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 6.4)
Perulangan di dalam Sequence 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 6.5)
Perulangan di dalam Sequence Program 6.5 lebih sederhana dari Program 6.4, tetapi belum memanfaatkan struktur perulangan, karena masih terdapat suatu set pengulangan <1,2,3,4,5>. Solusinya, dibuatlah bentuk perulangan for-do. Prosedur dalam Program 6.5 dapat dirubah menjadi sebagai berikut : for n runningthrough 1..5 do NL; times n do p* od od (Program 6.6) Catatan : syntax penulisan for-do untuk tiap-tiap bahasa pemrograman berbeda, tetapi menggunakan konsep yg sama.
Perulangan di dalam Sequence Program 6.5 digabung dengan Program 6.6 menjadi for n rt 1..5 do tn(n) od (Program 6.7)
Perulangan di dalam Sequence Nilai n yang menunjukkan berapa banyak perulangan akan dilakukan, dapat digantikan oleh rumus, misalnya : for n rt 1..5 do NL; times 6-n do print* od od
For Do yang Menghitung Turun Penggunaan for juga mengijinkan perhitungan turun <5,4,3,2,1>. for n rt 5..1 do NL; times n do p* od od (Program 6.8) Hasil: ***** **** *** ** *
Hal Penting dalam Perulangan Jika kita merencanakan sebuah solusi program berbasiskan perulangan, ada hal-hal yang harus diperhatikan : Solusi yang kita tawarkan harus masuk akal (logis), terstruktur, dan sistematis. Cari bagian-bagian program yang ditulis berulang-ulang. Buat rumus/formula yang sistematis dan terstruktur untuk mendeskripsikan bagian-bagian yang berulang.
Merencanakan Solusi dengan Perulangan Setiap kali ada persoalan, harus dipilih struktur mana yang paling tepat untuk persoalan tersebut, apakah menggunakan sequence atau perulangan Misal: ******* * * * * * * * * * * *
Merencanakan Solusi dengan Perulangan 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 Ternyata baris ke-2,3,4 dan 5 dari pola 7x7 di atas dapat dicetak menggunakan repetisi for. Namun perhatikan juga bahwa program ini bukan suatu repetisi mutlak melainkan suatu sequence (urutan) sebagai berikut: cetak baris pertama; cetak baris-baris tengah menggunakan for; cetak baris terakhir.
Merencanakan Solusi dengan Perulangan Langkah 2: mencari formula yang membuat situasi umum Baris-baris tengah dari pola mempunyai bentuk sbb: NL; times F1 do ps od; p*; times F2 do ps od; p* Terlihat bahwa untuk baris kedua F1 dimulai dari 1 sedangkan F2 mulai dari 2. Baik F1 dan F2 mempunyai maksimum 5.
Merencanakan Solusi dengan Perulangan Program lengkap menjadi sbb: NL; times 7 do p* od; for i rt 1..5 do NL; times i do ps od; p*; times 5-i do ps od; p* od NL; times 6 do ps od; p* (Program 6. 9)
Merencanakan Solusi dengan Perulangan Untuk menggeneralisasikan program ini menjadi nxn segitiga maka 7 dapat diganti dengan n: def segitiga (n) = NL; times n do p* od; for i rt 1..n-2 do NL; times i do ps od;p*; times n-2-i do ps od; p* od NL; times n-1 do ps od; p* enddef (Program 6.10)
Merencanakan Solusi: Raster Printing 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. (Latihan) **** **** **** *** *** *** ** ** ** * * *
-selesai-