Professional Documents
Culture Documents
untuk soal 1 -2
y := 10;
x := 0;
for i := 0 to y-1 do
begin
x:=x+ 2 * i;
end;
Writeln (x);
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.
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
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
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).
hasilnya 32
hasilnya 32
Pembahasan
Sebelumnya perlu diketahui arti atau guna dari fungsi dec(j).
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}