Lompat ke konten Lompat ke sidebar Lompat ke footer

Soal + Pembahasan KSN-K Informatika / Komputer Tahun 2020 (36 - 40)

Soal + Pembahasan KSN-K Informatika / Komputer Tahun 2020 (31 - 35)

Pembahasan soal sebelumnya ⇒ Soal + Pembahasan KSN-K Informatika / Komputer Tahun 2020 (31 - 35)

Soal + Pembahasan KSN-K Informatika (No. 36)

Perhatikan potongan berikut ini:

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 - 5
        else if (x mod 5 == 0) then
            x := x - 3
        else 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 := 0
    else if 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 := 0
    else
        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 break
        else if(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.

List Soal + Pembahasan KSN-K Informatika / Komputer Tahun 2020 :

Dg Tiro
Dg Tiro Bukan siapa-siapa, hanya orang biasa yang sedang belajar untuk selalu bisa bermanfaat bagi orang lain terutama orang-orang terdekat.

Posting Komentar untuk "Soal + Pembahasan KSN-K Informatika / Komputer Tahun 2020 (36 - 40)"