soal olimpiade komputer tingkat kabupaten

Upload: nurhidayat-tullah

Post on 03-Apr-2018

220 views

Category:

Documents


0 download

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