Anda di halaman 1dari 12

Praktikum Algoritma dan Pemrograman II

MODUL V

SEQUENTIAL FILE (BAGIAN 2)

Pertemuan :7
Waktu : 2 x 60 menit (di Laboratorium)

5.1 Tujuan Modul V


Setelah mahasiswa mempelajari materi ini, diharapkan dapat :
1. menggunakan perintah dasar pada file dengan bahasa C yaitu : merge, split,
dan update pada file

5.2 Landasan Teori

5.2.1 Merge File


Penggabungan file atau merging adalah proses penggabungan dua buah
arsip sequential ke dalam sebuah arsip baru. Arsip-arsip yang akan digabung
mungkin belum terurut (berdasarkan field tertentu) atau mungkin sudah terurut.
Ada beberapa cara penggabungan yang dapat dilakukan, yaitu :
a. Penggabungan file dengan cara penyembungan (disambung di belakang)
Cara ini merupakan cara yang paling sederhana. Misalkan ada arsip Mhs1
dan Mhs2 sudah terurut menaik berdasarkan field NIM. Kita ingin
menggabungkan arsip Mhs1 dan Mhs2 di dalam Mhs3 tanpa memperhatikan
urutan hasil penggabungan.
Contoh :
Arsip Mhs1:
359601 ’Adi Purwanto’ 3.82
359604 ’Fitria Susanti’ 2.97
359605 ’Dewi Ramadhani’ 2.74
359606 ’Andrie Yanto 3.02

Arsip Mhs2:
359603 ’Irwanti Sukma’ 2.81
359609 ’Melati Rahmi’ 3.01
359614 ’Gus Hamid’ 2.46

Laboratorium Software Engineering Versi/Revisi : 2/1 Halaman : 5-1


Praktikum Algoritma dan Pemrograman II

Arsip Mhs3:
359601 ’Adi Purwanto’ 3.82
359604 ’Fitria Susanti’ 2.97
359605 ’Dewi Ramadhani’ 2.74
359606 ’Andrie Yanto 3.02
359603 ’Irwanti Sukma’ 2.81
359609 ’Melati Rahmi’ 3.01
359614 ’Gus Hamid’ 2.46

b. Penggabungan file dengan penataan isinya (hasil penyambungan terurut


berdasarkan field tertentu)
Misalkan ada arsip Mhs1 dan Mhs2 sudah terurut menaik berdasarkan field
NIM. Kita ingin arsip hasil penggabungan Mhs1 dan Mhs2 juga terurut
menaik di dalam arsip Mhs3. Contoh :
Arsip Mhs1:
359601 ’Adi Purwanto’ 3.82
359604 ’Fitria Susanti’ 2.97
359605 ’Dewi Ramadhani’ 2.74
359606 ’Andrie Yanto 3.02

Arsip Mhs2:
359603 ’Irwanti Sukma’ 2.81
359609 ’Melati Rahmi’ 3.01
359614 ’Gus Hamid’ 2.46

Arsip Mhs3:
359601 ’Adi Purwanto’ 3.82
359603 ’Irwanti Sukma’ 2.81
359604 ’Fitria Susanti’ 2.97
359605 ’Dewi Ramadhani’ 2.74

Laboratorium Software Engineering Versi/Revisi : 2/1 Halaman : 5-2


Praktikum Algoritma dan Pemrograman II

359606 ’Andrie Yanto 3.02


359609 ’Melati Rahmi’ 3.01
359614 ’Gus Hamid’ 2.46

Berdasarkan ilustrasi di atas, untuk menggabungkan dua buah file tersebut


perlu dilakukan langkah-langkah berikut :
1. Baca data di arsip Mhs1 dan Mhs2
2. Bandingkan kedua data tersebut,
a. Bila nim di arsip Mhs1 lebih kecil dari nim di arsip Mhs2 maka data
di arsip Mhs1 direkam ke arsip Mhs3 dan selanjutnya baca lagi nim
di arsip Mhs1
b. Bila nim di arsip Mhs1 lebih besar atau sama dengan nim di arsip
Mhs2 maka data di arsip Mhs2 direkam ke arsip Mhs3 dan
selanjutnya baca lagi nim di arsip Mhs2
3. Selanjutnya kembali ke langkah satu sampai dengan data di kedua file
habis.

Untuk menentukan kondisi npm di arsip Mhs1 dan arsip Mhs2 telah habis
dapat digunakan hubungan relasi AND atau OR, sehingga akan didapatkan
dua bentuk algoritma.
Selain itu apabila terdapat data nilai yang sama maka dapat pula dibatasi
hanya satu nilai yang sama yang direkam, sehingga pada langkah point 2.b.
perlu dikembangkan

5.2.2 Split File


Splitting adalah pemecahan atau pemisahan sebuah arsip menjadi dua buah
atau lebih arsip. Algoritmanya tergantung pada kriteria pemecahan/pemisahannya.

Contoh Kasus :
Diketahui sebuah file pegawai yang terurut berdasarkan NIP, maka lakukan
pemisahan file pegawai tersebut sebagai berikut :
- menjadi beberapa arsip sesuai dengan kode golongan
- menjadi dua buah file yaitu pegawai dengan NIP di bawah 100 dan lebih besar
sama dengan 100
Ilustrasi file sumber :
NIP GOL
001 B
030 B
057 C
095 A
102 B
135 C
… ..

Laboratorium Software Engineering Versi/Revisi : 2/1 Halaman : 5-3


Praktikum Algoritma dan Pemrograman II

Ilustrasi file hasil dari kasus pertama :


NIP GOL NIP GOL NIP GOL
001 B 057 C 095 A
030 B 135 C
102 B
… … …
Ilustrasi file hasil dari kasus kedua :
NIP GOL NIP GOL
001 B 102 B
030 B 135 C
057 C
095 A …

Berdasarkan contoh kasus tersebut maka proses pemisahan dapat dilakukan


dengan cara memenggal urutan data pada file sumber atau menyeleksi data mana
yang akan dipisahkan ke file B dan data mana yang akan dipisahkan ke file C.

5.2.3 Update file


Updating adalah mengubah harga rekaman yang ada pada sebuah master file
dengan data dari transaction file. Meremajakan rekaman dari sebuah sequential
file yang terurut dengan key unik (yang biasanya disebut sebagai Master File),
dilakukan terhadap rekaman yang ada berdasarkan sequential file lain yaitu
(Update File/Transaction File), dengan key yang tidak unik. Satu rekaman pada
Master File dapat mengalami satu atau beberapa kali peremajaan. Hasil
peremajaan dilakukan langsung terhadap file master.

Hasil peremajaan pada file master akan menimbulkan :


• Pengurangan atau penambahan nilai data rekaman
• Penambahan data rekaman
• Pengurangan data rekaman

Contoh File Sumber :


Master : <1,20>, <3,12>, <4,7>, <5,10>
Update1 : <1,3>, <1,-10>, <4,5>, <5,-2>, <5,1>
Update2 : <1,-10>, <3,-3>, <6,5>, <7, 4>

Contoh File Hasil Updating :


a. Master_Baru1 : <1,13>, <3,12>, <4,12>, <5,9> {berdasarkan updateing
1}
b. Master_Baru2 : <1,10>, <3,9> <4,7>, <5,10>, <6,5>, <7,4>
{berdasarkan updateing 2}

Laboratorium Software Engineering Versi/Revisi : 2/1 Halaman : 5-4


Praktikum Algoritma dan Pemrograman II

5.2.4 Contoh Penyelesaian Kasus

1. penggabungan file mhs1 dan mhs2 ke dalam file mhs3 disambung tanpa
terurut

Notasi algoritma Bahasa C


Program Gabung Arsip Mahasiswa #include <stdio.h>

Kamus : typedef struct{


Type datamhs : record <nim : long nim;
integer, nama : string, ip : real> char nama[25];
float ip;
Mhs1 : sequential of } datamhs;
*) RekMhs1 : datamhs datamhs RekMhs1, RekMhs2, RekMhs3;
1) <9999, “”, 999.999> FILE *Mhs1, *Mhs2, *Mhs3;
Mhs2 : sequential of
*) RekMhs2 : datamhs main(){
1) <9999, “”, 999.999> Mhs1=fopen(“mhs1.dat”, “rb”);
Mhs3 : sequential of Mhs2=fopen(“mhs2.dat”, “rb”);
*) RekMhs3 : datamhs Mhs3=fopen(“mhs3.dat”, “wb”);
1) <9999, “”, 999.999>
while(!feof(Mhs1)){
fread(&RekMhs1,
Algoritma : sizeof(RekMhs1), 1, Mhs1);
open(Mhs1, RekMhs1) fwrite(&RekMhs1,
open(Mhs2, RekMhs2) sizeof(RekMhs1), 1, Mhs3);
rewrite(Mhs3) }

while not eof(Mhs1) while(!feof(Mhs2)){


do fread(&RekMhs2,
read(Mhs1, RekMhs1) sizeof(RekMhs2), 1, Mhs2);
write(Mhs3, RekMhs1) fwrite(&RekMhs2,
endwhile sizeof(RekMhs2), 1, Mhs3);
}
while not eof(Mhs2)
do fclose(Mhs1);
read(Mhs2, RekMhs2) fclose(Mhs2);
write(Mhs3, RekMhs2) fclose(Mhs3);
endwhile }

close(Mhs1)
close(Mhs2)
close(Mhs3)

2. penggabungan file mhs1 dan mhs2 ke dalam file mhs3 disambung terurut
berdasarkan nim

Notasi algoritma Bahasa C


Program Gabung Arsip Mahasiswa #include <stdio.h>

Kamus : typedef struct{


Type datamhs : record <nim : long nim;
integer, nama : string, ip : real> char nama[25];
float ip;
Mhs1 : sequential of } datamhs;
*) RekMhs1 : datamhs datamhs RekMhs1, RekMhs2, RekMhs3;
1) <9999, “”, 999.999> FILE *Mhs1, *Mhs2, *Mhs3;

Laboratorium Software Engineering Versi/Revisi : 2/1 Halaman : 5-5


Praktikum Algoritma dan Pemrograman II

Mhs2 : sequential of
*) RekMhs2 : datamhs main(){
1) <9999, “”, 999.999> Mhs1=fopen("mhs1.dat", "rb");
Mhs3 : sequential of Mhs2=fopen("mhs2.dat", "rb");
*) RekMhs3 : datamhs Mhs3=fopen("mhs3.dat", "wb");
1) <9999, “”, 999.999>
fread(&RekMhs1, sizeof(RekMhs1),
1, Mhs1);
Algoritma : fread(&RekMhs2, sizeof(RekMhs2),
open(Mhs1, RekMhs1) 1, Mhs2);
open(Mhs2, RekMhs2)
rewrite(Mhs3) while(!feof(Mhs2) || !feof(Mhs1))
{
while not eof(Mhs1)or not eof(Mhs2) if (feof(Mhs1)){
do fwrite(&RekMhs2,
if(eof(Mhs1)) then sizeof(RekMhs2), 1, Mhs3);
read(Mhs2, RekMhs2) fread(&RekMhs2,
write(Mhs3, RekMhs2) sizeof(RekMhs2), 1, Mhs2);
else if (eof(Mhs2)) then }else if (feof(Mhs2)){
read(Mhs1, RekMhs1) fwrite(&RekMhs1,
write(Mhs3, RekMhs1) sizeof(RekMhs1), 1, Mhs3);
else if(RekMhs1.nim < fread(&RekMhs1,
RekMhs2.nim) then sizeof(RekMhs1), 1, Mhs1);
read(Mhs1, RekMhs1) }else if(RekMhs1.nim <=
write(Mhs3, RekMhs1) RekMhs2.nim){
else fwrite(&RekMhs1,
read(Mhs2, RekMhs2) sizeof(RekMhs1), 1, Mhs3);
write(Mhs3, RekMhs2) fread(&RekMhs1,
endif sizeof(RekMhs1), 1, Mhs1);
endwhile }
else
close(Mhs1) {
close(Mhs2) fwrite(&RekMhs2,
close(Mhs3) sizeof(RekMhs2), 1, Mhs3);
fread(&RekMhs2,
sizeof(RekMhs2), 1, Mhs2);
}
}

fclose(Mhs1);
fclose(Mhs2);
fclose(Mhs3);
}
3. Pemisahan file pegawai berdasarkan NIP < 100 dan NIP >= 100
Notasi algoritma Bahasa C
Program Pemisahan file pegawai #include <stdio.h>

Kamus : Typedef struct{


Type Rekaman:<NIP : integer, GOL : Int nip;
Char > Char gol;
File_Pegawai : Sequential File of } Rekaman;
(*) RekPeg : Rekaman Rekaman RekPeg, RekB, RekC;
(1) : <0,’’> FILE *File_Pegawai, *File_B,
File_B : Sequential File of *File_C;
(*) RekB : Rekaman
(1) : <0,’’> Main(){
File_C : Sequential File of File_Pegawai=fopen(“data.dat”,
(*) RekC : Rekaman “rb”);
(1) : <0,’’> File_B=fopen(“dataA.dat”, “wb”);
File_C=fopen(“dataB.dat”, “wb”);
Algoritma :
If (eof(File_Pegawai){

Laboratorium Software Engineering Versi/Revisi : 2/1 Halaman : 5-6


Praktikum Algoritma dan Pemrograman II

open(File_Pegawai,RekPeg) Printf(“File Kosong”);


rewrite(File_B) }else{
rewrite(File_C) Do{
if eof(File_Pegawai)then fread(&RekPeg,
Output (“File Kosong”) sizeof(RekPeg), 1, File_Pegawai);
else if (RekPeg.nip < 100){
repeat fwrite(&RekPeg,
if (RekPeg.NIP < 100)then sizeof(RekPeg), 1, File_B);
write(File_B,RekPeg) }else if (RekPeg.nip >= 100){
else if (RekPeg.NIP >= 100)then fwrite(&RekPeg,
write(File_C,RekPeg) sizeof(RekPeg), 1, File_C);
endif }
read(File_Pegawai,RekPeg) }while (!eof(File_Pegawai));
until eof(File_Pegawai) }
close(File_Pegawai) fclose(File_Pegawai)
close(File_B) fclose(File_B)
close(File_C) fclose(File_C)
}

5.3 Praktikum V
5.3.1 Tugas Pendahuluan V
Didefinisikan sebuah sequential file data buku di Perpustakaan ”Cinta Buku”
sebagai berikut :
File Buku di Perpustakaan ”Cinta Buku”
Kode Buku Jenis Harga Sewa Stok
1021 1 Rp. 2.500 15
1022 1 Rp. 2.300 3
1024 1 Rp. 2.700 20
2023 2 Rp. 4.900 1
2025 2 Rp. 4.700 10
2026 2 Rp. 4.500 4
3021 3 Rp. 500 20
3025 3 Rp. 400 30
3027 3 Rp. 900 25

1. Berdasarkan file Buku tersebut, buat 3 algoritma pemisahan file tersebut


menjadi:
a. 3 file yang dikelompokkan atas: Jenis (1, 2, 3)
b. 2 file yang dikelompokkan atas: Harga Sewa ≥ Rp. 1.000 dan harga sewa
< Rp. 1.000
c. 2 file yang dikelompokkan atas: Jumlah stok ≥ 10 dan jumlah stok < 10

2. Diketahui juga file Buku2 berikut.


Kode Buku Jenis Harga Sewa Stok
1025 1 Rp. 2.000 5
2022 2 Rp. 3.800 20
3024 3 Rp. 1.000 10

Laboratorium Software Engineering Versi/Revisi : 2/1 Halaman : 5-7


Praktikum Algoritma dan Pemrograman II

Berdasarkan file Buku dan Buku2 tersebut, buat algoritma penggabungan


dua buah file yang datanya terurut berdasarkan kode buku, sehingga
menghasilkan sebuah file baru yang terurut pula (gunakan metoda AND dan
OR).

3. Konversi algoritma-algoritma tersebut ke dalam bahasa C/C++ dengan


menggunakan template program yang sudah diberikan.
Untuk fungsi Merging, silakan buat file Buku2.txt secara manual di Notepad
atau editor teks lainnya.

5.3.2 Latihan-latihan Praktikum V


Gunakan template program seperti di bawah ini untuk menjawab soal
praktikum pada modul 4, 5, dan 6.
//Program untuk mengolah data dalam file tanpa dan dengan
separator
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h> //untuk menggunakan fungsi exit()

struct { int NPM;


char Nama[20];
char Kelas[2];
int Nilai;
}Rekaman;

FILE *Data_Nilai_MHS;

void InputData();
void OutputData();
void Splitting();
void Merging();
void KonsolidasiTanpaSeparator();
void KonsolidasiDenganSeparator();

int main(){
//input data ke dalam file tanpa separator
InputData();

//output data dalam file tanpa separator


OutputData();

//panggil fungsi/prosedur yang akan dijalankan

getche();
return 0;
}

void InputData() {

Laboratorium Software Engineering Versi/Revisi : 2/1 Halaman : 5-8


Praktikum Algoritma dan Pemrograman II

//isi dengan program untuk menulis data ke file


int N;

Data_Nilai_MHS = fopen("Data Nilai MHS.TXT","at");

printf("Input Data Mahasiswa\n");


printf("Input Jumlah Mahasiswa : ");scanf("%d",&N);
for (int i=1;i<=N;i++){
printf("NPM : ");scanf("%d",&Rekaman.NPM);
printf("Nama : ");scanf("%s",&Rekaman.Nama);
printf("Kelas : ");scanf("%s",&Rekaman.Kelas);
printf("Nilai : ");scanf("%d",&Rekaman.Nilai);

fprintf(Data_Nilai_MHS,"%d %s %s
%d\n",Rekaman.NPM,Rekaman.Nama,Rekaman.Kelas,Rekaman.Nilai);
}

fclose(Data_Nilai_MHS);
}

void OutputData(){
//isi dengan program untuk membaca data dari file

void Splitting(){
//isi dengan hasil konversi algoritma Splitting ke program
C/C++

void Merging(){
//isi dengan hasil konversi algoritma Merging ke program
C/C++

void KonsolidasiTanpaSeparator(){
//isi dengan hasil konversi algoritma konsolidasi tanpa
separator ke program C/C++

void KonsolidasiDenganSeparator(){
//isi dengan hasil konversi algoritma konsolidasi dengan
separator ke program C/C++

Kerjakan 1 dari 2 kasus di bawah ini :

Laboratorium Software Engineering Versi/Revisi : 2/1 Halaman : 5-9


Praktikum Algoritma dan Pemrograman II

Kasus 1
Didefinisikan sebuah sequential file data kendaraan di Rental Mobil ”Pantang
Mundur” sebagai berikut :
File Kendaran Rental Mobil ”Pantang Mundur”
Kode Jenis Harga Sewa Stok
Kendaraan
101 A Rp. 250.000 5
102 A Rp. 230.000 3
104 A Rp. 270.000 2
203 B Rp. 390.000 1
205 B Rp. 375.000 10
206 B Rp. 335.000 4
301 C Rp. 505.000 1
305 C Rp. 420.000 2
307 C Rp. 490.000 3

1. Berdasarkan file Kendaraan tersebut, buat program bahasa C untuk


pemisahan file tersebut menjadi:
a. [NPM Genap] 3 file yang dikelompokkan atas: Jenis kendaraan (A, B,
C)
b. [NPM Ganjil] 2 file yang dikelompokkan atas: Harga Sewa ≥ Rp.
350.000 dan harga sewa < Rp. 350.000
c. [NPM Ganjil/Genap] 2 file yang dikelompokkan atas: Jumlah stok ≥ 5
dan jumlah stok < 5

2. Diketahui juga file Kendaraan2 berikut.


Kode Jenis Harga Sewa Stok
Kendaraan
105 A Rp. 260.000 5
202 B Rp. 380.000 20
304 C Rp. 510.000 10

Berdasarkan file Kendaraan dan Kendaraan2 tersebut, buat program


penggabungan dua buah file yang datanya terurut berdasarkan kode
kendaraan, sehingga menghasilkan sebuah file baru yang terurut pula
(gunakan metoda AND dan OR).

Note :
Gunakan template program yang sudah diberikan.
Untuk fungsi Merging, silakan buat file Kendaraan2.txt secara manual di
Notepad atau editor teks lainnya.

Laboratorium Software Engineering Versi/Revisi : 2/1 Halaman : 5-10


Praktikum Algoritma dan Pemrograman II

Kasus 2
Didefinisikan sebuah sequential file data barang di Toko Beras “Maju Terus”
sebagai berikut :

File Barang Toko Beras ”Maju Terus”


Kode Barang Jenis Harga Stok
1001 A Rp. 200.000 10
1002 A Rp. 250.000 20
1004 A Rp. 230.000 10
2003 B Rp. 190.000 50
2005 B Rp. 220.000 40
2006 B Rp. 235.000 30
3001 C Rp. 305.000 20
3005 C Rp. 320.000 10
3007 C Rp. 290.000 10

1. Berdasarkan file Barang tersebut, buat program bahasa C untuk pemisahan


file tersebut menjadi:
a. [NPM Genap] 3 file yang dikelompokkan atas: Jenis barang (A, B, C)
b. [NPM Ganjil] 2 file yang dikelompokkan atas: Harga barang ≥ Rp.
250.000 dan harga barang < Rp. 250.000
c. [NPM Ganjil/Genap] 2 file yang dikelompokkan atas: Jumlah stok ≥
20 dan jumlah stok < 20

2. Diketahui juga file Barang2 berikut.


Kode Barang Jenis Harga Stok
1005 A Rp. 270.000 5
2002 B Rp. 180.000 20
3004 C Rp. 310.000 10

Berdasarkan file Barang dan Barang2 tersebut, buat program bahasa C


untuk penggabungan dua buah file yang datanya terurut berdasarkan kode
barang, sehingga menghasilkan sebuah file baru yang terurut pula (gunakan
metoda AND dan OR).

Note :
Gunakan template program yang sudah diberikan.
Untuk fungsi Merging, silakan buat file Barang2.txt secara manual di
Notepad atau editor teks lainnya.

5.3.3 Tugas Rumah V


Tugas Rumah V ini hanya untuk praktikan yang belum menyelesaikan seluruh
soal Latihan Praktikum V.

Laboratorium Software Engineering Versi/Revisi : 2/1 Halaman : 5-11


Praktikum Algoritma dan Pemrograman II

1. Kerjakan sisa soal Latihan Praktikum yang belum selesai di luar jam
praktikum.
2. Buat laporan praktikum berdasarkan hasil pada praktikum pertemuan pertama
ini. Laporan tersebut berisi:
a. Soal latihan praktikum
b. Solusi dengan menggunakan algoritma
c. Solusi program dengan menggunakan bahasa C
d. Screenshot hasil eksekusi program
Keempat poin tersebut disusun per nomor soal latihan.

Jangan lupa mengumpulkannya ke asisten/instruktur maksimal 1x24 jam


setelah praktikum V berakhir.

Perhatikan bahwa laporan ini harus merupakan hasil karya sendiri. Kesamaan
seluruh/sebagian isi laporan dengan mahasiswa lain akan mengakibatkan nilai
laporan menjadi Nol.

Laboratorium Software Engineering Versi/Revisi : 2/1 Halaman : 5-12

Anda mungkin juga menyukai