Anda di halaman 1dari 194

PELATIHAN ONLINE 2019

MATEMATIKA – PAKET 1

Buku KSN
INFORMATIKA
SMA

Disusun oleh: Tim Pelatihan Informatika ALCIndonesia


Daftar Isi
Paket 1 2
Paket 2 19
Paket 3 31
Paket 4 43
Paket 5 55
Paket 6 74
Paket 7 90
Paket 8 107
Paket 9 119
Paket 10 131
Paket 11 147
Paket 12 157
Paket 13 166
Paket 14 175
Paket 15 184

1
LOGIKA & ANALITIK

Pada bidang olimpiade komputer, logika merupakan materi yang wajib


dikuasai oleh semua peserta. Hal ini dikarenakan di olimpiade komputer kita akan
belajar banyak mengenai algoritma dimana kita memerlukan logika untuk
memahaminya dengan baik. Pada Bab ini juga kita akan mempelajari teknik analitik.
Analitik disini meliputi analitik persamaan, analitik pemasangan dan analitik
pengurutan.

Logika Proposisional
Materi logika proposisional ini sebetulnya mirip dengan materi logika matematika
yang dipelajari di bangku sekolah.
Ø Proposisi
Proposisi secara bahasa berarti pernyataan. Nilai dari proposisi bisa
benar/true saja atau salah/false tidak mungkin keduanya. Proposisi yang
terdiri dari satu pernyataan disebut proposisi atomik sedangkan yang terdiri
dari lebih satu pernyataan disebut proposisi majemuk.

Contoh Proposisi:
1. Bandung adalah salah satu kota di Indonesia (proposisi bernilai benar)
2. 25 adalah bilangan genap (proposisi bernilai salah)
3. Jika besok hujan, saya tidak akan pergi ke sekolah (bisa benar dan
bisa salah tapi tidak mungkin keduanya)
Bukan Proposisi:

1. Aku sayang kamu (???)


2. 2x + 3y = 10 (???)
3. 2x atau 5y + 10, dimana x dan y bilangan bulat. (bukan proposisi
karena tidak jelas nilainya)

Ø Operasi Proposisi
Ada 5 buah operasi dasar yang bisa kita gunakan untuk mengoperasikan
proposisi. Kelima operasi tersebut adalah Konjungsi (˄), Disjungsi (˅), Negasi
(~), Implikasi (→), dan biimplikasi (↔).

1. Konjungsi (˄)
Operasi konjungsi ini sama dengan “AND”. P konjungsi Q dinyatakan
dengan
P˄Q, yang berarti “P dan Q”

2
2. Disjungsi (˅)
Operasi disjungsi ini sama dengan “OR”. P disjungsi Q dinyatakan
dengan P ˅ Q, yang berarti “P atau Q”
3. Negasi (~)
Operasi Negasi ini sama dengan “NOT”. Operasi ini berarti mengubah
nilai proposisi tersebut dengan kebalikannya. Negasi dari P
dilambangkan dengan ~P.
4. Implikasi
Implikasi ini sama dengan “jika .., maka …” . Pernyataan berbentuk
“jika P maka Q” ini dilambangkan dengan P→Q.
5. Biimplikasi
Biimplikasi ini adalah implikasi dua arah sehingga setara dengan “…
jika dan hanya jika …” . P jika dan hanya jika Q dilambangkan dengan
P ↔ Q.
Nilai P ↔ Q juga setara dengan ((P→Q) ˄ (Q→P))

Ø Tabel Kebenaran

Tabel kebenaran adalah tabel yang berisikan hasil operasi dari dua buah
proposisi.
Ket:
-tabel kebenaran disini memuat 5 operasi yang sudah dijelaskan di atas.
-T berarti true dan F berarti False
P Q P˄Q P˅Q ~P P→Q P↔Q
T T T T F T T
T F F T F F F
F T F T T T F
F F F F T T T

Berikut ini adalah cara cepat untuk mengingatnya:

· P ˄ Q akan bernilai TRUE jika P dan Q nya bernilai TRUE


· P ˅ Q akan bernilai FALSE jika P dan Q nya bernilai FALSE
· P→Q akan bernilai FALSE jika P bernilai TRUE dan Q bernilai FALSE
· P ↔ Q akan bernilai TRUE jika P dan Q memiliki nilai kebenaran yang
sama

3
Ø Hierarki Operator Logika
Hierarki adalah urutan pengerjaan dari proposisi majemuk. Semakin tinggi
hierarkinya maka itulah yang dikerjakan terlebih dahulu.
1. Operator dalam kurung
2. Negasi
3. Konjungsi
4. Disjungsi

Contoh :
Apakah hasil dari (true and false or not (true or false and not(true))) ?
Jawaban:
(true and false or not (true or false and not(true)))
= (true and false or not (true or false and false))
= (true and false or not (true or false))
= (true and false or not (true))
= (true and false or false)
= false

Ø Hukum & Aturan Pada Logika


Ada beberapa hukum dan aturan penting yang bisa dipakai dalam
mengerjakan soal-soal logika, yaitu :
1. Hukum Komutatif
· P˄Q=Q˄P
· P˅Q=Q˅P
2. Hukum Asosiatif
· (P ˄ Q) ˄ R = P ˄ (Q ˄ R)
· (P ˅ Q) ˅ R = P ˅ (Q ˅ R)
3. Hukum Distributif
· P ˄ (Q ˅ R) = (P ˄ Q) ˅ (P ˄ R)
· P ˅ (Q ˄ R) = (P ˅ Q) ˄ (P ˅ R)
4. Hukum De Morgan
· ~(P ˄ Q) = ~P ˅ ~Q
· ~(P ˅ Q) = ~P ˄ ~Q
5. Aturan Kontraposisi
· P→Q = ~Q→~P
6. Negasi dari Implikasi
· ~( P→Q) = P ˄ ~Q
· P→Q = ~P ˅ Q

4
Ø Kaidah Interferensi
Kaidah interferensi adalah proses penarikan kesimpulan dari beberapa
proposisi sekaligus.
1. Modus Ponens
Proposisi 1 : P →Q
Proposisi 2 :P
____________________
Kesimpulan :Q

2. Modus Tollens
Proposisi 1 : P →Q
Proposisi 2 :~Q
_____________________
Kesimpulan :~P

3. Hypothetical Syllogism
Proposisi 1 :P→Q
Proposisi 2 :Q→R
_________________
Kesimpulan :P→R

4. Disjunctive Syllogism
Proposisi 1 :P˅Q
~P
__________________
Kesimpulan :Q

5. Simplifications
Proposisi 1 :P˄Q
Kesimpulan : P, Q

6. Case Analysis
Proposisi 1 :P˅Q
Proposisi 2 : P →R
Proposisi 3 : Q →R
_________________
Kesimpulan :R

ANALITIK

5
Soal Analitik adalah soal yang menguji nalar dan kreativitas peserta. Biasanya, tidak
diperlukan materi khusus untuk bisa mengerjakannya. Sehingga untuk
menguasainya hanya diperlukan banyak latihan dan logika berpikir yang baik. Di
olimpiade komputer ada 3 macam soal analitik yang sering muncul yaitu analitik
persamaan/al jabar, analitik pemasangan dan analitik pengurutan.
Ø Analitik Persamaan/Aljabar
Persoalan ini biasanya memakai sedikit persamaan dan aljabar untuk
menyelesaikannya.

Contoh Soal:
Pak Abda memiliki dua buah bilangan. Ketika bilangan pertama dikali dengan
3 dan bilangan kedua dikali 2 lalu dijumlahkan, ternyata hasilnya adalah 22.
Jika bilangan kedua dikali dengan 7 dan bilangan pertama dikali dengan 5
hasilnya adalah 44. Berapakah penjumlahan kedua bilangan tersebut?

Solusi:
Misal bilangan yang dimiliki Pak Abda adalah x dan y. Sehingga menurut
soal:
· 3x + 2y = 22 … (1)
· 7y + 5x = 44 … (2)
Untuk mencari nilai x, kita dapat mengeliminasi nilai y. Caranya adalah
mengalikan persamaan 1 dengan 7 dan persamaan 2 dengan 2. Sehingga,

· 21x + 14y = 154 … (3)


· 14y + 10x = 88 ... (4)
Kurangi persamaan 3 dan 4 di atas, sehingga:
11x = 66, atau x = 6.

Untuk mencari nilai y, kita substitusikan nilai x ke persamaan 1, sehingga:


2y = 22 – 3x = 22 – 3*6 = 4 atau y = 2.
Oleh karena itu, jumlah kedua bilangan tersebut adalah 6 + 2 = 8

Ø Analitik Pemasangan
Soal bertipe analitik pemasangan ini biasanya dapat kita modelkan
masalahnya menjadi memasangkan N buah barang dengan N buah sifat
sehingga:
1. Satu barang hanya memiliki satu sifat
2. Satu sifat hanya dimiliki oleh satu barang

6
Contoh Soal:

Diketahui ada 3 orang mahasiswa yang memiliki hewan peliharaan dan merk
hp yang berbeda-beda. Dari informasi yang didapatkan, ternyata:

· Orang yang memelihara anjing tidak punya hp merk apple.


· Akmal tidak memelihara kucing
· Anwar tidak memilikii hp merk apple
· Kevin memelihara Ayam
Hp ber merk Apple dimiliki oleh orang yang memelihara …
Solusi:
Dari informasi terakhir kita bisa berkata bahwa:

· Kevin - Ayam – xxx (xxx adalah merk hp yang belum diketahui pasti)
Dari informasi kedua, karena Akmal tidak memelihara kucing dan Ayam
sudah dipelihara oleh Kevin, maka Akmal memelihara anjing dan Anwar
memelihara Kucing. Sehingga:

· Kevin - Ayam - xxx


· Anwar - Kucing - xxx
· Akmal - Anjing – xxx
Karena Anwar tidak memiliki hp merk apple dan yang memelihara anjing juga
tidak, maka hp ber merk Apple dimiliki oleh Kevin yang memelihara Ayam.

Untuk menyelesaikan soal-soal bertipe pemasangan seperti ini, kadang juga


memerlukan tabel bantuan.

Ø Analitik Pengurutan
Soal-soal bertipe ini biasanya meminta kita untuk mengurutkan beberapa
buah objek berdasarkan suatu kriteria tertentu.

Contoh Soal:
Terdapat 7 buah bilangan berurutan yang diberi nama A sampai G (urutan
nama tidak berarti urutan bilangannya) dimana A adalah rata-rata dari semua
bilangan tersebut dan bilangan terkecilnya adalah 10. Diketahui B lebih 2 dari
A dan C lebih besar dari tiga bilangan E, F, D. Jika C bukanlah bilangan
terbesar, maka nilai C adalah …

Solusi:

7
Dari soal di atas kita mengetahui bahwa:
· 7 bilangan tersebut adalah 10 sd. 16
· Karena A adalah rata-rata dari semua bilangan, maka A bernilai 10 + 3
= 13
· B = A + 2 = 15
· Urutan bilangan : _ _ _ A _ B _
Karena C lebih besar dari E, F, dan D tetapi bukan bilangan terbesar maka C
adalah A + 1 atau B – 1 yaitu 14

Untuk menyelesaikan soal-soal bertipe ini kita perlu memodelkan masalahnya


dengan mengurutkannya. Untuk mengurutkan data yang ada, bisa digunakan
tabel atau bisa ditulis (ke samping) seperti biasa. (gunakan “_” untuk data
yang belum diketahui)

8
SOAL

1. Jika diberikan proposisi:


· A bernilai true
· B bernilai false
· C bernilai true
Maka nilai kebenaran dari pernyataan :

not(A or not(B) and (C and B or A) or (C and not(A) or B))


adalah …
A. True
B. False
C. Tidak dapat ditentukan
D. A dan B benar
E. Tidak ada jawaban di pilihan A,B,C,D yang benar

2. Jika operasi A bernilai true, B bernilai true, C bernilai false, D bernilai false
dan E bernilai true. Maka pernyataan di bawah ini yang bernilai true adalah …

A. (A and B and not(D) and not(B or C) or D) and (not(not(A or B )and C and


D))
B. not(A and B or C and not(A or D)) or (E and not(A and B or not(C or D)))
C. (C and A or (C or A and not(B and E))) or (E and not(A or C and B))
D. (E and not(A and not(B) or C or D and E)) and (A and not(C)and(not(D) or
E))
E. Tidak ada jawaban yang benar

3. Pernyataan “jika saya mendapatkan ranking satu, maka saya akan mentraktir
teman saya” ekivalen dengan …
A. Saya mendapatkan ranking satu atau saya akan mentraktir teman saya
B. Saya mendapatkan ranking satu dan saya akan mentraktir teman saya
C. Saya tidak mendapatkan ranking satu atau saya tidak akan mentraktir
teman saya
D. Saya tidak mendapatkan ranking satu tapi saya akan mentraktir teman
saya
E. Saya tidak mendapatkan ranking satu atau saya akan mentraktir teman
saya

9
4. Pernyataan yang ekivalen dengan “Jika saya sedang kehausan, maka saya
akan minum es jeruk” adalah …
A. Jika saya minum es jeruk, maka saya sedang kehausan.
B. Jika saya minum es jeruk, maka saya tidak sedang kehausan
C. Jika saya tidak minum es jeruk, maka saya tidak sedang kehausan
D. Jika saya tidak minum es jeruk, maka saya sedang kehausan
E. Jawaban A, B, C, D, tidak ada yang memenuhi

5. Negasi yang paling tepat untuk pernyataan “Semua teman Irfan menyukai
pelajaran matematika dan juga pelajaran fisika” adalah …
A. Ada teman Irfan yang menyukai pelajaran matematika dan juga pelajaran
fisika
B. Semua teman Irfan suka pelajaran matematika atau pelajaran fisika
C. Beberapa teman Irfan tidak menyukai pelajaran matematika dan juga
pelajaran fisika
D. Terdapat beberapa teman Irfan yang tidak suka pelajaran matematika
ataupun pelajaran fisika
E. Setiap teman Irfan tidak menyukai pelajaran matematika atau pelajaran
fisika

6. Diketahui beberapa proposisi berikut ini:


· Jika Ari rajin belajar, maka Ari akan mendapatkan ranking satu
· Badur adalah siswa yang paling rajin atau Ari ranking satu
· Jika Badur adalah siswa yang paling rajin, maka Badur akan
mendapatkan penghargaan
· Ari bukan ranking satu
Kesimpulan yang bisa diambil dari proposisi di atas adalah …

A. Ari tidak rajin belajar


B. Badur adalah siswa yang paling rajin
C. Ari mendapatkan ranking satu
D. Badur akan mendapatkan penghargaan
E. Pilihan A dan D benar

7. Gedung-gedung perkuliahan dibangun dengan 2 hingga 7 lantai. Setiap


ruangan pada setiap gedung mulai dari lantai 2 terus ke atas, harus memiliki
tangga darurat untuk menghadapi kemungkinan bencana. Jika hal itu benar,
manakah dari berikut ini yang paling benar?
A. Hanya ruangan-ruangan di atas lantai ke dua yang memiliki tangga
darurat
B. Ruangan-ruangan di lantai ke dua tidak memiliki tangga darurat

10
C. Ruangan-ruangan di lantai ke tiga tidak memiliki tangga darurat
D. Ruangan-ruangan di lantai ke empat dan ke lima memiliki tangga darurat
E. Beberapa dari gedung-gedung perkuliahan berlantai dua tidak memiliki
tangga darurat

8. Terdapat 4 orang sahabat yaitu Atep, Hariono, Bambang, dan Ismed.


Diketahui bahwa masing masing dari mereka hanya menyukai satu pelajaran
diantara Kimia, Fisika, dan Matematika. Diketahui pula bahwa yang menyukai
matematika selalu berkata jujur, yang menyukai kimia akan selalu berbohong
dan yang menyukai fisika kadang berkata bohong dan kadang berkata jujur.
Mereka lalu saling bercakap:
Atep : “Aku tidak menyukai Fisika karena aku tidak suka dengan hitung-
hitungan”
Hariono : “Atep memang tidak suka fisika sama seperti Bambang”
Bambang : “Aku sangat menyukai Kimia”
Ismed : “Aku suka matematika, dan Atep adalah orang lain yang hanya
menyukai matematika dan dari kita berempat hanya seorang yang menyukai
fisika”

Maka yang pasti menyukai fisik adalah …


A. Atep
B. Hariono
C. Bambang
D. Ismed
E. Tidak dapat ditentukan

9. Diketahui beberapa proposisi berikut ini:


· Jika Irfan rajin belajar, maka Irfan akan menjadi juara olimpiade
· Irfan menjadi olimpiade atau caca orang yang suka belajar
· Jika Caca sangat pintar, maka dia akan dipuji oleh semua guru di
sekolah
· Caca sangat pintar jika dan hanya jika caca orang yang suka belajar
Pernyataan apakah yang harus bernilai benar agar semua pernyataan lain
dapat dipastikan nilai kebenarannya?
A. Irfan tidak rajin belajar
B. Caca tidak suka belajar

11
C. Irfan tidak juara olimpiade
D. Terdapat guru di sekolah yang tidak memuji Caca
E. Ada 2 pilihan yang benar

10. Diberikan beberapa proposisi berikut ini:


· Jika Andi pergi ke sekolah maka Budi juga akan pergi ke sekolah
· Caca pergi ke sekolah atau Didi yang pergi ke sekolah
· Didi pergi ke sekolah atau Eddy pergi ke sekolah atau Andi dan Budi
(keduanya) yang pergi ke sekolah
· Budi pergi ke sekolah jika dan hanya jika Caca pergi ke sekolah
Ada berapa banyak kombinasi berbeda orang-orang yang akan pergi ke
sekolah?
A. 6
B. 7
C. 8
D. 9
E. 10

11. (P AND NOT(Q OR NOT R)) hanya bernilai TRUE apabila P,Q,dan R berturut-turut
bernilai
A. TRUE, TRUE, TRUE
B. TRUE, FALSE, TRUE
C. TRUE, FALSE, FALSE
D. TRUE, TRUE, FALSE
E. FALSE, TRUE, TRUE

12. Di Pulau “sabeb” ada dua jenis penduduk yaitu ksatria dan penipu. Ksatria
selalu berkata jujur sedangkan penipu selalu berkata dusta. Diketahui
terdapat 2017 orang yang menempati pulau “sabeb” ini. Mereka tahu siapa
saja diantara mereka yang merupakan ksatria dan siapa saja yang
merupakan penipu. Ketika mereka berbaris, mereka sama-sama berkata
“Penipu di depan saya lebih banyak dari ksatria di belakang saya”. Ada
berapa jumlah ksatria di Pulau “sabeb” tersebut?
A. 0
B. 1
C. 2016
D. 1009
E. 1008

13. X = (A and B or C) and not((B and C) or (C and A))

12
Agar X bernilai True, maka banyaknya kemungkinan nilai kebenaran dari
(A,B,C) ada …
A. 1
B. 2
C. 3
D. 4
E. 5

14. Diketahui ksatria adalah orang yang selalu berkata jujur, sementara penipu
selalu berkata dusta. Ada 4 orang bernama A, B, C, D. (Setiap orang pasti
penipu atau ksatria):
· Jika A adalah ksatria, maka B juga ksatria
· B dan C bukanlah orang dengan sifat yang sama
· B adalah ksatria jika dan hanya jika D adalah penipu
· Jika C adalah penipu, maka D adalah ksatria
Siapa sajakah yang merupakan penipu?
A. A dan B
B. A dan D
C. C dan D
D. B dan C
E. Tidak dapat ditentukan

15. Pak Ganesh sedang memikirkan sebuah bilangan. Setelah diperhatikan,


ternyata bilangan yang dipikirkan pak Ganesh memenuhi kriteria:
· Bilangan yang sedang dipikirkan ada di rentang 1 hingga 100
· Bilangan tersebut adalah bilangan kelipatan 5 jika dan hanya jika
bilangan tersebut ditambah 1 habis dibagi dengan 2
· Jika bilangan tersebut adalah bilangan kelipatan 2, maka bilangan
tersebut ditambah 1 akan habis dibagi dengan 3
Ada berapa bilangan yang memenuhi kriteria pak Ganesh?

A. 20
B. 21
C. 22
D. 23
E. 24

16. Pada sebuah keluarga diketahui bahwa selisih umur ayah dan umur adik
adalah 29 tahun. Jika diketahui 10 tahun yang lalu, umur kakak adalah dua

13
kali umur adik dan jumlah umur kakak dan ayah 8 tahun yang akan datang
adalah 86 tahun, maka umur adik saat ini adalah …
A. 16 tahun
B. 17 tahun
C. 18 tahun
D. 19 tahun
E. 20 tahun

17. Koperasi siswa di SMA Negeri 1 Gajah menjual beberapa alat tulis seperti
pulpen, buku, dan pensil. Tiga orang sekawan memutuskan untuk berbelanja
di koperasi tersebut untuk persiapan ujian. Ridho mengeluarkan uang
sebanyak Rp 12.600,00 untuk membeli 2 buah buku, 3 buah pulpen dan 4
buah pensil. Sementara Aldo, mengeluarkan uang sebanyak Rp 13.300,00
untuk membeli 4 buah pulpen,1 buah buku dan 6 buah pensil. Sedangkan
Irfan, menghabiskan uang sebanyak Rp. 12.000,00 untuk membeli 1 buah
pensil, 5 buah pulpen, dan 2 buah buku. Jika Pak Ganesh (guru dari 3
sekawan) itu ingin membeli 2 buah buku, 1 buah pensil dan 1 buah pulpen,
berapa total uang yang harus dibayarkannya?
A. Rp 5.700,00
B. Rp 5.900,00
C. Rp 7.000,00
D. Rp 7.200,00
E. Rp.7.400,00

18. Suatu hari Natasha berkumpul untuk reuni dengan 2016 temannya. Mereka
saling bersalaman, tetapi mungkin tidak setiap dua orang akan saling
bersalaman. Setiap dua orang bersalaman maksimal sekali. Ia lupa telah
bersalaman berapa kali. Ia bertanya ke semua orang jumlah salaman yang
mereka lakukan hampir semua menjawab 2016, kecuali hanya dua orang
yang menjawab 2014. Berapa salaman yang Natasha lakukan?
A. 2017
B. 2016
C. 2015
D. 2014
E. 2013

19. Pak Dengklek memiliki 25 ekor kuda di peternakannya. Pada perayaan hari
valentine akan diadakan kontes kuda tercepat, dia pun ingin berpartisipasi
dan akan mengirimkan 3 buah kuda terbaik miliknya untuk mengikuti kontes
kuda tercepat tersebut. Untuk mendapatkan 3 kuda terbaik tersebut, Pak
Dengklek berencana untuk membuat sebuah pertandingan internal. Pada

14
setiap pertandingan internal tersebut, Pak Dengklek dapat mempertandingkan
5 ekor kuda miliknya dan akan mendapatkan hasil urutan kuda paling cepat
hingga paling lambat. Berapa banyak pertandingan internal yang dibutuhkan
sehingga Pak Dengklek dapat menemukan 3 kuda terbaik miliknya?
A. 4
B. 5
C. 6
D. 7
E. 8

20. Perbandingan umur Irfan dan Ridho 7 tahun yang lalu adalah 5:4, sedangkan
perbandingan umur Irfan dan Ridho 5 tahun yang akan datang adalah 8:7.
Berapa selisih umur mereka saat ini?
A. 4
B. 8
C. 23
D. 27
E. 35

Perhatikan deskripsi berikut ini untuk soal nomor 21-23


Lima orang mahasiswa tinggal di kos-kosan yang sama. Kelima mahasiswa ini
bernama Abdul, Badur, Carfin, Daniel, dan Ervan. Kelima mahasiswa ini ternyata
berasal dari 5 Kota berbeda. Setelah tinggal bersama sekitar setahun ternyata
diketahui mereka memiliki makanan dan minuman favorit yang berbeda-beda.
Beberapa informasi yang diketahui adalah :
· Abdul berasal dari Kota Bandung Sedangkan Daniel berasal dari Kota
Jambi.
· Badur sangat menyukai teh manis dan Bakso.
· Orang yang menyukai sate ternyata sangat menyukai es jeruk.
· Carfin sangat menyukai mie ayam.
· Orang yang menyukai teh botol ternyata berasal dari kota Bandung.
· Orang yang berasal dari Kota Jambi tidak menyukai kopi dan tidak
menyukai Jus alpukat
· Seseorang yang menyukai nasi padang ternyata tidak menyukai kopi
dan tidak menyukai teh botol
· Orang yang menyukai Bakso bukan berasal dari Balikpapan maupun
Surabaya.
· Ervan adalah mahasiswa yang bukan berasal dari Jakarta dan bukan
berasal dari Balikpapan juga.
· Mahasiswa yang menyukai kopi ternyata tidak menyukai Lumpia.

21. Makanan apakah yang disukai oleh mahasiswa yang menyukai kopi?
A. Nasi Padang

15
B. Bakso
C. Mie Ayam
D. Sate
E. Tidak dapat dipastikan

22. Mahasiswa yang berasal dari Kota Balikpapan adalah …


A. Abdul
B. Badur
C. Carfin
D. Daniel
E. Ervan

23. Mahasiswa yang berasal dari manakah yang menyukai es jeruk?


A. Jambi
B. Bandung
C. Jakarta
D. Surabaya
E. Balikpapan

Perhatikan deskripsi berikut ini untuk soal nomor 24 dan 25.


Tiga sahabat tinggal dalam satu kelompok, mereka bernama Andi, Budi, dan
Coki. Masing-masing memiliki rumah dengan ukuran yang berbeda, mobil yang
berbeda-beda warnanya, hobi yang berbeda, dan hewan peliharaan yang
berbeda pula.
- Orang yang tinggal di rumah besar memelihara anjing
- Budi hobi memancing
- Seorang dari mereka suka belajar dan tidak memelihara anjing maupun
kucing
- Orang yang hobi tidur tidak tinggal di rumah berukuran sedang
- Pemelihara kucing tidak suka tidur
- Rumah berukuran sedang dimiliki oleh Coki

24. Siapakah yang hobi belajar?


A. Andi
B. Budi
C. Coki
D. Dini
E. Tidak diketahui

25. Orang yang memiliki rumah kecil, memiliki hobi?


A. Memancing
B. Belajar
C. Bermain games

16
D. Tidur
E. Tidak dapat ditentukan

26. Dalam sebuah pertandingan renang antar RW terdapat 8 orang peserta,


mereka adalah A, B, C, D,E, F, G, dan H. Setelah pertandingan dilakukan
secara tertutup, Pak Lurah yang merupakan juri mengumumkan hasilnya. Ia
tidak mengumumkan urutan peringkat dari 1 sampai 8, (makin kecil peringkat
seseorang tentunya semakin baik peringkatnya), tetapi hanya memberikan
beberapa fakta mengenai pertandingan, yaitu sebagai berikut:
· E berada 3 peringkat di bawah B dan 4 peringkat di atas F
· Peringkat A lebih baik dari D, dan peringkat D lebih baik dari H
· Selisih peringkat A dan D sama dengan selisih peringkat D dan H
Ada berapakah banyaknya kemungkinan peringkat yang sesuai dengan fakta
di atas?
A. 0
B. 1
C. 2
D. 3
E. 4

27. Tuan dan Nyonya Tan mengundang teman-teman lama mereka ke rumah.
Tak pernah bertemu selama lebih dari 10 tahun, teman-teman mereka
terkejut melihat bahwa mereka kini telah memiliki 4 anak, masing-masing
memiliki warna kesukaan yang berbeda-beda. Nyonya Tan mengatakan
bahwa :
· Penyuka warna Biru lebih tua dari Brenda.
· Penyuka warna Kuning lebih tua dari penyuka warna Biru.
· Alfred adalah satu-satunya anak yang lebih muda dari penyuka warna
Merah
· Darius lebih tua dari penyuka warna Hijau.
· Charles lebih tua Darius.

Apakah warna yang disukai Darius?


A. Biru
B. Hijau
C. Kuning
D. Merah
E. Tidak dapat ditentukan

28. Lima orang pedagang asongan menghitung hasil penjualan dalam satu hari.
Pedagang III lebih banyak menjual dari pedagang IV, tetapi tidak melebihi
pedagang I. Penjualan pedagang II tidak melebihi pedagang V dan melebihi
pedagang I. Pedagang mana yang hasil penjualannya paling banyak?
A. Pedagang I
B. Pedagang II

17
C. Pedagang III
D. Pedagang IV
E. Pedagang V

Perhatikan deskripsi berikut ini untuk soal nomor 29 dan 30.

Ijun sedang memikirkan 7 buah bilangan ganjil berurutan. Bilangan-bilangan


tersebut adalah A,B,C,D,E,F,G (urutan alphabet belum tentu menjadi urutan
bilangannya). Diketahui juga beberapa informasi berikut ini:
· G memiliki nilai yang besarnya sama dengan nilai rata-rata 7 bilangan
tersebut ditambah 2
· A +D = B + C
· F adalah bilangan kedua terkecil
· C>B
· Di antara G dan B terdapat satu buah bilangan
· A<G

29. Bilangan yang menjadi bilangan terkecil adalah …


A. A
B. C
C. E
D. G
E. Kurang informasi

30. Bilangan yang mungkin menjadi bilangan kedua terbesar adalah …


A. C
B. D
C. E
D. F
E. G

*Akhir dari Paket 1*

18
ARITMATIKA
Materi Aritmatika ini adalah materi selanjutnya yang harus dikuasai oleh peserta
OSN Komputer. Pada dasarnya di materi ini kita akan lebih banyak belajar mengenai
berhitung. Beberapa materi di dalam aritmatika ini adalah pola bilangan, barisan
bilangan dan juga deret bilangan.

Ø Barisan Bilangan
Barisan bilangan adalah sekumpulan bilangan-bilangan yang dibentuk menurut
suatu aturan tertentu. Bilangan-bilangan yang tersusun disebut dengan suku.

Contoh :
· 1, 3, 5, 7, 9, …
· 2, 5, 10, 17, …
· 3, 7, 11, 15, …
Di matematika ada dua buah barisan bilangan yang sering dijumpai yaitu barisan
aritmatika dan barisan geometri.
· Barisan Aritmatika
Barisan aritmatika adalah sebuah barisan bilangan yang memiliki selisih
yang tetap antara dua suku yang berurutan.
= − = − =⋯= −
Contoh :
§ 1, 3, 5, 7, 9, 11, … (beda = 2)
§ 3, 8, 13, 18, 23, … (beda = 5)
Rumus barisan aritmatika yang harus diingat adalah :
= +( − )
Dimana : adalah suku ke-n, adalah suku pertama dan adalah
beda dari barisan tersebut
Contoh:
§ Tentukan suku ke 100 dari barisan bilangan: 4, 10, 16, 22, …
Jawab :
= 4 , = 100, = 10 − 4 = 16 − 10 = 22 − 16 = 6
Sehingga :
= + 99
= 4 + 99 6
= 598
Jadi suku ke 100 nya adalah 598

19
· Barisan Geometri
Barisan geometri adalah barisan bilangan yang memiliki rasio yang
konstan antara suatu suku dengan suku sebelumnya.
= = = =⋯=
Rumus barisan geometri yang harus diingat adalah:
= ∗
Dimana : adalah suku ke-n, adalah suku pertama dan adalah
rasio.
Contoh :
§ Perhatikan barisan bilangan 4, 12, 36, … Jika bilangan terakhirnya
adalah 2916, ada berapa bilangan kah di barisan tersebut?
Jawab:
= 4, =3
Sehingga: =4∗3
Jika 2916 adalah bilangan terakhirnya maka :
4∗ 3 = 2916
3 = 729
=7
Sehingga di barisan tersebut ada 7 buah bilangan.
· Barisan Aritmatika Bertingkat
Barisan aritmatika bertingkat adalah sebuah barisan bilangan dimana
beda dari suku-suku yang berurutan membentuk sebuah barisan
aritmatika bertingkat pula.

Barisan aritmatika yang sudah kita bahas sebelumnya bisa disebut


sebagai barisan aritmatika bertingkat 1.

Sehingga dapat diperumum bahwa barisan aritmatika bertingkat adalah


sebuah barisan bilangan dimana beda dari suku-suku yang berurutan
membentuk barisan aritmatika bertingkat − 1

Contoh :
1, 3, 7, 13, 21, 31, …
Barisan bilangan di atas adalah barisan aritmatika bertingkat 2.

20
Mengapa bertingkat 2?

Coba Perhatikan beda dari tiap suku yang berurutan:


1= 3−1= 2
2= 7−3= 4
3 = 13 − 7 = 6
4 = 21 − 13 = 8
Karena 1, 2, 3, 4 membentuk barisan aritmatika bertingkat 1 dengan
beda +2, maka 1, 3, 7, 13, 21, 31, … adalah barisan aritmatika bertingkat
2.

Rumus umum untuk barisan aritmatika bertingkat adalah


= + + +⋯ +
Dimana :
adalah suku ke- dan , , ,…, adalah bilangan yang harus
dicari nilainya.
Contoh Soal:
§ Tentukan suku ke-25 dari barisan bilangan berikut ini:
3, 6, 12, 21, 33, 48, …
Jawab:
Perhatikan beda dari setiap suku-suku yang berurutan.
1 =6−3 =3
2 = 12 − 6 = 6
3 = 21 − 12 = 9
4 = 33 − 21 = 12

Setelah diamati, suku-suku di atas adalah barisan aritmatika bertingkat
1.
Oleh karena itu, barisan di atas adalah barisan aritmatika bertingkat 2.

Untuk barisan aritmatika bertingkat 2, rumus suku ke- nya adalah


+ +

Ambil 3 suku pertama dari barisan bilangan tersebut lalu substitusikan


nilai n = 1, n = 2, dan n = 3 maka didapatkan
+ + = 3 … (1)
4 + 2 + = 6 … (2)
9 +3 + = 12 … (3)

Kurangi persamaan (2) dengan (1) didapatkan:


3 + = 3 … (4)

21
Kurangi persamaan (3) dengan (2) didapatkan:
5 + = 6 … (5)

Lalu kurangi persamaan (5) dengan (4) didapatkan:


2 =3
3
=
2
Substitusikan nilai ke persamaan (4), maka didapatkan nilai yaitu
3 3
= 3−3∗ = −
2 2
Substitusikan nilai dan ke persamaan (1), maka didapatkan nilai
yaitu:
3 3
=3− + =3
2 2
Sehingga didapatkan rumus suku ke-n nya adalah:
3 3
= − +3
2 2
Maka suku ke-25 nya adalah : = . 25 − . 25 + 3 =

Ø Deret Bilangan
Deret adalah jumlahan suku-suku dari suatu barisan bilangan, mulai dari suku
ke-1 hingga suku ke-i
· Deret Barisan Aritmatika
Misalkan terdapat barisan aritmatika dengan suku pertama bernilai dan
beda maka Jumlah n-suku pertama dari barisan aritmatika tersebut
adalah

= ( + )
2

= ( + + ( − 1) )
2

= ( +( − ) )
Contoh :
Berapa jumlah 100 suku pertama dari barisan aritmatika 3, 7, 11, 15, …
Jawab:
Dari barisan aritmatika tersebut kita bisa mendapatkan informasi bahwa:
= 3 dan =4

22
Sehingga jumlah 100 suku pertama dari barisan aritmatika tersebut
adalah

= (2 ∗ 3 + (100 − 1) ∗ 4)

= 20100

· Deret Barisan Geometri


Misalkan terdapat barisan geometri dengan suku pertama dan rasio ,
maka jumlah n-suku pertama dari barisan geometri tersebut adalah
( − 1)
=
−1

· Beberapa Deret Tambahan


Disini penulis mencoba menuliskan beberapa rumus dari deret bilangan
yang biasanya muncul di soal OSK dan OSP Komputer
( )
§ ∑ = 1 +2 + 3 + ⋯+ =
§ ∑ 2 = 2 + 4 + 6 + ⋯ + 2 = ( + 1)
§ ∑ 2 − 1 = 1 + 3 + 5 + ⋯+ 2 − 1 =
§ ∑ = 1 + 2 + 3 +⋯+ = ( + 1)(2 + 1)
( )
§ ∑ = 1 + 2 + 3 + ⋯+ =
Ø Materi Aritmatika Lain
Selain barisan dan deret, masih ada topik-topik lain yang berkenaan dengan
aritmatika. Namun, kebanyakan dari topik tersebut tidak memiliki materi yang
benar benar khusus dan kebanyakan berkaitan dengan aljabar yang sudah
dipelajari sejak SMP.
Tips untuk mengerjakan soal-soal bertipe aritmatika adalah pahami soal dengan
baik lalu perbanyak latihan dan teliti dalam menghitung.

23
SOAL
1. Suku ke-2018 dari barisan bilangan 4, 11, 18, 25, 32, ..dst adalah …
A. 14121
B. 14122
C. 14123
D. 14124
E. 14125

2. Ada berapa banyak bilangan pada barisan bilangan -2018, -2014, -2010, …,
2046, 2050 ?
A. 1015
B. 1016
C. 1017
D. 1018
E. 1019

3. Jika barisan bilangan berikut adalah barisan bilangan bulat positif yang
dihilangkan semua bilangan kelipatan 2 atau kelipatan 5 : 1, 3, 7, 9, 11, 13,
17, 19, … maka bilangan ke 2019 nya adalah …
A. 5043
B. 5047
C. 5049
D. 5051
E. 5053

4. Jika barisan bilangan berikut adalah barisan bilangan bulat positif yang
merupakan gabungan dari bilangan kelipatan 2 atau kelipatan 3 : 2, 3, 4, 6, 8,
9, … maka bilangan ke 2019 nya adalah …
A. 3024
B. 3026
C. 3027
D. 3028
E. 3030

Perhatikan barisan bilangan berikut ini untuk soal nomor 5 dan 6


1

4 7

10 13 16

19 22 25 28

dst…..
.

24
5. Bilangan ke-43 dari kiri pada baris ke-100 adalah …
A. 14971
B. 14973
C. 14975
D. 14977
E. 14979

6. Bilangan ke-417 dari kanan pada baris ke-1000 adalah …


A. 1500244
B. 1500247
C. 1500250
D. 1500253
E. 1500256

7. Perhatikan barisan bilangan berikut ini

2 3 4

5 6 7 8 9

……………………..

…………………………..

Berapakah bilangan ke-100 dari kiri pada baris ke-100?


A. 9801
B. 9901
C. 10000
D. 10100
E. 10101

Perhatikan barisan bilangan


berikut ini untuk menjawab soal
1, 1, 2, 1, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, …. 8 dan 9

8. Nilai dari suku ke-2019 adalah …


A. 1
B. 2
C. 3

25
D. 4
E. 5

9. Jumlah dari 2019 suku pertama barisan di atas adalah …


A. 3970
B. 3971
C. 3972
D. 3973
E. 3974

10. Perhatikan barisan bilangan berikut ini

1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 0, 1, 1, 1, 2, 1, 3, 1, 4, 1, 5, ….

Barisan bilangan di atas adalah barisan bilangan yang terbentuk dari bilangan
bulat positif berurutan mulai dari 1 yang ditulis digit per digit. Pada barisan
tersebut, suku ke-11 adalah 0 dan suku ke-15 adalah 2.
Berapakah nilai dari suku ke-2019?
A. 1
B. 3
C. 5
D. 7
E. 9

11. Pada sebuah barisan aritmatika, suku ke-25 nya adalah 91. Jumlah dari 49-
suku pertama pada barisan aritmatika tersebut adalah …
A. 4451
B. 4453
C. 4455
D. 4457
E. 4459
12. Pada sebuah barisan geometri, suku ke-4 ditambah suku ke-2 menghasilkan
nilai 260. Sedangkan jika suku ke-4 ditambah dengan suku ke-6 akan
menghasilkan nilai 6500. Berapakah jumlahan barisan dari suku ke-2 sampai
ke-6?
A. 7800
B. 7810
C. 7820
D. 7830
E. 7840

13. Tiga bilangan bulat yang jika dikalikan menghasilkan 125, ternyata
membentuk barisan geometri yang berurutan. Pada saat yang sama, ketiga

26
bilangan adalah suku pertama, kedua, dan ketujuh pada suatu deret
aritmatika. Carilah suku ke-delapan dari barisan aritmatika yang dimaksud.
A. 25
B. 29
C. 33
D. 37
E. 41

14. Diketahui terdapat 5 buah bilangan yang membentuk barisan aritmatika.


Setelah diamati lebih lanjut, ternyata bilangan ke-2, ke-3, dan ke-5
membentuk barisan geometri. Jika jumlah dari 5 buah bilangan tersebut
adalah 20190, maka bilangan ke-5 tersebut adalah …
A. 8072
B. 8074
C. 8076
D. 8078
E. 8080

15. Telah ditemukan satu spesies lebah yang aneh di tahun ke-0, di mana lebah
betina
akan melahirkan satu lebah jantan dan tetap hidup. Lebah jantan akan
melahirkan satu lebah betina dan satu lebah jantan dan kemudian mati. Jika
di tahun ke-0 diketahui hanya ada satu lebah betina, berapa banyak lebah
yang hidup setelah 16 tahun?
A. 0
B. 1
C. 1024
D. 32768
E. 65536

16. Diketahui barisan bilangan 6, 15, 28, 45, 66, …dst. Suku ke-50 dari barisan
bilangan tersebut adalah …
A. 4950
B. 5101
C. 5151
D. 5305
E. 5355

Perhatikan barisan bilangan berikut ini untuk soal nomor 17-20


-106, -74, -48, -28, -14, …, -6398,

17. Jika rumus suku ke- pada barisan di atas dapat dinyatakan dalam bentuk
+ + , maka nilai dari 2 + 5 + adalah …
A. 40
B. 45
C. 50

27
D. 55
E. 60

18. Suku ke-25 dari barisan bilangan di atas adalah …


A. -990
B. -992
C. -994
D. -996
E. -998

19. Pada barisan di atas, bilangan -2918 adalah bilangan yang menempati
urutan ke …
A. 32
B. 34
C. 36
D. 38
E. 40

20. Ada berapa bilangan pada barisan bilangan di atas?


A. 50
B. 51
C. 52
D. 53
E. 54

21. Terdapat sebuah barisan bilangan yaitu 3, 7, 13, 21, 31, … dst. Jumlah dari
50 suku pertama barisan bilangan tersebut adalah …
A. 44240
B. 44245
C. 44250
D. 44255
E. 44260

22. Pak Dengklek kini memiliki 100 orang cucu. Ia berniat untuk memberikan
uang jajan untuk mereka. Aturannya adalah, mereka akan berbaris. Lalu anak
pertama hanya akan mendapatkan 1 dollar, sedangkan anak selanjutnya
akan mendapatkan uang 3 dollar lebih banyak dari anak sebelumnya. Setelah
setengah cucu-cucunya diberikan uang jajan, ia kemudian menyadari
uangnya hampir habis. Untuk itu, selanjutnya ia akan memberikan uang jajan
pada cucunya 2 dollar lebih banyak dari anak sebelumnya. Berapakah dollar
total uang yang dikeluarkan Pak Dengklek?
A. 13675
B. 13685
C. 13695
D. 13700
E. 13735

28
23. Iwang dan Bimo sedang bermain sebut bilangan. Pada permainan ini, pemain
akan bergantian menyebutkan barisan bilangan yang banyak bilangannya
adalah lebih satu dari dari banyak bilangan yang disebutkan sebelumnya.
Mereka sepakat bahwa Iwang akan bermain pertama dan selalu
menyebutkan bilangan ganjil, sementara bimo akan selalu menyebutkan
bilangan genap. Sehingga permainan awalnya adalah iwang akan
menyebutkan 1, kemudian bimo 2, 4. Lalu iwang menyebutkan 3, 5, 7. Bimo
melanjutkan dengan menyebut 6, 8, 10, 12. Begitu seterusnya. Bilangan ke-
2019 yang disebutkan adalah …
A. 1984
B. 1986
C. 1988
D. 1990
E. 1992

24. Jumlah 10 suku pertama dari barisan 3, 12, 48, 192, …dst adalah ….
A. 1048573
B. 1048574
C. 1048575
D. 1048576
E. 1048577

25. Hasil dari 1 30 + 3 28 + 5 26 + ⋯ 29 2 adalah ….


A. 2480
B. 2470
C. 2460
D. 2450
E. 2440

26. Hasil dari 1 2 3 + 2 3 4 + 3 4 5 + ⋯ + 25 26 27 adalah …


A. 122550
B. 122650
C. 122750
D. 122850
E. 122950

27. Diketahui hasil kali umur Ani dan Budi 2 tahun yang lalu adalah 30, dan hasil
kali umur Ani dan Budi 2 tahun yang akan datang adalah 58. Berapakah
jumlah umur mereka 3 tahun yang akan datang?
A. 7
B. 10
C. 13
D. 16

29
E. 18

28. Andi setiap hari pergi ke sekolah menggunakan sepeda dengan kecepatan a
km/jam. Namun, di daerah tersebut terdapat angin yang berhembus terus
menerus dari arah rumah ke sekolah dengan kecepatan b km/jam. Angin ini
mempengaruhi kecepatan sepeda yang dikayuh oleh Andi dengan aturan
§ Bila berjalan searah angin maka kecepatan menjadi a+b km/jam
§ Bila berjalan berlawanan dengan angin maka kecepatan menjadi a-
b km/jam.
Ia membutuhkan waktu 3 jam untuk berangkat dari rumah ke sekolah,
sedangkan dalam perjalanan pulang ia membutuhkan waktu 4 jam. Apabila
tidak ada angin yang berhembus, maka berapa jam yang dibutuhkan untuk
menempuh perjalanan dari rumah ke sekolah?
A. 21/7
B. 22/7
C. 23/7
D. 24/7
E. 25/7

29. Jika hasil dari + + + + ⋯+ bisa dinyatakan dalam bentuk


∗ ∗
dimana fpb( , ) = 1, maka nilai dari − adalah …
A. 3975
B. 3977
C. 3979
D. 3941
E. 3943

30. Diberikan beberapa persamaan berikut ini:


+ + = 335
+ + = 419
+ + = 719

Nilai dari 2 − + adalah …

A. 30
B. 31
C. 32
D. 33
E. 34

30
HIMPUNAN
DAN
KOMBINATORIKA DASAR

Untuk paket 3 ini akan dibahas materi mengenai himpunan dan kombinatorika dasar.
Materi himpunan biasanya dikategorikan mudah dan selalu muncul di setiap tahun pada
OSK dan OSP. Untuk kombinatorika, kita akan lebih membahas basic nya terlebih
dahulu.

Ø HIMPUNAN
Dalam matematika, himpunan adalah sekumpulan objek-objek yang didefinisikan
dengan jelas sebagai satu kesatuan.
Contoh :
· Himpunan semua bilangan asli kurang dari 6 adalah {1, 2, 3, 4, 5}
· Himpunan semua bilangan genap lebih dari 2 dan kurang dari 100 adalah {4,
6, 8, 10, …, 98}
Beberapa istilah dalam himpunan adalah
· Himpunan Kosong
Himpunan kosong adalah himpunan yang tidak mempunyai anggota.
Biasanya ditulis Ø = {}

· Himpunan Bagian
Himpunan bagian adalah suatu himpunan yang merupakan bagian dari
himpunan lain.
Contoh :
A = {1, 2}
B = {1, 2, 6}
Maka kita bisa sebut bahwa himpunan A adalah himpunan bagian dari B.
Biasanya disimbolkan dengan ⊂. Dalam kasus di atas, maka A ⊂ B
Banyak himpunan bagian dengan anggota adalah

· Semesta
Semesta adalah sebuah himpunan yang anggotanya adalah semua
himpunan yang mungkin

· Kardinalitas
Kardinalitas adalah nama lain dari banyaknya anggota pada suatu
himpunan.
Dinotasikan dengan ||

31
· Keanggotaan Himpunan
Operator untuk menyatakan suatu objek merupakan sebuah anggota dari
himpunan.

· Gabungan
Dua himpunan atau lebih yang digabungkan bersama-sama. Operasi
gabungan A ∪ B setara dengan A atau B, dan anggota himpunannya adalah
semua anggota yang termasuk himpunan A ataupun B.
A ∪ B = {x | x A∪ x B}

· Irisan
Operasi irisan A ∩ B setara dengan A dan B. Irisan merupakan himpunan
baru yang anggotanya terdiri dari anggota yang dimiliki bersama antara dua
atau lebih himpunan yang terhubung. Jika A ∩ B = ∅, maka A dan B dapat
dikatakan disjoint (terpisah).
A ∩ B = {x | x A ∩ x B}

· Komplemen
Operasi pelengkap setara dengan bukan A atau A'. Operasi komplemen
merupakan operasi yang anggotanya terdiri dari anggota di luar himpunan
tersebut.

Terdapat beberapa hukum yang berlaku pada himpunan juga yaitu:


A. Hukum komutatif
· p∩q≡q∩p
· p∪q≡q∪p
B. Hukum asosiatif
· (p ∩ q) ∩ r ≡ p ∩ (q ∩ r)
· (p ∪ q) ∪ r ≡ p ∪ (q ∪ r)
C. Hukum distributif
· p ∩ (q ∪ r) ≡ (p ∩ q) ∪ (p ∩ r)
· p ∪ (q ∩ r) ≡ (p ∪ q) ∩ (p ∪ r)
D. Hukum identitas
· p∩S≡p
· p∪∅≡p
E. Hukum ikatan
· p∩∅≡∅
· p∪S≡S
F. Hukum negasi

32
· p ∩ p' ≡ ∅
· p ∪ p' ≡ S
G. Hukum negasi ganda
· (p')' ≡ p
H. Hukum idempotent
· p∩p≡p
· p∪p≡p
I. Hukum De Morgan
· (p ∩ q)' ≡ p' ∪ q'
· (p ∪ q)' ≡ p' ∩ q'
J. Hukum penyerapan
· p A (p ∪ q) ≡ p
· p ∪ (p ∩ q) ≡ p
K. Negasi S dan ∅
· S' ≡ ∅
· ∅' ≡ S

Selain hukum-hukum di atas, terdapat juga suatu prinsip yang cukup terkenal untuk
mengerjakan soal-soal bertipe himpunan. Prinsip tersebut adalah Prinsip Inklusi
dan Eksklusi (PIE)
· Prinsip Inklusi&Eksklusi untuk 2 himpunan:
| A ∪ B | = |A| + |B| - |A∩B|
· Prinsip Inklusi&Eksklusi untuk 3 himpunan:
| A ∪ B ∪ C | = |A| + |B| + |C| - |A ∩ B| - |A ∩ C| - |B ∩ C| + |A ∩ B ∩ C|
Prinsip Inklusi & Eksklusi ini berlaku juga untuk himpunan.

Ø KOMBINATORIKA DASAR
Secara matematika, kombinatorika adalah cabang matematika mengenai objek
khusus. Aspek-aspek kombinatorika meliputi menghitung objek yang memenuhi
kriteria tertentu, menentukan apakah kriteria dipenuhi, menganalisis atau mencari
objek yang memenuhi kriteria, menentukan objek "terbesar", "terkecil", atau yang
"optimal", dan menentukan struktur suatu objek.

Secara bahasa mudahnya, kombinatorika adalah ilmu matematika yang mempelajari


tentang menghitung banyaknya cara atau banyak kemungkinan dari sesuatu.

· Aturan Penjumlahan
Jika suatu kejadian x bisa dipecah menjadi N buah kejadian yang saling lepas /
tidak beririsan (misal maka banyaknya cara untuk menyelesaikan
kejadian x adalah

33
Contoh :
Dari kota A ke kota B ada beberapa jenis angkutan yang dapat digunakan. Ada
Ø 2 travel,
Ø 2 kapal laut dan
Ø 1 pesawat terbang yang dapat dipilih.

Ada berapa total cara berbeda untuk berangkat dari kota A ke kota B?
Jawab :
Terdapat 2+2+1 = 5 cara berbeda

· Aturan Perkalian
Jika beberapa kejadian merupakan kejadian yang dikerjakan dengan berurutan.
Ø Kejadian pertama diselesaikan dengan cara
Ø Diikuti kejadian kedua dengan cara
Ø Diikuti kejadian ketiga cara,
Ø . . . , dan seterusnya

Maka keseluruhan kejadian dalam urutan demikian dapat diselesaikan dengan


. . . cara.

Contoh :

Di suatu kelas, terdapat 15 orang siswa laki-laki dan juga 10 orang siswa
perempuan. Jika Pak Guru ingin memilih 2 orang dari kelas tersebut dengan rincian 1
laki-laki dan 1 perempuan, maka banyaknya kemungkinan Pak Guru memilih ada
sebanyak … cara

Jawab:
Karena Pak Guru ingin memilih 1 laki-laki dan 1 perempuan, maka banyaknya
kemungkinan adalah 15 * 10 = 150

· Faktorial
Untuk setiap bilangan asli , faktorial dari n atau n factorial didefinisikan sebagai:
( (
Dengan

34
· Kombinasi
Istilah kombinasi dalam matematika kombinatorik berarti himpunan objek yang tidak
mementingkan urutan. Kombinasi unsur dari buah objek tanpa memperhatikan
urutannya adalah

(
Contoh :
Irfan memiliki 4 buah pulpen berwarna merah, putih, biru, dan kuning. Jika Irfan
ingin mengambil 2 buah pulpen, maka banyaknya cara Irfan agar bisa mengambil
pulpen adalah …
Jawab
Karena Irfan memiliki 4 buah pulpen, maka jawabannya adalah

(
buah cara.
Ket: Mengapa pakai kombinasi? Karena pengambilan disini tidak memperhatikan
urutan. Sebagai contoh kita mengambil warna merah lalu putih dengan sebaliknya,
akan tetap diitung hal yang sama, karena sama-sama mengambil warna putih dan
merah.

· Permutasi
Permutasi adalah penyusunan kembali suatu kumpulan objek dalam urutan yang
berbeda dari urutan yang semula. Permutasi k unsur yang disusun dari n unsur
yang tersedia (setiap unsurnya berlainan) dengan memperhatikan urutannya
dirumuskan dengan

(
Contoh:
Akan dibentuk sebuah bilangan 2 digit dari angka-angka {1,2,3,4}. Ada berapa
banyak kemungkinan bilangan yang bisa dibentuk?

Jawab:

(
Yaitu :
12 21
13 31
14 41
23 32
24 42
34 43

35
SOAL

1. Dari 150 mahasiswa STEI 2017, didapatkan informasi bahwa 117 orang
menyukai mata kuliah kalkulus, 49 orang menyukai mata kuliah kimia, dan 29
orang tidak menyukai keduanya. Banyaknya mahasiswa yang menyukai mata
kuliah kalkulus dan kimia adalah …
A. 41
B. 42
C. 43
D. 44
E. 45

2. Banyaknya bilangan bulat positif yang kurang dari 2018 dan habis dibagi 2 atau
7 adalah …
A. 1150
B. 1151
C. 1152
D. 1153
E. 1154

3. Jumlah semua bilangan bulat positif yang kurang dari 1000 dan habis dibagi 2
atau 3 adalah …
A. 333161
B. 333163
C. 333165
D. 333167
E. 333169

4. Pada sebuah klub olahraga diketahui bahwa 10 orang menyukai tenis, 15 orang
menyukai tenis meja, 12 orang menyukai bulutangkis, 5 orang menyukai tenis
dan tenis meja, 4 orang menyukai tenis dan bulutangkis, 3 orang menyukai tenis
meja dan bulutangkis dan 2 orang menyukai ketiga olahraga tersebut. Berapa
banyak anggota klub yang menyukai sedikitnya satu dari ketiga cabang
olahraga ini?
A. 27
B. 28
C. 29
D. 30
E. 31

36
Perhatikan deskripsi berikut ini untuk menjawab soal nomor 5 sd. 6

Pada suatu sekolah di Negeri Antah berantah, diketahui bahwa siswa yang
menyukai kalkulus ada 68 orang, yang menyukai fisika ada 69 orang dan yang
menyukai kimia ada 74 orang. Diketahui pula bahwa 19 orang menyukai ketiga
mata pelajaran tersebut dan setiap siswa pasti menyukai minimal salah satu dari
ketiga pelajaran tersebut.

5. Jika yang menyukai hanya satu pelajaran ada 52 orang, maka yang menyukai
tepat dua mata pelajaran ada … orang
A. 49
B. 50
C. 51
D. 52
E. 53

6. Jika yang menyukai kalkulus dan fisika ada 36 orang dan yang menyukai mata
pelajaran fisika dan kimia ada 33 orang, maka selisih dari banyaknya siswa
yang hanya suka kalkulus dan yang hanya suka kimia adalah … orang
A. 8
B. 9
C. 10
D. 11
E. 12

7. Dari 2018 bilangan 1 sampai 2018, ada berapa bilangan yang habis dibagi 2
dan 3 tetapi tidak habis dibagi 5?
A. 267
B. 268
C. 269
D. 270
E. 271

Perhatikan deskripsi berikut ini untuk soal nomor 8 dan 9.


Dari 100 orang peserta OSN komputer, diketahui 40 orang menyukai soal
kombinatorika, 40 orang suka soal teori bilangan, dan 48 orang suka teka-teki
silang. Diketahui pula 4 orang suka ketiganya.

37
8. Jika peserta yang hanya menyukai dengan satu jenis soal saja ada 50 orang,
berapa orang yang hanya suka dengan dua jenis soal ?
A. 29
B. 30
C. 31
D. 32
E. 33

9. Berdasarkan jawaban soal sebelumnya, jika yang hanya menyukai soal


kombinatorika adalah 14 orang, berapa orang yang suka kombinatorika dan
teori bilangan, atau suka kombinatorika dan teka-teki silang, namun tidak
ketiganya??
A. 20
B. 21
C. 22
D. 23
E. 24

10. Berapa banyak bilangan bulat di antara 300 dan 700 (inklusif) yang dapat dibagi
3 dan 4 tetapi tidak dapat dibagi 7?
A. 26
B. 27
C. 28
D. 29
E. 30
Perhatikan deskripsi berikut ini untuk soal nomor 11 sd 13

Suatu kelas terdiri atas 100 siswa. Diketahui terdapat 54 anak suka makan ayam
geprek, 45 anak suka makan ayam gulai, 70 anak suka makan ayam penyet, dan
8 anak tidak suka ketiga-tiganya

11. Jika terdapat 10 anak yang suka ketiga-tiganya, maka berapa banyak siswa
yang suka makan lebih dari 1 jenis makanan?
A. 57
B. 67
C. 77
D. 87
E. 97
12. Jika terdapat 83 anak yang suka hanya dengan dua jenis makanan, maka
berapa siswa yang suka makan hanya 1 jenis makanan atau ketiga-tiganya?
A. 7
B. 9
C. 17
D. 19

38
E. 21

13. Banyaknya bilangan bulat positif kurang dari 2019 yang habis dibagi 2 atau 3
tetapi tidak habis dibagi 7 adalah …
A. 1153
B. 1155
C. 1157
D. 1159
E. 1161

14. Jumlah bilangan bulat positif yang tidak lebih dari 500 dan memenuhi sifat habis
dibagi 2 atau 3 atau 5 adalah …
A. 91580
B. 91582
C. 91850
D. 91825
E. 91852

15. Banyaknya bilangan bulat positif yang tidak lebih dari 2019 dan tidak habis
dibagi 2, 3 maupun 5 adalah …
A. 534
B. 535
C. 536
D. 537
E. 538

16. Pak Dengklek menyebut sebuah bilangan 4 digit “perfect” jika digit pertama dan
terakhir dari bilangan tersebut adalah ganjil sementara digit yang lainnya genap.
Ada berapa banyak bilangan 4 digit “perfect” ini?
A. 320
B. 400
C. 500
D. 625
E.1000

17. Banyaknya cara menyusun kata “KOPIABC” jika huruf pertama dan terakhir
harus konsonan adalah …
A. 1000
B. 1200
C. 1440

39
D. 1920
E. 5040

18. Suatu kata dapat dikatakan cantik apabila tersusun atas 3 buah karakter yang
mana huruf pertama kata tersebut sama dengan huruf kedua kata tersebut, atau
huruf kedua kata tersebut sama dengan huruf ketiga kata tersebut. Berapa
banyak kata cantik yang mungkin?
A. 650
B. 676
C. 1300
D. 1326
E. 1352
19. Dari angka-angka : 1, 2, 3, 4, 5, 7, 8 akan disusun suatu bilangan ganjil yang
terdiri dari 3 angka. Jika bilangan itu tidak memuat angka yang sama dan
kurang dari 500, maka ada berapa banyaknya bilangan yang dapat dibentuk?
A. 50
B. 60
C. 70
D. 80
E. 90

20. Badur diminta untuk menebak sebuah password hp dari Irfan. Namun, Irfan
hanya memberikan informasi bahwa password tersebut terdiri dari 2 sampai 5
digit dan pasti tidak memiliki digit 0. Banyaknya kemungkinan password yang
ditebak oleh Badur adalah …
A. 59049
B. 7371
C. 66420
D. 111100
E. 66339

21. Ada berapa banyak himpunan X yang memenuhi {1, 2} ⊆ X ⊆ {1, 2, 3, 4, 5} ?


*⊆ menunjukan himpunan bagian
A. 6
B. 7
C. 8
D. 9
E. 10

Perhatikan deskripsi berikut ini untuk soal nomor 21 dan 22

Irfan memiliki 13 buah pulpen warna hitam, 6 buah pulpen merah,


dan 7 buah pulpen warna biru

40
22. Jika Irfan ingin mengambil 3 buah pulpen dengan dua warna yang berbeda,
maka banyaknya kemungkinan Irfan mengambil pulpen tersebut adalah …
A. 1713
B. 1714
C.1715
D.1716
E.1717

23. Jika Irfan ingin mengambil 2 buah pulpen dengan syarat maksimal tiga warna
berbeda, maka banyaknya kemungkinan Irfan mengambil pulpen tersebut
adalah …
A. 320
B. 325
C. 330
D. 335
E. 340

24. Di suatu kelas di SMA Harapan, terdapat 17 orang siswa laki-laki dan 13 orang
siswa perempuan. Jika kelas tersebut ingin mengirimkan 4 orang perwakilan
untuk mengikuti lomba osn dengan syarat minimal mengirimkan 1 orang siswa
perempuan, maka banyaknya kemungkinan orang yang dikirim ke lomba osn
tersebut adalah …

A. 25025
B. 25125
C. 25225
D. 25325
E. 25425

25. Dalam suatu pesta yang dihadiri oleh 20 pasang suami-istri, mereka saling
berjabat tangan. Diketahui bahwa orang yang berbeda jenis kelamin tidak akan
berjabat tangan kecuali terhadap pasangannya sendiri. Berapa banyak jabat
tangan yang terjadi dalam pesta tersebut?
A. 400
B. 380
C. 360
D. 800
E. 820

26. Pak Dengklek, Pak Ganesh, dan 5 orang temannya akan menonton film di
Bioskop. Mereka bertujuh akan duduk di kursi panjang untuk 7 orang yang diberi
nomor 1 sampai 7. Berapa banyak cara mereka bertujuh duduk sehingga Pak
Dengklek dan Pak Ganesh selalu duduk berdampingan?
A. 720
B. 1000

41
C. 1440
D. 2800
E. 3600

27. Pak Dengklek memiliki 100 buah bola yang diberi nomor 1, 2, 3, …, 100. Lalu,
Pak Dengklek akan mengambil 3 buah bola yang akan diberikan kepada
Ganesh dengan syarat jumlah nomor dari ketiga bola tersebut habis dibagi 3.
Berapa banyaknya Pak Dengklek memilih 3 bola tersebut?
A. 53921
B. 53922
C. 53923
D. 53924
E. 53925

28. Pak Eddy mencoba membagi 6 orang siswa menjadi 2 kelompok yang masing-
masing beranggota tiga orang. Berapa banyakkah cara membentuk kedua
kelompok ini ?
A. 10
B. 15
C. 20
D. 25
E. 30

29. 6 orang bersaudara masing-masing memilih sebuah bilangan berbeda diantara


{0,1,2,3,…,9}. Si sulung mengalah dengan selalu memilih bilangan paling kecil
diantara yang lain sementara si bungsu yang manja selalu memilih bilangan
yang paling besar diantara yang lain. Ada berapa cara keenam saudara tersebut
memilih 6 bilangan?
A. 5030
B. 5040
C. 5050
D. 5060
E. 5070

30. Berapa banyakkah bilangan terdiri dari 7 digit berbeda yang jika dilihat dari kiri
ke kanan maka digitnya selalu naik? Contoh bilangan tersebut adalah :
1234567, 1356789, 2345789, 3456789, 1235678.
Ket: Digit 0 tidak diperbolehkan terletak pada digit pertama.
A. 36
B. 37
C. 38
D. 39
E. 40

42
KOMBINATORIKA LANJUTAN
DAN TEORI BILANGAN DASAR

Pada paket 4 ini, akan dibahas lebih lanjut materi mengenai kombinatorika dan juga
akan ada pembahasan mengenai teori bilangan. Dua materi ini adalah materi wajib
lain yang harus dikuasai oleh semua peserta yang mengikuti OSK dan OSP.

Ø Kombinatorika Lanjutan
Pada paket sebelumnya sudah dijelaskan materi mengenai dasar-dasar
kombinatorika, kombinasi dan permutasi. Pada pembahasan kali ini, akan
dijelaskan beberapa topik kelanjutan dari materi yang sudah dijelaskan tersebut.

· Permutasi dengan Objek Identik


Pada pembahasan sebelumnya, sudah dijelaskan materi permutasi dengan
objek yang unik. Sekarang, bagaimana jika objek-objek tersebut tidak unik
dan ada beberapa objek yang sama?

Tentunya banyak permutasi dengan objek identik tersebut tidak akan


sebanyak saat objeknya berbeda. Secara umum, permutasi objek dengan
beberapa objek yang identik adalah

Dengan adalah banyak dari masing-masing objek yang


identik.

Contoh :
Ada berapa banyak permutasi dari kata “BIOLOGI” ?

Jawab:
Karena terdapat 2 huruf O, 2 huruf I, dan sisanya adalah masing-masing 1
huruf dari B, L, dan G. Maka banyaknya permutasi adalah

· Permutasi Siklis
Jika ada orang yang sedang duduk dalam meja/susunan melingkar, maka
banyaknya cara orang tersebut duduk adalah ( )

· Kombinasi n objek identik ke r Tempat.


Misalkan terdapat n buah bola identik dan r buah kotak. Banyaknya cara
menempatkan n buah bola ke dalam r kotak tersebut adalah sama dengan
mencari banyaknya kemungkinan . Dimana nilai

43
Solusinya ada sebanyak
Soal-soal dengan tipe seperti ini lumayan sering keluar di OSK dan OSP.
Oleh karena itu, diwajibkan untuk menguasainya.

Soal ini juga bisa dibuat variasi seperti soal berikut.

Contoh Soal:
Pak Ganesh memiliki 10 buah koin identik yang akan dibagikan kepada 5
orang cucunya. Ada berapa cara pembagian yang mungkin jika setiap
cucunya dipastikan mendapatkan minimal 1 buah koin?

Jawab:
Soal ini sama dengan mencari banyaknya solusi dari :
dimana .

Perhatikan bahwa, karena , maka kita bisa menuliskan


nilai:

Disini sudah pasti bisa dipastikan bahwa asalkan


. Oleh karena itu, banyaknya solusi dari
dimana .
Akan ekivalen dengan banyaknya solusi dari
dimana .
Banyaknya solusi : cara

Variasi-variasi lain dapat dikerjakan dengan cara yang mirip seperti di atas.
Prinsip inklusi-eksklusi juga dapat digunakan untuk membantu menyelesaikan
soal-soal variasi yang mirip contoh di atas.

· Derangement
Derangement adalah sebuah permutasi buah objek sehingga tiap masing-
masing objek tidak menempati posisi aslinya.
Misal terdapat sebuah himpunan A = {1, 2, 3}
Derangement dari himpunan A tersebut adalah {2, 3, 1}, {3, 1, 2}.
Ket : Pada masing-masing permutasi tersebut jelas bahwa 1 tidak menempati
urutan pertama, 2 tidak menempati urutan kedua,dan 3 tidak menempati
urutan ketiga.

44
Rumus rekursi dari derangement
Misal d(n) menyatakan banyaknya derangement dengan n anggota, maka
akan terdapat sebuah relasi yaitu :

d(n) = (n-1)(d(n-1)+d(n-2))

dimana d(1) = 0, dan d(2) = 1.

· Peluang
Peluang adalah materi lain yang seringkali muncul di soal-soal OSK dan
OSP. Peluang/probabilitas adalah cara untuk mengungkapkan pengetahuan
atau kepercayaan bahwa suatu kejadian akan berlaku atau telah terjadi.

Probabilitas dari suatu kejadian adalah angka yang menunjukan kemungkinan


terjadinya suatu kejadian. Nilai dari peluang berkisar di antara 0 dan 1.
Peluang dari suatu kejadian A didefinisikan sebagai
( )
( ) , dimana ( ) adalah banyak kemungkinan A bisa terjadi,
( )
sedangkan ( ) adalah banyak kemungkinan (kejadian A dan kejadian selain
A) yang bisa terjadi.

Contoh Soal:

Andi memiliki 6 buah bola yang terdiri dari 2 bola berwarna merah dan 4 bola
berwarna biru. Jika Budi ingin mengambil 2 bola secara acak, berapa peluang
budi mendapatkan bola dengan warna yang sama?

Jawaban:
Misalkan adalah kejadian berupa Budi mendapatkan 2 buah bola dengan
warna yang sama, maka:
§ ( ) (Budi mendapat 2 bola merah) + (Budi mendapat 2 bola biru)
=

§ ( )
Sehingga peluang dari Budi mendapatkan 2 buah bola sama adalah
( )
=
( )

Prinsip inklusi-eksklusi yang sudah dipelajari di materi himpunan juga berlaku


untuk peluang.

45
· Pigeonhole Principle (PHP)
Apabila terdapat ekor burung dan buah sangkar lalu burung tersebut
akan dibagikan ke buah sarang tersebut, maka dipastikan akan terdapat
setidaknya 1 sangkar yang diisi oleh minimal 2 ekor burung.

Contoh Soal:

Pak Ganesh ingin berbagi coklat kepada cucu-cucunya. Apabila cucu Pak
Ganesh berjumlah 20 orang, berapa coklat minimal yang dibutuhkan pak
Ganesh sehingga dijamin setidaknya 1 orang cucunya mendapatkan 5
coklat?

Jawab :
Kemungkinan terburuk yang menggagalkan syarat yang diminta adalah ketika
semua cucu pak Ganesh mendapatkan 4 buah coklat. (Total coklat semuanya
= 20 * 4 = 80)

Ketika ditambah 1 coklat lagi, maka dipastikan akan ada minimal 1 orang
cucunya yang mendapatkan 5 (4 + 1) coklat.

Jadi coklat minimal yang dibutuhkan Pak Ganesh agar menjamin setidaknya
1 orang cucunya mendapatkan 5 coklat adalah 81 coklat.

Ø Teori Bilangan Dasar


Teori bilangan adalah salah satu materi yang penting di dalam ilmu komputer.
Banyak sekali persoalan-persoalan yang dapat diselesaikan dengan teori
bilangan. Tidak hanya di OSK dan OSP, teori bilangan ini termasuk juga materi
dalam silabus yang diujikan di OSN. Pada pembahasan kali ini, kita akan
membahas dasar-dasar di teori bilangan.
· Bilangan Bulat
Pada dasarnya semua bilangan yang ada di dunia ini adalah bilangan riil dan
bilangan imajiner. Di dalam bilangan real sendiri ada bilangan rasional dan
irasional. Bilangan bulat adalah bagian dari bilangan rasional.

Teori bilangan yang dipakai disini umumnya akan membahas tentang


bilangan bulat. Di dalam bilangan bulat sendiri ada bilangan cacah dan
negatif. Dan di dalam bilangan cacah terdapat bilangan asli dan nol.

Secara singkat,
Bilangan bulat * +
Bilangan Negatif * +
Bilangan Cacah * +

46
Bilangan Asli * +

· Keterbagian
Suatu bilangan dikatakan membagi bilangan , jika terdapat bilangan
sehingga . membagi biasa disimbolkan dengan
Contoh :
§ 2 membagi 8
§ 13 membagi 143

· Faktor Bilangan
Misalkan adalah suatu bilangan yang membagi bilangan , maka kita bisa
katakan bahwa adalah faktor dari
Contoh :
Faktor dari 14 adalah 1, 2, 7, dan 14

· Bilangan Prima
Bilangan prima adalah bilangan asli yang hanya memiliki 2 buah faktor, yaitu
1 dan dirinya sendiri.
Contoh bilangan prima adalah 2, 5, 97, 43, dll

· Bilangan Komposit
Bilangan komposit adalah bilangan asli selain bilangan prima.
Contoh bilangan komposit adalah 4, 20, 91, 189, dll

· Faktorisasi Prima
Semua bilangan asli dapat kita tulis menjadi hasil kali dari faktor prima
penyusunnya.
Sebagai contoh :
§
§
§

· Banyak Faktor
Salah satu kegunaan dari faktorisasi prima adalah untuk mencari banyak
faktor.

Misalkan dapat dinyatakan menjadi dimana


adalah bilangan prima dan . Maka banyak
faktor dari adalah
( )( )( ) ( )
Contoh:

Maka, banyak faktor dari 12 adalah ( )( )

47
· Jumlah Faktor
Kegunaan lain dari faktorisasi prima adalah untuk mencari jumlah faktor.

Misalkan dapat dinyatakan menjadi dimana


adalah bilangan prima dan . Maka jumlah
faktor dari adalah
( )( ) ( )

Contoh :

Jumlah faktor dari 12 adalah ( )( )


Sesuai karena jumlah dari

· Faktor Persekutuan Terbesar (FPB)


Faktor persekutuan terbesar dari dua buah bilangan bulat dan adalah
bilangan bulat terbesar yang sama-sama membagi habis dan .

Contoh :
( ) , karena , dan tidak ada bilangan yang lebih
besar dari yang membagi 28 dan 24 sekaligus.

Dua buah bilangan bulat dan dikatatakan relatif prima jika ( )

· Kelipatan Persekutuan Terkecil


Kelipatan persekutuan terkecil dari dua buah bilangan dan adalah
bilangan terkecil yang merupakan kelipatan dari dan juga kelipatan dari
Contoh
§ ( )
§ ( )

· Hubungan FPB dengan KPK


Bila terdapat buah bilangan dan , maka bilangan-bilangan tersebut akan
memenuhi persamaan:
( )
( )

48
SOAL

1. Berapa banyaknya cara mempermutasikan kata “MISSISIPI” ?


A. 2400
B. 2420
C. 2500
D. 2520
E. 3000

2. Berapa banyaknya cara mengubah susunan kata “MINUMAIR”, jika huruf N


dan R harus saling berdampingan?
A. 1000
B. 1260
C. 2000
D. 2520
E. 3000

3. Pak Ganesh beserta 8 orang temannya sedang duduk dalam meja bundar.
Banyaknya cara mereka duduk adalah …
A. 720
B. 5040
C. 40320
D. 362880
E. 3628800

4. Andi, Budi, dan 5 orang temannya sedang duduk dalam meja Bundar.
Banyaknya cara mereka bertujuh duduk dengan syarat Andi dan Budi
berdampingan adalah …
A. 60
B. 100
C. 120
D. 200
E. 240

5. Andi, Budi, dan 5 orang temannya sedang duduk dalam meja Bundar.
Banyaknya cara mereka bertujuh duduk dengan syarat Andi dan Budi tidak
boleh duduk berdampingan adalah …
A. 120
B. 240
C. 480
D. 960
E. 1920

6. Berapa banyak kemungkinan solusi

49
Dengan syarat ?

A. 282
B. 283
C. 284
D. 285
E. 286

7. Banyaknya kemungkinan solusi dari persamaan

Dengan , , adalah ….
A. 2
B. 3
C. 4
D. 5
E. 6

8. Irfan memiliki 7 pasang kaos kaki yang diberi nomor 1 hingga 7. Ada berapa
cara Irfan memasang kaos kaki nya tersebut sehingga kaos kaki sebelah kiri
dan kanannya tidak memiliki nomor yang sama?
A. 265
B. 720
C. 1854
D. 2024
E. 5040

9. Pak Dengklek memiliki 12 permen identik di kantung celananya. Jika Pak


Dengklek akan membagikan permen-permen tersebut kepada 3 orang
anaknya dan jumlah permen yang diterima masing-masing anaknya tidak
boleh lebih dari 7 permen, banyaknya cara membagikan permen tersebut ada

A. 42
B. 43
C. 44
D. 45
E. 46
10. Suatu susunan 10-angka 0,1,2,3,4,5,6,7,8,9 dikatakan susunan cantik jika
memenuhi tiga aturan sebagai berikut:
o Jika yang dibaca dari dari kiri ke kanan hanya angka 0, 1, 2, 3, 4
membentuk barisan naik
o Jika yang dibaca dari kiri ke kanan hanya angka 5, 6, 7, 8, 9
membentuk barisan turun, dan
o Angka 0 bukan pada posisi pertama.

50
Sebagai contoh, 9807123654 adalah susunan cantik. Berapa banyak-kah
susunan cantik tersebut?
A. 120
B. 122
C. 124
D. 126
E. 128
11. Di kampus Arkavidia terdapat 4 orang yang ahli dalam CTF, 4 orang dalam
CP dan 4 orang dalam data mining. Jika rektor ingin mengirim tim berisi 9
orang dimana di dalam tim tersebut harus terdapat minimal satu orang dari
masing-masing keahlian yang disebutkan tadi. Ada berapa kombinasi tim
yang dapat dibentuk?
A. 200
B. 210
C. 215
D. 220
E. 225

12. Di suatu tas terdapat 15 buah jeruk bali. 6 diantara nya sudah busuk
sedangkan yang lainnya masih segar. Apabila Badur mengambil 4 buah jeruk
secara acak, maka peluang Badur tepat mendapatkan 2 buah jeruk busuk
adalah …
A.
B.
C.
D.
E.

13. Di suatu kelas terdapat 7 orang siswa laki-laki dan 9 orang siswa perempuan.
Wali kelas dari kelas tersebut ingin memilih 5 orang di kelas tersebut untuk
mengikuti lomba cerdas cermat antar kelas. Peluang terpilihnya minimal 1
perempuan dari 5 orang tersebut adalah …
A.
B.
C.
D.
E.

14. Diambil n buah bilangan dari himpunan 2008 bilangan {1, 2, 3, …, 2008}. Nilai
n minimal sehingga pasti akan didapat dua bilangan asli berbeda di antaranya

51
yang memenuhi penjumlahan kedua bilangan tersebut habis dibagi 8 adalah

A. 755
B. 756
C. 757
D. 758
E. 759

15. Banyaknya bilangan prima yang kurang dari 100 adalah ..


A. 24
B. 25
C. 26
D. 27
E. 28

16. Banyaknya faktor positif dari bilangan 13230 adalah …


A. 12
B. 24
C. 36
D. 48
E. 60

17. Banyaknya faktor positif dari bilangan 360360 yang merupakan kelipatan 10
adalah …
A. 12
B. 24
C. 48
D. 60
E. 72

18. dan adalah bilangan prima dan . Jika , maka nilai


dari
adalah …
A. 2001
B. 2002
C. 2003
D. 2004
E. 2005

19. Berapakah hasil perkalian dari semua bilangan bulat positif yang habis
membagi 100 ?
A. 10.000
B. 100.000
C. 100.000.000
D. 1.000.000.000
E. 10.000.000.000
n 44
20. Bilangan n terbesar sehingga 8 membagi 44 adalah …

52
A. 25
B. 26
C. 27
D. 28
E. 29

21. Jumlah faktor positif dari 360360 adalah …


A. 1572480
B. 1572386
C. 1572384
D. 1572382
E. 1572380

22. Nilai terbesar sehingga membagi adalah …


A. 500
B. 501
C. 502
D. 503
E. 504

23. Jumlah dua bilangan asli sama dengan 52 sedangkan kelipatan persekutuan
terkecilnya sama dengan 168. Selisih dari dua bilangan asli tersebut adalah

A. 1
B. 2
C. 3
D. 4
E. 5

24. Pak Ganesh memiliki 2018 buah lampu dan 2018 tombol. Setiap saklar dan
lampu tersebut diberi nomor secara terurut dari nomor 1 hingga 2018.
Diketahui bahwa saklar dengan nomor X terhubung dengan lampu dengan
nomor kelipatan X (Contoh : saklar nomor 4 terhubung dengan lampu nomor
4, 8, 12, …, 2016). Apabila lampu dalam keadaan mati dan tombol ditekan,
maka lampu tersebut akan menyala. Begitu pula apabila lampu dalam
keadaan nyala dan tombol ditekan, maka lampu tersebut akan mati. Diketahui
bahwa semua lampu masih dalam keadaan mati kemudian Pak Ganesh
menekan semua saklar yang ada. Berapa banyak lampu yang menyala pada
akhirnya?
A. 0
B. 1
C. 44
D. 45
E. 2017

25. Nilai dari ∑ ( ) adalah …


A. 5040
B. 5041

53
C. 5042
D. 5043
E. 5044

26. Diketahui bahwa ( ) dan ( ) . Banyaknya


kemungkinan pasangan ( ) ada …
A. 1
B. 2
C. 3
D. 4
E. 5

27. Dua buah bilangan (a, b) dikatakan relatif prima jika FPB(a, b) = 1. Jika a dan
b adalah bilangan bulat positif kurang dari sama dengan 10, ada berapa
banyak kemungkinan pasangan (a, b) yang relatif prima?
A. 61
B. 62
C. 63
D. 64
E. 65

28. Banyak faktor positif dari 1200 yang merupakan kelipatan 6 atau kelipatan 5
adalah …
A. 21
B. 22
C. 23
D. 24
E. 25

29. Berapakah banyak faktor dari 19800 yang juga merupakan faktor dari
11340?
A. 14
B. 16
C. 18
D. 20
E. 22

30. Berapa banyak angka 0 berurutan di akhir bilangan 1000! (10500, terdapat 2
angka 0 di akhir bilangan) ?
A. 248
B. 249
C. 250
D. 251
E. 252

54
TEORI BILANGAN LANJUT DAN
DASAR PEMROGRAMAN #1

Ø Teori Bilangan Lanjut


Pada paket sebelumnya, kita sudah mempelajari tentang dasar-dasar dari teori
bilangan. Pada materi kali ini, akan dibahas beberapa teknik khusus dan teorema
yang digunakan untuk menyelesaikan soal-soal bertipe teori bilangan.

§ Modulo
Modulo adalah operator yang menghasilkan nilai sisa dari pembagian 2 buah
bilangan bulat. Contoh 9 bersisa 1 ketika dibagi 4, maka kita bisa katakan
bahwa .

Secara umum, misalkan terdapat sebuah bilangan bulat dan bilangan bulat
, operasi memberikan sisa jika dibagi dengan .

Secara definisi, , jika ada suatu bilangan sehingga ,


dengan

Beberapa sifat tentang modulo:


§ , jika habis membagi .
dan ini dikatakan kongruen
Jika dan c adalah sembaran bilangan bulat, maka:
§ ( ) ( )
§ ( ) ( )
§
§ , dengan adalah suatu bilangan bulat non-
negatif
Contoh :
Berapakah nilai ( )
Jawab:
Perhatikan bahwa , oleh karena itu
( ) ( ( ) )
( ) ( )
Sehingga nilai dari ( ) adalah 3

§ Beberapa Teorema yang Berkaitan dengan Modulo


Teorema yang seringkali dipakai untuk menyelesaikan persamalahan modulo
di antara lain:

55
§ Fermat‟s Little Theorem
Misalkan terdapat sebuah bilangan bulat dan bilangan prima , jika
, maka berlaku .

Contoh :
a = 2, p = 7, maka

§ Euler‟s Theorem
Jika dan relatif prima, maka berlaku ( ) .
Dimana ( ) menyatakan banyaknya bilangan yang kurang dari dan
relatif prima terhadap .
( )

Dengan adalah faktor prima dari .

§ Wilson‟s theorem
Jika adalah bilangan bilangan prima, maka berlaku ( )
( )

§ Extended Euclidean
Misalkan diberikan bilangan bulat dan , maka akan terdapat bilangan bulat
dan sehingga ( ). Untuk mencari nilai dan ,kita dapat
menggunakan algoritma extended Euclidean.

Contoh:
Tentukan salah satu nilai dan sehingga:

Jawaban:
Sebelumnya, kita harus mengecek terlebih dahulu apakah ( ) .
Karena benar, maka persamaan ini akan memiliki nilai dan .

Algoritma extended Euclidean akan berjalan seperti ini:

Kemudian kita lakukan pindah ruas mulai dari persamaan terakhir hingga ke
paling atas
( )
( )
Ganti nilai 2 ke pesamaan(1), maka:
( ) ( )

56
( )
Ganti nilai 3 pada persamaan (4) ke persamaan (3), maka:
( )
Dari sini kita bisa mendapatkan bahwa salah satu nilai dan yang
memenuhi adalah dan .

§ Persamaan Diophantine
Persamaan Diophantine adalah persamaan yang berbentuk .
Persamaan ini memiliki solusi bilangan bulat dan jika dan hanya jika
( ) .

Apabila terdapat solusi bilangan bulatnya, maka akan ada tak terhingga nilai
dan Oleh karena itu, nilai dan dapat diperumum menjadi

( )

( )
Dimana adalah suatu bilangan bulat, dan adalah salah satu nilai dan
yang memenuhi persamaan tersebut.
Untuk mencari nilai dan kita dapat menggunakan algoritma extended
Euclidean seperti contoh yang sudah dijelaskan di atas.

Contoh :
Tentukan nilai dan sehingga

Jawaban:
Sudah dijelaskan pada contoh extended Euclidean, bahwa salah satu nilai
dan yang memenuhi persamaan tersebut adalah dan .

Oleh karena itu, nilai dan dapat diperumum menjadi:

Dengan adalah suatu bilangan bulat.

§ Chinese Remainder Theorem


Chinese remainder theorem adalah sebuah teorema yang digunakan untuk
menyelesaikan sebuah sistem persamaan modulo.

Apabila terdapat suatu sistem persamaan


maka sistem persamaan tersebut akan

57
memiliki solusi jika untuk semua pasang ( ) yang mungkin berlaku
.

Untuk mendapatkan solusi dari sistem persamaan tersebut, kita bisa


menggunakan cara seperti berikut ini.

Contoh :
Tentukan bilangan bulat positif terkecil sehingga memenuhi persamaan:
( )
( )
( )

Jawaban:
Karena kongruen dengan 1 mod 2, maka kita bisa menyatakan bahwa
dengan adalah suatu bilangan bulat. Substitusikan ke
persamaan (2) maka :

Dari sini kita harus mengecek semua bilangan bulat (untuk memudahkan)
yang berbentuk . Lalu cari bilangan terkecil yang merupakan kelipatan
2. Didapatkan bilangan tersebut adalah 4.
Sehingga atau . Misalkan , lalu
substitusikan nilai ke maka ( )
Substitusikan lagi nilai ke persamaan (3)

Sama seperti sebelumnya, kita harus mengecek bilangan bulat yang


berbentuk . Lalu cari bilangan terkecil yang merupakan kelipatan 6.
Didapatkan bilangan tersebut adalah 18.
Sehingga
atau . Misalkan , substitusikan nilai ke
nilai , maka ( ) .
Jadi solusi yang memenuhi persamaan modulo di atas adalah
. Bilangan positif terkecil yang memenuhi adalah 23.

Pada dasarnya langkah yang digunakan untuk menyelesaikan sistem


persaman modulo seperti ini adalah memisalkan nilai dari yang ditanya
tersebut berdasarkan persaman modulo pertama lalu substitusikan ke
persamaan kedua, lalu nanti substitusikan hasil yang didapat tersebut ke
variabel awal tadi lalu subsitusikan kembali ke persamaan ketiga, begitu
seterusnya.

58
Ø Dasar Pemrograman #1

Algoritma adalah urutan langkah-langkah sistematis yang terkait pada


pemecahan suatu masalah. Di dalam algoritma itu sendiri bisa terdapat variabel,
perintah, ekspresi & assignment, serta fungsi/prosedur.

Olimpiade komputer sendiri tentu mempelajari pemrograman. Bahasa yang


digunakan biasanya bahasa pascal, walaupun di OSN setiap peserta diharapkan
menggunakan c++. Akan tetapi, di OSK dan OSP bahasa yang digunakan adalah
Pseudo-pascal yang artinya bahasa mirip pascal tetapi tidak 100% pascal.
Paradigma yang digunakan dalam pseudo-pascal ini adalah paradigm prosedural
dimana blok instruksi dijalankan secara berurutan.

Pada materi ini, akan dijelaskan tentang dasar-dasar dari pseudo-pascal dan
bahasa pascal itu sendiri khususnya dalam persiapan menghadapi OSK & OSP.

§ Literal
Literal adalah sebuah nilai. Misalnya 12, true, 0.2113, „kamu‟, „a‟

§ Variabel
Variabel adalah elemen dari suatu algoritma untuk menyimpan suatu
harga/nilai. Setiap variabel memiliki tipe data atau jenis nilai yang dapat
ditampung pada variabel tersebut.

Sebuah variabel dapat diisi dengan suatu nilai, operasi ini disebut
assignment. Dalam pseudocode-pascal, pemberian assignment ini diberi
tanda “:=”.
Contoh assignment yang paling sederhana adalah

Dalam hal ini, variabel di ruas kiri akan diisi oleh nilai literal yang ada di ruas
kanan.
Assignment juga dapat diisi oleh ekspresi, dalam artian:

Dalam hal ini, variabel di sebelah kiri akan diisi oleh nilai hasil ekspresi yang
ada di ruas kanan.
§ Tipe Data
Tipe data yang biasanya ada dalam bahasa pemrograman adalah tipe data asli
dan tipe data bentukan. Tipe data yang akan dibahas pada materi ini adalah
tipe data asli.

59
Macam-macam tipe data asli yang ada di pascal diantara lain:
1. Tipe Data Ordinal
Di dalam tipe data ordinal ini ada tiga macam tipe data yang biasa dipakai
yaitu tipe data berjenis integer, tipe data boolean, tipe data char & string.
Untuk tipe data ordinal, informasi singkatnya dapat dirangkum menjadi tabel
di bawah ini:
Tipe Data Range / Jangkauan
Shortint -128 … 127
Byte 0 … 255
Integer -32768 ... 32767
Word 0 … 65535
longint -2147483648 ... 2147483647
Int64 -9223372036854775808… 9223372036854775807
Boolean True / False
Char Semua karakter pada ASCII
string Gabungan dari beberapa char

2. Tipe Data Real


Tipe data real adalah tipe data yang menyimpan nilai bilangan real.
Bilangan pecahan adalah salah satu bilangan yang bisa dimuat dalam tipe
data ini.
Untuk di pascal sendiri, nama tipe data ini adalah real.

§ Operator
Operator ini berguna untuk menghasilkan suatu nilai. Nantinya nilai yang
didapatkan bisa disimpan dalam suatu variabel. Operator dalam bahasa
pemrograman terdiri dari operator logika, operator relasi dan operator bilangan
bulat.
1. Operator Logika
Seperti yang sudah dijelaskan pada materi tentang logika, pada bahasa
pemrograman juga berlaku operasi-operasi logika seperti and, or, not, xor.
Untuk bahasa pemrograman pascal, operator and, or, not, xor cara
penulisannya sama dengan penulisan aslinya.

2. Operator Bilangan Bulat


Sama dengan matematika, kita bisa menerapkan beberapa operator pada
bilangan bulat, Seperti +, -, *. Sementara untuk pembagian, pada pascal
sendiri terdapat kasus khusus. Penggunaan „/‟ pada pascal berarti benar-
benar membagi bilangan tersebut (hasilnya menjadi bilangan real),
sedangkan jika kita ingin menghasilkan hasil bagi bilangan bulatnya saja,
kita dapat menggunakan „div‟. Untuk menghasilkan sisa bagi, kita bisa
menggunakan „mod‟.

60
Operator Operasi
+ Penambahan
- Pengurangan
* Perkalian
/ Pembagian
Div* Hasil bagi
Mod* Sisa bagi
Ket: *berarti khusus bilangan dengan tipe data bilangan bulat
3. Operator Relasi
Berikut ini adalah operator relasi yang menghasilkan nilai boolean
Operator Operasi
Sama Dengan
Tidak sama dengan
Lebih dari
Lebih dari atau sama dengan
Kurang dari
Kurang dari atau sama dengan

§ Ekspresi
Ekspresi adalah gabungan dari beberapa nilai literal, fungsi atau ekspresi lain
yang dihubungkan dengan suatu operator.
Contoh :
1. 2232+121
2. „Olimpiade‟ + „Komputer‟
3. Not(A) and B or C

§ Input dan Output


Input adalah mengirimkan data kepada komputer sementara adalah output
adalah penyampaian informasi dari komputer kepada kita.

Input di bahasa pascal menggunakan read/readln. Perintah ini akan membaca


input dan menyimpannya ke dalam suatu variabel yang ada di dalam
read/readln. Perintah readln akan membaca input kemudian pindah baris
pembacaan, sedangkan read tidak.

Contoh:

Readln(a, c);
Readln(b);

Jika kita inputkan nilai 2, 10, 7. Maka nilai a terisi dengan nilai 2, b dengan nilai
7, dan c dengan nilai 10.

Output di bahasa pascal menggunakan perintah write/writeln. Perintah ini akan


mengeluarkan output sesuai dengan nilai yang ada pada dalam write/writeln.

61
Perintah writeln akan menuliskan output kemudian pindah barisan penulisan
sementara write tidak.

Contoh :
a := 12
b:= 10
Saat dijalankan, nanti akan tercetak "22 lebih besar dari 11”
writeln(a+b, „ lebih besar dari „, b+1);

§ Aksi
Aksi adalah perintah yang dapat dieksekusi/dilakukan oleh program. Sebuah
perintah di bahasa pascal harus diakhiri oleh tanda “;”. Aksi ini akan dijalankan
secara berurutan.

Sebagai contoh :
a := 5
a := a+1; //a = 6
b := 2*a – 7; //b = 5
a := a + b; //11
writeln(a);

Nilai a pada akhir program adalah 11.

§ Percabangan
Percabangan adalah instruksi yang akan dilakukan oleh suatu program
berdasarkan kondisi boolean tertentu. Percabangan pada pascal ini berupa “if”
dan “case”.

1. IF Sederhana
Bentuk dari if sederhana yaitu

If <kondisi> then
<aksi>

<aksi> akan dijalankan jika nilai dari kondisi adalah benar.

2. IF Bercabang
Bentuk dari if bercabang adalah

62
If <kondisi1> then
<aksi1>
else if <kondisi2> then
<aksi2>
if bersarang akan then
else if <kondisi3> melakukan aksi dimana if pertama yang kondisinya benar.
<aksi3>
(dimulai
….
dari atas).
Misal,
else jika kondisi1 sudah benar, maka dia akan menjalankan aksi1. Jika
kondisi1<aksi_lain_lain>
salah dan kondisi2 benar, maka dia akan menjalankan aksi2. Jika
kondisi1 salah, kondisi2 salah dan seterusnya sampai sebelum terakhir
kondisinya masih salah, maka dia akan menjalankan aksi paling terakhir
(kondisi di dalam else terakhir).

3. Case
Case adalah cara lain untuk menyatakan if bercabang. Akan tetapi
penggunakan case ini agak sedikit berbeda dimana if akan menggunakan
kondisi sebagai acuan akan tetapi case akan menggunakan nilai sebagai
acuan.

Struktur pada case adalah

case <ekspresi> of
<nilai-nilai1> : <aksi1>
<nilai-nilai2> : <aksi2>
<nilai-nilai3> : <aksi3>
else : <aksi_lain>
end;

aksi yang akan dijalankan adalah aksi yang sesuai dengan nilai dari ekspresi
itu sendiri.

63
SOAL

1. Berapa nilai dari


A. 0
B. 1
C. 7
D. 49
E. 343

2. Berapakah nilai dari ( )


A. 0
B. 1
C. 7
D. 2015
E. 2016

3. Berapakah nilai dari ?


A. 0
B. 1
C. 3
D. 2015
E. 2017

4. Berapakah dua digit terakhir dari bilangan ?


A. 01
B. 02
C. 03
D. 04
E. 05

5. Berapakah nilai dari


A. 1
B. 2
C. 3
D. 4
E. 5

6. Berapakah sisa pembagian dari 99999…9 (2019 digit) jika dibagi 7?


A. 1
B. 2
C. 3
D. 4
E. 5

64
7. Sebuah bilangan bersisa 3 ketika dibagi 4 dan bersisa 6 ketika dibagi 9.
Banyaknya bilangan bulat positif yang memenuhi kriteria tersebut dan kurang
dari 1000 adalah …
A. 26
B. 27
C. 28
D. 29
E. 30

8. Sebuah bilangan bersisa 1 ketika dibagi 3, bersisa 3 ketika dibagi 5 dan bersisa 5
ketika dibagi 7. Apabila bilangan bulat posiitf terkecil yang memenuhi kriteria
tersebut dibagi dengan 10, maka sisanya adalah …
A. 1
B. 2
C. 3
D. 4
E. 5

9. Nilai dan pada persamaan Diophantine adalah …


A. 6 dan -25
B. 18 dan -75
C. 4 dan -20
D. 12 dan -80
E. 5 dan -100

10. Pak Dengklek memiliki 2 buah takaran air, A dan B, masing-masing volumenya
adalah 35 ml dan 48 ml. Jika Pek Dengklek ingin mengambil tepat 22 ml air,
maka Pak Dengklek dapat melakukannya dengan menggunakan tiga langkah
penakaran, yaitu: takar 2 kali dengan takaran A (2x35=70 ml) lalu kurangkan
dengan 1 kali takaran B (70-48=22). Jika Pak Dengklek ingin mengukur tepat 10
ml air, berapakah minimal penakaran yang diperlukan?
A. 23
B. 24
C. 25
D. 26
E. 27
11. Dalam sebuah perumahan terdapat banyak sekali tikungan. Andi memasuki
perumahan itu dengan berjalan ke arah barat. Dari arah dia masuk, Andi
mencatat tikungan di perumahan itu yang ia lalui mengikuti pola belok kanan,
belok kiri, belok kiri, belok kanan, belok kanan, belok kanan, belok kiri, belok kiri,
belok kiri, belok kiri, dst. Pada belokan ke 2015, Andi berjalan ke arah mata angin
mana?
A. Utara
B. Selatan
C. Barat
D. Timur
E. Tidak ada jawaban yang benar

65
12. Suatu bilangan bulat jika dibagi 4 akan bersisa 2, jika dibagi 5 bersisa 1 dan jika
dibagi 6 akan bersisa 0. Jumlah bilangan bulat positif terkecil dan kedua terkecil
yang memenuhi kritea tersebut adalah …
A. 130
B. 131
C. 132
D. 133
E. 134

13. Sebuah bilangan bulat jika dibagi dengan 11 akan bersisa 1, jika dibagi 7 akan
bersisa 3 dan jika dibagi 5 bersisa 2. Bilangan bulat positif terbesar yang kurang
dari 1000 dan memenuhi kriteria tersebut adalah …
A. 891
B. 892
C. 893
D. 894
E. 895
Perhatikan deskripsi berikut ini untuk soal nomor 14 dan 15.
Sebuah tumpukan kartu tersusun dari kartu-kartu yang bernomor 1 hingga 31 (kartu pada
tumpukan paling atas bernilai 1 dan kartu paling bawah bernilai 31). Kartu-kartu tersebut
ingin diacak dengan cara sebagai berikut. Ambil N kartu terbawah lalu taruh N kartu
tersebut pada tumpukan teratas (tanpa mengubah urutan).
14. Apabila N=5 dan langkah tersebut dilakukan sebanyak 45 kali kartu apa yang
terdapat pada tumpukan teratas?
A. 24
B. 25
C. 26
D. 27
E. 28

15. Apabila N=3 berapa kali anda harus melakukan langkah tersebut agar kartu yang
bernilai 2 terdapat pada tumpukan teratas?
A. 7
B. 8
C. 9
D. 10
E. 11

66
Perhatikan potongan program berikut ini untuk menjawab soal nomor 16 dan 17.

x := 10
y := 2*x;
x := x + y;
y := y + x;
x := 2*x + y;
y := 2*y + x;

16. Nilai x di akhir program adalah …


A. 100
B. 110
C. 150
D. 200
E. 210

17. Nilai x + y diakhir program adalah …


A. 120
B. 220
C. 320
D. 420
E. 520
Perhatikan potongan program berikut ini untuk soal nomor 18

a := 40;
write(a+5);
a := a+5;
write(a);

18. Berapakah output dari potongan program di atas?


A. 40 45
B. 45 45
C. 40 50
D. 45 50
E. 50 50

67
Perhatikan potongan program berikut ini untuk soal nomor 19

x := 20;
if (x mod 2 = 0) then
write(‘a’);
if (x mod 4 = 0) then
write(‘b’);
else if (x mod 5 = 0) then
write(‘c’);
if (10*x <= 1000) then
x := x + 5;
writeln(x);

19. Output dari potongan program di atas adalah …


A. ab20
B. ac20
C. ab25
D. ac25
E. bc25

Perhatikan potongan program berikut ini untuk soal nomor 20

a := -5;
b := a*a*a + 100;
if (a > b) then begin
c := a;
a := b;
b := c;
end;

20. Nilai a dan b di akhir program adalah …


A. -5 dan -25
B. -25 dan -5
C. -5 dan 25
D. 25 dan -5
E. -125 dan -5

68
a := 21;
b := 2;
a := a + b;
b := b+a;
a := b;
b := a+b
b := b-a;
21.
write(b, a);

Output dari potongan program di atas adalah …


A. 2525
B. 25 25
C. 2550
D. 25 50
E. 50 50

22. var
x, y : integer;

begin
readln(x);
if (x >= 0) then begin
y := x;
x := x + y;
end
else begin
x := -x;
y := y + x;
x := y;
end;
writeln(x+y);
end.
Jika diinputkan -1000, maka pada layar akan tercetak …
A. -1000
B. 1000
C. -2000
D. 2000
E. 0

69
23. a := true;
b := false;
c := true;
if ((a or (b or c)) and (not(b) and a) and c) then
write(‘Masuk sini’);
if ((not(a) and b) or c) then
write(‘Masuk sini juga’);
else
write(‘Ga masuk sini’);
else
write(‘ga’);

Output dari potongan program di atas adalah …


A. Masuk sini Masuk sini juga
B. Masuk siniMasuk sini juga
C. Masuk sini Ga masuk sini
D. Masuk siniGa masuk sini
E. Ga

24.
a := -6
if a > 0 then
writeln(‘Active’)
else if a <> 6 then
writeln(‘Learning’)
else if a < 0 then
writeln(‘Club’)
else
writeln(‘Indonesia’);

Output dari potongan program di atas adalah …


A. Active
B. Learning
C. Club
D. Indonesia
E. Tidak mengeluarkan apa-apa

70
25.
cnt := 0;
readln(x);
if (x mod 15 = 0) then cnt := cnt + 3;
else if (x mod 5 = 0) then cnt := cnt + 2;
else if (x mod 3 = 0) then cnt := cnt + 1;
writeln(cnt);

Jika kita menginputkan bilangan dari 1 sampai dengan 100 sebagai nilai x, dan
setiap bilangan yang keluar dari layar kita jumlahkan, maka hasilnya adalah …
A. 71
B. 72
C. 73
D. 74
E. 75

Perhatikan potongan program berikut ini untuk soal nomor 26 dan 27

if (a mod 3 = 0) then begin


if (b > c) then c := b + (c*3) div 2
else b := c + (b*3) div 2;
end else begin
if (b > c) then b := (a div 2) + c
else c := (a div 2) + b;
end
d := a + b + c;

26. Jika nilai a = 7, b = 8, dan c = 2, maka nilai dari d adalah …


A. 14
B. 15
C. 16
D. 17
E. 18

27. Jika nilai a, b dan c adalah salah satu bilangan bulat positif kurang dari 10,
berapa nilai terbesar d?
A. 40
B. 41
C. 42
D. 43
E. 44

71
28. if (a > b) and (c > d) then
begin
if (a > d) or (c < d) then
begin
if (b < d) then
writeln(a)
else
writeln(b);
end else
begin
writeln(c);
end;
end else
begin
if (a = d) or (c = d) then
begin
if (b < c) then
writeln(b)
else
writeln(c)
end else
writeln(d);
end;

JIka nilai a = 9, b = 6, c = 7, dan d = 4, maka output yang dihasilkan adalah …


A. 9
B. 6
C. 7
D. 4
E. 11

29. var
variabel : integer;
begin
variabel := 2019;
if (variabel mod 100 > 19) then
variabel := variabel + 2
else
variabel := variabel + 1;
writeln(variabel + variabel);

end;

Output dari program di atas adalah …


A. 2018
B. 2019
C. 4038
D. 4040
E. 4042

72
30. readln(n);
if (((n mod 4 = 0) and (n mod 100 > 0)) or (n mod 400 = 0)) then
writeln(‘YAY’)
else
writeln(‘NAY’)
Di antara semua bilangan dari 1 sampai 2019, ada berapakah yang jika
diinputkan ke dalam program akan menghasilkan output “YAY” ?
A. 485
B. 486
C. 487
D. 488
E. 489

73
PERULANGAN DAN ARRAY

Pada paket sebelumnya, kita sudah membahas tentang dasar-dasar pemrograman


yang ada pada bahasa pascal. Pada paket ini, materi akan dilanjutkan dengan
membahas tentang perulangan dan struktur data Array.

Ø Perulangan / Looping
Perulangan dalam bahasa pemrograman adalah suatu aksi yang berupa
serangkaian bentuk kegiatan mengulang suatu statement sampai batas tertentu
yang diinginkan.
Pada bahasa pemrograman pascal, terdapat 3 jenis perulangan yang biasanya
dipakai yaitu for, while, dan repeat-until.

§ For
For adalah suatu bentuk perulangan yang biasa dipakai jika kita mengetahui jumlah
pengulangan yang diinginkan atau kita mengetahui nilai awal dan akhir dari
pengulangan yang diinginkan.
Bentuk dari perulangan For ini adalah

for <variabel-perulangan> := <nilai-awal> (to/downto)* <nilai-akhir> do


begin
<aksi1>
<aksi2>
<aksi3>
//… dst
end;

*Dengan catatan : do digunakan saat <nilai-awal> bernilai kurang dari sama dengan
<nilai-akhir> . Sementara downto digunakan saat <nilai-awal> bernilai lebih dari
sama dengan <nilai-akhir>.
Jika jumlah <aksi> hanya 1, kita juga boleh untuk tidak memakai begin-end.
Pada bahasa pascal, <variabel-perulangan> ini akan digunakan sebagai pencacah
yang memiliki nilai awal <nilai-awal>.
Lalu jika perulangan yang digunakan adalah menaik (memakai to), maka <variabel-
perulangan> ini akan bertambah satu setiap saat hingga berakhir saat perulangan
telah melakukan aksi untuk <variabel-perulangan> berisi <nilai-akhir>.

74
Jika perulangan yang digunakan adalah menurun (downto), maka <variabel-
perulangan> ini akan berkurang satu setiap saat hingga berakhir saat perulangan
telah melakukan aksi untuk <variabel-perulangan> berisi <nilai-akhir>.
Contoh:
Apakah output dari potongan program berikut ini

for i := 3 to 6 do
writeln(2*i – 1)

Jawaban :
Pada perulangan ke-1, nilai i = 3 -> 2*i – 1 = 5
Pada perulangan ke-2, nilai i = 4 -> 2*i – 1 = 7
Pada perulangan ke-3, nilai i = 5 -> 2*i – 1 = 9
Pada perulangan ke-4, nilai i = 6 -> 2*i – 1 = 11
Sehingga output dari potongan program di atas adalah
5
7
9
11

§ While
While adalah suatu bentuk perulangan yang memperhatikan suatu kondisi tertentu
untuk berhenti.
Bentuk umum dari while adalah

while (<kondisi-perulangan>) do
begin
<aksi1>
<aksi2>
<aksi3>
//…dst
end;

Setiap aksi yang ada di dalam begin-end akan dijalankan selama <kondisi-
perulangan> bernilai true. Jika <kondisi-perulangan> bernilai false, maka program
akan langsung keluar dari while.
Sama seperti for, jika jumlah <aksi> hanya ada 1 kita juga boleh untuk tidak
memakai begin-end.

75
Contoh:

a := 5
b := 3
while (b<9) do
begin
a := a-1;
b := b+1;
end;

Nilai a di akhir program adalah …


Jawaban:
a := 5, b := 3
Saat loop ke-1, cek(b < 9) -> ya, a = 4, b = 4
Saat loop ke-2, cek(b < 9) -> ya, a = 3, b = 5
Saat loop ke-3, cek(b < 9) -> ya, a = 2, b = 6
Saat loop ke-4, cek(b < 9) -> ya, a = 1, b = 7
Saat loop ke-5, cek(b < 9) -> ya, a = 0, b = 8
Saat loop ke-6, cek(b < 9) -> ya, a = -1, b = 9
Saat loop ke-7, cek(b < 9) -> tidak. Keluar dari while.

Nilai a terakhir adalah -1.


Jadi nilai a di akhir program di atas adalah -1.

§ Repeat
Repeat adalah jenis perulangan terakhir yang ada pada bahasa pascal. Repeat
biasanya digunakan untuk perulangan dengan suatu kondisi berhenti yang harus di
cek di akhir algoritma. Bentuk dari repeat adalah

repeat
<aksi1>
<aksi2>
<aksi3>
//…dst
until <kondisi-berhenti>

Pada repeat, perulangan akan berhenti dilakukan jika <kondisi-berhenti> bernilai


benar. Jika sebelum repeat <kondisi-berhenti> bernilai true, maka perulangan
dilakukan tepat sekali (karena pengecekan berada di akhir)

76
Contoh:

a := 7;
b := 4;
repeat
a := a + 1;
b := b – 1;
until (b = 0);
writeln(a);

Output dari potongan program di atas adalah …


Jawaban
a = 7, b = 3
Saat loop ke-1, a = 8 & b = 3, cek(b = 0) -> tidak, ulangi lagi
Saat loop ke-2, a = 9 & b = 2, cek(b = 0) -> tidak, ulangi lagi
Saat loop ke-3, a = 10 & b = 1, cek(b = 0) -> tidak, ulangi lagi
Saat loop ke-4, a = 11 & b = 0, cek(b = 0) -> ya, keluar dari badan repeat.

Nilai a terakhir adalah 11. Sehingga output dari potongan program di atas adalah 11.

Ø Array
Array adalah suatu struktur data sederhana yang ada pada pascal. Array dapat
menampung sebuah data dengan jumlah/frekuensi yang banyak. Data yang
disimpan pada array harus memiliki tipe data yang sama. Data pada array di akses
dengan sebuah nomor indeks tertentu di dalam sebuah kurung siku. Oleh karena itu,
array harus memiliki jumlah data tertentu.

Deklarasi Array pada bahasa pascal


var
<Nama_array> : array[1..<ukuran-array>] of <tipe-data-array>;

Contoh :
var
arr : array[1..5] of integer;
begin
arr[1] := 3;
arr[2] := 3*arr[1];
arr[3] := arr[2] + arr[1] + 2;
arr[4] := arr[3] – arr[2] + arr[1];
arr[5] := 3*arr[4];
writeln(arr[5]);
Output dari potongan program di atas adalah ?
end;

77
Jawaban:
arr[1] = 3
arr[2] = 3*arr[1] = 3*3 = 9
arr[3] = arr[2] + arr[1] + 2 = 9 + 3 + 2 = 14
arr[4] = arr[3] – arr[2] + arr[1] = 14 – 9 + 3 = 8
arr[5] = 3*arr[4] = 24

Sehingga output dari potongan program di atas adalah 24.

Sebuah array hanya bisa diakses jika nomor indeks nya kurang dari sama dengan
ukurannya. Apabila di akses selain dari itu, maka program akan crash. Contohnya
pada soal di atas, jika kita mengakses arr[6], maka program tersebut akan crash
karena ukuran dari array tersebut hanya 5.

78
SOAL
1. Perhatikan potongan program berikut ini

ans := 0;
for i := 1 to 10 do
ans := ans + 2*i;
writeln(ans);

Output dari potongan program di atas adalah …


A. 100
B. 110
C. 120
D. 130
E. 140

2. Perhatikan potongan program berikut ini


res := 0;
j := 2;
for i := 2 to 13 do begin
res := res + j;
j := j + 3;
end;
writeln(res);

Output dari potongan program di atas adalah …


A. 220
B. 222
C. 224
D. 226
E. 228
3. Perhatikan potongan program berikut ini
ans := 1;
j := 1;
k := 2;
for i := 1 to 10 do begin
ans := ans + j + k;
j := j + 1;
k := k + j;
end;
writeln(ans);

Output dari potongan program di atas adalah …

79
A. 285
B. 286
C. 287
D. 288
E. 289
4.P erhatikan potongan program berikut ini

ans := 0;
for i := 1 to 2019 do begin
if ((i mod 2 = 0) and (i mod 3 <> 0)) then ans := ans + 1
else if (i mod 2 = 0) then ans := ans – 1;
end;
writeln(ans);

Output dari potongan program di atas adalah …


A. 333
B. 335
C. 337
D. 339
E. 341
5. Perhatikan potongan program berikut ini
ret := 1;
for i := 2 to 6 do begin
for j := i + 1 to 7 do
ret := ret + j;
ret := ret – i;
end;
writeln(ret);

Output dari potongan program di atas adalah …


A. 63
B. 64
C. 65
D. 66
E. 67
6. Perhatikan program berikut ini
var
i, j, res : integer;
n : integer;

begin
readln(n);
res := 0;
for i := 1 to n do begin
if (n mod i <> 0) then res := res + 1;
writeln(res);
end.
80
Jika nilai n adalah 2018, maka output dari program di atas adalah …
A. 2011
B. 2012
C. 2013
D. 2014
E. 2015
7. Perhatikan potongan program berikut ini

a := 21; b := 12;
while (a >= b) do begin
a := a – 2;
b := b + 1;
c := a + b;
end;
writeln(a + b + c);

Output dari potongan program di atas adalah …


A. 52
B. 54
C. 56
D. 58
E. 60

Perhatikan program berikut ini untuk menjawab soal nomor 8 dan 9

var
n, i, p, q, r : integer;
begin
readln(n);
p := 0; q := 1; i:=1;
while (i <= n) do begin
r := p + q;
p := q;
q := r;
i := i + 1;
end;
writeln(p)
end;

8. Jika nilai n adalah 6, maka output dari program tersebut adalah …


A. 5
B. 8
C. 9

81
D. 12
E. 13
9. Jika nilai n adalah 15, maka output dari program tersebut adalah …
A. 580
B. 590
C. 600
D. 610
E. 620
10. Perhatikan potongan program berikut ini

var a,b:integer;
begin
a := 13;
b := 1;
while(a <= n) do begin
a := a + b;
b := b + 5;
end;
writeln(a, ' ', b);
end.

Jika nilai n adalah 100, maka output dari potongan program di atas adalah …
A. 120 31
B. 120 36
C. 120 41
D. 125 31
E. 125 36

11. Perhatikan potongan program berikut ini


for i := a to b do begin
res := 1;
for j := 1 to i do
res := res * j;
ans := ans + res;
end;
writeln(ans);

Jika nilai a = 3 dan b = 7, maka output dari potongan program tersebut adalah …
A. 5900
B. 5910
C. 5920
D. 5930
E. 5940

82
12.Pe rhatikan potongan program berikut ini

res := 0;
for i:= 1 to 20 do
for j := 1 to 20 do
res := res + i + j;
writeln(res);

Output dari potongan program di atas adalah …


A. 8200
B. 8400
C. 8600
D. 8800
E. 9000

Perhatikan potongan program berikut ini untuk soal nomor 13 dan 14

begin
ret := 0;
readln(n);
while (n > 0) do begin
if (n mod 2 = 1) then ret := ret + 1
n := n div 2;
end;
writeln(ret);
end;

13. Jika nilai n adalah 63, maka output dari potongan program di atas adalah …
A. 4
B. 5
C. 6
D. 7
E. 8
14. Jika nilai n adalah 4133, maka output dari potongan program di atas adalah ...
A. 3
B. 4
C. 5
D. 6
E. 7

83
15.Pe rhatikan potongan program berikut ini

res := 0
for i := 1 to 3000 do begin
cek := 0;
j := i;
while (j > 0) do begin
if (j mod 2 = 1) then cek := cek + 1;
j := j div 2;
end;
if (cek = 1) then res := res + 1;
end;
writeln(res);

Output dari potongan program di atas adalah …


A. 11
B. 12
C. 13
D. 14
E. 15
16. Perhatikan program berikut ini
var
arr : array[1..10] of integer;
n, i, j: integer;
begin
readln(n);
for i := 1 to n do
arr[i] := i
for i := 2 to n do
arr[i] := arr[i] + arr[i-1];
writeln(arr[n]);
end;

Jika nilai n adalah 100, maka output dari program di atas adalah …
A. 4950
B. 5050
C. 5150
D. 5151
E. 5950

84
17.Pe rhatikan potongan program berikut ini

var
x : array[1..10] of integer;
i : integer;

begin
for i := 1 to 10 do
x[i] := 10 div i;
for i := 10 downto 1 do
x[10] := x[10] + x[i] ;
writeln( x[10] );
end.

A. 27
B. 28
C. 29
D. 30
E. 31
Perhatikan potongan program berikut ini untuk menjawab soal nomor 18
{Semua nilai arr awalnya diisi dengan 0}
for i:= 1 to 7 do
for j:= i to 7 do begin
arr[j]:= i+1;
arr[i]:=arr[i] + arr[j];
end;

18. Berapakah nilai arr[4]?


A. 21
B. 22
C. 23
D. 24
E. 25
19. Berapakah nilai arr[7] ?
A. 13
B. 14
C. 15
D. 16
E. 17

85
Perhatikan potongan program berikut ini untuk soal nomor 20 dan 21

begin
{semua elemen arr bernilai 0}
readln(N);
i := 0;
while (N > 0) do begin
if (N mod 2 = 1) then
arr[i] := 0
else arr[i] := 1;
i := i + 1;
N := N div 2;
end;
end;

20. Jika nilai N adalah 2033, maka nilai dari arr[9] adalah …
A. 0
B. 1
C. 2
D. 3
E. 4
21. Jika N adalah sebuah bilangan dari 1-100 dengan nilai arr[4] = 0, maka banyak
nilai N yang mungkin adalah …
A. 61
B. 62
C. 63
D. 64
E. 65
22. Perhatikan program berikut ini

var A:array[0..9] of integer=(3,7,4,6,1,2,45,67,2,5);


x,i:integer;
begin
x:=arr[0];
for i:=1 to 9 do
if (x<A[i]) then x:=A[i]
writeln(x);
end.
Output dari program di atas adalah …
A. 1
B. 9
C. 10
D. 67
E. 69
Perhatikan program berikut ini untuk soal nomor 23 dan 24

86
var cnt:array[0..2018] of integer;
i,l,r:integer;
begin
for i:=0 to 2018 do
if ((i mod 3 = 0) or (i mod 2 = 0)) then cnt[i]:=0
else cnt[i]:=1;
for i:1 to 2018 do cnt[i]:=cnt[i]+cnt[i-1];
readln(l,r);
writeln(A[r]-A[l-1]);
end.

23. Apabila program diberikan input 1 dan 10, maka output dari program tersebut
adalah …
A. 3
B. 4
C. 5
D. 6
E. 7
24. Apabila program diberikan input 21 dan 2018, maka output dari program di atas
adalah ....
A. 662
B. 664
C. 666
D. 668
E. 670
Perhatikan program berikut ini untuk soal nomor 25

var A:array[0..9] of integer=(0, 23, 27, 31, 74, 21, 12, 2, 10, 19);
x,i:integer;
begin
for i:=1 to 9 do
A[i] := A[i] + A[i-1];
writeln(A[9] – A[4]);
end.

25. Output dari program di atas adalah …


A. 61
B. 62
C. 63
D. 64
E. 65

87
Perhatikan potongan program berikut ini untuk soal nomor 26 dan 27

readln(N);
cek := true;
i := 2;
while (i * i <= N) do begin
if (N mod i = 0) then
cek := false;
i := i + 1;
end;

26. Jika nilai N adalah 119, maka nilai cek di akhir potongan program adalah …
A. false
B. true
C. error
D. tidak dapat diketahui
E. tidak terdapat jawaban
27. Jika kita mencoba nilai N dengan nilai dari 1 sd 100, maka banyak nya nilai yang
membuat cek bernilai true adalah …
A. 22
B. 23
C. 24
D. 25
E. 26
28. Perhatikan program berikut ini

var
x, y, txy, it : integer;
begin
x := 2018;
y := 2019;
for it := 0 to 2019 do begin
txy := x;
x := y;
y := txy;
end;
writeln(x, ‘ ‘, y);
end.
Output dari program di atas adalah …
A. 2018 2018
B. 2018 2019
C. 2019 2018
D. 2019 2019
E. 2019 2020

88
Perhatikan potongan program berikut ini untuk menjawab soal nomor 29 dan 30
c := 0; d := 0;
while (a > b) do begin
a := a – b;
d := d + b;
c := c + 2;
end;
writeln(c, ‘ ‘, d);

29. Jika nilai a = 30 dan b = 5, berapakah output dari potongan program di atas?
A. 10 15
B. 10 25
C. 15 15
D. 15 25
E. 25 25
30. Jika nilai a = 30 dan b = 2, maka output dari potongan program di atas adalah …
A. 26 26
B. 27 27
C. 28 28
D. 29 29
E. 30 30

89
SUBPROGRAM

Subprogram adalah sesuatu yang bisa dipakai untuk menyelesaikan suatu


permasalahan pada bahasa pemrograman dengan membuat sebuah program kecil.
Subprogram ini nantinya dapat digunakan di program utama.

Program utama pada bahasa pemrograman pascal sendiri adalah sebuah kumpulan
instruksi yang diawali kata “begin” dan di akhiri oleh sebuah kata “end.” Subprogram
pada bahasa pascal biasanya dideklarasikan dan langsung dituliskan
implementasinya sebelum program utama tersebut.
Pada bahasa pemrograman pascal, kita mengenal dua buah macam subprogram,
yaitu fungsi dan prosedur.

1. Fungsi
Fungsi di dalam matematika dapat diartikan sebagai sesuatu yang memetakan
suatu nilai terhadap nilai tertentu. Sedangkan di bahasa pemrograman, fungsi
adalah sebuah subprogram yang mengirimkan/menghasilkan sebuah nilai
tertentu.

Syntax fungsi di bahasa pascal:


Function <nama_fungsi>(<deklarasi_parameter>):<tipe_output>;
<deklarasi_variabel_lokal>

begin
//aksi1
//aksi2
//aksi3
…dst
end;

Parameter adalah suatu variabel yang berfungsi menampung nilai yang akan
dikirimkan dari program utama ke dalam fungsi. Dengan parameter, fungsi akan
menghasilkan nilai sesuai dengan nilai parameter yang dikirimkan.

90
Perhatikan contoh di bawah ini:
var
x, y, a, b : integer;

function kali(x, y : integer):integer;


begin
kali := x * y;
end;

begin
a := 10;
b := 5;
writeln(kali(a, b));
end;

Pada program pascal di atas, nilai a = 10 akan dicopy nilainya oleh sedangkan
b = 5 akan dicopy juga nilainya oleh y, oleh karena itu pada akhirnya output dari
program tersebut adalah 10*5 = 50.
Variabel x, y adalah deklarasi parameter dari fungsi kali tersebut.

Di dalam isi fungsi, keluaran ditampung lewat nama fungsi (nama fungsi dapat
kita pandang sebagai suatu variabel yang akan menampung hasil fungsi).
Pemanggilan fungsi adalah sebuah nilai, sehingga kita bisa pandang sebagai
sebuah ekspresi, yang dapat dioperasikan dengan nilai lain.

Contoh:
function kubik(x : integer):integer;
begin
kubik := x * x * x;
end;

1. Berapakah nilai dari kubik(8)?


2. Berapakah nilai dari kubik(kubik(2))?
Jawaban:
Fungsi di atas adalah sebuah fungsi yang menerima sebuah bilangan bulat dan
akan menghasilkan sebuah bilangan bulat juga yang merupakan hasil pangkat
tiganya.
Sehingga
1. Kubik(8) = 8*8*8 = 512
2. Kubik(kubik(2)) = kubik(2*2*2) = kubik(8) = 512.

2. Prosedur
Prosedur adalah sebuah subprogram yang hanya melakukan serangkaian aksi
tertentu tanpa mengembalikan/menghasilkan suatu nilai.

91
Syntax prosedur di bahasa pascal

Procedure <nama_procedure>(<deklarasi_parameter);
<deklarasi_variabel_lokal>

begin

end;

Definisi parameter di prosedur sama dengan di fungsi. Karena prosedur tidak


menghasilkan nilai, maka prosedur tidak menghasilkan keluaran tetapi hanya
akan melakukan aksi-aksi berdasarkan nilai parameter yang diberikan.
Sehingga pemanggilannya bisa kita pandang sebagai sebuah aksi.

Perhatikanlah contoh berikut ini.


var
x, y, a, b : integer;

procedure tambah(x, y : integer);


begin
writeln(x + y);
end;

begin
a := 1; b := 3;
tambah(a, b);
end.

Pada contoh di atas, nilai x akan diisi oleh nilai dari a yaitu 1, dan nilai y akan diisi
oleh nilai dari b yaitu 3. Sehingga pada program tersebut akan tercetak hasil
penjumlahan x+y yaitu 1 + 3 = 4.

Inti dari fungsi dan prosedur:


Pada pemanggilan fungsi/prosedur, control program untuk sementara pindah ke
fungsi/prosedur tersebut sampai selesai dijalankan.

Untuk mendeklarasikan parameter pada subprogram baik itu fungsi ataupun prosedur
terdapat dua cara, yaitu pass by value, dan pass by reference.

1. Pass by value
Jika deklarasi parameter dilakukan tanpa tambahan kata “var”, maka hanya nilai
yang akan dikirim ke fungsi/prosedur. Sehingga perubahan terhadap variabel
parameter tidak berpengaruh ke variabel di pemanggilan fungsi/prosedur.

92
Contoh :

Var a, b : integer;
Procedure xxx(x, y : integer);
Begin
x := 2019; y := 2018;
end;
begin
a := 10; b := 20;
xxx(a, b);
writeln(a, ‘ ‘, b);
end.

Output dari program di atas adalah …


Jawaban:
Perhatikanlah bahwa parameter pada prosedur tersebut menggunakan deklarasi
pass by value, oleh karena itu perubahan nilai x dan y tidak akan mempengaruhi
nilai dari a dan b. Sehingga nilai a tetap 10 dan b tetap 20. Output program tersebut
“10 20”

2. Pass by reference
Jika deklarasi parameter dilakukan dengan tambahan kata “var”, maka yang akan
dikirimkan adalah reference ke variabel di pemanggilan fungsi/prosedur. Sehingga
perubahan terhadap variabel parameter akan berpengaruh ke variabel di
pemanggilan fungsi/prosedur.

Perhatikan contoh berikut ini

var a, b, x, y: integer;

procedure swap(var a, b:integer);


var
c : integer;
begin
c := a;
a := b;
b := c;
end;

begin
x := 2019;
y := 2017;
swap(x, y);
writeln(x,‘ ‘, y);
end.

93
Output dari program di atas adalah …
Jawaban:
Perhatikan bahwa deklarasi parameter pada prosedur tukar di atas menggunakan
deklarasi pass by reference. Oleh sebab itu, setiap perubahan dari variabel a akan
berpengaruh terhadap x. Begitu pula dengan setiap perubahan variabel b akan
berpengaruh terhadap y. Karena prosedur swap tersebut menukar nilai a dan b,
maka nilai x dan y juga di tukar sehingga outputnya adalah “2017 2019”.

94
SOAL

1. Perhatikan potongan program berikut ini

function f(x : integer):integer;


begin
f := x*x – 2*x + 1;
end;

begin
a := 3;
a := f(a);
a := f(f(a));
writeln(a);
end.

Output dari potongan program di atas adalah …


A. 49
B. 64
C. 81
D. 100
E. 121

2. Perhatikan potongan program berikut ini

function f(x : integer):integer;


begin
if (x < 0) then f := -x;
else f := x;
end;

begin
res := 0;
for i := -100 to 100 do
res := res + f(i);
end.

Nilai res di akhir program adalah …


A. 0
B. 10000
C. 10010
D. 10100
E. 11000

95
Perhatikan potongan program berikut ini untuk soal nomor 3 dan 4.

function sum(x : integer):integer;


var
i : integer;
begin
sum := 0;
for i := 1 to x do
sum := sum + i;
end;

3. Berapakah nilai dari sum(71)?


A. 2485
B. 2556
C. 2754
D. 2864
E. 3024

4. Berapa banyak bilangan bulat positif yang memenuhi sum( ?


A. 139
B. 140
C. 141
D. 142
E. 143

Perhatikan potongan program berikut ini untuk soal nomor 5 dan 6

function hitung(x : longint):longint;


var
sum, i : longint;
begin
sum := 0;
for i := x downto 1 do
sum := sum + i * i;
hitung := sum;
end;

5. Nilai dari hitung(6) adalah …


A. 89
B. 90
C. 91
D. 92
E. 93

96
6. Nilai terkecil sehingga hitung( ) > 1000, adalah …
A. 12
B. 13
C. 14
D. 15
E. 16

7. Perhatikan potongan program berikut ini

function sum(x : longint):longint;


var
i : integer;
begin
for i:= 1 to x do
sum := sum + i;
end;

function mus(x : longint):longint;


var
ret, i: longint;
begin
ret := 1;
for i := 1 to x do
ret := ret + sum(i);
mus := ret;
end;

Berapakah nilai dari mus(30)?


A. 4960
B. 4961
C. 4962
D. 4963
E. 4964

Perhatikan potongan program berikut ini untuk soal nomor 8 dan 9


function cnt(x : integer):integer;
var
i, ret : integer;
begin
ret := 0;
for i := 1 to x do
if (x mod i = 0) then
ret := ret + 1;
cnt := ret;
end;

97
8. Nilai dari cnt(12600) adalah …
A. 36
B. 48
C. 60
D. 72
E. 108

9. Banyaknya nilai dimana sehingga bernilai ganjil adalah …


A. 94
B. 95
C. 96
D. 97
E. 98

Perhatikan potongan program berikut ini untuk soal nomor 10 dan 11

function budi(x, y : longint):longint;


var
i, res : longint;
begin
res := 1;
for i := 1 to x do
res := res * y;
end;

function abdul(x : integer):longint;


var
i, res : longint;
begin
res := 1;
for i := 1 to x do
res := res + budi(i, i);
abdul := res;
end;

10. Berapakah nilai dari budi(6, 4)?


A. 1024
B. 1296
C. 2048
D. 4096
E. 7776

11. Berapakah nilai dari abdul(5)?


A. 3413
B. 3414
C. 3415
D. 3416
E. 3417

98
12. Perhatikan potongan program berikut ini
function F2(n, k : integer) : integer;
var
i, x : integer;
begin
x := 1;
for i := n downto k + 1 do
x := x * i;
for i := n - k downto 2 do
x := x div i;
F2 := x;
end;

Nilai dari F2(7, 3) adalah …


A. 20
B. 30
C. 35
D. 40
E. 45

Perhatikan potongan program berikut ini untuk soal nomor 13 sd. 15


function Ganesh(n:integer):integer;
var
i,cnt : integer;
begin
Ganesh:=1;
for i:=2 to n do
if(n mod i = 0) then begin
cnt:=0;
while (n mod i = 0) do
begin
cnt:=cnt+1;
n:=n div i;
end;
Ganesh:=Ganesh*(cnt+1);
end;
end;

13. Nilai dari Ganesh(72) adalah …


A. 4
B. 6
C. 12
D. 24
E. 36

99
14. Berapakah nilai dari Ganesh(2019)?
A. 1
B. 2
C. 3
D. 4
E. 2018

15. Berapakah nilai n terkecil sehingga Ganesh(n) bernilai 10?


A. 72
B. 48
C. 36
D. 25
E. 24

16. Perhatikan program berikut ini

var
x, y : integer;

procedure dengklek(var a, b: integer);


var
c : integer;
begin
c := a + b;
a := c – a;
b := c – a;
end;

begin
x := 2019; y := 2018;
for i := 0 to 2019 do
dengklek(x, y);
writeln(x,‘ ‘, y);
end.

Output dari program di atas adalah …


A. 2018 2018
B. 2018 2019
C. 2019 2018
D. 2019 2019
E. Tidak dapat diketahui

100
Perhatikan program berikut ini untuk soal nomor 17 sd 19.

var
i, ans, j : integer;

procedure acak(var x : integer);


var
tmp : integer;
begin
tmp := 0;
while (x > 0) do begin
tmp := 10 * tmp + x mod 10;
x := x div 10;
end;
x := tmp;
end;

begin
ans := 0;
for i := 1 to 30 do begin
j := i;
acak(j);
ans := ans + j;
end;
writeln(ans);
end.

17. Jika x = 2354 dan dipanggil procedure acak(2354) maka nilai x setelah eksekusi
procedure adalah …
A. 3245
B. 3254
C. 4352
D. 4532
E. 5324

18. Output dari program di atas adalah …


A. 975
B. 976
C. 977
D. 978
E. 979

19. Ada berapa banyak bilangan 5 digit sehingga setelah dipanggil acak( ), nilai
tidak akan berubah?
A. 800
B. 900
C. 1000
D. 1100
E. 1200

101
Perhatikan potongan program berikut ini untuk soal nomor 20 dan 21.
procedure game(x, a, b : integer);
var
i : integer;
begin
for i := 1 to x do begin
if ((i mod a = 0) and (i mod b = 0)) then
writeln(‘AB’)
else if (i mod a = 0) then
writeln(‘A’)
else if (i mod b = 0) then
writeln(‘B’);
end;
end;

20. Jika procedure game(100, 2, 3) dipanggil, berapa banyak output „A‟ yang
dihasilkan?
A. 32
B. 33
C. 34
D. 35
E. 36

21. Jika procedure game(200, 2, 5) dipanggil, berapa banyak huruf „A‟ yang
dihasilkan?
A. 80
B. 100
C. 120
D. 160
E. 200
Perhatikan potongan program berikut ini untuk soal nomor 22 dan 23.
procedure dengklek(n : integer);
var
count, i, x: integer;
begin
count := 0;
for i := 1 to n do begin
x := i;
while (x > 0) do
begin
if (x mod 10 = 1) then
inc(count);
x := x div 10;
end;
end;
writeln(count);
end;

102
22. Jika dipanggil procedure dengklek(12), maka output yang muncul pada layar
adalah …
A. 3
B. 4
C. 5
D. 6
E. 7

23. Jika dipanggil procedure dengklek(1000), maka output yang muncul pada layar
adalah …
A. 300
B. 301
C. 302
D. 303
E. 304
Perhatikan potongan program berikut ini untuk soal nomor 24 dan 25.
procedure iseng(x : integer);
var
i, j : integer;
haha : boolean;

begin
for i := 2 to x do begin
haha := true;
j := 2;
while (j * j <= i) do begin
if (i mod j = 0) then haha := false;
j := j + 1;
end;
if (haha = true) then write(i);
end;
end;

24. Jika dipanggil procedure iseng(100), maka berapa kali prosedur tersebut
mengeluarkan output?
A. 22
B. 23
C. 24
D. 25
E. 26

25. Jika dipanggil procedure iseng(100), maka total banyaknya digit yang ditampilkan
ke layar adalah …
A. 43
B. 44
C. 45

103
D. 46
E. 47

Perhatikan program berikut ini untuk soal nomor 26 dan 27


function kuadrat(x:integer):boolean;
var i,cnt:integer;
begin
cnt:=0;
for i:=2 to x-1 do
if (x mod i=0) then inc(cnt);
if (cnt=0) then kuadrat:=true
else kuadrat:=false;
end;

var jumlah,i:integer;
begin
jumlah:=0;
for i:=1 to 20 do
if (kuadrat(i)) then
jumlah:=jumlah+1; {1}
writeln(jumlah);
end.

26. Berapakah output dari program di atas?


A. 5
B. 6
C. 7
D. 8
E. 9

27. Apabila baris yang ditandai dengan tanda {1} diganti menjadi jumlah:=jumlah+i,
maka output dari program di atas adalah….
A. 20
B. 30
C. 77
D. 78
E. 210

104
Perhatikan contoh berikut ini untuk soal nomor 28 dan 29

var n,m : int64;


bit : array[0..10] of int64 = (1,1,1,1,1,1,0,0,0,1,0);
i : integer;

function kali(x,y : int64):int64;


var i : integer;
ret : int64;
begin
ret:=1;
for i:=1 to y do ret:=ret*x;
kali:=ret;
end;
begin
readln(n);
m:=0;
for i:=0 to 10 do begin
m:=m+bit[10-i]*kali(n,i);
end;
writeln(m);
end.

28. Apabila diberikan input 2, maka output dari program di atas adalah
A. 2016
B. 2017
C. 2018
D. 11111100001
E. 11111100010

29. Apabila diberikan input 10, maka output dari program di atas adalah
A. 2016
B. 2017
C. 2018
D. 11111100001
E. 11111100010
30. Perhatikan potongan program berikut ini
function hitung(n : integer):longint;
var
i,j : integer;
begin
hitung:=0;
for i:=1 to n do
if (i mod 2 = 0) then
for j:=1 to n do
if (j mod 2 = 0) then
hitung := hitung + j
else
hitung := hitung + i;
end;

105
Nilai dari hitung(1000) adalah …
A. 205500000
B. 205050000
C. 205005000
D. 250500500
E. 250500000

106
REKURSI

Rekursi adalah suatu metode pemecahan masalah pada programming


dengan memecah suatu masalah tersebut menjadi masalah yang lebih kecil
sehingga masalah tersebut menjadi trivial untuk diselesaikan. Rekursi juga biasanya
dapat diartikan sebagai sebuah fungsi yang memanggil dirinya sendiri.
Algoritma rekursi pasti memiliki 2 buah bagian, yaitu:
1. Basis, kasus terkecil dimana kita dapat menyelesaikan permasalahan
tersebut secara langsung.
2. Rekurens, kasus yang didefinisikan berdasarkan kasus lain yang lebih kecil.
Selain dua hal di atas, rekursi juga harus memiliki sebuah state yang membedakan
antara sebuah kasus dengan kasus yang lain. Selain itu state juga biasanya
mengarah menuju basis.

Contoh Permasalahan
Berapakah nilai dari ?
Jawab:
Permasalahan tersebut bisa diselesaikan dengan sebuah rekursi. Misalkan kita
memiliki sebuah fungsi ( ) .
Sudah sangat jelas sekali bahwa jika maka ( ) .
Selanjutnya untuk setiap bilangan bulat positif . Kita bisa memecahkan
permasalahan menjadi ( )

Sekarang, berdasarkan definisi yang sudah dijelaskan sebelumnya kita


mendapatkan ( ) ( )
Oleh karena itu kita bisa menuliskan ( ) ( ) .

Sehingga bentuk permasalahan dari ( ) dapat kita modelkan


menjadi:

( )
( )

Dalam bahasa pascal, kita bisa menuliskannya menjadi sebuah fungsi sebagai
berikut:

107
function sum(n : integer):integer;
begin
if (n = 1) then sum := 1
else sum := n + sum(n-1);
end;

Bagian dari if pada fungsi tersebut adalah basis dari rekursi. Kemudian untuk bagian
dari else nya merupakan bagian dari rekurens, dimana fungsi tersebut memanggil
fungsi lain yang serupa.Nilai n pada parameter fungsi sum tersebut biasanya disebut
sebagai state.
Tips untuk menyelesaikan soal-soal bertipe rekursi adalah pertama perhatikan basis
dari rekursi tersebut dan simpan nilainya. Kemudian mulailah mencari nilai dari
fungsi tersebut dengan state yang paling kecil tetapi bukan basis, setelah itu
gunakan hasil-hasil tersebut untuk mencari nilai fungsi dengan state yang lebih
besar.
Tips lain yang digunakan untuk menyelesaikan soal-soal rekursi adalah dengan
memperhatikan polanya itu sendiri.
Contoh soal:

function panggil1(x:longint):longint;
begin
if (x<3) then panggil1:=0
else panggil1:=panggil1(x-1)+2*panggil1(x-2)+3;
end;

Tentukan nilai dari panggil1(7)!


Jawaban :
Basis fungsi rekursi tersebut adalah ketika x < 3, maka nilai fungsi tersebut 0.
Sehingga kita bisa mendapatkan:
panggil1(0) = 0
panggil1(1) = 0
panggil1(2) = 0

Kemudian, kita mulai mencari nilai fungsi tersebut dengan state yang paling kecil
dan bukan basis. Pada soal ini state tersebut adalah ketika x = 3. Sehingga kita
mampu mendapatkan nilai-nilai berikut ini:

panggil1(3) = panggil1(2) + 2*panggil1(1) + 3 = 0 + 2*0 + 3 = 3


panggil1(4) = panggil1(3) + 2*panggil1(2) + 3 = 3 + 2*0 + 3 = 6
panggil1(5) = panggil1(4) + 2*panggil1(3) + 3 = 6 + 2*3 + 3 = 15
panggil1(6) = panggil1(5) + 2*panggil1(4) + 3 = 15 + 2*6 + 3 = 30
panggil1(7) = panggil1(6) + 2*panggil1(5) + 3 = 30 + 2*15 + 3 = 63

Dari sini, kita mendapatkan bahwa nilai dari panggil1(7) adalah 63.

108
SOAL

Perhatikan potongan program berikut ini untuk soal nomor 1 dan 2

function f(x : integer):integer;


begin
If (x = 1) or (x = 2) then f := 1
Else f := f(x-1) + f(x-2);
end;

1. Nilai dari f(5) adalah …


A. 4
B. 5
C. 6
D. 7
E. 8

2. Nilai dari f(16) adalah …


A. 610
B. 789
C. 879
D. 987
E. 1007
Perhatikan potongan program berikut ini untuk soal nomor 3 dan 4

function f(x : integer):integer;


begin
if (x = 1) then f:= 1
else if (x = 2) then f := 2
else if (x = 3) then f := 3
else f := f(x-1) + 2*f(x-2) + 3*f(x-3);
end;

3. Nilai dari f(5) adalah …


A. 22
B. 23
C. 24
D. 25
E. 26

4. Nilai dari f(10) adalah …


A. 1567
B. 1576
C. 1657

109
D. 1675
E. 1765
Perhatikan potongan program berikut ini untuk soal nomor 5 dan 6

Function fungsi(nilai1, nilai2 : longint):longint;


Begin
If (nilai2 = 0) then fungsi := 1
Else fungsi := nilai1*fungsi(nilai1, nilai2-1);
End;

5. Berapakah nilai dari fungsi(3, 6)?


A. 723
B. 725
C. 727
D. 729
E. 731

6. Berapa banyak pasangan (nilai1, nilai2) yang mungkin jika nilai dari fungsi(nilai1,
nilai2) adalah 4096?
A. 4
B. 6
C. 8
D. 10
E. 12

Perhatikan potongan program berikut ini untuk soal nomor 7 dan 8


function ALC(a, b, x : longint) : longint;
begin
if ( b = 1 ) then ALC := a + x
else
begin
if (b mod 2 = 1) then x := x + a;
ALC := ALC(2 * a, b div 2, x);
end;
end;

7. Nilai dari ALC(5, 6, 0) adalah …


A. 30
B. 35
C. 40
D. 50
E. 60

8. Apakah hasil dari ALC(120, 32, 32)?

110
A. 3600
B. 3782
C. 3872
D. 3920
E. 4000

Perhatikan potongan program berikut ini untuk soal nomor 9

] Function g(x : integer):integer;


begin
if (x = 0) then g:=0
else g:=g(g(g(x-1))) + 1;
end;

9. Nilai g(20) adalah …


A. 18
B. 19
C. 20
D. 21
E. 22

Perhatikan potongan program berikut ini untuk soal nomor 10 dan 11

function abc(a,b : integer):integer;


begin
if (a<b) then abc:=0
else abc:=abc(a-b,b)+1;
end;
function xyz(a,b : integer):integer;
begin
if (b=0) then xyz:=1
else xyz:=xyz(a,b-1)+a;
end;

10. Berapakah nilai dari abc(19,4)?


A. 1
B. 2
C. 3
D. 4
E. 5

11. Berapakah nilai dari xyz(12,17)?

A. 201

111
B. 202
C. 203
D. 204
E. 205

Perhatikan potongan program berikut ini untuk soal nomor 12-14

function A(x,y:integer):integer;
begin
if (y = 0) then A := x
else A := A(y, x mod y);
end;

function B(x, y:integer):int64;


var
tmp : integer;
begin
tmp := A(x, y);
B := (x*y) div tmp;
end;

function C(x, y : integer):integer;


begin
if (y = 1) then C := 1
else if (A(x, y) = 1) then C := 1 + C(x, y-1)
else C := C(x, y-1);
end;

12. Nilai dari A(1234, 3124) adalah …


A. 2
B. 4
C. 6
D. 14
E. 22

13. Nilai dari B(142, 120) adalah …


A. 8500
B. 8520
C. 8540
D. 9040
E. 17040
14. Nilai dari C(2018, 2018) adalah ....
A. 1
B. 2
C. 1008
D. 1009
E. 2018

Perhatikan potongan program berikut ini untuk soal nomor 15

112
function F1(i, j : integer) : integer;
begin
if (i < 0) or (j < 0) then begin
if (i > j) then F1 := i + 1
else F1 := j + 1;
end
else if (i = j) then
F1 := F1(i + 1, j - 1)
else
F1 := F1(i - 2, j - 1) + F1(i - 1, j - 2);
end;

15. Nilai dari F1(4, 3) adalah …


A. 4
B. 6
C. 8
D. 10
E. 12

Perhatikan potongan program berikut ini untuk soal nomor 16


procedure A(x : integer);
var
i : integer;
begin
if (x <= 2) then begin
for i := 1 to x do
write(‘x’);
writeln;
end
else begin
A(x-1);
for i := 1 to x do
write(‘x’);
writeln;
A(x-2);
end;
end;

16. Banyaknya karakter „x‟ yang tercetak di layar saat A(10) dijalankan adalah …
A. 310
B. 320
C. 330
D. 340
E. 350

113
Perhatikan potongan program berikut ini untuk soal nomor 17 dan 18

function ubah(x : integer):string;


var
tmp : string;
begin
tmp := ‘’;
if (x = 0) then ubah := ‘’
else begin
tmp := ubah(x div 2);
if (x mod 2 = 0) then
tmp := tmp + ‘0’
else tmp := tmp + ‘1’;
ubah := tmp;
end;
end;

17. Nilai dari ubah(12) adalah …


A. 1001
B. 1011
C. 1100
D. 1101
E. 1110

18. Nilai dari ubah(9381) adalah …


A. 10010010100101
B. 10010010101001
C. 10010010101101
D. 10010010110000
E. 10010010111010

Perhatikan potongan program berikut ini untuk soal nomor 19 dan 20

function cimi(x,y:integer):integer;
begin
if (x + y = 0) then begin
cimi := 0;
end else if (x > y) then begin
cimi := y + cimi(x-1,y);
end else begin
cimi := x + cimi(x,y-1);
end;
end;

19. Nilai dari cimi(5, 8) adalah …


A. 24
B. 32
C. 36
D. 40

114
E. 50

20. Nilai dari cimi (30, 14) adalah …


A. 400
B. 420
C. 450
D. 480
E. 520

Perhatikan potongan program berikut ini untuk soal nomor 21-23

function A(x : longint):longint;


var
i, tmp : longint;
begin
tmp := 1;
for i := 1 to x do
tmp := tmp + i;
A := tmp;
end;

function B(x : longint):longint;


var
i, tmp : longint;
begin
tmp := 0;
for i := 1 to x do
tmp := tmp + A(i);
B := tmp;
end;

function C(x, y : longint):longint;


var
i, tmp : longint;
begin
tmp := 1;
for i := x to y do
tmp := tmp + B(i);
C := tmp;
end;

21. Nilai dari A(50) adalah …


A. 1274
B. 1275
C. 1276
D. 1277
E. 1278

22. Nilai dari B(20) adalah …


A. 1500
B. 1520

115
C. 1540
D. 1560
E. 1580

23. Nilai dari C(2, 7) adalah …


A. 234
B. 235
C. 236
D. 237
E. 238

Perhatikan potongan program berikut ini untuk soal nomor 24 dan 25

function S(x, y: longint):longint;


begin
S := ((x mod y)*(x mod y)) mod y;
end;

function P(x, y, z : longint):longint;


begin
if (y = 0) then P := 1
else if (y = 1) then P := x mod z
else if (y mod 2 = 0) then P := S(P(x, y div 2, z), z)
else P := ((x mod z)*S(P(x, (y-1) div 2, z), z)) mod z;
end;

24. Berapakah nilai dari P(3, 19, 7) ?


A. 1
B. 2
C. 3
D. 4
E. 5

25. Berapakah nilai dari P(21, 2019, 11)?


A. 0
B. 1
C. 4
D. 7
E. 10

Perhatikan potongan program berikut ini untuk soal nomor 26

function makan(x, y, z : integer):longint;


begin
if (x = y) then makan := z
else if (x = z) then makan := y
else if (y = z) then makan := x
else makan := makan(x-2, y+1, z-1) + x + y + z;
end;

116
26. Berapakah nilai dari makan(15, 5, 10)?
A. 110
B. 120
C. 130
D. 140
E. 150

Perhatikan program berikut ini untuk soal nomor 27 dan 28

var
x, ans : longint;

procedure naon(n : longint);


begin
if (n < 30) then begin
naon(5*n);
naon(3*n);
x := x + 1;
ans := ans + x*n;
end;
end;

begin
ans := 0;
x := 0;
naon(1);
writeln(x); {1}
end.

27. Apakah output program di atas?


A. 8
B. 9
C. 10
D. 11
E. 12

28. Jika perintah pada {1}, diganti menjadi “writeln(ans);”, maka output dari program
di atas adalah …
A. 344
B. 345
C. 346
D. 347
E. 348

Perhatikan potongan program berikut ini untuk soal nomor 29-30

function F(x, y:integer):integer;


begin
if (x <= 0) then F := Y
else F := F(x-1, y+2);
end;

117
29. Berapakah nilai dari F(8, 10)?
A. 23
B. 24
C. 25
D. 26
E. 27

30. Berapakah nilai dari F(2018, 2019)?


A. 6045
B. 6055
C. 6065
D. 6075
E. 6085

118
PROBLEM SOLVING PARADIGHM

Pada paket 5-7 kita sudah belajar mengenai dasar-dasar yang ada pada
programming. Programming sendiri pada dasarnya digunakan sebagai alat untuk
menyelesaikan suatu permasalahan-permasalahan komputational yang biasanya
cukup rumit apabila dikerjakan langsung oleh manusia. Untuk menyelesaikan
permasalahan-permasalahan komputational tersebut diperlukan beberapa strategi
yang akan membuat masalah tersebut terselesaikan dengan terstuktur, efektif, dan
efisien.
Untuk meluruskan pikiran kita bersama, pada paket ini hanya akan
disampaikan cara pandang menyelesaikan suatu permasalahan atau strategi-
strategi yang biasanya digunakan untuk menyelesaikan suatu permasalahan tertentu
namun bukan solusi baku dari suatu permasalahan tersebut.
Materi ini sebenarnya masuk pada cakupan OSN. Akan tetapi, dari tahun ke
tahun makin banyak materi OSN yang diturunkan pada tingkat OSP/OSK agar
kompetisi OSN semakin kompetitif, oleh karena itu tidak ada salahnya jika kita
mempelajari materi ini lebih awal.

Beberapa Problem solving paradighm yang terdapat pada competitive programming


di antarai lain:

1. Bruteforce / Complete Search


Motivasi:
Diberikan N buah bilangan bulat. Tentukan nilai maksimum dari N buah bilangan
tersebut.

Bruteforce / complete search adalah paradigma yang paling mudah untuk


dipahami. Paradigma ini hanya cek semua kemungkinan masalah yang ada lalu
ambil semua kemungkinan yang memenuhi kriteria yang diinginkan. Kelebihan
paradigma ini adalah kebenarannya hampir dipastikan selalu benar namun
kekurangan dari paradigma ini adalah memerlukan waktu yang cukup lama
sehingga terkadang kita perlu cara lain yang lebih cepat.
Untuk mengerjakan soal pada motivasi di atas, kita hanya perlu cek semua
bilangan dan bandingkan bilangan-bilangan yang ada lalu ambil yang paling
besar.

2. Greedy
Motivasi:
Diberikan N ( buah bilangan bulat. Pilih dua buah bilangan dari N buah
bilangan tersebut. Misalkan bilangan yang diambil adalah x dan y. Tentukan nilai
x-y terbesar yang mungkin!

119
Greedy dalam bahasa Indonesia berarti rakus. Dengan kata lain, dengan rakus
(memlilih solusi yang menurut kita paling optimal) maka kita akan mendapatkan
solusi yang paling optimal juga. Sebagai contoh perhatikan soal yang dijadikan
motivasi di atas. Kita ingin mendapatkan nilai x-y terbesar yang mungkin. Apabila
kita berpikir rakus, maka jelas bahwa agar x-y terbesar maka nilai x harus
sebesar mungkin dan nilai y harus seminimum mungkin. Hal ini jelas akan
menghasilkan nilai x-y yang paling besar. Cara-cara seperti inilah yang
dinamakan greedy. Untuk mengerjakan soal-soal greedy diperlukan banyak
latihan.

3. Dynamic Programming (DP)


Motivasi:

Misalkan Anda memiliki uang sejumlah N rupiah. Anda ingin menukarkan uang
tersebut dengan beberapa koin dengan pecahan 1, 3, dan 4 rupiah. Berapa
jumlah minimum koin yang dibutuhkan untuk menukarkannya?
Misal N = 5 dibutuhkan 2 koin (1 buah 4 rupiah dan 1 buah 1 rupiah)

Sekilas kita berpikir bahwa cara untuk menyelesaikan soal ini adalah dengan
menggunakan pecahan terbesar yang masih mungkin maka kita akan
mendapatkan banyak koin yang minimum (greedy). Akan tetapi solusi itu tidak
selamanya benar. Misal N = 6. Dengan cara tersebut kita memerlukan 3 buah
koin. (1 buah koin 4 rupiah dan 2 buah koin 1 rupiah) padahal sebenarnya kita
hanya membutuhkan 2 buah koin saja yaitu 2 buah kon 3 rupiah. Sehingga cara
greedy yang sudah kita pikirkan menjadi salah.

Permasalahan pada motivasi tersebut biasanya disebut sebagai permasalahan


coin change. Untuk menyelesaikan permasalahan tersebut kita membutuhkan
dynamic programming.

Misalkan kita definisikan f(n) sebagai banyaknya koin minimum yang diperlukan
untuk menukarkan n rupiah menjadi dalam bentuk 1, 3, dan 4 rupiah.
Maka dari sini kita bisa tahu bahwa f(n) = min(f(n-1), f(n-3), f(n-4)) + 1. (Manakah
yang lebih optimal dengan memilih 1, 3, atau 4 rupiah (selama masih mungkin)
kemudian tambahkan 1 koin yang dibutuhkan) Dalam dynamic programming kita
memerlukan suatu basis/base case, yaitu kasus dimana solusi tersebut sudah
sangat trivial dan tidak memerlukan pencarian lagi. Dalam kasus ini, jelas base
case nya adalah saat n = 0, maka f(n) = 0 karena kita tidak memerlukan koin
apapun jika uang yang dimiliki adalah 0 rupiah.

Terlihat seperti bruteforce? Ya, pada dasarnya DP adalah sebuah teknik


bruteforce dengan memoisasi atau hasil dari bruteforce nya disimpan dalam

120
sebuah penyimpanan. Sehingga apabila kita sudah menghitungnya, kita tidak
perlu menghitungnya lagi karena sudah disimpan nilainya sebelumnya.

Cara mengerjakan suatu permasalahan DP ada dua cara yaitu dengan cara
bottom up(iterative) dan top down(rekursif). Pada materi ini tidak akan dijelaskan
kedua cara ini karena terlalu advanced, sehingga jika Anda penasaran dengan
dua cara ini, Anda dapat mencarinya di google.

Suatu hal yang harus diingat dalam dynamic programming/DP adalah:


1. State: Parameter dari fungsi yang mempengaruhi nilai dari fungsi tersebut.
2. Base case : Kasus yang nilainya sudah sangat jelas dan tidak memerlukan
pencarian lagi.
3. Rekurens : Kasus selain base case, dimana kita harus mendapatkan suatu
hubungan/relasi dari suatu permasalahan dengan permasalahan yang lain.

4. Divide and Conquer


Divide and Conquer adalah sebuah paradigma untuk menyelesaikan suatu
permasalahan dengan membagi masalah tersebut menjadi beberapa bagian, lalu
bagian-bagian tersebut dikerjakan secara independen dan terakhir adalah
menyatukan kembali bagian-bagian tersebut.
Contoh beberapa algoritma yang menggunakan paradigma divide and conquer ini
adalah binary search, merge sort, quick sort, dan masih banyak lagi.

Problem solving paradighm ini adalah paradigma yang biasanya dipakai dalam
competitive programming untuk menyelesaikan permasalahan-permasalahan
komputasi. Dengan mempelajari materi ini diharapkan, peserta olimpiade komputer
dapat memiliki nalar dan kemammpuan problem solving yang semakin baik.
Mempelajari materi dari sini saja tentu tidak cukup. Oleh karena itu, penulis
menyarankan agar pembaca dapat berlatih soal-soal programming lalu
mengaplikasikan paradigma-paradigma ini langsung terhadap soal.

121
SOAL

1. Pak Dengklek akan pindah kantor dan terdapat 13 kardus berisi barang-barang
yang ada pada kantor sebelumnya. Pak Dengklek ingin membawa 13 kardus
tersebut ke kantor yang baru, sayangnya karena berat Ia hanya bisa membawa 1
atau 2 kardus sekaligus dalam 1 kali perjalanan. Berapa banyak cara berbeda
untuk Pak Dengklek memindahkan semua kardus itu?
A. 100
B. 144
C. 225
D. 233
E. 377
2. Wengki memiliki 10 bilangan, yaitu 12, 5, 3, 19, 8, 10, 9, 1, 2, 11. Dia bermaksud
memilih 3 bilangan sedemikian sehingga jumlahnya maksimal. Berapakah jumlah
bilangan-bilangan yang dia ambil?
A. 39
B. 40
C. 41
D. 42
E. 43

3. Andi memiliki 5 bilangan, yaitu 11, 13, 17, 19, dan 23. Dia bermaksud memilih
satu bilangan lalu mengurangkan bilangan tersebut dengan 5. Dia kemudian
mengalikan kelima bilangan termasuk bilangan yang telah dikurangkan tadi.
Apabila dia ingin agar hasil perkaliannya maksimal, manakah bilangan yang
dipilih Andi?
A. 11
B. 13
C. 17
D. 19
E. 23

4. Sebuah kandang bebek memiliki kapasitas untuk menampung maksimum 10


ekor bebek. Sebuah peternakan memiliki 21 kandang bebek dan 100 ekor bebek.
Sebuah kandang bebek disebut padat-penduduk jika berisi lebih dari 3 bebek.
Ada minimal berapa kandang bebekkah yang terpaksa harus menjadi padat-
penduduk agar setiap bebek kebagian kandang?
A. 5
B. 7
C. 8
D. 6
E. 10

5. Pak Ganesh kini berniat untuk berdagang. Satu buah baju di pasar harganya
tidak tentu dan berkisar antara 20.000 sampai 35.000. Dia bisa menjual baju

122
tersebut dengan harga antara 40.000 sampai 51.000. Jika ia berniat menjual
kembali 4 baju, berapakah keuntungan (laba) maksimal yang bisa diperoleh?
A. 84.000
B. 100.000
C. 120.000
D. 124.000
E. Tidak ada jawaban yang benar

6. Dua orang dewa, Dewa Warisan dan Dewa Sembilanbelas memiliki 5 orang
anak. Semua anak Dewa Risan berjenis kelamin laki-laki, sedangkan semua
anak dari Dewa Sembilanbelas berjenis kelamin perempuan. Rencananya,
mereka akan saling menjodohkan kelima anak mereka. Setiap anak mempunyai
nilai. Nilai dari anak-anak Dewa Warisan adalah {2,-3,5,9,-6,}. Sedangkan nilai
dari anak-anak Dewa Sembilanbelas adalah {7,0,-4,8,-1}. Dari sebuah
pernikahan anak mereka, mereka akan mendapatkan tambahan kebahagiaan
yang direpresentasikan dalam bentuk bilangan. Didefinisikan, jika mereka
menikahkan anak bernilai A dengan anak bernilai B, mereka akan mendapatkan
kebahagiaan sebesar AxB. Berapa total kebahagiaan maksimal yang bisa
mereka peroleh?
A. 134
B. 143
C. 108
D. 104
E. 165

7. Pak Ganesh memiliki koin dengan nominal 1, 3, dan 4 dengan jumlah tak
terbatas. Ketika sedang belanja di luar negeri, Pak Ganesh harus membayar
uang dengan jumlah 18 SG(Satuan Ganesh). Banyaknya minimal koin yang
dibutuhkan Pak Ganesh untuk membayar tersebut adalah …
A. 4
B. 5
C. 6
D. 7
E. 8

8. Dengan deskripsi yang sama seperti soal pada nomor 7 tetapi nominal koin yang
ada adalah 1, 2, 4. Banyaknya minimal koin yang dibutuhkan Pak Ganesh untuk
membayar tersebut adalah …
A. 8
B. 7
C. 6
D. 5
E. 4
9. 2018 dapat dinyatakan dalam bentuk . Nilai n minimum
yang mungkin adalah …
A. 4

123
B. 5
C. 6
D. 7
E. 8

10. 2018 dapat dinyatakan dalam bentuk . Nilai n minimum


yang mungkin adalah …
A. 8
B. 9
C. 10
D. 11
E. 12

Perhatikan deskripsi berikut ini untuk soal nomor 11 dan 12.

Pak Dengklek membuat kandang baru untuk bebek‐bebeknya. Kandang baru ini luasnya
adalah 3 x N meter. Untuk menutupi seluruh permukaan lantai kandang baru tersebut, Pak
Dengklek sudah membeli sejumlah papan dengan ukuran 1 x 3 meter. Sayangnya Pak
Dengklek tidak memiliki gergaji, sehingga ia tidak dapat memotong papan‐papannya
seenak hati. Kini ia memikirkan bagaimana cara ia dapat menutupi semua permukaan lantai
dengan papan‐papan tersebut tanpa memotong satu papan pun dan tanpa ada dua atau
lebih papan bertumpuk. Dasar Pak Dengklek, ia tidak puas hanya dengan mengetahui salah
satu cara untuk menutup semua permukaan lantai, kini ia memikirkan berapa banyak
kemungkinan peletakan papan‐papan agar semua permukaan lantai tertutupi.

Sebagai contoh, untuk N = 4. Terdapat 3 kemungkinan konfigurasi ubin yaitu:

11. Berapakah banyaknya kemungkinan konfigurasi ubin untuk N=6?


A. 4
B. 5
C. 6
D. 7
E. 8

12. Berapakah banyaknya kemungkinan konfigurasi ubin untuk N=10?


A. 13
B. 21
C. 19
D. 23
E. 28

124
Perhatikan deskripsi berikut ini untuk soal nomor 13 dan 14.

Pak Dengklek memiliki N buah bilangan masing-masing disimpan dalam Array A dan B.
Pak Dengklek ingin memasangkan setiap bilangan pada A dengan suatu bilangan pada B
sehingga masing-masing bilangan pada A berpasangan dengan suatu bilangan pada B
begitu pula sebaliknya. Setelah semuanya berpasangan, Pak Dengklek mengalikan tiap
bilangan pada pasangan yang sama lalu menjumlahkannya. Nilai hasil penjumlahan ini
disebut dengan sum.
Sebagai contoh:
Misal N = 3, A = {3, 1, 2}, B = {5, 4, 6}. Pak Dengklek dapat melakukan pemasangan
seperti: {3, 5}, {1, 4}, {2, 6}. Maka sum = 3*5 + 1*4 + 2*6 = 31
:

13. Jika N = 4, A = {3, 1, 9, 2} dan B = {2, 1, 4, 5}, maka nilai sum terkecil yang
mungkin adalah …
A. 24
B. 28
C. 47
D. 62
E. 90

14. Jika N = 20 dan array A adalah semua bilangan bulat positif dari 1 sampai 20 dan
begitu pula dengan B. Maka nilai sum terkecil yang mungkin adalah …
A. 1500
B. 1520
C. 1540
D. 1560
E. 1580

15. Diberikan sebuah array :


A = (1,4,5,2,3,7,5,9,10,6,7)
Tentukan, berapakah panjang dari longest increasing subsequence!
Subsequence merupakan subset terurut dari array tersebut, dimana mereka tidak
harus bersebelahan. Contoh subsequence dari A adalah {1,2,3}, {4,5,10}, {7,6,7},
namun {5,6,7,8} bukan.
A. 3
B. 4
C. 5
D. 6
E. 7

125
16. Berapa banyak cara seseorang berpindah dari kotak A ke kotak B, jika dari suatu
kotak hanya boleh pindah ke kanan atau ke bawahnya saja?
A

A. 15
B. 20
C. 35
D. 40
E. 55

17. Berapa banyak cara seseorang berpindah dari kotak A ke kotak B, tanpa melalui
kotak yang diberi warna merah? (Gerakan untuk berpindah hanya boleh ke
kanan atau ke bawah saja)
A

B
A. 8
B. 10
C. 12
D. 14
E. 16

Perhatikan deskripsi berikut ini untuk soal nomor 18-20.

Dari semua bilangan-bilangan 3, 4, 5, 9, 12, 17, 18, dan 20 akan dibuat berpasang-
pasangan (menjadi 4 pasang). Dari setiap pasangan itu, dihitung selisih antara kedua
bilangannya. Lalu, selisihnya dijumlahkan, dan kita sebut jumlah itu sebagai total selisih.

18. Berapa total selisih terkecil yang mungkin?


A. 9
B. 10
C. 11
D. 12
E. 13

19. Berapa total selisih terbesar yang mungkin?


A. 47
B. 46

126
C. 45
D. 44
E. 43

20. Berapa banyak cara membentuk pasangan bilangan yang berbeda agar
menghasilkan total selisih maksimal? Keterangan : Pasangan (A,B) dan (B,A)
adalah pasangan yang berbeda
A. 1
B. 24
C. 48
D. 192
E. 384

Perhatikan deskripsi berikut ini untuk soal nomor 21-23.

Pak Dengklek kini diminta mengubah suatu bilangan menjadi sebuah bilangan lain. Dia
bisa mengubah bilangan dengan memencet tombol merah atau putih. Jika ia memencet
tombol merah, bilangannya berkurang satu. Jika ia memencet tombol putih, bilangannya
akan menjadi dua kali lipat.

21. Jika bilangan mula-mula adalah 5, dan ingin diubah menjadi 12, berapakah
minimal penekanan tombol yang dilakukan?
A. 3
B. 4
C. 5
D. 6
E. 7

22. Jika bilangan mula-mula adalah 5, dan ingin diubah menjadi 100, berapakah
minimal penekanan tombol yang dilakukan?
A. 7
B. 8
C. 9
D. 10
E. 11
23. Jika bilangan mula-mula adalah 5, dan ingin diubah menjadi 1000, berapakah
minimal penekanan tombol yang diperlukan?
A. 9
B. 10
C. 11
D. 12
E. 13

127
Perhatikan deskripsi berikut ini untuk soal nomor 24 dan 25.

Pak Dengklek memiliki sebuah array, yang berisi n buah bilangan bulat , , , … , .
Pak Dengklek sangat ingin memiliki banyak sekali bilangan yang sama pada arraynya.
Oleh karena itu, pak dengklek melakukan operasi berikut ini:
1. Memilih 2 bilangan pada arraynya. Misalkan , dengan ≠ .
2. Menambah dengan 1 dan mengurangi dengan 1.

Operasi tersebut jelas akan mengganti dua buah elemen berbeda pada array tersebut.
Pak Dengklek dapat melakukan operasi tersebut sebanyak tak terhingga.

24. Jika bilangan pada array Pak Dengklek adalah {2, -7, -2, -6}, berapa maksimum
frekuensi banyak bilangan yang sama pada array tersebut pada akhirnya?
A. 1
B. 2
C. 3
D. 4
E. 5

25. Jika bilangan pada array Pak Dengklek adalah {1, 3, 2, 9, -9, 2, 10, 13, 21},
berapa maksimum frekuensi banyak bilangan yang sama pada array tersebut
pada akhirnya?
A. 6
B. 7
C. 8
D. 9
E. 10

Perhatikan deskripsi berikut ini untuk soal nomor 26 dan 27.

Suatu hari Pak Dengklek sedang membangun rumah baru, ia ingin membuat dekorasi
berupa sebuah persegi panjang dengan lebar 1 satuan. Ia memiliki dua jenis segitiga,
yang pertama segitiga siku-siku sama kaki dengan panjang kaki 1 satuan, dan segitiga
yang kedua berupa segitiga sama kaki gabungan dua segitiga yang pertama.

26. Jika Pak Dengklek ingin membuat dekorasi dengan panjang 3 satuan, maka
berapa banyak cara berbeda untuk membuat dekorasi tersebut?
A. 17
B. 18
C. 19
D. 20
E. 21

27. Jika Pak Dengklek ingin membuat dekorasi dengan panjang 8 satuan. Maka
banyaknya cara berbeda untuk membuat dekorasi tersebut adalah …
A. 3821

128
B. 4374
C. 4562
D. 5114
E. 5372

Perhatikan deskripsi berikut ini untuk soal nomor 28-30.

Budi ingin bermain Loncat Berhadiah. Permainan dimainkan pada sebuah kotak
berukuran R x C petak. Petak kiri atas dinomori (1, 1) dan petak kanan bawah dinomori
(R, C). Pada setiap petak terdapat sebuah bilangan. Budi memulai permainan dengan
memilih salah satu petak pada kolom 1. Dari suatu petak (r, c), Budi harus berpindah ke
petak (r, c+1), (r+1, c+1), atau (r-1, c+1). Apabila Budi sudah berada pada kolom C,
permainan berakhir. Budi mendapat poin berupa jumlah seluruh bilangan yang terdapat
pada petak-petak yang dilalui Budi.

28. Berapa poin terbesar yang dapat Budi peroleh apabila ia bermain pada kotak di
bawah ini?

3 1 2 1
2 2 9 4
5 3 10 2
A. 18
B. 19
C. 20
D. 21
E. 22

29. Berapa poin terbesar yang dapat Budi peroleh apabila ia bermain pada kotak di
bawah ini?

3 4 1 2 1
2 3 2 4 3
5 1 3 3 2
4 2 1 2 1
1 5 2 1 4
A. 14
B. 15
C. 16
D. 17
E. 18

30. Pak Dengklek dan Pak Ganesh sedang bermain permainan favorit mereka, yaitu
batu fibonacci. Permainan ini dimainkan dengan cara mengambil sejumlah batu
dari sebuah tumpukan batu. Banyaknya batu yang boleh diambil untuk setiap
giliran adalah sejumlah bilangan dari deret fibonacci yang lebih kecil dari
banyaknya batu dalam tumpukan tersebut. Deret fibonacci adalah deret yang
dibentuk dengan rumus f(1)=1, f(2)=1, f(n)=f(n-1)+f(n-2) untuk n = 3, 4, 5, ….
Sebagai contoh, jika ada 9 batu dalam tumpukan, maka banyaknya batu yang

129
boleh diambil adalah 1, 2, 3, 5, atau 8. Pemain yang menghabiskan tumpukan,
dinyatakan sebagai pemenang. Diasumsikan bahwa Pak Dengklek dan Pak
Ganesh bermain optimal. Apabila Pak Dengklek memulai permainan dan
banyaknya batu pada tumpukan adalah 20 batu, maka pemenangnya adalah …
A. Pak Ganesh
B. Pak Dengklek
C. Tidak ada yang menang
D. Seri
E. Tidak dapat ditentukan.

130
GRAF

Teori Graf adalah sebuah cabang ilmu dalam matematika diskret yang mempelajari
kumpulan-kumpulan objek diskret (biasa digambarkan dengan titik) dan
keterhubungan antar objek-objek tersebut (biasa digambarkan dengan garis)
Graf G = (V, E), yang dalam hal ini:
V = himpunan tidak-kosong dari simpul-simpul (vertices) = { v1 , v 2 , ... , v n }
E = himpunan sisi (edges) yang menghubungkan sepasang simpul = {e 1 , e2 , ... , en}
Jumlah simpul pada graf disebut sebagai kardinalitas graf, dan dinyatakan dengan
n = |V|, dan jumlah sisi kita nyatakan dengan m = |E|
Misal terdapat graf G seperti berikut ini

Maka |V| = 5 dan |E| = 5

Beberapa Terminologi pada Graf:


1. Node / vertex / simpul
Sebuah representasi objek-objek yang ada dalam graf. Biasanya disimbolkan
dengan lingkaran

2. Edge
Representasi relasi antar objek yang terdapat pada graf. Biasanya disimbolkan
dengan garis-garis

3. Degree
Degree pada suatu node melambangkan banyaknya edge yang terhubung
dengan node tersebut

4. Adjacent (Tetangga)

131
Dua buah node/simpul saling bertetangga jika mereka dihubungkan langsung
oleh suatu edge.

5. Cycle (siklus)
Lintasan yang berawal dan berakhir pada suatu node yang sama. Contoh pada
graf G di atas B – C – D merupakan cycle

6. Unweighted Graph (Graf tidak berbobot)


Graph yang edge nya tidak berbobot (atau bobot nya 0/1).

7. Weighted Graph (Graf berbobot)


Graph yang edge nya berbobot/memiliki suatu nilai

8. Undirected Graph (Graf tidak berarah)


Graph yang edge nya berlaku secara 2 arah (Jika A terhubung dengan B, maka
otomatis B terhubung juga dengan A)

9. Directed Graph (Graf berarah)


Graph yang edge nya berlaku untuk 1 arah saja (Jika A terhubung dengan B,
maka B belum tentu terhubung dengan A)

10. Cyclic Graph


Graph yang memiliki cycle di dalamnya

11. Acyclic Graph / Tree


Graph yang tidak memiliki cycle atau biasa disebut juga dengan tree.

Graf pada computer science merupakan topik yang cakupannya cukup luas. Di
ranah olimpiade, khususnya OSN, cakupan graf di OSN meliputi pengertian graf,
representasi graf, algoritma graph traversal, algoritma shortest path, algoritma
minimum spanning tree.
Beberapa algoritma yang meliputi hal di atas di antara lain:
1. DFS (Depth First Search) : algoritma untuk graph traversal
2. BFS(Breadth First Search) : algoritma untuk graph traversal dan shortest path
pada unweighted graph
3. Dijkstra, Floyd Warshall, Bellman Ford : algoritma untuk mencari shortest path
pada weighted graph
4. Kruskal, prim : algoritma untuk mencari minimum spanning tree.

Materi-materi di atas tidak akan dijelaskan pada modul ini karena materi tersebut
terlalu advanced dan perlu visualisasi. Akan tetapi penulis menyarankan pembaca
untuk belajar materi graf pada buku pemrograman kompetitif dasar yang diterbitkan

132
oleh Tim Olimpiade Komputer Indonesia(TOKI)
https://osn.toki.id/arsip/pemrograman-kompetitif-dasar.pdf
Kemudian, terdapat suatu istilah yang biasanya cukup sering keluar di OSP/OSK.
Istilah tersebut adalah Eulerian Path/Cycle.

Eulerian Path/Cycle
Suatu Graph dikatakan memiliki Eulerian Path/Cycle apabila terdapat suatu
path/cycle dimana setiap edge nya dapat dikunjungi tepat 1x dalam path/cycle
tersebut. Solusi dari problem ini sangatlah mudah. Apabila Anda analisa lebih lanjut,
setiap edge akan dapat dikunjungi apabila dalam setiap node terdapat sepasang
edge, yang akan digunakan sebagai edge keluar maupun edge masuk. Dengan kata
lain apabila SEMUA degree dari node yang ada adalah genap, maka Graph tersebut
PASTI memiliki Eulerian Path/Cycle
Khusus untuk Eulerian Path, apabila terdapat tepat 2 node yang memiliki degree
ganjil, sedangkan yang lainnya genap, maka Graph tersebut tetap memiliki Eulerian
path dengan 2 node yang memiliki degree ganjil tersebut menjadi titik awal dan akhir
dari path tersebut.

133
SOAL

Perhatikan deskripsi berikut ini untuk soal nomor 1 dan 2

Di negeri tempat Bimo tinggal, terdapat 5 kota: kota A, kota B, kota C, kota D, dan kota E.
Bimo memiliki sebuah jam pasir ajaib. Ketika jam pasir itu dibalik, ia dapat berpindah tempat
secara seketika, namun tidak semua rute perpindahan tempat dari setiap kota yang ada
tersedia. Jam pasir ajaib tersebut juga memiliki batasan pemakaian. Rute perpindahan kota
yang disediakan oleh jam pasir tersebut adalah: A ke B, A ke C,B ke C, C ke E, D ke E, D ke
A, dan E ke B.
1. Jika jam pasir tersebut dapat dipakai tanpa batas, perjalanan manakah yang
tidak dapat Bimo lakukan dengan menggunakan jam pasir tersebut?
A. Dari kota A menuju kota D
B. Dari kota D menuju kota C
C. Dari kota A menuju kota E
D. Dari kota E menuju kota B
E. Dari kota C menuju kota B

2. Jika jam pasir tersebut dapat dipakai tanpa batas, rute perjalanan manakah yang
dapat ditambahkan dalam layanan jam pasir tersebut, supaya Timo dapat
menempuh perjalanan dari kota manapun menuju kota manapun?
A. Dari kota E ke kota A
B. Dari kota A ke kota D
C. Dari kota C ke kota D
D. Dari kota D ke kota B
E. Dari kota B ke kota E

3. Di sebuah desa antah berantah, terdapat 5 buah rumah yang terhubung satu
sama lain baik secara langsung maupun tidak langsung melalui jalan‐jalan
setapak. Berikut data dari jalan tersebut :
· Jarak dari a ke b adalah 3
· Jarak dari a ke d adalah 7
· Jarak dari b ke c adalah 4
· Jarak dari b ke d adalah 2
· Jarak dari d ke c adalah 3
· Jarak dari d ke e adalah 4
· Jarak dari c ke e adalah 3
Berapakah kilometerkah jarak minimum yang harus dilewati untuk mencapai
rumah e dari a?
A. 8
B. 9
C. 10
D. 11

134
E. 12

Perhatikan deskripsi berikut ini untuk soal nomor 4 dan 5

Pak Gubernur RK ingin membuat sebuah rute transonjek di sebuah Provinsi Juara.
Sebuah rute transojek harus memenuhi beberapa kriteria di bawah ini :
· Sebuah rute harus menghubungkan semua kota-kota yang berada pada provinsi
Juara
· Dari setiap kota hanya boleh terdapat tepat 1 jalur menuju setiap kota lainnya
· Jumlah jalur yang dipakai harus berjumlah N-1 (N adalah jumlah kota)
· Tidak diperbolehkan membuat jalur baru (hanya diperbolehkan menggunakan jalur
yang telah disediakan)
· Apabila sebuah kota x terhubung dengan kota y, maka kota y juga terhubung
dengan kota x

4. Apabila dalam Provinsi Juara terdapat 7 kota A,B,C,D,E,F,G berapa banyak


konfigurasi rute yang memenuhi jika jalur yang ada sebagai berikut?
· Kota A terhubung dengan kota B dan C
· Kota D terhubung dengan kota B, C , dan E
· Kota E terhubung dengan kota F dan G
· Kota F terhubung dengan G
A. 7
B. 9
C. 12
D. 15
E. 20

5. Apabila dalam provinsi Bagus terdapat 12 kota A,B,C,D,E,F,G,H,I,J,K, dan L


berapa banyak konfigurasi rute yang memenuhi jika jalur yang ada sebagai
berikut? ... {tuliskan dalam bentuk angka}
· Kota B terhubung dengan kota A dan C
· Kota D terhubung dengan kota C dan I
· Kota E terhubung dengan kota C,F,G, dan H
· Kota F terhubung dengan kota G
· Kota I terhubung dengan kota H,J,dan L
· Kota K terhubung dengan kota J dan L
A. 40
B. 50
C. 60
D. 70
E. 80
Perhatikan gambar berikut ini

135
6. Di sebuah kota yang terdiri dari 13 persimpangan (yang diberi angka), terdapat
jalan-jalan yang menghubungkan beberapa persimpangan. Fathin ingin berjalan-
jalan dari tempat tinggalnya di persimpangan berlabel X ke suatu persimpangan
berlabel Y. Y bisa saja sama dengan X. Tanpa dia sadari, rute yang dia tempuh
dalam perjalanannya melewati semua jalan (bukan persimpangan) tepat satu
kali. Berapakah label X terbesarl yang mungkin ?
A. 2
B. 4
C. 6
D. 8
E. 10

7. Terdapat 5 katak A, B, C, D, dan E yang masing-masing berusia berturut-turut 7


minggu, 8 minggu, 9 minggu, 10 minggu, dan 11 minggu.

Mereka akan melompat dari suatu daun teratai ke daun teratai lainnya. Mereka
telah meletakkan beberapa panah diantara daun, dan mereka semua memulai
pada sisi kiri seperti pada gambar.Ketika seseorang melompat ke suatu daun, dia
menunggu sampai ada katak lain yang datang ke daun tersebut. Kemudian

136
diantara dua katak pada daun tersebut, katak yang lebih tua akan melompat ke
katak lain mengikuti panah yang tebal, sedangkan yang lebih muda mengikuti
panah yang tipis. Bagaimanakah posisi akhir mereka pada sisi kanan dari
gambar di atas (dari paling atas)?
A. B – D – C – A – E
B. B – C – D – A – E
C. A – B – C – D – E
D. B – D – C – E – A
E. B – C – D – E – A

Perhatikan deskripsi berikut ini untuk soal nomor 8 dan 9

Pak Totok adalah pedagang keliling. Setiap hari ia berjualan di suatu kampung dan
besoknya berpindah ke kampung lain. Namun, ia memiliki aturan-aturan sbb. Pak Totok
selalu berjualan di 4 kampung berbeda yaitu: A, B, C, dan D.

· Jika hari ini ia ada di A, maka besoknya akan pasti pindah ke C.


· Jika hari ini ia ada di B maka hari berikutnya ia akan berada di A atau D.
· Jika hari ini ia ada di C maka besoknya ia akan ke B atau D.
· Jika hari ini ia ada di D maka besoknya ia pasti akan berada di A.

8. Jika pada suatu hari ia ada di A, dimanakah ia bisa berada 3 hari kemudian?
A. A atau B
B. A atau C
C. B atau C
D. A atau D
E. B atau D

9. Jika pada suatu hari ia berada di A, 20 hari kemudian berada di suatu kampung
X. Kampung apakah yang tidak mungkin sebagai X?
A. A
B. B
C. C
D. D
E. Tidak ada yang benar

10. Pak Dengklek harus membawa itik-itiknya melewati terowongan dari stasiun S ke
stasiun T. Pada gambar setiap stasiun digambarkan sebagai lingkaran. Itik-itik
tersebut harus berjalan melalui terowongan dengan arah yang ditunjukkan pada
gambar, dari satu stasiun ke stasiun lain. Setiap terowongan mempunyai
kapasitas itik yang dapat lewat dalam sehari, yang jumlahnya dinyatakan dalam
angka pada gambar. Dari sebuah stasiun, Pak Dengklek dapat mengirim itik-
itiknya melalui terowongan yang tersedia pada stasiun tersebut ke stasiun
berikutnya.

137
Berapa jumlah itik maksimum yang dapat dipindahkan oleh Pak Dengklek dari S
ke T dalam satu hari?
A. 4
B. 5
C. 6
D. 7
E. 8

Perhatikan deskripsi berikut ini untuk soal nomor 11 dan 12

Pak Ganesh memiliki sebuah tree dengan N buah node. Pak Ganesh sangat suka
kesederhanaan, oleh karena itu dia ingin membuang beberapa edge sehingga:
· Setiap komponen-komponen tersisa yang saling terhubung selalu memiliki
jumlah node berupa bilangan genap.
Pak Ganesh lalu menemukan bahwa dirinya dapat membuang edge pada tree tersebut
dengan jumlah tertentu (bisa lebih dari 1 kemungkinan). Pak Ganesh lalu penasaran
dengan jumlah edge maksimal yang dapat ia buang sehingga kondisi di atas tetap
terpenuhi

11. Jika N = 4 dan diketahui node yang saling terhubung pada tree Pak Ganesh
adalah (2, 4), (4, 1), (3, 1). Berapa jumlah edge maksimal yang dapat Pak
Ganesh buang sehingga kondisi yang diinginkan tetap terpenuhi?
A. 0
B. 1
C. 2
D. 3
E. 4

12. Jika N = 10, dan diketahui node yang saling terhubung pada tree Pak Ganesh
adalah (4, 8), (1, 7), (10, 8), (7, 4), (5, 6), (3, 9), (3, 5), (2, 10), (2, 5). Berapa
jumlah edge maksimal yang dapat Pak Ganesh buang sehingga kondisi yang
diinginkan tetap terpenuhi?
A. 1
B. 2
C. 3
D. 4
E. 5

138
13. Dalam papan catur ukuran 3x3, dua kuda putih berada pada posisi pojok atas
(kanan dan kiri), sedangkan kedua kuda hitam berada pada posisi pojok bawah
(kanan dan kiri). Diketahui tidak boleh ada dua kuda berada di petak yang sama
pada saat apapun. Tentukan, dengan minimal berapagerakan menggunakan
langkah kuda catur, posisi kuda hitam dan putih saling bertukar (kuda-kudahitam
di pojok atas, kuda-kuda putih di pojok bawah)? (Sebagai keterangan, pada
catur, satu langkah kuda dilakukan dengan menggeser kuda satu petak secara
horizontal (baik ke kiri maupun ke kanan) dan dua petak secara vertikal (baik ke
atas maupun ke bawah), maupun menggeser kuda dua petak secara horizontal
dan satu petak secara vertikal).
A. 8
B. 16
C. 20
D. 24
E. 32

14. Perhatikan gambar berikut ini

Setiap bilangan yang ada pada edge merupakan jarak dari dua buah node yang
dihubungkannya. Berapa jarak terpendek kedua dari node A ke node B?
A. 26
B. 25
C. 24
D. 16
E. 12

15. Pak Ganesh ingin membawa belanjaannya dari pasar ke rumahnya hanya
melalui suatu jaringan jalan tol. Pada setiap ruas jalan tol, ia harus membayar
sejumlah uang yang ditunjukan dengan angka-angka pada gambar berikut

Ia ingin memilih lintasan dengan biaya paling minimum. Berapa biaya yang harus
dikeluarkan oleh Pak Ganesh?
A. 21
B. 20

139
C. 19
D. 18
E. 17

16. Bebek-bebek pak Dengklek membentuk pertemanan seperti diilustrasikan pada


gambar di bawah ini, dengan bulatan hitam adalah bebek dan garis adalah
hubungan pertemanan antara dua bebek

Pak Dengklek biasa memberikan berita ke salah satu bebek, dan berita tersebut
menyebar melalui hubungan pertemanan. Ada sejumlah bebek yang jika keluar
dari hubungan pertemanan mengakibatkan terputusnya komunikasi. Contoh: Jika
A meninggalkan pertemanan, akan mengakibatkan terputusnya komunikasi
sejumlah bebek. Untuk menghindari hal tersebut, pak Dengklek meminta para
bebek untuk menambah hubungan pertemanan. Berapa minimal hubungan
pertemanan baru yang perlu dibuat supaya hubungan komunikasi tetap terjaga
ketika salah satu bebek meninggalkan kelompok tersebut.
A. 2
B. 3
C. 4
D. 5
E. 6

Perhatikan gambar berikut ini untuk soal nomor 17.

140
17. Pak Dengklek memiliki 12 kota yang diberi nama a-l. Kota-kota ini dihubungkan
oleh beberapa ruas jalan. Panjang jalan dari suatu kota ke kota lain tentu dapat
berbeda-beda. Sebagai contoh, dari kota a ke kota B panjang jalannya adalah 7
satuan. Berapakah panjang jalan minimum yang mungkin sehingga semua kota
yang dimiliki Pak Dengklek dapat saling terhubung satu sama lain?
A. 36
B. 39
C. 41
D. 43
E. 47

18. Berapa langkah terpendek yang dibutuhkan untuk mencapai titik FINISH dari titik START
jika banyak langkah yang dibuat harus bilangan genap (setiap jalan boleh dilewati lebih
dari sekali)?

A. 16
B. 18
C. 20
D. 22
E. 24

Perhatikan deskripsi berikut ini untuk soal nomor 19 dan 20.

141
Pak Dengklek memiliki kunci kombinasi yang merupakan sebuah bilangan 3 digit.
Kemudian terdapat beberapa tombol yang dapat Pak Dengklek pencet untuk mengubah
angka-angka yang ada pada kunci tersebut.
· Tombol pertama menambah angka pada digit pertama sebanyak 1, angka pada
digit kedua sebanyak 1, dan angka pada digit ketiga sebanyak 2.
· Tombol kedua menambah angka pada digit pertama sebanyak 3, angka pada
digit kedua sebanyak 3, dan angka pada digit ketiga sebanyak 1.
· Tombol ketiga menambah angka pada digit pertama sebanyak 9, angka pada
digit kedua sebanyak 9, dan angka pada digit ketiga sebanyak 9.
Apabila angka yang ada sudah lebih dari 9, maka Ia akan kembali lagi ke 0. Sebagai
contoh : Jika saat ini kunci menampilkan 123 dan kita menekan tombol ketiga, maka
kunci
akan berubah menjadi 012.

19. Apabila saat ini kunci yang ada menampilkan 111 dan Pak Dengklek ingin
menampilkan 777, maka berapa jumlah penekanantombol minimal yang dapat
Pak Dengklek lakukan?
A. 4
B. 5
C. 6
D. 7
E. Tidak mungkin

20. Apabila saat ini kunci yang ada menampilkan 241 dan Pak Dengklek ingin
menampilkan 392, maka berapa jumlah penekanan tombol minimal yang dapat
Pak Dengklek lakukan?
A. 4
B. 5
C. 6
D. 7
E. Tidak mungkin

Perhatikan deskripsi berikut ini untuk soal nomor 21 dan 22


Pak Dengklek memiliki N buah bilangan di papan tulis. Pak Chanek, yang
merupakan musuh bebuyutan Pak Dengklek menantang untuk mengubah N buah
bilangan tersebut menjadi sama satu sama lain. Pak Chanek hanya
memperbolehkan Pak Dengklek untuk melakukan operasi berikut ini:
1. Mengubah suatu bilangan x menjadi 2x
2. Mengubah suatu bilangan x menjadi
Setiap operasi akan memakan waktu sebanyak 1 detik. Pak Chanek pun tentu
memberikan Pak Dengklek tantangan harus mengubah N bilangan tersebut menjadi
satu sama lain dalam waktu yang minimum.

142
21. Jika N bernilai 5 dan bilangan yang ada di papan tulis adalah 10, 14, 6, 28, 36.
Berapa waktu minimum yang Pak Dengklek butuhkan untuk membuat bilangan
tersebut sama satu sama lain?
A. 15 detik
B. 16 detik
C. 17 detik
D. 18 detik
E. 19 detik

22. Jika N bernilai 5 dan bilangan yang ada di papan tulis adalah 6, 12, 3, 48, 24.
Berapa waktu minimum yang Pak Dengklek butuhkan untuk membuat bilangan
tersebut menjadi sama?
A. 4 detik
B. 5 detik
C. 6 detik
D. 7 detik
E. 8 detik

Perhatikan deskripsi berikut ini untuk soal nomor 23 dan 24

Dalam sebuah perusahaan, suatu proyek yang dipimpin oleh seorang pimpinan
proyek akan dibagi-bagikan kepada 6 buah tim kecil yang beranggotakan sebagai
berikut:
· Tim I : Abdul, Chika, Dono
· Tim II : Chika, Edgar, Gogo
· Tim III : Abdul, Farhan
· Tim IV : Abdul, Beni, Edgar
· Tim V : Beni, Chika, Farhan
· Tim VI : Beni, Dono, Gogo
Tiap awal bulan, setiap tim perlu melakukan rapat rutin bulanan yang wajib dihadiri
seluruh anggota tim dengan lengkap. Tiap rapat rutin bulanan berdurasi selama 1 hari
penuh. Karena alasan tersebut, untuk dua tim yang memiliki anggota yang sama

23. Apabila pada 1 hari dapat dilakukan > 1 rapat rutin untuk tim-tim yang tidak
memiliki anggota yang sama, berapa hari minimal supaya sang pimpinan proyek
dapat memastikan bahwa seluruh tim sudah melakukan rapat bulanan?
A. 2
B. 3
C. 4
D. 5
E. 6

24. Ternyata, terdapat sebuah modul proyek yang belum ditangani oleh tim I sampai VI
sehingga sang pimpinan proyek membentuk sebuah tim kecil (tim VII) yang terdiri dari
Abdul, Dono, dan Gogo. Berapa hari minimum supaya yang pimpinan proyek dapat
memastikan bahwa tim I sampai VII sudah melakukan rapat bulanan?
A. 2
B. 3
C. 4

143
D. 5
E. 6

25. Enam kota baru saja selesai dibangun dan kota tersebut belum terhubungkan oleh jalan.
Pak Dengklek sebagai Gubernur dari keenam kota tersebut ingin menghubungkan 6
kota tersebut dengan biaya semurah mungkin. Diketahui rencana pembangunan jalan
beserta biayanya tertera pada gambar sebagai berikut :

A. 31
B. 32
C. 42
D. 43
E. 45

26. Gambar sebagai berikut adalah peta jalan antar kota di negeri 1001 Malam

Karena banyak wisatawan yang mengagumi keindahan negeri 1001 Malam, sang
raja berencana untuk membangun beberapa jalan tambahan supaya para wisatawan
dapat bertamasya mengunjungi setiap kota dengan melewati setiap jalan hanya satu
kali saja. Sebuah jalan tambahan yang dibangun hanya dapat menghubungkan tepat
dua buah kota, dan dua buah kota dapat dihubungkan oleh lebih dari 1 (satu) jalan.
Berapakah minimum banyak jalan tambahan yang perlu dibangun agar seorang
wisatawan yang berawal dari sebuah kota dapat menggunakan setiap jalan antar
kota tepat sekali (tidak harus kembali ke kota asal)?
A. 1
B. 2
C. 3
D. 4
E. 5

27. Kuda-kuda milik raja hitam sedang makan di suatu papan catur berukuran 4 x 4
petak. Semua kuda milik raja hitam adalah kuda perang yang akan menyerang
apapun yang terletak pada daerah serang mereka. Jika kuda terletak pada posisi

144
(x,y), maka daerah serang kuda tersebut adalah petak pada posisi (x+1,y+2),(x-
1,y+2),(x+1,y-2),(x-1,y-2),(x+2,y+1),(x-2,y+1),(x+2,y-1), dan (x-2,y-1). Dengan
catatan posisi-posisi tersebut berada dalam area papan catur. Para pengawal
kerajaan telah mengatur letak tiap kuda sehingga tidak ada satupun kuda yang akan
saling menyerang. Berapa jumlah maksimal kuda milik raja hitam?
A. 6
B. 8
C. 10
D. 12
E. 16

Perhatikan potongan program berikut ini untuk soal nomor 28-30


var
arr : array[1..100, 1..100] of boolean;
sudah : array[1..100] of boolean;
res : array[1..100] of integer;
n, i, x, y, j : integer;

procedure FDS(now, dep : integer);


var
i : integer;
begin
sudah[now] := true;
res[now] := dep;
for i := 1 to n do begin
if ((arr[now][i] = true) and (not(sudah[i]))) then begin
FDS(i, dep+1);
end;
end;
end;
begin
readln(n);
for i := 1 to n do begin
for j := 1 to n do
arr[i][j] := false;
sudah[i] := false;
res[i] := 0;
end;
for i := 1 to (n-1) do begin
readln(x, y);
arr[x][y]
28. Jika diinputkan nilai := true;
arr[y][x] := true; 5
end; 12
FDS(1, 0); 13
end. 25
42

Maka nilai dari res[4] + res[5] setelah pemanggilan prosedur FDS(1, 0) adalah …
A. 2
B. 4

145
C. 6
D. 8
E. 10

29. Jika diinputkan nilai

8
12
76
63
13
52
42
68

Maka nilai dari res[1] + res[2] + res[3] + …+ res[8] = ...


A. 11
B. 12
C. 13
D. 14
E. 15

30. Jika nilai n = 100, maka nilai res terbesar yang mungkin untuk segala macam
input yang valid adalah …
A. 96
B. 97
C. 98
D. 99
E. 100

146
TIPS BELAJAR PROGRAMMING

Materi untuk menghadapi OSK dan OSP sebetulnya sudah selesai


disampaikan semuanya pada paket 1 hingga 10. Untuk paket 11 hingga 15, hanya
akan disediakan berbagai macam latihan soal dengan materi gabungan. Khusus
untuk paket ini, penulis ingin menyampaikan beberapa tips dalam belajar
programming.
Belajar programming sebenarnya gampang-gampang susah. Untuk bisa menjadi ahli
dalam programming diperlukan jam terbang latihan yang tinggi. Selain itu, diperlukan
juga pemahaman materi yang baik mengenai algoritma-algoritma tertentu. Penulis
akan menyampaikan beberapa tempat latihan yang bisa dijadikan referensi untuk
latihan.
1. TLX (https://training.ia-toki.org/)
Online judge milik Tim Olimpiade Komputer Indonesia (TOKI) ini cocok sekali
untuk orang yang baru pertama kali belajar programming. Terdapat beberapa
materi dan latihan soal yang disediakan mulai dari basic hingga advanced!

2. Codeforces (http://codeforces.com/)

Online judge dari Rusia ini berisi banyak sekali soal dengan cerita-cerita yang
menarik mulai dari basic hingga advanced. Terdapat banyak sekali kontes yang
disediakan oleh online judge ini.
3. SPOJ (http://www.spoj.com/)
Online judge ini memiliki banyak soal dengan berbagai kategori. Cukup
recommended sebagai persiapan OSN.

4. Codechef (https://www.codechef.com/ )
Hampir mirip dengan codeforces, soal-soal yang disediakan juga memiliki cerita-
cerita yang menarik.

5. USACO ( http://train.usaco.org/usacogate)
Online judge yang dipakai USA untuk mempersiapkan siswanya menghadapi IOI.
Sangat recommended bagi persiapan OSN.

6. UVA (https://uva.onlinejudge.org/)
Online judge ini cocok digunakan sebagai tempat latihan algoritma yang baru
dipelajari.

Belajar programming adalah hal yang menyenangkan, oleh karena itu anggaplah
latihan sebagai hal yang menyenangkan karena semakin banyak latihan tanpa
disadari kemampuan kita juga akan semakin bertambah! Semangat!

147
LATIHAN SOAL

1. Negasi dari pernyataan “Jika saya lolos OSP, maka saya akan menuju OSN”
adalah …
A. Saya lolos OSP dan saya akan menuju OSN
B. Saya lolos OSP dan tidak menuju OSN
C. Saya lolos OSP atau saya tidak menuju OSN
D. Saya lolos OSP atau saya akan menuju OSN
E. Jika saya tidak menuju OSN maka saya tidak lolos OSP

2. Sebuah kelas terdiri atas 5 orang laki-laki dan 4 orang perempuan. Diantara
mereka akan dipilih setidaknya 7 orang untuk mengikuti suatu perlombaan.
Berapa banyak susunan pemilihan yang berbeda apabila setidaknya terdapat
2 anak perempuan yang terpilih?
A. 55
B. 46
C. 45
D. 36
E. 35

3. Bilangan 2018 habis dibagi oleh bilangan-bilangan positif n1, n2, n3, … dst.
Berapakah hasil penjumlahan bilangan-bilangan tersebut?
A. 3010
B. 3020
C. 3030
D. 3040
E. 3050

4. Berapa banyak pasangan (x, y) bilangan bulat positif yang memenuhi


persamaan ?
A. 12
B. 13
C. 14
D. 15
E. 16

5. Di dalam suatu keranjang terdapat 15 jeruk , empat diantaranya diketahui


busuk. Jika diambil 5 jeruk secara acak (random), maka peluang tepat satu
diantaranya busuk adalah?
A.

B.

C.

148
D.

E.

6. Empat sekawan, (Irfan, Ridho, Bimo, dan Iwang) sedang mengikuti lomba lari.
Jika Irfan lebih cepat selesai daripada Iwang dan Ridho lebih lambat daripada
Bimo, ada berapa kemungkinan urutan finish mereka dalam lomba tersebut?
A. 4
B. 5
C. 6
D. 7
E. 8

7. Banyaknya nilai yang memenuhi persamaan ( )


adalah …
A. 140
B. 141
C. 142
D. 143
E. 144

8. Berapa banyak bilangan bulat positif berbeda yang habis membagi 337500?
A. 48
B. 60
C. 72
D. 90
E. 96

9. Anda memiliki empat kotak berlabel Apel, Pisang, Jeruk, dan Rambutan.
Setiap kotak ditutup. Anda diberi tahu bahwa setiap kotak hanya berisi satu
jenis buah dari 4 buah tersebut, Anda juga diberi tahu bahwa hanya satu dari
kotak diberi label dengan benar. Berapa banyak kotak minimal yang perlu
Anda buka untuk untuk mengetahui mana yang diberi label dengan benar?
A. 0
B. 1
C. 2
D. 3
E. 4

10. Terdapat 5 buah kotak di kelas Iwang. Tepat salah satu dari kotak tersebut
berisi Handphone iphone 6s!. Disetiap kotak terdapat sebuah pernyataan
yang mana hanya 1 saja yang bernilai benar.
· Kotak 1: Hp terdapat di kotak ini
· Kotak 2: Hp tidak ada di kotak ini

149
· Kotak 3: Hp bukan berada di kotak nomor 1
· Kotak 4: Hp ada di kotak nomor 3 atau 5
· Kotak 5: Hp ada di kotak dengan nomor ganjil
Dimanakah HP itu berada?
A. Kotak 1
B. Kotak 2
C. Kotak 3
D. Kotak 4
E. Kotak 5

11. Perbandingan jumlah siswa laki-laki dan perempuan di kelas wengki adalah
3:2. Jika kemudian 12 orang siswa laki-laki dari kelas Bimo pindah ke kelas
wengki dan 12 orang siswa perempuan kelas wengki pindah ke kelas Ridho,
perbandingan jumlah siswa laki-laki dan perempuannya sekarang adalah 7:3.
Banyaknya siswa perempuan di kelas wengki mula-mula adalah …
A. 12 orang
B. 24 orang
C. 36 orang
D. 48 orang
E. 52 orang

12. Banyaknya bilangan dari 1 sampai 2018 yang tidak habis dibagi 5 tetapi habis
dibagi 3 adalah …
A. 532
B. 534
C. 536
D. 538
E. 540

13. Diketahui beberapa pernyataan berikut ini:


· Jika Abdul pergi ke sekolah maka Budi tidak akan bersekolah
· Budi tidak bersekolah jika dan hanya jika Caca bersekolah
· Jika Caca bersekolah maka Dedi tidak akan bersekolah
· Jika Edwin sekolah, maka Dedi tidak akan bersekolah.
· Abdul pergi ke sekolah
Berapa kesimpulan yang bisa Anda dapatkan dari pernyataan-pernyataan di
atas?
A. 0
B. 1
C. 2
D. 3
E. 4

150
14. Jumlah dua bilangan terkecil yang memenuhi sifat jika dibagi 6 bersisa 3 dan
jika dibagi 5 bersisa 2 adalah …
A. 84
B. 86
C. 88
D. 90
E. 92

15. Berapa banyak faktor bilangan bulat positif dari 360 yang merupakan
kelipatan 12 atau kelipatan 15?
A. 8
B. 12
C. 16
D. 20
E. 24

16. Perhatikan potongan program berikut ini


function f(x : longint):integer;
var
res : integer;
begin
res := 0;
while (x > 0) do begin
res := res + (x div 5);
x := x div 5;
end;
f:=res;
end;

Nilai dari f(2019) adalah …


A. 502
B. 503
C. 504
D. 505
E. 506

Perhatikan potongan program berikut ini untuk soal nomor 17 dan 18

while (a > b) do
begin
a := a – b;
c := c + 2;
d := d + b;
end;
writeln(c, ‘ ‘, d);

151
17. Jika pada awalnya nilai a, b, c, d berturut-turut adalah 23, 4, 0, 0; maka output
dari potongan program tersebut adalah …
A. 10 10
B. 10 15
C. 10 20
D. 15 15
E. 15 20

18. Jika pada awalnya nilai a, b, c, d berturut-turut adalah 50, 10, 2, dan 10; maka
output dari potongan program tersebut adalah …
A. 10 40
B. 10 50
C. 20 40
D. 20 50
E. 30 40

Perhatikan potongan program berikut ini untuk soal nomor 19 dan 20

function sabeb(x : longint):longint;


var
ret : integer;
begin
ret := 0;
while (x > 0) do begin
ret := 10*ret + x mod 10;
x := x div 10;
end;
sabeb := ret;
end;

19. Nilai dari sabeb(23654) adalah …


A. 36542
B. 45623
C. 45632
D. 56423
E. 56432

20. Nilai dari sabeb(33459) adalah …


A. 93345
B. 93354
C. 94533
D. 95433
E. 95343

152
Perhatikan program berikut ini untuk soal nomor 21 sd. 23
var
x, res, curr: longint;
N : longint;

begin
readln(N);
x := N;
curr := 1;
res := 0;
repeat
res := res + curr + 1;
curr := curr + 2;
dec(x);
until (x = 0);
writeln(res);
end.

21. Jika nilai N adalah 5 berapakah output dari program tersebut?


A. 20
B. 25
C. 30
D. 35
E. 40

22. Jika nilai N adalah 30 berapakah output dari program tersebut?


A. 920
B. 930
C. 940
D. 950
E. 960

23. Jika nilai N adalah 50, berapkah nilai dari curr + res ?
A. 2551
B. 2561
C. 2651
D. 2661
E. 2751

153
Perhatikan potongan program berikut ini untuk soal nomor 24 sd 26

var
data : array[1..10] of integer = (2,4,6,1,5,3,7,9,8,0);

procedure acakin(n : integer);


begin
if (n <= 10) then
begin
acakin(n shl 1);
acakin((n shl 1)+1);
write(data[n],’ ‘);
end;
end;

24. Jika dilakukan pemanggilan acakin(1), maka output yang dihasilkan adalah

A. 9 8 1 0 5 4 3 7 6 2
B. 9 8 1 0 5 6 4 3 7 2
C. 9 8 2 1 0 5 6 4 3 7
D. 9 8 2 3 0 1 5 6 7 4
E. 9 8 2 3 0 4 1 5 6 7

25. Jika output yang dihasilkan terurut menaik setelah pemanggilan acakin(1),
maka array data harus berisi:
A. (9, 5, 2, 8, 4, 7, 6, 0, 1, 3)
B. (9, 5, 8, 2, 4, 6, 7, 0, 1, 3)
C. (9, 5, 8, 2, 4, 6, 0, 1, 3, 7)
D. (9, 5, 8, 4, 2, 6, 0, 1, 3, 7)
E. (9, 5, 8, 4, 2, 6, 0, 1, 7, 3)

26. Jika output yang dihasilkan terurut menurun setelah pemanggilan acakin(1),
maka array data harus berisi:
A. (0, 4, 1, 7, 5, 3, 2, 9, 8, 6)
B. (0, 4, 1, 7, 5, 3, 2, 9, 6, 8)
C. (0, 4, 1, 7, 5, 3, 9, 2, 8, 6)
D. (0, 4, 1, 7, 5, 3, 9, 8, 2, 6)
E. (0, 4, 1, 7, 5, 3, 9, 8, 6, 2)

154
Perhatikan potongan program berikut ini untuk soal nomor 27 dan 28

function huehuehue(a, b: integer):integer;


begin
if ((a + b)<=0) then
huehuehue := b
else
huehuehue := huehuehue(a-1, b-2) + a + b;
end;

27. Nilai dari huehuehue(1, 5) adalah …


A. 4
B. 6
C. 8
D. 10
E. 12

28. Nilai dari huehuehue(10, 15) adalah …


A. 110
B. 111
C. 112
D. 113
E. 114

Perhatikan program berikut ini untuk soal nomor 29 dan 30


var
n, m : longint;
sum : longint;

procedure f(var x, y:longint);


begin
if ((x < 0) or (y < 0)) then sum := 0
else begin
x := x-2; y := y-1;
f(x, y);
sum := sum + x + y;
end;
end;

155
begin
readln(n, m);
f(n, m);
writeln(sum,’ ‘, n,’ ‘, m);
end.

29. Jika diinputkan nilai 5 10, maka output dari program tersebut adalah …
A. 16 -2 9
B. 18 -2 9
C. 16 -1 7
D. 18 -1 7
E. 20 -2 9

30. Jika diinputkan nilai 1 10, maka output dari program tersebut adalah …
A. 6 -1 7
B. 6 -1 9
C. 8 -1 7
D. 8 -1 9
E. 10 -1 7

156
SOAL

1. Ada berapa banyak bilangan dari 1 sampai 2019 yang tidak habis 3, tidak
habis dibagi 2 dan habis dibagi 5?
A. 131
B. 132
C. 133
D. 134
E. 135

2. Pak Ganesh memiliki 12 buah permen di sakunya. Pak Ganesh lalu ingin
membagikan permen-permen tersebut kepada 4 orang cucunya. Jika setiap
cucu Pak Ganesh minimal mendapatkan 1 permen, ada berapa banyak cara
Pak Ganesh membagikan permen-permen tersebut?
A. 150
B. 155
C. 160
D. 165
E. 170

3. Diketahui beberapa pernyataan berikut ini:


· Cucu berkata jujur atau Dedi berkata bohong
· Andra berkata jujur jika dan hanya jika Budi berkata jujur
· Jika Cucu berkata jujur maka Budi juga demikian
· Jika Edwin berkata bohong maka Dedi juga demikian
· Andra tidak berkata jujur
Orang yang tidak bisa ditentukan perkataannya jujur atau bohong adalah …
A. Andra
B. Budi
C. Cucu
D. Dedi
E. Edwin

4. Banyaknya bilangan bulat positif kurang dari 1000 yang memenuhi sifat jika
dibagi 5 bersisa 2 dan jika dibagi 3 bersisa 1 adalah …
A. 65
B. 66
C. 67
D. 68
E. 69

157
Perhatikan desripsi berikut ini untuk soal nomor 5 dan 6

Ani bersama kelima temannya sedang mengukur tinggi badan. Teman-teman Ani
bernama Budi, Cici, Doni, Edi, dan Fanny. Berikut ini adalah fakta-fakta yang
didapatkan dari
hasil pengukuran mereka :
· Tidak ada dua orang yang memiliki tinggi badan yang sama
· Doni lebih tinggi dari Budi, tetapi lebih pendek dari Fanny
· Budi lebih tinggi dari Ani, tetapi lebih pendek dari Edi
· Salah satu dari Ani dan Cici adalah yang paling pendek

5. Manakah pernyataan dibawah ini yang dapat dipastikan kebenarannya?


A. Edi lebih tinggi dari Doni
B. Fanny lebih pendek dari Cici
C. Budi lebih pendek dari Ani
D. Ani lebih pendek dari Fanny
E. Cici lebih pendek dari Doni

6. Berapa banyak kemungkinan urutan berbeda apabila mereka diurutkan


berdasarkan tinggi badan mereka?
A. 20
B. 18
C. 15
D. 12
E. 10

7. Pak Dengklek memiliki 3 orang anak yang bernama Kwok, Kwak, dan Kwek.
Jumlah umur Kwok dan Kwak 3 tahun yang akan datang adalah 34. Jumlah
umur Kwak dan Kwek 4 tahun yang akan datang adalah 42. Jumlah umur
Kwok dan Kwek 2 tahun yang lalu adalah 28. Berapakah umur Kwek
sekarang?
A. 11
B. 13
C. 15
D. 17
E. 19

8. Berapakah nilai dari ( )


A. 0
B. 1
C. 2017
D. 2018
E. 2019

9. Berapa banyaknya string biner (string yang hanya terdiri dari angka 0 dan 1)
yang memiliki panjang 12 dan tidak mengandung dua angka 0 yang
berurutan?
Misal: 01011, 01, 1101, dst…

158
A. 100
B. 144
C. 177
D. 233
E. 377

10. Pak Dengklek memiliki 12 kelereng berwarna merah dan 8 kelereng berwarna
biru. Kelereng dengan warna yang sama tidak dapat dibedakan satu sama
lain. Pak Dengklek ingin membagi 20 kelereng miliknya tersebut menjadi 3
kelompok dengan syarat di tiap kelompok tersebut harus ada minimal dua
kelereng berwarna biru. Berapa banyaknya cara Pak Dengklek membagi
kelereng-kelereng miliknya menjadi 3 kelompok tersebut?
A. 542
B. 544
C. 546
D. 548
E. 550

11. Berapa jumlah semua bilangan asli dari 1 sampai 2019 yang habis dibagi 18
tetapi tidak habis dibagi 30?
A. 91130
B. 91132
C. 91134
D. 91136
E. 91138

12. Kevin memiliki uang bernilai 3 rupiah dan 10 rupiah. Louis, yang merupakan
teman baik Kevin ternyata menyadari bahwa Kevin akan selalu dapat
menyatakan sejumlah uang tertentu dengan hanya menggunakan uang
senilai 3 rupiah dan 10 rupiah mulai dari rupiah!. Nilai terkecil yang
memenuhi adalah …
A. 9
B. 12
C. 15
D. 18
E. 24

13. Pak Ganesh memiliki dua buah bilangan bulat positif, ia tiba-tiba lupa dengan
kedua bilangan tersebut. Namun ia ingat bahwa kpk dan fpb dari dua bilangan
tersebut adalah 150 dan 15. Selain itu, dia juga ingat bahwa jumlah kedua
bilangan tersebut adalah 105. Selisih dari kedua bilangan tersebut adalah …
A. 15
B. 30
C. 45
D. 60
E. 75

159
14. Terdapat 2 jenis permen, yaitu permen A dan B. Apabila diketahui jumlah
harga permen A dan B adalah 11 rupiah, dan permen A lebih mahal 10 rupiah
dibandingkan dengan permen B, maka berapakah harga permen B?
A. 1
B. 2
C. 3
D. 4
E. Jawaban A, B, C, dan D salah

15. Saat belanja di sebuah pusat perbelanjaan, Pak Dengklek berencana


membeli beberapa permen untuk 5 keponakannya. Dalam kotak terdapat 17
permen dengan 4 rasa, yaitu 2 permen rasa anggur, 3 permen rasa jeruk, 7
permen rasa mangga, dan 5 permen rasa strawberry. Pak Dengklek ingin
membelikan permen untuk kelima keponakannya dengan rasa yang sama.
Berapakah jumlah permen paling sedikit yang harus dibeli agar selalu
diperoleh 5 permen dengan rasa yang sama?
A. 12
B. 13
C. 14
D. 15
E. 16

Perhatikan potongan program berikut ini untuk soal nomor 16 dan 17

function apaya(x, y:integer):integer;


begin
if ((x = 0) and (y = 0)) then
apaya := 0
else if (x > y) then begin
if (x > -y) then apaya := apaya(x-1, y) + 1
else apaya := apaya(x, y+1) + 1;
end
else begin
if (x > -y) then apaya := apaya(x, y-1) + 1
else apaya := apaya(x+1, y) + 1;
end;
end;

16. Nilai dari apaya(12, 9) adalah ...


A. 20
B. 21
C. 22
D. 23
E. 24

17. Nilai dari apaya(-1000, -21) + apaya(-2017, -21) adalah …

160
A. 2057
B. 2059
C. 3057
D. 3059
E. 4001

18. Perhatikan potongan program berikut ini

ret := 1;
for i := 1 to 15 do
for j := 1 to i do
ret := ret + j;
writeln(ret);

Output dari potongan program di atas adalah …

A. 681
B. 683
C. 685
D. 687
E. 689

Perhatikan potongan program berikut ini untuk soal nomor 19 sd. 21

function sayang(x, y:longint):longint;


begin
if (y = 0) then sayang := x
else sayang := sayang(y, x mod y);
end;

function cinta(x:longint):longint;
var
i : integer;
begin
cinta := 1;
for i := 1 to x do
if (sayang(x, i) <> 1) then
inc(cinta);
end;

19. Berapakah nilai dari sayang(1440, 4080)?


A. 90
B. 120
C. 150
D. 240
E. 360

161
20. Nilai dari cinta(1000) adalah …
A. 600
B. 601
C. 602
D. 603
E. 604

21. Nilai dari cinta(2017) + cinta(2029) adalah …


A. 2
B. 3
C. 4
D. 5
E. 6

22. Perhatikan potongan program berikut ini

x := 1;
y := 1;
readln(N);
while (N > 0) do begin
x := x + y + 1;
y := y + 3;
x := x – 1;
N := N-1;
end;

Jika diinputkan N = 10, maka nilai dari X di akhir program adalah …


A. 142
B. 144
C. 146
D. 148
E. 150

Perhatikan potongan program berikut ini untuk soal nomor 23 sd. 25

procedure ALC(nilai : integer);


begin
if (nilai mod 2 = 0) then
write(‘A’)
else if (nilai mod 3 = 0) then
write(‘L’)
else if (nilai mod 5 = 0) then
write(‘C’)

162
else if (nilai mod 7 = 0) then
write(‘K’)
else
write(‘U’)
end;

var
it : integer;

begin
for it := 1 to 800 do
ALC(it);
end.

23. Berapa banyak huruf ‘A’ yang dicetak oleh program di atas?
A. 300
B. 400
C. 500
D. 600
E. 700

24. Berapa banyak huruf ‘L’ yang dicetak oleh program di atas?
A. 133
B. 134
C. 135
D. 136
E. 137

25. Berapa banyak huruf ‘U’ yang dicetak oleh program di atas?
A. 181
B. 182
C. 183
D. 184
E. 185

Perhatikan potongan program di bawah ini untuk soal nomor 26 dan 27

function piring(x : longint):longint;


begin
piring := 1;
while (x mod 2 = 0) do begin
piring := piring*2;
x := x div 2;
end;
end;

function mangkuk(x, y: longint):longint;


begin
mangkuk := 0;
if (x <= y) then mangkuk := piring(x) + mangkuk(x+1, y);
end;

163
26. Nilai dari piring(28) adalah …
A. 1
B. 2
C. 4
D. 8
E. 16

27. Berapakah nilai dari mangkuk(15, 45)?


A. 100
B. 110
C. 120
D. 130
E. 140

Perhatikan potongan program berikut ini untuk soal nomor 28 sd. 30

function makaroni(x:longint):longint;
begin
if x = 0 then makaroni := 1
else makaroni := x * makaroni(x-1);
end;

function pizza(x:longint):longint;
var i:longint;
begin
pizza := 0;
for i:=1 to x do
if x mod i = 0 then pizza := pizza + 1;
end;

function pasta(x,y:longint):longint;
var i:longint;
begin
pasta := 0;
for i:=x to y do
if i mod 2 = 0 then pasta := pasta + 1;
end;

28. Nilai dari makaroni (8) adalah …


A. 4050
B. 5040
C. 30240
D. 40320
E. 50400

164
29. Nilai dari pizza(makaroni(10)) adalah …
A. 240
B. 250
C. 270
D. 300
E. 320

30. Hasil dari pasta(100, 1000) adalah …


A. 450
B. 451
C. 452
D. 453
E. 454

165
SOAL

1. Pada sebuah toples, terdapat 1 juta ekor bakteri. Pada setiap detiknya, setiap
bakteri membelah diri menjadi tepat dua ekor bakteri, kemudian toples
tersebut dimasukkan 1 juta ekor bakteri tambahan. (Pada detik pertama, ada
3 juta bakteri. Pada detik kedua, ada 7 juta bakteri.) Berapakah banyak
bakteri pada detik ke 14?
A. 16383
B. 16384
C. 32767
D. 32768
E. 65535

2. Jika Pak Ganesh mengendarai motor dengan kecepatan 40 km/jam, Pak


Ganesh tiba 1 jam lebih telat. Namun jika Pak Ganesh mengendarai motor
dengan kecepatan 60 km/jam, Pak Ganesh tiba 1 jam lebih cepat dari
seharusnya. Seharusnya, dengan kecepatan berapakah Pak Ganesh
mengendarai motor?
A. 30 km/jam
B. 42 km/jam
C. 45 km/jam
D. 48 km/jam
E. 50 km/jam

3. Ada berapa banyak nilai n yang mungkin sehingga 3 −4, 4 −5, dan 5 −3
semuanya adalah bilangan prima?
A. 1
B. 2
C. 3
D. 4
E. 5

4. FPB dari 2017!+1 dan 2018!+1 adalah …


A. 1
B. 3
C. 5
D. 2017
E. 2018

5. Pak Ganesh memilki sejumlah coklat didalam tas nya. Jika pak Ganesh
membagikan coklat-coklat tersebut kepada 19 anak sama rata, maka akan
tersisa 1 coklat. Jika pak Ganesh membagikan coklat tersebut kepada 6 anak

166
sama rata, maka akan tersisa 3 coklat. Jika pada suatu hari pak Ganesh akan
membagikan coklat tersebut kepada 17 anak dan jumlah coklat yang dimiliki
pak Ganesh kurang dari 100, maka sisa coklat yang tidak dibagikan adalah …
A. 1
B. 2
C. 3
D. 4
E. 5

6. Dua buah bilangan berbeda akan dipilih dari himpunan bilangan {1, 2, 3, …,
21}. Ada berapa cara memilih dua bilangan berbeda sehingga perkaliannya
genap?
A. 105
B. 110
C. 115
D. 130
E. 155

7. Sebuah lantai persegi panjang dilapisi sepenuhnya dengan ubin yang


berukuran 1 × 2. Jika ubin-ubin ini tidak dipotong dan tidak saling bertindihan,
lantai tersebut tidak mungkin berukuran?
A. 4 × 12
B. 8 × 6
C. 11 × 3
D. 14 × 8
E. Tidak ada pilihan jawaban lain yang benar

8. Ada berapa banyak bilangan bulat positif kurang dari 1000000 yang
merupakan bilangan kuadrat, tetapi bukan merupakan bilangan kubik?
A. 900
B. 990
C. 899
D. 989
E. 1000

9. Berapa banyak angka nol berurutan diakhir 750! (n!= nx(n-1)x(n-2)…x1) ?


A. 185
B. 186
C. 187
D. 188
E. 189

10. Setiap bilangan bulat x dapat dituliskan ke dalam bentuk . 2 dengan


adalah bilangan ganjil dan b>=0. Misalkan fungsi B(x) akan mengembalikan

167
nilai b sesuai penjelasan di atas. Jika setiap nilai B(1)+B(2)+B(3)+...+B(100)
dijumlahkan, berapakah jumlahnya?
A. 94
B. 95
C. 96
D. 97
E. 98

11. Pak Budi memiliki kambing – kambing yang dinomori dari 1 hingga 1000. Saat
tiba panen, peternakan tersebut dibuka untuk umum untuk selanjutnya dijual
kepada orang – orang. Seorang pembeli pun datang mengunjungi Pak untuk
membeli kambing sebanyak – banyaknya. Akan tetapi, Pak Budi memiliki
peraturan bahwa jika pembeli membeli kambing bernomor x, maka dia tidak
boleh membeli kambing bernomor 7x. Jadi jika membeli kambing ke-1,
dilarang membeli kambing ke-7, namun boleh membeli kambing ke-49.
Berapa jumlah kambing maksimal yang bisa dibeli?
A. 560
B. 142
C. 124
D. 876
E. 720

12. Dalam suatu liga, terdapat 12 tim ikut berpartisipasi. Setiap tim akan bermain
melawan setiap tim lain sebanyak dua kali, aturan home away. Ketika liga
sedang berjalan, terdapat 1 tim yang dikeluarkan dari liga setelah 5
pertandingannya berlangsung. Ada berapa pertandingan keseluruhan liga dari
awal hingga akhir?
A. 60
B. 120
C. 115
D. 70
E. 80

13. Suatu toko menjual barang dengan harga dua kali harga produksi. Toko
kemudian membuat diskon sebesar 25%. Pak Budi tertarik dengan harga
diskon tersebut kemudian membelinya dan menjual barang yang dibeli nya
dengan harga 20% lebih banyak dari harga yang dia beli. Berapa persen
keuntungan pak Budi dibandingkan toko setelah diskon untuk setiap unit
barang?
A. 1 : 2
B. 2 : 3
C. 3 : 5
D. 2 : 5
E. 1 : 3

168
14. Pak Dengklek adalah seseorang yang sangat suka dengan teka-teki. Pada
suatu hari, ia membeli 10 bola, yang terdiri dari 3 warna putih, 4 warna merah,
dan 3 warna hijau. Ia ingin mengambil beberapa bola tersebut secara
bersamaan (boleh berapapun). Berapa banyaknya bola minimum yang
diperlukan, agar dapat dijamin bahwa pak Dengklek mengambil minimal 2
bola untuk setiap warna?
A. 6
B. 7
C. 8
D. 9
E. 10

15. Bu Dengklek adalah seorang guru. Minggu depan, Bu Dengklek ingin


membagikan permen kepada 7 orang muridnya, namun belum tentu semua
muridnya datang ke sekolah pada minggu depan. Sebagai tambahan, Bu
Dengklek ingin membagikan permen kepada murid-muridnya sama rata dan
tidak bersisa. Berapakah jumlah permen minimal yang harus Bu Dengklek
bawa minggu depan?
A. 1
B. 210
C. 420
D. 2520
E. 5040

16. Perhatikan potongan program berikut ini

x := 1;
for i := n downto 1 do
begin
for j := 1 to i do
x := x + n;
for j := 1 to n-i do
x := x - n;
end;

Jika n = 10, nilai x di akhir program adalah …


A. 90
B. 91
C. 100
D. 101
E. 102

169
Perhatikan potongan program berikut ini untuk soal nomor 17 sd 19.
function xyz(x, y, z : integer):integer;
begin
if (z<0) then
xyz := x+y
else if (y<0) then
xyz := x+z
else if (x<0) then
xyz := y+z
else
xyz := xyz(x-2, y-3, z-5);
end;

17. Nilai dari xyz(12, 10, 15) adalah …


A. -2
B. -1
C. 0
D. 1
E. 2

18. Nilai dari xyz(24, 37, 125) adalah …


A. 56
B. 58
C. 60
D. 62
E. 64

19. Nilai dari xyz(2017, 2018, 2019) adalah …


A. 2015
B. 2016
C. 2017
D. 2018
E. 2019

20. Perhatikan program berikut ini

var
sum: longint;
i : integer;

begin
sum := 0;
for i := 1 to 2017 do begin
sum := sum + i * i * i;
sum := sum mod 2018;
end;
writeln(sum);
Output dari program di atas adalah …
end.

170
A. 0
B. 1
C. 1007
D. 1008
E. 1009

Perhatikan potongan program berikut ini untuk soal nomor 21 dan 22

procedure tulis(n,m:integer);
var
i,j,k:integer;
begin
for i:=1 to n do
begin
for j:=1 to (n div m) do
for k:=1 to m do
writeln('*');
for j:=1 to (n mod m) do
writeln('-');
end;

21. Jika kita panggil prosedur tulis(99,99), berapakah jumlah ‘*’ yang tertulis
dilayar?
A. 9604
B. 9702
C. 9800
D. 9801
E. 10000

22. Bila kita memanggil prosedur tulis(n,m), berapakah jumlah simbol (‘*’ maupun
‘-‘) yang tertulis?
A.
B. ∗
C.
D. ∗ +
E. +

Perhatikan potongan program berikut ini untuk soal nomor 23 dan 24

function f(x : longint):longint;


begin
if (x < 3) then
f := x-1
else begin
writeln(‘$’);
f := f(x-1) + f(x-2) + 1;
end;
end;
171
23. Berapakah hasil dari pemanggilan f(10)?
A. 80
B. 84
C. 88
D. 92
E. 96

24. Saat pemanggilan f(10), ada berapa banyak ‘$’ yang tercetak?
A. 50
B. 54
C. 58
D. 62
E. 66

Perhatikan potongan program berikut ini untuk soal nomor 25

function acakacak(n:longint):longint;
begin
if (n = 0) or (n=1) then acakacak := 1
else if (n mod 2 = 0) then acakacak := acakacak(n div 2)*n + 2*n
else acakacak := acakacak((n+1) div 2)*n + n;
end;

25. Nilai dari acakacak(16) adalah …


A. 4238
B. 4284
C. 4384
D. 4438
E. 4483
Perhatikan potongan program berikut ini untuk soal nomor 26 dan 27
hitung:=0;
n:=10;
for i:=1 to n do
if (i mod 2 = 0) then
for j:=1 to 10 do
if (j mod 2 = 0) then
hitung := hitung + j
else
hitung := hitung + i;
writeln(hitung);

26. Output yang ditampilkan di layar adalah …


A. 200

172
B. 250
C. 300
D. 400
E. 500

27. Jika nilai n diganti dengan 1000, apakah output yang ditampilkan di layar?
A. 25050000
B. 25500000
C. 25550000
D. 25055000
E. 25555000
Perhatikan potongan program berikut ini

function kibo(n: integer):integer;


begin
if (n = 2) or (n = 1) or (n = 0) then kibo := n
else kibo := kibo(n-1) + kibo(n-3);
end;

28. Berapa kalikah kibo(3) dipanggil saat pemanggilan kibo(7)?


A. 1
B. 2
C. 3
D. 4
E. 5

Perhatikan potongan program berikut ini untuk soal nomor 29 dan 30

function hop(a,b:longint):longint;
forward;

function hip(a,b:longint):longint;
begin
if (a = 0) then
hip:=0
else
hip:=a+hop(a-1,b);
end;

function hop(a,b:longint):longint;
begin
if (b = 0) then
hop:=0
else
hop:=b+hip(a,b-1);
end;

173
29. Berapakah nilai dari hip(5, 8)?
A. 40
B. 45
C. 50
D. 55
E. 60

30. Berapakah nilai dari hop(200, 100)?


A. 20000
B. 20010
C. 20100
D. 20110
E. 21000

174
SOAL

1. Suatu susunan 10-angka 0,1,2,3,4,5,6,7,8,9 dikatakan susunan cantik jika


memenuhi tiga aturan sebagai berikut:
a) Jika yang dibaca dari kiri ke kanan hanya angka 0,1,2,3,4 membentuk
barisan naik
b) Jika yang dibaca kiri ke kanan hanya angka 5,6,7,8,9 membentuk barisan
turun
c) Angka 0 bukan pada posisi pertama.
Sebagai contoh, 9807123654 adalah susunan cantik. Berapa banyak-kah
susunan cantik tersebut?
A. 120
B. 122
C. 124
D. 126
E. 128

2. Ada berapa bilangan diantara 1 sampai 1 juta yang merupakan bilangan kuadrat
namun bukan bilangan kubik?
A. 900
B. 800
C. 950
D. 990
E. 1000

3. Sebuah lantai persegi panjang dilapisi sepenuhnya dengan ubin yang berukuran
1 × 2. Jika ubin-ubin ini tidak dipotong dan tidak saling bertindihan, lantai tersebut
tidak mungkin berukuran?
A. 4 × 9
B. 8 × 8
C. 11 × 7
D. 16 × 5
E. Tidak ada pilihan jawaban lain yang benar

4. Terdapat 10 orang yang masing-masing memikirkan sebuah bilangan bulat.


Untuk setiap kesempatan bertanya Anda hanya dapat bertanya kepada sekaligus
dua orang, dan mereka hanya akan menjawab penjumlahan kedua bilangan
mereka secara bersamaan. Berapa pertanyaan minimal yang harus diajukan
untuk mengetahui masing-masing bilangan yang mereka pikirkan?
A. 8
B. 9

175
C. 10
D. 11
E. 20

5. Pak Ganesh memiliki bilangan kesayangan yaitu 312342. Hari ini, Pak Ganesh
sedang bosan sehingga dia bermain dengan bilangan kesayangannya tersebut.
Dia bermain dengan cara mempermutasikan angka angka pada bilangan
kesayangannya sehingga dapat membentuk suatu bilangan yang baru. Sebagai
contoh, dia dapat mempermutasikan bilangannya menjadi 213342. Jika
kemudian dia mengurutkan semua bilangan yang dapat dibentuk tadi dari yang
terkecil, maka urutan ke 137 adalah bilangan …
A. 332214
B. 332241
C. 334122
D. 334212
E. 334221

6. Sebuah keluarga terdiri dari ayah, ibu, 3 anak laki-laki dan masing-masing anak
laki-laki memiliki 2 saudara perempuan. Berapa total anggota keluarga tersebut?
A. 7
B. 8
C. 9
D. 10
E. 11

7. Aang, Budi, Cici, Dika dan Eno bermain ayam-bebek. Setiap anak menjadi ayam
atau bebek, tetapi tidak keduaduanya. Ayam selalu jujur dan bebek selalu
berdusta. Aang berkata bahwa Budi adalah ayam. Cici berkata bahwa Dika
adalah bebek. Eno berkata Aang bukan bebek. Budi berkata Cici bukan ayam.
Dika berkata bahwa Eno dan Aang adalah binatang yang berbeda. Ada berapa
anak yang menjadi bebek dalam permainan ini?
A. 1
B. 2
C. 3
D. 4
E. 5

8. Bangun, Rama, dan Ucup memiliki kumpulan bilangan. Bangun memiliki semua
bilangan genap dari 1 hingga 1000, sedangkan Rama memiliki semua bilangan
yang habis dibagi 3 dari 200 hingga 600, dan Ucup memiliki semua bilangan
yang habis dibagi 5 dari 500 hingga 700. Kemudian mereka memutuskan untuk
menggabungkan bilangan-bilangan tersebut untuk diserahkan kepada Pak Nafri

176
sebagai hadiah ulang tahunnya. Berapa banyak bilangan berbeda yang diterima
oleh Nafri?
A. 582
B. 583
C. 584
D. 674
E. 675

9. Berapakah nilai dari 2019 18?


A. 3
B. 6
C. 9
D. 12
E. 15

10. Berapakah hasil dari 1 + 1 + 3 + 1 + 3 + 5 + … + 1 + 3 + 5 + 7 + … + 199 ?


A. 337350
B. 338350
C. 339350
D. 334050
E. 334150

11. Terdapat sebuah nomor telepon abcdefg. Sebuah nomor telepon yang bagus
adalah sebuah nomor yang memenuhi (abc=def) atau (abc = efg) (di sini, abc
menyatakan bilangan tiga digit abc). Ada berapa kemungkinan nomor telepon
yang bagus ini?
A. 9000
B. 9990
C. 14985
D. 19980
E. 19990

12. Bilangan bulat terbesar sehingga 20 habis dibagi 16! adalah…


A. -14
B. -13
C. -12
D. -10
E. -9

13. Pak Umar menaruh barang berharganya di sebuah brankas (lemari besi) dengan
kunci kombinasi 7 digit setiap digit adalah bilangan 0 sampai dengan 9. Supaya

177
tidak mudah kelupaan ia men-set 3 digit berharga 0 (tidak tahu digit yang mana!)
dan lainnya seperti sebelumnya maksimum hanya muncul 1 kali dalam kode
(kecuali yang 0 tsb). Anda berancang-ancang kalau suatu ketika Pak Umar lupa
kembali maka anda berhitung ada berapa kemungkinan kombinasi yang nanti
harus dicoba?
A. 105820
B. 105830
C. 105840
D. 105850
E. 105860

Perhatikan percakapan antara dua orang berikut ini


Wengki : “Aku lagi mikirin dua buah angka yang berbeda nih bim, kamu bisa
nebaknya enggak?”
Bimo : “Iya enggak lah, kasih aku petunjuk dong”
Wengki: “Digit terakhir dari hasil perkalian dua angka ini adalah nomor favoritmu”
Bimo : “Oh iya! Aku sekarang tahu angka apa yang dipikirkan olehmu”

14. Jumlah dari dua buah angka yang dipikirkan wengki adalah …
A. 7
B. 8
C. 9
D. 10
E. 11

15. Diberikan himpunan A = {1, 2, 3, 4, …, 2018}. Berapa banyak bilangan minimal


yang harus kita ambil pada himpunan A sehingga dari bilangan-bilangan yang
kita ambil akan selalu ada minimal 1 pasang bilangan yang jumlahnya 2019?
A. 1008
B. 1009
C. 1010
D. 1011
E. 1012

Perhatikan potongan program berikut ini untuk soal nomor 16 sd 18

function apa(x, y : longint):longint;


begin
if y = 0 then apa := 1
else if y = 1 then apa := x
else apa := apa(x, y div 2) * apa(x, y div 2 ) * apa(x, y mod 2);
end;

178
16. Nilai dari apa(2, 5) adalah …
A. 8
B. 16
C. 32
D. 64
E. 128

17. Berapakah hasil dari apa(3, 8)?


A. 11
B. 24
C. 6561
D. 512
E. 81

18. Berapa kali fungsi apa dipanggil pada pemanggilan apa(4, 13)?
A. 13
B. 15
C. 20
D. 21
E. 22

19. Perhatikan potongan program berikut ini

function nerf(a, b : longint) : longint;


begin
if (a = 0) or (b = 0) then nerf := 10
else nerf := a + nerf(a div 2, b - 1)
end;

Nilai dari nerf(20, 6) adalah …


A. 12
B. 24
C. 48
D. 60
E. 72

Perhatikan potongan program berikut ini untuk soal nomor 20 dan 21


function mencari(x, y : integer):integer;
begin
if (x = 0) then mencari := y
else if (y = 0) then mencari := x
else if (x mod 2 = 0) then mencari := mencari(x-1,y) + y
else if (y mod 2 = 1) then mencari := mencari(x, y-1) + x
else mencari := mencari(x-1, y-1) + x + y;
end;

179
20. Nilai dari mencari(9, 6) adalah …
A. 40
B. 50
C. 60
D. 70
E. 80

21. Nilai dari mencari (15, 12) adalah …


A. 183
B. 185
C. 187
D. 189
E. 191

Perhatikan potongan program berikut ini untuk soal nomor 22 sd 25

procedure cari(a: integer);

begin
if (a < 0) then
begin
write('-');
cari(-a);
end
else if (a > 1) then
begin
cari(a div 2);
write(a mod 2);
end
else write(a);
end;

22. Hasil yang tercetak dilayar saat pemanggilan cari(120) adalah …


A. 1100000
B. 1110000
C. 1111000
D. 1111100
E. 1111110

23. Hasil yang tercetak dilayar saat pemanggilan cari(-150) adalah …


A. -10010110
B. -10010111

180
C. -10011010
D. -10011100
E. -10100000

24. Pada pemanggilan cari(1000) berapa kali perintah write(a mod 2) akan
dijalankan?
A. 8
B. 9
C. 10
D. 11
E. 12

25. Untuk pemanggilan cari(M) menghasilkan keluaran berupa bilangan berdigit 9


berapa bilangan terkecil M yang mungkin?
A. 128
B. 256
C. 512
D. 1024
E. 2048

26. Perhatikan potongan program berikut ini

function f(l: integer; r: integer):integer;


begin
if l < r then
f := f(l, ((l+r)shr 1) - 1) + f(((l+r)shr 1) + 1, r) + 1
else
f := 1;
end;

Nilai dari f(1, 9) adalah …


A. 9
B. 10
C. 11
D. 12
E. 13

181
Perhatikan potongan program berikut ini untuk soal nomor 27 dan 28

var
a:array[1..100] of integer;
n:integer;

function dist(x:integer):integer;
var i,jum:integer;

begin
jum:=0;
for i:=1 to n do
if a[i]>x then inc(jum,a[i]-x);
dist:=jum;
end;

27. Jika array a=[99,98,79,77,89], dan n=5, maka berapakah nilai dist(70)?
A. 92
B. 83
C. 7
D. 29
E. 0

28. Jika x yang diinputkan pada fungsi bernilai sama dengan floor dari rata-rata array
a, maka berapakah nilai dist(x) jika diketahui a=[1,2,3,4,5,..,98,99] dan n=99?
A. 0
B. 825
C. 950
D. 1050
E. 1225

Perhatikan potongan program berikut ini untuk soal nomor 29 dan 30


function g(m,n:integer):integer;
begin
if (n=1) then g := m
else if ((n and 1)=0) then
g := g(m,n shr 1) * g(m,n shr 1)
else
g := g(m,n shr 1) * g(m,n shr 1) * m;
end;

29. Nilai dari g(2, 11) adalah …


A. 2048

182
B. 1024
C. 1280
D. 128
E. 84

30. Berapa kali fungsi g dijalankan ketika m = 4 dan n = 11?

A. 6
B. 7
C. 8
D. 9
E. 10

183
SOAL

1. Ada berapa permutasi dari bilangan {1,2,3,4,5,6,7,8} sehingga untuk setiap 5


bilangan dengan posisi berurutan berurutan, perkaliannya selalu habis dibagi 10?
(sebagai contoh, 34651278 adalah salah satu permutasi yang memenuhi Karena
untuk setiap 5 digit dengan posisi berurutan : 34651, 46512, 65127, 51278,
perkalian digit-digitnya habis dibagi 10)
A. 10080
B. 5040
C. 7020
D. 6010
E. 803

2. Tiga orang sahabat Andi, Budi dan Chandra membeli 3 tiket dari sebuah
pemesanan online secara terpisah. Tiket yang dibeli bernomor 1 sampai 100.
Mereka kemudian menyadari nomor tiket mereka membentuk barisan aritmatika.
Ada berapa kemungkinan tiga tiket tersebut?
A. 2400
B. 2450
C. 2500
D. 2550
E. 2600

3. Berapa banyak bilangan dari 1 sampai 2019 yang habis dibagi 2 atau 3 atau
habis dibagi 5 dan 7?
A. 1350
B. 1355
C. 1360
D. 1365
E. 1370

4. Hasil dari penjumlahan dibawah ini adalah …

1+2 2+3 2 +4 2 + ⋯ + 100 2


A. 2 . 99 − 1
B. 2 . 99 + 1
C. 2 . 99 − 1
D. 2 . 99 + 1
E. 2 . 100 − 1

5. Pak Dengklek memiliki cat berwarna biru, merah, kuning, hijau, dan hitam, dan
sebuah kubus yang akan dicat. Ada dua sisi dengan warna sama, dan empat sisi
lainnya dicat dengan warna sisanya. Berapa cara untuk mewarnai kubus

184
tersebut? Dua kubus dengan cat yang sama tapi diputar atau dirotasi akan
dihitung sebagai cara yang sama.
A. 5
B. 15
C. 45
D. 75
E. 150
6. Berapakah nilai 2018 mod 143?
A. 12
B. 14
C. 16
D. 18
E. 20

7. A dan B adalah subhimpunan dari {1, 2, 3, 4, 5}. Ada berapa pasang (A, B)
sehingga
|AꓵB|= 1 (dengan kata lain, A dan B hanya memiliki tepat 1 buah anggota
bersama)?
A. 225
B. 128
C. 32
D. 200
E. 405

8. Pak Dengklek yang kecewa dan kesepian karena Pak Ganesh sudah pensiun
dari dunia bajak laut mencoba menyabotase kebun apel Pak Ganesh dengan
mengirimkan hama tikus. Pak Ganesh punya total 150 pohon apel di kebunnya.
Tiap pohon hanya bisa diserang oleh maksimum 10 ekor tikus. Tikus-tikus Pak
Dengklek akan menyerang pohon secara acak. Berapa ekor tikus minimal yang
harus dikirim Pak Dengklek jika dia ingin memastikan paling sedikit separuh dari
pohon apel Pak Ganesh diserang setidaknya lima ekor tikus?
A. 1041
B. 1042
C. 1043
D. 1044
E. 1045

9. Pak Nafri menuliskan bilangan dari 1 sd 50 di papan tulis. Karena Pak Nafri
sedang tidak memiliki kerjaan, pak nafri akan bermain dengan bilangan bilangan
tersebut. Pak Nafri akan melakukan hal-hal dibawah ini:

- Pak Nafri akan mengambil dua bilangan acak (sebut dan )


- Pak Nafri akan menuliskan bilangan | − | di papan tulis, kemudian
beliau akan menghapus bilangan dan di papan tersebut

185
- Pak Nafri akan mengulangi langkah-langkah ini sehingga di papan tulis
hanya tersisa 1 bilangan.

Berapa banyaknya bilangan yang mungkin akan menjadi bilangan terakhir


tersebut?

A. 24
B. 25
C. 26
D. 50
E. 51

Perhatikan deskripsi berikut ini untuk soal nomor 10 sd. 11

Pak Dengklek memiliki sebuah kelompok bilangan bulat yang terdiri dari y buah bilangan.
Diketahui pula bahwa hasil perkalian dari semua bilangan tersebut adalah x. Pak
Dengklek lalu menyadari bahwa dirinya bisa membuat kelompok lain dengan elemen-
elemen yang berbeda tetapi tetap memenuhi kondisi tersebut. Oleh karena itu, Pak
Dengklek penasaran ada berapa banyak kemungkinan kelompok bilangan bulat yang
dimaksud tersebut?
10. Jika nilai X = 6 dan Y = 2, maka banyaknya kelompok yang mungkin adalah …
A. 4
B. 6
C. 7
D. 8
E. 9

11. Jika nilai x = 72 dan y = 3, maka banyaknya kelompok yang mungkin adalah …
A. 120
B. 240
C. 300
D. 360
E. 480

12. Pak Nafri sangat senang bermain dengan bilangan-bilangan bulat yang memiliki
angka 1 atau 7. Pak nafri menyebut bilangan ini dengan bilangan SuperFan. Jika
bilangan superFan tersebut diketahui kurang dari 10000, maka ada berapa
bilangan superFan yang dimaksud tersebut?
A. 5902
B. 5904
C. 5905
D. 5906
E. 5908

186
Perhatikan deskripsi berikut ini untuk soal nomor 13 sd. 15

Afgan, Adnan, Farid, Reihan, dan Dino sedang duduk melingkar. Masing-masing dari
mereka memakai baju dengan warna yang berbeda-beda. Diketahui bahwa warna baju-
baju itu adalah merah, biru, ungu, kuning, dan hijau.
Kemudian diketahui fakta-fakta sebagai berikut :

● Afgan duduk di sebelah pemakai baju hijau.


● Farid memakai baju warna ungu
● Afgan tidak memakai baju kuning.
● Pemakai baju ungu dan biru duduk bersebelahan.
● Farid dan Dino tidak duduk bersebelahan.
● Pemakai baju ungu duduk diantara pemakai baju kuning dan Adnan.

13. Siapakah yang menggunakan baju berwarna merah?


A. Afgan
B. Adnan
C. Farid
D. Reihan
E. Dino

14. Apabila Adnan duduk di sebelah Afgan, maka yang memakai baju kuning adalah

A. Adnan
B. Afgan
C. Farid
D. Reihan
E. Dino

15. Siapa yang menggunakan baju berwarna hijau?


A. Afgan
B. Adnan
C. Farid
D. Reihan
E. Dino
Perhatikan potongan program berikut ini untuk soal nomor 16 dan 17
a := 0;
readln(d);
b := d;
for i := 1 to 100 do begin
c := (a+b+1) div 2;
if (c*c <= d) then a := c
else b := c-1;
end;
writeln(a);

187
16. Jika d diberi nilai 125, Output dari potongan program di atas adalah …
A. 9
B. 10
C. 11
D. 12
E. 13

17. Apa yang dilakukan oleh program di atas?


A. Mencari akar dari d dibulatkan ke atas
B. Mencari akar dari d dibulatkan ke bawah
C. Mencari bilangan kuadrat terkecil yang >= d
D. Mencari bilangan kuadrat terbesar yang <= d
E. Jawaban A, B, C, D salah

Perhatikan potongan program berikut ini untuk soal nomor 18

function f(a,b:integer):integer;
begin
if b = 0 then
f := 0
else if b mod 2 > 0 then
f := f(a*2, b div 2) + a
else
f := f(a*2, b div 2);
end;
18. Nilai dari f(105, 27) adalah …
A. 2575
B. 2835
C. 935
D. 0
E. Runtime error!

Perhatikan potongan program berikut ini untuk soal nomor 19 dan 20


var
arr : array[1..6] of longint = (1,2,4,8,16,32);
n : longint;

function search(p,sum,x : integer) : boolean;


begin
if p>6 then search := (sum=x)
else search := search(p+1,sum+arr[p],x) or search(p+1,sum,x);
end;
begin
readln(n);
writeln(search(1,0,n));
end.

188
19. Apakah output dari program jika n diberi nilai 19?
A. TRUE
B. FALSE
C. 20
D. 19
E. Runtime error!

20. Manakah diantara input di bawah ini yang menghasilkan output FALSE?
A. 0
B. 1
C. 30
D. 63
E. 64

Perhatikan potongan program berikut ini untuk soal nomor 21

function fungsi(x, y : longint):longint;


var
zaman, now : longint;
begin
zaman := 0; fungsi := 0;
while (x > 0) or (y > 0) do
begin
now := (x mod 10) + (y mod 10);
fungsi := 10 * fungsi + (now mod 10);
zaman := now div 10;
x := x div 10;
y := y div 10;
end;
end;

21. Berapakah hasil dari fungsi(12345, 67890)?


A. 53187
B. 53197
C. 57138
D. 73195
E. 79135

189
Perhatikan potongan program berikut ini untuk soal nomor 22 dan 23

function mencari(N:integer):integer;
var i,j,z:integer;
begin
mencari:=0;
for i:=1 to N do
begin
j:=1;
z:=0;
while (j <= i) do
begin
if (i mod j = 0) then inc(z);
inc(j);
end;
if (z mod 2 <> 0) then
mencari:=mencari+1;
end;
end;

22. Nilai dari mencari(50) adalah …


A. 6
B. 7
C. 8
D. 9
E. 10

23. Nilai dari mencari(9000) adalah …


A. 91
B. 92
C. 93
D. 94
E. 95

Perhatikan potongan program berikut ini untuk soal nomor 24

begin
par := 0;
ans := 0;
repeat
if (num-4*par > 0) and ((num – 4*par) mod 3 = 0) then
inc(ans);
inc(par);
until(par = 2016);
writeln(ans);
end.

190
24. Jika num diberi nilai 2016, maka output dari potongan program tersebut adalah

A. 164
B. 168
C. 172
D. 176
E. 180

Perhatikan program berikut ini untuk soal nomor 25 dan 26


var a,b,c,x : integer;
begin
readln(a,b);
a:=a*a; b:=b*b;
a:=a+b;
x:=0;
for c:=1 to 100 do begin
if (a div c=c) then
inc(x);
end;
writeln(x);
end.

25. Jika diberikan input 15 36, maka output dari program tersebut adalah …
A. 0
B. 1
C. 2
D. 3
E. 4

26. Jika diberikan input 35 47, maka output dari program tersebut adalah …
A. 0
B. 1
C. 2
D. 3
E. 4

191
Perhatikan program berikut ini untuk soal nomor 27

var
n, x, i : longint;
arr : array[1..100000] of longint;

procedure proses(a, b, c: longint);


begin
if (a <= c) then begin
inc(arr[a]);
proses(a+b, b, c);
end;
end;
begin
readln(n, x);
for i := 1 to x do
proses(i, i, x);
while (arr[n] <> 2) do // baris ke-17
inc(n);
writeln(n);
end.

27. Jika diberikan input 90 100, maka output dari program tersebut adalah …
A. 90
B. 91
C. 93
D. 95
E. 97

Perhatikan potongan program berikut ini untuk soal nomor 28


function fun(a, b : longint) : longint;
begin
if (a = 0) or (b = 0) then fun := 10
else fun := a + fun(a div 2, b – 1);
end;

28. Berapa kali fungsi fun dipanggil untuk pemanggilan fun(500, 100)?
A. 12
B. 11
C. 10
D. 9
E. 8

192
Perhatikan program berikut ini untuk soal nomor 29

var
i, j , n : longint;
begin
readln(n);
for i := 1 to n do
begin
for j := 1 to n do begin { baris 8 }
if ( (i = j) or (i + j = n + 1) ) then write('X')
else write(' ');
end;
writeln;
end;
end.

29. Berapa kali huruf ‘X’ ditulis, ketika n = 5 ?


A. 9
B. 11
C. 13
D. 15
E. 17

Perhatikan program berikut ini untuk soal nomor 30

var
arr : array [1..10] of longint = (10, 9, 8, 7, 6, 5, 4, 3, 2, 1);
n, i : integer;
begin
n := 10;
for i := 1 to n div 2 do begin
arr[i] := arr[10 - i + 1] + arr[i];
arr[10 - i + 1] := arr[i] - arr[10 - i + 1];
arr[i] := arr[i] - arr[10 - i + 1];
end;
for i := 1 to 10 do write(arr[i], ‘ ‘);
end.

30. Output dari program di atas adalah …


A. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
B. 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
C. 1, 3, 5, 7, 9, 2, 4, 6, 8, 10
D. 5, 4, 3, 2, 1, 10, 9, 8, 7, 6
E. 10, 8, 6, 4, 2, 9, 7, 5, 3, 1

193

Anda mungkin juga menyukai