soal olimpiade komputer tingkat kabupaten
TRANSCRIPT
-
7/29/2019 Soal Olimpiade Komputer Tingkat Kabupaten
1/8
soal olimpiade komputer tingkat kabupaten
1) Diberikan penggalan program sebagai berikut. (note: program ini merupakan Pascal-like pseudocode, secara sintaks belum tentu sama dengan Pascal).
function f(n: int)beginif n=0 then f:=0else f := n + f(n-1);end;
Berapakah nilai f(5) ?(A) 125(B) 0(C) 5(D) 15
(E) 25
Jawaban soal nomor 1 :Soal ini merupakan soal algoritma pemrograman mengenai function.Inti soal di atas adalah sebagai berikut :
if n=0 then f:=0 ; secara awam artinya adalah bila nilai n = 0, maka nilai f = 0else f:= n + f (n-1) ; yang berarti bila nilai n 0, maka nilai f = n + f (n-1)
Berapa nilai f(5)?
Perhitungan :f(5), dimana n = 5, maka f = 5 + f(4) = 5 + (4 + f(3)) = 5 + 4 + (3 + f(2))= 5 + 4 + 3 + (2 + f(1)) = 5 + 4 + 3 + 2 + 1 + 0 = 15Dengan demikian, jawaban yang benar adalah (D) 15
2) 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
-
7/29/2019 Soal Olimpiade Komputer Tingkat Kabupaten
2/8
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 = 5
Cek (x > y) -> (70 > 5) -> TRUE
x = x - 10 = 70 - 10 = 60
y = y + 2 = 5 + 2 = 7
Cek (x > y) -> (60 > 7) -> TRUE
x = x - 10 = 60 - 10 = 50
y = y + 2 = 7 + 2 = 9
Cek (x > y) -> (50 > 9) -> TRUE
x = x - 10 = 50 - 10 = 40
y = y + 2 = 9 + 2 = 11
Cek (x > y) -> (40 > 11) -> TRUE
x = x - 10 = 40 - 10 = 30
y = y + 2 = 11 + 2 = 13
Cek (x > y) -> (30 > 13) -> TRUE
x = x - 10 = 30 - 10 = 20y = y + 2 = 13 + 2 = 15
Cek (x > y) -> (20 > 15) -> TRUE
x = x - 10 = 20 - 10 = 10
y = y + 2 = 15 + 2 = 17
Cek (x > y) -> (10 > 17) -> FALSE
STOP
Setelah proses looping while selesai, nilai y terakhir adalah 17 (Jawaban yang benar C).
Pertanyaan :
3) 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;
-
7/29/2019 Soal Olimpiade Komputer Tingkat Kabupaten
3/8
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 sedemikianhingga 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) = 8Jadi a = -5 dan b = 8 (SALAH)
4)Jika M(x, y) adalah pernyataan x lebih besar dari y, dan terdapat deretan perintah dalampseudo 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?
-
7/29/2019 Soal Olimpiade Komputer Tingkat Kabupaten
4/8
A. 11
B. 15
C. 17D. 21
E. 25
Jawab:
OK akan kita bahasa pertanyaan di atas. Perhatikan bahwa loop while memiliki syarat x lebihbesar 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 = 5
Cek (x > y) -> (70 > 5) -> TRUE
x = x - 10 = 70 - 10 = 60
y = y + 2 = 5 + 2 = 7
Cek (x > y) -> (60 > 7) -> TRUE
x = x - 10 = 60 - 10 = 50
y = y + 2 = 7 + 2 = 9
Cek (x > y) -> (50 > 9) -> TRUE
x = x - 10 = 50 - 10 = 40
y = y + 2 = 9 + 2 = 11
Cek (x > y) -> (40 > 11) -> TRUE
x = x - 10 = 40 - 10 = 30
y = y + 2 = 11 + 2 = 13
Cek (x > y) -> (30 > 13) -> TRUE
x = x - 10 = 30 - 10 = 20
y = y + 2 = 13 + 2 = 15
Cek (x > y) -> (20 > 15) -> TRUE
-
7/29/2019 Soal Olimpiade Komputer Tingkat Kabupaten
5/8
x = x - 10 = 20 - 10 = 10
y = y + 2 = 15 + 2 = 17
Cek (x > y) -> (10 > 17) -> FALSE
STOP
Setelah proses looping while selesai, nilai y terakhir adalah 17 (Jawaban yang benar C).
5) Untuk menukar isi dua variabel integer (keduanya bernama a dan b) tanpa bantuan variabel
lain adalah
A. a := ba; b := ba; a := b + a;
B. b := ba; a := b + a; a := ba;C. a := b + a; a := ba; b := ba;
D. a := ba; b := ba; a := ba;E. a := b + a; b := b + a; a := b + a;
Jawab :
Untuk menjawab pertanyaan di atas, kita akan cek terlebih dahulu semua alternatif jawaban. Kitacoba 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 = ba = 35 = -2b = ba = 3(-2) = 5
a = b + a = 5 + (-2) = 3
Jadi a = 3 dan b = 5 (BENAR)
Option B.
b = ba = 35 = -2
a = b + a = -2 + 5 = 3
a = ba = -23 = -5Jadi a = -5 dan b = -2 (SALAH)
Option C.
a = b + a = 3 + 5 = 8a = ba = 38 = -5
-
7/29/2019 Soal Olimpiade Komputer Tingkat Kabupaten
6/8
b = ba = 3(-5) = 8
Jadi a = -5 dan b = 8 (SALAH)
6) Diketahui algoritma pseudopascal berikut ini
constxmin = -10;xmax = 10;ymin = -10;ymax = 10;
function code(x: integer; y : integer) : byte;var c : byte;beginc := 0;if (x < xmin) then c := c OR 8else if (x > xmax) then c := c OR 1;
if (y < ymin) then c := c OR 4else 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 FALSEnamun juga bisa berupa integer. Operator OR untuk operand bilangan integermerupakan operasi OR secara bitwise (diproses bit demi bit, dengan 1 identikbernilai 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)----------- OR11 -> bilangan biner dari 3
Dengan demikian hasil dari 2 OR 1 adalah 3.
-
7/29/2019 Soal Olimpiade Komputer Tingkat Kabupaten
7/8
Berapakah hasil 3 OR 1?
3 = 11 (biner)1 = 01 (biner)----------- OR11 -> bilangan biner dari 3
Berapakah 4 OR 5?
4 = 100 (biner)5 = 101 (biner)----------- OR101 -> bilangan biner dari 5.
Nah akan kita akan selesaikan soal di atas menggunakan konsep tersebut. Terlebihdahulu operand code(-12, -12) pada operasi code(-12, -12) AND code(20, 5) akandiselesaikan
code(-12, -12) -> x = -12, y = -12--------- masuk function code() --------c = 0cek (-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 diprosesuntuk code(20, 5).
code(20, 5) -> x = 20, y = 5---------- masuk function code() -------c = 0cek (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(2
-
7/29/2019 Soal Olimpiade Komputer Tingkat Kabupaten
8/8
Pembahasan Algoritma Pseudopascal OSK 2008
Perhatikan potongan algoritma berikut ini
j := 2;for i := 0 to 10 do begin
if j > 0 then writeln(ok);
j := 5 - (j*2);
end;
32. Berapa kalikah pencetakan keluaran ok dilakukan oleh potongan program itu?
a. 7b. 3
c. 5
d. 6e. 4
jawaban: A, pembahasan:
i yang ke- harga awal j cetak harga akhir j
i=0 j=2 maka j>0 ok j=1
i=1 j=1 maka j>0 ok j=3i=2 j=3 maka j>0 ok j=-1
i=3 j=-1 j=7
i=4 j=7 maka j>0 ok j=-9
i=5 j=-9 j=23i=6 j=23 maka j>0 ok j=-41
i=7 j=-41 j=87
i=8 j=87 maka j>0 ok j=-169i=9 j=-169 j=343
i=10 j=343 maka j>0 ok j=-681
33. Berapakah harga j setelah keluar dari iterasi for tersebut?
a. 681
b. 600
c. -681d. -702
e. -101
jawaban: C, Pembahasan sama persis seperti di atas
http://adf.ly/2757162/http:/aryss-dephie.blogspot.com/2011/01/pembahasan-algoritma-pseudopascal-osk.htmlhttp://adf.ly/2757162/http:/aryss-dephie.blogspot.com/2011/01/pembahasan-algoritma-pseudopascal-osk.htmlhttp://adf.ly/2757162/http:/aryss-dephie.blogspot.com/2011/01/pembahasan-algoritma-pseudopascal-osk.html