PEMILIHAN SKEMA PENGULANGAN Aditya Rama Mitra, S.Si., M.T.*
9^
Abstract This paper shows some unaware mistakes that are potentially performed by junior students taking programming class, particularly when they come to the point of choosing a correct loop schema. Any loop schema should not be only applicable (as sufficient condition), but also be convinced by the programmer as the right choice for the given problem situation (as necessary condition). In practice, the common tendency that students are likely to demonstrate falls into a practical perspective area in which they believe that it is sufficient to choose any arbitrary schema that will fit into the problem without necessarily considering its main functionality. Justification of the choice, therefore, is a matter that will follow. To some extent, unless they gain a better understanding about a well-designed loop, they may possibly produce a faulty code that is hard to understand that, at the end, will lead to a situation where it is hard to correct. Keywords: programming, repetition, loop, loop schema, loop construct, loop design, assertion, loop invariant 1. Pendahuluan Dalam berbagai pelajaran yang membahas atau berkaitan langsung dengan algoritma dan pemrograman, di antaranya mata kuliah "Algoritma dan Pemrograman", mahasiswa diperkenalkan pada tiga bentuk struktur kendali (control structure) program yang meliputi runtutan (sekuens), pengulangan (repetisi) dan seleksi. Struktur pengulangan dimaksud dalam tulisan ini secara khusus akan diacu secara saling dipertukarkan (interchangably) sebagai konstruk (construct) atau skema pengulangan. Seperti halnya seleksi, struktur pengulangan mempunyai berbagai varian yang masing-masing dirancang untuk situasi berbeda. Karenanya, tidak hanya sekedar sebagai varian, masing-masing struktur seharusnya dilihat sebagai sebuah skema yang membawa ide keterterapannya (applicability atau state of being applicable) sendiri. Tambahan, dalam pengertian situasi berbeda dimasukkan juga situasi yang tampak serupa (similar), namun tidak sama. Dalam konteks pemrograman terstruktur, pengulangan merupakan sekumpulan instruksi komputer yang akan dieksekusi berulang kali (repeatedly) dan secara bersyarat (conditionally). Dengan kata lain, eksekusi dari pernyataan-pernyataan pengulangan (loop statements) dalam tubuh pengulangan dipicu oleh pengujian kondisi pengulangan (loop condition). Sejalan dengan ide keterterapan sebuah skema, tiap bentuk pengulangan tersedia bukan semata-mata sebagai alternatif, tetapi untuk memenuhi kebutuhan akan terpenuhinya kondisi tertentu (to satisfy some certain condition). Sekalipun eksekusi dari skema pengulangan memberi efek netto yang sama (atau hampir sama), tetapi secara analitis dapat ditunjukkan perbedaan masing-masing skema yang diterapkan (Contoh 1). Perbedaan itu sendiri bukan hal bam yang dilihat sebagai implikasi dari * Dosen Tetap Jurusan Teknik Komputer, FIK-UPH Pemilihan Skema Pengulangan ... (Aditya R.M.)
91
pemilihan skema, tetapi seharusnya ditinjau dari hakekat pendefinisian skema. Dengan kata lain, dasar pemilihan skema pengulangan seyogianya berorientasi pada hakekat skema itu sendiri. Dalam aras ini, pemahaman yang lebih mendalam (in depth understanding) mengenai masing-masing skema merupakan modal berharga bagi pertimbangan penetapan skema yang tepat.
do
repeat i
i
A[i]
A[i]
while
Skema pengulangan menggunakan do-while
«- i + 1
until
Skema pengulangan menggunakan repeat-until
Contoh 1. Dua skema pengulangan yang memberi efek netto sama terhadap inisialisasi larik A dengan N-elemen
Secara khusus, tulisan ini ditujukan bagi peserta kuliah "Algoritma dan Pemrograman" atau mata kuliah dengan bahasan sejenis yang kerap diperhadapkan pada situasi di mana kerap kali penentuan skema pengulangan yang tepat adalah hal esensial. Diharapkan tulisan ini dapat memberi dasar bagi pembaca dalam menajamkan kemampuan analitis, yang seringkali diawali dengan intuisi, ketika memilih skema pengulangan. Pembaca pada akhimya diharapkan mempunyai dasar pertimbangan yang lebih baik untuk menetapkan skema yang fepaf, disamping membedakan skema yang fepaf dan kurang tepat. Pada gilirannya, pemilihan skema yang tepat akan berandil dalam pembentukan kode yang bersih. Secara khusus, bahasan dibatasi pada beberapa skema di antara semua skema yang disebut dalam kajian berikut. 2. Analisa Berbagai Skema/Konstruk Pengulangan Untuk menjamin bahwa suatu program, termasuk fungsi atau segmen kode, melakukan hal yang seharusnya, pemrogram perlu mendefinisikan pemyataan (statement) yang bernilai benar di titik-titik tertentu dari program. Pemyataan semacam ini disebut asersi (assertion). Salah satu bentuk asersi yang dikenal adalah invarian. Secara informal, invarian merupakan sebuah kondisi yang berlaku benar selama eksekusi suatu segmen program. Bentuk umum invarian adalah invarian pengulangan (loop invariant). Kamus lunak Merriam-Webster [7] mendefinisikan secara khusus invarian sebagai: "a mathematical expression or magnitude that remains unchanged under prescribed or implied conditions." Dalam konteks iterasi, invarian pengulangan (loop invariant) adalah asersi yang mendeskripsikan hubungan yang terjadi di antara berbagai peubah (variables) dimana nilai peubah tersebut berubah selama pengulangan berlangsung. Invarian pengulangan yang absah akan bernilai benar di awal eksekusi pengulangan, berlaku benar di setiap kali pengulangan terjadi, dan tepat setelah eksekusi pengulangan berakhir. Kriteria sebarang pengulangan yang diklasifikasikan terancang dengan baik (welldesigned loop) adalah bahwa pengulangan melakukan dua hal sebagai berikut [6]: 1. Membuat suatu kemajuan (progress) yang menjamin bahwa suatu saat proses akan berhenti (terminated) 92 Jurnal llmiah llmu Komputer, Vol. 1 No. 2 Mei 2003: 91-99
2. Memelihara invarian yang hams berlaku di setiap titik keluar (exit point) Titik keluar (exit point) suatu struktur kendali adalah titik dimana kendali proses diserahkan dari struktur kendali bersangkutan kepada struktur lain. Dalam kaitannya dengan titik keluar, struktur kendali yang baik adalah struktur yang memiliki satu titik keluar. Sekalipun demikian, di aras bahasa pemrograman, bahasa C, sebagai contoh, menyediakan perintah seperti e x i t ( ) atau break yang memungkinkan kendali ditransfer ke struktur lain di lebih dari satu titik (multiple exit point). Secara umum, komponen esensial sebuah konstruk pengulangan berupa [8]: 1. Inisialisasi kondisi Inisialisasi kondisi yang menentukan berjalannya iterasi sebelum uji kondisi pengulangan pertama dilakukan. 2. Uji kondisi Pengujian kondisi yang diterapkan untuk menentukan apakah tubuh dari pengulangan (the body of the loop) akan dieksekusi atau tidak. 3. Tubuh pengulangan (loop body) Unsur ini merupakan sekumpulan langkah-langkah yang akan dieksekusi. 4. Pemutakhiran kondisi (condition update) Pemutakhiran kondisi berupa eksekusi dari sebuah pernyataan yang efeknya akan menyebabkan kondisi berubah menjadi bernilai SALAH pada suatu saat. Dalam Contoh 1 di atas, dua dari enam varian konstruk pengulangan telah disinggung. Menggunakan notasi algoritmik, seluruh bentuk pengulangan dimaksud dapat dituliskan sebagai berikut: 1. while
do 2. do while 3. repeat until not 5. i traversal [lb..ub] (lb=lower bound, ub=upper bound} 6. iterate stop Berdasarkan klasifikasi, keenam varian pengulangan di atas dibedakan atas lima jenis, yaitu notasi yang disusun berdasarkan: (i) kondisi pengulangan: notasi pertama dan kedua; (ii) kondisi berhenti: notasi ketiga; (iii) banyak pengulangan: notasi keempat; (iv) pencacah (counter): notasi kelima; dan (v) dua aksi (mengandung dua aksi yang bersama-sama menyusun tubuh pengulangan): notasi keenam. Skema 1 merupakan skema yang potensial tidak melakukan apapun ketika kondisi pengulangan (loop condition) tidak terpenuhi. Situasi ini lazim disebut sebagai "kasus kosong" (potentially empty/vacuous). Berbeda halnya dengan skema 1, skema 2 dan 3 justru mengijinkan setidaknya satu kali proses iterasi dilakukan Pemilihan Skema Pengulangan ... (Aditya R.M.)
93
sebelum pengujian kondisi pengulangan pertama dilakukan. Jika kondisi pengulangan ternyata tidak terpenuhi, maka satu eksekusi terhadap sekelompok pernyataan dalam tubuh pengulangan telah terjadi. Kasus seperti ini disebut "kasus bocor" jika eksekusi tidak dikehendaki. Dengan demikian, skema pengulangan ini memberi indikasi adanya potensi terjadi kebocoran sebelum pemeriksaan kondisi ulang pertama dilaksanakan. Untuk mengatasi persoalan ini, sebelum skema pengulangan diterapkan seharusnya dapat dijamin setidaknya satu iterasi diijinkan terjadi. Perbedaan mendasar antara skema 2 dan skema 3 adalah skema 2 melibatkan kondisi pengulangan untuk mengendalikan eksekusi tubuh pengulangan, sementara skema 3 menggunakan kondisi berhenti (negasi dari kondisi pengulangan). Skema 4, di sisi lain, menghendaki ditentukannya sebuah nilai untuk mengendalikan banyak pengulangan (number of iteration). Dalam konteks ini tidak ada ide tentang potensi terjadinya kebocoran, sebab gagasan utamanya adalah eksekusi pengulangan sebanyak n kali. Sekalipun harga n ditentukan pemrogram, pemrogram tidak mempunyai kendali atas pengelolaan pengulangan tersebut. Dalam skema berikutnya, tampak sekilas keserupaan kerja antara skema 5 dan skema 4. Pada dasarnya, skema 5 dapat dimodifikasi sedemikian rupa sehingga memberi efek netto yang sama seperti dihasilkan skema 4. Sekalipun demikian, gagasan utama skema 5 terletak pada pencacahan atau penjelajahan ranah nilai terdefinisi oleh nama pencacah dan bukan pada banyaknya iterasi. Ranah nilai penjelajahan ini tidak harus berawal dari 0 atau 1 (lower bound) hingga n (upper bound), dimana n> = 0 (atau 1), tetapi sebagai contoh bisa berujud [-3 . . 8 ] . Berbeda dari kelima skema sebelumnya, skema 6 melibatkan dua buah aksi pengulangan. Skema ini dapat dibaca sebagai berikut: lakukan aksi pertama ( a c t i o n - l ) ; jika kondisi tidak dipenuhi, lakukan aksi kedua ( a c t i o n - 2 ) ; jika tidak, hentikan iterasi. Berikut sebuah skema pengulangan menggunakan konstruk w h i l e - d o disertai dengan invarian [6]: \lnvariant holds hurcj while Guard do make_Progress restore_Invariant Invariant
& -.Guard hold here
Contoh 2. Skema while-do dengan invarian
Guard pada skema di atas berfungsi sebagai kondisi pengulangan. Invarian dituliskan di dua titik yang berbeda. Invarian pertama muncul sebelum pengujian atas kondisi pengulangan untuk pertama kalinya dilakukan. Beberapa peristiwa menunjukkan bahwa invarian ini berlaku benar justru karena kasus kosong (vacuous) (Contoh 3 memperlihatkan hal ini). Sementara di akhir pengulangan invarian dan negasi dari Guard berlaku. make_Progress adalah pernyataan yang menyebabkan terjadinya suatu kemajuan. Sedangkan aksi r e s t o r e _ l n v a r i a n t menangani kemungkinan berubahnya invarian karena aksi make_Progress yang dilakukan di langkah sebelumnya. Tindakan ini semacam upaya menjamin bahwa 94 Jurnal llmiah llmu Komputer, Vol. 1 No. 2 Mei 2003: 91-99
invarian tidak berubah karena perubahan dari nilai peubah yang dilibatkan dalam tubuh pengulangan. Secara formal, bukti dari kebenaran (proof of correctness) untuk skema w h i l e - d o di atas dapat ditunjukkan melalui pembangunan aturan inferensi atas segmen program berikut [5]: while condition do S
Dalam segmen program di atas S adalah blok pernyataan (statement block) yang dieksekusi secara berulang sampai kondisi c o n d i t i o n bernilai salah. Persoalannya adalah menentukan asersi yang berlaku benar di setiap eksekusi dari S. Asersi ini bila ada adalah invarian pengulangan (loop invariant) yang dimaksud. Jika p adalah suatu asersi, maka p adalah suatu invarian pengulangan jika (p A c o n d i t i o n ) { s } p adalah benar. Andaikan p berlaku benar sebelum eksekusi segmen program, maka p dan ^ c o n d i t i o n berlaku benar setelah terminasi pengulangan. Dengan demikian aturan inferensinya adalah: (pAcondition){s}p .'.p{while condition do S} (-.conditionAp)
Dalam kaitannya dengan isu prakondisi (precondition) dan pascakondisi (postcondition) dalam bahasan pembuktian formal suatu program (apakah memenuhi sebuah spesifikasi formal), invarian pengulangan sesungguhnya adalah versi lebih lemah (weakened version) dari pascakondisi dan juga prakondisi pengulangan. Dalam konteks skema w h i l e - d o , jika p dan q berturut-turut adalah prakondisi dan pascakondisi dari sebuah segmen program pengulangan S dan r adalah sebuah invarian pengulangan, maka r harus memenuhi persyaratan berikut: 1. p => r (invarian pengulangan berlaku benar di awal) 2. rBr (keabsahan invarian r tidak berubah oleh evaluesi Boolean (dalam hal ini kondisi pengulangan)) 3. (rAB){S}r (invarian tidak berubah selama eksekusi tubuh pengulangan) 4. (rA(-.B)=>q (jika r benar tetapi B salah, maka q terimplikasi) Invarian pengulangan haruslah cukup lemah untuk berlaku di awal pengulangan, tetapi cukup kuat untuk mendukung kebenaran kondisi akhir bila dikombinasi dengan kondisi keluar pengulangan (loop exit condition). k
{invariant: elements A[l],...,A[nJ equal 0} while k o n do
k *- k + 1 {raake_Progress} Atk] <- 0 {restore_Invariant} { i n v a r i a n t : k=n ( A [ l ] , . . . , A [ k ] equal 0} Contoh 3. Inisialisasi larik A [ i ] , i = i , . . , n dengan o (kondisi terminasi yang kuat)
Dari contoh di atas, pernyataan k<-0 adalah unsur inisialisasi kondisi dari skema pengulangan, k o n adalah kondisi pengulangan, k < - k + l adalah pemutakhiran kondisi. Baris-baris pernyataan dalam konstruk w h i l e - d o adalah tubuh pengulangan itu sendiri.
Pemilihan Skema Pengulangan ... (Aditya R.M.)
95
Pada saat k diinisialisasi dengan nol, invarian "A [1] , . . . , A [ n ] e q u a l 0" berlaku benar karena untuk k=0, k berada di luar ranah [ 1 . . n ] sehingga ini merupakan kasus kosong (vacuous) dari pemeriksaan invarian. Dengan kata lain, invarian terpelihara secara trivial di titik tersebut. Pada saat terminasi k = n dan A [1] hingga A [ n ] masing-masing bernilai 0. Kondisi terminasi k = n adalah contoh dari kondisi terminasi yang kuat (strong condition). Dalam hal ini program mengerjakan hal yang benar, yaitu V i ( l < i A i < n - > A [ i ] = 0 ) . Sekalipun demikian, bahaya dari penerapan kondisi yang kuat tersebut jika n<0, maka titik dimana k = n tidak akan pernah tercapai. Dengan kata lain, keadaan tersebut dapat memicu terjadinya pengulangan abadi (forever loop). Karenanya, beberapa pemrogram mengusulkan versi yang lebih lemah dari kondisi terminasi untuk persoalan sama, yaitu berbentuk k < n seperti diberikan dalam Contoh 4. Sebagai catatan tidak semua pemrogram kawakan sepakat terhadap penetapan kondisi seperti ini, diantaranya Dijkstra yang tetap bersikukuh bahwa k o n bentuk yang tepat. k <- 0
{invariant: elements A[l], ...,A[n] equal 0} while k=n, A[.l] , . ,A[k] . . Contoh 4. Inisialisasi larik A [ i ] , i = i , . ., N dengan o (kondisi terminasi yang lebih lemah)
Hal yang menarik dari skema w h i l e - d o ini adalah bahwa invarian pengulangan tidak mengatakan apakah pengulangan akan berakhir atau tidak. Dengan demikian, pembuktian yang dilakukan adalah pembuktian kebenaran yang lemah (weak correctness proof). 3. Contoh Pemiiihan Skema Berkenaan dengan berbagai konstruk pengulangan yang ada, dapat dikatakan bahwa terbuka kemungkinan untuk menggunakan satu konstruk pengulangan untuk berbagai situasi berbeda dengan mentranslasi suatu bentuk pengulangan yang dimodifikasi (modified construct) ke bentuk lain melalui suatu cara tertentu menggunakan notasi tersedia. Di aras algoritmik, berbagai konstruk pengulangan terdefinisi dapat digunakan atau direalisasi sesuai dengan kebutuhan; tetapi tidak demikian halnya di aras bahasa pemrograman. Bisa jadi keterbatasan dukungan dari bahasa pemrograman menjadikan munculnya kompromi antara pemrogram dengan bahasa pemrograman dalam ujud penetapan suatu bentuk yang bisa berfungsi mengatasi bentuk yang seharusnya. Pandangan umum adalah bahwa program yang berjalan (working program) lebih baik dari program yang tidak bekerja. Tetapi bila program berjalan dengan mengandung kutu (bug), persoalannya bisa jadi berbeda. Di aras ekstrem, bila persoalan pemiiihan skema pengulangan ini sedemikian signifikan yang pada gilirannya berkaitan dengan kualitas produk, maka pernyataan Edward Yourdon [ 1 , hal. 8] layak dipertimbangkan: "'Just say no' when you're asked to speed up testing, ignore a few bugs, or code before agreeing on a design or a set of requirement."
96 Jurnal llmiah llmu Komputer, Vol. 1 No. 2 Mei 2003: 91-99
Berikut adalah contoh penggunaan skema d o - w h i l e yang akan dipertentangkan dengan r e p e a t - u n t i l dan t r a v e r s a l dalam kasus penghitungan total dari n=lo bilangan bulat pertama. Sum 4- 0 count 4- 1 do sum <- sum + count count <- count + 1 while (count<=10) {invariant: sum=l+2+. .+ (count-1) and count>10} Skema 1. Skema do-while dengan count diinisialisasi dengan l sum ir 0 count
do count <- count + 1 sum <- sum + count while (count<10) {invariant: sum=l+2+. .+count and counts = 10}
Skema 2. Skema do-while dengan count diinisialisasi dengan l
Pada kedua skema di atas, tampak bahwa keduanya menerapkan kondisi terminasi yang lemah (weak termination condition). Analisa lebih jauh menunjukkan bahwa kondisi terminasi pada skema d o - w h i l e kedua sesungguhnya lebih lemah dari skema pertama. Jika demikian apakah skema d o - w h i l e kedua merupakan pilihan yang tepat? Jawaban atas pertanyaan ini ditangguhkan hingga perbandingan skema dilakukan terhadap r e p e a t - u n t i l dan t r a v e r s a l . Perbedaan teramati pada kedua skema d o - w h i l e di atas adalah bahwa skema 2 menyebabkan c o u n t berhenti tepat di nilai 10 pada saat terminasi pengulangan. Sedangkan, pada skema 1 nilai count di akhir eksekusi pengulangan adalah 11 (>10). Dengan mempertimbangkan berhentinya nilai c o u n t di akhir pengulangan, maka sejauh ini kandidat skema adalah skema d o - w h i l e kedua. Dalam skema lain peubah c o u n t yang digunakan sebagai pengendali atau pencacah untuk keperluan pengulangan bisa jadi tidak terdefinisi di akhir pengulangan. Dengan demikian, jika nilai akhir c o u n t dibutuhkan untuk keperluan berikutnya, maka skema d o - w h i l e (dan juga w h i l e - d o ) merupakan pilihan yang tepat. Terhadap hasil penjumlahan, kedua skema memberi efek netto yang sama. Selain itu invarian di kedua skema pun terpelihara. Pada skema 1, sebelum eksekusi pengulangan, untuk c o u n t = l , s u m = c o u n t - l = 0 ; sedangkan pada skema 2 untuk c o u n t = 0 , invarian benar secara trivial. Untuk persoalan yang sama, rancangan skema r e p e a t - u n t i l dapat menggunakan kondisi henti yang kuat ( c o u n t = 1 0 ) atau yang lebih lemah ( c o u n t > 1 0 ) ; sedangkan skema t r a v e r s a l membutuhkan pendefinisian ranah jelajah dari pemrogram untuk pengelolaan nilai pencacah (Skema 3 dan 4).
Pemilihan Skema Pengulangan ... (Aditya R.M.)
97
sum <- 0 count 4- 0 repeat count <- count + 1 sum 4- sum + count until (count=10) (invariant: sum=l+2+...+count and count = 10} Skema 3. Skema r e p e a t - u n t i l dengan kondisi henti yang kuat
sum <- 0 count t r a v e r s a l [0..10] sum <- sum + count ( i n v a r i a n t : inv(count)} Catatan: inv ( i ) : invarian pengulangan yang absah (bergantung pada nilai i) inv (i) adalah sum=jumlah dari i bilangan pertama Skema 4. Skema traversal dengan invarian yang bergantung kepada nilai i , i n v ( i )
Skema traversal menggunakan invarian yang bergantung pada nilai count. Sebelum pengulangan, c o u n t adalah 0 yang menjadikan invarian i n v ( c o u n t ) terpelihara, sebab i n v ( 0 ) adalah sum=0, yaitu jumlah 0 bilangan bulat pertama. Pada prakteknya dengan mengubah ranah jelajah dari [ 0 . . 1 0 ] menjadi [ 1 . . 1 0 ] hasil eksekusi akan memberi efek netto yang sama. Tetapi, persoalannya adalah definisi ranah baru tersebut meniadakan invarian i n v ( 0 ) , sehingga harus dicari invarian baru sehingga i n v ( l ) adalah sum=0 juga berlaku. Pada ranah baru nilai c o u n t tepat sebelum pengulangan dilakukan adalah satu. Karenanya berlaku i n v ( l ) adalah sum=0. Hal ini mengakibatkan ketidakkonsistenan dengan invarian i n v ( i ) yang didefinisikan sebagai sum=jumlah dari i bilangan bulat pertama. Pemecahannya adalah dengan menginisialisasi nilai c o u n t dengan nol sehingga skemanya menjadi: sum 4- 0 count <- 0 count t r a v e r s a l [1..10] sum <- sum + count ( i n v a r i a n t : inv(count)} Skema 5. Skema traversal dengan inisialisasi nilai count
dimana inisialisasi c o u n t < - 0 menyebabkan keberlakuan invarian terpelihara di awal pengulangan. Skema 4 dan 5 melibatkan kondisi henti yang kuat, yaitu c o u n t berhenti tepat di 10 sebagai implikasi dari pendefinisian ranah jelajah sedemikian rupa. Sekalipun demikian, dengan mengacu pada rancangan skema, nilai c o u n t di akhir eksekusi pengulangan lazimnya bukan menjadi perhatian pemrogram. Dengan kata lain, skema ini bukanlah pilihan yang tepat jika nilai akhir dari pencacah dibutuhkan untuk proses lebih jauh, tetapi merupakan pilihan terbaik jika fokus persoalannya adalah komputasi n bilangan bulat pertama. Dalam contoh segmen program di atas yang murni merupakan lokalisasi persoalan skema pengulangan, tidak tampak baik sekuens yang mendahului maupun yang mengikutinya. Kerap kali dengan mengamati gambaran yang lebih besar (big picture) dimana segmen pengulangan 98 Jurnal llmiah llmu Komputer, Vol. 1 No. 2 Mei 2003: 91-99
tersebut berada, persoalan seputar pemilihan skema yang tepat dapat ditinjau secara lebih menyeluruh. Apapun persoalannya, dapat ditegaskan bahwa mengacu spesifikasi persoalan adalah tindakan yang paling bijaksana; sementara pemilihan skema pengulangan akan mengikutinya. 4. Kesimpulan Sejumlah kesimpulan yang dapat diturunkan dari pembahasan di atas adalah sebagai berikut: 1. Berbagai skema pengulangan yang ada dirancang untuk diterapkan dalam berbagai situasi yang berbeda (bisa jadi situasi serupa tetapi tidak sama). 2. Pemilihan skema pengulangan sesungguhnya bukanlah semata-mata persoalan menentukan sebuah skema dari sejumlah kandidat yang dapat diterapkan (applicable) pada persoalan diberikan, tetapi cenderung pada justifikasi penerapan skema terpilih. Dengan kata lain, pemilihan skema pengulangan bukan persoalan alternatif semata, tetapi keputusan yang berdasarkan analisis. 3. Di aras bahasan algoritmik, berbagai varian skema pengulangan dibangun dan direalisasi untuk berbagai kelas persoalan. Tidak demikian halnya di aras bahasa pemrograman dimana tidak ada jaminan bahwa semua skema dapat diimplementasi. Seandainya hal ini terjadi, ide dari pemilihan dan keputusan untuk menggunakan skema tertentu tidaklah berubah, sebab persoalan tersebut adalah persoalan yang muncul di aras bahasa pemrograman berkenaan dengan dukungan atau fitur bahasa tersebut. Pada prakteknya, bisa saja terjadi kompromi untuk mengantisipasi persoalan yang ada. 4. Dengan memahami ide tentang berbagai skema pengulangan yang ada, pemilihan dan penerapan skema yang tepat dengan mengacu pada spesifikasi persoalan yang ada mempunyai dasar yang lebih baik. Pada gilirannya, pemilihan skema yang tepat turut berkontribusi pada pereduksian kemungkinan lahirnya kode program yang mengandung kesalahan (faulty code). Daftar Pustaka [1] Alan M. Davis, "201 Principles of Software Development, McGraw-Hill, 1995. [2] Anne Shier, "Programming Concepts and Logics", September 2002, http://www.geocities.com/anneshier2000/New_Webpages/Programming_Conce pts_and_Logic.htm [3] Edward Yourdon, "Decline and Fall of the American Programmer", Englewood Cliffs, N.J, Prentice Hall, 1992, Bab 8 di dalam Alan M. Davis, "201 Principles of Software Development", McGraw-Hill, 1995. [4] Ellen L. Walker, "Programming Languages", notes on Axiomatic Semantics (Proving Programs Correct), http://cs.hiram.edu/~walkerel/cs351/Programproof.pdf [5] Kenneth H. Rosen, "Discrete Mathematics and Its Application", McGraw-Hill, 1999, Hal. 223 [6] Lawrence C. Paulson, "Software Engineering If, lecture notes, University of Cambridge, 1998, hal. 13-21, http://www.cl.cam.ac.uk/Teaching/1998/SWEng2/ notes.pdf [7] Merriam-Webster Unabridged Dictionary Versi 2.5, Software, 2000. [8] Tep Dobry, "Programming For Engineers in C", lecture notes, University of Hawaii,
Pemilihan Skema Pengulangan ... (Aditya R.M.)
99
PETUNJUK PENULISAN NASKAH 1. 2.
3.
4.
5.
6. 7.
8.
9.
Naskah-naskah yang dimuat dalam Jurnal FIK - UPH meliputi topik seputar llmu Komputer. Naskah dapat ditulis dalam Bahasa Indonesia atau Bahasa Inggris, dapat berupa hasil penelitian atau studi kepustakaan yang belum pernah diterbitkan dalam media lainnya. Apabila pernah dipresentasikan dalam seminar/ lokakarya, agar diberikan keterangan yang lengkap. Naskah diketik dengan menggunakan program Microsoft Word, dengan format .doc. Diserahkan dalam bentuk softcopy dan hardcopy kepada Redaksi Jurnal FIK - UPH selambat-lambatnya 2 bulan sebelum waktu penerbitan (waktu terbit 3 kali dalam setahun, yaitu pada bulan Januari, Mei, dan September). Ketentuan standard pengetikan naskah: 1) Ukuran Kertas: 1 6 x 24 cm dan Margin: Top 1.5cm, Bottom 1 cm, Left 1.5cm, Right 1.5cm 2) Jenis huruf Arial, ukuran 11 pt 3) Jarak ketikan 1 spasi 4) Jumlah halaman 6 - 1 5 halaman 5) Abstrak ditulis dalam Bahasa Inggris 6) Pengunaan istilah asing yang belum lazim digunakan dalam Bahasa Indonesia dicetak miring (italic) 7) Gambar diberi nomor dan judul pada posisi bawah gambar 8) Tabel diberi nomor dan judul pada posisi atas tabel. Redaksi berhak melakukan editing tanpa berubah isi dan makna tulisan. Apabila pada waktu editing terdapat ketidakjelasan isi dan makna pada tulisan, maka tulisan akan dikembalikan kepada penulis untuk diperbaiki. Penulis diberi waktu 1 minggu untuk mengembalikan naskah tersebut kepada Redaksi. Untuk penulisan kutipan diberi nomor sesuai dengan nomor urut pada kepustakaan/ referensi, dengan format superscipt. Kepustakaan atau referensi diurutkan secara ascending (A-Z) dan diberi nomor: 1) Untuk Buku, harus mencatumkan: nama pengarang, judul buku (cetak tebal dan miring), lokasi, nama penerbit, dan tahun terbit 2) Untuk Artikel, harus mencatumkan: nama pengarang, judul artikel, judul b u k u / majalah/ jurnal (cetak miring), volume, nomor, dan tahun terbit 3) Untuk situs web, harus mencatumkan: nama pengarang, judul situs (cetak miring), alamat situs, dan tanggal publikasi Setelah referensi cantumkan biodata penulis, meliputi: 1) Nama lengkap 2) Gelar yang diperoleh, dimana, dan bidang apa dari yang terbaru sampai yang terlama 3) Afiliasi (home base) dan jabatan structural 4) Mata kuliah yang diajar dan research interest 5) Foto (bila ada) Naskah yang dimuat tidak terbatas hanya untuk kalangan Dosen/ Staf Pengajar FIK - UPH, namun terbuka untuk kalangan Akademisi atau llmuwan dari Fakultas atau Perguruan Tinggi lainnya.