Docstoc

soal_dan_pembahasan

Document Sample
soal_dan_pembahasan Powered By Docstoc
					SOAL 1 – 2:

Deskripsi untuk pertanyaan 1-2

Deret bilangan Fibonacci didefisikan secara rekursif sbb.
f1 = 1
f2 = 1
fn = fn-1 + fn-2 untuk semua n > 2

1. Berapa banyak kah bilangan Fibonacci antara 10 sampai dengan 100?

(A) 90
(B) 9
(C) 5
(D) 10
(E) 12

2. Dengan mengambil satu harga n kemudian anda menjumlahkan bilangan-bilangan tsb
mulai dari f1 s.d. fn maka berapakah n terkecil agar jumlah itu > 150?

(A) 9
(B) 10
(C) 11
(D) 15
(E) 20


PEMBAHASAN SOAL:

Sebagaimana yang kita ketahui bersama, soal-soal dalam olimpiade komputer jarang
merupakan soal mandiri. Biasanya, soal-soal ini merupakan soal berkelompok, dengan satu
macam permasalahan untuk beberapa nomor soal. Soal nomor 1 dan 2 ini adalah contohnya.
Bagaimana sih menjawabnya???

Baiklah kami mulai pembahasan untuk soal nomor 1 dan 2 ini…

Ingat pelajaran matematika…. Bilangan Fibonacci merupakan deret bilangan dimana
bilangan pada suku berikutnya merupakan hasil penjumlahan dari dua suku bilangan
sebelumnya.
Rumus bilangan Fibonacci ini seperti yang tertulis pada soal adalah :
f1 = 1
f2 = 2
fn = fn-1 + fn-2 untuk semua n>2

Rumus di atas kalau kita terjemahkan adalah sebagai berikut:
Suku bilangan ke-1 (f1) = 1
Suku bilangan ke-2 (f2) = 2
Suku bilangan ke-3 (f3) = 3 (diperoleh dari suku ke-1 + suku ke-2 = 1 + 2 = 3)
Suku bilangan ke-4 (f4) = 5 (diperoleh dari suku ke-2 + suku ke-3 = 2 + 3 = 5)
Suku bilangan ke-5 (f5) = 8 (diperoleh dari suku ke-3 + suku ke-4 = 3 + 5 = 8), dan
seterusnya.

Bila ditabelkan (dan sebaiknya Anda buatkan tabel seperti di bawah ini untuk memudahkan
perhitungan), maka 20 suku bilangan pertama dari deret Fibonacci adalah sbb.:


Suku ke- Bil. Fibonacci
   1            1
   2            2
   3            3
   4            5
   5            8
   6           13
   7           21
   8           34
   9           55
   10          89
   11          144
   12          233
   13          377
   14          610
   15          987
   16         1597
   17         2584
   18         4181
   19         6765
   20         10946

Berdasarkan hasil perhitungan pada tabel di atas, kita bisa mengetahui jawaban untuk soal
nomor 1 dan 2 di atas, yaitu:


Jawaban Soal No.1.

Dari tabel di atas, terlihat bahwa bilangan Fibonacci yang terletak antara 10 hingga 100
adalah sebanyak 5 (lima) buah, yaitu suku ke-6 (13), suku ke-7 (21), suku ke-8 (34), suku ke-
9 (55), dan suku ke-10 (89).
Dengan demikian, jawabannya adalah (C) 5.

Jawaban Soal No.2.
Dari tabel di atas juga, dapat kita ketahui bahwa nilai n terkecil agar jumlah seluruh bilangan
Fibonacci dari f1 hingga fn > 150 adalah sebesar 10 (n=10), yang akan menghasilkan jumlah
sebesar 231 (diperoleh dari = 1 + 2 + 3 + 5 + 8 + 13 + 21 + 34 + 55 + 89, yang merupakan
bilangan fibonacci dari suku ke-1 hingga suku ke-10).
Sehingga, jawaban yang benar adalah (B) 10.

SOAL NOMOR 3-4

Deskripsi Pertanyaan 3-4

Di suatu negri antah berantah alat tukar yang digunakan hanya mata uang dengan empat
pecahan saja: satu Gordi, satu Gorde yang sama dengan 17 Gordi, satu Gordo yang sama
dengan 57 Gordi, dan satu Goram yang sama dengan 115 Gordi.

3. Gogolan berjualan snack dan ada seorang pembeli yang hendak membayar 3 potong snack
yang dibelinya. Snack-snack tsb masing-masing berharga (dinyatakan sebagai (Gordo, Gorde,
Gordi)): (4, 12, 10), (8, 21, 12), (1, 19, 11). Uang yang diserahkan adalah 20 Goram.
Berapakah kembalian yang benar?

(A)   11 Gordo dan 17 Gordi
(B)   10 Gordo, 3 Gorde dan 21 Gordi
(C)   9 Gordo, 4 Gorde dan 44 Gordi
(D)   8 Gordo, 14 Gorde dan 5 Gordi
(E)   11 Gordo, 1 Gorde dan 1 Gordi

4. Seorang kolektor mata uang dari negri lain sangat menyukai Gorde tetapi membenci
Gordi. Baginya setiap Gordi bernilai 2 kali negatif dari nilai Gorde (1 Gordi = -2 Gorde),
sementara Gordo dan Goram dilarang untuk dibawa ke luar negeri tsb jadi tidak akan ia
koleksi. Ketika ia menukarkan uang di bank, pilihlah jumlah Goram yang ia akan tukarkan
untuk mendapatkan total nilai sebesar mungkin baginya.

(A)    6
(B)    7
(C)    8
(D)    9
(E)    10



PEMBAHASAN SOAL:

Wahhh…. Pusing juga baca soal nomor 3 dan 4 ini ya….??!! Gimana…. Anda juga bingung
khannn…?? Tapi tenang aja, kalau kita tetap menggunakan kepala dingin, kami yakin Anda
dapat memecahkan persoalan ini dengan mudah.

Yuk... kita mulai pembahasannya....


Jawaban Soal Nomor 3:
Ada beberapa hal yang perlu diperhatikan untuk soal nomor 3 ini, yaitu sebagai berikut:
a. Nilai uang pecahan
   1 Gorde = 17 Gordi
   1 Gordo = 57 Gordi
   1 Goram = 115 Gordi

b.   Harga snack
     Kalau kita tabelkan, harga masing-masing snack sebagaimana informasi dari deskripsi
soal di atas adalah sebagai berikut:


Snack Gordi Gorde Gordo
     1    10     12      4
     2    12     21      8
     3    11     19      1
Jumlah    33     52      13

Untuk memudahkan perhitungan, harga-harga snack tadi selanjutnya dikonversikan atau
dirubah ke nilai pecahan yang terkecil, yang dalam hal ini adalah Gordi. Dengan demikian,
maka harga snack keseluruhan menjadi:

                   33 Gordi
52 Gorde x 17 = 884 Gordi
13 Gordo x 57 = 741 Gordi
                --------------
        Total = 1658 Gordi

Total uang si pembeli adalah 20 Goram = 2300 Gordi.
Sehingga kembaliannya adalah = 2300 – 1658 = 642 Gordi.

Perlu diketahui bahwa nilai 642 Gordi tidak ada pada jawaban yang disediakan (lihat lagi
deskripsi soal no. 3 di atas). Oleh karena itu, maka kita harus mengkonversikan nilai 642
Gordi tersebut sesuai dengan jawaban yang disediakan.

Konversi dilakukan dengan mengubah nilai 642 Gordi ke dalam nilai pecahan terbesar, yaitu
Gordo, lebih dulu. Sehingga:

642 Gordi dibagi 57 = 11 Gordo sisa 15 Gordi (Jawaban A salah karena sisanya 17 gordi).

Nilai 11 Gordo diturunkan menjadi 10 Gordo, sehingga sisanya menjadi 72 Gordi. Nilai 72
Gordi kita konversikan ke pecahan Gorde, menjadi: 72/17 = 4 Gorde sisa 4 Gordi. Jawaban
ini juga tidak tersedia, sehingga kita perlu menurunkan nilai 4 Gorde menjadi 3 Gorde
(dengan pertimbangan bahwa jawaban B hampir menyerupai). Maka : 72/17 = 3 Gorde sisa
21 Gordi. Sehingga, kembalian yang benar untuk si pembeli tersebut adalah 10 Gordo, 3
Gorde, dan 21 Gordi.
Dengan demikian, maka jawaban yang benar adalah (B) 10 Gordo, 3 Gorde dan 21 Gordi.
Catatan: karena jawaban yang benar sudah ketemu, maka 3 (tiga) alternatif jawaban yang lain
tidak perlu dicek lagi.


Jawaban Soal Nomor 4:

Untuk menjawab soal nomor 4 ini, tidak ada cara lain selain kita mencoba menghitung semua
jawaban yang disediakan hingga ditemukan jawaban yang paling benar sesuai yang
diinginkan.
Adapun pembahasan untuk masing-masing alternatif jawaban yang disediakan adalah sebagai
berikut:

Jawaban (A) : 6 x 115 gordi = 690 gordi = 40 gorde sisa 10 gordi = 40 – (2 x 10) = 20 gorde
(mengingat 1 gordi = -2 gorde)
Jawaban (B) : 7 x 115 gordi = 805 gordi = 47 gorde sisa 6 gordi = 47 – (2 x 6) = 35 gorde
(mengingat 1 gordi = -2 gorde)
Jawaban (C) : 8 x 115 gordi = 920 gordi = 54 gorde sisa 2 gordi = 54 – (2 x 5) = 50 gorde
(mengingat 1 gordi = -2 gorde)
Jawaban (D) : 9 x 115 gordi = 1035 gordi = 60 gorde sisa 15 gordi = 60 – (2 x 15) = 30
gorde (mengingat 1 gordi = -2 gorde)
Jawaban (E) : 10 x 115 gordi = 1150 gordi = 67 gorde sisa 11 gordi = 67 – (2 x 11) = 45
gorde (mengingat 1 gordi = -2 gorde)

Berdasarkan perhitungan di atas, dapat kita ketahui bahwa nilai tukar yang terbesar adalah 50
gorde, sehingga dengan demikian, jawaban yang paling benar adalah (C) 50 Gorde.



SOAL NO. 5 – 9:

Deskripsi untuk pertanyaan 5-9
Suatu pesan akan saya distribusikan ke orang-orang bernama A, B, C, D, E, F, G, H,
dan I melalui pesan singkat (SMS) secara berantai. Mereka mengetahui beberapa
nomor telp yang lain sbb.
A hanya mengetahui nomor-nomor telp F, G;
B hanya mengetahui nomor-nomor telp C, E, H;
C hanya mengetahui nomor telp A;
D hanya mengetahui nomor-nomor telp E, I;
E hanya mengetahui nomor telp H;
F hanya mengetahui nomor-nomor telp B, E;
H hanya mengetahui nomor-nomor telp I, C;
G hanya mengetahui nomor telp F;
I hanya mengetahui nomor-nomor telp A, B;

Karena teknologi komunikasi masih terbatas maka saat menerima SMS mereka tidak
mengetahui siapa dan apa nomor telp pengirimnya. Diasumsikan bahwa begitu
mereka menerima SMS, maka dalam jeda tepat 5 menit SMS akan diteruskan secara
serentak ke orang-orang yang mereka ketahui nomor teleponnya dan SMS yang
dikirim tsb langsung diterima tanpa ada jeda. Dipastikan bahwa mereka tidak akan
mengirim SMS yang sama ke orang yang sama lebih dari satu kali.



5. Siapakah orang yang akan saya kirimi SMS agar dengan hanya dengan satu kali
saja maka selanjutnya berita tsb akan sampai ke setiap orang?

(A)   A
(B)   E
(C)   D
(D)   F
(E)   G

6. Jika orang yang pertama saya kirimi SMS adalah G maka siapakah yang akan
menerima SMS tsb paling banyak akhirnya?

(A)   A
(B)   E
(C)   D
(D)   F
(E)   G

7. Jika orang yang pertama saya kirimi SMS adalah A dan, maka berapa menit lagi
A akan menerima SMS selanjutnya?

(A)   10 menit
(B)   15 menit
(C)   20 menit
(D)   25 menit
(E)   30 menit

8. Jika orang yang pertama saya kirimi SMS adalah A maka berapa menit lagi A
akan menerima SMS dari I?

(A)   10 menit
(B)   15 menit
(C)   20 menit
(D)   25 menit
(E)   30 menit

9. Jika orang yang pertama saya kirimi SMS adalah A maka siapa saja yang sudah
menerima SMS tepat setelah menit ke 15?

(A)   Semua
(B)   Semua kecuali D dan I
(C)   Semua kecuali C, D dan I
(D)   Hanya A, G, F, E, B
(E)   Semua kecuali C, D, G
PEMBAHASAN SOAL:

Waduhhh …. Gimana kira-kira cara memecahkan persoalan di atas ya…?? Terus
terang saja, kami juga agak susah menjawab soal di atas. Moga-moga aja
pembahasan berikut ini betul ya.... (atau sedikitnya mendekati betul...).

Yuk... kita mulai aja pembahasannya....


Untuk memudahkan pembahasan persoalan di atas, alangkah lebih baik kalau
deskripsi soal yang telah disampaikan sebelum dibuatkan dalam bentuk tabel seperti
berikut.




NB: Tanda v (centang) menandakan bahwa orang yang satu mengetahui nomor
telepon orang yang lainnya.



Jawaban Soal No. 5.

Hanya ada satu cara untuk menjawab soal nomor 5 ini, yaitu dengan
menggambarkan diagram jaringan (diagram alir) dari alternatif jawaban (A) – (E)
yang disediakan berdasarkan deskripsi pertanyaan yang diberikan.
Berikut adalah gambaran diagram jaringan dari masing-masing alternatif jawaban
yang disediakan (mohon pembaca ikut mencocokkan diagram di bawah dengan
deskripsi pertanyaannya…). Penggambaran diagram jaringan berikut sekaligus
berguna untuk mencari jawaban dari soal no. 6 – 9.

Jawaban (A):




Dari diagram ini, diketahui masih ada satu orang yang belum terkirim SMS, yaitu D.


Jawaban (B):
Dari diagram ini, diketahui masih ada satu orang yang belum terkirim SMS, yaitu D.


Jawaban (C):




Dari diagram ini, diketahui bahwa semua orang sudah terkirim SMS.



Jawaban (D):




Dari diagram ini, diketahui masih ada satu orang yang belum terkirim SMS, yaitu D.


Jawaban (E):




Dari diagram ini, diketahui masih ada satu orang yang belum terkirim SMS, yaitu D.

Berdasarkan pembahasan di atas, maka dapat kita ketahui bahwa jawaban yang
benar adalah jawaban (C) D.
Jawaban Soal No. 6.

Untuk menjawab soal nomor 6 ini kita dapat menggunakan diagram jaringan dari
alternatif jawaban (E) dari soal nomor 5 di atas, yaitu sebagai berikut:




Berdasarkan diagram di atas, dapat kita ketahui beberapa hal sebagai berikut:
- A menerima SMS 2 kali, yaitu dari C dan I
- B menerima SMS 2 kali, yaitu dari F dan I
- C menerima SMS 2 kali, yaitu dari B dan H
- E menerima SMS 2 kali, yaitu dari B dan F
- F menerima SMS 2 kali, yaitu dari G dan A
- G menerima SMS 1 kali, yaitu dari A
- H menerima SMS 1 kali, yaitu dari E
- I menerima SMS 1 kali, yaitu dari H
Dengan demikian, dari alternatif jawaban yang diberikan, kita ketahui ada 3 (tiga)
alternatif jawaban yang benar, yaitu jawaban (A), (B), dan (D).



Jawaban Soal No. 7.

Untuk menjawab soal nomor 7 ini kita dapat menggunakan diagram jaringan dari
alternatif jawaban (A) dari soal nomor 5 di atas, yaitu sebagai berikut:




Dari gambar di atas, dapat kita ketahui bahwa A akan mendapat SMS lagi paling
cepat melalui rute A – F – B – C – A. Hal ini akan memakan waktu sebesar 20 menit
(5 menit x 4 orang). Dengan demikian, jawaban yang benar adalah (C) 20 menit.




Jawaban Soal No. 8.

Perhatikan lagi diagram jaringan untuk jawaban soal nomor 7 di atas. A akan
mendapat SMS dari I melalui rute A – F – B – H – I – A, yang akan memakan waktu
sebesar 25 menit (5 menit x 5 orang). Jawaban yang benar adalah (D) 25 menit.


Jawaban Soal No. 9.

Perhatikan lagi diagram jaringan untuk jawaban soal nomor 7 dan 8 di atas. Orang
yang menerima SMS tepat setelah menit ke-15 adalah orang-orang yang mendapat
SMS dari saya dan dari tangan ke-1, 2, dan 3.
- Yang mendapat SMS dari saya adalah A.
- Yang mendapat SMS dari tangan ke-1 adalah F dan G.
- Yang mendapat SMS dari tangan ke-2 adalah B, E, dan F.
- Yang mendapat SMS dari tangan ke-3 adalah C, E, dan H.

Dengan demikian, yang belum mendapat SMS hingga menit ke-15 adalah D dan I.
Jadi jawaban yang benar adalah (B) Semua kecuali D dan I.



10. Perhatikan gambar persegi ajaib berukuran 4x4 yang rumpang di bawah ini!




 Jika persegi ajaib tersebut diisi bilangan bulat dari 1 sampai dengan 16 sedemikian rupa
sehingga total bilangan-bilangan dalam setiap kolom/baris/diagonal adalah sama, maka A +
B + C = …..

(A) 30
(B) 31
(C) 32
(D) 33
(E) 34


PEMBAHASAN SOAL NO.10

Penyelesaian soal ini dilakukan dengan cara coba-coba (trial and error). Perhatikan kotak
ajaib berikut:




Kotak-kotak yang kosong (bertanda ?) di atas harus diisi dengan angka antara 1 – 16 (tiap
kotak tidak boleh ada angka yang sama), sehingga jumlah dari baris/kolom/diagonal adalah
sama.
Langkah-langkah pengisian kotak-kotak yang masih kosong adalah sbb.:
1) Isi lebih dulu kotak A dengan angka terbesar (16), sehingga jumlah arah diagonal
menjadi (1+6+11+16) = 34. Angka 34 ini menjadi patokan untuk pengisian pada kotak-kota
yang lain.
Prioritas pengisian pada kotak A dilakukan dengan pertimbangan:
(a) Pada arah diagonal, tinggal kotak A yang belum diisi
(b) Pada arah diagonal tersebut, ada angka terkecil (1) yang dapat dipasangkan dengan angka
terbesar (16)
2) Isi kotak kosong pada baris pertama dengan angka (34-4-5-16) = 9
3) Isi kotak kosong di bawah kotak A dengan angka (34-16-3-13) = 2
4) Isi kotak C dengan angka (34-14-11-2) = 7
5) Isi kotak kosong pada baris ke-3 dengan angka (34-4-14-1) = 15
6) Isi kotak B dengan angka (34-15-6-3) = 10
7) Isi kotak kosong pada baris ke-4 dengan angka (34-1-8-13) = 12
8) Pengisian sudah selesai. Selanjutnya dilakukan pengecekan dengan cara menghitung
jumlah angka-angka yang sudah kita masukkan sebelumnya ke dalam kotak-kotak yang
kosong masing-masing ke arah horisontal (baris), vertikal (kolom), dan diagonal. Hasil
dianggap benar apabila jumlah angka-angka ke arah baris, kolom, dan diagonal sama, begitu
juga sebaliknya. Apabila ada kesalahan, langkah di atas harus diulang lagi dengan angka
yang berbeda

Lihat tabel hasil pengecekan berikut ini :
Karena jumlah angka-angka pada setiap baris, kolom, dan diagonalnya semuanya sama,
berarti hasil perhitungan di atas sudah benar.
Selanjutnya kita hitung: A + B + C = 16 + 10 + 7 = 33
Dengan demikian, jawaban yang benar adalah (D) 33.

Deskripsi untuk pertanyaan 11 – 13


 TWO
 TWO +
FOUR


T,W,O,F,U, dan R masing-masing mewakili satu digit integer (bilangan bulat) positif; dan
dan masing-masing mewakili bilangan yang berbeda. F dan T tidak sama dengan 0.


11. Jika diketahui O = 4, maka berapakah T x W x O ?

(A)   84
(B)   210
(C)   48
(D)   734
(E)   0
12. Jika diketahui R = 4, maka berapakah F + O + U + T ?

(A)   9
(B)   16
(C)   18
(D)   20
(E)   22

13. Berapakah hasil dari :

(1000 x F) + (100 x O) + (10 x U) + R
      (100 x T) + (10 x W) + 0

(A)   10
(B)   8
(C)   2
(D)   6
(E)   4




PEMBAHASAN SOAL NOMOR 11 – 13

Soal nomor 11 – 13 ini harus diselesaikan dengan cara coba-coba. Kita harus menghitung
angka yang telah ditentukan lebih dulu baru kemudian memasangkannya pada angka yang
ada sesuai dengan ketentuan yang telah dijelaskan dalam deskripsi pertanyaan di atas.



Jawaban Soal Nomor 11.

Perhatikan ketentuan yang diberikan pada deskripsi pertanyaan dan soal!
Untuk nilai O = 4, maka:

 TWO                 TW4
 TWO + =========oo}} TW4 +
FOUR                F4UR


Perhatikan perhitungan di atas! Dari perhitungan tersebut, dapat kita ketahui hal-hal sebagai
berikut:
(1) Nilai R = O + O = 4 + 4 = 8
(2) Nilai T = … + … = 4. Nilai yang bisa memenuhi ketentuan ini adalah 2 dan 7 (dimana 2 +
2 = 4 dan 7 + 7 = 14; ditulis digit terakhirnya saja, yaitu 4). Mengingat ada ketentuan bahwa
nilai F ≠ 0, maka nilai yang memenuhi adalah 7, maka nilai F jadi 1.
Sehingga:


 7W4
 7W4 +
14U8


(3) Nilai yang belum diketahui adalah W dan U. Untuk nilai W, bisa diperoleh dengan
mencoba jawaban yang disediakan. Bila memenuhi syarat yang ada, maka jawaban itu yang
benar.
Kita coba dulu alternatif jawaban (A), yaitu 84.
W = 84 : (7 x 4) = 84 : 28 = 3; nilai ini memenuhi syarat, jadi jawaban A adalah benar. Untuk
alternatif jawaban yang lain tidak perlu dicoba lagi. Dengan demikian, U = 3 + 3 = 6.

Sehingga jawaban yang benar adalah (A) 84.



Jawaban Soal Nomor 12.

Pertanyaannya adalah : Jika R = 0, maka F + O + U + T = …?
Untuk R = 0, maka O bisa bernilai 0 atau bisa juga bernilai 5. Tetapi, bila O bernilai 0, maka
nilai O akan sama dengan nilai R, dan hal ini tidak diperbolehkan (perhatikan deskripsi
pertanyaan di atas). Dengan demikian, O harus bernilai 5.
Untuk O = 5, maka:

 TWO                TW5
 TWO + =========o}} TW5 +
FOUR               F5U0


Perhatikan perhitungan di atas!

(1) Nilai F harus bernilai > 0, dan nilai yang pasti adalah 1, karena pertambahan dari dua
angka dengan 1 digit yang sama paling besar akan menghasilkan 18.
(2) Nilai T harus merupakan nilai yang kalau dijumlahkan hasilnya adalah 15. nilai yang
memenuhi adalah 7, dengan catatan: ada penambahan angka dari digit berikutnya (dari nilai
U).
(3) Nilai W + W harus di atas 10, karena nanti hasilnya (nilai puluhannya) akan diberikan
kepada T. Nilai yang mungkin untuk W adalah 6. Nilai lain yang mungkin adalah 8 dan 9,
tetapi bila nilai W = 8, maka nilai U = 7 (tidak diperbolehkan karena sama dengan nilai T).
Bila nilai W = 9, maka nilai U = 9 (tidak boleh karena sama dengan W)
Sehingga, susunan yang mungkin adalah:

 765
 765
1530
Untuk mendapatkan jawaban yang pasti, maka angka-angka yang telah kita peroleh
sebelumnya di atas dapat kita coba masukkan dalam perhitungan sebagai berikut: F + O + U
+ T = 1 + 5 + 3 + 7 = 16. Perhatikan, angka 16 ini ada di dalam alternatif jawaban yang telah
disediakan, yaitu jawaban (B).
Dengan demikian, jawaban yang benar adalah (B) 16.



Jawaban Soal Nomor 13.

Pertanyaannya adalah berapa hasil dari :

(1000 x F) + (100 x O) + (10 x U) + R =
      (100 x T) + (10 x W) + 0        .....?

Berdasarkan jawaban no. 11 dan no. 12 di atas, kita dapat mengerjakan soal ini dengan 2
jawaban (mengingat jawaban no.11 dan 12 menghasilkan angka yang berbeda).
(1) Berdasarkan no.11, diketahui : T = 7; W = 3; O = 4; F = 1; U = 6; dan R = 8
(2) Berdasarkan no.12, diketahui : T = 7; W = 6; O = 5; F = 1; U = 3; dan R = 0

Sebaiknya kedua nilai ini kita coba semua, kemudian dicocokkan dengan alternatif jawaban
yang ada.

(1) Berdasarkan no. 11
Kita masukkan angka-angka hasil perhitungan dari jawaban no.11 di atas (dimana T = 7; W =
3; O = 4; F = 1; U = 6; dan R = 8) sebagai berikut :

(1000 x 1) + (100 x 4) + (10 x 6) +
                8
     (100 x 7) + (10 x 3) + 4
    = 1000 + 400 + 600 + 8          2008
                                  =      = .....?
         700 + 30 + 4               734


Hasilnya pasti pecahan (kalau tidak percaya, silahkan dihitung :) ). Alternatif jawaban yang
disediakan tidak ada yang pecahan (semuanya berupa bilangan bulat).

(2) Berdasarkan no. 12
Kita masukkan angka-angka hasil perhitungan dari jawaban no.12 (dimana T = 7; W = 6; O
= 5; F = 1; U = 3; dan R = 0) sebagai berikut :

 (1000 x 1) + (100 x 5) + (10 x 3) +
                 0
      (100 x 7) + (10 x 6) + 5
=      1000 + 500 + 300 + 0          1530
                                   =      = 2 =======o}} BENAR...
            700 + 60 + 5             765
Dengan demikian, jawaban yang benar adalah (C) 2.



15. Di sebuah pulau terdapat dua golongan penduduk, ksatria yang selalu bicara jujur, dan yang lain
adalah penipu yang selalu berbohong. Jika Anda bertemu dengan dua orang A dan B. Golongan
apakah yang tepat untuk A dan B jika A berkata “B adalah seorang ksatria” dan B berkata “Golongan
kami berbeda”?

(A) A adalah seorang ksatria dan B adalah seorang penipu.
(B) A adalah seorang penipu dan B adalah seorang ksatria.
(C) Keduanya adalah ksatria.
(D) Terkadang A dan B dapat berganti golongan.
(E) Keduanya adalah penipu.




Jawaban soal nomor 15:

Perhatikan deskripsi pertanyaan di atas! A mengatakan bahwa B adalah seorang ksatria (kalau hal ini
benar, berarti A juga seorang ksatria (jujur); tetapi kalau ini tidak benar, berarti A dan B adalah
penipu karena A sudah berbohong dengan mengatakan bahwa B adalah seorang ksatria padahal
sebenarnya B adalah penipu).
Untuk memastikannya, kita lihat pernyataan yang disampaikan oleh B. B mengatakan “Golongan
kami berbeda?” Hal ini mengandung arti bahwa golongan A dan B adalah sama, yaitu mereka berdua
adalah penipu.
Dengan demikian, jawabannya adalah (E) Keduanya adalah penipu.



16. Ibu Guru mengajarkan kursus Bahasa Inggris. Ada tiga kelas tingkat pemula dan dua kelas tingkat
lanjutan. Dari hasil ujian pertama dan kedua, walaupun total murid yang mendapatkan nilai 10
bertambah 8%, namun jumlah murid dari kelas pemula yang mendapatkan nilai 10 berkurang.
Kalimat manakah yang dapat disimpulkan dari uraian di atas:

(A) Ibu Guru memiliki jumlah murid di kelas lanjutan lebih banyak daripada di kelas pemula.
(B) Ibu Guru memiliki jumlah murid di kelas lanjutan lebih sedikit daripada di kelas pemula.
(C) Jumlah murid di tiap kelas lanjutan yang mendapat nilai 10 naik lebih dari 8%.
(D) Paling tidak satu dari kelas lanjutan memiliki kenaikan mendapat nilai 10 lebih dari 8%.
(E) Jumlah murid kelas lanjutan yang mendapat nilai 10 naik lebih banyak dibanding murid kelas
pemula.
Jawaban soal nomor 16:

Untuk menjawab pertanyaan ini, kita tinjau alternatif jawaban yang disediakan satu per satu.
Jawaban (A) dan (B) tidak mungkin benar, karena soal tidak menyinggung tentang jumlah murid per
kelas.
Jawaban (C) : tidak bisa dipastikan bahwa jumlah murid tiap kelas lanjutan yang mendapat nilai 10
naik lebih dari 8%, jadi jawaban (C) ini salah.
Jawaban (D) : ada kemungkinan benar, karena mungkin saja dari total kenaikan 8% tersebut, salah
satu dari kelas lanjutan mendapat nilai lebih dari 8%.
Jawaban (E) : pernyataan ini pasti benar. Dari pernyataan pada soal diketahui bahwa total murid
yang mendapat nilai 10 naik 8%, tetapi murid kelas pemula yang dapat nilai 10 turun. Ini berarti
bahwa jumlah murid kelas lanjutan yang mendapat nilai 10 naik lebih banyak daripada murid kelas
pemula.

Dari alternatif jawaban yang disediakan, alternatif jawaban yang paling benar adalah (E) Jumlah
murid kelas lanjutan yang mendapat nilai 10 naik lebih banyak dibanding murid kelas pemula.




17. ”Hanya pada hari Sabtu, Maya makan bakso, sesudah itu pergi ke bioskop.” Bila kalimat tersebut
benar, manakah kalimat berikut ini yang juga harus benar?
I. Jika bukan Hari Sabtu, maka Maya tidak makan bakso dan tidak pergi ke bioskop.
II. Jika suatu hari Maya makan bakso dan pergi ke bioskop maka hari itu adalah hari sabtu.
III. Jika Maya makan bakso dan tidak pergi ke bioskop maka hari itu bukan hari Sabtu.

(A)   hanya I
(B)   hanya II
(C)   hanya II
(D)   hanya I dan III
(E)   hanya II dan III



Jawaban soal nomor 17:

Pernyataan pada soal adalah: “Hanya pada hari Sabtu, Maya makan bakso, sesudah itu pergi ke
bioskop”.

Dari tiga pernyataan tambahan, kita diminta untuk menentukan pernyataan yang sesuai dengan
pernyataan pada soal. Untuk keperluan ini, kita harus menganalisis pernyataan-pernyataan lain
tersebut, yaitu sebagai berikut:

I. Jika bukan hari Sabtu, maka Maya tidak makan bakso dan tidak pergi ke bioskop.
(Pernyataan ini salah, karena bisa saja Maya makan bakso ataupun pergi ke bioskop di hari selain
Sabtu. Perhatikan pernyataan pada soal mengandung arti bahwa ”Hanya pada hari Sabtu, Maya
makan bakso, sesudah itu pergi ke bioskop”, bukannya ”Hanya pada hari Sabtu, Maya makan bakso
dan pergi ke bioskop”)
II. Jika suatu hari Maya makan bakso dan pergi ke bioskop, maka hari itu adalah hari Sabtu.
(Pernyataan ini benar. Sesuai pernyataan pada soal, kalau Maya makan bakso dan pergi ke bioskop,
maka hari itu pastilah hari Sabtu)
III. Jika Maya makan bakso dan tidak pergi ke bioskop, maka hari itu bukan hari Sabtu. (Pernyataan
ini benar. Maya hanya makan bakso, dan dia tidak pergi ke bisokop. Berarti hari itu bukan hari Sabtu)

Dengan demikian, pernyataan yang benar adalah pernyataan II dan III, dan berarti jawaban yang
benar adalah (E) hanya II dan III.




18. Gedung-gedung asrama dibangun dengan 2 hingga 6 lantai. Setiap kamar pada setiap gedung
mulai dari lantai ke 2 terus ke atas, harus memiliki tangga darurat untuk menghadapi kemungkinan
kebakaran. Jika hal itu benar, manakah dari berikut ini yang benar?

(A)   Kamar-kamar di lantai ke dua tidak memiliki tangga darurat.
(B)   Kamar-kamar di lantai ke tiga tidak memiliki tangga darurat.
(C)   Hanya kamar-kamar di atas lantai ke dua yang memiliki tangga darurat.
(D)   Kamar-kamar di lantai ke empat memiliki tangga darurat.
(E)   Beberapa dari gedung-gedung asrama berlantai dua tidak memiliki tangga darurat.

Jawaban soal nomor 18:

Pernyataan jawaban yang paling sesuai dengan pernyataan pada soal adalah jawaban (D) Kamar-
kamar di lantai ke empat memiliki tangga darurat. Anda bisa kan membahas atau menganalisisnya
sendiri ;) ???




Pertanyaan :

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
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 = 20
    y = 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 :

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 mencari jawaban sedemikian
hingga 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) = 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.




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;
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;


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))



Soal ke-1

Diketahui program Pascal sbb:

const kar = 65;
var i : integer;
begin
   for i := 1 to 5 do
   begin
        kar := kar + 1;
   end;
writeln(ord(chr(kar-3*5)));
end.

Apa output dari program di atas?
a. runtime error
b. 65
c. 0
d. tidak ada output
e. 310

Pembahasan:

Sekilas program di atas agak rumit (sedikit) karena di dalamnya ada looping dan juga main
kode ASCII karena adanya function chr() yang digunakan untuk menampilkan kode ASCII
dari suatu bilangan bulat. Namun… jawaban yang benar adalah ‘run time error’ (A). Lho kok
bisa? Ya… perhatikan identifier bernama ‘kar’. identifier ini berupa konstanta karena dia
dideklarasikan dalam ‘const’. Apa akibatnya kalo suatu identifier dideklarasikan sebagai
konstanta? Yup… tepat sekali, dia tidak bisa diubah nilainya dalam proses komputasinya
(dalam body program). Namun.. coba perhatikan perintah kar := kar + 1; Pada perintah
ini jelas tampak bahwa ada perubahan nilai ‘kar’, yaitu nilai ‘kar’ yang baru adalah nilai ‘kar’
yang lama ditambah 1. Nah… hal inilah yang menyebabkan error.

Tips:

Hati-hati dalam mengerjakan soal yang di dalam pilihan jawabannya terdapat ‘runtime error’.
Coba cek dulu ada tidaknya rule dalam pemrograman yang dilanggar atau ada tidaknya
sintaks yang salah. Jika ada, jangan ragu untuk memilih ‘Runtime Error’. So… tidak usah
dikerjakan programnya karena itu menghabiskan waktu pengerjaan.

Soal ke-2

Diketahui potongan program Pascal sbb:

begin
   readln(a);
   for i := 1 to a do bil := bil * i;
   writeln(bil);
end.

Jika diberikan input 5 pada program di atas, maka apa outputnya?
a. tidak ada output
b. 120
c. 5
d. runtime error
e. 0

Pembahasan:

Nah… pada soal di atas ada pilihan jawaban ‘runtime error’. Hati-hati nih… jangan-jangan
memang runtime error. Tapi ketika lihat kode Pascalnya tampaknya tidak ada kesalahan rule
atau sintaks. Jangan beralasan bahwa variabelnya tidak dideklarasikan, trus menyebabkan
error. Pada soal di atas sudah dijelaskan bahwa kode yang ditulis pada soal adalah ‘potongan
program’, sehingga anggap saja semua kelengkapan deklarasi termasuk deklarasi variabelnya
sudah dituliskan.

Wah berarti kita harus analisis manual nih… Eit tunggu dulu. Coba kita lihat apa yang
dioutputkan. Dari perintah writeln(bil); kita tahu bahwa yang dioutputkan adalah nilai dari
variabel ‘bil’. Nah.. nilai ‘bil’ ini akan dihasilkan dari proses bil := bil * i dalam
looping. Mungkin bayangan Anda nilai ‘bil’ ini akan berubah-ubah untuk setiap kali iterasi
dalam looping. Tapi… tunggu dulu, coba Anda perhatikan, ‘adakah nilai awal dari bil
sebelum masuk ke looping?’. Hmm… tampaknya tidak ada. Kalau tidak ada, maka dianggap
nilai ‘bil’ pertama kali adalah 0. Trus apa akibat hal ini pada perintah bil := bil * i? ya…
pasti hasilnya ‘bil’ adalah selalu 0. karena bil = 0 * i, berapapun jumlah iterasinya. So…
jawaban yang benar adalah 0 (E).

Soal ke-3

Diketahui program Pascal berikut ini

1 var s1, s2, s : string; i, ins : integer;
2 begin
3    s1 := 'TOKI';
4    s2 := '2005';
5    for i:=1 to length(s1) do if (ord(s1) < 10) then ins := 1;
6    insert(s2, s1, ins);
7    s := s1 + s2;
8    writeln(s);
9 end.


Outputnya adalah:
a. runtime error
b. TOK2005I2005
c. tidak ada output
d. 2005TOKI2005
e. 200TOKI5TOKI

Pembahasan:

Aduh… baru lihat programnya saja sudah pusing. Tapi.. eh, jangan pusing dulu. Coba baca
kembali tips dan trik untuk mengerjakan soal olimpiade yang pernah saya posting
sebelumnya. “Kalau di option jawabannya ada Runtime Error, maka cek semua rule dan
aturan sintaksnya, siapa tahu ada kesalahan sehingga kita tidak perlu merunut semua proses
dalam program“. Nah… kita cek tips dan trik tersebut karena dalam option terdapat Runtime
Error. OK let’s check it out !!!

Baris 1… gak ada masalah, baris 2… gak ada masalah, baris 3, 4 juga gak ada masalah. Baris
5… ada masalah gak ya? di situ ada function ord(). Function ord(X) akan mengembalikan
bilangan bulat yang menunjukkan ordinalitas dari X yang bertipe data ordinal. Perhatikan
perintah ord(s1) pada program. Di situ terlihat bahwa ’s1′ adalah bertipe data string.

Perlu diketahui bahwa tipe data ordinal adalah tipe data yang terurut valuenya. Tipe data
yang termasuk ordinal antara lain integer (dan turunannya: shortint, longint, word, byte),
boolean dan juga char.

Eh… btw, kok tipe data real tidak termasuk ordinal ya? Ya.. karena bilangan riil itu kan tidak
dapat dinyatakan dalam bentuk urutan. Berapakah bilangan riil setelah 1? apakah 2? apakah
1.5? apakah 1.05 atau apakah 1.000001? tidak bisa bukan? karena di antara dua bilangan riil
terdapat bilangan riil yang lain. Dengan demikian bilangan riil tidak bisa disajikan secara
terurut. Nah.. di sini string juga bukan termasuk tipe data ordinal sehingga program di atas
menimbulkan error.

Soal ke-4

Diberikan program berikut ini

1 var a, b, c, n, i : integer; bil : array [1..100] of integer;
2 begin
3     readln(n);
4     a := 1;
5     for i:=1 to n do
6     begin
7        c := a + b;
8        bil[i] := c;
9        a := b;
10       b := c;
11    end;
12    writeln(n);
13 end.

Jika diberikan inputnya adalah 5, maka outputnya adalah:

a. 0
b. 13
c. 2 3 5 8 13
d. 5
e. runtime error

Pembahasan:

AWAS… di pilihan jawaban ada runtime error. Coba dicek dulu sintaks dan rulenya.
Hmm…. kayaknya gak ada yang salah nih. Wah gawat kalo gak ada yang salah, karena kita
harus merunut proses jalannya program. Tapi… perlukah? Tunggu dulu, coba perhatikan
program di atas. Apa yang akan dijadikan sebagai output? Yap… tepat sekali yaitu nilai dari
variabel ‘n’. Di awal program nilai n ini adalah 5, karena berdasarkan soalnya nilai inputnya
adalah 5, dalam hal ini 5 akan diberikan kepada n karena ada statement readln(n);

Trus… perhatikan lagi.. coba cek apakah ada kemungkinan nilai n berubah pada proses
berikutnya? caranya ngecek gimana? ya… cari saja assignment yang berbentuk n := ...;
Ternyata setelah dicek tidak ada. Berarti nilai n ini tidak pernah berubah, alias tetap sama
dengan 5. Sehingga jawabannya adalah D.

Soal ke-5

Diberikan program Pascal berikut ini:

1 var k, j : integer;
2 begin
3    j := 0;
4    for k := 1 to 10 do
5    begin
6       inc(k);
7        inc(j, k);
8     end;
9     write(j);
10 end.

Apa output dari program di atas?
a. 30
b. 38
c. 40
d. 42
e. 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 dengan j := j + k.

OK deh… kita sudah tahu sekarang apa maksud function tersebut. Now let’s check it out!!
Kita akan analisis setiap langkah per langkah program di atas.

Step 1: j = 0
Step 2: (masuk for) k = 1
Step 3: inc(k) -> k := k + 1 -> k := 1 + 1 = 2
Step 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 = 5
Step 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?

1 var s : string[12];
2 begin
3    s := 'setia';
4    writeln('#', s, '#');
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). Berarti masih
ada sisa ruang kosong untuk string s sebanyak 7 buah. Ingat… ruang kosong di sini bukan
berisi spasi, tapi null karakter. Sehingga apabila dicetak writeln('#', 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? he…3x di sini makna plus bukan berarti dijumlah tapi penggabungan string.
Operator + dapat diberikan pada string. Tapi, jangan coba-coba iseng untuk menggunakan
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 hasilnya adalah ’setia
sampai’ (12 karakter).

Berikutnya cetak writeln('#', s, '#'); dan hasilnya adalah ‘#setia sampai#‘. Dengan
demikian hasilnya adalah D.

				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:213
posted:2/15/2012
language:
pages:27