Pembahasan soal algoritmika OSK 2006

Udah lama ga nulis pembahasan nih. Bingung mau nulis apa lagi di blog. Oke langsung saja,

54. Perhatikan potongan program berikut
for i := 1 to n do begin
for j := 1 to n do begin
for k := 1 to n do begin
writeln(‘*’);
end;
end;
end;
dengan sembarang harga n > 0, keluaran ‘*’ akan
dicetak berulang-ulang dalam sejumlah baris
yang
(A) merupakan fungsi kubik (pangkat 3)
dari n
(B) merupakan fungsi kuadrat dari n
(C) merupakan fungsi linier dari n
(D) merupakan konstanta
(E) merupakan fungsi pangkat empat dari n

Jawab

Pada algoritma di atas, menggunakan nested loop sebanyak 3 kali. Karena kita tahu fungsi for a=1 to n itu berarti mengkalikan sebanyakan n kali, maka jika perulangannya bersarang, maka akan menjadi berpangkat.

Untuk algoritma code tadi, maka yang akan dihasilkan ada pangkat tiga, maka jawabannya adalah (B).

55. Perhatikan potongan program berikut
for i := 0 to 4 do
begin
for j := 5-i downto 1
begin
write(„*‟);
end
writeln();
end
Apakah output program di atas?
(A)
*****
*****
*****
*****
*****
(B)
*
**
***
****
*****
(C)
*
**
***
****
*****
(D)
*****
****
***
**
*
(E)
*****
****
***
**
*

Jawab

Untuk algoritma tadi menggunakan nested loop sebanyak dua kali. Loop pertama untuk menunjukkan jumlah i, yang kedua menggunakan loop untuk mencetak lingkaran sebanyak 5-i sampai 1.

Dalam loop pertama dimasukkan nilai i adalah 1 sampai dengan 4, maka kemungkinan hasil yang tercetak adalah dari besar menurun sampai ke yang paling kecil. Jawaban yang tepat adalah (D).

60. Perhatikan program berikut
type ari = array[1..5] of byte ;
var x : ari ;
var i : byte;
……………….
for i := 1 to 5 do x[i] := 10 div i ;
for i := 4 downto 1 do x[5] := x[5] + x[i] ;
writeln( x[5] ) ;
Berapakah output yang dihasilkan program
tersebut :
(A) 22.8
(B) 5
(C) 20.8
(D) 20
(E) 22

Jawab

Soal ini mulai pake array, salah satu materi yang sepenuhnya belum gw kuasai😀. Oke, langsung saja. Di program ini ada sedikit bug menurut gw, untuk type sebenernya tidak perlu dimasukkan. Padahal bisa langsung didefinisikan dengan var x:=array[1..5] of integer;.

Oke, menggunakan looping (lagi). Looping pertama untuk memasukkan nilai array dari x[i] yang berupa nilai dari 10 div i. Maksud dari operasi div adalah pembagian yang dibulatkan ke bilangan bulat. Setelah looping pertama, looping kedua untuk menjumlahkan bilangan x yang berada di array ke 5 dijumlahkan dengan x array bilangan-bilangan keempat, ketiga, sampai kesatu.

x[5] bernilai 2, jika dijumlahkan dengan 2,3,5,10 (nilai x[4]..x[1]), maka akan ketemu jawaban (E).

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s