MACAM-MACAM STRUKTUR SELEKSI
Struktur seleksi dibagi menjadi 4 bagian yaitu :
1. Sruktur
seleksi sederhana (if-then)
2. Sruktur
seleksi umum (if – then – else)
3. Sruktur
seleksi tersarang (nested if )
4. Struktur
Case-of
Struktur seleksi sederhana
(if-then)
Bentuk ini merupakan bentuk yang paling
sederhana dari keseluruhan struktur seleksi yang ada. Pada bentuk ini, hanya
jika komparasi memiliki nilai true saja yang akan diikuti oleh suatu proses
khusus.
Syntax :
If (kondisi) then
Blok
statemen untuk kondisi bernilai true
Endif
Contoh:
If ( masa_kerja > 5 ) then
Bonus
:= 50000
Gapok
:= gapok+bonus
Cetak gapok
Endif
Cetak gapok
Dari contoh tersebut dapat dijelaskan, jika
masa kerja karyawan lebih besar 5 tahun, maka akan mendapatkan bonus sebesar
50000 dan gaji pokok yang didapatkan merupakan jumlahan dari gaji pokoknya
dengan bonus yang dia peroleh, tetapi jika komparasi menghasilkan false, maka
gaji pokok yang didapatkan karyawan hanya gaji pokok saja.
Untuk lebih detilnya diberikan contoh dalam
bahasa pascal berikut ini:
Struktur seleksi umum (
if-then-else)
Pada bentuk kedua ini, baik pada kondisi
bernilai true ataupun false diikuti oleh proses khusus tetapi yang harus
diperhatikan bahwa roses khusus pada keadaan true tidak mungkin akan diproses
pada keadaan false dan sebaliknya.
Syntax :
If (kondisi) then
Blok
statemen untuk kondisi bernilai true
Else
Blok
statetemn untuk kondisi bernilai false
endif
Contoh:
If ( masa_kerja > 5 ) then
Bonus
:= 150000
Else
Bonus
:= 0
ENDIF
Gapok
:= gapok+bonus
Cetak gapok
Dengan mengacu pada contoh sebelumnya
terlihat bahwa penggunaan bentuk yang kedua lebih terlihat luwes dalam struktur
algoritmanya dibandingkan dengan penggunaan pada struktur pertama.
Pada kasus ini jika masa kerja lebih besar
5 tahun bernilai true maka karyawan akan mendapatkan bonus sebesar 50000
sedangkan karyawan dengan masa kerja kurang dari atau sama dengan 5 tahun tidak
mendapatkan bonus, sehingga begitu keluar dari struktur decision maka akan
terlihat isi variabel bonus dapat 0 atau 50000 tergantung dari masa kerja
karyawan.
Algoritma tersebut dapat dimodifikasi
dengan bentuk alternatifnya seperti berikut ini :
If ( masa_kerja <= 5 ) then
Bonus
:= 0
Else
Bonus
:= 150000
ENDIF
Gapok
:= gapok+bonus
Cetak gapok
Maka terlihatlah bahwa kedua algoritma
tersebut memiliki kesamaan nilai logika. Sehingga setiap orang bebas memilih
menggunakan algoritma yang akan digunakan.
Lebih jelasnya akan dijabarkan dalam suatu
program dalam bahasa pascal berikut ini:
uses wincrt;
var
nama : string;
masa_kerja, gapok,tmk, bonus :
real;
begin
clrscr;
write('Masukkan nama Karyawan : ');
readln(nama);
write('Masukkan tahun masuk kerja : ');
readln(tmk);
write('Masukkan gaji pokok : ');
readln(gapok);
masa_kerja := 2005 - tmk;
if
(masa_kerja > 5 ) then
bonus := 50000
else
bonus := 0;
gapok := gapok + bonus;
writeln('Gaji Total : ',gapok:8:0);
readln;
end.
Eksekusi dari program tersebut di atas akan
menghasilkan keluaran seperti berikut ini :
Atau kalau dirubah dalam bentuk
alternatifnya program menjadi :
uses wincrt;
var
nama : string;
masa_kerja, gapok,tmk, bonus :
real;
begin
clrscr;
write('Masukkan nama Karyawan : ');
readln(nama);
write('Masukkan tahun masuk kerja : ');
readln(tmk);
write('Masukkan gaji pokok : ');
readln(gapok);
masa_kerja := 2005 - tmk;
if
(masa_kerja <= 5) then
bonus := 0
else
bonus := 50000;
gapok := gapok + bonus;
writeln('Gaji Total : ',gapok:8:0);
readln;
end.
Dan keluarannya adalah :
Dari program terlihat jelas bahwa kedua
algoritma tersebut memberikan hasil yang sama, artinya keduanya dapat dipilih
salah satu sebagai suatu solusi penyelesaian masalah.
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. Bonus
diberikan pada karyawan yang masa kerjanya minimal 5 tahun sebesar 150000.
c. Gaji
= gaji pokok + bonus.
Solusi :
Read(nama,nip,tahun_masuk_kerja,golongan)
If golongan = 1 then
Gaji_pokok
:= 1000000
Else
If
golongan = 2 then
Gaji_pokok
:= 750000
Else
Gaji_pokok
:= 500000
Endif
Endif
Masa_kerja = 2005 – tahun_masuk_kerja
If masa_kerja >= 5 then
Bonus
:= 150000
Else
Bonus
:= 0
Endif
Gaji:=gaji_pokok + bonus
Write(nama,nip,gaji_pokok,bonus,gaji)
Dari Algoritma tersebut dapat dijabarkan
dalam pengkodean Bahasa Pascal sebagai berikut :
uses wincrt;
var
nama, nip : string;
masa_kerja, gapok,tmk, bonus :
real;
gol :
integer;
begin
clrscr;
write('Masukkan nama Karyawan : ');
readln(nama);
write('MAsukkan NIP :
');
readln(nip);
write('Masukkan Golongan
readln(gol);
write('Masukkan tahun masuk kerja : ');
readln(tmk);
if
( gol =1 ) then
gapok := 1000000
else
if (gol=2) then
gapok := 750000
else
gapok := 500000;
masa_kerja
:= 2005 - tmk;
if
(masa_kerja > 5 ) then
bonus := 150000
else
bonus := 0;
gapok := gapok + bonus;
writeln('Gaji Total : ',gapok:8:0);
readln;
end.
Sedangkan untuk keluarannya adalah sebagai
berikut :
Pada kasus terakhir untuk bentuk decision
sebenarnya sudah menggunakan struktur seleksi tersarang untuk lebih detailnya
akan dibahas berikut ini.
Struktur seleksi tersarang (nested
if )
Bentuk ketiga merupakan bentuk yang tidak
memiliki struktur khusus, artinya keadaannya sangat bergantung dari kasus atau
permasalahan yang terjadi.
Yang dapat digunakan sebagai sandaran
adalah apabila salah satu pohon keputusan baik true ataupun false diikuti oleh
struktur seleksi lainnya maka bentuk itulah yang dikatakan struktur seleksi
tersarang. Artinya suatau struktur seleksi akan diproses apabila struktur
seleksi di atasnya ada.
Contoh 1 :
If
(kondisi 1) then
If
(kondisi 2) then
Statemen
1
Else
Statemen
2
Endif
Else
Statemen
3
Endif
Bentuk kondisi 2 tersarang pada kondisi 1 artinya
bahwa kondisi 2 akan dikerjakan sangat bergantung dari kondisi 1 khususnya jika
bernilai true.
Contoh 2 :
If (kondisi 1 ) then
Statemen
1
Else
If
(kondisi 2) then
Statemen
2
Else
Statemen
3
Endif
Endif
Kondisi 2 tersarang pada kondisi 1
khususnya jika kondisi 1 bernilai false, artinya kondisi 2 akan diroses atau
tidak bergantung pada hasil komparasi pada kondisi 1. Untuk lebih jelasnya statemen
3 akan diproses jika kondisi 1 false dan kondisi 2 false. Statemen 2 akan
diproses jika kondisi 1 false dan kondisi 2 true dan seterusnya.
Contoh 3:
If (kondisi 1 ) then
If
(kondisi 2) then
Statemen
1
Else
Statemen
2
Endif
Else
If
(kondisi 3) then
Statemen
3
Else
Statemen
4
Endif
Endif
Kondisi 2 tersarang dengan kondisi 1 untuk
keadaan bernilai true dan kondisi 3 tersarang dengan kondisi 1 untuk keadaan
bernilai false. Statemen 4 akan dikerjakan jika kondisi 1 false dan kondisi 3
false, statemen 1 akan dikerjakan jika kondisi 1 true dan kondisi 2 true dan
seterusnya.
Contoh 4:
If (kondisi 1 ) then
Statemen
1
Else
Statemen
2
Endif
If (kondisi 2) then
Statemen
3
Else
Statemen
4
Endif
Dari kedua decision tersebut keduanya
adalah saling bebas, artinya tidak tersarang meskipun kedua decision
berdekatan.
Decision tersarang jika suatu decision
berada dalam decision yang lainnya.
KASUS :
Sebuah perusahaan akan menghitung gaji
karyawan dengan ketentuan sebagai berikut:
1. Gaji
pokok berdasarkan golongan :
GOLONGAN |
GAJI POKOK |
1 |
1000000 |
2 |
750000 |
3 |
500000 |
2. Status
1 artinya menikah, 2 artinya janda atau duda dan 3 belum menikah.
3. Bonus
diberikan pada karyawan yang masa kerjanya minimal 5 tahun sebesar 150000.
4. Tunjangan
menikah diberikan pada karyawan yang menikah sebesar 10 % dari gaji Pokok bagi
karyawan yang statusnya menikah.
5. Tunjangan
anak diberikan pada karyawan yang statusnya menikah dan maksimal jumlah anak 3
sebesar 12.5 % dari gaji pokok per anak.
6. Gaji
= gaji pokok + bonus + tunjangan menikah + tunjangan anak.
Solusi :
Read(nama,nip,status,janak,tahun_masuk_kerja,golongan)
If golongan = 1 then
Gaji_pokok
:= 1000000
Else
If
golongan = 2 then
Gaji_pokok
:= 750000
Else
Gaji_pokok
:= 500000
Endif
Endif
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
T_menikah
:= 0.1 * gaji_pokok
Else
T_anak
:= janak * 0.125 * gaji_pokok
T_menikah
:= 0.1 * gaji_pokok
ENDIF
ENDIF
Gaji:=gaji_pokok + bonus +T_menikah + T_anak
Write(nama,nip,gaji_pokok,bonus,t_menikah,t_anak,gaji)
Algoritma tersebut dapat dikodekan dalam
bahasa pascal sebagai berikut ini :
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
readln(gol);
write('Masukkan tahun masuk kerja : ');
readln(tmk);
write('MAsukkan status
readln(status);
write('Masukkan jumlah anak : ');
readln(janak);
if
( gol =1 ) then
gapok := 1000000
else
if (gol=2) then
gapok := 750000
else
gapok := 500000;
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;
gapok := gapok + bonus + t_menikah + t_anak;
writeln('Gaji Total : ',gapok:8:0);
readln;
end.
Sedangkan hasil eksekusinya dapat dilihat seperti gambar berikut ini :
Pada kasus di atas, program dapat
disederhanakan, khususnya dalam inputan jumlah anak. Idealnya jika statusnya
belum menikah maka jumlah anak tidak perlu diinputkan dan secara otomatis
jumlah anak terisi 0.
Algoritmanya menjadi sebagai berikut ini:
Read(nama,nip,tahun_masuk_kerja,golongan)
Read(status)
If status = 3 then
Write(janak
=0)
Else
Read(janak)
endif
If golongan = 1 then
Gaji_pokok
:= 1000000
Else
If
golongan = 2 then
Gaji_pokok
:= 750000
Else
Gaji_pokok
:= 500000
Endif
Endif
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
T_menikah
:= 0.1 * gaji_pokok
Else
T_anak
:= janak * 0.125 * gaji_pokok
T_menikah
:= 0.1 * gaji_pokok
ENDIF
ENDIF
Gaji:=gaji_pokok + bonus +T_menikah + T_anak
Write(nama,nip,gaji_pokok,bonus,t_menikah,t_anak,gaji)
Sedangkan pengkodean dalam bahasa pascal
menjadi seperti berikut ini :
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
readln(gol);
write('Masukkan tahun masuk kerja : ');
readln(tmk);
write('MAsukkan status
readln(status);
if
(status=3) then
writeln('Jumlah anak = 0')
else
begin
write('Masukkan jumlah anak : ');
readln(janak);
end;
if
( gol =1 ) then
gapok := 1000000
else
if (gol=2) then
gapok := 750000
else
gapok := 500000;
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;
gapok := gapok + bonus + t_menikah + t_anak;
writeln('Gaji Total : ',gapok:8:0);
readln;
end.
Hasil eksekusinya sebagai berikut ini :
Bentuk Case-of
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
readln(gol);
write('Masukkan tahun masuk kerja : ');
readln(tmk);
write('MAsukkan status
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
readln(gol);
write('Masukkan tahun masuk kerja : ');
readln(tmk);
write('MAsukkan status
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:
0 komentar:
Posting Komentar