Senin, 12 Oktober 2015
Rabu, 07 Oktober 2015
Metode Perancangan Program 5
MODUL V
STRUKTUR KONTROL PENGULANGAN
TUJUAN
•
Untuk mengembangkan algoritma yang menggunakan struktur
kontrol DOWHILE dan REPEAT … UNTIL
•
Untuk memperkenalkan struktur pseudocode untuk
pengulangan terhitung
•
Untuk mengembangkan algoritma menggunakan berbagai
konstruksi pengulangan
5.1 PENGULANGAN
MENGGUNAKAN STRUKTUR DOWHILE
Kebanyakan
program mengharuskan logika yang sama diulang untuk beberapa set data. Cara
yang paling efisien mengatasi situasi ini adalah dengan membuat struktur
pengulangan dalam algoritma yang akan menyebabkan logika pemrosesan diulang
beberapa kali. Struktur pengulangan dengan menggunakan DOWHILE memiliki bentuk
sebagai berikut :
DOWHILE
condition p is true
statement block
ENDDO
Atau
KERJAKANSELAMA
kondisi p benar
blok pernyataan
AKHIRKERJAKAN
Karena
pengulangan DOWHILE merupakan pengulangan dengan keputusan di awal, maka
pemrosesan yang dilakukan adalah :
a)
Lojik kondisi p diuji
b)
Apabila kondisi p didapati bernilai benar, maka
pernyataan di dalam blok pernyataan akan dieksekusi sekali. kontrol kemudian
dikembalikan pada pengujian kondisi p (langkah a.)
c)
Apabila kondisi p didapati bernilai salah, maka kontrol
akan dilanjutkan pada pernyataan setelah ENDDO dan tidak ada pemrosesan lebih
lanjut yang akan diulang
Struktur
DOWHILE akan terus mengulang kelompok pernyataan selama kondisinya tetap
bernilai benar. Segera setelah kondisinya menjadi salah, maka pengulangan
dihentikan.
Terdapat
dua pertimbangan penting yang harus diperhatikan sebelum merancang pengulangan
dengan DOWHILE.
Pertama, pengujian kondisi terletak pada
awal dari pengulangan. Hal ini berarti bahwa pemrogram harus melakukan beberaoa
pemrosesan awal untuk mengatur kondisi sebelum diuji.
Kedua, satu-satunya cara untuk
menghentikan pengulangan adalah dengan mengubah kondisi DOWHILE bernilai salah.
Hal ini berarti bahwa pemrogram harus mengatur beberapa proses dalam blok
pernyataan yang pada akhirnya akan mengubah kondisi sehingga menjadi bernilai
salah. Kesalahan dalam hal ini akan menyebabkan pengulangan yang
terus-menerus.
CONTOH 5.1 Konversi
fahrenheit-celsius
Sebuah
program diharuskan untuk :“accept each Fahrenheit temperature, convert
it to Celsius, and display the converted temperature to the screen. After 15 temperatures have been processed,
the words ‘All temperatures processed’ are to be displayed on the screen.”
(menerima setiap suhu Fahrenheit, mengkonversinya menjadi Celcius, dan
menampilkan suhu hasil konversi ke layar. Setelah 15 suhu diproses, kalimat
‘Semua suhu telah diproses’ ditampilkan di layar.)
A. Diagram definisi
Input
|
Processing
|
Output
|
f_temp
|
Get Fahrenheit temperatures
|
c_temp
|
(15 temperatures)
|
Convert temperatures
|
(15 temperatures)
|
|
Display Celcius temperatures
|
|
|
Display screen message
|
|
Atau
Input
|
Proses
|
Output
|
suhu_f
|
Ambil suhu Fahrenheit
|
suhu_c
|
(15 suhu)
|
Konversi suhu
|
(15 suhu)
|
|
Tampilkan suhu Celcius
|
|
|
Tampilkan pesan
|
|
Diagram definisi masih hanya mendaftar apa
yang perlu dilakukan; persamaan untuk mengkonversi suhu tidak perlu diketahui
sampai algoritma dikembangkan.
Dengan memiliki definisi input, output,
dan proses, kita siap menguraikan solusi terhadap permasalahan. Hal ini dapat
dilakukan dengan menuliskan struktur control yang diperlukan dan variable
tambahan yang akan dipergunakan dalam algoritma solusi. Dalam contoh ini
kita perlu :
•
Struktur DOWHILE untuk mengulang proses yang diperlukan
•
Sebuah counter, diinisialisasi dengan nol, yang
akan mengontrol pengulangan sebanyak 15 kali
B. Algoritma solusi
Fahrenheit_Celsius_conversion
Set
temperature_count to zero
DOWHILE temperature_count <15
Prompt operator for f_temp
Get f_temp
Compute c_tempt = (f_temp - 32) *
5/9
Display c_tempt
Add 1 to temperature_count
ENDDO
Display ‘All temperatures processed’ to
the screen
END
Atau
Konversi_Fahrenheit_Celsius
Atur hitungan_suhu menjadi nol
KERJAKANSELAMA hitungan_suhu < 15
Siapkan operator untuk suhu_f
Ambil suhu_f
Hitung suhu_c = (suhu_f - 32) * 5/9
Tampilkan suhu_c
Tambah 1 pada hitungan_suhu
AKHIRKERJAKAN
Tampilkan ‘Semua suhu telah diproses’ ke
layar
SELESAI
Perhatikan
bahwa temperature_count
diinisialisasi sebelum pengulangan, diuji dalam kondisi DOWHILE pada awal
pengulangan dan ditambah satu dalam badan pengulangan. Merupakan hal penting
bahwa variabel yang mengontrol pengulangan berperan pada 3 tempat tersebut.
Perhatikan pula bahwa pernyataan yang menambah nilai temperature_count merupakan pernyataan terakhir dalam blok
pernyataan. Sehingga segera setelah menambah temperature_count maka nilai tersebut akan diuji saat kontrol
dikembalikan pada kondisi DOWHILE diawal pengulangan.
Algoritma
solusi dapat juga diekspresikan menggunakan kata kunci WHILE…DO dan ENDWHILE,
sebagai berikut :
Fahrenheit_Celsius_conversion
Set temperature_count to zero
WHILE temperature_count <15 DO
Prompt operator for f_temp
Get f_temp
Compute c_tempt = (f_temp - 32) *
5/9
Display c_tempt
Add 1 to temperature_count
ENDWHILE
Display ‘All temperatures processed’ to
the screen
END
Atau
Konversi_Fahrenheit_Celsius
Tentukan hitungan_suhu menjadi nol
SELAMA hitungan_suhu < 15 KERJAKAN
Sarankan operator untuk suhu_f
Ambil suhu_f
Hitung suhu_c = (suhu_f - 32) * 5/9
Tampilkan suhu_c
Tambah 1 pada hitungan_suhu
AKHIRSELAMA
Tampilkan ‘Semua suhu telah diproses’ ke
layar
SELESAI
Algoritma
tersebut di atas adalah sama, hanya kata kunci pengulangan yang dipergunakan
saja yang berbeda.
C. Desk checking
Meskipun
program ini akan membutuhkan 15 record untuk proses sebagaimana
mestinya, tetapi tetap dua set data yang valid saja yang dipergunakan.
i.
Data input :
|
First
data set
|
Second
data set
|
f_temp
|
32
|
50
|
Atau
|
Data
uji pertama
|
Data
uji kedua
|
suhu_f
|
32
|
50
|
ii.
Hasil yang diharapkan :
|
First
data set
|
Second
data set
|
c_temp
|
0
|
10
|
Atau
|
Data
uji pertama
|
Data
uji kedua
|
suhu_c
|
0
|
10
|
iii.
Table desk checking :
Statement
|
temperature_count
|
DOWHILE
condition
|
f_temp
|
c_temp
|
Initialize
|
0
|
|
|
|
DOWHILE
|
|
true
|
|
|
Get
|
|
|
32
|
|
Compute
|
|
|
|
0
|
Display
|
|
|
|
yes
|
Add
|
1
|
|
|
|
DOWHILE
|
|
true
|
|
|
Get
|
|
|
50
|
|
Compute
|
|
|
|
10
|
Display
|
|
|
|
yes
|
Add
|
2
|
|
|
|
Atau
Pernyataan
|
hitungan_suhu
|
Kondisi
KERJAKANSELAMA
|
suhu_f
|
suhu_c
|
Inisialisasi
|
0
|
|
|
|
KERJAKANSELAMA
|
|
benar
|
|
|
Ambil
|
|
|
32
|
|
Hitung
|
|
|
|
0
|
Tampilkan
|
|
|
|
ya
|
Tambah
|
1
|
|
|
|
KERJAKANSELAMA
|
|
benar
|
|
|
Ambil
|
|
|
50
|
|
Hitung
|
|
|
|
10
|
Tampilkan
|
|
|
|
ya
|
Tambah
|
2
|
|
|
|
Desk
checking algoritma ini menunjukkan proses yang sesungguhnya dari pengulangan
DOWHILE. Terdapat beberapa proses awal (pernyataan pertama) yang akan
dieksekusi hanya sekali. Kemudian kondisi DOWHILE diuji sampai bernilai benar.
Badan pengulangan kemudian dieksekusi sebelum kembali menguji kondisi DOWHILE.
Proses akan berlanjut untuk mengulang blok pernyataan sampai kondisi DOWHILE
ditemukan bernilai salah, yaitu sampai counter
suhu sama dengan 15.
Meskipun
hanya dua kasus uji yang dipergunakan dalam desk
checking algoritma, kita dapat melihat bahwa dengan memberikan pengujian
lebih lanjut akan membawa kepada counter
suhu 15, sehingga pengulangan akan berhenti.
5.2 PENGULANGAN
MENGGUNAKAN STRUKTUR REPEAT…UNTIL
Struktur
REPEAT…UNTIL mirip dengan struktur DOWHILE dalam hal kelompok pernyataan yang
diulang berkaitan dengan kondisi tertentu. Tetapi struktur DOWHILE menguji
kondisi pada awal dari pengulangan, sedangkan struktur REPEAT…UNTIL
menguji kondisi pada akhir dari pengulangan. Hal ini berarti bahwa pernyataan
dalam pengulangan akan dieksekusi sekali sebelum kondisinya diuji. Apabila
kondisinya salah, maka pernyataan akan diulang sampai kondisi bernilai benar.
Bentuk
struktur REPEAT…UNTIL adalah sebagai berikut :
REPEAT
statement
statement
.
.
UNTIL
condition is true
Atau
ULANGI
pernyataan
pernyataan
.
.
SAMPAI kondisi benar
REPEAT…UNTIL
adalah pengulangan yang melewati keputusan; pernyataan dieksekusi sekali
sebelum kondisinya diperiksa. Terdapat dua pertimbangan yang perlu diketahui
sebelum menggunakan REPEAT … UNTIL.
Pertama,
pengulangan REPEAT … UNTIL dieksekusi apabila kondisinya salah; hanya apabila
kondisinya benar pengulangan berhenti. Sehingga kondisi lojik dari struktur REPEAT…UNTIL
berlawanan dengan DOWHILE. Sebagai contoh, ‘DOWHILE more records’ sama dengan
‘REPEAT … UNTIL no more records’ dan ‘DOWHILE number NOT = 99’ sama dengan
‘REPEAT … UNTIL number = 99’
Kedua,
pernyataan dalam struktur REPEAT…UNTIL akan selalu dieksekusi paling sedikit
sekali. sebagai contoh dapat dibandingkan dua buah algoritma yang menggunakan
kedua struktur tersebut untuk menangani permasalahan yang sama.
Process_student_record
Set student_count to zero
Read student record
DOWHILE student number NOT = 999
Write student record
Increment
student_count
Read student record
ENDDO
Print student_count
END
Atau
Proses_record_mahasiswa
Tentukan hitungan_mahasiswa menjadi nol
Baca record mahasiswa
KERJAKANSELAMA nomor mahasiswa TIDAK = 999
Tulis record mahasiswa
Tambah satu hitungan_mahasiswa
Baca record mahasiswa
AKHIRKERJAKAN
Cetak hitungan_mahasiswa
SELESAI
Algoritma
tersebut di atas dapat ditulis ulang dengan menggunakan struktur REPEAT…UNTIL
sebagai berikut :
Process_student_record
Set student_count to zero
REPEAT
Read student record
Write student record
Increment
student_count
UNTIL student number = 999
Print student_count
END
Atau
Proses_record_mahasiswa
Tentukan hitungan_mahasiswa menjadi nol
ULANGI
Baca record mahasiswa
Tulis record mahasiswa
Tambah satu hitungan_mahasiswa
SAMPAI nomor mahasiswa = 999
Cetak hitungan_mahasiswa
SELESAI
Algoritma
yang ditulis ulang tersebut tidak benar, karena pernyataan dalam pengulangan
akan tetap diproses. Algoritma tersebut tidak segera menghentikan pengulangan
begitu record jejak dibaca (Read student record), akan tetapi terdapat dua
pernyataan dalam pengulangan yang tetap akan dieksekusi sebelum kondisinya
diperiksa. Sehingga record jejak akan ditulis ke dalam file dan student_count
akan ditambah satu sebelum diketahui bahwa record tersebut adalah record jejak.
Untuk menghindari hal tersebut, maka
lojik harus ditambahkan yang akan mencegah data diproses apabila record jejak
telah dibaca. Lojik tersebut berbentuk pernyataan IF segera setelah pernyataan
Read sebagai berikut :
Process_student_record
Set student_count to zero
REPEAT
Read student record
IF student number NOT = 999 THEN
Write student record
Increment student_count
ENDIF
UNTIL student number = 999
Print student_count
END
Atau
Proses_record_mahasiswa
Tentukan hitungan_mahasiswa menjadi nol
ULANGI
Baca record mahasiswa
JIKA nomor mahasiswa TIDAK = 999
MAKA
Tulis
record mahasiswa
Tambah satu hitungan_mahasiswa
AKHIRJIKA
SAMPAI nomor mahasiswa = 999
Cetak hitungan_mahasiswa
SELESAI
Pengulangan
REPEAT … UNTIL dipergunakan agak jarang dalam pseudocode dibandingkan
pengulangan DOWHILE untuk pemrosesan file sekuensial karena terdapat pernyataan
IF yang dibutuhkan dalam pengulangan.
5.3 KONSTRUKSI
PENGULANGAN TERHITUNG
Pengulangan
yang terhitung muncul ketika jumlah pasti pengulangan diketahui di awal. Eksekusi
pengulangan dikendalikan oleh index pengulangan, dan selain menggunakan
DOWHILE, atau REPEAT…UNTIL, kata kunci sederhana DO digunakan sebagai berikut :
DO
loop_index = initial_value to final_value
statement block
ENDDO
Atau
KERJAKAN
indeks_ulang = nilai_awal sampai nilai_akhir
Blok pernyataan
AKHIRKERJAKAN
Pengulangan
menggunakan DO akan melakukan lebih dari sekedar pengulangan blok pernyataan, karena
DO akan :
1.
Menginisialisasi loop_index dengan nilai awal
(initial_value) yang diinginkan
2.
Menambah nilai loop_index dengan 1 untuk setiap
pengulangan yang dilakukan
3.
Menguji nilai dari loop_index pada awal setiap
pengulangan untuk memastikan bahwa nilainya masih berada pada rentang nilai
yang ditentukan
4.
Mengakhiri pengulangan ketika loop_index telah
melebihi nilai akhir (final_value) yang ditentukan
Dengan
kata lain pengulangan yang terhitung akan melakukan inisialisasi, penambahan
dan pemeriksaan counter pengulangan secara otomatis. Pengulangan ini
akan berhenti sekali jumlah pengulangan yang ditentukan telah dieksekusi.
RINGKASAN
Pembahasan meliputi struktur kontrol
pengulangan secara detil. Deskripsi dan contoh pseudocode untuk DOWHILE,
REPEAT…UNTIL, dan pengulangan yang terhitung. Kebanyakan algoritma solusi memiliki pola umum yang sama. Pola ini terdiri
dari :
1.
Beberapa proses awal sebelum pengulangan dilakukan
2.
Beberapa pemrosesan untuk setiap record dalam
pengulangan
3.
Beberapa pemrosesan akhir begitu pengulangan telah
selesai
Langganan:
Postingan (Atom)