240 likes | 411 Views
Arrays. Metode Penyimpanan. Penyimpanan struktur data dalam memori computer dilakukan dengan 2 metode: sequential allocation statis linked allocation dinamis. 1. Ali. 2. Adi. n-1. Ari. n. Avi. Sequential allocation.
E N D
Metode Penyimpanan Penyimpanan struktur data dalam memori computer dilakukan dengan 2 metode: • sequential allocation statis • linked allocation dinamis
1 Ali 2 Adi . . . . . . n-1 Ari n Avi Sequential allocation • Dengan sequential allocation alamat sebuah elemen akan dapat ditentukan jika telah diketahui nomor urut / indeks yang menunjukkan posisi elemen dan kapasitas memori yang digunakan untuk setiap elemen
Sequential Allocation • Untuk menyimpan n sejumlah data harus didefinisikan terlebih dahulu besarnya memori / jumlah tempat yang digunakan untuk menyimpan data tersebut. • Sebaliknya, jika tempat yang disediakan berlebih, maka terjadi pemborosan memori, sehingga metode ini disebut Metode Pengalamatan Statis. • Contoh paling sederhana dari sequential allocation ini adalah ARRAY.
Array • Array 1-dimensi disebut Vektor • Array 2-dimensi disebut Matriks
Vektor (array 1-dimensi) • Biasanya digunakan untuk menyatakan suatu daftar yang mempunyai urutan tertentu (tidak boleh bolak-balik) • Diawali sebuah ordered-list, misal: Jan, Feb, …, Des. • Jika dilakukan alokasi memori (misal: 100 byte), maka alokasi memori yang dipesan akan terletak secara berurutan & tidak terpencar-pencar, mulai elemen pertama hingga terakhir.
A(1) Lo . . . L A(i) . . . . A(n) Vektor (2) • Untuk sebuah vektor n elemen, yang tiap elemennya membutuhkan c byte, maka total memori yang dialokasikan sebesar c * n byte dengan struktur alokasi vektor sbb: Lo = alamat awal elemen pertama array A c = ukuran satu elemen L = Lo + c(i -1) A[i] = lokasi elemen ke-I array A
Contoh segmen program Pascal 1: CONST 2: n = 100 3: VAR 4: A : array [1..n] of integer Misalkan elemen pertama (Lo) berada pada offset 1000, c = 2 byte maka, pada offset ke berapakah elemen ke-5 = A[5] ? Jawab: Lo = 1000 c = 2 byte i = 5 L = A[5] = 1000 + 2*(5-1) = 1000 + 8 = 1008
Contoh segmen program Pascal (2) Contoh 2 : 1: Var 2: B : array [5..30] of integer Lo = 1000 B[15] = ? Jawab : B[15] = 1000 + 2.(15-5) = 1000 + 20 = 1020
Matriks (Array 2-D) • Ada 2 cara penyimpanan di memori: • Row Major Order (RMO) • Column Major Order (CMO)
Row Major Order (RMO) Row Major Order (RMO) Data disimpan baris per baris sebagai sebuah vector Contoh: 1: CONST 2: n = 4 {jumlah baris} 3: m = 3 {jumlah kolom} 4: VAR 5: A: array [1..n,1..m] of integer baris – 1 baris – 2 baris – 4
RMO Rumus pencarian lokasi elemen A[i,j] secara RMO L = Lo + { (i-1) * m + (j-1) } * c di mana 1 ≤ i ≤ n 1 ≤ j ≤ n i = indeks jumlah baris j = indeks jumlah kolom m = jumlah kolom c = ukuran satu elemen Lo = alamat elemen awal
RMO Contoh: Lo = 1000, c =2 , n =4, m = 3 A[3,2] = ? A[3,2] = 1000 + {(3-1)*3 + (2-1)} * 2 = 1000 + 7 * 2 = 1000 + 14 = 1014
RMO (2) Secara umum: untuk matriks yang mempunyai lower bound lk dan upperbound uk, maka: L = Lo + {(i-l1) * (u2 – l2 + 1) + (j – l2)} * c Array [1 .. 6 ; 2 .. 5] l1 = 1; l2 = 2; u1 = 6; u2 = 5 B[3,2] = 1000 + {(3-1) * (5-2+1) + (2 – 2)} * 2 = 1000 + (2*4 + 0) * 2 = 1016
Column Major Order (CMO) Column Major Order (CMO) Prinsip penyimpanan mirip dengan RMO, hanya saja data disimpan kolom per kolom sebagai sebuah vector Misal: matriks A dengan dimensi 4 baris & 3 kolom kolom – 1 kolom – 2 kolom – 3
CMO Rumus CMO L = Lo + {(i-1) + (j-1) * n} * c 1 ≤ i ≤ n, 1 ≤ j ≤ m L = Lo + {(i-l1) + (j-l2) * (u1 – l1 + 1)} * c A[3,2] = 1000 + {(3-1) + (2-1) * 4} * 2 = 1000 + (2+4) * 2 = 1012 B[3,2] = 1000 + { (3-1) + (2-2) * (6-1+1)} * 2 = 1000 + (2 + 0 * 6) * 2 = 1004
ARRAY 3 DIMENSI A [i,j,k] 1 ≤ i ≤ 2, 1 ≤ j ≤ 5, 1 ≤ k ≤ 4 Rumus Secara umum 1 ≤ i ≤ n1, 1 ≤ j ≤ n2, 1 ≤ k ≤ n3 A[i,j,k] = Lo + {(i-1) * n2 * n3 + (j-1) * n3 + (k-1)} * c Rumus untuk Array [l1 .. u1, l2 .. u2, l3 .. u3] of type data A[i,j,k] = Lo + {(i – l1) * (u2 – l2 + 1) * (u3 – l3 + 1) + (j – l2) * (u3 – l3 + 1) + (k – l3)} * c
Record • RECORD, adalah type data kompleks yang menyimpan berbagai macam data yang tergabung menjadi satu kesatuan data. • Cara penyimpanan type data record pada memori adalah dengan menyimpan masing-masing fieldnya secara berurutan di dalam memori. • Jumlah memori yang diperlukan oleh type data record sebesar total memori yang dibutuhkan untuk masing-masing fieldnya.
Record (2) Contoh: 1: var 2: R: record 3: Field1 : integer; 4: Field2 : real; 5: Field3 : string[10]; 6: end; Jumlah memori yang dibutuhkan untuk mengalokasikan variabel tersebut adalah : 2 byte (ukuran field1 = integer) + 6 byte (ukuran field2 = real) + 11 byte (ukuran field3 = string[10]) = 19 byte
ARRAY of RECORD type data array of record, cara penyimpanan pada memori sama seperti penyimpanan type data array, hanya saja ukuran 1 elemen = ukuran 1 record Contoh: 1: TYPE 2: Mhs = Record 3: Nama : String[20]; 4: Alamat : String[40]; 5: Umur : Byte; 6: END; 7: VAR 8: Data: ARRAY [1..10] of Mhs;
Array of Record (2) Jika alamat awal elemen pertama array adalah 1000, di mana kah lokasi field Alamat untuk elemen Data[4] Langkah pengerjaan: • menentukan ukuran 1 record • ukuran 1 record = 21 + 41 + 1 = 63 byte • menentukan lokasi elemen Data[4] • lokasi Data[4] = 1000 + (4-1) * 63 = 1000 + 189 = 1189 • menentukan lokasi alamat untuk elemen Data[4] • lokasi alamat untuk elemen Data[4] = 1189 + 21 = 1210
Contoh Soal TYPE tPegawai = RECORD Nama : STRING[20]; Alamat : STRING[30]; Usia : Byte; Gaji : Real; Status : Char; END VAR A : ARRAY [10..30,13..25] of tPegawai; Cari alamat dari • A[15,15] • B[19,13] • C[20,21] Secara RMO dan CMO dgn Alamat awal = 1000
Secara RMO L = Lo + {(i-l1) * (u2 – l2 + 1) + (j – l2)} * c A[15,15] = 1000 + {(15-10)*(25-13+1) + (15-13)} * 60 = 1000 + {5*13+2}*60 = 1000 + 67 * 60 = 1000 + 4020 = 5020 A[19,13] = 1000 + {(19-10)*(25-13+1) + (13-13)} * 60 = 1000 + (9*13) * 60 = 1000 + 7020 = 8020 A[20,21] = 1000 + {(20-10)*(25-13+1) + (21-13)} * 60 = 1000 + (10*13+8) *60 = 1000 + 138 * 60 = 1000 + 8280 = 9280
Secara CMO L = Lo + {(i-l1) + (j-l2) * (u1 – l1 + 1)} * c A[15,15] = 1000 + {(15-10)+(15-13) * (30-10+1)} * 60 = 1000 + {5 + 2 * 21} * 60 = 1000 + (5+42) * 60 = 1000 + 2820 = 3820 A[19,13] = 1000 + {(19-10)+(13-13) * (30-10+1)} * 60 = 1000 + (9 + 0 * 21) * 60 = 1000 + 9 * 60 = 1540 A[20,21] = 1000 + {(20-10)+(21-13) * (30-10+1)} * 60 = 1000 + {10 + 8 * 21} *60 = 1000 + 10 + 168 *60 = 1000 + 10680 = 11680