I.ARRAY
2.3 Array berdimendi 1
2.3.1 ARRAY DIMENSI SATU
Sebuah array dimensi satu, yang misalnya kita beri nama NILAI, dapat kita bayangkan
berbentuk seperti Gambar 2.1.
Nilai(1) Nilai(2) Nilai(3) - - - Nilai(n)
Gambar 2.3.1. Array berdimensi satu
Subscript atau indeks dari elemen array menyatakan posisi, elemen pada urutan dalam
array tersebut. Notasi yang digunakan bagi elemen array, biasanya adalah nama array
dilengkapi dengan subcript.
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 di
atas, L merupakan batas bawah, dan U batas atas. Sedangkan untuk array ''suhu'' yang
elemennya dapat kita tulis sebagai SUHU(I), batas bawahnya adalah 1 dan batas atasnya
24. SUHU(I) menyatakan suhu pada jam ke-1, dan I memenuhi 1 <= I <= 24, I merupakan
integer.
Batas bawah dari array, pada beberapa aplikasi, tidak selalu diambil 1. Kadangkadang
diambil batas bawah nol, bahkan juga negatif. Banyaknya elemen sebuah array
disebut rentang atau range. Jadi array A(L:U) mempunyai range sebesar U-L+1. Secara
khusus bila L=l dan U=N, maka range dari array A(l:N) adalah N-I+1 = N.
2.3.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. Kalau hal tersebut kita gambarkan, akan terbentuk baris dan kolom seperti terlihat pada Gambar 2.2.
1 2 N
1
2
M
Gambar 2.3.2. Array berdimensi dua
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.
Contohnya, penulisan B(*,4) menyatakan semua elemen pada kolom ke-4, yakni
(B(1,4),B(2,4), B(3,4) ...., B(M,4)), seperti terlihat pada Gambar 2.3
Gambar 2.3. Cross section array
Dengan mudah dapat dimengerti bahwa B(11,*) menunjukkan semua elemen pada baris
ke-11. 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. Array dimensi N kita tulis sebagai :
A(L1:U1, L2:U2, …, LN: UN) = (A(I1, I2, …, IN))
dengan Lk <= Ik <= Uk, untuk setiap k = 1, 2, …, N.
Banyaknya elemen dari array A tersebut adalah :
PI(Uk - Lk + 1) = (U1-L1+1) * (U2 – L2+1) … * (UN -LN + 1)
Contoh array dimensi tiga adalah penyajian data mengenai banyaknya mahasiswa
dari-20 perguruan tinggi di Jakarta, berdasarkan tingkat (tingkat 1, 2 sampai dengan 5), dan jenis kelamin (pria atau wanita). Misalnya array tersebut dinamakan MHS. Ambil sebagai subscript pertama, tingkat : I = 1, 2,...,5; subscript kedua, jenis kelamin (pria = 1, wanita = 2): J = 1,2, dan subscript ke-3, Perguruan Tinggi adalah K = 1,2,...,20. Jadi MHS(4,2,17) menyatakan jumlah mahasiswa tingkat 4, wanita, dari perguruan tinggi ke 17.
Array dimensi tiga dapat kita bayangkan seperti Gambar 2.4.
1
2
3
4
5
1 2 1
2
Tingkat 20
Jenis Kelamin
Perguruan Tinggi
Gambar 2.4. Array berdimensi tiga
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.
2.4 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
2.5 PEMETAAN KE STORAGE TERHADAP ARRAY
DIMENSI BANYAK
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
tergambar sebagai pada Gambar 2.5 dan secara fisik tergambar pada Gambar 2.6.
1 2 3 4 5 6
1
2
3
4
Gambar 2.5. Array RATE secara logik dalam row major order
RATE (2,4)
RATE (2,4)
Baris 1 Baris 2 Baris 3 Baris 4
Gambar 2.6 Array RATE secara fisik dalam row major order.
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) yang dapat digambarkan pada Gambar
2.7 secara logik dan secara fisik dapat digambarkan pada Gambar 2.8.
4 5 6
-2
-1
0
1
2
Gambar 2.7. Array Z (-2:2, 4:6) secara logik dalam row major order
Z (0,6)
Z (0,6)
baris -2 baris -1 baris 0 baris 1 baris 2
Gambar 2.8. Array Z(-2:2,4:6) secara fisik dalam row major order
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 seperti pada Gambar 2.9.
RATE (2,4)
Kolom 1 Kolom 2 Kolom 3 Kolom 4 Kolom 5 Kolom 6
Gambar 2.9. Array RATE secara fisik dalam column major order
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
Misalkan array A berorder 50 x 225. Hendak dihitung jumlah / total elemennya. Kalau
dipergunakan column-major storage, dapat kita buat, dalam COBOL.
COMPUTE TOTAL = 0.
PERFORM SUM-UP VARYING J
FROM 1 BY 1 UNTIL J > 225
AFTER 1 FROM 1 BY 1 UNTIL I > 50.
dalam hal ini
SUM-UP.
TOTAL = TOTAL + A(I,J).
Dalam Pascal dapat kita tulis :
Total := 0;
for j = 1 to 225 do
for i = 1 to 50 do
total := total + a[I,j];
Kalau dipergunakan row-major storage, kita dapat tulis dalam COBOL sebagai berikut :
COMPUTE TOTAL = 0.
PERFORM SUM-UP VARYING 1
FROM 1 BY 1 UNTIL I > 50
AFTER J FROM 1 BY 1 UNTIL J > 225
dalam hal ini
SUM-UP.
TOTAL = TOTAL + A(I,J).
dan dalam Pascal dapat ditulis
total:=0;
for i := 1 to 50 do
for j := 1 to 225 do
total := total + a[i,j];
2.5 TRINGULAR ARRAY (ARRAY SEGITIGA)
Akan kita tinjau beberapa aspek pelinearan suatu array yang khusus, yakni tringular
array. Tringular array dapat merupakan upper tringular (seluruh elemen di bawah
diagonal utama = 0) ataupun lower tringular (seluruh elemen di atas diagonal utama = 0).
Dalam array lower triangular dengan N baris, jumlah maksimum elemen <> 0 pada
baris ke-I adalah 1, karenanya total elemen <> 0, tidak lebih dari :
N
Σ I = N(N+1)/2
I = 1
Pengantar Struktur Data Bab 2 – Array & Record
41
Gambar 2.10 menunjukkan triangular array berorder 6 x 6.
X X X X X X X 0 0 0 0 0
0 X X X X X X X 0 0 0 0
0 0 X X X X X X X 0 0 0
0 0 0 X X X X X X X 0 0
0 0 0 0 X X X X X X X 0
0 0 0 0 0 X X X X X X X
(a) (b)
Gambar 2.10 (a) Upper triangular array
(b) Lower triangular array
Rumus ini berlaku pula untuk array upper tringular dengan N baris. Kalau N besar,
alangkah baiknya kalau elemen nol tidak usah kita simpan dalam memori. Suatu
pendekatan terhadap problema ini adalah dengan pelinearan array, dan dengan hanya
menyimpan bagian array yang tidak nol.
Misalkan kita menyimpan array upper tringular T secara baris dalam array satu
dimensi S, dengan batas subscript I sampai N(N+I)/2. Elemen T(1,1) disimpan sebagai
S(1), elemen T(1,2) sebagai S(2) dan seterusnya, sehingga elemen T(1,N) disimpan
sebagai S(N). Maka elemen T(2,2) disimpan sebagai S(N+1) (karena T(2,1) = 0). Terakhir
sekali, elemen T(N,N) akan disimpan sebagai S(N(N+1)/2).
Kadang-kadang suatu program menggunakan lebih dari satu array tringular. Untuk itu
kita dapat menyimpan 2 array sekaligus. Misalnya array A upper triangular berorder N x
N dan array B lower triangular berorder (N-1) x (N-1). Mereka dapat kita simpan sebagai
array C berorder N x N. Di sini C(l,J) = A(l,J) untuk I <= J dan C(I+1,J) = B(I,J) untuk I
>= J.
Sekarang apabila array A upper tringular berorder N x N sedangkan array B lower
tringular, juga berorder N x N, maka array C yang mengandung keduanya harus berorder
N x (N+1). Di sini elemen A(I,J) disimpan sebagai C(I,J+1) untuk I <= J, dan B(I,J)
disimpan sebagai C(I,J) untuk I >= J.
Perhatikan contoh berikut array A berorder (3 x 3) merupakan upper tringular.
1 2 3
0 4 5
0 0 6
Array B berorder (2 x 2) merupakan lower tringular,
7 0
8 9
maka mereka disimpan bersama dalam array C sebagai
1 2 3
7 4 5
8 9 6
Contoh berikut,
1 2 3 7 0 0
A = 0 4 5 B = 8 9 0
0 0 6 11 12 13
dapat disimpan sebagai array C berorder (3 x 4)
7 1 2 3
8 9 4 5
11 12 13 6
Misalkan sekarang ada 2 array, sama-sama upper tringular, yakni array A1 dan A2.
Kita dapat menyimpan mereka bersama-sama dengan melakukan transpose terhadap salah
satu array tersebut, misalnya A2 menjadi A2T. A2T adalah array lower tringular. Array C
berorder N x (N+1) akan menyimpan elemen A1(I,J) sebagai C(I,J+1) untuk I <= J, dan
elemen A2(I,J) akan disimpan sebagai C(J,I) untuk I >= J.
Sebagai contoh adalah array :
1 2 3 7 8 9
A1 = 0 4 5 A2 = 0 11 12
0 0 6 0 0 13
7 0 0
maka A2T = 8 11 0
9 12 13
dan mereka tersimpan sebagai :
7 1 2 3
C = 8 11 4 5
9 12 13 6
II.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 harddisk, 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 diatas.
01 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.
Tabel 2.2 Contoh sebuah file TEMAN
NPM NAMA ALM_TEMAN NO_TELP
10102456 Cheriwaty Jl. Puspa No. 30, Keb. Baru 7750658
10102587 Tia Siti Joy Jl. Veteran No. 38, Tebet 8652541
10102965 Yekti Sartanto Jl. Mampang No. 29, Jaksel 78956215
field field field field
record
record
record
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.google.co.id/#hl=id&source=hp&q=tringular+array+&btnG=Telusuri+dengan+Google&meta=cr%3DcountryID&aq=f&oq=tringular+array+&fp=7e99b3a5df14a093
Minggu, 28 Februari 2010
STACK
STACK
DEFINISI STACK
Definisi 1
Stack adalah suatu bentuk khusus dari linear list di mana operasi penyisipan dan penghapusan atas elemen-elemennya hanya dapat dilakukan pada satu sisi saja yang disebut sebagai “TOP”.
Misal diberikan Stack S sebagai berikut :
S = [ S1, S2, .........., ST ] à maka TOP(S) = ST.
Untuk menunjukkan jumlah elemen suatu stack digunakan notasi NOEL. Dari stack di atas, maka NOEL(S) = T. Selanjutnya, jika diberikan sebuah stack S = [A,B,C,D], maka stack S ini dapat digambarkan sebagai berikut :
Definisi 2.
Stack adalah suatu koleksi atau kumpulan item data yang teroganisasi dalam bentuk urutan linear, yang operasi pemasukan dan penghapusan datanya dilakukan pada salah satu sisinya[1]
Definisi 3.
Diberikan suatu himpunan yang terurut himpunan sebagai S = {S1, S2, ......., ST}, T pada anggota S merupakan linear order, sehingga stack dari himpunan tersebut memiliki informasi sebagai berikut [1] :
1. Elemen puncak dari stack dalam himpunan S dikatakan sebagai TOP, sehingga :
TOP[S} = ST ............................................................................(1)
2. Banyaknya elemen stack dalam himpunan S dikatakan sebagai NOEL, sehingga NOEL = T, dimana himpunan dari S tersebut dapat disusun sebagai :
S = {S1, S2, .........., SNOEL} .............................(2)
Dari dua definisi tersebut di atas maka suatu stack dapat digambarkan sebagai berikut :
1. Suatu stack dalam keadaan kosong akan memiliki informasi NOEL(S) = 0 dan TOP(S)= undefined.
S
2. Untuk stack yang bukan kosong, maka akan memiliki informasi seperti yang digambarkan di bawah ini dimana informasi yang ada adalah NOEL(S) = 1 dan TOP(S) = Merah
S
Untuk stack yang berisi lebih dari n jumlah data maka informasi yang ada pada stack tersebut berisikan NOEL(S) = 2 (jika berisi 2 data) dan TOP(S) = Biru seperti ditunjukan pada gambar di bawah ini :
S
Elemen-elemen yang berada dalam stack tersebut di atas, memiliki prinsip dasar dalam pengoperasiannya yaitu prinsip LIFO (Last In First Out) atau yang masuk paling belakang akan memiliki prioritas untuk keluar paling depan.
Suatu stack dapat digambarkan sebagai suatu array (larik) berdimensi satu yang elemen-elemennya berkisar antara 1 sampai n elemen. Dengan demikian jika suatu stack didefinisikan dengan n elemen maka dapat dikatakan jumlah maksimum dari stack atau NOEL(S) nya adalah n, sehingga penambahan elemen stack yang ke n+1 tidak diperkenankan atau stack tersebut dalam kondisi overflow. Hal tersebut juga berlaku untuk stack dengan nilai minimum yaitu NOEL(S) dari stack dalam kondisi 0, jika dilakukan operasi pengambilan elemen atas stack tersebut akan mengakibatkan stack tersebut dalam kondisi underflow. Dua kondisi tersebut merupakan dasar dalam merancang suatu aplikasi pemrograman komputer.
OPERASI DASAR PADA STACK
Dalam penggunaannya suatu stack memiliki beberapa operasi yang dapat diterapkan seperti membuat stack, penambahan eleme ke dalam stack, menghapusan elemen dari dalam stack, dan operasi lain yang berhubungan dengan stack tersebut. Adapun operasi-operasi dasar dari suatu stack adalah :
1. CREATE(stack)
2. ISEMPTY(stack)
3. PUSH(elemen,stack)
4. POP(stack)
CREATE
Operator ini berfungsi untuk membuat sebuah stack kosong dan didefinisikan bahwa :
NOEL(CREATE(S)) = 0 dan TOP(CREATE(S)) = null
ISEMPTY
Operator ini berfungsi untuk menentukan apakah suatu stack adalah stack kosong. Operasinya akan bernilai boolean, dengan definisi sebagai berikut :
ISEMPTY(S) = true, jika S adalah stack kosong
= false, jika S bukan stack kosong
atau
ISEMPTY(S) = true, jika NOEL(S) = 0
= false, jika NOEL(S) ¹ 0
Catatan : ISEMPTY(CREATE(S)) = true.
PUSH
Operasi ini merupakan operasi untuk menambahkan satu elemen dengan nilai X pada puncak suatu stack, sehingga posisi TOP(S) akan bernilai X, penerapan operasi push pasa suatu stack S akan berakibat overflow jika NOEL(S) dari stack tersebut telah bernilai maksimum.
Operator ini berfungsi untuk menambahkan satu elemen ke dalam stack. Notasi yang digunakan adalah :
PUSH(E,S)
Artinya : menambahkan elemen E ke dalam stack S.
Elemen yang baru masuk ini akan menempati posisi TOP.
Jadi : TOP(PUSH(E,S)) = E.
Akibat dari operasi ini jumlah elemen dalam stack akan bertambah, artinya NOEL(S) menjadi lebih besar atau stack menjadi tidak kosong (ISEMPTY(PUSH(E,S)) = false).
POP
Operasi ini berfungsi untuk menghapus satu elemen dari stack S, sehingga posisi NOEL(S) akan berkurang satu elemen, dan TOP(S) akan berubah. Operasi pop dapat menyebabkan kondisi underflow jika suatu stack S yang berada dalam kondisi minimum dikenakan operasi pop.
Operator ini berfungsi untuk mengeluarkan satu elemen dari dalam stack. Notasinya :
POP(S)
Elemen yang keluar dari dalam stack adalah elemen yang berada pada posisi TOP. Akibat dari operasi ini jumlah elemen stack akan berkurang atau NOEL(S) berkurang dan elemen pada posisi TOP akan berubah. Operator POP ini tidak dapat digunakan pada stack kosong, artinya :
POP(CREATE(S)) = error condition
Catatan : TOP(PUSH(E,S)) = E
DEKLARASI STACK PADA BAHASA PEMROGRAMAN
Dalam bahasa pemrograman, untuk menempatkan stack biasanya digunakan sebuah array. Tetapi perlu diingat di sini bahwa stack dan array adalah dua hal yang berbeda. Misalkan suatu variabel S adalah sebuah stack dengan 100 elemen. Diasumsikan elemen S adalah integer dan jumlah elemennya maksimum adalah 100 elemen. Untuk mendeklarasikan stack dengan menggunakan array, harus dideklarasikan pula variabel lain yaitu TOP_PTR yang merupakan indeks dari array. Variabel TOP_PTR ini digunakan untuk menyatakan elemen yang berada pada posisi TOP dalam stack tersebut. Selanjutnya gabungan kedua variabel ini diberi nama STACK_STRUCT. Kemudian didefinisikan bahwa :
NOEL(S) = TOP_PTR
ISEMPTY(S) = TRUE, jika TOP_PTR = 0 dan
FALSE, jika TOP_PTR > 0.
Maka bentuk deklarasinya dalam PASCAL adalah :
TYPE Stack_Struct = Record
Stack : array[1..100] of integer;
TopPtr : integer;
End;
VAR S : Stack_Struct;
Selanjutnya, untuk keperluan operasi PUSH dan POP harus dibuat suatu prosedur tersendiri, yaitu :
PROCEDURE PUSH(Eon : integer);
Begin
If (S.TopPtr < NoelMax) Then Begin
S.TopPtr := S.TopPtr + 1;
S.Stack [S.TopPtr] := Eon
End
Else Overflow_Condition
End;
PROCEDURE POP(Eoff : integer);
Begin
If (S.TopPtr > 0) Then Begin
Eoff := S.Stack[S.TopPtr];
S.TopPtr := S.TopPtr - 1
End
Else Underflow_Condition
End;
Catatan :
Overflow adalah suatu keadaan di mana kita melakukan operasi PUSH terhadap stack dalam keadaan penuh. Underflow adalah keadaan di mana kita melakukan operasi POP terhadap stack kosong. Eon adalah elemen yang akan dimasukkan ke dalam stack dan Eoff adalah elemen yang akan dikeluarkan dari dalam stack.
PENGGUNAAN/APLIKASI STACK
Logika stack digunakan untuk menyelesaikan berbagai macam masalah. Antara lain digunakan pada compiler, operating system dan dalam program-program aplikasi. Berikut ini tiga buah contoh aplikasi stack, yaitu :
MATCHING PARENTHESES
Proses ini dilakukan compiler untuk memeriksa kelengkapan tanda kurung yang terdapat pada suatu ekspresi aritmetik. Sedangkan stack di sini digunakan sebagai tempat prosesnya. Algoritma yang digunakan adalah :
1. Elemen-elemen suatu ekspresi aritmetik (string) di-Scan dari kiri ke kanan.
2. Jika ditemukan simbol "(" atau "Left parenthesis", maka simbol tersebut di-push ke dalam stack.
3. Jika ditemukan simbol ")" atau "Right parenthesis", maka isi stack diperiksa.
Ÿ Jika stack kosong à terjadi kesalahan.
berarti : ada simbol ")", tetapi tidak ada simbol "(" yang seharusnya mendahului.
Ÿ Jika stack tidak kosong à artinya ada pasangannya dan langsung di-POP keluar stack.
Misalkan NEXT CHAR adalah suatu karakter terakhir dalam suatu string. Berikut ini bentuk flowchart (logika proses) yang digunakan pada proses matching ini :
LINEAR LIST
Linear List adalah suatu struktur data yang merupakan himpunan terurut. Misal didefinisikan suatu linear list A yang terdiri atas T buah elemen sebagai berikut :
A = [a1, a2, .........., aT]
Jika T = 0, maka A dikatakan sebagai “Null List”.
Suatu elemen dari sembarang posisi pada linear list A dapat dihilangkan. Sebaliknya, suatu elemen baru dapat dimasukkan ke dalam list dan dapat menempati sembarang posisi pada list tersebut. Jadi suatu linear list dapat berkurang atau bertambah setiap saat.
NOTASI POSTFIX
Bentuk aplikasi stack yang lain adalah mengubah suatu ekspresi aritmatik (string) ke dalam notasi postfix. Notasi postfix ini digunakan oleh compiler untuk menyatakan suatu ekspresi aritmatik dalam bahasa tingkat tinggi (high level language). Stack digunakan oleh compiler untuk mentransformasikan ekspresi aritmatik menjadi suatu ekspresi dalam bentuk/notasi postfix.
Contoh :
Misal diberikan ekspresi aritmatik : A + B ;
Maka bentuknya dalam notasi postfix menjadi : AB+
Urutan (prioritas) dari operator adalah :
1. Perpangkatan (^)
2. Perkalian (*) atau Pembagian (/)
3. Penjumlahan (+) atau Pengurangan (-)
Aturan yang digunakan dalam proses transformasi tersebut adalah :
1. Ekspresi aritmatik yang diberikan di- "Scan" dari kiri ke kanan.
2. Bila simbol yang di-scan adalah "(", maka simbol tersebut di push ke dalam stack.
3. Bila simbol yang di-scan adalah ")", maka seluruh isi stack di pop keluar mulai dari simbol "(" yang pertama ditemukan dalam stack.
4. Bila simbol adalah operator, maka dilakukan perbandingan dulu dengan simbol (operator) yang berada pada posisi top dalam stack.
a. Jika derajatnya setara atau lebih rendah dari simbol yang berada pada posisi top, maka top stack di-pop keluar sebagai output dan simbol yang baru di-push ke dalam stack.
b. Jika derajatnya lebih tinggi dari simbol yang berada pada posisi top, maka simbol (operator) yang di-scan tersebut di-push ke dalam stack.
5. Bila simbol yang di-scan adalah operand, maka simbol tersebut langsung sebagai output.
6. Bila simbol adalah ";" maka seluruh isi stack di-pop sebagai output.
Contoh :
Misal diberikan sebuah ekspresi aritmatik dengan bentuk sbb:
( (A + B) * C / D + E ^ F ) / G ;
Selanjutnya akan dicari bentuk ekspresi diatas dalam notasi postfix.
Proses yang dilakukan dapat digambarkan dalam tabel berikut :
Urutan
Proses
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Simbol
Yang di
Scan
(
(
A
+
B
)
*
C
/
D
+
E
^
F
)
/
G
;
Top
(
(
(
+
+
(
*
*
/
/
+
+
^
^
/
/
(
(
(
(
(
(
(
(
(
(
+
+
(
(
(
(
Output
A
B
+
C
*
D
/
E
F
^+
G
/
Jadi ekspresi aritmatik : ( ( A + B ) * C / D + E^F ) / G ;
dalam notasi postfix menjadi : AB+D*C/EF^+G/
n PROSES REKURSIF
Stack juga dapat digunakan untuk menelurusuri suatu program atau procedure yang rekursif.
Berikut ini sebuah contoh yang menyelesaikannya menggunakan proses rekursif.
Persoalan :
Agar diperoleh uang sebanyak 1.000.000 rupiah pada 25 tahun yang akan datang, berapakah banyak uang yang harus didepositokan saat ini. dianggap bahwa tingkat bunga tidak berubah selama 25 yahun yaitu sebesar 8% per_tahun.
Penyelesaian :
Untuk menyelesaikan masalah ini akan digunakan logika stack yatiu :
- pada tahun ke-25 jumlah uang = Rp. 1.000.000,-
- pada tahun ke-24 jumlah uang = Rp. 1.000.000 / (1 + 0.8)
- pada tahun ke-23 jumlah uang =
.
dst
Berikut ini sebuh program PASCAL yang mengandung suatu procedure rekursif untuk menghitung jumlah uang diinginkan.
PROGRAM DEPOSITO ;
CONST Goal = 1000000;
Rate = 0.08;
VAR Ju : Real;
Thn: Integer;
PROCEDURE Hitung (VAR Thn : Integer);
BEGIN
IF (Thn > 0) THEN
BEGIN
Ju := Ju/(1.0 + Rate);
Thn := Thn - 1;
Hitung(Thn);
END;
END;
BEGIN
Thn := 25;
Ju := Goal;
HITUNG(Thn);
WRITE(Ju);
END.
Pemanggilan pertama procedure HITUNG dimana nilai Thn =25
Pemanggilan kedua procedure HITUNG dimana nilai Thn = 24
Pemanggilan ketiga procedure HITUNG, dimana nilai Thn = 23
Setelah 25 kali pemanggilan procedure HITUNG keadaan stack adalah :
MAPPING KE STORAGE DARI STACK
Bentuk mapping ke storage dari stack yang paling sederhana adalah dengan menggunakan pendekatan array satu dimensi. Hal ini karena sarana yang digunakan untuk menyatakan suatu stack adalah array.
Jika diberikan stack S dengan m elemen maka bentuk mappingnya seperti mapping array satu dimensi dengan m elemen.
Selanjutnya jika terdapat dua stack S1 dan S2 masing-masing dengan jumlah maksimum elemennya adalah M dan N, maka kedua stack ini dialokasikan dalam dengan bentuk sbb:
Konsep mapping seperti diatas dianggap tidak efisien, terutama jika S1 dan S2 tidak penuh pada saat yang bersamaan.
Cara dianggap lebih baik adalah :
Jika diketahui bahwa jumlah elemen S1 dan S2 tidak melebihi jumlah tertentu, misal N.
NOEL(S1) + NOEL(S2) <= N
Maka bentuk mapping yang digunakan adalah :
Sumber :
http://mugi.or.id/blogs/oke/archive/2008/08/27/aplikasi-stack-pada-struktur-data-untuk-mengkonversikan-notasi-infix-menjadi-notasi-postfix.aspx
http://www.google.co.id/#hl=id&q=deklarasi+stack+dalam+bahasa+pemrograman&meta=cr%3DcountryID&aq=&oq=deklarasi+stack+dalam+bahasa+pemrograman&fp=7e99b3a5df14a093
DEFINISI STACK
Definisi 1
Stack adalah suatu bentuk khusus dari linear list di mana operasi penyisipan dan penghapusan atas elemen-elemennya hanya dapat dilakukan pada satu sisi saja yang disebut sebagai “TOP”.
Misal diberikan Stack S sebagai berikut :
S = [ S1, S2, .........., ST ] à maka TOP(S) = ST.
Untuk menunjukkan jumlah elemen suatu stack digunakan notasi NOEL. Dari stack di atas, maka NOEL(S) = T. Selanjutnya, jika diberikan sebuah stack S = [A,B,C,D], maka stack S ini dapat digambarkan sebagai berikut :
Definisi 2.
Stack adalah suatu koleksi atau kumpulan item data yang teroganisasi dalam bentuk urutan linear, yang operasi pemasukan dan penghapusan datanya dilakukan pada salah satu sisinya[1]
Definisi 3.
Diberikan suatu himpunan yang terurut himpunan sebagai S = {S1, S2, ......., ST}, T pada anggota S merupakan linear order, sehingga stack dari himpunan tersebut memiliki informasi sebagai berikut [1] :
1. Elemen puncak dari stack dalam himpunan S dikatakan sebagai TOP, sehingga :
TOP[S} = ST ............................................................................(1)
2. Banyaknya elemen stack dalam himpunan S dikatakan sebagai NOEL, sehingga NOEL = T, dimana himpunan dari S tersebut dapat disusun sebagai :
S = {S1, S2, .........., SNOEL} .............................(2)
Dari dua definisi tersebut di atas maka suatu stack dapat digambarkan sebagai berikut :
1. Suatu stack dalam keadaan kosong akan memiliki informasi NOEL(S) = 0 dan TOP(S)= undefined.
S
2. Untuk stack yang bukan kosong, maka akan memiliki informasi seperti yang digambarkan di bawah ini dimana informasi yang ada adalah NOEL(S) = 1 dan TOP(S) = Merah
S
Untuk stack yang berisi lebih dari n jumlah data maka informasi yang ada pada stack tersebut berisikan NOEL(S) = 2 (jika berisi 2 data) dan TOP(S) = Biru seperti ditunjukan pada gambar di bawah ini :
S
Elemen-elemen yang berada dalam stack tersebut di atas, memiliki prinsip dasar dalam pengoperasiannya yaitu prinsip LIFO (Last In First Out) atau yang masuk paling belakang akan memiliki prioritas untuk keluar paling depan.
Suatu stack dapat digambarkan sebagai suatu array (larik) berdimensi satu yang elemen-elemennya berkisar antara 1 sampai n elemen. Dengan demikian jika suatu stack didefinisikan dengan n elemen maka dapat dikatakan jumlah maksimum dari stack atau NOEL(S) nya adalah n, sehingga penambahan elemen stack yang ke n+1 tidak diperkenankan atau stack tersebut dalam kondisi overflow. Hal tersebut juga berlaku untuk stack dengan nilai minimum yaitu NOEL(S) dari stack dalam kondisi 0, jika dilakukan operasi pengambilan elemen atas stack tersebut akan mengakibatkan stack tersebut dalam kondisi underflow. Dua kondisi tersebut merupakan dasar dalam merancang suatu aplikasi pemrograman komputer.
OPERASI DASAR PADA STACK
Dalam penggunaannya suatu stack memiliki beberapa operasi yang dapat diterapkan seperti membuat stack, penambahan eleme ke dalam stack, menghapusan elemen dari dalam stack, dan operasi lain yang berhubungan dengan stack tersebut. Adapun operasi-operasi dasar dari suatu stack adalah :
1. CREATE(stack)
2. ISEMPTY(stack)
3. PUSH(elemen,stack)
4. POP(stack)
CREATE
Operator ini berfungsi untuk membuat sebuah stack kosong dan didefinisikan bahwa :
NOEL(CREATE(S)) = 0 dan TOP(CREATE(S)) = null
ISEMPTY
Operator ini berfungsi untuk menentukan apakah suatu stack adalah stack kosong. Operasinya akan bernilai boolean, dengan definisi sebagai berikut :
ISEMPTY(S) = true, jika S adalah stack kosong
= false, jika S bukan stack kosong
atau
ISEMPTY(S) = true, jika NOEL(S) = 0
= false, jika NOEL(S) ¹ 0
Catatan : ISEMPTY(CREATE(S)) = true.
PUSH
Operasi ini merupakan operasi untuk menambahkan satu elemen dengan nilai X pada puncak suatu stack, sehingga posisi TOP(S) akan bernilai X, penerapan operasi push pasa suatu stack S akan berakibat overflow jika NOEL(S) dari stack tersebut telah bernilai maksimum.
Operator ini berfungsi untuk menambahkan satu elemen ke dalam stack. Notasi yang digunakan adalah :
PUSH(E,S)
Artinya : menambahkan elemen E ke dalam stack S.
Elemen yang baru masuk ini akan menempati posisi TOP.
Jadi : TOP(PUSH(E,S)) = E.
Akibat dari operasi ini jumlah elemen dalam stack akan bertambah, artinya NOEL(S) menjadi lebih besar atau stack menjadi tidak kosong (ISEMPTY(PUSH(E,S)) = false).
POP
Operasi ini berfungsi untuk menghapus satu elemen dari stack S, sehingga posisi NOEL(S) akan berkurang satu elemen, dan TOP(S) akan berubah. Operasi pop dapat menyebabkan kondisi underflow jika suatu stack S yang berada dalam kondisi minimum dikenakan operasi pop.
Operator ini berfungsi untuk mengeluarkan satu elemen dari dalam stack. Notasinya :
POP(S)
Elemen yang keluar dari dalam stack adalah elemen yang berada pada posisi TOP. Akibat dari operasi ini jumlah elemen stack akan berkurang atau NOEL(S) berkurang dan elemen pada posisi TOP akan berubah. Operator POP ini tidak dapat digunakan pada stack kosong, artinya :
POP(CREATE(S)) = error condition
Catatan : TOP(PUSH(E,S)) = E
DEKLARASI STACK PADA BAHASA PEMROGRAMAN
Dalam bahasa pemrograman, untuk menempatkan stack biasanya digunakan sebuah array. Tetapi perlu diingat di sini bahwa stack dan array adalah dua hal yang berbeda. Misalkan suatu variabel S adalah sebuah stack dengan 100 elemen. Diasumsikan elemen S adalah integer dan jumlah elemennya maksimum adalah 100 elemen. Untuk mendeklarasikan stack dengan menggunakan array, harus dideklarasikan pula variabel lain yaitu TOP_PTR yang merupakan indeks dari array. Variabel TOP_PTR ini digunakan untuk menyatakan elemen yang berada pada posisi TOP dalam stack tersebut. Selanjutnya gabungan kedua variabel ini diberi nama STACK_STRUCT. Kemudian didefinisikan bahwa :
NOEL(S) = TOP_PTR
ISEMPTY(S) = TRUE, jika TOP_PTR = 0 dan
FALSE, jika TOP_PTR > 0.
Maka bentuk deklarasinya dalam PASCAL adalah :
TYPE Stack_Struct = Record
Stack : array[1..100] of integer;
TopPtr : integer;
End;
VAR S : Stack_Struct;
Selanjutnya, untuk keperluan operasi PUSH dan POP harus dibuat suatu prosedur tersendiri, yaitu :
PROCEDURE PUSH(Eon : integer);
Begin
If (S.TopPtr < NoelMax) Then Begin
S.TopPtr := S.TopPtr + 1;
S.Stack [S.TopPtr] := Eon
End
Else Overflow_Condition
End;
PROCEDURE POP(Eoff : integer);
Begin
If (S.TopPtr > 0) Then Begin
Eoff := S.Stack[S.TopPtr];
S.TopPtr := S.TopPtr - 1
End
Else Underflow_Condition
End;
Catatan :
Overflow adalah suatu keadaan di mana kita melakukan operasi PUSH terhadap stack dalam keadaan penuh. Underflow adalah keadaan di mana kita melakukan operasi POP terhadap stack kosong. Eon adalah elemen yang akan dimasukkan ke dalam stack dan Eoff adalah elemen yang akan dikeluarkan dari dalam stack.
PENGGUNAAN/APLIKASI STACK
Logika stack digunakan untuk menyelesaikan berbagai macam masalah. Antara lain digunakan pada compiler, operating system dan dalam program-program aplikasi. Berikut ini tiga buah contoh aplikasi stack, yaitu :
MATCHING PARENTHESES
Proses ini dilakukan compiler untuk memeriksa kelengkapan tanda kurung yang terdapat pada suatu ekspresi aritmetik. Sedangkan stack di sini digunakan sebagai tempat prosesnya. Algoritma yang digunakan adalah :
1. Elemen-elemen suatu ekspresi aritmetik (string) di-Scan dari kiri ke kanan.
2. Jika ditemukan simbol "(" atau "Left parenthesis", maka simbol tersebut di-push ke dalam stack.
3. Jika ditemukan simbol ")" atau "Right parenthesis", maka isi stack diperiksa.
Ÿ Jika stack kosong à terjadi kesalahan.
berarti : ada simbol ")", tetapi tidak ada simbol "(" yang seharusnya mendahului.
Ÿ Jika stack tidak kosong à artinya ada pasangannya dan langsung di-POP keluar stack.
Misalkan NEXT CHAR adalah suatu karakter terakhir dalam suatu string. Berikut ini bentuk flowchart (logika proses) yang digunakan pada proses matching ini :
LINEAR LIST
Linear List adalah suatu struktur data yang merupakan himpunan terurut. Misal didefinisikan suatu linear list A yang terdiri atas T buah elemen sebagai berikut :
A = [a1, a2, .........., aT]
Jika T = 0, maka A dikatakan sebagai “Null List”.
Suatu elemen dari sembarang posisi pada linear list A dapat dihilangkan. Sebaliknya, suatu elemen baru dapat dimasukkan ke dalam list dan dapat menempati sembarang posisi pada list tersebut. Jadi suatu linear list dapat berkurang atau bertambah setiap saat.
NOTASI POSTFIX
Bentuk aplikasi stack yang lain adalah mengubah suatu ekspresi aritmatik (string) ke dalam notasi postfix. Notasi postfix ini digunakan oleh compiler untuk menyatakan suatu ekspresi aritmatik dalam bahasa tingkat tinggi (high level language). Stack digunakan oleh compiler untuk mentransformasikan ekspresi aritmatik menjadi suatu ekspresi dalam bentuk/notasi postfix.
Contoh :
Misal diberikan ekspresi aritmatik : A + B ;
Maka bentuknya dalam notasi postfix menjadi : AB+
Urutan (prioritas) dari operator adalah :
1. Perpangkatan (^)
2. Perkalian (*) atau Pembagian (/)
3. Penjumlahan (+) atau Pengurangan (-)
Aturan yang digunakan dalam proses transformasi tersebut adalah :
1. Ekspresi aritmatik yang diberikan di- "Scan" dari kiri ke kanan.
2. Bila simbol yang di-scan adalah "(", maka simbol tersebut di push ke dalam stack.
3. Bila simbol yang di-scan adalah ")", maka seluruh isi stack di pop keluar mulai dari simbol "(" yang pertama ditemukan dalam stack.
4. Bila simbol adalah operator, maka dilakukan perbandingan dulu dengan simbol (operator) yang berada pada posisi top dalam stack.
a. Jika derajatnya setara atau lebih rendah dari simbol yang berada pada posisi top, maka top stack di-pop keluar sebagai output dan simbol yang baru di-push ke dalam stack.
b. Jika derajatnya lebih tinggi dari simbol yang berada pada posisi top, maka simbol (operator) yang di-scan tersebut di-push ke dalam stack.
5. Bila simbol yang di-scan adalah operand, maka simbol tersebut langsung sebagai output.
6. Bila simbol adalah ";" maka seluruh isi stack di-pop sebagai output.
Contoh :
Misal diberikan sebuah ekspresi aritmatik dengan bentuk sbb:
( (A + B) * C / D + E ^ F ) / G ;
Selanjutnya akan dicari bentuk ekspresi diatas dalam notasi postfix.
Proses yang dilakukan dapat digambarkan dalam tabel berikut :
Urutan
Proses
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Simbol
Yang di
Scan
(
(
A
+
B
)
*
C
/
D
+
E
^
F
)
/
G
;
Top
(
(
(
+
+
(
*
*
/
/
+
+
^
^
/
/
(
(
(
(
(
(
(
(
(
(
+
+
(
(
(
(
Output
A
B
+
C
*
D
/
E
F
^+
G
/
Jadi ekspresi aritmatik : ( ( A + B ) * C / D + E^F ) / G ;
dalam notasi postfix menjadi : AB+D*C/EF^+G/
n PROSES REKURSIF
Stack juga dapat digunakan untuk menelurusuri suatu program atau procedure yang rekursif.
Berikut ini sebuah contoh yang menyelesaikannya menggunakan proses rekursif.
Persoalan :
Agar diperoleh uang sebanyak 1.000.000 rupiah pada 25 tahun yang akan datang, berapakah banyak uang yang harus didepositokan saat ini. dianggap bahwa tingkat bunga tidak berubah selama 25 yahun yaitu sebesar 8% per_tahun.
Penyelesaian :
Untuk menyelesaikan masalah ini akan digunakan logika stack yatiu :
- pada tahun ke-25 jumlah uang = Rp. 1.000.000,-
- pada tahun ke-24 jumlah uang = Rp. 1.000.000 / (1 + 0.8)
- pada tahun ke-23 jumlah uang =
.
dst
Berikut ini sebuh program PASCAL yang mengandung suatu procedure rekursif untuk menghitung jumlah uang diinginkan.
PROGRAM DEPOSITO ;
CONST Goal = 1000000;
Rate = 0.08;
VAR Ju : Real;
Thn: Integer;
PROCEDURE Hitung (VAR Thn : Integer);
BEGIN
IF (Thn > 0) THEN
BEGIN
Ju := Ju/(1.0 + Rate);
Thn := Thn - 1;
Hitung(Thn);
END;
END;
BEGIN
Thn := 25;
Ju := Goal;
HITUNG(Thn);
WRITE(Ju);
END.
Pemanggilan pertama procedure HITUNG dimana nilai Thn =25
Pemanggilan kedua procedure HITUNG dimana nilai Thn = 24
Pemanggilan ketiga procedure HITUNG, dimana nilai Thn = 23
Setelah 25 kali pemanggilan procedure HITUNG keadaan stack adalah :
MAPPING KE STORAGE DARI STACK
Bentuk mapping ke storage dari stack yang paling sederhana adalah dengan menggunakan pendekatan array satu dimensi. Hal ini karena sarana yang digunakan untuk menyatakan suatu stack adalah array.
Jika diberikan stack S dengan m elemen maka bentuk mappingnya seperti mapping array satu dimensi dengan m elemen.
Selanjutnya jika terdapat dua stack S1 dan S2 masing-masing dengan jumlah maksimum elemennya adalah M dan N, maka kedua stack ini dialokasikan dalam dengan bentuk sbb:
Konsep mapping seperti diatas dianggap tidak efisien, terutama jika S1 dan S2 tidak penuh pada saat yang bersamaan.
Cara dianggap lebih baik adalah :
Jika diketahui bahwa jumlah elemen S1 dan S2 tidak melebihi jumlah tertentu, misal N.
NOEL(S1) + NOEL(S2) <= N
Maka bentuk mapping yang digunakan adalah :
Sumber :
http://mugi.or.id/blogs/oke/archive/2008/08/27/aplikasi-stack-pada-struktur-data-untuk-mengkonversikan-notasi-infix-menjadi-notasi-postfix.aspx
http://www.google.co.id/#hl=id&q=deklarasi+stack+dalam+bahasa+pemrograman&meta=cr%3DcountryID&aq=&oq=deklarasi+stack+dalam+bahasa+pemrograman&fp=7e99b3a5df14a093
Selasa, 23 Februari 2010
Array dan Record
ARRAY
Array adalah sekelompok data sejenis yang disimpan ke dalam variabel dengan nama yang sama, dengan memberi indeks pada variabel untuk membedakan antara yang satu dengan yang lain.
VARIABEL ARRAY
nama_variabel[indeks]
ketentuan nama variabel arrray sama dengan nama variabel biasa.
indeks menunjukkan nomor dari variabel .
DEKLARASI VARIABEL ARRAY
BU : tipe nama_variabel[indeks];
Contoh : float bil[10];
deklarasi variabel array dengan nama bil yang akan menampung 10 data yang bertipe float. Indeks 10 menunjukkan variabel bil terdiri dari 10 elemen, dimana setiap elemen akan menampung sebuah data.
Indeks array dimulai dari nol(0) , sedang nomor elemen biasanya dimulai dari satu(1). Nomor elemen dapat dibuat sama dengan nomor indeks untuk mempermudah pembuatan program yaitu dengan memberi indeks satu lebih banyak dari jumlah data yang dibutuhkan, sehingga menjadi :
float bil[11]
INISIALISASI ARRAY 1 DIMENSI
Inisialisasi dapat dilakukan bersama dengan deklarasi atau tersendiri. Inisialisasi suatu array adalah dengan meletakkan elemen array di antara tanda kurung kurawal {}, antara elemen yang satu dengan lainnya dipisahkan koma.
int bil[2] = {4,1,8}
bil[0] = 4
bil[1] = 1
bil[2] = 8
AUTOMATIC ARRAY adalah Inisialisasi array dilakukan di dalam fungsi tertentu. Hanya compiler C yang berstandar ANSI C yang dapat menginisialisasikan automatic array.
Cara menginisialisasikan array dari compiler yg tidak mengikuti standar ANSI C:
1. Diinisialisasikan di luar fungsi sebagai variabel GLOBAL/EXTERNAL ARRAY.
int bil[2]={0,0,0};
main()
2. Diinisialisasikan didlm fungsi sebagai variabel LOKAL/STATIC ARRAY.
main()
{
static int bil[2]={0,0,0};
.........
Pada automatic array yang tidak diinisialisasikan , elemen array akan memiliki nilai yang tidak beraturan. Bila global & static array tidak diinisialisasi maka semua elemen array secara otomatis akan diberi nilai nol(0).
Contoh :
main()
{
int y;
int hitung=0;
int x[0];
for(y=0;y<5;y++)
{
hitung+=y;
x[y]=hitung;
printf("%3d - %3d\n",y,x[y]);
}
}
OUTPUT:
0- 0
1- 1
2- 3
3- 6
4- 10
MENDEFINISIKAN JUMLAH ELEMEN ARRAY DALAM VARIABEL
Besarnya variabel indeks dapat ditentukan dengan menggunakan
preprocessor directives #define
#define N 40
main()
{
int no[N],gaji[N],gol[N],status[N],juman[N];
Bila besari indeks akan diubah menjadi 50, cukup diganti dengan
#define N 50
ARRAY 2 DIMENSI
nama_variabel [indeks1][indeks2]
indeks1 : jumlah/nomor baris
indeks2 : jumlah/nomor kolom
Jumlah elemen yang dimiliki array 2 dimensi dapat ditentukan dari hasil perkalian indeks1 * indeks2
misal : array A[2][3] akan memiliki 2*3 = 6 elemen.
main()
{
float bil [5] [5]
.......
dapat dituliskan dengan #define
#define N 5
main()
{
float bil [N] [N]
.......
INISIALISASI ARRAY 2 DIMENSI
main()
{
float bil[2] [3] =
{ { 1,2,3}, /*baris 0*/
{ 4,5,6}, /*baris 1*/
}
elemen bil [0] [0] = 1
elemen bil [0] [1] = 2
elemen bil [0] [2] = 3
elemen bil [1] [0] = 4
elemen bil [1] [1] = 5
elemen bil [1] [2] = 6
Contoh :
main()
{
int x[3][5];
int y,z;
int hitung=0;
for(y=0;y<3;y++)
{
printf("y = %d\n",y);
for(z=0;z<5;z++)
{
hitung+=z;
x[y][z] = hitung;
printf("%/t%3d - %3d\n",z,x[y][z]);
}
}
}
OUTPUT:
y = 0
0- 0
1- 1
2- 2
3- 6
4- 10
y = 1
0- 10
1- 11
2- 13
3- 16
4- 20
y = 2
0- 20
1- 21
2- 23
3- 26
4- 30
STRING dan ARRAY
1. Pada string terdapat karakter null(\0) di akhir string
2. String sudah pasti array, array belum tentu string
CONTOH - CONTOH :
1. array dengan pengisian input melalui keyboard
baca_input()
{
float nilai[10];
for(i=0;i<10;i++)
scanf("%d",&nilai[i]);
}
2. Fungsi yang mencetak isi array dari akhir ke awal
cetak_array()
{
float nilai[10];
for(i=9;i>=0;i--)
scanf("%3f",nilai[i]);
}
3. Menghitung rata - rata isi array nilai
rata_rata()
{
float nilai[10],jum*rata;
for(i=0,jum=0;i<=9;i++)
jum+=nilai[i];
rata=jum/i;
}
4. Mencari nilai terbesar
besar()
float temp,nilai[10];
{
for(temp=nilai[0],i=1;i<=9;i++)
if(nilai[i] > temp)
temp=nilai[i];
}
return(temp)
Deklarasi Array Satu Dimensi
Bentuk umum : tipe_var nama_var[ukuran];
Contoh :
int x[8];
Ket :X : nama variabel x
8 : Jumlah elemen dimensi pertamannya 8
int: tipe data integer
Deklarasi Array Multidimensi
Array dapat pula digunakan untuk menangani kumpulan
data yang memiliki dimensi lebih dari satu, misalnya
untuk penanganan pada matriks.
Bentuk umumnya :
tipe_var nama_var[ukuran 1][ukuran 2] ...
Contoh :
int iMatriks[2][2]={
{10, 2},
{2, 4}};
Array Subscript
Array subscript adalah nilai atau expresi (pernyataan)
dalam tanda kurung setelah nama array untuk
menunjukkan elemen array mana yang harus diakses
(indeks).
Contoh :
x[2] �� 2 = array subscript
n=10;
x[n – 8] �� n – 8 = array subscript
int x[8];
RECORD
Record dapat dikatakan sebagai suatu kumpulan data item yang masing-masing mempunyai jenis data berbeda.
Data item yang merupakan elemen record biasanya disebut dengan FIELD.
CARA MENDEKLARASIKAN RECORD
Bentuk umum deklarasi suatu variabel berjenis record adalah sbb :
TYPE identifier = RECORD
Nama_field_1 : jenis;
Nama_field_2 : jenis;
……………………..
……………………..
nama_field_n : jenis;
END;
Contoh :
1. VAR nilai : RECORD
Nilai_1 : integer;
Nilai_2 : integer;
END;
2. TYPE date = RECORD
Tanggal : 1..31;
Bulan : 1…12;
Tahun : 1900..2000;
END;
VAR event1,event2 : ARRAY [1..10] OF date;
3. TYPE account = RECORD
cust_no : integer;
cust_type : char;
cust_balance : real;
END;
VAR customer : account;
Halaman : 1
Pemrograman PASCAL : Record & Set
MEMPROSES VARIABEL BERJENIS RECORD
Perhatikan deklarasi variabel berikut :
TYPE nilai : RECORD
Nilai1 : real;
Nilai2 : real;
END;
VAR x,y : nilai;
Untuk memproses variabel x dan / atau y dilakukan dengan cara menyebutkan field designatornya, yg terdiri dari atas :
Nama_record.nama_field
Pada deklarasi diatas yang dimaksud dengan field designator-nya adalah :
x.nilai1
x.nilai2
y.nilai1
y.nilai2
Jadi jika ingin membaca variabel x atau y atau keduanya, maka bentuk statement-nya adalah :
READ (x.nilai1, x.nilai2, y.nilai1, y.nilai2);
Selanjutnya, misal ingin dibuat program sederhana untuk menjumlahkan dua bilangan kompleks a dan b yang hasilnya disimpan di c.
Secara aljabar penjumlahan dua bilangan kompleks adalah sebagai berikut :
a = x1 + iy1
b = x2 + iy2 +
c = (x1 + x2 ) + I(y1 + y2)
Maka bentuk garis besar programnya adalah sebagai berikut :
Program contoh ;
Type bk = record
Bag_nyata : integer;
Bag_imajiner : integer;
End;
Var a,b,c : bk;
Begin
Read (a.bag_nyata, a.bag_imajiner, b.bag_nyata, b.bag_imajiner);
c.bag_nyata := a.bag_nyata + b.bag_imajiner;
c.bag_imajiner := a.bag_imajiner + b.bag_imajiner;
writeln(c.bag_nyata,’ +’,’i’,c.bag_imajiner);
End.
STATEMENT “WITH”
Selain cara yang telah disebutkan diatas, untuk memproses suatu record dapat digunakan statement WITH.
Dengan statement ini penulisannya akan lebih sederhana.
Halaman : 2
Pemrograman PASCAL : Record & Set
Bentuk Umum penulisan statement WITH ini adalah :
WITH nama_record DO statement
Perhatikan deklarasi dibawah ini :
TYPE x = RECORD
No : integer;
Kode : char;
Juml : integer;
Harga : real;
END;
VAR p,q : x;
Untuk membaca variabel p dan q di atas dengan memanfaatkan statement WITH bentuknya menjadi :
WITH p,q DO read (no, kode, juml, harga);
Bandingkan jika digunakan cara sebelumnya :
Read(p.no, p.kode, p.juml,p.harga,q.no,q.kode,q.juml,q.harga);
CONTOH :
Pernyataan seperti :
Data.npm :=‘22297566’
Data.Nama:=‘Abdul Kadir’
Data.Fakultas:=‘Teknik’
Dapat diganti dengan :
WITH Data Do
Begin
npm :=‘22297566’
Nama:=‘Abdul Kadir’
Fakultas:=‘Teknik’
end;
Apabila di dalam pernyataan WITH terdapat lebih dari satu record, haruslah pada kedua record tersebut tidak ada field dengan nama yang sama. Sebagai contoh :
Type
BarangX=RECORD
Batu:integer;
Kayu:real;
END;
BarangY=RECORD
Halaman : 3
Pemrograman PASCAL : Record & Set
Batu:string[10];
Kayu:char;
END;
Var
brg_X:barangX;
brg_Y:barangY;
Karena kedua variabel record brg_X dan brg_Y memiliki nama field yang sama, Jika misalnya kemudian dikenakan pernyataan :
WITH brg_X, brg_Y Do
Begin
writeln(batu);
writeln(kayu);
End;
dapat menyebabkan hasil tidak seperti yang diharapkan.
Record yang Bervariasi
Yaitu suatu record dengan field yang bisa berubah pada saat program berjalan. Hal yang perlu diperhatikan adalah bahwa beberapa field yang berada dalam record tidak pernah muncul dalam serempak, hanya akan ada satu field yang terpakai dalam satu saat.
Record varian akan memberikan fasilitas untuk menentukan field yang diperlukan pada saat program berjalan (RUN-TIME), berdasarkan keperluannya.
Bentuk umum Record Varian :
TYPE namarecord = RECORD
Nama_field_1 : jenis;
Nama_field_2 : jenis;
……………………..
nama_field_n : jenis;
Case Tagfield:jenis Of
nama_tagfield : (Nama_field:jenis);
nama_tagfield : (Nama_field_1, Nama_field_2:jenis);
……………………..
nama_tagfield : (Nama_field_n:jenis);
END;
Contoh :
Type status=(T,P,J);
gaji=RECORD
napeg :string[25];
nopeg :string[10];
bagian :string[15];
CASE stat :status OF
T:(gaji:integer);
P:(gajiperjam,jmlmax:integer);
J:(upahperjam,lembur:integer);
end;
Halaman : 4
Pemrograman PASCAL : Record & Set
Array tipe record
type barang=RECORD
namabrg:string[20];
jmlbrg:byte;
hargabrg:real;
total:real;
end;
var jual:array [1..10] of barang
i,j:integer;
tot1:real;
Begin
I:=1;
write(‘Nama barang :’);readln(jual[i].nmbrg);
Repeat
write(‘Jumlah barang :’);readln(jual[i].jmlbrg);
write(‘Harga barang :’);readln(jual[i].hrgbrg);
jual[i].total:=jual[i].jmlbrg* jual[i]. jual[i].hrg.brg;
inc (I);
write(‘Nama barang :’);readln(jual[i].nmbrg);
until (jual[i].nmbrg=‘0’) or (I=11);
dec(i);
clrscr;
writeln (‘------------------------------------------------------------’);
writeln (‘No nama barang jumlah harga total’);
writeln (‘------------------------------------------------------------’);
for j:=1 to I do
begin
gotoxy(1,j+3);write (j);
gotoxy(5,j+3);write(jual[i].nmbrg);
gotoxy(26,j+3);write(jual[i].jmlbrg:10);
gotoxy(37,j+3);write(jual[i].hrgbrg:10:2);
gotoxy(48,j+3);write(jual[i].total:10:2);
tot1:=tot1 + jual[j].total ;
end;
writeln (‘------------------------------------------------------------’);
writeln(‘ Total :’,tot1:10:2’);
writeln (‘------------------------------------------------------------’);
end.
Array dalam record
Type barang= RECORD
nmbrg:string[20];
jmlbrg:array[1..3]of byte;
hrgbrg:real;
total:real;
end;
var jual:barang;
tbarang, i:integer;
Begin
clrscr;
write(‘Nama Barang :’);readln(jual.nmbrg);
for i:=1to 3 do
begin
write(‘Jumlah barang ’,I,’ : ’);readln(jual.jmlbrg[i]);
tbarang:=tbarang+jual.jmlbrg[i];
end; Halaman : 5
Pemrograman PASCAL : Record & Set
write(‘Harga barang :’);readln(jual.hrgbrg);
jual.total:=tbarang*jual.hrgbrg;
writeln(‘Total Harga Barang = ‘, jual.total:10:2);
end.
SUMBBER :
* http://www.google.co.id/#hl=id&q=array&meta=cr%3DcountryID&aq=f&oq=&fp=7e99b3a5df14a093
* http://www.google.co.id/#hl=id&source=hp&q=array+dan+record&btnG=Telusuri+dengan+Google&meta=cr%3DcountryID&aq=f&oq=array+dan+record&fp=7e99b3a5df14a093
Array adalah sekelompok data sejenis yang disimpan ke dalam variabel dengan nama yang sama, dengan memberi indeks pada variabel untuk membedakan antara yang satu dengan yang lain.
VARIABEL ARRAY
nama_variabel[indeks]
ketentuan nama variabel arrray sama dengan nama variabel biasa.
indeks menunjukkan nomor dari variabel .
DEKLARASI VARIABEL ARRAY
BU : tipe nama_variabel[indeks];
Contoh : float bil[10];
deklarasi variabel array dengan nama bil yang akan menampung 10 data yang bertipe float. Indeks 10 menunjukkan variabel bil terdiri dari 10 elemen, dimana setiap elemen akan menampung sebuah data.
Indeks array dimulai dari nol(0) , sedang nomor elemen biasanya dimulai dari satu(1). Nomor elemen dapat dibuat sama dengan nomor indeks untuk mempermudah pembuatan program yaitu dengan memberi indeks satu lebih banyak dari jumlah data yang dibutuhkan, sehingga menjadi :
float bil[11]
INISIALISASI ARRAY 1 DIMENSI
Inisialisasi dapat dilakukan bersama dengan deklarasi atau tersendiri. Inisialisasi suatu array adalah dengan meletakkan elemen array di antara tanda kurung kurawal {}, antara elemen yang satu dengan lainnya dipisahkan koma.
int bil[2] = {4,1,8}
bil[0] = 4
bil[1] = 1
bil[2] = 8
AUTOMATIC ARRAY adalah Inisialisasi array dilakukan di dalam fungsi tertentu. Hanya compiler C yang berstandar ANSI C yang dapat menginisialisasikan automatic array.
Cara menginisialisasikan array dari compiler yg tidak mengikuti standar ANSI C:
1. Diinisialisasikan di luar fungsi sebagai variabel GLOBAL/EXTERNAL ARRAY.
int bil[2]={0,0,0};
main()
2. Diinisialisasikan didlm fungsi sebagai variabel LOKAL/STATIC ARRAY.
main()
{
static int bil[2]={0,0,0};
.........
Pada automatic array yang tidak diinisialisasikan , elemen array akan memiliki nilai yang tidak beraturan. Bila global & static array tidak diinisialisasi maka semua elemen array secara otomatis akan diberi nilai nol(0).
Contoh :
main()
{
int y;
int hitung=0;
int x[0];
for(y=0;y<5;y++)
{
hitung+=y;
x[y]=hitung;
printf("%3d - %3d\n",y,x[y]);
}
}
OUTPUT:
0- 0
1- 1
2- 3
3- 6
4- 10
MENDEFINISIKAN JUMLAH ELEMEN ARRAY DALAM VARIABEL
Besarnya variabel indeks dapat ditentukan dengan menggunakan
preprocessor directives #define
#define N 40
main()
{
int no[N],gaji[N],gol[N],status[N],juman[N];
Bila besari indeks akan diubah menjadi 50, cukup diganti dengan
#define N 50
ARRAY 2 DIMENSI
nama_variabel [indeks1][indeks2]
indeks1 : jumlah/nomor baris
indeks2 : jumlah/nomor kolom
Jumlah elemen yang dimiliki array 2 dimensi dapat ditentukan dari hasil perkalian indeks1 * indeks2
misal : array A[2][3] akan memiliki 2*3 = 6 elemen.
main()
{
float bil [5] [5]
.......
dapat dituliskan dengan #define
#define N 5
main()
{
float bil [N] [N]
.......
INISIALISASI ARRAY 2 DIMENSI
main()
{
float bil[2] [3] =
{ { 1,2,3}, /*baris 0*/
{ 4,5,6}, /*baris 1*/
}
elemen bil [0] [0] = 1
elemen bil [0] [1] = 2
elemen bil [0] [2] = 3
elemen bil [1] [0] = 4
elemen bil [1] [1] = 5
elemen bil [1] [2] = 6
Contoh :
main()
{
int x[3][5];
int y,z;
int hitung=0;
for(y=0;y<3;y++)
{
printf("y = %d\n",y);
for(z=0;z<5;z++)
{
hitung+=z;
x[y][z] = hitung;
printf("%/t%3d - %3d\n",z,x[y][z]);
}
}
}
OUTPUT:
y = 0
0- 0
1- 1
2- 2
3- 6
4- 10
y = 1
0- 10
1- 11
2- 13
3- 16
4- 20
y = 2
0- 20
1- 21
2- 23
3- 26
4- 30
STRING dan ARRAY
1. Pada string terdapat karakter null(\0) di akhir string
2. String sudah pasti array, array belum tentu string
CONTOH - CONTOH :
1. array dengan pengisian input melalui keyboard
baca_input()
{
float nilai[10];
for(i=0;i<10;i++)
scanf("%d",&nilai[i]);
}
2. Fungsi yang mencetak isi array dari akhir ke awal
cetak_array()
{
float nilai[10];
for(i=9;i>=0;i--)
scanf("%3f",nilai[i]);
}
3. Menghitung rata - rata isi array nilai
rata_rata()
{
float nilai[10],jum*rata;
for(i=0,jum=0;i<=9;i++)
jum+=nilai[i];
rata=jum/i;
}
4. Mencari nilai terbesar
besar()
float temp,nilai[10];
{
for(temp=nilai[0],i=1;i<=9;i++)
if(nilai[i] > temp)
temp=nilai[i];
}
return(temp)
Deklarasi Array Satu Dimensi
Bentuk umum : tipe_var nama_var[ukuran];
Contoh :
int x[8];
Ket :X : nama variabel x
8 : Jumlah elemen dimensi pertamannya 8
int: tipe data integer
Deklarasi Array Multidimensi
Array dapat pula digunakan untuk menangani kumpulan
data yang memiliki dimensi lebih dari satu, misalnya
untuk penanganan pada matriks.
Bentuk umumnya :
tipe_var nama_var[ukuran 1][ukuran 2] ...
Contoh :
int iMatriks[2][2]={
{10, 2},
{2, 4}};
Array Subscript
Array subscript adalah nilai atau expresi (pernyataan)
dalam tanda kurung setelah nama array untuk
menunjukkan elemen array mana yang harus diakses
(indeks).
Contoh :
x[2] �� 2 = array subscript
n=10;
x[n – 8] �� n – 8 = array subscript
int x[8];
RECORD
Record dapat dikatakan sebagai suatu kumpulan data item yang masing-masing mempunyai jenis data berbeda.
Data item yang merupakan elemen record biasanya disebut dengan FIELD.
CARA MENDEKLARASIKAN RECORD
Bentuk umum deklarasi suatu variabel berjenis record adalah sbb :
TYPE identifier = RECORD
Nama_field_1 : jenis;
Nama_field_2 : jenis;
……………………..
……………………..
nama_field_n : jenis;
END;
Contoh :
1. VAR nilai : RECORD
Nilai_1 : integer;
Nilai_2 : integer;
END;
2. TYPE date = RECORD
Tanggal : 1..31;
Bulan : 1…12;
Tahun : 1900..2000;
END;
VAR event1,event2 : ARRAY [1..10] OF date;
3. TYPE account = RECORD
cust_no : integer;
cust_type : char;
cust_balance : real;
END;
VAR customer : account;
Halaman : 1
Pemrograman PASCAL : Record & Set
MEMPROSES VARIABEL BERJENIS RECORD
Perhatikan deklarasi variabel berikut :
TYPE nilai : RECORD
Nilai1 : real;
Nilai2 : real;
END;
VAR x,y : nilai;
Untuk memproses variabel x dan / atau y dilakukan dengan cara menyebutkan field designatornya, yg terdiri dari atas :
Nama_record.nama_field
Pada deklarasi diatas yang dimaksud dengan field designator-nya adalah :
x.nilai1
x.nilai2
y.nilai1
y.nilai2
Jadi jika ingin membaca variabel x atau y atau keduanya, maka bentuk statement-nya adalah :
READ (x.nilai1, x.nilai2, y.nilai1, y.nilai2);
Selanjutnya, misal ingin dibuat program sederhana untuk menjumlahkan dua bilangan kompleks a dan b yang hasilnya disimpan di c.
Secara aljabar penjumlahan dua bilangan kompleks adalah sebagai berikut :
a = x1 + iy1
b = x2 + iy2 +
c = (x1 + x2 ) + I(y1 + y2)
Maka bentuk garis besar programnya adalah sebagai berikut :
Program contoh ;
Type bk = record
Bag_nyata : integer;
Bag_imajiner : integer;
End;
Var a,b,c : bk;
Begin
Read (a.bag_nyata, a.bag_imajiner, b.bag_nyata, b.bag_imajiner);
c.bag_nyata := a.bag_nyata + b.bag_imajiner;
c.bag_imajiner := a.bag_imajiner + b.bag_imajiner;
writeln(c.bag_nyata,’ +’,’i’,c.bag_imajiner);
End.
STATEMENT “WITH”
Selain cara yang telah disebutkan diatas, untuk memproses suatu record dapat digunakan statement WITH.
Dengan statement ini penulisannya akan lebih sederhana.
Halaman : 2
Pemrograman PASCAL : Record & Set
Bentuk Umum penulisan statement WITH ini adalah :
WITH nama_record DO statement
Perhatikan deklarasi dibawah ini :
TYPE x = RECORD
No : integer;
Kode : char;
Juml : integer;
Harga : real;
END;
VAR p,q : x;
Untuk membaca variabel p dan q di atas dengan memanfaatkan statement WITH bentuknya menjadi :
WITH p,q DO read (no, kode, juml, harga);
Bandingkan jika digunakan cara sebelumnya :
Read(p.no, p.kode, p.juml,p.harga,q.no,q.kode,q.juml,q.harga);
CONTOH :
Pernyataan seperti :
Data.npm :=‘22297566’
Data.Nama:=‘Abdul Kadir’
Data.Fakultas:=‘Teknik’
Dapat diganti dengan :
WITH Data Do
Begin
npm :=‘22297566’
Nama:=‘Abdul Kadir’
Fakultas:=‘Teknik’
end;
Apabila di dalam pernyataan WITH terdapat lebih dari satu record, haruslah pada kedua record tersebut tidak ada field dengan nama yang sama. Sebagai contoh :
Type
BarangX=RECORD
Batu:integer;
Kayu:real;
END;
BarangY=RECORD
Halaman : 3
Pemrograman PASCAL : Record & Set
Batu:string[10];
Kayu:char;
END;
Var
brg_X:barangX;
brg_Y:barangY;
Karena kedua variabel record brg_X dan brg_Y memiliki nama field yang sama, Jika misalnya kemudian dikenakan pernyataan :
WITH brg_X, brg_Y Do
Begin
writeln(batu);
writeln(kayu);
End;
dapat menyebabkan hasil tidak seperti yang diharapkan.
Record yang Bervariasi
Yaitu suatu record dengan field yang bisa berubah pada saat program berjalan. Hal yang perlu diperhatikan adalah bahwa beberapa field yang berada dalam record tidak pernah muncul dalam serempak, hanya akan ada satu field yang terpakai dalam satu saat.
Record varian akan memberikan fasilitas untuk menentukan field yang diperlukan pada saat program berjalan (RUN-TIME), berdasarkan keperluannya.
Bentuk umum Record Varian :
TYPE namarecord = RECORD
Nama_field_1 : jenis;
Nama_field_2 : jenis;
……………………..
nama_field_n : jenis;
Case Tagfield:jenis Of
nama_tagfield : (Nama_field:jenis);
nama_tagfield : (Nama_field_1, Nama_field_2:jenis);
……………………..
nama_tagfield : (Nama_field_n:jenis);
END;
Contoh :
Type status=(T,P,J);
gaji=RECORD
napeg :string[25];
nopeg :string[10];
bagian :string[15];
CASE stat :status OF
T:(gaji:integer);
P:(gajiperjam,jmlmax:integer);
J:(upahperjam,lembur:integer);
end;
Halaman : 4
Pemrograman PASCAL : Record & Set
Array tipe record
type barang=RECORD
namabrg:string[20];
jmlbrg:byte;
hargabrg:real;
total:real;
end;
var jual:array [1..10] of barang
i,j:integer;
tot1:real;
Begin
I:=1;
write(‘Nama barang :’);readln(jual[i].nmbrg);
Repeat
write(‘Jumlah barang :’);readln(jual[i].jmlbrg);
write(‘Harga barang :’);readln(jual[i].hrgbrg);
jual[i].total:=jual[i].jmlbrg* jual[i]. jual[i].hrg.brg;
inc (I);
write(‘Nama barang :’);readln(jual[i].nmbrg);
until (jual[i].nmbrg=‘0’) or (I=11);
dec(i);
clrscr;
writeln (‘------------------------------------------------------------’);
writeln (‘No nama barang jumlah harga total’);
writeln (‘------------------------------------------------------------’);
for j:=1 to I do
begin
gotoxy(1,j+3);write (j);
gotoxy(5,j+3);write(jual[i].nmbrg);
gotoxy(26,j+3);write(jual[i].jmlbrg:10);
gotoxy(37,j+3);write(jual[i].hrgbrg:10:2);
gotoxy(48,j+3);write(jual[i].total:10:2);
tot1:=tot1 + jual[j].total ;
end;
writeln (‘------------------------------------------------------------’);
writeln(‘ Total :’,tot1:10:2’);
writeln (‘------------------------------------------------------------’);
end.
Array dalam record
Type barang= RECORD
nmbrg:string[20];
jmlbrg:array[1..3]of byte;
hrgbrg:real;
total:real;
end;
var jual:barang;
tbarang, i:integer;
Begin
clrscr;
write(‘Nama Barang :’);readln(jual.nmbrg);
for i:=1to 3 do
begin
write(‘Jumlah barang ’,I,’ : ’);readln(jual.jmlbrg[i]);
tbarang:=tbarang+jual.jmlbrg[i];
end; Halaman : 5
Pemrograman PASCAL : Record & Set
write(‘Harga barang :’);readln(jual.hrgbrg);
jual.total:=tbarang*jual.hrgbrg;
writeln(‘Total Harga Barang = ‘, jual.total:10:2);
end.
SUMBBER :
* http://www.google.co.id/#hl=id&q=array&meta=cr%3DcountryID&aq=f&oq=&fp=7e99b3a5df14a093
* http://www.google.co.id/#hl=id&source=hp&q=array+dan+record&btnG=Telusuri+dengan+Google&meta=cr%3DcountryID&aq=f&oq=array+dan+record&fp=7e99b3a5df14a093
Rabu, 17 Februari 2010
JENIS-JENIS DATA
Dalam kehidupan banyak sekali hal-hal yang terjadi, keunikan kejadian dari kehidupan setiap orang berbeda-beda sehingga cara pandang setiap orang terhadap kejadian tersebut pun berbeda-beda (sesuai dengan apa yang menjadi prinsip dan standar atau tolak ukurnya).
Di dalam dunia IT (Information Technology) pun sama, kesimpulan terhadap sesuatu yang dianalisa mungkin berbeda tetapi hal itu semua dapat diminimalisir dan dihilangkan selama apa yang menjadi pedomannya pun sama.
Dalam dunia IT dan kebutuhan yang disesuaikan, ternyata banyak sekali kejadian yang jika kita memandang untuk kemajuan teknologi dan komunikasi dapat dibuat prosedur dan aturan yang sama sehingga informasi yang dibutuhkan dari suatu kasus akan sama. Biasanya dalam dunia IT yang menjadi permasalahan adalah kasus-kasus yang sering terjadi dan untuk penyelesaiannya masih dengan prosedur yang manual. Beberapa contoh kasus yang terjadi dibeberapa tempat, seperti pengelolaan data administrasi, pengelokaan data perpustakaan (sudah banyak yang tidak manual), dan lain-lain. Untuk mengatasi beberapa contoh kasus diatas diperlukan data dan informasi yang dibutuhkan.
Beberapa definisi tentang data dari sudut pandang yang berbeda-beda:
* Menurut berbagai kamus bahasa Inggris-Indonesia, data diterjemahkan sebagai istilah yang berasal dari kata “datum” yang berarti fakta atau bahan-bahan keterangan.
* Dari sudut pandang bisnis, data bisnis (business data) adalah deskripsi organisasi tentang sesuatu(resources) dan kejadian (transactions) yang terjadi (business data is an organization’s description of things (resources)and events (transactions) that it faces).
* Data adalah deskripsi dari sesuatu dan kejadian yang kita hadapi.
* Data adalah kenyataan yang menggambarkan suatu kejadian-kejadian dan kesatuan nyata. Kejadian adalah sesuatu yang terjadi pada saat tertentu. Kesatuan nyata adalah berupa suatu objek nyata seperti tempat, benda dan orang yang betul-betul ada dan terjadi.
Beberapa definisi tentang informasi dari sumber yang berbeda-beda:
* Menurut Gordon B. Davis dalam bukunya Management Informations System : Conceptual Foundations, Structures, and Development menyebut informasi sebagai data yang telah diolah menjadi bentuk yang berguna bagi penerimanya dan nyata, berupa nilai yang dapat dipahami di dalam keputusan sekarang maupun masa depan.
* Menurut Barry E. Cushing dalam buku Accounting Information System and Business Organization, dikatakan bahwa informasi merupakan sesuatu yang menunjukkan hasil pengolahan data yang diorganisasi dan berguna kepada orang yang menerimanya.
* Menurut Robert N. Anthony dan John Dearden dalam buku Management Control Systems, menyebut informasi sebagai suatu kenyataan, data, item yang menambah pengetahuan bagi penggunanya.
* Menurut Stephen A. Moscove dan Mark G. Simkin dalam bukunya Accounting Information Systems : Concepts and Practise mengatakan informasi sebagai kenyataan atau bentuk-bentuk yang berguna yang dapat digunakan untuk pengambilan keputusan bisnis.
Dari beberapa penjelasan diatas sehingga dapat disimpulkan bahwa:
Data adalah nilai yang mendeskripsikan dari suatu objek atau kejadian.
Informasi adalah hasil dari pengolahan data dalam bentuk yang lebih berguna dan lebih berarti bagi penerimanya yang menggambarkan suatu kejadian-kejadian sehingga akan berguna untuk pengambilan keputusan.
struktur data
Dalam satu Lembaga atau Organisasi, baik yang bersifat komersial dan industrial, bahkan organisasi yang bagaimanapun bentuknya, Data dipandang sebagai suatu kekayaan yang penting dan mahal. Memang kadang-kadang sulit untuk didapat.
Komposisi data dan logika dari algoritma yang memanfaatkan data tersebut berhubungan sangat erat.
Data sederhana dapat kita himpun ke dalam suatu Struktur Data yang memuat informasi tentang hubungan antara item yang terdapat didalamnya.
Data sederhana yang kita kenal, terdiri dari berbagai jenis atau type. Untuk mengelola data yang bermacam-macam jenis tersebut secara baik, guna menghasilkan informasi, pengetahuan mengenai struktur data amatlah penting.
Struktur Data adalah koleksi atau kelompok data yang dapat dikarakterisasikan oleh organisasi serta operasi yang didefenisaikan terhadapnya.
Struktur data sangat penting dalam sistem komputer. Terhadap setiap variabel didalam program, secara eksplisit ataupun implisit, didefenisikan struktur data yang akan menentukan operasi yang berlaku terhadap variabel tersebut.
Struktur data yang dibicarakan ini merupakan Struktur Data Logik. Bukan penyajian data secara fisik di storage.
Pada garis besarnya, Data dapat dikatagorikan
menjadi :
1. Type Data Sederhana, atau Data Sederhana yang terdiri dari :
1. Data Sederhana Tunggal, misalnya Integer,
Real, Boolean serta Karakter.
2. Data Sederhana Majemuk, misalnya String.
Type data ini dengan berbagai cara dapat diorganisasikan menjadi berbagai Struktur Data.
B. Struktur Data, meliputi :
1. Struktur Data Sederhana, misalnya Array
dan Record.
2. Struktur Data Majemuk, terdiri atas :
@ Linear, misalnya Stack, Queue, serta
Linear Link List.
@ Non Linear, misalnya Pohon Biner (Binary
Tree), Pohon Cari Biner (Binary Search
Tree), Pohon Cari M-Way (M-Way Search
Tree), Tree, General Tree serta Graph.
Kedua katagori diatas, terutama diperuntukkan bagi data didalam storage utama (main storage). Data yang diperuntukan bagi storage tambahan mempunyai struktur data yang dikenal sebagai Organisasi File. Type organisasi file diantaranya adalah Organisasi Squential, Organisasi Relative, Organisasi Indexed Squential, dan Organisasi Multikey.
Dua buah struktur data sederhana adalah Array dan Record. Array merupakan struktur data yang terurut dan homogen, terdiri dari item yang bertipe data sama.
Sedangkan Record merupakan struktur data yang boleh terdiri atas keterangan berbagai type data. Struktur data dari tatanan yang lebih tinggi terbentuk dari Record, disini termasuk daftar linear atau linear list (terutama antrian dan tumpukan) serta Graph.
Pemakain struktur data yang tepat didalam proses pemrograman akan menghasilkan algoritma yang lebih jelas dan tepat, sehingga menjadikan program secara keseluruhan menjadi lebih sederhana.
Algoritma berkerja atas dasar data yang menunjukan fakta dari permasalahan kita dalam dunia nyata. Algoritma dan Data menunjukan hasil dari pelaksanaan program, dan mempunyai hubungan yang simbolik. Dalam hal ini semakin cocok komposisi data untuk suatu aplikasi tertentu, semakin mudah algoritma tersebut melaksanakan tugasnya.
Untuk menyederhanakan pelaksanaan algoritma, dianjurkan untuk mengatur data menjadi suatu unsur logika yang lebih tinggi dibandingkan variabel biasa. Unsur logika tersebut membentuk Struktur Data.
Dengan perkataan lain, suatu struktur data merupakan koleksi dari satuan data sederhana yang terorganisir dengan aturan tertentu.
Oleh karena itu struktur data dicirikan oleh :
1. Jenis atau type data pembentuknya.
2. Hubungan antara satuan data tersebut.
Contoh :
Sebuah program akan dirancang untuk memberi simulasi kepada kemampuan kerja komputer. Algoritma simulasi ini memerlukan data tentang waktu dari pekerjaan yang akan diproses.
Sejumlah satuan data terbentuk, masing-masing menunjukan waktu tiba dari pekerjaan, kebutuhan data oleh komputer, dan sebagainya. Kemudian program akan mencontoh proses dari pekerjaan semu yang dibentuk oleh sistem komputer untuk disimulasikan.
Program akan menjadi lebih jelas dan lebih sederhana apabila data yang menjadi bagian dari tiap-tiap pekerjaan diorganisir ke dalam suatu unsur tunggal, yakni berupa sebuah record. Kemudian akan menjadi jelas lagi apabila record seperti itu diatur membentuk suatu struktur data yang lebih tinggi tingkatannya lagi, sehingga menjadi bentuk first-in-first-out (FIFO) sesuai dengan waktu tiba pekerjaan yang diwakilinya. Struktur data seperti ini disebut Antrean (Queue).
Struktur Data tertentu seperti Array biasanya selalu tersedia bagi pemrogram didalam bahasa pemrograman tingkat tinggi yang dipakai. Namun ada pula struktur data yang tidak tersedia, seperti misalnya struktur Tumpukan (Stack). Untuk itu harus disusun sendiri oleh Pemrogram dengan menggunakan variabel bertype sederhana ataupun dari struktur data yang telah tersedia.
Sebuah Array merupakan dasar dari struktur data. Sebuah Array dapat menyatukan satuan data sederhana dan sejenis yang masing-masing mendapat nama secara kolektif dan dari indeks atau subskrip yang memberikan identifikasi terhadap posisi elemennya.
Sebuah record terbentuk dari beberapa type data sederhana dan termasuk string. Data tersebut dibentuk sebagai unsur tunggal karena mereka memberikan gambaran dari obyek permasalahan yang nyata sehari-hari. Record biasanya ditingkatkan menjadi struktur data yang lebih tinggi, melalui nilai dari salah satu satuan datanya (disebut field).
Variabel yang sederhana, Record dan juga Array, seperti kita katakan terdahulu, dapat diorganisir menjadi struktur data yang lebih tinggi. Struktur tersebut banyak yang bersifat dinamis, artinya bahwa dalam pelaksanaan program yang memakai struktur data tersebut, banyak komponen yang dapat berubah, ada komponen yang dapat dihilangkan dan dimasukkan.
Bahasa pemrograman pada umumnya, mengenal adanya variabel yang
digunakan untuk menyimpan nilai atau data. Sedangkan Java sendiri dikenal sebagai
bahasa pemrograman dengan sifat strongly typed yang artinya diharuskan
mendeklarasikan tipe data dari semua variabel, dan apabila lupa atau salah mengikuti
aturan pendeklarasian variabel, maka akan mendapatkan error pada saat proses
kompilasi.
A. Tipe Data
Java memiliki tipe data yang dapat dikategorikan menjadi dua
kelompok, yaitu tipe data primitif dan referensi.
1. Tipe Data Primitif
Delapan macam tipe data primitif dalam pemrograman Java, yaitu :
a. Integer ( Bilangan Bulat )
Integer merupakan tipe data numerik yang digunakan apabila
tidak berurusan dengan pecahan atau bilangan desimal. Tipe data
numerik yang termasuk integer adalah sebagai berikut :
Tipe Deskripsi
Byte Memiliki nilai integer dari -128 sampai +127 dan menempati
1 byte ( 8 bits ) di memori
Short Memiliki nilai integer dari -32768 sampai 32767 dan
menempati 2 bytes ( 16 bits ) di memori
Int Memiliki nilai integer dari -2147483648 sampai 2147483647
dan menempati 4 bytes ( 32 bits ) di memori
Long Memiliki nilai dari -9223372036854775808 sampai
9223372036854775807 dan menempati 8 bytes ( 64 bits ) di
memori
Bilangan integer biasanya menggunakan int, dan bukan byte,
short maupun long. Bilangan integer juga mengenal nilai positif dan
negatif ( signed number ). Tipe data byte dan short hanya digunakan
pada aplikasi khusus yang memperhatikan penggunaan memori.
Sedangkan long jarang digunakan karena jarang memerlukan bilangan
sebesar kapasitas long.
b. Floating Point ( Bilangan Pecahan )
Floating Point digunakan untuk menangani bilangan desimal
atau perhitungan yang lebih detail dibanding integer. Ada dua macam
floating point, yaitu :
Tipe Deskripsi
* Float memiliki nilai -3.4x108 sampai +3.4x108 dan menempati 4
byte di memori
* Double memiliki nilai -1.7x10308 sampai +1.7x10308
Semua bilangan pecahan atau desimal dalam Java tanpa
diakhiri huruf f akan dianggap sebagai double. Sedangkan bilangan
yang ingin dikategorikan sebagai float harus diakhiri dengan huruf F.
Misalnya : 4.22 F atau 2.314f.
Sedangkan untuk bilangan double, bisa menambah dengan
huruf D, karena secara default bilangan dengan koma atau pecahan
atau desimal akan dianggap sebagai double.
c. Char
Char adalah karakter tunggal yang didefinisikan dengan
diawali dan diakhiri dengan tanda ‘ ( petik tunggal ). Char berbeda
dengan String, karena String bukan merupakan tipe data primitif,
tetapi sudah merupakan sebuah objek. Tipe char mengikuti aturan
unicode, sehingga dapat menggunakan kode /u kemudian diikuti
bilangan dari 0 sampai 65535, tetapi yang biasa digunakan adalah
bilangan heksadesimal dari 0000 sampai FFFF.
Misalnya : ‘\u123’
Selain karakter biasa, juga terdapat karakter khusus yang
didefinisikan dengan cara mengawalinya menggunakan tanda \ seperti
pada tabel berikut :
Kode Nama Nilai Unicode
\b Backspace \u0008
\t Tab \u0009
\n Linefeed \u000a
10
\r Carriage return \u000d
\* Double quote \u0022
\’ Single quote \u0027
\\ Backslash \u005c
d. Boolean
Dalam Java dikenal tipe data boolean yang terdiri dari dua nilai
saja, yaitu true dan false. Boolean sangat penting dalam mengevaluasi
suatu kondisi, dan sering digunakan untuk menentukan alur program.
2. Tipe Data Referensi
Kelebihan pemrograman berorientasi objek adalah dapat
mendefinisikan tipe data baru yang merupakan objek dari class tertentu.
Tipe data ini digunakan untuk mereferensikan objek atau class tertentu,
seperti String.
Latihan 2. TipeData.java
class TipeData {
public static void main(String[] args) {
// Tipe data primitif
long data1 = 546767226531;
int data2 = 2235641;
short data3 = 714;
byte data4 = 34;
float data6 = (float) 1.733; // tipe data pecahan
double data5 = 4.967; // tipe data pecahan
char data7 = 'C';
boolean data8 = true;
System.out.println("Nilai Long : "+ data1);
System.out.println("Nilai Int : "+ data2);
System.out.println("Nilai Short : "+ data3);
System.out.println("Nilai Byte : "+ data4);
System.out.println("Nilai Double : "+ data5);
System.out.println("Nilai Float : "+ data6);
System.out.println("Nilai Char : "+ data7);
System.out.println("Nilai Boolean : "+ data8);
}
}
11
B. Variabel
Variabel merupakan container yang digunakan untuk menyimpan
suatu nilai pada sebuah program dengan tipe tertentu. Untuk mendefinisikan
variabel, kita dapat menggunakan identifier untuk menamai variabel tersebut.
1. Identifier
Identifier adalah kumpulan karakter yang dapat digunakan untuk
menamai variabel, method, class, interface, dan package. Sebagaimana
bahasa pemrograman pada umumnya, Java memiliki peraturan untuk
identifier yang valid atau sah. Identifier bisa disebut valid atau sah apabila
diawali dengan :
Huruf / abjad
Karakter mata uang
Underscore ( _ )
Identifier dapat terdiri dari :
Huruf / abjad
Angka
Underscore ( _ )
Identifier tidak boleh mengandung @, spasi atau diawali dengan
angka. Selain itu, identifier tidak boleh menggunakan keyword atau katakata
yang memiliki arti atau digunakan dalam pemrograman Java. Daftar
Keyword Java :
abstract double int strictfp
boolean flse static super
break fxtends long switch
byte final native synchronized
case finally new this
catch float package throw
12
char for private throws
class goto protected transient
const if public try
continue implements return void
default import short volatile
do instanceof interface while
Selain menggunakan karakter biasa, kita juga dapat menggunakan
unicode sebagai identifier.
2. Mendeklarasikan Variabel
Sintaks dasar :
[tipe data] [nama variabel]
Menuliskan tipe data dari variabel, contoh :
int bilangan;
char karakter;
float bildesimal;
boolean status;
Setelah mendeklarasikan variabel dengan tipe data, selanjutnya
memberikan nilai variabel tersebut dengan tanda = .
bilangan = 20;
karakter = ‘k’;
bildesimal = 22.2f;
status = true;
Dapat juga mendeklarasikan dan memberikan nilai dalam satu baris.
int bilangan = 20;
char karakter = ‘k’;
float bildesimal = 22.2f;
boolean status = true;
Kita dapat membuat variabel menjadi konstanta yang tidak dapat
diubah nilainya dengan menambahkan keyword sebelum tipe data dari
variabel.
Contoh :
final int konstantainteger = 10;
final float pajak = 15.5;
13
Agar konstanta ini dapat diakses oleh class lain tanpa harus
membuat objek terlebih dahulu, maka kita dapat menambahkan modifier
public dan keyword static seperti berikut :
public static final konstantainteger = 10;
Latihan 3. Variabel.java
class Variabel {
static int a;
public static void main(String[] args) {
int x; // variabel x ini dikenal di seluruh method main()
x = 10;
a = 2; //variabel a juga dikenal di sini
System.out.println("Nilai a : " + a);
{ //awal dari blok baru
int y; // variabel ini hanya dikenal di dalam blok code ini saja
y = 5;
System.out.println("Nilai x : " + x); //variabel x dikenal di sini
System.out.println("Nilai a : " + a); //variabel a juga dikenal di sini
{ //nested blok
int z;// variabel ini hanya dikenal di dalam nested blok ini saja
z = 20;
// variabel x,y dan a dikenal di dalam nested blok ini
System.out.println("Nilai x + y + z + a : " + (x + y + z + a));
} //akhir dari nested blok
//z = 11; // variabel z tidak lagi dikenal di sini
//variabel y masih dikenal di sini karena masih dalam blok
//code tempat ia dideklarasikan
System.out.println("Nilai y : " + y);
} //akhir dari blok baru
//y = 12; // variabel y tidak dikenal di sini
//variabel x masih dikenal di sini karena masih dalam blok
//code tempat ia dideklarasikan
System.out.println("Nilai x : " + x);
}
}
14
/* Komentar berupa judul & keterangan program */
#include
using namespace std;
deklarasi data
int main()
{
perintah2 yang akan dijalankan
return 0;
}
Feb 24, 2007 - 5
PK-Slide-03
Ekspresi Sederhana
Urutan prioritas:
kedudukan *, / dan % lebih tinggi drpd + dan −
kurung dpt mendahulukan prioritas:
(1 + 2) * 4 menghasilkan 12
1 + 2 * 4 menghasilkan 9
Operator Operasi
* Perkalian
/ Pembagian
% Modulo (sisa-bagi)
+ Penambahan
− Pengurangan
Feb 24, 2007 - 6
PK-Slide-03
Output Program [1]
int main()
{
(1 + 2) * 4;
return 0;
}
Masalah dgn potongan program di atas:
kita telah menghitung ekspresi utk menimbulkan
hasil namun kita tidak melakukan apa2 dgn hasil
tersebut
Feb 24, 2007 - 7
PK-Slide-03
Output Program [2]
Seharusnya hasil perhitungan ditampilkan sbg
output program, spt
cout << “Separuh dari ” << 64 << “ adalah ” <<
(64 / 2) << “\n”;
yang menghasilkan tampilan
Separuh dari 64 adalah 32
Perhatikan penggunaan spasi kosong
cout << “Separuh dari” << 64 << “adalah” << (64
/ 2) << “\n”; Separuh dari64adalah32
Feb 24, 2007 - 8
PK-Slide-03
Nama Variabel [1]
Variabel utk menyimpan nilai harus memiliki nama
dan tipe (utk menetapkan jenis nilainya)
Nama variabel dapat dibentuk dari
huruf besar dan huruf kecil: a~z dan A~Z
angka: 0~9 dan garis-bawah: _
Nama variabel tidak boleh diawali dgn angka
Nama variabel tidak boleh sama dgn keywords
Huruf-besar & huruf-kecil dianggap tidak sama
dalam C++ (total ≠ Total ≠ TOTAL ≠ toTaL)
Feb 24, 2007 - 9
PK-Slide-03
Nama Variabel [2]
Contoh nama2 variabel yang benar
rerata // rerata nilai mahasiswa
cacah_mhs // banyak mhs dlm suatu kelas
bilBulat // berisikan bilangan bulat
Contoh nama2 variabel yang salah
10data // diawali dgn angka
nama depan // mengandung aksara spasi
int // sama dengan keyword
Feb 24, 2007 - 10
PK-Slide-03
Deklarasi Variabel
Deklarasi variabel dimaksudkan
utk menetapkan nama variabel
utk menetapkan tipe variabel (int, float, char)
utk menjelaskan kegunaan variabel
Bentuk umum deklarasi variabel
tipe nama_var; // penjelasan variabel
Contoh deklarasi variabel
int jawaban; // hasil perhitungan
Feb 24, 2007 - 11
PK-Slide-03
Tipe Integer
Tipe int mencakup bilangan bulat tanpa pecahan
atau tanpa titik desimal
Pd komputer 16-bit, tipe int mencakup rentang
32.767 (215−1) s/d −32.768(−215)
Pd komputer 32-bit, tipe int mencakup rentang
2.147.483.647 (231−1) s/d −2.147.483.648(−231)
Bentuk umum deklarasi variabel integer
int nama_var; // penjelasan variabel
Feb 24, 2007 - 12
PK-Slide-03
Pemberian Nilai [1]
Setelah variabel dideklarasikan:
int answer; // tempat menyimpan hasil
nilai dapat diberikan kepadanya:
answer = (1 + 2) * 4; // bukan kesamaan
Feb 24, 2007 - 13
PK-Slide-03
Pemberian Nilai [2]
Contoh pemberian nilai:
#include
using namespace std;
int jawab; // tempat menyimpan hasil
int main()
{
jawab = 3 * 5; // pemberian nilai hasil perkalian
cout << “Dua kali jawaban: ” << (2 * jawab) << “\n”;
return 0;
}
Feb 24, 2007 - 14
PK-Slide-03
Tipe Floating Point
Tipe ini mencakup bilangan pecahan atau bilngn
real/nyata (bilangan dgn titik desimal)
Contoh:
3.14159, 0.0, 5.0
.5 dan 12. sebaiknya 0.5 dan 12.0
1.2e34 yang berarti 1.2 1034
Bentuk umum deklarasi variabel floating point
float nama_var; // penjelasan variabel
Feb 24, 2007 - 15
PK-Slide-03
Operasi Pembagian [1]
Ada perbedaan pembagian bil bulat & pecahan
hasil pembagian bil bulat mengalami pemotongan
jk salah 1 operand bil pecahan mk pembagian dilakukan
secara pembagian bil pecahan
C++ melakukan konversi antara bil bulat & pecahan
pd pemberian nilai dgn tipe yg berbeda
Ekspresi Hasil Jenis Hasil
19/10 1 bil bulat
19/10.0 1.9 bil real
19.0/10 1.9 bil real
19.0/10.0 1.9 bil real
Feb 24, 2007 - 16
PK-Slide-03
Operasi Pembagian [2]
Contoh pembagian:
int bilBulat; // tempat menyimpan bilangan bulat
float bilPchn; // tempat menyimpan bilangan pecahan
int main()
{
bilPchn = 1.0 / 2.0; // tersimpan 0.5
bilBulat = 1 / 2; // tersimpan 0
bilPchn = 1/2 + 1/2; // tersimpan 0.0
bilPchn = 3.0 / 2.0; // tersimpan 1.5
bilBulat = bilPchn; // tersimpan 1
return 0;
}
Feb 24, 2007 - 17
PK-Slide-03
Tipe Karakter
Bentuk umum deklarasi variabel karakter
char nama_var; // penjelasan variabel
Konstanta karakter dibatasi dgn tanda-petik (')
Contoh: 'A', 'a', '!', '?', ' ', '*', ',' dan '.'
Garing-terbalik (\) menandai karakter khusus,
spt. '\n' menandai baris-baru klik
Bedakan pembatas konstanta karakter & pembatas
kontanta string, yakni tanda-kutip (“)
Feb 24, 2007 - 18
PK-Slide-03
Tipe Boolean
Variabel bertipe boolean hanya dpt memiliki salah
satu dari dua nilai: true atau false.
Bentuk umum deklarasi variabel boolean
bool nama_var; // penjelasan variabel
Contoh:
bool status; // menyala atau padam
status = true; // keadaan menyala
Tipe ini berguna utk mengolah pernyataan2 logika
1. Struktur Disk
• Disk menyediakan penyimpanan sekunder bagi sistem
komputer modern.
• Magnetic tape digunakan sebagai media penyimpanan
sekunder
o waktu aksesnya lebih lambat dari disk
saat ini dipergunakan untuk backup
untuk penyimpanan informasi yang tidak sering
sebagai media untuk mentransfer infromasi dari
satu sistem ke sistem yang lain,
untuk menyimpan sejumlah data yang terlalu
besar untuk sistem disk
• Disk drive modern dialamatkan sebagai suatu array satu
dimensi yang besar dari logical block, dimana logical
block merupakan unit terkecil dari transfer.
• Ukuran logical block biasanya adalah 512 bytes, namun
sejumlah disk dapat diformat di level rendah (low level
formatted) untuk memilih sebuah ukuran logical block
yang berbeda, misalnya 1024 bytes.
• Array satu dimensi dari logical block dipetakan ke bagian
dari disk secara sekuensial.
Sistem Operasi Lanjut 2
o Sektor 0 adalah sektor pertama dari trek pertama di
silinder paling luar (outermost cylinder).
o Pemetaan kemudian memproses secara berurutan
trek tersebut, kemudian melalui trek selanjutnya di
silinder tersebut, dan kemudian sisa silinder dari
yang paling luar sampai yang paling dalam.
• Dengan menggunakan pemetaan, secara logika nomor
logical block dapat diubah ke sebuah alamat disk yang
bergaya lama (old-style disk address) yang terdiri atas
sebuah nomor silinder, sebuah nomor trek di silinder
tersebut, dan sebuah nomor sektor di trek tersebut.
• Dalam prakteknya, hal ini sulit dilakukan karena :
o kebanyakan disk memiliki sejumlah sektor yang
rusak, tetapi pemetaan menyembunyikannya dengan
mensubstitusikan dengan sektor yang dibutuhkan
dari mana-mana di dalam disk.
o jumlah dari sektor per trek tidaklah konstan. Semakin
jauh sebuah trek dari tengah disk, semakin besar
panjangnya, dan juga semakin banyak sektor yang
dipunyainya.
• Disk modern diatur menjadi zona-zona silinder, dimana
nomor sektor per trek konstan dalam sebuah zona, tetapi
seiring kita berpindah dari zona dalam ke zona luar, dan
nomor sektor per trek bertambah.
• Trek di zona paling luar tipikalnya mempunyai 40 persen
sektor lebih banyak daripada trek di zona paling dalam.
• Nomor sektor per trek telah meningkat (seiring dengan
peningkatan teknologi disk) dan mempunyai lebih dari
100 sektor per trek di zona luar dari disk.
• Dengan analogi yang sama, nomor silinder per disk telah
meningkat, dan sejumlah ribuan silinder adalah tak biasa.
Sistem Operasi Lanjut 3
2. Penjadualan Disk
• Tanggung jawab sistem operasi adalah menggunakan
hardware dengan efisien, khususnya disk drives,
khususnya dalam hal waktu akses yang cepat dan
bandwidth disk.
• Waktu akses memiliki dua komponen utama
o Waktu pencarian (Seek Time) : waktu yang
dibutuhkan disk arm untuk menggerakkan head ke
bagian silinder disk yang mengandung sektor yang
diinginkan.
o Waktu rotasi (Rotational Latency) : waktu tambahan
yang dibutuhkan untuk menunggu rotasi atau
perputaran disk, sehingga sektor yang diinginkan
dapat dibaca oleh head.
• Pengertian Bandwidth adalah total jumlah bytes yang
ditransfer dibagi dengan total waktu antara permintaan
pertama sampai seluruh bytes selesai ditransfer.
• Untuk meningkatkan kecepatan akses dan bandwidth,
dapat dilakukan penjadualan pelayanan atas permintaan
I/O dengan urutan yang tepat.
• Jika suatu proses membutuhkan pelayanan I/O dari atau
menuju disk, maka proses tersebut akan melakukan system
call ke sistem operasi. Permintaan tersebut membawa
informasi-informasi antara lain:
o Apakah operasi input atau output.
o Alamat disk untuk proses tersebut.
o Alamat memori untuk proses tersebut
o Jumlah bytes yang akan ditransfer
• Jika disk drive beserta controller tersedia untuk proses
tersebut, maka proses akan dapat dilayani dengan segera.
• Jika ternyata disk drive dan controller tidak tersedia atau
sedang sibuk melayani proses lain, maka semua
permintaan yang memerlukan pelayanan disk tersebut
Sistem Operasi Lanjut 4
akan diletakkan pada suatu antrian penundaan permintaan
untuk disk tersebut. Sehingga jika suatu permintaan telah
dilayani, maka sistem operasi memilih permintaan
tertunda dari antrian yang selanjutnya akan dilayani.
Penjadualan FCFS
• Bentuk paling sederhana dalam penjadualan disk adalah
dengan sistem antrian (queue) atau First Come First
Served (FCFS).
• Algoritma ini secara intrinsik bersifat adil, tetapi secara
umum algoritma ini pada kenyataannya tidak memberikan
pelayanan yang paling cepat.
Penjadualan SSTF (shortest-seek-time-first)
• Algoritma SSTF memilih permintaan berdasarkan waktu
pencarian paling minimum dari posisi head saat itu.
• Penjadualan SSTF merupakan salah satu bentuk dari
penjadualan shortest-job-first (SJF), sehingga penjadualan
SSTF juga dapat mengakibatkan starvation pada saat
tertentu.
Sistem Operasi Lanjut 5
• Waktu pencarian meningkat seiring dengan jumlah
silinder yang dilewati oleh head, maka SSTF memilih
permintaan yang paling dekat posisinya di disk terhadap
posisi head saat itu.
• Metode ini menghasilkan kurang lebih sepertiga dari yang
dihasilkan penjadualan FCFS, sehingga memberikan
peningkatan performance sistem cukup signifikan.
Penjadualan SCAN
• Pergerakan disk arm dimulai dari salah satu ujung disk,
kemudian bergerak menuju ujung yang lain sambil
melayani permintaan setiap kali mengunjungi masingmasing
silinder.
• Jika telah sampai di ujung disk, maka disk arm bergerak
berlawanan arah, kemudian mulai lagi melayani
permintaan yang muncul.
• Algoritma SCAN disebut juga algoritma lift/elevator,
karena kelakuan disk arm sama seperti elevator dalam
suatu gedung.
• Kelemahan : jika banyak permintaan terletak pada salah
satu ujung disk, maka yang dilayani sesuai arah arm disk,
Sistem Operasi Lanjut 6
sehingga permintaan yang pada ujung yang berlawanan
arah belum dilayani (walaupun lebih banyak).
Penjadualan C-SCAN (Circular-SCAN)
• C-SCAN menggerakkan head dari satu ujung disk ke
ujung lainnya sambil melayani permintaan yang terdapat
selama pergerakan tersebut.
• Pada saat head tiba pada salah satu ujung, head akan
kembali ke ujung disk asal pergerakannya.
Penjadualan C-LOOK
• Merupakan versi dari C-SCAN
• Arm disk bergerak paling jauh hanya pada permintaan
terakhir pada masing-masin arah pergerakannya, dan
langsung berbalik arah tanpa harus menuju ujung disk.
Sistem Operasi Lanjut 7
Pemilihan Algoritma Penjadualan Disk
• SSTF lebih umum dan memiliki prilaku yang lazim kita
temui.
• SCAN dan C-SCAN lebih baik bagi sistem yang
menempatkan beban pekerjaan yang berat kepada disk,
karena memiliki masalah starvation yang paling sedikit.
• Dengan algoritma penjadualan yang mana pun, kinerja
sistem sangat tergantung pada jumlah dan tipe permintaan.
• Permintaan disk service dapat dipengaruhi oleh metode
peng-alokasi-an file.
• Algoritma penjadualan disk harus ditulis dalam modul
terpisah dari sistem operasi, sehingga dapat saling
mengganti dengan algoritma lain jika diperlukan.
• Baik SSTF mau pun LOOK keduanya merupakan pilihan
algoritma yang tepat.
3. Managemen Disk
Memformat Disk
• Sebuah disk magnetik yang baru sebenarnya hanyalah
sebuah slate kosong yang berupa piringan magnetik untuk
menyimpan sesuatu.
Sistem Operasi Lanjut 8
• Proses low-level formatting/ physical formatting, yaitu
membagi disk menjadi beberapa sektor dan mengisinya
dengan struktur data tertentu (biasanya header, area data,
dan trailer) agar dapat dibaca dan ditulis oleh disk
controller.
• Salah satu informasi yang dibutuhkan oleh disk controller
adalah error-correcting code (ECC), karena jika terdapat
satu atau dua bit data yang corrupt, controller dapat
mengidentifikasi bit mana yang berubah dan mengoreksi
nya. Proses ini otomatis dilakukan oleh controller setiap
membaca atau menulis pada disk.
• Low-level formatting berfungsi agar pihak manufaktur
dapat mengetes disk dan menginisialisasi mapping dari
number logic blok ke pendeteksi sektor kosong.
• Semakin besar ukuran sektor yang diformat, semakin
sedikit sektor yang dapat diisi pada masing-masing track
dan semakin sedikit header dan trailer yang ditulis pada
setiap track, sehingga ruang yang dapat digunakan untuk
data semakin besar.
• Agar disk dapat menggunakan suatu berkas (file systems),
sistem operasi membutuhkan untuk menyimpan struktur
datanya pada disk.
o Langkah pertama adalah membagi disk menjadi
beberapa silinder (partition), sehingga sistem operasi
dapat memperlakukannya sebagai disk yang terpisah.
o Langkah kedua adalah logical formatting,(membuat
sistem berkas), dimana sistem operasi menyimpan
struktur data yang telah diinisialisasi ke disk.
Boot Block
• Ketika pertama kali menjalankan komputer, dibutuhkan
program yang sudan diinisialisasi, yaitu bootstrap.
Sistem Operasi Lanjut 9
• Yang diinisialisasi adalah segala aspek sistem, (CPU
register, device controller dan isi main memory),
kemudian menjalankan sistem operasi.
• Bootstrap mencari kernel sistem operasi di disk,
memanggil ke memori dan menggunakan alamat yang
diinisialisasi untuk mulai menjalankan sistem operasi.
• Umumnya bootstrap disimpan di Read-Only Memory
(ROM), karena tidak membutuhkan inisialisasi dan berada
pada lokasi yang tetap dimana prosesor dapat
mengeksekusi ketika komputer baru dinyalakan/di-reset.
• Jika kode bootstrap diubah maka chip ROM juga diubah.
• Untuk mengatasinya, sistem menyimpan bootstrap loader
di ROM yang berfungsi memasukkan seluruh program
bootstrap dari disk.
• Boot blocks adalah suatu partisi untuk menyimpan seluruh
program bootstrap.
• Boot disk atau system disk adalah disk yang memiliki
partisi boot.
Bad Blocks
• Bad blocks adalah beberapa sektor yang rusak pada suatu
disk.
• Pada disk sederhana, bad blocks diatasi secara manual,
dan pada disk yang lebih kompleks seperti disk SCSI, bad
blocks diatasi dengan sector sparing atau forwarding,
yaitu controller dapat mengganti sektor yang rusak
dengan sebuah sektor yang terpisah.
• Alternatif lainnya adalah mengganti sektor tersebut
dengan cara sector slipping.
• Mengganti blok yang rusak bukan sepenuhnya merupakan
proses yang otomatis, karena data-data yang tersimpan
sebelumnya akan terhapus.
SUMBER : http://ijobaraya.wordpress.com/2009/07/27/definisi-data-dan-informasi/
http://www.google.co.id/#hl=id&q=tipe+data&meta=&fp=54c237fbe64fad8,,
BABII VARIABEL DAN TIPE DATA
http://www.google.co.id/#hl=id&q=deklarasidata&meta=&fp=54c237fbe64fad8
http://www.google.co.id/#hl=id&q=pemetaan+ke+storage&meta=& fp=54c237fbe64fad8
http://www.mandalawangi89.co.cc/2009/08/struktur-data.html
Di dalam dunia IT (Information Technology) pun sama, kesimpulan terhadap sesuatu yang dianalisa mungkin berbeda tetapi hal itu semua dapat diminimalisir dan dihilangkan selama apa yang menjadi pedomannya pun sama.
Dalam dunia IT dan kebutuhan yang disesuaikan, ternyata banyak sekali kejadian yang jika kita memandang untuk kemajuan teknologi dan komunikasi dapat dibuat prosedur dan aturan yang sama sehingga informasi yang dibutuhkan dari suatu kasus akan sama. Biasanya dalam dunia IT yang menjadi permasalahan adalah kasus-kasus yang sering terjadi dan untuk penyelesaiannya masih dengan prosedur yang manual. Beberapa contoh kasus yang terjadi dibeberapa tempat, seperti pengelolaan data administrasi, pengelokaan data perpustakaan (sudah banyak yang tidak manual), dan lain-lain. Untuk mengatasi beberapa contoh kasus diatas diperlukan data dan informasi yang dibutuhkan.
Beberapa definisi tentang data dari sudut pandang yang berbeda-beda:
* Menurut berbagai kamus bahasa Inggris-Indonesia, data diterjemahkan sebagai istilah yang berasal dari kata “datum” yang berarti fakta atau bahan-bahan keterangan.
* Dari sudut pandang bisnis, data bisnis (business data) adalah deskripsi organisasi tentang sesuatu(resources) dan kejadian (transactions) yang terjadi (business data is an organization’s description of things (resources)and events (transactions) that it faces).
* Data adalah deskripsi dari sesuatu dan kejadian yang kita hadapi.
* Data adalah kenyataan yang menggambarkan suatu kejadian-kejadian dan kesatuan nyata. Kejadian adalah sesuatu yang terjadi pada saat tertentu. Kesatuan nyata adalah berupa suatu objek nyata seperti tempat, benda dan orang yang betul-betul ada dan terjadi.
Beberapa definisi tentang informasi dari sumber yang berbeda-beda:
* Menurut Gordon B. Davis dalam bukunya Management Informations System : Conceptual Foundations, Structures, and Development menyebut informasi sebagai data yang telah diolah menjadi bentuk yang berguna bagi penerimanya dan nyata, berupa nilai yang dapat dipahami di dalam keputusan sekarang maupun masa depan.
* Menurut Barry E. Cushing dalam buku Accounting Information System and Business Organization, dikatakan bahwa informasi merupakan sesuatu yang menunjukkan hasil pengolahan data yang diorganisasi dan berguna kepada orang yang menerimanya.
* Menurut Robert N. Anthony dan John Dearden dalam buku Management Control Systems, menyebut informasi sebagai suatu kenyataan, data, item yang menambah pengetahuan bagi penggunanya.
* Menurut Stephen A. Moscove dan Mark G. Simkin dalam bukunya Accounting Information Systems : Concepts and Practise mengatakan informasi sebagai kenyataan atau bentuk-bentuk yang berguna yang dapat digunakan untuk pengambilan keputusan bisnis.
Dari beberapa penjelasan diatas sehingga dapat disimpulkan bahwa:
Data adalah nilai yang mendeskripsikan dari suatu objek atau kejadian.
Informasi adalah hasil dari pengolahan data dalam bentuk yang lebih berguna dan lebih berarti bagi penerimanya yang menggambarkan suatu kejadian-kejadian sehingga akan berguna untuk pengambilan keputusan.
struktur data
Dalam satu Lembaga atau Organisasi, baik yang bersifat komersial dan industrial, bahkan organisasi yang bagaimanapun bentuknya, Data dipandang sebagai suatu kekayaan yang penting dan mahal. Memang kadang-kadang sulit untuk didapat.
Komposisi data dan logika dari algoritma yang memanfaatkan data tersebut berhubungan sangat erat.
Data sederhana dapat kita himpun ke dalam suatu Struktur Data yang memuat informasi tentang hubungan antara item yang terdapat didalamnya.
Data sederhana yang kita kenal, terdiri dari berbagai jenis atau type. Untuk mengelola data yang bermacam-macam jenis tersebut secara baik, guna menghasilkan informasi, pengetahuan mengenai struktur data amatlah penting.
Struktur Data adalah koleksi atau kelompok data yang dapat dikarakterisasikan oleh organisasi serta operasi yang didefenisaikan terhadapnya.
Struktur data sangat penting dalam sistem komputer. Terhadap setiap variabel didalam program, secara eksplisit ataupun implisit, didefenisikan struktur data yang akan menentukan operasi yang berlaku terhadap variabel tersebut.
Struktur data yang dibicarakan ini merupakan Struktur Data Logik. Bukan penyajian data secara fisik di storage.
Pada garis besarnya, Data dapat dikatagorikan
menjadi :
1. Type Data Sederhana, atau Data Sederhana yang terdiri dari :
1. Data Sederhana Tunggal, misalnya Integer,
Real, Boolean serta Karakter.
2. Data Sederhana Majemuk, misalnya String.
Type data ini dengan berbagai cara dapat diorganisasikan menjadi berbagai Struktur Data.
B. Struktur Data, meliputi :
1. Struktur Data Sederhana, misalnya Array
dan Record.
2. Struktur Data Majemuk, terdiri atas :
@ Linear, misalnya Stack, Queue, serta
Linear Link List.
@ Non Linear, misalnya Pohon Biner (Binary
Tree), Pohon Cari Biner (Binary Search
Tree), Pohon Cari M-Way (M-Way Search
Tree), Tree, General Tree serta Graph.
Kedua katagori diatas, terutama diperuntukkan bagi data didalam storage utama (main storage). Data yang diperuntukan bagi storage tambahan mempunyai struktur data yang dikenal sebagai Organisasi File. Type organisasi file diantaranya adalah Organisasi Squential, Organisasi Relative, Organisasi Indexed Squential, dan Organisasi Multikey.
Dua buah struktur data sederhana adalah Array dan Record. Array merupakan struktur data yang terurut dan homogen, terdiri dari item yang bertipe data sama.
Sedangkan Record merupakan struktur data yang boleh terdiri atas keterangan berbagai type data. Struktur data dari tatanan yang lebih tinggi terbentuk dari Record, disini termasuk daftar linear atau linear list (terutama antrian dan tumpukan) serta Graph.
Pemakain struktur data yang tepat didalam proses pemrograman akan menghasilkan algoritma yang lebih jelas dan tepat, sehingga menjadikan program secara keseluruhan menjadi lebih sederhana.
Algoritma berkerja atas dasar data yang menunjukan fakta dari permasalahan kita dalam dunia nyata. Algoritma dan Data menunjukan hasil dari pelaksanaan program, dan mempunyai hubungan yang simbolik. Dalam hal ini semakin cocok komposisi data untuk suatu aplikasi tertentu, semakin mudah algoritma tersebut melaksanakan tugasnya.
Untuk menyederhanakan pelaksanaan algoritma, dianjurkan untuk mengatur data menjadi suatu unsur logika yang lebih tinggi dibandingkan variabel biasa. Unsur logika tersebut membentuk Struktur Data.
Dengan perkataan lain, suatu struktur data merupakan koleksi dari satuan data sederhana yang terorganisir dengan aturan tertentu.
Oleh karena itu struktur data dicirikan oleh :
1. Jenis atau type data pembentuknya.
2. Hubungan antara satuan data tersebut.
Contoh :
Sebuah program akan dirancang untuk memberi simulasi kepada kemampuan kerja komputer. Algoritma simulasi ini memerlukan data tentang waktu dari pekerjaan yang akan diproses.
Sejumlah satuan data terbentuk, masing-masing menunjukan waktu tiba dari pekerjaan, kebutuhan data oleh komputer, dan sebagainya. Kemudian program akan mencontoh proses dari pekerjaan semu yang dibentuk oleh sistem komputer untuk disimulasikan.
Program akan menjadi lebih jelas dan lebih sederhana apabila data yang menjadi bagian dari tiap-tiap pekerjaan diorganisir ke dalam suatu unsur tunggal, yakni berupa sebuah record. Kemudian akan menjadi jelas lagi apabila record seperti itu diatur membentuk suatu struktur data yang lebih tinggi tingkatannya lagi, sehingga menjadi bentuk first-in-first-out (FIFO) sesuai dengan waktu tiba pekerjaan yang diwakilinya. Struktur data seperti ini disebut Antrean (Queue).
Struktur Data tertentu seperti Array biasanya selalu tersedia bagi pemrogram didalam bahasa pemrograman tingkat tinggi yang dipakai. Namun ada pula struktur data yang tidak tersedia, seperti misalnya struktur Tumpukan (Stack). Untuk itu harus disusun sendiri oleh Pemrogram dengan menggunakan variabel bertype sederhana ataupun dari struktur data yang telah tersedia.
Sebuah Array merupakan dasar dari struktur data. Sebuah Array dapat menyatukan satuan data sederhana dan sejenis yang masing-masing mendapat nama secara kolektif dan dari indeks atau subskrip yang memberikan identifikasi terhadap posisi elemennya.
Sebuah record terbentuk dari beberapa type data sederhana dan termasuk string. Data tersebut dibentuk sebagai unsur tunggal karena mereka memberikan gambaran dari obyek permasalahan yang nyata sehari-hari. Record biasanya ditingkatkan menjadi struktur data yang lebih tinggi, melalui nilai dari salah satu satuan datanya (disebut field).
Variabel yang sederhana, Record dan juga Array, seperti kita katakan terdahulu, dapat diorganisir menjadi struktur data yang lebih tinggi. Struktur tersebut banyak yang bersifat dinamis, artinya bahwa dalam pelaksanaan program yang memakai struktur data tersebut, banyak komponen yang dapat berubah, ada komponen yang dapat dihilangkan dan dimasukkan.
Bahasa pemrograman pada umumnya, mengenal adanya variabel yang
digunakan untuk menyimpan nilai atau data. Sedangkan Java sendiri dikenal sebagai
bahasa pemrograman dengan sifat strongly typed yang artinya diharuskan
mendeklarasikan tipe data dari semua variabel, dan apabila lupa atau salah mengikuti
aturan pendeklarasian variabel, maka akan mendapatkan error pada saat proses
kompilasi.
A. Tipe Data
Java memiliki tipe data yang dapat dikategorikan menjadi dua
kelompok, yaitu tipe data primitif dan referensi.
1. Tipe Data Primitif
Delapan macam tipe data primitif dalam pemrograman Java, yaitu :
a. Integer ( Bilangan Bulat )
Integer merupakan tipe data numerik yang digunakan apabila
tidak berurusan dengan pecahan atau bilangan desimal. Tipe data
numerik yang termasuk integer adalah sebagai berikut :
Tipe Deskripsi
Byte Memiliki nilai integer dari -128 sampai +127 dan menempati
1 byte ( 8 bits ) di memori
Short Memiliki nilai integer dari -32768 sampai 32767 dan
menempati 2 bytes ( 16 bits ) di memori
Int Memiliki nilai integer dari -2147483648 sampai 2147483647
dan menempati 4 bytes ( 32 bits ) di memori
Long Memiliki nilai dari -9223372036854775808 sampai
9223372036854775807 dan menempati 8 bytes ( 64 bits ) di
memori
Bilangan integer biasanya menggunakan int, dan bukan byte,
short maupun long. Bilangan integer juga mengenal nilai positif dan
negatif ( signed number ). Tipe data byte dan short hanya digunakan
pada aplikasi khusus yang memperhatikan penggunaan memori.
Sedangkan long jarang digunakan karena jarang memerlukan bilangan
sebesar kapasitas long.
b. Floating Point ( Bilangan Pecahan )
Floating Point digunakan untuk menangani bilangan desimal
atau perhitungan yang lebih detail dibanding integer. Ada dua macam
floating point, yaitu :
Tipe Deskripsi
* Float memiliki nilai -3.4x108 sampai +3.4x108 dan menempati 4
byte di memori
* Double memiliki nilai -1.7x10308 sampai +1.7x10308
Semua bilangan pecahan atau desimal dalam Java tanpa
diakhiri huruf f akan dianggap sebagai double. Sedangkan bilangan
yang ingin dikategorikan sebagai float harus diakhiri dengan huruf F.
Misalnya : 4.22 F atau 2.314f.
Sedangkan untuk bilangan double, bisa menambah dengan
huruf D, karena secara default bilangan dengan koma atau pecahan
atau desimal akan dianggap sebagai double.
c. Char
Char adalah karakter tunggal yang didefinisikan dengan
diawali dan diakhiri dengan tanda ‘ ( petik tunggal ). Char berbeda
dengan String, karena String bukan merupakan tipe data primitif,
tetapi sudah merupakan sebuah objek. Tipe char mengikuti aturan
unicode, sehingga dapat menggunakan kode /u kemudian diikuti
bilangan dari 0 sampai 65535, tetapi yang biasa digunakan adalah
bilangan heksadesimal dari 0000 sampai FFFF.
Misalnya : ‘\u123’
Selain karakter biasa, juga terdapat karakter khusus yang
didefinisikan dengan cara mengawalinya menggunakan tanda \ seperti
pada tabel berikut :
Kode Nama Nilai Unicode
\b Backspace \u0008
\t Tab \u0009
\n Linefeed \u000a
10
\r Carriage return \u000d
\* Double quote \u0022
\’ Single quote \u0027
\\ Backslash \u005c
d. Boolean
Dalam Java dikenal tipe data boolean yang terdiri dari dua nilai
saja, yaitu true dan false. Boolean sangat penting dalam mengevaluasi
suatu kondisi, dan sering digunakan untuk menentukan alur program.
2. Tipe Data Referensi
Kelebihan pemrograman berorientasi objek adalah dapat
mendefinisikan tipe data baru yang merupakan objek dari class tertentu.
Tipe data ini digunakan untuk mereferensikan objek atau class tertentu,
seperti String.
Latihan 2. TipeData.java
class TipeData {
public static void main(String[] args) {
// Tipe data primitif
long data1 = 546767226531;
int data2 = 2235641;
short data3 = 714;
byte data4 = 34;
float data6 = (float) 1.733; // tipe data pecahan
double data5 = 4.967; // tipe data pecahan
char data7 = 'C';
boolean data8 = true;
System.out.println("Nilai Long : "+ data1);
System.out.println("Nilai Int : "+ data2);
System.out.println("Nilai Short : "+ data3);
System.out.println("Nilai Byte : "+ data4);
System.out.println("Nilai Double : "+ data5);
System.out.println("Nilai Float : "+ data6);
System.out.println("Nilai Char : "+ data7);
System.out.println("Nilai Boolean : "+ data8);
}
}
11
B. Variabel
Variabel merupakan container yang digunakan untuk menyimpan
suatu nilai pada sebuah program dengan tipe tertentu. Untuk mendefinisikan
variabel, kita dapat menggunakan identifier untuk menamai variabel tersebut.
1. Identifier
Identifier adalah kumpulan karakter yang dapat digunakan untuk
menamai variabel, method, class, interface, dan package. Sebagaimana
bahasa pemrograman pada umumnya, Java memiliki peraturan untuk
identifier yang valid atau sah. Identifier bisa disebut valid atau sah apabila
diawali dengan :
Huruf / abjad
Karakter mata uang
Underscore ( _ )
Identifier dapat terdiri dari :
Huruf / abjad
Angka
Underscore ( _ )
Identifier tidak boleh mengandung @, spasi atau diawali dengan
angka. Selain itu, identifier tidak boleh menggunakan keyword atau katakata
yang memiliki arti atau digunakan dalam pemrograman Java. Daftar
Keyword Java :
abstract double int strictfp
boolean flse static super
break fxtends long switch
byte final native synchronized
case finally new this
catch float package throw
12
char for private throws
class goto protected transient
const if public try
continue implements return void
default import short volatile
do instanceof interface while
Selain menggunakan karakter biasa, kita juga dapat menggunakan
unicode sebagai identifier.
2. Mendeklarasikan Variabel
Sintaks dasar :
[tipe data] [nama variabel]
Menuliskan tipe data dari variabel, contoh :
int bilangan;
char karakter;
float bildesimal;
boolean status;
Setelah mendeklarasikan variabel dengan tipe data, selanjutnya
memberikan nilai variabel tersebut dengan tanda = .
bilangan = 20;
karakter = ‘k’;
bildesimal = 22.2f;
status = true;
Dapat juga mendeklarasikan dan memberikan nilai dalam satu baris.
int bilangan = 20;
char karakter = ‘k’;
float bildesimal = 22.2f;
boolean status = true;
Kita dapat membuat variabel menjadi konstanta yang tidak dapat
diubah nilainya dengan menambahkan keyword sebelum tipe data dari
variabel.
Contoh :
final int konstantainteger = 10;
final float pajak = 15.5;
13
Agar konstanta ini dapat diakses oleh class lain tanpa harus
membuat objek terlebih dahulu, maka kita dapat menambahkan modifier
public dan keyword static seperti berikut :
public static final konstantainteger = 10;
Latihan 3. Variabel.java
class Variabel {
static int a;
public static void main(String[] args) {
int x; // variabel x ini dikenal di seluruh method main()
x = 10;
a = 2; //variabel a juga dikenal di sini
System.out.println("Nilai a : " + a);
{ //awal dari blok baru
int y; // variabel ini hanya dikenal di dalam blok code ini saja
y = 5;
System.out.println("Nilai x : " + x); //variabel x dikenal di sini
System.out.println("Nilai a : " + a); //variabel a juga dikenal di sini
{ //nested blok
int z;// variabel ini hanya dikenal di dalam nested blok ini saja
z = 20;
// variabel x,y dan a dikenal di dalam nested blok ini
System.out.println("Nilai x + y + z + a : " + (x + y + z + a));
} //akhir dari nested blok
//z = 11; // variabel z tidak lagi dikenal di sini
//variabel y masih dikenal di sini karena masih dalam blok
//code tempat ia dideklarasikan
System.out.println("Nilai y : " + y);
} //akhir dari blok baru
//y = 12; // variabel y tidak dikenal di sini
//variabel x masih dikenal di sini karena masih dalam blok
//code tempat ia dideklarasikan
System.out.println("Nilai x : " + x);
}
}
14
/* Komentar berupa judul & keterangan program */
#include
using namespace std;
deklarasi data
int main()
{
perintah2 yang akan dijalankan
return 0;
}
Feb 24, 2007 - 5
PK-Slide-03
Ekspresi Sederhana
Urutan prioritas:
kedudukan *, / dan % lebih tinggi drpd + dan −
kurung dpt mendahulukan prioritas:
(1 + 2) * 4 menghasilkan 12
1 + 2 * 4 menghasilkan 9
Operator Operasi
* Perkalian
/ Pembagian
% Modulo (sisa-bagi)
+ Penambahan
− Pengurangan
Feb 24, 2007 - 6
PK-Slide-03
Output Program [1]
int main()
{
(1 + 2) * 4;
return 0;
}
Masalah dgn potongan program di atas:
kita telah menghitung ekspresi utk menimbulkan
hasil namun kita tidak melakukan apa2 dgn hasil
tersebut
Feb 24, 2007 - 7
PK-Slide-03
Output Program [2]
Seharusnya hasil perhitungan ditampilkan sbg
output program, spt
cout << “Separuh dari ” << 64 << “ adalah ” <<
(64 / 2) << “\n”;
yang menghasilkan tampilan
Separuh dari 64 adalah 32
Perhatikan penggunaan spasi kosong
cout << “Separuh dari” << 64 << “adalah” << (64
/ 2) << “\n”; Separuh dari64adalah32
Feb 24, 2007 - 8
PK-Slide-03
Nama Variabel [1]
Variabel utk menyimpan nilai harus memiliki nama
dan tipe (utk menetapkan jenis nilainya)
Nama variabel dapat dibentuk dari
huruf besar dan huruf kecil: a~z dan A~Z
angka: 0~9 dan garis-bawah: _
Nama variabel tidak boleh diawali dgn angka
Nama variabel tidak boleh sama dgn keywords
Huruf-besar & huruf-kecil dianggap tidak sama
dalam C++ (total ≠ Total ≠ TOTAL ≠ toTaL)
Feb 24, 2007 - 9
PK-Slide-03
Nama Variabel [2]
Contoh nama2 variabel yang benar
rerata // rerata nilai mahasiswa
cacah_mhs // banyak mhs dlm suatu kelas
bilBulat // berisikan bilangan bulat
Contoh nama2 variabel yang salah
10data // diawali dgn angka
nama depan // mengandung aksara spasi
int // sama dengan keyword
Feb 24, 2007 - 10
PK-Slide-03
Deklarasi Variabel
Deklarasi variabel dimaksudkan
utk menetapkan nama variabel
utk menetapkan tipe variabel (int, float, char)
utk menjelaskan kegunaan variabel
Bentuk umum deklarasi variabel
tipe nama_var; // penjelasan variabel
Contoh deklarasi variabel
int jawaban; // hasil perhitungan
Feb 24, 2007 - 11
PK-Slide-03
Tipe Integer
Tipe int mencakup bilangan bulat tanpa pecahan
atau tanpa titik desimal
Pd komputer 16-bit, tipe int mencakup rentang
32.767 (215−1) s/d −32.768(−215)
Pd komputer 32-bit, tipe int mencakup rentang
2.147.483.647 (231−1) s/d −2.147.483.648(−231)
Bentuk umum deklarasi variabel integer
int nama_var; // penjelasan variabel
Feb 24, 2007 - 12
PK-Slide-03
Pemberian Nilai [1]
Setelah variabel dideklarasikan:
int answer; // tempat menyimpan hasil
nilai dapat diberikan kepadanya:
answer = (1 + 2) * 4; // bukan kesamaan
Feb 24, 2007 - 13
PK-Slide-03
Pemberian Nilai [2]
Contoh pemberian nilai:
#include
using namespace std;
int jawab; // tempat menyimpan hasil
int main()
{
jawab = 3 * 5; // pemberian nilai hasil perkalian
cout << “Dua kali jawaban: ” << (2 * jawab) << “\n”;
return 0;
}
Feb 24, 2007 - 14
PK-Slide-03
Tipe Floating Point
Tipe ini mencakup bilangan pecahan atau bilngn
real/nyata (bilangan dgn titik desimal)
Contoh:
3.14159, 0.0, 5.0
.5 dan 12. sebaiknya 0.5 dan 12.0
1.2e34 yang berarti 1.2 1034
Bentuk umum deklarasi variabel floating point
float nama_var; // penjelasan variabel
Feb 24, 2007 - 15
PK-Slide-03
Operasi Pembagian [1]
Ada perbedaan pembagian bil bulat & pecahan
hasil pembagian bil bulat mengalami pemotongan
jk salah 1 operand bil pecahan mk pembagian dilakukan
secara pembagian bil pecahan
C++ melakukan konversi antara bil bulat & pecahan
pd pemberian nilai dgn tipe yg berbeda
Ekspresi Hasil Jenis Hasil
19/10 1 bil bulat
19/10.0 1.9 bil real
19.0/10 1.9 bil real
19.0/10.0 1.9 bil real
Feb 24, 2007 - 16
PK-Slide-03
Operasi Pembagian [2]
Contoh pembagian:
int bilBulat; // tempat menyimpan bilangan bulat
float bilPchn; // tempat menyimpan bilangan pecahan
int main()
{
bilPchn = 1.0 / 2.0; // tersimpan 0.5
bilBulat = 1 / 2; // tersimpan 0
bilPchn = 1/2 + 1/2; // tersimpan 0.0
bilPchn = 3.0 / 2.0; // tersimpan 1.5
bilBulat = bilPchn; // tersimpan 1
return 0;
}
Feb 24, 2007 - 17
PK-Slide-03
Tipe Karakter
Bentuk umum deklarasi variabel karakter
char nama_var; // penjelasan variabel
Konstanta karakter dibatasi dgn tanda-petik (')
Contoh: 'A', 'a', '!', '?', ' ', '*', ',' dan '.'
Garing-terbalik (\) menandai karakter khusus,
spt. '\n' menandai baris-baru klik
Bedakan pembatas konstanta karakter & pembatas
kontanta string, yakni tanda-kutip (“)
Feb 24, 2007 - 18
PK-Slide-03
Tipe Boolean
Variabel bertipe boolean hanya dpt memiliki salah
satu dari dua nilai: true atau false.
Bentuk umum deklarasi variabel boolean
bool nama_var; // penjelasan variabel
Contoh:
bool status; // menyala atau padam
status = true; // keadaan menyala
Tipe ini berguna utk mengolah pernyataan2 logika
1. Struktur Disk
• Disk menyediakan penyimpanan sekunder bagi sistem
komputer modern.
• Magnetic tape digunakan sebagai media penyimpanan
sekunder
o waktu aksesnya lebih lambat dari disk
saat ini dipergunakan untuk backup
untuk penyimpanan informasi yang tidak sering
sebagai media untuk mentransfer infromasi dari
satu sistem ke sistem yang lain,
untuk menyimpan sejumlah data yang terlalu
besar untuk sistem disk
• Disk drive modern dialamatkan sebagai suatu array satu
dimensi yang besar dari logical block, dimana logical
block merupakan unit terkecil dari transfer.
• Ukuran logical block biasanya adalah 512 bytes, namun
sejumlah disk dapat diformat di level rendah (low level
formatted) untuk memilih sebuah ukuran logical block
yang berbeda, misalnya 1024 bytes.
• Array satu dimensi dari logical block dipetakan ke bagian
dari disk secara sekuensial.
Sistem Operasi Lanjut 2
o Sektor 0 adalah sektor pertama dari trek pertama di
silinder paling luar (outermost cylinder).
o Pemetaan kemudian memproses secara berurutan
trek tersebut, kemudian melalui trek selanjutnya di
silinder tersebut, dan kemudian sisa silinder dari
yang paling luar sampai yang paling dalam.
• Dengan menggunakan pemetaan, secara logika nomor
logical block dapat diubah ke sebuah alamat disk yang
bergaya lama (old-style disk address) yang terdiri atas
sebuah nomor silinder, sebuah nomor trek di silinder
tersebut, dan sebuah nomor sektor di trek tersebut.
• Dalam prakteknya, hal ini sulit dilakukan karena :
o kebanyakan disk memiliki sejumlah sektor yang
rusak, tetapi pemetaan menyembunyikannya dengan
mensubstitusikan dengan sektor yang dibutuhkan
dari mana-mana di dalam disk.
o jumlah dari sektor per trek tidaklah konstan. Semakin
jauh sebuah trek dari tengah disk, semakin besar
panjangnya, dan juga semakin banyak sektor yang
dipunyainya.
• Disk modern diatur menjadi zona-zona silinder, dimana
nomor sektor per trek konstan dalam sebuah zona, tetapi
seiring kita berpindah dari zona dalam ke zona luar, dan
nomor sektor per trek bertambah.
• Trek di zona paling luar tipikalnya mempunyai 40 persen
sektor lebih banyak daripada trek di zona paling dalam.
• Nomor sektor per trek telah meningkat (seiring dengan
peningkatan teknologi disk) dan mempunyai lebih dari
100 sektor per trek di zona luar dari disk.
• Dengan analogi yang sama, nomor silinder per disk telah
meningkat, dan sejumlah ribuan silinder adalah tak biasa.
Sistem Operasi Lanjut 3
2. Penjadualan Disk
• Tanggung jawab sistem operasi adalah menggunakan
hardware dengan efisien, khususnya disk drives,
khususnya dalam hal waktu akses yang cepat dan
bandwidth disk.
• Waktu akses memiliki dua komponen utama
o Waktu pencarian (Seek Time) : waktu yang
dibutuhkan disk arm untuk menggerakkan head ke
bagian silinder disk yang mengandung sektor yang
diinginkan.
o Waktu rotasi (Rotational Latency) : waktu tambahan
yang dibutuhkan untuk menunggu rotasi atau
perputaran disk, sehingga sektor yang diinginkan
dapat dibaca oleh head.
• Pengertian Bandwidth adalah total jumlah bytes yang
ditransfer dibagi dengan total waktu antara permintaan
pertama sampai seluruh bytes selesai ditransfer.
• Untuk meningkatkan kecepatan akses dan bandwidth,
dapat dilakukan penjadualan pelayanan atas permintaan
I/O dengan urutan yang tepat.
• Jika suatu proses membutuhkan pelayanan I/O dari atau
menuju disk, maka proses tersebut akan melakukan system
call ke sistem operasi. Permintaan tersebut membawa
informasi-informasi antara lain:
o Apakah operasi input atau output.
o Alamat disk untuk proses tersebut.
o Alamat memori untuk proses tersebut
o Jumlah bytes yang akan ditransfer
• Jika disk drive beserta controller tersedia untuk proses
tersebut, maka proses akan dapat dilayani dengan segera.
• Jika ternyata disk drive dan controller tidak tersedia atau
sedang sibuk melayani proses lain, maka semua
permintaan yang memerlukan pelayanan disk tersebut
Sistem Operasi Lanjut 4
akan diletakkan pada suatu antrian penundaan permintaan
untuk disk tersebut. Sehingga jika suatu permintaan telah
dilayani, maka sistem operasi memilih permintaan
tertunda dari antrian yang selanjutnya akan dilayani.
Penjadualan FCFS
• Bentuk paling sederhana dalam penjadualan disk adalah
dengan sistem antrian (queue) atau First Come First
Served (FCFS).
• Algoritma ini secara intrinsik bersifat adil, tetapi secara
umum algoritma ini pada kenyataannya tidak memberikan
pelayanan yang paling cepat.
Penjadualan SSTF (shortest-seek-time-first)
• Algoritma SSTF memilih permintaan berdasarkan waktu
pencarian paling minimum dari posisi head saat itu.
• Penjadualan SSTF merupakan salah satu bentuk dari
penjadualan shortest-job-first (SJF), sehingga penjadualan
SSTF juga dapat mengakibatkan starvation pada saat
tertentu.
Sistem Operasi Lanjut 5
• Waktu pencarian meningkat seiring dengan jumlah
silinder yang dilewati oleh head, maka SSTF memilih
permintaan yang paling dekat posisinya di disk terhadap
posisi head saat itu.
• Metode ini menghasilkan kurang lebih sepertiga dari yang
dihasilkan penjadualan FCFS, sehingga memberikan
peningkatan performance sistem cukup signifikan.
Penjadualan SCAN
• Pergerakan disk arm dimulai dari salah satu ujung disk,
kemudian bergerak menuju ujung yang lain sambil
melayani permintaan setiap kali mengunjungi masingmasing
silinder.
• Jika telah sampai di ujung disk, maka disk arm bergerak
berlawanan arah, kemudian mulai lagi melayani
permintaan yang muncul.
• Algoritma SCAN disebut juga algoritma lift/elevator,
karena kelakuan disk arm sama seperti elevator dalam
suatu gedung.
• Kelemahan : jika banyak permintaan terletak pada salah
satu ujung disk, maka yang dilayani sesuai arah arm disk,
Sistem Operasi Lanjut 6
sehingga permintaan yang pada ujung yang berlawanan
arah belum dilayani (walaupun lebih banyak).
Penjadualan C-SCAN (Circular-SCAN)
• C-SCAN menggerakkan head dari satu ujung disk ke
ujung lainnya sambil melayani permintaan yang terdapat
selama pergerakan tersebut.
• Pada saat head tiba pada salah satu ujung, head akan
kembali ke ujung disk asal pergerakannya.
Penjadualan C-LOOK
• Merupakan versi dari C-SCAN
• Arm disk bergerak paling jauh hanya pada permintaan
terakhir pada masing-masin arah pergerakannya, dan
langsung berbalik arah tanpa harus menuju ujung disk.
Sistem Operasi Lanjut 7
Pemilihan Algoritma Penjadualan Disk
• SSTF lebih umum dan memiliki prilaku yang lazim kita
temui.
• SCAN dan C-SCAN lebih baik bagi sistem yang
menempatkan beban pekerjaan yang berat kepada disk,
karena memiliki masalah starvation yang paling sedikit.
• Dengan algoritma penjadualan yang mana pun, kinerja
sistem sangat tergantung pada jumlah dan tipe permintaan.
• Permintaan disk service dapat dipengaruhi oleh metode
peng-alokasi-an file.
• Algoritma penjadualan disk harus ditulis dalam modul
terpisah dari sistem operasi, sehingga dapat saling
mengganti dengan algoritma lain jika diperlukan.
• Baik SSTF mau pun LOOK keduanya merupakan pilihan
algoritma yang tepat.
3. Managemen Disk
Memformat Disk
• Sebuah disk magnetik yang baru sebenarnya hanyalah
sebuah slate kosong yang berupa piringan magnetik untuk
menyimpan sesuatu.
Sistem Operasi Lanjut 8
• Proses low-level formatting/ physical formatting, yaitu
membagi disk menjadi beberapa sektor dan mengisinya
dengan struktur data tertentu (biasanya header, area data,
dan trailer) agar dapat dibaca dan ditulis oleh disk
controller.
• Salah satu informasi yang dibutuhkan oleh disk controller
adalah error-correcting code (ECC), karena jika terdapat
satu atau dua bit data yang corrupt, controller dapat
mengidentifikasi bit mana yang berubah dan mengoreksi
nya. Proses ini otomatis dilakukan oleh controller setiap
membaca atau menulis pada disk.
• Low-level formatting berfungsi agar pihak manufaktur
dapat mengetes disk dan menginisialisasi mapping dari
number logic blok ke pendeteksi sektor kosong.
• Semakin besar ukuran sektor yang diformat, semakin
sedikit sektor yang dapat diisi pada masing-masing track
dan semakin sedikit header dan trailer yang ditulis pada
setiap track, sehingga ruang yang dapat digunakan untuk
data semakin besar.
• Agar disk dapat menggunakan suatu berkas (file systems),
sistem operasi membutuhkan untuk menyimpan struktur
datanya pada disk.
o Langkah pertama adalah membagi disk menjadi
beberapa silinder (partition), sehingga sistem operasi
dapat memperlakukannya sebagai disk yang terpisah.
o Langkah kedua adalah logical formatting,(membuat
sistem berkas), dimana sistem operasi menyimpan
struktur data yang telah diinisialisasi ke disk.
Boot Block
• Ketika pertama kali menjalankan komputer, dibutuhkan
program yang sudan diinisialisasi, yaitu bootstrap.
Sistem Operasi Lanjut 9
• Yang diinisialisasi adalah segala aspek sistem, (CPU
register, device controller dan isi main memory),
kemudian menjalankan sistem operasi.
• Bootstrap mencari kernel sistem operasi di disk,
memanggil ke memori dan menggunakan alamat yang
diinisialisasi untuk mulai menjalankan sistem operasi.
• Umumnya bootstrap disimpan di Read-Only Memory
(ROM), karena tidak membutuhkan inisialisasi dan berada
pada lokasi yang tetap dimana prosesor dapat
mengeksekusi ketika komputer baru dinyalakan/di-reset.
• Jika kode bootstrap diubah maka chip ROM juga diubah.
• Untuk mengatasinya, sistem menyimpan bootstrap loader
di ROM yang berfungsi memasukkan seluruh program
bootstrap dari disk.
• Boot blocks adalah suatu partisi untuk menyimpan seluruh
program bootstrap.
• Boot disk atau system disk adalah disk yang memiliki
partisi boot.
Bad Blocks
• Bad blocks adalah beberapa sektor yang rusak pada suatu
disk.
• Pada disk sederhana, bad blocks diatasi secara manual,
dan pada disk yang lebih kompleks seperti disk SCSI, bad
blocks diatasi dengan sector sparing atau forwarding,
yaitu controller dapat mengganti sektor yang rusak
dengan sebuah sektor yang terpisah.
• Alternatif lainnya adalah mengganti sektor tersebut
dengan cara sector slipping.
• Mengganti blok yang rusak bukan sepenuhnya merupakan
proses yang otomatis, karena data-data yang tersimpan
sebelumnya akan terhapus.
SUMBER : http://ijobaraya.wordpress.com/2009/07/27/definisi-data-dan-informasi/
http://www.google.co.id/#hl=id&q=tipe+data&meta=&fp=54c237fbe64fad8,,
BABII VARIABEL DAN TIPE DATA
http://www.google.co.id/#hl=id&q=deklarasidata&meta=&fp=54c237fbe64fad8
http://www.google.co.id/#hl=id&q=pemetaan+ke+storage&meta=& fp=54c237fbe64fad8
http://www.mandalawangi89.co.cc/2009/08/struktur-data.html
Langganan:
Postingan (Atom)