0 penilaian0% menganggap dokumen ini bermanfaat (0 suara)
70 tayangan91 halaman
Algoritma adalah urutan langkah logis untuk menyelesaikan masalah. Pemrograman adalah proses menulis algoritma ke dalam bahasa pemrograman yang dapat dipahami komputer. Langkah-langkah pemrograman meliputi mendefinisikan masalah, menentukan solusi, memilih algoritma, menulis program, menguji program, dan mendokumentasikan program.
Algoritma adalah urutan langkah logis untuk menyelesaikan masalah. Pemrograman adalah proses menulis algoritma ke dalam bahasa pemrograman yang dapat dipahami komputer. Langkah-langkah pemrograman meliputi mendefinisikan masalah, menentukan solusi, memilih algoritma, menulis program, menguji program, dan mendokumentasikan program.
Algoritma adalah urutan langkah logis untuk menyelesaikan masalah. Pemrograman adalah proses menulis algoritma ke dalam bahasa pemrograman yang dapat dipahami komputer. Langkah-langkah pemrograman meliputi mendefinisikan masalah, menentukan solusi, memilih algoritma, menulis program, menguji program, dan mendokumentasikan program.
Kata Algorism berasal dari nama penulis buku Arab yang terkenal, Abu Jafar Muhammad ibnu Musa al-Kuwarizmi, Dalam bukunya yang berjudul Kitab al jabr walmuqabala, yang artinya Buku Pemugaran dan Pengurangan ( The book of restoration and redution ). Menurut Donald. E Knuth dalam bukunya yang berjudul The Art o !omputer "rogramming, algoritma harus mempunyai lima #iri penting $ %. Algoritma harus berhenti setelah mengerjakan sejumlah langkah&langkah yang telah ditentukan. '. (etiap langkah yang telah ditentukan harus terdeinisi dengan jelas dan tepat sehingga tidak mempuntyai arti ganda. ). Algoritma dapat mempunyai * ( nol ) atau lebih masukan ( input ) +. Algoritma dapat mempunyai * ( nol ) atau lebih keluaran ( output ) ,. Algoritma harus eekti dan sederhana sehingga dapat dikerjakan dengan -aktu yang masuk akal. Dalam Kamus .esar .ahasa /ndonesia terbitan .alai "ustaka %011, dikatakan bah-a $ Algortima adalah urutan logis pengambilan keputusan untuk pemecahan masalah. Algoritma sangat penting di dalam /lmu Komputer atau /normatika, banyak #abang ilmu komputer yang dalam proses penyelesaiannya menggunakan algoritma. 2amun demikian jangan beranggapan algoritma itu selalu identik dengan komputer. Karena dalam kegiatan sehari&haripun dapat kita temui istilah algoritma. (eperti misalnya $ algoritma untuk merakit komputer, Algoritma untuk menjadi mahasis-a teladan, dll. Agar algortima dapat diproses oleh komputer, maka algoritma tersebut harus di nyatakan dalam bentuk program. Dengan kata lain bah-a program adalah implementasi dari algoritma. Agar mudah untuk menggambarkan algoritma, maka diperlukan alat&alat untuk mengggambarkan algoritma tersebut. 2amun demikian hal inipun siatnya tidak mutlak, Halaman 1 Pendahuluan Algoritma Pemrograman dapat saja si pemakai menggambarkan algoritma dengan kata&katanya sendiri selama beberapa ketentuan dan aturan khusus dapat dipenuhi. Pemrogramman "emrogramman adalah merupakan langkah untuk menulis algoritma yang dapat dimengerti oleh komputer. 3angkah&langkah dalam "emrogramman Komputer %. Mendeinisikan Masalah "ada tahapan ini di#ari apa masalahnya 4, apa yang harus dipe#ahkan oleh komputer 4, bagaimana masukan dan keluarannya 4. '. Menentukan (olusi (etelah permasalahannya dideinisikan dengan jelas, masukan dan keluaran yang diminta juga jelas, maka tahap selanjutnya adalah men#ari jalan bagaimana permasalahan tersebut dapat dipe#ahkan. Apabila permasalahan yang akan diselesaikan #ukup kompleks maka penyelesaiannya dipe#ah ke dalam program&program yang lebih ke#il yang dinamakan dengan "rosedur arau 5ungsi. ). Memilih Algoritma Tahap ini merupakan tahap pemilihan solusi yang telah ditemukan pada tahap sebelumnya. (olusi dituliskan dalam langkah&langkah penyelesaian masalah. Memilih algoritma yang baik menjadi sangat penting karena algoritma yang baik akan menghasilkan unjuk kerja program yang baik pula. +. Menulis "rogram (etelah algoritma dipilih, selanjutnya adalah menuliskan programnya sesuai dengan bahasa pemrograman yang digunakan. ,. Menguji "rogram (etelah penulisan program selesai, selanjutnya adalah menguji program tersebut apakah sudah dapat dikompilasi dengan baik, jika sudah selanjunya adalah apakah sudah menghasilkan keluaran yang sesuai dengan kebutuhan. 6ntuk mendapatkan hasil yang maksimal, pengujian program sebaiknya menggunakan kasus&kasus yang banyak. 7. Menulis Dokumentasi Tahap ini biasanya dilakukan bersamaan dengan tahapan menulis program. "ada setiap baris program diberi komentar sedemikian rupa sehingga dapat menerangkan apa yang dilakukan oleh baris program tersebut. 8al ini diperelukan pada saat perbaikan atau perubahan program pada -aktu yang akan datang. 9. Mera-at "rogram Tahap ini dilakukan untuk menjaga keberlangsungan program yang sudah dibangun. .iasanya untuk mendeteksi adanya BUG yang tidak terdeteksi sebelumnya. Halaman 2 BAB I Algoritma Pemrograman DATA Tes Kemampuan Awal %. Apakah deinisi algortima dan "emrogramman 4 '. :elaskan dan tuliskan apa yang dimaksud dengan $ a. Tipe data dasar i. .ilangan 3ogik ii. .ilangan .ulat iii. .ilangan ;iil. i<. Karakter b. Tipe data bentukan i. (tring ii. ;e#ord ). Apa saja yang dapat diberi nama dalam sebuah program 4 +. Apa yang anda ketahui mengenai $ a. "engisian harga sebuah <ariabel dengan #ara "enugsan, b. "engisian harga sebuah <ariabel dengan #ara /nput de<i#e, ,. Apa yang anda ketahui mengenai istilah ekspresi dalam penulisan 4 Halaman 3 Algoritma Pemrograman DATA 6ntuk mengenal lebih jauh tentang data yang sering digunakan dalam komputasi, maka ada beberapa hal yang perlu diketahui. 1.1. Tipe Data Tipe Data dapat dikelompokan menjadi atas dua ma#am tipe yaitu $ Tipe Dasar Tipe .entukan. Tipe Dasar adalah tipe yang langsung dapat dipergunakan, sedangkan tipe bentukan dibangun dari tipe dasar atau dari tipe bentukan lain yang sudah dideinisikan terlebih dahulu. 1.1.1. Tipe Data Dasar Tipe Dasar Data terdiri dari $ bilangan logik, bilangan bulat, bilangan riil, karakter. 1.1.1.1. Bilangan Logik .ilangan logik hanya mengenal ' ma#am nilai yaitu $ True ( .enar ) 5alse ( (alah ) .ilangan ini sering juga dinamakan sebagai bilangan Boolean. /stilah bilangan untuk bilangan logik ini karena kondisi Benar dapat dinyatakan dengan bilangan % dan !alah dinyatakan dengan bilangan *. Tipe bilangan logik dideinisikan sbb $ 2ama $ boolean Daerah $ 5alse, True Misal $ 5alse, True =perator $ not, and, or, >or Halaman 4 Algoritma Pemrograman =perasi dengan bilangan logik menghasilkan bilangan logik. :ika a dan b adalah <ariable yang bertipe boolean, maka hasil operasi a dan b dengan operator boolean tersebut adalah seperti dalam tabel di ba-ah ini $ a b true alse alse true a b a and b a or b a >or b True True True True 5alse True 5alse 5alse True True 5alse True 5alse True True 5alse 5alse 5alse 5alse 5alse And hanya akan bernilai benar jika kedua&duanya benar Or hanya akan bernilai salah jika kedua&duanya salah or hanya bernilai salah jika kedua&duanya sama !ontoh $ A ? True . ? True 2ot A ? 5alse 2ot A and . ? 5alse A =r 2ot . ? True 1.1.1.!. Bilangan Bulat .ilangan bulat adalah bilangan yang tidak mengandung bilangan pe#ahan dalam penyajiannya. Misalnya $ 7+, 0+99,, & 7+7, *, dsb. Dalam algoritma, tipe bilangan bulat dideinisikan sbb $ 2ama $ /nteger Daerah $ / Misal $ 7+, & ,1, )1+,7, *, )+++ =perator $ a) =perator Aritmatik @ tambah & kurang A kali B bagi di< hasil bagi mod sisa bagi b) =perator ;elational B "erbandingan Halaman 5 Algoritma Pemrograman < lebih ke#il lebih ke#il sama dengan > lebih besar lebih besar sama dengan = sama dengan tidak sama dengan Dalam kenyataannya, bilangan bulat mempunyai daerah yang tidak terhingga ( & , ). =perasi aritmatika bilangan bulat dengan operator bilangan bulat menghasilkan nilai yang bertipe bilangan bulat juga. Ada , tipe data yang termasuk dalam kelompok integer ini. Kelima tipe data tersebut adalah $ Tipe Batas "ilai #kuran dalam b$te .yte (hortint /nteger Cord 3ongint *..',, &%'1..%'9 &)'971..)'979 *..7,,), &'%+9+1)7+1.. '%+9+1)7+9 % % ' ' + !ontoh operasi aritmatika bilangan bulat $ %) @ %* hasil ') 17 & %7 hasil 9* ' A 1 hasil %7 +1 di< ) hasil %7 +1 mod ) hasil * +, mod ) hasil * =perasi aritmatik dengan operator relational menghasilkan nilai boolean (benar atau salah) !ontoh operasi relasional $ , < 7 benar +, +, benar ,7 > ,7 salah ), ), benar )7 = )7 benar )1 ,1 benar 1.1.1.%. Bilangan &iil Halaman 6 Algoritma Pemrograman Tipe bilangan riil dideinisikan sbb $ 2ama $ real Daerah $ ; Misal $ *. 71. )9.+ 79.+, *.)+,7 7E&7 &+.7 =perator $ a) =perator Aritmatik @ tambah & kurang A kali B bagi b) =perator ;elational B "erbandingan < lebih ke#il lebih ke#il sama dengan > lebih besar lebih besar sama dengan tidak sama dengan (emua bilangan riil harus mengandung D.E ( titik ). 2ilai 0 dianggap bilangan bulat, tetapi 0. dianggap bilangan riil. .ilangan riil dapat juga dituliskan dengan notasi E yang artinya perpangkatan sepuluh. Misalnya #ontoh 7E&7 artinya 7 > %* &7 . .ilangan .ulat ataupun bilangan ;iil keduanya dinamakan tipe numerik. Ada , tipe data yang termasuk dalam kelompok real ini. Kelima tipe data tersebut adalah $ Tipe Batas "ilai Angka 'igni(ikan #kuran dalam b$te ;eal (ingle Double E>tended !omp '.0 > %*E&)0.. %.9 > %*E&)1 %., > %*E&+,.. ).+ > %*E&)1 ,.* > %*E&)'+.. %.9 > %*E&)*1 %.0 > %*E&+0,%.. %.% > %*E&+0)' &'E7) @ %.. &'E7) &% %% F %' 9 F 1 %, F %7 %0 F '* %0 F '* 7 + 1 %* 1 =perasi aritmatik dengan salah satu operandnya bertipe bilangan riil dinamakan operasi #ampuran dan menghasilkan nilai dalam daerah bilangan riil. !ontoh operasi aritmatik bilangan riil $ 9., @ +.9 hasil %).' Halaman 7 Algoritma Pemrograman 1.* & ).9 hasil +.) 0 B + hasil '.', %, B '., hasil 7.* (eperti halnya pada tipe bilangan bulat, operasi relasional dengan bilangan riil menghasilkan nilai boolean. !ontoh operasi relasional $ *.*79 < )+ benar 0.9* ,.7 benar 1.97 1.97 salah =perasi bilangan riil tidak mengenal operator ? G karena bilangan riil tidak dapat direpresentasikan se#ara benar oleh komputer. Misalnya %B) ? *.))))H.. dengan angka ) yang tidak pernah berhenti. .iasanya dalam perhitungan komputer dibulatkan sesuai dengan batasan jumlah digit dibelakang koma yang dipakai. 2amun demikian, %B) tidaklah sama dengan *.)))). Dengan alasan ini maka operator ? tidak digunakan untuk operasi bilangan riil. 1.1.1.). Karakter Tipe Karakter dideinisikan sbb $ 2ama $ #har Daerah $ ( *,%, HH..,0, a, b, #, HH.. ,I, A,., HHH, J, D D, K, L, M, N, O, dan karakter khusus lainnya. ( symbol A(!// ) Misal $ DhE, DPE, D%E, A , dll. =perator $ relasional < lebih ke#il lebih ke#il sama dengan > lebih besar lebih besar sama dengan tidak sama dengan ? sama dengan (eperti pada tipe bilangan bulat, karakter mempunyai keterurutan (su##essor B sesudah dan prede#essor B sebelum ) yang ditentukan #ara pengkodeannya di dalam komputer. !ontoh operasi #hara#ter $ A ? a salah 5 ? 5 benar K Q . benar R S D salah 1.1.!. Tipe Data Bentukan Halaman 8 Algoritma Pemrograman Tipe bentukan dibangun dari beberapa elemen yang bertipe dasar atau dari tipe bentukan lain yang sudah dideinisikan terlebih dahulu. =perasi terhadap elemen bertipe dasar dilakukan seperti halnya pada tipe dasar. Tipe bentukan seringkali disebut juga tipe terstruktur . Tipe bentukan diberi nama oleh programmer. 1.1.!.1. 'tring !tring adalah deretan karakter dengan panjang tertentu. Tipe string dideinisikan sbb $ 2ama $ string Daerah $ deretan karakter yang dideinisikan pada daerah karakter Misal $ D.A2D62TE, D(TM/K&M/E, D:l. (oekarno & 8atta ')7E (emua string harus diapit oleh tanda petik tunggal. =perator $ a) "enyambungan @ b) ;elasional < lebih ke#il lebih ke#il sama dengan > lebih besar lebih besar sama dengan tidak sama dengan ? sama dengan =perator D@E disini bukanlah operator penjumlahan seperti pada tipe numerik ( integer atau real ). =perator D@E berarti penyambungan. .ila a dan b adalah peubah bertipe string, maka a @ b sama dengan ab. !ontoh $ DTeknikE@D/25=;MAT/KAE ? DTeknik/25=;MAT/KAE DTeknikE@DU/25=;MAT/KAE ? DTeknikU/25=;MAT/KAE D>>>E @ DUyyy + zzz = xxxUyyyIIIE D%E @ D'E ? D%'E =perator relasional, seperti pada karakter, menghasilkan nilai boolean (benar atau salah). !ontoh $ DEghE ? DegE salah DsayaE S D(APAE salah (tring yang terdiri dari angka dan huru sering dinamakan dengan alfanumerik . Halaman 9 Algoritma Pemrograman 1.1.!.!. &ecord * &ekaman (ebuah re#ord B rekaman disusun oleh satu atau lebih ield. Tiap ield berisi data dari tipe dasar tertentu atau tipe bentukan lain yang sudah dideinisikan terlebih dahulu. 2ama re#ordBrekaman ditentukan oleh programmer. (ebuah rekaman B re#ord dengan tiga buah ield jika digambarkan se#ara logic adalah sbb $ +ield1 +ield! +ield% !ontoh $ Mendeinisikan tipe bentukan yang menyatakan data mahasis-a. Data mahasis-a terdiri atas 2/M, 2ama dan 6sia. Misalkan tipe bentukan ini dinamakan M8(. Type M8( $ re#ord V 2/M $ integer, nama $ string, usia $ integer W :ika dideklarasikan M adalah <ariable bertipe M8(, maka #ara menga#u tiap ield pada re#ord B rekaman M adalah $ M.2im M.2ama M.usia 2ama $ M8( Daerah $ sesuai dengan daerah masing&masing ield Misal $ V 9+)7,1)1,, D6#i (anusiE, 90 W V 7+0+7*+1,, D6nang hermansyah, )+ W =perator $ Tidak ada operator untuk M8( tetapi kita dapat melakukan $ - operasi integer terhadap M8(.2/M - operasi string terhadap M8(.nama - operasi real terhadap M8(.usia 1.!. "ama Di dalam program, sesuatu yang diberi nama dapat berupa $ %. Xariable ( "eubah ) '. !onstant ( Tetapan ) ). Tipe seperti yang telah dijelaskan +. 5ungsi yang digunakan ( dijelaskan kemudian ) ,. "rosedur yang digunakan ( dijelaskan kemudian ) Dalam penulisan program, ada beberapa aturan penulisan nama yang harus dipenuhi. %. 8arus selalu dia-ali dengan huru ( alabet ) '. 8uru besar atau huru ke#il tidak dibedakan ). Karakter penyusun nama hanya terdiri dari alabet, angka, garis ba-ah ( D U D ). Halaman 10 Algoritma Pemrograman +. Tidak boleh ada spasi yang memisahkan string yang disusun. ,. "anjang nama tidak dibatasi. !ontoh yang salah $ 9PA2T karena dimulai dengan angka nilai 6A( karena ada spasi 23&% karena ada operator kurang L(atu karena ada karakter khusus . ' karena ada spasi !ontoh yang benar PA2TU9 nilai6A( 23% (atu .' 1.%. ,arga 8arga adalah nilai besaran dari tipe yang sudah dikenal. 8arga dapat berupa nilai yang dikandung oleh nama <ariable atau -onstant ( tetapan ). 1.%.1. Pengisian ,arga ke dalam .ariable 8arga dapat diisikan ke dalam <ariable dengan #ara "enugasan B assigment 1.%.1.1. Penugasan "enugasan adalah mengisikan sebuah harga pada <ariable se#ara langsung. "roses penugasan biasanya dalam algoritma dapat digambarkan dengan lambang DE atau D ? D. 8arga yang dimasukan ke dalam <ariable dapat juga di ambil dari <ariable yang lain selama tipe data yang dimasukan sama dengan tipe nama yang akan dimasukinya. !ontoh 2otasi Algoritma untuk penugasan $ 2ama tetapan ( harga tetapan diisikan ke dalam nama ) 2ama% nama' (harga nama' disalin ke nama%, nama% sama dengan nama') 2ama ekspresi ( hasil perhitungan diisikan ke dalam nama ) Atau 2ama ? tetapan ( harga tetapan diisikan ke dalam nama ) 2ama% ? nama' (harga nama' disalin ke nama%, nama % sama dengan nama') 2ama ? ekspresi ( hasil perhitungan diisikan ke dalam nama ) Halaman 11 Algoritma Pemrograman 1.%.1.!. /nput ,arga dari /nput de0ice 8arga untuk 2ama <ariable dapat diisi dari peralatan input misalnya keyboard. Mengisi harga dari input de<i#e dinamakan operasi pemba#aan data. /stilah ba#a ini timbul karena komputer seakan&akan memba#a harga yang diberikan oleh pemakai. Dalam Algoritma perintah untuk pemba#aan data dilakukan dengan perintah input . !ontoh $ /nput ( nilai%) (yaratnya adalah nilai% adalah nama <ariable, tidak boleh nama tetapan B #onstant. Ketika perintah di atas dilaksanakan, komputer menunggu pemakai mengetikan harga nila% dari input de<i#e. .ila diketikan angka 07 lalu diikuti dengan tombol SenterQ, maka tempat dimemori yang bernama nilai% sekarang berisi 07. 1.%.!. 1kspresi (uatu harga dipakai untuk proses transormasi menjadi keluaran yang diinginkan. Transormasi harga menjadi keluaran dilakukan melalui suatu perhitungan ( komputasi ). !ara perhitungan itu dinyatakan dengan suatu ekspresi. (uatu ekspresi terdiri dari o"erand dan o"erator #"erand adalah harga yang dioperasikan dengan o"erator tertentu. O"erand dapat berupa nama <ariable atau #onstant B tetapan. 8asil perhitungan adalah harga dengan daerah yang sesuai dengan tipe o"erator yang dipakai. Ekspresi dikenal dalam dua ma#am $ Ekpresi 2umerik dan Ekspresi .olean. 1.%.!.1. 1kspresi "umerik Ekspresi 2umerik adalah ekspresi yang baik operand- nya bertipe numerik dan hasilnya juga bertipe numerik. Misalkan diinisialisasikan B kamus sbb $ Kamus a, b, # $ real d $ integer e, , g $ integer !ontoh Ekspresi 2umerik $ a > b 8asil perhitungan juga bertipe real. "ada ekspresi ini, operand&nya adalah a dan b sedangkan operatornya adalah > G ( perkalian ). .ila hasil perhitungan disimpan ke dalam Halaman 12 Algoritma Pemrograman nama <ariable, maka nama <ariable haruslah bertipe sama dengan tipe hasil. "engisian hasil ekpresi a > b ke dalam <ariable # melalui penugasan $ # a > b atau # ? a > b 1.%.!.!. 1kspresi &elasional Ekpresi relational adalah ekspresi dengan operator <, >, , , = dan .8asil ekpresinya selalu bernilai boolean. /nisialisasi B identiikasi kamusnya adalah $ Kamus Ada, Ketemu, besar $ boolean >, y $ integer !ontoh $ 2ot ada hasil alse ada and true hasil true > S , hasil alse ada or ( > ? y ) hasil true 1.%.%. Output ,arga 8arga yang disimpan di dalam memori dapat ditampilkan ke output de<i#e. "erintah penulisan harga adalah dengan perintah output. !ontoh $ =utput (nama%) =utput (#onstant) =utput (ekpresi) Halaman 13 BAB II Algoritma Pemrograman 'T&#KT#& AL2O&/T3A DA" ALAT P1"22A3BA&A" "4A Tes Kemampuan Awal %. Apa yang anda ketahui mengenai struktur algoritma $ a. ;untunan B (eYuen#e b. "emilihan B (ele#tion #. "engulangan B 3ooping '. Apa yang anda ketahui mengenai alat penggambaran algoritma $ a. (istem 5lo-#hart, b. "rogram 5lo-#hart. #. 2assi (#hneiderman, d. "seudo#ode ). Apa yang anda ketahui mengenai bagian algoritma $ a. .agian Kepala Algoritma, b. .agian Deklarasi, #. .agian Deskripsi. +. .uatlah Algoritma dengan menggunakan 5lo-#hart, 2s Diagram dan "seudo#ode untuk menampilkan deret angka seperti diba-ah ini $ a. %, ', ), +, ,, H..,n b. %, ), ,, 9, 0, H..,n #. ', +, 7, 1, %*, H,n d. %, ,, 0, %), HH.,n ,. .uatlah Algoritma dengan menggunakan 5lo-#hart, 2s Diagram dan "seudo#ode untuk men#ari jumlah masing&masing deret yang ada pada (oal 2o. %. Halaman 14 Algoritma Pemrograman !.1. 'truktur Algoritma Algoritma adalah rangkaian langkah&langkah yang logis untuk menyelesaikan masalah. Ada tiga struktur dasar untuk membangun algoritma. Ketiga struktur tersebut adalah $ !.1.1. &untunan * 'e5uence Algoritma dalah merupakan runtunan proses, yang berarti $ %. Tiap proses dikerjakan satu per satu. '. Tiap proses dilaksanakan tepat satu kali, tidak ada proses yan diulang. ). 6rutan proses yang dilaksanakan dalam pemrosesan sama dengan urutan proses sebagaimana yang tertulis di dalam algoritma. +. Akhir dari proses terakhir merupakan akhir algoritma. .ila runtunan proses dalam algoritma dilambangkan dengan A%, A', A), A+ dan A,, maka urutan pelaksanaan proses&proses tersebut adalah seperti gambar di ba-ah ini $ !ontoh $ Algoritma membuat Kue .olu. Z !atatan $ semua bahan sudah tersedia dan sudah sesuai dengan takarannya [ - Masukan Puti !elur - "ocok #ampai mengem$ang - Masukan gula pasir - "ocok #ampai merata - Masukan tepung - "ocok #ampai merata Algoritma "enulisan (TM/K&M/\ Kamus 3okal $ .a#a $ (tring V'*W Algoritma $ /nput ( .a#a ) =utput ( .a#a ) Halaman 15 A1 A2 A3 A4 A5 Algoritma Pemrograman !.1.!. Pemilihan * 'election Dalam beberapa kasus tertentu kita dihadapkan kepada persoalan yang mempunyai pilihan atau dua ja-aban yang berbeda dan salah satunya harus dipilih atau bahkan mungkin mempunyai pilihan lebih dari dua. 6ntuk hal yang demikian, maka pelaksanaan proses adalah seperti di ba-ah ini $ !.1.!.1. "otasi analisis satu masalah Algoritma $ /( kondisi T,1" Aksi Endi Aksi sesudah ten akan dilaksanakan jika kondisi bernilai benar. :ika kondisi bernilai salah maka aksi tersebut tidak akan dikerjakan ( dile-at ). !ontoh$ - Jika %mir men&adi &uara kelas Maka akan di$elikan #epeda Mini !ontoh $ Algoritma Penulisan 'T3/K63/\ Kamus Lokal 7 .a#a $ (tring V'*W Agoritma 7 /nput ( .a#a ) /+ .a#a SQ $ (TM/K&M/G T,1" .a#a ?$ (Tulisan Anda (alah ) 1"D/+ =utput ( .a#a ) Halaman 16 ? Algoritma Pemrograman !.1.!.!. "otasi analisis dua masalah Algoritma $ /+ kondisi T,1" Aksi% 1L'1 Aksi' 1"D/+ Aksi% sesudah then akan dilaksanakan jika kondisi bernilai benar, jika kondisi bernilai salah maka aksi' yang akan dikerjakan. !ontoh$ - Jika %mir men&adi &uara kelas Maka akan di$elikan #epeda Mini !elain itu tidak mendapat apa-apa !ontoh $ Algoritma Penulisan 'T3/K63/8 Kamus Lokal 7 .a#a $ (tring V'*W Algoritma 7 /nput ( .a#a ) /+ .a#a SQ $ (TM/K&M/G T,1" .a#a $? (Tulisan Anda (alah ) 1L'1 .a#a $? (Tulisan Anda .enar ) 1"D/+ =utput ( .a#a ) !.1.%. Pengulangan * Looping (elain dapat melakukan proses pemilihan aksi, komputer juga dapat melakukan aksi pengulangan. Aksi pengulangan ini dilakukan sebanyak proses yang diinginkan atau sampai kondisi tertentu dipenuhi. Halaman 17 Algoritma Pemrograman (e#ara umum pengulangan terdiri atas dua bagian $ %. Kondisi, yaitu ekspresi boolean yang mengakibatkan pengulangan sampai suatu saat berhenti. '. Aksi yang diulang selama belum memenuhi kondisi berhenti. Di dalam program terdapat beberapa notasi pengulangan yang berbeda, demikian juga dengan notasi dalam algoritma. .eberapa notasi dapat digunakan untuk satu masalah yang sama, namun ada notasi pengulangan tertentu yang hanya #o#ok dipakai untuk permasalahan tertentu. .eberapa ma#am perintah pengulangan $ !.1.%.1. "otasi +O& 9 Do 2otasi Algoritma $ 5or <ariable harga awal To harga akhir aksi Endor Aksi di dalam badan pengulangan akan dilakukan sampai dengan harga akhir dipenuhi. Apabila satu aksi pertama telah dilakukan maka se#ara otomatis <ariable yang tadinya mempunyai harga a-al akan bertambah %. !ontoh $ Algoritma Pengulangan:+or:do8 Kamus Lokal 7 2 $ /nteger Algoritma 7 /nput ( 2 ) +O& : % TO 2 DO =utput ( (TM/K&M/ ) 1"D+O& Algoritma ini akan men#etak tulisan D(TM/K& M/E sebanyak 2 kali. Halaman 18 Algoritma Pemrograman !.1.%.!. "otasi &epeat 9 #ntil 2otasi Algoritma $ ;epeat aksi 6ntil kondisi Aksi di dalam badan pengulangan akan dilakukan selama kondisi bernilai benar. Apabila bernilai salah, maka pengulangan akan berhenti. 2amun demikian diperlukan suatu perintah untuk mengubah kondisi sehingga memungkinkan untuk kondisi tidak dipenuhi. Apabila tidak ada perintah untuk mengubah kondisi yang telah ada, maka proses pengulangan tidak akan pernah berhenti. !ontoh $ Algoritma Pengulangan:&epeat:#ntil Kamus Lokal 7 : $ /nteger Algoritma 7 : % &1P1AT =utput ( (TM/K&M/ ) : :@% #"T/L (: Q '*) Algoritma ini akan men#etak tulisan D(TM/K&M/E sebanyak '* kali. !.1.%.%. "otasi ;hile 9 Do 2otasi Algoritma $ Chile kondisi do aksi End-hile Aksi di dalam badan pengulangan akan dilakukan selama kondisi bernilai benar. Apabila bernilai salah, maka pengulangan akan berhenti. 2amun demikian diperlukan suatu perintah untuk mengubah kondisi sehingga memungkinkan untuk kondisi tidak dipenuhi. Apabila tidak ada perintah untuk mengubah kondisi yang telah ada, maka proses pengulangan tidak akan pernah berhenti. Halaman 19 Algoritma Pemrograman "erbedaannya dengan $e"eat-%ntil adalah ada kemungkinan aksi tidak dijalankan karena kondisi bernilai salah. :ika pada $e"eat-%ntil minimal akan dilakukan aksi sebanyak % kali. !ontoh $ Algoritma Pengulangan:;hile:Do Kamus Lokal 7 :,2 $ /nteger Algoritma 7 /nput( 2 ) : % ;,/L1 : 2 DO =utput ( (TM/K&M/ ) : :@% 1"D;,/L1 (etelah melakukan proses /nput 2 maka algoritma ini akan men#etak tulisan D(TM/K&M/E selama nilai : lebih ke#il atau sama dengan nilai 2. !.!. +lowchart Tujuan utama dari penggunaan flowhart adalah untuk menggambarkan suatu tahapan penyelesaian masalah se#ara sederhana, terurai, rapih dan jelas dengan menggunakan simbol&simbol yang standar. Tahap penyelesaian masalah yang disajikan harus jelas, sederhana, eekti dan tepat. Dalam penulisan flowhart dikenal dua model, yaitu !istem &lowhart dan Program &lowhart. !.!.1. 'istem +lowchart (istem lo-#hart merupakan diagram alir yang menggambarkan suatu sistem peralatan komputer yang digunakan dalam proses pengolahan data serta hubungan antar peralatan tersebut. (istem lo-#hart tidak digunakan untuk menggambarkan urutan langkah meme#ahkan masalah, tetapi hanya untuk menggambarkan prosedur dalam sistem yang dibentuk. (imbol&simbol yang telah banyak digunakan pada penggambaran sistem lo-#hart adalah $ "ita Kartu "long B "un#hed Magnetik Keyboard "aper Tape Halaman 20 Algoritma Pemrograman =n 3ine /nput B =utput Magneti# Drum (torage B XD6 "ro#ess Magneti# Disk = 3ine (torage
"roses (ortir "roses Merge Arus !ontoh penggunaan (istem 5lo-#hart $ !.!.!. Program +lowchart "rogram lo-#hart merupakan diagram alir program yang menggambarkan urutan logika dari suatu prosedur peme#ahan masalah . Dalam menggambarkan program lo-#hart telah tersedia simbol&simbol standar. .aik program lo-#hart ataupun sistem lo-#hart dapat menambahkan simbol&simbol yang baru dengan syarat harus menambahkan simbol tersebut di dalam kamus simbol yang digunakan beserta keterangannya. (imbol&simbol yang standar digunakan dalam menggambarkan program lo-#hart adalah $ /nputB =utput /nisialisasi "emberian "roses 2ilai a-al Halaman 21 Keyboard CPU Disket Display Algoritma Pemrograman Keterangan Arus "engujian "ilihan A-al B Akhir Konektor dalam Konektor untuk "rogram satu halaman halaman berbeda !ontoh penggunaan "rogram 5lo-#hart $ !.%. "assi 'chneiderman < "s Diagram = (elain dengan menggunakan lo-#hart, penggambaran algoritma dapat juga dilakukan dengan menggunakan lo-#hart 2assi (#hneiderman. "ada dasarnya lo-#hart ini adalah lo-#hart yang terstruktur karena tanpa menggunakan tanda panah untuk proses pengulangannya. (imbol&simbol yang digunakan dalam lo-#hart 2assi (#heneiderman adalah \ (eYuen#e 3ooping !ontrol !ontrol Halaman 22 START INPUT Berapa Data; N Jl ! " #or K ! $ To N I%p&t Bil Jl ! Jll ' Bil Ne(t K Pri%t ) J&la* ! ); Jl ST+P A A B B Statee%t , Statee%t $ Statee%t - Statee%t . /*ile ko%disi +perasi Algoritma Pemrograman (ele#tion !ontrol !ontoh penggunaan lo-#hart 2assi (#hneiderman dalam menyelesaikan persoalan akar persamaan k-adrat$ !.). Pseudocode "seudo#ode adalah kode yang mirip dengan kode pemrogramman yang sebenarnya. "seudo#ode berasal dari kata "seudo yang mempunyai arti mirip atau imitasi atau menyerupai, dan #ode berarti program. "seudo#ode ditulis berdasarkan pada bahasa pemrogramman .A(/!, "A(!A3, atau ! sehingga lebih tepat digunakan untuk menggambarkan algoritma program yang akan dikomunikasikan kepada programmer yang menngunakan program tsb. Halaman 23 Case +0 State $ State , State - T Statee%t $ Statee%t , 1 I# T Statee%t $ Ta%pa Proses 1 I# Start Pri%t ) 2e%3ari akar persaaa% K4adrat ) Pri%t ) A56,'B5'C ) I%p&t ) Ko%sta%ta A ! );A I%p&t ) Ko%sta%ta B ! );B I%p&t ) Ko%sta%ta C ! );C D ! B6,-.7A7C 1a Tidak D ! " Pri%t ) Akar Ia8i%er ) Pri%t )5$ ! 5, Pri%t 9B:;,7A< ($ ! ; -B's=rD<<:,A (, ! ; -B-s=rD<<:,A Pri%t ) 5$ ! );5$ Pri%t ) 5, ! );5, Stop 1a Tidak D > " Algoritma Pemrograman Dalam penulisan pseudo#ode dikenal struktur penulisan algoritma seperti seYuen#e stru#ture, sele#tion stru#ture dan looping stru#ture. !ontoh algoritma untuk membuat Menu adalah seperti di ba-ah ini $ ME26 ";=T;AM Membuat Arsip (impan Arsip 8apus Arsip Keluar dari Menu Ketikan nomor "ilihan Menu $ U Algorithm 2ame $ ME26 Kamus 3okal$ "il $ integer V%..+W Z nomor pilihan menu[ Algoritma ;epeat =utput (D ME26 ";=T;AM E) =utput (D %. Membuat Arsip E) =utput (D '. (impan ArsipE) =utput (D ). 8apus ArsipE) =utput (D +. Keluar dari MenuE) =utput (D Ketikan 2omor pilihan Menu $E) /nput (pil) Depend on pil "il?% $ output (D Anda Memilih menu Membuat Arsip D) "il?' $ output (D Anda Memilih menu (impan Arsip D) "il?) $ output (D Anda Memilih menu 8apus Arsip D) "il?+ $ output (D Anda Memilih menu Keluar dari menuD) Enddepend 6ntil pil?+ !ontoh $ Algoritma untuk menentukan bilangan tersebsar dari >, y, I. /+ > Q y then /+ > Q I then Tulis > sebagai bilangan terbesar 1lse Tulis I sebagai bilangan terbesar 1ndi( Halaman 24 Algoritma Pemrograman 1lse /+ y Q I then Tulis y sebagai bilangan terbesar 1lse Tulis I sebagai bilangan terbesar 1ndi( 1ndi( Karena bahasan selanjutnya akan menggunakan model prosedural, maka bagian data dan bagian intruksi dipisahkan tempatnya. "ada dasarnya algoritma terbagi dalam ) bagian yaitu $ Bagian Kepala (8ead ), Bagian Deklarasi dan Bagian Deskripsi algoritma. (etiap bagain disertai dengan komentar untuk memperjelas maksud teks yang dituliskan. Komentar adalah teks yang diapit oleh pasangantanda kurung kura-al Z [, ( ). !.).1. Bagian Kepala Algoritma < ,ead = .agian kepala dalah bagian yang berisi nama algoritma dan penjelasan ( spesiikasi ) tentang algoritma tersebut. !ontoh $ !.).!. Bagian Deklarasi .agian ini mendeklarasikan semua nama yang digunakan dalam algoritma. 2ama tersebut dapat merupakan nama Konstanta, nama <ariable, nama tipe, nama prosedur atau nama ungsi. !.).!. Bagian Dekripsi .agian ini adalah bagian yang berisi uraian langkah&langkah.penyelesaian masalah. Halaman 25 Algoritma LUAS_LINGKARAN ; 2e%8*it&%8 l&as li%8kara% &%t&k &k&ra% ?ari-?ari terte%t&@ Al8orita e%eria as&ka% ?ari-?ariA e%8*it&%8 l&as%yaA lal& e%3etak l&as li%8kara% ke pira%ti kel&ara%< DKLARASI B %aa tetapa% C 3o%ts Npe8 ! $"" ; ?&la* pe8a4ai < 3o%ts p*i ! -A$. ; %ilai p*i < B %aa DariableC 3 E 3*ara3ter = E bolea% 0&%3tio% APAKAFGA; i%p&t 3 E 3a*ar < boolea% ; e%e8balika% %ilai Tr&e bila 3 adala* karakter AA ata& 0alse ?ika sebalika%ya < Algoritma Pemrograman !ontoh !ontoh Algoritma lengkap $ Tugas 7 %. .uatlah Algoritma dengan menggunakan 5lo-#hart, 2s Diagram dan "seudo#ode untuk menentukan banyaknya bilangan ganjil dan bilangan genap yang lebih ke#il dari n ( nilai yang diinputkan ). Halaman 26 DSKRIPSI Read ;3Ad< I0 3 > d t*e% e a ' b else e a - b e%di0 4rite;e< Algoritma !AKSI!U! ; 2e%e%t&ka% bila%8a% terbesar dari - b&a* bila%8a% b&lat < DKLARASI AA BA C E i%te8er DSKRIPSI Read ; AA BA C < I" A H B then I" A H C then /rite ; Bila%8a% terbesar adala* A A< l#e /rite ; Bila%8a% terbesar adala* A C< ndi$ l#e I" B H C then /rite ; Bila%8a% terbesar adala* A B< l#e /rite ; Bila%8a% terbesar adala* A C< ndi$ ndi$ Algoritma Pemrograman Halaman 27 BAB III Algoritma Pemrograman A&&A4 * LA&/K Tes Kemampuan Awal %. Apa yang anda ketahui array satu dimensi dan array dua dimensi 4 '. .uatlah algoritma untuk mengisi dan menampilkan sebuah array serta menghitung jumlah dari seluruh isi elemen yang diinputkan. ). .uatlah algoritma untuk mengisi dan menampilkan sebuah array serta menampilkan elemen yang ganjil saja atau yang genap saja beserta jumlahnya menurut pembagiannya. +. .uatlah Algoritma untuk menghitung jumlah bilangan yang terletak pada garis diagonal sebuah matrik ,. .uatlah Algoritma untuk menjumlahkan dua buah matrik dengan menggunakan array dua dimensi K 7. .uatlah Algoritma untuk mengkailkan dua buah matrik dengan menggunakan array dua dimensi K Halaman 28 Algoritma Pemrograman %.1. Arra$ * Larik 'atu Dimensi %.1.1. De(inisi Arra$ * Larik 'atu Dimensi ArrayB3arik adalah struktur data yang menga#u pada sebuah atau sekumpulan elemen melalui indeks. Elemen ArrayB3arik dapat diakses langsung melalui indeksnya. /ndek Array B 3arik harus bertipe data yang menyatakan keterurutan, misalnya integer atau karakter. ArrayB3arik yang bernama A dengan delapan buah elemen dapat dibayangkan se#ara logika sebagai kumpulan kotak yang berturutan A % ' ) + , 7 9 1 Tiap kotak pada ArrayB3arik tersebut diberi indeks integer %,',),H,1. Tiap elemen ArrayB3arik ditulis dengan notasi $ AV%W AV'W AV)W AV+W AV,W AV7W AV9W AV1W Angka di dalam kurung siku menunjukan indeks dari ArrayB3arik. Karena tiap elemen ArrayB3arik menyatakan tempat di memori, maka sebagaimana siat memori adalah tempat penyimpan sementara, maka isi ArrayB3arik akan hilang jika komputer dimatikan. ).1.!. Pende(inisian Arra$ * Larik 'atu Dimensi dalam inisialisasi ArrayB3arik adalah struktur data yang statis, artinya jumlah elemen ArrayB3arik harus sudah diketahui sebelumnya. :umlah elemen ArrayB3arik tidak dapat dirubah, ditambah atau dikurangi selama pelaksanaan program. Mendeinisikan ArrayB3arik di dalam deinisi <ariable berrati $ & Mendeinisikan banyaknya elemen ArrayB3arik & Mendeinisikan tipe elemen ArrayB3arik Mendeinisikan banyaknya elemen ArrayB3arik berarti memesa sejumlah tempat di meori, dan memori akan mengalokasikan tempat sebanyak elemen larik yang bersangkutan. !ontoh pendeinisian ArrayB3arik di dalam deinisi <ariable $ Xar mahasis-a $ arrayV%..%**W o integer /ni berarti bah-a nama <ariable array mahasis-a bertipe integer dan mempunyai elemen maksimum sebanyak %** elemen. (eperti halnya <ariable tunggal, tiap elemen ArrayB3arik dapat diisi melalui penugasan atau pemba#aan dari input de<i#e. Halaman 29 Algoritma Pemrograman %.1.%. 3enginisialisasi Arra$ * Larik 'atu Dimensi Menginisialisasi ArrayB3arik adalah memberi harga a-al sebuah elemen ArrayB3arik. /nisialisasi kadang&kadang diperlukan, misalnya mengosongkan elemen ArrayB3arik sebelum dipakai untuk proses tertentu. Mengosongkan ArrayB3arik bertipe numerik artinya mengisi elemen ArrayB3arik dengan nilai *, jika bertipa karakter maka artinga mengisi elemen ArrayB3arik dengan spasi. !ontoh pemrosesan penginisialisasian elemen ArrayB3arik $ Penginisialisasian:elemen: Arra$:Larik Kamus Lokal 7 A $ arrayV%..%**W o integer /, 2 $ integer Algoritma 7 /nput (2) 5or / ? % to 2 do AV/W * Endor %.1. ). Pemrosesan Arra$ * Larik 'atu Dimensi Elemen ArrayB3arik tersusun se#ara beruntun. =leh karena itu, elemennya diproses se#ara beruntun melalui indeks yang terurut, asalkan indeks tersebut sudah terdeinisi. "emrosesan dilakukan mulai pada elemen pertama ArrayB3arik se#ara berurutan sampai elemen terakhir. !ontoh pemrosesan pengisian elemen ArrayB3arik $ Pengisian:#mum:elemen: Arra$:Larik Kamus Lokal 7 A $ arrayV%..%**W o integer /, 2 $ integer Halaman 30 Algoritma Pemrograman Algoritma 7 /nput (2) 5or / ? % to 2 do ( AV/W)? ( AV/W)@, Endor "roses adalah aksi yang dilakukan terhadap elemen ArrayB3arik. "roses dapat berupa penugasan, pemba#aan, penulisan atau manipulasi lainnya. %.1.>. /nput 1lemen Arra$ * Larik 'atu Dimensi dari /nput De0ice (elain dengan penugasan, elemen ArrayB3arik dapat diisi nilainya dari input de<i#e dengan menggunakan perintah /"P#T. !ontoh pengisian nilai ArrayB3arik dengan menggunakan perintah input. Pengisian:elemen: Arra$:Larik Kamus Lokal 7 A $ arrayV%..%**W o integer /, 2 $ integer Algoritma 7 /nput (2) 5or / ? % to 2 do /nput( AV/W) Endor (eringkali tidak seluruh elemen ArrayB3arik yang dideinisikan digunakan dalam pemrosesan. .ila ArrayB3arik A dideinisikan %** elemen, mungkin tidak seratus elemen yang dipakai. .anyaknya elemen ArrayB3arik yang dipakai disebut ¨a elemen efektif. :umlah elemen eekti disimpan didalam <ariable tertentu, misalnya Nef. Kalau demikian, algoritma pengisian elemen ArrayB3arik diubah menjadi sebagai prosedur di ba-ah ini $ Procedure /'/:A&&A4<output A larik8 Output Nef 7 integer = Kamus Lokal 7 A $ arrayV%..%**W o integer / $ integer Algoritma 7 /nput (2e) 5or / ? % to 2e do /nput( AV i W) Endor Halaman 31 Algoritma Pemrograman Algoritma 6tama $ Z3engisi:Arra$[ /(/UA;;AP(A,2e) %.1.?. Output 1lemen Arra$ * Larik 'atu Dimensi ke Output De0ice /si elemen arrayBlarik dapat di#etak ke output de<i#e dengan perintah Output. !ontoh algoritma pen#etakan $ Pencetakan:elemen: Arra$:Larik Kamus Lokal 7 A $ arrayV%..%**W o integer /, 2 $ integer Algoritma 7 5or / ? % to 2 do =utput( AV i W) Endor %.1.@. 3encari ,arga Tertentu di dalam Arra$ * Larik 'atu Dimensi "en#arian beruntun adalah proses mengunjungi elemen arrayBlarik dari elemen pertama, kemudian membandingkan dengan nilai yang di#ari. :ika sama, maka pen#arian sukses. :ika belum sama, maka akan melanjutkan pada elemen selanjutnya. "roses selanjutnya dilakukan sampai elemen yang di#ari ditemukan atau sampai elemen arrayBlarik habis. Misalkan array A V%..1W telah berisi harga bilangan bulat $ A % ' ) + , 7 9 1 ,7 +, %' )+ %% '+ 01 %% Misalkan yang di#ari adalah $ ] ? %% "emeriksaan akan dilakukan terhadap ,7, +,, %', )+, %%. ] ditemukan pada elemen ke ,, jadi nilai ] a V,W. Halaman 32 Algoritma Pemrograman Di dalam array A terdapat dua elemen %%, namun demikian yang diperhitungkan hanya elemen yang terdahulu ditemukan ( dalam hal ini elemen yang ke , ). Algoritma pen#arian harga tertentu $ Procedure -A&/:A&&A4</nputA 7 Arra$8 /nput "e( 7 integer8 /nput 7 inetger8 Output :idA 7 integer = Kamus Lokal 7 / $ /nteger Algoritma 7 / % Chile ( / S 2e ) and ( AV/W ]) do / $? / @ % End-hile ( / $? 2e ) or ( AV/W ? ] ) / AV / W ? ] then Z ] ditemukan [ /d> / Z id> ? / jika ditemukan[ Else /d> 0000 Z id> ? 0000 jika tidak ditemukan[ Endi %.1.B. 3encari ,arga 3aksimum di dalam Arra$ * Larik 'atu Dimensi "roses pen#ariannya sama dengan proses pen#arian umum, pada saat mengunjungi elemen yang pertama, elemen tersebut disimpan dalam nama <ariable tunggal. Kemudian <ariable tunggal tersebut dibandingkan dengan isi dari elemen arrayBlarik selanjutnya. Apabila elemen arrayBlarik yang dikunjungi lebih besar dari nilai <ariable tunggal, maka nilai elemen arrayBlarik tersebut mengganti isi <ariable tunggal. Demikian untuk elemen selanjutnya. :ika elemen yang dikunjungi lebih ke#il, maka akan dilakukan proses kunjungan ke elemen arrayBlarik selanjutnya. .ila elemen sudah terurut naik, maka pen#arian sudah selesai pada elemen terakhir, sedang untuk elemen yang menurun, maka pen#arian sudah selesai pada elemen yang pertama. .ila elemen array tersusun a#ak, maka proses kunjungan akan dilakukan ke seluruh elemen. Procedure 3AK':A&&A4 < input A 7 arra$8 input "e( 7 integer 8 Output maks7 integer 8 Output /maks 7 integer = Kamus Lokal 7 / $ /nteger Halaman 33 Algoritma Pemrograman Algoritma 7 Maks &0000 5or / % to 2e do / AV/W Q maks then Maks A V/W /maks i Endi Endor Algoritma ini harga maksimum a-alnya diinisialisasikan dengan nilai F 0000. Algoritma ini hanya akan benar apabila elemen array bernilai positi. Apabila bernilai negati, hanya akan benar selama elemen array lebih besar dari F0000. Apabila ketentuan tersebut tidak dipenuhi, maka algoritma akan salah. Alternati algoritma agar dapat digunakan dengan tanpa pembatasan adalah seperti di ba-ah ini $ Procedure 3AK':A&&A4 < input A 7 arra$8 input "e( 7 integer 8 Output maks7 integer 8 Output /maks 7 integer = Kamus Lokal 7 / $ /nteger Algoritma 7 Maks AV/W 5or / ' to 2e do / AV/W Q maks then Maks A V/W /maks i Endi Endor %.1.C. 3encari ,arga 3inimum di dalam Arra$ * Larik 'atu Dimensi "roses pen#ariannya sama dengan proses pen#arian umum, pada saat mengunjungi elemen yang pertama, elemen tersebut disimpan dalam nama <ariable tunggal. Kemudian <ariable tunggal tersebut dibandingkan dengan isi dari elemen arrayBlarik selanjutnya. Apabila elemen arrayBlarik yang dikunjungi lebih ke#il dari nilai <ariable tunggal, maka nilai elemen arrayBlarik tersebut mengganti isi <ariable tunggal. Demikian untuk elemen selanjutnya. :ika elemen yang dikunjungi lebih besar, maka akan dilakukan proses kunjungan ke elemen arrayBlarik selanjutnya. .ila elemen sudah terurut naik, maka pen#arian sudah selesai pada elemen pertama, sedang untuk elemen yang menurun, maka pen#arian sudah selesai pada elemen yang terakhir. Halaman 34 Algoritma Pemrograman .ila elemen array tersusun a#ak, maka proses kunjungan akan dilakukan ke seluruh elemen. Procedure 3/":A&&A4 < input A 7 arra$8 input "e( 7 integer 8 Output min 7 integer 8 Output /min 7 integer = Kamus Lokal 7 / $ /nteger Algoritma 7 Min 0000 5or / % to 2e do / AV/W S maks then Min A V/W /min i Endi Endor Algoritma ini harga maksimum a-alnya diinisialisasikan dengan nilai 0000. Algoritma ini hanya akan benar apabila elemen array bernilai negati. Apabila bernilai positi, hanya akan benar selama elemen array lebih ke#ildari 0000. Apabila ketentuan tersebut tidak dipenuhi, maka algoritma akan salah. Alternati algoritma agar dapat digunakan dengan tanpa pembatasan adalah seperti di ba-ah ini $ "ro#edure M/2UA;;AP ( input A $ array\ input 2e $ integer \ =utput min $ integer \ =utput /min $ integer ) Kamus 3okal $ / $ /nteger Algoritma $ Min AV/W 5or / ' to 2e do / AV/W S min then Min A V/W /min i Endi Endor %.!. Arra$ * Larik Dua Dimensi %.!.1. De(inisi Arra$ * Larik Dua Dimensi ArrayB3arik Dua dimensi adalah struktur data yang sama dengan array satu dimensi, yaitu menga#u pada sebuah atau sekumpulan elemen melalui indeks. Elemen ArrayB3arik dapat diakses langsung melalui indeksnya. /ndek Array B 3arik harus bertipe data yang menyatakan keterurutan, misalnya integer atau karakter. Halaman 35 Algoritma Pemrograman ArrayB3arik Dua dimensi yang bernama A dengan delapan buah elemen dapat dibayangkan se#ara logika sebagai kumpulan kotak yang berturutan A >,y >,y@% >,y@' >,y@) >,y@+ >,y@, ]@%,y ]@%,y@% ]@%,y@' ]@%,y@) ]@%,y@+ ]@%,y@, ]@',y ]@%,y@' ]@',y@' ]@',y@) ]@',y@+ ]@',y@, ]@),y ]@%,y@) ]@),y@' ]@',y@) ]@),y@+ ]@),y@, ]@+,y ]@%,y@+ ]@+,y@' ]@',y@) ]@+,y@+ ]@+,y@, ]@,,y ]@%,y@, ]@,,y@' ]@',y@) ]@,,y@+ ]@,,y@, Tiap kotak pada ArrayB3arik dua dimensi tersebut diberi indeks integer V%H,,%H,W Tiap elemen ArrayB3arik dua dimensi ditulis dengan notasi $ AV%,%W AV%,'W AV%,)W AV%,+W AV%,,W AV',%W AV','W AV',)W AV',+W AV',,W AV),%W AV),'W AV),)W AV),+W AV),,W AV+,%W AV+,'W AV+,)W AV+,+W AV+,,W AV,,%W AV,,'W AV,,)W AV,,+W AV,,,W Angka di dalam kurung siku menunjukan indeks dari ArrayB3arik dua dimensi. %.!.!. Pende(inisian Arra$ * Larik Dua Dimensi dalam inisialisasi ArrayB3arik dua dimensi adalah struktur data yang statis, artinya jumlah elemen ArrayB3arik dua dimensi harus sudah diketahui sebelumnya. :umlah elemen ArrayB3arik dua dimensi tidak dapat dirubah, ditambah atau dikurangi selama pelaksanaan program. Mendeinisikan ArrayB3arik dua dimensi di dalam deinisi <ariable berrati $ & Mendeinisikan banyaknya elemen ArrayB3arik dua dimensi & Mendeinisikan tipe elemen ArrayB3arik dua dimensi Mendeinisikan banyaknya elemen ArrayB3arik dua dimensi berarti memesan sejumlah tempat di meori, dan memori akan mengalokasikan tempat sebanyak elemen larik dua dimensi yang bersangkutan. !ontoh pendeinisian ArrayB3arik dua dimensi di dalam deinisi <ariable $ Xar mahasis-a $ arrayV%..%**, %..%,W o integer /ni berarti bah-a nama <ariable array mahasis-a bertipe integer dan mempunyai elemen maksimum sebanyak %** elemen dan masing elemen tersebut mempunyai kapasitas maksimum data yang dpat disimpan sebanyak , buah. (eperti halnya <ariable tunggal, tiap elemen ArrayB3arik dapat diisi melalui penugasan atau pemba#aan dari input de<i#e. %.!.%. 3enginisialisasi Arra$ * Larik Dua Dimensi Halaman 36 Algoritma Pemrograman Menginisialisasi ArrayB3arik dua dimensi adalah memberi harga a-al sebuah elemen ArrayB3arik dua dimensi. /nisialisasi kadang&kadang diperlukan, misalnya mengosongkan elemen ArrayB3arik dua dimensi sebelum dipakai untuk proses tertentu. Mengosongkan ArrayB3arik dua dimensi bertipe numerik artinya mengisi elemen ArrayB3arik dua dimensi dengan nilai *, jika bertipa karakter maka artinga mengisi elemen ArrayB3arik dua dimensi dengan spasi. !ontoh pemrosesan penginisialisasian elemen ArrayB3arik $ Penginisialisasian:elemen: Arra$:Larik Kamus 3okal $ A $ arrayV%..%**, %..%,W o integer /, :,],P $ in teger Algoritma $ /nput ( ] ) /nput ( P ) 5or / ? % to ] do 5or : ? % to P do AV/,:W * Endor Endor %.!.). Pemrosesan Arra$ * Larik Dua Dimensi Elemen ArrayB3arik tersusun se#ara beruntun. =leh karena itu, elemennya diproses se#ara beruntun melalui indeks yang terurut, asalkan indeks tersebut sudah terdeinisi. "emrosesan dilakukan mulai pada elemen pertama ArrayB3arik se#ara berurutan sampai elemen terakhir. !ontoh pemrosesan pengisian elemen ArrayB3arik $ Pengisian:#mum:elemen: Arra$:Larik Kamus 3okal $ Halaman 37 Algoritma Pemrograman A $ arrayV%..%**,%..,W o integer /, :,],P $ integer Algoritma $ /nput ( ] ) /nput ( P ) 5or / ? % to ] do 5or : ? % to P do AV/,:W AV/,:W @ , Endor Endor "roses adalah aksi yang dilakukan terhadap elemen ArrayB3arik. "roses dapat berupa penugasan, pemba#aan, penulisan atau manipulasi lainnya. %.!.>. /nput 1lemen Arra$ * Larik Dua Dimensi dari /nput De0ice (elain dengan penugasan, elemen ArrayB3arik dapat diisi nilainya dari input de<i#e dengan menggunakan perintah /"P#T. !ontoh pengisian nilai ArrayB3arik dengan menggunakan perintah input. Pengisian:elemen: Arra$:Larik Kamus 3okal $ A $ arrayV%..%**,%..,W o integer /, :,],P $ integer Algoritma $ /nput ( ] ) /nput ( P ) 5or / ? % to ] do 5or : ? % to P do /nput AV/,:W Endor Endor (eringkali tidak seluruh elemen ArrayB3arik yang dideinisikan digunakan dalam pemrosesan. .ila ArrayB3arik A dideinisikan %** elemen, mungkin tidak seratus elemen yang dipakai. .anyaknya elemen ArrayB3arik yang dipakai disebut ¨a elemen efektif. :umlah elemen eekti disimpan didalam <ariable tertentu, misalnya Nef. Kalau demikian, algoritma pengisian elemen ArrayB3arik diubah menjadi sebagai prosedur di ba-ah ini $ Procedure /'/:A&&A4<output A larik8 Output Nef 7 integer = Kamus 3okal $ Halaman 38 Algoritma Pemrograman A $ arrayV%..%**,%..,W o integer /,:,],P $ integer Algoritma $ /nput ( ] ) /nput ( P ) 5or / ? % to ] do 5or : ? % to P do /nput AV/,:W Endor Endor Algoritma 6tama $ Z3engisi:Arra$[ /(/UA;;AP(A,],P) %.!.?. Output 1lemen Arra$ * Larik Dua Dimensi ke Output De0ice /si elemen arrayBlarik dapat di#etak ke output de<i#e dengan perintah Output. !ontoh algoritma pen#etakan $ Pencetakan:elemen: Arra$:Larik Kamus 3okal $ A $ arrayV%..%**,%..,W o integer /, :,],P $ integer Algoritma $ /nput ( ] ) /nput ( P ) 5or / ? % to ] do 5or : ? % to P do Output AV/,:W Endor Endor Tugas 7 %. .uatlah algoritma untuk menjumlahkan dua buah Matrik '. .uatlah algoritma untuk mengalikan dua buah Matrik Halaman 39 BAB IV Algoritma Pemrograman +#"2'/ DA" P&O'1D#& Tes Kemampuan Awal %. .uatlah algoritma dengan program DE3"8/ untuk men#ari banyaknya bilangan ganjil dan bilangan genap yang lebih ke#il dari 2 ( bilangan yang diinputkan ) dengan menggunakan alat pseudo#ode serta menggunakan ungsi atau prosedur. '. .uatlah algoritma dengan program DE3"8/ untuk men#ari jumlah data sebanyak 2 ( bilangan yang diinputkan ) dengan nilai data yang bebas, dengan menggunakan alat pseudo#ode serta menggunakan ungsi atau prosedur. ). .uatlah algoritma dengan program aplikasi DEK"8/ untuk men#ari banyaknya bilangan ganjil dan genap dari sejumlah data bilangan yang diinputkan dengan nilai data yang bebas, gunakan alat pseudo#ode serta ungsi atau prosedur. Halaman 40 Algoritma Pemrograman ).1. +ungsi 5ungsi adalah modul program yang mengembalikan ( return ) sebuah nilai. Dalam matematika, anda sudah mengenal ungsi seperti ini $ (>) ? > ' @)> F , g (t) ? 't F ) h (>,y,I ) ? '>y' @ )yI @ %*y "ada #ontoh di atas, ,g dan h adalah ungsi, sedangkan >, t, >, y dan I adalah parameter ungsi yang bersangkutan. Dengan memberikan parameter, maka nilai ungsinya dapat dihitung. ).1.1. Deklarasi +ungsi Dalam algoritma yang aplikasi programnya menggunakan "A(!A3, notasi untuk pendeklarasian ungsi adalah seperti di ba-ah ini $ 5un#tion name 2AMA562T(/ ( parameter masukan ) Kamus 3okal $ Algoritma $ A-al E Akhir ;eturn hasil "arameter yang dideinisikan pada bagian judul ungsi dinamakan parameter (ormal. "arameter ormal boleh tidak ada. :ika ada, parameter ormal harus berupa nama <ariable. (emua nama yang dideinisikan dalam bagian <ariable, berlaku lokal ( hanya di dalam daerah ungsi ). !ontoh ungsi $ 6ntuk mendapatkan nilai 5(>) ? > ' @ )> F ,, > ; 5un#tion Men#ariU5(P$real ) real Kamus 3okal $ > $ real Algoritma $ P > A > @ ) A > F , ;eturn y Halaman 41 Algoritma Pemrograman ).1.!. Pemanggilan +ungsi 5ungsi dipanggil dengan menyebutkan nama beserta parameternya ( jika ada ). 2AMA562T(/ ( parameter ) 2ama parameter yang disertakan pada -aktu pemanggilan disebut parameter aktual. "arameter aktual dapat berupa konstanta, nama konstanta atau nama <ariable dengan syarat kesemuanya harus sudah dideinisikan terlebih dahulu tipe dan nilainya . 8al&hal yang perlu diperhatikan dalam pemanggilan ungsi adalah $ %. :umlah parameter aktual harus sama dengan jumlah parameter ormal. '. Tipe parameter aktual harus sama dengan tipe parameter ormal. ). 6rutan parameter aktual harus sama dengan urutan parameter ormal. +. 2ama&nama parameter aktual boleh tidak sama denganparameter ormal. !ontoh pemanggilan ungsi 5 $ Output (Men#ariU5(>)) ).!. Prosedur "rosedur adalah modul program yang berisi rangkaian proses dan menghasilkan eek yang terdeinisi. Karena ada eek yang timbul inilah maka pada setiap prosedur harus dideinisikan keadaan a-al ( K.a-al) sebelum rangkaian proses di dalam prosedur dilaksanakan dan keadaan akhir ( K.akhir) setelah rangkaian proses dilaksanakan. (eperti pada ungsi, prosedur diberi nama yang unik, disertai datar parameter ormal jika ada. "arameter ormal dalam prosedur dibedakan atas tiga jenis $ %. "arameter /nput '. "arameter =utput ). "arameter /nputB=utput Halaman 42 Algoritma Pemrograman ).!.1. Deklarasi Prosedur 2otasi untuk pendeklarasian prosedur $ "ro#edure 2AMA";=(ED6; (/nputB=utput parameter ormal ) Kamus 3okal $ Algoritma $ A-al $ Akhir ).!.!. Pemanggilan Prosedur "rosedur dipanggil dengan menyebutkan nama beserta parameter aktualnya nya (jika ada). 2AMA";=(ED6;( parameter aktual ) "ada -aktu pemanggilan, terjadi relasi satu&satu antara parameter aktual dengan parameter ormal. 8arga atau nama parameter aktual diterimaG oleh paramater ormal. "arameter berjenis input dapat berupa konstanta atau <ariable. ( harganya sudah terdeinisi ), sehingga pemanggilan dengan parameter berjenis input disebut juga pemanggilan dengan menggunakan nilai ( #all by <alue ). "arameter berjenis output atau inputBoutput harus beupa <ariable. "ada -aktu pemanggilan yang dikirim ke parameter aktual bukan harga parameter aktual tetapi nama ( a#uan atau reerensi ) parameternya ( termasuk harga yang dikandung), sehinga pemanggilan dengan parameter output atau inputBoutput disebut juga pemanggilan dengan a#uan ( #all by reeren#e ). "arameter berjenis input jika harganya dirubah dalam badan prosedur, harganya tidak berubah setelah pemanggilan, untuk parameter berjenis inputBoutput harganya berubah setelah pemanggilan. 2ama parameter aktual tidak boleh sama dengan parameter ormal. Aturan yang berlaku di dalam ungsi berlaku juga dalam prosedur. !ontoh "rosedur $ Halaman 43 Pro3ed&re FITUNIGRATAGRATA;i%p&t N E i%te8er; o&tp&t & E real < B K@a4al E *ar8a N terde0i%isi K@ak*ir E & adala* rata-rata dari N b&a* bila%8a% C DeklarasiE IAbilAtoral E i%te8er Deskripsi E Total " ; i%isialisasi < I $ ; i%isialisasi pe%3a3a* < /*ile I N do I%p&t ; bil < Total total ' bil i i ' $ e%d4*ile ;K H N < & total : N Al8orita RATAGRATAGBIJANIANGBUJAT ; Pro8ra &taa &%t&k e%8*it&%8 rata-rata N b&a* bila%8a% b&lat < DKKJARASI N E i%te8er ; Ba%yak%ya data bila%8a% b&latA N positi0 < U E real ; %ilai-rata-rata sel&r&* bila%8a% < DKSKRIPSI Read N /rite ;2e%8*it&%8 rata-rata N b&a* bila%8a% b&lat< FITUNIGRATAGRATA /rite ;Nilai rata-rata ! A &< Algoritma Pemrograman "ada prosedur dan program utama di atas, <ariable 2 dan u dideklarasikan di dalam bagian DEK3A;A(/ program utama, karena itu 2 dan u bersiat global sehingga juga dikenal dan dapat digunakan dalam prosedur 8/T62TU;ATAU;ATA. (edangkan <ariable /, bil dan total dideklarasikan di dalam bagian DEK3A;A(/ prosedur 8/T62TU;ATAU;ATA., karena itu /, bil dan total bersiat lokal dan hanya dikenal dalam prosedur 8/T62TU;ATAU;ATA. ).%. "ama 2lobal dan "ama Lokal 2ama&nama ( kostanta, <ariable, tipe, dll ) yang dideklarasikan dalam bagian DEK3A;A(/ sebuah prosedur hanya dikenal dalam badan prosedur yang bersangkutan. 8al ini biasanya dikatakan sebagai 0ariable lokal. 6ntuk nama&nama yang dideklarasikan pada bagian Deklarasi program utama dapat dikenal di seluruh bagian program. .iasanya dinamakan sebagai 0ariable global. ).). 3enggunakan +ungsi atau Prosedur Tidak ada aturan baku yang menyatakan apakah sebuah modul direalisasikan sebagai ungsi atau prosedur. (uatu ungsi dapat ditulis sebagai prosedur, namun hanya prosedur yang menghasilkan satu keluaran saja yang dapat dijadikan ungsi. .ila ungsi dinyatakan sebagai prosedur, maka perubahan yang dilakkan adalah pada tipe hasil. 8asil yang dikembalikan oleh ungsi dinyatakan sebagai parameter ormal berjenis output. Halaman 44 BAB V Algoritma Pemrograman 'O&T/"2 Tes Kemampuan Awal %. (ebutkan :enis (orting yang anda ketahui, terangkan bagaimana proses pengurutannya dengan memberikan sebuah #ontoh K '. 2ilai apa yang di#ari untuk mendapatkan sebuah metode pengurutan yang paling baik 4 Halaman 45 Algoritma Pemrograman >.1. 'orting < Pengurutan = #orting ( pengurutan ) se#ara umum diartikan sebagai proses penyusunan kembali sekumpulan objek ke dalam suatu urutan B sekuaens tertentu berdasarkan kriteria pengurutan tertentu. Tujuan sorting adalah untuk memudahkan silakukannya proses searc ( pen#arian ) terhadap objek yang terdapat dalam kumpulan yang telah terurut tersebut. (ebagai #ontoh, perhatikan proses men#ari nomor telepon dalam sebuah buku telepon. "roses searc ini menjadi sangat mudah karena nama& nama dalam buku telepon sudah terurut. :ika kita memiliki ietem&item data $ a%,a' , a), H ,an, maka proses sorting mengubah urutan B mempertukarkan posisi itemBitem tersebut sehingga diperoleh ak%,ak' , ak), H ,akn, sedemikian rupa sehingga, jika terdapat sebuah ordering function , maka (ak%) S (ak' S (ak)) , H (akn). 6mumnya, ungsi ini berbentuk rumus komputasi, namun disimpan dalam bentuk komponen B ield dari masing&masing item. 2lainya disebut key dari item tersebut. (ebuah ile berukuran n ialah kumpulan n buah itemn r(%), r('), r()), H , r(n). (etiap item ile disebut re#ord. "ada setiap re#ord r ( i ) terdapat sebuah key k ( i ). Key ini biasanya adalah sebuah subile dari keseluruhan re#ord, baik dengan urutan menaik ( as#ending) maupun menurun ( des#ending ). (ebuah metode sort dikatakan stabil (stable) apabila untuk semua re#ord i dan j dimana k( i ) ? k ( j ), jika r ( i ) mendahului r ( j ) pada ile a-al, maka r ( i ) juga mendahului r ( j ) pada ile yang terurut. Dengan kata lain, urutan relati dari item&item yang nilai key&nya sama tidak akan berubah di akhir proses pengurutan. "roses sorting dapat dilakukan langsung terhadap re#ord&re#ord yang ada atau terhadap sebuah tabel bantu yang berisi pointer&pointer ( disebut sorting $y address). (ebagai #ontoh, pada gambar diba-ah ditunjukan ditunjukan sebuah ile dengan , re#ord. :ika ile tersebut diurutkan se#ara menaik ( increasing order ) terhadap key numeric&nya, maka hasilnya terlihat pada tabel sebelahnya. Dalam kasus ini re#ord&re#ordnya sendiri telah diurutkan se#ara aktual. Key 5ield lain Key 5ield lain ;e#ord % + DDD % AAA ;e#ord ' ' ... ' ... ;e#ord ) % AAA ) !!! ;e#ord + , !!! + DDD ;e#ord , ) EEE , EEE 5ile 5ile 2amun apabila jumlah data B ield yang tersimpan dalam masing&masing re#ord pada file tersebut #ukup besar, maka o'eread -aktu yang dibutuhkan untuk memindahkan data se#ra aktual akan sangat besar. 8al ini tidak dikehendaki dalam proses sorting. Dalam kasus ini, sebuah tabel pointer bantu dapat digunakan agar pada proses sorting yang dipindahkan adalah penunjukan pointer, bukan data aktual. 8al ini ditunjukan pada gambar di ba-ah ini. Tabel "ointer Tabel "ointer A-al Key 5ield 3ain Terurut Halaman 46 Algoritma Pemrograman ;e#ord % + DDD ;e#ord ' ' ... ;e#ord ) % AAA ;e#ord + , EEE ;e#ord , ) !!! 5ile Data Tabel di bagian tengah adalah ile data dan tabel disisi kiri adalah tabel pointer a-al. Entry pada posisi j dalam tabel pointer menunjuk ke re#ord j. "ada proses sorting, entri&entri pada tabel pointer ini disesuaikan dengan penunjukannya, dan hasilnya ditunjukan pada tabel pointer di sisi kanan. "ointer pertama akhirnya menunjuk ke re#ord ketiga dalam ile, dan seterusnya. "erhatikan bah-a ada re#ord yang dipindahkan. Terdapat banyak metode yang digunakan untuk melakukan pengurutan data. "rogrammer harus memahami beberapa aktor penentu ( konsiderasi ) eisiensi yang saling berhubungan agar dapat memilih se#ara tepat metode sorting yang mana yang paling tepat diterapkan pada suatu masalah tertentu. .eberapa aktor penting yang menentukan eisiensi sebuah metode sorting adalah $ - Caktu yang dibutuhkan oleh programmer untuk mengkodekannya ( membuat program sorting ), - Caktu komputasi yang dibutuhkan untuk mengeksekusi program sorting tersebut, - :umlah memori B storage yang dibutuhkan untuk menyimpan B mengeksekusi program sorting tersebut. (e)uirement yang dituntut dari sebuah metode internal sorting adalah penggunaan kapasitas memori yang tersedia se#ara ekonomis. Dengan kata lain, pertukaran item&item data untuk memperoleh urutan yang benar harus dilakukan se#ara in situ. Metode yang memindahkan item data dari sebuah array A ke array . jelas tidak dikehendaki. 6kuran yang baik untuk menilai eisiensi sebuah metode sorting adalah dengan menghitung jumlah perbandingan ( comparison ) key B data dan jumlah peretukaran ( intercange ) key B data yang dilakukan selama proses sorting. Kedua ukuran ini merupakan ungsi dari jumlah item data n yang akan diurutkan. Metode sorting yang baik membutuhkan jumlah perbandingan dalam orde ( n log n ). Metode sorting sederhana ( straight method ) membutuhkan jumlah perbandingan dengan orde n ' . 2amun ada tiga alasan mengapa straight method perlu ditinjau sebelum kita beranjak kepada metode&metode yang lebih #epat, yaitu $ Halaman 47 Algoritma Pemrograman - straight method merupakan #ara tepat untuk menjelaskan karakteristik dari prinsip& prinsip utama dalam sorting, - program untuk straight method dapat dimengerti dengan mudah dan tidak panjang sehingga kebutuhan starage&nya ke#il - -alapun metode yang #epat membutuhkan jumlah operasi yang lebih sedikit, rin#ian operasi&operasi ini biasanya rumit. :adi straight method lebih #epat bila diterapkan untuk jumlah data n yang ke#il, namun tidak dianjurkan untuk jumlah data n yang besar. ).!. "OTA'/ O B1'A& < B/2 O "OTAT/O" = "erhatikan tabel di ba-ah ini, 5ungsi *,*% n ' @ %* n dikatakan berada dalam orde ungsi n ' karena seiring dengan semakin besarnya nilai n, maka nilai ungsi tersebut akan semakin mendekati nilai n ' . n A = 0,01 n 2 b = 10 n a + b ( a + b ) / n 2 10 1 100 101 1,01 50 25 500 525 0,21 100 100 1.000 1.100 0,11 500 2.500 5.000 7.500 0,03 1.000 10.000 10.000 20.000 0,02 5.000 250.000 50.000 300.000 0,01 10.000 1.000.000 100.000 1.100.000 0,01 50.000 25.000.000 500.000 25.500.000 0,01 100.000 100.000.000 1.000.000 101.000.000 0,01 500.000 2.500.000.000 5.000.000 2.505.000.000 0,01 Duketahui dua buah ungsi (n) dan g(n). ungsi (n) dukatakan berada dalam orde g(n) atau (n) adalah =(g(n)) jika tedapat bilangan bulat posisti a dan b sedemikian rupa sehingga (n) a > g(n) untuk semua n b. (ebagai #ontoh, jika (n) ? n ' @ %** n dan g(n) ? n ' , maka (n) adalah =(g(n)) karena n ' @ %** n 'n ' untuk semua n %**. Dalam kasus ini, a ? ' dan b ? %**. 5ungsi (n) di atas adalah juga =(n ) ) karena n ' @ %** n 'n ) untuk semua n 1. :ika diketahui sebuah ungsi (n), maka terdapat banyak ungsi g(n) dimana ungsi (n) adalah =(g(n)), dan untuk setiap ungsi g(n) tersebut terdapat banyak nilai a dan b yang memenuhi kriteria di atas. :ika (n) adalah =(g(n)) dan g(n) adalah =(h(n)), maka (n) adalah =(h(n)). (ebagai #ontoh $ n ' @ %** n adalah =(n ' ) dan n ' adalah =(n ) ) ( untuk nilai a?b?%), maka n ' @ %** n adalah =(n ) ). 8al ini disebut siat transiti. :ika (n) adalah sebuah ungsi konstanta, yaitu (n) ? # untuk semua nilai n, maka (n) adalah =(%), karena dengan menggeser a ? # dan b ? %, diperoleh bah-a # # > % untuk semua n %. :ika (n) ? # > g(n), dimana # adalah sebuah konstanta, maka (n) adalah =(g(n)). .erikut ini adalah beberapa akta yang akan membentuk hirarki orde dari ungsi $ Halaman 48 Algoritma Pemrograman - # adalah =(%) untk sembarang konstanta #, - # > logk n adalah =(log n) untuk sembarang konstanta # dan k, - # > n k adalah =(n k ) untuk sembarang konstanta # dan k, - # > n > logk n adalah =(n log n) untuk sembarang konstanta # dan k, - # > n j > logk n adalah =(n k log n) untuk sembarang konstanta #, j dan k, - # > n j > (logk n) % adalah =(n k (log n) % ) untuk sembarang konstanta #, j, k dan l, - # > n k adalah =(d n ), namun d n tidak =(n k ) untuk sembarang konstanta # dan k, dan d > %.
8irarki ungsi yang terbentuk dari akta&akta di atas adalah sebagai berikut, ( tiap ungsi memiliki orde lebih rendah dari ungsi berikutnya ) $ !, log n, (log n) k , n, n(log n) k , n k , n k (log n) k , n k@% , d k . 5ungsi&ungsi yang ber&orde =(n k ) untuk setiap nilai k dikatakan berada dalam polynomial order, sedangkan ungsi&ungsi yang ber&orde =(d n ) untuk setiap d >% tetapi tidak ber&orde =(n k ) untuk suatu nilai k dikatakan berada dalam exponential order. "erbedaan antara ungsi polynomial&order dengan ungsi e>ponetial&order sangat penting. (ebuah ungsi e>ponential order yang sederhana sekalipun, seperti ' n , akan bertambah jauh lebih #epat nilainya dibandingkan dengan polynomial&order, seperti n k , terlepas dari berapapun nilai k. Dengan menggunakan konsep orde di atas, berbagai metode sorting dapat dibandingkan dan mengklasiikasikannya dalam golongan baikG atau burukG. 2amun jika mengehendaki metode sorting yang optimalG, yaitu yang berorde =(n) terlepas dari urutan data yang diinput, tidak akan ada metode yang dapat memenuhi hal tersebut. (ebagian besar metode sorting yang akan ditinjau berikut ini mempunyai time re)uirement antara =( n log n) hingga =(n ' ). 6ntuk orde=(n log n), jika ururtan ile bertambah %** kali, maka sorting time akan berkurang dari '** kali ( dasar logaritnya adalah %* ). 6ntuk orde =(n ' ), jika ukuran ile bertambah %** kali, maka sorting time akan bertambah %*.*** kali. ).% /"T1&"AL 'O&T B' ()*+A,-( ).%.1. 31TOD1 B#BBL1 'O&T Metoide .ubble (ort termasuk pada golonga E>#hange (ort, dimana pertukaran tempat anatar dua item data menjadi karakteristik utama dari proses pengurutan. Metode bubble sort didasarkan pada prinsip perbandingan ( comparison ) dan pertukaran ( excange ) pasanga item data yang berdekatan ( ad&acent ) hingga semua data item terurut. Keunggulan metoda .ubble sort adalah kemudahannya dipahami dan diprogram. 2amun dari semua metode sort, metode ini termasuk pada metode yang paling tidak eisien. Misalkan ] adalah sebuah array bertipe integer berisi n buah data yang akan diurutkan guna men#apai kondisi $ ]V i W ]V j W untuk % j n Halaman 49 Algoritma Pemrograman Metode .ubble sort menelusuri isi ile se#ara sekuensial beberapa kali. "ada tiap langkah penelusuran ( pass B iterasi ), dilakukan pembandingan antara tiap item data dengan item data berikutnya ( su##essor&nya), atau ]V%W dengan ]V i@% W, dan pertukaran posisi elemen data apabila urutannya tidak tepat. (ebagi #ontoh, perhatikan nilai&nilai data berikut ini $ ', ,9 +1 )9 %' 0' 17 )) Diasumsikan bah-a hendaknya melakukan pengurutan se#ara menaik (ascending). "ada iterasi pertama, dilakukan perbandingan sebagai berikut $ ]V%W dengan ]V'W ( ', dengan ,9 ) tidak terjadi pertukaran ]V'W dengan ]V)W ( ,9 dengan +1 ) terjadi pertukaran ]V)W dengan ]V+W ( ,9 dengan )9 ) terjadi pertukaran ]V+W dengan ]V,W ( ,9 dengan %' ) terjadi pertukaran ]V,W dengan ]V7W ( ,9 dengan 0' ) tidak terjadi pertukaran ]V7W dengan ]V9W ( 0' dengan 17 ) terjadi pertukaran ]V9W dengan ]V1W ( 0' dengan )) ) terjadi pertukaran :adi, setelah iterasi pertama, urutan nilai data adalah sebagai berikut $ ', +1 )9 %' ,9 17 )) C! "erhatikan setelah iterasi pertama, nilai data terbesar, yaitu 0', terletak pada posisinya yang seharusnya dalam array ( posisi terakhir ). (e#ara umum, data ]Vn&i@%W akan terletak pada posisi seharusnya setelah iterasi yang ke i. Metode ini disebut $u$$le sort* karena setiap nilai data se#ara perlahan&lahan $u$$les ( bergeser naik ke sisi kanan ) ke posisinya yang tepat. 2ilai data yang besar akan bergeser lebih #epatG. (etelah iterasi ke ', urutan nilai data adalah \ ', )9 %' +1 ,9 )) B? C! "erhatikan bah-a 17 sebagai nilai data terbesar kedua sudah terletak pada posisi yang tepat. Karena tiap iterasi menempatkan sebuah nilai data ke posisi yang seharusnya, maka sebuah ile yang berisi n buah data membutuhkan tidak lebih dari n&% iterasi. /terasi lengkapnya adalah sebagai berikut$ A-al ', ,9 +1 )9 %' 0' 17 )) /terasi % ', +1 )9 %' ,9 17 )) C! Halaman 50 Algoritma Pemrograman /terasi ' ', )9 %' +1 ,9 )) B? C! /terasi ) ', %' )9 +1 )) >@ B? C! /terasi + %' ', )9 )) )B >@ B? C! /terasi , %' ', )) %@ )B >@ B? C! /terasi 7 %' ', %% %@ )B >@ B? C! /terasi 9 1! !> %% %@ )B >@ B? C! (ebelum menulis programnya, ada beberapa hal yang harus diperhatikan. Pertama, karena semua nilai data pada posisi lebih besar dari atau sama dengan n&i@% telah menempati posisi seharusnya setelah iterasi /, maka nilai&nilai data tersebut tidak perlu diikutsertakan lagi dalam proses perbandingan pada iterasi&iterasi selanjutnya. :adi pada ietrasi pertama dilakukan n&% perbandingan, pada iterasi ke ' dilakukan n&' perbandingan, dan pada interaksi ke&(n&%) hanya dilakukan perbandingan (yaitu antara ]V%W dan ]V'W. Kedua. Diatas telah disebutkan bah-a dibutuhkan maksimal n&% interasi untuk mengurutkan array berukuran n data. 2amun, pada #ontoh di atas, array telah terurut membesar setelah interasi ke&,, sehingga interasi terakhir sebenarnya tidak perlu dilakukan (iterasi ke&7 dan ke&9). 6ntuk menghilangkan interasi seperti ini, kita harus dapat mendeteksi apakah sebuah array telah terurut atau belum. Apabila array telah terurut, maka tidak terjadi pertukaran data apapun pada interasi tersebut. :ika kondisi ini di#apai, tidak perlu dilakukan interasi berikutnya. Dengan #ara seperti ini, jika ile dapat diurutkan dengan interasi kurang dari n&%, maka pada interasi terakhir tidak dilakukan pertukaran data. "ada #ontoh di atas, proses dilakukan hingga interasi ke&, masih terjadi pertukaran data. Kode program untuk metode bubble sort dalam bahasa pas#al diberikan di ba-ah ini. .erikut ini diberikan #ontoh kedua. "ada #ontoh ini, pergeseran terjadi kesisi kiri. (emakin ke#il nilai data, semakin #epatG pergeserannya. "ada interasi pertama, nilai data terke#il menempati posisi pertama dalam array\ pada interasi kedua, nilai data terke#il kedua menempati posisi kedua dalam array\ dan seterusnya. Halaman 51 Pro3ed&re B&bble Sort ;Dar 5 E ArrayType E N E i%te8er<; Lar passA ?A tepA E i%te8er; S4ap E boolea%; Be8i% S4ap E ! tr&e; Pass E ! $; /*ile ;pass >! N-$< a%d ;s4ap< do B8i% S4ap E ' 0alse; #or ? E ! $ to N-pass do I0 ;5M?N H 5M?'$N< t*e% Be8i% Blak&ka% s4appi%8:pert&kara% elee%N s4ap E ! tr&e; tep E ! 5M?N; 5M?N E ! 5M?'$N; 5M?'$E ! tep; K%d; Pass E ! pass ' $; K%d; K%d; Algoritma Pemrograman "ada #ontoh ini, proses pengurutan dilakukan hingga interasi ke&,, karena tidak terjadi lagi pertukaran data pada interasi ini. /nterasi lengkapnya adalah.$ A-al ++ ,, %' +' 0+ %1 7 79 /nterasi % 7 ++ ,, %' +' 0+ %1 79 /nterasi ' 7 %' ++ ,, %1 +' 0+ 79 /nterasi ) 7 %' %1 ++ ,, +' 79 0+ /nterasi + 7 %' %1 +' ++ ,, 79 0+ /nterasi , 7 %' %1 +' ++ ,, 79 0+ :umlah perbandingan dilakukan pada interasi&i adalah n&i, jadi, jika dilakukan k kali interasi, jumlah total perbandingan yang dilakukan adalah (n&%) @ (n&') @...@ (n&k) ? ('kn&k ' &k)B'. ;ata&rata jumlah iterasi (k) adalah =(n ' ). :umlah pertukaran yang dilakukan tergantung pada a-al data dalam arrayBile. 2amun, jumlah pertukaran ini tidak mungkin lebih besar dari jumlah perbandingan. :umlah pertukaran diperkirakan menghabiskan sebagian besar -aktu eksekusi algoritma, bukan jumlah perbandingan. Dalam kasus terburuk, jumlah perbandingan dalam bubble sort adalah (n ' &n)B' dan jumlah pertukaran adalah (n ' &n)B'. :adi, baik jumlah perbandingan maupun jumlah pertukaran berorde =(n ' ). Kelebihan bubble sort satu&satunya hanyalah kebutuhan akan memori tambahan ke#il, yaitu hanya satu lokasi memori untuk menyimpan nilai sementara (template) dalam proses pertukaran data, dan ordenya menjadi =(n) dalam kasus data masukan sudah Bhampir terurut. "erbaikan terhadap metode bubble sort dilakukan dengan algoritma shaker sort. "enjelasan mengenai algoritma ini beserta #ontohnya dapat dilihat dalam VC/;97W. ).%.!. 31TOD1 D#/-K 'O&T <PA$T.T.#, ()*+A,-( !#$T= Metode Yui#k sort, yang dibuat oleh !.A.; 8oare, didasarkan pada akta bah-a pertukaran (e>#hange) mungkin dapat dilakukan antara ' item data yang posisinya berjauhan agar proses pengurutan menjadi lebih eekti. :adi, metode ini tergolong dalam kelompok e>#hange sort. Diasumsikan ] adalah sebuah array berisi 2 buah data yang akan diurutkan. Kita memilih sebuah elemen A dari posisi tertentu dalam array (misalnya A adalah elemen pertama\ A ? ]V%W). 2ilai A disebut elemen kun#i atau pi<ot atau #omparand. (emua elemen data dalam array ] dibagi menjadi dua sedemikian rupa sehingga A diletakan pada posisi j dan kondisi&kondisi berikut dipenuhi $ (etiap elemen data pada posisi % s.d j &% nilainya lebih ke#il dari atau sama dengan nilai pi<ot A. Halaman 52 Algoritma Pemrograman (etiap elemen data pada posisi j@% s.d n nilainya lebih besar dari atau sama dengan nilai pi<ot A. "erhatikan bah-a setiap kedua kondisi tersebut terpenuhi untuk nilai A dan j tertentu, maka A akan teteap terletak pada posisi j setelai array selesai diurutkan. :ika proses ini diulang untuk subarray ]V%W F ] Vj&%W, untuk subarray ]Vj@%W F ]V2W, dan seterusnya untuk subarray& subarray yang terbentuk dalam interasi&interasi berikutnya, maka hasil akhirnya adalah sebuah ile yang terurut. .erikut ini diberikan sebuah #ontoh. 6rutan data a-al dalam array adalah sbb.$ ', ,9 +1 )9 %' 0' 17 )) 2ilai data pertama, yaitu ',, diletakan pada posisi yang seharusnya hasilnya adalah\ %' ', ,9 +1 )9 0' 17 )) "ada titik ini, ', terletak pada posisi yang tepat, yaitu ]V'W. (etiap data yang letaknya sebelum posisi ke&', yaitu %', nilainya lebih ke#il dari atau sama dengan ',, dan setiap data yang letaknya setelah posisi ke&', yaitu ,9, +1, )9, 0', 17, dan )), nilainya lebih besar dari atau sama dengan ',. Karena ', telah terletak pada posisi yang benar, maka masalah a-al telah dibagi (dekomposisi) menjadi masalah pengurutan dua buah subarray, yaitu $ V%'W dan V,9 +1 )9 0' 17 ))W Karena sub array pertama berisi % nilai data, maka sub array tersebut telah terurut dan tidak perlu diproses. 6ntuk mengurutkan sebarray kedua, proses di atas diulangi dan subarray ini kemudian dibagi lagi menjadi dua subarray baru ,9 diambil sebagai nilai pi<ot. 8asilnya adalah $ V+1 )9 ))W ,9 V0' 17W 8asil tiap tahap pengurutan selengkapnya adalah sbb .$ ', ,9 +1 )9 %' 0' 17 )) E1!F ', E>@ )B %@ C! B? %%F %' ', E>@ )B %@ C! B? %%F %' ', E)B %@ %%F ,9 EC! B?F %' ', E%@ %%F +1 ,9 EC! B?F %' ', E%%F )9 +1 ,9 EC! B?F %' ', )) )9 +1 ,9 EB?F 0' %' ', )) )9 +1 ,9 17 0' Algoritma untuk metode Yui#k sort dapat dituliskan dengan mudah dalam bentuk prosedur rekursi. Diba-ah ini diberikan algoritma untuk prosedur Rui#k(3., 6.) yang mengurutkan semua item data dalam array ] diantara posisi ]V3.W dan ]V6.W, dimana 3. adalah batas ba-ah (lo-er bound) dan 6. adalah batas atas (upper bound). Halaman 53 Algoritma Pemrograman Algoritma rekursi untuk Yui#k sort (alah satu #ara untuk melakukan pemilihan array (dalm prosedur partition) dengan eisien adalah sebagai berikut. Asumsikan A ? ]V3.W adalah item data yang akan di#ari posisi sebenarnya. Dua buah pointer, yaitu up dan do-n, diinisialisasikan dengan batas ba-ah dan batas kiri dari subarray. "ada setiap titik selama eksekusi, tiap item data pada posisi di atas B di kanan up nilainya lebih besar dari atau sama dengan nilai A, dan tiap item pada posisi di ba-ah Bdi kiri do-n nilainya lebih ke#il dari atau sama dengan nilai A. Kedua pointer up dan do-n ini digeser mendekati satu sama lain dengan #ara berikut $ 3angkah %. 2aikkan (in#rement) nilai pointer do-n satu posisi se#ara berulang&ulang hingga ]Vdo-nW Q A. 3angkah '. Turunkan (de#rement) nilai pointer up satu posisi se#ara berulang&ulang hingga ]VupW S A. 3angkah ). :ika (up Q do-n), pertukarkan posisi ]Vdo-nW dengan ]VupW. "roses diatas diulangi hingga kondisi pada langkah ) tidak dipenuhi (up S do-n). "ada titik ini ]Vup[ dipertukarkan dengan ]V3.W (yaitu pi<ot A), dan nilai j diset menjadi up. .erikut ini akan diberikan gambaran mengenai pross tersebut, dimana ditunjukan posisi dari up dan do-n. Do-n up !> ,9 +1 )9 %' 0' 17 %% do-n up ', >@ +1 )9 %' 0' 17 %% do-n up ', >@ +1 )9 %' 0' 17 %% do-n up Halaman 54 I0 ;JB > UB< t*e% B?ika JB H UBA aka array tela* ter&r&tC be8i% Bpili* ite- , dari s&barray sedeikia% r&pa se*i%88a sala* sat& ite ;isal 5;MJBN< Berada pada posisi 5 M?N ;? er&paka% paraeter o&tp&t< da% berlak& E $@ ( MiN > ( M?N &%t&k JB > i > ? ,@ ( MiN H ( M?N &%t&k ? > i > UB ( M?N tela* berada pada posisi ya%8 se*ar&s%ya @C partitio% ;JBA UBA ?<; Bsort s&barray a%tara (MJB da% (M?-$NC O&i3k ;JBA ?-$<; Bsort s&barray a%tara (M?'$N da% (MUBNC O&i3k ;?'$A UB<; K%d; Algoritma Pemrograman ', >@ +1 )9 %' 0' B? )) do-n up ', >@ +1 )9 %' C! 17 )) do-n up ', >@ +1 )9 1! 0' 17 )) do-n up ', 1! +1 )9 >@ 0' 17 )) do-n up ', 1! +1 )9 >@ 0' 17 )) do-n up ', %' )B )9 >@ 0' 17 )) do-n up ', %' )B )9 >@ 0' 17 )) do-n up ', %' )B )9 ,9 0' 17 )) up,do-n ', %' )B )9 ,9 0' 07 )) up do-n ', 1! )B )9 ,9 0' 17 )) up do-n %' !> )B )9 ,9 0' 17 )) "ada titik ini, ', telah berada di posisi yang seharusnya, yaitu posisi ke&', dan semua item di sisi kirinya lebih ke#il dari atau sama denagn ',, dan semua item disisi kanannya lebih besar dari atau sama dengan ',. (ekarang proses dilanjutkan untuk mengurutkan dua subarray yang terbentuk, yaitu (%') dan (+1 )9 ,9 0' 17 ))) dengan menerapkan metode yang sama. Algoritma di atas dapat diimplementasikan dengan prosedur seperti berikut ini $ Halaman 55 Pro3ed&re Partitio% ; JBA UB E i%te8er; Dar ? E i%te8er <; Lar &pA do4%A AA tep E i%te8er; Be8i% ; A adala* piDot tabel ya%8 aka% dite%t&ka% posisi%ya < A E! 5MJBN Up E! UB; do4% E! JB; /*ile ; do4% > &p < do Be8i% /*ile B 5Mdo4%N >! A< a%d ; do4% > UB < do Do4%E! do4% ' $; /*ile ;5M&pN H A< do UpE! Up ' $; I0 ;do4% > Up< t*e% Be8i% ;pert&kara% 5M&pN da% 5Mdo4%N< te%p E! 5M&pN; 5M&pN E! 5Mdo4%N; 5Mdo4%N E! te%p; K%d; K%d; 5MJBN E! 5MUpN; 5MUpN E! A; J E! Up; K%d; Pro3ed&re O&i3kSort ; JBA UB E i%te8er<; Lar ? E i%te8er; Be8i% I0 ;JB > UB< t*e% Be8i% Partitio%;JBAUBA?<; O&i3kSort;JBA?-$<; O&i3kSort;?'$AUB< K%d; K%d; K%d; Algoritma Pemrograman .entuk algoritma lain yang juga dapat diterapkan dalam metode Rui#k (ort adalah sebagai berikut $ - Deinisikan ' buah pointer / dan j. 3akukan inisialisasi / ? % dan j ? n ( jumlah data ), - .andingkan ]V i W dan ] V j W, :ika ]V i W S ] V j W, tidak perlu dilakukan pertukaran, dan nilai j dikurangi %, lalu proses di atas diulangi, :ika ]V i W Q ] V j W, lakukan pertukaran, - (etelah terjadi pertukaran untuk pertama kali, nilai i ditambah %. "roses perbandingan dilanjutkan dan nilai i ditambah % hingga terjadi pertukaran berikutnya, - (etelah terjadi pertukaran untuk kedua kali, nilai j dikurangi % kembali, demikian seterusnya. Dengan kata lain, dilakukan proses $urning te candle at $ot endsG ( membakar lilin pada kedua ujungnya ). .erikut ini diberikan sebuah #ontoh eksekusi algoritma di atas. (2ilai ]V i W dan ] V j W di#etak tebal). - Kondisi a-al ( i ? %, j ? n ? %7, ]V i W ? ,*), ] V j W ? 9*) $ >G% 19 ,%' 7% 0*1 %9* 109 '9, 7,) +'7 %,+ ,*0 7%' 799 97, @G% - Kurangi nilai j hingga j ? %%, ]V % W Q ]V %% W, atau ,*) Q %,+, terjadi pertukaran ke&%\ i ? %, j ? %%. 1>) 19 ,%' 7% 0*1 %9* 109 '9, 7,) +'7 >G% ,*0 7%' 799 97, 9*) - Tambah nilai i hingga i ? ), ]V ) W Q ]V %* W, atau ,%' Q ,*), terjadi pertukaran ke&'\ i ? ), j ? %%. %,+ 19 >G% 7% 0*1 %9* 109 '9, 7,) +'7 >1! ,*0 7%' 799 97, 9*) - Kurangi nilai j hingga j ? %*, ]V ) W Q ]V %* W, atau ,*) Q +'7, terjadi pertukaran ke&)\ i ? ), j ? %*. %,+ 19 )!? 7% 0*1 %9* 109 '9, 7,) >G% ,%' ,*0 7%' 799 97, 9*) - Tambah nilai i hingga i ? ,, ]V , W Q ]V %* W, atau 0*1 Q ,*), terjadi pertukaran ke&+\ i ? ,, j ? %*. %,+ 19 +'7 7% >G% %9* 109 '9, 7,) CGB ,%' ,*0 7%' 799 97, 9*) - Kurangi nilai j hingga j ? 1, ]V , W Q ]V 1 W, atau ,*) Q '9,, terjadi pertukaran ke&,\ i ? ,, j ? 1. %,+ 19 +'7 7% !@> %9* 109 >G% 7,) 0*1 ,%' ,*0 7%' 799 97, 9*) - Tambah nilai i hingga i ? 9, ]V 9 W Q ]V 1 W, atau 109 Q ,*), terjadi pertukaran ke&7\ i ? 9, j ? 1. %,+ 19 +'7 7% '9, %9* >G% BC@ Halaman 56 Algoritma Pemrograman 7,) 0*1 ,%' ,*0 7%' 799 97, 9*) "erhatikan bah-a semua perbandingan dalam #ontoh di atas melibatkan item data ,*). (e#ara umum, tiap perbandingan akan melibatkan nilai a-al ]V%W, karena data tersebut terus mengalami pertukaran posisi tiap kali arah proses diganti ( nilai i ditambah atau nilai j dikurangi ). "ada saat i ? j , item data ]V % W ini telah men#apai posisi yang seharusnya karena terlihat bah-a tidak ada lagi data yang lebih besar yang terletak disisi kirinya atau data yang lebih ke#il disisi kanannya. 5ile a-al telah mengalami pemilihan ( partitioned ) sedemikian rupa sehingga masalah pengurutan a-al telah berubah menjadi ' buah masalah baru yang lebih sederhana, yaitu mengurutkan ]V % W sBd ]V i&% W dan ]Vi@% W sBd ]V n W. Algoritma diterapkan untuk mengurutkan kedua sub ile ini. Di ba-ah ini dituliskan hasil lengkap tiap iterasi untuk #ontoh di atas. Tanda kurung siku menunjukan subile&subile yang masih akan diurutkan dan yang di#etak tebal menunjukan item data telah menempati posisi seharusnya. Dalam progra, subile ini dapat direpresentasikan dengan dua <ariable 3.( lo+er $ound ) dan 6.( Upper $ound ), yang menunjukkan batas dari subile yang sedang diproses. Disamping itu juga terdapat sebuah stack yang berisi nilai <ariable 3. dan 6. untuk subile&subile lain yang menunggu untuk diproses. - 3. ? %, 6. ? %7, (ta#k ?VW V,*) 19 ,%' 7% 0*1 %9* 109 '9, 7,) +'7 %,+ ,*0 7%' 799 97, 9*)W - 3. ? %, 6. ? 7, (ta#k ?V(1,%7)W V%,+ 19 +'7 7% '9, %9*W >G% V109 7,) 0*1 ,%' ,*0 7%' 799 97, 9*)W - 3. ? %, 6. ? ', (ta#k ?V(+,7),(1,%7)W V7% 19W 1>) V+'7 '9, %9*W >G% V109 7,) 0*1 ,%' ,*0 7%' 799 97, 9*)W - 3. ? +, 6. ? 7, (ta#k ?V(1,%7)W ?1 B@ 1>) V+'7 '9, %9*W >G% V109 7,) 0*1 ,%' ,*0 7%' 799 97, 9*)W - 3. ? +, 6. ? ,, (ta#k ?V(1,%7)W ?1 B@ 1>) V%9* '9,W )!? >G% V109 7,) 0*1 ,%' ,*0 7%' 799 97, 9*)W - 3. ? 1, 6. ? %7, (ta#k ?VW ?1 B@ 1>) 1@G !@> )!? >G% V109 7,) 0*1 ,%' ,*0 7%' 799 97, 9*)W - 3. ? 1, 6. ? %+, (ta#k ?VW ?1 B@ 1>) 1@G !@> )!? >G% V9*) 7,) 97, ,%' ,*0 7%' 799W BC@ CGB - 3. ? 1, 6. ? %', (ta#k ?VW ?1 B@ 1>) 1@G !@> )!? >G% Halaman 57 Algoritma Pemrograman V7,) ,%' ,*0 7%' 799W @G% @?> BC@ CGB - 3. ? 1, 6. ? %%, (ta#k ?VW ?1 B@ 1>) 1@G !@> )!? >G% V7,) ,%' ,*0 7%'W ?@@ @G% @?> BC@ CGB - 3. ? 0, 6. ? %%, (ta#k ?VW ?1 B@ 1>) 1@G !@> )!? >G% >GC V7,) ,%' 7%'W ?@@ @G% @?> BC@ CGB - 3. ? 0, 6. ? %*, (ta#k ?VW ?1 B@ 1>) 1@G !@> )!? >G% >GC V,%' 7%'W ?>% ?@@ @G% @?> BC@ CGB - 3. ? &, 6. ? &, (ta#k ?VW ?1 B@ 1>) 1@G !@> )!? >G% >GC >1! ?1! ?>% ?@@ @G% @?> BC@ CGB ;ata&rata jumlah perbandingan untuk metode Yui#k sort adalah =(n log n). Rui#k sort menunjukan perormansi terbaik kasus array B ile yang terurut sama sekali. Kasus terburuk untuk metode ini terjadi bila tabel terurut, karena jumlah perbandingan menjadi berorde =(n ' ). 8al sebaliknya berlaku untuk metode bubble sort ( kasus terbaiknya adalah data terurut). Dalam kasus seperti ini, metode Yui#k sort juga tidak lebih baik dibandingkan dengan sele#tion sort. Karena berorde =(n log n) dan o<erhead&nya yang rendah, metode Yui#k sort menjadi metode ter#epat yang sering digunakan dalam praktek. ).). /" T1&"AL 'O&T/"2 7 'O&T/"2 B4 '1L1-T/O" Dalam metode sele#tion sort, item data dipilih satu persatu sesuai dengan urutannya dan ditempatkan ke posisinya yang benar. /tem&item data input tersebut mungkin perlu melalui tahap pemrosesan a-al ( prepro#essing) terlebih dahulu agar pemilihan se#ara terurut (ordered sele#tion) dapat dilakukan. (emua jenis sele#tion sort se#ara konseptual dapat dituliskan dalam bentuk algoritma umum berikut, dimana digunakan sebuah descending priority )ueue (D"R). "erlu diingat bah-a operasi "R /nsert menambahkan elemen baru ke dalam priority Yueue dan operasi "R Ma>Delete mengambil elemen dengan nilai terbesar dari dalam priority Yueue. Algoritma ini disebut 2eneral 'election 'ort. "erhatikan bah-a tahap sele#tion dilakukan dengan serangkaian penghapusan ( deletion ) item dari dalam priority Yueue, meskipun Halaman 58 Set DPO e%?adi seb&a* des3e%di%8 priority =&e&e koso%8; ;lak&ka% preprocessing ter*adap ite-ite dala array i%p&t de%8a% 3ara e%8i%sert%ya ke dala priority =&e&e< 0or I ! $ to N do PO I%sert ;DPOA5M i N < ;pili* tiap elee% sat& per sat& ses&ai &r&ta%%ya< 0or I ! N do4% to $ do 5M i N E! PO 2a(Delete ;DPO< Algoritma Pemrograman sebenarnya yang dibutuhkan adalah penelusuran Yueue dengan urutan menurun ( descending order ). .erikut ini akan ditinjau beberapa metode sele#tion sort. Ada dua hal yang membedakan satu metode dengan metode yang lain. "ertama adalah struktur data yang digunakan untuk mengimplementasikan priority Yueue. Kedua adalah metode yang digunakan untuk mengimplementasikan algoritma umum di atas. ).).1. 31TOD1 'T&A/2,T '1L1-T/O" 'O&T Metode straight sele#tion sort mengimplementasikan sdes#ending priority Yueue sebagai sebuah array tak terurut. Array input ] digunakan untuk mengelola priority Yueue, sehingga tidak mengakibatkan adanya tambahan kebutuhan space,memori . Array input ] merupakan sebuah array tak terurut sehingga direpresentasikan des#ending priority Yueue dengan elemen. Karena bentuk inputnya sudah seperti yang dikehendaki, tidak perlu lagi dilakukan tahap preprocessing. Karena itu, metode ini seluruhnya hanya terdiri dari tahap sele#tion dimana se#ara berulang&ulang nilai data terbesar B ter ke#il ( <ariable max atau min ) dianatar data yang tersisa ( belum terurut ) ditempatkan keposisi yang seharusnya. 6ntuk melakukan hal ini, max,min dipertukarkan letaknya dengan elemen ]V i W, dimana i adalah nomor iterasi. "riority Yueue yang pada a-alnya berisi n elemen mengalami pengurangan elemen satu demi satu pada setiap iterasi. (etelah (n&%) kala sele#tion, keseluruhan array menjadi terurut. :adi langkah&langkah yang dilakukan dalam metoda ini adalah $ - "ilih item data dengan nilai data terke#il ( minimum selection sort ) atau terbesar ( maximim selection sort ), - "ertukarkan posisinya dengan item data pertama ]V i W, - 6langi operasi ini untuk (2&%) item data yang tersisa, kemudian untuk (2&') item data yang tersisa, hingga tinggal % item data yang tersisa, yaitu item data ternesarBterke#il. 8asil akhir dari minimum sele#tion sort adalah data terurut menaik ( as#ending), sedangkan hasil akhir dari ma>imum sele#tion sort adalah data terurut menurun ( des#ending). Dua #ontoh kasus untuk masing&masing jenis sele#tion sort tersebut diberikan di ba-ah ini $ ).).1.1. 3/"/3#3 '1L1-T/O" 'O&T A-al ', ,9 +1 )9 %' 0' 17 )) /terasi % 1! ,9 +1 )9 ', 0' 17 )) /terasi ' 1! !> +1 )9 ,9 0' 17 )) /terasi ) 1! !> %% )9 ,9 0' 17 +1 /terasi + 1! !> %% %@ ,9 0' 17 +1 /terasi , 1! !> %% %@ )B 0' 17 ,9 /terasi 7 1! !> %% %@ )B >@ 17 0' /terasi 9 1! !> %% %@ )B >@ B? C! A-al ++ ,, %' +' 0+ %1 7 79 /terasi % ? ,, %' +' 0+ %1 ++ 79 /terasi ' ? 1! ,, +' 0+ %1 ++ 79 /terasi ) ? 1! 1B +' 0+ ,, ++ 79 Halaman 59 Algoritma Pemrograman /terasi + ? 1! 1B )! 0+ ,, ++ 79 /terasi , ? 1! 1B )! )) ,, 0+ 79 /terasi 7 ? 1! 1B )! )) >> 0+ 79 /terasi 9 ? 1! 1B )! )) >> ?@ C) ).).1.!. 3A/3#3 '1L1-T/O" 'O&T A-al ', ,9 +1 )9 %' 0' 17 )) /terasi % C! ,9 +1 )9 %' ', 17 )) /terasi ' C! B? +1 )9 %' ', ,9 )) /terasi ) C! B? >@ )9 %' ', +1 )) /terasi + C! B? >@ )B %' ', )9 )) /terasi , C! B? >@ )B %@ ', %' )) /terasi 7 C! B? >@ )B %@ %% %' ', /terasi 9 C! B? >@ )B %@ %% !> 1! A-al ++ ,, %' +' 0+ %1 7 79 /terasi % C) ,, %' +' ++ %1 7 79 /terasi ' C) ?@ %' +' ++ %1 7 ,, /terasi ) C) ?@ >> +' ++ %1 7 %' /terasi + C) ?@ >> )) +' %1 7 %' /terasi , C) ?@ >> )) )! %1 7 %' /terasi 7 C) ?@ >> )) )! 1B 7 %' /terasi 9 C) ?@ >> )) )! 1B 1! ? .erikut ini dituliskan dua <ersi kode program untuk prosedur minimum straight sele#tion sort. "erbedaan diantara keduanya hanya sedikit, yaitu pada titik a-al penelusuran array untuk penempatan item data terke#il B terbesar. Halaman 60 Pro3ed&re 2i%Sele3tio% ; Lar 5 E ArrayType; N E i%te8er <; Lar iA ?A id(A a( E i%te8er ; Be8i% #or i E! N do4% to , do Be8i% 2a( E! (M$N; Id( E!$; #or ? E! , to i do I0 ;5M?N H a( < t*e% Be8i% 2a( E! (M?N; Id( E!?; K%d; (Mid(N E ! (MiN (MiN E! a(; e%d; e%d; Pro3ed&re 2i%Sele3tio% ; Lar 5 E ArrayType; N E i%te8er <; Lar iA ?A id(A a( E i%te8er ; Be8i% #or i E! $ to N-$ do Be8i% 2i% E! (MiN; Id( E!i; #or ? E! ; i'$< to N do I0 ;5M?N > i% < t*e% Be8i% 2i% E! (M?N; Id( E!?; K%d; (Mid(N E ! (MiN (MiN E! i%; e%d; e%d; Algoritma Pemrograman Dalam straight sele#tion sort, jumlah perbandingan yang dilakukan adalah ( n ' Fn )B'. :adi jumlah perbandingan berorde =(n ' ). :umlah pertukaran yang dilakukan selalu n&% ( ke#uali jika dilakukan penge#ekan terlebih dahulu untuk menghindari sebuah item data dipertukarkan dengan dirinya sendiri ). Calaupun ordenya =(n ' ), metode ini lebih #epat dibandingkan bubble sort. Tidak ada perubahan perormansi apabila ile input telah berurut atau sama sekali belum terurut. "enggunaan metoda ini dianjurkan untuk jumlah data yang ke#il ).>. /"T1&"AL 'O&T B4 /"'1&T/O" Metode insertion sort ialah teknik yang mengurutkan sekumpulan re#ord dengan #ara menyisipkan re#ord&re#ord ke dalam sebuah ile yang telah terurut. ).>.1. 31TOD1 'T&A/2,T /"'1&T/O" 'O&T Metode straight insertion B simple sort dapat dipandang sebagai sebuah generasi general selection sort dimana priority Yueue&nya diimplementasikan sebagai sebuah array terurut. Pang dibutuhkan hanyalah tahap preprocessing untuk meng&insert item&item data ke dalam priority Yueue. (etelah item&item tersebut selesai di insert, semua telah terurut sehingga tidak diperlukan tahap selection. :ika ile a-alnya telah terurut, hanya dibutuhkan satu kali pembandingan pada tiap iterasi, sehingga ordernya menjadi =(n). :ika ile a-alnya terurut terbalik ( re'erse order ), orde metode ini menjadi =(n ' ), karena jumlah pembandingan yang dilakukan adalah $ (n&%)@ (n&')@ (n&))@ H @ )@ ' @ % ? (n ' F n )B' Meskipun ordenya sama, staright insertion sort umumnya lebih baik dibandingkan bubble sort. (emakin terurut ile data a-alnya, semakin eisien pula metoda ini bekerja. ;ata&rata jumlah pembandingan dalam metode ini adalah (n ' ). (pa#e tambahan hanya dibutuhkan untuk menyimpan sebuah <ariable sementara ( template ). .erikut ini diberikan dua buah #ontoh pengurutan dengan straight insertion sort. "ada gambar diba-ah ini dituliskan kode program dalam bahasa "as#al untuk metode ini. A-al ', ,9 +1 )9 %' 0' 17 )) /terasi % !> ,9 +1 )9 %' 0' 17 )) /terasi ' !> )B ,9 )9 %' 0' 17 )) /terasi ) !> %@ )B >@ %' 0' 17 )) /terasi + 1! !> %@ )B >@ 0' 17 )) /terasi , 1! !> %@ )B >@ C! 17 )) /terasi 7 1! !> %@ )B >@ B? C! )) /terasi 9 1! !> %% %@ )B >@ B? C! A-al ++ ,, %' +' 0+ %1 7 79 /terasi % )) >> %' +' 0+ %1 7 79 /terasi ' 1! )) >> +' 0+ %1 7 79 /terasi ) 1! )) )! >> 0+ %1 7 79 /terasi + 1! )) )! >> C) %1 7 79 /terasi , 1! 1B )) )! >> C) 7 79 /terasi 7 ? 1! 1B )) )! >> C) 79 /terasi 9 ? 1! 1B )) )! >> ?@ C) Halaman 61 Algoritma Pemrograman Halaman 62 Algoritma Pemrograman ).>.!. ',1LL 'O&T < D/3/"/',/"2 /"-&131"T 'O&T = Metode shell sort dibuat oleh Donald 3. (hell ( %01, ). Metode ini membagi F bagikan ile data a-al menjadi beberapa subile. (ubile F subile ini berisi setiap item data kelipatan ke F k dalam ile a-alnya. 2ilai k ini disebut in#rement. (ebagai #ontoh, jika k ? ,, maka subile yang pertama diproses adalah subile yang berisi item data ]V%W, ]V7W, ]V%%W,H Dengan #ara seperti ini akan terdapat , buah yang masing F masing berisi %B , data dari ile a-al, yaitu $ (ubile % ]V%W ]V7W ]V%%W dst (ubile ' ]V'W ]V9W ]V%'W dst (ubile ) ]V)W ]V1W ]V%)W dst (ubile + ]V+W ]V0W ]V%+W dst (ubile , ]V,W ]V%*W ]V%,W dst (e#ara umum, jika digunakan nilai in#rement k ( terdapat k buah subile ), maak elemen data ke F / dari subile ke& j adalah ]V/&%W> k @ j ) (etelah k buah subile ini selesai diurutkan ( biasanya dengan menggunakan metode straigt insertion sort ), dipilih sebuah nilai baru yang lebih ke#il untuk in#rement k dan ile kembali kembali dibagi ke dalam kumpulan subile F subile baru berdasarkan nilai k ini. Masing F masing subile yang berukuran lebih besar ini ( karena nilai k lebih ke#il ) diurutkan, dan proses ini diulangi kembali dengan nilai k yang lebih ke#il. "ada akhirnya, nilai in#rement k ini diset sama dengan satu, sehingga yang diproses adalah % buah subile yang berisi keseluruhasn data yang ada diile a-al. 6rutan nilai in#rement yang menge#il ini telah ditetapkan pada a-al proses sorting ( diminish beraryi mengurangi ) Halaman 63 Pro3ed&re I%sertio% ;Dar 5EArrayType; NEi%te8er<; Lar kA iA y E i%te8er; #o&%d E boolea%; Be8i% ;5M$N er&paka% array ya%8 ter&r&t de%8a% $ ite@ Di ak*ir tiap iterasiA ite 5M$N-5MkN tela* ter&r&t@< #or k E! , to N do Be8i% 1 E! 5MkN; ; Se&a data ya%8 lebi* besar dari y di 8eser Sat& posisi ke sebela* ka%a% < i E! k 9 $; 0o&%d E! 0alse; 4*ile ; i H! $< a%d ;%ot 0o&%d< do i0 ;y > 5MiN< t*e% be8i% 5Mi'$N E! 5M$N; i E! i 9$; e%d else 0o&%d E! tr&e; ; i%sert 5MkN ke posisi ya%8 tepat < 5;i'$< E! y; K%d; K%d; Algoritma Pemrograman (ebagi #ontoh, jika ile a-al berisi item F item data beriktu $ ', ,9 +1 )9 %' 0' 17 )) dan urutan nilai in#rement k yang dipilih adalah ( ,,),% ), maka pada tiap iterasi akan diurutkan subile F subile berikut $ /terasi % ( /n#rement ? , ) (]V%V, ]V7W) (]V'W, ]V9W) (]V)W, ]V1W) (]V+W) (]V,W) iterasi ' ( in#rement k ? ) ) (]V%W, ]V+W, V9W) (]V'W, ]V,W, ]V1W) (]Z)W,]V7W iterasi ) ( in#rement k ? % ) (]V%W, ]V'W, ]V)W, ]V+W, ]V,W, ]V7W, ]V9W, ]V1W) Tahapan proses pengurutannya ditunjukkan beriktu ini. /tem data yang berada dalam subile yang sama dihubunhkan dengan tanda garis. Tiap subile tersebut diurutkan dengan menggunakan metode straight insertion sort. Kondisi ', ,9 +1 )9 %' 0' 17 )) A-al /terasi ' ', ,9 +1 )9 %' 0' 17 )) K ? , /terasi ' ', ,9 )) )9 %' 0' 17 +1 K ? ) /terasi ) ', %' )) )9 +1 0' 17 ,9 K ? % Kondisi %' ', )) )9 +1 ,9 17 0' Terurut /de di belakang metode shell sort ini #ukup sederhana. Telah disebutkan seblumnay bah-a starigt insertion sort sangat eisein untuk ile data yang hampir terurut. :uga penting untuk disadari bah-a apabila ukuran ile ke#il, maka metode sort berorde ) (n') sering lebih eisien dibandingkan metode yang berorde * (n log n ). Karena nilai in#rement pertama yang digunakan oleh shell sort #ukup besar, maka ukuran tiap subile menjadi ke#il, sehingga proses staright insertion terhadap subile F subile ini menjadi #epat. Tiap pengurutan subile ini membuat keseluruhan ile menjadi semakin terurut. Karena itu meskipun iterasi F iterasi berikutnya menggunakan nilai in#rement yang lebih ke#il sehingga menyebabkan subile semakain besar, namun subile F subile tersebut sudah berada dalam kondisi hampir terurut sebagi hasil dari iterasi sebelumnya. /nsertion sort terhadap subile F subile ini juga akan berlangsung #ukup eisien. Halaman 64 Algoritma Pemrograman =rde metode shell sort adalah * (n ( log 2 )') jika digunakan urutan nilai in#rement yang tepat. Knuth merekomendasikan pemilihan nilai in#rement sebagai berikut $ Deinisikan ungsi se#ara rekursi sehingga h0%* ?% dan h(/ @%) ? )>h(i* @. Misalkan > adalh bilangan bulat terke#il sedemikian rupa sehingga h(>) .n. (et nilai 2umeri# ( jumlah in#rement) menjadi > F' dan set /n#V%W menjadi h(2umeri# F% @%) untuk / mulai dari s.d. 2um/n#. .erikut ini akan diberikan #ontoh kedua tangan n ? %7 dan dua alternati urutan k , yaitu (1,+,',%) dan (9,,,),%). K ? 1 ,*) 19 ,%' 7% 0*1 %9* 109 '9, 7,) +'7 %,+ ,*0 7%' 799 97, 9*) k ? + ,*) 19 %,+ 7% 7%' %9* 97, '9, 7,) +'7 ,%' ,*0 0*1 799 109 9*) k ? ' ,*) 19 %,+ 7% 7%' %9* ,%' '9, 7,) +'7 97, ,*0 0*1 799 109 9*) k ?% %,+ 7% ,*) 19 ,%' %9* 7%' '9, 7,) +'7 97, ,*0 109 799 0*1 9*) 8asil $ 7% 19 %,+ %9* '9, +'7 ,*) ,*0 ,%' 7%' 7,) 799 9*) 97, 109 0*1 k ? 9 ,*) 19 ,%' 7% 0*1 %9* 109 '9, 7,) +'7 %,+ ,*0 7%' 799 97, 9*) k ? , '9, 19 +'7 7% ,*0 %9* 799 ,*) 7,) ,%' %,+ 0*1 7%' 109 97, 9*) Halaman 65 Algoritma Pemrograman k ? ) %,+ 19 +'7 7% ,*0 %9* 799 ,*) 7,) ,%' '9, 0*1 7%' 109 97, 9*) k ? % 7% 19 %9* %,+ '9, +'7 ,%' ,*) 7,) 7%' ,*0 97, 799 109 0*1 9*) 8asil $ 7% 19 %,+ %9* '9, +'7 ,*) ,*0 ,%' ,%' 7,) 799 9*) 97, 109 0*1 Di ba-ah ini dituliskan kode program dalam bahsa "as#al untuk metode shell sort. Type /n#Tab ? re#ord 2um/n# $ % .. 2umElm /n#rm $ array V %..numElmW o integer \ End\ "ro#edure (hell ( <ar ] $ ArrayType\ 2$integer\ /n#Tab) \ Xar j, span $ integer\ /n#r, y, k $ integer\ 5ound $ boolean\ .egin 5or in#r $? % to /n#. 2um/2# do .egin Zspan adlah nilai in#rement yang #urrent[ span $ ? /n#./n#rm V in#rW\ or j $ ? spant@% to 2 do begin Zinsert elemen >>VjW ke posisinya yang tepat dalam subilenya[ y $ ? ]V j W\ k $? j F span\ ound $ ? alse\ -hile ( k Q ?%) and ( not ound ) do i ( y S ]VkW) then begin >Vk@spanW $ ? ]VkW\ K $ ? k F spasi\ End Else ound ound $ ? true \ ]V k@spanW $ ? y$ End\ End\ End\ ).?. 1T1&"AL 'O&T/"2 Metode F metode internal sorting yang diuraikan di atas tidak dapat diterapkan apabila junlah item data yang akan diurutkan tidak dapat ditampung dalam memori utama komputer ( sehingga harus disimpan dalam media penyimpanan sekunder, seperti disk ). Dalam kasus Halaman 66 Algoritma Pemrograman seperti ini, data disimpan dalam bentik sebuah ile, dimana pada setiap saat hanya satu item data yang dapat diakses. 8al ini menjadi suatu batasan jika dibandingkan terhadap struktur array. Karena itu harus digunakan teknik sorting yang berbeda. (alah satu diantaranya yang terpenting adalah sorting by merging. ).?.1. 31TOD1 'T&A/2,T 31&2/"2 'O&T Merging ialah proses mengabungkan dua atau lebih ile yang terurut ke dalam ile ketiga yang dapat diakses se#ara berulang F ulang. Merging merupakan sebuah operasi yang jauh lebih sederhana dibandingkan sorting. !ontoh sebuah prosedur yang menerima masukkan dua buah array terurut A dan . dengan jumlah elemen data an dan bn, dan mengabungkan keduanya ke dalam array ketiga ! yang akan berisi !n elemen data. "ro#edure MergeArray ( A, . $ ArrayType\ Xar ! $ ArrayType\ An, bn $ integer\ Xar #n $ integer )\ Z MergeBgabungkan array A dan array . ke dalam array ! [ Xar Aid>, .id>, !id> $ integer\ .egin / ( an @ bn Q 2umElm ) then Error ( D Data yang akan di&merge terlalu banyak D )\ Else begin !n $? an @ bn\ Aid> $? %\ .id> $? %\ !id> $?%\ Chile ( Aid> S? an ) and ( .id> S@ bn ) do begin i ( AVAid>W S .Vid>W then begin !V!id>W $? AVAid>W\ Aid> $? Aid> @ %\ Endelse .egin !V!id>W $? .V.id>W\ .id> $? .id> @ %\ End\ !id> $? !id> @ %\ End\ Z (alin elemen data yang tersisa di array A dan . [ Chile ( Aid> S? an ) do .egin !V!id>W $? AVAid>W\ !id> $? !id> @ %\ Aid> $? Aid> @ %\ End\ Chile ( .id> S? bn ) do .egin !V!id>W $? .V.id>W\ !id> $? !id> @ %\ .id> $? .id> @ %\ End\ End\ End\ "ada prosedur di atas, dua buah array B tabel terurut digabungkan ke dalam sebuah array yang baru. "eoses ini dilakukan dengan #ara memilih re#ord dengan nilai key paling ke#il Halaman 67 Algoritma Pemrograman dalam kedua array tersebut se#ara berulang &Fulang dan menempatkannya ke dalam array yang baru. (ebuah #ontoh dengan , item deberikan berikut ini. Array % %% ') +' Array ' 0 ', Array ) Array % %% ') +' Array ' ', Array ) 0 Array % ') +' Array ' ', Array ) C 11 Array % +' Array ' ', Array ) C 11 !% Array % +' Array ' Array ) C 11 !% !> Array % Array ' Array ) C 11 !% !> )! Kita dapat menggunakan teknk ini untuk mengurutkan sebuah ile dengan #ara berikut. "ertama, kita membagi ile yang akan diurutkan menjadi n buah subile yang hanya berisi % data. Kemudian, pasangan subile yang bertetangga (ad&acent) digabungkan untuk membentuk subile baru yang berukuran lebih besar. :adi, kita memperoleh kira&kira nB' buah subile yang masing&masing berisi ' data. "roses ini diulangi hingga akhirnya diperoleh % buah file yang berukuran n data. Tambar % menunjukkan bagaimana proses ini dilaksanakan pada sebuah ile #ontoh. (etiap subile ditandai dengan kurung siku. .erikut ini akan diberikan sebuah prosedur untuk mengimplementasikan teknik 'traight 3erge 'ort yang telah dijelaskan di atas. Dibutuhkan sebuah array bantu %ux berukuran -um.lm untuk menyimpan hasil penggabungan dua buah subarray dari ]. Xariabel size digunakan untuk mengontrol ukuran dari subarray yang sedang digabungkan. Karena kedua ile yang sedang digabungkan merupakan subarray dari ], maka dibutuhkan batas ba-ah (lo+er $ound) dan batas atas (upper $ound) untuk menunjukkan subile&subile dari ] yang sedang diproses. 3.% dan 6.% merupakan batas ba-ah dan batas atas untuk ile pertama\ 3.' dan 6.' merupakan batas ba-ah dan batas atas untuk ile kedua. Xariabel / dan j digunakan untuk menga#u ke elemen data pada ile sumber (source file) yang sedang diproses dan k menga#u ke ile tujuan (destination file). "rosedurnya dituliskan dengan lengkap di ba-ah ini. Halaman 68 Algoritma Pemrograman "ro#edure Merge(ort (<ar ] $ ArrayType\ 2 $ integer)\ Xar Au> $ ArrayType\ 3.%, 3.', 6.%, 6.' $ integer\ i, j, k, siIe $ integer\ .egin siIe $? %\ Zmerge ile&ile berukuran % data[ -hile (siIe S 2) do begin Zinisialisasi batas ba-ah dari ile pertama[ 3.% $? %\ k $? %\ -hile (3.% @ siIe S? 2) do Z#ek apakah ada ' ile yang akan di&merge[ begin 3.' $? 3.% @ siIe\ 6.% $? 3.' F %\ / (3.' @ siIe F % Q 2) Then 6.' $? 2 Else 6.' $? 3.' @ siIe F %\ End\ i $? 3.%\ j $? 3.'\ -hile (/ S? 6.%) and (j S? 6.') do begin i (]ViW S? ]VjW) then begin Au>VkW $? ]ViW\ i $? i @ %\ end else begin Au>VkW $? ]VjW\ j $? j @ %\ end\ k $? k @ %\ ^ end\ -hile (i S? 6.%) do begin au>VkW $? ]ViW\ i $? i @ %\ k $? k @ %\ end\ -hile (j S? 6.') do begin au>VkW $? ]VjW\ j $? j @ %\ k $? k @ %\ end\ 3.% $? 6.' @ %\ Zsalin isi ile&ile yang masih tersisa[ i $? 3.%\ -hile (k S? 2) do begin au>VkW $? ]ViW\ k $? k @ %\ i $? i @ %\ end\ or k $? % to 2 do ]VkW $? Au>VkW\ siIe $? siIe A '\ end\ end\ Halaman 69 Algoritma Pemrograman Di ba-ah ini diberikan dua buah #ontoh proses straight merging untuk ile data berukuran 1 dan %*. A-al V',W V,9W V+1W V)9W V%'W V0'W V17W V))W "ass % V', ,9W V)9 +1W V%' 0'W V)) 17W "ass ' V', )9 +1 ,9W V%' )) 17 0'W "ass ) V%' ', )) )9 +1 ,9 17 0'W A-al V+'W V')W V9+W V%%W V7,W V,1W V0+W V)7W V00W V19W "ass % V') +'W V%% 9+W V,1 7,W V)7 0+W V19 00W "ass ' V%% ') +' 9+W V)7 ,1 7, 0+W V19 00W "ass ) V%% ') )7 +' ,1 7, 9+ 0+W V19 00W "ass + V%% ') )7 +' ,1 7, 9+ 19 0+ 00W Metode di atas disebut /-+ay merging. !ara ini dapat digeneralisasi untuk menggabungkan k buah tabel terurut ke dalam satu array terurut. Teknik merging sedemikian disebut multiple merging atau k-+ay merging. Metode sorting ini #ukup eisien. Karena jumlah iterasi yang dibutuhkan adalah Vlog'nW maka jumlah perbandingan yang dilakukan berorde =(n log' n). =rde ini berlaku untuk kasus terburuk dan juga kasus rata&rata. (alah satu kelemahan utaman metode ini adalah area data sekunder yang dibutuhkan #ukup besar. Merge sort membutuhkan tambahan spa#e untuk array bantu sebesar =(n), sedangkan Yui#ksort hanya membutuhkan tambahan spa#e sebesar =(log n) untuk sta#k. (alah satu modiikasi yang dapat dilakukan terhadap metode di atas adalah dengan menggunakan linked allocation untu menggantikan alokasi sekuensial. Dengan menambahkan sebuah iled pointer tunggal ke dalam tiap re#ord, kebutuhan akan array bantu %ux dapat ditiadakan. 8al ini dilakukan dengan menghubungkan se#ara eksplisit setiap subile input dan output. Modiikasi ini dapat dilakukan baik terhadap straight merge maupun natural merge. ).?.!. 3etode "atural 3erging 'ort Dalam metode straight merging tidak diperoleh keuntungan apa&apa bila data pada a-alnya telah terurut sebagian (partially sorted). 6kuran dari semua subile yang telah di&merge pada iterasiBpass ke&k adalah kurang dari atau sama dengan ' k , tanpa melihat apakah subile lainnya telah terurut dan dapat digabungkan juga. "ada kenyataannya, dua buah subile sebarang dengan panjang m dan n dapat digabungkan se#ara langsung ke dalam sebuah ile tunggal dengan jumlah item m @ n. Metode mergesort yang pada setiap saat menggabungkan dua buah subile terpanjang yang mungkin disebut natural merging sort. :adi, jika pada straight merge,s emua subile berukuran sama (ke#uali mungkin untuk subile terakhir), maka pada natural merge kita memanaatkan beberapa keterurutan yang telah ada dalam ile a-al dan pemilahannya dilakukan berdasarkan subile terpanjang dengan urutan data yang menaik (increasing). Dengan kata lain, kita memanaatkan derajat keterurutan yang ada dalam array a-al untuk melakukan /-+ay merge sort. Di ba-ah ini diberikan dua buah #ontoh proses natural merging untuk %* item dan '* item. Halaman 70 Algoritma Pemrograman A-al V9*W V%* %9 9,W V+'W V),W V'0 ,) 7,W V+1W "ass % V%* %9 9* 9,W V), +'W V'0 +1 ,) 7,W "ass ' V%* %9 ), +' 9* 9,W V'0 +1 ,) 7,W "ass ) %* %9 '0 ), +' +1 ,) 7, 9* 9, Kondisi a-al $ V%9 )%W V, ,0W V%) +% +) 79W V%% ') '0 +9W V) 9 9%W V' %0 ,9W V)9 7%W "ass % $ V, %9 )% ,0W V%% %) ') '0 +% +) +9 79W V' ) 9 %0 ,9 9%W V)9 7%W "ass ' $ V, %% %) %9 ') '0 )% +% +) +9 ,0 79W V' ) 9 %0 )9 ,9 7% 9%W "ass ) $ V' ) , 9 %% %) %9 %0 ') '0 )% )9 +% +) +9 ,9 ,0 7% 79 9%W "enjelasan mengenai dua algoritma sorting $y merging lainnya, yaitu Balanced 3ultiwa$ 3erging dan Pol$phase 'ort, dapat dilihat pada VC/;97W. ).@. K1'/3P#LA" VC/;97W memberikan hasil perbandingan perormansi dari beberapa metode sorting dalam bentuk tabel F tabel berikut. "ada tabel ', n adalah jumlah data, ! menunjukan jumlah perbandingan ( #omparison ), dan M menunjukan jumah pertukaran jumlah pertukaran ( mo<e ). Tabel '. "erbandingan metode F metode sorting sederhana METODE MINIMUM RATA - RATA MAKSIMUM Sta!"#t $%&#an"$ ( b'bb($ )*t ) + = ( n2 , n ) / 2 M = 0 + = ( n2 , n ) / 2 M = ( n2 , n ) % 0,75 + = ( n2 , n ) / 2 M = ( n2 , n ) % 1,5 Sta!"#t )$($&t!*n + = ( n2 , n ) / 2 M = 3 ( n , 1 ) + = ( n2 , n ) / 2 M = n ( 1n n + 0,75 ) + = ( n2 , n ) / 2 M = n2 / - + 3 ( n , 1 ) Sta!"#t !n)$t!*n + = n , 1 M = 2 ( n , 1 ) + = ( n2 + n , 2 ) / - M = ( n2 , .n , 10 / - + = ( n2 , n ) / 2 , 1 M = ( n2 + 3n , - ) / 2 Tabel ) di ba-ah ini menunjukan -aktu yang dibutuhkan ( dalam milise#ond ) oleh program sorting dalam bahasa pas#al yang dieksekusi pada komputer !D! 7+**. Ketiga kolom tersebut menunjukan -aktu yang digunakan untuk mengurutkan array yang telah terurut, array yang urutannya a#ak, dan array yang terurut terbalik. (isi kiri kolom adalah -aktu untuk mengurutkan '+7 item, sedangkan sisi kanan adalah untuk ,%' item. Tabel ). "erbandingan -aktu eksekusi dari metode F metode sorting METODE T$''t ( */$$/ ) A&a0 ( an/*1 ) T$''t t$ba(!0 ( !n2$)$(3 */ ) Sta!"#t !n)$t!*n 12 23 344 1--- 70- 2534 Sta!"#t )$($&t!*n -53 1.07 50. 1.54 4.5 2475 6'bb($ )*t 5-0 2145 1024 -05- 1-.2 5.31 S#a0$ )*t 5 . .41 34-2 141. 4520 S#$(( )*t 55 114 127 3-. 157 -.2 7$a8 )*t 114 253 110 2-1 10- 224 9'!&0 )*t 31 4. 40 1-4 37 7. Sta!"#t 1$"!n" .. 23- 102 2-2 .. 232 Halaman 71 Algoritma Pemrograman Dari tabel di atas terlihat bah-a $ i. Metode bubble sort merupakan metode sorting paling terburuk dinamdingkan metode F metode lainnya. Metode shaker sort, yang merupakan <ersi perbaikannya, masih lebih buiruk dibandingkan straight insertion dan straighty sele#tion sort. ii. Metode Yui#k sort mengnguguli metode heap sort dengan aktor ' F ). Rui#k sort mengurutkan array yang terburuk terbalik denan ke#epatan yang sama dengan array terurut. "ada tabel ) di atas, metode sorting mengurutkan re#ord yang hanya terdiri dari sebuah key saja. "ada kebnyataanya, sebuah re#ord memiliki banak ield yang lain. Tabel + berikut menunjukan bagaimana pengaruh pemanbahan ield ke dalam re#ord terhadap perormansi -aktu metode sorting. Total ukuran re#ord tanpa ield tambahan, sedangkan sisi kanan kolom untuk re#ord dengan ield tambahan\ jumlah daya n ? ',7 Tabel +. "erbandingan -aktu eksekusi dari metode F metode sorting 6ntuk re#ord dengan ield tambahan METODE T$'t ( */$$/ ) A&a0 ( an/*1 ) T$''t t$ba(!0 ( !n2$)$(3 */. ) Sta!"#t !n)$t!*n 12 -4 344 112. 70- 2150 Sta!"#t )$($&t!*n -5. 5-7 50. 407 4.5 1-30 6'bb($ )*t 5-0 410 1024 3212 1-.2 55.. S#a0$ )*t 5 5 .41 3071 141. 5757 S#$(( )*t 55 154 127 373 157 -35 7$a8 )*t 114 24- 110 2-4 10- 227 9'!&0 )*t 31 55 40 137 37 75 Sta!"#t 1$"!n" .. 1.4 102 1.5 .. 157 Kesimpulan dari hasil perbandingan metode&metode sorting diatas adalah sebagai berikut $ i. Metode straight selestion sort menunjukan keunggulan yang signiikan sebagai metode sederhana ( straight method ) yang terbaik. ii. Metode bubble sort merupakan metode terburuk. Xersi perbaikan F nya, yaitu metode shaker soer hanya sedkiti lebih baik dibandingkan bubble sort dalam kasus array terurut terbalik ( in<ersely ordered ). iii. Metode Yui#k sort metode yang ter#epat dan metode internal sorting yang terbaik. .aik straight sele#tion sort maupun simple insertion sort lebih sesien dibandingkan bubble sort. (ele#tion sort membutuhkan lebih sedikit assigment dibandingkan insertion sort, namun lebih banyak perbandinan. Karena itu, sele#tion sort direkomendasikan untuk ile F ile berukuran ke#il dengan ukuran re#ord besar ( assigment mahal, tetapi perbandingan murah karena key sederhana ). 6ntuk kasus sebaliknya, direkomendasikan insertion sort. Halaman 72 BAB VI Algoritma Pemrograman '1A&-,/"2 < Pencarian = "en#arian Data yang sering juga disebut dengan table look-u" atau storage and retrie/al information adalah suatu proses untuk mengumpulkan sejumlah inormasi di dalam memori komputer dan kemudian men#ari kembali inormasi yang diperlukan se#epat mungkin. (eringkali kita dihadapkan pada permasalahan dimana sebenarnya kita memerlukan sedikit inormasi dari sekian banyak inormasi yang tersedia, sehingga sering timbul pemikiran untuk menghapus inormasi yang tidak diperlukan. 2amun dikemudian hari kita berubah pikiran untuk mempertahankan inormasi tersebut. Dan mengorganisasikannya sehingga proses pen#arian dapat dilakukan dengan #epat dan tepat. ?.1. /stilah $ang digunakan (e#ara umum kita memakai anggapan sejumlah data yang tersimpan dalam memori komputer, dan persoalan yang timbul adalah men#ari data yang kita inginkan. Dalam setiap rekaman ( reord ) biasanya terdiri dari medan ( field ). 6ntuk membedakan satu re#ord dengan re#ord yang lain maka harus ada satu ield yang menjadi kun#i ( ke0 field ). Kumpulan dari re#ord yang kita miliki dinamakan dengan berkas ( file ) atau tabel. 8ubungan antara key ield dengan re#ord biasanya sederhana atau kompleks. .entuk paling sederhana dari sebuah key ield adalah yang terletak dalam re#ord tersebut. Key ini biasanya dinamakan internal ke0 atau embedded ke0. Key yang lain ada yang tersimpan di dalam tabel di luar dari tabel utama. Key ini biasanya dinamakan dengan e1ternal ke0. :ika dalam sebuah re#ord terdapat ield yang dapat membedakan re#ord tersebut se#ara unique ( berbeda untuk setiap re#ordnya ) maka iled tersebut dinamakan "rimar0 ke0. (edangkan ield yang membantu membedakan setiap re#ord ( tidak dapat berdiri sendiri ) maka ield tersebut sering dinamakan seondar0 ke0. .eberapa kun#i ada yang disajikan se#ara single ke0, dan beberapa yang lain disajikan se#ara multi"le ke0. Algoritma "en#arian ( !earhing Algorithm ) adalah algoritma yang menerima kun#i bernilai K dan dengan langkah&langkah tertentu akan men#ari re#ord yang kun#inya bernilai K. (etelah proses dijalankan, kemungkinan ja-abannya hanya ada dua yaitu berhasil ditemukan ( suesful ) dan tidak berhasil ditemukan ( unsuesful ). "en#arian yang berhasil menemukan sering dinamakan retrie/al. 6ntuk algoritma pen#arian dan menambahkan data, dinamakan dengan searh and insertion algorithm. Metoda pen#arian data dapat dikelompokan kedalam beberapa Halaman 73 Algoritma Pemrograman metoda. Kelompok metoda pertama dapat dikelompokan menjadi pencarian internal ( internal searhing ) dan pencarian eksternal (e1ternal searhing). "engelompokan kedua adalah dengan mengelompokan ke dalam pencarian statis ( stati searhing ) dan pencarian dinamis ( d0nami searhing ). !ara pengelompokan yang lain adalah berdasarkan kun#i yang ada atau berdasar siat digital ( digital "ro"erties ) dari kun#i yang dimaksud. Menggunakan perbandingan dan distribusi. ?.!. Pencarian Berurutan < sequential searhing = ?.!.1. Pencarian Pada Tabel $ang belum Diurutkan Metode yang paling sederhana dari sejumlah metode pen#arian adalah metoda pen#arian berurutan ( sequential searhing ). (e#ara garis besar metoda ini dapat dijelaskan sbb$ Dari Xektor yang di#ari, data yang di#ari dibandingkan satu persatu sampai data tersebut ditemukan atau tidak ditemukan. "ada saat data ditemukan maka proses pen#arian langsung berhenti. Dalam kondisi yang paling buruk proses ini melakukan pen#arian sebanyak 2 kali ( sejumlah data yang ada). Procedure -A&/:#&#T( Xar Ada $ boolean\ 2,"osisi $ integer\ A $ Array\ Data $ integer)\ Kamus Lokal / $ integer\ Algortima 7 (Adianggap tidak ada dataA) Ada $? 5alse\ (Aiterasi dimulaiA) +or / 7H 1 to " do /( AV/W ? data then (AData ketemuA) Begin "osisi $? /\ Ada $? True\ 1nd 1nd(or Ada ? alse /( not Ada then (AData yang di#ari tidak ketemu sisipkan elemen ke dalam <ektorA) Begin /nc(2) AV2W $? Data\ 1nd ?.!.!. Pencarian Pada Tabel $ang 'udah Diurutkan (e#ara singkat pen#arian pada tabel yang sudah diurutkan adalah $ Dari elemen pertama dibandingkan dengan elemen yang di#ari. :ika elemen yang dibandingkan lebih ke#il dari elemen yang di #ari maka diteruskan pada elemen selanjutnya. :ika elemen yang dibandingkan lebih besar, maka dapat dipastikan elemen yang di#ari tidak dapat ditemukan. :ika ditemukan, maka proses pen#arian selesai. Halaman 74 Algoritma Pemrograman ?.!.!. Pencarian Biner * Binar$ 'earch (etelah <ektor yang di#ari diurutkan, maka <ektor tersebut dibagi dua sub <ektor dengan jumlah data yang sama (:ika ganjil maka diambil dari hasil 2 di< '). Kemudian data yang di#ari dibandingkan dengan elemen data yang terakhir dari data sub <ektor yang pertama. Apabila data yang di#ari lebih besar dari elemen akhir dalam sub <ektor sebelah kiri, maka data yang di#ari kemungkinan ada pada sub <ektor sebelah kanan. :ika data yang di#ari lebih ke#il dari elemen akhir dalam sub <ektor sebelah kiri , maka data yang di#ari kemungkinan ada pada sub <ektor sebelah kiri. "roses selanjutnya adalah kembali ke a-al dengan menganggap sub <ektor yang diperkirakan berisi data yang di#ari dianggap <ektor yang akan dibagi dua. 6ntuk lebih jelasnya perhatikan gambar di ba-ah ini Xektor di atas dibagi menjadi dua sub <ektor seperti di ba-ah ini $ (ub <ektor % (ub Xektor ' Misalnya data yang di#ari adalah %', maka data ada pada sub <ektor%. (etelah itu kemudian sub <ektor% dibagi menjadi ' bagian seperti di ba-ah ini $ (ub <ektor % (ub Xektor ' Karena data yang di#ari ada pada (ub Xektor', maka data ada pada sub <ektor' kemudian dibagi menjadi ' bagian kembali seperti di ba-ah ini $ (ub <ektor % (ub Xektor ' Karena data yang di#ari ada pada (ub Xektor% dan sudah sama, maka prose pen#arian selesai. ?.!.%. Pencarian Berurutan BerindeA * /ndeA 'e5uential 'earch Metoda pen#arian berurutan terindeks (inde>ed seYuential sear#h) adalah metoda lain dari beberapa metoda pen#arian yang dapat menaikan eisiensi pen#arian pada tabel yang sudah dalam keadaan urut. Dalam hal ini diperlukan tabel tambahan yang disebut dengan tabel inde>. (etiap elemen dalam tabel inde> berisi suatu kun#i dan pointer yang menunjuk kerekaman tertentu dalam tabel yang sesuai dengan kun#i tersebut. Elemen&elemen dalam tabel inde> juga harus diurutkan seperti halnya dalam tabel yang asli. Halaman 75 2 % 12 3& 43 '% &2 && %2 (4 2 % 12 3& 43 '% &2 && %2 (4 2 % 12 3& 43 12 3& 43 Algoritma Pemrograman (alah satu #ara untuk menyusun tabel inde> adalah sebagai berikut. Di ba-ah ini adalah suatu tabel yang menunjukan tabel datar mahasis-a dari suatu uni<ersitas yang sudah diurutkan menurut nomor mahasis-anya. No No. Mhs Nama Mahasiswa Thn Faklutas 1. .51001 An/! U)1an A(!1 .5 K*18't$ A0'ntan)! 2. .51102 6a1ban" A:! .5 T$0n!0 In;*1at!0a 3. .51110 E0* <a1b'/! .5 T$0n!0 In;*1at!0a -. .41201 A#1a/ T!t* S'/!* .4 Mana:$1$n In;*1at!0a 5. .41003 N3a! Ant$# 6'(an .4 K*18't$ A0'ntan)! 4. .41101 D$=! In/a Uta1a .4 T$0n!0 In;*1at!0a 7. .41105 M$t(at! <'t!# .4 T$0n!0 In;*1at!0a 5. .41207 >a/a <a(' .4 Mana:$1$n In;*1at!0a .. .7120- Ka1!n* 6a(! .7 Mana:$1$n In;*1at!0a 10. .7121- >ata0 Ab/'(a#1an .7 Mana:$1$n In;*1at!0a 11. .7120- D*$( M')(!1!n .7 Mana:$1$n In;*1at!0a 12. .5100. +#!)t3 Man')a1a .5 K*18't$ A0'ntan)! 13. .51113 U:an" M')a(!1 .5 T$0n!0 In;*1at!0a 1-. .51114 D!1a) A/! >!nata .5 T$0n!0 In;*1at!0a 15. .51223 R. A/! 7$n/a N!n"'1 .5 K*18't$ A0'ntan)! Dari gambar diatas, jika kita melihat pada nomor mahasis-a, kita bisa mendapatkan inormasi yang tersembunyi. Dua digit paling depan menunjukan tahun angkatan seorang mahasis-a masuk ke uni<ersitas\ dua digit ditengah menunjukkan kode akultas, %* adalah Komputer Akuntansi, %% adalah Teknik /normatika dan %' adalah Manajemen /normatika. Dua digit terakhir menunjukan nomor urutnya. Dengan melihat gambar di atas, kita bisa menyimpan tabel di atas untuk diimplementasikan menggunakan suatu struktur data tertentu untuk mendukung pen#arian berurutan terinde> dengan beberapa #ara. !ara pertama adalah dengan menggunakan tahun angkatan sebagai kun#i. !ara kedua menggunakan kode akultas untuk kun#inya. Tambar di ba-ah ini , menunjukan penyimpanan tabel di atas dengan tahun angkatan sebagai kun#i. Halaman 76 Algoritma Pemrograman Tabel Data "o. 3hs "ama 3ahasiswa +aklutas %**% Andi 6sman Alim Komputer Akuntansi %%*' .ambang Aji Teknik /normatika %%%* Eko "ambudi Teknik /normatika %'*% Ahmad Tirto (udiro Manajemen /normatika %**) 2yai Anteh .ulan Komputer Akuntansi %%*% De-i /ndra 6tama Teknik /normatika %%*, Metlati "utih Teknik /normatika %'*9 Carda "alu Manajemen /normatika %'*+ Kamino .ali Manajemen /normatika %'%+ Catak Abdulrahman Manajemen /normatika %'*+ Doel Muslimin Manajemen /normatika %**0 !hristy Manusama Komputer Akuntansi %%%) 6jang Mursalim Teknik /normatika %%%7 Dimas Adi Cinata Teknik /normatika %'') ;r. Adi 8endra 2ingrum Komputer Akuntansi (etiap elemen dalam tabel inde> terdiri dari dua buah medan, medan pertama menunjukan tahun angkatan yang dimaksud, medan kedua berisi pointer yang menunjukan ke tabel data yang rekaman pertamanya berisi sambungan dari nomor mahasis-a yang tahunnya dinyatakan dalam medan pertama. (ebagai #ontoh, rekaman pertama dalam tabel inde>, pointernya bernilai %\ hal ini menunjukan bah-a % adalah nomor rekaman pertama dalam tabel data yang tahun angkatannya adalah 0,. Dalam rekaman kedua dari tabel inde>, pointernya bernilai +\ hal ini menunjukan bah-a + adalah nomor rekaman pertama dalam tabel data yang tahun angkatannya adalah 07, dan seterusnya. Dengan #ara ini bisa dihitung mahasis-a yang masuk pada uni<ersitas tersebut setiap angkatannya. (ebagai #ontoh, banyaknya mahasis-a yang masuk pada tahun 0, adalah sebanyak pointer tahun 07 dikurangi dengan pointer tahun 0,, yaitu sebanyak ) mahasis-a (+&%). 6ntuk mengetahui banyaknya mahasis-a yang masuk pada tahun 09 diperlukan data sentinel, yang nilai pointernya apabila dikurangi dengan nilai pointer pada tahun 09 adalah tepat. Dalam #ontoh di atas, elemen terakhir dari tabel inde> berisi data sentinel yang dimaksud. "rogram yang akan disajikan di ba-ah ini merupakan #ontoh pembentukan berkas berurutan berinde> berdasarkan tahun angkatan. Dalam program tersebut, tipe data untuk tabel inde> dan berkas yang dimaksud dibuat berbeda (karena memang biasanya berbeda). Deklarasi tipe data untuk tabel inde> dan tabel data yang berisi data mahasis-a adalah sebagai berikut$ Type Z A Elemen tabel inde> A [ /nde> ? re#ord Kun#i $ string V'W\ A-al $ integer end\ Z A Elemen data A [ Halaman 77 Tabel /nde> (5 (' (& (% 1 4 ( 12 1' Algoritma Pemrograman Data ? re#ord 2oUMhs $ string V+W\ 2ama, 5akultas $ string V'*W\ end\ Z A Tabel /nde> A [ 3i ? array V*..%*%W o /nde>\ Z A Tabel data A [ 3d ? array V%..%**W o Data\ Dalam deklarasi di atas, ukuran tabel inde> dibuat seperti pada #ontoh diatas, untuk menyediakan tempat bagi data sentinel yang diperlukan. Data yang akan di#oba, sebelumnya sudah disimpan dalam berkas teks yang diberi nama !=.ADATA.DAT. (e#ara singkat program di ba-ah ini bisa dijelaskan sebagai berikut. (etelah data diba#a dari berkas !=.ADATA.DAT (yang sudah dalam keadaan urut), dibentuk tabel inde> seperti dijelaskan diatas. :ika kita ingin men#ari suatu nomor mahasis-a, terlebih dahulu nomor mahasis-a tersebut dipe#ah menjadi dua untai, yaitu untai nomor urut mahasis-a. "en#arian dimulai dengan men#ari tahun angkatan pada tabel inde>. :ika ditemukan, selanjutnya diteruskan dengan men#ari data yang dimaksud pada tabel data. :ika tahun angkatan yang di#ari tidak ditemukan, pen#arian langsung dihentikan dan tidak perlu men#ari pada tabel data, karena dalam tabel data yang terbentuk sesungguhnya merupakan sambungan dari tabel inde>. 6ntuk pen#arian pada tabel inde> dan tabel data dilakukan dengan #ara pen#arian berurutan. Keuntungan yang segera bisa dilihat dari metode ini adalah bah-a pen#arian dapat diper#epat karena jika inde> yang di#ari tidak ditemukan, maka berarti data yang akan di#ari memang tidak ada dalam tabel data. Tetapi jika inde>nya ditemukan, maka hanya sebagian ke#il dari tabel data yang perlu kita #ari . 8al ini tentu akan meper#epat pen#arian dibanding harus men#ari pada keseluruhan tabel data. "emakaian inde> juga bisa diimplementasikan menggunakan senaraiB link list seperti halnya dengan penggunanaan larikBarray. Meskipun diperlukan ruang pengingat yang lebih banyak untuk pointer, tetapi yang melakukan penghapusan atau penyisipan akan lebih mudah dilaksanakan dibanding denga larikBarray. :ika tabel data yang digunakan #ukup besar sehingga meskipun sudah digunakan tabel berurutan terinde> eisiensi pen#arian yang diinginkan tidak bisa di#apai (mungkin karena inde>nya terlalu besar untuk mengurangi pen#arian berurutan, atau karena inde>nya tertentu ke#il sehingga kun#i&kun#i yang berdekatan #ukup jauh satu sama lain) seringkali digunakan inde> sekunder. /nde> sekunder ini juga berungsi sama dengan inde> primer. "enghapusan elemen dari tabel berurutan terinde> akan lebih mudah apabila digunakan suatu tanda khusus (lag) yang menunjukan bah-a suatu elemen sudah dihapus. Dalam pen#arian berurutan rekaman yang sudah diberi tanda akan diabaikan. "erhatian, bah-a Halaman 78 Algoritma Pemrograman jika ada suatu elemen dihapus, maka tabel inde> didiamkan saja, tetapi pada tabel data kita tambahkan tanda khusus pada elemen yang akan dihapus. "enyisipan elemen ke dalam tabel berurutan terinde> akan mengalami kesukaran jika tidak ada tempat yang tersedia baik pada tabel inde> ataupun pada tabel data. Kalaupun ada, juga harus melakukan penggeseran sejumlah elemen yang banyaknya tidak menentu. Tentu, jika ada elemen yang sudah ditandai untuk dihapus, mungkin hanya diperlukan sedikit penggeseran sebelum elemen yang sudah ditandai tersebut ditumpang tulisi oleh elemen yang baru. 6ntuk implementasi menggunakan senarai berantaiB link list, penulis setahkan pada pemba#a sekalian untuk men#obanya. Halaman 79 ", ". "P Tabel Data "Q $$ $, $. $R $S ," ,- ,. ,S -" ", $$ $, I%de( Sek&%der $. $S ,- -" $, $S ,- I%de( Prier BAB VII Algoritma Pemrograman +/L1 '1D#1"T/AL < A&'/P B1&#"T#" = Memori utama dalam komputer tidak menyimpan data se#ara permanen. Apa yang tersimpan dalam memori akan hilang pada saat komputer dimatikan. Agar dat dapat di olah dikemudian hari, maka diperlukan memori yang dapat menyimpan data sehingga dapat diolah dikemudian hari. Memori ini dinamakan dengan meori sekunder ( se#ondary storage). Media yang sudah dikenal untuk digunakan biasanya adalah Disk ( disket, 8arddisk, #ompa#t disk ) dan tape. Memori sekunder dapat menyimpan data dalam jumlah yang sangat besar. (elain itu, memori sekunder biasanya meyimpan data dalam bentuk arsip ( (ile). /normasi yang disimpan dalam ile dinamakan rekaman (record). Metode penyimpanan dan pengaksesan ile bergantung pada metode pengorganisasian yang digunakannya. .eberapa metode organisasi ile antara lain arsip beruntun ( se5uential (ile ), arsip a#ak ( random (ile ), arsip berindeks ( indeAed (ile ). @.1. De(inisi Arsip Beruntun Arsip beruntun adalah sekumpulan rekaman yang disimpan di dalam media penyimpanan sekunder komputer yang dapat diakses se#ara berururtan mulai dari rekaman pertama sampai dengan rekaman yang terakhir se#ara berarah satu persatu. Karena komputer tidak mengetahui akhir dari arsip, maka dibuatkan sebuah rekaman (ikti( yang berungsi sebagai tanda akhir dari sebuah arsip. .iasanya dinamakan sebagai 1nd O( +ile ( 1O+). 6rutan akses ( satu per satu ) HHHHHH. End = 5ile ;ekaman % ;ekaman ' E=5 @.!. Deklarasi Arsip Beruntun !ara mendeklarsikan arsip dalam KAM6( adalah seperti di ba-ah ini $ KA3#' Type ;ekaman $ re#ord S deklarasi nama ield dan tipenya Q Type Arsipberuntun $ seY5ile o ;ekaman and E=5 ? Srekaman iktiQ Halaman 80 Algoritma Pemrograman !ontoh penggunaan arsip beruntun $ KA3#' Type DataMhs $ re#ord S 2/M $ ineteger, 2ama $ string, /"K $real Q Type Arsipberuntun $ seY5ile o DataMhs and E=5 ? S0000,G.G,*.**Q M8( $ ArsipMhs Z 2ama Arsip Mahasis-a [ KA3#' Type .il.ulat $ integer Type Arsip.il $ seY5ile o .il.ulat and E=5 ? S0000Q ./3A2TA2 $ Arsip.il Z 2ama Arsip .ilangan .ulat[ Di ba-ah ini adalah ilustrasi dat dari deklarasi data di atas $ 00+*%') !itra !araka ',+, 00+*')' MaE;u Manangsang ),97 00+*)%' ;ithamanubun ',01 00+*+'1 Karo (iahaya ),+) 0000000 *.** a ),, )+ 177 +,,7 +) &+, 9,7 )+,+ 0000 b @.%. Perintah Dasar untuk Arsip Beruntun (etiap rekaman dapat diakses sesuai dengan urutannya dengan perintah pemanggilan akses yang ada. "erintah dasar untuk pengelolaan arsip beruntun adalah perintah primiti ( berupa ungsi dan prosedur )yang telah dosediakan oleh compiller. .eberapa perintah dasar yang digunakan untuk mengelola arsip beruntun adalah seperti di ba-ah ini $ 1. Open 5ungsi $ membuka arsip beruntun untuk siap diba#a. "ointer pemba#aan menunjuk ke rekaman pertama. Keterangan $ perangkat keras yang berungsi penting dalam operasi ba#a B tulis rekaman adalah ,ead. "osisi a-al rekaman yang ditunjuk oleh head ditunjukan dengan pointer. !ontoh $ ="E2(M8(,;ekMhs) Z M8( ? nama arsip, ;ekMhs bertipe DataMhs [ ="E2(./3A2TA2,/) Z ./3A2TA2 ? nama arsip, / bertipe .il.ulat [ .ila arsip yang dibuka berisi rekaman seperti pada ilustrasi data di atas, maka perintah open di atas akan menjadi $ Halaman 81 Algoritma Pemrograman ;ekMhs berisi S00+*%'),!itra !araka,',+,Q / berisi ),, !. &ead 5ungsi $ memba#a rekaman yang sekarang sedang ditunjuk oleh pointer pemba#aan. !ontoh $ ;EAD(M8(,;ekMhs) ;EAD (./3A2TA2,/) .ila pointer pemba#aan menunjuk pada a-al rekaman kedua dengan data seperti pada ilustrasi di atas, maka perintah read di atas akan menjadi $ ;ekMhs berisi S00+*''),MaEru Manangsang,),97Q / berisi )+ %. &ewrite 5ungsi $ menyiapkan arsip untuk perekaman !ontoh $ ;EC;/TE(M8() ;EC;/TE (./3A2TA2) ). ;rite 5ungsi $ Menulis rekaman ke dalam arsip !ontoh $ C;/TE(M8(, S00+*%'),!itra !araka,',+,Q) C;/TE (./3A2TA2,S1***) !atatan $ Arsip yang dibuka untuk pemba#aan ( dengan perintah ="E2 ) tidak dapat digunakan untuk perekaman. Demikian juga sebaliknya, arsip yang dibuka untuk perekaman ( dengan perintah ;EC;/TE ) tidak dapat diba#a. =perasi ba#a tulis tidak dapat dilakukan sekaligus pada arsip beruntun. >. -lose 5ungsi $ menutup arsip yang telah digunakan untuk pemba#aan ataupun perekaman. !ontoh $ !3=(E(M8() !3=(E (./3A2TA2) @.). 'kema Pemroses Beruntun untuk Arsip Beruntun Karena seluruh rekaman di dalam arsip tersusun se#ara beruntun, maka skema pemrosesan se#ara beruntun dapat diterapkan dalam pengelolaan arsip. !ontoh$ "ro#edure 8/"K( output 2atas' $ integer ) Z Menghitung jumlah mahasis-a yang /"K nya di atas ', data diba#a dari arsip M8( [ Kamus 3okal ;ekM8( $ DataMhs A3T=;/TMA ="E2(M8(, ;ekM8() Z ;ekM8( berisi rekaman pertama atau E=5 [ Halaman 82 Algoritma Pemrograman /5 ;ekM8( ? =E5 then Z Arsip kosong [ 2atas' * else 2atas' * ;epeat / ;ekM8(./"K Q '.* then 2atas' 2atas' @ % Endi ;EAD(M8(, ;ekM8() Z ba#a rekaman selanjutnya[ 6ntil ;ekM8( ? E=5 Endi !3=(E(M8() @.).1.Pemrosesan Teks Teks adalah arsip yang terdiri atas deretan karakter. 6ntaian karakter tersebut dapat membentuk kata. Pang dimaksud dengan kata adalah kelompok karakter yang dipisahkan dengan kelompok lain oleh satu atau lebih spasi. "ada implementasinya, ditambahkan end of line sebagai tanda dari akhir baris yang membedakan dengan baris lainnya. Dalam meninjau model pengaksesan beruntun pada teks, pandanglah sebuah teks disusun oleh baris&baris teks. Andaiakan baris&baris teks tersebut dapat dipotong dan kemudian masing&masing ujung dari baris teks tersebut disambungkan, maka akhirnya didapatkan sebuah "/TAG yang berisi karakter&karakter. !ontoh :ika suatu Teks dideinisikan dalam bagian DEK3A;A(/ menjadi seperti $ "emrosesan teks yang utama adalah pemba#aan. "emrosesan teks adalah "emba#aan karakter se#ara beruntun dari a-al hingga akhir. Akhir teks ditandai dengan karakter khusus ( karakter titik (.G)) yang dibedakan dengan karakter lainnya. .ila pemba#aan bertemu dengan karakter khusus tersebut, maka pemba#aan berhenti. Karakter khusus ini tidak dihitung sebagai unsur teks. Teks yang terdiri dari ') karakter. Akhir teks adalah D.E Teks kosong Halaman 83 Saya adala* 2a*asis4a ST2IK 2ardira I%do%esia J&r&sa% I%0oratika ya%8 seda%8 bela?ar Al8orita TTT@@ DKKJARASI P E te(t ; P adala* Dariable Teks < ST2IK-2ardira I%do%esia@ @ Algoritma Pemrograman Dideinisikan ;E(ETUTEK( adalah prosedur uni<ersal untuk teks. ;E(ETUTEK( menyebabkan pointer akan menunjuk pada karakter pertama di teks. :ika teks kososng, pointer menunjuk titik. Pointer adalah identiikasi yang menunjuk pada karakter yang akan diba#a. 2otasi yang digunakan untuk memba#a karakter dari teks " adalah $ !ontoh Kasus $ Halaman 84 Pro3ed&re RKSKTGTKKS B2e%yiapka% Teks pada posisi a4al C B K@A4al E Sebara%8 C B K@Ak*ir E poi%ter e%&%?&k pada karakter pertaa di dala teks akibat pea%88ila% prosed&r i%iA poi%ter e%&%?&k ke karakter pertaa teksA karakter ya%8 dit&%?&k &%8ki% @C DKKJARASI C E 3*ar ; karakter ya%8 seda%8 di t&%?&k ole* poi%ter ba3a C P E te(t ; P adala* Dariable Teks < DKSKRIPSI Read ;PAC< B 2eba3a karakter ya%8 dit&%?&k ole* poi%ter ba3a dari teks P@ Karakter ya%8 diba3a disipa% dala pe&ba* C@ C Pro3ed&re FITUNIGBAN1AKGKARAKTKR ;+&tp&t E % E i%ete8er < B2e%8*it&%8 ba%yak%ya karakter di dala teksC B K@A4al E Sebara%8 C B K@Ak*ir E % berisi ba%yak%ya karakter di dala teksC DKKJARASI ; Tidak ada < DKSKRIPSI N " RKSKTGTKKS Read ;PAC< /*ile C @ Do % % ' $ Read ;PAC< B ba3a karakter berik&t%ya < e%d4*ile Pro3ed&re FITUNIGBAN1AKGKATA ;+&tp&t E %kata E i%ete8er < B2e%8*it&%8 ba%yak%ya kata di dala teksC B K@A4al E %kata bel& terde0i%isi %ilai%ya C B K@Ak*ir E %kata berisi ba%yak%ya kata di dala teksC DKKJARASI Pro3ed&re ABAIKANGSPASI B 2eba3a dereta% spasi da% e%8abaika%%yaC DKSKRIPSI RKSKTGTKKS Read ;PAC< %kata " /*ile C @ Do ABAIKANGSPASI B ba3a ter&s pita selaa bel& spasi ata& bel& titik C /*ile ; C < a%d ; C @ < Do Read ;PAC< K%d4*ile ; C < or ; C @ < Do %kata %kata ' $ ABAIKANGSPASI e%d4*ile Pro3ed&re ABAIKANGSPASI B2eba3a dereta% spasi da% e%8abaika%%yaC B K@A4al E Sebara%8 C B K@Ak*ir E karakter b&ka% spasi dite&ka%C DKKJARASI ; Tidak ada < DKSKRIPSI BSelaa ada spasi da% bel& titikA ba3a ter&s karakter di teks C /*ile ;C @< a%d ;C < Do Read ;PAC< B ba3a karakter berik&t%ya < K%d4*ile C @ or C Algoritma Pemrograman @.>. Penggabungan Arsip "engganbunagn arsip ( merging ) dilakukan untuk menggabungkan rekaman yang disimpan di dalam dua buah arsip berbeda. 8asil penggabungan arsip disimpan dalam arsip baru. @.>.1. Penggabungan Dua Buah Arsip dengan Pen$ambungan Misalkan diberikan dua buah arsip bilangan bulat, arsip yang pertama diberi nama ./3A2TA2% dan arsip yang kedua diberi nama ./3A2TA2'. /lustrasinya seperti di ba-ah ini $ ./3A2TA2% +), ,77 &+,7 1,7 1791 000 ./3A2TA2' 799 )+ 79 000 Apabila kedua arsip tersebut digabungkan dan hasilnya disimpan dalam arsip ./3A2TA2), ilustrasi hasilnya adalah seperti di ba-ah ini $ ./3A2TA2) +), ,77 &+,7 1,7 1791 799 )+ 79 000 Algoritmanya adalah seperti di ba-ah ini $ KAM6( Type .il.ulat $ integer Type Arsip.il $ (eY5ile o .il.ulat and E=5 ? S000Q ./3A2TA2%, ./3A2TA2', ./3A2TA2) $ Arsip.il Z nama arsip [ "ro#edure "enyambunganarsip% Z Menggabungkan dua buah arsip dan hasilnya disimpan dalam arsip baru [ Kamus 3okal / $ .il.ulat A3T=;/TMA ;EC;/TE(./3A2TA2)) ="E2(./3A2TA2%, / ) Chile ( / SQ 000 ) do C;/TE(./3A2TA2), / ) ;EAD(./3A2TA2%, / ) End-hile Z / ? 000 [ Z (ambung ./3A2TA2) dengan rekaman di ./3A2TA2' [ Chile ( / SQ 000 ) do C;/TE(./3A2TA2), / ) ;EAD(./3A2TA2', / ) End-hile Halaman 85 Algoritma Pemrograman Z / ? 000 [ C;/TE(./3A2TA2), S000Q) !3=(E(./3A2TA2%) !3=(E(./3A2TA2') !3=(E(./3A2TA2)) @.>.!. Penggabungan Dua Buah Arsip Terurut Misalkan arsip "ertama dan arsip Kedua sudah terururt naik dan diinginkan arsip hasil penggabungan juga terurut naik. !ontoh $ ./3A2TA2% +) ,7 ,0 1, 01 000 ./3A2TA2' %7 )+ 79 000 Apabila kedua arsip tersebut digabungkan dan hasilnya disimpan dalam arsip ./3A2TA2), ilustrasi hasilnya adalah seperti di ba-ah ini $ ./3A2TA2) %7 )+ +) 77 ,0 99 1, 01 000 Algoritmanya adalah seperti di ba-ah ini $ KAM6( Type .il.ulat $ integer Type Arsip.il $ (eY5ile o .il.ulat and E=5 ? S000Q ./3A2TA2%, ./3A2TA2', ./3A2TA2) $ Arsip.il Z nama arsip [ "ro#edure "enyambunganarsip' Z Menggabungkan dua buah arsip yang sudah terurt dan hasilnya disimpan dalam arsip baru yang juga sudah terurut [ Kamus 3okal Angka%, Angka' $ .il.ulat A3T=;/TMA ="E2(./3A2TA2%, Angka%) ="E2(./3A2TA2', Angka') ;EC;/TE(./3A2TA2)) Chile ( Angka%SQ 000 ) and ( Angka%SQ 000 ) do / Angka% Angka' then C;/TE(./3A2TA2), Angka% ) ;EAD(./3A2TA2%, Angka% ) Z Arsip ./3A2TA2% maju satu rekaman [ Else C;/TE(./3A2TA2), Angka' ) ;EAD(./3A2TA2%, Angka' ) Z Arsip ./3A2TA2' maju satu rekaman [ Endi Halaman 86 BAB VIII Algoritma Pemrograman End-hile Z Angka% ? 000 or Angka' ? 000[ Z (alin rekaman yang tersisa dari arsip ./3A2TA2% dan ./3A2TA2' [ Chile ( Angka% SQ 000 ) do C;/TE(./3A2TA2), Angka% ) ;EAD(./3A2TA2%, Angka% ) End-hile Z Angka% ? 000 [ Chile ( Angka' SQ 000 ) do C;/TE(./3A2TA2), Angka' ) ;EAD(./3A2TA2', Angka' ) End-hile Z Angka% ? 000 [ C;/TE(./3A2TA2), S000Q) !3=(E(./3A2TA2%) !3=(E(./3A2TA2') !3=(E(./3A2TA2)) @.?. Pemutakhiran Arsip < #pdating = "emutakhiran ( 6pdating ) adalah proses yang dilakukan untuk mengubah atau meremajakan rekaman arsip induk ( master ile ). "eremajaan rekaman arsip dapat dilakukan dengan data rekaman yang baru di inputkan atau diba#a dari arsip transaksi. AL2O&/T3A DA" P13&O2&A33A" T1&'T&#KT#& Konsep pemrogramman terstruktur memegang peran penting dalam meran#ang, menyusun, memelihara dan mengembangkan suatu program. Khususnya program aplikasi yang besar dan kompleks. Konsep ini diungkapkan pertama kali oleh "ro. Edsger Djikstra dari 6ni<ersitas Eindho<en pada tahun %07*&an. "ro. Edsger Djiktra mengungkapkan bahaya dari penggunaan instruksi lon#atan pada program dalam segala bentuk pemrogramman. =leh karena itu mulailah dikembangkan teknik pemrogramman terstruktur. B.1. /stilah Dasar (ebelum mempelajari pemrogramman terstruktur lebih lanjut ada beberapa istilah dasar yang perlu dipahami terlebih dahulu. Halaman 87 Algoritma Pemrograman a. Program "rogram adalah kata, ekspresi, pernyataan atau kombinasi yang disusun dan dirangkai menjadi satu kesatuan prosedur yang berupa urutan langkah untuk menyelesaikan masalah yang diimplementasikan dengan mengunakan bahasa pemrogramman tertentu sehingga dapat dieksekusi oleh komputer. b. Bahasa Pemrogramman .ahasa "emrogramman adalah prosedur B tata #ara penulisan program. "ada bahasa pemrogramman terdapat dua aktor penting, yaitu synta> dan semantik. (ynta> adalah aturan&aturan gramatikal yang mengatur tata #ara penulisan kata, ekspresi dan pernyataan, sedangkan semantik adalah aturan&aturan untuk menyatakan suatu arti. c. Pemrogramman "emrogramman adalah proses mengimplementasikan urutan langkah untuk menyelesaikan suatu masalah dengan menggunakan suatu bahasa pemrogramman. d. Pemrogramman Terstruktur "emrogramman Terstruktur merupakan proses mengimplementasikan urutan langkah untuk meyelesaikan masalah dalam bentuk program yang memiliki ran#ang bangun yang terstruktur dan tidak berbelit&belit sehingga mudah ditelusuri, dipahami dan dikembangkan oleh siapa saja. B.!. -iri Teknik Pemrogramman Terstruktur Teknik pemrogramman terstruktur memiliki #iri&#iri atau karakteristik sbb $ a. mengandung teknik peme#ahan masalah yang tepat dan benar b. memiliki algoritma peme#ahan masalah yang bersiat sederhana, standar dan eekti dalam meme#ahkan masalah #. teknik penulisan program memiliki struktur logika yang benar dan mudah dipahami d. program semata&mata terdiri dari tiga struktur dasar $ seYuen#e stru#ture, sele#tion stru#ture dan 3ooping (tru#ture. e. menghindari penggunaan instruksi peralihan tanpa syarat tertentu yang menjadikan program tidak terstruktur dengan baik. . Membutuhkan biaya testing yang rendah g. Memiliki dokumentasi yang baik h. Membutuhkan biaya pera-atan dan pengembangan yang rendah B.%. 'tandar Program $ang baik (tandar pemrogramman dibutuhkan untuk men#iptakan suatu program yang baik dan memiliki portabilitas yang tinggi sehingga memudahkan dalam meran#ang dan mera-at Halaman 88 Algoritma Pemrograman program serta meningkatkan eektiitas penggunaan peralatan komputer. 6ntuk menentukan standar program yang baik diperlukan beberapa standar sebagai dasar penilaian, seperti $ a) peme#ahan masalah b) penyusunan program #) pera-atan program d) standar prosedur (tandar&standar tersebut sering dilihat oleh programmer sebagai batasan kreatitas dan kemampuan untuk menuangkan berbagai ide ke dalam bentuk program. 2amun dengan adanya standar, bagaimanapun juga akan membuat program menjadi konsisten dan mudah untuk dikembangkan. B.%.1. 'tandar Teknik Pemecahan 3asalah (etelah masalahnya dipahami dengan baik, programmer tentu membutuhkan suatu teknik untuk meme#ahkan masalah tersebut, antara lain dikenal !eknik !op 0o+n dan !eknik Bottom Up. Teknik Top Down merupakan teknik peme#ahan masalah yang paling umum digunakan. "ada teknik ini suatu masalah yang rumit dibagi&bagi ke dalam beberapa kelompok maslah yang lebih ke#il. Dari kelompok masalah yang ke#il tersebut dianalisis. Apabila memungkinkan, maka masalah tersebut dipilah lagi ke dalam bagian yang lebih ke#il lagi sampai tidak dapat dipilah lagi. (etelah pemilahan tersebut dilakukan sampai bagian yang terke#il, baru kemudian disusun langkah&langkah untuk menyelesaikannya se#ara detail. Teknik Bottom #p merupakan peme#ahan masalah yang mulai ditinggalkan dikarenakan susah untuk membuat standarisasi proses dari prosedur&prosedur yang sudah terbentuk yang akan digabungkan. Dalam teknik ini, jika ada permasalahan yang rumit, maka peme#ahan masalahnya dilakukan dengan menggabungkan prosedur&prosedur yang ada menjadi satu kesatuan program guna menyelesaikan maslaah tersebut. "roses dari masalah hingga terbentuk suatu algoritma disebut tahap pemecahan masalah, sedangkan tahap dari algoritma hingga terbentuk suatu solusi disebut dengan tahap implementasi. B.%.!. 'tandar Pen$usunan Program Dalam menyusun program ada beberapa kriteria yang harus diperhatikan oleh programmer. a. Kebenaran Logika dan Penulisan "rogram yang ditulis harus mempunyai kebenaran logika peme#ahan masakah maupun penulisan. "rogram harus mempunyai ketepatan, ketelitian dan kebenaran dalam perhitungan sehingga hasilnya dapat diper#aya. b. ;aktu 3inimum #ntuk Penulisan Program Caktu minimum penulisan program adalah -aktu yang harus tersedia se#ara -ajar untuk menyusun program. Halaman 89 Algoritma Pemrograman c. Kecepatan 3aksimum 1ksekusi Program .eberapa aktor yang mempengaruhi ke#epatan eksekusi program anatara lain bahasa yang digunakan, algoritma yang disusun, teknik pemrogramman yang diterapkan dan perangkat keras yang digunakan. d. 1kspresi Penggunaan 3emor$ (eorang programmer perlu mempelajari teknik pembuatan program yang dapat meminimumkan penggunaan memori. "emborosan penggunaan memori akan memperlambat ke#epatan eksekusi program. 6ntuk dapat meminimumkan penggunaan memori, maka perlu diperhatikan $ - "enggunaan tipe data yang #o#ok untuk kebutuhan pemrogramman. - Menghindari looping untuk <ariable berindeks e. Kemudahan 3erawat dan mengembangkan Program "rogram hendaknya memiliki struktur pemrogramman yang baik, struktur data yang jelas dan dilengkapi dengan dokumentasi sehingga mudah untuk dipahami dan dikembangkan. (. #ser +riendl$ "rogram yang disusun harus memiliki asilitas&asilitas yang memberikan kemudahan& kemudahan kepada user untuk mengoperasikannya. g. Portabilit$ "rogram yang disusun dapat dipakai dalam sistem operasi dan perangkat keras apa saja, sehingga leksibel. h. Pemrogramman 3odular "rogram terdiri dari modul&modul yang diusahakan tidak saling bergantungan satu sama lain. 2amun demikian setelah dibangun dalam suatu sistem maka modul&modul tersebut menjadi satu kesatuan yang terintegrasi. B.%.%. 'tandar Perawatan Program Dalam menyusun suatu program, programmer harus mempertahankan aktor yang memudahkan dalam mera-at dan mengembangkan program. 5aktor tersebut antara lain $ a. Dokumentasi Dokumentasi merupakan #atatan dari setiap langkah pembuatan program dari a-al sapai akhir. Dokumentasi berguna untuk menelusuri kesalahan jika ada ataupun untuk mengembangkannya. b. Penulisan Program Agar memudahkan proses pera-atan program, maka sebaiknya penulisan program adalah sbb $ & Tulis satu instruksi dalam satu baris & "emisahan Modul "rogram dengan beberapa spasi & .edakan "enulisan /nstruksi program, <ariable atau huru ke#il Halaman 90 Algoritma Pemrograman & .edakan tabulasi untuk bagian yang termasuk dalam bagian looping & 8indari penggunaan kostanta yang mempunyai kemungkinan akan berubah & .atasi jumlah baris dalam satu mosul B.). 3enulis Program "rogrammer adalah orang yang bekerja menyusun program. 6ntuk menghasilkan program yang baik diperlukan programmer yang baik dan berkualitas pula. Adapun kriteria programmer yang baik adalah $ a) mampu menyusun peme#ahan masalah dengan baik b) menguasai bahasa pemrogramman dengan baik #) mampu menulis program dengan teknik pemrogramman yang baik d) mampu menyusun program dengan baik e) dapat bekerja sama dalam suatu tim ) dapat bekerja se#ara eisien dan tepat -aktu. Pustaka Munir ;inaldi. /r., 3idya 3eoni. /r., Algoritma dan "emrogramman .uku %, /normatika /T., .andung, %009 E. 8oro-itI and (. (ahni, 5undamentals o !omputers Algorithms, !omputer (#ien#e "ress, %091 Cirth 2iklaus, Algoritma + (truktur Data = "rogram, Andi, Pogyakarta, %009 "ranata Antony, Algoritma dan "emrogramman, :_: 3earning, Pogyakarta, '**' Halaman 91