Algoritma dan Pemrograman Lanjut. Pertemuan Ke-14 Arsip (File) 3

dokumen-dokumen yang mirip
Algoritma dan Pemrograman. Pertemuan Ke-7 Statement Pengendalian 2

Algoritma dan Pemrograman Lanjut. Pertemuan Ke-8 Pengurutan (Sorting) 1

Algoritma dan Pemrograman. Pertemuan Ke-12 Tipe data array/larik 1

Algoritma dan Pemrograman Lanjut. Pertemuan Ke-6 Pencarian (Searching) 1

Algoritma dan Pemrograman. Pertemuan Ke-2 Dasar-dasar Algoritma

Algoritma dan Pemrograman Lanjut. Pertemuan Ke-7 Pencarian (Searching) 2

Algoritma dan Pemrograman. Pertemuan Ke-8 Statement Pengulangan 1

Algoritma dan Pemrograman Lanjut. Pertemuan Ke-5 Rekursif

Algoritma dan Pemrograman. Pertemuan Ke-9 Statement Pengulangan 2

Algoritma dan Pemrograman Lanjut. Pertemuan Ke-3 Record/Struct dan Array Of Record

Algoritma dan Pemrograman. Pertemuan Ke-4 Konsep Tipe Data, Operator Dan Identifier

Algoritma dan Pemrograman Lanjut. Pertemuan Ke-11 Pointer 2

Algoritma dan Pemrograman

Algoritma dan Pemrograman Lanjut. Pertemuan Ke-9 Pengurutan (Sorting) 2

Algoritma dan Pemrograman Lanjut. Pertemuan Ke-2 Array (Larik)

Algoritma dan Pemrograman. Pertemuan Ke-11 Function

Algoritma dan Pemrograman Lanjut. Pertemuan Ke-10 Pointer 1

RENCANA PEMBELAJARAN SEMESTER (RPS)

RENCANA PEMBELAJARAN SEMESTER (RPS)

Algoritma dan Pemrograman Lanjut. Pertemuan Ke-13 Arsip (File) 2

Data Pembanding (B)

Arsip Beruntun. Definisi Arsip Beruntun. Contoh Arsip Beruntun

Algoritma dan Pemrograman. Pertemuan Ke-5 Input dan Output

Algoritma dan Pemrograman. Pertemuan Ke-1 Pengantar Algoritma

SEQUENTIAL FILE. Tujuan Perkuliahan

PROGRAM STUDI SISTEM KOMPUTER

Algoritma Pemrograman

Algoritma Pemrograman

Algoritma Pemrograman

Array. Teknik Informatika Politeknik Negeri Batam

Modul Ke-1 Pertemuan ke-1 Deskripsi: Pemrosesan Sekuensial Larik Nama File: P01-XXX (XXX adalah 3 digit terakhir NPM)

Larik/Array ALGORITMA DAN PEMROGRAMAN [IS ] Dosen: Yudha Saintika, S.T., M.T.I

Pertemuan Ke-2 (Teks Algoritma) Rahmady Liyantanto. S1 Teknik Informatika-Unijoyo

SATUAN ACARA PERKULIAHAN MATA KULIAH PEMROGRAMAN PASCAL * (TK) KODE / SKS: KK /2 SKS

Algoritma Pemrograman

RENCANA PEMBELAJARAN SEMESTER (RPS)

VARIABEL, TIPE DATA, KONSTANTA, OPERATOR DAN EKSPRESI. Pemrograman Dasar Kelas X Semester 2

Modul 1 Mesin Karakter 1

algoritma & pemrograman

Algoritma & Pemrograman 1. Muhamad Nursalman Pendilkom/Ilkom Universitas Pendidikan Indonesia

GARIS-GARIS BESAR PROGRAM PENGAJARAN (GBPP)

CCH1A4 / Dasar Algoritma & Pemrogramanan

SATUAN ACARA PERKULIAHAN (SAP)

PENGULANGAN Bagian 1 : Notasi. Tim Pengajar KU1071 Sem

Algoritma Pemrograman

UNIVERSITAS NEGERI YOGYAKARTA F A K U L T A S M I P A

RENCANA PEMBELAJARAN SEMESTER (RPS)

DASAR PEMROGRAMAN. Institut Teknologi Sumatera

Algoritma dan Pemrograman File Sekuensial. Oleh: Eddy Prasetyo N 05/05/2014 1

1. Inggriani Liem Catatan Kuliah Algoritma & Pemrograman, Jurusan Teknik Informatika ITB

Algoritma Pemrograman

Algoritma dan Struktur Data I Mia Fitriawati, S.Kom, M.Kom

CCH1A4 / Dasar Algoritma & Pemrogramanan

& PEMROGRAMAN. Alex De Kweldju, S.Kom D3 Teknik Komputer Fakultas Teknik Universitas Negeri Papua

Definisi Arsip Beruntun

RENCANA PEMBELAJARAN SEMESTER (RPS)

Daftar field MODUL 13 RECORD

Kuliah ke : 4 Algoritma & Stuktur Data. Pengurutan (Sorting)

MODUL PRAKTIKUM PERCABANGAN DAN PENGULANGAN

Teori Algoritma TIPE DATA

PENCARIAN BERUNTUN (SEQUENTIAL SEARCHING)

MODUL PRAKTIKUM STRUKTUR DATA Modul ke-1, Pertemuan ke-1 Nama file : P01-XXX (XXX adalah 3 digit terakhir NIM) Deskripsi: Senarai, Traversal

CCH1A4 / Dasar Algoritma & Pemrogramanan

Algoritma Pemrograman

1. Inggriani Liem Catatan Kuliah Algoritma & Pemrograman, Jurusan Teknik Informatika ITB

I. KATA PENGANTAR. Modul Algoritma Pemrograman. Modul Ke-4 - Hal 1

SUFAJAR BUTSIANTO, SKOM, MKOM ARSIP BERUNTUN (SEQUENTIAL FILE)

TIPE DATA dan OPERATOR

ALGORITMA TUGAS 2 RESUME ALGORITMA PERCABANGAN DAN ALGORITMA PERULANGAN. Disusun Oleh : Sakina Mawardah Teknik Informatika. Dosen : Asep M. Yusuf, S.

Algoritma dan Struktur Data

Algoritma Pencarian String dalam Pemilihan Anggota Sebuah Organisasi

PENCARIAN SOLUSI TTS ANGKA DENGAN ALGORITMA RUNUT BALIK BESERTA PENGEMBANGANNYA

IF32222 STRUKTUR DATA TIPE DATA. Oleh : Andri Heryandi, M.T.

Menghapus Pointer Statement yang digunakan untuk menghapus pointer adalah Dispose, yang mempunyai bentuk umum : Dispose(peubah) ;

Algoritma Pemrograman

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA SILABUS ALGORITMA PEMROGRAMAN

STRUCTURED ENGLISH DAN PSEUDOCODE

RENCANA PEMBELAJARAN SEMESTER (RPS)

c. Hasil pencarian berupa nilai Boolean yang menyatakan status hasil pencarian. Versi 1 (Pembandingan elemen dilakukan sebagai kondisi pengulangan)

Pengurutan (Sorting) Keuntungan Data Terurut. Pengurutan Terbagi Dua Kelompok:

TIPE, NAMA, DAN NILAI

Algoritma. Menurut Kamus Besar Bahasa Indonesia Algoritma adalah urutan logis pengambilan putusan untuk pemecahan masalah.

Algoritma Brute Force (Bagian 1) Oleh: Rinaldi Munir

Bahasa Pemrograman- TIS SKS

Bambang Heru S Departemen Teknik Kimia Universitas Indonesia

Penggunaan Graf dalam Pemodelan Matematis Permainan Delapan Jari

Pengenalan Pascal. Sejarah Singkat Pascal

Array (Tabel) Tim Pengajar KU1071 Sem /11/3 TW/KU1071 1

MODUL PRAKTIKUM ALGORITMA PEMROGRAMAN TEKNIK INFORMATIKA

MODUL IV PENCARIAN DAN PENGURUTAN

Pertemuan Ke- 6 dan 7 Pengulangan atau Looping. Rahmady Liyantanto. liyantanto.wordpress.com. S1 Teknik Informatika-Unijoyo

Pertemuan 4 ELEMEN-ELEMEN BAHASA PEMROGRAMAN

CCH1A4 / Dasar Algoritma & Pemrogramanan

BAB 1 PENGANTAR KE STRUKTUR DATA

STRUKTUR DASAR ALGORITMA

UJIAN TENGAH SEMESTER GANJIL TAHUN STMIK AMIKOM YOGYAKARTA

Algoritma Pemrograman

Chapter 3.2 : Tipe, Nama dan Nilai

Dasar Komputer & Pemrogaman 2A

Pencarian pada Array. Tim PHKI Modul Dasar Pemrograman Fakultas Ilmu Komputer UDINUS Semarang

Transkripsi:

Algoritma dan Pemrograman Lanjut Pertemuan Ke-14 Arsip (File) 3 Disusun Oleh : Wilis Kaswidjanti, S.Si.,M.Kom. Jurusan Teknik Informatika Fakultas Teknologi Industri Universitas Pembangunan Nasional Veteran Yogyakarta

Algoritma dan Pemrograman Lanjut Judul Materi : Arsip (File) 3 Materi : Materi ini membahas tipe data file, dan prosesproses konsolidasi, penggabungan (merging) dua file, updating data file dan spliting. Tujuan Instruksional Khusus : 1. Mendefinisikan dan menggunakan tipe data file 2. Mendeskripsikan tipe data file 3. Menggunakan tipe data file 4. Menjelaskan fungsi-fungsi pada tipe data file 5. Mengimplementasikan fungsi-fungsi file untuk memanipulasi file Referensi : Buku Teks Munir, Rinaldi (2005), Algoritma dan Pemrograman dalam Bahasa Pascal dan C, Buku 2, Edisi Ketiga, Penerbit Informatika Bandung, Bab 4, hal 115-168. Charibaldi, N. (2004), Modul Kuliah Algoritma Pemrograman II, Edisi Kedua, Yogyakarta Buku Acuan/Referensi Brassard, Gilles (1999), Fundamentals of algorithma, PrinteceHall. Jarne, Stroustrup B. (1997), C++ Programming language, AT &T. Kristanto, Andri (2003), Algoritma pemrograman C++, Graha Ilmu. Schildt,Herbert (2000), The Complete Reference C++, McGraw-Hill. Sedgewick, R. (2000), Algoritma Third edition In C part 5, Addison Wesley.

Arsip (File) 3 PENDAHULUAN Beberapa proses di bawah ini merupakan proses yang terjadi pada file, seperti konsolidasi, penggabungan (merging) dua file, updating data file dan spliting. ISI A. Algoritma Konsolidasi Algoritma Konsolidasi adalah pengelompokan data dengan kunci yang sama yang harus diproses sebagai satu kesatuan. Contoh : Diketahui sebuah Arsip Nilai Mahasiswa, satu mahasiswa dapat mempunyai beberapa buah nilai (karena dalam satu semester mengambil beberapa matakuliah, dan tiap mahasiswa bisa berbeda matakuliah). Buatlah Algoritma untuk menghitung nilai rata-rata tiap mahasiswa, dan membuat daftar nilai yang lebih sederhana, yaitu menuliskan NIM dan nilai rata-rata tiap mahasiswa. NIM Nilai NIM Nilai Rata-rata 70001 50 70001 65 70001 80 70002 69 70001 60 70003 80 70001 70 70004 53 70002 55 70002 75 70002 65 70002 86 70002 64 70003 77 70003 83 70004 45 70004 54 70004 60

Algoritma Konsolidasi {Kondisi awal : ArsipMhs sudah berisi NIM dan nilai} {Kondisi akhir : record sudah dikelompokkan berdasarkan NIM yang sama, dengan nilainya adalah nilai rata-rata} Type DataMhs : Record < NIM : integer Nilai : real > ArsipMhs1, ArsipMhs2 : seqfile of DataMhs Mhs : DataMhs CurrentNim, JumNil, nmk : integer Rata : real Function Mark(Input Mhs : DataMhs) Boolean {tanda akhir = <999, xxxxx,99.9>} Open(ArsipMhs1,1) Open(ArsipMhs2,2) Fread(ArsipMhs1, Mhs) If (Mark(Mhs) = true) then // if (Mhs.NIM ==9999) then Output( Arsip kosong ) Else While (Mark(Mhs) = false) do // (Mhs.NIM <> 9999) JumNil 0 nmk 1 currentnim Mhs.NIM {record1 dari ArsipMhs1} Repeat JumNil JumNil + Mhs.Nilai Fread(ArsipMhs1,Mhs) nmk nmk + 1 Until (currentnim <> Mhs.NIM) Rata JumNil/nMK Mhs.NIM currentnim Mhs.Nilai Rata Fwrite(ArsipMhs2, Mhs) Output(currentNIM,Rata) Endwhile Mhs.NIM 9999 Mhs.Nilai 999 Fwrite(Arsip2,Mhs) {mark} EndIf Close(ArsipMhs1) Close(ArsipMhs2) B. Pemrosesan Dua Arsip Beruntun 1. Merging

Merging adalah penggabungan dua buah file yang tipe recordnya sama. Untuk melakukan merging ada dua cara. Cara yang paling sederhana adalah data file kedua ditambahkan setelah record terakhir file pertama, sehingga membentuk file baru. Cara ini tidak dapat dipakai jika field kunci kedua file sudah terurut dan dikehendaki file gabungan yang field kuncinya juga terurut. Contoh : NIM Nama NIM Nama NIM Nama 70001 Adi 70002 Yudi 70001 Adi 70003 Budi 70009 Eka 70002 Yudi 70004 Susi 70010 Bima 70003 Budi 70006 Anti 70004 Susi 70008 Doni 70006 Anti 70008 Doni 70009 Eka 70010 Bima File ArsipMhs1 File ArsipMhs2 File ArsipMhs3 Algoritma MergingSambung {Menggabungkan dua buah arsip beruntun yaitu ArsipMhs1 dan ArsipMhs2, menjadi sebuah arsip baru yaitu ArsipMhs3, dengan cara semua record arsip kedua disambungkan setelah record terakhir arsip pertama} {Kondisi awal : arsip pertama dan kedua sudah berisi data} {Kondisi akhir : arsip'ketiga berisi hasil sambungan kedua arsip} Type DataMhs : Record <NIM : Integer, Nama: String> ArsipMhsl, ArsipMhs2, ArsipMhs3 : SeqFile of DataMhs Mhs : DataMhs Function Mark(Input Mhs : DataMhs) Boolean Open(ArsipMhs1, 1) Open(ArsipMhs2, 1) Open(ArsipMhs3, 2) FRead(ArsipMhs1, Mhs) While (Mark(Mhs) = false) Do FWrite(ArsipMhs3, Mhs) FRead(ArsipMhs1, Mhs) FRead(ArsipMhs2, Mhs)

While (Mark(Mhs) = false) Do FWrite(ArsipMhs3, Mhs) FRead(ArsipMhs2, Mhs) Mhs.NIM 99999 Mhs.Nama xxxxx FWrite(ArsipMhs3, Mhs) Close(ArsipMhsl) Close(ArsipMhs2) Close(ArsipMhs3) Algoritma Merging2 {versi And} {Menggabungkan dua buah arsip beruntun yaitu ArsipMhs1 dan ArsipMhs2 yang sudah terurut, menjadi sebuah arsip baru yaitu ArsipMhs3 yang juga terurut} {Kondisi awal : arsip pertama dan kedua sudah berisi data} {Kondisi akhir : arsip ketiga berisi hasil merging kedua arsip} Type DataMhs : Record <NIM : Integer, Nama : String> ArsipMhsl, ArsipMhs2, ArsipMhs3 : SeqFile of DataMhs Mhs1, Mhs2 : DataMhs Function Mark(Input Mhs : DataMhs) Boolean Open(ArsipMhs1, 1) Open(ArsipMhs2, 1) Open( ArsipMhs3, 2) FRead(ArsipMhsl, Mhs1) FRead(ArsipMhs2, Mhs2) While (Mark(Mhsl) = false) And (Mark(Mhs2) =false) Do If (Mhsl.NIM <= Mhs2.NIM) Then FWrite(ArsipMhs3, Mhsl) FRead(ArsipMhsl, Mhsl) Else FWrite(ArsipMhs3, Mhs2) FRead(ArsipMhs2, Mhs2) Endif {Mark(Mhs 1) = true atau Mark(Mhs2) = true} {salin record yg tersisa, pada ArsipMhs 1 atau ArsipMhs2} {jikayg tersisa adalaharsipmhsi}. While (Mark(Mhsl) = false) Do FWrite(ArsipMhs3, Mhs1)

FRead(ArsipMhsl, Mhsl) {jika yg tersisa adalah ArsipMhs2} While (Mark(Mhs2) = false) Do FWrite(ArsipMhs3, Mhs2) FRead(ArsipMhs2, Mhs2) FWrite(ArsipMhs3, <99999, 'xxxxx'>) Close(ArsipMhsl) Close(ArsipMhs2) Close(ArsipMhs3) Algoritma Merging3 {versi Or} {Menggabungkan dua buah arsip beruntun yaitu ArsipMhs1 dan ArsipMhs2yang sudah terurut, Menjadi sebuah arsip baru yaitu ArsipMhs3 yang juga terurut} {Kondisiawal : arsip pertama dan kedua sudah berisi data} {Kondisiakhir : arsip ketiga berisi hasil merging kedua arsip} Type DataMhs : Record <NIM : Integer, Nama: String> ArsipMhsl, ArsipMhs2, ArsipMhs3 : SeqFile of DataMhs Mhs 1, Mhs2 : DataMhs Function Mark(Input Mhs : DataMhs) Boolean Open(ArsipMhsl, 1) Open(ArsipMhs2, 1) Open(ArsipMhs3, 2) FRead(ArsipMhs1, Mhs1) FRead(ArsipMhs2, Mhs2) While (Mark(Mhsl) = false) Or (Mark(Mhs2) = false) Do If (Mhsl.NIM <= Mhs2.NIM) Then FWrite(ArsipMhs3, Mhs1) FRead(ArsipMhsl, Mhsl) Else FWrite(ArsipMhs3, Mhs2) FRead(ArsipMhs2, Mhs2) Endif {Mark(Mhs 1) = true dan Mark(Mhs2) = true} FWrite(ArsipMhs3, <99999, 'xxxxx'>) Close(ArsipMhs1) Close(ArsipMhs2) Close(ArsipMhs3)

2. Updating Updating adalah proses editing harga suatu record (field key tidak diedit) pada file master dengan data dari file transaksi. Berikut ini adalah algoitma umum untuk meremajakan record pada file master (bersifat beruntun, nilai field keynya terurut naik tetapi bisa tidak unik). Artinya bahwa suatu record pada file master dapat mengalami satu atau beberapa kali peremajaan. Contoh : Peremajaan File Saldo tabungan pada Bank, dengan perjanjian jika nilai uang pada file update berharga negatif, berari pengambilan, tetapi jika nilai uang pada File Update berharga positif, berarti transaksi penabungan. File Master File Transaksi File New Master NoRek Saldo NoRek Saldo NoRek Saldo 001 100000 001 +5000 001 103000 003 150000 001-2000 003 151000 004 175000 003 +1000 004 176000 006 180000 004-1500 006 185500 007 210000 004 +10000 007 207000 008 112000 004-7500 008 112000 009 135000 006 +10500 009 135000 010 210000 006-5000 010 210000 999 0 007-3000 999 0 999 0 Contoh 1 : Updating {judul algoritma} {Mengubah salah satu isi field dari file master berdasarkan data dari file transaksi lalu simpan hasil editing ke file new master} {Kondisi awal : suatu variabel sudah bemilai isi dari field key pada posisi record yg akan diubah, field key sudah terurut naik} {kondisiakhir : file new master sudah berisi data dari hasil editing file master berdasarkan file transaksi1} Type DataSaldo : Record

< NoRek : Integer, Saldo : Longint > Master, Transaksi, NewMaster : SeqFile of DataSaldo Nasabah1,Nasabah2 : DataSaldo NewSaldo : Longint FunctionMark(InputNasabah : DataSaldo) Boolean Open(Master, 1) Open(Transaksi, 1) Open(NewMaster, 2) FRead(Master, Nasabah1) FRead(Transaksi, Nasabah2) While (Mark(Nasabahl) = false) Do While (Nasabah2.NoRek < Nasabahl.NoRek) and (Mark(Nasabah2) = false) Do FRead(Transaksi, Nasabah2) {skip record dari file trans} If (Nasabah2.NoRek = Nasabahl.NoRek) Then NewSaldo Nasabah1.Saldo {yg akan diedit} While (Nasabah2.NoRek = Nasabahl.NoRek) and (Mark(Nasabah2) = false) Do NewSaldo NewSaldo+ Nasabah2.Saldo FRead(Transaksi, Nasabah2) Nasabah1.Saldo NewSaldo FWrite(NewMaster, Nasabah1) Else FWrite(NewMaster, Nasabahl). Endif FRead(Master, Nasabah1) FWrite(NewMaster, <999, 0>) Close(Master) Close(Transaksi) Close(NewMaster) Contoh2 : Misalkan akan diubah IPK mahasiswa dengan NIM tertentu. Nilai IPK yg baru dibaca dari piranti masukan. Langkah-langkahnya adalah sebagai berikut : (i). Buka arsip Master untuk dibaca (ii). Buka arsip Sementara untuk ditulis

(iii). Baca dan salin record dari arsip Master sampai ditemukan NIM dari mahasiswa yg IPK-nya akan diubah. (iv). Baca pada arsip Master setiap record yg tersisa, lalu tulis ke arsip Sementara. (v). Buka arsip Sementar untuk dibaca. (vi). Buka arsip Master untuk ditues. (vii). Baca seluruh record dari arsip Sementara, lalu tuliskan ke arsip Master. Type DataMhs: Record < NIM : Integer, Nama: String, IPK : Real> Master, Sementara : SeqFile of DataMhs Function Mark(Input Mhs : DataMhs) Boolean Procedure MutakhirkanData(Input x : Integer) {Kondisi awal : x sudah berisi NIM mahasiswa yang akan diubah IPK-nya, x diisi dari piranti masukan} {Kondisi akhir : IPK yang NIM-nya = x, sudah diubah menjadi IPK yang baru} lokal Mhs : DataMhs IPKbaru : Real Open(Master, 1) Open(Sementara, 2) FRead(Master, Mhs) {baca record pertama dari file Master} {cari record dengan NIM = x} While (Mhs.NIM <> x) And (Mark(Mhs) = false) Do FWrite(Sementara, Mhs) {catat record yg <> x } FRead(Mater, Mhs) {ambillagi record yg lain} If (Mhs.NIM = x) Then {tampilkan data yg lama} Output(Mhs.NIM, Mhs.Nama, Mhs.IPK) Input(IPKBaru) {masukkan IPK yg baru} Mhs.IPK IPKBaru FWrite(Sementara, Mhs) FRead(Master, Mhs) {baca record selanjutnya} Else Output(x,, tidak ada pada arsip master') Endif {salin record yg terletak sesudah record x}

While (Mark(mhs) = false) Do FWrite(Sementara, Mhs) FRead(Master, Mhs) Close(Master) Close(Sementara) {buka kennbali kedua arsip untuk keperluan berbeda, yaitu untuk nnenyalin isi arsip Sennentara ke arsip Master} Open(Sementara, 1) Open(Master2 ) FRead(Sementara, Mhs) While (Mark(mhs) = false) Do FWrite(Master, Mhs) FRead(Sementara, Mhs) FWrite(Master, <99999, 'xxxxx', 9.99>) Close(Sementara) Close(Master) 3. Spliting Spliting adalah pemecahan sebuah file menjadi dua atau lebih file baru. Algoritmanya tergantung dari kriteria pemecahannya. Contoh : Memisahakan file nilai suatu matakuliah suatu kelas berdasarkan yang nilai>=55 dan yang nilai < 55. NIM Nilai NIM Nilai - 80-80 - 42-60 - 60-56 - 56-55 - 55-71 - 71-65 38 99999 999 65 40 NIM Nilai 54-42 99999 999-38 - 40-54 99999 999

PENUTUP Algoritma Konsolidasi adalah pengelompokan data dengan kunci yang sama yang harus diproses sebagai satu kesatuan. Merging adalah penggabungan dua buah file yang tipe recordnya sama. Updating adalah proses editing harga suatu record (field key tidak diedit) pada file master dengan data dari file transaksi. Spliting adalah pemecahan sebuah file menjadi dua atau lebih file baru. Algoritmanya tergantung dari kriteria pemecahannya. SOAL-SOAL Implementasikan algoritma konsolodasi, merging, updating dan spliting dengan bahasa pemrograman C++.

Algoritma Spliting Type DataMhs : Record <NIM : Integer, Nilai: Integer> ArsipMhsl, ArsipMhs2, ArsipMhs3 : SeqFile of DataMhs Mhs : DataMhs Function Mark(Input Mhs : DataMhs) Boolean Open(ArsipMhs1, 1) Open(ArsipMhs2, 2) Open(ArsipMhs3, 2) FRead(ArsipMhs1, Mhs) While (Mark(Mhs) = false) Do If (Mhs.Nilai >= 55) Then FWrite(ArsipMhs2, Mhs) FRead(ArsipMhsl, Mhs) Else FWrite(ArsipMhs3, Mhs) FRead(ArsipMhs1, Mhs) Endif Mhs.NIM 99999 Mhs.Nilai 999 FWrite(ArsipMhs2, Mhs) FWrite(ArsipMhs3, Mhs) Close(ArsipMhs1) Close(ArsipMhs2) Close(ArsipMhs3)