function panas (x : integer) : integer;
var dingin : integer;
begin
dingin :=0;
while (x >=0) do begin
dingin := dingin +1;
if (x mod 3==0) then
x := x -5elseif (x mod 5==0) then
x := x -3else x := x -1
end;
panas := dingin
end;
Apakah kembalian dari panas(789)?
a. 262
b. 263
c. 264
d. 265
e. 266
Pembahasan :
Awalnya x bernilai 789 dan dingin bernilai 0.
Setelah masuk ke perulangan while, dingin menjadi 1 dan x menjadi 784 (karena 789 merupakan kelipatan 3).
Setelah itu, dingin menjadi 2 dan x menjadi 783 (karena bukan kelipatan 3 maupun 5).
Kemudian dingin menjadi 3 dan x dikurangi lagi dengan 5 menjadi 778.
Masuk ke iterasi lagi, dingin menjadi 4 dan x dikurangi dengan 1.
Kemudian dingin bernilai 5 dan nilai x = 772.
Lagi dingin bernilai 6 dan x bernilai 771.
771 merupakan kelipatan 3, sehingga dingin sekarang bernilai 7 dan x bernilai 766.
Dingin bernilai 8, x bernilai 765.
765 merupakan kelipatan 3 dan 5, tapi karena 3 disyaratkan lebih dulu, maka yang digunakan adalah 3. Dingin = 9 dan x = 760.
760 merupakan kelipatan 5, sehingga dingin menjadi 10 dan x menjadi 757.
757 bukan merupakan kelipatan 3 maupun 5, sehingga sekarang dingin menjadi 11 dan x menjadi 756.
756 merupakan kelipatan 3, sehingga x baru = 751 dan dingin = 12.
751 bukan kelipatan 3 ataupun 5, maka x baru = 750 dan dingin = 13.
750 adalah kelipatan 3, sehingga dingin = 14 dan x = 745.
745 merupakan kelipatan 5, sehingga dingin = 15 dan x = 742.
Ternyata setelah itu nilai x berulang dari bukan kelipatan 3 atau 5 → kelipatan 3 → bukan kelipatan 3 atau 5 → kelipatan 3 → kelipatan 5. Hal ini juga dikarenakan setiap pola akan berkurang sebanyak kelipatan 3 dan 5 yaitu 15. Hal ini bisa terlihat dari 772 menjadi 757 dan 757 menjadi 742.
Setiap x berkurang 15, nilai dingin bertambah 5. Sehingga nilai dingin sampai pola berakhir adalah 15 + (742/15)*5 = 260.
Dengan sisa x = 7, selanjutnya gunakan perulangan kembali.
Karena 7 bukan kelipatan, maka dingin = 261 dan x = 6.
6 adalah kelipatan 3, sehingga nilai dingin = 262 dan x = 1.
1 bukan kelipatan, sehingga dingin = 263 dan x = 0.
Pada program perulangan akan terus dilakukan sampai x mencapai negatif, sehingga dingin akhirnya bernilai 264 (c).
JAWABAN : C
Soal + Pembahasan KSN-K Informatika (No. 37)
Perhatikan potongan berikut ini :
function ayam(a, b: integer):integer;
begin
if b =0 then ayam :=0elseif b =1 then ayam := a
else ayam := ayam(a, b div 2) *2+ ayam(a, b mod 2);
end;
Berapakah hasil dari pemanggilan fungsi ayam(19, 39) ?
a. 39
b. 741
c. 58
d. 750
e. 748
Pembahasan :
ayam(19,39) = ayam(19,19)*2 + ayam(19,1)
ayam(19,19) = ayam(19,9)*2 + ayam(19,1)
ayam(19,9) = ayam(19,4)*2 + ayam(19,0)
ayam(19,4) = ayam(19,2)*2 + ayam(19,0)
ayam(19,2) = ayam(19,1)*2 + ayam(19,0)
ayam(19,2) = 19*2 + 0 = 38
ayam(19,4) = 38*2 + 0 = 76
ayam(19,9) = 76*2 + 19 = 171
ayam(19,19) = 171*2 + 19 = 361
ayam(19,39) = 361*2 + 19 = 741 (b).
Sebenarnya fungsi ayam adalah fungsi yang mengalikan nilai a dengan b.
JAWABAN : B
Soal + Pembahasan KSN-K Informatika (No. 38)
Perhatikan potongan berikut ini :
function kucing(tikus, keju: integer): integer;
begin
if(tikus > keju) then
kucing :=0else
kucing := tikus + kucing(tikus *2+1, keju);
end;
Berapakah hasil dari pemanggilan fungsi kucing(1, 2018) ?
a. 1
b. 1024
c. 2018
d. 2036
e. 2048
Pembahasan :
Fungsi kucing akan melakukan rekursi dengan mengubah nilai tikus menjadi 2kali + 1 nilai sebelumnya yang kemudian semua nilai tikus akan dijumlahkan. Fungsi akan berhenti melakukan rekursi jika nilai tikus lebih besar dari keju.
Oleh karena itu nilai tikus akan menjadi
1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047. Namun karena nilai yang lebih besar dari 2018 tidak dihitung, fungsi akan menghasilkan 2036.
JAWABAN : D
Soal + Pembahasan KSN-K Informatika (No. 39)
Perhatikan potongan di bawah ini :
Program santuy;
var n,a,b,ambyar,f,m:integer;
data:array[1..15] of integer=(13,17,25,28,30,41,45,56,58,64,73,76,87,91,98);
begin
n:=15; a:=1; b:=n; ambyar:=0;
while (a<=b) do
begin
M:=(a+b) div 2;
ambyar:= ambyar+data[m];
if (data[m]=f) then breakelseif(data[m]<f) then
begin
a:=m+1;
end else
begin
b:=m-1;
end;
end;
writeln(ambyar);
end.
Tentukan nilai variabel ambyar yang tercetak setelah program selesai dijalankan jika f=98 :
a. 322
b. 321
c. 223
d. 254
e. 193
Pembahasan :
n = 15, a = 1, b = 15, ambyar = 0, f = 98.
m = (a+b) div 2 = 8
ambyar = 0 + data[8] = 56
Karena data[8] < 98, maka a = 9.
m = (9+15) div 2 = 12
ambyar = 56 + data[12] = 56 + 76 = 132
Karena data[12] < 98, maka a = 13.
m = (13+15) div 2 = 14
ambyar = 132 + data[14] = 132 + 91 = 223
Karena data[14] < 98, maka a = 15.
m = (15+15) div 2 = 15
ambyar = 223 + data[15] = 223 + 98 = 321
data[15] = f, sehingga iterasi selesai.
Sehingga nilai variabel ambyar adalah 321.
JAWABAN : B
Soal + Pembahasan KSN-K Informatika (No. 40)
Perhatikan potongan program berikut ini :
function apaIni(kwak : integer) : boolean;
var i, j : integer;
begin
if (kwak * kwak = kwak) then
begin
apaIni := false;
exit;
end;
for i :=2 to (kwak -1) do
begin
j :=1;
while j * i <= kwak do
begin
if (i * j = kwak) then
begin
apaIni := false;
exit;
end;
j := j +1;
end
end;
apaIni := true;
end;
function apaItu(kwok : integer) : integer;
var i, kwak, kwik : integer;
begin
kwak := kwok;
kwik :=0;
for i :=0 to kwak do
begin
if (apaIni(i) = true) then
kwik := kwik +1
end;
apaItu := kwik;
end;
Berapa nilai dari apaItu(1000)?
a. 16
b. 24
c. 25
d. 157
e. 168
Pembahasan :
Jadi program apaItu akan melakukan iterasi dari 0 sampai 1000 dan memanggil fungsi apaIni dengan parameter 0-1000.
Fungsi apaIni akan bernilai false jika kwak*kwak = kwak, sehingga jika kwak bernilai 0 atau 1, fungsi akan mengembalikan nilai false.
Jika bukan kedua nilai tersebut, fungsi apaIni akan melakukan iterasi dari 2 sampai kwak-1. Jika i*j = kwak, maka fungsi mengembalikan nilai false.
Dengan demikian fungsi akan mengembalikan nilai false jika kwak merupakan bilangan prima. Jadi nilai dari apaItu(1000) adalah jumlah bilangan prima dari 0 sampai 1000, yaitu 168.
JAWABAN : E
File soal dan kunci jawaban bisa di download DI SINI.
Sama2 pak... Semoga blog sederhananya selalu bisa bermanfaat...
Silahkan tuliskan komentar Anda sesuai dengan topik postingan halaman ini. Centang "Beri tahu saya" untuk mendapatkan pemberitahuan balasan komentar anda.
2 komentar untuk "Soal + Pembahasan KSN-K Informatika / Komputer Tahun 2020 (36 - 40)"
Silahkan tuliskan komentar Anda sesuai dengan topik postingan halaman ini. Centang "Beri tahu saya" untuk mendapatkan pemberitahuan balasan komentar anda.