Anda di halaman 1dari 23

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.

Anda mungkin juga menyukai