Pembahasan osk komputer sma 2014 - algoritma
-
Upload
ambar-erna -
Category
Education
-
view
3.454 -
download
57
Embed Size (px)
Transcript of 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

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

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

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

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

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

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

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

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

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

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

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

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 "

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

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)

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;

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

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

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