ARRAY DAN RECORD
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 :
A
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}
2.1 ARRAY DIMENSI SATU
Secara umum, suatu array dimensi satu A dengan tipe data T dan subscript bergerak dari L sampai dengan U, ditulis sebagai A(L:U) = (A(l)), I = L, L+1, L+2,..., U, dan setiap elemen A(l) bertipe data T. Sebagai contoh, kita dapat menuliskan data hasil pencatatan suhu suatu ruangan setiap satu jam selama periode 24 jam, dalam sebuah array dimensi satu. Harga minimum dari subscript dari array disebut batas bawah atau lower bound, sedangkan harga maksimumnya disebut batas atas atau upper bound. Jadi pada array diatas, L merupakan batas bawah, dan U batas atas.
2.2 ARRAY DIMENSI BANYAK
Sebuah array dimensi banyak atau multi-dimensional array didefinisikan sebagai sebuah array yang elemennya berupa array pula. Misal array B mempunyai M elemen berupa array pula, yang terdiri dari N elemen.
Untuk itu diperlukan dua buah subscript. Yang pertama digunakan untuk menyatakan posisi baris, sedangkan yang kedua untuk posisi kolom. Secara umum array dimensi dua B, dengan elemen bertipe data T, subscript baris dari l sampai M, subscript kolom dari l sampai N, ditulis sebagai B(1:M, 1:N) = (B(I,J)), I = 1, 2, ...,M dan J = 1, 2,...,N dengan setiap elemen B(I,J) bertipe data T. Array B tersebut dikatakan berukuran atau berorder M x N. Di sini banyak elemen array adalah M*N.
Contoh dari array dimensi dua sangat banyak kita jumpai. Misalnya nilai ujian 500 mahasiswa Gunadarma tingkat 3, untuk 8 mata kuliah dapat kita sajikan sebagai array dimensi dua yang berorder 500 x 8. Elemen B(I,J) menyatakan nilai mahasiswa ke-I untuk mata kuliah ke-J. Seperti halnya pada array dimensi satu, pada array dimensi dua batas bawah untuk subscript I maupun J dapat diambil secara umum. Misalnya, batas bawah subscript baris adalah L1 subscript kolom adalah L2 sedangkan batas atas subscript baris adalah U1 dan untuk kolom adalah U2, maka array dimensi dua tersebut dapat dinotasikan sebagai :
B(L1:U1, L2:U2) = (B(I,J)), L1 <= 1 <= U1, L2 <=J <= U2
dengan setiap elemen B(I,J) bertipe data T. Banyaknya elemen pada setiap baris adalah U2 – L2 + 1 dan pada setiap kolom adalah U1–L1+l, sehingga banyaknya elemen pada array B semua ada = (U2-L2 +1) * (U1-L1 +1).
Yang dimaksud dengan cross-section suatu array berdimensi dua adalah pengambilan salah satu subscript, misalnya subscript baris untuk tetap atau konstan, sementara subscript yang satunya lagi kita ubah-ubah sepanjang rangenya. Notasi yang umum digunakan adalah notasi * (asterisk) bagi subscript yang berubah-ubah nilainya tersebut.
Transpose dari suatu array dimensi dua adalah penulisan baris menjadi kolom (kolom menjadi baris) dari suatu array. Jadi transpose dari array berorder M x N adalah array berorder N x M. Transpose dari array B dinotasikan sebagai BT. Berdasarkan definisi, maka jelas B(I,J) =BT(J,I). Contohnya B(3,5) = BT(5,3). Pengertian di atas dapat kita perluas untuk array dimensi tiga, dimensi empat, sampai dimensi N.
Record
Sebuah record merupakan koleksi satuan data yang heterogen, yakni terdiri dari berbagai type. Satuan data tersebut sering disebut sebagai field dari record. Field dipanggil dengan menggunakan namanya masing-masing. Suatu field dapat terdiri atas beberapa subfield. Sebagai Contoh, data personalia dari seorang pegawai suatu perusahaan di Amerika Serikat, merupakan sebuah record yang dapat terdiri dari berbagai field, dan subfield.
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 disbanding 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 computer 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 bias 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
referensi : rijalfadilah.files.wordpress.com/2008/03/pertemuan_3_sd.pdf
www.elearning.gunadarma.ac.id/docmodul/.../bab2-array_dan_record.pdf
bayoe.staff.uns.ac.id/files/2009/03/4-array-dan-record.pdf
Baca selengkapnya »
0
komentar
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 :
A
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}
2.1 ARRAY DIMENSI SATU
Secara umum, suatu array dimensi satu A dengan tipe data T dan subscript bergerak dari L sampai dengan U, ditulis sebagai A(L:U) = (A(l)), I = L, L+1, L+2,..., U, dan setiap elemen A(l) bertipe data T. Sebagai contoh, kita dapat menuliskan data hasil pencatatan suhu suatu ruangan setiap satu jam selama periode 24 jam, dalam sebuah array dimensi satu. Harga minimum dari subscript dari array disebut batas bawah atau lower bound, sedangkan harga maksimumnya disebut batas atas atau upper bound. Jadi pada array diatas, L merupakan batas bawah, dan U batas atas.
2.2 ARRAY DIMENSI BANYAK
Sebuah array dimensi banyak atau multi-dimensional array didefinisikan sebagai sebuah array yang elemennya berupa array pula. Misal array B mempunyai M elemen berupa array pula, yang terdiri dari N elemen.
Untuk itu diperlukan dua buah subscript. Yang pertama digunakan untuk menyatakan posisi baris, sedangkan yang kedua untuk posisi kolom. Secara umum array dimensi dua B, dengan elemen bertipe data T, subscript baris dari l sampai M, subscript kolom dari l sampai N, ditulis sebagai B(1:M, 1:N) = (B(I,J)), I = 1, 2, ...,M dan J = 1, 2,...,N dengan setiap elemen B(I,J) bertipe data T. Array B tersebut dikatakan berukuran atau berorder M x N. Di sini banyak elemen array adalah M*N.
Contoh dari array dimensi dua sangat banyak kita jumpai. Misalnya nilai ujian 500 mahasiswa Gunadarma tingkat 3, untuk 8 mata kuliah dapat kita sajikan sebagai array dimensi dua yang berorder 500 x 8. Elemen B(I,J) menyatakan nilai mahasiswa ke-I untuk mata kuliah ke-J. Seperti halnya pada array dimensi satu, pada array dimensi dua batas bawah untuk subscript I maupun J dapat diambil secara umum. Misalnya, batas bawah subscript baris adalah L1 subscript kolom adalah L2 sedangkan batas atas subscript baris adalah U1 dan untuk kolom adalah U2, maka array dimensi dua tersebut dapat dinotasikan sebagai :
B(L1:U1, L2:U2) = (B(I,J)), L1 <= 1 <= U1, L2 <=J <= U2
dengan setiap elemen B(I,J) bertipe data T. Banyaknya elemen pada setiap baris adalah U2 – L2 + 1 dan pada setiap kolom adalah U1–L1+l, sehingga banyaknya elemen pada array B semua ada = (U2-L2 +1) * (U1-L1 +1).
Yang dimaksud dengan cross-section suatu array berdimensi dua adalah pengambilan salah satu subscript, misalnya subscript baris untuk tetap atau konstan, sementara subscript yang satunya lagi kita ubah-ubah sepanjang rangenya. Notasi yang umum digunakan adalah notasi * (asterisk) bagi subscript yang berubah-ubah nilainya tersebut.
Transpose dari suatu array dimensi dua adalah penulisan baris menjadi kolom (kolom menjadi baris) dari suatu array. Jadi transpose dari array berorder M x N adalah array berorder N x M. Transpose dari array B dinotasikan sebagai BT. Berdasarkan definisi, maka jelas B(I,J) =BT(J,I). Contohnya B(3,5) = BT(5,3). Pengertian di atas dapat kita perluas untuk array dimensi tiga, dimensi empat, sampai dimensi N.
Record
Sebuah record merupakan koleksi satuan data yang heterogen, yakni terdiri dari berbagai type. Satuan data tersebut sering disebut sebagai field dari record. Field dipanggil dengan menggunakan namanya masing-masing. Suatu field dapat terdiri atas beberapa subfield. Sebagai Contoh, data personalia dari seorang pegawai suatu perusahaan di Amerika Serikat, merupakan sebuah record yang dapat terdiri dari berbagai field, dan subfield.
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 disbanding 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 computer 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 bias 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
referensi : rijalfadilah.files.wordpress.com/2008/03/pertemuan_3_sd.pdf
www.elearning.gunadarma.ac.id/docmodul/.../bab2-array_dan_record.pdf
bayoe.staff.uns.ac.id/files/2009/03/4-array-dan-record.pdf