MENU

PSEUDO CODE PASCAL (PSEUDOPASCAL) OSK 2011

soal olimpiade komputer tingkat kabupaten

1) Diberikan penggalan program sebagai berikut. (note: program ini merupakan Pascal-like pseudocode, secara sintaks belum tentu sama dengan Pascal).

function f(n: int)
begin
if n=0 then f:=0
else f := n + f(n-1);
end;

Berapakah nilai f(5) ?
(A) 125
(B) 0
(C) 5
(D) 15
(E) 25


Jawaban soal nomor 1 :
Soal ini merupakan soal algoritma pemrograman mengenai function.
Inti soal di atas adalah sebagai berikut :

  if n=0 then f:=0  ; secara awam artinya adalah bila nilai n = 0, maka nilai f = 0
  else f:= n + f (n-1) ; yang berarti bila nilai n ≠ 0, maka nilai f = n + f (n-1)

Berapa nilai f(5)…?

Perhitungan :
f(5), dimana n = 5, maka f = 5 + f(4) = 5 + (4 + f(3)) = 5 + 4 + (3 + f(2))
= 5 + 4 + 3 + (2 + f(1)) = 5 + 4 + 3 + 2 + 1 + 0 = 15
Dengan demikian, jawaban yang benar adalah (D) 15

2) Jika M(x, y) adalah pernyataan “x lebih besar dari y”, dan terdapat deretan perintah dalam pseudo Pascal berikut:

while M(x, y) do
begin
x := x - 10;
y := y + 2;
end;

dengan harga mula-mula x = 70 dan y = 5, berapakah harga y setelah deretan keluar dari loop while?

A. 11
B. 15
C. 17
D. 21
E. 25

Jawab:

OK… akan kita bahasa pertanyaan di atas. Perhatikan bahwa loop while memiliki syarat “x lebih besar dari y”. Sehingga selama syarat tersebut terpenuhi (syarat bernilai TRUE) maka looping akan terus dijalankan. Dan proses looping akan berhenti apabila syarat sudah tidak terpenuhi (bernilai FALSE) Perhatikan jalannya proses berikut ini:

x = 70, y = 5
Cek (x > y) -> (70 > 5) -> TRUE
x = x - 10 = 70 - 10 = 60
y = y + 2 = 5 + 2 = 7
Cek (x > y) -> (60 > 7) -> TRUE
x = x - 10 = 60 - 10 = 50
y = y + 2 = 7 + 2 = 9
Cek (x > y) -> (50 > 9) -> TRUE
x = x - 10 = 50 - 10 = 40
y = y + 2 = 9 + 2 = 11
Cek (x > y) -> (40 > 11) -> TRUE
x = x - 10 = 40 - 10 = 30
y = y + 2 = 11 + 2 = 13
Cek (x > y) -> (30 > 13) -> TRUE
x = x - 10 = 30 - 10 = 20
y = y + 2 = 13 + 2 = 15
Cek (x > y) -> (20 > 15) -> TRUE
x = x - 10 = 20 - 10 = 10
y = y + 2 = 15 + 2 = 17
Cek (x > y) -> (10 > 17) -> FALSE
STOP

Setelah proses looping while selesai, nilai y terakhir adalah 17 (Jawaban yang benar C).
Pertanyaan :

3) Untuk menukar isi dua variabel integer (keduanya bernama a dan b) tanpa bantuan variabel lain adalah…

A. a := b - a; b := b - a; a := b + a;
B. b := b - a; a := b + a; a := b - a;
C. a := b + a; a := b - a; b := b - a;
D. a := b - a; b := b - a; a := b - a;
E. a := b + a; b := b + a; a := b + a;

Jawab :

Untuk menjawab pertanyaan di atas, kita akan cek terlebih dahulu semua alternatif jawaban. Kita coba untuk pemisalan awal nilai a = 5 dan b = 3. Kita akan mencari jawaban sedemikian hingga hasil akhir dari proses perhitungan menghasilkan a = 3 dan b = 5.

Option A.

a = b - a = 3 - 5 = -2
b = b - a = 3 - (-2) = 5
a = b + a = 5 + (-2) = 3
Jadi a = 3 dan b = 5 (BENAR)

Option B.

b = b - a = 3 - 5 = -2
a = b + a = -2 + 5 = 3
a = b - a = -2 - 3 = -5
Jadi a = -5 dan b = -2 (SALAH)

Option C.

a = b + a = 3 + 5 = 8
a = b - a = 3 - 8 = -5
b = b - a = 3 - (-5) = 8
Jadi a = -5 dan b = 8 (SALAH)

4)Jika M(x, y) adalah pernyataan “x lebih besar dari y”, dan terdapat deretan perintah dalam pseudo Pascal berikut:

while M(x, y) do

begin

  x := x - 10;

  y := y + 2;

end;

dengan harga mula-mula x = 70 dan y = 5, berapakah harga y setelah deretan keluar dari loop while?

A. 11
B. 15
C. 17
D. 21
E. 25

Jawab:

OK… akan kita bahasa pertanyaan di atas. Perhatikan bahwa loop while memiliki syarat “x lebih besar dari y”. Sehingga selama syarat tersebut terpenuhi (syarat bernilai TRUE) maka looping akan terus dijalankan. Dan proses looping akan berhenti apabila syarat sudah tidak terpenuhi (bernilai FALSE) Perhatikan jalannya proses berikut ini:

x = 70, y = 5

Cek (x > y) -> (70 > 5) -> TRUE

    x = x - 10 = 70 - 10 = 60

    y = y + 2 = 5 + 2 = 7

Cek (x > y) -> (60 > 7) -> TRUE

    x = x - 10 = 60 - 10 = 50

    y = y + 2 = 7 + 2 = 9

Cek (x > y) -> (50 > 9) -> TRUE

    x = x - 10 = 50 - 10 = 40

    y = y + 2 = 9 + 2 = 11

Cek (x > y) -> (40 > 11) -> TRUE

    x = x - 10 = 40 - 10 = 30

    y = y + 2 = 11 + 2 = 13

Cek (x > y) -> (30 > 13) -> TRUE

    x = x - 10 = 30 - 10 = 20

    y = y + 2 = 13 + 2 = 15

Cek (x > y) -> (20 > 15) -> TRUE

    x = x - 10 = 20 - 10 = 10

    y = y + 2 = 15 + 2 = 17

Cek (x > y) -> (10 > 17) -> FALSE

    STOP

Setelah proses looping while selesai, nilai y terakhir adalah 17 (Jawaban yang benar C).


5) Untuk menukar isi dua variabel integer (keduanya bernama a dan b) tanpa bantuan variabel lain adalah…

A. a := b – a; b := b – a; a := b + a;
B. b := b – a; a := b + a; a := b – a;
C. a := b + a; a := b – a; b := b – a;
D. a := b – a; b := b – a; a := b – a;
E. a := b + a; b := b + a; a := b + a;

Jawab :

Untuk menjawab pertanyaan di atas, kita akan cek terlebih dahulu semua alternatif jawaban. Kita coba untuk pemisalan awal nilai a = 5 dan b = 3. Kita akan mencari jawaban sedemikian hingga hasil akhir dari proses perhitungan menghasilkan a = 3 dan b = 5.

Option A.

a = b – a = 3 – 5 = -2
b = b – a = 3 – (-2) = 5
a = b + a = 5 + (-2) = 3
Jadi a = 3 dan b = 5 (BENAR)

Option B.

b = b – a = 3 – 5 = -2
a = b + a = -2 + 5 = 3
a = b – a = -2 – 3 = -5
Jadi a = -5 dan b = -2 (SALAH)

Option C.

a = b + a = 3 + 5 = 8
a = b – a = 3 – 8 = -5
b = b – a = 3 – (-5) = 8
Jadi a = -5 dan b = 8 (SALAH)

6) Diketahui algoritma pseudopascal berikut ini

const
xmin = -10;
xmax = 10;
ymin = -10;
ymax = 10;

function code(x: integer; y : integer) : byte;
var c : byte;
begin
c := 0;
if (x < xmin) then c := c OR 8
else if (x > xmax) then c := c OR 1;

if (y < ymin) then c := c OR 4
else if (y > ymax) then c := c OR 2;

code := c;
end;


Pertanyaan :

Perintah writeln(code(-12, -12) AND code(20, 5)) akan mencetak harga berapakah?

Jawab :

OK… sebelum kita jawab pertanyaan ini, perhatikan bahwa dalam function code() terdapat operator OR. Operand OR tidak harus berupa boolean TRUE atau FALSE namun juga bisa berupa integer. Operator OR untuk operand bilangan integer merupakan operasi OR secara bitwise (diproses bit demi bit, dengan 1 identik bernilai TRUE dan 0 bernilai FALSE) dari bilangan binernya.

Perhatikan contoh operasi OR berikut ini yang melibatkan bilangan integer.

Berapakah hasil 2 OR 1?

2 = 10 (biner)
1 = 01 (biner)
----------- OR
11 -> bilangan biner dari 3

Dengan demikian hasil dari 2 OR 1 adalah 3.

Berapakah hasil 3 OR 1?

3 = 11 (biner)
1 = 01 (biner)
----------- OR
11 -> bilangan biner dari 3

Berapakah 4 OR 5?

4 = 100 (biner)
5 = 101 (biner)
----------- OR
101 -> bilangan biner dari 5.

Nah akan kita akan selesaikan soal di atas menggunakan konsep tersebut. Terlebih dahulu operand code(-12, -12) pada operasi ‘code(-12, -12) AND code(20, 5)’ akan diselesaikan

code(-12, -12) -> x = -12, y = -12
--------- masuk function code() --------
c = 0
cek (-12 < -10) -> TRUE
-> c = c OR 8 = 0 OR 8 = 8

cek (-12 < -10) -> TRUE
-> c = c or 4 = 8 OR 4 = 12

code = c = 12
----------------------------------------

Sehingga diperoleh hasil dari code(-12, -12) adalah 12. Selanjutnya akan diproses untuk code(20, 5).

code(20, 5) -> x = 20, y = 5
---------- masuk function code() -------
c = 0
cek (20 < -10) -> FALSE
-> cek (20 > 10) -> TRUE
-> c = c OR 1 = 0 OR 1 = 1
cek (5 < -10) -> FALSE
-> cek (5 > 10) -> FALSE

code = c = 1
----------------------------------------

Sehingga diperoleh hasil dari code(2

 

 

Pembahasan Algoritma Pseudopascal OSK 2008

Perhatikan potongan algoritma berikut ini
j := 2;
for i := 0 to 10 do begin
if j > 0 then writeln(‘ok’);
j := 5 - (j*2);
end;


32. Berapa kalikah pencetakan keluaran ‘ok’ dilakukan oleh potongan program itu?
      a. 7
      b. 3
      c. 5
      d. 6
      e. 4

jawaban: A, pembahasan:

i yang ke-    harga awal j        cetak    harga akhir j
i=0              j=2 maka j>0         ok         j=1
i=1              j=1 maka j>0         ok         j=3
i=2              j=3 maka j>0         ok         j=-1
i=3              j=-1                                    j=7
i=4              j=7 maka j>0         ok         j=-9
i=5              j=-9                                    j=23
i=6              j=23 maka j>0       ok         j=-41
i=7              j=-41                                  j=87
i=8              j=87 maka j>0       ok         j=-169
i=9              j=-169                                j=343
i=10            j=343 maka j>0     ok         j=-681


33. Berapakah harga j setelah keluar dari iterasi for tersebut?
      a. 681
      b. 600
      c. -681
      d. -702
      e. -101
jawaban: C, Pembahasan sama persis seperti di atas

 

 

­­­­­­­­­­­­­­

ABOUT THE AUTHOR
BAGUS FRAYOGA EFFENDI : Simple and cool! That's me! I like write and do copy paste on my post. I love photography and chatting with friends. Follow me on TWITTER!!! Don't forget! ^^ Artikel / posting tentang PSEUDO CODE PASCAL (PSEUDOPASCAL) OSK 2011 ini dibagikan oleh Bagus Frayoga Effendi pada tanggal 10 May 2011. Terimakasih atas kunjungan Anda pada blog ini. Kritik dan saran tentang PSEUDO CODE PASCAL (PSEUDOPASCAL) OSK 2011 dapat Anda sampaikan melalui kotak komentar dibawah ini.

Share this article :
 

+ Comments Ω + 6 Comments Ω

Sem
March 28, 2012 10:01 PM

mas itu hasil nomer 6 brp sih?

September 23, 2012 4:25 PM

wah puyeng

September 25, 2012 2:47 PM

@simple sama saya juga pusing..

February 28, 2013 3:02 PM

wah alogritma..puyeng2 nih.harus memaikan logika kita

Anonymous
March 04, 2013 7:35 PM

gue juga mau ikut osk bro, follow twitter gue @aisyfahmard

Anonymous
April 01, 2014 4:52 PM

haduh masih gak ngerti ...

Post a Comment

Leave comment please ...

 
Support : Creating Website | Johny Template | Mas Template
Copyright © 2010-2013. IsJustYoga1 - All Rights Reserved
Template Created by Creating Website Published by Mas Template
Proudly powered by Blogger
Related Posts Plugin for WordPress, Blogger...