Rabu, 10 Januari 2018

Bab5 (Pengulangan)

   Pengulangan (Loop) merupakan sebuah konsep yang
pemrograman. Dengan struktur pengulangan, program
penting dalam
dapat berjalan
beberapa kali sesuai inisialisasi, jumlah iterasi dan kondisi berhenti yang
ditentukan. Hal ini dapat menyederhanakan program yang kompleks menjadi
lebih sederhana. Dalam C disediakan berbagai perintah Loop, dimana setiap
perintah loop memeiliki keunikan tersendiri. Di dalam bab ini akan dijelaskan
tentang struktur pengulangan dalam algoritma serta implementasi struktur
perulangan dengan perintah loop yang ada di dalam C.

                  1. Memahami konsep dasar dan struktur pengulangan
                  2. Memahami perintah pengulangan dalam C
                  3. Menerapkan sintaks-sintaks pengulangan dalam menyelesaikan persoalan

   Konsep Pengulangan
Program yang efisien adalah program yang memungkinkan pengguna
bekerja sesedikit mungkin dan komputer bekerja sebanyak mungkin. Salah
satu cara melakukan hal tersebut adalah dengan menggunakan kembali
sekumpulan baris program yang terdapat pada bagian lain dari program
tersebut atau baris program yg terdapat di dalam program lain.
Pengulangan merupakan sebuah konsep pemrograman yang penting
karena konsep ini memungkinkan pengguna menggunakan sekumpulan baris
program berulang kali dengan tiga komponen yang mengendalikannya, yaitu:

  • Inisialisasi; menentukan kondisi awal dilakukannya pengulangan.
  • Jumlah iterasi; menunjukkan berapa kali pengulangan akan dilakukan.
  • Kondisi berhenti; menentukan kondisi yang dapat mengakhiri pengulangan.
   Contoh kasus dunia nyata yang dapat digunakan untuk menggambarkan
ketiga komponen ini adalah cerita ibu mengupas sepuluh (10) butir kentang.
Ibu akan mengumpulkan dulu 10 butir kentang yang akan dikupas, kemudian
Ibu akan mengambil sebuah kentang kemudian mengupasnya, setelah selesai
mengupas Ibu akan mengambil kentang berikutnya dan melakukan aksi
mengupas lagi. Ibu akan melakukan pengupasan kentang satu persatu hingga
mencapai kentang ke-10, dan seluruh kentang tersebut telah terkupas. Ibu akan
melakukan sederetan aksi yang tepat sama terhadap kesepuluh butir kentang
tersebut. Maka,
  • Inisialisasi: 10 butir kentang yang masih utuh dengan kulitnya
  • Jumlah iterasi: 10 (sesuai jumlah kentang)
  • Kondisi berhenti: 10 butir kentang sudah terkupas.
   Ketika mengimplementasikan dalam program, ketiga komponen ini
tidak selalu dapat didefinisikan dalam struktur pengulangan. Mungkin saja salah
satu komponen tersebut tidak didefinisikan. Pengulangan tetap dapat berjalan,
asal komponen yang tidak didefinisikan tersebut dapat diketahui secara
tersirat berdasarkan komponen lain yang didefinisikan. Hal lain yang perlu
diperhatikan adalah bahwa pengulangan harus berhenti. Jika pengulangan
tidak pernah berhenti, maka logika program salah. Pengulangan akan berhenti
jika jumlah iterasi yang diminta sudah tercapai atau kondisi berhenti bernilai
benar. Maka, dalam setiap pengulangan, pemrogram perlu menentukan jumlah
iterasi atau kondisi berhenti dan langkah pencapaian menuju kondisi berhenti
tersebut.
Pada bab ini akan dijelaskan 3 struktur perulangan dan implementasinya
di dalam C, yaitu struktur perulangan While , For, dan Do While

   Sintaks WHILE
Pengulangan dengan menggunakan WHILE merupakan sebuah
pengulangan yang dikendalikan oleh suatu kondisi tertentu, dimana kondisi
tersebut yang akan menentukan apakah perulangan itu akan terus
dilaksanakan atau dihentikan. Kondisi tersebut akan dicek disetiap awal
iterasi, apakah sebuah kondisi terpenuhi atau tidak. Jika kondisi terpenuhi
(bernilai benar), maka iterasi akan dilanjutkan. Jika kondisi tidak terpenuhi,
maka iterasi dihentikan.
   Perulangan dengan WHILE dapat digunakan pada struktur perulangan
yang diketahui jumlah iterasinya dan juga pada struktur perulangan yang tidak
diketahui jumlah iterasinya, tetapi harus selalu terdapat kondisi berhenti.
Struktur pengulangan WHILE adalah:

1 {inisialisasi}
2 WHILE (kondisi)
3 aksi
4 ubah pencacah (pencapaian kondisi berhenti)
5 ENDWHILE

   Pencacah adalah variabel pengendali iterasi yang harus diinisialisasi, dicek
dalam kondisi, dan terus berubah nilainya setiap iterasi dilakukan. Pencacah
inilah yang akan membuat sebuah kondisi berhenti tercapai. Pada struktur
pengulangan dengan sintaks WHILE, nilai pencacah akan diubah di akhir aksi
pengulangan.
   Contoh: Ibu mengupas 10 butir kentang dapat direpresentasikan
   dengan pengulangan WHILE sebagai berikut :

ALGORITMA Kupas_Kentang
IS : Terdapat 10 kentang belum dikupas
FS : 10 kentang telah terkupas
KAMUS DATA
kentang : integer
1 BEGIN
{inisialisasi jumlah kentang yang sudah dikupas}
2 kentang ⬅ 0
3 WHILE (kentang < 10 ){kondisi iterasi dilakukan}
4 Ambil sebuah kentang
5 Kupas kulit kentang
6 kentang⬅kentang+1 {pencapaian kondisi berhenti}
7 ENDWHILE
8 END

   Telah diketahui bahwa Ibu akan melakukan pengupasan sebanyak 10
kentang, maka sebelum masuk struktur pengulangan, variabel kentang
berisi 0 {menunjukkan bahwa di awal iterasi belum ada kentang yang dikupas
atau jumlah kentang yg telah dikupas = 0}.

   Pada iterasi pertama, terjadi pengecekan kondisi (kentang < 10)
dimana artinya “apakah jumlah kentang yang dikupas belum mencapai 10”,
karena nilai kentang = 0 maka kondisi bernilai benar, ibu akan mengambil
sebuah kentang kemudian mengupas kulitnya. Di akhir iterasi pertama, jumlah
kentang yang sudah dikupas menjadi (0+1) = 1. Pada titik ini, variabel kentang
berisi 1 (artinya, 1 kentang sudah dikupas).

   Pada iterasi kedua, terjadi pengecekan kondisi (kentang < 10),
sedangkan kentang = 1, maka kondisi bernilai benar, ibu akan mengambil
sebuah kentang kemudian mengupas kulitnya. Di akhir iterasi kedua, jumlah
kentang yang sudah dikupas menjadi (1+1)=2.

   Iterasi ini terus berulang sampai iterasi ke 10, variabel kentang berisi 9.
Saat terjadi pengecekan kondisi (kentang < 10) bernilai benar, maka ibu
mengambil sebuah kentang kemudian mengupas kulitnya. Di akhir iterasi ke
sepuluh, jumlah kentang yang sudah dikupas menjadi (9+1) = 10.
Kemudian, pada iterasi ke 11, terjadi pengecekan kondisi (kentang < 10) ,
karena kentang = 10 maka kondisi bernilai salah, sehingga iterasi diakhiri.
Hasil akhirnya, variabel kentang berisi 10 (artinya, 10 kentang sudah dikupas).
   Jalannya iterasi ini dapat ditulis dalam bentuk tabel berikut:

ITerasi Ke
Kentang
kentang < 10
Ambil dan kupas
Kentang
1
0
Ya
Ya
1
2
1
Ya
Ya
2
3
2
Ya
Ya
3
4
3
Ya
Ya
4
5
4
Ya
Ya
5
6
5
Ya
Ya
6
7
6
Ya
Ya
7
8
7
Ya
Ya
8
9
8
Ya
Ya
9
10
9
Ya
Ya
10
11
10
Tidak
Tidak
-













   Dari contoh di atas, variabel kentang  merupakan pengendali iterasi.
Iterasi dapat terus dilakukan atau tidak, bergantung pada nilai variabel kentang
ini. Selanjutnya, variabel penentu iterasi ini disebut dengan pencacah.
Pencacah harus berupa nilai yang memiliki urutan, yaitu dapat bertipe integer
atau karakter. Di setiap struktur pengulangan, pencacah selalu ada dan jangan
lupa untuk menginisialisasi pencacah. Nilai pencacah akan berubah pada setiap
iterasi.
   Hal lain yang perlu diperhatikan adalah bahwa di akhir iterasi, variabel
kentang bernilai 10. Nilai ini tidak berubah lagi karena iterasi tidak dilakukan
lagi, dan disebut sebagai loop invariant.

      1. Algoritma untuk menampilkan karakter ‘ * ‘ sebanyak 5 kali.
ALGORITMA Tampil_Bintang
IS : -
FS : Jumlah bintang yg tampil = 5
KAMUS DATA
i : integer
1 BEGIN
2 i ⬅ 0 {inisialisasi pencacah i}
3 WHILE (i < 5) {jumlah iterasi}
4 Output (‘*’) {aksi}
5 i  i + 1 {pencapaian kondisi berhenti}
6 ENDWHILE
7 END

     2. Algoritma untuk menampilkan iterasi ke 1 sampai 5 dengan
        pengulangan.
ALGORITMA Iterasi_Angka
IS : -
FS : Tampil angka 1 hingga 5
KAMUS DATA
i : integer
1 BEGIN
2 i  1 {inisialisasi pencacah i}
3 WHILE (i <= 5)
4 Output (‘Ini adalah iterasi ke-’,i)
5 i  i + 1
6 ENDWHILE
7 END

          Output dari algoritma ini:
Ini adalah iterasi ke-1
Ini adalah iterasi ke-2
Ini adalah iterasi ke-3
Ini adalah iterasi ke-4
Ini adalah iterasi ke-5

     3. Algoritma untuk memasukkan nilai tiga (3) orang mahasiswa
ALGORITMA Input_Nilai
IS : -
FS : Menerima inputan nilai dari user
KAMUS DATA
i : integer
nilai : integer
1 BEGIN
2 i  1
3 WHILE (i <= 3)
4 Output (‘Nilai mahasiswa ke-‘,i,’adalah:’)
5 Input (nilai)
6 i  i + 1
7 ENDWHILE
8 END

              Output dari algoritma ini:
Nilai mahasiswa ke-1 adalah: _
Nilai mahasiswa ke-2 adalah: _
Nilai mahasiswa ke-3 adalah: _

    4.Algoritma untuk menghitung nilai rata-rata dari tiga bilangan yang
       diinputkan.
ALGORITMA Nilai_Rata_Rata
IS : -
FS : Tampil rata-rata dari nilai yang
diinputkan

KAMUS DATA
jumlah : float
bilangan : integer
x : float
rerata : float
1 BEGIN
2 jumlah ⬅ 0 {variabel jumlah bilangan}
3 bilangan  3 {inisialisasi variabel pencacah}
4 WHILE (bilangan > 0)
5 Output(‘Masukkan angka : ‘)
6 Input (x) {masukkan sebuah bilangan}
7 jumlah  jumlah + x {tambahkan bilangan}
8 bilangan bilangan – 1 {pencacah mundur}
9 ENDWHILE
10 rerata  jumlah/ 3 {menghitung rerata}
11 Output (‘Rerata : ‘,rerata)
12 END

               Penggunaan sintaks WHILE dalam bahasa pemrograman C :
Algoritma
C
WHILE (kondisi)
aksi
ubah pencacah
ENDWHILE
while (kondisi)
{
//aksi
//ubah pencacah
}

 0
WHILE (i < 5)
Output(‘*’)
 i + 1
ENDWHILE
i = 0;
while (i < 5)
{
printf(“*”);
i = i + 1;
}
         
                Implementasi algoritma contoh ke-4 ke dalam C adalah:
1 //Nilai_Rata_Rata.c
2 //Menerima 3 angka dan menampilkan rata-ratanya
3 #include <stdio.h>
4 main ()
5 {
6 //deklarasi variabel yg digunakan
7 float jumlah;
8 int bilangan;
9 float x;
10 float rerata;
11 //inisialisasi variabel jumlah
12 jumlah = 0;
13 //inisialisasi variabel pencacah bilangan
14 bilangan = 3;
15 while (bilangan > 0 )
16 {
17 //meminta inputan dari user
18 printf("Masukkan angka : ");
19 scanf("%f",&x);
20 //menjumlahkan angka yg diinputkan
21 jumlah = jumlah + x;
22 //mengurangkan pencacah untuk mencapai
23 //kondisi berhenti
24 bilangan = bilangan - 1;
25 }
26 //menghitung rata-rata dari 3 inputan angka
27 rerata = jumlah / 3;
28 //menampilkan hasil rata-rata
29 printf("Rerata : %.2f",rerata);
30 }


   Sintaks DO WHILE
   Melakukan pengulangan serupa dengan sintaks
WHILE. Penggunaan sintaks ini juga tidak harus menyebutkan jumlah
pengulangan yang harus dilakukan, karena dapat digunakan untuk perulangan
dengan jumlah iterasinya yang belum diketahui, tetapi harus mempunyai kondisi
berhenti.
   Bedanya, jika pada sintaks WHILE kondisi dievaluasi/ diuji sebelum aksi
pengulangan dilakukan, sedangkan pada sintaks DO...WHILE pengujian kondisi
dilakukan setelah aksi pengulangan dilakukan.
 
   Struktur pengulangan DO...WHILE yaitu:
1 {inisialisasi}
2 DO
3 aksi
4 ubah pencacah
5 WHILE (kondisi)
   
   Pada struktur pengulangan dengan sintaks DO... WHILE..., aksi akan
terus dilakukan hingga kondisi yang dicek di akhir pengulangan, bernilai benar.
Dengan sintaks ini, pengulangan pasti dilakukan minimal satu kali, yakni pada
iterasi pertama sebelum pengecekan kondisi. WHILE dengan DO WHILE
seringkali memberikan hasil yang sama, tetapi ada kalanya hasilnya akan
berbeda, sehingga harus berhati-hati dalam penggunaan kondisi antara WHILE
dengan DO WHILE.
Beberapa contoh penerapan struktur pengulangan DO... WHILE... :

     5.Algoritma ibu mengupas kentang
ALGORITMA Kupas_Kentang
IS : Terdapat 10 kentang belum dikupas
FS : 10 kentang telah terkupas
KAMUS DATA
kentang : integer
1 BEGIN
2 {inisialisasi jml kentang yang sudah dikupas}
3 kentang ⬅ 0
4 DO
5 Ambil sebuah kentang
6 Kupas kulit kentang
7 {pencapaian kondisi berhenti}
8 kentangkentang+1
9 WHILE (kentang < 10) {kondisi berhenti}
10 END

     6. Algoritma untuk menampilkan karakter * sebanyak 5 kali.
ALGORITMA Tampil_Bintang
IS : Jumlah bintang yg tampil = 0
FS : Jumlah bintang yg tampil = 5
KAMUS DATA
i : integer
1 BEGIN
2 i  0 {inisialisasi pencacah i}
3 DO
4 Output (‘*’) {aksi}
5 i  i + 1 {pencapaian kondisi berhenti}
6 WHILE (i < 5) {jumlah iterasi}
7 END

     7.Algoritma untuk menampilkan iterasi ke 1 sampai 5 dengan pengulangan.
ALGORITMA Iterasi_Angka
IS : -
FS : Tampil angka 1 hingga 5IS : Jumlah bintang yg tampil = 0
FS : Jumlah bintang yg tampil = 5
KAMUS DATA
i : integer
1 BEGIN
2 i  1 {inisialisasi pencacah i}
3 DO
4 Output (‘Ini adalah iterasi ke-’,i){aksi}
5 i  i + 1
6 WHILE (i <= 5) {kondisi berhenti}
7 END

    Sintaks FOR
  Sintaks pengulangan FOR merupakan sintaks yang relatif paling mudah
digunakan. Sintaks ini serupa dengan sintaks WHILE... DO... dalam hal
pengecekan kondisi dilakukan di awal. Dalam menggunakan struktur
pengulangan dengan sintaks FOR, pemrogram harus mendefinisikan nilai awal
dan nilai akhir pencacah yang menunjukkan jumlah iterasi. Setiap kali iterasi
berlangsung, nilai pencacah akan diubah. Jika pencacah sudah mencapai nilai
akhir yang ditentukan, maka pengulangan akan berhenti.
   Bila contoh ‘Ibu mengupas kentang’ ingin diubah ke dalam struktur
pengulangan dengan sintaks FOR, pemrogram harus menentukan nilai awal
dan akhir pencacah, yaitu variabel kentang. Karena ibu akan mengupas
kentang pertama hingga kentang ke sepuluh, maka:
  • Nilai awal pencacah: kentang = 1
  • Nilai akhir pencacah: kentang = 10
  • Selama kondisi kentang>=1 dan kentang<=10 terpenuhi, aksi pengulangan akan dilakukan.
Struktur umum pengulangan dengan sintaks FOR adalah:
  FOR(inisialisasi;KondisiPengulangan;PerubahNilaiPenc
acah)
    {pernyataan/perintah pengulangan}
ENDFOR

Dimana :
  • Inisialisasi : untuk memberikan nilai awal untuk variabel pencacah.
  • Kondisi Pengulangan : kondisi pengulangan akan berhenti atau tidak.
  • Perubah Nilai Pencacah : pengubahan nilai variabel pencacah untuk mencapai kondisi berhenti, dapat berupa kenaikan ataupun penurunan. Pengubah variabel pencacah tidak harus selalu naik atau turun satu, tetapi dapat dilakukan pengubahan variabel pencacah lebih dari satu.
  • Pernyataan perintah : aksi yang akan diulang
Maka, pada contoh-contoh sebelumnya dapat diubah dalam struktur FOR
menjadi :
ALGORITMA Kupas_Kentang
IS : Terdapat 10 kentang belum dikupas
FS : 10 kentang telah terkupas
KAMUS DATA
kentang : integer
1 BEGIN
2 //inisialisasi,kondisi, dan pengubah pencacah
3 //dideklarasikan dalam sintaks for
4 FOR(kentang  0; kentang < 10; kentang++)
5 {aksi pengulangan}
6 Ambil sebuah kentang
7 Kupas kulit kentang
8 ENDFOR
9 END

    Perhatikan bahwa potongan algoritma di atas tidak mencantumkan aksi
pengubah pencacah kentangkentang + 1. Inisialisasi,
pengecekan kondisi, dan pengubah variabel pencacah sudah terdapat
dalam argumen FOR. Pada posisi pengubah variabel, pernyataan
kentang++ sama dengan kentangkentang + 1,penambahan
akan dilakukan setelah aksi pengulangan dilaksanakan.
Jalannya iterasi ini dapat ditulis dalam bentuk tabel berikut:

ITerasi – ke1
Kentang
kentang< 10?
{aksi}
1
0
YA
YA
2
1
YA
YA
3
2
YA
YA
4
3
YA
YA
5
4
YA
YA
6
5
YA
YA
7
6
YA
YA
8
7
YA
YA
9
8
YA
YA
10
9
YA
YA
11
10
TIDAK
-
                      Pengulangan dihentikan pada iterasi ke- 11 karena kondisi
                      kentang<10 bernilai salah.

   Sintaks Pengulangan Bersarang
Sama halnya dengan struktur pemilihan, struktur pengulangan juga
dapat disusun bersarang. Sebuah struktur pengulangan bisa berada dalam
struktur pengulangan lainnya. Atau, sebuah struktur pengulangan bisa
mengandung struktur pengulangan lain di dalamnya.

Dari contoh ibu mengupas kentang, misalnya dengan struktur
pengulangan WHILE berikut ini:

ALGORITMA Kupas_Kentang
IS : Terdapat 10 kentang belum dikupas
FS : 10 kentang telah terkupas
KAMUS DATA
kentang : integer
KAMUS DATA
kentang : integer

   Setiap kali ibu mengambil sebuah kentang, ibu akan mengupas kulit kentang
   kemudian langsung memotongnya menjadi empat bagian. Berdasarkan kondisi
   ini, potongan algoritma di atas dapat dilengkapi menjadi:

ALGORITMA Kupas_Kentang_Potong_4
IS : Terdapat 10 kentang belum dikupas
FS : 10 kentang telah terkupas dan teriris menjadi
4 bagian
KAMUS DATA
kentang : integer
potongan: integer
1 BEGIN
{inisialisasi jumlah kentang yang sudah dikupas}
2 kentang ← 0
3 WHILE (kentang < 10 ){kondisi iterasi dilakukan}
4 Ambil sebuah kentang
5 Kupas kulit kentang
6 potongan ⬅ 1 {inisialisai jml potongan kentang}
7 DO
8 Potong kentang
9 potongan = potongan + 1
10 WHILE (potongan<=4)
11 kentangkentang+1 {pencapaian kondisi berhenti}
12 ENDWHILE
13 END

   Pada contoh di atas, pengulangan luar (WHILE) merupakan pengulangan
   untuk aksi mengupas kentang, sedangkan pengulangan dalam (DO...WHILE)
   merupakan pengulangan untuk memotong kentang ke dalam 4 bagian.
   Pengulangan dalam akan berhenti ketika jumlah potongan = 4.

  Sintaks BREAK dan CONTINUE
Sintaks BREAK dan CONTINUE merupakan sintaks yang digunakan
untuk menghentikan pengulangan dan melanjutkan ke perintah atau aksi
berikutnya. Sintaks BREAK dan CONTINUE dapat digunakan baik di dalam
struktur pengulangan WHILE, DO...WHILE, dan FOR.
Sintaks BREAK digunakan untuk menghentikan pengulangan kemudian
keluar dari struktur pengulangan tanpa melanjutkan perintah di dalam
struktur pengulangan.
Berikut adalah pengulangan dengan FOR tanpa menggunakan BREAK atau
CONTINUE :
ALGORITMA Iterasi_Angka
IS : -
FS : Menampilkan angka 1 hingga 6
KAMUS DATA
i : integer
1 BEGIN
2 FOR(i ⬅  1; i <= 6;i++)
3 Output (‘Ini adalah iterasi ke-’,i){aksi}
4 ENDFOR
5 OUTPUT(‘Akhir pengulangan’)
6 END

   Jika algoritma diatas dijalankan, maka akan menghasilkan output sebagai
   berikut :
Ini adalah iterasi ke-1
Ini adalah iterasi ke-2
Ini adalah iterasi ke-3
Ini adalah iterasi ke-4
Ini adalah iterasi ke-5
Ini adalah iterasi ke-6
Akhir pengulangan







Contoh penggunaan sintaks BREAK di dalam pengulangan dengan
menggunakan FOR:
ALGORITMA Iterasi_Angka_Break
IS : -
FS : Menampilkan angka 1 hingga 6 tetapi berhenti
di angka 3
KAMUS DATA
i : integer
1 BEGIN
2 FOR(i  1; i <= 6;i++)
3 IF (i=4)
4 BREAK
5 ENDIF
6 Output (‘Ini adalah iterasi ke-’,i){aksi}
7 ENDFOR
8 OUTPUT(‘Akhir pengulangan’)
9 END
  Jika algoritma diatas dijalankan, maka akan menghasilkan output sebagai
  berikut :
Ini adalah iterasi ke-1
Ini adalah iterasi ke-2
Ini adalah iterasi ke-3
Akhir pengulangan

  Ketika variabel i mencapai angka 4 maka akan memenuhi syarat untuk masuk
  ke struktur IF, kemudian perintah BREAK dijalankan yaitu keluar dari struktur
  pengulangan FOR, dan menampilkan perintah pada baris ke-8.



Tidak ada komentar: