PERCABANGAN DAN PENGULANGAN Pada BAB ini akan membahas tentang PERCABANGAN dan PERULANGAN. PERCABANGAN : a) IF THEN b) CASE OF PENGULANGAN: a) REPEAT N TIMES b) REPEAT UNTIL c) WHILE DO d) ITERATE STOP e) TRAVERSAL (FOR TO DO) 2.1 STATEMENT PERCABANGAN 2.1.1 IF THEN FORMULA : IF [KONDISI] THEN [AKSI] Dapat diartikan dari formula tersebut adalah AKSI akan terjalankan apabila KONDISI bernilai TRUE. KONDISI merupakan sebuah BOOLEAN yang hanya memiliki 2 nilai, yaitu TRUE dan FALSE. Contoh ekspresi BOOLEAN adalah : X > Y A B M = N P Q A + B > 1 kata = daskom k mod 4 = 0 nilai = TRUE NOT TRUE (X > 0) and (Y<0) (*lihat modul 1 untuk penjelasan ekspresi boolean)
o SATU KONDISI PROGRAM GENAP GANJIL Program genap_ganjil; {menentukan genap sebuah bilangan} uses crt; a,b : integer; a, b : integer write ('masukan nilai a : '); readln (a); if (a mod 2 = 0) then if (a mod 2 = 0 ) then write (a, ' adalah bilangan genap '); b := b +1; output ('bilangan genap') b b + 1 Yang menjadi ekspresi boolean dari program diatas adalah a mod 2 = 0. Apabila a diberi input 3 maka KONDISI (a mod 2 = 0) bernilai FALSE dan tidak melakukan eksekusi apapun. Namun apabila kita beri input a dengan 4 maka KONDISI bernilai TRUE dan mengerjakan AKSI yang ada pada program. Dalam penulisan notasi algoritmik untuk AKSI (output ( bilangan genap )) harus menjorok kedalam karena dalam notasi algoritmik tidak ada batas yang menjelaskan banyak aksi yang akan dilakukan. Begitu juga dengan penulisan dalam pascal, apabila lebih dari satu instruksi pada AKSI maka harus menggunakan dan untuk membatasinya. o DUA KONDISI PROGRAM GENAP GANJIL {menentukan genap atau ganjil sebuah bilangan} a : integer if (a mod 2 = 0 ) then output ('bilangan genap') else output ('bilangan genap') Program genap_ganjil; uses crt; a : integer; write ('masukan nilai a : '); readln (a); if (a mod 2 = 0) then write ( bilangan genap ') else write ( bilangan ganjil ')
Program di atas dikatakan dua kondisi karena apabila KONDISI (a mod 2 = 0 ) bernilai TRUE maka akan muncul bilangan genap, apabila bernilai FALSE maka muncul tulisan bilangan ganjil. o TIGA KONDISI ATAU LEBIH PROGRAM BILANGAN BULAT Program bilangan_bulat; {menentukan sebuah bilangan nol, uses crt; positif, atau negatif } a : integer; a: integer write ('masukan a : ');readln (a); if (a > 0) then if (a > 0) then write('bilangan positif') output ('bilangan positif') else if (a < 0) then else if (a < 0) then write('bilangan negatif') output ('bilangan negatif') else else write('bilangan nol'); output ('bilangan nol') Dikatakan 3 kondisi karena apabila KONDISI1 (a>0) bernilai TRUE maka output bilangan positif, namun jika tidak maka ada percabangan kembali yaitu dengan pertanyaan KONDISI2 (a<0) dan apabila nilai KONDISI2 adalah TRUE maka output bilangan negatif dan bila KONDISI2 FALSE maka output bilangan nol. Untuk kondisi lebih dari 3 dapat menambahkan else if pada percabangan selanjutnya. 2.1.2 CASE OF FORMULA : Case (iabel) of <kondisi_1> : <aksi1> <kondisi_2> : <aksi2> <kondisi_3> : <aksi3> DEPEND ON (iabel) <kondisi_1> : <aksi1> <kondisi_2> : <aksi2> <kondisi_3> : <aksi3> Notasi algoritmik mengenal formula ini adalah DEPEND ON, sedangkan pada pascal formula yang digunakan adalah CASE OF. CASE OF dan DEPEND ON mempunyai perbedaan, yaitu pada iabel dan ekspresi boolean pada kondisinya. CASE OF hanya bisa menggunakan 2 iabel yaitu integer dan char dan ekspresi boolean yang dapat digunakan hanya =, Sedangkan pada DEPEND ON semua iabel bisa digunakan dalam formulanya dan semua ekspresi boolean bisa digunakan.
Program bilangan bulat {menentukan positif,negatif, atau nol} a : integer algoritma : depend on (a) a > 0 : output ('bilangan positif') a < 0 : output ('bilangan negatif') a = 0 : output ('bilangan nol') Dari formula di atas kita tidak bisa menggunakan CASE OF karena ekspresi boolean pada kondisi ada yang menggunakan ekspresi >. Berikut adalah contoh CASE OF dan bentuk notasi algoritmiknya. Program nama bilangan program nama ; {menuliskan angka dalam bentuk huruf} uses crt; Var a : integer; a : integer algoritma : writeln ('batas input 0-3'); output ('batas input 0-3') write('masukan a : '); readln (a); case (a) of depend on (a) 0 : write ('nol'); a = 0 : output ('nol') 1 : write ('satu'); a = 1 : output ('satu') 2 : write ('dua'); a = 2 : output ('dua') 3 : write ('tiga'); a = 3 : output ('tiga') Program diatas menggunakan operasi boolean =. Dalam penulisan ekspresi boolean pada CASE OF berbeda dengan notasi algoritmik, hal ini bisa dilihat dari contoh diatas bahwa penulisannya hanya menuliskan isi iabel. (* untuk menentukan batas aksi yang akan dilakukan)
2.2 STATEMENT PENGULANGAN Pengulangan terdiri dari dua bagian : kondisi yang mengakibatkan pengulangan suatu saat berhenti, yang dinyatakan oleh sebuah ekspresi logik baik secara eksplisit maupun implisit badan pengulangan, yaitu aksi yang harus diulang selama kondisi yang ditentukan untuk pengulangan masih dipenuhi Ada 5 macam notasi dalam perulangan a. berdasarkan jumlah pengulangannya aksi akan dilakukan sebanyak n kali, dengan memasukan nilai N maka pengulangan tersebut akan berhenti ketika telah melakukan pengulangan sebanyak n kali. b. Berdasarkan kondisi berhenti aksi akan diberhentikan apabila kondisi berhenti bernilai true, akan diulang apabila kondisi berhenti bernilai false. Pengulangan ini minimal akan dilakukan satu kali karena saat aksi pertama dilakukan tidak ada pengkondisian. c. Berdasarkan kondisi pengulangan aksi akan dilakukan selama kondisi-pengulangan masih bernilai true. Pada pengulangan ini ada kemungkinan aksi tidak dilakukan karena saat pertama kali kondisi-pengulangan sudah bernilai false. d. Berdasarkan dua aksi Mekanisme yang dilakukan oleh pengulangan ini adalah dengan melakukan secara otomatis Aksi-1 pada eksekusi yang pertama kemudian dilakukan test terhadap kondisi berhenti. Tergantung kepada kondisi berhenti yang ditest: Aksi-2 akan diaktifkan dan kemudian Aksi-1 yang berikutnya diulang, atau
pengulangan dihentikan karena efek neto dari Aksi-1 menghasilkan kondisi berhenti. Pengulangan ini berguna untuk kasus-kasus di mana Aksi-2 merupakan hal yang harus dilakukan tergantung dari hasil Aksi-1. e. Berdasarkan pencacah Pada pengulangan ini akan dilakukan sebanyak selisih range harga yang dapat dilakukan. Type dari nama pencacah tidak bisa digunakan oleh semua tipe, hanya integer dan char saja yang dapat digunakan. Dari 5 contoh pengulangan tersebut, hanya 3 saja yang bisa digunakan dalam yaitu : Repeat until {menuliskan angka berurut dari 1 -n } uses crt; write('banyaknya pengulangan? '); i 1 i := 1; repeat repeat output (i) i i +1 write (i); until (i n) i := i +1; until (i <= n) Dalam program tersebut apabila n diberi nilai 0 maka output dari program adalah 1, hal ini dikarenakan dalam repeat until minimal aksi yang terjadi adalah aksi yang pertama. Dan apabila input lebih dari nol maka output akan mengeluarkan nilai 1 sampai bilangan n yang diinputkan. (* dalam pascal menandakan aksi yang akan diulang)
While Do {menuliskan angka berurut dari 1 -n } uses crt; write('banyaknya pengulangan? '); i 1 i := 1; while (i n) do while (i <= n) do output(i) i i +1 write (i); i := i+1 Dari program diatas pengulangan akan terjadi bila kondisi bernilai TRUE dan berhenti mengulang setelah kondisi FALSE. Apabila input n diberi angka 0 maka tidak ada output yang terjadi karena saat memulai kondisi sudah bernilai FALSE. (* dalam pascal menandakan aksi yang akan diulang) Traversal (For to do) {menuliskan angka berurut dari 1 -n } i traversal [1..n] write (i) uses crt; write('banyaknya pengulangan? '); for i:=1 to n do write (i); Program diatas sama seperti sebelumnya yaitu mencetak angka dari 1 sampai n, namun pada program ini menggunakan traversal/for to do (dalam pascal). Seperti yang dijelaskan pada awalnya bahwa iabel pencacah untuk pengulangan ini hanya bisa untuk integer dan char saja. Apabila n diberi input 0 maka program akan error karena for to do adalah pencacah maju. Apabila kita ingin mencacah mundur maka kita bisa menggunakan for downto, prinsipnya sama hanya nilai cacahnya saja yang berbeda.
{menuliskan angka berurut dari n-1 } i traversal [n..1] write (i) uses crt; write('banyaknya pengulangan? '); for i:=n downto 1 do write (i); Contoh soal aplikasi Buatlah sebuah program untuk membuat bangun berikut Input = 4 * ** *** **** Penyelesaian Program tersebut menjelaskan bahwa output gambar tergantung input. Input sama dengan 4 maka banyak baris sama dengan 4, dimana setiap baris terdapat bintang sebanyak urutan baris tersebut. {menuliskan angka berurut dari n-1 } i traversal [1..n] j traversal [1..i] output ('*') uses crt; write('banyaknya n? '); for i:=1 to n do for j :=1 to i do write ('*'); writeln;
Lihat program pascal (misal n=4) MODUL PRAKTIKUM for i:=1 to n do berfungsi untuk membuat baris yaitu sebanyak 4. Aksi yang akan diulang pada pengulangan ini adalah for j:=1 to i do dan writeln;. for j:=1 to i do berfungsi membuat bintang pada masing-masing baris dan writeln; berfungsi membuat baris baru untuk baris selanjutnya. for j:=1 to i do berarti pengulangan yang akan dilakukan adalah sebanyak 1 sampai i, hal ini dikarenakan i adalah urutan baris sehingga saat baris satu hanya mencetak satu bintang, baris kedua mencetak dua bintang, dan seterusnya. REFERENSI liem, inggriani (2008). DIKTAT KULIAH DASAR PEMROGRAMAN. BANDUNG : ITB