Algoritma Kasus
PROGRAM Linked_List
{Program untuk menampilkan menu pilihan, menciptakan data pegawai,
memnghitung gaji pegawai, mencari data pegawai, menghitung gaji terbesar,
gaji terkecil, gaji rata-rata dan menampilkan data pegawai..}
DEKLARASI
type
datapegawai = record
< nip,anak : integer
tunjangan,gajipokok : real
totalgaji : real
nama : string
golongan : char >
endrecord
point = ↑data
data = record
< info : datapegawai
next : point>
endrecord
awal, akhir : point
menu : integer
elemen : datapegawai
1
output (' MENU PILIHAN ')
output ('================')
output (' 1. Create Data ')
output (' 2. Tambah Data Pegawai ')
output (' 3. Hapus Data Pegawai ')
output (' 4. Cari Data Pegawai ')
output (' 5. Tampil Data Pegawai ')
output (' 6. Destroy Data ')
output (' 0. Keluar ')
output (' Pilihan Anda [0-6] : ')
input(menu)
endprocedure
2
output ('Nama Pegawai : ')
input(elemen.nama)
repeat
output('Golongan[A/B/C] : ')
input (elemen.golongan)
elemen.golongan←upcase(elemen.golongan)
until (elemen.golongan='A')or(elemen.golongan='B')or(elemen.golongan='C')
output ('Jumlah Anak : ')
input(elemen.anak)
baru↑.info ← elemen;
if (awal = nil)
then
baru↑.next ← nil
akhir ← baru
else
baru↑.next ← awal
endif
awal ←baru
i ← i+1
output('Masukkan Data Pegawai Lagi [Y/T] ? : ')
input (lagi)
lagi ← upcase(lagi)
until lagi = 'T'
endprocedure
3
{K.Akhir: menghasilkan satu simpul yang disisipkan dibelakang pada single
linked list}
DEKLARASI
baru : point
ALGORITMA
alloc(baru)
baru↑.info ← elemen
baru↑.next ← nil
akhir↑.next ← baru
akhir ← baru
endprocedure
4
input(elemen.nama)
repeat
output('Golongan[A/B/C] : ')
input(elemen.golongan)
elemen.golongan←upcase(elemen.golongan)
until (elemen.golongan='A')or(elemen.golongan='B')or(elemen.golongan='C')
output('Jumlah Anak : ')
input (elemen.anak)
output('Tambahkan Setelah NIP Pegawai : ')
input (datasisip.nip)
bantu ← awal
ketemu ← false
while (not ketemu) and (bantu ≠ nil) do
if (datasisip.nip = bantu↑.info.nip) then
ketemu ← true
else
bantu ← bantu↑.next
endif
if (ketemu) then
if (bantu = akhir) then
sisip_belakang(elemen,akhir)
else
alloc(baru)
baru↑.info ← elemen
baru↑.next ← bantu↑.next
bantu↑.next ← baru
endif
else
output ('NIP Sebelumnya Tidak Ditemukan!')
endif
5
endwhile
output('Ingin Menambah Data Pegawai Lagi [Y/T] ? : ')
input(lagi)
lagi ← upcase(lagi)
until lagi = 'T'
endprocedure
6
DEKLARASI
phapus : point
ALGORITMA
phapus ← awal
if (awal = akhir) then
awal← nil
akhir ← nil
else
while (phapus↑.next ≠ akhir) do
phapus←phapus↑.next
endwhile
endif
akhir ← phapus
phapus ← phapus↑.next
akhir↑.next←nil
dealloc(phapus)
endprocedure
7
phapus ← phapus↑.next
posisihapus←posisihapus + 1
if (posisihapus = hapuscari ) then
if (awal = phapus) then
hapus_depan (awal, akhir)
else if ( akhir = phapus ) then
hapus_belakang (awal, akhir)
else
bantu ← awal
while (bantu↑.next ≠ phapus) do
bantu ←bantu↑.next
bantu↑.next ← phapus↑.next
dealloc(phapus)
endif
endif
output('Data Pegawai Ke-',hapuscari,' Sudah Dihapus')
else
output('Data Pegawai Ke-',hapuscari,' Tidak Ada (Periksa Data Anda)
!')
endif
output('Tekan Enter Untuk Melanjutkan !')
endprocedure
8
alloc(baru)
endwhile
case bantu↑.info.golongan of
'A' : bantu^.info.gajipokok ← 3000000
'B' : bantu^.info.gajipokok ← 2000000
'C' : bantu^.info.gajipokok ← 1000000
endcase
9
output('Golongan : ',i↑.info.golongan)
output('Jumlah Anak : ',i↑.info.anak)
output('Gaji Pokok : ',i↑.info.gajipokok)
output('Tunjangan : ',i↑.info.tunjangan)
output('Total Gaji : ',i↑.info.totalgaji)
ketemu := true
else
output('NIP Pegawai ',x,' Tidak Ditemukan!')
endif
endwhile
i := i↑.next
endprocedure
10
DEKLARASI
i : point
ALGORITMA
i ← awal
terkecil ← i↑.info.totalgaji
while ( i ≠ nil) do
if ( i↑.info.totalgaji < terkecil ) then
terkecil ←i↑.info.totalgaji
i ← i↑.next
endif
endwhile
endfunction
11
procedure tampil_data(awal : point)
{menampilkan NIP, nama pegawai, golongan, jumlah anak, gaji pokok,
tunjangan, total gaji, gaji terbesar, gaji terkecil dan gaji rata-rata.}
DEKLARASI
bantu : point
i:integer
ALGORITMA
i←0
bantu ←awal
output('______________________________________________________
__________________________')
output('DATA GAJI PEGAWAI')
output('==================================================
==============================')
output('| NIP | NAMA | GOLONGAN | ANAK | GAJI POKOK |
TUNJANGAN | TOTAL GAJI |')
while ( bantu ≠ nil) do
i←i+1
output(bantu↑.info.nip)
output (bantu↑.info.nama)
output (bantu↑.info.golongan)
output (bantu↑.info.anak)
output (bantu↑.info.gajipokok)
output (bantu↑.info.tunjangan)
output (bantu↑.info.totalgaji)
bantu ←bantu↑.next
endwhile
12
output('________________________________________________________
________________________')
output ('Gaji Terbesar : ',terbesar(awal):10:0)
output ('Gaji Terkecil : ',terkecil(awal):10:0)
output ('Gaji Rata-rata : ',ratarata(awal):10:0)
output ('Tekan Enter untuk melanjutkan !!')
endprocedure
{Program Utama}
ALGORITMA
repeat
menu_pilihan(menu)
case (menu) of
1 : create_data(elemen, awal, akhir)
2 : if (awal = nil) then
output('Data Masih Kosong, Isilah Data Terlebih Dahulu !')
13
else
tambah_data(elemen, awal, akhir)
endif
3 : if (awal = nil) then
Output('Data Masih Kosong, Isilah Data Terlebih Dahulu !')
else
hapus_data(awal, akhir)
endif
4 : if (awal = nil) then
output('Data Masih Kosong, Isilah Data Terlebih Dahulu !')
else
gaji_pegawai(awal)
seqsearch(awal)
endif
5 : if (awal = nil) then
output ('Data Masih Kosong, Isilah Data Terlebih Dahulu !')
else
gaji_pegawai(awal)
tampil_data(awal)
endif
6 : if (awal = nil) then
output('Data Masih Kosong, Isilah Data Terlebih Dahulu !')
else
destroy_data(awal)
endif
endcase
until (menu=0)
14
15