Anda di halaman 1dari 30

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 modulmodul 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 :

Procedure Nama_Prosedur ;

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.

Tanpa prosedur 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.

uses crt; var p,l:byte; ls,kel:integer;

Dengan prosedur

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.

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.....

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.
Procedure Nama_Prosedur(parameter1 : tipedata, parameter2 : tipedata);

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:
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

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).

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.
Function Nama_Function : tipe_data;

Berikut ini adalah contoh program yang menggunakan fungsi.


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

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.

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:
NamaArray : array [Indeks Awal . . IndeksAkhir] of tipe data;

Contoh Pendeklarasian Array


var n: array [1..10] of integer;

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.
NamaArray[Indeks]:=Nilai;

Untuk lebih memahaminya mari kita lihat ke contoh program


Uses Crt; Var N: array [1..5] of integer; Begin N[1] :=1; //mengisi elemen N[2] :=2; //mengisi elemen N[3] :=3; //mengisi elemen N[4] :=4; //mengisi elemen N[5] :=5; //mengisi elemen end.

Contoh program

1 2 3 4 5

dengan dengan dengan dengan dengan

nilai niali niali nilai niali

1 2 3 4 5

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.
Uses Crt; Var N: array [1..5] of integer; i:integer Begin For i:=1 to 5 do N[i] :=i; end.

Contoh program

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.
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 datadata 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.
Var n : array [1 . . 10] of real; i : integer; begin for i:= 1 to max do writeln(Masukkan data ke-, i, end.

Contoh program

); readln(n[i]);

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 .
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;

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. Procedure InputArray (A:array[1..100] of integer; );

Berikut ini yang benar.


Type Larik=array[1..100] of integer; Procedure InputArray [A:array of integer; N);

Untuk lebih memahaminya, perhatikan contoh lengkap program yang menggunakan array sebagai parameter dari sebuah prosedur.
Uses crt; Contoh program 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.

OUTPUT:

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 masingmasing dapat berlainan tipe. Suatu record dideklarasikan dengan bentuk sebagai berikut :
type Namarecord = RECORD NamaField_1 : tipedata_1; NamaField_2 : tipedata_2; . . . NamaField_n : tipedata_n; end

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:
Type RecBarang = Record Nama : String; Kualitas : Char; Harga : LongInt End; Var Barang : RecBarang;

Contoh program

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
Variabel.Field

Contohnya: barang.Nama

Berati perintah diatas adalah mengakses field nama dari variabel record yang bernama barang. Untuk lebih jelas memahami tentang record silahkan liat contoh program berikut.
Uses crt; Contoh program 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.

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: R1 := R2; Perintah di atas merupakan penyederhanaan dari sederetan pernyataan berikut : R1.F1 := R2.F1; R1.F2 := R2.F2; R1.F3 := R2.F3;

Untuk lebih jelasnya, berikut ini adalah contoh programnya

Uses crt; Contoh program 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.

Dengan adanya perintah Barang2 := Barang1; maka semua field pada record Barang2 akan berisi recrod Barang1. Pernyataan With Untuk menyederhanakan notasi seperti : Barang1.Nama Untuk menyederhanakan perintah yang berisi notasi record dalam Bahasa pemprograman Pascal menyediakan pernyataan WITH. Bentuk pernyataan ini adalah sebagai berikut : With [nama_record] do

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 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

Array Record Elemen suatu array juga bisa berupa record. Sebagai contoh dapat dilihat di bawah ini.

Type RecBarang = Record Nama : String [25]; Kualitas : Char; Harga : LongInt End; TabelBarang = Array [1..10] of RecBarang; Var DafBarang : TabelBarang;

Contoh program

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 : DafBarang [indeks].NamaField

Rekursif adalah suatu proses yang memanggil dirinya sendiri. Pada dasarnya rekursif menggunakan sub program yaitu fungsi dan prosedur. Yang membedakannya proses subprogram 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:

5*4*3*2*1=120
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.

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

Diatas adalah program faktorial yang menggunakan rekursif, dari pprogram diatas dapat dilihat terjadi pemanggilan fungsi faktorial didalam fungsi itu sendiri.

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:

A=

10

Kemudian dicari nilai 6 pada array diatas menggunakan metode sequential search. Dimulai dengan A[1] dicocokan dengan nilai yang dicari yaitu 6
A[1]=6?

A=

10

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[2]=6?

A=

10

A[3]=6?

A=

10

A[4]=6?

A=

10

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.

Uses crt; Contoh program 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.
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 A= 1 2 3 4 5 6 7 10 11 12

Langkah pertama adalah memecah data menjadi dua bagian. A= 1 2 3 4 5 6 7 10 11 12

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

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 A= 1 2 3 4 5 6 7 10 11 12

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.

Contoh program 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<= idxAkhir) do begin k:= (idxAwal + idxAkhir) div 2; if A[k] = x then ketemu := true else begin if A[k] < x then idxAwal := k + 1; else begin idxAkhir := k 1; end; end; end; if ketemu then writeln (x, ditemukan pada indeks ke-, k) else writeln(x, tidak ditemukan); end; readln; end.
Masukkan nilai yang akan dicari : 10 78 ditemukan pada indeks ke-8

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. 2. 3. 4. 5. 6. Bubble Sort Selection Sort Insertion Sort Quick Sort Merge Sort 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: 6 4 3 2

langkah ke-1: 6 4 4 4 6 3 3 3 6 2 2 2 4 4 4 6 3 3 3 6 2 2 2 6

langkah ke-2: 4 3 3 3 4 2 2 2 4 6 6 6 3 3 3 4 2 2 2 4 4 6 6 6

langkah ke-3: 3 2 2 2 3 3 4 4 4 6 6 6 2 2 2 3 3 3 4 4 4 6 6 6

Hasil akhir setelah terurut 2 3 4 6

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.

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.

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.

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 abuabu 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. b. c. d. Menghubungkan file fisik yang akan dibuka atau dibuat dengan variabel file Membuka file Melakukan operasi file (membaca atau menulis) 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.
Assign (NamaVariabelFile, NamaFileFisik);

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.
Var A:TextFile; //mendeklarasikan variabel file denagn nama F Begin Assign (A, D:\COBA\CONTOH.TXT); ... end.

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 (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.
Rewrite(NamaVariabelFile[:File;UkuranRecord : Word]);

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.
Var F : TextFile; Begin Assign (F, D:\CONTOH.TXT); Rewrite (F); End.

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

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.
Reset (NamaVariabelFile [: file; UkuranRecord: word]);

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.
Teknik Pemrograman Pascal Oleh : Budi Raharjo Tahun : 2005 Penerbit : INFORMATIKA

Selanjutnya kita ingin membaca isi file tersebut dan ditampilkan di layar monitor, maka kita dapat menggunakan Perintah Reset seperti yang tampak pada kode berikut.
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.

Sekarang coba jalankan program tersebut dan akan melihat bahwa seluruh isi dari file SAMPLE.TXT akan ditampilkan di layar monitor. Apabila kita menggunakan

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.
Procedure Append (NamaVariabelFile: Text ) ;

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 writeonly (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.
Ini adalah data yang dituliskan pada baris pertama. Ini adalah data yang dituliskan pada baris pertama.

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.
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

Anda mungkin juga menyukai