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