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