Pemilihan / Percabangan (Selection)
Percabangan (Selection) atau pemilihan merupakan blok kontrol yang digunakan untuk memilih statement atau aksi-aksi yang akan dilakukan, dimana pemilihan tersebut didasarkan atas nilai dari kondisi-kondisi tertentu. Suatu aksi akan dikerjakan atau dieksekusi oleh program apabila kondisi yang didefinisikan untuk aksi tersebut bernilai benar (true). Sebaliknya, bila kondisi tidak terpenuhi atau salah (false) maka program akan melakukan aksi lain (jika ada) atau langsung keluar dari blok pemilihan. Dalam bahasa Pascal, blok pemilihan dapat didefinisikan dengan dua cara, yaitu dengan menggunakan statement if
atau case
.
Statement if akan diikuti oleh ekspresi (sebagai kondisi yang akan diperiksa) dan selalu berpasangan dengan kata kunci then. Apabila statement yang akan dilakukan hanya satu maka tidak perlu menuliskan blok begin…..end. Namun apabila statement lebih dari satu maka blok begin…..end harus dituliskan.
1. Pernyataan if
Adakalanya sebuah instruksi dikerjakan jika kondisi tertentu dipenuhi. Kondisi adalah persyaratan yang dapat bernilai benar atau salah. Dalam pemilihan dikenal beberapa struktur pemilihan, yaitu:
# If – then
Struktur pemilihan if-then hanya memberikan satu pilihan aksi bila kondisi (persyaratan) dipenuhi (bernilai benar), dan tidak memberikan pilihan aksi lain bila kondisi bernilai salah. Flowchartnya adalah :
Pada bentuk if, pernyataan hanya akan dijalankan kalau kondisi bernilai benar. Yang terpenting dari bagan alur diatas adalah kondisinya. Kondisilah yang menentukan apakah sebuah pernyataan program akan dieksekusi atau tidak. Contoh :
uses wincrt; var suhu: integer; begin write ('masukan nilai suhunya : '); read (suhu); if suhu > 37 then writeln ('panas'); write ('selesai') end.
Hasilnya seperti ini.
# If-then-else
Struktur pemilihan ini memberikan dua buah aksi yang akan dikerjakan tergantung pada nilai kondisinya.
Struktur umumnya:
If kondisi then
aksi 1
else
aksi 2
Else artinya ”kalau tidak”. Bila kondisi benar, aksi 1 yang akan dikerjakan, tetapi kalau tidak, aksi 2 yang akan dikerjakan.
Contoh:
uses wincrt; var suhu: integer; begin write ('masukan nilai suhunya : '); read (suhu); if suhu > 37 then writeln ('panas') else writeln ('tidak panas'); write ('selesai') end.
Hasilnya seperti ini.
Contoh diatas adalah untuk menentukan nilai suhu apakah panas atau tidak. Berbeda dengan if-then, pada contoh kedua ini ada pilihan lagi jika suhunya kurang dari 37.
Contoh lain :
– Program untuk mengetahui apakah nilai yang diinput merupakan bilangan genap atau ganjil.
uses wincrt; var a:integer; begin write ('masukan sebuah bilangan : '); readln (a); if (a mod 2 = 0) then writeln (a, ' bilangan genap') else writeln (a, ' bilangan ganjil') end.
Hasilnya seperti ini.
# If-then-else if
Apabila pilihan aksi yang dilakukan lebih dari dua buah, maka struktur pilihannya menjadi lebih rumit, biasanya untuk pemilihan seperti ini disebut pemilihan bersarang (nested).
Contoh:
– Menentukan bilangan terbesar dari tiga buah bilangan: x, y dan z
uses wincrt; var x, y, z : real; begin write ('Masukkan bilangan pertama : '); readln (x); write ('Masukkan bilangan kedua : '); readln (y); write ('Masukkan bilangan ketiga : '); readln (z); if x > y then if x > z then write ('Bilangan terbesar : ',x:5:2) else write ('Bilanga terbesar : ',z:5:2) else if y > z then write ('Bilangan terbesar :',y:5:2) else write ('Bilangan terbesar : ',z:5:2); end.
Hasilnya seperti ini.
Program diatas dapat dikerjakan pula dengan algoritma yang lebih sederhana, yaitu menggunakan if-then :
program bilanganterbesar; uses wincrt; var a,b,c,bt:integer; begin writeln ('MENGURUTKAN 3 BUAH BILANNGAN'); write ('Masukan bilangan 1 : '); readln (a); write ('Masukan bilangan 2 : '); readln (b); write ('Masukan bilangan 3 : '); readln (c); bt:=a; if b>bt then bt:=b; if c>bt then bt:=c; writeln ('Bilangan terbesar = ',bt) end.
Hasilnya seperti ini.
Contoh lain :
– Program untuk mencari diskon harga buku
uses wincrt; var jb, hb : real; begin write ('masukan jumlah buku : '); readln (jb); if jb >= 50 then begin hb:=jb*0.8*2500; writeln ('Total Harga : ',hb:10:2); end else if jb >= 35 then begin hb:=jb*0.85*2500; writeln ('Total Harga : ',hb:10:2); end else if jb >= 20 then begin hb:=jb*0.9*2500; writeln ('Total Harga : ',hb:10:2); end else begin hb:=jb*2500; writeln ('Total Harga : ',hb:10:2); end end.
Hasilnya seperti ini.
2. Pernyataan Case
Pernyataan Case digunakan untuk menyederhanakan konstruksi if…else…if yang terlalu banyak. Sebagai contoh, program berikut:
– Program untuk mengetahui nilai yang diinput
uses wincrt; var x : integer; begin Write ('Masukkan sebuah nilai [0...3] : '); readln (x); If ( x = 0) then Writeln('X bernilai 0') Else if (x = 1) then Writeln('X bernilai 1') Else if (x = 2) then Writeln('X bernilai 2') Else if (x = 3) then Writeln('X bernilai 3') Else Writeln('X tidak bernilai 0, 1, 2, ataupun 3'); end.
Hasilnya seperti ini.
Program diatas dapat diganti menjadi lebih ringkas dan mudah dibaca dengan program berikut:
uses wincrt; var x : integer; begin Write ('Masukkan sebuah nilai [0...3] : '); readln (x); Case (x) of 0 : Writeln('X bernilai 0'); 1 : Writeln('x bernilai 1'); 2 : Writeln('X bernilai 2'); 3 : Writeln('X bernilai 3'); else Writeln('X tidak bernilai 0, 1, 2, ataupun 3'); end; end.
Hasilnya seperti ini.
Contoh program Case of yang lain seperti ini:
– Program untuk mengetahui nama hari
uses wincrt; var a:integer; begin write ('masukan salah satu angka 0-6 : '); readln (a); case (a) of 0:writeln ('Minggu'); 1:writeln ('Senin'); 2:writeln ('Selasa'); 3:writeln ('Rabu'); 4:writeln ('Kamis'); 5:writeln ('Jumat'); 6:writeln ('Sabtu'); else writeln ('Hari tidak valid') end end.
Hasilnya seperti ini.
Contoh program lain yang menggunakan percabangan/selection antara lain :
– Mencari nilai mutlak
program nilaimutlak; uses wincrt; var a:real; begin writeln ('MENCARI NILAI MUTLAK'); write ('masukan nilai x : '); read (a); if a>=0 then write ('nilai mutlak = ',a:8:2) else write ('nilai mutlak = ',-a:8:2) end.
Hasilnya seperti ini.
– Mencari akar-akar persamaan kuadrat :
program akar2persamaankuadrat; uses wincrt; var a,b,c,d,x,x1,x2:real; begin writeln ('MENGHITUNG AKAR-AKAR PERSAMAAN KUADRAT aX2+bX+c'); write ('masukan nilai a : '); read (a); write ('masukan nilai b : '); read (b); write ('masukan nilai c : '); read (c); d:=sqr (b)-4*a*c; if d>0 then begin x1:=(-b+sqrt (sqr (b) - 4*a*c))/(2*a); writeln ('akar 1 = ',x1:4:2); x2:=(-b-sqrt (sqr (b) - 4*a*c))/(2*a); writeln ('akar 2 = ',x2:4:2) end else if d=0 then begin x:=-b/(2*a); write ('akar-akarny sama x1=x2= ',x:4:2) end else begin write ('akar-akarnya kompleks') end end.
Hasilnya seperti ini.
mo ngucapin selamat tahun baru mas….semoga ditahun baru ini kita semua mendapat kesuksesan….amiin…salam smile dari Cilacap 🙂
@Rychan :
Amiin….
Selamat tahun baru juga mas….
Maaf melenceng dari isi, mohon keblog saya dan memberikan dukungan. Allahu akbar!!