Bentuk lain dari suatu model seleksi adalah
bentuk case-of, di mana pada bentuk ini tidak dilakukan pengujian true atau
false, tetapi suatu proses sudah dikelompokkan berdasarkan pilihan yang sudah
ditetapkan.
Syntax :
Case pilihan of
1: statemen 1
2 :
statemen 2
3 :
statemen 3
dan seterusnya.
ENDCASE
KASUS:
Sebuah perusahaan akan menghitung gaji
karyawan dengan ketentuan sebagai berikut:
a. Gaji
pokok berdasarkan golongan
|
GOLONGAN
|
GAJI POKOK
|
|
1
|
1000000
|
|
2
|
750000
|
|
3
|
500000
|
b. Status
1 artinya menikah, 2 artinya janda atau duda dan 3 belum menikah.
c. Bonus
diberikan pada karyawan yang masa kerjanya minimal 5 tahun sebesar 150000
d. Tunjangan
menikah diberikan pada karyawan yang menikah sebesar 10 % dari gaji Pokok bagi
karyawan yang statusnya menikah
e. Tunjangan
anak diberikan pada karyawan yang statusnya menikah dan maksimal jumlah anak 3
sebesar 12.5 % dari gaji pokok per anak
f. Gaji
= gaji pokok + bonus + tunjangan menikah + tunjangan anak
Solusi :
Read(nama,nip,status,janak,tahun_masuk_kerja,golongan)
CASE
golongan OF
1 :
gaji_pokok := 1000000
2 :
gaji_pokok := 750000
3 :
gaji_pokok := 500000
endcase
Masa_kerja = 2005 – tahun_masuk_kerja
If masa_kerja >= 5 then
Bonus
:= 150000
Else
Bonus
:= 0
Endif
If status 3 then
T_menikah
:= 0
T_anak := 0
Else
If
janak > 3 then
T_anak
:= 0.125 * 3 * gaji_pokok
Else
T_anak
:= janak * 0.125 * gaji_pokok
ENDIF
ENDIF
Gaji:=gaji_pokok + bonus +T_menikah + T_anak
Write(nama,nip,gaji_pokok,bonus,t_menikah,t_anak,gaji)
Pengkodean algoritma tersebut dalam pascal
menjadi :
uses wincrt;
var
nama, nip :
string;
masa_kerja, gapok,tmk, bonus :
real;
t_menikah,t_anak :
real;
gol,status,janak :
integer;
begin
clrscr;
write('Masukkan nama Karyawan : ');
readln(nama);
write('MAsukkan NIP :
');
readln(nip);
write('Masukkan Golongan 1/2/3:
');
readln(gol);
write('Masukkan tahun masuk kerja : ');
readln(tmk);
write('MAsukkan status 1/2/3
: ');
readln(status);
write('Masukkan jumlah anak : ');
readln(janak);
case gol of
1 : gapok := 1000000;
2 : gapok := 750000;
3 : gapok := 500000;
end;
masa_kerja := 2005 - tmk;
if
(masa_kerja >= 5 ) then
bonus := 150000
else
bonus := 0;
if
(status = 3) then
begin
t_menikah := 0;
t_anak :=0;
end
else
if (janak > 3 ) then
begin
t_menikah := 0.1 * gapok;
t_anak := 3 * gapok * 0.125;
end
else
begin
t_menikah := 0.1 * gapok;
t_anak := janak * gapok * 0.125;
end;
clrscr;
writeln('Nama Karyawan :
',nama);
writeln('N I P :
',nip);
writeln('Gaji Pokok :
',gapok:7:0);
writeln('Bonus :
',bonus:5:0);
writeln('Tunjangan Menikah : ',t_menikah:7:0);
writeln('Tunjangan Anak :
',t_anak:7:0);
gapok := gapok + bonus + t_menikah + t_anak;
writeln('Gaji Total : ',gapok:8:0);
readln;
end.
Hasil eksekusi
terlihat seperti berikut ini:
Algoritma tersebut dimodifikasi menjadi
bentuk seperti berikut ini :
Read(nama,nip,tahun_masuk_kerja,golongan)
Read(status)
If status = 3 then
Janak
:= 0
Else
Read(janak)
endif
CASE
golongan OF
1 :
gaji_pokok := 1000000
2 :
gaji_pokok := 750000
3 :
gaji_pokok := 500000
endcase
Masa_kerja = 2005 – tahun_masuk_kerja
If masa_kerja >= 5 then
Bonus
:= 150000
Else
Bonus
:= 0
Endif
If status 3 then
T_menikah
:= 0
T_anak := 0
Else
If
janak > 3 then
T_anak
:= 0.125 * 3 * gaji_pokok
Else
T_anak
:= janak * 0.125 * gaji_pokok
ENDIF
ENDIF
Gaji:=gaji_pokok + bonus +T_menikah + T_anak
Write(nama,nip,gaji_pokok,bonus,t_menikah,t_anak,gaji)
Kemudian dikodekan dalam bahasa pascal
menjadi:
uses wincrt;
var
nama, nip :
string;
masa_kerja, gapok,tmk, bonus :
real;
t_menikah,t_anak :
real;
gol,status,janak :
integer;
begin
clrscr;
write('Masukkan nama Karyawan : ');
readln(nama);
write('MAsukkan NIP :
');
readln(nip);
write('Masukkan Golongan 1/2/3: ');
readln(gol);
write('Masukkan tahun masuk kerja : ');
readln(tmk);
write('MAsukkan status 1/2/3
: ');
readln(status);
if
(status=3) then
writeln('Jumlah anak = 0')
else
begin
write('Masukkan jumlah anak : ');
readln(janak);
end;
case gol of
1 : gapok := 1000000;
2 : gapok := 750000;
3 : gapok := 500000;
end;
masa_kerja := 2005 - tmk;
if
(masa_kerja >= 5 ) then
bonus := 150000
else
bonus := 0;
if
(status = 3) then
begin
t_menikah := 0;
t_anak :=0;
end
else
if (janak > 3 ) then
begin
t_menikah := 0.1 * gapok;
t_anak := 3 * gapok * 0.125;
end
else
begin
t_menikah := 0.1 * gapok;
t_anak := janak * gapok * 0.125;
end;
clrscr;
writeln('Nama Karyawan :
',nama);
writeln('N I P :
',nip);
writeln('Gaji Pokok :
',gapok:7:0);
writeln('Bonus :
',bonus:5:0);
writeln('Tunjangan Menikah : ',t_menikah:7:0);
writeln('Tunjangan Anak : ',t_anak:7:0);
gapok := gapok + bonus + t_menikah + t_anak;
writeln('Gaji Total : ',gapok:8:0);
readln;
end.
Hasil eksekusi Program sebagai berikut ini: