Akhmad Dul Ikhsan

Engineer

Developer

Freelancer

Coder

Minggu, 01 Mei 2022

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 1/2/3: ');

     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 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);

 

     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 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;

 

 

     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 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:


















Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna Veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.

0 komentar:

Posting Komentar

Contact Me

Adress/Street

Adipasir Rakit Banjarnegara Jawa Tengah Indonesia

Phone number

+(62) 8966 9374 430

Website

www.akhmaddulikhsan29.blogspot.com