Algoritma dan Pemrograman
File Sekuensial Oleh: Eddy Prasetyo N
05/05/2014
1
Agenda
Definisi Primitif Akses Primitif Penulisan Pemrosesan Arsip Sekuensial Algoritma Konsolidasi
05/05/2014
2
Definisi [1]
Sekumpulan rekaman yang dapat diakses secara berurutan mulai dari rekaman pertama sampai dengan rekaman terakhir, rekaman per rekaman secara searah
05/05/2014
3
Definisi [2]
Rekaman terakhir adalah fiktif, sebagai penanda akhir dari arsip.
Sering disebut dengan EOF (end-of-file)
Arsip sekuensial merupakan hasil dari penulisan yang dilakukan rekaman (record) per rekaman
05/05/2014
4
Definisi [3] Setiap rekaman boleh berisi type dasar ataupun terstruktur yang telah didefinisikan, setiap rekaman berstruktur sama Elemen dalam rekaman disebut field. Cara Pendefinisian:
type rekaman : <…….> sebuah type terdefinisi untuk setiap rekaman namaArsip : SEQFILE of (*)
: rekaman (1) <mark>
05/05/2014
5
Definisi [4]
Setiap rekaman dapat diakses dan dibaca secara berurut primitif akses Perekaman (recording) dapat dilakukan melalui primitif penulisan Catatan: pada suatu arsip sekuensial hanya dapat dilakukan satu modus operasi: diakses/dibaca atau ditulis (pada saat bersamaan).
05/05/2014
6
Primitif Akses [1] ASSIGN Procedure ASSIGN (Input NamaArsip, NamaFisik) { Arsip sekuensial yang namanya dikenal di dalam program sebagai NamaArsip, secara fisik diberi nama NamaFisik I.S. : sembarang F.S.: Arsip dengan NamaArsip pada program siap dipakai }
OPEN Procedure OPEN (Input NamaArsip, ) { Arsip sekuensial siap dibaca. Rekaman pertama yang informasinya ada pada dapat diakses I.S. : sembarang F.S.: informasi pada rekaman pertama siap diakses, dengan mengacu kepada }
05/05/2014
7
Primitif Akses [2] READ Procedure READ (Input NamaArsip, NamaFisik) { Rekaman sesudah rekaman saat ini(current) yang dapat diakses I.S. : bukan merupakan mark, sebut sebagai current_rekaman F.S.: Arsip dimajukan satu rekaman, berisi informasi yang disimpan pada rekaman Sesudah current_rekaman. Mungkin yang baru adalah mark }
CLOSE Procedure CLOSE (Input NamaArsip) { Arsip sekuensial ditutup, tidak dapat diakses maupun ditulisi lagi I.S. : sembarang F.S.: Arsip tidak dapat diproses lagi }
05/05/2014
8
Primitif Penulisan REWRITE Procedure REWRITE (Input/Output NamaArsip) { Arsip sekuensial siap untuk direkam I.S. : sembarang F.S.: Arsip sekuensial yang bernama NamaArsip siap untuk direkam pada posisi pertamanya }
WRITE Procedure WRITE (Input NamaArsip, ) { Data pada direkam pada posisi aktual arsip. Kemudian posisi dimajukan satu. I.S. : arsip sekuensial berada pada posisi yang telah siap menerima rekaman, bukan merupakan mark F.S.: direkam pada posisi yang telah disiapkan, arsip dmajukan satu posisi Jika yang diisikan ke arsip adalah elemen fiktif yang dimaksudkan sebagai mark, maka arsip tidak dapat ditulisi lagi } 05/05/2014
9
Contoh [1]
Sebuah arsip sekuensial berisi data mahasiswa, yang setiap rekamannya memuat data NIM, Nama dan Nilai akhir mahasiswa.
type rekaman : < NIM:integer, Nama : string, Nilai :integer [0..100]> ArsipMhs : SEQFILE of (*) RekMhs : rekaman (1) <999999, '',0>
Domain setiap rekaman : sesuai dengan domain masing-masing rekaman Konstanta : sebuah rekaman, misalnya : <7473001,'Juliette',95> <8690022,'Laura',80>
05/05/2014
10
Contoh [1] - lanjutan Cara akses rekaman pertama : OPEN (ArsipMhs, RekMhs) Cara akses : { NIM ≠ 9999999 } READ (ArsipMhs, RekMhs ) Cara menyiapkan untuk direkam : REWRITE (ArsipMhs)
Cara mengisi : WRITE (ArsipMhs, RekMhs ) {Harga Current } WRITE(ArsipMhs, <7473002,'Davy Rindt',96>) { konstanta } WRITE(ArsipMhs, Rek1) { Rek1 bertype rekaman } Cara mengisi akhir rekaman : WRITE (ArsipMhs, <9999999,'',0>) {Mark}
05/05/2014
11
Contoh [2]
Sebuah arsip sekuensial berisi teks, maka setiap rekamannya adalah satu karakter. Misalnya MARK adalah ' #'
type rekaman : character Dokumen :SEQFILE of (*) CC : rekaman (1) <'#'>
Domain setiap rekaman : character Konstanta : sebuah rekaman, misalnya : <'A'> <'0'> <'#'>
05/05/2014
12
Contoh [2] - lanjutan Cara akses rekaman pertama : OPEN (Dokumen, CC) Cara akses : { CC ≠ '#' } READ (Dokumen, CC) Cara menyiapkan untuk direkam : REWRITE (Dokumen) Cara mengisi : WRITE (Dokumen, CC) {Harga Current } WRITE (Dokumen, <'A'>) { konstanta }
WRITE (Dokumen, Kar) {dari nama lain, Kar bertype rekaman} Cara mengisi akhir rekaman : WRITE (Dokumen, <'#'>) 05/05/2014
13
Pemrosesan Arsip Sekuensial
Jika setiap rekaman harus diproses dengan cara sama, pemrosesan arsip sekuensial dapat dilakukan dengan memakai skema pemrosesan sekuensial dengan mark.
Contoh1: Dibaca sebuah arsip sekuensial bernama
type rekaman : < NIM : integer, ,nilai:integer [0..100] > ArsipMhs: SEQFILE of (*) RekMhs : rekaman (1) <9999999, 99>
05/05/2014
14
Contoh Pemrosesan
Analisa : pemrosesan sekuensial dari elemen arsip sekuensial
Model tanpa MARK, jika i adalah deret yang diproses, i berharga 1,2,3..N EOP adalah NIM=9999999 First_Elmt : OPEN(ArsipMhs, RekMhs ) Next_Elmt : READ(ArsipMhs, RekMhs)
Proses : membaca arsip sambil menghitung nilai rata-rata mahasiswa
05/05/2014
15
Contoh Pemrosesan - lanjutan
05/05/2014
16
Pemrosesan File di Java
Membuka File (izin Akses File) File nama_var_file; nama_var_file = new File(path&nama_file);
Memproses File (Baca/Tulis File)
Baca File InputStream nama_var_stream = new FileInputStream(nama_var_file);
Tulis File OutputStream nama_var_stream = new FileOutputStream(nama_var_file);
Menutup File nama_var_stream.close();
05/05/2014
17
Contoh di Java: ........... File Mahasiswa; Mahasiswa= new File(“C:\Latihan.txt”); //Baca file InputStream fs = new FileInputStream(Mahasiswa); //Tulis File OutputStream fs = new FileOutputStream(Mahasiswa); //Tutup File fs.close(); ........... Ctt: Dalam Java, saat sebuah file dibuat yang mengacu pada file, bukan berarti sebuah file telah terbuka ijin aksesnya. Ijin akses dibuka jika saat telah dikaitkan dengan sebuah stream 05/05/2014 (FileInputStream ato FileOutputStream)
18
Membuat File dalam JAVA Format: try { new File(nama_file).createNewFile(); }catch(Exception e){ } Contoh: try { new File(“Latihan.txt”).createNewFile(); }catch(Exception e){ }
05/05/2014
19
Contoh Program Buat File import java.io; class File1{ public static void main(String[] args){ try { new File(“Latihan.txt”).createNewFile(); }catch(Exception e){ } } }
05/05/2014
20
Mendeteksi Keberadaan File import.java.io; Class File2{ public static void main(String[] args){ File file_cek; file_cek = new File(“Latihan.txt”); if(file_cek.exists()){ System.out.println(“file Latihan.txt sudah ada”); }else{ System.out.println(“file Latihan.txt belum ada”); } } } 05/05/2014
21
Algoritma Konsolidasi
Didefinisikan sebuah sequential file yang terurut, arsip tersebut mengandung kelompok-kelompok data dengan kunci sama yang harus diproses sebagai satu kesatuan.
Ada dua model arsip semacam ini :
05/05/2014
Tanpa separator Dengan separator
22
Tanpa Separator
Artinya kita mengenali adanya kelompok yang lain karena kunci berubah
05/05/2014
23
Tanpa kasus kosong
05/05/2014
24
Tanpa kasus kosong- lanj
05/05/2014
25
Contoh
Diketahui sebuah arsip nilai mahasiswa, Satu mahasiswa dapat mempunyai beberapa buah nilai (karena dalam satu semester mengambil beberapa matakuliah dan setiap mahasiswa tidak sama matakuliahnya). Buat algoritma untuk menghitung nilai rata-rata setiap mahasiswa, dan membuat daftar nilai sederhana, yaitu menuliskan NIM dan nilai rata-rata setiap mahasiswa
05/05/2014
26
Contoh -lanj
05/05/2014
27
Contoh -lanj
05/05/2014
28
Dengan kasus kosong
05/05/2014
29
Dengan kasus kosong-lanj
05/05/2014
30
Contoh
Diketahui sebuah arsip nilai mahasiswa, Satu mahasiswa dapat mempunyai beberapa buah nilai (karena dalam satu semester mengambil beberapa matakuliah dan setiap mahasiswa tidak sama matakuliahnya). Buat algoritma untuk menghitung nilai rata-rata setiap mahasiswa, dan membuat daftar nilai sederhana, yaitu menuliskan NIM dan nilai rata-rata setiap mahasiswa. Selain itu diminta Nilai rata-rata seluruh mahasiswa, jumlah nilai rata-rata setiap mahasiswa dibagi jumlah mahasiswa.
05/05/2014
31
Contoh -lanj
05/05/2014
32
Contoh -lanj
05/05/2014
33
Dengan Separator
Artinya ada rekaman tertentu yang memisahkan satu kelompok dan kelompok lainnya. Separator ini boleh satu rekaman atau lebih dari satu rekaman. Pada contoh berikut, separator adalah "kartu putih"
05/05/2014
34
Algoritma konsolidasi
05/05/2014
35
Algoritma konsolidasi -lanj
05/05/2014
36
Contoh
Diberikan sebuah arsip teks yang dapat diakses sequential huruf per huruf. Hendak dihitung kata yang terpanjang dalam teks tersebut. Diandaikan bahwa teks hanya mengandung huruf dan "blank". Kata adalah sekumpulan huruf yang dipisahkan oleh satu atau beberapa blank.
05/05/2014
37
Contoh -lanj
05/05/2014
38
Contoh -lanj
05/05/2014
39