Langsung ke konten utama

Pembahasan Soal OSN Komputer 2016 (Algoritma)




Soal OSK Komputer 2016
Perhatikan algoritma berikut ini :
var
array : [1 . .  30 ] of longint = ( 5, 5, 7, 8, 6, 8, 5, 8, 4, 6, 6, 3, 4, 2, 8,0, 9, 2, 3, 4, 7, 8, 5, 4, 5, 3, 9, 8, 0, 3) ;
i, c : longint;
begin
            c := 0;
            for i := 1 to length (arr) do begin
                        inc ( c, arr[i] ) ;
            end;
            writeln ((c/length (arr)) :0:2;
end.
41. Apa keluaran program di atas?
a.       3.17
b.      4.17
c.       5.17
d.      6.17
e.       7.17
Jawab :
Dari syntax/ algoritma di atas dapat diperhatikan bahwa ada pemanggilan for i to length (arr) dan berikutnya ada inc(c, arr[i]).  Itu meunjukkan bahwa ada penjumlahan yang terjadi di dalam syntax tersebut.
Dengan cara mudah kita menjumlahkan semua array atau data yang ada pada array tersebut. Sehingga di dapat :
Hasil keluaran :
Jawaban :  C
Perhatikan potongan kode berikut untuk 2 soal selanjutnya
var
            i, n, c : longint;
begin
            readln (n) ;
            c := 0;
            for i := 1 to n do begin
                        inc (c, i) ;
            end;
            writeln (c) ;
end.
42. Apakah output program di atas apabila masukan n bernilai 10?
a.       10
b.      45
c.       55
d.      65
e.       76
Jawab:
Dari kode di atas dapat dipahami bahwa terjadi penjumlahan secara berutan Karena ada syntax inc (c,i). Karena hal tersebut maka digunakanlah rumus penjumlahan berurutan
(PENTING)
Jawaban : C
43. Apakah output program di atas  apabila masukan n bernilai 1000?
a.       1000
b.      5500
c.       5550
d.      505000
e.       500500

Jawab:
Sama dengan hal di atas memakai rumus yang sama
Jawaban : E




Perhatikan potongan kode berikut:
var
            i, j, n, r, c, d : longint;
begin
            readln (n , r);
            c := 0;
            for i := 1 to n do begin
                        d := 1;
                        for j := 1 to i do begin
                                    d := d*r ;
                        end ;
                        inc (c,d);
            end;
            writeln (c);
end.
44. jika diberi input 20 2, maka outputny adalah?
a.       1048576
b.      2097152
c.       1048575
d.      2097150
e.       2097151
Jawab:
C
I
D
j
d = d x r
0
1
1
1
1 x 2 = 2

2
1
1
1 x 2 = 2



2
2 x 2 = 4

3
1
1
1 x 2 = 2



2
2 x 2 = 4



3
4 x 2 = 8

:
:
:
:
:
:
:
:
:
:
:
:

N

n


Dari table di atas dan dari kode yang diketahui inx (c,d)  berarti terjadi penjumlahan atau deret. Dari hal tersebut maka saya menggunakan rumus deret gemetri
(PENTING)
Karena angka yang pangkat yang didapat dari soal sangat besar yaitu . Maka saya menggunakan modulo atau sisa bagi. Yaitu
Dan diperoleh hasil
Maka dari penjabaran di atas diperoleh hasilnya yang memiliki satuan 0.
Jawaban : D

Perhatikan potongan kode berikut:
Function tista ( a : integer ) : longint;
begin
            if (a < 10) then tis := a
            else tis := tis ( a div 10 ) * 3 + tis (a div 50);
end;
Berapakah hasil dari pemanggilan fungsi tis(143)?
a.       8
b.      9
c.       10
d.      11
e.       12
Jawab :
tis(143)            = tis (143 div 10) x 3  + tis (143 div 50)
= tis (14) x 3 + tis (2)
= 3 x [tis (1) x 3 + tis (0)] + tis (2)
= 3 x 3 + 2
= 11
jawaban : D

Perhatikan potongan kode berikut:
const
            MAX = 10;
var
            i, n : integer;
            a : array [1 . . 10] of integer;
procedure klik ();
begin
            dec (i);
end;
fuction klek ( x : integer ) : integer;
begin
            if ( x = MAX ) then klek := A [X] * A[1]
            else klek := A[x] * A [x+1];
end;
function klok () : integer;
var
            tmp : integer;
begin
            if ( i = 0 ) then klok := i
            else begin
                             tmp := I;
                        klik ();
                        klok := klok() + klek (tmp);
            end;
end;in
            A[1] := 1; A[2] := 2; A[3] := 3; A[4] := 4; A[5] := 5;
            A[6] := 6; A[7] := 8; A[8] := 7; A[9] := 9; A[10] := 11
            read (n) ;
            I := n;
            writeln(klok());
end.
46. Apakah output program di atas jika diberi input 8?
a.       240
b.      235
c.       237
d.      330
e.       327
Jawab :
Karena diberi input 8. Maka kode di atas akan dimulai dari n = 8. Karena  i = n, maka i = 8.
Ayo mainkan nalarnya ya dan sesuaikan dengan kode di atas serta pahami dengan seksama alur pembacaaan kode di atas . OKE !!!!!
n= 8
i=8
read (8)

i
Tmp
klik = decrease (i)
klok = klok() + klek (tmp)
klek (x)
8
8
7
Klok = klok () + klek (8)
klek = A[8] x A[9]
= 7 x 9
= 63
7
7
6
Klok = klok() + klek (7)  + klek (8)
Klek (7) = A[7] x A[8]
= 8 x 7
= 56

:
:
:
:
:
:
:
:
:
:
:
:
:
:
:

Dari tabel di atas dapat kita nalarkan bahwa akan terjadi penjumlahan klek (x) dari klek (8) sampai dengan klek (1).
Maka akan didapatkan hasil = (7 x 9) +  (8 x 7) + (7 x 6) + (6 x 5) + (5 x 4) + (4 x 3 ) + ( 3 x 2) + (2 x 1) = 237
Jawaban : C
Perhatikan potongan kode sebagai berikut untuk 2 soal selanjutnya
A := 13; b := 1;
while (a < n) do
begin
            a := a + b;
            b := b+ 1;
end;
writeln (a, ‘ ‘, b);
47. Dari pilihan berikut ini, berapakah nilai n yang TIDAK membuat nilai a diahir 79?
a.       68
b.      69
c.       70
d.      71
e.       72
Jawab :
Dari kode di atas terlihat bahwa aka terjadi penambahan 1+2+3…
Sampai nilai a ≥ n
Jadi a = 13 … 68 79 …
Jadi nilai n yang tidak membuat nilai a di akhir 79 adalah 68. Karena pada saat itu a = n
Ingat rumus: 
Jawaban : A
48.berapakah nila n maksimum yang membuat nilai b di akhir bernilai 15?
a.       134
b.      133
c.       119
d.      118
e.       117


Jawab :
Dari kode kita lihat bahwa akan terjadi a dengan b – 1. Maka nilai b = 15 ketika a dijumlahkan sebanyak 14 kali dengan menggunakan rumus tadi.
Jadi n maksimum yang membuat nilai b = 15 adalah 118
Jawaban : D

Perhatikan potongan kode sebagai berikut untuk 2 soal berikutnya
Function naon (x, y: longint ) : longint;
begin
            if y = 0 then naon := 1
else if y := 1 then nanon := x
else naon := naon (x, y div 2) * naon ( x, y div 2) * naon (x, y mod 2);
end;
49. Berapakah hasil dari naon ( 3,8) ?
a.       11
b.      24
c.       6561
d.      512
e.       81
Jawab :
Dari kode tersebut kita mengetahui bahwa kode tersebut merupakan . Jadi hasilnya adalah
Jawaban : C
50. Berapa kalikah fungsi naon dipanggil pada pemanggilan naon (4,13)?
a.       13
b.      15
c.       20
d.      21
e.       22

Jawab:
(4,13) = hasilnya 21 + 1 = 22 
(4,13 )  = (4,6) (4,6) (4,1) => 7*2 + 1 => 9*2 [ (4,6) ada dua dan setiap (4,6) bakal manggil 9
    naon] + 3  => 21
(4,6)     = (4,3) (4,3) (4,0) => 3*2 [ (4,3) ada 2 nah setiap (4,3) bakal manggil 3 naon] + 3
   (manggil dirinya sendiri ) => 9 
(4,3)     = (4,1) (4,1) (4,1) => 3 ( manggil dirinya sendiri ) 
-          setiap (4,1) dan (4,0 ) tidak akan memanggil fungsi naon lain, melainkan langsung menghasilkan nilai x atau 1
Jawaban : E

Pesan : “ Dalam pengerjaan soal algoritma ini kita dituntut untuk lebih teliti dan pandai dalam membaca pola yang diberikan serta logika berpikir harus ditingkatkan.”
C.P                  : 082284831195
BBM               : 5ED08188
ID LINE         : RAVIKURNIA16

Untuk mendownload filenya silahkan klik gambar di bawah ini
https://app.box.com/s/3vwmybpn7n1dtg3r294nvfx9lktj8yeo
 





TERIMA KASIH DAN SELAMAT BELAJAR

Komentar

Postingan populer dari blog ini

Power Point Tentang Pemuda

PEMUDA DAN REALITA DI MASA KINI         Ini adalah salah satu presentasi saya pada saat perkuliahan aplikom. Semoga bermanfaat bagi teman-teman semua.             Silahkan di download di link di bawah ini : POWER POINT VIDEO YANG ADA DI DALAM POWER POINT