BAB 4 Struktur Perulangan

Struktur perulangan atau biasa disebut dengan looping digunakan untuk mengatur proses
yang dijalankan secara berulang-ulang. Sehingga programmer tidak perlu menuliskan script nya
secara berulang kali. Struktur kontrol perulangan mengijinkan kita untuk mengeksekusi sebuah
statement atau sekelompok statement dalam jumlah yang banyak.

4.1. KEGIATAN BELAJAR 1 PERULANGAN DENGAN KONDISI DIAWAL

Coba perhatikan contoh kode program berikut.




Ketiga kode program di atas adalah contoh dari perulangan dengan kondisi diawal.

maka kita bisa menyimpulkan bahwa kode program pertama dan
kedua memiliki struktur yang hampir sama, yang membedakan hanya yang pertama menggunakan
pernyataan WHILE-DO, sedangkan yang kedua menggunakan pernyataan FOR-DO.  Yang ketiga menunjukkan sebuah contoh penggunaan dari sebuah nested
loops (perulangan bersarang/ perulangan di dalam perulangan). Bagaimana cara kerja, hasil, dan
kapan ketiga kode program (pernyataan perulangan) tersebut di gunakan? Akan kita bahas pada
pembahasan berikut ini.
 Sebagaimana yang pernah dijelaskan pada semster lalu bahwa struktur perulangan
merupakan struktur yang tidak terpisahkan dengan algoritma dan pemrograman. Struktur
perulangan memungkinkan program untuk melakukan serangkaian perintah secara berulang-ulang.
Dan untuk memenuhi syarat bahwa algoritma harus finite (terbatas) maka dalam perulangan pasti
ada titik pemberhentian. Jika ternyata dalam sebuah kasus perulangan tidak mencapai titik berhenti
maka dapat dikatakan algoritma tersebut salah.
Titik pemberhentian dapat diberikan dengan beberapa cara, sebagai berikut.

1. Pemberhentian dengan syarat
Pemberhentian dengan syarat artinya ada sebuah kondisi yang akan menyebabkan perulangan
berhenti. Pemberian syarat ini juga dapat dilakukan dengan dua cara, yaitu
a. Syarat diberikan di awal, di mana selama persayaratan dipenuhi maka dilakuakn serangkain
perintah
b. Syarat diberikan di akhir, di mana proses akan diulang-ulang sampai syarat dipenuhi.
Perbedaan antara a dan b adalah ketika syarat diberikan di awal, maka selama persayaratan
itu dipenuhi , maka perulangan dilakukan. Jika kondisi sudah tidak dipenuhi maka berhenti.
Sedangakan pada kasus syarat di akhir, dikerjakan serangkaian langkah. Setiap selesai
rangkaian langkah diperiksa apakah kondisi sudah dicapai, jika belum maka proses diulangi
lagi. Struktur yang sesuai dengan perulangan dengan kondisi di awal adalah struktur WHILE
DO sedangkan untuk kondisi di akhir adalah dengan REPEAT UNTIL.

2. Pemberhentian dengan pencacah
Pemberhentian dengan pencacah, artinya dari awal sudah ditentukan bahwa perulangan akan
dilakukan berapa kali. Pencacah ini juga ada dua macam cara, yaitu 
a. Pencacah naik
Pemberhentian dengan pencacah naik artinya untuk suatu pencacah, misalkan i dari 1
sampai 100 lakukan rangkain langkah x.  Artinya langkah tersebut akan diulangi sebanyak
seratus kali. Dalam pascal untuk kasus pencacah naik digunakan struktur FOR TO DO.
b. Pencacah turun
Pemberhentian dengan pencacah turun , artinya sebaliknya untuk suatu pencacah i dari
100 sampai 1 lakukan rangkaian langkah x, artinya langkah x akan diulangi sebanyak
seratus kali. Dalam pascal untuk kasus pencacah naik digunakan struktur FOR DOWNTO
DO

Penggunaan beberapa macam pemberhentian di atas tergantung dari situasi dan kondisi, untuk
lebih jelasnya akan dijelaskan seperti berikut.

Perulangan dengan struktur WHILE DO Dalam berbagai bahasa Pascal dikenal struktur WHILE DO, yang berarti selama memenuhi kriteri/kondisi tertentu, maka dilakukan serangkaian proses. Struktur ini dapat diterapkan pada contoh di atas sebagai berikut.
Bentuk Umum:

 Atau jika lebih dari satu pernyataan dapat dituliskan








 Untuk lebih jelasnya, perhatikan contoh kode program berikut, beserta dengan hasilnya.
Contoh 1





















Perulangan dengan struktur FOR DO
Perulangan dengan pencacah, yaitu menggunakan struktur FOR DO dimasukkan dalam
pembahasan pada kegaiatan Belajar ini. Struktur ini digunakan untuk mengulang statement atau
satu blok statement berulang kali sejumlah yang ditentukan.
Bentuk umum : 



Penulisan pernyataan yang akan diproses berulang kali tersebut dapat juga ditulis dalam bentuk
blok pernyataan (diawali dengan BEGIN dan diakhiri dengan END), walaupun hanya berisi sebuah
statement saja, sebagai berikut :
Contoh 2



















 Keduanya mempunyai
kelebihan dan kekurangan sendiri-sendiri. Ada permasalahan yang dapat diubah dalam dua bentuk
eprulangan tapi ada yang lebih mudah menggunakan bentuk For Do, tapi ada juga yang hanya
bisa digunakan bentuk While Do.


Perhatikan dua contoh pertama pada bagian mengamati.
program whiledo
var i : integer; begin
i := 1; while i <= 5 do begin
writeln(‘Pascal’);
i:=i+1;
end;
end.
Program FORDO:
Var I : integer;
Begin
For i:= 1 to 5 Do 
                          Writeln(‘Pascal’);
End.
Kedua program di atas mempunyai keluaran yang sama yaitu mencetak ‘Pascal’ sebanyak
5 kali, yaitu untuk i=1 sampai 5. Dalam While Do, 
-       pertama i diberi nilai 1, 

-       Periksa apakah i <= 5? Iya maka tuliskan ‘Pascal’ kemudian nilai i ditambah 1 menjadi 2
-       Periksa apakah i<=5? Iya , maka tuliskan Pascal, i=i+1=3
-       Periksa apakah i<=5? Iya , maka tuliskan Pascal, i=i+1=4
-       Periksa apakah i<=5? Iya , maka tuliskan Pascal, i=i+1=5
-       Periksa apakah i<=5? Iya , maka tuliskan Pascal, i=i+1=6 
-       Periksa apakah i<=5?Tidak, maka STOP 
Di sini i berfungsi sebagai iterator dan 5 sebagai nilai sentinel.
            Dalam struktur FOR DO, iterator dan sentinel diringkas dalam bentuk for i:=1 to 5, di mana i otomatis bertambah naik, mulai dari nilai awal 1 menjadi 5. Oleh  karena itu  struktur For Do disebut perulangan dengan pencacah.
Contoh berikut kode program dengan dua struktur berbeda untuk masalah yang sama.
Contoh 3.
Buatlah program untuk mementukan suku ke-n dari barisan berikut.

2,7,12,17,22, ....
Jawab:
Barisan di atas adalah barisan aritmatika di mana selisih tiap suku berturutan adalah 5. Dengan struktur For Do.
Program Barisan;
var i,n,suku:integer; begin
      readln(n);      suku:=2;      for i:=2 to n do
            suku:=suku+5;
     writeln(‘suku ke- ‘, n,’ adalah : ’, suku); end.

Dari kode program di atas dapat dilihat bahwa suku pertama adalah 2, sehingga dinyatakan nilai awal suku:=2. Berikutnya untuk suku kedua, ketiga dan seterusnya (i=2, 3, 4, ..) dihitung nilai suku setelahnya  adalah suku sebelumnya ditambah 5 (suku:=suku+5). 
            Berikut ini programnya dengan struktur WHILE DO.
Program Barisan; var i,n,suku:integer; begin
     readln(n);      suku:=2;
     i:=2     
     While i<=n do
            Begin                           suku:=suku+5;                       i:=i+1;
            End;   
     writeln(‘suku ke- ‘, n,’ adalah : ’, suku); end.

Contoh 4.
Buatlah program untuk menentukan suku terbesar yang kurang dari n  dari barisan
2, 4, 8, 16, ....
Jawab:
Masalah ini kurang cocok diselesaikan dengan struktur FOR DO karena banyaknya perulangan tidak diketahui dengan pasti sehingga sulit mementukan ioterator dan nilai sentinelnya. Dengan menggunakan struktur While Do dapat diperoleh solusi sebagai berikut.
Program Barisan2; var n,suku:integer; begin
     readln(n);      suku:=2;
          While suku<=n do
                        suku:=suku*2;
     suku:=suku/2;      writeln(‘suku ke- ‘, n,’ adalah : ’, suku); end.

Misalkan n adalah 50, kita dapat menelusuri program di atas sebagai berikut.
Suku=2, periksa apakah suku<50? Ya, maka suku=suku*2=4
Suku=4, periksa apakah suku<50? Ya, maka suku=suku*2=8
Suku=8, periksa apakah suku<50? Ya, maka suku=suku*2=16
Suku=16, periksa apakah suku<50? Ya, maka suku=suku*2=32
Suku=32, periksa apakah suku<50? Ya, maka suku=suku*2=64
Suku=64, periksa apakah suku<50? STOP, lihat nilai terakhir suku adalah 64, karena ketika suku=32, pasti masih tetap dikalikan 2, sehigga setelah iterasi berakhir maka perlu dibagi lagi dengan 2.

Nested Loops (perulangan bersarang)

Dalam beberapa permasalahan sering dijumpai perulangan di dalam perulangan. Bisa menggunakan berbagai struktur WHILE DO atau FOR DO atau kombinasi dari struktur perulangan yang berbeda-beda.

for variabel1:=nilai_awal1 to [downto] nilai_akhir1 do begin
   for variabel2:=nilai_awal2 to [downto] nilai_akhir2 do    begin          statement;    end; end;  

Sedangkan bentuk umum untuk perulangan bersarang WHILE DO adalah sebagai berikut
while(kondisi1)do begin
   while(kondisi2) do    begin       statement(s);    end;    statement(s);
end;

Untuk lebih jelasnya, perhatikan contoh kode program berikut, beserta dengan hasilnya.
program NestedLoops; {* contoh aplikasi mencari nilai prima *} var
   i, j:integer; begin
   for i := 1 to 5 do    begin
      for j := 1 to i do           write('*');       writeln;    end; end.
Output:
*
**
***
****
*****

Dalam program di atas diulangai dari i=1 sampai 5.
i=1, ulangi dari j=1 sampai 1 tuliskan ‘*’, kemudian ganti baris (writeln)
i=2, ulangi dari j=1 sampai 2 tuliskan ‘*’ sehingga ada dua ‘*’ , kemudian ganti baris (writeln) i=3, ulangi dari j=1 sampai 3 tuliskan ‘*’ sehingga ada tiga ‘*’ , kemudian ganti baris (writeln) i=4, ulangi dari j=1 sampai 4 tuliskan ‘*’ sehingga ada empat ‘*’ , kemudian ganti baris (writeln) i=5, ulangi dari j=1 sampai 5 tuliskan ‘*’ sehingga ada lima ‘*’ , kemudian ganti baris (writeln) 


4.2. KEGIATAN BELAJAR 2 PERULANGAN DENGAN KONDISI DI AKHIR


Perhatikan Souce code berikut
PROGRAM REPEATUNTIL var digit := 1; begin repeat
write (digit); digit := digit + 1
until digit > 5 ;
end.

Program REPEATUNTIL
var    a: integer; begin
   a := 10;
   (* repeat until loop execution *)    repeat
      writeln(‘nilai dari a adalah ', a);       a := a + 1    until a = 20; end.
Kedua contoh di atas adalah contoh kode program dari struktur kontrol.

Sebagaimana yang dijelaskan bahwa perulangan dapat dilakukan dengan menyatakan kondisi di akhir. Berbeda dengan kondisi di awal, di mana selama syarat (kondisi) dipenuhi maka perintah dijalankan,  pada kondisi di akhir, perintah dijalankan sampai memenuhi kondisi yang diinginkan. Struktur yang digunakan adalah struktur Repeat Until.

REPEAT UNTIL

Digunakan untuk mengulang (repeat) statement atau blok statement sampai (until) kondisi
yang diseleksi di Until tidak terpenuhi.
Bentuk Umum : 
REPEAT 

       Pernyataan; UNTIL (kondisi)


Coba perhatikan flow diagram berikut ini


Untuk lebih jelasnya, perhatikan contoh kode program berikut, beserta dengan hasilnya.
Contoh 1.
Kode Program
Var digit := 1; begin repeat
     writeln (digit);      digit := digit + 1
until digit > 5 ;
end.
Output:
1
2
3
4
5

Program di atas diawali dengan nilai awal digit=1, kemudian dilakukan perintah 
writeln (digit);
                             digit := digit + 1
hingga nilai digit>5.

Contoh 2.
Kode program:
var    a: integer; begin
   a := 10;       repeat          writeln(‘nilai dari a adalah ', a);          a := a + 2    until a = 20; end.
Hasil:
nilai dari a adalah 10 nilai dari a adalah 12 nilai dari a adalah 14 nilai dari a adalah 16 nilai dari a adalah 18 nilai dari a adalah 20
Bagaimana jika kondisi diganti dengan a=21? Smaapi kapanpun syarat ini tidak akan dipenuhi karena nilai dari a pasti genap, sedangkan 21 ganjil. Dengan demikian terjadi perulangan terus menerus.

Lalu,kapan kita akan menggunakan Perulangan dengan kondisi di awal, dalam hal ini adalah WHILE DO dengan Perulangan dengan kondisi di akhir yaitu REPEAT UNTIL, adalah Perbedaan antara struktur REPEAT-UNTIL dengan WHILE-DO adalah sebagai berikut :
1)    Paling sedikit statement-statement di dalam perulangan REPEAT-UNTIL diproses sekali, karena seleksi kondisi ada pada statement Until yang terletak dibawah. Sedang pada struktur WHILE-DO paling sedikit dikerjakan nol kali, karena seleksi kondisi ada pada statement While yang terletak diatas, sehingga kalau kondisi sudah tidak terpenuhi, maka tidak akan masuk ke dalam lingkungan perulangan.
2)    Pada REPEAT-UNTIL dapat tidak dipergunakan blok statement (tidak diperlukan Begin dan End untuk menunjukkan batas perulangannya), karena batas perulangannya sudah ditunjukkan oleh Repeat sampai dengan Until (Repeat dan Until sebagai pengganti Begin dan End). 

4.3. KEGIATAN BELAJAR 3 PERULANGAN DENGAN KONDISI DIINPUTKAN USER 

Perhatikan Program berikut.

Program UlangVolumeBalok;
Uses crt;
Var     p,l,t, V:integer;            pilihan:char;  
Begin
      Clrscr;
      Repeat
Readln(p);
Readln(l);
Readln(t); V:= p*l*t; writeln (v);
Write  (‘ingin menghitung lagi  y/n’);
Readln (pilihan); until (pilihan==”n”); readln; End.
Program  ini diambil dari semester yang lalu mengenai algoritma perulangan dengan kondisi dari user.
        Aplikasi pemroograman dalam kehidupan nyata, khususnya yang terkait dengan struktur perulangan, memerlukan syarat yang diinputkan oleh pengguna.  Sebagai contoh, dalam sebuah aplikasi kasir, ketika melayani pembeli, seorang kasir akan memasukkan data barang-barang yang dibeli dengan barcode reader, hingga akhirnya kasir akan mengklik sebuah tombol untuk menghitung total belanjaan. Proses memasukkan data dari barang pertama, kedua, dan ke barangbarang berikutnya, adalah suatu bentuk perulangan. Dan perulangan ini akan berhenti hingga akhrinya kasir mengeklik tombol untuk menghitung total belanjaan.
Contoh lain misalkan dalam sebuah video game dengan koin, ketika seorang anak memasukkan koin, kemudian bermain dan akhirnya terjadi game over. Berikutnya biasanya, video game akan menampilkan hitungan mundur menunggu anak untuk memasukkan koin berikutnya agar permainan dapat dilanjutkan. Bentuk hitugan mundur ini juga menggunakan perulangan, dan akan berhenti perulangan ini untuk dua kemungkinan, si anak memasukkan koin atau perhitungan mundur selesai dan akhirnya masuk ke menu awal game kembali.
Kondisi yang diinputkan dari user bisa diperoleh sebelum perulangan atau di dalam perulangan itu sendiri. Contoh di atas adalah kondisi dimasukkan oleh user di dalam perulangan itu sendiri. Contoh pengambilan kondisi sebelum perulangan adalah menentukan suku ke-n dari sebuah barisan. Misalkan menetukan suku ke n dari barisan 1,2,3,5,8, .... Nilai n diperoleh dengan menerima masukan dari user sebelum perulangan dilakukan.

4.4. KEGIATAN BELAJAR 4 PERULANGAN DENGAN PERNYATAAN BREAK & CONTINUE

Coba perhatikan contoh kode program berikut
Program Breaking; var    a: integer; begin
   a := 10;    while  a < 20 do    begin         writeln(‘nilai dari a adalah  ', a);         a:=a +1;         if( a > 15) then
             break;                        {menghentikan perulangan}     end; end

program Lanjut;  var  a: integer; begin
     a := 10;      repeat
          if( a = 15) then                    begin
             a := a + 1;              continue;              end;       writeln(‘nilai a adalah ', a);       a := a+1;    until ( a = 20 ); end.
Kedua Kode program diatas adalah contoh penggunaan struktur kontrol yang akan kita behas berikut ini

      Perbedaan dari kedua kode program di atas adalah pada penggunaan pernyataan BREAK dan CONTINUE. Walaupun pada dasarnya hasil/output nya sama, tetapi pada penggunaan time execution (waktu yang dibutuhkan untuk eksekusi) lebih cepat dibandingkan dengan yang tidak menggunakan kedua pernyataan tersebut.
Di dalam pascal sendiri kedua pernyataan tersebut di sampaikan dalam bentuk sebagai berikut 

1) BREAK

Pernyataan BREAK di dalam Pascal memiliki 2 buah kegunaan, yaitu
1.    Pernyataan break yang ditemukan di dalam sebuah perulangan, otomatis akan menghentikan kontrol perulangan tersebut dan kontrol program selanjutnya akan dilanjutkan pada pernyataan setelah perulangan
2.    Pernyataan break juga dapat digunakan untuk menghentikan pernyataan case of yang sudah dibahas pada bab sebelumnya Bentuk umum:
                              If (kondisi) 
                    Break;
Coba perhatikan flow diagram berikut, yaitu penggunaan break pada struktur WHILE DO.
                                                                                     Untuk lebih jelasnya, perhatikan contoh kode program berikut, beserta hasilnya berikut.

Contoh 1.
Kode program:
var    a: integer; begin
   a := 10;
  (* while loop execution *)    while  a < 20 do    begin       writeln(‘nilai dari a adalah  ', a);       a:=a +1;       if( a > 15) then
         (* menghentikan proses looping menggunakan pernyataan break *)           break;     end; end

Hasil:
nilai dari a adalah 10 nilai dari a adalah 11 nilai dari a adalah 12 nilai dari a adalah 13
nilai dari a adalah 14 nilai dari a adalah 15

Perulangan di atas akan dihentikan ketika a>15 sehingga yang ditampilkan 
       

2) CONTINUE

Pernyataan continue di dalam Pascal bekerja seperti halnya pernyataan break. Break digunakan untuk menghentikan secara paksa sebuah proses, tetapi continue secara paksa akan melanjutkan perulangan selanjutnya, dan mengabaikan kode-kode diantara keduanya.
Bentuk umum:

Continue;


Coba perhatikan flow diagram berikut, yaitu penggunaan continue pada struktur repeat until.
 


Untuk lebih jelasnya, perhatikan contoh kode program berikut, beserta hasilnya

Contoh 2.
Kode program:
var    a: integer; begin
   a := 10;
   (* repeat until loop execution *)    repeat
      if( a = 15) then       begin          a := a + 1;
         continue;            {langsung menuju ke repeat}       end;       writeln(‘nilai a adalah ', a);       a := a+1;    until ( a = 20 ); end.

Hasil:
nilai a adalah 10 nilai a adalah 11 nilai a adalah 12 nilai a adalah 13 nilai a adalah 14 nilai a adalah 16 nilai a adalah 17 nilai a adalah 18 nilai a adalah 19




Komentar

Postingan populer dari blog ini

VLAN, PROSES ROUTING, ROUTING STATIS, ROUTING DINAMIS