PENGULANGAN

Salah satu kemampuan komputer yang dapat dimanfaatkan adalah mengulang suatu 

instruksi, bahkan aksi, secara berulang-ulang dengan peformansi yang sama. Berbeda 

dengan manusia yang cenderung melakukan kesalahan jika melakukan hal yang sama 

(karena lelah atau bosan), komputer akan melakukan pengulangan dengan setia sesuai 

dengan perintah yang diberikan. 

Pengulangan terdiri dari dua bagian: 

- kondisi yang mengakibatkan pengulangan suatu saat berhenti, yang dinyatakan 

oleh sebuah ekspresi logik baik secara eksplisit maupun implisit, 

- badan pengulangan, yaitu aksi yang harus diulang selama kondisi yang ditentukan 

untuk pengulangan masih dipenuhi. 

Pengulangan harus berhenti, ini yang harus dijamin oleh pemrogram. Pada bab 

tentang "mengupas kentang" telah diberikan suatu contoh di mana pengulangan 

mungkin dilakukan terus menerus dan salah satu karena sifat algoritma yang harus 

dipenuhi adalah terjadi dalam selang waktu terbatas maka pengulangan yang terus 

menerus (looping) adalah algoritma yang salah. 

Pengulangan yang terus-menerus harus dapat dideteksi pemrogram bahkan sebelum 

program dieksekusi oleh mesin, berdasarkan invariansi dari badan pengulangan 

tersebut. 

Notasi pengulangan adalah salah satu notasi dasar dalam penulisan algoritma selain 

analisis kasus. Namun notasi tersebut hanya akan ada artinya jika dikenakan terhadap 

skema tertentu. Notasi pengulangan yang berdiri sendiri tidak ada artinya, bahkan 

menyesatkan karena pada hakekatnya notasi pengulangan hanyalah merupakan 

sebagian dari skema pengulangan yang akan dibahas pada bab-bab berikutnya. 

Ada lima macam notasi pengulangan: 

Pengulangan Berdasarkan Banyaknya Pengulangan


Aksi akan diulang sebanyak n kali, dan bukan urusan pemrogram untuk mengelola 

pengulangan tersebut. Dengan hanya menyebutkan pengulangan tersebut, 

pengulangan pasti akan berhenti suatu saat.

Pengulangan Berdasarkan Kondisi Berhenti


Aksi akan dihentikan jika kondisi-berhenti dipenuhi (bernilai true), akan diulang jika 

kondisi-berhenti belum tercapai. Badan pengulangan pada notasi ini (Aksi) minimal 

akan dilakukan satu kali karena pada waktu eksekusi pengulangan yang pertama tidak 

ada dilakukan test terhadap kondisi-berhenti. Tes terhadap kondisi berhenti dilakukan 

setelah Aksi dilaksanakan. Pengulangan ini berpotensi untuk menimbulkan 

"kebocoran" (ada Aksi yang dileksekusi tanpa pernah diperiksa kondisi 

pelaksanaannya), jika ada kemungkinan bahwa seharusnya Aksi tidak pernah boleh 

dilakukan untuk kasus yang tertentu. 

Aksi sekuensial yang dilakukan adalah : Aksi, tes kondisi-berhenti, [Aksi, tes kondisi-

berhenti, ..., dan seterusnya] diakhiri tes kondisi-berhenti yang bernilai true, yang 

menyebabkan pengulangan berhenti. 


Pengulangan Berdasarkan Kondisi Ulang


Aksi akan dilakukan selama kondisi-pengulangan masih dipenuhi (bernilai true). 
Badan pengulangan (Aksi) pada notasi ini mungkin tidak akan pernah dilakukan, 
karena sebelum aksi yang pertama dieksekusi dilakukan tes terhadap kondisi berhenti. 
Tes terhadap kondisi-pengulangan dilakukan setiap kali sebelum Aksi dilaksanakan. 
Pengulangan ini berpotensi untuk menimbulkan aksi "kosong" (tidak pernah 
melakukan apa-apa karena pada tes yang pertama, kondisi-pengulangan tidak 
dipenuhi atau bernilai false). 
Aksi sekuensial yang dilakukan adalah: tes kondisi-pengulangan, [Aksi, tes kondisi-
pengulangan, ..., dan seterusnya] diakhiri tes kondisi-pengulangan yang bernilai false, 
yang menyebabkan pengulangan berhenti.

Pengulangan Berdasarkan Dua Aksi

Pengulangan ini seolah-olah adalah "gabungan" antara bentuk pengulangan kedua dan 
ketiga. Mekanisme yang dilakukan oleh pengulangan ini adalah dengan melakukan 
secara otomatis Aksi-1 pada eksekusi yang pertama kemudian dilakukan tes terhadap 
kondisi berhenti. Tergantung kepada kondisi berhenti yang dites: 
- Aksi-2 akan diaktifkan dan kemudian Aksi-1 yang berikutnya diulang, atau 
- pengulangan dihentikan karena efek neto dari Aksi-1 menghasilkan kondisi 
berhenti. 
Pengulangan ini berguna untuk kasus-kasus di mana Aksi-2 merupakan hal yang harus 
dilakukan tergantung dari hasil Aksi-1. 
Aksi sekuensial yang dilakukan adalah: Aksi-1, tes kondisi-berhenti, [Aksi-2, tes 
kondisi-berhenti, ..., dan seterusnya] diakhiri tes kondisi-berhenti yang bernilai true, 
yang menyebabkan pengulangan berhenti. 

Pengulangan Berdasarkan Pencacah

nama--pencacah harus suatu type yang terdefinisi suksesor dan predesesornya, 
setelah pelaksanaan pengulangan selesai, harga yang tersimpan pada nama-pencacah
tidak terdefinisi: jika hendak dipakai, harus didefinisikan kembali. 
Aksi akan dilakukan dengan memperhitungkan harga-harga dari nama-pencacah yang 
di"jelajahi", dipakai satu per satu secara berturutan. Dengan memakai pengulangan 
ini, pemrogram tidak perlu melakukan operasi terhadap suksesor/predesesor karena 
setiap kali selesai melakukan Aksi, otomatis mesin akan melakukan operasi untuk 
mendapatkan suksesor dari harga yang sedang berlaku saat itu untuk nama.
Pengulangan otomatis berhenti setelah penjelajahan terhadap nama-pencacah sudah 
mencakup semua harga yang terdefinisi dalam range harga. Harga yang tersimpan 
pada nama-pencacah setelah pengulangan selesai dilaksanakan tidak terdefinisi, jika 
ingin dipakai harus didefinisikan kembali. Pengulangan ini biasanya dipakai jika 
harga yang tersimpan dalam nama-pencacah ingin dimanfaatkan dalam Aksi, namum 
tidak boleh diubah karena akan mengacaukan urutan eksekusi yang dilakukan. 
Pada bahasa pemrograman yang dapat dieksekusi mesin, nilai dan perubahan nama-
pencacah dikontrol oleh pemroses bahasa. Harga yang tersimpan pada nama-
pencacah setelah pengulangan selesai dilaksanakan tidak terdefinisi, jika ingin 
dipakai harus didefinisikan kembali. 
Contoh 
Berikut ini akan diberikan suatu contoh program kecil yang hasilnya sama, namun 
diimplementasi dengan ke bentuk pengulangan yang berbeda-beda. 
Deskripsi persoalan: 
Tuliskanlah sebuah program yang membaca sebuah nilai N (integer positif lebih besar 
daripada nol), dan menuliskan output nilai 1, 2, 3, 4, ..., s.d. N berderet ke bawah 
sebagai berikut: 
 1 
 2 
 3 
 .... 
 ... 
 N
Contoh: 
Jika N = 3 maka outputnya adalah 
 1 
 2 
 3 
Jika N = 1 maka outputnya adalah 
 1


Catatan: 
Sebenarnya untuk persoalan ini, bentuk pengulangan repeat N times kurang sesuai. 
Pemakaian yang sesuai misalnya jika harus menggambar segi empat, maka kita harus 
menggambarkan 4 sisi. Penggambaran setiap sisi inilah yang diulang 4 kali.

Penjelasan: 
1. Dengan bentuk ini, harus dijamin bahwa nilai N yang dibaca sesuai dengan 
spesifikasi, yaitu N > 0. Jika nilai yang diberikan tidak sesuai dengan spesifikasi, 
maka akan tertulis angka 1. Untuk mengatasi hal ini dapat dilakukan misalnya 
bahwa nilai N yang dibaca “diulang” sehingga memenuhi persyaratan N > 0. 
2. Nama yang didefinisikan sebagai i akan bernilai 1..N+1. 
3. Anda dapat mendefinisikan i sebagai bilangan yang sudah ditulis dan memulai i 
dengan 0. Dalam hal ini nilai i adalah 0..N.


Penjelasan: 
1. Dengan bentuk ini, nilai 1 belum tentu ditulis. Jika ternyata pengguna 
memberikan nilai N yang negatif atau 0, program tidak menuliskan apa-apa 
karena kondisi yang diperiksa pertama kali (i ≤ N) menghasilkan false. 
2. Nama yang didefinisikan sebagai i akan bernilai 1..N+1. 
3. Anda dapat mendefinisikan i sebagai bilangan yang sudah ditulis dan memulai i 
dengan 0. Dalam hal ini domain nilai i adalah 0..N.


Penjelasan: 
1. Dengan bentuk ini, nilai 1 pasti ditulis. Jika ternyata pengguna memberikan nilai 
N yang negatif atau 0, program akan menuliskan 1 kemudian berhenti. 
2. Nama yang didefinisikan sebagai i akan bernilai 1..N, jika N positif. 
3. Anda dapat mendefinisikan i sebagai bilangan yang sudah ditulis dan memulai i 
dengan 0. Dalam hal ini aksi di antara iterate ... stop adalah penambahan nilai i, 
sedangkan aksi sesudah kata stop adalah aksi penulisan


Penjelasan: 
1. Bentuk ini ekivalen dengan bentuk iterate, untuk i [1..N], namun pertambahan 
nilai i ditangani secara implisit oleh pemroses bahasa. 
2. Jika N yang diberikan oleh pengguna bernilai negatif, maka tidak terjadi aksi 
penulisan karena nilai i di luar domain [1..N].

Ada bermacam-macam pengulangan, sebenarnya satu bentuk pengulangan dapat 
"diterjemahkan" menjadi bentuk yang lain dengan notasi algoritmik yang tersedia. 
Contohnya untuk persoalan menuliskan nilai 1...N di atas. 
Instruksi pengulangan tidak dapat berdiri sendiri, melainkan harus disertai dengan 
instruksi-instruksi lain sebelum dan sesudah pengulangan. 
Persoalannya adalah memilih bentuk pengulangan yang benar dan tepat untuk 
kelas persoalan tertentu. Pada kuliah algoritma dan pemrograman ini, pemilihan bentuk pengulangan yang tepat merupakan salah satu objektif dari pelajaran dan 
merupakan inti dari "desain" algoritmik. 
Tidak semua bahasa pemrograman yang ada menyediakan semua bentuk pengulangan 
di atas. Hal ini dapat dianalogikan dengan satu set pisau dapur yang terdiri dari 
puluhan macam pisau misalnya untuk memotong daging, sayur, buah. bahkan ada 
yang dirancang dengan sangat khusus untuk buah tertentu (grape fruit) karena 
mempermudah operasi pemotongan atau pengupasan yang dilakukan. Namun dalam 
keadaan darurat, ketika tidak semua pisau tersedia kita dapat memakai misalnya pisau 
sayur untuk memotong daging walaupun tidak semudah menggunakan pisau daging. 
Hal yang sama terjadi dengan pemilihan bentuk pengulangan jika bahasa 
pemrograman yang dipakai tidak menyediakan. Sebaiknya dalam hal ini yang 
dilakukan adalah memilih bentuk pengulangan yang tepat dan menterjemahkannya 
dalam instruksi yang tersedia pada bahasa eksekusi. Ini merupakan terjemahan desain 
algoritmik menjadi kode program.


Komentar

Postingan populer dari blog ini

UDINUS