Anda di halaman 1dari 25

BAB IV

STRUKTUR DATA STRUCT dan FILE

4.1. Pendahuluan
Dengan menggunakan struktur data array, sekelompok data yang setipe dapat
dianggap sebagai satu kesatuan sehingga memudahkan pemrosesan kelompok data tadi.
Dalam beberapa kasus, ada sekelompok data yang berlainan tipe tetapi dalam
pemrosesannya dianggap sebagai satu kesatuan, seperti data mahasiswa yang terdiri dari
nama, NPM dan nilai, (lihat tabel 4.1 di bawah ini) atau data karyawan yang terdiri dari
nama, nik, golongan dan gaji, atau data lainnya. Untuk kasus ini digunakan struktur data
struct atau disebut juga struktur data record. Biasanya struktur data struct atau record ini
digunakan untuk penyimpanan data dalam file. Untuk pembahasan selanjutnya hanya akan
digunakan istilah “struct” saja.

Tabel 4.1 Contoh data mahasiswa

Nama NPM Nilai


Leoni Agustina Rinaldi 123015001 75
Mega T. Prambudi 123015002 80
Paulus Adi Susanto 123015003 65
Dona M. Samigo 123015004 85
…… …… …
…… …… …
Roberto Duma 123015074 90
Markus Setiawan 123015075 70

4.2 Struktur Data Struct


Struktur data struct didefinisikan sebagai deretan tertentu dari item data (disebut
member atau field) yang dapat berlainan tipenya (heterogen). Sebagai contoh, diketahui
data mahasiswa yang terdiri dari nama mahasiswa (bertipe karakter), nomor pokok

BAB IV: Struktur Data Struct dan File - 48


Algoritma dan Pemrograman II

mahasiswa (bertipe karakter), dan nilai mahasiswa (bertipe real). Jika digunakan array
untuk menyimpan data mahasiswa ini, maka diperlukan 3 buah array. Masing-masing array
menyimpan satu macam data, seperti contoh deklarasi berikut ini (diasumsikan ada 75
mahasiswa yang akan disimpan datanya).

char NAMA_MHS[75][30] [untuk menyimpan nama mahasiswa]


char NPM[75][10] [untuk menyimpan NPM]
real NILAI[75] [untuk menyimpan nilai]

Dalam contoh di atas, perlu perhatian khusus untuk indeks array agar data seorang
mahasiswa dimasukkan ke indeks yang sama untuk tiap array. Dalam prosesnya, ketiga
array tersebut harus dibaca dan diproses secara bersama-sama.

Tetapi jika digunakan struct, maka ketiga macam data tadi dapat didefinisikan dalam
sebuah struct. Struct untuk menyimpan data seorang mahasiswa adalah:

struct MAHASISWA { [nama struct]


char NAMA_MHS[30] [member/field yang pertama]
char NPM[10] [member/field yang kedua]
real NILAI [member/field yang ketiga]
}

Untuk struct di atas diketahui:


a. Nama struct adalah MAHASISWA.
b. Struct ini terdiri dari dari 3 buah member/field yaitu NAMA_MHS yang bertipe array
of char, NPM yang bertipe array of char dan Nilai yang bertipe real.

Untuk memudahkan penyebutan, pembahasan selanjutnya akan menggunakan istilah


“member” saja, bukan “field” meskipun keduanya mempunyai pengertian yang sama.
Secara umum pedoman untuk membuat struct adalah:
1. Tentukan nama struct. Cara membuat nama struct sama seperti membuat identifier.
2. Tentukan member apa saja yang menjadi anggotanya. Cara membuat nama member
sama seperti membuat identifier
3. Tentukan tipe data dari setiap member. Setiap member hanya dapat menyimpan satu
tipe data.

BAB III: Struktur Data Struct dan File - 49


Algoritma dan Pemrograman II

4. Jika diperlukan member juga dapat bertipe struct yang lain (nested structure). Dalam
hal ini definisikan dulu struct yang akan digunakan.
5. Seluruh member ditulis di antara sepasang tanda kurung { } setelah nama struct.

Bentuk umum definisi struktur data struct dapat dilihat pada gambar 4.1 di bawah ini.

struct nama_struct {
tipe_data_1 nama_member_1
tipe_data_2 nama_member_2
.......
tipe_data_n nama_member_n
}

Gambar 4.1 Bentuk umum struktur data Struct

Sebagai contoh lain dari penggunaan struktur data struct ini adalah untuk menyimpan data
inventori di sebuah minimarket. Misalnya data yang disimpan adalah:
Nomor barang, jenis barang, merek barang, pemasok, harga jual barang,
banyaknya barang

Nomor barang adalah nomor kode untuk memudahkan identifikasi barang-barang yang
disimpan. Jenis barang misalnya mi instant, coklat, permen dan sebagainya. Merek barang
misalnya Indomi Goreng, Supermi Ayam bawang dan sebagainya. Pemasok adalah nama
perusahaan yang menghantarkan barang tersebut. Semua data tersebut bertipe karakter.
Untuk harga jual dan banyaknya barang, tipe data yang digunakan adalah integer. Dengan
demikian contoh struktur data struct untuk menyimpan data barang seperti di atas adalah:
struct STOK {
char Nomor[8]
char JenisBarang[15]
char Merek[20]
char Pemasok[20]
int Harga
int Banyak
}

4.2.1 Operasi input/output dengan struct


Berbeda dengan array yang mempunyai indeks sebagai acuan untuk tempat
menyimpan data, pada struct, untuk menyimpan data ke struct harus disebutkan nama

BAB III: Struktur Data Struct dan File - 50


Algoritma dan Pemrograman II

struct, tanda titik (“.”) dan nama member yang akan digunakan sebagai tempat menyimpan
data. Demikian pula jika ingin mencetak data yang disimpan dalam suatu member. Secara
umum penulisan struct untuk menyimpan atau mencetak data ke/dari member struct adalah:

nama_struct.nama_member

Sebagai contoh untuk struct MAHASISWA:


MAHASISWA.NAMA_MHS [member yang pertama]
MAHASISWA.NPM [member yang ke dua]

Dengan demikian instruksi untuk menyimpan data ke atau mencetak data dari sebuah
member dari struct MAHASISWA adalah seperti contoh berikut ini:

- Read (MAHASISWA.NAMA_MHS)
 data yang dibaca akan disimpan dalam member yang pertama pada struct
MAHASISWA

- Write (MAHASISWA.NPM)
 mencetak isi member yang ke dua dari struct MAHASISWA

4.2.3. Array of struct


Pada umumnya, data yang disimpan dalam struct tidak berdiri sendiri tetapi berupa
sekumpulan data yang mempunyai struktur yang sama, lihat tabel 4.1. Array of struct
adalah struktur data array yang komponennya adalah struktur data struct. Hal ini
dimungkinkan karena tiap struct yang menjadi komponen array adalah struct yang sama
sehingga dapat dianggap tipe datanya homogen. Sebagai contoh, untuk menyimpan data
suatu kelas yang terdiri dari 75 mahasiswa maka definisi array of struct-nya adalah:

struct MAHASISWA Data_M[75]

Dari definisi di atas, diketahui :


a. DATA_M adalah array yang mempunyai 75 komponen.
b. Komponen array DATA_M bertipe struct MAHASISWA

Ilustrasi dari array of struct Data-M[75] dapat dilihat pada gambar 4.2 di bawah ini.

BAB III: Struktur Data Struct dan File - 51


Algoritma dan Pemrograman II

INDEKS KOMPONEN

Nama NPM Nilai

0 Leoni Agustina Rinaldi 123015001 75


123015002
1 Mega T. Prambudi 80
123015003
2 Paulus Adi Susanto 65
123015004
3 Dona M. Samigo 85
……
… …… …
……
… …… …
123015074
73 Roberto Duma 90
123015075
74 Markus Setiawan 70

Gambar 4.2 Ilustrasi array of struct Data_M[75]

Dengan demikian instruksi untuk menyimpan data ke dan mencetak dari array of struct ini
adalah sebagai berikut:
a. Untuk sebuah data dalam suatu member:
- Read (Data_M[3].NAMA_MHS)
 data yang dibaca akan disimpan dalam array of struct Data_M pada indeks 3 dan
member yang pertama.

- Write (Data_M[10].NPM)
 mencetak isi dari array of struct Data_M pada indeks 10 dan member yang ke 2

b. Untuk membaca sebuah komponen (seluruh member) dalam array of struct:


- Read (Data_M[0])

 membaca 3 buah data dengan urutan: nama mahasiswa, NPM, dan nilai untuk
disimpan dalam array of struct Data_M indeks 0. Tipe data dari tiap data yang
dimasukkan harus sesuai dengan yang telah didefinisikan.

BAB III: Struktur Data Struct dan File - 52


Algoritma dan Pemrograman II

c. Untuk membaca seluruh komponen array dapat digunakan instruksi pengulangan,


sebagai contoh:
- For (I = 0 ; I < 75 ; I ++)
{
Read (Data_M[I].Nilai)
}
 Membaca 75 data Nilai, lalu disimpan ke indeks 0 sampai 74 pada member yang ke
3 dari array of struct Data_M

4.2.3 Nested Structure


Sebuah member dari struct dapat dideklarasikan sebagai struct yang lain atau disebut
nested structure. Misalnya, nama mahasiswa terdiri dari nama depan, nama tengah dan
nama keluarga. Dengan demikian dibuat struct untuk NAMA seperti berikut:

struct NAMA { [nama struct]


char DEPAN[12] [member ke 1]
char TENGAH[12] [member ke 2]
char KELUARGA[15] [member ke 3]
}

Struct NAMA ini digunakan oleh struct MAHASISWA untuk menyimpan data nama
mahasiswa. Dengan demikian definisi struct MAHASISWA menjadi:

struct MAHASISWA { [nama struct]


struct NAMA NAMA_MHS [member yang pertama]
char NPM[10] [member yang kedua]
real NILAI [member yang ketiga]
}

Untuk struct di atas diketahui:


a. Nama struct adalah MAHASISWA.
b. Secara eksplisit struct ini terdiri dari dari 3 buah member yaitu NAMA_MHS yang
bertipe struct NAMA, NPM yang bertipe array of char dan NILAI yang bertipe real.
c. Secara implisit, struct ini mempunyai 5 buah member karena struct NAMA mempunyai
3 member. Dengan demikan member yang ada dalam struct MAHASISWA adalah:
i. NAMA_MHS.DEPAN

BAB III: Struktur Data Struct dan File - 53


Algoritma dan Pemrograman II

ii. NAMA_MHS.TENGAH
iii. NAMA_ MHS.KELUARGA
iv. NPM
v. NILAI.

Untuk input dan output nested structure ini, caranya sama seperti di atas, yaitu dengan
menulis nama struct yang diikuti oleh semua nama member yang dipisahkan dengan tanda
titik. Sebagai contoh untuk struct MAHASISWA di atas:
- Read (MAHASISWA.NAMA_MHS.DEPAN)
 data yang dibaca akan disimpan dalam member yang pertama pada struct
MAHASISWA

- Write (MAHASISWA.NAMA_MHS.KELUARGA)
 mencetak data yang disimpan dalam member yang ke tiga dari struct
MAHASISWA

Sebagai latihan buatlah:


1. Member NILAI dari struct MAHASISWA sebagai struct yang terdiri dari nilai UTS,
nilai UAS, nilai akhir dan nilai huruf sehingga struct MAHASISWA secara implisit
terdiri dari 8 member.
2. Member Pemasok dari struct STOK, terdiri dari nama pemasok, alamat pemasok dan
nomor telepon. Dengan demikian secara implisit struct BARANG terdiri dari 7
member.

Untuk array of struct yang terdiri dari nested structure, operasi input dan output sama
seperti di atas yaitu dengan menuliskan semua nama member dan dipisahkan dengan tanda
titik. Sebagai contoh didefinisikan :

struct MAHASISWA Data_M[75]

Contoh operasi input outputnya:


- Read (Data_M[5].NAMA_MHS.DEPAN)

BAB III: Struktur Data Struct dan File - 54


Algoritma dan Pemrograman II

 data yang dibaca akan disimpan pada indeks 5, member yang pertama dari
komponen array of struct Data_M

- Read (Data_M[0])

 membaca sebuah komponen array Data_M yang terdiri dari 8 buah data dengan
urutan: nama depan mahasiswa, nama tengah mahasiswa, nama keluarga
mahasiswa, NPM, nilai UTS, nilai UAS, nilai akhir dan nilai huruf untuk disimpan
dalam array of struct Data_M indeks 0. Tipe data dari tiap data yang dimasukkan
harus sesuai dengan yang telah didefinisikan.

4.2.5. Contoh aplikasi struct dan array of struct


Sebagai contoh aplikasi dari struktur data struct dan array of struct, akan digunakan
untuk menjawab masalah berikut ini:

Sebuah kelas yang terdiri dari dari 75 mahasiswa akan dihitung nilai akhir dan nilai
hurufnya. Data yang disimpan adalah nama depan mahasiswa, nama tengah
mahasiswa, nama keluarga mahasiswa, nomor pokok mahasiswa, serta nilai UTS dan
nilai UASnya. Nilai akhir mahasiswa dihitung dari 40% nilai UTS ditambah dengan
60% nilai UAS. Nilai huruf ditentukan berdasarkan nilai akhir seperti pada tabel di
bawah ini.

Nilai akhir Nilai huruf


 85.0 A
antara 70.0 sampai < 85.0 B
antara 60.0 sampai <70.0 C
antara 50.0 sampai < 60.0 D
< 50.0 E

Untuk menyimpan data mahasiswa tersebut di atas akan digunakan array of struct
Data_M[75] yang telah didefinisikan sebelumnya. Untuk memudahkan pembacaan
algoritma, perhitungan nilai akhir dan nilai huruf akan dilakukan oleh fungsi HITUNG.
Dengan demikian, algoritma utama berfungsi untuk membaca data dan menyimpannya ke
array of struct Data_M, memanggil fungsi hitung, menyimpan hasil perhitungan ke array
of struct Data_M, dan menabelkan hasil perhitungan.

BAB III: Struktur Data Struct dan File - 55


Algoritma dan Pemrograman II

VOID Hitung(UTS, UAS, A&, H&)


Fungsi untuk menghitung nilai akhir (A) dan nilai huruf (H) dari nilai UTS
(UTS) dan nilai UAS (UAS). Parameter UTS dan UAS bertipe integer.
Parameter A bertipe real. Parameter H bertipe character.
{
1. [menghitung nilai akhir]
A = 0.4 * UTS + 0.6 * UAS
2. [menghitung nilai huruf]
If ( A  85.0 )
{ H = ‘A’ }
else
{ if ( A  70.0 )
{ H = ‘B’ }
else
{ if ( A  60.0 )
{ H = ‘C’ }
else
{ if ( A  50.0 )
{ H = ‘D’ }
else
{ H = ‘E’ }
}

}
}
}

Algoritma Hitung_Nilai
Algoritma untuk menghitung nilai akhir dan nilai huruf dari 75 mahasiswa.
Perhitungan nilai akhir dan nilai huruf dilakukan oleh fungsi HITUNG.
Variabel I bertipe integer. Data dan hasil perhitungan disimpan dalam
array of struct Data_M[75] dengan definisi sebagai berikut:
struct NAMA
{
char DEPAN[12]
char TENGAH[12]
char KELUARGA[15]
}
struct NILAI
{
int UTS
int UAS
real AKHIR
char HURUF
}

BAB III: Struktur Data Struct dan File - 56


Algoritma dan Pemrograman II

struct MAHASISWA
{
struct NAMA NAMA_MHS
char NPM[10]
struct NILAI NILAI_MHS
}
[mendeklarasikan array Data_M]
struct MAHASISWA Data_M[75]
[mendeklarasikan fungsi HITUNG]
VOID HITUNG(int, int, real&, char&)
1. [membuat struktur pengulangan untuk memroses data dari 75
mahasiswa]
For ( I = 0 ; I <= 74 ; I ++ )
{
1.a [membaca data untuk disimpan dalam array of struct Data_M]
Read(Data_M[I].NAMA_MHS.DEPAN, Data_M[I].NAMA_MHS.
TENGAH, Data_M[I].NAMA_MHS.KELUARGA, Data_M[I].NPM,
Data_M[I].NILAI_MHS.UTS, Data_M[I].NILAI_MHS.UAS)
1.b [memanggil fungsi Hitung]
Hitung(Data_M[I].NILAI_MHS.UTS, Data_M[I].NILAI_MHS.UAS
Data_M[I].NILAI_MHS.AKHIR, Data_M[I].NILAI_MHS.HURUF)
}
2. [membuat judul tabel]
Write(‘No Nama mahasiswa NPM UTS UAS Akhir Huruf’)
3. [membuat loop untuk menabelkan hasil perhitungan]
For ( I = 0 ; I = 74 ; I ++ )
{ Write(I+1, Data_M[I])
}
4. [selesai]
Halt

Contoh lain untuk aplikasi struktur data struct adalah untuk menyimpan data
inventori sebuah mini market seperti berikut:
Minimarket ABC menjual barang keperluan sehari-hari, ada 1000 jenis barang yang
dijual. Semua data disimpan dalam struct. Tiap kali terjadi penjualan, stok barang
berkurang dan akan dicetak slip penjualan yang berisi nama barang, banyaknya barang
dan harga barang. Dalam 1 slip dapat terdiri dari bermacam-macam barang. Tiap hari
sebelum toko dibuka dijalankan fungsi STOK_AWAL untuk mencatat stok barang.
Setiap terjadi penjualan barang akan mengurangi stok barang yang terjual. Tiap hari
setelah toko ditutup, dijalankan fungsi LAPORAN untuk mengetahui jenis barang yang

BAB III: Struktur Data Struct dan File - 57


Algoritma dan Pemrograman II

dijual, banyaknya barang yang dijual, total penjualan serta menampilkan barang apa
yang stok-nya kurang sehingga harus dipesan. Sebagai batas aman untuk stok barang
adalah 50, jika kurang dari itu, maka barang harus dipesan. Diasumsikan data seluruh
stok barang disimpan dalam array of struct dan diurutkan berdasarkan nomor kode
barang.

Contoh struct untuk menyimpan data inventori di atas adalah:

struct STOK {
char Nomor[6]
char NamaBarang[15]
char Pemasok[20]
int Harga
int Total
}

VOID STOK_AWAL(DATA[]&)
Fungsi untuk membaca data stok barang yang disimpan ke array DATA.
Data stok barang adalah struct STOK. Diasumsikan data stok ini diurutkan
berdasarkan nomor kode barang. Variabel i bertipe integer.
{
1. [membuat loop untuk membaca array]
For (i = 0; i < 1000 ; i++)
{ Read (DATA[i])
}

VOID LAPORAN(AWAL[], AKHIR[])


Fungsi untuk membuat laporan yang berisi daftar nama barang yang
terjual, banyaknya barang dan harganya, serta total harga barang yang
dijual. Pada akhir laporan ditampilkan daftar nama barang yang harus
dipesan. Array AWAL berisi data sebelum minimarket dibuka dan array
AKHIR berisi data sesudah minimarket ditutup. Variabel T, i, jml dan Hrg
bertipe integer.
{
1. T = 0
2. Write (“Laporan Penjualan Minimarket ABC”)
3. Write (“No Kode Nama Barang dan merek Jumlah Harga”)
4. [membuat loop untuk membaca array]
For (i = 0 ; i < 1000 ; i ++)
{ if ( AWAL[i].total > AKHIR[i].total)
{ jml = AWAL[i].Total - AKHIR[i].Total;
Hrg = jml * AWAL[i].Harga
Write (i+1, AWAL[i].Nomor, AWAL[i].NamaBarang,
AWAL[i].Pemasok, jml, Hrg)
T = T + Hrg

BAB III: Struktur Data Struct dan File - 58


Algoritma dan Pemrograman II

}
5. Write(”----------------------------------------------------------------“)
6. Write(“Total penjualan = Rp “, T)
7. Write (“Laporan Daftar Barang yang harus dipesan”)
8. Write (“No Kode Nama barang Pemasok Jumlah”)
9. [membuat loop untuk membaca array]
For (i = 0 ; i < 1000 ; i++)
{ if (AKHIR[i].total < 50)
{
Write (i+1, AKHIR[i].Nomor, AKHIR[i].NamaBarang,
AKHIR[i].Pemasok, AKHIR[i].Total)
}
}
}

Algoritma MiniMarketABC
Algoritma untuk mengelola inventori secara sederhana dari sebuah mini
market. Seluruh data disimpan dalam array of struct. Array AWAL berisi
data barang sebelum minimarket dibuka. Selama minimarket dibuka,
data penjualan disimpan dalam array JUAL. Setelah minimarket ditutup,
dibuat laporan penjualan dan laporan barang yang harus dipesan.
Algoritma dijalankan setiap hari mulai dari sebelum minimarket dibuka
sampai minimarket ditutup. Pada akhir hari dicetak laporan penjualan dan
laporan barang yang harus dipesan. Diasumsikan tidak ada penambahan
barang selama minimarket dibuka dan banyaknya jenis barang yang
dijual ada 1000 jenis. Variabel i, b, tt, jml, dan hrg bertipe integer.
Variabel Jawab bertipe character.
[deklarasi struct]
struct STOK {
char Nomor[6]
char Jenisbarang[15]
char Pemasok[20]
int Harga
int Total
}
[deklarasi array of struct]
struct STOK AWAL[1000]
struct STOK JUAL[1000]
[deklarasi fungsi]
VOID STOK_AWAL(STOK[]&)
VOID LAPORAN(STOK[], STOK[],n)

1. [Menuliskan salam]
Write(”Selamat Pagi, Anda diminta untuk memasukkan kode barang,
nama barang, nama pemasok, harga barang dan banyaknya barang”)
2. [Memanggil fungsi STOK_AWAL]

BAB III: Struktur Data Struct dan File - 59


Algoritma dan Pemrograman II

STOK_AWAL(AWAL[1000])
3. [mengkopi array AWAL ke array JUAL]
For ( i = 0 ; i <1000 ; i++)
{ JUAL[i] = AWAL[i]
}
4. Jawab = ‘y’
5. [membuat loop untuk kedatangan pelanggan]
While (Jawab == ‘y’)
{ tt = 0
Write(“Ketikkan banyaknya jenis barang yang dibeli”)
Read (b)
For (j = 0 ; j < b ; j++)
{ Write (“Nomor barang yang dibeli: “)
Read (nmr)
Write (“Banyaknya barang yang dibeli: “)
Read (jml)
i = 0;
While (nmr != JUAL[i].Nomor)
{ i++ }
Hrg = jml * JUAL[i].Harga
JUAL[i].Total = JUAL[i].Total – jml
tt = tt + Hrg
[mencetak slip pembayaran]
Write (JUAL[i].NamaBarang, jml, hrg)
}
[mencetak total harga barang yang harus dibayar]
Write (“Total harga = “, tt)
Write (“Terimakasih”)
[Apakah ada pelanggan lagi?]
Write (“Apakah ada pelanggan yang datang ?”)
Read (Jawab)
[kembali ke awal loop jika jawab = ‘y’]
}
6. [minimarket tutup, memanggil fungsi laporan untuk menabelkan
semua barang yang terjual dan menabelkan semua barang yang perlu
dipesan]
LAPORAN(AWAL, JUAL,1000)
7. [Menuliskan salam]
Write(“Selamat malam Selamat beristirahat”)
8. [selesai]
Halt

4.2.5 Union
Dalam contoh di atas, dapat dilihat bahwa sebuah struct mempunyai jumlah dan
nama member yang sama. Dalam beberapa kasus, dibutuhkan sebuah struct yang sama

BAB III: Struktur Data Struct dan File - 60


Algoritma dan Pemrograman II

tetapi dapat mempunyai member yang berbeda. Hal ini dimungkinkan dengan instruksi
union. Sebagai contoh, untuk data mahasiswa yang tersimpan dalam struct Data_M[] ada
mahasiswa yang mundur mata kuliah. Untuk kasus ini, mahasiswa tidak mempunyai nilai
UTS, nilai UAS dan nilai akhir, tetapi hanya mempunyai nilai huruf yaitu “K”. Dengan
demikian member dalam struct MAHASISWA tergantung dari status mahasiswa yaitu
aktif atau mundur. Untuk mahasiswa aktif, member dalam struct MAHASISWA terdiri
dari struct NAMA. NPM, STATUS, dan struct nilai. Tetapi untuk mahasiswa yang mundur
mata kuliah, member dalam struct MAHASISWA terdiri dari struct NAMA, NPM,
STATUS, dan nilai huruf. Untuk masalah ini, didefinisikan tipe data untuk menentukan
status mahasiswa:
define aktif 1
define mundur 2
Dengan demikian struct MAHASISWA menjadi:

struct MAHASISWA {
struct NAMA NAMA_MHS
char NPM[9]
int STATUS
union {
struct {
NILAI NILAI_MHS
} aktif
struct {
char HURUF
} mundur
} STATUS
}

Struct MAHASISWA di atas, terdiri dari 2 bagian yaitu bagian yang tetap (fixed) dan yang
tidak tetap (tag) yang ditandai dengan instruksi union. Dalam struct ini, member yang tetap
adalah NAMA_MHS, NPM dan STATUS. Member selanjutnya ditentukan oleh status
mahasiswa yaitu NILAI_MHS atau HURUF.
Untuk contoh penggunaan struct dengan union ini, algoritma HITUNG_NILAI akan
direvisi sehingga dapat menangani kasus mahasiswa yang mundur mata kuliah. Output
algoritma akan dibagi menjadi 2 tabel yaitu tabel yang berisi data mahasiswa aktif beserta
nilainya dan tabel yang berisi data mahasiswa yang mundur mata kuliah.

BAB III: Struktur Data Struct dan File - 61


Algoritma dan Pemrograman II

Algoritma Hitung_Nilai_Revisi_1
Algoritma untuk menghitung nilai akhir dan nilai huruf dari 75 mahasiswa.
Data dan hasil perhitungan disimpan dalam array of struct Data_M[75]
yang komponennya adalah struct MAHASISWA. Array of struct
Data_M[75] digunakan untuk menyimpan data mahasiswa yang berstatus
aktif atau mundur mata kuliah. Untuk mahasiswa aktif, perhitungan nilai
akhir dan nilai huruf dilakukan oleh fungsi HITUNG. Variabel I, J bertipe
integer.
struct NAMA {
char DEPAN[12]
char TENGAH[12]
char KELUARGA[15]
}
struct NILAI {
int UTS
int UAS
real AKHIR
char HURUF
}
define aktif 1
define mundur 2
struct MAHASISWA {
struct NAMA NAMA_MHS
char NPM[10]
int STATUS
union {
struct {
NILAI NILAI_MHS
} aktif
struct {
char HURUF
} mundur
} STATUS
}
struct MAHASISWA Data_M[75]

[mendedeklarasikan fungsi HITUNG]


VOID HITUNG(int, int, real&. char&)
1. [membuat struktur pengulangan untuk memroses data dari 75
mahasiswa]
For ( I = 0 ; I <= 74 ; I ++ )
{
1.a [membaca data status mahasiswa]
Write (‘Status mahasiswa : (1) aktif atau (2) mundur’)

BAB III: Struktur Data Struct dan File - 62


Algoritma dan Pemrograman II

Read (Data_M[I].STATUS)
1.b [Jika mahasiswa aktif]
If (Data_M[I].STATUS == 1)
{
1.b.i [membaca data status mahasiswa aktif]
Read(Data_M[I].NAMA_MHS.DEPAN, Data_M[I].NAMA_MHS.
TENGAH, Data_M[I].NAMA_MHS.KELUARGA, Data_M[I].NPM,
Data_M[I].NILAI_MHS.UTS, Data_M[I].NILAI_MHS.UAS)
1.b.ii [memanggil fungsi Hitung]
Hitung(Data_M[I].NILAI_MHS.UTS, Data_M[I].NILAI_MHS.UAS
Data_M[I].NILAI_MHS.AKHIR, Data_M[I].NILAI_MHS.HURUF)
}
[Jika mahasiswa mundur mata kuliah]
Else
{
1.b.iii [membaca data status mahasiswa mundur mata kuliah]
Read(Data_M[I].NAMA_MHS.DEPAN, Data_M[I].NAMA_MHS.
TENGAH, Data_M[I].NAMA_MHS.KELUARGA, Data_M[I].NPM)
1.b.iv [menentukan nilai huruf]
Data_M[I].HURUF = ‘K’
}
}
2. [membuat judul tabel untuk mahasiswa aktif]
Write(‘Daftar nilai mahasiswa aktif’)
Write(‘No Nama mahasiswa NPM UTS UAS Akhir Huruf’)
3. [membuat counter]
J=1
4. [membuat loop untuk menabelkan data mahasiswa aktif]
For ( I = 0 ; I = 74 ; I ++ )
{
4.a If (Data_M[I].STATUS == 1)
{ Write(J, Data_M[I].NAMA_MHS.DEPAN, Data_M[I].NAMA_MHS.
TENGAH, Data_M[I].NAMA_MHS.KELUARGA, Data_M[I].NPM,
Data_M[I].NILAI_MHS.UTS, Data_M[I].NILAI_MHS.UAS,
Data_M[I].NILAI_MHS.AKHIR, Data_M[I].NILAI_MHS.HURUF)
}
4.b [increment counter]
J=J+1
}
5. [membuat counter]
J=1
6. [membuat judul tabel untuk mahasiswa mundur]
Write(‘Daftar nama mahasiswa mundur mata kuliah’)
Write(‘No Nama mahasiswa NPM ’)
7. [membuat loop untuk menabelkan data mahasiswa mundur]
For ( I = 0 ; I = 74 ; I ++ )
{
7.a If (Data_M[I].STATUS == 2)

BAB III: Struktur Data Struct dan File - 63


Algoritma dan Pemrograman II

{ Write(J, Data_M[I].NAMA_MHS.DEPAN, Data_M[I].NAMA_MHS.


TENGAH, Data_M[I].NAMA_MHS. KELUARGA, Data_M[I].NPM)
}
7.b J = J + 1
}
8. [selesai]
Halt

Latihan Soal Subbab 4.2


1. Buatlah struktur struct untuk merepresentasikan dokumen berikut ini:
a. Kartu mahasiswa d. Tiket pesawat terbang
b. Kartu kredit e. Kartu tanda penduduk
c. Kartu perpustakaan f. Surat ijin mengemudi

2. Toko buku universitas dapat membuat daftar tunggu sampai 20 permintaan untuk tiap
buku yang tidak tersedia di toko buku. Informasi yang disimpan untuk tiap buku
adalah judul buku (80 karakter), harga buku, dan permintaan untuk buku itu. Tiap
permintaan berisi nama (40 karakter), dan nomor telepon (12 karakter).
a. Buatlah struktur struct untuk menyimpan daftar tunggu ini.
b. Buatlah algoritma untuk menyimpan data ke dalam struct daftar tunggu.
c. Lanjutkan algoritma 2.a sehingga dapat membaca struct daftar tunggu untuk
menampilkan semua orang yang memesan suatu buku jika buku tersebut telah
tersedia.

3. Dewan real estate melakukan survey pada setiap orang yang mengajukan izin (lisensi)
bekerja. Kuesioner yang harus diisi adalah sebagai berikut:

Pertanyaan : Kemungkinan jawaban:


- Jenis izin - Broker atau Salesperson
- Kota tempat tinggal - satu dari 50 kemungkinan nama kota
- Umur (integer) - umur dalam tahun
- Jenis kelamin (karakter) - L (laki-laki) atau P (perempuan)
- Pendidikan (integer) - 1 (tidak lulus SMU), 2 (lulus SMU),
3 (sarjana S1), atau 4 (pascasarjana)

BAB III: Struktur Data Struct dan File - 64


Algoritma dan Pemrograman II

Input data dari kuesioner berisi 5 jawaban: kode jenis izin, kode kota, umur, kode
jenis kelamin, dan kode pendidikan. Gunakan metode end-of-file untuk menentukan
akhir data.
a. Buatlah struktur struct untuk menyimpan jawaban kuesioner dari tiap responden.
b. Buatlah algoritma menganalisis kuesioner dan menjawab pertanyaan berikut ini:
- Total jumlah responden
- Persentasi dari broker dan sales person.
c. Lanjutkan algoritma 3.b. untuk menghitung masalah berikut ini untuk jenis izin
broker dan salesperson:
- rata-rata umur responden
- jumlah responden dari tiap kota
- persentasi laki-laki dan perempuan
- jumlah responden untuk tiap jenis pendidikan.

4. Sebuah perusahaan ekspor menyimpan daftar inventaris dalam bentuk:

Nomor produk, nama produk, nama supllier, harga per unit, jumlah unit

Struct inventori ini disimpan secara berurutan berdasarkan nomor produk.


a. Buatlah struktur data struct untuk menyimpan data inventaris.
b. Buatlah algoritma untuk membaca data dan menyimpannya ke struct inventori.
c. Perusahaan mempunyai kebijakan: jika jumlah unit  100 maka diberi keterangan
“Low inventory” sehingga produk harus segera ditambah. Sebaliknya, jika jumlah unit
> 1000, maka diberi keterangan “High Inventory”, produk tidak perlu ditambah.
Lanjutkan algoritma 4.b untuk membaca dan menampilkan struct yang “Low
inventory” dan “High inventory” (dalam dua tabel yang terpisah).

5. Sebuah perusahaan real estat mempunyai 50 orang staf penjualan. Setiap kali seorang
staf melakukan penjualan, datanya disimpan dalam sebuah struct yang berisi:
Nomor staf, nama staff, nilai penjualan, komisi.

Struct ini lalu disimpan dalam file. Banyaknya data yang diinput tidak diketahui.
Banyaknya penjualan yang dilakukan oleh seorang staf tidak sama dengan staf yang

BAB III: Struktur Data Struct dan File - 65


Algoritma dan Pemrograman II

lain sehingga seorang staf dapat mempunyai 5 data sementara staf yang lain dapat
mempunyai 10 data.
a. Buatlah struktur data struct untuk menyimpan data di atas
b. Buatlah laporan yang berisi nomor staf, nama staf, total penjualan dan total komisi.
Laporan ini dibuat berurutan berdasarkan nomor staf, mulai dari 1 sampai 50. Pada
akhir laporan, jumlahkan total penjualan dan total komisi.
c. Tambahkan pada algoritma 5.b di atas, fungsi untuk:
- mencari nomor dan nama staf yang total penjualannya paling besar dan kedua terbesar
- mencari nomor dan nama staf yang total komisinya paling besar dan kedua terbesar.

6. Sebuah perusahaan mempunyai 200 pegawai yang terbagi menjadi 3 bagian yaitu
bagian administrasi, bagian penjualan dan bagian kebersihan. Perhitungan gajinya
adalah sebagai berikut:
a. Administrasi: gaji pokok + tunjangan kesehatan + uang transport.
b. Penjualan: uang transport + komisi 5% dari total nilai penjualan.
c. Kebersihan: gaji pokok + uang transport
Uang transport dihitung berdasarkan jumlah hari masuk kerja.
a. Buatlah sebuah struktur data struct untuk menyimpan semua data pegawai di atas.
b. Buatlah fungsi untuk menghitung gaji pegawai
c. Buatlah algoritma untuk memasukkan data ke dalam struct, menghitung gaji dan
menampilkan tabel gaji untuk masing-masing bagian. Hitung pula total gaji dari
masing-masing bagian.

7. Sebuah perusahaan asuransi menawarkan 3 jenis asuransi, yaitu asuransi rumah,


asuransi kesehatan dan asuransi pendidikan. Data yang disimpan dalam polis asuransi
adalah: nomor polis, nama yang ditanggung, alamat yang ditanggung, No KTP yang
ditanggung, besar asuransi, lama tanggungan, besar premi dan tanggal pembuatan
asuransi. Untuk asuransi rumah ditambah data tipe rumah, luas rumah, luas tanah dan
tahun pembuatan. Untuk asuransi kesehatan ditambah data nama ahli waris, alamat
ahli waris dan No. KTP ahli waris. Untuk asuransi pendidikan ditambah data nama
penerima, tanggal lahir penerima, dan tanggal jatuh tempo.
a. Buatlah sebuah struct untuk menyimpan seluruh data asuransi di atas

BAB III: Struktur Data Struct dan File - 66


Algoritma dan Pemrograman II

b. Buatlah algoritma untuk memasukkan data ke dalam struct, dan menampilkan tabel
untuk masing-m4asing jenis asuransi. Hitung pula total asuransi dari masing-masing
jenis asuransi.

4.3 Struktur Data File


Jika data yang akan diproses oleh komputer banyak sekali maka sebaiknya data
tersebut disimpan dalam file sehingga ketika data akan diproses, data tidak perlu diinput
satu persatu. Pada contoh inventaris mini market yang telah dibahas, pegawai mini market
harus menginput data setiap hari sebelum minimarket dibuka, hal ini dilakukan karena data
disimpan dalam array di memori komputer dan akan terhapus ketika komputer dimatikan.
Untuk menghindari terjadinya proses pemasukan data yang sama setiap hari, maka data
tersebut harus disimpan di dalam file. File yang dimaksud disini adalah struktur data file
yang digunakan untuk menyimpan data dalam memori eksternal yang nantinya akan
diproses oleh komputer.

Struktur data file didefinisikan sebagai suatu kumpulan item data (biasanya disebut
record) yang mempunyai aspek yang sama dan disimpan dalam memori eksternal seperti
disket, harddisk, CD, atau flash disk. Pada umumnya file digunakan untuk:
1. Menyimpan data untuk dieksekusi oleh program.
2. Menyimpan hasil sebuah eksekusi.

4.3.1. Terminologi
Berikut ini adalah beberapa istilah yang digunakan bersama struktur data file dan
aplikasinya:
a. Record: kumpulan item informasi mengenai suatu entity (entitas). Dalam bahasa
pemrograman C++, record diimplementasikan dalam struktur data struct.
Contoh: Record yang berisi data penumpang pesawat terbang
struct Penumpang {
char NAMA_DEPAN[15]
char N_KELUARGA[15]
char ALAMAT[50]
int No_Kursi
char Kode_Psw[10]

BAB III: Struktur Data Struct dan File - 67


Algoritma dan Pemrograman II

b. Item / field dari sebuah record: sebuah unit informasi yang berarti mengenai suatu
entity. Dalam bahasa pemrograman C++ item/field ini dikenal dengan istilah member.
Contoh: item/field dari record PENUMPANG adalah:
PENUMPANG.NAMA_DEPAN, PENUMPANG.N_KELUARGA, PENUMPANG.
ALAMAT, PENUMPANG.No_Kursi, PENUMPANG.Kode_Psw

c. Key: item/field dari record yang unik yang berfungsi sebagai tanda identifikasi record
tersebut dalam file.
Contoh: item/field yang menjadi key dalam record PENUMPANG adalah:
PENUMPANG.No_Kursi
d. Basis Data: kumpulan dari file yang saling berhubungan.
e. Record transaksi (Transaction record): record yang terkena transaksi/operasi atau
dengan kata lain record yang item/field-nya mengalami perubahan seperti diperbaiki
(update), ditambah atau dihapus . Record transaksi disimpan dalam file transaksi.
f. File transaksi (Transaction file): file yang berisi record-record yang terkena
transaksi/operasi.
g. File Master (Master file): file yang menyimpan seluruh record. File master ini yang
akan menjadi file sumber untuk mendapatkan record-record yang terkena transaksi.

4.3.2 Macam-macam File


Berdasarkan cara menyimpan record dalam media penyimpan, dikenal 2 macam file
yaitu:
a. Sequential file: record-record disimpan dalam media penyimpan secara berurutan
mulai dari record pertama sampai terakhir. Media penyimpannya biasanya berbentuk
tape atau kaset.
b. Direct file: tiap record mempunyai key yang ditransformasikan (mapping) menjadi
alamat dalam media penyimpan tempat file disimpan. Media penyimpannya berbentuk
piringan (disket, harddisk, CD). Biasanya direct file digunakan dalam on-line
processing untuk mempersingkat waktu pengaksesan record.

BAB III: Struktur Data Struct dan File - 68


Algoritma dan Pemrograman II

Ada 2 cara untuk mengambil (akses) data dari file yaitu:


a. Akses Serial/Sequential: record diakses satu per satu secara berurutan mulai dari record
pertama sampai record terakhir. Akses serial dapat dilakukan pada file sequential dan
file direct.
b. Akses Random atau akses langsung: record diakses sesuai keperluan, biasanya dilakukan
berdasarkan key. Akses random hanya dapat dilakukan pada file direct.

4.3.3. Operasi File


Program rutin untuk operasi file dalam bahasa pemrograman C++ ada dalam include
file fstream.h. Sebelum suatu file dapat dioperasikan, file harus dideklarasikan terlebih
dulu dalam bagian deklarasi. Macam-macam operasi file:

1. Open: menghubungkan file dengan program. Setelah itu harus ditentukan file akan
digunakan untuk input (membaca record yang ada dalam file) atau untuk output
(menuliskan record ke file)

a. Open file for input:


#include <iostream>
#include<fstream>
ifstream infile;
infile.open(“DATA.TXT”);
b. Open file for output:
#include <iostream>
#include<fstream>
ofstream outfile;
outfile.open(“HASIL.TXT”);
2. Close: memutuskan hubungan file dengan program, setelah file selesai digunakan
sebagai input maupun output file.

a. Close file yang digunakan untuk input:


infile.close( );
b. Close file yang digunakan untuk output:
outfile.close( );

BAB III: Struktur Data Struct dan File - 69


Algoritma dan Pemrograman II

3. Input file: setelah file dihubungkan dengan program sebagai input, program akan
membaca data yang disimpan dalam file satu persatu dan menyimpannya dalam suatu
variabel. Contoh perintahnya:
if (!infile)
{write (“File tidak dapat dibuka”)}
else
{while (!infile.eof)
[membaca data dari infile dan disimpan ke variabel angka]
{infile.read (angka)
write (angka)}
infile.close()
}

Jika data yang disimpan dalam file berupa record, maka harus disediakan suatu struct
untuk menampung seluruh data yang dibaca dari record. Sebagai contoh lihat potongan
algoritma berikut, untuk membaca data record dari file DATA.TXT ke struct INFO di
memori komputer.
struct INFO {
char NAMA[15]
char ALAMAT[50]
int Umur
char Telepon[10]
}

INFO person;
ifstream indata;
indata.open(“DATA.TXT”);
[membaca record pertama dari file DATA.TXT dan menyimpannya ke
struct person]
indata.read(person)
while (!indata.eof)
{
[menuliskan isi struct person ke layar]
write(person)
[membaca record berikutnya dari file DATA.TXT]
indata.read(person)
}
indata.close()
4. Output file: setelah file dihubungkan dengan program sebagai output, program dapat
menulis data untuk disimpan dalam file. Contoh perintahnya:
if (!outfile)
{write (“File tidak dapat dibuka”)}
else

BAB III: Struktur Data Struct dan File - 70


Algoritma dan Pemrograman II

{outfile.write (angka)
outfile.close()}

Jika data yang akan ditulis ke file berupa struct, maka sebuah struct akan ditulis menjadi
sebuah record dalam file. Sebagai contoh lihat potongan algoritma berikut, untuk
menuliskan struct INFO ke file HASIL.TXT
struct INFO {
char NAMA[15]
char ALAMAT[50]
int Umur
char Telepon[10]
}

INFO people;
ofstream people;
outfile.open(HASIL.TXT”);
Write(“Ketikkan banyaknya data”)
Read(n)
For (i = 1; i <= n; i++)
{
[membaca data dari keyboard dan menyimpannya ke struct person]
read(people)
[menulis struct person ke file HASIL.TXT]
outfile.write(people)
}
outfile.close()

Latihan soal bab 4


1. Modifikasikan algoritma Hitung Nilai sehingga data mahasiswa disimpan ke file. Bila
perlu ubah struktur struct untuk memudahkan input data.
2. Modifikasikan algoritma MiniMarketABC sehingga data barangnya disimpan ke file.
Buatlah file master dan file transaksi untuk memudahkan proses pengolahan data.
3. Buatlah program C++ untuk latihan soal bab 4.2 nomor 3. Lalu buatlah file untuk
menyimpan data dari jawaban 50 orang responden. Jalankan program dan cetak
hasilnya.

BAB III: Struktur Data Struct dan File - 71


Algoritma dan Pemrograman II

4. Buatlah program C++ untuk latihan soal bab 4.2 nomor 4. Lalu buatlah file untuk
menyimpan data inventori dari jawaban 50 produk. Jalankan program dan cetak
hasilnya
5. Buatlah program C++ untuk latihan soal bab 4.2 nomor 5. Lalu buatlah file untuk
menyimpan data dari 50 pegawai. Jalankan program dan cetak hasilnya
6. Buatlah program C++ untuk latihan soal bab 4.2 nomor 7. Lalu buatlah file untuk
menyimpan data dari 50 polis asuransi. Jalankan program dan cetak hasilnya

BAB III: Struktur Data Struct dan File - 72

Anda mungkin juga menyukai