You are on page 1of 6

Contoh soal dan pembahasan Olimpiade Komputer materi for to do

untuk soal 1 -2
y := 10;
x := 0;
for i := 0 to y-1 do
begin
x:=x+ 2 * i;
end;
Writeln (x);

1. Berapakah output dari program diatas?


a. 112
b. 110
c. 90
d. 72
e. 45

Pembahasan
Program diatas akan mengulang pernyataan x:=x +2*i sebanyak 10 kali dari i = 0 sampai
9.
0 = 0 + 2*0
2 = 0 + 2*1
6 = 2 + 2*2
12 = 6 + 2*3
20 = 12 + 2*4
30 = 20 + 2*5
42 = 30 + 2*6
56 = 42 + 2*7
72 = 56 + 2*8
90 = 76 + 2*9
jadi nilai x yang akan dimunculkan adalah 90.
2. jika baris kelima (x:=x+2*i) diganti dengan x:= x + i
Berapakah output program tersebut?
a. 112
b. 110
c. 90
d. 72
e. 45

Pembahasan
0=0+0
1=0+1
3=1+2
6=3+3
10 = 6 + 4
15 = 10 + 5
21 = 15 + 6
28 = 21 + 7
36 = 28 + 8
45 = 36 + 9
jadi output nya adalah 45.
untuk soal no 3
program x;
var
i,j,k,l : integer;
begin
for i:= 1 to 2 do
for j := 1 to 2 do
write (i*j);
end.

3. output program diatas adalah?


a. 4
b. 6
c. 9
d. 123246369
e. 1
2
3
2
4
6
3
6
9

Pembahasana
i * j
1) ---> 1 * 1 = 1
2*1=2
3*1=3
2) ---> 1 * 2 = 2
2*2=4
3*2=6
3) ---> 1 * 3 = 3
2*3=6
3*3=9
karena write jadi hasil yang akan dimunculkan berjejeer ke samping 123246369. Trims

Diketahui program Pascal sbb:


view sourceprint?
01.const kar = 65;
02.var i : integer;
03.begin
04. for i := 1 to 5 do
05. begin
06. kar := kar + 1;
07. end;
08.writeln(ord(chr(kar-3*5)));
09.end.

Apa output dari program di atas?


a. runtime error
b. 65
c. 0
d. tidak ada output
e. 310

Pembahasan:

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

Tips:

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

Soal ke-2

Diketahui potongan program Pascal sbb:

view sourceprint?
1.begin
2. readln(a);
3. for i := 1 to a do bil := bil * i;
4. writeln(bil);
5.end.
Jika diberikan input 5 pada program di atas, maka apa outputnya?
a. tidak ada output
b. 120
c. 5
d. runtime error
e. 0

Pembahasan:

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

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

Var i, j, k,: integer;


begin
j:= 3;
k:= 1;
repeat
dec(j) ;
for I := 1 to j do k:= I + 5 * K;
dec(j) :
until j < 0;
writeln(K);
end.

apakah output dari program berikut..??

hasilnya 32

tapi saya ingin tahu penjelasannya?????

Doantara Yasa Berkata:


Sebelumnya mohon maaf jika ada kesalahan dalam pembahasan, karena keterbatasan
saya. saya hanya orang baru yang mencoba bergelut dibidang olimpiade ini karena tugas
untuk membimbing siswa dalam olimpiade komputer, mohon juga masukannya. semoga
blog ini bermanfaat.. salam kenal dan trimkasih buat komentarnya.
lanjut ke permasalahan..

Var i, j, k,: integer;


begin
j:= 3;
k:= 1;
repeat
dec(j) ;
for i := 1 to j do
k:= i + 5 * k;
dec(j) :
until j < 0;
writeln(k);
end.

apakah output dari program berikut..??

hasilnya 32

Pembahasan
Sebelumnya perlu diketahui arti atau guna dari fungsi dec(j).

dec (fungsi) : mengurangi (decrements) nilai suatu variabel


sintaks : dec (x, i); i >= 1
x adalah varaibel yang dikurangi
i adalah nilai pengurang
dalam penggalan program diatas terdapat dec (j) artinya pengurangan variabel j sebanyak
1 (karena ketentuan nilai pengurang lebih besar sama

dengan 1.
Berikutnya mari kita coba untuk menjalankan pernyatan yang terdapat dalam begin end.
repeat
dec (3) = 2
untuk i = 1
k=1+5*1
k=6
dec (2) = 1
1 < 0 <—false {program masih dijalankan}

dec (1) = 0
untuk i = 2
k=2+5*6
k = 32
dec (0) = -1
-1 < 0 <— True {program berhenti dijalankan}

Jadi output program diatas adalah 32. Trims

You might also like