Pembahasan Soal Olimpiade Komputer Kabupaten #2
August 23rd, 2008 | by rosihanari |
Cetak Artikel
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; [sourcecode language="php"]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;
[/sourcecode]
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…
| Baca Juga Artikel Terkait |
Kata kunci:






pak……..
mengapa array itu
susah untuk saya pahami////????/
bisakah bapak memberikan tis tips or contoh agar saya bisa lebih memahami array????
@agustama: array itu adalah suatu tipe data yang memungkinkan suatu variabel bisa digunakan menyimpan beberapa buah nilai sekaligus.
ASS, SAYA MAU MINTA KUMPULAN SOAL2 OSN TIK ADA APA TDK, KALAU ADA KIRIMI DONK LEWAT EMAIL SAYA. TRIMS
makasih ya kak!
tapi aku jga mau tanya. ada soal-soal IOI gak???
hehe
Ghan gua kasih donk kumpulan soal olimpiade tik nya, thanks
boleh kalau ada kumpulan soalnya