Post on 19-Jun-2015
description
PUTU RUSDI ARIAWAN
PRAKTIKUM KOMSEP PEMROGRAMAN KOMPUTER
MODUL IV
SORTING DAN SEARCHING
Oleh
KELOMPOK XVIII
Putu Rusdi Ariawan (0804405050)
I Gusti Agung Gede Mega Perbawa (0804405049)
LABORATORIUM KOMPUTER
JURUSAN TEKNIK ELEKTRO
FAKULTAS TEKNIK UNIVERSITAS UDAYANA
Desember 2008
PUTU RUSDI ARIAWAN
BAB VI
SORTING DAN SEARCHING
6.1 Tujuan
Adapun tujuan dari praktikum “Sorting dan Searching” ini adalah
sebagai berikut :
1. Memahami dasar-dasar pemrograman Pascal atau C++.
2. Memperdalam kemampuan terhadap penggunaan tipe data array dalam
program.
3. Mengenal dan bisa menggunakan fungsi pembangkit bilangan acak yang ada
dlaam bahasa Pascal atau C++.
4. Mengenal dan bisa memakai fungsi untuk mendapatkan waktu dalam Pascal
atau C++.
5. Memahami tujuan dan mekanisme pengurutan data dan pencarian data, baik
yang bersifat numerik maupun alphanumerik.
6. Mampu menganalisis unjuk kerja masing-masing metode pengurutan dan
pencarian, sehingga bisa memilih metode pengurutan data dan pencarian data
yang terbaik untuk suatu contoh kasus tertentu.
6.2 Tinjauan Pustaka
Untuk mendukung membangkitkan bilangan acak, Turbo Pascal
menyediakan :Pernyataan Random, Fungsi Randomize, Variabel Randseed
Random berguna untuk memperoleh sebuah bilangan acakRandomize
berguna untuk memberikan nilai awal buat pembangkitan bilangan acak
berdasarkan jam sistem. Dengan menggunakan prosedur ini akan diperoleh
bilangan acak yang benar-benar acak untuk setiap waktu. Sedangkan untuk
memperoleh bilangan acak yang setiap saat dijalankan akan memberikan nilai
sama dapat diatur dengan variabel RandSeed.
Contoh yang menujukkan pemakian Random, Rondomize dan RandSeed
dapat dilihat dalam program berikut ini.
PUTU RUSDI ARIAWAN
6.2.1 Bilangan Random
Cara membangkitkan bilangan acak dapat dilakukan dengan pernyataan
randomize, fungsi random dan vaiabel randseed. Fungsi random berguna untuk
memperoleh bilangan random (acak). Sedangkan untuk pemberian nilai awal
pembangkitan bilangan random digunakan pernyataan randomize atau variabel
Randseed. Pernyataan randomize digunakan untuk pemberian nilai awal
berdasarkan jam sistem atau bisa juga disebut pemberian nilai awal juga secara
random. Sedangkan bila kita ingin memberikan atau menetapkan nilai awal untuk
pembangkitan itu sendiri dapat menggunakan variabel randseed. Bedanya jika
nilai awal dibangkitkan dengan pernyataan randomize nilai awal yang kita
dapatkan akan benar-benar acak,namun bila dengan variabel randseed apabila
nilai variabel randseed tersebut tidak berubah maka setiap dipanggil fungsi
random akan mengeluarkan bilangan yang sama. Berikut adalah masing-masing
contoh pembangkitan nilai awal secara random:
A. Dengan Pernyataan Randomize
Kode Program 6.1 Pernyataan randomize
Penggunaan fungsi randomize dalam program berguna untuk
membangkitkan bilangan acak.Setiap program dijalankan maka angka yang
muncul akan selalu berbeda (angka yang muncul tidak selalu sama setiap
fungsi random-nya dipanggil).
program random_1;
uses
wincrt;
var
x:byte;
begin
clrscr;
randomize; {pernyataan randomize}
for x:=1 to 5 do
writeln(random);
readln;
donewincrt;
end.
PUTU RUSDI ARIAWAN
B. Dengan Var Rand Seed
Kode Program 6.2 Pernyataan randomize dengan randseed.
Sedangkan dengan variabel randseed maka jika nilai variabel
randseed tersebut tidak berubah maka setiap dipanggil fungsi random akan
mengeluarkan bilangan yang sama.
6.2.2 Sorting
Sorting adalah proses meletakkan kumpulan elemen data dalam urutan
tertentu berdasarkan satu atau beberapa kunci dari tiap elemen.. setelah tersusun
sebagai sebuah list, seluruh data dapat dibandingkan satu dengan yang lain.Secara
umum pengurutan dibagi menjadi dua :
1) Ascending : Pengurutan data di mana nilai awal lebih kecil dari nilai
setelahnya. (Urut Naik).
2) Descending : Pengurutan data di mana nilai awal bernilai lebih besar
dari nilai berikutnya. (Urut Turun).
Data berada dalam kondisi urut naik jika data pada urutan lebih awal
mempunyai harga yang lebih kecil daripada data pada urutan berikutnya.
Sebaliknya, data disebut urut turun jika harga data pada urutan awal lebih besar
daripada data pada urutan berikutnya.
program random_2;
uses
wincrt;
var
x:byte;
begin
clrscr;
randseed:=5; {pemberian nilai awal}
for x:=1 to 5 do
writeln(random);
readln;
donewincrt;
end.
PUTU RUSDI ARIAWAN
6.2.2.1 Insertion Sort
Proses pengurutan data dengan cara mengecek data satu persatu mulai
dari yang kedua sampai dengan yang terakhir. Apabila ditemukan nilai data yang
lebih kecil dari yang sebelumnya, maka data tersebut disisipkan pada posisi yang
sesuai. Insertion Sort ada dua macam yaitu :
1. Straight Insertion (metode penyisipan langsung).
Secara umum proses pengurutan data dengan metoda penyisipan
langsung adalah kebalikan dari metoda seleksi langsung. Pengurutan data dengan
metoda penyisipan langsung dimulai dengan membandingkan harga data pada
urutan kedua terhadap data pada urutan pertama. Jika data kedua lebih besar maka
data kedua ditukarkan posisinya dengan data pertama. Pada langkah berikutnnya
data ketiga dibandingkan dengan data kedua, jika data ketiga lebih besar, maka
data ketiga ditukarkan posisinya dengan data kedua, kemudian data tersebut
dibandingkan dengan data pertama, tukarkan posisi kedua data jika data ketiga
lebih besar.demikian seterusnya terhadap data berikutnya. Dalam metoda ini,
proses membandingkan harga data baru (data yang sedang diproses) terhadap
data-data lain yang telah diurut akan dihentikan jika data tersebut telah menempati
posisi yang semestinya sehingga data-data yang telah diproses telah urut.Contoh :
Diketahui sebuah larik data yang terdiri dari 5 elemen data dalam
kondisi tidak urut yaitu :
5 2 3 1 4
Setiap data baru yang sedang diproses akan selalu disisipkan secara
langsung dan menempati posisi baru sesuai dengan harganya, sehingga pada
setiap akhir langkah tertentu semua data yang telah diproses akan selalu berada
dalam kondisi urut ( ditunjukkan oleh tabel dibawah ini ).
Tabel 6.1 Tabel stright insertion.
Intersi Ke Hasil Proses
0 5 2 3 1 4
1 2 5 3 1 4
2 2 3 5 1 4
PUTU RUSDI ARIAWAN
3 1 2 3 5 4
4 1 2 3 4 5
Hasil akhir yang diperoleh dari proses diatas adalah sekumpulan data
dalam kondisi urut naik, yaitu sebagai berikut :
1 2 3 4 5
2. Binary Insertion (metode penyisipan biner).
Metoda penyisipan biner (binary insertion) merupakan usaha perbaikan
dari metoda penyisipan langsung. Dalam cacah data yang banyak, pengurutan data
dengan metode penyisipan biner akan lebih efisein.
Secara garis besar, proses pengurutan data dengan metoda ini terdiri dari
dua bagian utama, yaitu proses penentuan elemen-elemen data yang akan diproses
dan proses penyisipan elemen data untuk mengurutkan data-data. Proses
penentuan data yang akan diproses adalah sama dengan cara-cara dalam metoda
penyisipan langsung, tetapi dalam metode penyisipan biner penentuan lokasi dan
penyisipan dilakukan dengan cara biner.
Mula-mula data pertama dalam larik sumber dianggap telah menempati
tempat yang tepat pada larik hasil. Kemudian data yang mendapat giliran diproses
akan disisipkan kedalam larik hasil, yaitu data kedua,ketiga hingga data terakhir.
Untuk menentukan lokasi penyisipan dengan cara biner adalah dilakukan dengan
cara sebagai berikut. Mula-mula kita tetapkan harga batas bawah dan batas atas
interval untuk larik hasil. Harga awal batas bawah untuk tiap interasi adalah 1.
Sedangkan harga awal batas atas pada setiap iterasi adalah sama dengan cacah
data pada larik hasil.
Jika data-data akan diurutkan secara naik, maka data-data pada bagian
pertama yaitu bagian yang berada disebelah kiri akan memuat data-data urut yang
lebih kecil dari harga pada titik tengah interval. Sedangkan bagian yang berada di
sebelah kanan titik tengah interval akan memuat data-data yang lebih besar. Jika
semua data dalam larik sumber tidak ada yang sama,maka langkah ini akan
mengakibatkan dua kemungkinan kondisi, yaitu data yang disisipkan akan lebih
kecil atau lebih besar dari harga data pada posisi tengah interval. Jika lebih kecil
PUTU RUSDI ARIAWAN
maka penyisipan harus dilakukan pada bagian pertama yaitu interval sebelah kiri.
Namun jika data yang disisipkan lebih besar maka penyisipan harus dilakukan
pada bagian kedua. Pada langkah selanjutnya interval dimana data akan disisipkan
dibagi kembali menjadi dua bagian yang sama dengan menetapkan titik tengah
pada interva yang baru.Kemudian proses perbandingan dan penentuan interval-
interval baru dilakukan kembali. Demikian seterusnya proses dilaksanakan hingga
ditemukan posisi yang tepat bagi data yang akan disisipkan, yaitu jika titik tengah
interval sama dengan batas bawah dan batas atas interval. Selanjutnya jika posisi
penyisipan telah ditemuakn, maka proses dilanjutkan untuk menggeser data-data
mulai dari posisi dimana data akan disisipkan hingga data terakhir pada larik hasil,
setelah selesai baru dilakukan penyisipan, yaitu dengan cara menempatkan data
yang disisipkan pada posisi yang telah ditemukan. Dengan demikian data telah
selesai diproses dan data telah urut.Contoh :
Diketahui vektor K yang mempunyai delapan elemen data, yaitu
sebagai berikut :
10 5 7 9 2 1 8 4
langkah dan hasil proses pengurutan pada setiap iterasi ditunjukkan pada tabel di
bawah :
Tabel 6.2 Tabel binary insertion.
Itersi ke Hasil Proses
0 10 5 7 9 2 1 8 6
1 5 10 7 9 2 1 8 6
2 5 7 10 9 2 1 8 6
3 5 7 9 10 2 1 8 6
4 2 5 7 9 10 1 8 6
5 1 2 5 7 9 10 8 6
6 1 2 5 7 8 9 10 6
7 1 2 5 6 7 8 9 10
Hasil akhir yang diperoleh dari proses diatas adalah sekumpulan data
dalam kondisi urut naik, yaitu sebagai berikut :
1 2 4 5 7 8 9 10.
PUTU RUSDI ARIAWAN
6.2.2.2 Shell Sort
Nama metode Shell diambil dari nama pembuatnya yakni D.L. Shell,
tahun 1959. Metode Shell sering juga disebut sebagai metode pertambahan
menurun. Metode ini mengururtkan suatu data dengan cara membandingkan suatu
data dengan data lain yang memiliki jarak tertentu, kemudian dilakukan
penukaran bila perlu.
Proses pengurutannya dapat dijelaskan sebagai berikut: pertama adalah
menentukan jarak mula-mula dari data yang akan dibandingkan, yaitu N / 2.
Setelah itu, dilakukan pengulangan dari satu sampai dengan N / 2. Pada masing-
masing pengulangan dilakukan pembandingan antara data ke-j dengan data ke-(j +
N / 2). Apabila data ke-j lebih besar dari data ke-(j + N / 2) maka kedua data
tersebut ditukar. Pengulangan dari 1 sampai n / 2 ini dilakukan sampai semua data
ke-j lebih kecil daripada data ke-(j + N / 2).
Pada proses berikutnya digunakan jarak(N / 2) / 2 atau N / 4. Kemudian
dilakukan perulangan dari 1 sampai dengan (N – N / 4) atau 3.N / 4. Pada masing-
masing perulangan dilakukan pembandingan antara data ke-j dengan data ke-(j +
N / 4). Apabila diperlukan kedua data itu ditukar. Pengulangan dari 1 sampai 3.N /
4 ini dilakukan sampai semua data ke-j lebih kecil dari data ke-(j + N / 4).Pada
proses berikutnya digunakan jarak (N / 4) / 2 atau N / 8. Demikian seterusnya
hingga jarak yang digunakan adalah 1.
Dalam metoda shell sort tidak ada ketentuan baku tentang seberapa jauh
jarak yang harus ditetapkan pada saat pertama kali untuk perbandingan antar data
yang kemudian akan dipersempit pada langkah-langkah selanjutnya.Adapun
contoh dari metode shell sort adalah seperti berikut :
Diketahui sebuah vektor yaitu K yang mempunyai delapan elemen data dalam
kondisi acak, yaitu sebagai berikut :
90 15 95 30 35 100 12 25.
Jika jarak untuk melakukan perbandingan pada langkah pertama adalah
N – 1 atau sama dengan 7, maka jarak perbandingan pada langkah kedua adalah 6,
ketiga adalah 5, dan terus dikurangi, hingga akhir sama dengan 1.
PUTU RUSDI ARIAWAN
Tabel 6.3 Tabel shell sort.
Interasi
ke
Jarak Hasil Proses
0 - 90 15 95 30 35 100 12 25
1 7 25 15 95 30 35 100 12 90
2 6 12 15 95 30 35 100 25 90
3 5 12 15 90 30 35 100 25 95
4 4 12 15 25 30 35 100 90 95
5 3 12 15 25 30 35 100 90 100
6 2 12 15 25 30 35 95 90 100
7 1 12 15 25 30 35 95 90 100
6.2.2.3 Bubble Sort
Untuk menghasilkan data yang urut naik, jika dibandingkan dengan
metoda seleksi langsung maka metoda gelembung memiliki perbedaan dalam
menemukan elemen data terkecil dan cara pertukaran datanya.Langkah pertama
pengurutan data secara urut naik dengan metoda gelembung adalah
membandingkan harga data pertama dengan data kedua.
Jika harga data pertama lebih besar maka tukarkan posisinya dengan data
kedua. Kemudian data kedua dibandingkan dengan data ketiga, tukarkan data
kedua jika data kedua lebih besar dari data ketiga, selanjutnya data ketiga
dibandingkan dengan data keempat, tukarkan jika data ketiga lebih besar dari data
keempat.
Proses ini akan diulang secara terus-menerus hingga semua data selesai
dibandingkan. Hasil pada langkah pertama adalah menempatkan data terbesar
pada urutan terakhir. Langkah kedua mengalami hal yang serupa dengan langkah
kedua.Jika K menyatakan cacah proses membandingkan yang harus dilakukan
untuk mengurutkan semua data dengan metoda gelembung, maka cacah
perbandingan tersebut dapat dihitung dengan formula:
2
2 NNK
dimana:
K : cacah proses perbandingan
N : cacah data
PUTU RUSDI ARIAWAN
6.2.2.4 Merge Sort
Langkah-langkah pengurutan dengan merge sort secara garis besar dapat
dijelaskan sebagai berikut. Andaikan terdapat vektor K dengan cacah elemen data
sebanyak N dalam kondisi tidak urut. Untuk mengurutkan semua data dalam K,
mula-mula setiap elemen dalam vektor K dianggap sebagai sebuah vektor yang
masing-masing mempunyai sebuah elemen data. Dengan demikian akan terdapat
N vektor dengan cacah elemen masing-masing adalah 1 buah. Selanjutnya setiap
pasang vektor yang berurutan kita gabungkan menjadi 1 vektor baru. Pada akhir
langkah pertama ini, kita akan memiliki vektor baru sebanyak N/2 yang masing-
masing dalam kondisi urut naik. Cacah elemen pada masing-masing vektor adalah
2 buah, kecuali jika N berniali ganjil, maka akan terdapat N/2-1 vektor baru
dimana salah satu vektor hanya memiliki sebuah elemen saja. Pada langkah
selanjutnya, setiap pasang vektor yang berurutan dilakukan penggabungan dan
sekaligus dapat pertukaran posisi antar data sehingga akan terbentuk vektor-vektor
baru. Demikian proses penggabungan dan pertukaran posisi data secara terus
menerus akan dilakukan hingga pada akhirnya akan diperoleh sebuah vektor baru
yang memuat semua elemen data dalam vektor sumber dalam kondisi urut naik.
Contoh :
Asumsikan kita memiliki array A yang berisi enam buah elemen data,
seperti tampak dibawah ini.
25 22 18 20 15 19
A[1] A[2] A[3] A[4] A[5] A[6]
Langkah A[1] A[2] A[3] A[4] A[5] A[6]
1 25 22 18 20 15 19
2 22 25 18 15 20 19
3 18 22 25 15 19 20
Langkah A[1] A[2] A[3] A[4] A[5] A[6]
4 15 18 19 20 22 25
PUTU RUSDI ARIAWAN
Hasil akhir yang diperoleh dari proses diatas adalah sekumpulan data dalam
kondisi urut naik, yaitu sebagai berikut :
15 18 19 20 22 25
A[1] A[2] A[3] A[4] A[5] A[6]
6.2.2.5 Quick Sort
Algoritma Quick sort yang terkenal itu ditemukan oleh C.A.R Hoare
pada tahun 1960, dan kerjanya lebih cepat. Cara ini didasarkan pada pendekatan
“bagi dan pecahkan”: untuk memecahkan masalah besar dengan membagi-
baginya ke dalam sub problem yang lebih kecil dan pecahkan tiap sub problem
dengan cara yang sama sampai cukup kecil untuk dipecahkan.Bagaimana kita
memecahkan masalah penyortiran ini menjadi sub problem yang dapat disusun?
Lihat daftar berikut:
Harga 32 dalam posisi 6 memiliki kegunaan khusus. Semua harga di sisi
kirinya kurang dari 32, sementara harga di kanan lebih besar dari 32. 32 disebut
tidak memihak pada penyortiran dalam dua sub problem: sub problem kiri dan sub
problem kanan. Masing-masing dapat disortir terpisah karena tidak ada harga
dalam subproblem kirai yang dapat sampai kekanan dan sebaliknya. Malahan
harga 32 berada diposisi yang sangat tepat yaitu dikanan sub problem – ada nilai
terendah disitu.
Mungkin anda pikir 32 tepat membagi daftar. Bagusnya algoritma
memberikan daftar apa saja, kita selalu dapat membuat bagian dengan harga
paling kiri tanpa banyak kesulitan.Lihat pengaturan ulang daftar:
Number :19 14 28 8 32 72 41 87
Position :1 3 4 5 6 7 8 9
32 19 41 14 28 8 72 30 87 33
L L1 R1 R
PUTU RUSDI ARIAWAN
Data yang terakhir ditandai dengan L dan R. kita dapat membagi daftar
dengan harga 32 pada posisi L, L1 dan R1 dinyatakan dengan harga awal seperti
yang ditunjukkan.
Sekarang bagaimana memindahkan L1 ke kanan sambil memastikan
bahwa tiap nilai di kiri L1 nilai pembatas. Dan kemudian memidahkan R1 ke
kiri sambil memastikan bahwa tiap nilai di kanan R1 > nilai pembatas.Dengan
mengerjakan langkah tersebut kita mendapatkan:
Sekarang apa? Seperti buntu. Tapi tidak demikian, tukar saja harga pada L1 (41)
dengan harga pada R1 (30):
Sekarang kita dapat melanjutkan menggerakkan L1 dan R1 seperti aturan di atas,
sampai tampil:
Tapi sekarang situasinya berbeda. L1 dan R1 berpinadah tempat, jadi kita harus
menemukan titik pembaginya: yaitu posisi R1. sekarang yang harus dilakukan
adalah menghilangkan harga L (32) dan R1 (8), kita akan mendapatkan array
pembagi, yaitu 32:
Sekarang kita dapat membagi masalah apa saja dengan harga paling kiri.
Jadi sub problem dapat dibagi dengan cara sama. Kita hanya melanjutkkan
32 19 41 14 28 8 72 30 87 33
L L1 R1 L1
32 19 30 14 28 8 72 41 87 33
L L1 R1 R
32 19 30 14 28 8 72 41 87 33
L R1 L1 R
8 19 30 14 28 32 72 41 87 33
L R1 L1 R
PUTU RUSDI ARIAWAN
pembagian sub problem sampai hanya memiliki satu anggota yang harus
disortir.Coba juga quick sort pada 1000 angka. Anda akan terkejut! Telah terbukti
bahwa quick sort memerlukan kira-kira N log2 N perbandingan sebagai lawan
bubble sort N2/2.Ouick sort akan semakin lambat bila daftar telah hampir
tersimpan (cobalah pada data yang telah tersortir). Tetapi akan bekerja cepat
apabila memilih harga saat mendekati sub problem untuk harga tengah, bukan
harga kiri.
6.2.3 Searching
Searching merupakan proses pencarian data dari sekumpulan data.
Prosedur pencarian selalu memiliki dua input, yaitu target dan list tempat record
yang akan dicari. Outputnya adalah variabel Boolean. Apabila record yang dicari
dapat ditemukan, maka outputnya adalah sebuah pointer atau petunjuk yang
menunjukkan lokasi record tersebut.
6.2.3.1 Sequential Search
Metode ini merupakan metode pencarian berurutan. Dari data yang
diketahui, elemen yang dicari dibandingkan satu persatu. Jika ditemukan, proses
dihentikan. Jika tidak, proses dilanjutkan hingga seluruh data dibandingkan,
kemudian ditampilkan pesan bahwa data tidak ditemukan.
Adapun contoh procedure yang menggunakan bubble sort adalah:
Diketahui vektor K mempunyai elemen data sebagai berikut :
20 22 18 15 26 34 43 25.
Data yang dicari adalah 34 ( X = 34 ). Untuk mencari data tersebut mula
– mula 34 akan dibandingkan dengan data pertama yaitu 20, karena tidak sama
maka akan dibandingkan dengan 22, kemudian dengan 18 15 26 dan 34. Pada
langkah ke 6 ini data 34 telah ditemukan.
PUTU RUSDI ARIAWAN
6.2.3.2 Binary Search
Pencarian data dengan metoda biner pada vektor urut naik dimana harga
elemen-elemennya tidak ada yang sama, dapat dijelaskan sebagai berikut. Jika
vektor K memuat N buah elemen data, maka mula-mula kita tetapkan harga batas
bawah (dinyatakan dengan variabel BAWAH) dan batas atas interval (dinyatakan
dengan variabel ATAS). Dari kedua harga tersebut kemudian dapat ditentukan
titik tengah intervalnya.TENGAH = (ATAS + BAWAH) DIV 2
Data-data yang mempunyai harga yang lebih kecil dari harga data pada
titik tengah interval, akan berada di sebelah kiri titik tengah interval, sedangkan
data yang mempunyai harga yang lebih besar dari harga data pada posisi titik
tengah interval berada di sebelah kanan. Jika data yang dicari sama dengan data
pada posisi tengah maka data telah ditemukan dan pencarian selesai. Namun jika
data yang dicari lebih kecil dari data di tengah maka data tersebut berada di
sebelah kiri, selanjutnya proses pencarian hanya akan difokuskan pada interval
tersebut. Untuk itu harga atas perlu digeser menjadi tengah-1. hal sebaliknya
dilakukan jika data yang dicari mempunyai harga yang lebih besar dari data pada
posisi tengah, hanya saja harga bawah akna dinaikkan menjadi bawah+1.
Selanjutnya harga tengah akan ditentukan kembali berdasarkan harga
bawah dan atas yang baru pada interval dimana data yang dicari berada.
Perhitungan dilakukan sebagimana formula di atas. Perbandingan dan pencocokan
antara data yang dicari dengan data pada posisi tengah akan dilakukan kembali.
Dan proses akan berlangsung seperti sebelumnya. Proses seperti ini akan
dilakukan secara terus-menerus selama bawah kurang dari satu atau sama dengan
harga atas.
Contoh :
Asumikan kita memiliki array A yang berisi lima buah elemen data, seperti pada
gambar berikut.
PUTU RUSDI ARIAWAN
Tabel 6.4 Tabel binary sort.
Array A
1 75
2 73
3 78
4 81
5 80
Pada gambar diatas, nilai 1, 2, 3, 4, 5 merupakan indeks array sedangkan
75, 73, 78, 81, 80 merupakan nilai yang terkandung dalam elemen-elemen array.
Nilai yang akan dicari adalah 78, maka salah satu cara yang dapat digunakan
adalah dengan membandingkan nilai 78 tersebut dengan seluruh elemen array dari
(A[1] sampai A[5]). Mula – mula kita akan membandingkan nilai 78 dengan
elemen pertama (A[1]), karena nilainya tidak sama maka pencarian akan
dilanjutkan ke elemen berikutnya (A[2]), begitu seterusnya. Pada saat elemen
ketiga, nilai A[3] sama dengan nilai yang dicari, maka pencarian akan dihentikan.
6.3 Pembahasan dan Analisa
6.3.1 Procedure dan Fungsi
6.3.1.1 Program Insertion Sort
Pada program menghitung gaji karyawan ini menggunakan 5 buah
procedure yaitu prosedur loading, prosedur head, prosedur cek1, prosedur cek2
dan prosedur insertion dan 1 buah fungsi yaitu fungsi cari detik.
1. Procedure loading ini digunakan untuk menampilkan sebuah karakter yang
dapat bergerak ke kiri dan ke kanan dan menyerupai seperti proses loading.Di
bawah ini adalah listing program dari procedure loading:
Hentikan
pencarian
Nilai yang
akan dicari
procedure loading; {procedure untuk menampilkan loading}
begin
x:=0;
repeat
begin
a:=45;
c:=45;
repeat
for b:=0 to 300 do
PUTU RUSDI ARIAWAN
begin
gotoxy(a,13);
write('>');
gotoxy(c,13);
write('<');
gotoxy(38,14);
writeln('LOADING. . .!!');
end;
a:=a+1;
c:=c-1;
until (a=60) and (c=30);
a:=45;
c:=45;
repeat
for b:=0 to 300 do
begin
gotoxy(a,13);
write(' ');
gotoxy(c,13);
write(' ');
gotoxy(38,14);
writeln('LOADING. . .!!');
end;
a:=a+1;
c:=c-1;
until (a=60) and (c=30);
a:=60;
c:=30;
repeat
for b:=0 to 300 do
begin
gotoxy(a,13);
write('<');
gotoxy(c,13);
write('>');
gotoxy(38,14);
writeln('LOADING. . .!!');
end;
a:=a-1;
c:=c+1;
until (a=45) and (c=45);
a:=60;
c:=30;
repeat
for b:=0 to 300 do
begin
gotoxy(a,13);
write(' ');
gotoxy(c,13);
write(' ');
PUTU RUSDI ARIAWAN
Kode Program 6.3 Listing program procedure loading.
Procedure loading dipanggil saat sebelum program utama
dimulai.Procedure ini berfungsi untuk menampilkan loading pada saat program
pertama dijalankan.Mekanisme prosedur ini menggunakan statemen perulangan
FOR.Perulangan FOR ini digunakan untuk mencetak suatu karakter yaitu ‟+‟
hingga batas nilai yang telah ditentukan.Karena menggunakan statemen
perulangan maka karakter ‟+‟ yang ditampilkan secara berulang maka akan
tampak seperti sebuah proses loading sebelum program utama dimulai.
2. Procedure head ini digunakan untuk menampilkan judul dari program
insertion sorting ini.Di bawah ini adalah listing program dari procedure head:
Kode Program 6.4 Listing program procedure head.
Prosedur head digunakan untuk menampilkan judul dari program
insertion sort ini.Pada prosedur digunakan gotoxy agar judul program berada di
posisi tengah – tengah jendela program.
gotoxy(38,14);
writeln('LOADING. . .!!');
end;
a:=a-1;
c:=c+1;
until (a=45) and (c=45);
end;
x:=x+1;
until x=3;
end;
procedure head; {procedure untuk menampilkan judul
program}
begin
gotoxy(25,1);
writeln('=============================');
gotoxy(25,2);
writeln('= PROGRAM INSERTION SORTING =');
gotoxy(25,3);
writeln('=============================');
writeln;
writeln;
writeln;
end;
PUTU RUSDI ARIAWAN
3. Procedure cek1 ini digunakan untuk mengecek kebenaran input dari user,
saat user menignputkan nilai maka prosedur cek ini akan mengecek apakah input
yang dimasukkkan oleh user adalah input yang benar.Di bawah ini adalah listing
program dari procedure cek1:
Kode Program 6.5 Listing program procedure cek1.
Prosedur cek ini dipanggil pada saat user telah menginputkan nilai untuk
untuk menentukan banyak bilangan yang akan ditampilkan.Setelah user
menginputkan nilai maka prosedur cek ini akan mengecek apakah input yang
dimasukkan user telah benar dan sesuai dengan kondisi yang telah ditetapkan, jika
kondisinya belum terpenuhi maka akan muncul sebuah pesan yang berisi bahwa
user salah dalam megninputkan nilai, setelah itu user akan diminta untuk
mengulang menginputkan nilai hingga kondisinya benar.
4. Procedure cek2 ini digunakan untuk mengecek kebenaran input dari user,
saat user menignputkan nilai maka prosedur cek ini akan mengecek apakah input
yang dimasukkkan oleh user adalah input yang benar.Di bawah ini adalah listing
program dari procedure cek2:
procedure cek1; {procedure untuk mengecek validasi}
begin
if kode<>0 then
begin
write('Input harus angka...!!!');
writeln;
z:=0;
end
else
if n<1 then
begin
write('Input tidak boleh kurang dari 1...!!!');
writeln;
z:=0;
end
else
z:=1;
end;
PUTU RUSDI ARIAWAN
Kode Program 6.6 Listing program procedure cek2.
Prosedur cek2 ini dipanggil pada saat user telah menginputkan nilai
untuk untuk menentukan pilihan untuk mengnput bilangan.Setelah user
menginputkan nilai maka prosedur cek ini akan mengecek apakah input yang
dimasukkan user telah benar dan sesuai dengan kondisi yang telah ditetapkan, jika
kondisinya belum terpenuhi maka akan muncul sebuah pesan yang berisi bahwa
user salah dalam megninputkan nilai, setelah itu user akan diminta untuk
mengulang menginputkan nilai hingga kondisinya benar.
5.Procedure insertion ini digunakan untuk mengurutkan data yang awalnya masih
belum urut.Di bawah ini adalah listing program dari procedure insertion:
Kode Program 6.7 Listing program procedure insertion.
Prosedur insertion ini di panggil pada saat user telah selesai
menginputkan semua bilangan yang akan ditampilkan.Prosedur ini berfungsi
procedure cek2; {procedure untuk mengecek validasi}
begin
if (pil<1) and (pil>2) then
begin
write('Input tidak ada dalam pilihan...!!!');
writeln;
z:=0;
end
else
z:=1;
end;
procedure insertion;
begin
for i:=2 to n do
begin
y:=Data[i];
j:= i-1;
while ( y < data[j]) and (j>0) do
begin
data[j+1] := data[j];
dec(j);
end;
data[j+1] := y
end;
end;
PUTU RUSDI ARIAWAN
untuk mengurutkan bilangan – bilangan yang telah diinputkan oleh user.Prosedur
ini menggunakan metode insertion sort yaitu metode pengurutan data dengan cara
mengecek data satu persatu mulai dari yang kedua sampai dengan yang terakhir.
Apabila ditemukan nilai data yang lebih kecil dari yang sebelumnya, maka data
tersebut disisipkan pada posisi yang sesuai.
6. Fungsi caridetik ini digunakan untuk mencari berapa lama proses yang
diperlukan untuk mengurutkan data yang telah diinputkan user secara
random.Di bawah ini adalah listing program dari fungsi caridetik :
Kode Program 6.8 Listing program fungsi caridetik.
Fungsi ini digunakan untuk memanggil waktu proses pengurutan bilangan
yang dihitung dari nol detik.
6.3.1.2 Program Sequential Search
Pada program menghitung gaji karyawan ini menggunakan 5 buah
procedure yaitu prosedur loading, prosedur head, prosedur cek1, prosedur cek2
dan prosedur sequential dan 1 buah fungsi yaitu fungsi cari detik.
1. Procedure loading ini digunakan untuk menampilkan sebuah karakter yang
dapat bergerak ke kiri dan ke kanan dan menyerupai seperti proses loading.Di
bawah ini adalah listing program dari procedure loading:
Function caridetik(w : Word) : String;
var
s : String; {fungsi untuk mencari lama proses sorting}
begin
Str(w:0,s);
if Length(s) = 1 then
s := '0' + s;
caridetik := s;
end;
PUTU RUSDI ARIAWAN
procedure loading; {procedure untuk menampilkan loading}
begin
x:=0;
repeat
begin
a:=45;
c:=45;
repeat
for b:=0 to 300 do
begin
gotoxy(a,13);
write('>');
gotoxy(c,13);
write('<');
gotoxy(38,14);
writeln('LOADING. . .!!');
end;
a:=a+1;
c:=c-1;
until (a=60) and (c=30);
a:=45;
c:=45;
repeat
for b:=0 to 300 do
begin
gotoxy(a,13);
write(' ');
gotoxy(c,13);
write(' ');
gotoxy(38,14);
writeln('LOADING. . .!!');
end;
a:=a+1;
c:=c-1;
until (a=60) and (c=30);
a:=60;
c:=30;
repeat
PUTU RUSDI ARIAWAN
Kode Program 6.9 Listing program procedure loading.
Procedur loading dipanggil saat sebelum program utama
dimulai.Procedure ini berfungsi untuk menampilkan loading pada saat program
pertama dijalankan.Mekanisme prosedur ini menggunakan statemen perulangan
FOR.Perulangan FOR ini digunakan untuk mencetak suatu karakter yaitu ‟+‟
hingga batas nilai yang telah ditentukan.Karena menggunakan statemen
perulangan maka karakter ‟+‟ yang ditampilkan secara berulang maka akan
tampak seperti sebuah proses loading sebelum program utama dimulai.
2. Procedure head ini digunakan untuk menampilkan judul dari program
insertion sorting ini.Di bawah ini adalah listing program dari procedure head:
for b:=0 to 300 do
begin
gotoxy(a,13);
write('<');
gotoxy(c,13);
write('>');
gotoxy(38,14);
writeln('LOADING. . .!!');
end;
a:=a-1;
c:=c+1;
until (a=45) and (c=45);
a:=60;
c:=30;
repeat
for b:=0 to 300 do
begin
gotoxy(a,13);
write(' ');
gotoxy(c,13);
write(' ');
gotoxy(38,14);
writeln('LOADING. . .!!');
end;
a:=a-1;
c:=c+1;
until (a=45) and (c=45);
end;
x:=x+1;
until x=3;
end;
PUTU RUSDI ARIAWAN
Kode Program 6.10 Listing program procedure head.
Prosedur head digunakan untuk menampilkan judul dari program
insertion sort ini.Pada prosedur digunakan gotoxy agar judul program berada di
posisi tengah – tengah jendela program.
3. Procedure cek1 ini digunakan untuk mengecek kebenaran input dari user,
saat user menignputkan nilai maka prosedur cek ini akan mengecek apakah input
yang dimasukkkan oleh user adalah input yang benar.Di bawah ini adalah listing
program dari procedure cek1:
Kode Program 6.11 Listing program procedure cek1.
procedure head; {procedure untuk menampilkan judul
program}
begin
gotoxy(25,1);
writeln('=============================');
gotoxy(25,2);
writeln('= PROGRAM SEQUENTIAL SEARCH =');
gotoxy(25,3);
writeln('=============================');
writeln;
writeln;
writeln;
end;
procedure cek1; {procedure untuk mengecek validasi}
begin
if kode<>0 then
begin
write('Input harus angka...!!!');
writeln;
z:=0;
end
else
if n<1 then
begin
write('Input tidak boleh kurang dari 1...!!!');
writeln;
z:=0;
end
else
z:=1;
end;
PUTU RUSDI ARIAWAN
Prosedur cek ini dipanggil pada saat user telah menginputkan nilai untuk
untuk menentukan banyak bilangan yang akan ditampilkan.Setelah user
menginputkan nilai maka prosedur cek ini akan mengecek apakah input yang
dimasukkan user telah benar dan sesuai dengan kondisi yang telah ditetapkan, jika
kondisinya belum terpenuhi maka akan muncul sebuah pesan yang berisi bahwa
user salah dalam megninputkan nilai, setelah itu user akan diminta untuk
mengulang menginputkan nilai hingga kondisinya benar.
4. Procedure cek2 ini digunakan untuk mengecek kebenaran input dari user,
saat user menignputkan nilai maka prosedur cek ini akan mengecek apakah input
yang dimasukkkan oleh user adalah input yang benar.Di bawah ini adalah listing
program dari procedure cek2:
Kode Program 6.12 Listing program procedure cek2.
Prosedur cek2 ini dipanggil pada saat user telah menginputkan nilai
untuk untuk menentukan pilihan untuk mengnput bilangan.Setelah user
menginputkan nilai maka prosedur cek ini akan mengecek apakah input yang
dimasukkan user telah benar dan sesuai dengan kondisi yang telah ditetapkan, jika
kondisinya belum terpenuhi maka akan muncul sebuah pesan yang berisi bahwa
user salah dalam megninputkan nilai, setelah itu user akan diminta untuk
mengulang menginputkan nilai hingga kondisinya benar.
5. Procedure sequential ini digunakan untuk mencari bilangan yang diinputkan
oleh user.Di bawah ini adalah listing program dari procedure sequential:
procedure cek2; {procedure untuk mengecek validasi}
begin
if (pil<1) and (pil>2) then
begin
write('Input tidak ada dalam pilihan...!!!');
writeln;
z:=0;
end
else
z:=1;
end;
PUTU RUSDI ARIAWAN
Kode Program 6.13 Listing program procedure sequential.
Prosedur sequential ini di panggil pada saat user telah selesai
menginputkan semua bilangan yang akan ditampilkan.Prosedur ini berfungsi
untuk mencari satu bilangan yang sebelumnya telah diinputkan oleh user.Prosedur
ini menggunakan metode sequential search yaitu metode pencarian berurutan.
Dari data yang diketahui, elemen yang dicari dibandingkan satu persatu. Jika
ditemukan, proses dihentikan. Jika tidak, proses dilanjutkan hingga seluruh data
dibandingkan, kemudian ditampilkan pesan bahwa data tidak ditemukan.
6. Fungsi caridetik ini digunakan untuk mencari berapa lama proses yang
diperlukan untuk mengurutkan data yang telah diinputkan user secara random.Di
bawah ini adalah listing program dari fungsi caridetik :
Kode Program 6.14 Listing program fungsi sequential.
procedure sequential; {prosedur untuk mencari data}
begin
write('bil yang dicari: ');
readln(n);
ada:=false;
i:=0;
while (data[i] <> n) and (i<n) do
begin
i:=i+1;
if data[i]=n then
begin
ada:=true;
writeln('Angka yang dicari ada pada deret: ',i);
end;
end;
if (data[i] <> n) then
begin
writeln('Angka yang dicari tidak ada dalam
daftar..');
end;
end;
Function caridetik(w : Word) : String;
var
s : String; {fungsi untuk mencari lama proses sorting}
begin
Str(w:0,s);
if Length(s) = 1 then
s := '0' + s;
caridetik := s;
end;
PUTU RUSDI ARIAWAN
Fungsi ini digunakan untuk memanggil waktu proses pengurutan
bilangan yang dihitung dari nol detik.
6.3.2 Algoritma
6.3.2.1 Program Insertion Sort
a. Algoritma Prosedur Cek1.
1. Mulai.
2. Apakah nilai yang diinputkan berupa karakter? Jika ya, maka akan muncul
pesan „Input salah‟ lalu lanjut ke langkah 5, jika tidak lanjut ke langkah 3.
3. Apakah n<0? Jika ya,maka akan muncul pesan „input salah‟ lalu lanjut ke
langkah 5, jika tidak maka lanjut ke langkah 4.
4. Isi nilai z dengan z+1.
5. Selesai.
b. Algoritma Prosedur Cek2.
1. Mulai.
2. Apakah pil<1? Jika ya, maka akan muncul pesan „Input salah‟ lalu lanjut ke
langkah 5, jika tidak lanjut ke langkah 3.
3. Apakah pil>2? Jika ya,maka akan muncul pesan „input salah‟ lalu lanjut ke
langkah 5, jika tidak maka lanjut ke langkah 4.
4. Isi nilai z dengan z+1.
5. Selesai.
c. Algoritma Prosedur Insertion.
1. Mulai.
2. Persiapan i diisi dengan 2.
3. Apakah i = n, jika ya lanjut ke langkah 7, jika tidak “y diisi dengan i – 1”, y
diisi dengan data[i] dan lanjut ke langkah nomor 3.
4. Apakah “y<data[j]” dan “j>0”, jika ya isikan “data[j+1] dengan data[j]” dan
“j” diisi dengan “j-1”,setelah itu kembali cek apakah “y<data[j]” dan “j>0”,
dan jika tidak lanjut ke langkah nomor 4.
PUTU RUSDI ARIAWAN
5. “Data[j+1]” diisi dengan y .
6. i diisi dengan i+1 dan kembali ke langkah 3.
7. Selesai
d. Algoritma Program Utama.
1. Mulai.
2. Masukkan berapa banyak bilangan yang akan dimasukkan(n).
3. Panggil prosedur cek1.
4. Apakah z=1?jika ya, maka lanjut ke langkah 5,jika tidak kembali ke langkah
2.
5. Masukan pilihan (e), pilih 1 jika ingin menginputkan secara manual dan pilih
2 jika ingin menginputkan secara otomatis.
6. Panggil prosedur cek1.
7. Panggil prosedur cek2.
8. Apakah z=1? Jika ya,maka lanjut ke langkah 9, jika tidak kembali ke langkah
5.
9. Apakah pilihan sama dengan 1, jika ya isikan pil dengan 1 dan lanjut ke
langkah 10, jika pil sama dengan 2 maka lanjut ke langkah 12.
10. Apakah i = n, jika ya lanjut ke langkah 14, jika tidak lanjut ke langkah 11.
11. Masukkan data[i], dan isikan i dengan i+1 lalu kembali ke langkah 10.
12. Apakah i = n, jika ya lanjut ke langkah 14, jika tidak lanjut ke langkah 13.
13. Isikan data[i] dengan random, dan isikan i dengan i+1 lalu kembali ke langkah
12.
14. Panggil prosedur insertion.
15. Isikan i dengan 1.
16. Apakah i sama dengan n, jika ya lanjut ke langkah 15 , jika tidak lanjut ke
langkah 14.
17. Tampilkan data[i], dan isikan i dengan i+1, lalu kembali ke langkah 13.
18. Apakah ingin mengulang Program, jika ya kembali ke langkah 1, jika tidak
stop.
PUTU RUSDI ARIAWAN
6.3.2.2 Program Sequential Search
a. Algoritma Prosedur Cek1.
1. Mulai.
2. Apakah nilai yang diinputkan berupa karakter? Jika ya, maka akan muncul
pesan „Input salah‟ lalu lanjut ke langkah 5, jika tidak lanjut ke langkah 3.
3. Apakah n<0? Jika ya,maka akan muncul pesan „input salah‟ lalu lanjut ke
langkah 5, jika tidak maka lanjut ke langkah 4.
4. Isi nilai z dengan z+1.
5. Selesai.
b. Algoritma Prosedur Cek2.
1. Mulai.
2. Apakah pil<1? Jika ya, maka akan muncul pesan „Input salah‟ lalu lanjut ke
langkah 5, jika tidak lanjut ke langkah 3.
3. Apakah pil>2? Jika ya,maka akan muncul pesan „input salah‟ lalu lanjut ke
langkah 5, jika tidak maka lanjut ke langkah 4.
4. Isi nilai z dengan z+1.
5. Selesai.
c. Algoritma Prosedur sequential.
1. Mulai.
2. Persiapan i diisi dengan 0 dan ada diisi dengan false.
3. Apakah data[ i] <> n dan i < n?, jika ya lanjut ke langkah 4 dan jika tidak
lanjut ke langkah 5.
4. Nilai i diisi dengan i+1 dan tampilkan “data yang dicari ada di deret (i)” lalu
kembali ke langkah 3.
5. Apakah data[ i] <> n ? jika yam aka tampilkan “data yang dicari tidak ada
dalam daftar”
6. Selesai.
PUTU RUSDI ARIAWAN
d. Algoritma Program Utama.
1. Mulai.
2. Masukkan berapa banyak bilangan yang akan dimasukkan(n).
3. Panggil prosedur cek1.
4. Apakah z=1?jika ya, maka lanjut ke langkah 5,jika tidak kembali ke langkah
2.
5. Masukan pilihan (e), pilih 1 jika ingin menginputkan secara manual dan pilih
2 jika ingin menginputkan secara otomatis.
6. Panggil prosedur cek1.
7. Panggil prosedur cek2.
8. Apakah z=1? Jika ya,maka lanjut ke langkah 9, jika tidak kembali ke langkah
5.
9. Apakah pilihan sama dengan 1, jika ya isikan pil dengan 1 dan lanjut ke
langkah 10, jika pil sama dengan 2 maka lanjut ke langkah 12.
10. Apakah i = n, jika ya lanjut ke langkah 14, jika tidak lanjut ke langkah 11.
11. Masukkan data[i], dan isikan i dengan i+1 lalu kembali ke langkah 10.
12. Apakah i = n, jika ya lanjut ke langkah 14, jika tidak lanjut ke langkah 13.
13. Isikan data[i] dengan random, dan isikan i dengan i+1 lalu kembali ke
langkah 12.
14. Panggil prosedur sequential.
15. Apakah ingin mengulang Program, jika ya kembali ke langkah 1, jika tidak
stop.
PUTU RUSDI ARIAWAN
6.3.3 Flowchart
6.3.3.1 Program Insertion Sort
a.Flowchart Prosedur Cek1.
Mulai
z ← 0
n=karakter
N<0
N
Selesai
N
Y
Y
z ← z+1
Output :
‘Input salah’
Gambar 6.1 Flowchart procedure cek1.
b.Flowchart Prosedur Cek2.
Mulai
z ← 0
Pil<1
Pil>2
N
Selesai
N
Y
Y
z ← z+1
Output :
‘Input salah’
Gambar 6.2 Flowchart procedure cek2.
PUTU RUSDI ARIAWAN
c.Flowchart Prosedur Insertion.
Mulai
N
y ← data[i]
j ← i-1
i=n
i←2
SelesaiY
i ← n
y<data[j]
Y
Y
Data[j+1] ← data[j]
j ← j-1
N
Nj>0
Data[j+1] ← y
Gambar 6.3 Flowchart procedure insertion.
PUTU RUSDI ARIAWAN
d.Flowchart Program Utama.
pil=1
N
i>n
N
Input :
bil?(data[i])
i ← i+1
Y
insertion
Y
i>n
Dat[i] ←
random(100)
Output :
data[i]
N
Y
i ← i+1
i ← 1
i>n
Output :
data[i]
N
i ← i+1
YLagi?
N
Selesai
YA
Mulai
Input :
pilihan?(pil)
i←1
z←0
Input :
Banyak data?(n)
A
cek1
z=1YN
z=1 cek1
Y
Ncek2
Gambar 6.4 Flowchart program utama insertion sort.
PUTU RUSDI ARIAWAN
TRACING 1:
Input : n : 3
pil : 2
Proses : i : 1 2 3 4 2 3 4 1 2 3 4
Data[i] : [3,2 ,1] → [3,3,1] → [2,3,1] → [2,3,3]
→ [2,2,3] → [1,2,3]
j : 1 0 2 1 0
y : 2 1
Output : data[i] : 1 , 2 , 3 {setelah diurut}
TRACING 2:
Input : n : 3
pil : 1
Proses : i : 1 2 3 4 2 3 4 2 3 4
Data[i] : [3,1 ,2] → [3,3,2] → [1,3,2] → [1,3,3]
→ [1,2,3]
j : 1 0 2 1
y : 1 2
Output : data[i] : 1 , 2 , 3 {setelah diurut}
PUTU RUSDI ARIAWAN
6.3.3.2 Program Sequential Search
a.Flowchart Prosedur Cek1.
Mulai
z ← 0
n=karakter
N<0
N
Selesai
N
Y
Y
z ← z+1
Output :
‘Input salah’
Gambar 6.5 Flowchart procedure cek1.
b.Flowchart Prosedur Cek2.
Mulai
z ← 0
Pil<1
Pil>2
N
Selesai
N
Y
Y
z ← z+1
Output :
‘Input salah’
Gambar 6.6 Flowchart procedure cek2.
PUTU RUSDI ARIAWAN
c.Flowchart Prosedur Sequential.
Mulai
Data[i]<>n
i ← 0
z ← 0
Ada ← false
Y
i ← i+1i<nY
Output :
‘Data ada
di deret’,i
Data[i]=n
Ada ← true
Data[i]<>n
Y
N
N
Output :
‘Data tidak
ada’
Selesai
N
Input :
Cari data?(n)
Cek1
z=1N
Y
Gambar 6.7 Flowchart prosedur sequential.
PUTU RUSDI ARIAWAN
d.Flowchart Program Utama.
pil=1
N
i>n
N
Input :
bil?(data[i])
i ← i+1
Y
sequential
Y
i>n
Data[i] ←
random(100)
Output :
data[i]
N
Y
i ← i+1
Lagi?
N
YA
Selesai
Mulai
Input :
pilihan?(pil)
i←1
z←0
Input :
Banyak data?(n)
A
cek1
z=1YN
z=1 cek1N
cek2
Gambar 6.8 Flowchart program utama sequential search.
PUTU RUSDI ARIAWAN
TRACING 1:
Input : n : 3
pil : 2
Proses : i : 1 2 3 4 2 3 4 1 2 3 4
N : 3 2
Data[i] : [3,2 ,1]
ada : ‟false‟ ‟true‟
Output : : ‟data ada di deret‟,2
TRACING 2:
Input : n : 3
pil : 2
Proses : i : 1 2 3 4 2 3 4 1 2 3 4
N : 3 5
Data[i] : [3,2 ,1]
ada : ‟false‟
Output : : ‟data tidak ada‟
PUTU RUSDI ARIAWAN
6.3.4 Listing Program
6.3.4.1 Program Insertion Sort
program sorting;
uses
windos,wincrt;
const
max=1000;
var
data:array[1..max] of integer;
n,i,j,y,kode:integer;
h,h2,m,m2,s,s1,s2,hund,hund2:word;
pertama,terakhir,lama:real;
pil,z:byte;
huruf:string;
x,a,c,b,q:integer;
exit:char;
procedure loading; {procedure untuk menampilkan loading}
begin
x:=0;
repeat
begin
a:=45;
c:=45;
repeat
for b:=0 to 300 do
begin
gotoxy(a,13);
write('>');
gotoxy(c,13);
write('<');
gotoxy(38,14);
writeln('LOADING. . .!!');
end;
a:=a+1;
c:=c-1;
until (a=60) and (c=30);
a:=45;
c:=45;
repeat
for b:=0 to 300 do
begin
gotoxy(a,13);
write(' ');
gotoxy(c,13);
write(' ');
gotoxy(38,14);
writeln('LOADING. . .!!');
end;
a:=a+1;
c:=c-1;
until (a=60) and (c=30);
PUTU RUSDI ARIAWAN
a:=60;
c:=30;
repeat
for b:=0 to 300 do
begin
gotoxy(a,13);
write('<');
gotoxy(c,13);
write('>');
gotoxy(38,14);
writeln('LOADING. . .!!');
end;
a:=a-1;
c:=c+1;
until (a=45) and (c=45);
a:=60;
c:=30;
repeat
for b:=0 to 300 do
begin
gotoxy(a,13);
write(' ');
gotoxy(c,13);
write(' ');
gotoxy(38,14);
writeln('LOADING. . .!!');
end;
a:=a-1;
c:=c+1;
until (a=45) and (c=45);
end;
x:=x+1;
until x=3;
end;
procedure head; {procedure untuk menampilkan judul program}
begin
gotoxy(25,1);
writeln('=============================');
gotoxy(25,2);
writeln('= PROGRAM INSERTION SORTING =');
gotoxy(25,3);
writeln('=============================');
writeln;
writeln;
writeln;
end;
PUTU RUSDI ARIAWAN
procedure cek1; {procedure untuk mengecek validasi}
begin
if kode<>0 then
begin
write('Input harus angka...!!!');
writeln;
z:=0;
end
else
if n<1 then
begin
write('Input tidak boleh kurang dari 1...!!!');
writeln;
z:=0;
end
else
z:=1;
end;
procedure cek2; {procedure untuk mengecek validasi}
begin
if (pil<>1) and (pil<>2) then
begin
write('Input tidak ada dalam pilihan...!!!');
writeln;
z:=0;
end
else
z:=1;
end;
Function caridetik(w : Word) : String;
var
s : String; {fungsi untuk mencari lama proses sorting}
begin
Str(w:0,s);
if Length(s) = 1 then
s := '0' + s;
caridetik := s;
end;
procedure insertion; {procedure untuk mengurutkan data}
begin
for i:=2 to n do
begin
y:=Data[i];
j:= i-1;
while ( y < data[j]) and (j>0) do
begin
data[j+1] := data[j];
dec(j);
PUTU RUSDI ARIAWAN
end;
data[j+1] := y
end;
end;
begin {awal program utama}
loading;
repeat
clrscr;
head;
repeat
write('Masukkan banyak bilangan yang ingin ditampilkan
+> ');readln(huruf);
val(huruf,n,kode); {input banyak bilangan}
cek;
until z=1;
writeln;
writeln('1.input manual'); {input metode input}
writeln('2.input random');
writeln;
repeat
write('pilih metode input +>');readln(huruf);
val(huruf,pil,kode);
cek;
until z=1;
writeln;
if pil=1 then
begin {input secara manual}
for i:=1 to n do
begin
write('masukkan bilangan ke ',i,' +> ');
readln(data[i]);
end;
writeln;
writeln('Data sebelum diurut...');
for i:=1 to n do
write(data[i]:4);
end
else
begin
writeln('Data sebelum diurut...');
randomize;
for i:= 1 to n do
begin {input secara otomatis}
data[i]:=random(100);
write(data[i]:4);
end;
end;
PUTU RUSDI ARIAWAN
Kode Program 6.15 Listing program insertion sort.
GetTime(h,m,s,hund); {pengukur waktu pertama}
val(caridetik(s),s1,q);
val(caridetik(hund),s2,q);
pertama:=s1+s2/100;
insertion;
GetTime(h,m,s,hund); {pengukur waktu kedua}
val(caridetik(s),s1,q);
val(caridetik(hund),s2,q);
terakhir:=s1+s2/100;
writeln;
writeln;
write('Tekan enter untuk mengurutkan data...');
writeln;
readln;
clrscr;
head;
writeln;
writeln('Data setelah diurut...');
writeln;
for i:=1 to n do {data setelah diurutkan}
begin
write(data[i]:4);
end;
writeln;
writeln;
if (terakhir < pertama) then
lama:=60-pertama+terakhir
else {waktu yang diperlukan dalam pengurutan}
lama:=terakhir-pertama;
writeln('Waktu yang diperlukan untuk mengurutkan data
sebanyak ',n,' adalah ',lama:0:3,' detik');
writeln;
write('Tekan x untuk keluar dari program...');
writeln;
exit:=readkey;
until (exit='x') or (exit='X');
donewincrt;
end. {akhir program utama}
PUTU RUSDI ARIAWAN
6.3.4.2 Program Sequential Search
program searching;
uses
windos,wincrt;
const
max=1000;
var
data:array[1..max] of integer;
n,n1,i,j,y,kode,q:integer;
h,h2,m,m2,s,s1,s2,hund,hund2:word;
pertama,terakhir,lama:real;
pil,z:byte;
ada:boolean;
huruf:string;
x,a,c,b:integer;
exit:char;
procedure loading; {procedure untuk menampilkan loading}
begin
x:=0;
repeat
begin
a:=45;
c:=45;
repeat
for b:=0 to 300 do
begin
gotoxy(a,13);
write('>');
gotoxy(c,13);
write('<');
gotoxy(38,14);
writeln('LOADING. . .!!');
end;
a:=a+1;
c:=c-1;
until (a=60) and (c=30);
a:=45;
c:=45;
repeat
for b:=0 to 300 do
begin
gotoxy(a,13);
write(' ');
gotoxy(c,13);
write(' ');
gotoxy(38,14);
writeln('LOADING. . .!!');
end;
a:=a+1;
c:=c-1;
until (a=60) and (c=30);
PUTU RUSDI ARIAWAN
a:=60;
c:=30;
repeat
for b:=0 to 300 do
begin
gotoxy(a,13);
write('<');
gotoxy(c,13);
write('>');
gotoxy(38,14);
writeln('LOADING. . .!!');
end;
a:=a-1;
c:=c+1;
until (a=45) and (c=45);
a:=60;
c:=30;
repeat
for b:=0 to 300 do
begin
gotoxy(a,13);
write(' ');
gotoxy(c,13);
write(' ');
gotoxy(38,14);
writeln('LOADING. . .!!');
end;
a:=a-1;
c:=c+1;
until (a=45) and (c=45);
end;
x:=x+1;
until x=3;
end;
procedure head; {procedure untuk menampilkan judul program}
begin
gotoxy(25,1);
writeln('=============================');
gotoxy(25,2);
writeln('= PROGRAM SEQUENTIAL SEARCH =');
gotoxy(25,3);
writeln('=============================');
writeln;
writeln;
writeln;
end;
PUTU RUSDI ARIAWAN
procedure cek1; {prosedure untuk mengecek
validasi}
begin
if kode<>0 then
begin
write('Input harus angka...!!!');
writeln;
z:=0;
end
else
if n<1 then
begin
write('Input tidak boleh kurang dari 1...!!!');
writeln;
z:=0;
end
else
z:=1;
end;
procedure cek2; {prosedure untuk mengecek
validasi}
begin
if (pil<1) and (pil>2) then
begin
write('Input tidak ada dalam pilihan...!!!');
writeln;
z:=0;
end
else
z:=1;
end;
Function caridetik(w : Word) : String;
var
s : String;
begin {prosedur untuk mencari lama proses pencarian data}
Str(w:0,s);
if Length(s) = 1 then
s := '0' + s;
caridetik := s;
end;
procedure sequential; {prosedur untuk mencari data}
begin
write('bil yang dicari: ');
readln(n);
ada:=false;
i:=0;
while (data[i] <> n) and (i<n) do
begin
i:=i+1;
PUTU RUSDI ARIAWAN
if data[i]=n then
begin
ada:=true;
writeln('Angka yang dicari ada pada deret: ',i);
end;
end;
if (data[i] <> n) then
begin
writeln('Angka yang dicari tidak ada dalam
daftar..');
end;
end;
begin {awal program utama}
loading;
repeat
clrscr;
lama:=0;
head;
repeat
write('Masukkan banyak bilangan yang ingin ditampilkan
+> ');readln(huruf);
val(huruf,n,kode);
cek; {input banyak bilangan}
n1:=n;
until z=1;
writeln;
writeln('1.input manual');
writeln('2.input random'); {input metode input}
writeln;
repeat
write('pilih metode input +>');readln(huruf);
val(huruf,pil,kode);
cek;
until z=1;
writeln;
if pil=1 then {input nilai secara manual}
begin
for i:=1 to n do
begin
write('masukkan bilangan ke ',i,' +>;
readln(data[i]);
end;
writeln;
for i:=1 to n do
write(data[i]:4);
end
else
begin {input nilai sacara otomatis}
randomize;
for i:= 1 to n do
PUTU RUSDI ARIAWAN
Kode Program 6.16 Listing program sequential search
begin
data[i]:=random(100);
write(data[i]:4); end
else
begin
randomize;
for i:= 1 to n do
begin
data[i]:=random(100);
write(data[i]:4);
end;
end;
writeln;
GetTime(h,m,s,hund); {waktu awal}
val(caridetik(s),s1,q);
val(caridetik(hund),s2,q);
pertama:=s1+s2/100;
sequential;
GetTime(h,m,s,hund); {waktu akhir}
val(caridetik(s),s1,q);
val(caridetik(hund),s2,q);
terakhir:=s1+s2/100;
writeln;
writeln;
if (terakhir < pertama) then
lama:=60-pertama+terakhir
else
lama:=terakhir-pertama; {tampilkan lama proses
pencarian data}
writeln('Waktu yang diperlukan untuk mengurutkan data
sebanyak ',n1,' adalah ',lama:0:3,' detik');
writeln;
write('Tekan x untuk keluar dari program...');
writeln;
exit:=readkey;
until (exit='x') or (exit='X'); {akhir program utama}
donewincrt;
end.
PUTU RUSDI ARIAWAN
6.4 Uji coba Program
6.4.1 Program Insertion Sort
6.4.1.1 Uji Coba
Dalam menguji coba program insertion sort, pertama inputkan
banyaknya bilangan yang akan ditampilkan. Dalam menginputkan banykannya
bilangan harus menginputkan angka,jika yang diinputkan adalah huruf (karakter)
maka akan muncul tampilan ” Input harus angka”. Sedangkan jika yang
diinputkan adalah angka yang kurang dari 0 , maka akan muncul tampilan ”Input
tidak boleh kurang dari 0”.Yang kedua adalah menginputkan metode pengisian
bilangan,ada 2 pilihan yaitu secara otomatis dan secara manual.Aturan dalam
menginputkan pilihan sama dengan menginputkan banyaknya bilangan.Jika user
menginputkan angka yang bukan 1 atau bukan 2 maka akan muncul pesan”Input
tidak ada dalam pilihan” Di bawah ini adalah tampilan program setelah
dijalankan.
Gambar 6.9 Input banyak bilangan dengan huruf.
Jika user menginputkan banyaknya bilangan yang akan ditampilkan
dengan huruf atau karakter maka akan muncul sebuah pesan yang memberitahu
bahwa user salah dalam menginput nilai, setelah itu user diminta untuk meninput
ulang banyaknya bilangan.
PUTU RUSDI ARIAWAN
Gambar 6.10 Input kurang dari 0.
Jika user menginputkan banyaknya bilangan yang akan ditampilkan
dengan nilai kurang dari 0 maka akan muncul sebuah pesan yang memberitahu
bahwa user salah dalam menginput nilai, setelah itu user diminta untuk meninput
ulang banyaknya bilangan.
Gambar 6.11 Input pilihan tidak sama dengan 1 atau 2.
Jika user tidak menginputkan pilihan metode input tidak sama dengan
satu atau tidak sama dengan dua maka akan muncul sebuah pesan yang
memberitahu bahwa user salah dalam menginputkan pilihan, setelah itu user
diminta untuk meninput ulang pilihan.
PUTU RUSDI ARIAWAN
Gambar 6.12 Input bilangan secara manual.
Gambar diatas adalah tampilan jika user memilih untuk menginputkan
bilangan secara manual.User akan menginputkan bilangan sebanyak N bilangan
yang diinginkan.
Gambar 6.13 Input bilangan secara otomatis.
Gambar diatas adalah tampilan jika user memilih untuk menginputkan
bilangan secara otomatis,komputer akan menginputkan bilangan secara acak
sesuai dan menampilkan banyak bilangan sesuai dengan yang diminta user saat
menginput banyaknya bilangan yang akan ditampilkan.
PUTU RUSDI ARIAWAN
Gambar 6.14 Tampilan akhir program insertion sort.
Gambar diatas adalah tampilan akhir dari program insertion sort.Pada saat
tampilan akhir muncul maka akan muncul konfirmasi untuk keluar dari
program.Jika user menekan hurup ”x” atau ”X” pada keyboard maka program
akan berhenti.Tetapi jika user menekan keyword selain ”x” atau ”X” maka
program akan mengulang lagi dari awal.
6.4.1.2 Kesimpulan
Kesimpumpulan yang didapat setelah menguji coba program insertion
sort adalah lama proses pengurutan data dari sekian banyak bilangan tidak
memerlukan waktu yang lama, waktu yang diperlukan untuk mengurutkan
bilangan tidak sampai 1 detik.Kelemahan dari program ini adalah ada saat user
tidak menginputkan nilai lalu menekan enter,pesan yang muncul tidak sesuai
dengan yang diinginkan.Pesan yang keluar sama dengan pesan yang keluar pada
saat user menginputkan karakter pada saat menginputakn nilai.
PUTU RUSDI ARIAWAN
6.4.2 Program Sequential Search
6.4.2.1 Uji Coba
Dalam menguji coba program sequential search, pertama inputkan
banyaknya bilangan yang akan ditampilkan. Dalam menginputkan banykannya
bilangan harus menginputkan angka,jika yang diinputkan adalah huruf (karakter)
maka akan muncul tampilan ” Input harus angka”. Sedangkan jika yang
diinputkan adalah angka yang kurang dari 0 , maka akan muncul tampilan ”Input
tidak boleh kurang dari 0”.Yang kedua adalah menginputkan metode pengisian
bilangan,ada 2 pilihan yaitu secara otomatis dan secara manual.Aturan dalam
menginputkan pilihan sama dengan menginputkan banyaknya bilangan.Jika user
menginputkan angka yang bukan 1 atau bukan 2 maka akan muncul pesan”Input
tidak ada dalam pilihan” Di bawah ini adalah tampilan program setelah
dijalankan.
Gambar 6.15 Input banyak bilangan dengan huruf.
Jika user menginputkan banyaknya bilangan yang akan ditampilkan
dengan huruf atau karakter maka akan muncul sebuah pesan yang memberitahu
bahwa user salah dalam menginput nilai, setelah itu user diminta untuk meninput
ulang banyaknya bilangan.
PUTU RUSDI ARIAWAN
Gambar 6.16 Input kurang dari 0.
Jika user menginputkan banyaknya bilangan yang akan ditampilkan
dengan nilai kurang dari 0 maka akan muncul sebuah pesan yang memberitahu
bahwa user salah dalam menginput nilai, setelah itu user diminta untuk meninput
ulang banyaknya bilangan.
Gambar 6.17 Input pilihan tidak sama dengan 1 atau 2.
Jika user tidak menginputkan pilihan metode input tidak sama dengan
satu atau tidak sama dengan dua maka akan muncul sebuah pesan yang
memberitahu bahwa user salah dalam menginputkan pilihan, setelah itu user
diminta untuk meninput ulang pilihan.
PUTU RUSDI ARIAWAN
Gambar 6.18 Input bilangan secara manual.
Gambar diatas adalah tampilan jika user memilih untuk menginputkan
bilangan secara manual.User akan menginputkan bilangan sebanyak Nbilangan
yang diinginkan.
Gambar 6.19 Input bilangan secara otomatis.
Gambar diatas adalah tampilan jika user memilih untuk menginputkan
bilangan secara otomatis,komputer akan menginputkan bilangan secara acak
sesuai dan menampilkan banyak bilangan sesuai dengan yang diminta user saat
menginput banyaknya bilangan yang akan ditampilkan.
PUTU RUSDI ARIAWAN
Gambar 6.20 Tampilan akhir program sequential search.
Gambar diatas adalah tampilan akhir dari program sequential
search.Pada saat tampilan akhir muncul maka akan muncul konfirmasi untuk
keluar dari program.Jika user menekan hurup ”x” atau ”X” pada keyboard maka
program akan berhenti.Tetapi jika user menekan keyword selain ”x” atau ”X”
maka program akan mengulang lagi dari awal.
6.4.2.2 Kesimpulan
Kesimpulan yang didapat setelah menguji program sequential search
diatas adalah suatu proses pencarian data menggunakan sequential memerlukan
waktu agak lama.Hal ini disebabkan karena proses sequential search merupakan
metode pencarian berurutan. Dari data yang diketahui, elemen yang dicari
dibandingkan satu persatu. Jika ditemukan, proses dihentikan. Jika tidak, proses
dilanjutkan hingga seluruh data dibandingkan, kemudian ditampilkan pesan
bahwa data tidak ditemukan.
PUTU RUSDI ARIAWAN
6.5 Simpulan
1. Untuk membangkitkan bilangan acak pada bahasa pascal bisa dilakukan
dengan menggunakan fungsi Random. Sebelum fungsi random dipakai,
sebelumnya harus diinisialisasi dengan prosedur Randomize.
2. Untuk melakukan lama pencatatan proses bisa dilakukan dengan mem-
packing waktu mulai dan waktu selesai sehingga didapat waktu dalam tipe
data longinteger, dari satuan long ini waktu yang didapat kita kurangkan dan
unpacking lagi, sehingga didapat waktu proses.
PUTU RUSDI ARIAWAN
BIODATA PENULIS
Nama : Putu Rusdi Ariawan
TTL : Denpasar. 19 April 1990
Agama : Hindu
Mahasiswa Teknik Elektro Unv. Udayana
Email : turusdi.info@gmail.com
www.facebook.com/turusdi