Professional Documents
Culture Documents
ALGORITMA 2
1
BAHAN AJAR
MATA KULIAH PEMROGRAMAN
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.
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,
4
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
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.
5
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.
6
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.
7
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
program. Berikut ini contoh pendeklarasian variabel yang menggunakan
tipe bentukan berupa array.
Var
X : bilangan;
Vowel : vokal;
6) Array Konstan
Const
NamaArray : array [indexAwal . . indeksAkhir] of tipe_data =
Nila1, nilai2, ...);
9
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’}
A [1] := ’X’ ; {SALAH, karena elemen A [3] selalu bernilai ’C’}
A [1] := ’Y’ ; {SALAH, karena elemen A [4] selalu bernilai ’D’}
A [1] := ’Z’ ; {SALAH, karena elemen A [5] selalu bernilai ’E’}
Contoh hasil yang akan diberikan oleh program di atas adalah sebagai
berikut.
Masukkan nomor bulan : 3
10
Nama bulan ke-3 adalah Maret
11
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
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.
12
lebih memahami konsepnya, perhatikan terlebih dahulu gambar di bawah
ini.
baris
Kolom
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
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
14
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
15
Array3D : array [1 . . 2, 1 . . 3, 1 . . 4] of integer;
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;
16
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
17
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
18
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
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.
B. Penyajian
1) Definisi Record
19
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;
Variabel.field
20
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);
Hasil program :
21
Harga : 14000
{menyalin record}
Barang2 := Barang1;
22
Nama Barang : Ubin TISKA 20x20
Kualitas :A
Harga : 14000
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
Program Rec3;
Uses crt;
Type
RecTanggal = Record
Tanggal,
Bulan,
Tahun : Integer
End;
RecPegawai = Record
Nomor : LongInt;
Nama : string [35];
TglLahir : RecTanggal;
Gaji : longInt
23
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;
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
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.
24
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;
25
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;
26
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}
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
27
DafBarang : TabelBarang; {array record}
JumBarang : Integer;
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
28
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
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
29
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’;
30
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
PROSEDUR
A. Pendahuluan
31
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.
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
32
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
33
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}
Penyelesaian
Procedure CetakHalo
{mencetak string ’Hello World!’ ke piranti keluaran}
{K. Awal : sembarang}
{K. Akhir : string ’Hello World!’ tercetak}
Deklarasi
{tidak ada}
34
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
35
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
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 untuk memanggil prosedur
HitungLuasSegitiga.
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
36
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.
3) Kunci Jawaban
program luas_segitiga;
procedure hitungluas;
var
alas,tinggi,luas : real;
begin
37
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
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
38
dengan materi lainnya dalam sebuah pemrograman terstruktur, terutama
pemrograman moduler.
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.
39
Kali := x * y;
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
40
atau pointer. Untuk mengetahui arti parameter, perhatikan fungsi
matematika di bawah ini.
f (x) = 2x2 + 5x – 3
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.
41
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
42
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.
B. Penyajian
43
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).
44
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.
45
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;
46
End;
End;
End;
Hasil yang akan diberikan oleh program di atas adalah sebagaii beriku.
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 20 18 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
47
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
48
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;
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
49
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
50
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.
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
51
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
52
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.
B. Penyajian
53
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
Hentikan pencarian 5 80 Nilai yg akan dicari
54
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.
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.
55
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
56
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
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.
57
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.
3) Kunci Jawaban
Program pencarian_beruntun;
Const
nmin = 1;
nmax = 100;
type
arrint = array [nmin..nmax] of integer;
var
x : integer;
58
TabInt : arrint;
n : integer;
indeks : integer;
function cari1 (xx: integer) : integer;
var
i : integer;
begin
i := 1;
while ((i<n) and (TabInt[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
59
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.
B. Penyajian
60
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);
61
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’);
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.
62
(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.
63
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]);
64
Apabila kita menggunakan prosedur Reset pada file yang belum terdapat
di dalam disk maka kompiler akan menampilkan pesan kesalahan pada
saat program dijalankan.
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.
65
Assign (F,’D:\COBA\TEST.TXT’) ;
Append (F) ; {Membuka file untuk di tambah isinya}
close(F) ;
end.
66
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
67
End.
68
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);
6) Jenis File
Dalam bahasa Pascal, file dibedakan menjadi tiga jenis, yaitu :
(a) File Teks
(b) File Bertipe
(c) File Tanpa Tipe
69
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
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;
70
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
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.
71
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);
72
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
73
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.
74