pembahasan soal olimpiade komputer
TRANSCRIPT
-
7/28/2019 Pembahasan Soal Olimpiade Komputer
1/8
Pembahasan Soal Olimpiade Komputer Kabupaten #1
August 22nd, 2008 | by rosihanari | Cetak Artikel Ini
Free Software
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:
view sourceprint?1.whileM(x, y) do2.begin
3. x := x - 10;
4. y := y + 2;
5.end;
dengan harga mula-mula x = 70 dan y = 5, berapakah harga y setelah deretan keluar dari
loop while?
A. 11
B. 15
C. 17D. 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:
view sourceprint?01.x = 70, y = 5
02.Cek (x > y) -> (70 > 5) -> TRUE
03. x = x - 10 = 70 - 10 = 60
04. y = y + 2 = 5 + 2 = 7
05.Cek (x > y) -> (60 > 7) -> TRUE
06. x = x - 10 = 60 - 10 = 50
07. y = y + 2 = 7 + 2 = 9
08.Cek (x > y) -> (50 > 9) -> TRUE
http://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-kabupaten-1http://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-kabupaten-1/print/http://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-kabupaten-1/print/http://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-kabupaten-1#viewSourcehttp://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-kabupaten-1#printSourcehttp://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-kabupaten-1#abouthttp://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-kabupaten-1#viewSourcehttp://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-kabupaten-1#printSourcehttp://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-kabupaten-1#abouthttp://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-kabupaten-1/print/http://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-kabupaten-1http://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-kabupaten-1/print/http://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-kabupaten-1#viewSourcehttp://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-kabupaten-1#printSourcehttp://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-kabupaten-1#abouthttp://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-kabupaten-1#viewSourcehttp://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-kabupaten-1#printSourcehttp://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-kabupaten-1#about -
7/28/2019 Pembahasan Soal Olimpiade Komputer
2/8
09. x = x - 10 = 50 - 10 = 40
10. y = y + 2 = 9 + 2 = 11
11.Cek (x > y) -> (40 > 11) -> TRUE
12. x = x - 10 = 40 - 10 = 30
13. y = y + 2 = 11 + 2 = 13
14.Cek (x > y) -> (30 > 13) -> TRUE
15. x = x - 10 = 30 - 10 = 20
16. y = y + 2 = 13 + 2 = 15
17.Cek (x > y) -> (20 > 15) -> TRUE
18. x = x - 10 = 20 - 10 = 10
19. y = y + 2 = 15 + 2 = 17
20.Cek (x > y) -> (10 > 17) -> FALSE
21. STOP
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 mencarijawaban sedemikian hingga hasil akhir dari proses perhitungan menghasilkan a = 3 dan b
= 5.
Option A.
a = b a = 3 5 = -2b = 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 = -2a = b + a = -2 + 5 = 3
a = b a = -2 3 = -5
Jadi a = -5 dan b = -2 (SALAH)
-
7/28/2019 Pembahasan Soal Olimpiade Komputer
3/8
Option C.
a = b + a = 3 + 5 = 8
a = b a = 3 8 = -5b = 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 Provinsi 2005
#3
February 27th, 2009 | by rosihanari | Cetak Artikel Ini
Free Software
Saya lanjutkan kembali pembahasan soal-soal olimpiade komputer tingkat provinsi
tahun 2005. Ada tambahan 2 soal dan pembahasannya lagi dari saya. Mudah-mudahanbermanfaat bagi Anda sekalian yang membutuhkan referensi.
Soal ke-5
Diberikan program Pascal berikut ini:
view sourceprint?01.vark, j : integer;02.begin
03. j := 0;
04. fork := 1to10do05. begin06. inc(k);
07. inc(j, k);
08. end;
09. write(j);
10.end.
Apa output dari program di atas?a. 30
http://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-provinsi-2005-3http://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-provinsi-2005-3http://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-provinsi-2005-3/print/http://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-provinsi-2005-3#viewSourcehttp://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-provinsi-2005-3#printSourcehttp://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-provinsi-2005-3#abouthttp://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-provinsi-2005-3/print/http://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-provinsi-2005-3http://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-provinsi-2005-3http://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-provinsi-2005-3/print/http://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-provinsi-2005-3#viewSourcehttp://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-provinsi-2005-3#printSourcehttp://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-provinsi-2005-3#about -
7/28/2019 Pembahasan Soal Olimpiade Komputer
4/8
b. 38
c. 40
d. 42e. 55
Pembahasan:
Dalam program di atas terdapat function inc(). Wah function apaan tuh? Function ini
adalah untuk increment disingkat inc. Apa maksud dari inc(k)? Maksudnya ekuivalen
dengan k := k + 1. Sedangkan inc(j, k) ekuivalen denganj := j + k.
OK deh kita sudah tahu sekarang apa maksud function tersebut. Now lets check it
out!! Kita akan analisis setiap langkah per langkah program di atas.
Step 1: j = 0Step 2: (masuk for) k = 1
Step 3: inc(k) -> k := k + 1 -> k := 1 + 1 = 2Step 4: inc(j, k) -> j := j + k -> j := 0 + 2 = 2
Step 5: (masuk for) k = 3
Step 6: inc(k) -> k := 3 + 1 = 4
Step 7: inc(j, k) -> j := 2 + 4 = 6
Step 7: (masuk for) k = 5Step 8: inc(k) -> k := 5 + 1 = 6
Step 9: inc(j, k) -> j := 6 + 6 = 12
.
.
.
Sampai kapan proses loopingnya berjalan? proses looping berjalan apabila nilai k sudah
sama dengan 10.
Nah dengan melihat pola perhitungan j pada setiap iterasi, maka kita bisa simpulkan
bahwa pada prinsipnya secara keseluruhan nilai j diperoleh dari hasil penjumlahan: j = 0
+ 2 + 4 + 6 + 8 + 10 = 30. Apabila sudah kelihatan pola (pattern) perhitungannya, maka
tidak usah dirunut untuk setiap iterasinya. Terlalu lama dan buang-buang waktu saja
Sehingga begitu looping selesai, nilai j = 30 (A).
Soal ke-6
Apakah output dari program berikut ini?
view sourceprint?1.vars : string[12];2.begin
3. s := 'setia';
4. writeln('#', s, '#');
http://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-provinsi-2005-3#viewSourcehttp://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-provinsi-2005-3#printSourcehttp://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-provinsi-2005-3#abouthttp://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-provinsi-2005-3#viewSourcehttp://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-provinsi-2005-3#printSourcehttp://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-provinsi-2005-3#about -
7/28/2019 Pembahasan Soal Olimpiade Komputer
5/8
5. s := s + ' sampai akhir ';
6. writeln('#', s, '#');
7.end.
a. #setia# (kemudian terjadi runtime error)b. #setia #
#setia sampai#c. #setia#
#setia sampai akhir#
d. #setia#
#setia sampai#
e. #setia##sampai akhir#
Pembahasan:
Apabila kita analisis program di atas, s adalah variabel bertipe data string dengan panjang
karakternya maksimum 12. Nilai awal s adalah string setia (panjang 5 baris). Berartimasih ada sisa ruang kosong untuk string s sebanyak 7 buah. Ingat ruang kosong di sini
bukan berisi spasi, tapi null karakter. Sehingga apabila dicetakwriteln('#', s, '#');
tetap akan muncul #setia# dan bukan #setia #.
Selanjutnya pada baris berikutnya s yang lama ditambah dengan string sampai akhir (14 karakter termasuk spasi). Lho emang bisa string dijumlah dengan string? Runtime
error donk jadinya? he3x di sini makna plus bukan berarti dijumlah tapi penggabungan
string. Operator + dapat diberikan pada string. Tapi, jangan coba-coba iseng untukmenggunakan operator -, * atau / pada operasi string. Komputernya bisa error.
Sehingga string s yang baru adalah setia + sampai akhir . Trus hasilnya apa dong?apakah setia sampai akhir? Eit.. tunggu dulu, berapa jumlah kapasitas karakter yang
bisa dimuat pada s? Oiya cuman ada 12 karakter saja. Dengan demikian hasilnyaadalah setia sampai (12 karakter).
Berikutnya cetakwriteln('#', s, '#'); dan hasilnya adalah #setia sampai#.
Dengan demikian hasilnya adalah D.
Pembahasan Soal Olimpiade Komputer Kabupaten #2
http://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-kabupaten-2http://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-kabupaten-2 -
7/28/2019 Pembahasan Soal Olimpiade Komputer
6/8
August 23rd, 2008 | by rosihanari | Cetak Artikel Ini
Free Software
Berikut ini adalah pertanyaan dan pembahasan dari soal yang diambil dari SeleksiOlimpiade 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 FALSEnamun 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 0bernilai FALSE) dari bilangan binernya.
Perhatikan contoh operasi OR berikut ini yang melibatkan bilangan integer.
Berapakah hasil 2 OR 1?
2 = 10 (biner)
http://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-kabupaten-2/print/http://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-kabupaten-2/print/http://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-kabupaten-2/print/http://blog.rosihanari.net/pembahasan-soal-olimpiade-komputer-kabupaten-2/print/ -
7/28/2019 Pembahasan Soal Olimpiade Komputer
7/8
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 dahuluoperand 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 = 1cek (5 < -10) -> FALSE
-> cek (5 > 10) -> FALSE
code = c = 1
----------------------------------------
Sehingga diperoleh hasil dari code(20, 5) adalah 1.
-
7/28/2019 Pembahasan Soal Olimpiade Komputer
8/8
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 bilanganbinernya. 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