Menentukan Minimum Spannning Tree Menggunakan Algoritma Kruskal Dengan Bahasa Pemrograman C

(1)

MENENTUKAN MINIMUM SPANNING TREE MENGGUNAKAN ALGORITMA KRUSKAL DENGAN BAHASA PEMROGRAMAN C

TUGAS AKHIR

ASDITA RIZKI LUBIS 112406125

PROGRAM STUDI D3 TEKNIK INFORMATIKA DEPARTEMEN MATEMATIKA

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS SUMATERA UTARA

MEDAN 2014


(2)

ii

MENENTUKAN MINIMUM SPANNING TREE MENGGUNAKAN ALGORITMA KRUSKAL DENGAN BAHASA PEMROGRAMAN C

TUGAS AKHIR

Diajukan untuk melengkapi tugas dan memenuhi syarat memperoleh Ahli Madya

ASDITA RIZKI LUBIS 112406125

PROGRAM STUDI D3 TEKNIK INFORMATIKA DEPARTEMEN MATEMATIKA

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS SUMATERA UTARA

MEDAN 2014


(3)

PERSETUJUAN

Judul : Menentukan Minimum Spannning Tree

Menggunakan Algoritma Kruskal Dengan Bahasa Pemrograman C

Kategori : Tugas Akhir

Nama : Asdita Rizki Lubis

Nomor Induk Mahasiswa : 112406125

Program Studi : D3 TEKNIK INFORMATIKA

Departemen : Matematika

Fakultas : Matematika Dan Ilmu Pengetahuan Alam Universitas Sumatera Utara

Disetujui di Medan, Juni 2014

Disetujui oleh:

Program Studi D3 Teknik Informatika Pembimbing FMIPA USU

Ketua,

Dr. Elly Rosmaini, M.Si Dr. Mardiningsih, MSi NIP. 19600520 198503 2 002 NIP. 19630405 198811 2 001


(4)

ii

PERNYATAAN

MENENTUKAN MINIMUM SPANNING TREE MENGGUNAKAN ALGORITMA KRUSKAL DENGAN BAHASA PEMROGRAMAN C

TUGAS AKHIR

Saya mengakui bahwa tugas akhir ini adalah hasil kerja saya sendiri, kecuali beberapa kutipan dan ringkasan yang masing-masing disebutkan sumbernya.

Medan, Juni 2014

ASDITA RIZKI LUBIS 112406125


(5)

PENGHARGAAN

Alhamdulillah, puji dan syukur penulis panjatkan kepada Allah SWT yang Maha Pemurah dan Penyayang, dengan limpahan rahmat dan hidayah-Nya Penulis dapat menyelesaikan penyusunan tugas akhir ini dengan judul Menentukan Minimum Spanning Tree menggunakan Algoritma Kruskal Dengan Bahasa Pemrograman C.

Ucapan terima kasih penulis sampaikan kepada Ibu Dr. Mardiningsih, MSi, selaku pembimbing sekaligus Sekertaris Departemen Matematika FMIPA USU, yang telah memberikan panduan dan bimbingan dalam merampungkan tugas akhir ini. Ucapan terima kasih juga ditujukan kepada Ketua Departemen Matematika FMIPA USU Bapak Prof.Drs. Tulus, M.Si, Ibu Dr. Elly Rosmaini, MSi selaku Ketua Prodi D3 Teknik Informatika, Bapak Syahriol Sitorus S.Si, M.IT selaku Sekretaris Prodi D3 Teknik Informatika, Dekan, Pembantu Dekan FMIPA USU, serta segenap dosen dan pegawai Fakultas Matematika dan Ilmu Pengetahuan Alam Universitas Sumatera Utara, serta rekan-rekan mahasiswa D3 Teknik Informatika Universitas Sumatera Utara. Tak lupa penulis juga mengucapkan banyak terima kasih kepada orangtua tercinta yang telah memberikan kasih sayang, kekuatan dan doa kepada penulis serta sanak saudara yang telah memberikan banyak dukungan dan doa dalam menyelesaikan pendidikan D3 Teknik Informatika Universitas Sumatera Utara. Semoga Allah akan membalasnya.


(6)

iv

ABSTRAK

Jika semua jaringan listrik dibuat terlalu banyak maka biaya akan boros. Beberapa jalur yang menghubungkan 2 kota secara langsung tidak perlu dibuat karena kota-kota tersebut tetap dapat teraliri listrik secara tidak langsung, yaitu dengan melalui kota lain sedemikian hingga total biaya pemasangan jaringan listrik seminimum mungkin. Atau dengan kata lain, mencari pohon rentang dengan total bobot terkecil. Melihat hal itu penulis ingin membantu user menemukan pohon rentang minimum secara sederhana menggunakan Algoritma Kruskal dengan Bahasa Pemrograman C. Aplikasi ini berguna untuk mencari pohon rentang dengan total bobot seminimum mungkin atau disebut pohon merentang minimum.


(7)

ABSTRACT

If all the electricity grid made too much of the costs wiil be wasteful. Multiple paths that connect the two cities directly not need to be made because the cities will still be powered indirectly, with another city such that the total cost of the installation of the electrical grid to a minimum. Or in other words finding a spanning tree with total weight of the smallest. See it author wants to help user find the minimum spanning tree using Kruskal algorithm with a simple programming language C. This application is useful to find a spanning tree with minimum total weight or the so called minimum spanning tree.


(8)

vi

DAFTAR ISI

Halaman

Persetujuan i

Pernyataan ii

Penghargaan iii

Abstrak iv

Abstract v

Daftar Isi vi

Daftar Tabel viii

Daftar Gambar ix

Bab 1. Pendahuluan 1

1.1. Latar Belakang 1

1.2. Rumusan Masalah 2

1.3. Batasan Masalah 3

1.4. Tujuan 3

1.5. Manfaat 3

1.6. Metodologi Penelitian 4

1.7. Sistematika Penulisan 5

Bab 2. Landasan Teori 7

2.1. Pengertian Algoritma 7

2.2. Sejarah Graf 8

2.3. Teori Graf 8

2.3.1. Graph Sederhana(Simple Graph) 9

2.3.2. Graf Tak-Berarah (Undirected Graph) 9

2.3.3. Graf Berbobot 10

2.4. Pohon(Tree) 10

2.5. Pohon Merentang 11

2.6. Graf Berlabel 12

2.7. Pohon Merentang Minimum 13

2.8. Aplikasi Minimum Spanning Tree 14

2.9. Algoritma Kruskal 15

2.10. Algoritma Prim 18

2.11. Pengertian Komputer 18

2.12. Sejarah Singkat C 19

2.13. Mengenal Pemrograman 19

2.14 Pembahasan Bahasa Pemrograman C 20

2.14.1 Identifier, Keywords dan Tipe Data Pada Bahasa C 23 2.14.2 Escape Character pada Bahasa C 25

2.15 Dev C++ 26

Bab 3 Perancangan Sistem 32


(9)

3.2. Pemodelan Aplikasi 32

3.3. Flowchart 34

3.4. Struktur Kontrol Percabangan 36

3.4.1. Pola IF 37

3.4.2. Bentuk IF ELSE 37

3.5 Struktur Kontrol Perulangan 38

3.5.1. Struktur For() 39

3.6 Fungsi Main 40

3.6.1. int main() 40

3.6.2. void main() 40

3.7 Pointer 41

3.8 Array 41

3.8.1. Array 1 Dimensi 42

3.8.2. Array 2 Dimensi 42

3.9 Perancangan Tampilan 44

3.9.1. Menu utama 44

3.9.2. Compile dan Run 44

3.9.3. Command Prompt 45

Bab 4 Impementasi Sistem 46

4.1. Pengertian Implementasi Sistem 46

4.2. Tujuan Implementasi Sistem 47

4.3. Kebutuhan Sistem 47

4.3.1. Perangkat Keras (Hardware) 47

4.3.2. Perangkat Lunak (Software) 48

4.3.3. Brainware 48

4.4. Tampilan Akhir Program 49

4.5. Cara Kerja Program 50

Bab 5 Penutup 52

5.1. Kesimpulan 52

5.2. Saran 53

Daftar Pustaka 54


(10)

viii

DAFTAR TABEL

No tabel Judul Halaman

2.1 Tabel pembentukan pohon merentang minimum dengan

algoritma Kruskal 17

2.2 Tabel contoh statement 22

2.3 Keywords pada C 23

2.4 Ukuran tipe data bilangan bulat 24

2.5 Tipe Data Bilangan Pecahan 24

2.6 Tipe Data Non-Numerik 25

2.7 Tipe Karakter Khusus 26


(11)

DAFTAR GAMBAR

No Gambar Judul Halaman

2.1 Graf lengkap G dan empat buah pohon 11

2.2 Graf Jaringan Jalur Rel Kereta Api 14

2.3 Struktur Program C 22

2.4 Tampilan Awal Dev C++ 27

2.5 Tampilan Membuat Project Baru 28

2.6 Cara Menyimpan Program 29

2.7 Jendela Area Kerja Dev C++ 30

3.1 Diagram Alir Perancangan 33

3.2 Flowchart Pola IF 37

3.3 Flowchart Bentuk IF ELSE 38

3.4 Flowchart Struktur For() 39

3.5 Flowchart Program 43

3.6 Kerangka Tampilan Halaman Program 44

4.1 Tampilan Akhir Program 49

4.2 Graph Berlabel 50

4.3 Tampilan Awal Masukkan Verteks 50

4.4 Input Matriks Adjasensi 51

4.5 Total Biaya Minimum 51


(12)

iv

ABSTRAK

Jika semua jaringan listrik dibuat terlalu banyak maka biaya akan boros. Beberapa jalur yang menghubungkan 2 kota secara langsung tidak perlu dibuat karena kota-kota tersebut tetap dapat teraliri listrik secara tidak langsung, yaitu dengan melalui kota lain sedemikian hingga total biaya pemasangan jaringan listrik seminimum mungkin. Atau dengan kata lain, mencari pohon rentang dengan total bobot terkecil. Melihat hal itu penulis ingin membantu user menemukan pohon rentang minimum secara sederhana menggunakan Algoritma Kruskal dengan Bahasa Pemrograman C. Aplikasi ini berguna untuk mencari pohon rentang dengan total bobot seminimum mungkin atau disebut pohon merentang minimum.


(13)

ABSTRACT

If all the electricity grid made too much of the costs wiil be wasteful. Multiple paths that connect the two cities directly not need to be made because the cities will still be powered indirectly, with another city such that the total cost of the installation of the electrical grid to a minimum. Or in other words finding a spanning tree with total weight of the smallest. See it author wants to help user find the minimum spanning tree using Kruskal algorithm with a simple programming language C. This application is useful to find a spanning tree with minimum total weight or the so called minimum spanning tree.


(14)

1

BAB 1

PENDAHULUAN

1.1 Latar Belakang

Hubungan antara titik-titik dalam graf kadang-kadang perlu diperjelas. Hubungannya tidak cukup hanya menunjukkan titik-titik mana yang berhubungan langsung, tetapi juga seberapa kuatkah hubungan itu. Sebagai contoh, andaikata suatu graf menyatakan “peta” suatu daerah. Titik-titik graf menyatakan kota-kota di daerah tersebut. Garis-garis dalam graf menyatakan jalan yang menghubungkan kota-kota tersebut. Jadi, setiap garis dalam graf berhubungan dengan menyatakan bobot garis tersebut.

Algoritma Kruskal adalah algoritma untuk mencari pohon merentang minimum secara langsung didasarkan pada algoritma MST (Minimum Spanning Tree) umum. Pada algoritma Kruskal sisi-sisi di dalam graf diurut terlebih dahulu berdasarkan bobotnya dari kecil ke besar. Sisi yang dimasukkan ke dalam himpunan T adalah sisi graf G sedemikian sehingga T adalah pohon. Sisi dari graf G ditambahkan ke T jika tidak membentuk sirkuit di T. (Aceng Hasiri, 2012)


(15)

Aplikasi yang sering dipakai dalam graf berlabel adalah mencari pohon rentang dengan total bobot seminimum mungkin atau disebut pohon merentang minimum. Jika semua jaringan listrik dibuat terlalu banyak maka biaya akan boros. Beberapa jalur yang menghubungkan 2 kota secara langsung tidak perlu dibuat karena kota-kota tersebut tetap dapat teraliri listrik secara tidak langsung, yaitu dengan melalui kota lain sedemikian hingga total biaya pemasangan jaringan listrik seminimum mungkin. Atau dengan kata lain, mencari pohon rentang dengan total bobot seminimum mungkin. Cara yang paling sederhana adalah dengan mendaftarkan semua pohon rentang yang mungkin dibuat dan menghitung total bobot tiap-tiap pohon rentang. Selanjutnya dipilih pohon rentang dengan total bobot yang paling kecil. Metode itu tidak efisien, terutama pada graf yang cukup besar karena terdapat banyak sekali pohon rentang yang dapat dibuat.

Melihat hal itu penulis ingin membantu menemukan pohon rentang minimum dengan total bobot yang paling kecil secara sederhana. Sehingga untuk mengatasi permasalahan di atas penulis mengajukan proposal dengan judul :

“MENENTUKAN MINIMUM SPANNING TREE MENGGUNAKAN

ALGORITMA KRUSKAL DENGAN BAHASA PEMROGRAMAN C ”.

1.2 Rumusan Masalah

Berdasarkan latar belakang di atas, rumusan masalah dalam penelitian ini adalah sebagai berikut Apakah dapat dibuat program menggunakan konsep bahasa pemrograman C untuk menentukan minimum spanning tree menggunakan algoritma


(16)

3

1.3 Batasan Masalah

Dalam perancangan program ini dilakukan beberapa batasan sebagai berikut :

1. Bahasa pemrograman yang digunakan dalam membuat program ini adalah bahasa C.

2. Aplikasi ini terfokus hanya mencari minimum spanning tree pada suatu graph tertentu.

3. Penulisan dan Penghitungan hanya dilakukan pada satu jenis metode, yaitu dengan menggunakan Algoritma Kruskal

4. Menggunakan Graf Berlabel dan Graf terhubung.

1.4 Tujuan

Penelitian ini bertujuan untuk mengaplikasikan algoritma kruskal dan menentukan Minimum Spanning Tree suatu Graph dengan bahasa Pemrograman C

1.5 Manfaat

Manfaat yang diperoleh dari program Minimum Spanning Tree ini :

1. Untuk mencari jalan penghubung yang dapat menghubungkan semua titik dalam jaringan secara bersamaan sampai diperoleh jarak minimum.

2. Memberi kemudahan pengguna untuk mengetahui yang harus dilalui untuk mencapai suatu daerah.


(17)

1.6 Metodologi Penelitian

Metodologi penelitian yang digunakan penulis untuk menyelesaikan permasalahan yang terjadi di atas adalah :

1. Penelitian Kepustakaan(Library Research)

Pengumpulan data yang erat kaitannya dengan permasalahan dengan cara membaca buku-buku, makalah, dan membaca bahan-bahan sumber lainnya diperpustakaan USU, LIDA dan perpustakaan lainnya..

2. Analisis Sistem

Melakukan analisis sistem terhadap masalah menentukan minimum spanning tree, Serta mempelajari matriks yang berhubungan dengan Algoritma Kruskal.

3. Desain Sistem

Pada tahap ini dilakukan perancangan program, membuat desain progam tersebut.

4. Pengujian Program

Proses pengujian program akan dilakukan setelah semua perancangan dilakukan, dan ketika terdapat beberapa kekurangan yang ada di program pada saat pengujian program dilaksanakan, maka penulis akan melakukan perbaikan pada rancangan guna memperoleh hasil akhir yang maksimal.


(18)

5

5. Penulisan Tugas Akhir

Pengerjaan tugas akhir penulis sekaligus membuat laporan tugas akhir yang mencakup bagaimana pembuatan dan penjelasan tentang tugas akhir penulis.

1.2Sistematika Penulisan

Dalam penulisan tugas akhir ini, penulis membentuk suatu sistematika penulisan yang bertujuan untuk menggambarkan secara ringkas bab-bab yang mencakup hal– hal sebagai berikut:

BAB 1 : PENDAHULUAN

Bab ini menguraikan latar belakang penulisan, rumusan masalah, masalah, tujuan, manfaat, metodologi penelitian, dan sistematika penulisan.

BAB 2 : LANDASAN TEORI

Bab ini menjelaskan tentang landasan teori konsep dasar dan teori-teori yang mendukung pembahasan untuk tema penulisan ini yang didapat dari beberapa literatur.

BAB 3 : PERANCANGAN SISTEM

Bab ini membahas tentang perancangan program Menentukan Minimum Spanning Tree menggunkan Algoritma Kruskal dengan bahasa pemrograman C dan gambaran umum rancangannya.


(19)

BAB 4 : IMPLEMENTASI SISTEM

Bab ini membahas analisa hasil dan pembahasan Program Menentukan Minimum Spanning Tree yang dirancang, pembuatan program, tampilan dari program, dan pengujian program.

BAB 5 : KESIMPULAN DAN SARAN

Bab ini menguraikan tentang kesimpulan dari bab-bab yang ada, dan memberi saran-saran dari hasil akhir pembuatan progam yang berguna untuk melengkapi dan menyempurnakan pengembangan program ini untuk kedepannya.


(20)

7

BAB 2

LANDASAN TEORI

Bab ini akan menjelaskan masalah-masalah teoritis yang berkaitan dalam pembuatan program menentukan Minimum Spanning Tree menggunakan algoritma Kruskal dengan bahasa pemrograman C

2.1 Pengertian Algoritma

Dalam matematika dan komputasi, algoritma atau algoritme merupakan kumpulan perintah untuk menyelesaikan suatu masalah. Perintah-perintah ini dapat diterjemahkan secara bertahap dari awal hingga akhir. Masalah tersebut dapat berupa apa saja, dengan catatan untuk setiap masalah, ada kriteria kondisi awal yang harus dipenuhi sebelum menjalankan algoritma. Algoritma akan dapat selalu berakhir untuk semua kondisi awal yang memenuhi kriteria, hal ini berbeda dengan heuristik. Algoritma sering mempunyai langkah pengulangan (iterasi) atau memerlukan keputusan sampai tugasnya selesai.


(21)

2.2 Sejarah Graf

Menurut catatan sejarah, masalah jembatan Konigsberg adalah masalah yang pertama kali mengggunakan graf (tahun 1736). Di kota Konigsberg (sebelah timur negara bagian Prussia, Jerman), sekarang bernama kota Kaliningrad, terdapat sungai Pregal yang mengalir mengitari pulau Kneiphof lalu bercabang menjadi dua buah anak sungai. Ada tujuh buah jembatan yang menghubungkan daratan yang dibelah oleh sungai tersebut. Masalahnya adalah apakah mungkin melalui ketujuh buah jembatan itu masing-masing tepat satu kali, dan kembali lagi ke tempat semula? Tahun 1736, seorang matematikawan Swiss, L.Euler, adalah orang pertama yang berhasil menemukan jawaban masalah itu dengan pembuktian yang sedrhana. Ia memodelkan masalah ini ke dalam graf. Daratan (titik-titik yang dihubungkan oleh jembatan) dinyatakannya sebagai titik(noktah) – yang disebut simpul(vertex)- dan jembatan dinyatakan sebagai garis yang disebut(edge). Karena tidak semua simpul berderajat genap, maka tidak mungkin dilakukan perjalanan beberapa sirkuit(yang dinamakan sirkuit Euler) pada graf tersebut.

2.3 Teori Graf

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 antara objek-objek-objek-objek tersebut. Representasi visual dari graf


(22)

9

adalah dengan menyatakan objek dinyatakan sebagai noktah, bulatan, atau titik sedangkan hubungan antara objek dinyatakan denagan baris.

Secara matematis graf didefinisikan seperti berikut ini graf G didefinisikan sebagai pasangan himpunan (V, E), ditulis dengan G=(V, E), yang dalam hal ini V adalah himpunan tidak kosong dari simpul-simpul (vertices atau node) dan E adalah himpunan sisi (edges atau arcs) yang menghubungkan sepasang simpul. Simpul pada graf dapat dinomori dengan huruf seperti a, b, c, …, v, w, …, dengan bilangan asli 1, 2, 3, .., atau gabungan keduanya. Sedangkan sisi yang menghubungkan simpul u dengan simpul v dinyatakan dengan pasangan (u, v) atau dinyatakan dengan lambang e1, e2, … .Dengan kata lain, jika e adalah sisi yang menghubungkan simpul u dengan

simpul v, maka e dapat ditulis sebagai berikut : e=(v , v)

2.3.1 Graf Sederhana (Simple Graph)

Graf yang tidak mengandung gelang maupun sisi-ganda dinamakan graf sederhana. Pada graf sederhana, sisi adalah pasangan tak-terurut (unordered pairs). Jadi menuliskan sisi (u, v) sama saja dengan (v, u). Kita dapat juga mendefinisikan graf sederhana G = (V, E) terdiri dari himpunan tidak kosong simpul-simpul dari E adalah himpunan pasangan tak-terurutyang berbeda yang disebut sisi.


(23)

2.3.2 Graf Tak-Berarah (Undirected Graph)

Graf tak-berarah yaitu graf yang sisinya tidak mempunyai orientasi arah. Pada graf tak-berarah, urutan pasangan simpul yang dihubungkan oleh sisi tidak diperhatiakan. Jadi, (u, v) = (v, u) adalah sisi yang sama.

2.3.3 Graf Berbobot

Bobot pada setiap sisi dapat berbeda-beda bergantung pada masalah yang dimodelkan dengan graf. Bobot dapt menyatakan jarak antara dua buah kota, biaya perjalanan antara dua buah kota, waktu tempuh (message) dari sebauh simpul komunikasi ke simpul komunikasi lain (dalam jaringan komputer), ongkos produksi, dan sebagainnya.

Istilah lain yang sering dikaitkan dengan graf berbobot adalah graf berlabel. Namun graf berlabel sesungguhnya lebih luas lagi definisinya. Label tidak hanya diberikan pada sisi, tetapi juga pada simpul. Sisi diberi label berupa bilangan tak negatif, sedangkan simpul diberi label berupa data lain. Misalnya pada graf yang memodelkan kota-kota, simpul diberi nama kota-kota, sedangkan label pada sisi menyatakan jarak antara kota-kota.


(24)

11

2.4 Pohon(Tree)

Graf terhubung yang tidak mengandung sirkuit disebut pohon. Diantara sekian banyak konsep dalam teori graf, konsep pohon (tree)mungkin merupakan konsep yang paling penting, karena terapannya yang luas dalam berbagai ilmu komputer, yang telah mengkaji pohon secara intensif sebagai objek matematika.

Dalam kehidupan sehari-hari, orang telah lama menggunakan pohon untuk menggambarkan hirarkhi. Misalnya, pohon silsilah keluarga, struktur organisasi, organisasi pertandingan, dan lain-lain. Para ahli bahasa menggunakan pohon untuk menguraikan kalimat, yang disebut pohon parsing (parse tree).

2.5 Pohon Merentang

Misalkan G = (V, E) adalah graf tak-berarah terhubung yang bukan pohon, yang berarti di G terdapat beberapa sirkuit. G dapat diubah menjadi pohon T = (V1, E1 ) dengan cara memutuskan sirkuit-sirkuit yang ada. Caranya, mulamula dipilih sebuah sirkuit, lalu hapus satu buah sisi dari sirkuit ini. G akan tetap terhubung dan jumlah sirkuitnya berkurang satu. Bila proses ini dilakukan berulang-ulang sampai semua sirkuit G hilang, maka G menjadi sebuah pohon T, yang dinamakan pohon merentang(spanning tree).


(25)

G T1 T2 T3 T4

Gambar 2.1Graf lengkap G dan empat buah pohon merentangnya, T1, T2, T3, dan T4

Pohon merentang juga memainkan peranan penting dalam jaringan komputer. Jaringan komputer dapat dimodelkan sebagai sebuah graf. Simpul pada graf dapat menyatukan suatu terminal komputer (work station) atau suatu router (router adalah komputer yang difungsikan untuk meneruskan data dari suatu simpul komunikasi ke simpul komunikasi lain). Jika sebuah komputer mengirim pesan atau data ke komputer lain (melalui router), maka komputer tersebut mengirimkannya ke seluruh simpul-simpul di jaringan. Setiap pesan yang sampai ke suatu router akan diteruskan ke satu atau lebih router lainnya. Pesan yang telah sampai ke suatu router diharapkan tidak pernah kembali diterima oleh router tersebut. Tetapi router-router pada jaringan umumnya membentuk sirkuit (atau cycle atau loop), maka penerima pesan yang sama lebih dari sekali pasti terjadi. Untuk mengatasi hal ini, maka algoritma jaringan memebentuk pohon merentang di dalam graf sehingga antara sepasang simpul router hanya ada suatu lintasan tunggal dan simpul-simpul router tidak pernah menerima pesan yang sama lebih dari sekali. Metode penyebaran pesan (routing) seperti ini dinamakan IP Multicasting.


(26)

13

2.6 Graf Berlabel

Hubungan antara titik-titik dalam graf kadang-kadang perlu diperjelas. Hubungannya tidak cukup hanya menunjukkan titik-titik mana yang berhubungan langsung, tetapi juga seberapa kuatkah hubungan itu. Sebagai contoh, andaikata suatu graf menyatakan “peta” suatu daerah. Titik-titik graf menyatakan kota-kota di daerah tersebut. Garis-garis dalam graf menyatakan jalan yang menghubungkan kota-kota tersebut. Informasi tentang peta daerah sering kali perlu diperjelas dengan mencantumkan juga jarak (yang dinyatakan dengan angka pada garisnya) antara 2 kota yang berhubungan. Informasi tentang jarak itu dibutuhkan karena dalam graf, letak titik dan panjang garisnyatidak menyatakan jarak 2 kota yang sebenarnya seperti halnya dengan peta. Jadi, setiap garis dalam graf berhubungan dengan suatu label yang menyatakan suatu bobot garis tersebut.Label suatu garis dapat dapat diberikan pada graf berarah maupun tidak berarah. Jika diberikan graf tidak berarah, maka grafnya disebut graf berlabel. Sedangkan jika diberikan pada graf berararh, maka grafnya disebut graf berarah berlabel.

2.7 Pohon Merentang Minimum

Jika G adalah graf berbobot, maka bobot pohon merentang T dari G di definiskan sebagai jumlah bobot semua sisi di T. Pohon merentang yang berbeda mempunyai bobot yang berbeda pula. Di antara semua pohon merentang di G, pohon merentang yang berbobot minimum dinamakan pohon merentang minimum(minimum spanning tree) merupakan pohon merentang yang paling penting. Pohon merentang


(27)

minimum mempunyai terapan yang luas dalam praktek. Misalkan Pemerintah akan membangun jalur kereta api yang menghubungkan sejumlah kota, membangun jalur rel kereta api biaya nya mahal, karena itu pembangunan jalur ini tidak perlu menghubungkan langsung dua buah kota, tetapi cukup membangun jalur kereta seperti pohon merentang. Karena di dalam graf mungkin saja terdapat lebih dari satu pohon merentang, harus dicari pohon merentang yang mempunyai jumlah jarak terpendek, dengan kata lain harus dicari pohon merentang minimum.

d

2.8 Aplikasi Minimum Spanning Tree

Aplikasi yang sering dipakai dalam graf berlabel adalah mencari pohon rentang dengan total bobot seminimum mungkin atau disebut pohon merentang minimum.

15 20

30 55

5

35 10

50 5 40 20

10 15 b e f g h c

c h

e

f

g 25

25 30

a

45

Gambar 2.2 (a) Graf yang menyatakan jaringan jalur rel kereta api. Bobot pada tiap sisi menyatakan panjang rel kereta api (x 100 km)


(28)

15

jalur yang menghubungkan 2 kota secara langsung tidak perlu dibuat karena kota-kota tersebut tetap dapat teraliri listrik secara tidak langsung, yaitu dengan melalui kota lain sedemikian hingga total biaya pemasangan jaringan listrik seminimum mungkin. Atau dengan kata lain, mencari pohon rentang dengan total bobot seminimum mungkin. Cara yang paling sederhana adalah dengan mendaftarkan semua pohon rentang yang mungkin dibuat dan menghitung total bobot tiap-tiap pohon rentang. Selanjutnya dipilih pohon rentang dengan total bobot yang paling kecil. Metode itu tidak efisien, terutama pada graf yang cukup besar karena terdapat banyak sekali pohon rentang yang dapat dibuat.

2.9 Algoritma Kruskal

Algoritma Kruskal adalah algoritma dalam teori graph yang menemukan suatu pohon rentang minimum untuk terhubung dalam graf berbobot . Ini berarti menemukan subset dari tepi yang membentuk sebuah pohon yang mencakup setiap titik , di mana berat total dari semua tepi di atas pohon diminimalkan.. Jika grafik tidak terhubung, maka menemukan hutan rentang minimum (pohon rentang minimum untuk setiap komponen terhubung ). Algoritma Kruskal adalah contoh dari algoritma rakus . Algoritma ini pertama kali muncul dalam Prosiding American Mathematical Society , hal 1956. Algoritma lain untuk masalah ini termasuk Algoritma Prim , Reverse-Hapus algoritma , dan algoritma Borůvka's.

Pada Algoritma Kruskal, sisi-sisi di dalam graf diurut terlebih dahulu berdasarkan bobotnya dari kecil ke besar. Sisi yang dimasukkan ke dalam himpunan


(29)

T adalah sisi graf G sedemikian sehingga T adalah pohon. Pada keadaan awal, sisi-sisi sudah diurut berdasarkan bobot membentuk hutan(forest), masing-masing pohon di hutan hanya berupa satu buah simpul. Hutan tersebut dinamakan hutan merentang (spanning forest). Sisi dari graf G ditambahkan ke T jika ia tidak membentuk siklus di T. Pohon adalah graf tak-berarah terhubung yang tidak mengandung sirkuit. Sisi-sisi dari graf sudah diurut menaik berdasarkan bobotnya, yaitu :

1. T masih kosong

2. Pilih sisi

e

dengan bobot minimum yang tidak membentuk sirkuit di T. Masukkan

e

ke dalam T.

3. Ulangi langkah 2 sebanyak n-1 kali.

Contoh 2.1

Carilah pohon merentang minimumnya dengan algoritma Kruskal.

Penyelesaian:

Sisi-sisi graf diurut menaik berdasarkan bobotnya:

Langkah-langkah pembentukan pohon merentang minimum diperlihatkan pada Tabel 2.1.

Bobot pohon merentang minimum ini adalah 10 + 25 + 15 + 20 + 25 = 105

Sisi (1,2) (3,6) (4,6) (2,6) (1,4) (3,5) (2,5) (1,5) (2,3) (5,6)


(30)

17

Langkah Sisi Bobot Pohon Merentang

0

1 (1,2) 10

2 (3,6) 15

3 (4,6) 20

4 (2,6) 25

5 (1,4) 30

6 (3,5) 35

Tabel 2.1 Pembentukan pohon merentang minimum dengan algoritma Kruskal

1 2 3 4 5 6

1 2

1 2 3 4 5

6

1 2 3 4

5

6

1 2 3 5

4 6

1 2 3

5 4

6 ditolak


(31)

Ada satu lagi algoritma yang membangun pohon merentang minimum yang hampir mirip dengan algoritma Kruskal yaitu algoritma Prim. Dibawah ini akan dijelaskan tentang algoritma Prim.

2.10 Algoritma Prim

Misalkan T adalah pohon merentang yang sisi-sisinya diambil dari graf G. Algoritma Prim membentuk pohon merentang minimum langkah per langkah. Pada setiap langkah kita mengambil sisi e dari graf G yang mempunyai bobot minimum dan bersisian dengan simpul-simpul di dalam T tetapi etidak membentuk sirkuit di dalam T. Cara mencari Algoritma Prim :

1. Ambil sisi dari graf G yang berbobot minimum, masukkan ke dalam T.

2. Pilih sisi e yang mempunyai bobot minimum berisikan simpul di T, tetapi e tidak membentuk sirkuit di T. Masukkan e ke dalam T.

3. Ulangi 2 sebanyak n-2 kali.

2.11 Pengertian Komputer

Istilah komputer (computer) diambil dari bahasa latin computare yang berarti menghitung (to compute). Dengan demikian komputer dapat diartikan sebagai alat hitung. Komputer bukan sekedar mesin hitung tetapi komputer mempunyai kemampuan yang dapat membantu manusia dalam menyelesaikan pekerjaan.


(32)

19

Komputer dapat melakukan berbagai macam pekerjaan sesuai dengan program yang diberikan. Program adalah sekumpulan instruksi atau perintah terperinci yang sudah dipersiapkan agar komputer dapat melakukan fungsinya dengan cara yang sudah ditentukan. Komputer adalah alat elektronik yang mampu melakukan beberapa pekerjaan diantaranya:

a. Menerima masukan data

b. Memproses masukan sesuai dengan programnya.

c. Menyimpan perintah-perintah dan hasil dari pengolahan d. Menyediakan keluaran dalam bentuk informasi

2.12 Sejarah Singkat C

Bahasa C merupakan bahasa pemrograman tingkat menengah. Pada tahun 1972 bahasa C pertama kali dirancang oleh Dennis M. Ritchie di Bell Laboratories. Pada tahun 1978 Dennis dan Brian W. Kerninghan mempublikasikan bahasa C melalui The C ProgramingLanguage sehingga bahasa C dikenal banyak orang. Pada tahun 1989 akhirnya bahasa C distandarisasi ANSI (American National Standard Institude) sehingga menjadi bahasa pemrograman standar hingga saat ini. Kompilernya dapat dibuat pada platform yang berbeda.

2.13 Mengenal Pemrograman

Program adalah sederetan intruksi yang diberikan kepada komputer dalam sebuah bahasa pemrograman untuk melaksanakan tugas-tugas yang diperlukan dalam


(33)

menyelesaikan sebuah persoalan. Agar komputer dapat melaksanakan tugas tersebut, sesorang yang membuat program (disebut programmer) hendaklah mengetahui langkah-langkah yang diperlukan untuk memperoleh penyelesaian yang diinginkan. Langkah-langkah untuk menyelesaikan suatu persoalan ini disebut algoritma. Instruksi yang ditulis dalam bahasa pemrograman itu disebut source code atau source program, instruksi tersebut yang dapat dibaca oleh manusia(human-readable).

2.14 Pembahasan Bahasa Pemrograman C

Dibawah ini adalah contoh sederhana program menggunakan bahasa C, beserta penjelasan kode program :

1. Pada baris pertama terdapat #include <stdio.h> Bagian ini disebut Preprocessor Directive, yang artinya bagian yang digunakan untuk mengikut-sertakan berkas-berkas file header/library yang berisi fungsi-fungsi yang ada pada program yang akan dibuat pada baris-baris bawahnya. File yang diikutsertakan bernama stdio.h yang terletak di suatu direktori pada instalasi DevC++.

#include <stdio.h> int main(){

printf(“Selamat datang di DevC++”); getch();


(34)

21

2. Pada baris selanjutnya terdapat int main(). Ini merupakan judul fungsi utama program yang bernama fungsi main() yang mengembalikan nilai berupa integer(bilangan bulat negatif ataupun positif). Mengenai tipe data integer akan dibahas di bagian-bagian berikutnya. Fungsi main() ini adalah fungsi yang wajib ada di setiap kode program yang ditulis menggunakan bahasa C. Tanda { merupakan tanda awal program.

3. Pada baris berikutnya terdapat printf(“Selamat Datang di Dev C++”);. Hal ini merupakan perintah untuk menampilkan output dilayar monitor berupa tulisan “Selamat Datang di Dev C++” (tanpa tanda kutip). Perintah untuk menampilkan tulisan ke layar disebut dengan fungsi printf ( ) yang menerima masukan berupa kalimat yang ingin ditampilkan. Tanda titik koma harus selalu dituliskan untuk member tanda akhir dari suatu baris perintah.

4. Pada baris berikutnya terdapat getch ( );, digunakan untuk menghentikan layar tampilan sejenak sampaipengguna menekan tombol yanga ada pada keyboard. Jadi fungsinya adalah menunggu penekanan tombol tertentu dan kemudian program akan mati (terminated).

5. Baris terakhir berisi } yang berarti akhir dari program.

Bahasa C disebut juga bahasa pemrograman tersturktur, fungsioanal karena strukturnya menggunakan fungsi-fungsi sebagai bagian (subroutine/module). Fungsi selain fungsi utama disebut subroutine/module dan ditulis setelah (library). Jika fungsi-fungsi diletakkan pada file pustaka (library) dan akan dipakai di suatu program, maka nama file header-nya harus dilibatkan dalam program menggunakan preprocessordirective #include.


(35)

Suatu program C minimal harus memiliki fungsi main(). Tanpa fungsi itu maka program C tidak akan dapat dieksekusi, walau dapat dikompilasi. Struktur program bahasa C adalah sebagai berikut :

<preposessor directive> Void main ( ) {

<statement>; <statement>; <statement>; } <preposessor directive> int main(){ <statement>; <statement>; <statement>; } Gambar 2.3 Struktur Program C

Statement adalah suatu baris intruksi/perintah tertentu. Statement menyebabkan suatu tindakan dilakukan oleh komputer. Sedangkan preprossesor directive adalah bagian yang berisi pengikutsertaan file atau berkas-berkas fungsi maupun pendefinisian konstanta atau fungsi makro tertentu.

Tabel 2.2Tabel contoh statement

Intruksi/Statement Tindakan

A = b*c ; Menghitung

printf(“Antonius Rahmat C”); Menampilkan literal string scanf(“%f”,&Celcius); Menerima input data If(N<0)printf(“negatif”); Mengendalikan proses


(36)

23

Suatu program harus menyimpan nlai-nilai tertentu pada memorinya untuk digunakan selama pemrosesan komputasi program. Ukuran tempat penyimpanan sangat bergantung pada besar memori yang disediakan oleh kompiler program tersebut. Bahasa C juga harus menyimpan nilai-nilai yang dimasukkan pengguna agar bias diroses lebih lanjut didalam memori.Untuk menyimpan nilai-nilai itu dibutuhkan suatu penamaan yang unik agar tidak terjadi kerancuan dengan program lain yang sama-sama berjalan diatas sistem operasi yang ada.

Tabel 2.3 Keywords pada C

auto Double Int switch

break Else Long typedef

Case Enum Register union

Char Extern Return unsigned

Const Float Short Void

continue For Signed volatile

default Goto Sizeof while

Do If Static struct

Semua identifier digunakan untuk menyimpan data pada memori komputer untuk keperluaan komputasi. Penyimpanan data tentu tidak bisa dilakukan tanpa mengetahui secara pasti seberapa kemampuan suatu identifier untuk menyimpan data. Jenis dan ukurannya disebut tipe data. Tipe data diatur dan dikelompokkan menjadi dua, yaitu tipe data numerik dan tipe data non-numerik.


(37)

Tipe data ini mampu menampung semua nilai numeric mulai dari bilangan bulat dan pecahan. Tipe data numerik dibagi menjadi beberapa jenis. Nama tipe data numerik yang dikenal di dalam bahasa C, yaitu tipe data bilangan bulat dan tipe data pecahan.

Tabel 2.4Ukuran tipe data bilangan bulat

Type Length Range

short int 16 bits -32,768 to 32, 767

Unsigned int 32 bits 0 to 4,294,967,295

Int 32 bits -2,147,483,648 to 2,147,483,648

unsigned long 32 bits 0 to 4,294,967,295

Enum 16 bits -2,147,483,648 to 2,147,483,648

Long 32 bits -2,147,483,648 to 2,147,483,648

Tabel 2.5 Tipe data bilangan pecahan

Type Length Range

Float 32 bits 3.4 x 10-38 to 3.4 x 10+38

Double 64 bits 1.7 x 10-308 to 1.7 x 10+308

long double 64 bits 3.4 x 10-4932 to 3.4 x 10+4932 2. Tipe data non-numerik

Tipe data non-numerik mampu menampung semua nilai non-numerik, misalnya karakter dan pointer.


(38)

25

Near (pointer) 32 bits Not applicable Far (pointer) 32 bits Not applicable

Unsigned char 8 bits 0 to 255

Char 8 bits -128 to 127

Yang perlu diperhatikan mengenai tipe data adalah nama dan range (ukuran) yang bias ditampung oleh tipe data tersebut. Hal ini sangat penting mengigat ukuran sangat menentukan seberapa nilai yang bias dimasukkan ke dalam tipe data tersebut. Misalnya, tipe data char tidak akan dapat menerima nilai lebih dari 127. Jika dipaksa untuk dimasuki nilai 130 misalnya, maka nilai yang disimpan akan menjadi tidak sesuai lagi sehingga nilainnya tidak bias diprediksi. Fungsi yang digunakan untuk mengetahui ukuran suatu tipe data tertentu adalah fungsi

sizeoff(<namatipedata>). Misalnya: sizeoff(int) akan menghasilkan 32.

2.14.2 Escape Character pada Bahasa C

Pada bahasa c terdapat beberapa karakter khusus yang diperlakukan secara spesial untuk tujuan tertentu sesuai dengan fungsi karakter khusus tersebut. Karakter khusus sering disebut escape character, yang diawali dengan karakter “\” tanpa tanda kutip. Beberapa karakter khusus pada bahasa C adalah :


(39)

Tabel 2.7 Tabel Karakter Khusus

Karakter Escape Arti

\a Bunyi bel (speaker komputer) \b Mundur satu spasi (backspace)

\f Ganti halaman (from feed) \n Ganti baris baru (new line)

\r Ke kolom pertama baris yang sama (carriage return) \t Tabulasi horizontal

\v Tabulasi vertikal \0 Nilai kosong (null)

\’ Karakter petik tunggal \” Karakter petik ganda

\\ Garis miring terbaik (back slash)

2.15 Dev C++

DEV C++ adalah software opensource yang banyak digunakan oleh para programmer untuk membuat program dengan bahasa pemograman C++ atau C. Banyak yang memilih DEV C++ karena ukurannya yang kecil dan ringan sehingga tidak memakan banyak space (ruang) pada hardisk maupun memori komputer. Meskipun Software DEV C++ ukurannya kecil, namun DEV C++ sudah dilengkapi dengan compiler sekaligus debugger sebagai beberapa fitur dalam program yang sangat diperlukan dalam membuat program.


(40)

27

Gambar 2.4Tampilan Awal Dev C++

Untuk membuat halaman lembar kerja baru di Dev C++ baru caranya adalah sebagai berikut:

1. Pilih menu File 2. Kemudian klik New

3. Pilih dan klik Source File hingga muncul file baru yang siap ditulisi kode program C.


(41)

Gambar 2.5 Tampilan membuat project baru

Dan untuk membuat project baru yaitu dengan cara sebagai berikut : 1. Pilih menu file

2. Kemudian klik New

3. Klik Project dan kemudian akan keluar window seperti dibawah ini, lalu klik console Application dan ok.


(42)

29

Gambar 2.6Cara Menyimpan Program

Setelah anda selesai membuat kode programnya, simpanlah program tersebut dengan langkah-langkah berikut ini :

1. Pilih menu File

2. KlikSave dan pilihlah tempat penyimpanan file yang anda inginkan dan beri nama misalnya contoh.c.

3. Untuk menjalankan program yang sudah di buat atau di simpan yaitu tekan F9 atau klik menu execute lalu pilih compile.

Agar kita tidak kesulitan dalam memahami serta menggunakan kontrol - kontrol atau komponen – komponen yang terdapat dalam Microsoft Visual C++ 6.0. Serta kita tidak akan mengalami kesulitan yang berarti untuk membuat suatu Aplikasi yang baru nanti, untuk itu lihat gambar dibawah ini:


(43)

Gambar 2.7Jendela area kerja Dev C++

Beberapa jendela area kerja Dev C++ :

1. Title Bar

Baris judul yang akan menampilkan file project serta nama dokumen yang sedang aktif.

2. Menu Bar

Baris menu yang terdiri dari 10 menu utama, masing - masing memiliki sub menu dan perintah lengkap dengan shorcut key.

3. Standar Toolbar

Baris ini mempunyai fungsi yang sama dengan Tool Standar pada umumnya seperti fungsi untuk menyimpan, mengcopy, menambah menu tampilan program,


(44)

31

4. Toolbar Builde

Merupakan toolbar yang berfungsi untuk menjalankan atau mengexecute program yang telah Anda buat.

5. Workspace Pane

Lembar yang berfungsi untuk melihat sub - sub project yang telah kita bangun,. Lembar ini memiliki 3 bagian untuk melihat sub - sub project yaitu Class View, Resources View, File View.

6. Output Pane

Lembar ini berfungsi untuk menampilkan informasi kompiler dari program yang telah Anda buat, dan menampilkan setiap kesalahan dalam pembuatan Aplikasi.

7. Kontrol MFC (Microsoft Foundation Class)

Toolbar yang berisi semua komponen - komponen yang memiliki banyak fungsi untuk membangun suatu aplikasi pemrograman Visual.


(45)

BAB 3

PERANCANGAN SISTEM

3.1 Perancangan Sistem

Pada bab perancangan sistem ini akan dibahas mengenai metode, rancangan sistem yang digunakan dan langkah-langkah yang dilakukan dalam pembuatan program menentukan Minimum Spanning Tree menggunakan algoritma Kruskal dengan bahasa pemrograman C agar dapat dirancang dengan sederhana agar lebih mudah dimengerti.

3.2 Pemodelan Aplikasi

Diagram alir adalah diagram yang menggambarkan bagaimana jalankan program mulai dari awal hingga akhir. Setiap diagram alir harus mempunyai titik awal dan titik akhir (start and stop). Diagram alir dibentuk dengan memanfaatkan simbol-simbol tertentu. Pembentukan diagram alir umumnya sebagai bahan mentah sebelum


(46)

33

program menentukan jarak terpendek menggunakan algoritma djikstra dengan bahasa pemrograman C adalah sebagai berikut ini :

Gambar 3.1 Diagram Alir Perancangan Menentukan Minimum Spanning Tree Menggunkan AlgoritmaKruskal Dengan Bahasa Pemroograman C

Analisis dan perancangan sistem

Mengimplementasikan sistem yang sudah dirancang

Menguji coba sistem (program) yang telah dibuat

Evaluasi dan analisis hasil uji coba sistem


(47)

3.3 Flowchart

Flowchart merupakan gambar atau bagan yang memperlihatkan urutan dan hubungan antar proses beserta instruksinya. Gambaran ini dinyatakan dengan simbol. Dengan demikian setiap simbol menggambarkan proses tertentu. Sedangkan hubungan antar proses digambarkan dengan garis penghubung.

Flowchart ini merupakan langkah awal pembuatan program. Dengan adanya flowchart urutan proses kegiatan menjadi lebih jelas. Jika ada penambahan proses maka dapat dilakukan lebih mudah. Setelah flowchart selesai disusun, selanjutnya pemrogram (programmer) menerjemahkannya ke bentuk program dengan bahasa pemrograman.

Tabel 3.1 Simbol-simbol Flowchart

No Simbol Fungsi

1 Terminator, untuk memulai dan mengakhiri

suatu program.

2 Process, suatu simbol yang menunjukkan

pengolahan yang dilakukan oleh komputer.

3 Input/Output, untuk memasukkan data

maupun menunjukkan hasil dari suatu proses.


(48)

35

4 Decision, suatu kondisi yang akan

menghasilkan beberapa kemungkinan jawaban atau pilihan.

5 Preparation, untuk mempersiapkan penyim-

panan yang akan digunakan sebagai tempat pengolahan data di dalam storage.

6 Connector, suatu simbol untuk masuk dan

keluarnya proses dalam halaman yang sama.

7 Offline Connector, suatu simbol untuk

masuk dan keluarnya proses dalam halaman yang berbeda.

8 Document, untuk mencetak keluaran dalam

bentuk

9 Arus atau flow, untuk menghubungkan

antara simbol yang satu dengan simbol yang lain dan menyatakan jalannya arus atau proses.

10 Manual Innput, untuk memasukkan data

secara manual dengan menggunakan online keyboard.


(49)

11 Display, untuk menyatakan output yang digunakan yaitu layar (monitor), plotter, printer dan sebagainya.

12 Predefine Process, untuk melaksanakan /

pelaksanaan suatu bagian (sub-program) prosedur.

3.4 Struktur Kontrol Percabangan

Di dalam pemrograman terstruktur, semua perintah akan dikerjakan secara sekuensial dari atas ke bawah secara berurutan, sehingga disebut aliran sequence. Namun ada kalanya kita harus memilih alternatif-alternatif yang ada sesuai dengan kondisi yang ada. Struktur kontrol percabangan merupakan hal yang penting pada pemrograman karena dengan menggunakan struktur kontrol percabangan maka program dapat bertingkah laku secara fleksibel karena seolah-olah program dapat “memilih” kemungkinan-kemungkinan yang dapat terjadi. Dibawah ini akan dibahas beberapa struktur kontrol percabangan.

3.4.1 Pola IF

Pola ini merupakan bentuk pola yang paling sederhana karena pemilihan yang dilakukan hanya satu saja. Jika kondisi benar maka perintah akan dikerjakan. Jadi


(50)

37

yang diperiksa salah. Perintah ini tidak akan mengerjakan apa-apa dan berlanjut ke baris perintah berikutnya. Pada kasus-kasus tertentu pola ini sangat berguna. Sintaks : IF(<kondisi>) <statement_jika_benar>;

3.4.2 Bentuk IF ELSE

Pada bentuk IF ELSE, pemeriksaan kondisi akan dilakukan seperti pada perintah IF sebelumnya. Jika kondisi benar maka perintah akan dijalankan. Namun bentuk ini juga memberi alternatif lain, yaitu jika kondisi salah, maka bagian ELSE akan dikerjakan. Jadi bentuk ini pasti akan mengerjakan salah satu bagian dari perintah IF atau ELSE, baru kemudian dilanjutkan ke baris perintah berikutnya.

Sintaks :

IF(<kondisi>) <statement_jika_benar>; ELSE <statement_jika_salah>;

Y T

Kondisi?

Statement lain

Statement true


(51)

3.5 Struktrur Kontrol Perulangan

Struktur kontrol perulangan digunakan untuk mengulangi satu atau lebih algoritma (perintah) tertentu yang dikehendaki programmer guna menyelesaikan masalah tertentu. Dengan menggunakan perulangan, kode program yang dibuat dapat menjadi lebih singkat, karena beberapa perintah yang sama tidak perlu ditulis berulang-ulang. Struktur kontrol perulangan juga digunakan untuk mempermudah pemrograman yang berhubungan dengan algoritma yang berpola. Program yang akan saya buat menggunakan struktur perulangan For. Dibawah ini akan dijelaskan tetntang struktur perulangan For.

Kondisi? Statement true

Statement false

Statement Lain

Y

T


(52)

39

3.5.1 Struktur For()

Karakteristiknya adalah sebagai berikut :

1. Digunakan untuk perulangan yang batasnya sudah diketahui dengan jelas, misalnya 1 sampai 10.

2. Memerlukan 2 buah variabel awal dan akhir perulangan, misalnya counter_awal dan counter_akhir

3. Nilai variabel penghitung akan secara otomatis bertambah atau berkurang tiap kali sebuah pengulangan dilaksanakan.

Bentuk umum :

For (<nilai_awal>; <kondisi>; <penambahan/penurunan>) {

<statement-statement yang akan dijalankan>; }

inisialisasi

kondisi

false

true statement

ubah kondisi


(53)

3.6 Fungsi Main

Fungsi Main merupakan fungsi yang spesial pada bahasa C. Setiap program bahasa C pasti memiliki fungsi main. Sebuah program yang paling sederhana dalam C, agar dapat dieksekusi (run) harus minimal memiliki 1 buah fungsi, yaitu fungsi main(). Tanpa fungsi main< program C dapat dikompilasi tetapi tidak dapat dieksekusi. Fungsi main() sering dideklarasikan dalam 2 bentuk yaitu:

1. int main() 2. void main()

3.6.1 int main()

int main(0 berarti di dalam fungsi main tersebut harus terdapat keyword return di bagian akhir dan mengembalikan nilai bertipe data int. Karena tipe data yang mendahului fungsi main() diatas dideklarasikan dengan int. Jika sebuah program C dieksekusi maka status eksekusi programnya akan dikembalikan.

3.6.2 void main()

Void main() berarti fungsi yang void dan tidak mengembalikan nilai status program sehingga nilai status program tidak dapat diketahui. Biasanya dipakai pada program C di lingkungan sistem operasi Windows.


(54)

41

3.7 Pointer

Pointer adalah suatu identifier penunjuk, berisi nilai yang menunjuk alamat suatu lokasi memori tertentu. Jadi pointer tidak berisi nilai data, melainkan berisi suatu alamat memori. Lokasi memori tersebut bisa diwakili sebuah variabel atau juga alamat memori secara langsung. Pointer dideklarasikan dengan cara :

tipe_data *nama_variabel_pointer;

variabel pointer dapat dideklarasikan dengan tipe data apa pun. Pendeklarasian variabel pointer dengan tipe data tertentu digunakan untuk menyimpan alamat memori tertentu, bukan untuk berisi nilai tertentu. Misalnnya jika suatu variabel pointer dideklarasikan dengan tipe char, berarti variabel pointer tersebut hanya bisa digunakan untuk menunjuk alamat memori yang berisi nilai bertipe char.

3.8 Array

Array adalah suatu tipe data terstruktur yang berupa sejumlah data sejenis (bertipe data sama) yang jumlahnya tetap dan diberi suatu nama tertentu. Elemen-elemen array tersusun secara sekuensial di dalam memori sehingga memiliki alamat yang berdekatan. Array dapat berupa array 1 dimensi , 2 dimensi, bahkan n-dimensi. Array digunakan untuk menyimpan data yang dimasukkan, masing-masing ke memori komputer. Jadi jumlah datanya banyak namun satu jenis.


(55)

3.8.1 Array 1 Dimensi

Pengaksesan elemen array dapat dilakukan berurutan atau random berdasarkan indeks tertentu secara langsung. Pengisian dan pengambilan nilai indeks tertentu dapat dilakukan dengan mengeset nilai atau menampilkan nilai pada indeks yang dimaksud. Bentuk umum deklarasi array satu dimensi :

tipe_data nama_var_array[ukuran];

Dimana :

tipe_data : menyatakan jenis tipe data elemen larik(int, char, float, dan lain-lain)

nama_var_array : menyatakan nama variabel yang dipakai ukuran : menunjukkan jumlah maksimal elemen larik

3.8.2 Array 2 Dimensi

Array dua dimensi seringkali digambarkan/dianalogikan sebagai sebuah matriks atau bentuk grid. Jika array berdimensi satu hanya terdiri atas 1 baris dan banyak kolom, array berdimensi dua terdiri atas banyak baris dan banyak kolom yang bertipe sama. Deklarasi array dua dimensi :


(56)

43

Start

I = 1

I < n

J =1

J < n

Cost[i][j] = 999

Y

N

min = 999

Cost [i] [j] < min

Min = cost[i][j]

Mincost +=min

End N


(57)

3.9 Perancangan Tampilan

3.9.1 Menu Utama

Tampilan menu utama adalah menu yang paling penting karena terhubung kepada sebuah program. Tampilannya yang dilengkapi dengan berbagai tombol, dimana jika di klik akan menuju kepada bagian yang telah di link.

Gambar 3.6 Kerangka Tampilan Halaman Program

3.9.2 Compile dan Run

Untuk memeriksa apakah program yang telah ditulis itu bisa dimengerti oleh kompiler bahasa C, maka perlu dilakukan langkah compile dengan cara klik menu

compile atau menekan Ctr+F9. Bisa juga klik tombol compile & run atau

Kode (source code)

program Output


(58)

45

kesalahan penulisan program terjadi, perbaiki program kemudian compile ulang sehingga muncul keterangan bahwa compile berhasil/sukses.

3.9.3 Command Prompt

Command prompt merupakan user interface berbasis text yang dipergunakan untuk mengeksekusi baris perintah yang dimasukkan pada sistem operasi windows. Compiler yaitu menerjemahkan source code yang telah dibuat menjadi assembly code (bahasa mesin).


(59)

BAB 4

IMPLEMENTASI SISTEM

4.1 Pengertian Implementasi Sistem

Defenisi Implementasi menurut Kadir, A dalam bukunya “Perancangan Sistem Informasi” Andi , Yogyakarta, 2003.“Implementasi adalah kegiatan yang dilakukan untuk menguji data dan menerapkan sistem yang diperoleh dari kegiatan seleksi”.

Implementasi merupakan salah satu unsur pertahapan dari keseluruhan pembangunan sistem komputerisasi, dan unsur yang harus dipertimbangkan dalam

pembangunan sistem komputerisasi yaitu masalah perangkat lunak (software), karena

perangkat lunak yang digunakan haruslah sesuai dengan masalah yang akan

diselesaikan, disamping masalah perangkat keras (hardware) itu sendiri.


(60)

47

Tujuan implementasi sistem adalah untuk menjelaskan tentang manual modul kepada semua user yang akan menggunakan sistem. Sehingga user tersebut dapat merespon apa yang ditampilkan di sistem dan memberikan masukan kepada pembuat sistem untuk dilakukan perbaikan agar sistem lebih baik lagi.

4.3 Kebutuhan Sistem

Untuk menjalankan sistem yang telah dirancang, dibutuhkan beberapa komponen, antara lain:

4.3.1 Perangkat Keras (Hardware)

Hardware merupakan perangkat keras yang mutlak harus digunakan dalam sebuah perangkat lunak, tanpa adanya hardware segala jenis kegiatan yang berhubungan dengan komputer tidak dapat dilaksanakan. Perangkat keras (hardware) komputer banyak kegunaannya serta jenisnya. Pada bab ini tidak dijelaskan secara detail mengenai hardware, tetapi hanya akan dijelaskan spesifikasi hardware yang digunakan.


(61)

Seperti halnya hardware, software komputer juga mutlak harus digunakan untuk pembuatan perangkat lunak bantu dalam membuat bahasa pemrograman C menggunakan Dev C++ dan command prompt sebagai compiler untuk menerjemahkan source code.

4.3.3 Brainware

Brainware adalah semua pihak yang bertanggung jawab dalam pengembangan informasi, pemrosesan dan penggunaan keluaran informasi. Brainware dalam sistem ini terbagi atas:

a) Sistem analis: orang yang menganalisa sistem dengan mempelajari masalah-masalah yang timbul dan menentukan kebutuhan-kebutuhan pemakai dan mengidentifikasi pemecahan yang beralasan.

b) Programmer: orang yang membuat sistem dengan menggunakan salah satu bahasa pemrograman yang dikuasainya.

c) Operator: orang yang menggunakan dan memanfaatkan sistem

4.4 Tampilan Akhir Program

Berikut gambaran dari tampilan akhir Program Menentukan Minimum Spanning Tree Menggunakan Bahasa Pemrograman C yang dirancang.


(62)

49


(63)

4.5 Cara Kerja Program

1. Ini adalah contoh gambar graph yang akan dicari minimum spanning tree nya agar bisa terhubung ke semua titik tanpa harus membentuk loop.

Gambar 4.2 Graph Berlabel

2. Masukkan banyak verteks atau simpul dari graph yang ingin dicari Minimum Spanning Tree nya.

Gambar 4.3 Tampilan awal masukkan verteks

3. Setelah di Isi banyak verteks nya berapa, kemudian akan muncul Input Matriks

1 2

3

4

5

6 10

50

45 30

20

15 35

55 25


(64)

51

Gambar 4.4 Input matriks Adjasensi

4. Kemudian akan muncul Minimum spanning tree dengan Total Biaya Minimum

5. Sisi-sisi graf diurut menaik berdasarkan bobot, Ikuti Langkah diatas maka akan dihasilkan gambar Minimum Spanning Tree seperti dibawah ini


(65)

Gambar4.6 Hasil Minimum Spanning Tree

1 2

3 4

5

6 10

45

20

15 35

55 25


(66)

53

BAB 5

KESIMPULAN DAN SARAN

5.1 Kesimpulan

Dari hasil pengamatan penulis maka dapat disimpulkan bahwa :

1. Dengan adanya program sederhana ini dapat membantu menentukan minimum spanning tree pada suatu graph dengan lebih cepat.

2. Berdasarkan pengalaman penulis, Bahasa C adalah perangkat lunak yang tampilannya sederhana dan mudah digunakan terutama bagi pemula, serta bahasa pemrograman yang sangat mendasar.

3. Program ini hanya mencari Minimum Spanning Tree dan Total biaya Minimum. Dengan memasukkan Matriks Adjasensi maka hasil nya akan didapat.


(67)

5.2 Saran

Dengan selesainya program Menentukan Minimum Spanning Tree Menggunakan Algoritma Kruskal dengan Bahasa Pemrograman C hendaknya dapat dimanfaatkan untuk mencari minimum spanning tree dengan bobot yang paling kecil dan total biaya minimum. Bagi yang ingin mengembangkan program ini hendaknya melengkapi dan membuatnya dengan bahasa pemrograman lainnya.


(68)

55

DAFTAR PUSTAKA

Hartono, Jogiyanto. 2000. Konsep Dasar Pemrograman Bahasa C. Andi : Yogyakarta.

Munir, Rinaldi. 2010. Matematika Diskrit. Informatika : Bandung

Siang, Jong Jek. Matematika Diskrit dan Aplikasinya pada Ilmu Komputer, Ed IV, Yogyakarta: ANDI

Sitompul, Opim Salim 2011. Pemrograman C di lingkungan linux, Cetakan Kedua, Medan: USU Press

Rachmat, Antonius. 2010. Algoritma Pemrograman dengan Bahasa C Konsep, Teori & Implementasi, Ed I, Yogyakarta: ANDI


(69)

LAMPIRAN #include<stdio.h> #include<conio.h> #include<stdlib.h> int i,j,k,a,b,u,v,n,ne=1; int min,mincost=0,cost[100][100],parent[100]; char pnh=26,pnh1=27,grsH=196,grsV=179; int find(int); int uni(int,int); int main() { system("cls"); printf("\t\t\tTUGAS AKHIR");

printf("\n\n\tAlgoritma Kruskal untuk Mencari Spanning Tree\n\n");

printf("\nInput banyak verteks :"); scanf("%d",&n);

printf("\nInput Matriks Adjasensi dari Graph:\n"); for(i=1; i<=n; i++)

{

for(j=1; j<=n; j++) { scanf("%d",&cost[i][j]); if(cost[i][j]==0) cost[i][j]=999; } }

printf("\nThe edges of Minimum Cost Spanning Tree are :\n\n");

while(ne<n) {

for(i=1,min=999; i<=n; i++) {

for(j=1; j<=n; j++) { if(cost[i][j]<min) { min=cost[i][j]; a=u=i; b=v=j; //u=i; //v=j;


(70)

57 } } } u=find(u); v=find(v); if(uni(u,v)) {

printf("\n%d edge (%d %c%c%c%c %d) =%d\n",ne++,a,pnh1,grsH,grsH,pnh,b,min);

//printf("\n%d %c%c%c %i %c %i

\n",vertexU,grsH,grsH,pnh,vertexV,grsV,bobotTerpilih[bobo t]); mincost +=min; } cost[a][b]=cost[b][a]=999; }

printf("\n\tTotal Biaya Minimum = %d\n",mincost); getch();

}

int find(int i) {

while(parent[i]) i=parent[i]; return i;

}

int uni(int i,int j) { if(i!=j) { parent[j]=i; return 1; } return 0; }


(1)

Gambar4.6 Hasil Minimum Spanning Tree

3 4

5

6 45

20

15 35

55 25


(2)

53

BAB 5

KESIMPULAN DAN SARAN

5.1 Kesimpulan

Dari hasil pengamatan penulis maka dapat disimpulkan bahwa :

1. Dengan adanya program sederhana ini dapat membantu menentukan minimum spanning tree pada suatu graph dengan lebih cepat.

2. Berdasarkan pengalaman penulis, Bahasa C adalah perangkat lunak yang tampilannya sederhana dan mudah digunakan terutama bagi pemula, serta bahasa pemrograman yang sangat mendasar.

3. Program ini hanya mencari Minimum Spanning Tree dan Total biaya Minimum. Dengan memasukkan Matriks Adjasensi maka hasil nya akan didapat.


(3)

Dengan selesainya program Menentukan Minimum Spanning Tree Menggunakan Algoritma Kruskal dengan Bahasa Pemrograman C hendaknya dapat dimanfaatkan untuk mencari minimum spanning tree dengan bobot yang paling kecil dan total biaya minimum. Bagi yang ingin mengembangkan program ini hendaknya melengkapi dan membuatnya dengan bahasa pemrograman lainnya.


(4)

55

DAFTAR PUSTAKA

Hartono, Jogiyanto. 2000. Konsep Dasar Pemrograman Bahasa C. Andi : Yogyakarta.

Munir, Rinaldi. 2010. Matematika Diskrit. Informatika : Bandung

Siang, Jong Jek. Matematika Diskrit dan Aplikasinya pada Ilmu Komputer, Ed IV, Yogyakarta: ANDI

Sitompul, Opim Salim 2011. Pemrograman C di lingkungan linux, Cetakan Kedua, Medan: USU Press

Rachmat, Antonius. 2010. Algoritma Pemrograman dengan Bahasa C Konsep, Teori &Implementasi, Ed I, Yogyakarta: ANDI


(5)

#include<stdio.h> #include<conio.h> #include<stdlib.h> int i,j,k,a,b,u,v,n,ne=1; int min,mincost=0,cost[100][100],parent[100]; char pnh=26,pnh1=27,grsH=196,grsV=179; int find(int); int uni(int,int); int main() { system("cls"); printf("\t\t\tTUGAS AKHIR");

printf("\n\n\tAlgoritma Kruskal untuk Mencari Spanning Tree\n\n");

printf("\nInput banyak verteks :"); scanf("%d",&n);

printf("\nInput Matriks Adjasensi dari Graph:\n"); for(i=1; i<=n; i++)

{

for(j=1; j<=n; j++) { scanf("%d",&cost[i][j]); if(cost[i][j]==0) cost[i][j]=999; } }

printf("\nThe edges of Minimum Cost Spanning Tree are :\n\n");

while(ne<n) {

for(i=1,min=999; i<=n; i++) {

for(j=1; j<=n; j++) { if(cost[i][j]<min) { min=cost[i][j]; a=u=i; b=v=j; //u=i; //v=j; //a=u; //b=v;


(6)

57 } } } u=find(u); v=find(v); if(uni(u,v)) {

printf("\n%d edge (%d %c%c%c%c %d) =%d\n",ne++,a,pnh1,grsH,grsH,pnh,b,min);

//printf("\n%d %c%c%c %i %c %i

\n",vertexU,grsH,grsH,pnh,vertexV,grsV,bobotTerpilih[bobo t]); mincost +=min; } cost[a][b]=cost[b][a]=999; }

printf("\n\tTotal Biaya Minimum = %d\n",mincost); getch();

}

int find(int i) {

while(parent[i]) i=parent[i]; return i;

}

int uni(int i,int j) { if(i!=j) { parent[j]=i; return 1; } return 0; }