Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 1
Arsip Beruntun
• Informasi yang disimpan di dalam media penyimpan
sekunder dikelompokkan dalam bentuk arsip (
file
).
• Suatu arsip merupakan organisasi dari sejumlah
rekaman. Masing-masing rekaman dapat terdiri dari satu
atau beberapa field dan setiap field dapat terdiri dari satu
atau beberapa byte.
• Informasi yang disimpan oleh satu buah arsip atau lebih
berkategori sama. Contohnya data mahasiswa disimpan
dalam arsip mahasiswa, data nilai mahasiswa disimpan
dalam arsip nilai mahasiswa, data buku komputer
disimpan dalam arsip buku komputer, dll.
• Catatan nama setiap arsip harus unik (tidak boleh
sama).
Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 2
• Informasi yang direkam di dalam arsip
disebut rekaman (record).
• Metode pengorganisasian rekaman dalam
pengarsipan dibedakan sebagai berikut:
1. arsip beruntun (sequential file);
2. arsip acak (random file);
3. arsip berindeks (indexed file;
4. dll.
Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 3
Definisi Arsip Beruntun
• Arsip beruntun adalah sekumpulan rekaman yang
disimpan di dalam penyimpanan sekunder komputer,
yang dapat diakses secara beruntun mulai dari rekaman
pertama sampai dengan rekaman terakhir, rekaman
demi rekaman secara searah.
• Karena komputer "tidak mengetahui" akhir arsip, maka di
dalam arsip beruntun ditambahkan rekaman fiktif yang
berfungsi sebagai "tanda" bahwa akhir arsip sudah
tercapai sehingga pembacaan rekaman dihentikan.
Rekaman fiktif ditambahkan sesudah rekaman terakhir.
• Setiap rekaman boleh bertipe dasar maupun tipe
terstruktur yang telah didefinisikan.
Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 4
Contoh Arsip Beruntun
Arsip mahasiswa yang berisi NIM, Nama dan IPK.
type DataMhs : record <NIM : integer, Nama : string, IPK : real>
type ArsipMhs : SeqFile of DataMhs and MARK =
<99999999999,'.',0.00>
MHS : ArsipMhs
• 08053110001 Abdullah 3.10
• 08053110021 Fidha Rozak 2.87
• 08053110029 Sumiati
3.65
• 08053110030 Mila Rossa 2.21
• 99999999999 . 0.00
Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 5
Perintah Dasar Arsip Beruntun
1. OPEN
Sebelum arsip dapat diakses (dibaca atau ditulis) mula-mula arsip haruslah diaktifkan terlebih dahulu. Untuk keperluan ini fungsi yang digunakan OPEN.
Fungsi OPEN adalah membuka arsip beruntun untuk siap dibaca. Pointer pembacaan menunjuk ke rekaman pertama.
Prosedur OPEN
procedure OPEN (input NamaArsip : ArsipBeruntun, Output NamaRek : Rekaman) {Membuka arsip beruntun NamaArsip untuk siap dibaca
K.Awal : Sembarang
K.Akhir : NamaRek berisi nilai rekaman pertama} Contoh:
OPEN (MHS, RekMhs){MHS = nama arsip, RekMhs bertipe DataMhs}
Bila arsip yang dibuka berisi rekaman seperti contoh di atas, maka kedua perintah OPEN di atas menyebabkan:
RekMhs berisi <08053110001, Abdullah, 3.10>
Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 6 Dalam program bahasa C/C++
Prototype fungsi fopen() ada di header fungsi “stdio.h” Bentuk umum :
FILE *fopen(char *namafile, char *mode); Keterangan :
namafile adalah nama dari file yang akan dibuka/diaktifkan. mode adalah jenis operasi file yang akan dilakukan terhadap file. Jenis-jenis operasi file :
r : menyatakan file hanya dapat dibaca (file harus sudah ada).
w : menyatakan file baru akan dibuat/diciptakan (file yang sudah ada akan dihapus).
a : untuk membuka file yang sudah ada dan akan dilakukan proses penambahan data (jika file belum ada, otomatis akan dibuat).
r+ : untuk membuka file yang sudah ada dan akan dilakukan proses pembacaan dan penulisan. w+ : untuk membuka file dengan tujuan untuk pembacaan atau penulisan.
Jika file sudah ada, isinya akan dihapus.
a+ : untuk membuka file, dengan operasi yang akan dilakukan berupa perekaman maupun pembacaan.
Jika file sudah ada, isinya akan dihapus. Contoh :
pf = fopen(“COBA.TXT”, “w”);
2. READ
Fungsinya membaca rekaman yang sekarang sedang ditunjuk oleh pointer
pembacaan.
procedure READ(input NamaArsip : ArsipBeruntun,output NamaRek :
Rekaman)
{ membaca rekaman yang sekarang sedang ditunjuk oleh pointer pembacaan
dari arsip yang bernama NamaArsip.
K.Awal :
-K.Akhir : NamaRek berisi nilai rekaman yang sedang ditunjuk oleh pointer
pembacaan.
pointer pembacaan menunjuk ke awal rekaman berikutnya.}
READ (MHS,RekMhs)
Jika pointer pembacaan menunjuk ke awal rekaman kedua dari contoh di atas,
maka perintah READ menyebabkan:
RekMhs berisi <08053110021,Fidha Rozak,2.87>
setelah perintah READ di atas, pointer pembacaan sekarang menunjuk ke awal
rekaman ketiga dan siap untuk membaca rekaman ketiga itu.
3. REWRITE
Fungsinya menyiapkan arsip untuk perekaman.
procedure REWRITE(input NamaArsip :
ArsipBeruntun)
{ Menyiapkan arsip NamaArsip untuk ditulisi
K.Awal :
-K.Akhir : pointer penulisan menunjuk ke awal arsip
NamaArsip, siap untuk menulis rekaman}
REWRITE(MHS)
Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 9
4. WRITE
Fungsinya menulis rekaman ke dalam arsip beruntun.
procedure WRITE(input NamaArsip : ArsipBeruntun,output NamaRek :
Rekaman)
{ menulis NamaRek ke arsip yang namanya NamaArsip.
K.Awal : pointer penulisan sudah berada pada posisi siap merekam
K.Akhir : NamaRek tertulis ke dalam arsip NamaArsip. Pointer penulisan maju
satu posisi.}
WRITE(MHS,<08053110033,'Ariel Peterpan',1.99>)
Catatan: Arsip yang dibuka untuk pembacaan (dengan perintah OPEN) tidak
dapat digunakan untuk perekaman. Demikian juga sebaliknya, arsip yang
dibuka untuk perekaman (dengan perintah REWRITE) tidak dapat dibaca.
Operasi baca dan tulis tidak dapat dilakukan sekaligus pada arsip beruntun.
Cara mengakhiri arsip dengan MARK:
WRITE (MHS,<99999999999,'.',0.00>)
Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 10
5. CLOSE
Fungsinya menutup arsip yang telah dibuka
untuk pembacaan atau dibuka untuk
perekaman.
procedure CLOSE(input NamaArsip :
ArsipBeruntun)
{ menutup arsip yang telah dibuka.
K.Awal : Sembarang
K.Akhir : Arsip NamaArsip telah ditutup, tidak
dapat diproses lagi.}
Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 11
Skema Pemrosesan Beruntun untuk Arsip beruntun
1. Skema pemrosesan beruntun dengan penanganan kasus kosong PEMROSESANBERUNTUN1
KAMUS
type Rekaman : record <deklarasi nama field dan tipenya> type ArsipBeruntun : SeqFile of Rekaman and MARK = <rekaman fiktif> NamaArsip : ArsipBeruntun
NamaRek : Rekaman ALGORITMA OPEN(NamaArsip, NamaRek) if NamaRek = MARK then
output(‘Arsip kosong’) else Inisialisasi repeat Proses(NamaRek) READ(NamaArsip, NamaRek) until NamaRek = MARK Terminasi Endif CLOSE(NamaArsip)
Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 12
Skema pemrosesan beruntun
tanpa penanganan kasus kosong
PEMROSESANBERUNTUN2 KAMUS
type Rekaman : record <deklarasi nama field dan tipenya> type ArsipBeruntun : SeqFile of Rekaman and MARK = <rekaman fiktif> NamaArsip : ArsipBeruntun
NamaRek : Rekaman ALGORITMA
Inisialisai
OPEN(NamaArsip, NamaRek) while (NamaRek≠MARK) do
Proses(NamaRek) READ(NamaArsip, NamaRek) endwhile
Terminasi CLOSE(NamaArsip)
Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 13
Penggabungan Arsip
Penggabungan arsip (merging) dilakukan untuk
menggabungkan rekaman yang disimpan di
dalam dua buah arsip berbeda. Hasil
penggabungan disimpan pada sebuah arsip
baru.
Penggabungan dapat dilakukan untuk arsip terurut
dan arsip belum terurut.
Cara penggabungan yang paling sederhana
adalah penggabungan yang dilakukan dengan
menambah rekaman arsip yang kedua setelah
rekaman terakhir arsip pertama.
Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 14
Penggabungan dua buah arsip dengan
Penyambungan
Misalkan diberikan dua buah arsip bilangan bulat, yang
pertama bernama Bil1 dan yang kedua bernama Bil2.
Arsip Bil1:
1.
123 23 32 12 213 9999
Arsip Bil2:
2.
45 54 13 9999
Maka arsip Bil3 berisi hasil penyambungan arsip Bil1
dengan arsip Bil2. Rekaman Bil2 ditambahkan setelah
rekaman Bil1.
Arsip Bil3:
3. 123 23 32 12 213 45 54 13 9999
KAMUS
type BilBulat : integer
type ArispBIL : SeqFile of BilBulat and MARK =
<9999>
Bil1, Bil2, Bil3 : ArsipBil
procedure PenyambunganArsip1
{K.Awal : arsip Bil1 atau Bil2 mungkin kosong
K.Akhir: arsip Bil3 berisi hasil penggabungan Bil1
dan Bil2}
KAMUS LOKAL
I : BilBulat
ALGORITMA
REWRITE(Bil3)
OPEN(Bil1,I)
while (I
≠
9999) do
WRITE(Bil3, I)
READ(Bil1,I)
endwhile
OPEN(Bil2,I)
while (I
≠
9999) do
WRITE(Bil3, I)
READ(Bil2,I)
endwhile
WRITE(Bil3, <9999>)
CLOSE(Bil1)
CLOSE(Bil2)
CLOSE(Bil3)
Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 17
Penggabungan Dua Arsip Terurut
Misalkan arsip pertama dan arsip kedua sudah terurut
menaik dan akan digabungkan juga terurut menaik.
Arsip Bil1:
1.
12 23 32 123 213 9999
Arsip Bil2:
2.
13 45 54 9999
Arsip Bil3:
3. 12 13 23 32 45 54 123 213 9999
Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 18
Penggabungan arsip secara terurut ada 2
versi:
1. Versi AND
2. Versi OR
Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 19
Versi AND
procedure GabungArsipVersiAND
{K.Awal : arsip Bil1 atau Bil2 mungkin kosong. Jika tidak kosong berisi
rekaman yang terurut menaik.
K.Akhir: arsip Bil3 berisi hasil penggabungan Bil1 dan Bil2 dan
rekamannya terurut menaik. Jika kedua arsip masukan kosong,
maka arsip Bil3 kosong. }
KAMUS LOKAL
Angka1, Angka2 : BilBulat
ALGORITMA
OPEN(Bil1, Angka1)
OPEN(Bil2, Angka2)
REWRITE(Bil3)
Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 20
while (Angka1 ≠9999) AND (Angka2 ≠9999) do if (Angka1 ≤Angka2) then
WRITE(Bil3, Angka1) READ(Bil1, Angka1) else WRITE(Bil3, Angka2) READ(Bil2, Angka2) endif endwhile while (Angka1 ≠9999) do WRITE(Bil3, Angka1) READ(Bil1, Angka1) endwhile while (Angka2 ≠9999) do WRITE(Bil3, Angka2) READ(Bil2, Angka2) endwhile WRITE( Bil3, <9999>) CLOSE(Bil1) CLOSE(Bil2) CLOSE(Bil3)
Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 21
Versi
OR
procedure GabungArsipVersiAND
{K.Awal : arsip Bil1 atau Bil2 mungkin kosong. Jika tidak kosong berisi rekaman yang terurut menaik. K.Akhir: arsip Bil3 berisi hasil penggabungan Bil1 dan Bil2 dan rekamannya terurut menaik. Jika kedua arsip masukan
kosong, maka arsip Bil3 kosong. } KAMUS LOKAL
Angka1, Angka2 : BilBulat ALGORITMA
OPEN(Bil1, Angka1) OPEN(Bil2, Angka2) REWRITE(Bil3)
while (Angka1 ≠9999) OR (Angka2 ≠9999) do if (Angka1 ≤Angka2) then
WRITE(Bil3, Angka1) READ(Bil1, Angka1) else WRITE(Bil3, Angka2) READ(Bil2, Angka2) endif endwhile WRITE( Bil3, <9999>) CLOSE(Bil1) CLOSE(Bil2) CLOSE(Bil3)
Kamis, 25 Mei 2006 Algoritma dan Pemrograman II 22
Pemutakhiran Arsip
Pemutakhiran (updating) adalah proses yang
dilakukan untuk mengubah atau meremajakan
rekaman arsip induk (master file). Peremajaan
rekaman arsip dapat dilakukan dengan data
rekaman yang baru diketik dari papan ketik atau
dibaca dari arsip transaksi. Satu rekaman pada
arsip yang diremajakan (arsip induk) dapat
mengalami beberapa kali perubahan atau
peremajaan. Peremajaan langsung dilakukan
terhadap arsip master.
procedure PemutakhiranArsip { Meremajakan rekaman pada arsip MAST K.Awal : Arsip MAST terdefinisi, terurut menaik.
K.Akhir : field dari rekaman tertentu pada arsip MAST dimutakhirkan dan data tetap terurut.} Kamus Lokal
M : dataMhs NimB, AlamatB : string Algoritma
OPEN(MAST, M) if (M = MARK) then
output(‘Arsip kosong’) else
output(‘Ketikan NIM alamat yang akan diubah’)
input(NimB) REWRITE(TEMP)
while (M.NIM < NimB) and (M ≠MARK) do WRITE(TEMP, M)
READ(MAST, M) endwhile
if (M.NIM = NimB) then
output(M.NIM, M.NAMA, M.TGL_LAHIR, M.ALAMAT, M.TELEPON) input(AlamatB)
M.ALAMAT ←AlamatB WRITE(TEMP, M) READ(MASK, M) else
output(NimB,’ tidak ada pada arsip master’) endif while (M ≠MARK) do WRITE(TEMP, M) READ(MASK, M) endwhile CLOSE(MASK) CLOSE(TEMP) OPEN(TEMP, M) REWRITE(MAST) while (M ≠MARK) do WRITE(MASK, M) READ(TEMP, M) endwhile WRITE(MAST, <‘#’, ’#’, ‘#’, ‘#’,’#’>) CLOSE(TEMP) CLOSE(MASTER)