pembahasan soal olimpiade komputer

Upload: ra-ragiel

Post on 03-Apr-2018

247 views

Category:

Documents


2 download

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