BAHAN AJAR
MATA KULIAH PEMROGRAMAN
Tinjauan
Mata Kuliah
1.1. Deskripsi Mata Kuliah
Algoritma
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
memberikan manfaat kepada mahasiswa
untuk dapat memahami lebih lanjut tentang pemrograman terstruktur. Dengan
menggunakan bahasa pemrograman Pascal
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
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.
BAB I
A R R A Y
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 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[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)
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-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 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.
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.
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] := ’V’ ; {SALAH, karena
elemen A [1] selalu bernilai ’A’}
A [2] := ’W’ ; {SALAH,
karena elemen A [2] selalu bernilai ’B’}
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;
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); {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
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;
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;
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 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;
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[1, 1, 2] =
2 A[1, 2, 1] = 3 A[1, 2, 2] = 4
A[2, 1, 1] =
5 A[2, 1, 2] = 6 A[2, 2, 1] = 7 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.
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.
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
BAB II
R E C O R D
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 Gambar 2.1
Pendeklarasian Record
Daftar_field_1
: tipe_1; (sumber:Kadir)
Daftar_field_2
: tipe_2;
. . .
daftar_field_n
: tipe_n;
END
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.
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.
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);
Dengan adanya penugasan
Barang2 := Barang1;
maka semua field pada record Barang2 akan
berisi recrod Barang1. Hasil dari program di atas :
5)
Record Di Dalam Record
Mungkin saja sebuah record berisi record. Sebagai
gambaran hal ini, perhatikan deklarasi berikut :
RecTanggal = Record
Tanggal,
Bulan,
Tahun :Integer
End;
RecPegawai = Record
Nomor : LongInt;
Nama : String [35];
TglLahir : RecTanggal;
Gaji : LongInt
End;
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 : Integer
End;
RecPegawai = Record
Nomor : LongInt;
Nama : string [35];
TglLahir : RecTanggal;
Gaji : longInt
End;
Var
DataPeg : RecPegawai; {variabel betipe record}
Begin
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.
Program Rec4;
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}
With Barang do
Begin
Nama := ’Ubin TISKA 20x20’;
Writeln (’Nama Barang :
’, Nama);
Writeln (’Kualitas :’,
Kualitas);
Writeln (’Harga :’,
Harga);
End;
Readln
End.
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;
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;
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 : string [25];
Kualitas : char;
Harga : longInt
End;
TabelBarang
= Array [ 1 . . Jum_Maks] of RecBarang;
Var
DafBarang :
TabelBarang; {array record}
JumBarang :
Integer;
{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, 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;
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;
{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
BAB III
P R O S E D U R
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 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) 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)
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 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
Penyelesaian
{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 untuk memanggil prosedur HitungLuasSegitiga.
Penyelesaian
Algoritma Luas_Segitiga
{program utama 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.
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
BAB IV
F U N G S I
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.
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 ini contoh pemanggilan fungsi di atas.
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 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.
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
BAB V
S O R T I N G
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
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.
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.
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;
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.
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.
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, {banyaknya elemen array keseluruhan}
x, {banyaknya elemen array yang belum terurut}
j, k, {untuk indeks pengulangan}
maks, {untuk menyimpan nilai maksimal}
imaks, {untuk menyimpan indeks dari elemen yang menyimpan nilai maksimal}
temp : integer; {variabel bantu untuk proses pertukaran}
begin
x:= n; {mula-mula semua belum terurut}
for j:= 1 to n-1 do begin
maks := A[1];
imaks := 1;
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.
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
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, 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
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 (binary search). Berikut ini penjelasannya dari
kedua metode tersebut.
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
|
1
|
75
|
2
|
73
|
3
|
78
|
4
|
81
|
5
|
80
|
Hentikan pencarian 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]), 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.
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 pertama), array akan dibagi menjadi dua
bagian. Pembatasnya adalah indeks ke-7. Nilai 7 didapat dari (1+14) div 2.
Karena nilai pada indeks ke-7 (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;
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 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.
1)
Pertanyaan
Buat program untuk mencari nilai tertentu dengan
metode pencarian beruntun.
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.
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
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 :
(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.
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 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 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 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
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.
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
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
(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);
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
Oleh : Budi
Raharjo
Tahun : 2005
Penerbit : 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 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 data barang dengan menggunakan media file teks.
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
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
!!!');
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.