Rabu, 07 Oktober 2015

Metode Perancangan Program 4

MODUL IV
STRUKTUR KONTROL PILIHAN

TUJUAN

         Untuk menguraikan penggunaan pilihan sederhana, pilihan banyak dan pilihan bersarang dalam algoritma
         Untuk memperkenalkan kunstruksi case dalam pseudocode
         Untuk mengembangkan algoritma menggunakan berbagai struktur kontrol pilihan

STRUKTUR KONTROL PILIHAN

Kita dapat menggunakan struktur kontrol pilihan dalam pseudocode untuk menggambarkan sebuah pilihan diantara dua atau lebih tindakan, tergantung kepada sebuah kondisi adalah benar atau salah. Kondisi ini berdasarkan pada sebuah perbandingan 2 hal, dan biasanya diekspresikan dengan salah satu operator hubungan berikut ini :
<          kurang dari                                          >          lebih dari
=          sama dengan                                       <=        kurang atau sama dengan
>=        lebih besar atau sama                          <>        tidak sama

1. Pilihan sederhana (pernyataan IF [JIKA] sederhana)

Pilihan sederhana muncul ketika sebuah pilihan dibuat diantara dua alternatif path, tergantung pada hasil dari sebuah kondisi apakah benar atau salah. Struktur ini direpresentasikan dalam pseudocode dengan menggunakan kata kunci IF (JIKA), THEN (MAKA), ELSE (LAIN) dan ENDIF (AKHIRJIKA). Sebagai contoh :
IF account_balance < $300 THEN
      service_charge = $5.00
ELSE
      service_charge = $2.00
ENDIF
Atau
JIKA saldo_rekening < $300 MAKA
biaya_jasa = $ 5.00
ELSE
biaya_jasa = $ 2.00
END IF           

2. Pilihan sederhana dengan cabang salah tidak ada (pernyataan null else)

Pernyataan null ELSE adalah variasi dari struktur IF sederhana. Pernyataan null ELSE digunakan jika sebuah pekerjaan dilakukan hanya jika sebuah kondisi tertentu bernilai benar. Apabila kondisinya salah, maka tidak ada pemrosesan yang dilakukan dan pernyataan IF akan dilewati. Sebagai contoh :
IF student_attendance = part_time THEN
      add 1 to part_time_count
ENDIF
Atau
JIKA kehadiran_mahasiswa = paruh_waktu MAKA
      tambahkan 1 pada jumlah_paruh_waktu
AKHIRJIKA

3. Kombinasi pilihan (kombinasi pernyataan IF)

Kombinasi pernyataan IF adalah pernyataan IF yang berisi banyak kondisi, setiap pernyataan dihubungkan dengan operator logika AND (DAN) atau OR (ATAU). Jika kondisi dikombinasikan dengan menggunakan penghubung AND, kedua kondisi harus bernilai benar untuk membuat kondisi kombinasi bernilai benar. Sebagai contoh :
IF student_attendance = part_time
AND student_gender = female THEN
      add 1 to fem_part_time_count
ENDIF
Atau
JIKA kehadiran_mahasiswa = paruh_waktu
DAN gender_mahasiswa = wanita MAKA
      tambahkan 1 pada jumlah_wanita_paruh_waktu
AKHIRJIKA
Dalam kasus tersebut setiap data mahasiswa akan melalui dua pengujian. Hanya mahasiswa wanita dan kehadirannya paruh waktu saja yang akan dipilih, dan fem_part_time_count akan ditambah satu.
Apabila penghubung OR dipergunakan untuk menggabungkan dua buah kondisi, maka hanya satu kondisi yang perlu bernilai benar untuk kondisi kombinasi bernilai benar. Apabila tidak ada kondisi yang bernilai benar, maka kondisi kombinasi bernilai salah. Sebagai contoh apabila logika AND pada contoh di atas diganti dengan OR sebagai berikut :
IF student_attendance = part_time
OR student_gender = female THEN
      add 1 to fem_part_time_count
ENDIF
Atau
JIKA kehadiran_mahasiswa = paruh_waktu
ATAU gender_mahasiswa = wanita MAKA
      tambahkan 1 pada jumlah_wanita_paruh_waktu
AKHIRJIKA
Dalam contoh tersebut, baik salah satu atau kedua kondisi bernilai benar, maka kondisi kombinasi akan bernilai benar. Sehingga counter akan ditambah satu apabila :
1.      mahasiswa adalah paruh waktu, tidak peduli apakah gendernya, atau
2.      mahasiswa adalah wanita, tidak peduli apakah pola kehadirannya
Hanya mahasiswa yang bukan wanita dan bukan paruh waktu akan diabaikan. Sehingga fem_part_time_count akan memuat jumlah mahasiswa wanita paruh waktu, mahasiswa pria paruh waktu dan mahasiswa penuh (purna) waktu. Akibatnya fem_part_time_count tidak lagi merupakan nama yang berarti untuk variabel tersebut.
Lebih dari dua kondisi dapat digabungkan bersama dengan operator AND dan OR. Tetapi apabila kedua operator dipergunakan dalam satu pernyataan IF, maka tanda kurung harus dipergunakan untuk menghindari kemenduaan. Sebagai contoh :
IF record_code = ‘23’
OR update_code = delete
AND account_balance = zero THEN
      delete customer record
ENDIF
Atau
JIKA kode_record = ‘23’
ATAU kode_perubahan = hapus
DAN saldo_rekening = nol MAKA
      Hapus record pelanggan
AKHIRJIKA
Lojik dari pernyataan tersebut membingungkan, apakah dua kondisi pertama harus dikelompokkan bersama dan dioperasikan lebih dulu, atau dua kondisi kedua harus dikelompokkan dan dioperasikan lebih dulu. Algoritma pseudocode harus tidak boleh mendua. Tidak ada aturan mana yang lebih didahulukan untuk operator logika dalam pseudocode, tetapi terdapat aturan mana yang harus didahulukan dalam bahasa pemrograman. Tanda kurung harus digunakan dalam pseudocode untuk menghindari kemenduaan arti yang dimaksudkan, sehingga urutan proses yang diinginkan dapat diketahui. Sebagai contoh untuk permasalahan di atas dapat dituliskan dengan :
IF (record_code = ‘23’
OR update_code = delete)
AND account_balance = zero THEN
      delete customer record
ENDIF
Atau
JIKA (kode_record = ‘23’
ATAU kode_perubahan = hapus)
DAN saldo_rekening = nol MAKA
      Hapus record pelanggan
AKHIRJIKA

Operator NOT

Operator NOT dapat digunakan untuk logika negasi dari sebuah kondisi sebagai berikut :
IF NOT (record_code = ‘23’) THEN
            update customer record
ENDIF
Operator AND dan OR dapat juga digunakan dengan operator NOT, tetapi perhatian besar harus dilakukan dan tanda kurung harus digunakan untuk menghindari kemenduaan.


4. Pilihan bersarang (pernyataan IF bersarang)

Pilihan bersarang muncul ketika kata IF muncul lebih dari satu kali dalam sebuah pernyataan IF. Pernyataan IF bersarang dapat di klasifikasikan menjadi linier dan non linier.

Pernyataan IF bersarang linier

Pernyataan IF bersarang linier digunakan jika sebuah field (medan) diuji coba untuk berbagai nilai dan tindakan yang berbeda harus diambil untuk setiap nilai. Bentuk IF bersarang ini disebut linier karena setiap ELSE segera diikuti kondisi IF yang berkaitan. Perbandingan dilakukan sampai kondisi yang benar ditemukan, dan tindakan tertentu dieksekusi sampai pernyataan ELSE berikutnya dicapai. Sebagai contoh :
IF record_code = ‘A’ THEN
      increment counter_A
ELSE
      IF record_code = ‘B’ THEN
            increment counter_B
      ELSE
            IF record_code = ‘C’ THEN
                  increment counter_C
            ELSE
                  increment error_counter
            ENDIF
      ENDIF
ENDIF
            Atau



JIKA kode_record = ‘A’ MAKA
      tambah penghitung_A
LAIN
      JIKA kode_record = ‘B’ MAKA
            tambah penghitung_B
      LAIN
            JIKA kode_record = ‘C’ MAKA
                  tambah penghitung_C
            LAIN
                  tambah penghitung_salah
            AKHIRJIKA
      AKHIRJIKA
AKHIRJIKA
Perhatikan bahwa terdapat pernyataan dengan IF, ELSE dan ENDIF yang sama jumlahnya, dan indentasi memudahkan pembacaan dan pemahaman algoritma.

Pernyataan IF bersarang non-linier

Pernyataan IF bersarang non-linier muncul ketika sejumlah kondisi yang berbeda perlu dipenuhi terlebih dahulu sebelum tindakan tertentu dapat terjadi. Dikatakan non-linier karena pernyataan ELSE dapat dipisahkan dari pernyataan IF yang menjadi pasangannya. Indentasi menjadi penting ketika mengekspresikan bentuk pilihan ini dalam pseudocode. Sebagai contoh :
IF student_attendance = part_time THEN
      IF student_gender = female THEN
            IF student_age > 21 THEN
                  add 1 to mature_fem_pt_students
            ELSE
                  add 1 to young_fem_pt_students
            ENDIF
      ELSE
            add 1 to male_pt_students
      ENDIF
ELSE
      add 1 to full_time_students
ENDIF
Atau


JIKA kehadiran_mahasiswa = paruh_waktu MAKA
      JIKA gender_mahasiswa = wanita MAKA
            JIKA umur_mahasiswa > 21 MAKA
                  tambah 1 pada mahasiswa_prw_wanita_dewasa
            LAIN
                  Tambah 1 pada mahasiswa_prw_wanita_remaja
            AKHIRJIKA
      LAIN
            tambah 1 pada mahasiswa_prw_pria
      AKHIRJIKA
LAIN
      tambah 1 pada mahasiswa_penuh_waktu
AKHIRJIKA

Perhatikan bahwa terdapat pernyataan dengan IF, ELSE dan ENDIF dalam jumlah yang sama. Akan tetapi pernyataan IF bersarang non-linier bisa memuat kesalahan lojik yang mungkin sulit dibetulkan,  sehingga harus dipergunakan sehemat mungkin dalam pseudocode. Apabila memungkinkan pernyataan IF bersarang non-linier dapat digantikan dengan kombinasi pernyataan IF. Penggantian ini dimungkinkan dalam pseudocode karena dua pernyataan IF berurutan bertindak seperti kombinasi pernyataan IF yang menggunakan operator AND. Sebagai contoh :
IF student_attendance = part_time THEN
      IF student_age > 21 THEN
            increment mature_pt_student
      ENDIF
            ENDIF
            Atau
JIKA kehadiran_mahasiswa = paruh_waktu MAKA
      JIKA umur_mahasiswa > 21 MAKA
            tambah mahasiswa_prw_dewasa
      AKHIRJIKA
AKHIRJIKA
Algoritma di atas dapat dituliskan dengan menggunakan kombinasi pernyataan IF sebagai berikut :
IF student_attendance = part_time
AND student_age > 21 THEN
      increment mature_pt_student
            ENDIF
            Atau
JIKA kehadiran_mahasiswa = paruh_waktu
DAN umur_mahasiswa > 21 MAKA
      tambah mahasiswa_prw_dewasa
AKHIRJIKA
Hasil yang sama akan didapatkan dari kedua ekspresi pseudocode di atas, tetapi bentuk yang terakhir lebih baik, apabila lojik memungkinkannya, maka yang terakhir lebih mudah dimengerti.

4.2 ALGORITMA MENGGUNAKAN PILIHAN

Dalam contoh berikut ini permasalahan akan didefinisikan, algoritma solusi akan dikembangkan, dan algoritma akan diuji secara manual. Untuk membantu mendefinisikan masalah, kata kerja pemrosesan dalam contoh ini telah digarisbawahi.

CONTOH 4.1 Membaca tiga karakter

Rancang sebuah algoritma yang akan : “accept three characters from keyboard, sort them into ascending sequence, and output them to the screen” (menerima tiga karakter dari keyboard, mengurutkannya ke dalam urutan dari kecil ke besar, dan mengeluarkannya ke layar)

A. Diagram definisi
Input
Processing
Output
char_1
Accept three characters
char_1
char_2
Sort three characters
char_2
char_3
Output three characters
char_3
Atau
Input
Proses
Output
kar_1
Menerima tiga karakter
kar_1
kar_2
Mengurutkan tiga karakter
kar_2
kar_3
Mengeluarkan tiga karakter
kar_3

B. Algoritma solusi
            Algoritma solusi membutuhkan serangkaian pernyataan IF untuk mengurutkan tiga buah karakter ke dalam urutan dari kecil ke besar.
      Read_three_characters
            Get char_1, char_2, char_3
            IF char_1 > char_2 THEN
                  temp = char_1
                  char_1 = char_2
                  char_2 = temp
            ENDIF
            IF char_2 > char_3 THEN
                  temp = char_2
                  char_2 = char_3
                  char_3 = temp
            ENDIF
            IF char_1 > char_2 THEN
                  temp = char_1
                  char_1 = char_2
                  char_2 = temp
            ENDIF
            Output to the screen char_1, char_2, char_3
      END
Atau
      Baca_tiga_karakter
            Ambil kar_1, kar_2, kar_3
            JIKA kar_1 > kar_2 MAKA
                  temp = kar_1
                  kar_1 = kar_2
                  kar_2 = temp
            AKHIRJIKA
            JIKA kar_2 > kar_3 MAKA
                  temp = kar_2
                  kar_2 = kar_3
                  kar_3 = temp
            AKHIRJIKA
            JIKA kar_1 > kar_2 MAKA
                  temp = kar_1
                  kar_1 = kar_2
                  kar_2 = temp
            AKHIRJIKA
            Keluarkan ke layar kar_1, kar_2, kar_3
      SELESAI

C. Desk checking
           i.         Dua set karakter yang valid akan digunakan untuk menguji algoritma; karakter k, b dan g sebagai data uji pertama dan z, s dan a sebagai data uji kedua.
Data input :

First data set
Second data set
char_1
k
z
char_2
b
s
char_3
g
a
Atau

Data uji pertama
Data uji kedua
kar_1
k
z
kar_2
b
s
kar_3
g
a

                  ii.            Hasil yang diharapkan :

First data set
Second data set
char_1
b
a
char_2
g
s
char_3
k
z
Atau

Data uji pertama
Data uji kedua
kar_1
b
a
kar_2
g
s
kar_3
k
z

                iii.            Tabel desk checking.  
Perhatikan bahwa ketika melakukan desk checking lojik algoritma, setiap pernyataan IF diperlakukan sebagai sebuah pernyataan tunggal.

Statement
char_1
char_2
char_3
temp
IF statement executed?
First pass
Get
k
b
g



IF
b
k

k
yes

IF

g
k
k
yes

IF




no

Output
yes
yes
yes









Second pass
Get
z
s
a



IF
s
z

z
yes

IF

a
z
z
yes

IF
a
s

s
yes

Output
yes
yes
yes


Atau
Pernyataan
kar_1
kar_2
kar_3
temp
JIKA dieksekusi?
Lewat 1
Ambil
k
b
g



JIKA
b
k

k
ya

JIKA

g
k
k
ya

JIKA




tidak

Keluarkan 
ya
ya
ya









Lewat 2
Ambil
z
s
a



JIKA
s
z

z
ya

JIKA

a
z
z
ya

JIKA
a
s

s
ya

Keluarkan 
ya
ya
ya



  1. Hasil yang diharapkan telah sesuai dengan hasil perhitungan (melalui desk checking) sehingga algoritma dapat dikatakan benar.



CONTOH 4.2 Memproses record pelanggan
           
            Sebuah program diharuskan untuk : “read a customer’s name, a purcase amount and a tax code. The tax code has been validated and will be one of the following : “ (membaca nama pelanggan, jumlah pembelian dan kode pajak. Kode pajak telah tervalidasi dan akan terdiri dari : )
0          tax exempt (0%)                                  (pengecualian pajak : 0%)
1          state sales tax only (3%)                     (pajak penjualan daerah : 3%)
2          federal and sales tax (5%)                   (pajak penjualan dan pemerintah : 5%)
3          special sales tax (7%)                          (pajak penjualan khusus : 7%)
The program must then compute the sales tax and the total amount due and print the customer’s name, purchase amount, sales tax and total amount due. (program harus menghitung pajak penjualan dan total yang harus dibayar dan mencetak nama pelanggan, jumlah pembelian, pajak penjualan dan jumlah yang harus dibayarkan)

A. Diagram definisi
Input
Processing
Output
cust_name
Read customer details
cust_name
purch_amt
Compute sales tax
purch_amt
tax_code
Compute total amount
sales_tax

Print customer details
total_amt
Atau
Input
Proses
Output
nama_plg
Baca detil pelanggan
nama_plg
jumlah_beli
Hitung pajak penjualan
jumlah_beli
kode_pajak
Hitung jumlah bayar
pajak_penjualan

Cetak detil pelanggan
jumlah_bayar

B. Algoritma solusi
            Algoritma solusi membutuhkan pernyataan IF bersarang linier untuk mengkalkulasi pajak penjualan.


Process_customer_record
      Read cust_name, purch_amt, tax_code
      IF tax_code = 0 THEN
            sales_tax = 0    
      ELSE
            IF tax_code = 1 THEN
                  sales_tax = purch_amt * 0.03 
            ELSE
                  IF tax_code = 2 THEN
                        sales_tax = purch_amt * 0.05 
                  ELSE
                        sales_tax = purch_amt * 0.07 
                  ENDIF
            ENDIF
      ENDIF
      total_amt = purch_amt + sales_tax
      Print cust_name, purch_amt, sales_tax, total_amt
END
Atau
Proses_record_pelanggan
      Baca nama_plg, jumlah_beli, kode_pajak
      JIKA kode_pajak = 0 MAKA
            pajak_jual = 0   
      LAIN
            JIKA kode_pajak = 1 MAKA
                  pajak_jual = jumlah_beli * 0.03    
            LAIN
                  JIKA kode_pajak = 2 MAKA
                        pajak_jual = jumlah_beli * 0.05    
                  LAIN
                        pajak_jual = jumlah_beli * 0.07    
                  AKHIRJIKA
            AKHIRJIKA
      AKHIRJIKA
      Jumlah_bayar = jumlah_beli + pajak_jual
      Cetak nama_plg, jumlah_beli, pajak_jual, jumlah_bayar
SELESAI



C. Desk checking
  1. Dua set data pembelian dan kode pajak digunakan untuk menguji algoritma;
Data input :

First data set
Second data set
purch_amt
10.00
20.00
tax_code
0
2
Atau

Data uji pertama
Data uji kedua
jumlah_beli
10.00
20.00
kode_pajak
0
2

  1. Hasil yang diharapkan :

First data set
Second data set
sales_tax
0
1.00
total_amt
10.00
21.00
Atau

Data uji pertama
Data uji kedua
pajak_jual
0
1.00
jumlah_bayar
10.00
21.00

  1. Tabel desk checking.  
Statement
purch
_amt
tax
_code
sales
_tax
total
_amt
IF statement executed?
First pass
Read
10.00
0




IF


0

IF tax_code=0

total_amt



10.00


Print
yes

yes
yes








Second pass
Read
20.00
2




IF


1.00

IF tax_code=2

total_amt



21.00


Print
yes

yes
yes

Atau
Pernyataan 
jumlah
_beli
kode_
pajak
pajak
_jual
jumlah
_bayar
JIKA dieksekusi?
Lewat 1
Baca
10.00
0




JIKA


0

JIKA kode_pajak=0

Jumlah_bayar



10.00


Cetak
ya

ya
ya








Lewat 2
Baca
20.00
2




JIKA


1.00

JIKA kode_pajak=2

Jumlah_bayar



21.00


Cetak
ya

ya
ya


  1. Hasil yang diharapkan telah sesuai dengan hasil perhitungan (melalui desk checking) sehingga algoritma dapat dikatakan benar.

CONTOH 4.3 Kalkulasi gaji pegawai
           
Sebuah program dibutuhkan perusahaan untuk : “read an employee’s number, pay rate and the number of hours worked in a week. The program is then to compute the employee’s weekly pay and print it along with the input data. According to the company’s rules, no employee may be paid for more than 60 hours per week, and the maximum hourly rate is $25.00 per hour. If more than 35 hours are worked, then payment for the overtime hours worked is calculated at time-and-a-half. If the hours worked field or the hourly rate field is out of range, then the input data and an appropriate message is to be printed and the employee’s weekly pay is not to be calculated.” (baca nomor pegawai, gaji perjam dan jumlah jam kerja selama seminggu. Program kemudian menghitung gaji mingguan pegawai dan mencetak bersama dengan data masukan. Menurut aturan perusahaan, tidak ada pegawai yang digaji melebihi dari 60 jam perminggu, dan gaji perjam maksimum adalah $25.00. jika bekerja lebih dari 35 jam perminggu, maka pembayaran untuk lembur perjam dikalkulasikan dengan satu setengah kali. Apabila gaji perjam melebihi batas, maka data masukan dan pesan yang sesuai akan dicetak dan gaji mingguan pegawai tidak diperhitungkan.)

A. Diagram definisi
Input
Processing
Output
emp_no
Read employee details
emp_no
pay_rate
Validate input fields
pay_rate
hrs_worked
Calculate employee pay
hrs_worked

Print employee details
emp_weekly_pay


error_message
Atau
Input
Proses
Output
no_pegawai
Baca detil pegawai
no_pegawai
gaji_perjam
Validasi medan masukan
gaji_perjam
jam_kerja
Hitung gaji pegawai
jam_kerja

Cetak detil pegawai
gaji_mingguan


pesan_salah

B. Algoritma solusi
            Algoritma solusi membutuhkan pernyataan IF sederhana dan IF bersarang. Pertama variabel ‘pay_rate’ dan ‘hrs_worked’ harus divalidasi, dan apabila ditemukan melebihi batas yang ditentukan, maka pesan yang sesuai akan ditempatkan ke dalam variabel yang disebut ‘error_message’.
            Gaji pegawai mingguan hanya akan dikalkulasi apabila variabel masukan valid, sehingga variabel lain ‘valid_input_fields’ digunakan untuk mengindikasikan pada program apakah masukan valid atau tidak.

Variabel boolean

Variabel ‘valid_input_fields’ adalah sebuah variabel Boolean; variabel tersebut hanya bisa berisi satu dari dua nilai yang mungkin (benar atau salah). Apabila menggunakan pernyataan IF dengan variabel boolean, maka pernyataan IF dapat disederhanakan dalam pseudocode, sebagai berikut :
IF valid_input_fields = true THEN
      statement
ENDIF
Atau
JIKA data_masukan_valid = benar MAKA
      pernyataan
AKHIRJIKA
Dapat disederhanakan untuk menyatakan secara tidak langsung ‘=true’, sehingga dapat disederhanakan sebagai berikut :
IF valid_input_fields THEN
      statement
ENDIF
Atau
JIKA data_masukan_valid MAKA
      pernyataan
AKHIRJIKA
Apabila kita ingin menguji ‘valid_input_fields’ bernilai salah, dapat dilakukan dalam pseudocode dengan :
IF NOT valid_input_fields THEN
      statement
ENDIF
Atau
JIKA TIDAK data_masukan_valid MAKA
      pernyataan
AKHIRJIKA
Variabel ‘valid_input_fields’ bertindak sebagai sebuah saklar internal atau flag (tanda) pada program. Variabel ini akan diset pertama kali dengan true (benar), dan akan diberi nilai false (salah) apabila satu dari medan masukan didapati tidak valid. Gaji pegawai mingguan akan dikalkulasi hanya jika ‘valid_input_fields’ bernilai benar. Berikut ini adalah algoritma solusinya :



Compute_employee_pay
      Set valid_input_fields to true
      Set error_message to blank
      Read emp_no, pay_rate, hrs_worked
      IF pay_rate > $25 THEN
            error_message = ‘Pay rate exceeds $25.00’
            valid_input_fields = false
            Print emp_no, pay_rate, hrs_worked, error_message
      ENDIF
      IF hrs_worked > 60 THEN
            error_message = ‘Hours worked exceeds limit of 60’
            valid_input_fields = false
            Print emp_no, pay_rate, hrs_worked, error_message
      ENDIF
      IF valid_input_fields THEN
            IF hrs_worked <= 35 THEN
                  emp_weekly_pay = pay_rate * hrs_worked
            ELSE
                  Overtime_hrs = hrs_worked – 35
                  Overtime_pay = overtime_hrs * pay_rate * 1.5                      emp_weekly_pay = (pay_rate*35) + overtime_pay
            ENDIF
            Print emp_no, pay_rate, hrs_worked, emp_weekly_pay
ENDIF
END
Atau
Menghitung_gaji_pegawai
      Tentukan data_masukan_valid menjadi benar
      Tentukan pesan_kesalahan menjadi kosong
      Baca no_pegawai, gaji_perjam, jam_kerja
      JIKA gaji_perjam > $25 MAKA
          pesan_salah = ‘Gaji perjam melebihi $25.00’
          data_masukan_valid = salah
          Cetak no_pegawai, gaji_perjam, jam_kerja, pesan_salah
      AKHIRJIKA
      JIKA jam_kerja > 60 MAKA
          pesan_salah = ‘Jam kerja melebihi batas 60’
          data_masukan_valid = salah
          Cetak no_pegawai, gaji_perjam, jam_kerja, pesan_salah
      AKHIRJIKA
      JIKA data_masukan_valid MAKA
            JIKA jam_kerja <= 35 MAKA
                gaji_mingguan = gaji_perjam * jam_kerja
            LAIN
                jam_lembur = jam_kerja – 35
                gaji_lembur = jam_lembur * gaji_perjam * 1.5
                gaji_mingguan = (gaji_perjam*35) + gaji_lembur
            AKHIRJIKA
        Cetak no_pegawai, gaji_perjam, jam_kerja, gaji_mingguan
AKHIRJIKA
SELESAI
Dalam solusi tersebut terdapat dua fungsi yang berbeda yang harus dijalankan dalam algoritma : validasi data masukan, dan kalkulasi serta pencetakan gaji mingguan pegawai. Kedua fungsi tersebut dapat dipisahkan menjadi modul sebelum algoritma dikembangkan dalam pseudocode. Masalah tersebut akan dipelajari pada modul selanjutnya.

C. Desk checking
  1. Dua set data gaji perjam dan jam kerja digunakan untuk menguji algoritma;
Data input :

First data set
Second data set
pay_rate
10.00
40.00
hrs_worked
40
35
Atau

Data uji pertama
Data uji kedua
gaji_perjam
10.00
40.00
jam_kerja
40
35

  1. Hasil yang diharapkan :

First data set
Second data set
pay_rate
10.00
40.00
hrs_worked
40
35
emp_weekly_pay
425.00
-
error_message
blank
Pay rate exceeds $25.00

Atau


Data uji pertama
Data uji kedua
gaji_perjam
10.00
40.00
jam_kerja
40
35
gaji_mingguan
425.00
-
pesan_salah
kosong
Gaji perjam melebihi $25.00

  1. Tabel desk checking.  
Statement
pay_
rate
hrs_
worked
over-time
_hrs
Over-time
_pay
emp_
weekly
_pay
valid_
input_
fields
error_
message
IF statement executed?
First pass









Initialize





true



Initialize






blank


Read
10.00
40







IF







no

IF







no

IF


5
75.00
425.00


valid input

Print
yes
yes


yes













Second pass









Initialize





true



Initialize






blank


Read
40.00
35







IF





false
Pay rate exceeds $25.00
pay_rate > 25.00

Print
yes
yes




yes


IF







No

IF







No

Atau



Pernyataan 
gaji_
perjam
jam_
kerja
jam_lembur
gaji_lembur
gaji_mingguan
Data_masukan_valid
pesan_salah
JIKA dieksekusi?
Lewat 1









Inisialisasi





benar



Inisialisasi






kosong


Baca
10.00
40







JIKA







tidak

JIKA







tidak

JIKA


5
75.00
425.00


data valid

Cetak
ya
ya


ya













Lewat 2









Inisialisasi





benar



Inisialisasi






kosong


Baca
40.00
35







JIKA





salah
gaji perjam melebihi $25.00
gaji_ perjam > 25.00

Cetak
ya
ya




yas


JIKA







tidak

JIKA







tidak

4.3 STRUKTUR CASE

Struktur kontrol CASE dalam pseudocode adalah cara lain mengekspresikan pernyataan IF bersarang. Digunakan dalam pseudocode karena dua alasan :
         Dapat diterjemahkan secara langsung menjadi berbagai bahasa tingkat tinggi
         Membuat pseudocode lebih mudah ditulis dan dimengerti
Struktur IF bersarang linier ini dapat digantikan dengan struktur kontrol CASE. CASE sesungguhnya bukan merupakan struktur kontrol tambahan, tetapi menyederhanakan struktur kontrol pilihan dasar dan memperluasnya dari sebuah pilihan antara dua nilai menjadi pilihan dari banyak nilai. Dalam pseudocode, bentuk struktur tersebut adalah sebagai berikut :
CASE OF single variable
      value_1 : statement block_1
      value_2 : statement block_2
            .
      value_n : statement block_n
      value_other : statement block_other
ENDCASE
Atau
KASUS DARI variabel tunggal
      nilai_1 : blok pernyataan_1
      nilai_2 : blok pernyataan_2
            .
      nilai_n : blok pernyataan_n
      nilai_lain : blok pernyataan lain
AKHIRKASUS
Arah yang diikuti dalam struktur CASE tergantung pada nilai dari variabel yang ditentukan dalam anak kalimat CASE OF. Apabila variabel memuat nilai value_1, maka blok pernyataan_1 dieksekusi, jika variabel memuat nilai value_2, maka blok pernyataan_2 dieksekusi, dan seterusnya. Value_other disertakan untuk keadaan dimana variabel memuat tidak satupun nilai yang terdaftar. Contoh dalam pernyataan IF bersarang linier pada bagian sebelumnya dapat dituliskan kembali dengan menggunakan pernyataan CASE sebagai berikut :
CASE OF record_code
      ‘A’ : increment counter_A
      ‘B’ : increment counter_B
      ‘C’ : increment counter_C
      other : increment error_counter
ENDCASE
            Atau
KASUS DARI kode_record
      ‘A’ : tambah penghitung_A
      ‘B’ : tambah penghitung_B
      ‘C’ : tambah penghitung_C
      lain : tambah penghitung_salah
AKHIRKASUS
            Dalam kedua bentuk pseudocode tersebut di atas, lojik pemrosesan sama persis. Akan tetapi solusi CASE lebih mudah dibaca.

CONTOH 4.4 Memproses record pelanggan
            Permasalahan pada contoh 4.2 akan diselesaikan dengan menggunakan struktur CASE.
A.    Diagram definisi (lihat pada contoh 4.2)
B.     Algoritma solusi

Process_customer_record
            Read cust_name, purch_amt, tax_code
            CASE OF tax_code
                  0: sales_tax = 0
                  1: sales_tax = purch_amt * 0.03
                  2: sales_tax = purch_amt * 0.05
                  3: sales_tax = purch_amt * 0.07
            ENDCASE
            total_amt = purch_amt  + sales_tax
Print cust_name, purch_amt, sales_tax, total_amt
      END
            Atau
Proses_record_pelanggan
          Baca nama_plg, jumlah_beli, kode_pajak
          KASUS_DARI kode_pajak
              0: pajak_penjualan = 0
              1: pajak_penjualan = jumlah_beli * 0.03
              2: pajak_penjualan = jumlah_beli * 0.05
              3: pajak_penjualan = jumlah_beli * 0.07
          AKHIRKASUS
          Jumlah_bayar = jumlah_beli  + pajak_penjualan
    Cetak nama_plg, jumlah_beli, pajak_penjualan, jumlah_bayar
      END

C.    Desk checking

  1. Dua set data pembelian dan kode pajak digunakan untuk menguji algoritma;
Data input :

First data set
Second data set
purch_amt
10.00
20.00
tax_code
0
2
Atau

Data uji pertama
Data uji kedua
jumlah_beli
10.00
20.00
kode_pajak
0
2

  1. Hasil yang diharapkan :

First data set
Second data set
sales_tax
0
1.00
total_amt
10.00
21.00
Atau

Data uji pertama
Data uji kedua
pajak_jual
0
1.00
jumlah_bayar
10.00
21.00

  1. Tabel desk checking.  
Statement
purch
_amt
tax
_code
sales
_tax
total
_amt
CASE statement executed?
First pass






Read
10.00
0




CASE


0

CASE 0

total_amt



10.00


Print
yes

yes
yes








Second pass






Read
20.00
2




CASE


1.00

CASE 2

total_amt



21.00


Print
yes

yes
yes

Atau
Pernyataan 
jumlah
_beli
kode_
pajak
pajak
_jual
jumlah
_bayar
KASUS dieksekusi?
Lewat 1






Baca
10.00
0




JIKA


0

KASUS 0

Jumlah_bayar



10.00


Cetak
ya

ya
ya








Lewat 2






Baca
20.00
2




JIKA


1.00

KASUS 2

Jumlah_bayar



21.00


Cetak
ya

ya
ya



RINGKASAN

Pembahasan secara mendetil struktur kontrol pilihan. Deskripsi dan contoh pseudocode diberikan untuk pilihan sederhana, null ELSE, kombinasi IF, dan pernyataan IF bersarang. Struktur case diperkenalkan sebagai alat untuk mengekspresikan pernyataan IF bersarang linier dalam bentuk yang lebih sederhana dan ringkas.


Tidak ada komentar:

Posting Komentar