Selasa, 22 Februari 2011

Array dah Record

ARRAY dan RECORD
I. Array
Array/Larik adalah struktur data yang mengacu pada sebuah/sekumpulan elemen yang
diakses melalui indeks dan merupakan tipe terstruktur yang mempunyai komponen jumlah
yang tetap dan setiap komponen mempunyai tipe data yang sama. Posisi masing-masing
komponen dalam larik dinyatakan sebagai nomor index.
Setiap elemen larik dapat diakses melalui indeksnya, misalnya mengisi elemen larik yang
ke 3 dengan nilai 100, maka cara mengisinya adalah A[3] ← 100. Contoh Larik bernama A
dengan 8 buah elemen dapat dilihat pada gambar berikut ini :
1 2 3 4 5 6 7 8
Elemen Larik : A[1], A[2], A[3], A[4], A[5], A[6], A[7], A[8]
Indeks Larik : 1, 2, 3, 4, 5, 6, 7, 8
Mengisi elemen larik : A[3] ← 100
Keuntungan struktur data larik adalah :
1. Paling mudah pengoperasiannya
2. Ekonomis dalam pemakaian memori, bila semua elemen terisi
3. Akses ke setiap elemen memerlukan waktu yang sama
Bentuk umum dari deklarasi tipe larik adalah :
type pengenal = array [tipe_index] of tipe;
dengan pengenal : nama tipe data
tipe_index : tipe data untuk nomor index
tipe : tipe data komponen
Parameter tipe_index menentukan banyaknya komponen larik tersebut. Parameter ini
boleh berupa sembarang tipe ordinal kecuali longint dan subjangkauan dari longint.
Sebelum elemen larik dapat dipergunakan, perlu didefinisikan dahulu pada kamus data
sebagai sebagai berikut :
Nama : array [1..400] of string {larik dengan tipe data string}
Panjang : array [a..e] of real {larik dengan tipe data real}
Type TITIK: record
Kurva : array [0..30] of Titik {larik dengan tipe data record}
Hal-hal yang perlu diperhatikan bahwa : Elemen larik harus memiliki tipe data yang sama
atau sejenis (homogen), seperti integer, real, char, string, boolean, record. Artinya larik
tersebut didefinisikan sebagai integer maka nilai yang boleh masuk ke dalam elemen larik
harus bertipe integer. Dan indeks larik harus memiliki tipe data yang menyatakan keterurutan,
seperti integer atau karakter.
Sebagai contoh, deklarasi :
type Vek = array [1..100] of integer;
Menunjukkan bahwa Vek adalah tipe data yang berupa larik yang komponennya bertipe
integer dan banyaknya 100 buah.
Deklarasi yang demikian ini disebut deklarasi larik dimensi satu, yang dalam hal ini dapat
disebut vektor. Jika tipe komponen juga berupa sebuah larik lain, akan kita peroleh larik
dimensi banyak. Sebagai contoh, deklarasi :
type Tbl = array [1..100] of array [1..5] of real ;
menunjukkan bahwa Tbl adalah vektor yang terdiri dari 100 komponen, dengan tipe
komponennya adalah sebuah vektor lain yang mempunyai 5 komponen dan bertipe real.
Bentuk ini juga disebut dengan larik dimensi dua, yang dalam hal ini dapat disebut sebagai
tabel atau matrix.
Deklarasi diatas bisa disingkat menjadi :
type Tbl = array [1..100 , 1..5] of real ;
Contoh lain misalnya :
type Ngawur = array [boolean, 1..100, 1..5] of char;
Deklarasi diatas disebut deklarasi larik dimensi 3.
Ada beberapa pemrosesan yang dapat dilakukan terhadap larik. Algoritma yang paling
mudah untuk melakukan pemrosesan yaitu dengan menggunakan bentuk pengulangan For-todo
dengan alasan bahwa elemen larik memiliki indeks yang terurut. Berikut salah satu pola
untuk memproses larik.
Program Proses_Larik
Const : N =10 {jumlah elemen larik}
Indeks : Integer
A : array [1..N] of integer {deklarasi larik A dengan tipe data integer}
Algoritma
For Indeks ← 1 to N do
PROSES LARIK
Proses Larik bisa diganti dengan proses lainnya, misal :
• Mengisi elemen larik dengan 0 (inisialisasi)
• Mengisi elemen larik dari piranti masukan
• Mencetak elemen larik ke piranti keluaran
Proses Larik dapat dimodifikasi untuk proses berikut, misal :
• Mencari bilangan maksimum/minimum pada larik
• Menjumlahkan nilai seluruh elemen larik
• Membuat rata-rata nilai seluruh elemen larik
• Mencari nilai tertentu pada larik
Untuk mengetahui jumlah elemen suatu larik dapat dihitung dengan rumus sebagai
berikut :
Panjang = UB – LB + 1
dimana ;
UB : Upper Bound (indeks terbesar)
LB : Lower Bound (indeks terkecil)
Penyimpanan elemen larik di dalam memori komputer disusun berurutan sehingga
komputer tidak perlu menentukan setiap elemen larik tetapi cukup menyimpan alamat
awal/pertamanya. Berikut ini cara menentukan lokasi/alamat elemen larik dengan indeks
tertentu :
LOK(LA[K]) = Awal(LA) + W(K-LB)
dimana;
LOK(LA[K]) : lokasi elemen larik dengan indeks K, yang dicari
K : Indeks larik yang dicari
Awal (LA) : Lokasi awal dari larik
W : Jumlah byte untuk menyimpan 1 elemen larik
LB : Lower Bound / Batas bawah
II. Record
Sama halnya dengan larik, rekaman (record) adalah kumpulan data. Perbedaan antara
larik dengan rekaman adalah bahwa dalam larik semua elemennya harus bertipe sama. Tetapi
dalam rekaman setiap elemen bisa mempunyai tipe data yang berbeda satu sama lain.
Dalam aktivitas sehari-hari pemakaian rekaman lebih banyak digunakan dibanding
dengan larik. Beberapa contoh pemakaian misalnya rekaman data akademis mahasiswa,
rekaman gaji pegawai, persediaan barang dalam gudang dan lain-lain.
Rekaman dapat muncul dalam berbagai bentuk, misalnya informasi yang tertulis pada
kartu dan tersimpan dalam sebuah kotak; sebagai informasi yang diketikkan lewat terminal
komputer dan tersimpan dalam harddisk. Biasanya rekaman-rekaman dalam komputer
tersimpan dalam bentuk berkas (file) yang tak gayut terhadap program yang menggunakannya.
Bentuk umum deklarasi rekaman adalah :
type pengenal = record
medan1 : tipe1;
medan2 : tipe2;
.
.
.
medan3 : tipen
end;
dengan pengenal : pengenal yang menunjukkan tipe data yang akan dideklarasikan
medan1, … , medann : nama medan yang akan digunakan
tipe1, … , tipen : sembarang tipe data yang telah dideklarasikan sebelumnya.
Berikut adalah contoh deklarasi rekaman.
Type Tgl_kalender = record
Tanggal : 1..31;
Bulan : 1..12;
Tahun : 1900..2000
end;
Siswa = record
Nama : string [25] ;
Alamat : string [35] ;
Kelamin : (L,P) ;
Kelas : 1..6
end;
Dalam contoh-contoh di atas, rekaman mempunyai medan-medan yang tetap. Ada kalanya
diperlukan suatu bentuk rekaman yang salah satu medannya bisa bervariasi tergantung dari
kebutuhan. Rekaman yang demikian disebut dengan rekaman bebas (variant record).
Bentuk umum rekaman bebas adalah :
Type pengenal = record
{* bagian tetap *}
Medan1 : tipe1;
Medan2 : tipe2;
.
.
.
Medann : tipen;
{* bagian bebas *}
Case tag : tipe_tag of
Label1 : (medan : tipe:
.
.
.
medan : tipe);
Label2 : (medan : tipe:
.
.
.
medan : tipe);
Label3 : (medan : tipe:
.
.
.
medan : tipe);
end;
dengan medan, medan1, medan2, …: nama medan rekaman.
tipe, tipe1, tipe2, … : tipe data medan.
tag : pengenal untuk pemilihan kasus.
tipe_tag : tipe data dari pengenal untuk pemilihan kasus
label1, label2, label3, … : nama label yang menunjukkan kasus yang dipilih.
Dari bentuk umum di atas bisa anda lihat bahwa rekaman bebas terbagi menjadi dua
bagian, yaitu bagian tetap dan bagian bebas, yaitu bagian yang akan dipilih sesuai dengan
kasus yang dihadapi. Medan dalam bagian bebas sering disebut dengan tag field.
Untuk tag field dari bentuk umum di atas, yang diawali dengan kata baku case, ada
beberapa aturan yang perlu diikuti, yaitu :
• Nilai dari tag field diantara case dan of menentukan struktur yang akan digunakan
untuk keseluruhan rekaman. Tag field mempunyai dua komponen, yaitu pengenal
medan yang menyimpan nilai tag field dan tipe data yang menunjukkan semua
kemungkinan nilai tag field.
• Semua kemungkinan nilai tag digunakan sebagai label dalam bagian statemen
case. Jika terdapat beberapa label maka dipisah dengan tanda koma. Struktur
rekaman yang akan dipilih tergantung dari nilai tag.
• Setiap struktur bebas harus ditulis di dalam tanda kurung. Semua yang ditulis di
dalam tanda kurung menggunakan aturan yang sama seperti halnya pada bagian
tetap. Juga dimungkinkan adanya bagian bebas dalam bagian bebas yang lain
(nested variant).
• Sebuah statemen end menutup bagian tetap dan bagian bebas dari definisi rekaman
bebas.
Contoh rekaman bebas misalnya :
type Status = (T,P,J);
Gaji = record
Nama_Pegawai : string[25];
Nomor_Identitas: string[10];
Bagian : string[15];
case Stat_Peg : Status of
T : (Gaji : integer);
P : (Gaji_Per_Jam, Jumlah_Jam_Lembur, Max_Jam_Minggu, Lembur : integer);
J : (Upah_Per_Jam, Jumlah_Jam_Kerja, Jam_Lembur : integer);
end;
Deklarasi di atas juga bisa ditulis sebagai :
type Gaji = record
Nama_Pegawai : string[25];
Nomor_Identitas : string[10];
Bagian : string[15];
case Stat_Peg : (T,P,J) of
.
.
.
end;

Perhatikan bahwa tipe data tag bisa langsung ditulis di belakang nama tag field.
Untuk memanipulasi medan pada suatu rekaman, harus ditulis dengan menggunakan
bentuk umum :
nama_rekaman.nama_medan
Notasi di atas disebut penanda medan (field designator). Sebagai contoh, untuk rekaman
bertipe Siswa yang dideklarasikan pada contoh di atas dan deklarasi :
Var Murid : Siswa;
Kita bisa membaca medan Nama dan Alamat menggunakan statemen ;
readln (Murid.Nama) ;
readln (Murid.Alamat) ;
Ada cara yang lebih singkat dari cara di atas, khususnya jika harus mengakses sejumlah
medan dalam saat yang bersamaan. Untuk itu kita bisa menggunakan statemen with.
Bentuk umum statemen with adalah :
with nama_rekaman do
dengan nama_rekaman adalah nama rekaman yang akan diakses.
Dengan menggunakan deklarasi rekaman bertipe Siswa, dan statemen with, maka kita bisa
mengakses rekaman murid sebagai berikut :
with Murid do
begin
readln (Nama);
readln (Alamat);
readln (Kelas);
readln (Kode_Sex);
if Kode_Sex = 1 then Kelamin := L
else Kelamin := P
end;
Cara di atas akan sama hasilnya jika ditulis secara lengkap sebagai berikut :
readln (Murid.Nama);
readln (Murid.Alamat);
readln (Murid.Kelas);
readln (Kode_Sex);
if Kode_Sex = 1 then Murid.Kelamin := L
else Murid.Kelamin := P
