Pembahasan osk komputer sma 2014 - algoritma

20

Click here to load reader

Transcript of Pembahasan osk komputer sma 2014 - algoritma

Page 1: Pembahasan osk komputer sma 2014 - algoritma
Page 2: Pembahasan osk komputer sma 2014 - algoritma

Soal OSK 2014 no 31

31. Perhatikan fungsi di bawah ini.

function wow(x:integer):integer;

begin

if (x < 2) then wow := x

else wow := wow(x-2) + 3*wow(x-1);

end;

Apa yang akan dikembalikan pada pemanggilan fungsi wow(8)?A. 3620B. 3760C. 3824D. 3927E. 4126;

Pembahasan ;

Fungsi wow(8) artinya fungsi dijalankan untuk x=8 dan berjalan sbb :x=8 , wow = wow(6)+3*wow(7) = …….

(dibutuhkan nilai wow(6) dan wow(7)

X=7, wow = wow(5)+3*(x-1)

Dan seterusnya, sampai kondisi x<2 untuk mendapat nilai wow

Kemudian akan berjalan :x=0 , wow = 0 { kondisi x<2 }x=1 , wow = 1 { kondisi x<2 }x=2 , wow = wow(0)+3*wow(1) = 0 + 3 = 3x=3 , wow = wow(1)+3*wow(2) = 1 + 3*3 = 1 + 9 = 10x=4 , wow = wow(2)+3*wow(3) = 3 + 3*10 = 33x=5 , wow = wow(3)+3*wow(4) = 10 + 3*33 = 109x=6 , wow = wow(4)+3*wow(5) = 33 + 3*109 = 360x=7 , wow = wow(5)+3*wow(6) = 109 + 3*360 = 1189x=8 , wow = wow(6)+3*wow(7) = 330 + 3*1099 = 3927

Pilihan jawaban : D

Page 3: Pembahasan osk komputer sma 2014 - algoritma

Ambar Erna W. Pembahasan OSK Komputer 2014 - 3

program pascal untuk algoritma tersebut adalah :

function wow(x:integer):integer;

begin

if (x < 2) then wow := x

else wow := wow(x-2) + 3*wow(x-1);

end;

begin

writeln(wow(8));

readln;

end.

Running "c:₩fpc₩2.6.4₩bin₩i386-win32₩osk 2014 31.exe "3927

Soal OSK 2014 no 32 dan 33

Perhatikan fungsi-fungsi berikut untuk soal nomor 32 dan 33.

function mangga(rambutan : integer) : integer;

begin

if (rambutan = 1) then mangga := 1 else

if (rambutan mod 2 = 1) then mangga := mangga(3 * rambutan + 1)

else mangga := mangga(rambutan div 2);

end;

function jeruk(anggur, melon : integer) : integer;

begin

if (melon = 1) then jeruk := 0 else

jeruk := mangga(anggur) * anggur + jeruk(anggur, melon - 1);

end;

32. Berapakah hasil pemanggilan fungsi mangga(49)?A. 1B. 7C. 14D. 21E. 49

33. Berapakah hasil pemanggilan fungsi jeruk(25, 20)?A. 425B. 450C. 475D. 500E. 525

Page 4: Pembahasan osk komputer sma 2014 - algoritma

Ambar Erna W. Pembahasan OSK Komputer 2014 - 4

Pembahasan nomor 32

Dari fungsi mangga ,

function mangga(rambutan : integer) : integer;

begin

if (rambutan = 1) then mangga := 1 else

if (rambutan mod 2 = 1) then mangga := mangga(3 * rambutan + 1)

else mangga := mangga(rambutan div 2);

end;

Function Mangga(49), artinya rambutan=49 ..... rambutan mod 2 = 1Mangga=mangga(3*49+1)=mangga(148)

Kita harus mencari nilai mangga, sampai rambutan = 1

Mangga(148).......... rambutan mod 2 = 0 ,Mangga = mangga(148 div 2)= mangga(74)

Mangga(74).......... rambutan mod 2 = 0 ,Mangga = mangga(74 div 2)= mangga(37)

Mangga(37)..... rambutan mod 2 = 1Mangga=mangga(3*37+1)=mangga(112)

Mangga(112).......... rambutan mod 2 = 0 ,Mangga = mangga(112 div 2)= mangga(56)

Mangga(56).......... rambutan mod 2 = 0 ,Mangga = mangga(56 div 2)= mangga(28)

Mangga(28).......... rambutan mod 2 = 0 ,Mangga = mangga(28 div 2)= mangga(14)

Mangga(14).......... rambutan mod 2 = 0 ,Mangga = mangga(14 div 2)= mangga(7)

Kita melihat pola bahwa jika rambutan = genap, maka fungsi berukutnya yangdijalankan adalah : untuk rambutan dibagi 2. Jika rambutan ganjil, fungsiyang dijalankan berikutnya adalah : nilai rambutan= 2*7+1

Function Mangga(7), rambutan=7 ..... rambutan mod 2 = 1Mangga=mangga(3*7+1)=mangga(22)

Function Mangga(22) .......... rambutan mod 2 = 0 ,Mangga = mangga(22 div 2)= mangga(11)

Function Mangga(11) ..... rambutan mod 2 = 1

Page 5: Pembahasan osk komputer sma 2014 - algoritma

Ambar Erna W. Pembahasan OSK Komputer 2014 - 5

Mangga=mangga(3*11+1)=mangga(34)

Function Mangga(34) .......... rambutan mod 2 = 0 ,Mangga = mangga(34 div 2)= mangga(17)

Function Mangga(17) ..... rambutan mod 2 = 1Mangga=mangga(3*17+1)=mangga(52)

Kita tulis secara ringkas,

Function Mangga(52), rambutan=52 : mangga=mangga(26)Function Mangga(26). mangga=mangga(13)Function Mangga(13), mangga =mangga(40)Function Mangga(40), mangga =mangga(20)Function Mangga(20), mangga =mangga(10)Function Mangga(10), mangga)=mangga(5)Function Mangga(5), mangga =mangga(16)Function Mangga(16), mangga =mangga(8)Function Mangga(8), mangga =mangga(4)Function Mangga(4), mangga =mangga(2)Function Mangga(2), mangga=mangga(1)Function Mangga(1), mangga =1

Jika kita jalankan berikutnhya :Function mangga(2) : mangga=mangga(1)=1,Function mangga(4) : mangga=mangga(2)=1,

Begitu seterusnya, sehingga kita bisa mengambil kesimpulan bahwa nilaimangga(49)=1

Jawab : A

Page 6: Pembahasan osk komputer sma 2014 - algoritma

Ambar Erna W. Pembahasan OSK Komputer 2014 - 6

Pembahasan No 33 :

jeruk(25, 20)?

Dari fungsi :

function jeruk(anggur, melon : integer) : integer;

begin

if (melon = 1) then jeruk := 0 else

jeruk := mangga(anggur) * anggur + jeruk(anggur, melon - 1);

end;

jeruk(anggur,melon) = jeruk(25,20)jeruk = mangga(25) * 25 + jeruk(25,19)

Kita harus mencari nilai mangga(25) dan jeruk(25,19)----- mangga(25)=1 .... dari analisa diatas, semua nilan mangga(rambutan)adalah 1 untuk rambutan integer positif.

Jeruk(25,20) , nilai jeruk =1*25+jeruk(25,19)=25+jeruk(25,19)

Jeruk(25,19), jeruk = 1*25+jeruk(25,18) = 25+jeruk(25,18)

Dan seterusnya ampai dengan jeruk (25,2), sertaJeruk(25,1) ... nilai jeruk=0

Dari ; jeruk = mangga(25) * 25 + jeruk(25,19)Maka nilai jeruk=25+25+......+25 sebanyak 19 kali (mulai darimelon=20 sampai dengan melon=2, karena melon=1, nilai jeruk=0.

Jadi 25*19 = 475

Jawab : C

Page 7: Pembahasan osk komputer sma 2014 - algoritma

Ambar Erna W. Pembahasan OSK Komputer 2014 - 7

Soal 32 dan 33, jika dikerjakan menggunakan program pascal (contohmenggunakan fpc) :

function mangga(rambutan : integer) : integer;

begin

if (rambutan = 1) then mangga := 1 else

if (rambutan mod 2 = 1) then mangga := mangga(3 * rambutan + 1)

else mangga := mangga(rambutan div 2);

end;

function jeruk(anggur, melon : integer) : integer;

begin

if (melon = 1) then jeruk := 0 else

jeruk := mangga(anggur) * anggur + jeruk(anggur, melon - 1);

end;

begin

writeln(mangga(49));

writeln(jeruk(25,20));

readln;

end.

Running "c:₩fpc₩2.6.4₩bin₩i386-win32₩osk 2014 32.exe "

1

475

Page 8: Pembahasan osk komputer sma 2014 - algoritma

Ambar Erna W. Pembahasan OSK Komputer 2014 - 8

Soal OSK 2014 no.34 dan 35

Perhatikan kedua fungsi berikut untuk soal nomor 34 dan 35.

function f(a : integer):integer;

begin

if a=0 then

f:= 1

else

f:= 2*f(a-1);

end;

function g(b: integer):integer;

begin

if b=0 then

g:= f(b)

else

g:= f(b) + g(b-1);

end;

34. Jika fungsi f(3) dipanggil maka nilai yang dihasilkan adalah.....A. 1B. 3C. 4D. 15E. 16

35. Jika fungsi f(10) dipanggil maka nilai yang dihasilkan adalah.......A. 1B. 9C. 10D. 1023E. 1024

Pembahasan No 34

Darifunction f(a : integer):integer;

begin

if a=0 then

f:= 1

else

f:= 2*f(a-1);

end;

f(3) , f=2*f(3-1) = 2*f(2)f(2) , f=2*f(2-1) = 2*f(1)f(1) , f=2*f(1) = 2*f(0)f(0) , f=1

Page 9: Pembahasan osk komputer sma 2014 - algoritma

Ambar Erna W. Pembahasan OSK Komputer 2014 - 9

maka f(1)=2, f(2)=4 dan f3=8. Dari pilihan jawaban tidak ada yang sesuai

Jika yang ditanyakan g(3), maka :

function g(b: integer):integer;

begin

if b=0 then

g:= f(b)

else

g:= f(b) + g(b-1);

end;

g(3)=f(3)+g(3-1)=f(3)+g(2)=8+g(2)g(2)=f(2)+g(2-1)=f(2)+g(1)=4+g(1)g(1)=f(1)+g(1-1)=f(1)+g(0)=2+g(0)g(0)=f(0)=1

makag(1)=3, g(2)=7, dan g(3)=15

jika yang ditanyakan g(3), jawabannya adalah D.

Pembahasan No. 35

F(10)=

Jika kita lihat pola fungsi f adalah 2 pangkat a,Maka 2^10 adalah 1024.... jawab : E

Page 10: Pembahasan osk komputer sma 2014 - algoritma

Ambar Erna W. Pembahasan OSK Komputer 2014 - 10

Jika kita ingin cek hasilnya menggunakan pascal :

var i:integer;

function f(a : integer):integer;

begin

if a=0 then

f:= 1

else

f:= 2*f(a-1);

end;

function g(b: integer):integer;

begin

if b=0 then

g:= f(b)

else

g:= f(b) + g(b-1);

end;

begin

writeln('nilai f');

for i:=0 to 10 do

writeln(' a=',i,' nilai f(a)=',f(i));

writeln('nilai g');

for i:=0 to 10 do

writeln(' b=',i,' nilai g(b)=',g(i));

readln;

end.

Running "c:₩fpc₩2.6.4₩bin₩i386-win32₩osk 2014 34.exe "

nilai f

a=0 nilai f(a)=1

a=1 nilai f(a)=2

a=2 nilai f(a)=4

a=3 nilai f(a)=8

a=4 nilai f(a)=16

a=5 nilai f(a)=32

a=6 nilai f(a)=64

a=7 nilai f(a)=128

a=8 nilai f(a)=256

a=9 nilai f(a)=512

a=10 nilai f(a)=1024

nilai g

b=0 nilai g(b)=1

b=1 nilai g(b)=3

b=2 nilai g(b)=7

b=3 nilai g(b)=15

b=4 nilai g(b)=31

b=5 nilai g(b)=63

b=6 nilai g(b)=127

b=7 nilai g(b)=255

b=8 nilai g(b)=511

b=9 nilai g(b)=1023

b=10 nilai g(b)=2047

Page 11: Pembahasan osk komputer sma 2014 - algoritma

Ambar Erna W. Pembahasan OSK Komputer 2014 - 11

OSK 2014 no.36 dan 37

Perhatikan fungsi berikut untuk soal nomor 36 dan 37.

function bincin (a:integer):string;

var

b:integer;

str:string;

begin

if a=0 then

bincin:=''

else

begin

b:=a mod 4;

if (b=0) then str:='0'

else str:='1';

bincin:=bincin (a div 2)+str;

end;

end;

36. Nilai yang dihasilkan ketika fungsi bincin(73) dipanggil adalah …A. 1001001B. 1101101C. 1010101D. 1011011E. 1101001

37. Jika b:=a mod 4 diganti menjadi b:=a mod 3 dan bincin:=bincin (a div 2)+strdiganti menjadi bincin:=bincin (a div 3)+str maka nilai yang dihasilkan ketikafungsi bincin (73) dipanggil adalah …A. 1001B. 1011C. 1100D. 1101E. 1110

Page 12: Pembahasan osk komputer sma 2014 - algoritma

Ambar Erna W. Pembahasan OSK Komputer 2014 - 12

Pembahasan No 36 :

Bincin(73),

Dari :

begin

if a=0 then

bincin:=''

else

begin

b:=a mod 4;

if (b=0) then str:='0'

else str:='1';

bincin:=bincin (a div 2)+str;

end;

end;

Untuk bincin(73)

b=a mod 4 = 73 mod 4 = 1, str=1

bincin = bincin (73 div 2) + str

= bincin (36) + 1

Untuk bincin(36)

b=36 mod 4 = 0, str = 0bincin =bincin(36 div 2) + str

=bincin(18) + 0

Bincin(18), b=2, str=1, bincin=bincin(9)+1Bincin(9), b=1, str=1, bincin=bincin(4)+1Bincin(4), b=0, str=0, bincin=bincin(2)+0Bincin(2), b=2, str=1, bincin=bincin(1)+1Bincin(1), b=1, str=1, bincin=bincin(0)+1Bincin(0), bincin= .’ ’

Dengan demikianBincin(1) = 1Bincin(2) = 11Bincin(4) = 110Bincin(9) = 1101Bincin(18) = 11011Bincin(36) = 110110Bincin(73) = 1101101

Jadi bincin(73)= 1101101 ,jawab : B

Page 13: Pembahasan osk komputer sma 2014 - algoritma

Ambar Erna W. Pembahasan OSK Komputer 2014 - 13

Dengan pascal :

function bincin(a:integer):string;

var

b:integer;

str:string;

begin

if a=0 then

bincin:=''

else

begin

b:=a mod 4;

if (b=0) then str:='0'

else str:='1';

bincin:=bincin(a div 2)+str;

end;

end;

begin

writeln(bincin(73));

readln;

end.

Running "c:₩fpc₩2.6.4₩bin₩i386-win32₩osk 2014 36.exe "

1101101

Page 14: Pembahasan osk komputer sma 2014 - algoritma

Ambar Erna W. Pembahasan OSK Komputer 2014 - 14

No 37

Dari algoritma :begin

if a=0 thenbincin:=''

elsebegin

b:=a mod 3;if (b=0) then str:='0'

else str:='1';bincin:=bincin(a div 3)+str;

end;end;

bincin(73), b=a mod 3 = 73 mod 3 = 1, str=1, bincin=bincin(24)+1bincin(24), b=0, str=0, bincin=bincin(8)+0bincin(8), b=2, str=1, bincin=bincin(2)+1bincin(2), b=2, str=1, bincin=bincin(0)+1bincin(0) bincin=’ ’

dengan demikian

bincin(2) = 1bincin(8) = 11bincin(24) = 110bincin(73) = 1101, jawab : D

Dengan pascal :

function bincin(a:integer):string;

var

b:integer;

str:string;

begin

if a=0 then

bincin:=''

else

begin

b:=a mod 3;

if (b=0) then str:='0'

else str:='1';

bincin:=bincin(a div 3)+str;

end;

end;

begin

writeln(bincin(73));

readln;

end.

Running "c:₩fpc₩2.6.4₩bin₩i386-win32₩osk 2014 37.exe "

Page 15: Pembahasan osk komputer sma 2014 - algoritma

Ambar Erna W. Pembahasan OSK Komputer 2014 - 15

1101

OSK 2014 no.38 dan 39

Perhatikan kumpulan fungsi dari potongan program berikut untuk soal nomor 38 dan

39.

function sapi(kucing: integer): integer;

begin

if (kucing <= 2 ) then

sapi:= 1

else

sapi:= sapi(kucing div 2)+1;

end;

function ayam(rumput: integer): integer;

begin

if (rumput < 1024) then

ayam:= ayam(rumput*2) + sapi(rumput)

else

ayam:= 0;

end;

function rumput(batu: integer): integer;

var a, c:integer;

begin

a:=2;

c:=1;

while (batu > 0) do

begin

if ((batu mod 2) = 1) then

c:=c*a;

batu:= batu div 2;

a:= a*a;

end;

rumput:=c;

end;

38. Berapakah nilai dari ayam(rumput(9))?

A. 19

B. 10

C. 9

D. 8

E. 7

39. Berapakah nilai dari ayam(rumput(2))?

A. 44

B. 42

Page 16: Pembahasan osk komputer sma 2014 - algoritma

Ambar Erna W. Pembahasan OSK Komputer 2014 - 16

C. 8

D. 2

E. 1

Pembahasan No 38 : ayam(rumput(9))?

Kita cari nilai rumput(9)

function rumput(batu: integer): integer;

var a, c:integer;

begin

a:=2;

c:=1;

while (batu > 0) do

begin

if ((batu mod 2) = 1) then

c:=c*a;

batu:= batu div 2;

a:= a*a;

end;

rumput:=c;

end;

rumput(9) ; artinya batu=9kita kerjakan ‘loop’ sampai posisi batu = 0

9 mod 2 = 1, c=1*2=2, batu= 9 div 2 = 4, a=2*2= 44 mod 2 =0 , c=2, batu= 4 div 2 = 2, a=4*4=162 mod 2 = 0 , c=2, batu = 2 div 2 =1 , a=16*16=2561 mod 2 = 1, c=2*256=512, batu= 1 div 2 = 0, a=256*256=65536------Sehingga : rumput = 512

Ayam(rumput(9))=ayam(512)

Dari function :

function ayam(rumput: integer): integer;

begin

if (rumput < 1024) then

ayam:= ayam(rumput*2) + sapi(rumput)

else

ayam:= 0;

end;

ayam(512)=ayam(512*2)+sapi(512)=ayam(1024)+sapi(512)= 0 + sapi(512)

Page 17: Pembahasan osk komputer sma 2014 - algoritma

Ambar Erna W. Pembahasan OSK Komputer 2014 - 17

Kita cari sapi(512) dari function :

function sapi(kucing: integer): integer;

begin

if (kucing <= 2 ) then

sapi:= 1

else

sapi:= sapi(kucing div 2)+1;

end;

sapi(512)…… nilai kucing=512sapi=sapi(kucing div 2)+1

=sapi(512 div 2)+1=sapi(256)+1

Sapi(256)----- sapi=sapi(128)+1Sapi(128)----- sapi=sapi(64)+1Sapi(64) ----- sapi=sapi(32)+1Sapi(32) ----- sapi=sapi(16)+1Sapi(16) ------ sapi=sapi(8)+1Sapi(8) ----- sapi=sapi(4)+1Sapi(4) ----- sapi=sapi(2)+1Sapi(2) ----- 1

Sehingga :sapi(4) = 1+1=2.....Sapi(512)=9

Dengan demikian : ayam(rumput(9)) = 9

Pembahasan Nomor 39 :Ayam(rumput(2))= .....

rumput(2) ;kita kerjakan ‘loop’ sampai posisi batu = 0

2 mod 2=0, c=1, batu=1, a=41 mod 2 = 1, c=1*4=4, batu= 1 div 2 = 0, a=4*4= 16-------Sehingga : rumput = 4

Ayam(rumput(2))=ayam(4)

function ayam(rumput: integer): integer;

begin

if (rumput < 1024) then

ayam:= ayam(rumput*2) + sapi(rumput)

else

ayam:= 0;

end;

Page 18: Pembahasan osk komputer sma 2014 - algoritma

Ambar Erna W. Pembahasan OSK Komputer 2014 - 18

ayam(4)== ayam(8)+sapi(4)= ayam (8) + 2= (ayam (16) + sapi(8)) + 2= ayam (16) + 3 + 2== ayam (32)+sapi(16)+5= ayam(64)+sapi(32)+4+5= ayam(128)+sapi(64)+5+9= ayam(256)+sapi(128)+6+14= ayam(512)+sapi(256)+7+20= ayam(1024)+sapi(512)+8+27=0+9+35=44

Atau dengan cara :

rumput=1024ayam=0

rumput=512ayam=ayam(512*2)+sapi(512)

=ayam(1024)+sapi(512)=9rumput=256

ayam=ayam(512)+sapi(256)=9+8=17rumput=128

ayam=ayam(256)+sapi(128)=17+7=24rumput=64

ayam=ayam(128)+sapi(64)=24+6=30rumput=32

ayam=ayam(64)+sapi(32)=30+5=35rumput=16

ayam=ayam(32)+sapi(16)=35+4=39rumput=8

ayam=ayam(16)+sapi(8)=39+3=42rumput=4

ayam=ayam(8)+sapi(4)=42+2=44

Jawab : A

Page 19: Pembahasan osk komputer sma 2014 - algoritma

Ambar Erna W. Pembahasan OSK Komputer 2014 - 19

Cek menggunakan pascal :

function sapi(kucing: longint): longint;

begin

if (kucing <= 2 ) then

sapi:= 1

else

sapi:= sapi(kucing div 2)+1;

end;

function ayam(rumput: longint): longint;

begin

if (rumput < 1024) then

ayam:= ayam(rumput*2) + sapi(rumput)

else

ayam:= 0;

end;

function rumput(batu: longint): longint;

var a, c:longint;

begin

a:=2;

c:=1;

while (batu > 0) do

begin

if ((batu mod 2) = 1) then

c:=c*a;

batu:= batu div 2;

a:= a*a;

end;

rumput:=c;

end;

begin

writeln(ayam(rumput(9)));

writeln(ayam(rumput(2)));

readln;

end.

Running "c:₩fpc₩2.6.4₩bin₩i386-win32₩osk 2014 38 39.exe "

9

44

Page 20: Pembahasan osk komputer sma 2014 - algoritma

Ambar Erna W. Pembahasan OSK Komputer 2014 - 20

40. Perhatikan potongan program berikut.var

am, ra : integer;

begin

am:=500;

ra:=100;

repeat

ra:=ra+1;

am:=am-ra;

until am>ra;

writeln(am,' dan ',ra);

end.

Apakah output dari program di atas?:

A. 90 dan 104

B. 90 dan 105

C. 194 dan 103

D. 297 dan 102

E. 399 dan 101

Pembahasan :

Pengulangan ini hanya berlangsung satu kali, karena posisi am>ra.

Sehingga : ra=100+1=101

Dan am=500-ra=500-101=399

Am dan ra berarti 399 dan 101, pilihan jawaban E

var

am, ra : integer;

begin

am:=500;

ra:=100;

repeat

ra:=ra+1;

am:=am-ra;

until am>ra;

writeln(am,' dan ',ra);

readln;

end.

Running "c:₩fpc₩2.6.4₩bin₩i386-win32₩osk 2014 40.exe "399 dan 101