Anda di halaman 1dari 15

1.1.

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

procedure menu_pilihan(output menu : integer)


{mengisikan pilihan menu}
{K. Awal. : Menampilkan pilihan menu..}
{K. Akhir : menu berisi nomor pilhan menu..}
ALGORITMA:

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

procedure create_data(output elemen : datapegawai, I/O awal, akhir : point)


{berisi data pegawai mulai dari NIP, nama pegawai, golongan dan jumlah
anak;}
DEKLARASI
baru : point
lagi : char
i : integer
ALGORTIMA
awal ← nil
akhir ← nil
i←1
repeat
alloc(baru)
output('DATA PEGAWAI KE-',i)
output('====================')
output ('NIP Pegawai : ')
input (elemen.nip)

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

procedure sisip_belakang(output elemen : datapegawai, output akhir : point)


{ K.Awal : data yang akan disisipkan(elemen), pointer penunjuk awal dan
pointer penunjuk akhir sudah terdifinisi}

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

Procedure tambah_data(output elemen : datapegawai, I/O awal, akhir : point)


{menambahkan data baru yang akan disimpan sesuai posisi yang kita
inginkan}
{K.Awal:mengisikan data pegawai baru}
{K.Akhir:Data baru yang disimpan akan tersimpan sesuai posisi yg kita
inginkan}
DEKLARASI
baru, bantu : point
ketemu : boolean
datasisip : datapegawai
lagi : char
ALGORITMA
repeat
output('Masukan Data Pegawai Baru ')
output('========================================')
output('NIP Pegawai : ')
input(elemen.nip)
output('Nama Pegawai : ')

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

procedure hapus_depan(I/O awal, akhir : point)


{K.Awal: pointer penunjuk awal dan pointer penunjuk akhir sudah terdifinisi}
{K.Akhir. : menghasilkan single linked list yang sudah dihapus satu simpul
didepan}
DEKLARASI
phapus : point
ALGORITMA
phapus ←awal
if (awal = akhir) then
awal ← nil
akhir ←nil
else
awal ← awal↑.next
endif
dealloc(phapus)
endprocedure

procedure hapus_belakang(I/O awal, akhir : point)


{K.Awal:pointer penunjukawaldanpointer penunjukakhirsudahterdifinisi}
{K.Akhir:menghasilkansingle linked list yang sudah dihapus satu simpul
dibelakang}

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

Procedure hapus_data(I/O awal, akhir : point)


{menghapus data pegawai sesuai yang kita inginkan. }
DEKLARASI
phapus, bantu : point
posisihapus, hapuscari : Integer
ALGORITMA
output('Hapus Data Ke : ')
input(hapuscari)
phapus ← awal
posisihapus ←1

while (phapus ≠ akhir) and (posisihapus ≠ hapuscari) do

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

Procedure gaji_pegawai(awal : point);


{ menghitung data pegawai mulai dari gajipokok, tunjangan dan total gaji}
DEKLARASI
bantu, baru : point
ALGORITMA
bantu ← awal
while (bantu≠nil) do

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

bantu↑.info.tunjangan ← bantu↑.info.anak * 100000


bantu↑.info.totalgaji ←bantu↑.info.gajipokok + bantu↑.info.tunjangan
baru↑.info ←bantu↑.info
bantu ←bantu↑.next
endprocedure

procedure seqsearch(awal : point)


{ mencari data pegawai berdasarkan NIP dengan metode sequential search
tanpa sentinel.}
DEKLARASI
i:point
x:integer
ketemu : boolean
ALGORITMA
output('Masukkan NIP Pegawai Yang Dicari : ')
input (x)
i ←awal
ketemu ←false
while (i ≠nil) and ( not ketemu ) do
if ( i↑.info.nip = x ) then
output('DATA PEGAWAI DENGAN NIP ',i↑.info.nip)
output('Nama Pegawai : ',i↑.info.nama)

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

function terbesar(awal : point)→real


{mengembalikan nilai terbesar(awal).}
DEKLARASI
i : point
ALGORITMA
i ← awal
terbesar ← i↑.info.totalgaji
while ( i ≠nil) do
if ( i↑.info.totalgaji > terbesar ) then
terbesar ← i↑.info.totalgaji
i ← i↑.next
endif
endwhile
endfunction

function terkecil(awal : point)→real


{mengembalikan nilai terkecil(awa).}

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

function ratarata(awal : point)→real


{mengembalikan nilai terbesar(awal)}
DEKLARASI
i : point
jumlah : real
n : integer
ALGORITMA
i ←awal
jumlah ←0
n ←0
while ( i ≠ nil) do
jumlah ←jumlah + i↑.info.totalgaji
n ←n + 1
i ←i↑.next
endwhile
ratarata ←jumlah / n
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

procedure destroy_data(output awal : point)


{menghapus semua data yang telah ada}
DEKLARASI
phapus : point
ALGORITMA
while(awal ≠ nil) do
phapus ←awal
awal ←awal↑.next
endwhile
dealloc(phapus)
output('Semua Data Sudah DiHapus (Tekan Enter!)')
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

Anda mungkin juga menyukai