MODUL III
MENGEMBANGKAN ALGORITMA
TUJUAN
•
Untuk memperkenalkan metode analisis sebuah
permasalahan dan mengembangkan solusi
•
Untuk mengembangkan algoritma sederhana menggunakan
struktur kontrol urutan
•
Untuk memperkenalkan metode menguji secara manual solusi
yang dikembangkan
3.1. MENDEFINISIKAN
MASALAH
Langkah
pertama di dalam mengembangkan program komputer dan salah satu yang paling
penting adalah mendefinisikan masalah. Langkah tersebut meliputi membaca dengan
cermat dan membaca kembali permasalahan sampai kita memahami dengan lengkap apa
yang dibutuhkan. Seringkali informasi tambahan dibutuhkan untuk membantu
memecahkan kemenduaan atau kekurangan dalam spesifikasi permasalahan. Untuk
membantu analisis awal ini, masalah harus dibagi menjadi tiga komponen yang
terpisah :
1.
Input :
daftar data sumber yang disediakan untuk masalah
2.
Output :
daftar keluaran yang dibutuhkan
3.
Pemrosesan :
daftar tindakan yang diperlukan untuk menghasilkan keluaran yang dibutuhkan
Pada
saat membagi sebuah permasalahan menjadi tiga komponen yang berbeda, kita harus
menganalisa secara sederhana kata-kata yang digunakan dalam spesifikasi, dan
membaginya menjadi bagian deskriptif dan bagian yang mengimplikasikan tindakan.
Akan membantu apabila kita beri garis bawah kata benda, kata sifat dan kata
kerja yang ada di dalam spesifikasi program.
Dalam
beberapa permasalahan pemrograman, input, proses dan output mungkin tidak
didefinisikan dengan jelas. Yang terbaik adalah mengkonsentrasikan pada output
yang diinginkan kemudian memutuskan input yang dibutuhkan melalui tahap-tahap
pemrosesan untuk menghasilkan output yang diinginkan tersebut.
Pada tahap ini bagian pemrosesan
harus mencantumkan tindakan apa yang perlu dilakukan, bukan bagaimana hal
tersebut diselesaikan. Jangan berusaha untuk mencari solusi sampai permasalahan
telah didefinisikan dengan lengkap.
CONTOH 3.1 menjumlahkan
3 bilangan
“A
program is required to read three numbers, add them together, and print their total”
(Sebuah program diminta membaca tiga bilangan, menjumlahkan, dan mencetak totalnya).
Kerjakan permasalahan tersebut dalam dua langkah. Pertama garisbawahi kata
benda dan kata sifat yang digunakan dalam spesifikasi program.
“A
program is required to read three numbers, add them together, and print
their total” (Sebuah program diminta membaca tiga bilangan,
menjumlahkan, dan mencetak totalnya)
Dengan
melihat kata benda dan kata sifat yang digarisbawahi kita dapat melihat bahwa
input untuk permasalahan tersebut adalah tiga bilangan dan output adalah total.
Sangat membantu untuk menuliskan dua komponen pertama tersebut dalam sebuah
diagram sederhana, yang disebut dengan diagram definisi.
Input
|
Processing
|
Output
|
number_1
|
total
|
|
number_2
|
||
number_3
|
Atau
Input
|
Proses
|
Output
|
bilangan_1
|
total
|
|
bilangan_2
|
||
bilangan_3
|
Berikutnya
garisbawahi (dengan warna yang berbeda) kata kerja dan kata keterangan yang
digunakan dalam sepsifikasi program
“A
program is required to read three numbers, add them together,
and print their total” (Sebuah program diminta membaca tiga
bilangan, menjumlahkan bersama, dan mencetak totalnya)
Dengan
melihat pada kata-kata yang digarisbawahi, dapat dilihat bahwa kata kerja
proses adalah membaca, menjumlahkan dan mencetak. Langkah berikutnya adalah
melengkapi diagram definisi dengan proses yang kita temukan.
Input
|
Processing
|
Output
|
number_1
|
Read three
number
|
total
|
number_2
|
Add numbers
together
|
|
number_3
|
Print total
number
|
Atau
Input
|
Proses
|
Output
|
bilangan_1
|
Baca tiga
bilangan
|
Total
|
bilangan_2
|
Jumlahkan
bilangan bersama
|
|
bilangan_3
|
Cetak total
bilangan
|
Sekarang semua kata benda dan kata
kerja telah dipertimbangkan dan diagram definisi telah lengkap, permasalahan
telah didedinisikan sebagaimana mestinya. Sehinggga kita memahami input
terhadap permasalahan, output yang dihasilkan dan tahap pemrosesan yang
diperlukan untuk mengkonversi input menjadi output.
Nama yang berarti (memiliki arti)
Merupakan sebuah gagasan yang bagus untuk
menggunakan beberapa nama yang unik, yang akan digunakan untuk
merepresentasikan variabel atau objek dalam permasalahan dan mendeskripsikan
tahap-tahap pemrosesan. Nama harus memiliki arti. Nama yang diberikan pada
sebuah variabel merupakan metode sederhana mengidentifikasi lokasi penyimpanan
tertentu dalam komputer.
Keunikan
nama akan membedakannya dari lokasi yang lain. Sering kali nama mendeskripsikan tipe data dalam sebuah variabel tertentu. Sebagai
contoh sebuah variabel dapat memiliki satu dari tiga tipe data sederhana,
misalnya integer (bilangan bulat), real number (bilangan pecahan)
atau character (karakter). Nama variabel harus cukup transparan untuk
mendeskripsikan variabel : number_1, number_2, number_3 merupakan nama
yang lebih berarti untuk tiga buah
bilangan daripada A, B dan C. Underscores (garis bawah) berguna dalam
memilih nama variabel, yaitu dalam memisahkan nama variabel : nomor_1,
jumlah_kata dan sebagainya.
Ketika tiba saatnya untuk menuliskan
komponen pemrosesan dari diagram definisi, kita harus menggunakan kata-kata
yang menggambarkan pekerjaan yang harus diselesaikan dalam kaitannya dengan
tugas atau fungsi khusus. Dalam contoh 3.1. tahap pemrosesan dituliskan sebagai
kata kerja yang disertai oleh objek-objek yang terkait.
Read three
numbers (Baca tiga bilangan)
Add numbers
together (Jumlahkan bilangan
bersama)
Print total
number (Cetak total bilangan)
Terdapat sebuah pola dalam
pemilihan kata-kata untuk mendeskripsikan tahap-tahap tersebut. Setiap aksi
dideskripsikan sebagai sebuah kata kerja yang diikuti oleh objek dua kata.
CONTOH 3.2 Menghitung
rata-rata suhu
“A
program is required to get minimum and maximum temperature on a particular day,
calculate and display to the screen the average temperature, calculated by
(maximum temperature + minimum temperature) / 2” (Sebuah program diharuskan
untuk mengambil data mengenai suhu maksimum dan minimum pada hari
tertentu, kalkulasi serta tampilkan di
layar suhu rata-rata, dihitung dengan [suhu maximum + suhu minimum] / 2).
Pertama
tentukan komponen input dan output dengan menggarisbawahi kata benda dan kata
sifat dalam pernyataan permasalahan.
“Sebuah
program diharuskan untuk mengambil data mengenai suhu maksimum dan minimum
pada hari tertentu, kalkulasi serta tampilkan
di layar suhu rata-rata, dihitung dengan (suhu maximum + suhu minimum) /
2”.
Komponen
input adalah suhu minimum dan suhu maksimum dan output adalah suhu rata-rata.
Dengan menggunakan nama-nama yang berarti,
komponen-komponen tersebut dapat dituliskan pada diagram definisi
sebagai berikut :
Input
|
Processing
|
Output
|
max_temp
|
avg_temp
|
|
min_temp
|
Atau
Input
|
proses
|
Output
|
suhu_maks
|
suhu_rata
|
|
suhu_min
|
Kemudian
tentukan tahap-tahap pemrosesan dengan menggarisbawahi kata kerja dalam
pernyataan permasalahan.
Sebuah
program diharuskan untuk mengambil data mengenai suhu maksimum dan
minimum pada hari tertentu, kalkulasi
serta tampilkan di layar suhu rata-rata, dihitung dengan [suhu
maximum + suhu minimum] / 2.
Kata
kerja pemrosesan adalah : mengambil, kalkulasi dan tampilkan. Dengan
mendapatkan objek yang berkaitan dengan kata kerja tersebut maka diagram definisi
dapat dilengkapi sebagai berikut :
Input
|
Processing
|
Output
|
max_temp
|
Get max, min
temperatures
|
avg_temp
|
min_temp
|
Calculate
average temperature
|
|
Display
average temperature
|
Atau
Input
|
Proses
|
Output
|
suhu_maks
|
Ambil suhu
max, min
|
suhu_rata
|
suhu_min
|
Kalkulasi suhu
rata-rata
|
|
Tampilkan suhu
rata-rata
|
Perhatikan
bahwa pada tahap ini kita hanya terkonsentrasi pada fakta bahwa suhu rata-rata
harus dikalkulasi, bukan bagaimana kalkulasi akan dilakukan.
CONTOH 3.3 Menghitung waktu memotong
rumput
“A
program is required to get the length and width of a
rectangular house block, and the length and width of the
rectangular house which has been built on the block. The algorithm should then compute
and display the time required to cut the grass around the house,
at the rate of two square metres per minute.” (sebuah program diharuskan untuk mengambil
panjang dan lebar sebuah blok rumah, serta panjang dan lebar
rumah yang telah dibangun pada blok tersebut. Algoritma tersebut kemudian harus
menghitung dan menampilkan waktu yang dibutuhkan untuk
memotong rumput disekeliling rumah, dengan rata-rata dua meter persegi permenit)
Untuk memperoleh komponen input dan
output dalam permasalahan tersebut, maka kata benda atau objek telah
digarisbawahi. Untuk komponen proses kata kerja telah dicetak miring.
Berdasarkan data tersebut maka dapat dibuat diagram definisi sebagai berikut :
Input
|
Processing
|
Output
|
block_length
|
Get block
measurements
|
mowing_time
|
block_width
|
Get house
measurements
|
|
house_length
|
Calculate mowing
area
|
|
house_width
|
Calculate
mowing time
|
Atau
Input
|
Proses
|
Output
|
panjang_blok
|
Ambil ukuran
blok
|
waktu_potong
|
lebar_blok
|
Ambil ukuran
rumah
|
|
panjang_rumah
|
Kalkulasi area
potong rumput
|
|
lebar_rumah
|
Kalkulasi
waktu potong rumput
|
3.2 MENDESAIN
ALGORITMA SOLUSI
Mendesain
(merancang) sebuah algoritma solusi merupakan pekerjaan yang paling menantang
dalam daur hidup sebuah program. Sekali program telah didefinisikan dengan
tepat, kita biasanya mulai dengan sketsa kasar tahap-tahap yang dibutuhkan untuk
memecahkan permasalahan. Lihat pada apa yang dibutuhkan, dan menggunakan
kebutuhan tersebut serta tiga struktur kontrol dasar yang didefinisikan dalam
teorema struktur, usahakan untuk menentukan bagaimana pemrosesan akan dilakukan.
Usaha
awal dalam mendesain sebuah algoritma tertentu biasanya tidak menghasilkan
produk jadi. Pseudocode berguna dalam proses trial and error ini. Apab-ila
algoritma tidak benar, maka program tidak akan pernah benar juga. Terdapat
beberapa argumen yang menyatakan bahwa kerja dari seorang pemrogram berakhir
dengan desain algoritma. Pengkode atau pemrogram pemula dapat mengambil alih
dan mengkodekan algoritma solusi ke dalam bahasa pemrograman tertentu.
CONTOH 3.4 Algoritma solusi untuk contoh
3.1
A. Diagram Definisi (lihat pada contoh 3.1)
B. Algoritma
Solusi
Add_three_numbers
Read number_1, number_2, number_3
total=number_1 +number_2+number_3
Print total
END
Atau
Jumlahkan_tiga_bilangan
Baca bilangan_1, bilangan_2,
bilangan_3
total = bilangan_1 + bilangan_2 +
bilangan_3
Cetak total
SELESAI
Terdapat
beberapa hal yang harus dipertimbangkan dalam algoritma solusi ini, yaitu :
1.
Sebuah nama telah diberikan pada algoritma, yaitu
Add_three_numbers (Jumlahkan_tiga_bilangan)
2.
Pernyataan END (SELESAI) pada akhir dari algoritma
mengindikasikan bahwa algoritma telah lengkap
3.
Seluruh tahap pemrosesan antara nama alogritma dengan
pernyataan END (SELESAI) telah dilekukkan (indentasi) untuk kemudahan membaca
4. Setiap
tahap pemrosesan dalam diagram definisi berhubungan secara langsung dengan satu
atau lebih pernyataan dalam algoritma. Sebagai contoh, “Baca tiga bilangan” dalam diagram definisi menjadi “Baca
bilangan_1, bilangan_2, bilangan_3” di dalam algoritma; dan “Jumlahkan bilangan
bersama” menjadi “total = bilangan_1 + bilangan_2 + bilangan_3”.
CONTOH 3.5 Algoritma solusi untuk contoh
3.2
A. Diagram Definisi (lihat pada contoh 3.2)
B. Algoritma Solusi
Find_average_temperature
Get
max_temp, min_temp
Avg_temp = (max_temp + min_temp) / 2
Output avg_temp to the screen
END
Atau
Cari_suhu_rata_rata
Ambil suhu_maks, suhu_min
Suhu_rata = (suhu_maks + suhu_min) /
2
Keluarkan suhu_rata di layar
SELESAI
CONTOH 3.6 Algoritma solusi untuk contoh
3.3
A. Diagram Definisi (lihat pada contoh 3.3)
B. Algoritma
Solusi
Calculate_mowing_time
Get block_length, block_width
block_area = block_length * block_width
Get house_length, house_width
house_area = house_length * house_width
mowing_area = block_area – house_area
mowing_time = mowing_area / 2
Output mowing_time to the screen
END
Atau
Kalkulasi_waktu_memotong_rumput
Ambil panjang_blok, lebar_blok
area_blok = panjang_blok * lebar_blok
Ambil panjang_rumah, lebar_rumah
area_rumah = panjang_rumah * lebar_rumah
area_potong = area_blok – area_rumah
waktu_potong = area_potong / 2
Keluarkan waktu_potong ke layar
SELESAI
3.3 MENGUJI
ALGORITMA SOLUSI
Setelah
sebuah algoritma solusi dibuat harus diuji kebenarannya. Lebih mudah untuk
mendeteksi kesalahan dalam pseudocode daripada dalam kode program. Desk
checking meliputi pelacakan lojik algoritma dengan beberapa data uji yang
dipilih. Kita menelusuri lojik algoritma persis seperti yang dilakukan
komputer, menyimpan semua nilai variabel utama pada selembar kertas. Penelusuran
ini tidak hanya membantu untuk mendeteksi kesalahan lebih awal, tetapi juga
membantu kita untuk lebih mengenal bagaimana program dijalankan.
Memilih data
uji
Ketika
memilih data uji untuk melakukan desk checking sebuah algoritma, harus
dilihat spesifikasi program dan memilih kasus uji sederhana saja, berdasarkan
tuntutan dari spesifikasi program, bukan algoritmanya. Untuk melakukan desk
checking algoritma, kita memerlukan beberapa kasus uji sederhana saja yang
akan mengikuti jalur utama dari lojik algoritma.
Tahap dalam
melakukan desk checking algoritma
1.
Pilih kasus uji masukan sederhana yang valid
2.
Tentukan apakah hasil yang diharapkan yang seharusnya
untuk setiap kasus uji
3.
Buat sebuah tabel nama variabel yang relevan dalam
algoritma pada selembar kertas
4. Jalankan kasus uji pertama melalui
algoritma, simpan catatan tahap demi tahap isi dari setiap variabel dalam tabel
sepanjang data melalui lojiknya
5. Ulangi proses penelusuran menggunakan
kasus data uji yang lainnya, sampai algoritma mencapai lojik akhir
6. Periksa bahwa hasil yang diharapkan muncul
dalam tahap 2 sesuai dengan hasil aktual dalam tahap 5
Dengan
melakukan desk checking algoritma
dapat dideteksi kesalahan lebih awal. Desk
checking dapat mengeliminasi sebagian besar kesalahan, tetapi tetap tidak
dapat dibuktikan bahwa algoritma benar 100%.
CONTOH 3.7 DESK
CHECK UNTUK CONTOH 3.1
A. Diagram definisi (lihat
contoh 3.1)
B. Algoritma solusi (lihat
contoh 3.4)
C. Desk
checking
- Pilih dua set data uji masukan. Sebagai contoh
dipilih dua set bilangan, yaitu : 10, 20 dan 30 untuk data uji pertama
serta 40, 41 dan 42 untuk data uji kedua.
Data
input :
First
data set
|
Second
data set
|
|
number_1
|
10
|
40
|
number_2
|
20
|
41
|
number_3
|
30
|
42
|
Atau
Data
uji pertama
|
Data
uji kedua
|
|
bilangan_1
|
10
|
40
|
bilangan_2
|
20
|
41
|
bilangan_3
|
30
|
42
|
- Tentukan hasil yang diharapkan untuk setiap kasus uji
Hasil
yang diharapkan :
First
data set
|
Second
data set
|
|
total
|
60
|
123
|
Atau
Data
uji pertama
|
Data
uji kedua
|
|
Total
|
60
|
123
|
- Buat sebuah tabel nama variabel yang relevan dan
lewatkan setiap data uji melalui algoritma solusi, pernyataan demi
pernyataan.
Statement
|
number_1
|
number _2
|
number _3
|
total
|
Print
|
|
First pass
|
Read
|
10
|
20
|
30
|
||
total
|
60
|
|||||
Print
|
yes
|
|||||
Second pass
|
Read
|
40
|
41
|
42
|
||
total
|
123
|
|||||
Print
|
yes
|
Atau
Pernyataan
|
bilangan_1
|
bilangan_2
|
bilangan_3
|
total
|
Cetak
|
|
Lewat 1
|
Baca
|
10
|
20
|
30
|
||
total
|
60
|
|||||
Cetak
|
ya
|
|||||
Lewat 2
|
Baca
|
40
|
41
|
42
|
||
total
|
123
|
|||||
Cetak
|
ya
|
- Periksa
bahwa hasil yang diharapkan (60 dan 123) sesuai dengan hasil yang
sesungguhnya (hasil desk checking pada kolom total).
Desk
checking ini, yang seharusnya tidak membutuhkan waktu lebih dari 5 menit,
mengindikasikan bahwa algoritma benar . Tahap selanjutnya yang dapat dilakukan
adalah mengkodekan algoritma tersebut ke dalam bahasa pemrograman.
CONTOH 3.8 DESK
CHECK UNTUK CONTOH 3.2
A. Diagram definisi (lihat contoh 3.2)
B. Algoritma solusi (lihat
contoh 3.5)
C. Desk
checking
- Pilih dua set data uji masukan. Sebagai contoh
dipilih dua set bilangan, yaitu : 30 dan 10 untuk data uji pertama serta
40 dan 20 untuk data uji kedua.
Data
input :
First
data set
|
Second
data set
|
|
max_temp
|
30
|
40
|
min_temp
|
10
|
20
|
Atau
Data
uji pertama
|
Data
uji kedua
|
|
suhu_maks
|
30
|
40
|
suhu_min
|
10
|
20
|
- Tentukan hasil yang diharapkan untuk setiap kasus uji
Hasil
yang diharapkan :
First
data set
|
Second
data set
|
|
avg_temp
|
20
|
30
|
Atau
Data
uji pertama
|
Data
uji kedua
|
|
suhu_rata
|
20
|
30
|
- Buat sebuah tabel nama variabel yang relevan dan
lewatkan setiap data uji melalui algoritma solusi, pernyataan demi
pernyataan.
Statement
|
max_temp
|
min_temp
|
avg_temp
|
Output
|
|
First pass
|
Get
|
30
|
10
|
||
Calculate
|
20
|
||||
Output
|
yes
|
||||
Second pass
|
Get
|
40
|
20
|
||
Calculate
|
30
|
||||
Output
|
yes
|
Atau
Pernyataan
|
suhu_maks
|
suhu_min
|
suhu_rata
|
Keluarkan
|
|
Lewat 1
|
Ambil
|
30
|
10
|
||
Kalkulasi
|
20
|
||||
Keluarkan
|
ya
|
||||
Lewat 2
|
Ambil
|
40
|
20
|
||
Kalkulasi
|
30
|
||||
Keluarkan
|
ya
|
- Periksa
bahwa hasil yang diharapkan (20 dan 30) sesuai dengan hasil yang
sesungguhnya (hasil desk checking pada kolom suhu_rata).
CONTOH 3.9 DESK
CHECK UNTUK CONTOH 3.3
A. Diagram definisi (lihat contoh 3.3)
B. Algoritma solusi (lihat contoh 3.6)
C. Desk
checking
- Pilih dua set data uji masukan, sebagaimana
diilustrsikan dalam diagram berikut ini :
Data
input :
First
data set
|
Second
data set
|
|
block_length
|
30
|
40
|
block_width
|
30
|
20
|
house_length
|
20
|
20
|
house_width
|
20
|
10
|
Atau
Data
uji pertama
|
Data
uji kedua
|
|
panjang_blok
|
30
|
40
|
lebar_blok
|
30
|
20
|
panjang_rumah
|
20
|
20
|
lebar_rumah
|
20
|
10
|
- Tentukan hasil yang diharapkan untuk setiap kasus uji
Hasil
yang diharapkan :
First
data set
|
Second
data set
|
|
mowing_time
|
250
minutes
|
300
minutes
|
Atau
Data
uji pertama
|
Data
uji kedua
|
|
waktu_potong
|
250
menit
|
300
menit
|
- Buat sebuah tabel nama variabel yang relevan dan
lewatkan setiap data uji melalui algoritma solusi, pernyataan demi
pernyataan.
Statement
|
block_
length |
block
_width |
house
_length |
house
_width |
block_area
|
house_area
|
mowing_area
|
mowing_time
|
|
First pass
|
|||||||||
Get
|
30
|
30
|
|||||||
Block_area
|
900
|
||||||||
Get
|
20
|
20
|
|||||||
House_area
|
400
|
||||||||
Mowing_area
|
500
|
||||||||
Mowing_time
|
250
|
||||||||
Output
|
yes
|
||||||||
Second pass
|
|||||||||
Get
|
40
|
20
|
|||||||
Block_area
|
800
|
||||||||
Get
|
20
|
10
|
|||||||
House_area
|
200
|
||||||||
Mowing_area
|
600
|
||||||||
Mowing_time
|
300
|
||||||||
Output
|
yes
|
Atau
Pernyataan
|
panjang_blok
|
lebar_blok
|
panjang_rumah
|
lebar_
rumah |
area_blok
|
area_
rumah |
area_
potong |
waktu_potong
|
|
Lewat 1
|
|||||||||
Ambil
|
30
|
30
|
|||||||
area_blok
|
900
|
||||||||
Ambil
|
20
|
20
|
|||||||
area_rumah
|
400
|
||||||||
area_potong
|
500
|
||||||||
waktu_potong
|
250
|
||||||||
Keluarkan
|
ya
|
||||||||
Lewat 2
|
|||||||||
Ambil
|
40
|
20
|
|||||||
area_blok
|
800
|
||||||||
Ambil
|
20
|
10
|
|||||||
area_rumah
|
200
|
||||||||
area_potong
|
600
|
||||||||
waktu_potong
|
300
|
||||||||
Keluarkan
|
ya
|
- Periksa
bahwa hasil yang diharapkan (250 dan 300) sesuai dengan hasil yang
sesungguhnya (hasil desk checking pada kolom waktu_potong).
3.4 RINGKASAN
Bagian pertama pembahasan menjelaskan
metode menganalisa dan mendefinisikan masalah pemrograman. Metode yang disarankan
adalah untuk menganalisa kata-kata yang digunakan dalam spesifikasi dengan
tujuan membagi masalah menjadi tiga komponen terpisah :
•
input
•
output
•
proses
Bagian kedua pembahasan menjelaskan
mengenai pembuatan algoritma solusi. Setelah analisis awal permasalahan kita
harus berusaha mendapatkan sebuah solusi dan meng-ekspresikan solusi ini
sebagai sebuah algoritma. Untuk melakukan hal ini kita harus menggunakan
pernyataan pseudocode yang benar, tiga struktur kontrol dasar dan diagram
definisi yang sebelumnya ditentukan. Bagian ketiga menjelaskan pengujian
algoritma untuk pembetulan.
Tidak ada komentar:
Posting Komentar