MODUL KULIAH STRUKTUR DATA
UNIVERSITAS PUTRA INDONESIA “YPTK” PADANG
1
BAHAN AJAR MATA KULIAH STRUKTUR DATA Tinjauan Mata Kuliah 1.1. Deskripsi Mata Kuliah Algoritma
dan
struktur
data
merupakan
matakuliah
yang
mempelajari bagaimana membuat program terstruktur. Matakuliah praktikum dengan menggunakan bahasa pemrograman Pascal ini mempelajari materi array, record, prosedur, fungsi, sorting, searching dan file. 1.2. Kegunaan Mata Kuliah Algoritma dan struktur data memberikan manfaat kepada mahasiswa untuk dapat memahami lebih lanjut tentang pemrograman terstruktur. Dengan menggunakan bahasa pemrograman Pasal ini, mahasiswa bisa membuat program untuk memecahkan berbagai macam persoalan dalam kehidupan sehari-hari. 1.3. Tujuan Instruksional Umum Setelah menyelesaikan mata kuliah ini, mahasiswa diharapkan mampu membuat program terstruktur yang kompleks. 1.4. Susunan Bahan Ajar Bab I
Array
Bab II
Record
Bab III
Prosedur
Bab IV
Fungsi
Bab V
Sorting
Bab VI
Searching
Bab VII File 1.5. Petunjuk Bagi Mahasiswa
2
a. Sebelum mengikuti perkuliahan hendaknya mahasiswa telah membaca bahan ajar ini dan dapat diperkaya dengan sumber acuan lainnya yang relevan pada setiap pertemuan. b. Untuk memperkaya wawasan dan pengetahuan sangat dianjurkan penelusuran literatur khususnya materi algoritma dan struktur data melalui sumber bacaan dan internet. c. Mintalah petunjuk dari dosen jika ada hal yang belum terselesaikan, baik dalam diskusi kelompok
maupun dalam
diskusi kelas d. Kerjakan setiap tugas terstruktur yang diberikan pada setiap akhir kegiatan/pertemuan dengan baik. e. Perbanyaklah latihan mengerjakan soal, baik secara teori maupun langsung dipraktekan dalam komputer dengan menggunakan bahasa pemrograman Pascal.
3
BAB I ARRAY A. Pendahuluan Deskripsi Singkat Bab ini akan mengemukakan bahasan tentang definisi array, deklarasi array, mengakses elemen array, array sebagai tipe data bentukan, array konstan, array sebagai parameter, array multidimensi. Relevansi Pembahasan pada bab ini sangat penting dipahami, karena materi array ini memberikan manfaat yaitu efisiensi program. Materi array sangat berkaitan dengan materi lainnya dalam sebuah pemrograman terstruktur, karena array dapat digunakan dan dikombinasikan dengan bahasan lain dalam sebuah program. Tujuan Instruksional Khusus Mahasiswa mampu membuat program dengan menggunakan array. B.
Penyajian Bagi para pemrogram, efisiensi program merupakan hal utama yang
harus diperhatikan, baik itu dalam hal kecepatan jalannya program, memori yang digunakan, banyak baris kode yang dituliskan dan juga ketepatan algoritma yang digunakan. Salah satu komponen yang harus dikuasai untuk memperoleh program yang baik adalah pengetahuan tentang array. 1) Definisi Array Array (larik) adalah sebuah variabel yang dapat menyimpan lebih dari satu nilai sejenis (memilikii tipe data sama). Hal ini berbeda dengan variabel biasa yang hanya mampu menampung satu buah nilai. Setiap
4
nilai yang disimpan di dalam array disebut dengan elemen array, sedangkan nilai urut yang digunakan untuk mengakses elemennya disebut dengan indeks array. Sebagai contoh, misalkan terdapat array A yang memiliki 10 buah elemen nilai yang bertipe integer, maka dapat dipresentasikan sebagai berikut :
A[1]
A[2]
A[3]
A[4]
A[5]
A[6]
A[7]
A[8]
A[9]
A[10]
1
2
3
4
5
6
7
8
9
10
10
20
30
40
50
60
70
80
90
100
Nilai elemen array Indeks array Elemen array Gambar 1.1 Komponen Array (sumber :Rahardjo)
Setiap elemen array di atas menyimpan nilai bertipe integer dan akan menempati alamat memori yang berbeda, hal ini akan menyebabkan array tersebut memiliki ukuran 40 byte, yang berasal dari 10 x 4. Nilai 10 menunjukkan banyaknya elemen array sedangkan nilai 4 merupakan ukuran dari tipe data integer (dalam 32 bit). 2) Deklarasi Array Sama seperti variabel lain, array juga dideklarasikan di dalam bagian deklarasi variabel. Bila akan didefinisikan sebagai tipe bentukan, maka array juga akan dideklarasikan di bagian definisi tipe (di bawah kata kunci type). Dalam bahasa Pascal, pendeklarasian array dilakukan dengan menggunakan kata kunci array dan tipe data yang akan disimpan di dalamnya, selai itu juga harus disertai dengan batas-batas indeksnya yang diapit oleh tanda bracket ([ ]). Berikut ini bentuk umum pendeklarasian array. NamaArray : array [Indeks Awal . . IndeksAkhir] of tipe data; Gambar 1.2 Bentuk Umum Pendeklarasian array(sumber:Rahardjo)
5
Sebagai contoh, apabila kita ingin mendeklarasikan array dengan nama A yang berisi 10 buah elemen bertipe integer, maka kita harus mendeklarasikannya dengan cara berikut. Var A : array [1 . . 10] of integer;
Pada kode tersebut, indeks array diulai dari satu. Perlu diperhatikan bahwa bahasa Pascal berbeda dengan bahasa C yang indeks array-nya selalu dimulai dari nol. Pada bahasa Pascal, indeks array dapat dimulai dari bilangan berapapun. Selain itu, indeks array juga dapat bertipe karakter maupun tipe enumerasi. Berikut ini contoh-contoh kode yang dapat digunakan untuk mendeklarasikan 10 buah elemen array bertipe integer sebagai pengganti kode di atas. Var A1 : array [0 . . 9] of integer; A2 : array [5 . . 15] of integer; A3 : array [’a’ . . ’j’] of integer; A4 : arrat [’A’ . . ’J’] of integer;
Dalam bahasa Pascal, tersedia dua buah fungsi yang dapat digunakan untuk mengambil indeks terendah dan tertinggi dari sebuah array, yaitu fungsi Low dan High. Adapun parameter dari kedua fungsi tersebut adalah nama array yang akan dicari indeksnya. Perhatikan contoh kode berikut. Var A: array [1 . . 100] of integer; terendah, tertinggi : integer; Begin terendah := Low (A); {akan menghasilkan nilai 1} tertinggi := High (A) {akan menghasilkan nilai 100} .. end.
3) Mengakses Elemen Array Setelah mengetahui cara pendeklarasian array, selanjutnya kita harus mengetahui bagaimana cara untuk memanipulasi array tersebut. Langkah pertama yang harus dilakukan adalah mengisikan nilai ke dalam elemen-
6
elemen array bersangkutan. Bentuk umum untuk pengisian elemen array adalah sebagai berikut. NamaArray [indeks] := nilai; Gambar 1.3 Bentuk Umum Pengisian Elemen Array(sumber:Rahardjo)
Untuk lebih memahaminya, coba perhatikan contoh kode di bawah ini. Var A: array [1..100] of integer; Begin A[1] :=1; {mengisi elemen pertama dengan nilai 1} A[2] :=2; {mengisi elemen kedua dengan niali 2} A[3] :=3; {mengisi elemen ketiga dengan niali 3} .... A[100] :=100; {mengisi elemen keseratus dengan nilai 100} end.
Kode tersebut akan melakukan pengisian 100 elemen array dengan nilai 1 sampai 100 sehingga kode tersebut akan lebih sederhana apabila dituliskan dengan menggunakan struktur pengulangan seperti yang terlihat pada kode berikut. Var A: array [1..100] of integer; i : integer; Begin For i:= 1 to 100 do Begin A[1] := i; end; End.
4) Mengapa Harus Menggunakan Array Bagi seorang pemula, mungkin akan mucul pertanyaan mengapa kita perlu mendeklarasikan array? Untuk menjawab pertanyaan tersebut, coba perhatikan contoh kasus berikut. Apabila kita akan membuat program untuk menyimpan sekumpulan data, misalnya data-data hasil penelitian yang berupa bilangan, dimana jumlah dari data tersebut puluhan, ratusan atau bahkan ribuan, apakah akan menggunakan variabel sebanyak data yang ada? Jawabannya tentu
7
tidak, karena hal tersebut merupakan hal yang sangat tidak efisien. Sebagai contoh, asumsikan bahwa banyak data tersebut. 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.
Hal ini tentu akan merepotkan diri kita. Apabila dilihat, program di atas memang masih pendek karena datanya hanya 10, bagaimana bila 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. Const max = 10; Var n : array [1 . . max] of real; i : integer; begin for i:= 1 to max do writeln(’Masukkan data ke-’, i,’ : ’); readln(n[i]); end.
Apabila ternyata data berjumlah 100 atau 1000, maka kita hanya perlu mengganti nilai dari konstanta max di atas dengan nilai yang sesuai. Alasan seperti inilah yang menyebabkan kita perlu untuk menggunakan array.
8
5) Array Sebagai Tipe Data Bentukan Array juga dapat digunakan sebagai tipe data bentukan, yaitu dengan cara mendeklarasikannya di bagian definisi tipe data, yaitu bagian yang diawali dengan kata kunci type. Type Bilangan = array [1 . . 100] of integer; Vokal = array [1 . . 5] of char;
Setelah selesai mendefinisikan array tersebut, maka kita dapat menggunakannya untuk mendeklarasikan variabel lain di dalam program. Berikut ini contoh pendeklarasian variabel yang menggunakan tipe bentukan berupa array. Var X : bilangan; Vowel : vokal;
Pada ontoh di atas kita mendeklarasikan variabel dengan nama x yang bertipe Bilangan, sedangkan variabel vowel bertipe vokal. Hal ini menyebabkan variabel tersebut juga dapat diperlukan sebagai array. Berikut ini contoh kode yang menunjukkan penggunaan variabel-variabel tersebut. Begin X[1[ := 1; X[2] := 2; ... Vowel [1] := ’a’; Vowel [2] := ’i’; ... End.
6) Array Konstan Nilai yang terkandung di dalam sebuah array dapat bernilai konstan, artinya nilai-nilai tersebut tidak dapat diubah. Untuk melakukan hal tersebut, kita harus mendeklarasikan array bersangkutan dengan kata kunci const. Berikut ini bentuk umum pendeklarasiannya.
9
Const NamaArray : array [indexAwal . . indeksAkhir] of tipe_data = Nila1, nilai2, ...); Gambar 1.4 Bentuk Umum Pendeklarasian Array Konstan (sumber:Rahardjo)
Perlu diperhatikan bahwa banyaknya nilai konstan yang dituliskan diatas harus sesuai dengan banyaknya elemen array yang didefinisikan. Sebagai contoh, apabila kita ingin mendeklarasikan array dengan jumlah elemen 5, maka nilai konstan yang diisikan juga haruslah berjumlah 5. Perhatikan contoh kode berikut. Const A : array [1 . . 5] of char = (’A’ , ’B’ , ’C’ , ’D’ , ’E’);
Oleh karena array A di atas bersifat konstan, maka kita tidak dapat menggantikan nilainya dengan nilai lain, seperti yang ditunjukkan oleh kode di bawah ini. A [1] A [2] A [1] A [1] A [1]
:= ’V’ ; {SALAH, karena elemen A [1] selalu bernilai ’A’} := ’W’ ; {SALAH, karena elemen A [2] selalu bernilai ’B’} := ’X’ ; {SALAH, karena elemen A [3] selalu bernilai ’C’} := ’Y’ ; {SALAH, karena elemen A [4] selalu bernilai ’D’} := ’Z’ ; {SALAH, karena elemen A [5] selalu bernilai ’E’}
Hal ini menunjukkan bahwa array konstan nilainya hanya dapat dibaca, namun tidak untuk diubah. Agar lebih memahami konsepnya, perhatikan contoh implementasi dari array konstan berikut ini. Function HariSekarang : string; Const Hari : array[0 . .6] of string[6] = (’Minggu’, ’Senin’, ’Selasa’, ’Rabu’, ’Kamis’, ’Jumat’, ’Sabtu’); var thn, bln, hr, indeksHari : word; begin getDate(thn, bln, hr, indeksHari); HariSekarang := Hari [indeksHari]; End;
Pada contoh di atas kita membuat sebuah fungsi untuk mendapatkan nama hari sesuai dengan tanggal sekarang (hari ini). Berikut ini contoh program lain yang akan menunjukkan penggunaan array konstan. Program ArrayKonstan; Uses crt;
10
Const Bulan : array [1 . . 12] of string = (’Januari’, ’Februari’, ’Maret’, ’April’, ’Mei’, ’Juni’, ’Juli’, ’Agustus’, ’September’, ’Oktober’, ’Nopember’, ’Desember’); var noBulan : integer; begin clrscr; write(’Masukkan nomor bulan :’); readln(noBulan); write(’Nama bulan ke-’, noBulan, ’adalah ’, Bulan[noBulan]); readln; end.
Contoh hasil yang akan diberikan oleh program di atas adalah sebagai berikut. Masukkan nomor bulan : 3 Nama bulan ke-3 adalah Maret
7) Array Sebagai Parameter Pada kasus-kasus pemrograman tertentu kita juga dituntut untuk menggunakan array sebagai parameter sebuah prosedur ataupun fungsi. Hal ini sering kita jumpai pada saat kita akan melakukan pencarian maupun
pengurutan
dari
sekumpulan
data.
Berikut
ini
contoh
penggunaan array di dalam sebuah prosedur. 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 di atas kita te;ah membuat prosedur yang memiliki parameter bertipe array. Prosedur tersebut akan digunakan untuk melakukan pengisian elemen array sebanyak N, dimana 1 N 100. Perlu diperhatikan bahwa array yang dilewatkan sebagai parameter ini harus dideklarasikan terlebih dahulu. Berikut ini contoh penggunaan array yang tidak diperbolehkan oleh kompiler. Procedure InputArray [A:array[1..100] of integer; N);
11
{salah}
Berikut ini kode yang merupakan perbaikan dari kode sebelumnya. Procedure InputArray [A:array of integer; N);
{benar}
Untuk lebih memahaminya, perhatikan contoh program di bawah ini dimana kita akan menggunakan array sebagai parameter. Program ParamArray; Uses crt; Const max = 100;]type Bilangan = array [1 . . max] of 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; var Arr:bilangan; count:integer; Begin Clrscr; Write (’Masukkan banyaknya elemen array :’); readln(count); Writeln; OutputArray (Arr, count); Readln; End.
Contoh hasil yang akan diberikan dari program di atas adalah sebagai berikut. Masukkan banyaknya elemen array : 3 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
12
8) Array Multidimensi Sejauh ini kita baru membahas mengenai array berdimensi satu. Pada bagian ini kita akan mempelajari bagaimana cara mendeklarasikan dan memanipulasi data yang terdapat pada array multidimensi. Agar lebih mempermudah pembahasan, materi ini akan dibagi menjadi dua kelompok, yaitu array dua dimensi dan array tiga dimensi. 9) Array Dua Dimensi Array dua dimensi adalah array yang memiliki dua buah elemen bertipe array. Dengan kata lain, array dua dimensi memiliki dua buah subskrip, yang biasanya dipresentasikan dengan baris dan kolom. Untuk lebih memahami konsepnya, perhatikan terlebih dahulu gambar di bawah ini.
baris
Kolom Gambar 1.5. Array dua dimensi (sumber:Rahardjo)
Pada gambar di atas, array memiliki 3 buah baris dan 4 buah kolom, sehingga jumlah elemennya adalah 3x4 = 12. Perlu diketahui bahwa keadaan tersebut sebenarnya hanya merupakan keadaan logik yang bertujuan untuk mempermudah pemahaman array dua dimensi. Pada kenyataannya, pengalamatan memori di komputer dari array dua dimensi tetap akan dipresentasikan dengan sebuah deretan larik yang memanjang (tidak berbentuk baris dan kolom). Pendeklarasian array dua dimensi di dalam bahasa Pascal dilakukan melalui bentuk umum di bawah ini. NamaArray : array [1 . . banyakbaris, 1 . . banyakkolom] of tipe_data;
13
Sebagai contoh, apabila kita akan mendeklarasikan array dua dimensi dengan 3 buah baris dan 4 buah kolom dimana setiap elemennya bertipe integer, maka kita dapat menuliskan kode seperti berikut. Array2D : array [1 . . 3, 1 . . 4] of integer;
Untuk melakukan pengaksesan terhadap elemen-elemennya, kita harus menuliskan indeks baris dan kolomnya. Sebagai contoh, apabila kita ingin mengisikan nilai 100 ke dalam elemen yang terdapat pada baris ke-2 kolom ke-3, maka kita harus menuliskannya sebagai berikut. Array2D [2, 3] : = 100;
Berikut ini contoh program yang menunjukkan penggunaan array dua dimensi. Di sini kita akan membuat program yang dapat menjumlahkan dua buah matriks A dan B yang masing-masing berordo 2 x 3 (memiliki 2 baris dan 3 kolom). Program JumlahMatriks; Uses crt; Const Jbaris = 2; Jkolom = 3; Type Matriks23 = array [1 . . Jbaris, 1 . . Jkolom] of integer; Var A,B,C : Matriks23; j, k : integer; begin clrscr; {mengisikan matriks A} writeln (’Matriks A’); for j: = 1 to Jbaris do begin for k: = 1 to Jkolom do begin write(’A[’, j, ’ , ’ , k, ’] = ‚); readln(A[j, k]); end; writeln; end; writeln; {mengisikan matriks B} writeln(’Matriks B’); for j: = 1 to Jbaris do begin for k: = 1 to Jkolom do begin write(’B[’, j, ’ , ’ , k, ’] = ‚); readln(B[j, k]); end; writeln; end;
14
writeln; {melakukan penjumlahan matriks A dan B sekaligus menampilkan hasilnya ke layar} writeln(’Hail Penjumlahan’); for j: = 1 to Jbaris do begin for k: = 1 to Jkolom do begin C[j, k] : = A[j, k] + B[j, k]; write(’C[’, j, ’ , ’ , k, ’] = ‚); readln(C[j, k]); end; writeln; end; readln; end.
Contoh hasil yang akan diberikan oleh program di atas adalah sebagai berikut. Matriks A A[1, 1] = 1 A[1, 2] = 2 A[1, 3] = 3 A[2, 1] = 4 A[2, 2] = 5 A[2, 3] = 6 Matriks B B[1, 1] = 3 B[1, 2] = 2 B[1, 3] = 1 B[2, 1] = 6 B[2, 2] = 5 B[2, 3] = 4
Hasil Penjumlahan C[1, 1] = 4 C[1, 2] = 4 C[1, 3] = 4 C[2, 1] = 10 C[2, 2] = 10 C[2, 3] = 10
10) Array Tiga Dimensi Array tiga dimensi merupakan array yang memiliki tiga buah subskrip dan lebih kompleks apabila dibandingkan dengan array dua dimensi. Di sini, subskrip yang ada akan dipresentasikan dengan sumbu
15
x, y dan z atau panjang, lebar dan tinggi seperti yang ditunjukkan oelh gambar berikut. y
Gambar 1.6. Array tiga dimensi (sumber : Rahardjo)
x
z
Berikut ini bentuk umum yang digunakan untuk mendeklarasikan array tiga dimensi di dalam bahasa Pascal. NamaArray : array [1 . . xMaks, 1 . . yMaks, 1 . . zMaks] of tipe_data; Gambar 1.7 Bentuk Umum Pendeklarasian Array Tiga Dimensi(sumber:Rahardjo)
Sebagai contoh apabila kita ingin mendeklarasikan array yang memiliki panjang 2, lebar 3 dan tinggi 4 elemen bertipe integer, maka kita akan menuliskannya seperti di bawah ini. Array3D : array [1 . . 2, 1 . . 3, 1 . . 4] of integer;
Jumlah elemen yang terdapat di dalam array tersebut adalah 2 x 3 x 4 = 24. Sekarang apabila kita ingin mengisikan nilai 100 ke dalam elemen yang berada pada posisi panjang ke-2, lebar ke-3 dan tinggi ke-1, maka kita akan melakukannya melalui kode berikut. Array3D : [2, 3, 1] : = 100;
Berikut ini adalah contoh yang akan menunjukkan cara pengaksesan elemen di dalam array 3 dimensi. Program AksesArray3D; Uses crt; Const xMaks = 2; yMaks = 2; zMaks = 2;
16
Type Array3D = array [1 . . xMaks, 1 . . yMaks,1 . . zMaks] of integer; Var A: Array3D; i, j, k : integer; begin clrscr; {mengisikan nilai ke dalam array A} x := 1; for i := 1 to xMaks do begin for j := 1 to jMaks do begin for k := 1 to zMaks do begin A[i, j, k] := x; inc(x); end; end; end; {menampilkan isi yang terdapat dalam array A} for i := 1 to xMaks do begin for j := 1 to jMaks do begin for k := 1 to zMaks do begin write(’A[ ’ , i, ’,’ , j, ’,’ , z, ’ ] = ’, A[ i, j, k] , ’ ’ ); end; end; writeln; end; readln; end.
Hasil yang akan diberikan oleh program diatas adalah sebagai berikut: A[1, 1, 1] = 1 A[2, 1, 1] = 5
A[1, 1, 2] = 2 A[2, 1, 2] = 6
A[1, 2, 1] = 3 A[2, 2, 1] = 7
A[1, 2, 2] = 4 A[2, 2, 2] = 8
C. Penutup Array merupakan sebuah variabel yang dapat menyimpan lebih dari satu nilai yang memiliki tipe data sama. Hal ini berbeda dengan variabel biasa yang hanya mampu menampung satu buah nilai. Setiap nilai yang disimpan di dalam array disebut dengan elemen array, sedangkan nilai urut yang digunakan untuk mengakses elemennya disebut dengan indeks array.
17
Apabila kita akan membuat program untuk menyimpan sekumpulan data, misalnya data-data hasil penelitian 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. Penggunaan array dalam program akan membuat program lebih efisien dan mudah dipahami.
1) Pertanyaan (a) Buat program dengan menggunakan array untuk menginput 10 nilai, bandingkan dan tampilkan nilai terbesar. (b) Buat
program
dengan
menggunakan
array
konstan
untuk
memasukkan nomor bulan dan menampilkan nama bulan.
2) Umpan Balik dan Tindak Lanjut Untuk menguasai materi ini, sebaiknya anda membuat ringkasan materi
tentang
array
dan
membuat
beberapa
program
dengan
menggunakan array. Jawab pertanyaan di atas dengan langsung membuat program di komputer. Jalankan program tersebut sampai benar. Hapus kembali listing program yang sudah benar dan buat kembali program tersebut, dan jalankan. Kalau tingkat kesalahan pada pembuatan program sudah kecil, anda dapat melanjutkan materi berikutnya. Kalau program belum jalan, perbaiki terus sampai program tersebut benar dan jalan.
18
3) Kunci Jawaban Jawaban a program nilai_terbesar; const besar=10; var n:array [1.. besar] of real; i:integer; max:real; begin for i:= 1 to besar do begin write('masukkan data ke-',i,':');readln(n[i]); if (n[i])>max then max:=(n[i]); end; write('nilai tebesar :',max:2:0); readln end.
Jawaban b program nama_bulan; const bulan:array[1..12] of string=('Januari','Februari','Maret','April','Mei','Juni', 'Juli','Agustus','September','Oktober','Nopember','Desember'); var nobulan:integer; begin write('Masukkan nomor bulan :');readln(nobulan); write('Nama bulan ke-', nobulan,' adalah ', bulan[nobulan]); readln; end.
Daftar Pustaka Jurusan Informatika. 2006. Bahan Ajar Pemrograman 2. Hibah Pengajaran PHK A1 Universitas Negeri Gorontalo Kadir, Abdul. 2002. Pemrograman Pascal Buku 1. Yogyakarta: Andi Offset. Munir, Rinaldi. 2005. Algoritma dan Pemrograman dalam bahasa Pascal dan C Edisi 3. Bandung: Informatika. Rahardjo, Budi. 2005. Teknik Pemrograman Pascal. Bandung:Informatika
19
BAB II RECORD A. Pendahuluan Deskripsi Singkat Bab ini akan mengemukakan bahasan tentang definisi record, deklarasi record, mengakses field, penugasan antar record, record dalam record, pernyataan with, array record. Relevansi Pembahasan pada bab ini sangat penting dipahami, karena materi record ini memberikan manfaat bagi pemrogram untuk membuat program yang menggunakan data yang terdiri dari beberapa data den berlainan tipe. Materi record sangat berkaitan dengan materi lainnya dalam sebuah pemrograman terstruktur, terutama dengan materi array.
Tujuan Instruksional Khusus Mahasiswa mampu membuat program aplikasi dengan menggunakan record. B. Penyajian 1) Definisi Record Record adalah jenis tipe data terstruktur yang berisi beberapa data, yang masing-masing dapat berlainan tipe. 2) Mendeklarasikan Record Suatu tipe record dideklarasikan dengan bentuk sebagai berikut : RECORD Daftar_field_1 : tipe_1; Daftar_field_2 : tipe_2; ... daftar_field_n : tipe_n; END
20
Gambar 2.1 Pendeklarasian Record (sumber:Kadir)
Masing-masing daftar_field dapat berupa satu atau beberapa nama pengenal dan masing-masing dinamakan field. Bila daftar_field berisi lebih dari satu field , antar field perlu dipisahkan dengan koma. Masing-masing tipe dapat berupa tipe data apa saja termasuk array. Berikut contoh pendeklarasian record : Type RecBarang = Record Nama : String; Kualitas : Char; Harga : LongInt End; Var Barang : RecBarang;
Dengan mendeklarasikan seperti di atas, Barang akan mengandung tiga buah field, yaitu : - Nama, - Kualitas, - Harga. 3) Cara Mengakses Field Field dari suatu record diakses dengan bentuk : Variabel.field Gambar 2.2 Mengakses Field(sumber:Kadir)
Sebagai contoh : Barang.Nama
Berarti “field Nama dari variabel record bernama Barang“. Contoh penugasan nilai ke field tersebut : Barang.Nama := ’Ubin TISKA 20x20’;
Dengan cara seperti di atas, field Nama dari record Barang berisi string ’Ubin TISKA 20x20’. Isi dari suatu field ditampilkan dengan menggunakan Write atau Writeln.
21
Contoh : Writeln (Barang.Nama); Merupakan perintah untuk menampilkan isi field Nama dari record Barang. Contoh program yang memberikan gambaran pendeklarasian record, pengisian terhadap field-field serta menampilkan isi masing-masing field dapat dilihat di bawah ini. Program Rec1; Uses crt; Type RecBarang = Record Nama : String[25]; Kualitas : Char; Harga : LongInt End; Var Barang : RecBarang; {variabel bertipe record} Begin Clrscr; {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.
Hasil program : Nama Barang Kualitas Harga
: Ubin TISKA 20x20 :A : 14000
4) Penugasan Antar Record Jika record R1 dan R2 bertipe sama dan masing-masing memiliki F1, F2, dan F3, maka penugasan : R1 := R2;
22
diperkenankan. Pernyataan di atas merupakan penyederhanaan dari sederetan pernyataan berikut : R1.F1 := R2.F1; R1.F2 := R2.F2; R1.F3 := R2.F3; Untuk
lebih
jelasnya,
tulislah
program
berikut
dan
cobalah
menjalankannya. Program Rec2; Uses crt; Type RecBarang = Record Nama : string[25]; Kualitas : car; Harga : longInt End; Var Barang1, Barang2 : RecBarang; {variabel bertipe record} Begin Clrscr; {penugasan nilai terhadap field-field} Barang1.Nama := ’Ubin TISKA 20x20’; Barang1.Kualitas := ’A’; Barang1.Harga := 14000; {menyalin record} Barang2 := Barang1; Menampilkan isi field} Writeln (’Nama Barang : ’, Barang2.Nama); Writeln (’Kualitas : ’, Barang.Kualitas); Writeln (’Harga : ’, Barang.Harga); Readln End.
Dengan adanya penugasan Barang2 := Barang1; maka semua field pada record Barang2 akan berisi recrod Barang1. Hasil dari program di atas : Nama Barang Kualitas Harga
: Ubin TISKA 20x20 :A : 14000
23
5) Record Di Dalam Record Mungkin saja sebuah record berisi record. Sebagai gambaran hal ini, perhatikan deklarasi berikut : RecTanggal = Record Tanggal, Bulan, Tahun End;
:Integer
RecPegawai = Record Nomor Nama TglLahir Gaji End;
: LongInt; : String [35]; : RecTanggal; : LongInt
Tampak bahwa tipe record bernama RecPegawai berisi record yang lain (RecTanggal). Hal yang menarik yang perlu diperhatikan adalah cara mengakses field seperti Tanggal, Bulan dan Tahun. Notasi yang diperlukan adalah sebagai berikut. Nama_variabel.TglLahir.Tanggal Nama_variabel.TglLahir.Bulan Nama_variabel.TglLahir.Tahun
Praktekkan program berikut, untuk mencoba pembuatan record dengan bentuk sepert di atas. Program Rec3; Uses crt; Type RecTanggal = Record Tanggal, Bulan, Tahun End; RecPegawai = Record Nomor Nama TglLahir Gaji End; Var DataPeg : RecPegawai; Begin
: Integer
: LongInt; : string [35]; : RecTanggal; : longInt
{variabel betipe record}
24
Clrscr; Penugasan nilai terhadap field-fiedl} DataPeg.Nomor := 56789; DataPeg.Nama := ’Badu’; DataPeg.TglLahir.Tanggal := 24; DataPeg.TglLahir.Bulan := 12; DataPeg.TglLahir.Tahun := 1972; DataPeg.Gaji := 750000; {menampilkan isi field} Writeln (’Nama Pegawai : ’, DataPeg.Nama); Writeln (’Tanggal Lahir : ’, DataPeg.TglLahir.Tanggal, ’/’, DataPeg.TglLahir.Bulan, ’/’, DataPeg.TglLahir.Tahun); Readln End.
Hasil dari program di atas adalah sebagai berikut :
Nama Pegawai
: Badu
Tanggal Lahir
: 24 / 12 / 1972
6) Pernyataan With Untuk menyederhanakan notasi seperti : DataPeg.TglLahir.Tanggal
Turbo Pascal menyediakan pernyataan WITH. Bentuk pernyataan ini adalah sebagai berikut :
With nama_record do pernyataan Gambar 2.3 Bentuk Umum Pernyataan With(sumber:Kadir)
Pada bentuk ini, field-field yang terletak pada bagian pernyataan dapat disebutkan tanpa perlu menyertakan lagi nama record dan tanda titik. Untuk lebih jelasnya, perhatikan program berikut yang merupakan alternatif lain dari program di atas.
25
Program Rec4; Uses crt; Type RecBarang = Record Nama Kualitas Harga End; Var Barang : RecBarang; Begin Clrscr; {penugasan nilai terhadap field-field} With Barang do Begin Nama := ’Ubin TISKA 20x20’; Writeln (’Nama Barang Writeln (’Kualitas :’, Kualitas); Writeln (’Harga :’, Harga); End; Readln End.
: String [25]; : Char; : LongInt
{variabel bertipe record}
: ’, Nama);
Bila suatu record memiliki record lain, pernyataan With dapat diikuti dengan with yang lain. Sebagai contoh, program di atas ditulis menjadi : Program Rec5; Uses crt; Type RecTanggal = Record Tanggal, Bulan, Tahun : Integer End; RecPegawai = Record Nomor : LongInt; Nama : string [35]; TglLahir : RecTanggal; Gaji : LongInt End; Var DataPeg : RecPegawai; {variabel bertipe record} Begin Clrscr; {Penugasan nilai terhadap field-field} With DataPeg do With TglLahir do Begin Nomor := 56789; Nama := ’Badu’; Tanggal := 24;
26
Bulan := 12; Tahun := 1972; Gaji := 750000; End; {menampilkan isi field} With DataPeg do With TglLahir do Begin Writeln (’Nama Pegawai :’, DataPeg.Nama); Writeln (’Tanggal lahir :’, DataPeg.TglLahir.Tanggal, ’/’, DataPeg.TglLahir.Bulan ’/’, DataPeg.TglLahir.Tahun) End; Readln End.
Pernyataan seperti : With DataPeg do With TglLahir do
Dapat ditulis menjadi : With DataPeg, TglLahir do
dengan antar nama record dipisahkan oleh tanda koma. Contoh program : Program Rec6; Uses crt; Type RecTanggal = Record Tanggal, Bulan, Tahun : Integer End; RecPegawai = Record Nomor : LongInt; Nama : string [35]; TglLahir : RecTanggal; Gaji : LongInt End; Var DataPeg : RecPegawai; {variabel bertipe record} Begin Clrscr; {Penugasan nilai terhadap field-field} With DataPeg, TglLahir do Begin Nomor := 56789; Nama := ’Badu’; Tanggal := 24; Bulan := 12;
27
Tahun := 1972; Gaji := 750000; End; {menampilkan isi field} With DataPeg, TglLahir do Begin Writeln (’Nama Pegawai :’, DataPeg.Nama); Writeln (’Tanggal lahir :’, DataPeg.TglLahir.Tanggal, ’/’, DataPeg.TglLahir.Bulan ’/’, DataPeg.TglLahir.Tahun) End; Readln End.
7) Array Record Elemen suatu array juga bisa berupa record. Sebagai contoh dapat dilihat di bawah ini. Const Jum_Maks = 20; Type RecBarang = Record Nama : String [25]; Kualitas : Char; Harga : LongInt End; TabelBarang = Array [ 1 . . Jum_Maks] of RecBarang; Var DafBarang : TabelBarang; {array record}
Pada contoh di atas, DafBarang adalah array yang maksimum berisi 20 buah elemen bertipe record. Untuk mengakses suatu field, kita perlu menggunakan notasi : DafBarang [indeks].NamaField
Berikut contoh program Array Record. Program Rec7; Uses Crt; Const Jum_Maks = 20;
{jumlah maksimal jenis baramg}
Type RecBarang = Record Nama Kualitas Harga
: string [25]; : char; : longInt
28
End; TabelBarang = Array [ 1 . . Jum_Maks] of RecBarang; Var DafBarang : TabelBarang; JumBarang : Integer;
{array record}
{memasukkan data barang je array DafBarang} Procedure EntriBarang (Var DafBarang : TabelBarang; Var JumBarang : Integer); Var Indeks : Integer; Begin Clrscr; Write (’Jumlah Barang (Maksimum = 20) :’); Readln (JumBarang); For Indeks := 1 to JumBarang do With Dafbarang [indeks] do Begin Clrscr; Writeln (’Data Barang ’, Indeks, ’ :’); Write (’Nama :’); Readln (Nama); Write (’Kualitas :’); Readln (Kualitas); Write (’Harga :’); Readln (Harga); Writeln; End; End; {akhir EntriBarang} {menampilkan isi array DafBarang} Procedure InfoBarang (Var DafBarang : Tabelbarang; JumBarang : Integer); Var Indeks : Integer; Begin Clrscr; Writeln (’NAMA BARANG’:25, ’KUALITAS’:10, ’HARGA’:10); For Indeks := 1 to JumBarang do With Dafbarang [Indeks] do Writeln (Nama : 25, Kualitas : 10, Harga : 8); End; {Akhir InfoBarang}
Begin Entribarang (DafBarang, JumBarang); InfoBarang (DafBarang, JumBarang); Readln End.
C. Penutup Record adalah salah satu tipe data terstuktur bentukan yang digunakan untuk mempresntasikan sebuah objek yang tidak dapat dipresentasikan menggunakan tipe data dasar, seperti integer, real,
29
boolean, character. Setiap record terdiri dari beberapa elemen yang disebut field. Setiap field menggambarkan informasi tertentu, dan tipe setiap field sudah dikenal, baik itu tipe dasar atau tipe bentukan lainnya. Operasi atau manipulasi terhadap record hanya dapat dilakukan terhadap field-field pembentuknya. Pengacuan pada setiap field dilakukan dengan record selector. Operasi yang dapat dilakukan terhadap field-field tersebut sama dengan operasi yang dapat dikenakan terhadap tipe pembentuknya. 1) Pertanyaan (a) Buat program untuk menginput dan menampilkan data nilai mahasiswa dengan menggunakan array record (b) Buat program mengakses record di dalam record 2) Umpan Balik dan Tindak Lanjut Untuk menguasai materi ini, sebaiknya anda membuat ringkasan materi tentang record dan membuat sendiri beberapa program dengan menggunakan record. Jawab pertanyaan di atas dengan langsung membuat program di komputer. Jalankan program tersebut sampai benar. Hapus kembali listing program yang sudah benar dan buat kembali program tersebut, dan jalankan. Kalau tingkat kesalahan pada pembuatan program sudah kecil, anda dapat melanjutkan materi berikutnya. Kalau program belum jalan, perbaiki terus sampai program tersebut benar dan jalan. 3) Kunci Jawaban Jawaban b program arrayrecord; const max=100; type tsiswa=record NIM :STRING[9]; Nama : string[25]; Nilai : real;
30
end; tkumpulansiswa = array[1..max] of tsiswa; var a:tkumpulansiswa; i,n:integer; begin write('masukkan jumlah siswa yang akan diisikan :');readln(n); writeln; writeln('memasukkan data'); writeln('-------------------------------'); for i:= 1 to n do begin writeln('Data siswa ke-',i); write('NIM : ');readln(a[i].NIM); write('Nama : ');readln(a[i].Nama); write(’Nilai : ’);readln(a[i].Nilai); writeln; end; writeln; writeln('DAFTAR SISWA'); writeln('---------------------------------------------'); writeln('NIM ',' ' , 'NAMA'),’NILAI’; writeln('---------------------------------------------'); for i:=1 to n do begin with a[i] do begin writeln(NIM:9,' ' ,Nama, Nilai); end; end; readln end.
Jawaban b Program Record_dalam_record; Uses crt; Type RecTanggal = Record Tanggal, Bulan, Tahun : Integer End; RecPegawai = Record Nomor : LongInt; Nama : string [35]; TglLahir : RecTanggal; Gaji : LongInt End; Var DataPeg : RecPegawai; {variabel bertipe record} Begin Clrscr;
31
{Penugasan nilai terhadap field-field} With DataPeg, TglLahir do Begin Nomor := 56789; Nama := ’Badu’; Tanggal := 24; Bulan := 12; Tahun := 1972; Gaji := 750000; End; {menampilkan isi field} With DataPeg, TglLahir do Begin Writeln (’Nama Pegawai :’, DataPeg.Nama); Writeln (’Tanggal lahir :’, DataPeg.TglLahir.Tanggal, ’/’, DataPeg.TglLahir.Bulan ’/’, DataPeg.TglLahir.Tahun) End; Readln End.
Daftar Pustaka Jurusan Informatika. 2006. Bahan Ajar Pemrograman 2. Hibah Pengajaran PHK A1 Universitas Negeri Gorontalo Kadir, Abdul. 2002. Pemrograman Pascal Buku 1. Yogyakarta: Andi Offset. Munir, Rinaldi. 2002. Algoritma dan Pemrograman dalam bahasa Pascal dan C Edisi 2. Bandung: Informatika. Rahardjo, Budi. 2005. Teknik Pemrograman Pascal. Bandung:Informatika
32
BAB III PROSEDUR A. Pendahuluan Deskripsi Singkat Bab ini akan mengemukakan bahasan tentang pemrograman moduler, definisi prosedur, pendefinisian prosedur, pemanggilan prosedur. Relevansi Pembahasan pada bab ini sangat penting dipahami, karena materi prosedur ini memberikan manfaat bagi pemrogram untuk membuat program yang menggunakan prosedur. Materi prosedur sangat berkaitan dengan materi lainnya dalam sebuah pemrograman terstruktur, terutama pemrograman moduler.
Tujuan Instruksional Khusus Mahasiswa mampu membuat program aplikasi dengan menggunakan prosedur B. Penyajian 1) Konsep Pemrograman Moduler Dalam membuat program besar dan kompleks, si pemrogram perlu memecah program menjadi beberapa sub program yang lebih kecil. Tiap sub program kadangkala cukup independen dari program utama sehingga programnya dapat dirancang tanpa mempertimbangkan konteks tempat di mana sub program tersebut digunakan. Tiap sub program, yang disebut modul dapat dirancang oleh pemrogram selain dari orang yang mengembangkan program utama. Modul yang sudah ditulis dapat dipasang ke program lain yang membutuhkannya. Teknik pemrograman seperti ini dinamakan teknik pemrograman modular. Beberapa bahasa
33
pemrograman termasuk Pascal menamakan modul dengan sebutan rutin, prosedur atau fungsi. Modularisasi program memberikan 2 (dua) keuntungan. Pertama, untuk aktivitas yang harus dilakukan lebih dari satu kali, modularisasi menghindari penulisan teks program yang sama secara berulangkali.Di sini, modul program cukup ditulis sekali saja, lalu modul tersebut dapat diakses dari bagian lain di dalam program.Di sini, penggunaan modul program dapat mengurangi panjang program. Keuntungan kedua dari modularisasi adalah kemudahan menulis dan menemukan kesalahan program. Kemudahan menulis akan sangat berguna pada masalah besar yang dikerjakan oleh satu tim pemrogram yang beranggotakan beberapa orang. Masalah yang akan diprogram dipecah menjadi beberapa masalah yang lebih keil. Setiap masalah yang lebih kecl tersebut ditulis ke dalam modul individual yang spesifik dan dikerjakan oleh orang yang berbeda. Seluruh modul diintegrasikan menjadi satu buah program yang lengkap. Program modular menjai lebih mudah untuk dibaca dan dimengerti. Program yang tidak modular sulit dipahami, khususnya kalau program tersebut panjang atau terdiri dari puluhan, ratusan atau ribuan baris intruksi. Karena setiap modul melakukan aktivitas specsifik, maka apabila terdapat kesalahan di dalam program, kesalahan tersebut dapat dilokalisisr pada modul yang bersangkutan. Kebanyakan program komputer dapat ditulis modular, meskipun program tersebut tidak melibatkan eksekusi yang berulang dari aktivitas yang sama. Pemecahan program menjadi modul-modul individul umumnya dianggap sebagai praktek pemrograman yang baik. Terdapat dua jenis modul program, pertama prosedur (procedure) dan kedua fungsi (function). Struktur setiap modul tersebut pada hakikatnya sama dengan struktur algoritma biasa, yaitu ada bagian judul (header)
34
yang berisi nama modul, bagian deklarasi, dan bagian badan (body) program yang berisi instruksi yang akan dilaksanakan. 2) Definisi Prosedur Prosedur adalah modul program yang mengerjakan tugas/aktivitas yang spesifik dan menghasilkan suatu efek netto . Suatu efek netto diketahui dengan membandingkan keadaan awal dan keadaan akhir pada pelaksanaan prosedur. Oleh karena itu, pada prosedur kita harus mendefinisikan keadaan awal sebelum rangkaian instruksi di dalam prosedur dilaksanakan dan keadaan akhir yang diharapkan setelah rangkaian instruksi dilaksanakan. 3) Pendefinisian Prosedur Pada dasarnya, struktur prosedur sama dengan struktur algoritma yang sudah dikenal, yaitu : bagian judul yang terdiri atas nama prosedur dan komentar yang menjelaskan yang menjelaskan spesifikasi prosedur tersebut, bagian deklarasi dan badan prosedur. Setiap prosedur memiliki nama yang unik. Nama prosedur sebaiknya diawali dengan kata kerja karena prosedur berisi suatu aktivitas, misalnya HitungLuas, Tukar, CariMaks, Inisialisasi, AktifkanMenu dan lain sebagainya. Notasi Algoritma yang digunakan untuk mendefinisikan struktur prosedur adalah : Procedure NamaProsedur {Spesifikasi prosedur, berisi penjelasan tentang apa yang dilakukan prosedur ini} {K. Awal : keadaan sebelum prosedur dilaksanakan} {K. Akhir : keadaan setelah prosedur dilaksanakan} Deklarasi {semua nama yang dipakai dalam prosedur dan hanya berlaku lokal di dalam prosedur yang didefinisikan di sini} Deskripsi {badan prosedur, berisi kumpulan instruksi} Gambar 3.1 Bentuk Umum Pendefinisian Prosedur(sumber:Rahardjo)
35
Contoh 3.1 Tuliskan prosedur mencetak string ’Hello World!’. Penyelesaian Procedure CetakHalo {mencetak string ’Hello World!’ ke piranti keluaran} {K. Awal : sembarang} {K. Akhir : string ’Hello World!’ tercetak} Deklarasi {tidak ada} Deskripsi Write (’[Hello World!’)
Contoh 3.2 Tuliskan prosedur untuk menghitung luas segitiga dengan rumus L=(alas x tinggi)/2. Panjang alas dan tinggi segitiga dibaca dari dalam prosedur. Luas segitiga dicetak ke piranti keluaran. Penyelesaian Procedure HitungLuasSegitiga {menghitung luas segitiga dengan rumus L=(alas x tinggi)/2 {K. Awal : sembarang} {K. Akhir : L berisi luas segitiga. Nilai L dicetak ke piranti keluaran} Deklarasi Alas, tinggi, luas : real Deskripsi Read (alas, tinggi) Luas (alas*tinggi)/2 Write (L)
4) Pemanggilan Prosedur Prosedur bukan program yang berdiri sendiri, jadi tidak dapat dieksekusi secara langsung. Ini berarti, instruksi-instruksi di dalam prosedur baru dapat dilaksanakan hanya bila prosedur tersebut diakses/dipanggil.
Prosedur
diakses
36
dengan
cara
m,emanggil
namanya dan program pemanggil (program utama atau modul program lain) : NamaProsedur Gambar 2.2 Pemanggilan Prosedur(sumber:Rahardjo)
Ketika NamaProsedur dipanggil, kendali program berpindah secara otomatis ke prosedur tersebut. Instruksi di dalam badan prosedur dilaksanakan. Setelah semua instruksi selesai dilaksanakan, kendali program berpindah secara otomatis ke instruksi sesudah pemanggilan prosedur. Di dalam program pemanggil, kita harus mendeklarasikan prototype prosedur di dalam bagian deklarasi. Prototype prosedur hanya berisi bagian judul prosedur. Tujuan pendeklarasian prototype program adalah supaya program pemanggil “mengenal“ nama prosedur tersebut serta cara mengaksesnya. Contoh 3.3 Tuliskan contoh program utama untuk memanggil prosedur CetakHalo Penyelesaian Algoritma Halo {program utama untuk mencetak string ’Halo!’} Deklarasi Procedure CetakHalo {mencetak string ’Halo!’ ke piranti keluaran} Deskripsi CetakHalo {panggil prosedur CetakHalo}
Contoh 3.4 Tuliskan
contoh
program
utama
HitungLuasSegitiga.
37
untuk
memanggil
prosedur
Penyelesaian Algoritma Luas_Segitiga {program uatama untuk menghitung luas segitiga} Deklarasi Prcedure HitungLuasSegitiga {menghitung luas segitiga dengan rumus L=(alas x tinggi)/2} Deskripsi Write(’Menghitung Luas Segitiga’) HitungLuasSegitiga Write (’Selesai’)
C. Penutup Kata prosedur sering kita dengar dalam kehidupan sehari-hari. Seorang mahasiswa pada setiap awal semester selalu melakukan penaftaran ulang (registrasi). Langkah-langkah pendaftaran ulang lazim dinyatakan dalam sebuah prosedur yang dinamakan prosedur daftar ulang. Ketika sebuah prosedur dilakukan, maka instruksi-instruksi di dalamnya dikerjakan satu per satu. Dalam dunia pemrograman, prosedur adalah modul program yang mengerjakan tugas/aktivitas yang spesifik dan menghasilkan suatu efek netto. Suatu efek netto diketahui dengan membandingkan keadaan awal dan keadaan akhir pada pelaksanaan sebuah prosedur. Oleh sebab itu, pada setiap prosedur kita perlu mendefinisikan keadaan awal sebelum rangkaian instruksi di dalam prosedur dilaksanakan dan keadaan akhir yang diharapkan setelah rangkaian instruksi di dalam prosedur dilaksanakan. 1) Pertanyaan Buat program perhitungan luas segitiga menggunakan prosedur. 2) Umpan Balik dan Tindak Lanjut Untuk menguasai materi ini, sebaiknya anda membuat ringkasan materi tentang prosedur dan membuat sendiri beberapa program dengan menggunakan prosedur.
38
Jawab pertanyaan di atas dengan langsung membuat program di komputer. Jalankan program tersebut sampai benar. Hapus kembali listing program yang sudah benar dan buat kembali program tersebut, dan jalankan. Kalau tingkat kesalahan pada pembuatan program sudah kecil, anda dapat melanjutkan materi berikutnya. Kalau program belum jalan, perbaiki terus sampai benar. 3) Kunci Jawaban program luas_segitiga; procedure hitungluas; var alas,tinggi,luas : real; begin write('alas :');readln(alas); write('tinggi:');readln(tinggi); luas:=(alas*tinggi)/2; write('luas segitiga :',luas:2:0); end; begin writeln('menghitung luas segitiga'); hitungluas; readln end.
Daftar Pustaka Jogiyanto, 1989. Turbo Pascal. Yogyakarta : Andi Ofset. Jurusan Informatika. 2006. Bahan Ajar Pemrograman 2. Hibah Pengajaran PHK A1 Universitas Negeri Gorontalo Kadir, Abdul. 2002. Pemrograman Pascal Buku 1. Yogyakarta: Andi Offset. Munir, Rinaldi. 2005. Algoritma dan Pemrograman dalam bahasa Pascal dan C Edisi 3. Bandung: Informatika. Rahardjo, Budi. 2005. Teknik Pemrograman Pascal. Bandung:Informatika
39
BAB IV FUNGSI A. Pendahuluan Deskripsi Singkat Bab ini akan mengemukakan bahasan tentang definisi fungsi, cara mendefinisikan fungsi, cara pemanggilan fungsi dan parameter. Relevansi Pembahasan pada bab ini sangat penting dipahami, karena materi fungsi ini memberikan manfaat bagi pemrogram untuk membuat program yang menggunakan fungsi. Materi fungsi sangat berkaitan dengan materi lainnya dalam sebuah pemrograman terstruktur, terutama pemrograman moduler. Tujuan Instruksional Khusus Mahasiswa mampu membuat program dengan menggunakan fungsi. B.
Penyajian
1) Definisi Fungsi Definisi
fungsi
sebenarnya
sama
dengan
sebuah
prosedur.
Perbedaannya, pada fungsi terdapat pengembalian nilai, sehingga pada saat pemanggilan, fungsi dapat langsung digunakan untuk mengisikan sebuah ekspresi. 2) Pendefinisian Fungsi Berbeda dengan prosedur yang didefinisikan dengan kata kunci function. Berikut ini bentuk umum dari pendefinisian sebuah fungsi.
40
Function NamaFungsi (parameter1 : tipe_data, paraneter2: tipe_data, . . .) : tipe_data; const {daftar konstanta lokal} Var {daftar pendeklarasian variabel lokal} Begin {kode program yang akan ditulis} ... NamaFungsi := nilai_kembalian; {ingat baris ini} End; Gambar 4.1 Bentuk Umum Pendefinisian Fungsi
Berikut ini contoh pendefinisian fungsi sederhana yang akan mengalikan dua buah bilangan bulat. Function Kali (x, y : integer) : longint; Begin Kali := x * y; End;
Kita juga dapat mendeklarasikan variabel lokal untuk menyimpan nilai sebelum akhirnya dikembalikan lagi ke fungsi, misalnya seperti kode di bawah ini. Function Kali (x, y : integer) : longint; Var Hasil : longint; Begin Hasil := x * y; Kali := Hasil; End;
3) Pemanggilan fungsi Fungsi diakses dengan cara memanggil namanya dari program pemanggil, diikuti dengan daftar parameter aktual (bila ada). Oleh karena fungsi menghasilkan sebuah nilai maka pada saat pemanggilannya juga dapat
ditampung
ke
dalam
suatu variabel. Berikut
pemanggilan fungsi di atas.
41
ini
contoh
Var A : longint; Begin {memanggil fungsi Kali dan menyimpan nilainya ke dalam variabel A) A := Kali (10, 5); ... End.
4) Parameter Parameter merupakan suatu nilai atau referensi yang dilewatkan ke dalam rutin tertentu dan kehadirannya akan mempengaruhi proses maupun nilai yang terdapat di dalam rutin itu sendiri. Parameter ditempatkan di dalam tanda kurung setelah nama rutin bersangkutan. Suatu fungsi umumnya mempunyai parameter. Namun bisa saja suatu fungsi tidak memiliki paramater. Setiap parameter yang dilewatkan harus memiliki tipe data tersendiri yang dapat berupa dari tipe dasar maupun bentukan seperti array, record atau pointer. Untuk mengetahui arti parameter, perhatikan fungsi matematika di bawah ini. f (x) = 2x2 + 5x – 3
Bila x=1, maka f akan mengembalikan nilai 4, yang berasal dari f (1) = 2(1)2 + 5(1) – 3 = 2 + 5 – 3 = 4
Bila x=2, maka f akan mengembalikan nilai 15, yang berasal dari f (2) = 2(2)2 + 5(2) – 3 = 8 + 10 – 3 = 15
Dari ilustrasi tersebut terlihat jelas bahwa hasil nilai dari fungsi f ditentukan oleh besarnya nilai x, sehingga x disebut sebagai parameter dari fungsi f. C. Penutup Seperti halnya prosedur, fungsi juga merupakan sub program yang mempunyai
tujuan
spesifik.
Pertanyaan
sering
muncul
dalam
pemrograman moduler adalah : apakah sebuah modul program akan
42
dibuat sebagai prosedur atau fungsi ? Fungsi digunakan apabila modul program mengembalikan sebuah nilai, sementara prosedur digunakan apabila modul menghasilkan efek netto dari satu atau sekumpulan aksi. Pemilihan apakah sebuah modul direalisasikan sebagai fungsi atau prosedur bergantung pada kebutuhan dan seni memprogram. 1) Pertanyaan Buat program perhitungan nilai faktorial menggunakan fungsi. 2) Umpan Balik dan Tindak Lanjut Untuk menguasai materi ini, sebaiknya anda membuat ringkasan materi tentang fungsi dan membuat sendiri beberapa program dengan menggunakan fungsi. Jawab pertanyaan di atas dengan langsung membuat program di komputer. Jalankan program tersebut sampai benar. Hapus kembali listing program yang sudah benar dan buat kembali program tersebut, dan jalankan. Kalau tingkat kesalahan pada pembuatan program sudah kecil, anda dapat melanjutkan materi berikutnya. Kalau program belum jalan, perbaiki terus sampai benar. 3) Kunci Jawaban Program faktorial; Var n : integer; function f(n:integer);integer; var i, f : integer; begin f:=1; for i:=1 to n do f:=f +1; end; begin write (’jumlah faktorial :’);readln(n); writeln(f); end.
43
Daftar Pustaka Jurusan Informatika. 2006. Bahan Ajar Pemrograman 2. Hibah Pengajaran PHK A1 Universitas Negeri Gorontalo Kadir, Abdul. 2002. Pemrograman Pascal Buku 1. Yogyakarta: Andi Offset. Munir, Rinaldi. 2005. Algoritma dan Pemrograman dalam bahasa Pascal dan C Edisi 3. Bandung: Informatika. Rahardjo, Budi. 2005. Teknik Pemrograman Pascal. Bandung:Informatika
44
BAB V SORTING A. Pendahuluan Deskripsi Singkat Bab ini akan membahas definisi pengurutan, pengurutan gelembung, pengurutan maksimum/minimum, pengurutan seleksi. Relevansi Pengurutan akan memudahkan kita dalam mencari data dalam sebuah program. Pengurutan sangat erat kaitannya dengan pencarian. Tujuan Instruksional Khusus Mahasiswa
mampu
membuat
program
dengan
menggunakan
perintah sorting. B. Penyajian 1) Definisi Pengurutan (Sorting) Selain
pencarian,
pengurutan
data
merupakan
salah
satu
permasalahan umum yang juga sering dijumpai dalam pemrograman. Sebagai bukti nyata, tinjaulah metode pencarian bagi dua di atas yang menuntut kita untuk melakukan pengurutan terlebih dahulu sebelum kita melakukan pencarian. Dalam pemrograman, terdapat beberapa metode untuk melakukan pengurutan data. Namun terdapat 8 (delapan) metode yang umumnya banyak digunakan, yaitu : 1. Bubble Sort 2. Maximum/Minimum Sort 3. Selection Sort 4. Insertion Sort 5. Heap Sort 6. Quick Sort
45
7. Merge Sort 8. Shell Sort Pada pembahasan ini, hanya 3 (tiga) metode yang akan dibahas yaitu metode
pengurutan
gelembung
(bubble
sort),
pengurutan
maksimum/minimum (maximum/minium sort) dan pengurutan seleksi (selestion sort). 2) Pengurutan Gelembung (Bubble sort) Menurut sumber yang ada, metode ini diinspirasi oleh adanya gelembung sabun yang mengapung di atas permukaan air. Hal ini tentunya disebabkan karena berat jenis gelembung sabun lebih kecil dari berat jenis air. Konsep dari fenomena tersebut kemudian diterapkan sebagai metode pengurutan data di dalam array. Dalam metode ini data dengan nilai terkecil akan diapungkan ke posisi teratas, dan sebaliknya data dengan nilai terbesar akan berada pada posisi terbawah. Sebagai contoh, asumsikan bahwa kita memiliki array A yang berisi lima buah elemen data, seperti yang tampak di bawah ini.
25
22
18
20
15
A[1]
A[2]
A[3]
A[4]
A[5]
Gambar 5.1 Array A sebelum diurutkan dengan metode gelembung
Di sini kita akan mengurutkan array tersebut secara menaik, yaitu dengan mengapungkan nilai terkecil ke posisi teratas (paling kiri). Proses ini tentu akan dilakukan dengan menggunakan pertukaran antar elemen array. Tahapan-tahapan yang harus dilakukan adalah sebagai berikut.
Tahap 1 Mulai dari A[5] sampai A[2], lakukan perbandingan nilai antara A[k] dan A[k-1] dimana variabel k mewakili indeks array yang sedang aktif. Apabila nilai A[k] lebih kecil, maka tukarkan nilai A[k] dengan A[k-1]. Sampai di sini, array tersebut akan menjadi seperti berikut.
46
15
25
22
18
20
A[1]
A[2]
A[3]
A[4]
A[5]
Gambar 5.2 Hasil Pengurutan Array A tahap 1
Tahap 2 Mulai dari A[5] sampai A[3], lakukan proses seperti pada tahap 1 sehingga array akan menjadi seperti berikut. 15
18
25
22
20
A[1]
A[2]
A[3]
A[4]
A[5]
Gambar 5.3 Hasil Pengurutan Array A tahap 2
Tahap 3 Mulai dari A[5] sampai A[4], lakukan proses seperti pada tahap 1 dan 2 sehingga array akan menjadi seperti berikut. 15
18
20
25
22
A[1]
A[2]
A[3]
A[4]
A[5]
Gambar 5.4 Hasil Pengurutan Array A tahap 3
Tahap 4 Tahap ini merupakan tahap terakhir dimana kita akan melakukan perbandingan terhadap nilai dari elemen terakhir (A5]) dengan elemen terakhir-1 (A[4]). Apabila nilai A[5] lebih kecil maka tukarkan nilainya dengan A[4] sehingga array A di atas akan terurut secara menaik seperti yang tampak di baeah ini. 15
18
20
22
25
A[1]
A[2]
A[3]
A[4]
A[5]
Gambar 5.5 Hasil Pengurutan Array A tahap 4
Pada proses yang terjadi di atas tampak jelas bahwa untuk melakukan pengurutan data dengan lima buah elemen, kita harus melakukan empat tahapan. Sekarang, apabila proses di atas kita translasikan ke dalam bahasa pascal, maka hasilnya adalah sebagai berikut.
47
Var n, {banyaknya elemen array} j, k {variabel bantu untuk indeks pengulangan} temp : integer; {variabel bantu untuk melakukan pertukarannilai} begin 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; End;
Untuk lebih memperjelas, coba perhatikan implementasinya di dalam program berikut. Program UrutGelembung; Uses crt; Const n = 5; A : array [1 . . n] of integer = (25, 22, 18, 20, 15); Var j, k, temp : integer; begin clrscr; {menampilkan data sebelum proses pengurutan} Writeln(’Data sebelum diurutkan’); For j := 1 to n do begin Writeln(’A[’, j,’] = ’, A[j]; End; 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]; Ak-1] := temp; End; End; End; {Menampilkan data setelah proses pengurutan} Writeln; Writeln (’Data setelah diurutkan’); For j:= 1 to n do begin Writeln(’A[’, j, ’] = ’, A[j]); End;
48
Readln; End.
Hasil yang akan diberikan oleh program di atas adalah sebagaii beriku. Data sebelum diurutkan 25 22 18 20 15 Data setelah diurutkan 15 18 20 22 25
3) Pengurutan Maksimum/Minimum Dengan metode ini, elemen array dengan nilai maksimum/minimum akan disimpan ke bagian ujung array (elemen pertama maupun terakshir). Selanjutnya nilai tersebut akan diisolasi atau diikat dan tidak diikutkan lagi dalam proses selanjutnya. Di sini, kita hanya akan menggunakan metode maksimum saja dan tidak akan membahas mengenai metode minimum. Hal ini disebabkan karena konsep yang terdapat pada metode minimum sama persis dengan metode maksimum. Untuk mempermudah pembahasan, coba perhatikan kembali array A yang terdapat pada bahasan sebelumnya. 25
22
18
20
15
A[1]
A[2]
A[3]
A[4]
A[5]
Gambar 5.6 Array A sebelum diurutkan dengan metode Maksimum/Minimum
Pada bagian ini kita akan melakukan pengurutan data di dalam array tersebut dengan menggunakan metode maksimum, di mana kita akan melempar nilai maksimum ke bagian paling kanan array. Adapun tahapan-tahapan yang perlu dilalui untuk melakukan hal tersebut adalah sebagai berikut.
49
Tahap 1 Mulai dari A[1] sampai A[5], cari nilai maksimum dan tukarkan nilainya dengan elemen terakhir (A[5]) sehingga array akan akan berubah menjadi seperti di bawah ini. 15
22
18
20
25
A[1]
A[2]
A[3]
A[4]
A[5]
Gambar 5.7 Hasil Pengurutan Array A tahap 1
Sampai di sini, elemen terakhir (A[5]) tidak akan diikutkan lagi ke dalam proses atau tahap selanjutnya.
Tahap 2 Mulai dari A[1] sampai A[4], cari nilai maksimum dan tukarkan nilainya dengan elemen terakhir saat ini (A[4]) sehingga array akan akan berubah menjadi seperti di bawah ini. 15
20
18
2
25
A[1]
A[2]
A[3]
A[4]
A[5]
Gambar 5.8 Hasil Pengurutan Array A tahap 2
Sampai di sini, elemen ke-4 (A[4]) juga tidak akan diikutkan lagi ke dalam proses atau tahap selanjutnya.
Tahap 3 Mulai dari A[1] sampai A[3], cari nilai maksimum dan tukarkan nilainya dengan elemen terakhir saat ini (A[3]) sehingga array akan tampak seperti di bawah ini. 15
18
20
22
25
A[1]
A[2]
A[3]
A[4]
A[5]
Gambar 5.9 Hasil Pengurutan Array A tahap 3
Sampai di sini, elemen ke-3 (A[3]) juga tidak akan diikutkan lagi ke dalam proses selanjutnya.
50
Tahap 4 Tahap terakhir, cari nilai maksimum antara A[1] sampai A[2] dan tukarkan nilainya dengan elemen A[2]. Untuk kasus ini nilai maksimum terdapat pada A[2] sehingga di sini benarnya terjadi proses yang seharusnya tidak perlu dilakukan, yaitu menukarkan nilai A[2] dengan A[2]. Berikut ini bentuk translasi metode di atas ke dalam bahasa Pascal. Var n, x, j, k, maks, imaks, temp : integer; begin x:= n; for j:= 1 to n-1 do begin maks := A[1]; imaks := 1;
{banyaknya elemen array keseluruhan} {banyaknya elemen array yang belum terurut} {untuk indeks pengulangan} {untuk menyimpan nilai maksimal} {untuk menyimpan indeks dari elemen yang menyimpan nilai maksimal} {variabel bantu untuk proses pertukaran} {mula-mula semua belum terurut}
for k:= 2 to x do begin if(A[k] > maks) then begin maks := A[k]; imaks := k; end; end; {tukarkan maks dengan A[x]} Temp := A[x]; A[x] := A[imaks]; A[imaks] := temp; {ikat elemen terakshir dengan menurunkan nilai x} x := x – 1; end; end;
4) Pengurutan Seleksi Pengurutan dengan metode seleksi ini bekerja dengan cara memilih salah satu elemen serta menganggapnya sebagai nilai terkecil. Kemudian nilai tersebut aan dibandingkan dengan elemen-elemen pada posisi berikutnya. Apabila nilai yang dipilih pertama kali lebih besar dari nilai elemen pembanding maka tukarkan kedua buah nilai tersebut. Untuk memperjels pembahasan ini, marilah kita perhatikan kembali array A seperti pembahasan sebelumnya. Berikut gambarannya.
51
25
22
18
20
15
A[1]
A[2]
A[3]
A[4]
A[5]
Gambar 5.10 Array A sebelum diurutkan dengan metode Seleksi
Tahap 1 Mula-mula, A[1] akan dianggap sebagai nilai terkecil, yaitu dengan cara memasukkan nilai 1 ke dalam variabel, misalnya dengan nama min. Mulai dari j = min + 1 sampai n (jumlah elemen array), lakukan perbandingan antara A[j] dengan nilai A[min]. Apabila nilai dari A[min] > A[j], isikan min = j. Setelah pengulangan selesai, tukarkan nilai A[min] dan A[1]. Untuk kasus ini, nilai min adalah 5 karena nilai terkecil tersimpan pada indeks ke-5. hal tersebut akan menyebabkan array A tampak menjadi seperti berikut. 15
22
18
20
15
A[1]
A[2]
A[3]
A[4]
A[5]
Gambar 5.11 Hasil Pengurutan Array A tahap 1
Tahap 2 Mula-mula, A[2] akan dianggap sebagai nilai terkecil, yaitu dengan cara memasukkan nilai 2 ke dalam variabel, misalnya dengan nama min. Kemudian sama seperti di atas, lakukan pengulangan mulai dari j = min + 1 sampai n dan bandingkan setiap nilainya. Setelah didapatkan nilai min, maka tukarkan A[min] dengan A[2]. Untuk kasus ini, nilai minimum ditemukan pada indeks ke-3 sehingga min = 3. Tukarkan A[min] dengan A[2] sehingga array A akan tampak seperti berikut. 15
18
22
20
25
A[1]
A[2]
A[3]
A[4]
A[5]
Gambar 5.12 Hasil Pengurutan Array A tahap 2
Tahap 3 Mula-mula, A[3] akan dianggap sebagai nilai terkecil, yaitu dengan cara memasukkan nilai 3 ke dalam variabel min. Kemudian sama seperti di atas, lakukan pengulangan mulai dari j = min + 1 sampai n dan bandingkan setiap nilainya. Setelah didapatkan nilai min, maka tukarkan
52
A[min] dengan A[3]. Untuk kasus ini, nilai minimum ditemukan pada indeks ke-4 sehingga min = 4. Tukarkan A[min] dengan A[4] sehingga array A akan tampak seperti berikut. 15
18
20
22
25
A[1]
A[2]
A[3]
A[4]
A[5]
Gambar 5.13 Hasil Pengurutan Array A tahap 3
Tahap 4 Mula-mula, A[4] akan dianggap sebagai nilai terkecil, yaitu dengan cara memasukkan nilai 4 ke dalam variabel min. Kemudian sama seperti di atas, lakukan pengulangan mulai dari j = min + 1 sampai n dan bandingkan setiap nilainya. Setelah didapatkan nilai min, maka tukarkan A[min] dengan A[4]. Untuk kasus ini, nilai minimum ditemukan pada indeks ke-4 sehingga min = 4. Tukarkan A[min] dengan A[4] sehingga array A akan tampak seperti berikut. 15
18
20
22
25
A[1]
A[2]
A[3]
A[4]
A[5]
Gambar 5.14 Hasil Pengurutan Array A tahap 4
C. Penutup 1) Pertanyaan Buat program untuk mengurutkan data mahasiswa dengan metode seleksi.
2) Umpan Balik dan Tindak Lanjut Untuk menguasai materi ini, sebaiknya anda membuat ringkasan materi tentang sorting (pengurutan) dan membuat sendiri beberapa program dengan sorting. Jawab pertanyaan di atas dengan langsung membuat program di komputer. Jalankan program tersebut sampai benar. Hapus kembali listing program yang sudah benar dan buat kembali program tersebut,
53
dan jalankan. Kalau tingkat kesalahan pada pembuatan program sudah kecil, anda dapat melanjutkan materi berikutnya. Kalau program belum jalan, perbaiki terus sampai benar. 3) Kunci Jawaban Procedure selectionsort; Var i, j, temp, imax : integer; begin for i:= 1 to n-1 do begin imax := i; for j := i+1 to n do if TabInt[j] < TabInt[max] then imax := j; temp := TabInt[imax]; TabInt[imax] := TabInt[i]; TabInt[i] := temp; End; End.
Daftar Pustaka Jurusan Informatika. 2006. Bahan Ajar Pemrograman 2. Hibah Pengajaran PHK A1 Universitas Negeri Gorontalo Kadir, Abdul. 2002. Pemrograman Pascal Buku 1. Yogyakarta: Andi Offset. Munir, Rinaldi. 2005. Algoritma dan Pemrograman dalam bahasa Pascal dan C Edisi 3. Bandung: Informatika. Rahardjo, Budi. 2005. Teknik Pemrograman Pascal. Bandung:Informatika
54
BAB VI SEARCHING A. Pendahuluan Deskripsi Singkat Bab ini akan membahas definisi pencarian (searching), metode pencarian beruntun, metode pencarian bagi dua. Relevansi Pencarian dalam sebuah program akan sangat menguntungkan bagi pemrogram apabila akan membuat sebuah program yang mengharuskan adanya pencarian data tertentu. Dengan pencarian, akan membat program lebih efektif. Tujuan Instruksional Khusus Mahasiswa
mampu
membuat
program
dengan
menggunakan
perintah searching. B. Penyajian (1) Definisi Pencarian (Searching) Pencarian (searching) data tertentu yang terkandung 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 serte pengimplementasiannya di dalam bahasa Pascal. Dalam ilmu algoritma, metode pencarian data di dalam array diklasifikasikan menjadi dua, yaitu metode pencarian beruntun (sequential search) dan metode pencarian
bagi
dua/pencarian
biner
penjelasannya dari kedua metode tersebut.
55
(binary
search).
Berikut
ini
2) Metode Pencarian Beruntun Metode ini 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. 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 proses pencarian data berikut.
Array A
Hentikan pencarian
1
75
2
73
3
78
4
81
5
80
Nilai yg akan dicari
Gambar 6.1. Pencarian Data dengan Metode Pencarian Beruntun(sumber:Rahardjo)
Pada gambar di atas, nilai 1, 2, …5 merupakan
indeks array
sedangkan nilai 75, 73, … 80 merupakan nilai yang terkandung dalam elemen-elemen array. Sekarang misalkan kita akan melakukan pencarian data 78 di dalam array tersebut, 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 dialnjutkan ke elemen berikutnya (A[2]),
56
begitu seterusnya. Pada saat elemen ketiga, nilai A[3] sama dengan nilai yang dicari pencarian akan dihentikan. 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. Program CariBeruntun; Uses crt; Const A : array [1 . . 5] of integer = (75, 73, 78, 81, 80); Var i, x, indeks : integer; begin clrscr; 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; writeln (x, ‘ditemukan pada indeks ke-‘, indeks); readln; end.
Adapun contoh hasil yang akan diberikan oleh program di atas adalah sebagai berikut . Masukkan nilai yang akan dicari : 78 78 ditemukan pada indeks ke-3
Sekarang tinjaulah kasus apabila ternyat data yang dicari dalam array tidak ditemukan. Sebagai contoh apabila kita memiliki array dengan n buah elemen, maka dengan metode runtunan ini, program akan melakukan pembandingan nilai sebanyak n kali, yaitu dari indeks pertama sampai indeks ke-n. Hal ini tentu dapat dikatakan sebagai sebuah kelemahan dari metode tersebut.
57
3)
Metode Pencarian Bagi Dua Berbeda dengan metode pencarian beruntun yang dapat digunakan
untuk data belum terurut, metode pencarian bagi dua ini hanya dapat digunakan untuk data-data yang telah terurut, baik secara menaik maupun menurun. Dalam metode ini elemen array akan dibagi menjadi dua, sehingga banyaknya proses pembandingan nilai dapat dikurangi. Sebagai contoh, apabila terdapat array A yang memiliki n buah elemen dengan indeks 1 sampai n dan datanya telah terurut secara menaik, maka array tersebut akan dipenggal 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 pemenggal atau pembatas antara dua bagian tersebut. Apabila x (nilai yang dicari) sama dengan nilai A[k] maka hentikan pencarian, sedangkan bila tidak, periksa 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]. Perhatikan gambar berikut. Nilai yang dicari Keadaan pertama 10 12
14
15
16
18
19
20
22
24
25
26
28
29
k1 = 7 Keadaan kedua 20
22
24
25
26
28
29
K2 = 11 Keadaan ketiga Hentikan pencarian 20
22
24
K3 = 11 Gambar 6.2. Pencarian Data dengan Metode Pencarian Bagi Dua(sumber:Rahardjo)
Pada gambar di atas, array terdiri dari 14 buah elemen yang sudah terurut secara menaik dengan indeks 1 sampai 14. Mula-mula (keadaan
58
pertama), array akan dibagi menjadi dua bagian. Pembatasnya adalah indeks ke-7. Nilai 7 didapat dari (1+14) div 2. Karena nilai pada indeks ke7 (nilai 19) lebih kecil dari nilai yang dicari (nilai 22), maka proses pencarian akan diulang untuk indeks ke-8 sampai ke-14. Pada keadaan kedua ini array
tersebut juga akan dibagi menjadi dua. Kali ini
pembatasnya adalah indeks ke-11, yang berasal dari (8+4) div 2. Karena nilai pada indeks ke-11 (nilai 25) lebih besar dari nilai yang dicari (niali 22), maka proses pencarian akan dilakukan lagi untuk indeks ke-8 sampai ke-10. Pada keadaan ini (keadaan ketiga), array akan dibagi menjadi dua pada indeks ke-9, yang berasal dari (8+10) div 2. Karena nilai pada indeks ke-9 sama dengan nilai yang dicari, maka proses pencarian pun dihentikan. Untuk lebih memperjelas pembahasan serta menunjukkan implementasinya, perhatikan contoh program di bawah ini. Program CariBagiDua; Uses crt; Const A : array [1 . . 14] of integer = (10,12,14,15,16,18,19,20,22,24,25,26,28,29); Var idxAwal, {indeks array awal} idxAkhir, {indeks array akhir} k, {indeks pemenggal/pembatas} x : integer; {nilai yang dicari} ketemu : boolean; {variabel status, ditemukan atau tdak ?} begin clrscr; write (‘masukkan nilai yang akan dicari : ‘); readln(x); {melakukan pencarian} idxAwal := 1; idxAkhir := 14; {14 adalah jumlah elemen array A} ketemu := false; while (not ketemu) and (idxAwal<= idxAkhir) do begin k:= (idxAwal + idxAkhir) div 2; if A[k] = x then begin ketemu := true; end else begin if A[k] < x then begin idxAwal := k + 1; {mencari di bagian kanan} end else begin idxAkhir := k – 1; {mencari di bagian kiri} end; end;
59
end; {memeriksa, ketemu atau tidak} if ketemu then begin writeln (x, ‘ ditemukan pada indeks ke-‘, k); end else begin writeln(x, ‘ tidak ditemukan’); end; readln; end.
Berikut contoh hasil yang akan diberikan oleh program di atas. Masukkan nilai yang akan dicari : 22 22 ditemukan pada indeks ke-9
C. Penutup Pencarian (searching) dilakukan untuk menemukan nilai tertentu pada sejumlah nilai yang tersedia. Terdapat bermacam-macam program pencarian yang telah dikembangkan dengan ide dasar yang berbeda. Dua diantaranya adlah pencarian beruntun dan pencarian bagi dua. Pencarian beruntun dilakukan dengan melakukan perbandingan nilai yang dicari dengan setiap elemen array, mulai dari indeks terkecil sampai indeks terbesar yang terdefinisi. Pencarian dihentikan jika nilai yang dicari telah ditemukan atau semua elemen sudah diperiksa. Mencari nilai terbesar atau terkecil adalah contoh lain dari proses beurtan terhadap array. Metode pencarian bagi dua ini hanya dapat digunakan untuk datadata yang telah terurut, baik secara menaik maupun menurun. Dalam metode ini elemen array akan dibagi menjadi dua, sehingga banyaknya proses pembandingan nilai dapat dikurangi.
1) Pertanyaan Buat program untuk mencari nilai tertentu dengan metode pencarian beruntun.
60
2) Umpan Balik dan Tindak Lanjut Untuk menguasai materi ini, sebaiknya anda membuat ringkasan materi tentang searching (pencarian) dan membuat sendiri beberapa program dengan searching. Jawab pertanyaan di atas dengan langsung membuat program di komputer. Jalankan program tersebut sampai benar. Hapus kembali listing program yang sudah benar dan buat kembali program tersebut, dan jalankan. Kalau tingkat kesalahan pada pembuatan program sudah kecil, anda dapat melanjutkan materi berikutnya. Kalau program belum jalan, perbaiki terus sampai benar. 3) Kunci Jawaban Program pencarian_beruntun; Const nmin = 1; nmax = 100; type arrint = array [nmin..nmax] of integer; var x : integer; TabInt : arrint; n : integer; indeks : integer; function cari1 (xx: integer) : integer; var i : integer; begin i := 1; while ((i
xx)) do i := i + 1; if TabInt[i] = xx then cari1 := i else cari1 := 0; end; begin write (’Nilai yang dicari = ’); readln (x); indeks := cari1 (x); if indeks <> 0 then write (x, ’ ditemukan pada indeks ke-’ , indeks) else write (x, ’tidak ditemukan’); end.
61
Daftar Pustaka Jurusan Informatika. 2006. Bahan Ajar Pemrograman 2. Hibah Pengajaran PHK A1 Universitas Negeri Gorontalo Kadir, Abdul. 2002. Pemrograman Pascal Buku 1. Yogyakarta: Andi Offset. Munir, Rinaldi. 2005. Algoritma dan Pemrograman dalam bahasa Pascal dan C Edisi 3. Bandung: Informatika. Rahardjo, Budi. 2005. Teknik Pemrograman Pascal. Bandung:Informatika
62
BAB VI FILE A. Pendahuluan Deskripsi Singkat Bab ini akan membahas definisi file, variabel file, membuka file, memanipulasi data dalam file, menutup file. Relevansi Data dalam sebuah program yang telah dibuat dengan berbagai materi pada bab sebelumnya dapat disimpan untuk digunakan kembali dengan perintah file. Dengan demikian, apabila komputer dimatikan maka datanya tidak akan hilang. Tujuan Instruksional Khusus Mahasiswa
mampu
membuat
program
dengan
menggunakan
perintah file. B. Penyajian 1) Definisi File 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 :
63
(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 2) 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 prosedur Assign, yang memeiliki bentuk umum sebagai berikut. Procedure 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 F:TextFile; {mendeklarasikan variabel file denagn nama F} Begin Assign (F, ’D:\COBA\CONTOH.TXT’); ... end.
64
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. 3) Membuka File Seteleh 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) Prosedur Rewrite Prosedur 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.
Procedure 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
65
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. Program ContohRewrite; 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) Prosedur Reset Prosedur 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. Procedure 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
66
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 prosedur Reset seperti yang tampak pada kode berikut. Program ContohReset; Uses crt; Var F : TextFile; Teks : string; Begin Assign (F, ’D :\SAMPLE.TXT’); Reset (F); While not eof (F ) do begin Readln (F, teks) ; {membaca data dari file dan mengisikannya ke variabel teks} Writeln (teks); menampilkan variabel teks ke layar} 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 prosedur Reset pada file yang belum terdapat di dalam disk maka kompiler akan menampilkan pesan kesalahan pada saat program dijalankan. (c) Prosedur Append Prosedur 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 prosedur Rewrite maupun reset karena prosedur Append secara otomatis akan membuka
67
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 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. 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. Program ContohAppend; 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
68
4) Memanipulasi Data Dalam File Setelah Anda mengerti cara untuk mengkaitkan atau menghubungkan file ke variabel file dan juga bagaimana cara membuka file tersebut maka kini saatnya Anda mengetahui bagaimana cara memanipulasi data dalam file dari program yang kita buat. Untuk melakukan hal tersebut tentu Anda harus memahami dengan benar cara membaca data dan menuliskan data kedalam file. (a) Menulis Data ke Dalam File Dalam bahasa Pascal, proses penulisan data ke dalam file dapat dilakukan dengan menggunakan prosedur Write, Writeln maupun BlockWrite. Untuk informasi lebih detil mengenai masing-masing prosedur tersebut, Anda dapat melihat sub bab di bawah ini. (1) Menggunakan Prosedur Write Prosedur Write digunakan untuk menuliskan data kedalam file dimana posisi kursor tidak akan dipindahkan kebaris selanjutnya. Berikut ini bentuk prototipe dari prosedur Write. Procedure Write (NamaVariabelFile; VI [ , V2..VN] ) ;
Dimana V1..VN adalah nama variabel yang akan digunakan untuk menyimpan data yang akan dituliskan. Walaupun demikian, Andajuga dapat menuliskannya secara langsung tanpa harus menyimpannya terlebih dahulu ke dalam variabel seperti yang tampak pada kode berikut. write (F,’Mencoba menuliskan data ke dalam file’);
Berdasarkan kode di atas, maka teks tersebut akan dimasukkan atau ditulis ke dalam file yang telah dihubungkan dengan variabel file F. Untuk lebih memahaminya, perhatikan contoh program di bawah ini dimana kita akan melakukan penulisan terhadap file DATA.TXT yang terdapat pada direktori COBA di dalam drive D. Sebagai catatan bahwa file DATA.TXT ini sebelumnya sudah ada di dalam disk dimana isi dari file tersebut masih kosong.
69
Program ContohWrite; Uses crt; Var F : TextFile; Begin Assign (F,’D:\COBA\DATA.TXT’); Reset (F); Write (F, ’Teknik Pemrograman ’); Write (F, ’Pascal’); Close (F); End.
Jalankan program tersebut dan buka kembali isi dari file DATA.TXT, maka kita akan melihat bahwa file tersebut sekarang telah berisi teks berikut. Teknik Pemrograman Pascal
(2) Menggunakan Prosedur Writeln Sebenarnya konsep dari prosedur Writeln ini sama dengan prosedur Write di atas. Perbedaannya, Writeln digunakan untuk menuliskan data per baris. Artinya, setelah melakukan prosedur Write, prosedur ini akan memindahkan kursor aktif ke baris selanjutnya. Berikut contoh program yang akan menunjukkan penggunaan prosedur Writeln yang digunakan untuk menuliskan data ke dalam file. Program ContohWriteln; Uses crt; Var F : TextFile; Begin Assign (F,’D:\COBA\DATA.TXT’); Reset (F); Writeln (F, ’Teknik Pemrograman ’); Writeln (F, ’Pascal’); Close (F); End.
Apabila dijalankan, program di atas akan menyebabkan isi file DATA.TXT berubah menjadi seperti di bawah ini. Teknik Pemrograman Pascal
70
(b) Membaca Data dari File Untuk membaca data dari dalam file, kita dapat menggunakan prosedur Read, Readln dan BlockRead. (1) Menggunakan Prosedur Read Pada file teks, prosedur ini digunakan untuk membaca data per karakter. Apabila digunakan pada file bertipe maka prosedur Read akan membaca per elemen data. Berikut bentuk umumnya. procedure Read (NamaVariabelFile; V1[, V2 . . VN]);
dimana V1 . . VN adalah nama variabel yang akan digunakan untuk menyimpan data hasil proses pembacaan. (2) Menggunakan Prosedur Readln Cara kerja dari prosedur ini sebenarnya sama dengan prosedur Read, hanya saja dalam prosedur Readln proses pembacan datanya tidak dilakukan per karakter melainkan per baris data. Setelah mengeksekusi prosedur Read, maka kursor akan ditujukkan ke baris selanjutnya. Proses pembacaan data dengan prosedur Readln tentu akan membutuhkan waktu yang relatif lebih cepat apabila dibandingkan dengan prosedur Read karena dilakukan per baris. Hal yang perlu diingat bahwa prosedur Readln hanya dapat digunakan untuk file teks saja. Bentuk umum dari prosedur Readln adalah sebagai berikut. procedure Readln (NamaVariabelFile; V1[, V2 . . VN]);
dimana V1 . . VN adalah nama variabel yang akandigunakan untuk menyimpan data hasil proses pembacaan. 5) Menutup File Setelah selesai mengakses file maka sebaiknya kita menutupnya. Untuk keperluan ini, bahasa Pascal menyediakan prosedur Close. Berikut bentuk umumnya. procedure close (var F);
71
dimana F adalah sebuah variabel file yang sebelumnya telah dibuka dengan menggunakan fungsi Reset, Rewrite maupun Append. 6) Jenis File Dalam bahasa Pascal, file dibedakan menjadi tiga jenis, yaitu : (a) File Teks (b) File Bertipe (c) File Tanpa Tipe (a) File Teks File teks adalah file yang menyimpan data-data dalam bentuk teks. Dalam bahasa Pascal, file teks ini direpresentasikan dengan tipe Text atau TextFile. Berikut ini contoh kode untuk mendeklarasikan variabel yang bertipe TextFile. var F : TextFile; {mendeklarasikan variabel F bertipe TextFile}
Untuk dapat lebih mengetahui penggunaannya di dalam program, perhatikan contoh program berikut. Program FileTeks; Uses crt; Var F : TextFile; Begin Assign (F, ’D:\CONTOH.TXT’); Rewrite (F); Writeln (F, ’Teknik Pemrograman Pascal’); Writeln (F, ’Oleh : Budi Raharjo’); Writeln (F, ’Tahun : 2005’); Writeln (F, ’Penerbit : INFORMATIKA Bandung’); Close (F); End.
Di sini kita mengasumsikan bahwa file CONTOH.TXTbelum ada di dalam dirive D, selanjutnya kita ingin membuat atau menciptakan file tersebut dan mengisikan data yang berupa teks ke dalamnya. Sekarang jalankan program tersebut dan lihatlah drive D, maka kita akan menmui file baru dengan nama CONTOH.TXT yang isinya adalah sebagai berikut. Teknik Pemrograman Pascal
72
Oleh Tahun Penerbit
: Budi Raharjo : 2005 : INFORMATIKA Bandung
(b) File Bertipe File bertipe adalah file yang menampung data dengan tipe data tertentu, seperti integer, real dan lainnya. Selain tipe data dasar, kita juga dapat mendefinisikan file bertipe ini dengan tipe data bentukan, misalnya record. Berikut ini bentuk umum untuk mendeklarasikan variabel file bertipe. Var NamaVariabelFile : file of <Tipedata>
Sebagai contoh, apabila kita akan mendeklarasikan variable file yang mengakses file yang berisi data integer amak kode yang harus dituliskan adalah sebagai berikut. var F : file of integer;
Begitu juga apabila file berisi data real, maka kodenya adalah seperti berikut. var F : file of real;
Contoh penggunaan file bertipe untuk tipe record adalah sebagai berikut. Type Tsiswa = Record NIM : string [8]; Nama : string [25]; Umur : integer; Alamat : string [30]; Kota : string [15]; End; Var F : file of Tsiswa;
(c) File Tanpa Tipe Dalam bahasa Pascal, file tanpa tipe direpresentasikan dengan tipe FILO. File jenis ini dapat digunakan untuk menyimpan jenis data apa saja, baik teks maupun tipe lainnya, namun biasanya digunakan untuk
73
menyimpan data-data biner (termasuk file EXE maupun COM). Berikut bentuk umumnya. Var NamaVariabelFile : FILE
Sebagai contoh apabila kita ingin mendeklarasikan variabel F yang akan digunakan sebagai variabel file tanpa tipe, maka kita harus mendeklarasikannya sebagai berikut. var F : FILE
C.
Penutup Sejauh ini program yang kita buat masih menggunakan data yang
bersifat sementara. Artinya, umur atau daur hidup dari data tersebut masih tergantung pada lamanya program bersangkutan dijalankan. Hal ini disebabkan karena data tersebut hanya disimpan di dalam memori komputer sehingga apabila program dihentikan maka alamat memori tempat data-data tersebut disimpan juga akan didealokasikan oleh kompiler secara otomatis, dan ini mengakibatkan data-data yang tersimpan pun akan hilang. Untuk mengatasi kasus tersebut, dalam pemrograman disediakan alat bantu untuk penyimpanan data-data hasil program yang disebut dengan file. Secara fisik, file disimpan di dalam suatu disk seperti harddisk atau disket, yang selanjutnya dapat dimanipulasi isinya. 1) Pertanyaan (a) Buat program untuk pengolahan data barang dengan menggunakan media file teks. (b) Buat
program
untuk
mengkoreksi
menggunakan media file teks.
74
data
barang
dengan
2) Umpan Balik dan Tindak Lanjut Untuk menguasai materi ini, sebaiknya anda membuat ringkasan materi tentang file dan membuat sendiri beberapa program file. Jawab pertanyaan di atas dengan langsung membuat program di komputer. Jalankan program tersebut sampai benar. Hapus kembali listing program yang sudah benar dan buat kembali program tersebut, dan jalankan. Kalau tingkat kesalahan pada pembuatan program sudah kecil, anda dapat melanjutkan materi berikutnya. Kalau program belum jalan, perbaiki terus sampai benar.
3) Kunci Jawaban Jawaban a program file1; uses crt; var berkasteks:text; kodebrg :string[5]; namabrg :string[20]; unitbrg :integer; hargabrg:real; kodecari:string[5]; spasi :string[5]; lagi :char; begin assign(berkasteks,'barang.txt'); lagi :='Y'; while upcase(lagi)='Y' do begin spasi := ' '; reset(berkasteks); clrscr; write('kode barang dicari ? ');readln(kodecari); writeln; kodecari :=copy(spasi,1,5 - length(kodecari)) + kodecari; while (Not Eof(berkasteks)) And (kodebrg <> kodecari) do Readln(berkasteks,kodebrg,namabrg,unitbrg,hargabrg); if kodebrg=kodecari then begin writeln('nama barang :',namabrg); writeln('unit barang :',unitbrg:7); writeln('harga barang :',hargabrg:10:2); end else
75
write('tidak ada data barang ini !!!'); close(berkasteks); writeln; write('ada data yang akan dicari [y/t] ?');readln(lagi); end; end.
Jawaban b program koreksidata; uses crt; var berkasteks, berkasdummy :text; kodebrg:string[5]; namabrg:string[20]; unitbrg:integer; hargabrg:real; kodecari:string[5]; spasi:string[5]; lagi:char; ketemu:boolean; begin lagi:='Y'; while upcase(lagi) ='Y' do begin assign(berkasteks,'barang.txt'); reset(berkasteks); assign(berkasdummy,'barang.$$$'); rewrite(berkasdummy); spasi :=' '; clrscr; write('kode barang dikoreksi ?'); readln(kodecari); writeln; kodecari:=copy(spasi,1,5-length(kodecari))+kodecari; ketemu:=false; while not eof(berkasteks) do begin readln(berkasteks,kodebrg,namabrg,unitbrg,hargabrg); if kodebrg = kodecari then begin ketemu:=true; writeln('kode barang :',kodebrg); write ('koreksinya :');readln(kodebrg); writeln('nama barang :',namabrg); write ('koreksinya :');readln(namabrg); writeln('unit barang :',unitbrg:7); write ('koreksinya :');readln(unitbrg); writeln('harga barang :Rp.',hargabrg:10:2); write ('koreksinya :');readln(hargabrg); end; writeln(berkasdummy,kodebrg:5,namabrg:20,unitbrg,hargabrg:10:2); end; if not ketemu then writeln('tidak ada data barang ini !!!');
76
close(berkasteks); close(berkasdummy); erase(berkasteks); rename(berkasdummy,'barang.txt'); writeln; write('ada lagi data yang akan dicari [Y/T] ?');readln(lagi); end; end.
Daftar Pustaka Jogiyanto, 1989. Turbo Pascal. Yogyakarta : Andi Ofset. Jurusan Informatika. 2006. Bahan Ajar Pemrograman 2. Hibah Pengajaran PHK A1 Universitas Negeri Gorontalo Kadir, Abdul. 2002. Pemrograman Pascal Buku 1. Yogyakarta: Andi Offset. Kadir, Abdul. 2002. Pemrograman Pascal Buku 2. Yogyakarta: Andi Offset. Rahardjo, Budi. 2005. Teknik Pemrograman Pascal. Bandung:Informatika Wahid, Fathul. 2004. Dasar-Dasar Algoritma dan Pemrograman. Yogyakarta : Andi.
77