Senin, 09 Mei 2011

SOAL & PEMBAHASAN SELEKSI TAHAP 1 OLIMPIADE KOMPUTER SMAK FRATERAN PODOR TAHUN 2011

SOAL & PEMBAHASAN SELEKSI TAHAP 1 OLIMPIADE KOMPUTER SMAK FRATERAN PODOR TAHUN 2011
SCORE PENILAIAN :
BENAR = +4
SALAH = -1
TIDAK MENJAWAB = 0

Soal dan Pembahasan Seleksi I
1. Seorang pedagang barang elektronik menjual sebuah televisi berwarna layar datar seharga Rp.3.000.000, jika tarif pajak barang elektronik yang tergolong barang mewah tersebut adalah antara 5 % sampai 8 %, maka harga yang paling mungkin untuk televisi tersebut setelah ditambah pajak adalah :
(A) Rp. 3.180.000
(B) Rp. 3.100.000
(C) Rp. 3.120.000
(D) Rp. 3.140.000
(E) Rp. 3.250.000
Pembahasan
X = Rp 3.000.000
Tarif Pajak = 5% - 8%
Harga televisi + pajak 5% = 3.150.000
6% = 3.180.000
7% = 3.210.000
8% = 3.240.000

2. Manakah yang mendeklarasikan tipe enumerasi dengan tepat?
a. Type a=integer;
b. Type a=1..300;
c. Type a=(baik, jelek, buruk);
d. Type a=[baik, jelek, buruk];
e. Type a=baik, jelek, buruk;

3. Tipe di bawah ini mana yang tidak dapat melakukan operasi aritmatika?
a. Integer
b. Byte
c. Real
d. boolean
e. word

4. Deklarasi prosedur manakah yang tidak dibenarkan?
a. procedure hapus;
b. procedure hapus(s:string);
c. procedure hapus(var s:string);
d. procedure hapus(s:string):boolean;
e. procedure hapus(var data);
Pembahasan:
Untuk penulisan prosedur, tidak diperbolehkan adanya nilai kembali. Sedangkan parameter tanpa tipe data (pada opsi e), dapat dibenarkan.

5. Tipe variabel ekspresi manakah yang tidak dapat ditampilkan dengan procedure Writeln?
a. Type T=Integer;
b. Type T=String;
c. Type C=Char;
d. Type T=(Small, Medium, Large)
e. Semua valid
Pembahasan:
Opsi d adalah tipe data enumerasi. Tipe data enumerasi tidak dapat ditampilkan dengan perintah Writeln.

6. Perhatikan program berikut :
var s:string;
begin
s:='TOKI GO GET GOLD!';
delete(s,1,length(s)-12);
writeln(s);
end.
Apa keluaran program di atas ?
a. GO GET GOLD!
b. GO GET GOLD!
c. GET GOLD!
d. TOKI GO GET
e. TOKI GO GE
Pembahasan:
Procedure delete:
Deklarasi : procedure Delete(var S: String; Index: Integer; Count:Integer);
Keterangan : procedure delete akan menghapus S sebanyak count karakter, dimulai dari posisi Index.
Function length:
Deklarasi : Function Length (S : String) : Integer;
Keterangan : Length menghasilkan panjang dari S, bernilai antara 0 sampai dengan 255.
Jika S tidak berisi apa-apa maka akan menghasilkan 0.
Statement delete(s,1,length(s)-12) akan menghapus s dari posisi 1 sebanyak panjang s, yaitu 17-12 = 5. Sehingga yang dihapus adalah karakter ‘TOKI ‘ dan s akan bernilai GO GET GOLD!

7. Perhatikan penggalan program berikut :
var i,k: integer;
begin
i:=5; k:=0;
k:=trunc(sqrt(i))+1;
writeln(k);
end.
Apa keluaran program di atas ?
a. 3
b. 2.24
c. 2
d. 0
e. program tidak dapat dijalankan
Pembahasan:
Fungsi sqrt :
Deklarasi : Function Sqrt (X : Real) : Real;
Keterangan : menghasilkan akar pangkat dua dari x, di mana x harus positif
Fungsi trunc:
Deklarasi : Function Trunc (X : Real) : Longint;
Keterangan : menghasilkan bilangan bulat dari X, akan selalu lebih kecil atau sama dengan X.
Sqrt(5) akan menghasilkan 2.23
Trunc(2.23) akan menghasilkan 2
Sehingga k:=trunc(sqrt(i))+1; akan menghasilkan 3

8. Mengacu pada program berikut :
var
A,B:string;
C:string[10];
begin
A:='TOKI MEMANG';
B:='HEBAT';
C:=A+B;
if (Pos(B)>0) then
Begin
Writeln('A');
end else
Writeln('B');
end.
Apa yang terjadi jika program di atas di jalankan...
a. Huruf ‘A’ tercetak
b. Huruf ‘B’ tercetak
c. Tidak dapat dipastikan
d. Terjadi error
e. Tidak bisa di compile
Pembahasan:
Kesalahan pertama yang akan ditemui program adalah pada function pos.
Deklarasi : Function Pos (Substr : String; S : String) : Integer;
Keterangan : function pos akan menghasilkan urutan atau posisi substr di S. Jika tidak ditemukan, maka akan menghasilkan 0.
Pada program function pos hanya terdiri dari 1 parameter saja sehingga program tidak akan dapat dijalankan.

9. Jika n dan p adalah dua bilangan bulat, dan n + p berharga ganjil, manakah dari berikut ini bil ganjil?
a. n – p + 1
b. np
c. n2 + p2 – 1
d. 3p + 5n
e. (p – n)(n – p)
Pembahasan ;
A bukan, karena (n+p) adalah ganjil maka dari n dan p salah satu ganjil dan yang lain genap. Selisih antara n dan p pasti ganjil sehingga jika ditambah 1 menjadi genap.
B bukan karena perkalian antara suatu bilangan genap dengan bilangan apapun akan menjadi genap.
C bukan karena pangkat bulat positif berapapun dari bilangan genap, tetap genap, dan ganjil tetap ganjil, kemudian ganjil ditambah genap dan dikurang ganjil menjadi genap.
D bukan karena pangkat bulat positif berapapun dari bilangan ganjil tetap bilangan ganjil, dan jumlah dua bilangan ganjil menjadi genap.
E benar, karena perkalian antara dua bilangan ganjil menghasilkan bilangan ganjil.

10. var
i,j : integer;
begin
for i :=1 to 3 do
for j :=i to 3 do
write(‘*’);
writeln;
end.
Output program di atas :
a. *
**
***

b. ***
***
***

c. ***
**
*

d. ******

11. Perhatikan potongan program berikut :
begin
writeln(round(frac(3.7)));
end.
Apa keluaran program di atas ?
a. 0
b . 1
c. 2
d. 3
e. 4
Pembahasan:
Fungsi frac (lihat pembahasan di atas)
Fungsi round
Deklarasi : Function Round (X : Real) : Longint;
Keterangan : membulatkan bilangan X, yang mungkin lebih besar atau lebih kecil dari X.
Frac(3.7) akan menghasilkan 0.7
Round(0.7) akan menghasilkan 1

12. Delegasi-delegasi dari negara W dan negara R duduk berhadap-hadapan pada meja perundingan. Masing-masing delegasi terdiri atas seorang ketua, dua atase militer dan dua wakil kamar dagang negara masing-masing. Delegasi W beranggotakan A, B, C, D, dan E. Delegasi R beranggotakan F, G, H, I, dan J. Masing-masing delegasi berada pada sisi-sisi memanjang berlainan (satu negara pada sisi yang sama dan ketua duduk di tengah delegasinya). Batasan dalam mengatur urutan duduk mereka:
• Delegasi W menempatkan A dan B di kedua ujung barisannya.
• Kuping kanan G tuli shg ia harus paling kanan dari delegasi R.
• Baik D maupun F bukan ketua.
• Para atase militer W, salah seorangnya B, didudukkan berdampingan,dan tidak ada satupun yang berseberangan dengan atase militer R
• G bukan atase militer.
• C wakil dari kamar dagang, duduk berseberangan dgn H.

Manakah yang paling mungkin mengenai F berikut?
a. Wakil kamar dagang yang duduk di sebelah I
b. Wakil kamar dagang yang duduk di sebelah H
c. Wakil kamar dagang yang duduk berseberangan dengan B
d. Atase militer yang duduk di sebelah I
e. Atase militer yang duduk di sebelah J

Pembahasan
Dibuat diagram sbb
x1–x2–x3–x4–x5 negara W
y1–y2–y3–y4–y5 negara R
Dari (1) kemungkinan {x1,x5} adalah {A,B} atau {B,A}
Dari (2) maka y5=G yang karena pernyataan (4) dan (5) (G bukan a.m dan B adalah a.m) menyebabkan x5=B, sehingga (atase militer dengan bold)
A –x2–x3–x4– B
y1–y2–y3–y4–G
Dari pernyataan (6) dan (4) diperoleh C = x2 dan y2 = H, sehingga
A –C –x3–x4– B
y1–H –y3–y4–G
Dari pernyataan (3) dan diagram di atas D = x4 dan F = y1 atau y4
A –C –E –D –B
y1–H –y3–y4– G
Jadi tinggal 2 kemungkinan F=y1 (atase militer), atau F=y4 (wakil kamar dagang).
Jika atase militer maka (D) dan (E) salah karena sebelah y1 adalah H.
Jika wakil kamar dagang maka (B) salah karena H atase militer dan (C) salah karena B ada di depan G.
Jadi tinggal pilihan (A) yang paling mungkin.
(Note: ini bukan satu-satunya kemungkinan.Kemungkinan lainnya masih ada tapi tidak ada di kelima pilihan itu).

13. Berapakah jangkauan tipe data Word?
a. 0…255
b. 0…65536
c. 0…65535
d. -32768…32767
e. Salah semua

14. Tipe data manakah yang dapat memuat bilangan pecahan?
a. Byte
b. Integer c. Boolean
d. Real
e. LongInt

15. Dalam potongan program berikut,
var Z1, Z2, Z3, Z4: set of Byte;
begin
Z1 := [1, 2, 6, 8, 9];
Z2 := [3, 6, 8, 12, 14];
Z3 := Z1 + Z2;
Z4 := Z1 * Z2;
end.
Berapakah nilai akhir Z3 dan Z4?
a. Z3 = [6, 7, 8]
Z4 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
b. Z3 = [6, 8]
Z4 = [1, 2, 3, 6, 8, 9, 12, 14]
c. Z3 = [1, 2, 3, 6, 6, 8, 8, 9, 12, 14]
Z4 = [6, 6, 8, 8]
d. Z3 = [1, 2, 3, 6, 8, 9, 12, 14]
Z4 = [6, 8]
e. Salah semua

Soal di bawah ini untuk no. 16 s.d 18
6 orang pengusaha P – Q – R – S – T & U mengadakan rapat tertutup. Dgn formasi kursi diatur berjarak sama satu sama lain mengelilingi meja, sedemikian sehingga setiap kursi di seberangnya:
- P tidak boleh ditempatkan di samping Q
- R tidak boleh ditempatkan di samping S
- T harus ditempatkan di samping S
16. Jika R duduk di seberang Q, ada berapa kombinasi urutan keempat pengusaha lainnya dapat didudukan
a. 5
b. 4
c. 3
d. 2
e. 1

Pembahasan
Urutan 1 : R,P,U,Q,T,S
Urutan 2 : P,U,Q,T,S,R

17. Jika P duduk di seberang T, siapa yg duduk di seberang S?
a. P
b. Q
c. S
d. T
e. U
Pembahasan
Urutan 1 : P, U,R,T,S,Q

18. Jika P duduk di seberang Q, siapa yang dapat ditempatkan di seberang T, jika I.S II.R III. U?
a. Hanya II
b. Hanya III d. I, II dan III
c. Hanya I dan II
d. Hanya II dan III
e. I, II dan III

Pembahasan
Urutan 1 : P,T,S,Q,R,U
Urutan 2 : T,S,Q,R,U,P
Urutan 3 : S,Q,R,U,P,T
Urutan 4 : Q,R,U,P,T,S

19. Deklarasi manakah yang benar?
a. type Anggota = record
Nama: String[40];
NomorAnggota: Word;
End;
b. type Anggota: record
Nama = String;
NomorAnggota = Word;
End;
c. type Anggota := record
Nama := String[20];
NomorAnggota := Word;
End;
d. Type Anggota = record
Nama: String[];
NomorAnggota: Word;
end;
e. Semua deklarasi di atas salah

20. Tipe data mana yang sanggup memuat numerik hingga 75000?
a. Word
b. Integer
c. Real
d. Longint
e. String

21. Seorang manajer perusahaan kecil sedang mengatur Jadwal kerja para pegawainya. Setiap hari kerja (Senin s.d Jumat, lima hari kerja seminggu) diperlukan paling sedikit tiga orang pegawai. Karena perusahaan ini masih kecil, jumlah pegawainya hanya ada lima orang yang bekerja secara paruh waktu (part time, artinya tidak masuk setiap hari lima hari seminggu), Ali hanya bisa masuk kerja pada hari Senin, Rabu, dan Jumat. Baiquini tidak bisa masuk kerja pada hari Rabu. Chali hanya bisa masuk kerja pada hari Selasa dan Rabu. Dita tidak bisa masuk kerja pada hari Jumat. Eko bisa masuk kerja kapan saja kecuali setiap hari Senin pertama dan setiap hari Kamis pertama dalam setiap bulan. Siapa saja yang selalu dapat masuk kerja pada hari Senin ?
a. Dita, Baiquini, dan Ali
b. Ali, Eko, dan Chali
c. Baiquini, Eko, dan Chali
d. Eko, Chali, dan Dita
e. Baiquini, Chali, dan Dita

Pembahasan
Ali : Senin,Rabu,Jumat
Baiquini : Senin,Selasa,Kamis,Jumat
Chali : Selasa, Rabu
Dita : Senin,Selasa,Rabu,Kamis,
Eko : Selasa, Rabu, Jumat

22. Siapa saja yang selalu dapat masuk kerja pada hari Jumat?
a. Ali, Baiquini, dan Dita.
b. Ali, Chali, dan Dita.
c. Baiquini, Chali, dan Eko.
d. Chali, Baiquini, dan Ali.
e. Ali, Baiquni, dan Eko.

23. Pada hari apa kemungkinan sang manajer menghadapi kesulitan untuk mendapatkan minimum tiga orang pegawai ?
a. Senin
b. Selasa
c. Rabu
d. Kamis
e. Jumat

Pembahasan
Senin = 3 pegawai pasti
Selasa & Rabu = 4 pegawai siap
Kamis = 2 pegawai (Eko tidak dapat hadir senin dan minggu pertama)
Jumat = 3 pegawai pasti

24. Pada hari apa sang manajer harus (tidak ada pilihan lain) untuk meminta Eko masuk kerja ?
a. Senin
b. Selasa
c. Rabu
d. Kamis
e. Jumat

Ingin ikut lomba komputer, dibawah ini salah satu contoh soal olimpiade komputer, berupa pertanyaan dan pembahasan dari soal yang diambil dari “Seleksi Olimpiade Komputer Tingkat Kabupaten/Kota 2009″. Soal kali ini terkait dengan operasi OR dan AND pada operand berbentuk bilangan integer. Wah apa lagi tuh ??? Lho bukannya operasi OR and AND hanya bisa digunakan pada operand berbentuk boolean (TRUE atau FALSE)? Wah… ternyata ndak tuh, simak detail dari artikel ini ya…
Diketahui algoritma pseudopascal berikut ini
const
xmin = -10;
xmax = 10;
ymin = -10;
ymax = 10;
function code(x: integer; y : integer) : byte;
var c : byte;
begin
c := 0;
if (x < xmin) then c := c OR 8 else if (x > xmax) then c := c OR 1;

if (y < ymin) then c := c OR 4 else if (y > ymax) then c := c OR 2;

code := c;
end;

Pertanyaan :
Perintah writeln(code(-12, -12) AND code(20, 5)) akan mencetak harga berapakah?
Jawab :
OK… sebelum kita jawab pertanyaan ini, perhatikan bahwa dalam function code() terdapat operator OR. Operand OR tidak harus berupa boolean TRUE atau FALSE namun juga bisa berupa integer. Operator OR untuk operand bilangan integer merupakan operasi OR secara bitwise (diproses bit demi bit, dengan 1 identik bernilai TRUE dan 0 bernilai FALSE) dari bilangan binernya.
Perhatikan contoh operasi OR berikut ini yang melibatkan bilangan integer.
Berapakah hasil 2 OR 1?
2 = 10 (biner)
1 = 01 (biner)
----------- OR
11 -> bilangan biner dari 3
Dengan demikian hasil dari 2 OR 1 adalah 3.
Berapakah hasil 3 OR 1?
3 = 11 (biner)
1 = 01 (biner)
----------- OR
11 -> bilangan biner dari 3
Berapakah 4 OR 5?
4 = 100 (biner)
5 = 101 (biner)
----------- OR
101 -> bilangan biner dari 5.
Nah akan kita akan selesaikan soal di atas menggunakan konsep tersebut. Terlebih dahulu operand code(-12, -12) pada operasi ‘code(-12, -12) AND code(20, 5)’ akan diselesaikan
code(-12, -12) -> x = -12, y = -12
--------- masuk function code() --------
c = 0
cek (-12 < -10) -> TRUE
-> c = c OR 8 = 0 OR 8 = 8

cek (-12 < -10) -> TRUE
-> c = c or 4 = 8 OR 4 = 12

code = c = 12
----------------------------------------
Sehingga diperoleh hasil dari code(-12, -12) adalah 12. Selanjutnya akan diproses untuk code(20, 5).
code(20, 5) -> x = 20, y = 5
---------- masuk function code() -------
c = 0
cek (20 < -10) -> FALSE
-> cek (20 > 10) -> TRUE
-> c = c OR 1 = 0 OR 1 = 1
cek (5 < -10) -> FALSE
-> cek (5 > 10) -> FALSE

code = c = 1
----------------------------------------
Sehingga diperoleh hasil dari code(20, 5) adalah 1.
Selanjutnya bagaimana dengan operasi ‘code(-12, -12) AND code(20, 5)’ atau dalam hal ini ‘12 AND 1′? Pada prinsipnya operasi AND pada bilangan integer sama dengan operasi OR, yaitu dilakukan operasi boolean AND secara bit per bit dari bilangan binernya. Dengan demikian proses 12 AND 1 adalah:
12 = 1100 (biner)
1 = 0001 (biner)
----------------- AND
0000 -> biner dari 0
Dari perhitungan di atas hasil dari perintah ‘writeln(code(-12, -12) and code(20, 5))’ akan mencetak 0.
Nah… berdasarkan contoh ini, Anda dapat mencoba untuk menebak output apa yang akan muncul jika diberikan perintah sebagai berikut:
a. writeln(code(-12, -12) OR code(20, 5))
b. writeln(code(12, -12) AND code(20, 5))
c. writeln(code(12, -12) OR code(20, 5))
d. writeln(code(7, -12) OR code(-20, 5))

Tidak ada komentar:

Posting Komentar