Hampir setiap program yang komplek mengandung suatu penyeleksian kondisi.
Dengan menyeleksi suatu kondisi, program sdapat menentukan tindakan
apa yang harus dikerjakan, tergantung dari hasil kondisi yang diseleksi
tersebut.
Selection merupakan salah satu proses
program disamping sequential( pengerjaan secara berturut) dan repetition
/ looping. Dalam selecction, program akan memilih bagian yang akan
dijalankan ( sehingga terdapat bagian yang tak dijalankan).
Umumnya selection menggunakan
IF…THEN….ELSE…, akan tetapi terdapat pula CASE …OF. Penggunaan IF lebih
umum digunakan bila terdapat pilihan yang tidak terlalu banyak dan
eksekusi baris program yang panjang.
Blok pertama untuk IF dijalankan bila
condition yang digunakan bernilai TRUE, sedangkan blok ELSE dijalankan
bila nilai condition adalah FALSE.
statetmen IF
Struktur dari statetmen if secara umum dapat berupa if-Then atau if-Then-else-
pernyataan IF sederhana
IF kondisi THEN Pernyataan
Pada kondisi ini, Pernyataan hanya akan dijalankan apabila kondisi bernilai True. Bagiankondisi berupa ekspresi
Contoh mekanisme kerja dari pernyataan IF
PROGRAMSuhu1;
Uses wincrt;
VAR
Suhu: Real;
BEGIN
Write(‘suhu tubuh :’);
Readln(suhu);
If suhu >37 then
Writeln(‘suhu tinggi’);
Write(‘selesai’);
End.
Untuk melihat efek dari pernyataan IF di atas, cobalah untuk mengeksekusinya
coba anda masukan angka 36 dan angka 38, ketika anda masukan angka 36 maka hanya akan muncuk
suhu tubuh: 37
selesai
Contoh eksekusi kedua , kita masukan angka 38, maka akan muncul
Suhu tubuh : 38
Suhu tinggi
Selesai
Dari kedua contoh pengeksekusian diatas terlihat bahwa suhu tinggi tidak selalu ditampilkan. Kemudian pernyataan redln akan menyebabkan komputer meminta data suhu dimasukan dari key board. Setelah pemakai program memasukan data suhu( dan disimpan ke variabel suhu), berdasarkan pernyataan
IF suhu > 37 then
Writeln(‘ suhu tinggi’);
Writeln(‘selesai’);
Pernyataan IF majemuk
Pada bagian pernyataan majemuk menggunakan tambahan pernyataan Begin End.
Contoh program IF majemuk
PROGRAM Suhu2;
Uses wincrt;
VAR
Suhu: Real;
BEGIN
Write(‘suhu tubuh :’);
Readln(suhu);
If suhu >37 then
BEGIN
Writeln(‘suhu tinggi’);
Write(‘selesai’);
END
END.
Pernyataan IF ELSE
Bentuk selanjutnya dari IF adalah sebagai berikut:
IF kondisi THEN
Pernyataan_1
ELSE
Pernyatan_2
Pada bentuk ini :
a) Pernyataan _1 hanya akan dijalankan jika kondisi bernilai True (benar)
b) Pernyataan_2 hanya akan dijalankan jika kondisi bernilai False b(salah)
Sebagai contoh, dinginkan untuk menampilkan tulisan :
a) Suhu tinggi kalau suhu bernilai lebih dari 37
b) Suhu rendah jika suhu kurang dari atau sama dengan 37
PROGRAM Suhu3;
Uses wincrt;
VAR
Suhu: Real;
BEGIN
Write(‘suhu tubuh :’);
Readln(suhu);
If suhu >37 then
Writeln(‘suhu tinggi’)
ELSE
Writeln(‘Suhu rendah’);
Writeln(‘selesai’)
END.
Berikut ini merupakan berbagai bentuk yang mungkin terjadi.
Bentuk 1:
IF kondisi THEN
Pernyataan_1
ELSE
Pernyataan_2
Bentuk 2:
IF kondisi THEN
BEGIN
Pernyataan_11;
Pernyataan_12;
….
Pernyataan_1n
END
Pernyataan _2
Bentuk 3:
IF kondisi THEN
Persyaratan_1
ELSE
BEGIN
Pernyataan_21;
Pernyataan_22;
…..
Pernyataan_2n
END
Pernyataan IF bersarang
Suatau pernyataan IF dapat mengandung pernyataan IF yang lain. Bentuk seperti ini biasa disebut IF bersarang ( nested IF). Hal yang penting di dalam pembuatan IF bersarang adalah pemahaman terhadap IF ELSE. Sebagai contoh:Pada kondisi diatas ELSE berpasangan dengan IF kondisi2, tetapi pada contoh berikut:
IF kondisi1 THEN
IF kondisi2 THEN
Pernyataan_1;
ELSE
Pernyataan_2;
Dalam hal ini ada beberapa hala yang perlu diperhatikan:
a) ELSE berpasangan dengan IF yang tepat di atasnya, yang terletak dalam satu blok.
b) Bila IF yang terletak tepat sebelum ELSE terletak di dalam BEGIN END, IF tersebut dikatakan tidak terletak dalam satu blok yang sama.
IF kondisi THEN
BEGIN
If kondisi2 THEN
Pernyataan_1;
END
ELSE
Pernyataan_2;
ELSE berpasangan dengan IF kondisi1
Contoh pemakaian IF bersarang adalah untuk menentukan bonus bagi pembeli berdasarkan total pembelian. Kriterianya adalah sebagai berikut.
KriteriaBonusTotal ≥ 100.000 Diskon 10% 50.000 ≤ Total < 100.000 1 piring 10.000 ≤ Total < 50.000 2 Gelas Total < 10.000 Tidak ada bonus PROGRAM Bonus;
Uses wincrt;
VAR Totalpembelian: Longint;
BEGIN
Writeln(‘total pembelian=’);Readln(totalpembelian);
IF totalpembelian>=100000 THEN
Writeln(‘Diskon sebesar 10%’)
ELSEIF totalpembelian >=50000 THEN
Writeln(‘bonus: 1 piring’)
ELSEIF totalpembelian>=10000 THEN
Writeln(‘bonus: 1 gelas ‘)\
ELSE
Writeln(‘tidak ada bonus’)
END.Penggunaan AND dan OR
Seringkali sebuah operator relasi tidak cukup untuk mememriksa kondisi – kondisi yang ada. Pada keadaan seperti ini, operator AND atau OR sangatlah berguana. Contohnya dapat dilihat dalam contoh berikut.
PROGRAM pilihan1;
Uses wincrt;
VAR
Pil : integer;
BEGIN
Writeln(‘ketik pilihan dan akhiri dengan enter’);
Write(‘pilihan 1…..4 :’);
Readln(pil);
IF ( pil >= 1) AND (pil <= 4) THEN
Writeln(‘pilihan benar’)
ELSE
Writeln(‘pilihan salah’);
END.
Statetmen CASE
Pernyataan CASE merupakan alternatif dari pernyataan IF untuk maslah dengan pilhan berganda. Pada masalah tertentu, CASE lebih memberikan kejelasan daripad IF. Namun perlu diketahui bahwa semua persoalan yang bisa ditangani oleh CASE bisa ditangani oleh IF , tetapi tidak sebaliknya.Pernyataan CASE biasanya digunakan untuk pilhan berganda. Bentuk pernyataan ini
CASE nilai OF
Daftar_nilai_1 : pernyataan_1;
Daftar _nilai_2 : pernyataan_2;
……
Daftar_nilai_m : pernyataan_m;
ELSE
Pernyataan_n
END
Pada bentuk diatas:
a) Nilai dapat berupa ekspresi yang bertipe ordinal ( misalnya Char, Byte dan Boolean)
b) Daftar_nilai dapat berupa satu atau beberapa konstatnta bertipe ordinal, yang sesuai dengan tipe dari daftar nilai
Pengujian dilaksanakan dengan mencocokan nilai dan daftar_nilai, dimulai dari yang teratas. Kalau pada suatu pengujian tidak ada yang cocok , daftar_nilai berikutnya akan diperiksa. Kalau ada yang cocok ,pernyataan yang terletak sesudah tanda: akan dijalankan dan kemudian eksekusi dilanjutkan ke END. Bagian ELSE hanya akan dijalankan apabila tak ada satupun daftar_nilai yang cocok.
Contoh program pernyataan CASE
PROGRAM kotak1;
USES wincrt;
VAR
Pil: integer;
BEGIN
Write(‘ pilihan (1,2 atau 3):’);
Readln(pil);
CASE pil OF
1: writeln(‘pilihan anda adalah 1’);
2: writeln(‘pilihan anda adalah 2’);
3: writeln(‘pilihan anda adalah 3’);
ELSE
Writeln(‘salah pilih!’);
END;
Writeln(‘selesai…’)
END.
Contoh 2
PROGRAM kotak2;
USES wincrt;
VAR
Kodebulan: integer;
BEGIN
Write(‘ kode bulan [1….12}:’);
Readln(kodebulan);
CASE kodebulan OF
1,3,5,8,10,12:
Writeln(‘jumlah hari =31’);
4,6,9,11:
Writeln(‘ jumlah hari = 30’);
2:
Writeln(‘jumlah hari 28 atau 29’);
ELSE
Writeln(‘salah memasukan kode bulan’)
END;
END.
CONTOH SOAL 1
buatlah program penghitungan potongan harga belanja dengan kondisi
~ jika jumlah belanja lebih dari Rp 300.000 mendapatkan diskon 40%
~ jika jumlah belanja antara Rp 150.000 hingga Rp 300.000 mendapatkan diskon 20%
~ jika jumlah belanja lebih kecil dari Rp 150.000 mendapatkan diskon 10%
JAWAB
program hitung_diskon_harga;uses crt;
var harga, diskon, total : real;
begin clrscr;
writeln ('MENGHITUNG DISKON DAN TOTAL HARGA BELANJA');write ('Masukkan Jumlah Harga : Rp ' ); readln (harga);
if harga > 300000 thenbeginwriteln('Mendapat Diskon 40%');diskon := harga * 0.4; total := harga - diskon; endelse
if (harga>= 150000) and (harga<=300000) thenbeginwriteln('Mendapat Diskon 20%');diskon := harga * 0.2; total := harga - diskon; endelse
if harga < 150000 thenbeginwriteln('Mendapat Diskon 10%');diskon := harga * 0.1; total := harga - diskon; end;
write ('Jumlah diskon : Rp ', diskon:0:0); readln;write ('Jumlah Harga Setelah Diskon : Rp ', total :0:0 ); readln;
end.
CONTOH SOAL 2
hitunglah gaji karyawan dengan kondisi :
Ketentuan Soal :
1. Nama Di input
2. Jabatan di input ,
Jabatan Gaji Tunjangan
Direktur 3000000 10 % dari gaji
Manager 2000000 5% dari gaji
Karyawan 1000000 2% dari gaji
OB 800000 1% dari gaji
3. Dikenakan PPN 10 % dari gaji
4. Gaji Bersih didapat dari : gaji + tunjangan – PPn
JAWAB
program hitunggaji;Uses crt;Var nama:string[20];jabatan:string;Gaji:longint;Tunj,ppn,gajibersih:real;BeginClrscr;Write(‘Nama Karyawan : ‘); readln(nama);Write(‘Masukkan Jabatan : ‘); readln(jabatan);If (jabatan=’Direktur’) or (jabatan=’direktur’) thenBeginGaji:=3000000;Tunj:=0.1* gaji;EndElse If (jabatan=’Manager’) or (jabatan=’manager’) thenBeginGaji:=2000000;Tunj:=0.05* gaji;EndElse If (jabatan=’Karyawan’) or (jabatan=’karyawan’) thenBeginGaji:=1000000;Tunj:=0.1* gaji;EndElseBeginGaji:=800000;Tunj:=0.1* gaji;End;Writeln(‘Gaji Bersih : Rp.‘,gaji);Writeln(‘Tunjangan Jabatan : Rp.‘,tunj:9:2);Ppn:=0.1*gaji;Writeln(‘PPN 10 % : Rp.‘,ppn:9:2);Total:=(gaji+total)-ppn;Writeln(‘Total Gaji : Rp.‘,total:9:2);Readln;
End.
Tidak ada komentar :
Posting Komentar