Download - modul algoritma dan pemprograman lanjut
-
Dalam sebuah program besar dan kompleks, untuk mempermudah dalam proses
pemprogramannya program tersebut dapat dipecah menjadi beberapa sub program yang
lebih kecil. Tiap sub program tadi disebut modul, nah modul tadi digunakan pada program
utama ketika dibutuhkan dengan memanggil modul tersebut. teknik pemprograman ini
disebut pemprograman modular.
Memecah program menjadi modul-modul tentunya akan lebih memudahkan dalam
mencari kesalahan, memperbaiki serta membuat dokumentasinya. Pembuatan modul di
Turbo Pascal dibagi dua jenis yaitu : Prosedur dan Fungsi. Prosedur atau Fungsi adalah suatu
modul program yang terpisah dari program utama, diletakan dalam blok tersendiri yang
berfungsi sebagai bagian dari program. Setiap prosedur diawali dengan kata Procedure,
sedangkan Fungsi diawali dengan kata cadangan Function.
Prosedur atau Fungsi banyak digunakan pada program terstruktur, karena :
1. Merupakan penerapan konsep modular, yaitu memecah program menjadi modul-
modul
2. Untuk hal-hal yang sering dilakukan berulang-ulang, cukup dituliskan sekali saja
dalam prosedur dan dapat dipanggil atau dipergunakan sewaktu-waktu bila
diperlukan.
Prosedur (Procedure)
Prosedur memiliki struktur yang sama dengan struktur program, yaitu terdiri dari
nama prosedur, deklarasi-deklarasi dan bagian perintah - perintahnya (statement atau aksi di
dalam prosedur). Semua deklarasi di dalam prosedur (contohnya variabel) bersifat lokal
sehingga hanya bisa digunakan oleh prosedur itu saja, sedangkan deklarasi di dalam program
utama bersifat global sehingga dapat digunakan di seluruh bagian program. Struktur umum
prosedur adalah sebagai berikut :
Apa harus selalu menggunakan prosedur?
Apakah dalam suatu program harus selalu terdapat prosedur? Jawabannya adalah
tidak. Bila kita membuat program yang sangat sederhana, misalnya program untuk
menampilkan kata hello world, maka gak usah menggunakan prosedur. Untuk lebih
jelasnya mari kita lihat contoh program menghitung luas dan keliling persegipanjang yang
menggunakan prosedur dan tanpa prosedur.
Procedure Nama_Prosedur ;
-
Pada program tanpa prosedur maka seluruh statement dituliskan di dalam blok
program utama, sehingga ketika program semakin besar maka blok program utama semakin
padat. Tetapi bila menggunakan prosedur maka di dalam blok program utama akan lebih
sedikit, karena hanya berisi nama prosedur yang dibutuhkan dan statement tambahan
lainnnya yang dibutuhkan. Pada contoh diatas nama prosedur yang dipanggil di dalam blok
program utama yaitu Hitung_Luas dan Hitung_Keliling.
Ketika kita membuat suatu program tanpa prosedur maka seluruh statement yang
terdapat di dalam program utama akan dieksekusi secara beruntun (sequential) dari atas ke
bawah, sedangkan bila menggunakan prosedur, maka program utama hanya akan
mengeksekusi prosedur-prosedur yang dipanggil, bila prosedur tersebut dipanggil di dalam
program utama, jadi bila untuk sementara kita tidak membutuhkannya, maka cara mudah
yang dapat kita lakukan yaitu tidak usah menghapusnya tetapi cukup dengan tidak
memanggilnya di dalam blok program utama.
Global Variabel VS Local Variabel
Global variabel adalah variabel yang dideklarasikan di program utama setelah
statement Var di dalam bahasa pemprograman pascal dan global Variabel bisa digunakan
di seluruh program. Sedangkan local variabel adalah variabel yang di deklarasikan didalam
sub program seperti prosedur, dan local variabel hanya bisa digunakan didalam prosedur itu
saja dan tidak bisa digunakan didalam prosedur lain maupun program utama.
Udah itu aja penjelasannya.....
uses crt;
var
p,l:byte;
ls,kel:integer;
begin
write('Masukan panjang : ');readln(p);
write('Masukan lebar : ');readln(l);
writeln;
ls:=p*l;
Kel:=(2*p)+(2*l);
writeln('Luas : ',ls);
writeln('Keliling : ',kel);
readln;
end.
Tanpa prosedur uses crt; var
p,l:byte;
ls,kel:integer;
Procedure Hitung_Luas;
begin
ls:=p*l;
writeln('Luas :',ls);
end;
Procedure Hitung_Keliling;
begin
kel:=(2*p)+(2*l);
writeln('Keliling :',kel);
end;
begin
write('Masukan panjang : ');readln(p);
write('Masukan lebar : ');readln(l);
writeln;
Hitung_Luas;
Hitung_Keliling;
readln;
end.
Dengan prosedur
-
Parameter
Parameter adalah sebuah variabel yang dideeklarasikan didalam prosedur tapi tidak
seperti local variabel parameter bisa digunakan di luar prosedur sebagai acuan atau patokan
dari nilai prosedur itu sendiri. Penulisan parameter adalah setelah pendeklarasian nama
prosedur.
Nah pada pendeklarasiannya di dalam prosedur parameter tersebut disebut
parameter formal (formal parameter). Sedangkan pada pemanggilannya di program utama
prosedur diikuti variabel yang digunakan untuk parameter ini disebut Parameter aktual
(Actual Parameter).
Untuk lebih jelasnya mari kita lihat contoh penggunaan prosedur dengan parameter
berikut:
Pada program diatas parameter yang ditandai dengan warna merah adalah parameter
formal dan yang berwarna biru adalah parameter aktual.
Kemudian Pada pengirimannya parameter dibagi menjadi dua yaitu
1. Pengiriman Parameter secara nilai (by Value)
2. Pengiriman Parameter secara acuan (by refrence)
Kita bahas satu persatu
Pengiriman parameter secara nilai (by value)
Jika parameter dikirim secara nilai (by value), maka parameter formal yang
terletak di dalam pendefinisan prosedur akan berisi nilai yang dikirimkan dari parameter
aktual, yang kemudian bersifat lokal di prosedur tersebut. Bila nilai parameter formal di dalam
prosedur tersebut berubah, maka tidak akan mempengaruhi nilai parameter aktual (nilai
parameter aktual tetap).
Procedure Nama_Prosedur(parameter1 : tipedata, parameter2 : tipedata);
uses crt;
var
ls,p,l:integer;
Procedure Hitung_Luas(panjang,lebar : integer);
begin
ls:=panjang*lebar;
writeln('Luas :',ls);
end;
begin
write('Masukan panjang : ');readln(p);
write('Masukan lebar : ');readln(l);
writeln;
Hitung_Luas(p,l);
readln;
end.
Contoh Program
-
Pengiriman parameter secara acuan (by reference)
Bila parameter dikirimkan secara acuan (by refence), maka perubahan-perubahan
yang terjadi pada nilai parameter formal di prosedur akan mempengaruhi nilai parameter
aktual di blok program utama. Perbedaanya hanya pada pendeklarasian parameter
formalnya saja dengan menambahkan var sebelumnya.
Fungsi (Function)
fungsi sebenarnya sama dengan sebuah prosedur. Perbedaannya, pada fungsi
terdapat pengembalian nilai, sehingga pada saat pemanggilan, fungsi dapat langsung
digunakan untuk mengisikan sebuah ekspresi.
Yang membedakan antara prosedur dan fungsi dalam pendeklarasiannya adalah
fungsi memiliki tipedata dan dapat digunakan dalam program utama maupun didalam fungsi
itu sendiri.
Berikut ini adalah contoh program yang menggunakan fungsi.
Dari contoh program diatas terlihat dalam penggunaannya fungsi terlihat sama persis
dengan prosedur yang telah dijelaskan sebelumnya, letak perbedaanya Cuma kalau fungsi
dapat menyimpan nilai yang bisa digunakan di program utama, oleh karena itu dalam
pemanggulannya fungsi bisa langsung melalui writeln,atau dengan menampilkan langsung
nilai yang tersimpan dalam fungsi tersebut. Nah jika muncul pertanyaan kapan harus
menggunakan fungsi dan kapan harus menggunakan prosedur. Jawabannya tergantung
kebutuhan program, jika program membutuhkan nilai kbalik ke program maka menggunakan
fungsi karena fungsi mempunyai kelebihan bisa menyimpan nilai. Sebaliknya jika tidak dan
hanya berisi perintah perintah saja maka bisa menggunakan prosedur.
Function Nama_Function : tipe_data;
uses crt;
Function Luas(p,l:integer ):integer;
Luas:=p*l;
var
pj,lbr:integer;
begin
writeln('Program Untuk Menghitung luas persegipanjang');
writeln;
write('Masukan panjang : ');readln(pj);
write('Masukan lebar : ');readln(lbr);
write('Luasnya = ',Luas(pj,lbr));
readln;
end.
Contoh Program
-
NamaArray[Indeks]:=Nilai;
3.
Array adalah salah satu jenis struktur data yang disediakan dalam bahasa pemprograman
pascal. dapat menyimpan beberapa nilai dan nilai nilai tadi disebut elemen array, dan setiap
elemen memiliki posisinya masing masing yang disebut indeks. Dalam pascal ukuran
kapasitas yang dapat ditampung dalam array harus ditentukan dalam pendeklarasian array
tersebut dan tidak bisa melebihi ukuran tersebut. Dan data yang disimpan dalam array harus
bertipe sama
Deklarasi Array
Pendeklarasian array adalah sebagai berikut:
Dalam contoh pendeklarasian array diatas, mendeklarasikan array yang ber indeks 1
hingga 10 bertipedata integer sehingga kapasitas data yang bisa ditampung dalam array
tersebut adalah 10 dan hanya dapat berisi bilangan bulat.
Mengakses elemen array
Setelah mengetahui cara pendeklarasian array, selanjutnya kita harus mengetahui
bagaimana cara untuk memasukkan nilai kedalam array tersebut. Langkah pertama yang
harus dilakukan adalah mengisikan nilai ke dalam elemen-elemen array bersangkutan. Bentuk
umum untuk pengisian elemen array adalah sebagai berikut.
var
n: array [1..10] of integer;
Contoh Pendeklarasian Array
NamaArray : array [Indeks Awal . . IndeksAkhir] of tipe data;
-
Untuk lebih memahaminya mari kita lihat ke contoh program
Pada program diatas terlihat bagaimana menginputkan nilai kedalam 1 -5 indeks array
yang tersedia/dideklarasikan sebelumnya. Nah program diatas dapat dipadukan dengan
perulangan sehingga terlihat lebih sederhana.
Mengapa Harus Menggunakan Array
Bagi yang baru mempelajari array, mungkin akan mucul pertanyaan kenapa harus
pakai array? Untuk menjawab pertanyaan tersebut, coba perhatikan contoh kasus berikut.
Apabila kita akan membuat program untuk menyimpan sekumpulan data, misalnya
data-data yang berupa bilangan, dimana jumlah dari data tersebut puluhan, ratusan atau
bahkan ribuan, apakah akan menggunakan variabel sebanyak data yang ada? Jawabannya
tentu tidak, karena hal tersebut merupakan hal yang sangat tidak efisien. Lihat contoh
program dibawah ini.
Uses Crt;
Var
N: array [1..5] of integer;
Begin
N[1] :=1; //mengisi elemen 1 dengan nilai 1
N[2] :=2; //mengisi elemen 2 dengan niali 2
N[3] :=3; //mengisi elemen 3 dengan niali 3
N[4] :=4; //mengisi elemen 4 dengan nilai 4
N[5] :=5; //mengisi elemen 5 dengan niali 5
end.
Contoh program
Uses Crt;
Var
N: array [1..5] of integer;
i:integer
Begin
For i:=1 to 5 do
N[i] :=i;
end.
Contoh program
Var
N1, n2, n3, n4, n5, n6, n7, n8, n9, n10 : real;
Begin
Writeln(masukkan data ke-1 : ); readln(n1);
Writeln(masukkan data ke-2 : ); readln(n2);
Writeln(masukkan data ke-3 : ); readln(n3);
Writeln(masukkan data ke-4 : ); readln(n4);
Writeln(masukkan data ke-5 : ); readln(n5);
Writeln(masukkan data ke-6 : ); readln(n6);
Writeln(masukkan data ke-7 : ); readln(n7);
Writeln(masukkan data ke-8 : ); readln(n8);
Writeln(masukkan data ke-9 : ); readln(n9);
Writeln(masukkan data ke-10 : ); readln(n10);
End.
Contoh program
-
Hal ini tentu akan merepotkan diri kita. Apabila dilihat, program di atas memang masih
pendek karena datanya hanya 10, nah gimana kalo ratusan ata bahkan ribuan?
Untuk mengatasi masalah ini, seharusnya kita menggunakan array untuk menyimpan data-
data tersebut sehingga program akan jauh lebih sederhana dan mudah dalam pengerjaannya.
Berikut ini perbaikan program di atas apabila kita menampung data-datanya ke dalam sebuah
array.
Apabila ternyata data berjumlah 100 atau 1000, maka kita hanya perlu mengganti nilai
dari ukuran array di atas dengan nilai yang sesuai. Alasan seperti inilah yang menyebabkan
kita perlu untuk menggunakan array.
Array Sebagai Parameter
Pada bab sebelumnya telah dijabarkan penggunaan Procedure/Function, nah pada
kasus kasus pemprograman tertentu dibutuhkan penggunaan array sebagai parameternya.
Contohnya adalah ketika pada saat kita akan melakukan pencarian maupun pengurutan danta
yang akan dibahas lebih lanjut pada bab selanjutnya. Untuk lebih jelasnya berikut adalah
contoh program penggunaan array dalam procedure .
Pada contoh program di atas terdapat prosedur yang memiliki parameter bertipe
array. Prosedur tersebut akan digunakan untuk melakukan pengisian elemen array sebanyak
N, yang sesuai ukuran array tersebut nilai N antara 1 sampai 100.
Hal yang Perlu diperhatikan dari contoh program diatas bahwa array yang dilewatkan sebagai
parameter ini harus dideklarasikan terlebih dahulu. Melalui type. Berikut ini contoh
penggunaan prosedur yang menggunakan parameter array yang salah dalam program.
Var
n : array [1 . . 10] of real;
i : integer;
begin
for i:= 1 to max do
writeln(Masukkan data ke-, i, : ); readln(n[i]);
end.
Contoh program
Type
Bilangan = array[1..100] of integer;
Procedure inputArray(a:bilangan; N:integer);
Var
i : integer;
Begin
For i := 1 to N do
Write (masukkan elemen array ke-, i); readln(A[i]);
End;
Contoh program
Procedure InputArray (A:array[1..100] of integer; );
-
Berikut ini yang benar.
Untuk lebih memahaminya, perhatikan contoh lengkap program yang menggunakan
array sebagai parameter dari sebuah prosedur.
OUTPUT:
Type
Larik=array[1..100] of integer;
Procedure InputArray [A:array of integer; N);
Uses crt;
type
Bilangan = array [1..100] of integer;
var
Arr:bilangan;
count:integer;
Procedure InputArray(A:bilangan; N:integer);
Var
i:integer;
Begin
Writeln (Memasukkan data :);
For i : 1 to N do
Write(Masukkan nilai A[, i, ] : ); readln(A[i]);
End;
Procedure OutputArray (A:bilangan; N:integer);
Var
i:integer;
begin
writeln(Menampilkan data :);
for i : 1 to N do
write (A[, i, ] = , A[i]);
end;
Begin
Write (Masukkan banyaknya elemen array :); readln(count);
Writeln;
OutputArray (Arr, count);
Readln;
End.
Contoh program
Memasukkan data :
Masukkan nilai A[1] : 10
Masukkan nilai A[2] : 20
Masukkan nilai A[3] : 30
Menampilkan data :
A[1] = 10
A[2] = 20
A[3] = 30
-
Record adalah jenis tipe data terstruktur yang berisi beberapa data, yang masing-
masing dapat berlainan tipe.
Suatu record dideklarasikan dengan bentuk sebagai berikut :
Masing-masing Nama_field dapat berupa satu atau beberapa nama pengenal dan
masing-masing dinamakan field. Bila nama_field berisi lebih dari satu field , antar field perlu
dipisahkan dengan koma. Masing-masing tipe dapat berupa tipe data apa saja termasuk array.
Berikut ini adalah contoh potongan program pendeklarasian record:
Pada contoh diatas di deklarasikan sebuah record barang yang berisi tiga field yaitu
Nama
Kulaitas
Harga
Dan dideklarasikan kembali sebagai variabel barang. Nah utnuk mengakses record tadi seperti
contohnya memasukkan data kedalam record dengan perintah
Contohnya: barang.Nama
type
Namarecord = RECORD
NamaField_1 : tipedata_1;
NamaField_2 : tipedata_2;
. . .
NamaField_n : tipedata_n;
end
Type
RecBarang = Record
Nama : String;
Kualitas : Char;
Harga : LongInt
End;
Var
Barang : RecBarang;
Contoh program
Variabel.Field
-
Berati perintah diatas adalah mengakses field nama dari variabel record yang bernama
barang.
Untuk lebih jelas memahami tentang record silahkan liat contoh program berikut.
Mengkopi isi Antar Record
Jika dua buah record (misal R1 dan R2) memiliki masing-masing field yang sama dan bertipe
sama maka untuk mengkopi isi dari antar record tersebut dapat dilakukan:
Perintah di atas merupakan penyederhanaan dari sederetan pernyataan berikut :
Untuk lebih jelasnya, berikut ini adalah contoh programnya
Uses crt;
Type
RecBarang = Record
Nama : String[25];
Kualitas : Char;
Harga : LongInt
End;
Var
Barang : RecBarang; {variabel bertipe record}
Begin
//Penugasan nilai terhadap field-field
Barang.Nama := Ubin TISKA 20x20;
Barang.Kualitas := A;
Barang.Harga := 14000;
//menampilkan isi field
writeln (Nama Barang : , Barang.Nama);
writeln (Kualitas : , Barang.Kualitas);
writeln (Harga : , Barang.Harga);
Readln
End.
Contoh program
R1 := R2;
R1.F1 := R2.F1;
R1.F2 := R2.F2;
R1.F3 := R2.F3;
-
Dengan adanya perintah Barang2 := Barang1;
maka semua field pada record Barang2 akan berisi recrod Barang1.
Pernyataan With
Untuk menyederhanakan notasi seperti :
Untuk menyederhanakan perintah yang berisi notasi record dalam Bahasa pemprograman
Pascal menyediakan pernyataan WITH. Bentuk pernyataan ini adalah sebagai berikut :
Pada bentuk ini, field-field yang terletak setelah perintah with dapat disebutkan tanpa
perlu menyertakan lagi nama record dan tanda titik. Untuk lebih jelasnya, perhatikan program
berikut yang merupakan alternatif lain dari program sebelumnya menggunakan with.
Uses crt;
Type
RecBarang = Record
Nama : string[25];
Kualitas : car;
Harga : longInt
End;
Var
Barang1, Barang2 : RecBarang; {variabel bertipe record}
Begin
//Mengisi nilai kedalam field-field record
Barang1.Nama := GULA;
Barang1.Kualitas := A;
Barang1.Harga := 14000;
//mengcopy record
Barang2 := Barang1;
//Menampilkan isi field
Writeln (Nama Barang : , Barang2.Nama);
Writeln (Kualitas : , Barang2.Kualitas);
Writeln (Harga : , Barang2.Harga);
Readln;
End.
Contoh program
Barang1.Nama
With [nama_record] do
-
Array Record
Elemen suatu array juga bisa berupa record. Sebagai contoh dapat dilihat di bawah ini.
Pada contoh di atas, DafBarang adalah array yang maksimum berisi 20 buah elemen bertipe
record.
Untuk mengakses suatu field dari array record, kita perlu menggunakan notasi :
Uses crt;
Type
RecBarang = Record
Nama : string[25];
Kualitas : car;
Harga : longInt
End;
Var
Barang : RecBarang;
Begin
With barang
begin
//Mengisi nilai kedalam field-field record
Barang.Nama := GULA;
Barang.Kualitas := A;
Barang.Harga := 14000;
//Menampilkan isi field
Writeln (Nama Barang : , Barang.Nama);
Writeln (Kualitas : , Barang.Kualitas);
Writeln (Harga : , Barang.Harga);
End;
Readln;
End.
Contoh program
Type
RecBarang = Record
Nama : String [25];
Kualitas : Char;
Harga : LongInt
End;
TabelBarang = Array [1..10] of RecBarang;
Var
DafBarang : TabelBarang;
Contoh program
DafBarang [indeks].NamaField
-
Rekursif adalah suatu proses yang memanggil dirinya sendiri. Pada dasarnya rekursif
menggunakan sub program yaitu fungsi dan prosedur. Yang membedakannya proses sub-
program tersebut memanggil dirinya sendiri, sedangkan prosedur ataupun fungsi dipanggil
hanya di program utama. Rekursif merupakan teknik pemrograman yang penting, dan
beberapa bahasa pemrograman modern mendukung keberadaan proses rekursif ini
termasuk bahasa pemprograman pascal.
Pemanggilan prosedur atau fungsi ke dirinya sendiri maksudnya adalah proses dalam
sub-program akan terus berulang dan hanya akan berhenti jika syarat syarat tertentu telah
terpenuhi. Pada beberapa persoalan, kemampuan seperti ini sangat berguna karena
mempermudah solusi. Namun demikian, rekursi juga memiliki kelemahan, jika dibandingkan
dengan menggunakan perulangan iteratif (for,while dan repeat) rekursif lebuh mungkin
terjadi overflow pada stack (stack tidak mampu menangani permintaan pemanggilan sub
program karena kehabisan memori) oleh karena itu dalam rekursif harus disediakan syarat
untuk berhenti agar tidak terjadi overflow yang telah dijelaskan diatas. teknik rekursif sering
digunakan pada kegiatan sehari hari khususnya pada rumus matematika. Contohnya
rekursif digunakan dalam penghitungan faktorial.mari kita lihat contoh faktorial berikut:
Pada contoh diatas terjadi proses rekursif yaitu proses pemanggilan dirinya sendiri secara
rumus dapat dituliskan
0! = 1
N! = N x (N-1)!, Untuk N > 0
Contoh di atas merupakan contoh hubungan rekursi, yang berarti bahwa nilai suatu
fungsi dengan argumen tertentu bisa dihitung dari fungsi yang sama dengan argumen yang
lebih kecil. Atau pekerjaan yang berulang-ulang hingga hasil akhirnya didapatkan. Untuk lebih
memahami berikut ini adalah contoh potongan programnya.
5*4*3*2*1=120
-
Diatas adalah program faktorial yang menggunakan rekursif, dari pprogram diatas
dapat dilihat terjadi pemanggilan fungsi faktorial didalam fungsi itu sendiri.
Uses crt;
var
x:integer;
function Faktorial(n:integer):longint;
begin
if (n=1)then
Faktorial:=1
else
Faktorial:=n*faktorial(n-1);
end;
begin
write(Berapa Faktorial :);readln(x);
writeln(x,faktorial ,=,faktorial(x));
readln;
end.
Contoh program
-
Pencarian (searching) suatu data yang tersimpan di dalam array merupakan hal yang
banyak ditemukan dalam kasus-kasus pemrograman. Maka dari itu, pada bagian ini kita akan
membahas mengenai cara yang seharusnya digunakan untuk melakukan hal tersebut serta
implementasi programnya di dalam bahasa Pascal. Dalam ilmu algoritma, metode pencarian
data di dalam array dibagi menjadi dua, yaitu
1. sequential search (metode pencarian beruntun/linier)
2. binary search (metode pencarian bagi dua/pencarian biner)
Berikut ini penjelasan lenih lanjut dari kedua metode tersebut.
Sequential Search
Metode ini merupakan konsep pencarian yang paling sederhana dan banyak
digunakan karena efektif untuk melakukan pencarian dari sekumpulan data, baik data sudah
terurut maupun yang belum terurut atau masih acak. Bila dibandingkan dengan yang lainnya,
metode ini memiliki cara kerja yang relatif mudah untuk dipahami. Dalam metode ini, data
yang dicari akan dibandingkandengan seluruh elemen array yang ada secara satu persatu.
Sebagai contoh, apabila kita memiliki array A yang memiliki indeks 1 sampai n dan kita akan
mencari nilai x di dalam array tersebut, maka nilai x tersebut akan dibandingkan dengan nilai
A[1] sampai A[n]. Dalam metode ini juga diterapkan bahwa apabila data ditemukan pada
indeks tertentu, maka proses pencarian akan dihentikan. Hal ini bertujuan agar proses
pembandingan nilai tidak dilakukan sampai indeks terakhir karena nilai yang dicari telah
ditemukan.Agar lebih memperjelas, perhatikan gambar contoh proses pencarian data
berikut.
Misalkan ada sebuah array A yang berisi data seperti dibawah ini:
Kemudian dicari nilai 6 pada array diatas menggunakan metode sequential search. Dimulai
dengan A[1] dicocokan dengan nilai yang dicari yaitu 6
Jika data pada indeks A[1] tidak sama dengan data yang dicari maka pencarian dilanjutkan ke indeks
selanjutnya, dan terus seperti itu hingga data ditemukan atau hingga akhir indeks array jika data
belum ditemukan juga
A = 5 1 7 6 8 9 3 10 2 4
A = 5 1 7 6 8 9 3 10 2 4
A = 5 1 7 6 8 9 3 10 2 4
A[1]=6?
A[2]=6?
-
Data ditemukan dan berada pada indeks 4
Pada proses pencarian diatas, dapat dilihat prosesnya adalah membandingkan nilai yang
dicari yaitu pada contoh diatas adalah 6 kesemua elemen array (dari A[1] sampai A[10]).
Padasaat menemukan nilai yang dicari pada elemen ke A[4], maka pencarian akan dihentikan
karena telah menemukan nilai yang dicari.
Berikut ini contoh program yang akan menunjukkan implementasi dari pencarian
array dengan menggunakan metode di atas. Apabila data yang dicari ditemukan dalam array,
maka program akan menampilkan indeks dimana data tersebut berada. Sebaliknya, apabila
data tidak ditemukan maka program akan mengembalikan indeks nol dan ditampilkan pesan
bahwa nilai tidak ditemukan.
A = 5 1 7 6 8 9 3 10 2 4
A = 5 1 7 6 8 9 3 10 2 4
A[3]=6?
A[4]=6?
Uses crt;
Const
A : array [1..5] of integer = (75, 73, 78, 81, 80);
Var
i, x, indeks : integer;
begin
write (Masukkan nilai yang akan dicari : ); readln(x);
indeks := 0;
for i := 1 to 5 do
begin
if A[i] = x then
begin
indeks := I;
break;
end;
end;
if indeks > 0 then
writeln (x, ditemukan pada indeks ke-, indeks)
else
writeln(Data tidak ditemukan);
readln;
end.
Contoh program
Masukkan nilai yang akan dicari : 78
78 ditemukan pada indeks ke-3
-
Dari pembahasan diatas kita sekarang sudah dapat mencari sebuah nilai dari data
pada array dengan metode sequential search. Yaitu metode dengan mencocokkan satu
persatu indeks array dengan data yang dicari. Jadi kemungkinan langkah yang dijalankan
dalam mencari data setidaknya sebesar kapasitas array tersebut. Jadi bagaimana jika data
tersebut disimpan dalam deretan array yang berindeks 1000,atau lebih banyak lagi. Maka
sequential search akan melakukan perbandingan ke seluruh indeks aray tersebut. Dan
bayangkan berapa memori yang digunakan dalam melakukan itu. Hal inilah yang dikatakan
sebagai kelemahan sequential search yaitu jika datanya banyak maka prosesnya akan berat
juga.
Binnary Search
Berbeda dengan metode pencarian linier (sequential search) yang dapat digunakan
untuk data belum terurut/acak, metode pencarian binnary ini hanya dapat digunakan untuk
data-data yang telah terurut, baik secara menaik maupun menurun.
Dalam Metode ini berusaha memperkecil area atau range dari tada yang dicari dengan
memecah mecahnya sehingga proses pencariannya dapat memiliki langkah yang lebih
sedikit. Sebagai contoh, apabila terdapat array A yang memiliki sejumlah elemen kita misalkan
n dengan indeks 1 sampai n dan datanya telah terurut secara menaik, maka array tersebut
akan dibagi pada indeks ke-k, dimana k = n + 1 div 2. hal tersebut mengakibatkan array A
terbagi menjadi dua bagian, yaitu dari A[1] . . A[k-1] dan A[k+1] . . A[n], sedangkan a[k]
menjadi pembatas antara dua bagian tersebut. Apabila x (nilai yang dicari) sama dengan nilai
A[k] maka hentikan pencarian, sedangkan bila tidak, proses selanjutnya adalah memeriksa
apakah nilai A[k] > x ataukah A[k] < x. Bila A[k] lebih besar dari x, maka ulangi metode
pencarian tersebut untuk A[1] sampai A[k-1]. Sebaliknya, apabila A[k] lebih kecil dari x, maka
ulangi metode pencarian tersebut untuk A[k+1] sampai A[n]. Untuk lebih jelasnya lihat
gambar dibawah ini.
Misalkan nilai yang dicari adalah 10
Langkah pertama adalah memecah data menjadi dua bagian.
Kemudian membandingkan apakah A[5]=data yang dicari(10)?. Jika ya maka data
ditemukan jika tidak, selanjutnya dibandingkan kembali jika a[5] lebih besar dari 10 maka
bagian pencarian data ke sebelah kiri dari A[5], sebaliknya jika A[5] lebih kecil maka
pencariannya disebelah kanan
A = 1 2 3 4 5 6 7 10 11 12
A = 1 2 3 4 5 6 7 10 11 12
A = 1 2 3 4 5 6 7 10 11 12
-
Karena A[5]=5 lebih kecil dari 10 maka pencarian data di alihkan ke sebelah kanan
yaitu indeks A[6] sampai dengan A[10]. Proses sebelumnya diulang kembali yaitu memecah
data menjadi dua bagian
Dan karena a[8]=10 maka data ditemukan dan pencarian dihentikan.
Dari contoh diatas terlihat dalam binnary search langkah pencarian data dapat lebih
sedikit dari pencarian sebelumnya, sehingga dapat lebih cepat menemukan datanya. Dan ini
merupakan kelebihan dari binnary search. Untuk lebih memperjelas pembahasan serta
menunjukkan implementasinya, perhatikan contoh program di bawah ini.
A = 1 2 3 4 5 6 7 10 11 12
Uses crt;
Const
A : array [1..10] of integer = (1,2,3,4,5,6,7,10,11,12);
Var
idxAwal,idxAkhir,k,x : integer;
ketemu : boolean;
begin
write (masukkan nilai yang akan dicari : ); readln(x);
idxAwal := 1;
idxAkhir := 10;
ketemu := false;
while (not ketemu) and (idxAwal
-
Selain pencarian, pengurutan data merupakan salah satu permasalahan umum yang
juga sering dijumpai dalam pemrograman. Sebagai bukti nyata, dalam metode pencarian
binnary di atas yang mengharuskan data diurutkan sebelum dilakukan proses pencarian.
Dalam pemrograman, terdapat beberapa metode untuk melakukan pengurutan data.
Dibawah ini adalah beberapa metode pengurutan data.
1. Bubble Sort
2. Selection Sort
3. Insertion Sort
4. Quick Sort
5. Merge Sort
6. Shell Sort
Bubble Sort
Metode pengurutan gelembung (Bubble Sort) diinspirasikan oleh gelembung sabun
yang berada dipermukaan air. Karena berat jenis gelembung sabun lebih ringan daripada
berat jenis air, maka gelembung sabun selalu terapung ke atas permukaan. Prinsip di atas
dipakai pada pengurutan gelembung.
Bubble sort (metode gelembung) adalah metode/algoritma pengurutan dengan
dengan cara melakukan penukaran data dengan tepat disebelahnya secara terus menerus
sampai bisa dipastikan dalam satu iterasi tertentu tidak ada lagi perubahan. Jika tidak ada
perubahan berarti data sudah terurut. Disebut pengurutan gelembung karena masing-masing
kunci akan dengan lambat menggelembung ke posisinya yang tepat.Bubble sort ini adalah
metode pengurutan yang paling sederhana dan paling mudah dimengerti, namun kelemahan
dari bubble sort adalah kemungkinan langkah dari prosesnya sangat banyak dan ini
menyebabkan pengurutan data yang banyak menjadi sangat berat dan tidak efisien. Untuk
lebih jelasnya lihat clangkah langkah pengurutan menggunakan metode bubble sort.
Misal sebuah array berisi data seperti dibawah ini:
langkah ke-1:
6 4 3 2
6 4 3 2 4 6 3 2
4 6 3 2 4 3 6 2
4 3 6 2 4 3 2 6
-
langkah ke-2:
langkah ke-3:
Hasil akhir setelah terurut
Diatas adalah langkah demi langkah pengurutan data menggunakan metode bubble
sort. Prosesnya akan membandingkan satu persatu nilai dalam array dan jika terdapat
pembanding sebelah kanan angka yang lebih kecil maka akan ditukar dengan angka yang
disebelah kiri dan proses ini akan terus diulangi sebanyak data yang ada dikurang 1. Sebagai
contoh array diatas memiliki empat buah angka maka langkahnya tersebut akan dilakukan 3
kali. Berikut ini adalah implementasinya dalam bahasa pemprograman pascal.
4 3 2 6 3 4 2 6
3 4 2 6 3 2 4 6
3 2 4 6 3 2 4 6
3 2 4 6 2 3 4 6
2 3 4 6 2 3 4 6
2 3 4 6 2 3 4 6
2 3 4 6
-
Selection Sort
Konsep dari metode Selection sort adalah Memindahkan elemen dengan cara
membandingkan elemen sekarang dengan elemen yang berikutnya sampai dengan elemen
terakhir. Jika ditemukan elemen lain yang lebih kecil dari elemen sekarang maka dicatat
posisinya dan kemudian ditukar dan begitu seterusnya.
Proses pengurutan menggunakan metode selection sort secara terurut nik adalah sebagai
berikut:
1. Mencari data terkecil dari data pertama sampai dengan data yang terakhir. kemudian
ditukar posisinya dengan data pertama.
2. Mencari data terkecil dari data kedua sampai dengan data terakhir, kemudian ditukar
posisinya dengan data kedua.
3. Mencari data terkecil dari data ketiga sam[ai data terakhir, kemudian ditukar
posisimya dengan data ketiga.
4. Begitu seterusnya sampai semua data terurut naik. Apabila terdapat n buah data yang
akan diurutkan, maka membutuhkan (n-1) langkah pengurutan, dengan data terakhir,
yaitu data ke n tidak perlu diurutkan karena hanya tinggal data satu-satunya.
Uses crt;
Const
n = 5;
A : array [1..n] of integer = (25, 22, 18, 20, 15);
Var
j,k,temp : integer;
begin
//menampilkan data sebelum proses pengurutan
Writeln(Data sebelum diurutkan);
For j := 1 to n do
Writeln(A[, j,] = , A[j]);
//Melakukan proses pengurutan data}
For j:= 1 to n-1 do
begin
For k:= n downto j+1 do
begin
If A[k] < A[k-1] then
begin
Temp :=A[k];
A[k] := A[k-1];
A[k-1] := temp;
End;
End;
End;
//Menampilkan data setelah proses pengurutan
Writeln;
Writeln (Data setelah diurutkan);
For j:= 1 to n do
Writeln(A[, j, ] = , A[j]);
Readln;
End.
-
Diatas adalah langkah langkah pengurutan data menggunakan metode selection sort. Dan
berikut adalah implementasinya dalam bahasa pemprograman pascal
Uses crt;
Const
n = 5;
A : array [1..5] of integer = (25, 22, 18, 20, 15);
Var
j,k,temp : integer;
begin
//menampilkan data sebelum proses pengurutan
Writeln(Data sebelum diurutkan);
For j := 1 to 5 do
Writeln(A[, j,] = , A[j]);
//Melakukan proses pengurutan data}
For j:=1 to 4 do
begin
for k:=j+1 to 5 do
begin
If (A[k] < A[j]) then
begin
temp := A[k];
A[k] := A[j];
A[j] := temp;
end;
end;
end;
//Menampilkan data setelah proses pengurutan
Writeln;
Writeln (Data setelah diurutkan);
For j:= 1 to 5 do
Writeln(A[, j, ] = , A[j]);
Readln;
End.
-
Insertion Sort
Insertion Sort merupakan algoritma yang efisien untuk mengurutkan angka yang
mempunyai jumlah elemen sedikit. Dimana:
Input : deretan angka sejumlah n buah
Output : permutasi (pengurutan) sejumlah n angka dari input yang sudah terurut
secara ascending maupun descending
Metode penyisipan (Insertion sort) bertujuan untuk menjadikan bagian sisi kiri array
terurutkan sampai dengan seluruh array berhasil diurutkan. Metode ini mengurutkan
bilangan-bilangan yang telah dibaca; dan berikutnya secara
berulang akan menyisipkan bilangan-bilangan dalam array yang belum terbaca ke sisi kiri
array yang telah terurut. Insertion Sort bekerja seperti kegiatan mengurutkan kartu di tangan.
Dimulai dengan tangan kiri yang kosong dan kartunya tertumpuk di meja. Selanjutnya kita
ambil satu persatu kartu di meja dan diletakkan di tangan kiri dengan posisi yang benar
(terurut). Untuk menemukan posisi yang banar, maka kita harus membandingkan satu
persatu kartu yang ada (di tangan kiri) secara berurutan.
Contoh proses Insertion Sort :
Bagian abu-abu (dua bilangan pertama) sekarang dalam keadaan terurut secara relatif.
Berikutnya, kita perlu menyisipkan bilangan pada indeks ketiga yaitu (4) ke dalam bagian abu-
abu sehingga setelah penyisipan tersebut, bagian biru/abu-abu tetap dalam keadaan terurut
secara relatif.
-
Berikut adalah langkah - langkanya:
pertama : Ambil bilangan ketiga (4).
Kedua : Geser bilangan kedua (10) shg ada ruang untuk disisipi.
Ketiga : Sisipkan bilangan 4 ke posisi yang tepat
Sekarang, tiga bilangan pertama sudah terurut secara relatif dan kita sisipkan bilangan
keempat kepada tiga bilangan pertama tsb. Setelah penyisipan, empat bilangan pertama
haruslah dalam keadaan terurut secara relatif.
Ulangi proses tsb sampai bilangan terakhir disisipkan
-
Berikut ini adalah implementasi bahasa pemprograman pascal dari inserion Sort.
Uses crt;
Const
n = 5;
A : array [1..5] of integer = (25, 22, 18, 20, 15);
Var
j,k,temp : integer;
begin
//menampilkan data sebelum proses pengurutan
Writeln(Data sebelum diurutkan);
For j := 1 to 5 do
Writeln(A[, j,] = , A[j]);
//Melakukan proses pengurutan data}
Begin
For i := 2 to 4 do
Begin
temp := A[i];
j := i;
While ((j > 1) AND (A[j-1] > temp)) do
Begin
A[j] := A[j-1];
j := j - 1;
End;
A[j] := temp;
End;
//Menampilkan data setelah proses pengurutan
Writeln;
Writeln (Data setelah diurutkan);
For j:= 1 to 5 do
Writeln(A[, j, ] = , A[j]);
Readln;
End.
-
Dalam kasus-kasus pemrograman tertentu kita sering disudutkan untuk menggunakan
file sebagai media yang digunakan untuk menyimpan data-data, baik berupa data input
(untuk masukan) maupun sebagai data output (untuk keluaran). Sebagai contoh, apabila kita
menggunakan sistem operasi Microsoft Windows maka kita akan menemukan file sistem
seperti autoexec.bat, config.sys, system.ini dan lainnya. File tersebut sebenarnya digunakan
untuk menyimpan data-data secara terpisah sehingga nilainya dapat diubah dengan mudah
sesuai dengan kebutuhan. Sebagai seorang programmer, kita tentu dituntut untuk dapat
menggunakan (mengakses) file dari dalam prograam yang kita buat. Berdasarkan prosedur
yang ada, proses pengaksesan file di dalam bahasa Pascal terdiri dari emapt tahap, yaitu :
a. Menghubungkan file fisik yang akan dibuka atau dibuat dengan variabel file
b. Membuka file
c. Melakukan operasi file (membaca atau menulis)
d. Menutup file
Variabel File
Sebelum file dapat dibuka atau dibuat oleh program, kita harus menghubungkannya
dengan variabel file terlebih dahulu. Variabel file merupakan peralatan logik yang digunakan
sebagai perantara dalm mentransfer atau membaca data dari atau ke sebuah file fisik yang
tersimpan di dalam disk. Dengan kata lain, sebenarnya kita tidak secara langsung
memanipulasi file fisik tersebut, melainkan melalui variabel file. Dalam bahasa Pascal, variabel
seperti ini dianggap sebagai variabel biasa yang dideklarasikan dengan tipe file tertentu. Cara
yang harus dilakukan untuk dapat menghubungkan file fisik dengan variabel file adalah
dengan menggunakan perintah Assign, yang memeiliki bentuk umum sebagai berikut.
NamaVariabelFile merupakan nama variabel yang sebelumnya harus dideklarasikan
terlebih dahulu, sedangkan NamaFileFisik merupakan nama file yang akan dibuka atau dibuat.
Perlu diperhatikan bahwa nama file tersebut harus dituliskan secara lengkap beserta lokasi
atau path-nya. Sebagai contoh, apabila kita ingin membuka file dengan nama CONTOH.TXT
yang terdapat di dalam direktori COBA di drive D, maka kode yang harus dituliskan adalah
sebagai berikut.
Sedangkan apabila file yang akan kita akses berada dalam satu direktori dengan program (file
eksekusi) yang kita buat, maka kita tidak perlu menuliskan lokasi atau path-nya. Artinya kita
hanya perlu untuk menuliskan nama file-nya saja seperti berikut.
Assign (NamaVariabelFile, NamaFileFisik);
Var
A:TextFile; //mendeklarasikan variabel file denagn nama F
Begin
Assign (A, D:\COBA\CONTOH.TXT);
...
end.
Assign (F, CONTOH.TXT);
-
Pada kode di atas, file CONTOH.TXT akan dihubungkan dengan variabel F. Selanjutnya
yang akan dimanipulasi di dalam program adalah variabel F. Namun karena variabel tersbut
sebenarnya menunjuk ke file fisik, maka setiap perubahan yang terjadi di dalam variabel F
tentu akan mempengaruhi isi dari file CONTOH.TXT.
Hal yang perlu diperhatikan di sini adaalah bahwa walaupun file tersebut sudah
terhubung dengan variabel file, namun file masih dalam keadaan tertutup sehingga kita perlu
membukanya terlebuh dahulu sebelum kita mengakses data yang terdapat di dalamnya.
Membuka File
Setelah file tersebut dihubungkan dengan variabel file, maka langkah selanjutnya
yang perlu dilakukan adalah membuka file. Dalam bahasa Pascal, terdapat tiga buah prosedur
yang dapat digunakan untuk membuka file, yaitu Rewrite, Reset dan Append.
a. Perintah Rewrite
Perintah ini digunakan untuk membuka file yang sama sekali belum terdapat di
dalam disk. Artinya, di sini kompiler akan melakukan proses pembuatan file baru
sekaligus membuka file tersebut. Bentuk umum dari prosedur Rewrite adalah sebagai
berikut.
Bila file yang dibuka berupa file teks, maka file tersebut akan bersifat writeonly
atau tidak dapat dibaca, artinya operasi yang diizinkan untuk file tersebut hanyalah
operasi tulis. UkuranRecord merupakan ekspresi yang bersifat opsional yang hanya
disertakan apabila file yang dibuka merupakan file tanpa tipe. Nilai tersebut akan
digunakan sebagai ukuran record dalam transfer data. Nilai tersebut akan digunakan
sebagai ukuran record dalam transfer data. Apabila dihilangkan, maka UkuranRecord
ini alan dianggap bernilai 128 byte. Untuk lebih memahami penggunaan prosedur ini,
perhatikan contoh program sederhana ini.
Jalankan program tersebut dan lihatlah drive D pada komputer anda, maka di
situ pasti akan tercipta file baru dengan nama CONTOH.TXT dimana isinya kosong.
Apabila anda bereksperimen untuk membuka filee yang sudah ada sebelumnya
dengan menggunakan prosedur Rewrite maka isi dari file tersebut akan ditimpa
dengan isi file baru. Satu hal lagi yang perlu diperhatikan adalah bahwa etelah
Rewrite(NamaVariabelFile[:File;UkuranRecord : Word]);
Var
F : TextFile;
Begin
Assign (F, D:\CONTOH.TXT);
Rewrite (F);
End.
-
pemanggilan prosedur Rewrite, fungsi EOF (end-of-file) akan selalu menghasilkan nilai
true.
b. Perintah Reset
Perintah ini digunakan untuk membuka file yang sebelumnya sudah ada di dalam
disk. Hal ini bertujuan untuk membaca isi dari file tersebut untuk kemudian
dimanipilasi sesuai dengan kebutuhan. Perlu sekali untuk diperhatikan bahwa
apabila file yang dibuka merupakan file teks, maka variabel file akan bersifat read
only (hanya dapat dibaca). Berikut ini prototype dari prosedur Reset.
UkuranRecord merupakan ekspresi yang bersifat operaional yang hanya
disertakan apabila file yang dibuka merupakan file tanpa tipe. UkuranRecord sendiri
berfungsi untuk menentukan ukuran record dalam proses transfer data. Apabila nilai
tersebut dihilangkan, maka nilainya akan dianggap 128 byte. Sebagai contoh, kita
telah memiliki file SAMPLE.TXT yang disimpan di rive D dan isinya seperti berikut.
Selanjutnya kita ingin membaca isi file tersebut dan ditampilkan di layar
monitor, maka kita dapat menggunakan Perintah Reset seperti yang tampak pada
kode berikut.
Sekarang coba jalankan program tersebut dan akan melihat bahwa seluruh isi
dari file SAMPLE.TXT akan ditampilkan di layar monitor. Apabila kita menggunakan
Reset (NamaVariabelFile [: file; UkuranRecord: word]);
Teknik Pemrograman Pascal
Oleh : Budi Raharjo
Tahun : 2005
Penerbit : INFORMATIKA
Uses crt;
Var
F : TextFile;
Teks : string;
Begin
Assign (F, D :\SAMPLE.TXT);
Reset (F);
While not eof (F ) do
begin
Readln (F, teks) ;
Writeln (teks);
End;
Close(F);
Readln;
End.
-
perintah Reset pada file yang belum terdapat di dalam disk maka kompiler akan
menampilkan pesan kesalahan pada saat program dijalankan.
c. Perintah Append
Perintah ini digunakan untuk menambahkan isi file yang sebelumnya sudah
terdapat di dalam disk. Isi yang ditambahkan selalu berada pada bagian akhir dari
isi file yang sudah ada sebelumnya. Dalam menggunakan prosedur ini kita tidak
perlu memanggil perintah Rewrite maupun reset karena prosedur Append secara
otomatis akan membuka file yang telah dihubungkan dengan variabel file. Namun
sebagai catatan bagi Anda bahwa prosedur Append hanya dapat digunakan apabila
file yang dibuka merupakan file teks. Berikut ini bentuk umum dari prosedur
Append.
Apabila anda membuka file teks yang belum ada didalam diks dengan
menggunakan prosedur Append, maka akan terjadi kesalahan pada saat program
sedang berjalan (run-time). Setiap pemanggila prosedur Append, file bersifat write-
only (hanya dapat ditulis) dan posisi file akan diset pada bagian akhir baris file.
Untuk dapat lebih memahaminya, buatlah file teks (*.TXT) dengan program teks
editor yang tersedia, misalnya Notepad, kemudian isikan teks berikut ke dalamnya.
Sebagai contoh, file tersebut disimpan dengan nama TEST.TXT pada drive D di
dalan direktori COBA. Selanjutnya kita ingin menamnbahkan dua buah baris data
ke dalam file di atas, maka kita dapat melakukannya melalui kode program dibawah
ini.
Procedure Append (NamaVariabelFile: Text ) ;
Ini adalah data yang dituliskan pada baris pertama.
Ini adalah data yang dituliskan pada baris pertama.
Uses Crt;
Var
F: TextFile;
Begin
Assign (F,D:\COBA\TEST.TXT) ;
Append (F) ; //Membuka file untuk di tambah isinya
//Menambahkan data ke dalam file
writeln (F,Ini adalah data pertama yang ditambahkan) ;
writeln (F,Ini adalah data kedua yang ditambahkan) ;
close(F) ;
end.
Ini adalah data yang dituliskan pada baris pertama
Ini adalah data yang dituliskan pada baris kedua
Ini adalah data pertama yang ditambahkan
Ini adalah data kedua yang ditambahkan