welcome to my blog yulliarahma

Senin, 28 Februari 2011

aray dan record

susunan, senarai. Pada umumnya kata ini digunakan untuk bahasa Pemrograman yang menampung data-data dalam variabel yang tersusun dengan nama yang sama. Two array dimensions = susunan dua dimensi.
Array ini identik dengan susunan suatu rak yang diberi nama dan nomor. misalnya rak tersebut diberi nama Pegawai lalu data dari masing-masing pegawai tersebut ditempatkan berdasarkan nomornya.


Pengantar Struktur Data Bab 2 – Array & Record

Pengertian cross-section pada array dimensi banyak, adalah sama seperti pada array
dimensi dua. Misalnya MHS(4,*,17) menunjukkan jumlah mahasiswa tingkat 4 dari
perguruan tinggi 17 (masing-masing untuk pria serta wanita). MHS(*,*,3) menun-jukkan
jumlah mahasiswa untuk masing-masing tingkat, pria serta wanita, dari perguruan tinggi 3.



MENDEKLARASIKAN ARRAY DALAM BAHASA
PEMROGRAMAN

Misalkan kita hendak mendeklarasikan array TEMP yang merupakan array dimensi satu
dengan nilai subscript 1 sampai 24, dan masing-masing elemen bertipe data integer
(nilainya antara 0 hingga 99 derajat).
Dalam Bahasa COBOL dapat ditulis :
01 TABEL-TEMP
02 TEMP OCCURS 24 TIMES PIC 99.
Dalam bahasa Pascal :
var temp: array l..24)of integer
Dalam Bahasa BASIC, kita dapat mendefinisikan array TEMP tersebut dengan
statement :
DIM TEMP(24)
Tiga hal harus dikemukakan dalam mendeklarasikan suatu array, yakni :
1. nama array
2. range dari subscrip
3. tipe data dari elemen array
adalah :
var grafik : array [-100 ..100] of integer
Dalam COBOL subscript harus dimulai dari 1.

Untuk menyatakan elemen ke-I dari array, COBOL dan BASIC menggunakan kurung
biasa, yakni TEMP(I), sedangkan Pascal menggunakan kurung siku, yakni temp[i].
Untuk mendeklarasikan sebuah array nilai dari 500 mahasiswa untuk 8 mata kuliah,
dalam COBOL ditulis :

01 TABEL-NILAI
02 MHS OCCURS 500 TIMES
03 NILAI OCCURS 8 TIMES
PIC 99V9.
Dalam Pascal ditulis :
var nilai : Array[1..500,1..8] of real
dan dalam BASIC dapat ditulis
DIM NILAI(500,8)
Dalam COBOL maksimum dimensi yang dapat diterima adalah 3 (three dimensional),
contohnya :
01 MHS-TABEL
02 TINGKAT OCCURS 5 TIMES
03 SEX OCCURS 2 TIMES
04 MHS OCCURS 20 TIMES PIC 9(5).
dan dalam Pascal :
var mhs : Array[1..5, 1..2, 1..20] of integer
Dalam bahasa pemrograman seperti FORTRAN dan COBOL, alokasi untuk array
dalam storage memerlukan waktu dalam proses kompilasi, karenanya batas bawah dan
batas atas harus dikemukakan ketika mendefinisikan array.
COBOL dan Pascal (juga bahasa lain yang memungkinkan pendeklarasian array)
mempunyai fasilitas untuk melakukan manipulasi antarelemen array. Operasi yang sesuai
dengan tipe data array tersebut dapat dikerjakan dengan mudah, contohnya dalam COBOL
COMPUTE TOTAL_UPAH(I) = UPAH_PER_JAM(I) * JUMLAH-JAM(l)
Terlihat bahwa ketiga variabel di atas adalah array.
Beberapa bahasa pemrograman memperkenankan operasi array. Sebagai contoh, A
adalah array (bertipe real) yang dideklarasi dalam PL/1, maka A=A+2 adalah operasi
untuk menambah setiap elemen dari A dengan bilangan 2.
Juga dikenal operasi A = A * B. Operasi ini menghasilkan array A baru yang
elemennya merupakan hasil kali elemen array A (lama) dengan elemen array B yang
posisinya bersesuaian. Order array A dan B harus sama.
Perhatikan bahwa perkalian array ini bukan perkalian matriks yang telah kita kenal.
Dalam PL/1, operasi dapat pula dilakukan terhadap cross-section. Sebagai contoh adalah
operasi yang menyebabkan NILAI seluruh baris 20 menjadi nol, berikut ini :
NILAI(20,*)= 0
Operasi VEKTOR(*)= ARRAY1(I,*) *ARRAY(*,J) akan memperkalikan elemen
baris ke-I dari ARRAY1 dengan elemen kolom ke-j dari ARRAY2. Operasi di atas
mempunyai efek yang sama seperti loop dalam Bahasa BASIC :
FOR K = 1 TO N
VEKTOR(J) = ARRAY1(I,K)* ARRAY2(K,J)
NEXT K

PEMETAAN ARRAY DIMENSI SATU KE
STORAGE

Seperti halnya struktur data yang lain, ada beberapa cara untuk menyajikan array di dalam
memori. Skema penyajian dapat dievaluasi berdasarkan 4 karakteristik, yakni :
1. kesederhanaan dari akses elemen
2. mudah untuk ditelusuri
3. efisiensi dari utilitasi storage
4. mudah dikembangkan
Umumnya tidaklah mungkin untuk mengoptimalkan keempat faktor tersebut
sekaligus. Pandang array satu dimensi NOPEG dengan batas bawah subscript 1, dan batas
atas subscript = N. Salah satu cara untuk menyimpan array ini adalah sedemikian sehingga
urutan fisik dari elemen sama dengan urutan logik dari elemen. Storage untuk elemen
NOPEG(I+1) adalah berdampingan dengan storage untuk elemen NOPEG(I), untuk setiap
I = 1, 2, 3,..., N-1. Untuk menghitung alamat (address) awal dari elemen NOPEG(I),
diperlukan untuk mengetahui 2 hal yakni :
1. address awal dari ruang storage yang dialokasikan bagi array tersebut.
2. ukuran dari masing-masing elemen array.
Address awal dari array, kita nyatakan dengan B, disebut juga base-location. Misalkan
bahwa masing-masing elemen dari array menduduki S byte. Maka, address awal dari
elemen ke-I adalah :
B + (I-1) * S
Sekarang kita perluas persamaan di atas untuk mendapat address dari elemen ke-I dari
array yang mempunyai batas bawah subscript tidak sama dengan 1. Perhatikan array
Z(4:10), maka address awal dari Z(6) adalah :
B + (64) * S
Untuk array Z2 (-2:2) misalnya, address awal dari Z2(l) adalah :
B + (I -(-2)) * S
Maka secara umum, untuk array :
ARRAY(L:U),
elemen ARRAY(I) mempunyai address awal
B + (U-L) * S

Karena memori komputer adalah linear, maka array dimensi banyak harus dilinearkan
apabila akan dipetakan ke dalam storage. Salah satu alternatif untuk pelinearan tersebut
adalah menyimpan pertama kali baris pertama dari array, kemudian baris ke-2, baris ke-3
dan seterusnya. Ini disebut row major order.
Sebagai contoh, array yang dideklarasikan sebagai RATE(1:4,1:6), yang secara logika
RATE (2,4)
Baris 1 Baris 2 Baris 3 Baris 4
Skema seperti di atas digunakan dalam COBOL, Pascal ataupun PL/1.
Misalkan B adalah base-location dari array RATE tersebut, dan masing-masing elemen
dari array berukuran S. Address awal dari elemen RATE(I,J) adalah :
B + (I-1) * 6 * S + (J-1) * S
karena ada I-1 baris, masing-masing dengan panjang 6 * S, sebelum baris elemen
RATE(I,J) terletak, dan terdapat J- 1 elemen, masing-masing dengan panjang S sebelum
elemen RATE(I,J) pada baris ke-I. Jadi, pada contoh di atas RATE(2,4) mempunyai
address awal :
B+ (2-1) * 6 * S + (4-1) * S = B + 9 * S
Secara umum elemen ARRAY(I,J) dari array yang didefinisikan sebagai
ARRAY(L1:U1, L2 : U2) mempunyai address awal :
B + (I-L1) * (U2 -L2+ 1) * S + (J-L2) * S
Untuk lebih jelasnya, kita lihat array Z(-2:2, 4:6)
baris -2 baris -1 baris 0 baris 1 baris 2
Terdapat 2 baris (I-L1, 0 – (-2)) sebelum baris nol, yang masing-masing panjangnya 3*
S(U2-L2+1 = 6-4+1) dan terdapat 2 elemen (J-L2 = 6-4) pada baris ke nol sebelum elemen
Z (0,6). Jadi address awal dari Z(0,6) adalah :
B + 2 * 3 * S + 2 * S = B + 8 * S
Alternatif lain untuk melinearkan array dimensi dua adalah dengan menyimpan
elemen dalam column major order, yakni pertama kali menyimpan kolom pertama, lalu
kolom kedua, kolom ketiga dan seterusnya. Array RATE pada contoh di atas terlihat
secara fisik dalam column major order
RATE (2,4)
Kolom 1 Kolom 2 Kolom 3 Kolom 4 Kolom 5 Kolom 6
Skema seperti ini biasa digunakan dalam FORTRAN.
Dengan mudah dapat diterangkan bahwa pada array RATE di atas, elemen RATE(I,J)
mempunyai address awal B + (J - 1) * 4 * S + (I - 1) * S, sehingga RATE(2,4) akan
mempunyai address awal B + (4-1) * 4 * S + (2-1) * S = B + 13 * S. Jadi kita harus
waspada andaikata kita mempunyai array yang ditulis dalam rutin FORTRAN, kemudian
akan kita tulis dalam bahasa lain (COBOL, PL/1 atau Pascal). Secara umum, elemen
ARRAY(I,J) dari array yang didefinisikan sebagai ARRAY(L1:U1,L2 :U2), menggunakan
address awal :
B + (J-L2) * (U1-L1 +1) * S + (I-L1) * S
Array hanya mempunyai 8 elemen yang bukan 0 dari 80 elemen yang ada. Kadangkadang
ada array berorder 1000 x 1000, yang hanya mengandung 1500 elemen bukan 0.
Tentu saja akan sangat menguntungkan apabila kita cukup menyimpan elemen yang bukan
0 saja.
Ada dua alternatif yang dapat kita lakukan. Masing-masing elemen yang bukan 0 pada
array berdimensi dua kita simpan sebagai tripel, dengan bentuk :
(subscript baris, subscript kolom, nilai elemen)
Tripel tersebut kita simpan sebagai vektor.
Apabila sparse array tersebut adalah array berdimensi satu, maka masing-masing
elemen <> 0 dinyatakan dalam pasangan. Secara umum untuk array berdimensi N, elemen
<> 0 dinyatakan dengan tripel-N. Operasi terhadap vektor memperhatikan informasi
tentang baris dan kolom.
Kekurangan dari penyajian ini adalah bila dilakukan updating. Elemen array yang
tadinya <> 0, diubah menjadi 0 atau sebaliknya, yang tadinya 0 sekarang menjadi <> 0,
menimbulkan kesulitan. Urutan dari vektor perlu diperbaiki. Misalnya elemen dengan
subscript (1,8) diupdate nilainya menjadi bernilai 0, maka vektor V(3) hingga V(8)
berubah urutannya sebagai vektor V(2) hingga V(7).
Juga misalnya elemen bersubcript (4,6) diupdate sehingga bernilai 7, maka vektor
V(5) hingga V(8) berubah menjadi V(6) hingga V(9), sedangkan V(5) diisi oleh tripel
(4,6,7). Penyajian yang lain dari sparse array adalah menggunakan daftar berkait atau
linked list. Hal ini akan dibicarakan khusus dalam bab mengenai Linked List.


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
seperti berikut ini :
dan sebagainya lagi.
1 NOMOR-JAMINAN-SOSIAL
2 NAMA, yang terdiri atas :
NAMA-BELAKANG
NAMA-DEPAN
NAMA-TENGAH
3 ALAMAT, terdiri atas :
JALAN
NOMOR RUMAH
NAMA-JALAN
KOTA
NEGARA-BAGIAN
KODE-POS
4 MENIKAH
Pada record tersebut di atas, satuan data seperti NAMA BELAKANG ataupun KOTA
merupakan tipe data string, sedangkan data lain seperti GAJI POKOK, TUNJANGAN
JABATAN dan berbagai data yang akan diolah secara matematis akan disimpan dengan
tipe data numerik, bisa integer maupun real. Data MENIKAH bisa digunakan tipe data
boolean atau logikal.
Seperti telah kita paparkan terdahulu, array berbeda dengan record, yakni array
bersifat homogen (terdiri dari tipe data yang sama), dan komponen array tidak memiliki
nama sendiri, dan hanya diberi identifikasi oleh posisi mereka di dalam array. Penggunaan
keduanya di dalam program juga berbeda, jika penggunaan array pada umumnya akan
disimpan di memori utama komputer (bersifat sementara), sedangkan record biasanya
digunakan dalam filing yang akan disimpan di memori sekunder komputer, seperti hard
disk, disket, dan lainnya.
Sebuah record memberi informasi tentang berbagai kondisi dari obyek pada
permasalahan yang nyata sehari-hari. Setiap field memberi uraian tentang satu atribut dari
obyeknya. Sebuah record biasanya diberi identifikasi oleh key-nya. Key atau kunci adalah
salah satu atau lebih field yang dipilih untuk tujuan penyampaian informasi yang terjadi di
dalam record yang bersangkutan.
Koleksi dari record yang sama struktur fieldnya disebut suatu file atau berkas. Jadi,
koleksi dari record semua pegawai perusahaan membentuk sebuah file personalia. Pada
umumnya record disimpan membentuk file, dalam urutan sesuai dengan nilai dari key
masing-masing. Di dalam suatu file PERSONALIA, field NOMOR JAMINAN SOSIAL
dari seorang pegawai dapat digunakan sebagai key. Di dalam bahasa pemrograman tingkat
tinggi, record dapat dinyatakan sebagai struktur data (COBOL dan PL/1) dapat diadakan
spesifikasi tentang nama record, field dan subfield yang bersangkutan.
Record tersebut juga diberi nomor seperti diperlihatkan di dalam contoh di bawah ini.
Deklarasi berikut ini dapat digunakan untuk menuliskan record dari file PERSONALIA diatas01 PEGAWAI
02 NOMOR-JAMINAN-SOSIAL
02 NAMA
03 NAMA-BELAKANG
03 NAMA-DEPAN
03 NAMA-TENGAH
02 ALAMAT
03 JALAN
04 NOMOR RUMAH
04 NAMA-JALAN
03 KOTA
03 NEGARA-BAGIAN
03 KODE-POS
02 MENIKAH

(yang harus dilengkapi dengan Picture masing-masing field dan subfield)
Record tersebut dinyatakan di dalam memori sebagai berikut :
NOMOR
JAM-SOS
NAMA
BLK.
NAMA
DEPAN
NAMA
TENG.
NOMOR
RUMAH
NAMA
JALAN KOTA
NEG.
BAGIAN
KODE
POS
MENIKAH
Secara fisik, field record tersebut biasanya disimpan berurutan di dalam lokasi storage,
bahkan sering disatukan. Record biasanya disimpan sebagai file di dalam storage
pembantu, dan jika perlu, sebagian disimpan di dalam memori utama. File merupakan
organisasi data utama di dalam proses pengolahan informasi.
Sebagai gambaran sederhana, pandang sebuah tabel dengan sejumlah baris dan kolom.
Tabel tersebut dapat disebut sebagai sebuah file, sedangkan setiap baris dari tabel tersebut
disebut dengan record, dan setiap kolom dari tabel disebut dengan field.
Pembahasan mendalam tentang file akan dibahas di mata kuliah-mata kuliah yang
memiliki sub-bahasan mengenai pengorganisasian dan pengaksesan file, perancangan
sistem, perancangan data base, dan sejenisnya.

(sumber : http://www.elearning.gunadarma.ac.id/docmodul/pengantar_struktur_data/bab2-array_dan_record.pdf)

Tidak ada komentar:

Posting Komentar