PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
SIMULASI PENCARIAN JALUR TERPENDEK MENGGUNAKAN ALGORITMA WARSHALL Skripsi Diajukan untuk Memenuhi Salah Satu Syarat Memperoleh Gelar Sarjana Sains Program Studi Ilmu Komputer
Diajukan Oleh : Hana Lilis Setyaningsih NIM : 023124004
PROGRAM STUDI ILMU KOMPUTER JURUSAN MATEMATIKA FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS SANATA DHARMA YOGYAKARTA 2007 i
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
Skripsi ini kupersembahkan untuk : Jesus Christ…thanx God.. jika tanpa Kau, semua ini tidak bisa terselesaikan… Ibuku dan kakak2 ku yang mendukungku selama ini, terima kasih buat semua bantuannya. Tuhan Yesus Berkati… Ary, thanx ya dah menemani aq selama ini. Sukses selalu….
iv
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
ABSTRAK Mencari jalur terpendek dari suatu kota asal ke kota tujuan lainnya tidaklah mudah. Hal ini dikarenakan ada beberapa alternatif jalur yang menghubungkan antara satu kota dengan kota yang lainnya dimana setiap jalur tersebut berbeda jarak tempuhnya. Pencarian jalur terpendek antar kota dilakukan dengan perhitungan secara manual memiliki kelemahan-kelemahan, antara lain: perhitungan harus teliti dan waktu perhitungan yang lama. Simulasi pencarian jalur terpendek menggunakan Algoritma Warshall ini akan memudahkan user dalam mencari jalur terpendek. Selain itu, user juga dapat melihat hasil iterasinya. Salah satu cara mencari jalur terpendek adalah dengan menggunakan algoritma Warshall. Melalui pemodelan menggunakan graf, kota direpresentasikan sebagai titik (vertex) dan jalur antar kota direpresentasikan sebagai jalur (edges). Masukan berupa jarak antar kota, dipakai sebagai matriks awal untuk proses iterasi. Hasil akhir perhitungan atau iterasi berupa matriks akhir yang menyatakan jalur terpendek dari kota asal ke kota tujuan. Aplikasi ini dibuat menggunakan bahasa pemrograman Delphi 7.0 dan menggunakan kota-kota pada peta Pulau Jawa. Jarak antar kota satu dengan kota lainnya dimasukkan oleh user. Hasil akhir simulasi ini berupa tampilan jalur terpendek dari kota asal ke kota tujuan, jarak tempuh, matriks iterasi dan kota-kota yang dilewati.
v
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
ABSTRACT Searching for the shortest path from the origin to the destination city is not simple. It happens as there are some alternative paths which connect one city to another with differences in their distance. The search of inter city shortest path which is done manually brings some weaknesses. They are accurate calculation and long time. Shortest path search simulation with Warshall Algorithm facilitates the user in searching the shortest path. In addition, the user can also observe the iteration result. One way to search for the shortest path is by using Warshall Algorithm. By graph modeling, city is represented as dot (vertex) and inter city distance is represented as path (edges). Warshall Algorithm income is inter city distance. It is used as initial matrix for iteration process. The iteration calculation final result is final matrix which shows the shortest path from the initial city to the destination city. This application is made by using Delphi 7.0 programming terms and by using the cities in the map of Java Island. The distance of one city to another city is inserted by the user. The simulation final result is the shortest path feature of the origin city to the destination city, the distance, the iteration matrix and the surpassed cities.
vi
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
PERNYATAAN KEASLIAN KARYA
Saya menyatakan dengan sesungguhnya bahwa skripsi yang saya tulis ini tidak memuat karya atau bagian karya orang lain, kecuali yang telah disebutkan dalam kutipan dan daftar pustaka, sebagaimana layaknya karya ilmiah
Yogyakarta, 30 Juli 2007 Penulis
Hana Lilis Setyaningsih
vii
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
KATA PENGANTAR
Puji syukur ke hadirat Tuhan Yang Maha Esa yang telah melimpahkan rahmat dan kasih-Nya sehingga penulis bisa menyelesaikan skripsi ini. Skripsi ini ditulis untuk memenuhi salah satu syarat memperoleh gelar sarjana sains Fakultas Matematika dan Ilmu Pengetahuan Alam, Program Studi Ilmu Komputer Universitas Sanata Dharma. Dalam penulisan skripsi penulis menyadari banyak pihak yang telah memberikan sumbangan baik pikiran, waktu, tenaga, bimbingan dan dorongan pada penulis sehingga akhirnya skripsi ini dapat selesai. Oleh karena itu dengan segala kerendahan hati penulis menyampaikan ucapan terima kasih kepada : 1. Bapak Eko Hari Parmadi, S.Si, M.Kom selaku dosen pembimbing untuk kesabaran, bimbingan dan arahan selama penulis menyusun skripsi. 2. Ibu P.H. Prima Rosa, S.Si, M.Sc selaku Kaprodi Ilmu Komputer untuk kesabaran, bantuan dan dorongan yang diberikan baik selama kuliah maupun dalam menyelesaikan skipsi ini. 3. Ir. Ign. Aris Dwiatmoko selaku Dekan Fakultas MIPA dan seluruh Dosen Ilmu Komputer yang telah membimbing penulis selama belajar di Sanata Dharma. 4. Ibu dan kakak-kakakku yang tidak lelah memberi semangat dan doa yang tulus, serta kasih sayang yang kalian berikan selama ini. Berkat dukungan kalian akhirnya aku bisa menyelesaikan tugasku.
viii
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
5. Kekasihku, Ary yang tidak bosan-bosannya mendengarkan keluhanku dan yang selalu menyemangatiku di saat aku mulai lelah mengerjakannya. Terima kasih banyak untuk semuanya dan jangan lupa untuk tetap..... Semangat...!! 6. Bapak Agus, mb’ Ani.. dan semua yang tergabung dalam Expo.. yang telah membantu dalam menyelesaikan skripsiku ini. Terima kasih buat semuanya ya... 7. Sahabatku Fista, Nana, Trisa, Inoel(keep our friendship), Nyit2, Elva, Jupikz dan Pipit (makasih ya buat kalian yang tetap mengingatkan aku, walau kadang akunya yang males-malesan ... kalian memang teman-teman terhebatku... tetep kompak dan thanx buat semuanya prends..). 8. Buat teman-teman ikom’02 terima kasih untuk dukungannya . 9. Buat teman-teman di PPA Petra IO-743.. Terima kasih buat semua doa dan dukungannya selama ini. 10. Semua pihak yang tidak dapat disebutkan satu persatu, terima kasih membantu dalam menyelesaikan tugas akhir ini. Penulis menyadari masih banyak kekurangan dalam penulisan skripsi ini, oleh karena itu dengan kerendahan hati penulis mengharapkan kritik dan saran guna penyempurnaan skripsi ini. Akhirnya penulis berharap semoga skripsi ini berguna bagi semua pihak.
Penulis
ix
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
DAFTAR ISI
HALAMAN JUDUL........................................................................................
i
HALAMAN PERSETUJUAN ........................................................................
ii
HALAMAN PENGESAHAN..........................................................................
iii
HALAMAN PERSEMBAHAN.......................................................................
iv
ABSTRAK .......................................................................................................
v
ABSTRACT .....................................................................................................
vi
HALAMAN KEASLIAN KARYA ................................................................. vii KATA PENGANTAR...................................................................................... viii DAFTAR ISI ....................................................................................................
x
DAFTAR TABEL ............................................................................................
xii
DAFTAR GAMBAR ....................................................................................... xiii BAB 1 PENDAHULUAN 1.1. Latar Belakang ....................................................................................
1
1.2. Batasan Masalah..................................................................................
2
1.3. Rumusan Masalah ..............................................................................
2
1.4. Tujuan Penelitian ................................................................................
2
1.5. Manfaat Penulisan ..............................................................................
3
1.6. Metodologi Penelitian .........................................................................
3
1.7. Sistematika Penulisan..........................................................................
4
BAB 2 LANDASAN TEORI 2.1. Graf......................................................................................................
6
2.2. Subgraf ................................................................................................
8
2.3. Graf Tak Berarah (Undirected Graph)................................................ 10 2.4. Graf Berarah (Directed Graph)........................................................... 11 2.5. Graf Berlabel ....................................................................................... 13 2.6. Lintasan Terpendek (Shorthest Path).................................................. 14 2.7. Algoritma Warshall ............................................................................. 14 BAB 3 ANALISIS DAN PERANCANGAN SISTEM 3.1. Analisa Sistem .................................................................................... 21
x
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
3.2. Pemodelan Sistem ............................................................................... 22 3.3. Perancangan Antar Muka (User Interface) ......................................... 23 3.3.1. Perancangan Tampilan Pembuka ............................................... 23 3.3.2 Perancangan Antar Muka Menú Utama Aplikasi ...................... 23 3.3.3 Perancangan Form Input Data.................................................... 24 3.3.3.1. Perancangan Form Input Data Kota .................................. 24 3.3.3.2. Perancangan Form Input Data Jalur .................................. 26 3.3.4 Perancangan Form Komputasi Warshall.................................... 27 3.3.5 Perancangan Form Matriks ........................................................ 28 3.3.6 Perancangan Form About........................................................... 29 3.3.7 Perancangan Form Bantuan ....................................................... 29 BAB 4 IMPLEMENTASI DAN PEMBAHASAN 4.1. Tahapan Desain dan Pemrograman Jarak Terdekat .......................... 30 4.2. Hasil Implementasi Program ... .......................................................... 32 4.2.1. Implementasi Tampilan Pembuka ... .......................................... 32 4.2.2. Implementasi Tampilan Form Utama ... .................................... 32 4.2.3. Implementasi Tampilan Form Input Kota ... .............................. 33 4.2.4. Implementasi Tampilan Form Input Jalur ... .............................. 34 4.2.5. Komputasi Warshall... ................................................................ 35 4.2.6. Implementasi Tampilan Matriks Komputasi Warshall... ........... 35 4.2.7. Implementasi Tampilan Form Bantuan...................................... 36 4.2.8. Implementasi Tampilan Form About... ...................................... 37 4.2.9. Implementasi Tampilan Form Pesan.......................................... 37 4.3. Visualisasi Matriks Perhitungan Warshall ... ..................................... 38 4.4. Uji Coba Program .............................................................................. 40 BAB 5 KESIMPULAN DAN SARAN 5.1. Kesimpulan....................................................................................... 43 5.2. Saran ................................................................................................ 43 DAFTAR PUSTAKA ...................................................................................... 44 LAMPIRAN ..................................................................................................... 45
xi
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
DAFTAR TABEL
Tabel 2.1 Tabel garis dan titik ujung………………... ................................
xii
7
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
BAB I PENDAHULUAN
1.1 Latar Belakang Perkembangan teknologi komputer yang berkembang begitu pesat saat ini, menuntut setiap orang untuk menggunakan komputer dalam setiap segi kehidupan manusia. Dalam hal ini dapat disimpulkan bahwa komputer memegang peranan yang sangat penting, efisiensi dan efektifitaslah yang menjadi tolak ukur yang mengakibatkan setiap orang menuntut kecepatan dan kepraktisan dari setiap kegiatannya dalam kehidupan sehari-hari. Mencari jalur terpendek dari suatu kota asal ke kota tujuan lainnya tidaklah mudah. Hal ini dikarenakan ada beberapa alternatif jalur yang menghubungkan antara satu kota dengan kota yang lainnya dimana setiap jalur tersebut berbeda jarak tempuhnya. Selain itu biasanya terkadang orang juga tidak memperhitungkan jarak tempuh yang terdekat antar wilayah karena membutuhkan perhitungan yang teliti dan akurat. Selama ini untuk pencarian jalur terpendek antar kota dilakukan perhitungan secara manual. Banyak kelemahan yang didapatkan dari perhitungan secara manual tersebut, antara lain: memerlukan waktu yang lebih lama dan memerlukan perhitungan yang lebih teliti. Dengan melihat semua permasalahan yang ada, maka penulis akan mencoba mengembangkan sebuah simulasi komputer untuk mempermudah mencari jalur terpendek antar kota di Pulau Jawa menggunakan algoritma Warshall. Simulasi ini
1
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 2
dibuat dengan tujuan sebagai alat bantu belajar algoritma Warshall dalam pencarian jalur terpendek sehingga mampu memahami algoritma Warshall dengan mudah.
1.2 Rumusan Masalah Berdasarkan latar belakang yang telah dijelaskan sebelumnya maka dapat diambil suatu rumusan masalah yaitu bagaimana mengembangkan sistem komputer untuk membantu user mencari jalur terpendek dari kota asal ke kota tujuan di Pulau Jawa dengan menggunakan algoritma Warshall ?
1.3 Batasan Masalah Adapun masalah yang akan diselesaikan dibatasi oleh hal-hal sebagai berikut: Jumlah kota yang dimasukkan dalam program maksimal 50 kota. Kota-kota yang dipakai dalam penelitian ini adalah kota-kota di Pulau Jawa. Jarak antara kota asal dan kota tujuan diinputkan oleh user. Bahasa pemrograman yang digunakan adalah Delphi 7.0.
1.4 Tujuan Penelitian Tujuan penulisan tugas akhir ini yaitu membuat simulasi pencarian jalur terpendek dengan algoritma Warshall yang dapat digunakan sebagai alat bantu belajar algoritma Warshall.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 3
1.5 Manfaat Penelitian Dengan diselesaikannya tugas akhir ini diharapkan mampu membantu setiap orang mempelajari algoritma Warshall dalam pencarian jalur terpendek dari kota asal ke kota tujuan di Pulau Jawa.
1.6 Metodologi Penelitian Metode yang akan digunakan dalam pembuatan sistem ini meliputi tahaptahap sebagai berikut : 1. Analisis Pada tahap ini akan dikumpulkan semua kebutuhan untuk membangun sistem secara keseluruhan. Dimana juga dilakukan pengambilan peta Pulau Jawa yang nantinya akan digunakan untuk pencarian jarak terdekat antar kota. 2. Pemodelan Pada tahap ini peta Pulau Jawa yang diperoleh akan dibentuk ke model graf dan kemudian mengimplementasikan algoritma Warshall pada graf tersebut. Ada beberapa algoritma yang dapat digunakan untuk mencari jalur terpendek, namun dalam tugas akhir ini hanya dipilih satu algoritma yaitu algoritma Warshall dikarenakan algoritma tersebut merupakan algoritma yang sederhana dan mudah implementasinya. 3. Penulisan Program (Coding) Pada tahap ini graf yang terbentuk terlebih dahulu direpresentasikan ke bentuk matriks. Graf yang telah direpresentasikan oleh matriks, akan diset
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 4
ke bentuk variabel yang sesuai dengan bahasa pemrograman komputer yang digunakan. Struktur data yang digunakan oleh algoritma Warshall juga
direpresentasikan
diimplementasikan
ke
ke
matriks.
komputasi
Bentuk
dengan
matriks
dapat
menggunakan
bahasa
pemrograman komputer. 4. Pengujian (Testing) Dalam tahap ini nanti akan di uji coba terhadap program aplikasi yang sudah dibuat. Proses pengujian akan difokuskan pada input yang telah didefinisikan dan akan menghasilkan output yang benar sesuai kebutuhan sistem. 5. Pemeliharaan Tahap ini akan menangani masalah-masalah untuk kelanjutan dari program tersebut.
1.7 Sistematika Penulisan Sistematika penulisan tugas akhir ini adalah sebagai berikut : Bab I.
Pendahuluan Bab ini membahas tentang latar belakang penulisan, rumusan masalah, batasan masalah, tujuan, manfaat, metodologi dan sistematika penulisan.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 5
Bab II.
Landasan Teori Bab ini membahas tentang dasar teori yang mendukung pembuatan seluruh penulisan tugas akhir ini meliputi teori graf dan algoritma Warshall.
Bab III.
Analisis dan Perancangan Sistem Bab ini membahas tentang perancangan sistem yang akan mengimplementasikan algoritma Warshall dalam pencarian jalur terpendek antar kota di Pulau Jawa. Selain itu juga membahas perancangan tampilan untuk user (user interface).
Bab IV.
Implementasi dan Pembahasan Bab ini berisi implementasi tiap tampilan atau antarmuka dari rancangan yang dibuat pada bab sebelumnya dan menganalisa program pada masing-masing tampilan atau antarmuka.
Bab V.
Penutup Bab ini berisi kesimpulan dan saran berdasarkan hasil implementasi dan analisa yang telah dilakukan dalam tugas akhir ini.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
BAB II LANDASAN TEORI
Teori graf merupakan pokok bahasan yang sudah tua usianya namun memiliki
banyak
terapan
sampai
saat
ini.
Graf
digunakan
untuk
merepresentasikan objek-objek diskrit dan hubungan antar objek-objek tersebut. Representasi visual dari graf adalah dengan menyatakan objek dinyatakan sebagai noktah, bulatan, atau titik, sedangkan hubungan antara objek dinyatakan dengan garis.
2.1 Graf Suatu graf G(V,E) terdiri dari dua himpunan yang berhingga, yaitu himpunan titik-titik tidak kosong (V) dan himpunan garis-garis (E). (Siang,2002). Unsur-unsur di dalam V dinamakan verteks (vertex), sedangkan pasangan terurut di dalam E dinamakan rusuk/garis (edges).
Gambar 2.1 Graf
6
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 7
Diketahui V(G) = {v1, v2, v3, v4, v5, v6} dan E(G) = {e1, e2, e3, e4, e5, e6, e7}. Setiap garis menghubungkan satu atau dua titik dan titik-titik tersebut dinamakan titik ujung. Dapat dilihat pada tabel 2.1, titik-titik ujung masing-masing garis adalah sebagai berikut : Tabel 2.1 Tabel garis dan titik ujung
Garis e1 e2 e3 e4 e5 e6 e7
Titik Ujung {v1, v2} {v1, v2} {v1, v3} {v2, v3} {v4, v5} {v5} {v3}
Garis yang hanya berhubungan dengan satu titik ujung disebut Loop. Dari tabel 2.1, e6 dan e7 merupakan loop. Dua garis berbeda menghubungkan titik yang sama disebut Garis Pararel, maka e1 dan e2 merupakan garis pararel yang keduanya menghubungkan titik v1 dengan v2. Dua titik dikatakan berhubungan (adjacent) jika ada garis yang menghubungkan keduanya. Titik yang tidak mempunyai garis yang berhubungan dengannya disebut Titik Terasing (Isolating Point), pada tabel 2.1, v6 merupakan titik terasing. (Siang,2002). Salah satu contoh penerapan graf yaitu turnamen round-robin. Turnamen round-robin yaitu turnamen dimana setiap tim yang bertanding dengan tim lainnya hanya satu kali. Turnamen semacam itu dimodelkan dengan graf berarah, yang dalam hal ini titik menyatakan setiap tim yang bertanding, dan garis
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 8
menyatakan pertandingan. Garis (a,b) berarti tim a berhasil memukul tim b. Gambar 2.2 menunjukkan turnamen round-robin untuk 6 buah tim. Tim 1 tidak terkalahkan, sedangkan tim 3 tidak pernah menang. (Munir,2001)
Gambar 2.2 Turnamen Round-Robin
2.2 Subgraf Konsep subgraf
sama dengan konsep himpunan bagian. Dalam teori
himpunan, himpunan A dikatakan merupakan himpunan bagian B bila hanya bila setiap anggota A merupakan anggota B. Karena graf merupakan himpunan yang terdiri dari titik dan garis maka H dikatakan subgraf G jika semua titik dan garis H juga merupakan titik dan garis dalam G. (Siang, 2002) Misalkan G(V,E) adalah suatu graf. Graf G’(V’,E’) dikatakan subgraf G bila dan hanya bila : a. V’
V
b. E’
E
c. Setiap garis dalam graf G’ mempunyai titik ujung yang sama dengan garis tersebut dalam graf G.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 9
Dari definisi di atas, ada beberapa hal yang dapat diturunkan : 1. Sebuah titik dalam G’ merupakan subgraf G. 2. Sebuah garis dalam G’ bersama-sama dengan titik-titik ujungnya merupakan subgraf G. 3. Setiap graf merupakan subgraf dari dirinya sendiri. 4. Dalam subgraf berlaku sifat transitif : Jika H adalah subgraf G dan G adalah subgraf K, maka H adalah subgraf K.
Gambar 2.3 Graf H merupakan subgraf dar graf G
Gambar 2.4 Graf G merupakan subgraf dari graf K
Jika diketahui suatu graf dengan V(H) = {v1,v4} dan V(G) = {v1, v2, v3, v4} sehingga V(H) E(H)
E(G).
V(G). E(H) = {e3} dan E(G) = {e1, e2, e3}
sehingga
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 10
Gambar 2.5 Subgraf
Garis e3 menghubungkan titik v1 dengan v4. Hal yang sama juga berlaku pada G. Maka H merupakan subgraf G. Perhatikan bahwa posisi titik tidaklah mempengaruhi.
2.3 Graf Tak Berarah (Undirected Graph) Graf yang semua garisnya tidak berarah disebut graf tak berarah (Undirected Graph). Pada graf tak berarah, urutan pasangan titik yang dihubungkan oleh garis tidak diperhatikan. Jadi (v j , v k ) = (v k , v j )
adalah garis yang sama. (Munir,
2001). Ada beberapa macam graf, yaitu : 1. Graf sederhana (Simple Graph) adalah graf yang tidak mempunyai loop ataupun garis pararel.
Gambar 2.6 Simple Graph
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 11
2. Graf Lengkap (Complete Graph) dengan n titik (simbol Kn) adalah graf sederhana dengan n titik, dimana setiap 2 titik berbeda dihubungkan dengan suatu garis.
Gambar 2.7 Complete Graph
2.4 Graf Berarah (Directed Graph) Graf berarah atau sering disebut dengan Digraph yang dimaksud disini yaitu tiap garisnya mempunyai arah. Suatu graf berarah G terdiri dari: himpunan titiktitik V : {v1,v2,…..}, himpunan garis-garis E : {e1,e2,….}, dan suatu fungsi Ψ yang mengawankan setiap garis dalam E ke suatu pasangan berurutan titik (vi,vj). Jika ek = (vi,vj) adalah suatu garis dalam G, maka vi disebut titik awal ek dan vj disebut titik akhir ek. Arah garis adalah dari vi ke vj. Jumlah garis yang keluar dari titik vi disebut derajat keluar (out degree) titik vi (simbol d+(vi)), sedangkan jumlah garis yang menuju ke titik vi disebut derajat masuk (in degree) titik vi, yang disimbolkan dengan d-(vi). Titik terasing adalah titik dalam G dimana derajat keluar dan derajat masuknya adalah 0. Titik pendan adalah titik dalam G dimana jumlah derajat masuk dan derajat keluarnya = 1. Dua garis berarah dikatakan pararel jika keduanya mempunyai titik awal dan titik akhir sama. (Siang,2002)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 12
Gambar 2.8 Directed Graph
Dari gambar 2.6, diketahui V(G) = {v1, v2, v3, v4, v5, v6} dan E(G) = {e1, e2, e3, e4, e5, e6, e7, e8, e9 }. Fungsi Ψ mengawankan garis-garis dengan pasangan titik-titik sebagai berikut : o e1 dengan (v1, v2)
o e6 dengan (v3, v4)
o e2 dengan (v4, v1)
o e7 dengan (v3, v5)
o e3 dengan (v1, v4)
o e8 dengan (v5, v4)
o e4 dengan (v1, v3)
o e9 dengan (v5, v4)
o e5 dengan (v3, v3)
Derajat keluar (d+(vi)) dan derajat masuk (d-(vi)) tiap-tiap titik yaitu : d+(v1) = 3 ;
d-(v1) = 1
d+(v2) = 0 ;
d-(v2) = 1
d+(v3) = 3 ;
d-(v3) = 2
d+(v4) = 1 ;
d-(v4) = 4
d+(v5) = 2 ;
d-(v5) = 1
d+(v6) = 0 ;
d-(v6) = 0
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
Disini menunjukkan bahwa setiap graf berarah
d (vi ) . Titik
d (vi ) = i
i
pendan adalah v2.
2.5
Graf Berlabel Hubungan antar titik-titik dalam graf kadang-kadang perlu diperjelas.
Hubungan tidak cukup hanya menunjukkan titik-titik mana yang berhubungan langsung, tetapi juga seberapa kuatkah hubungan itu.
Gambar 2.9 Jaringan jalan raya di Propinsi Jawa Tengah
Sebagai contoh, suatu graf menyatakan peta propinsi Jawa Tengah. Titiktitik graf menyatakan kota seperti Magelang, Klaten, Solo yang ada di propinsi tersebut. Garis-garis dalam graf menyatakan jalan-jalan yang menghubungkan kota-kota tersebut, misalnya jalan yang menghubungkan Semarang-Demak, Semarang-Salatiga. Informasi tentang suatu peta daerah sering kali perlu diperjelas dengan mencantumkan jarak (yang dinyatakan dengan angka pada garisnya) antara dua kota yang berhubungan. Informasi tentang jarak ini dibutuhkan karena dalam graf, letak titik dan panjang garisnya tidak menyatakan
13
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 14
jarak dua kota yang sebenarnya seperti halnya dengan peta yang sebenarnya. Jadi setiap garis dalam graf berhubungan dengan suatu label yang menyatakan bobot garis tersebut, misalnya bobot yang menghubungkan Sukoharjo-Wonogiri yaitu 5. Label suatu garis yang diberikan pada graf berarah maupun tidak berarah. Jika diberikan pada graf tak berarah, maka graf tersebut disebut graf berlabel. Jika label tersebut diberikan pada graf berarah, maka graf-nya disebut graf berarah berlabel.
2.6
Lintasan Terpendek (Shorthest Path) Permasalahan mencari lintasan terpendek di dalam graf merupakan
permasalahan optimasi yang klasik. Graf yang diacu adalah graf berbobot (weighted graf), yaitu graf yang setiap sisinya diberikan suatu nilai atau bobot. Bobot pada sisi graf dapat menyatakan jarak antar kota, waktu pengiriman pesan, ongkos pembangunan dan sebagainya. (Munir, 2001) Apabila masalahnya adalah mencari jalur tercepat (jalur terpendek belum tentu tercepat), lintasan terpendek tetap dapat digunakan dengan cara mengganti bobot garis sehingga menyatakan waktu perjalanan antar kota-kota yang dinyatakan sebagai titik-titik di ujung garis.
2.7
Algoritma Warshall Algoritma yang ditemukan oleh Warshall untuk mencari lintasan terpendek
merupakan algoritma yang sederhana dan mudah implementasinya. Masukan
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 15
algoritma Warshall adalah matriks hubung graf berlabel, dan keluarannya adalah lintasan terpendek dari semua titik ke semua titik. (Siang,2002) Dalam usaha untuk mencari lintasan terpendek, algoritma Warshall memulai iterasi dari titik awalnya kemudian memperpanjang lintasan dengan mengevaluasi titik demi titik hingga mencapai titik tujuan dengan jumlah bobot yang seminimum mungkin. Misalkan W0 adalah matriks hubung graf berlabel mula-mula. W* adalah matriks hubung minimal dengan wij* = lintasan terpendek dari titik vi ke vj. Algoritma Warshall untuk mencari lintasan terpendek adalah sebagai berikut : 1. W = W0 2. Untuk k = 1 hingga n, lakukan : Untuk i = 1 hingga n, lakukan : Untuk
j = 1 hingga n, lakukan :
Jika W[i,j] > W[i,k] + W[k,j] maka tukar W[i,j] dengan W[i,k] + W[k,j] 3. W* = W
Dalam iterasinya untuk mencari lintasan terpendek, algoritma Warshall membentuk n matriks, sesuai dengan iterasi–k. Ini menyebabkan waktu prosesnya lambat, terutama untuk n yang besar. Meskipun waktu prosesnya bukanlah yang tercepat, algoritma Warshall sering dipergunakan terpendek karena kesederhanaan algoritmanya.
untuk menghitung lintasan
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 16
Sebagai contoh, mencari lintasan terpendek dari titik vi ke titik vj (i,j = 1, 2, …., 6) dengan 9 vertek dan 6 edge pada gambar berikut.
Gambar 2.10 Graf Berarah Berlabel
Dari gambar graf berlabel di atas maka diperoleh matriks hubung grafnya yaitu
V1
V2
V3
V4
V5
V6
7
∞
2
∞
∞ ∞
4
1
4
∞ ∞
V5
2
∞
2
V6
∞
1
∞
∞ ∞ ∞ ∞ ∞
∞ ∞
V4
∞ ∞ ∞ ∞
V1
W = W0 =
V2 V3
∞ ∞ ∞ ∞
3
∞ ∞ ∞
Pada matriks keterhubungan graf tersebut, bernilai ∞ jika tidak ada keterhubungan antara titik titik secara langsung dan akan ada nilainya jika ada hubungan langsung antar titik tersebut.
Iterasi untuk k = 1 Untuk setiap sel matriks W dicek apakah W[i,j] > W[i,1] + W[1,j]. Jika ya, maka W[i,j] diganti dengan W[i,1] + W[1,j]. Sebagai contoh :
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 17
o W[1,2] = 7, sedangkan W[1,1] + W[1,2] = ∞ + 7 = ∞. Karena W[1,2] < W[1,1] + W[1,2] maka harga W[1,2] tidak diubah. o W[5,4] = ∞, sedangkan W[5,1] + W[1,4] = 2 + 2 = 4. Karena W[5,4] > W[5,1] + W[1,4] maka harga W[5,4] diubah menjadi 4. Ini berarti bahwa ada lintasan dari v5 ke v4 melalui v1 yang mempunyai bobot lebih kecil (yaitu lintasan v5 v1 v4 dengan jumlah bobot 4) dibandingkan dengan lintasan dari v5 ke v4 secara langsung (bobot = ∞ karena tidak ada lintasan dari v5 ke v4 secara langsung). Dengan cara yang sama, harga W[i,j] dihitung untuk setiap i dan j. Didapatkan matriks :
V1
V2
V3
V4
V5
V6
7
∞
2
∞
0 ∞
4
1
4
0 ∞
∞ ∞ 0
∞ ∞
V4
0 ∞ ∞ ∞
V5
2
9
2
4
V6
∞
1
∞
∞
V1 W1 =
V2 V3
∞ ∞ 0 ∞
3
∞ ∞ 0
Iterasi untuk k = 2 Iterasi untuk k = 2 dilakukan dengan cara yang sama seperti iterasi untuk k=1, hanya titik perantaranya adalah titik v2. Sebagai contoh : W[6,5] = ∞, sedangkan W[6,2] + W[2,5] = 1 + 1 = 2.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 18
V1
V2
V3
V4
V5
V6
7
11
2
8
0 ∞
4
1
0
∞
3
4
8
∞ ∞ 0
∞ ∞
V4
0 ∞ ∞ ∞
5
V5
2
9
2
4
V6
∞
1
∞
∞
∞ ∞ 0
V1 V2
W2 =
V3
0 ∞
Karena W[6,5] > W[6,2] + W[2,5] maka harga W[6,5] diganti dengan 1. Ini berarti bahwa lintasan dari v6 ke v5 melalui v2 (v6 v2 v5) lebih pendek dibandingkan lintasan dari v6 ke v5 secara langsung melalui v1. Proses yang sama dilakukan untuk semua harga i dan j. Didapatkan :
W3 =
V1
V2
V3
V4
V5
V6
V1
0
6
9
2
7
12
V2
3
0
3
5
1
6
V3
∞
∞
0
∞
∞
3
V4
7
4
7
0
5
10
V5
2
8
2
4
0
5
V6
4
1
4
6
2
0
Dengan cara yang sama, untuk k = 3, 4, 5, 6, diperoleh matriks :
V1
V2
V3
V4
V5
V6
7
11
2
8
14
0 ∞
4
7
0
∞
3
4
8
∞ ∞ 0
1
V4
0 ∞ ∞ ∞
5
11
V5
2
9
2
4
0
5
V6
∞
1
5
∞
2
0
V1
W4 =
V2 V3
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 19
W5 =
W* = W6 =
V1
V2
V3
V4
V5
V6
V1
0
6
10
2
7
13
V2 V3
∞
0
4
∞
1
7
∞
∞
0
∞
∞
3
V4
∞
4
8
0
5
11
V5
2
8
2
4
0
5
V6
∞
1
5
∞
2
0
V1
V2
V3
V4
V5
V6
V1 V2
0
6
9
2
7
12
3
0
3
5
1
6
V3
7
4
0
9
5
3
V4
7
4
7
0
5
10
V5
2 4
6 1
2 4
4 6
0
5
2
0
V6
Jika pada W* ada Wij dengan harga ∞ berarti tidak ada lintasan dari vi ke vj baik langsung maupun tidak langsung. Dari hasil matriks terakhir (W*), maka akan diperoleh lintasannya yaitu v1 – v4 – v2 –v5 – v3 – v6 . Karena titik awalnya v1 maka pada baris v1 dicari nilai paling minimum yaitu 2 kemudian ditarik ke atas maka diperoleh v4. Maka langkah selanjutnya dilihat baris v4 dan dicari nilai minimumnya yaitu 4 (v2). Proses tersebut dilakukan terus hingga sampai ke titik terakhir. Untuk jarak lintasan dapat dilihat dengan menarik v1 secara vertikal dan v6 secara horisontal, maka jarak yang ditempuh untuk v1 ke v6 yaitu 12. Lintasan yang diperoleh dapat dilihat pada gambar dibawah ini.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 20
Untuk lebih memperjelas algoritma Warshall, kita akan mencari lintasan terpendek dari v2 ke v6. Pada matriks terakhir, dilihat baris v2 yang kemudian dicari nilai minimumnya yaitu 1 (v5). Dari baris v5, nilai minimumya 2 (v1dan v3). Proses tersebut dilakukan terus hingga sampai ke titik terakhir. Untuk jarak lintasan dapat dilihat dengan menarik v2 secara vertikal dan v6 secara horisontal, maka jarak yang ditempuh untuk v1 ke v6 yaitu 6 dengan lintasan v2 – v5 – v3 – v6. Lintasan yang diperoleh dapat dilihat pada gambar dibawah ini.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
BAB III ANALISIS DAN PERANCANGAN SISTEM 3.1
Analisa Sistem Sistem yang akan dikembangkan oleh penulis adalah pencarian jalur terpendek
antar kota yang ada di Pulau Jawa dan Algoritma Warshall akan digunakan dalam implementasinya. Disini sistem yang dikembangkan akan disesuaikan dengan algoritma yang akan digunakan untuk menyelesaikan permasalahan yang muncul. Peta yang digunakan dalam aplikasi, diambil dari peta Pulau Jawa yang menggunakan skala. Peta dikonversi ke format komputer sehingga bisa digunakan pada pemrograman komputer. Dalam hal ini, disesuaikan juga ukuran satuan peta asli dan peta hasil konversi ke format komputer. Untuk dapat menjalankan program aplikasi ini, ada hal yang perlu diperhatikan mengenai kebutuhan spesifikasi hardware dan software. Spesifikasinya adalah sebagai berikut : o Komputer dengan procesor minimal Pentium III 600 Mhz atau setaranya. o Sistem Operasi Windows 2000 atau Windows XP. o Memori RAM minimal 256 MB. o Monitor yang mempunyai resolusi 1024 x 768 dgn 16 bit warna. o CD-ROM. o Delphi 7.
21
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 22
3.2
Pemodelan Sistem Secara umum sistem dibuat untuk mensimulasikan data jarak antar kota. Peta
yang digunakan disini dalah peta Pulau Jawa. Peta ini merepresentasikan sebuah bentuk graf yang dapat disajikan berikut ini: Kota merepresentasikan vertex dari graf yang ditunjukkan dengan warna merah. Jalur antar kota merepresentasikan edges dari graf yang ditunjukkan dengan warna kuning. Jalur antar kota tersebut hanya jalur satu arah.. Contoh visualisasinya tampak pada gambar :
Gambar 3.1 Visualisasi representasi graf pada peta
Setiap input kota(vertex) mempunyai nama kota yang kemudian akan disimpan dalam database. Sedangkan input jalur mempunyai nama jalur, kota asal, kota tujuan dan jarak yang disimpan dalam database Dari data jalur antar kota dapat dihitung jarak terpendek berdasarkan kota asal dan kota tujuan yang akan dimasukkan oleh user dengan melalui perhitungan matriks. Matriks tersebut akan dihitung dengan
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 23
menggunakan algoritma Warshall sehingga dapat ditemukan jalur terpendek dengan jarak terpendek. Program simulasi ini hanya mensimulasikan urutan-urutan kota yang akan dilewati, tidak menggambarkan pergerakan perjalanan secara nyata.
3.3 3.3.1
Perancangan Antar Muka (user interface) Perancangan Tampilan Pembuka Rancangan form 3.4 merupakan rancangan form yang akan tampil pertama
kali ketika program dijalankan.
Gambar 3.2. Rancangan Splash
3.3.2
Rancangan antar muka menu utama aplikasi Rancangan form pada gambar 3.3 merupakan rancangan form utama yang
menampilkan pilihan menu dari program aplikasi simulasi pencarian jalur terpendek.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 24
Gambar 3.3. Rancangan Form Menu Utama
Rancangan menu pada form utama adalah sebagai berikut : 1. File, berupa : a. Keluar : berfungsi untuk keluar dari program. 2. Bantuan : berfungsi untuk memberikan informasi bantuan kepada user berupa kebutuhan perangkat keras dan perangkat lunak, instalasi basis data, penggunaan program aplikasi dan sekilas tentang algoritma Warshall. 3. About, berfungsi untuk memberikan informasi pembuat program.
3.3.3 Perancangan Form Input Data 3.3.3.1 Perancangan Form Input Data Kota Perancangan input data kota digunakan untuk memasukkan data kota. Rancangan form pada gambar 3.4 digunakan untuk memasukkan data kota secara
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 25
langsung dengan mengedit peta dan memasukkan data kota selengkapnya pada panel yang sudah disediakan.
Gambar 3.4. Rancangan Form Input Data Kota
Dalam rancangan form tersebut, terdapat fasilitas menu : a. ”Simpan” : digunakan untuk menyimpan data kota setelah user mengedit data kota. b. ”Batal” : digunakan untuk membatalkan data yang telah diedit c.
: digunakan untuk melihat data kota paling awal.
d.
: digunakan untuk melihat data kota sebelumnya.
e.
: digunakan untuk melihat data kota selanjutnya.
f.
: digunakan untuk melihat data kota yang terakhir.
g.
: digunakan untuk menghapus data kota.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 26
h.
: digunakan untuk mengedit data kota.
i.
: digunakan untuk menyimpan data kota kota yang sudah di edit.
j.
: digunakan untuk membatalkan data kota yang telah diedit .
k.
: digunakan untuk merefresh tampilan dalam grid maupun peta.
3.3.3.2 Perancangan Form Input Data Jalur Perancangan input data jalur digunakan untuk memasukkan data jalur. Rancangan form pada gambar 3.5 digunakan untuk memasukkan data jalur secara langsung dengan mengedit peta dan memasukkan data kota selengkapnya pada panel yang sudah disediakan. Komputasi Warshall File
Bantuan
About DATA KOTA DATA JALUR KOMPUTASI FLOYD-WARSHALL
JUDUL
INPUT DATA KOTA
INPUT DATA JALUR
TUTUP
X:
Y:
PROPERTI JALUR
PETA JAWA ASAL TUJUAN JARAK SIMPAN
Km BATAL
Gambar 3.5. Rancangan Form Input Data Jalur
Dalam rancangan form tersebut, terdapat fasilitas menu : a. ”Simpan” : digunakan untuk menyimpan data jalur setelah user mengedit data jalur.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 27
b. ”Batal” : digunakan untuk membatalkan data yang telah diedit c.
: digunakan untuk melihat data jalur paling awal.
d.
: digunakan untuk melihat data jalur sebelumnya.
e.
: digunakan untuk melihat data jalur selanjutnya.
f.
: digunakan untuk melihat data jalur yang terakhir.
g.
: digunakan untuk menghapus data jalur.
h.
: digunakan untuk mengedit data jalur.
i.
: digunakan untuk menyimpan data jalur yang sudah di edit.
j.
: digunakan untuk membatalkan data jalur yang telah diedit .
k.
: digunakan untuk merefresh tampilan dalam grid maupun peta.
3.3.4 Perancangan Form Komputasi Warshall
Gambar 3.6. Rancangan Form Komputasi Warshall
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 28
Dalam rancangan form tersebut, terdapat fasilitas menu : a. ”Proses” : digunakan untuk mencari jalur terpendek antar kota berdasarkan kota asal, kota tujuan yang dimasukkan oleh user. b. ”Matriks” : dgunakan untuk melihat proses perhitungan matriks dengan algoritma Warshall.
3.3.5 Perancangan Form Matriks Rancangan form pada gambar 3.7 digunakan untuk menampilkan proses perhitungan matriks menggunakan algoritma Warshall.
Gambar 3.7. Rancangan Form Matriks
Dalam rancangan form tersebut, terdapat fasilitas menu : a. ”Awal”: digunakan untuk melihat matriks awal. b. ”Sebelum”: digunakan untuk melihat matriks sebelumnya. c. ”Berikut” : digunakan untuk melihat matriks selanjutnya.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 29
d. ”Akhir”: digunakan untuk melihat matriks yang terakhir. e. ”Tutup”: digunakan untuk keluar dari form ini.
3.3.6 Perancangan Form About Rancangan form pada gambar 3.8 digunakan untuk memberikan informasi kepada user tentang pembuat program.
Gambar 3.8. Rancangan Form About
3.3.7 Perancangan Form Bantuan Rancangan form pada gambar 3.9 digunakan untuk memberikan informasi bantuan kepada user tentang penggunaan program.
Gambar 3.13. Rancangan Form Bantuan
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
BAB IV IMPLEMENTASI DAN PEMBAHASAN
4.1
Tahapan Desain dan Pemrograman Aplikasi Jarak Terdekat Aplikasi ini untuk user merupakan sarana untuk mengakses sistem informasi
rute perjalanan antar kota di Pulau Jawa. User pada sistem akan meminta layanan jarak terdekat untuk dua kota di Pulau Jawa. Dengan demikian diperlukan sarana yang cukup lengkap serta validasi yang baik di sisi user tersebut. Aplikasi di sisi user dibangun dengan pemrograman object Pascal menggunakan Development Tool Borland Delphi 7.0
Gambar 4.1. Pemrograman Aplikasi dengan Delphi
Database berupa tabel kota.db dan jarak.db diakses menggunakan komponen Ttable. Kedua komponen ini akan mengelola tabel berdasarkan input data dari user maupun dari proses komputasi Warshall.
30
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 31
Jumlah form yang dibutuhkan ada satu buah yaitu form utama. Pada form utama diletakkan komponen-komponen visual utama yaitu : 1. Komponen Timage : untuk menampilkan gambar pulau Jawa dalam format file bitmap .BMP. Format file bitmap memungkinkan untuk diolah dan ditambah dengan data gambar kota maupun jalur jalan. 2. Komponen Tbutton untuk melakukan eksekusi baris program tertentu. a. Button Input Data Kota memunculkan sarana untuk penambahan data kota, editing data kota maupun penghapusan data kota. b. Button Input Data Jalur akan memunculkan sarana untuk pengelolaan data jalur antar kota yang sudah ada di tabel kota.db. c. Button Proses akan menjalankan baris-baris program pemrosesan data kota dan jalur menggunakan komputasi Warshall. Sehingga dapat dimunculkan hasil berupa jalur terpendek antar kota. Kota yang dipilih dimunculkan dalam komponen combo box. d. Button Tutup akan menghentikan aplikasi dan keluar ke Windows. 3. Komponen DBGrid akan menampilkan isi tabel kota.db dan tabel jalur.db 4. Komponen TabControl, berfungsi untuk mengatur
tampilan aplikasi
sehingga dapat tertata rapi. 5. Komponen StringGrid akan mengatur tampilam matriks komputasi Warshall sehingga dapat diamati secara visual langkah proses perhitungannya.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 32
4.2
Hasil Implementasi Pemrograman
4.2.1
Implementasi Tampilan Pembuka Tampilan awal dari program ini berupa splash screen yang akan langsung
tampil saat pengguna menjalankan progran, dan akan menutup sendiri berdasarkan kontrol waktu.
Gambar 4.2. Tampilan Splash
4.2.2
Implementasi Tampilan Form Utama Gambar 4.3 merupakan tampilan form utama program. Tampilan form utama
merupakan antar muka induk yang berisi menu pilihan untuk menuju ke menu yang lain.
Gambar 4.3. Tampilan Form Utama
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 33
4.2.3
Implementasi Tampilan Form Input Kota Tampilan form pada gambar 4.4 berfungsi untuk memasukkan data kota-kota
di pulau Jawa. Caranya adalah dengan mengklik button Kota hingga button kota berlatar belakang warna merah. Kemudian menggunakan kursor mouse, klik posisi di peta sesuai dengan kota yang diinputkan. Jika peta telah di-klik maka pada peta akan muncul titik berwarna kuning selanjutnya user memasukkan nama kota pada bagian properti kota.
Gambar 4.4. Tampilan Form Input Data Kota
Jika pada properti kota diklik tombol simpan, maka data kota tersebut akan tersimpan ke database. Gambar kota tersebut akan muncul pada peta. Gambar kota ditandai dengan warna merah dan disertai dengan teks nama kotanya. Data kota yang sudah tersimpan akan ditampilkan pada grid data kota.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 34
4.2.4
Implementasi Tampilan Form Input Jalur Tampilan form di bawah ini berfungsi untuk memasukkan data jalur yang
menghubungkan antar kota satu dengan kota yang lain di pulau Jawa.
Gambar 4.5. Tampilan Form Input Data Jalur
Cara mengelola data jalur adalah dengan mengklik button Input Data Jalur hingga button Input Data Jalur berlatar belakang warna merah. Kemudian menggunakan kursor mouse, klik posisi kota asal dengan klik kota yang dimaksud pada peta dan dengan cara yang sama untuk memasukkan kota tujuan. Jika kota asal dan kota tujuan telah di-klik maka secara default program akan memberikan nama jalur sesuai dengan nama kedua kota yang dihubungkan tersebut. Pada kotak edit jarak dimasukkan jarak antara kota asal dan kota tujuan. Data jalur yang sudah tersimpan akan ditampilkan pada grid data jalur dan ditampilkan pada peta.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 35
4.2.5
Komputasi Warshall Perhitungan jalur terpendek dapat dilakukan dengan mengklik tab Komputasi
Warshall. User harus mengisikan kota asal dan kota tujuan dalam combo box. Proses perhitungan jalur terpendek dilakukan dengan mengklik tombol proses. Setelah komputasi dilakukan maka akan muncul jalur terpendek antar kota pada bagian hasil. Pada bagian peta jalur terpendek yang dapat ditempuh ditandai dengan garis berwarna merah tebal.
Gambar 4.6. Tampilan Form Hasil Komputasi Warshal dan Peta Jalur Terpendek
4.2.6
Implementasi Tampilan Matriks Komputasi Warshall Pada form ini ditampilkan matriks komputasi Warshall mulai dari matriks
awal hingga matriks akhir sehingga user dapat melihat setiap perubahan perhitungan matriks.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 36
Gambar 4.7. Tampilan Form Matriks Komputasi
4.2.7
Implementasi Tampilan Form Bantuan Pada form ini user dapat melihat beberapa bantuan yang disediakan oleh
pembuat program, diantaranya yaitu kebutuhan perangkat keras, kebutuhan perangkat lunak, instalasi basis data, penggunaan aplikasi jalur terpendek dan sekilas tentang algoritma Warshall.
Gambar 4.8. Tampilan Form Bantuan
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 37
4.2.8
Implementasi Tampilan Form About Pada form ini user dapat memperoleh informasi tentang pembuat program
yang dapat dilihat pada gambar 4.9.
Gambar 4.9. Tampilan Form About
4.2.9
Implementasi Tampilan Form Pesan Tampilan pesan yang ada dalam aplikasi pencarian jalur terpendek digunakan
untuk mempermudah user dalam menggunakan aplikasi ini antara lain sebagai berikut :
Gambar 4.10. Pesan yang menginformasikan kota asal yang belum diisi
Gambar 4.11. Pesan yang menginformasikan untuk memasukkan data kota
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 38
Gambar 4.12. Pesan yang menginformasikan bahwa data kota yang dimasukkan sudah ada dalam database
4.3
Visualisasi Matriks Perhitungan Warshall Bagi user tertentu yang ingin mengetahui proses komputasi Warshall secara
detil dapat membuka visualisasi matriks komputasi dari wujud awal matriks sampai matriks mengarahkan jalur terpendek. Pada awal matriks semua data diisi dengan nilai 100000 sebagai pengganti nilai null.
Wujud awal matriks adalah sebagai
berikut :
Gambar 4.13. Matriks Komputasi pada Langkah 1
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 39
Untuk melihat langkah berikutnya dari matriks dapat diklik tombol Berikut. Maka langkah kedua matriks komputasi adalah sebagai berikut :
Gambar 4.14. Matriks Komputasi pada Langkah 2
Jika menginginkan untuk melihat langkah terakhir matriks komputasi dapat melakukan klik tombol Akhir sehingga muncul tampilan matriks akhir sebagai berikut :
Gambar 4.15. Matriks Komputasi pada Langkah Terakhir
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 40
4.4
Uji Coba Program Uji coba ini digunakan untuk mengetahui nilai kebenaran dari perhitungan
jalur terpendek yang dilakukan oleh program komputer berdasarkan kota asal dan kota tujuan yang dimasukkan oleh user. Dalam hal ini kita akan mencoba program dalam mencari jalur terpendek dari Yogyakarta ke Semarang. Input Data : Kota asal : Semarang Kota tujuan : Yogyakarta Output : Jalur terpendek yang dilewati: YOGYAKARTA -> MAGELANG MAGELANG -> SECANG SECANG -> AMBARAWA AMBARAWA -> SEMARANG Jarak total : 141 Km Matriks awal yang terbentuk sebagai berikut:
Gambar 4.16. Matriks Komputasi awal jalur Yogyakarta- Semarang
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 41
Matriks akhir yang terbentuk sebagai berikut:
Gambar 4.17. Matriks Komputasi akhir jalur Yogyakarta- Semarang
Visualisasi pada peta:
Gambar 4.18. Peta yang menunjukkan rute terpendek Semarang-Yogyakarta dengan satu arah
Dari hasil perhitungan matriks, maka pencarian jalur terpendek YogyakartaSemarang yaitu YOGYAKARTA -> MAGELANG -> SECANG -> AMBARAWA > SEMARANG dengan jarak total : 141 Km. Hasil jarak total diperoleh dengan melakukan iterasi sebanyak 143, maka dilakukan iterasi sebanyak 2744 iterasi. Jadi
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 42
dapat diperoleh kesimpulan, untuk memperoleh jarak total antara kota asal ke kota tujuan maka matriks akan melakukan iterasi sebanyak n3 dengan nilai n sama dengan jumlah kota yang ada dalam database. Jika data kota yang ada dalam database semakin banyak maka proses iterasi juga akan semakin banyak sehingga akan mengakibatkan waktu proses yang relatif lama.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
BAB V KESIMPULAN DAN SARAN
5.1 Kesimpulan Berdasarkan analisis serta hasil pengujian terhadap program, secara umum dapat disimpulkan bahwa : 1. Pencarian jalur terpendek dengan menggunakan algoritma Warshall dalam aplikasi ini membutuhkan waktu proses yang relatif lama dikarenakan semua data kota yang ada dalam database dilakukan iterasi. 2. Hasil jarak total dan visualisasi peta dalam pencarian jalur terpendek untuk kota asal dan kota tujuan yang sangat dipengaruhi oleh arah.
5.2 Saran 1. Diharapkan untuk dapat mencoba mengkombinasikan algoritma Warshall dengan algoritma lain untuk mencari jalur terpendek, sehingga dapat dilihat efisiensi algoritma-algoritma tersebut.
43
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
DAFTAR PUSTAKA
Komputer,Wahana.(2005). Membuat Program Kreatif dan Profesional dengan Delphi.Semarang : Elex Media Komputindo. Martina, Inge. (2001). Borland Delphi 5.0, Jakarta : Elex Media Komputindo. MT, Suryadi(1996). Pengantar Analisa Algoritma. Jakarta: Gunadarma. Pranata, Antony. (2002). Pemrograman Borland Delphi 6. Yogyakarta: Andi Yogyakarta Siang,Jong Jek. (2002). Matematika Diskrit dan Aplikasinya Pada Ilmu Komputer, Yogyakarta: Andi Yogyakarta
44
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
LAMPIRAN
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 45
LISTING PROGRAM Form Splash Screen unit USplash; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, jpeg, Gauges; type TSplash = class(TForm) Image1: TImage; Label14: TLabel; Shape2: TShape; Label1: TLabel; jakarta: TShape; yogyakarta: TShape; purwokerto: TShape; bandung: TShape; solo: TShape; malang: TShape; surabaya: TShape; semarang: TShape; banten: TShape; Timer1: TTimer; Gauge1: TGauge; Label4: TLabel; Label19: TLabel; procedure Timer1Timer(Sender: TObject); procedure FormShow(Sender: TObject); private { Private declarations } public { Public declarations } end; var Splash: TSplash; putaran : integer; implementation uses UWarshall, ULogin; {$R *.dfm} procedure TSplash.Timer1Timer(Sender: TObject); begin if putaran mod 2 =0 then begin banten.Brush.Color:=clyellow; jakarta.Brush.Color:=clyellow; bandung.Brush.Color:=clyellow;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 46
semarang.Brush.Color:=clyellow; purwokerto.Brush.Color:=clyellow; yogyakarta.Brush.Color:=clyellow; solo.Brush.Color:=clyellow; surabaya.Brush.Color:=clyellow; malang.Brush.Color:=clyellow; end else begin banten.Brush.Color:=clred; jakarta.Brush.Color:=clred; bandung.Brush.Color:=clred; semarang.Brush.Color:=clred; purwokerto.Brush.Color:=clred; yogyakarta.Brush.Color:=clred; solo.Brush.Color:=clred; surabaya.Brush.Color:=clred; malang.Brush.Color:=clred; end; inc(putaran); gauge1.Progress:=putaran*5; if putaran > 20 then begin splash.Hide; fwarshall.show; timer1.Enabled:=false; end; end; procedure TSplash.FormShow(Sender: TObject); begin putaran:=1; timer1.Enabled:=true; end; end.
Form Warshall unit UWarshall; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, Grids, jpeg, DB, DBTables, DBCtrls, DBGrids, ComCtrls, Menus; type TFWarshall = class(TForm) BitBtn1: TBitBtn; Pct: TPageControl; Pct1: TTabSheet; Pct3: TTabSheet;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 47
status: TEdit; dsKota: TDataSource; dsJalur: TDataSource; GroupBox1: TGroupBox; Label12: TLabel; Memo1: TMemo; ComboBox2: TComboBox; ComboBox3: TComboBox; Query1: TQuery; PMatriks: TPanel; MT: TStringGrid; tbAwal: TButton; tbSebelum: TButton; tbBerikut: TButton; tbAkhir: TButton; JumIterasi: TEdit; Button10: TButton; Button11: TButton; Pct2: TTabSheet; bgtitik: TShape; btTitik: TBitBtn; btjalur: TBitBtn; bgjalur: TShape; PanelJalan: TPanel; Label6: TLabel; Label7: TLabel; Label8: TLabel; StaticText2: TStaticText; edArah: TComboBox; NamaJalur: TEdit; Kota2: TEdit; Kota1: TEdit; Button3: TButton; Button4: TButton; PanelKota: TPanel; Label2: TLabel; Label3: TLabel; Label4: TLabel; StaticText1: TStaticText; edX: TEdit; edY: TEdit; edJenis: TComboBox; Button2: TButton; edKota: TEdit; Button1: TButton; DBGrid1: TDBGrid; DBNavigator1: TDBNavigator; DBGrid2: TDBGrid; DBNavigator2: TDBNavigator; pixX: TEdit; Label1: TLabel; Label9: TLabel; PixY: TEdit; Label14: TLabel; Label15: TLabel;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 48
Label17: TLabel; Shape1: TShape; ScrollBox1: TScrollBox; Image1: TImage; Button5: TButton; Memo3: TMemo; Shape2: TShape; Label13: TLabel; MainMenu1: TMainMenu; File1: TMenuItem; Keluar1: TMenuItem; Bantuan1: TMenuItem; About1: TMenuItem; Label19: TLabel; Label20: TLabel; tbKota: TTable; tbKotaKOTA: TStringField; tbKotaX: TFloatField; tbKotaY: TFloatField; tbKotaJENIS: TStringField; tbJalur: TTable; tbJalurNAMAJALUR: TStringField; tbJalurKOTA1: TStringField; tbJalurX1: TIntegerField; tbJalurY1: TIntegerField; tbJalurKOTA2: TStringField; tbJalurX2: TIntegerField; tbJalurY2: TIntegerField; tbJalurARAH: TStringField; tbJalurJARAKPIXEL: TFloatField; tbJalurJARAKASLI: TFloatField; Edit1: TEdit; Label5: TLabel; jarak: TEdit; Label21: TLabel; Label10: TLabel; Label11: TLabel; Label16: TLabel; procedure btJalurClick(Sender: TObject); procedure KotaRefresh; procedure btTitikClick(Sender: TObject); procedure Image1Click(Sender: TObject); procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure tbKotaAfterRefresh(DataSet: TDataSet); procedure FormShow(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure BitBtn1Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Pct3Show(Sender: TObject); procedure Kota1Change(Sender: TObject); procedure Kota2Change(Sender: TObject);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 49
procedure tbJalurAfterRefresh(DataSet: TDataSet); procedure Button10Click(Sender: TObject); procedure Button11Click(Sender: TObject); procedure JumIterasiChange(Sender: TObject); procedure tbAwalClick(Sender: TObject); procedure tbAkhirClick(Sender: TObject); procedure tbSebelumClick(Sender: TObject); procedure tbBerikutClick(Sender: TObject); procedure BitBtn2Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure LogOut1Click(Sender: TObject); procedure Keluar1Click(Sender: TObject); procedure About1Click(Sender: TObject); procedure GantiPassword1Click(Sender: TObject); procedure Bantuan1Click(Sender: TObject); procedure tbKotaBeforeDelete(DataSet: TDataSet); private { Private declarations } public { Public declarations } end; MD = array [0..60,0..60] of real; MDS = array [0..60,0..60] of string[10]; var FWarshall: TFWarshall; DSimpan : array [1..5000]of MDS; totmatrix : integer; implementation uses UManajemenUser, ULogin, UAbout, UBantuan, UGantiPassword; {$R *.dfm} procedure TFWarshall.btJalurClick(Sender: TObject); begin if bgjalur.Brush.color=clred then begin status.Text:=''; bgjalur.Brush.Color:=clwhite; bttitik.Enabled:=true; end else begin status.Text:='jalur'; bgjalur.Brush.Color:=clred; bttitik.Enabled:=false; panelkota.Visible:=false; paneljalan.visible:=true; Pct2.Show; end; end; procedure TFWarshall.btTitikClick(Sender: TObject); begin
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 50
if bgtitik.Brush.color=clred then begin status.Text:=''; bgtitik.Brush.Color:=clwhite; btjalur.Enabled:=true; end else begin status.Text:='titik'; bgtitik.Brush.Color:=clred; btjalur.Enabled:=false; panelkota.Visible:=true; paneljalan.visible:=false; Pct1.Show; end; end; procedure TFWarshall.Image1Click(Sender: TObject); var X1,Y1,X2,Y2,Xpt,Ypt,i,X,Y: integer; begin if status.text='titik' then begin edX.text :=PixX.Text; edY.text:=PixY.Text; X1:=strtoint(PixX.Text); Y1:=strtoint(PixY.Text); image1.Canvas.Brush.color:=clyellow; image1.Canvas.ellipse(X1+5,Y1+5,X1-5,Y1-5); showmessage('Masukkan data properti kota'); edkota.SetFocus; end; if status.text='jalur' then begin X:=strtoint(PixX.Text); Y:=strtoint(PixY.Text); if image1.Canvas.Pixels[x,y]=clred then begin tbKota.First; for i:=1 to tbKota.recordcount do begin Xpt:=round(tbKota.fields[1].asfloat); Ypt:=round(tbKota.fields[2].asfloat); X1:=Xpt+5; Y1:=Ypt+5; X2:=Xpt-5; Y2:=Ypt-5; if (((X<=x1) and (X>=x2))and((Y<=Y1) and (Y>=Y2))) then begin if ((kota2.text<>'')and(kota1.text<>'')) then begin kota2.Text:=''; kota1.Text:=''; end; if ((kota2.text='')and(kota1.text<>'')) then kota2.Text:=tbKota.Fields[0].asstring;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 51
if (kota1.text='') then kota1.Text:=tbKota.Fields[0].asstring; exit; end; tbKota.Next; end; end; end; if ((status.text<>'jalur')and(status.text<>'titik')) then begin X:=strtoint(PixX.Text); Y:=strtoint(PixY.Text); if image1.Canvas.Pixels[x,y]=clred then begin tbKota.First; for i:=1 to tbKota.recordcount do begin Xpt:=round(tbKota.fields[1].asfloat); Ypt:=round(tbKota.fields[2].asfloat); X1:=Xpt+5; Y1:=Ypt+5; X2:=Xpt-5; Y2:=Ypt-5; if (((X<=x1) and (X>=x2))and((Y<=Y1) and (Y>=Y2))) then begin edkota.Text:=tbkota.FieldByName('kota').AsString; edX.Text:=tbKota.FieldByName('X').AsString; edY.Text:=tbKota.FieldByName('Y').AsString; edJenis.Text:=tbKota.FieldByName('Jenis').AsString; exit; end; tbKota.Next; end; end; end; end; procedure TFWarshall.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var i,x1,y1,x2,y2,XPt,YPt : integer; begin pixX.Text:=inttostr(X); pixY.Text:=inttostr(Y); end; procedure TFWarshall.KotaRefresh; var X,Y,X1,Y1,X2,Y2 : integer; i : integer; arah :string; begin image1.Picture.LoadFromFile(copy(APPLICATION.exename,1,length(application.exename)12)+'\image\jawa.bmp'); image1.Repaint; image1.Refresh; tbKota.First;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 52
for i:=1 to tbKota.recordcount do begin X:=round(tbKota.fields[1].asfloat); Y:=round(tbKota.fields[2].asfloat); image1.Canvas.Brush.Color:=clred; image1.Canvas.ellipse(X+5,Y+5,X-5,Y-5); image1.Canvas.Font.Name:='arial'; image1.Canvas.Font.Size:=6; image1.Canvas.Font.color:=clblack; image1.Canvas.Brush.Style:=bsclear; image1.Canvas.TextOut(x,y+10,tbkota.Fields[0].asstring); tbKota.Next; end; tbJalur.First; for i:=1 to tbJalur.RecordCount do begin X1:=tbJalur.fields[2].asinteger; Y1:=tbJalur.fields[3].asinteger; X2:=tbJalur.fields[5].asinteger; Y2:=tbJalur.fields[6].asinteger; arah:=tbJalur.fields[7].asstring; if arah='1' then image1.Canvas.Pen.color:=clyellow; if arah='2' then image1.Canvas.Pen.color:=clgreen; image1.Canvas.MoveTo(X1,Y1); image1.canvas.LineTo(x2,y2); tbjalur.Next; end; end; procedure TFWarshall.Button2Click(Sender: TObject); begin if edkota.text='' then begin showmessage('Kota masih kosong'); exit; end; if tbkota.FindKey([edkota.text]) then begin showmessage('Nama Kota sudah ada di database, harap diganti'); exit; end; tbKota.Close; tbkota.Open; tbKota.Insert; tbkota.FieldByName('kota').AsString:=edkota.Text; tbKota.FieldByName('X').AsInteger:=strtoint(edX.Text); tbKota.FieldByName('Y').AsInteger:=strtoint(edY.Text); tbKota.FieldByName('Jenis').AsString:=edJenis.Text; tbKota.Post; tbKota.Close; tbkota.Open; Kotarefresh;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 53
end; procedure TFWarshall.Button1Click(Sender: TObject); begin edkota.text:=''; edX.text:=''; edY.text:=''; Kotarefresh; end; procedure TFWarshall.tbKotaAfterRefresh(DataSet: TDataSet); begin Kotarefresh; end; procedure TFWarshall.FormShow(Sender: TObject); begin kotarefresh; btTitik.SetFocus; end; procedure TFWarshall.Button4Click(Sender: TObject); begin kota1.Text:=''; kota2.Text:=''; NamaJalur.Text:=''; end; procedure TFWarshall.Button3Click(Sender: TObject); begin if kota1.text='' then begin showmessage('Kota asal masih kosong'); exit; end; if kota2.text='' then begin showmessage('Kota tujuan masih kosong'); exit; end; if tbJalur.FindKey([NamaJalur.text]) then begin showmessage('Nama Jalur jalan raya sudah ada di database, harap diganti'); exit; end; tbjalur.Close; tbjalur.Open; tbJalur.Insert; tbJalur.FieldByName('namajalur').asstring:=NamaJalur.Text; tbJalur.FieldByName('kota1').asstring:=Kota1.Text; tbJalur.FieldByName('kota2').asstring:=Kota2.Text; tbJalur.FieldByName('arah').asstring:=edArah.Text; tbJalur.FieldByName('jarakasli').asstring:=jarak.Text; tbJalur.Post;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 54
tbjalur.Close; tbjalur.Open; Kotarefresh; end; procedure TFWarshall.BitBtn1Click(Sender: TObject); begin application.terminate; end; procedure TFWarshall.Button5Click(Sender: TObject); type Pth = array [1..100,1..100] of integer; var nokota : array [1..100] of integer; kota : array [1..100] of string; xkota : array [1..100] of integer; ykota : array [1..100] of integer; jalur : array [1..200] of string; k1jalur : array [1..200] of integer; k2jalur : array [1..200] of integer; jjalur : array [1..200] of real; sjalur : array [1..200] of string; D : MD; P : Pth; traceindex,tawal,takhir : integer; jumkota,jumjalur,i,j,k,X1,X2,Y1,Y2 : integer; trace : array[1..100,1..100]of integer; dkota1,dkota2,kotalewat: string; ketemu : boolean; jaraktotal : real; procedure rekam; var i,j : integer; begin inc(totmatrix); tbKota.First; for i:= 1 to tbKota.RecordCount do begin DSimpan[totmatrix,0,i]:=tbKota['kota']; Dsimpan[totmatrix,i,0]:=tbKota['kota']; tbkota.Next; end; for i:=1 to tbKota.recordcount do for j:=1 to tbKota.recordcount do Dsimpan[totmatrix,i,j]:=floattostr(D[i,j]); end; procedure path(i,j : integer;P : Pth); var inde : integer; begin if P[i][j]=0 then begin inc(traceindex);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 55
inde:=traceindex; trace[inde][1]:=i; trace[inde][2]:=j; end else begin path(i,P[i][j],P); path(P[i][j],j,P); end; end; begin button10.Enabled:=false; kotarefresh; memo1.Clear; memo3.Clear; jumkota:=0; if combobox2.text='' then begin showmessage('Kota asal masih kosong'); exit; end; if combobox3.text='' then begin showmessage('Kota tujuan masih kosong'); exit; end; ketemu:=false; tbKota.first; for i:=1 to tbkota.recordcount do begin inc(jumkota); kota[jumkota] := tbKota['Kota']; xkota[jumkota]:=tbKota['X']; ykota[jumkota]:=tbKota['Y']; nokota[jumkota]:=jumkota; ketemu:=false; tbKota.next; end; tbJalur.first; i:=1; while not tbJalur.eof do begin //hanya mengambil jalur yang kotanya ditentukan jalur[i] := tbJalur['NamaJalur']; for j:=1 to jumkota do //cari jarak begin if tbJalur['Kota1']=kota[j] then begin X1:=xkota[j]; Y1:=ykota[j]; k1jalur[i]:=nokota[j];
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 56
end; if tbJalur['Kota2']=kota[j] then begin X2:=xkota[j]; Y2:=ykota[j]; k2jalur[i]:=nokota[j]; end; end; jjalur[i]:=tbJalur['Jarakasli']; sjalur[i]:=tbJalur['arah']; inc(i); tbJalur.next; end; jumjalur:=i-1;
//LANGKAH 2 PROSES WARSHALL //1. Pemberian nilai awal pada matrik i:=1; totmatrix:=1; //matrix penyimpanan diset ke 1 while i<=jumkota do begin j:=1; while j<=jumkota do begin if i<>j then D[i][j]:=100000 else D[i][j]:=0; inc(j); end; inc(i); end; rekam; //2. pemberian nilai awal dari jalur yang ada i:=1; while i<=jumkota do begin j:=1; while j<=jumkota do begin k:=1; while k<=jumjalur do begin if ((k1jalur[k]=i) and (k2jalur[k]=j)) then D[i][j]:=jjalur[k]; inc(k); end; inc(j); end; inc(i); end;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 57
rekam; //3. jantung perhitungan warshall untuk minimalisasi jarak k:=1; while (k<=jumkota) do begin i:=1; while (i<=jumkota) do begin j:=1; while (j<=jumkota) do begin if ((D[i][k]+D[k][j]) < D[i][j]) then begin P[i][j] := k; D[i][j] := D[i][k] + D[k][j]; end; rekam; inc(j); end; inc(i); end; inc(k); end;
//LANGKAH 3. KOLEKSI HASIL PROSES WARSHALL //1. nilai awal dan merangkai jalur terdekat for i:=1 to jumkota do begin if kota[i]=combobox2.text then tawal:=nokota[i]; if kota[i]=combobox3.text then takhir:=nokota[i]; end; path(tawal,takhir,P); memo3.Clear; for i:=1 to traceindex do memo3.Lines.Add(inttostr(trace[i][1])); memo3.lines.add(inttostr(trace[traceindex][2])); //mengubah isi memo3 dari kode angka ke nama kota for i:=0 to memo3.Lines.Count-1 do for j:=1 to jumkota do if trim(memo3.Lines.Strings[i])=inttostr(nokota[j]) then memo3.Lines.Strings[i]:=kota[j]; ketemu:=false; kotalewat:=''; jaraktotal:=0; i:=1; while i<= traceindex do
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 58
begin j:=1; while j<=jumjalur do begin if ((k1jalur[j]=trace[i][1])and(k2jalur[j]=trace[i][2])) then begin jaraktotal:=jaraktotal+ jjalur[j]; for K:=1 to jumkota do if nokota[K]=k1jalur[j] then begin dkota1:=kota[K]; X1:=xkota[K]; Y1:=ykota[K]; end; for K:=1 to jumkota do if nokota[K]=k2jalur[j] then begin dkota2:=kota[K]; X2:=xkota[K]; Y2:=ykota[K]; end; image1.Canvas.Pen.color:=clred; image1.Canvas.MoveTo(X1,Y1); image1.Canvas.Pen.Width:=3; image1.canvas.LineTo(x2,y2); memo1.lines.add(dkota1+' -> '+dkota2); end; inc(j); end; inc(i); end; memo1.lines.add('Jarak total : '+floattostr(jaraktotal)+' Km'); button10.Enabled:=true; if trim(kotalewat)<>'' then showmessage('Komputasi jalur terdekat tidak akan melalui '+kotalewat) end; procedure TFWarshall.Pct3Show(Sender: TObject); var i : integer; begin memo1.Clear; combobox3.Clear; combobox2.Clear; button10.Enabled:=false; tbkota.First; for i:=1 to tbkota.recordcount do begin combobox2.Items.Add(tbkota['kota']); combobox3.Items.Add(tbkota['kota']); tbkota.next; end; end; procedure TFWarshall.Kota1Change(Sender: TObject); begin
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 59
namajalur.text:='Jalur '+kota1.text+'-'+kota2.text; end; procedure TFWarshall.Kota2Change(Sender: TObject); begin namajalur.text:='Jalur '+kota1.text+'-'+kota2.text; end; procedure TFWarshall.tbJalurAfterRefresh(DataSet: TDataSet); begin kotarefresh; end; procedure TFWarshall.Button10Click(Sender: TObject); var i,j:integer; begin Pmatriks.Visible:=true; jumiterasi.text:='1'; MT.RowCount:=tbKota.RecordCount+1; MT.ColCount:=tbKota.RecordCount+1; tbKota.First; for i:= 1 to tbKota.RecordCount do begin DSimpan[1,0,i]:=tbKota['kota']; Dsimpan[1,i,0]:=tbKota['kota']; tbkota.Next; end; for i:=1 to MT.RowCount do for j:=1 to MT.RowCount do MT.Cells[i,j]:=DSimpan[2,i,j]; end; procedure TFWarshall.Button11Click(Sender: TObject); begin Pmatriks.Visible:=false; end; procedure TFWarshall.JumIterasiChange(Sender: TObject); var i,j,k : integer; ketemu: boolean; begin if trim(jumiterasi.text)='1' then begin tbsebelum.Enabled:=false; tbawal.Enabled:=false; tbberikut.Enabled:=true; tbakhir.enabled:=true; end; if trim(jumiterasi.text)=inttostr(totmatrix) then begin tbsebelum.Enabled:=true; tbawal.Enabled:=true; tbberikut.Enabled:=false; tbakhir.enabled:=false; end;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 60
if ((trim(jumiterasi.text)<>inttostr(totmatrix)) and (trim(jumiterasi.text)<>'1')) then begin tbsebelum.Enabled:=true; tbawal.Enabled:=true; tbberikut.Enabled:=true; tbakhir.enabled:=true; end; for i:=0 to MT.RowCount do for j:=0 to MT.RowCount do MT.Cells[i,j]:=DSimpan[strtoint(jumiterasi.text)+1,j,i]; edit1.Text:=inttostr(strtoint(jumiterasi.Text)-1); end; procedure TFWarshall.tbAwalClick(Sender: TObject); begin jumiterasi.text:='1'; tbsebelum.Enabled:=false; tbawal.Enabled:=false; tbberikut.Enabled:=true; tbakhir.enabled:=true; end; procedure TFWarshall.tbAkhirClick(Sender: TObject); begin jumiterasi.text:=inttostr(totmatrix-1); if jumiterasi.text=inttostr(totmatrix) then begin tbsebelum.Enabled:=true; tbawal.Enabled:=true; tbberikut.Enabled:=false; tbakhir.enabled:=false; end; end; procedure TFWarshall.tbSebelumClick(Sender: TObject); begin jumiterasi.text:=inttostr(strtoint(jumiterasi.text)-1); if jumiterasi.text='1' then begin tbsebelum.Enabled:=false; tbawal.Enabled:=false; tbberikut.Enabled:=true; tbakhir.enabled:=true; end; end; procedure TFWarshall.tbBerikutClick(Sender: TObject); begin jumiterasi.text:=inttostr(strtoint(jumiterasi.text)+1); if jumiterasi.text=inttostr(totmatrix-1) then begin tbsebelum.Enabled:=true; tbawal.Enabled:=true; tbberikut.Enabled:=false; tbakhir.enabled:=false;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 61
end; end; procedure TFWarshall.BitBtn2Click(Sender: TObject); begin fmanajemenuser.show; end; procedure TFWarshall.FormClose(Sender: TObject; var Action: TCloseAction); begin application.Terminate; end; procedure TFWarshall.LogOut1Click(Sender: TObject); begin Fwarshall.Close; end; procedure TFWarshall.Keluar1Click(Sender: TObject); begin application.Terminate; end; procedure TFWarshall.About1Click(Sender: TObject); begin aboutbox.show; end; procedure TFWarshall.GantiPassword1Click(Sender: TObject); begin fgantipassword.show; end; procedure TFWarshall.Bantuan1Click(Sender: TObject); begin fbantuan.show; end; procedure TFWarshall.tbKotaBeforeDelete(DataSet: TDataSet); var i :integer; begin tbjalur.First; for i:=1 to tbjalur.recordcount do begin if tbjalur['kota1']=tbkota['kota'] then tbjalur.Delete; if tbjalur['kota2']=tbkota['kota'] then tbjalur.Delete; tbjalur.Next; end; tbjalur.Close; tbjalur.Open; end; end.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 62
Form Matriks Komputasi unit UInfo; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids; type TForm1 = class(TForm) MT: TStringGrid; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; JumIterasi: TEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses UWarshall; {$R *.dfm} end.
Form Bantuan unit UBantuan; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, OleCtrls, SHDocVw; type TFBantuan = class(TForm) WebBrowser1: TWebBrowser; procedure FormShow(Sender: TObject); private { Private declarations }
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 63
public { Public declarations } end; var FBantuan: TFBantuan; implementation {$R *.dfm} procedure TFBantuan.FormShow(Sender: TObject); var menuju,dir : string; begin dir:=application.ExeName; menuju:= copy(dir,1,length(dir)-12)+'help\help.htm'; webbrowser1.Navigate(menuju); end; end.
Form About unit UAbout; interface uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls, Buttons, ExtCtrls; type TAboutBox = class(TForm) Panel1: TPanel; OKButton: TButton; ProductName: TLabel; Copyright: TLabel; Label2: TLabel; Label4: TLabel; Label3: TLabel; Label1: TLabel; ProgramIcon: TImage; procedure OKButtonClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var AboutBox: TAboutBox; implementation {$R *.dfm}
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 64
procedure TAboutBox.OKButtonClick(Sender: TObject); begin close; end; end.