You are on page 1of 4

Pembahasan Soal Olimpiade Komputer Kabupaten #1

Berikut ini adalah pertanyaan dan pembahasan dari soal yang diambil dari Seleksi Olimpiade Komputer Tingkat Kabupaten/Kota 2007. Insya Allah pembahasan ini direncanakan akan ditulis secara berseri. Pertanyaan : Jika M(x, y) adalah pernyataan x lebih besar dari y, dan terdapat deretan perintah dalam pseudo Pascal berikut:
while M(x, y) do begin x := x - 10; y := y + 2; end;

dengan harga mula-mula x = 70 dan y = 5, berapakah harga y setelah deretan keluar dari loop while? A. 11 B. 15 C. 17 D. 21 E. 25 Jawab: OK akan kita bahasa pertanyaan di atas. Perhatikan bahwa loop while memiliki syarat x lebih besar dari y. Sehingga selama syarat tersebut terpenuhi (syarat bernilai TRUE) maka looping akan terus dijalankan. Dan proses looping akan berhenti apabila syarat sudah tidak terpenuhi (bernilai FALSE) Perhatikan jalannya proses berikut ini:
x = 70, y = Cek (x > y) x = x y = y + Cek (x > y) x = x y = y + Cek (x > y) x = x y = y + Cek (x > y) x = x y = y + Cek (x > y) x = x y = y + Cek (x > y) x = x y = y + Cek (x > y) STOP 5 -> (70 > 5) -> TRUE 10 = 70 - 10 = 60 2 = 5 + 2 = 7 -> (60 > 7) -> TRUE 10 = 60 - 10 = 50 2 = 7 + 2 = 9 -> (50 > 9) -> TRUE 10 = 50 - 10 = 40 2 = 9 + 2 = 11 -> (40 > 11) -> TRUE 10 = 40 - 10 = 30 2 = 11 + 2 = 13 -> (30 > 13) -> TRUE 10 = 30 - 10 = 20 2 = 13 + 2 = 15 -> (20 > 15) -> TRUE 10 = 20 - 10 = 10 2 = 15 + 2 = 17 -> (10 > 17) -> FALSE

Setelah proses looping while selesai, nilai y terakhir adalah 17 (Jawaban yang benar C).

Pertanyaan : Untuk menukar isi dua variabel integer (keduanya bernama a dan b) tanpa bantuan variabel lain adalah A. a := b - a; b := b - a; a := b + a; B. b := b - a; a := b + a; a := b - a; C. a := b + a; a := b - a; b := b - a; D. a := b - a; b := b - a; a := b - a; E. a := b + a; b := b + a; a := b + a; Jawab : Untuk menjawab pertanyaan di atas, kita akan cek terlebih dahulu semua alternatif jawaban. Kita coba untuk pemisalan awal nilai a = 5 dan b = 3. Kita akan mencari jawaban sedemikian hingga hasil akhir dari proses perhitungan menghasilkan a = 3 dan b = 5. Option A. a = b - a = 3 - 5 = -2 b = b - a = 3 - (-2) = 5 a = b + a = 5 + (-2) = 3 Jadi a = 3 dan b = 5 (BENAR) Option B. b = b - a = 3 - 5 = -2 a = b + a = -2 + 5 = 3 a = b - a = -2 - 3 = -5 Jadi a = -5 dan b = -2 (SALAH) Option C. a=b+a=3+5=8 a = b - a = 3 - 8 = -5 b = b - a = 3 - (-5) = 8 Jadi a = -5 dan b = 8 (SALAH) Demikian seterusnya kita cek untuk option D dan E. Untuk option D dan E juga diperoleh hasil yang salah, sehingga jawaban yang benar adalah A.

Pembahasan Soal Olimpiade Komputer Kabupaten #2


Berikut ini adalah pertanyaan dan pembahasan dari soal yang diambil dari Seleksi Olimpiade Komputer Tingkat Kabupaten/Kota 2007. Soal kali ini terkait dengan operasi OR dan AND pada operand berbentuk bilangan integer. Wah apa lagi tuh ??? Lho bukannya operasi OR and AND hanya bisa digunakan pada operand berbentuk boolean (TRUE atau FALSE)? Wah ternyata ndak tuh, simak detail dari artikel ini ya Diketahui algoritma pseudopascal berikut ini
const xmin = -10; xmax = 10; ymin = -10; ymax = 10; function code(x: integer; y : integer) : byte; var c : byte; begin c := 0; if (x < xmin) then c := c OR 8 else if (x > xmax) then c := c OR 1; if (y < ymin) then c := c OR 4 else if (y > ymax) then c := c OR 2; code := c; end;

Pertanyaan : Perintah writeln(code(-12, -12) AND code(20, 5)) akan mencetak harga berapakah? Jawab : OK sebelum kita jawab pertanyaan ini, perhatikan bahwa dalam function code() terdapat operator OR. Operand OR tidak harus berupa boolean TRUE atau FALSE namun juga bisa berupa integer. Operator OR untuk operand bilangan integer merupakan operasi OR secara bitwise (diproses bit demi bit, dengan 1 identik bernilai TRUE dan 0 bernilai FALSE) dari bilangan binernya. Perhatikan contoh operasi OR berikut ini yang melibatkan bilangan integer. Berapakah hasil 2 OR 1?
2 = 10 (biner) 1 = 01 (biner) ----------- OR 11 -> bilangan biner dari 3

Dengan demikian hasil dari 2 OR 1 adalah 3. Berapakah hasil 3 OR 1?


3 = 11 (biner) 1 = 01 (biner) ----------- OR 11 -> bilangan biner dari 3

Berapakah 4 OR 5?
4 = 100 (biner) 5 = 101 (biner) ----------- OR 101 -> bilangan biner dari 5.

Nah akan kita akan selesaikan soal di atas menggunakan konsep tersebut. Terlebih dahulu operand code(-12, -12) pada operasi code(-12, -12) AND code(20, 5) akan diselesaikan
code(-12, -12) -> x = -12, y = -12 --------- masuk function code() -------c = 0 cek (-12 < -10) -> TRUE -> c = c OR 8 = 0 OR 8 = 8 cek (-12 < -10) -> TRUE -> c = c or 4 = 8 OR 4 = 12 code = c = 12 ----------------------------------------

Sehingga diperoleh hasil dari code(-12, -12) adalah 12. Selanjutnya akan diproses untuk code(20, 5).
code(20, 5) -> x = 20, y = 5 ---------- masuk function code() ------c = 0 cek (20 < -10) -> FALSE -> cek (20 > 10) -> TRUE -> c = c OR 1 = 0 OR 1 = 1 cek (5 < -10) -> FALSE -> cek (5 > 10) -> FALSE code = c = 1 ----------------------------------------

Sehingga diperoleh hasil dari code(20, 5) adalah 1. Selanjutnya bagaimana dengan operasi code(-12, -12) AND code(20, 5) atau dalam hal ini 12 AND 1? Pada prinsipnya operasi AND pada bilangan integer sama dengan operasi OR, yaitu dilakukan operasi boolean AND secara bit per bit dari bilangan binernya. Dengan demikian proses 12 AND 1 adalah:
12 = 1100 (biner) 1 = 0001 (biner) ----------------- AND 0000 -> biner dari 0

Dari perhitungan di atas hasil dari perintah writeln(code(-12, -12) and code(20, 5)) akan mencetak 0. Nah berdasarkan contoh ini, Anda dapat mencoba untuk menebak output apa yang akan muncul jika diberikan perintah sebagai berikut: a. writeln(code(-12, -12) OR code(20, 5)) b. writeln(code(12, -12) AND code(20, 5)) c. writeln(code(12, -12) OR code(20, 5)) d. writeln(code(7, -12) OR code(-20, 5)) Selamat mencoba

You might also like