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. 3620 B. 3760 C. 3824 D. 3927 E. 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) x=3 , wow = wow(1)+3*wow(2) x=4 , wow = wow(2)+3*wow(3) x=5 , wow = wow(3)+3*wow(4) x=6 , wow = wow(4)+3*wow(5) x=7 , wow = wow(5)+3*wow(6) x=8 , wow = wow(6)+3*wow(7) Pilihan jawaban : D
=0+3=3 = 1 + 3*3 = 1 + 9 = 10 = 3 + 3*10 = 33 = 10 + 3*33 = 109 = 33 + 3*109 = 360 = 109 + 3*360 = 1189 = 330 + 3*1099 = 3927
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. 1 B. 7 C. 14 D. 21 E. 49 33. Berapakah hasil pemanggilan fungsi jeruk(25, 20)? A. 425 B. 450 C. 475 D. 500 E. 525
Ambar Erna W.
Pembahasan OSK Komputer 2014 - 3
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 = 1 Mangga=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 = 1 Mangga=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 yang dijalankan adalah : untuk rambutan dibagi 2. Jika rambutan ganjil, fungsi yang dijalankan berikutnya adalah : nilai rambutan= 2*7+1 Function Mangga(7), rambutan=7 ..... rambutan mod 2 = 1 Mangga=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 Ambar Erna W.
Pembahasan OSK Komputer 2014 - 4
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 = 1 Mangga=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 nilai mangga(49)=1 Jawab : A
Ambar Erna W.
Pembahasan OSK Komputer 2014 - 5
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), serta Jeruk(25,1) ... nilai jeruk=0 Dari ;
jeruk = mangga(25) * 25 + jeruk(25,19) Maka nilai jeruk=25+25+......+25 sebanyak 19 kali (mulai dari melon=20 sampai dengan melon=2, karena melon=1, nilai jeruk=0.
Jadi 25*19 = 475 Jawab : C
Ambar Erna W.
Pembahasan OSK Komputer 2014 - 6
Soal 32 dan 33, jika dikerjakan menggunakan program pascal (contoh menggunakan 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
Ambar Erna W.
Pembahasan OSK Komputer 2014 - 7
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. 1 B. 3 C. 4 D. 15 E. 16 35. Jika fungsi f(10) dipanggil maka nilai yang dihasilkan adalah....... A. 1 B. 9 C. 10 D. 1023 E. 1024
Pembahasan No 34 Dari function 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 Ambar Erna W.
Pembahasan OSK Komputer 2014 - 8
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 maka g(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
Ambar Erna W.
Pembahasan OSK Komputer 2014 - 9
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
Ambar Erna W.
Pembahasan OSK Komputer 2014 - 10
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. 1001001 B. 1101101 C. 1010101 D. 1011011 E. 1101001 37. Jika b:=a mod 4 diganti menjadi b:=a mod 3 dan bincin:=bincin (a div 2)+str diganti menjadi bincin:=bincin (a div 3)+str maka nilai yang dihasilkan ketika fungsi bincin (73) dipanggil adalah … A. 1001 B. 1011 C. 1100 D. 1101 E. 1110
Ambar Erna W.
Pembahasan OSK Komputer 2014 - 11
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 = 0 bincin =bincin(36 div 2) + str =bincin(18) + 0 Bincin(18), Bincin(9), Bincin(4), Bincin(2), Bincin(1), Bincin(0),
b=2, str=1, bincin=bincin(9)+1 b=1, str=1, bincin=bincin(4)+1 b=0, str=0, bincin=bincin(2)+0 b=2, str=1, bincin=bincin(1)+1 b=1, str=1, bincin=bincin(0)+1 bincin= .’ ’
Dengan demikian Bincin(1) = 1 Bincin(2) = 11 Bincin(4) = 110 Bincin(9) = 1101 Bincin(18) = 11011 Bincin(36) = 110110 Bincin(73) = 1101101 Jadi bincin(73)= 1101101 ,jawab : B
Ambar Erna W.
Pembahasan OSK Komputer 2014 - 12
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
Ambar Erna W.
Pembahasan OSK Komputer 2014 - 13
No 37 Dari algoritma : 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; bincin(73), bincin(24), bincin(8), bincin(2), bincin(0)
b=a mod 3 = 73 mod 3 = 1, str=1, bincin=bincin(24)+1 b=0, str=0, bincin=bincin(8)+0 b=2, str=1, bincin=bincin(2)+1 b=2, str=1, bincin=bincin(0)+1 bincin=’ ’
dengan demikian bincin(2) = 1 bincin(8) = 11 bincin(24) = 110 bincin(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 "
Ambar Erna W.
Pembahasan OSK Komputer 2014 - 14
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 Ambar Erna W.
Pembahasan OSK Komputer 2014 - 15
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=9 kita kerjakan ‘loop’ sampai posisi batu = 0 9 mod 2 = 1, c=1*2=2, batu= 9 div 2 = 4, a=2*2= 4 4 mod 2 =0 , c=2, batu= 4 div 2 = 2, a=4*4=16 2 mod 2 = 0 , c=2, batu = 2 div 2 =1 , a=16*16=256 1 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)
Ambar Erna W.
Pembahasan OSK Komputer 2014 - 16
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=512 sapi=sapi(kucing div 2)+1 =sapi(512 div 2)+1 =sapi(256)+1 Sapi(256)----- sapi=sapi(128)+1 Sapi(128)----- sapi=sapi(64)+1 Sapi(64) ----- sapi=sapi(32)+1 Sapi(32) ----- sapi=sapi(16)+1 Sapi(16) ------ sapi=sapi(8)+1 Sapi(8) ----- sapi=sapi(4)+1 Sapi(4) ----- sapi=sapi(2)+1 Sapi(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=4 1 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;
Ambar Erna W.
Pembahasan OSK Komputer 2014 - 17
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=1024 ayam=0 rumput=512 ayam=ayam(512*2)+sapi(512) =ayam(1024)+sapi(512)=9 rumput=256 ayam=ayam(512)+sapi(256)=9+8=17 rumput=128 ayam=ayam(256)+sapi(128)=17+7=24 rumput=64 ayam=ayam(128)+sapi(64)=24+6=30 rumput=32 ayam=ayam(64)+sapi(32)=30+5=35 rumput=16 ayam=ayam(32)+sapi(16)=35+4=39 rumput=8 ayam=ayam(16)+sapi(8)=39+3=42 rumput=4 ayam=ayam(8)+sapi(4)=42+2=44
Jawab : A
Ambar Erna W.
Pembahasan OSK Komputer 2014 - 18
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
Ambar Erna W.
Pembahasan OSK Komputer 2014 - 19
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
Ambar Erna W.
Pembahasan OSK Komputer 2014 - 20