Soal Tertulis Pelatihan Riau I

advertisement
Soal Tertulis Pelatihan
OSN Riau
Waktu: 35 menit
Bagian I Pilihan Ganda
[Petunjuk: Berikan tanda silang pada salah satu jawaban yang anda anggap paling benar]
Beberapa bagian pertanyaan mengacu pada penggalan program berikut ini:
function test(A, B: array of integer, N:integer): integer
var i, tmp, s: integer;
begin
s:=0;
for i=1 to N do
begin
tmp:=A[i];
A[i]:= B[i];
B[i]:= tmp;
s:=s+A[i]+A[N+1-i];
end
test:=s;
end.
Asumsikan A dan B adalah sebuah array integer. Apabila A berisi [0,0,1,1,0,0,1,1,0,0] dan B
berisi [1,0,1,0,1,0,1,0,1,0] jawablah pertanyaan berikut ini dengan benar. SEMUA NILAI
ARRAY A DAN B PADA SOAL DI BAWAH MENGACU PADA NIALI DI ATAS.
1. Apakah output dari penggalan program ini?
s:=0;
for i := 1 to 10 do
begin
s: = s + test(A,B,10);
end
write(s);
A. 81
B. 90
C. 100
D. 121
E. 144
2. Perhatikan program berikut ini:
function tebak(Arr: array of integer, i: integer):integer;
var i: integer;
begin
if i < 11 then
if Arr[i] = 0 then begin
s:=test(A,A,10);
tebak := s+tebak (Arr, i+1);
end
else tebak := 1+ tebak(Arr, i+1);
else tebak := 0;
end;
Berapakah nilai x apabila fungsi di atas dipanggil dengan x := tebak(Arr, 1) dimana Arr =
[0,1,0,1,1,1,1,1,0,0]?
A. 32
B. 38
C. 42
D. 46
E. 50
3. Perhatikan program berikut ini:
function aneh(n: integer): integer;
var i, jml : integer;
begin
jml = 0;
for i := 1 to n do
jml := jml + test(A,B,10) + aneh(n-1);
aneh:=jml;
end
Berapakah nilai x apabila fungsi di atas dipanggil dengan x := aneh(3)?
A. 150
B. 140
C. 130
D. 120
E. 110
4. Perhatikan program berikut ini:
function hitung(Arr: array of integer, idx: integer):integer;
var i, jml: integer;
begin
jml := 0;
for i := 1 to idx do
jml := jml + Arr[i];
if idx > 0
hitung := min(jml, hitung(Arr, idx-1));
else hitung :=999;
end;
Berapakah nilai x apabila fungsi di atas dipanggil dengan x := hitung(Arr, 10) di mana array
Arr-nya berisi elemen [3, 1, 1,-3 , 2, -1, 3, -2, -1, 2]? Perhatikan bahwa fungsi min(x, y)
akan menghasilkan nilai minimum diantara x dan y.
A. 2
B. 3
C. 4
D. 5
E. 6
5. Perhatikan program berikut ini:
function sulap(Arr: array of integer, idx: integer):integer;
var i, m: integer;
begin
if idx < 11 then
begin
m := 0;
for i := 1 to Arr[idx]
m : = m + test(A,B,10);
sulap := m + sulap (Arr, idx+1);
end
else sulap : = 0;
end;
Berapakah nilai x apabila fungsi di atas dipanggil dengan x := sulap(Arr, 1) di mana array
Arr-nya berisi elemen [3, 1, 1, 0 , 2, 1, 3, 2, 1, 2]?
A. 128
B. 140
C. 144
D. 150
E. 160
6. Perhatikan program berikut ini:
function aneh(Arr: array of integer, idx:integer): integer;
begin
if idx < 11 then
begin
if Arr[idx]=0 then aneh:=test(A,A,10)+aneh(Arr,idx+1);
else aneh := test(A,B,10) + aneh(Arr, idx+1);
end
else aneh := 0;
end;
Berapakah nilai x apabila fungsi di atas dipanggil dengan x := aneh(Arr, 1) di mana array
Arr-nya berisi elemen [1, 0, 1, 0 , 0, 0, 1, 1, 1, 0]?
A. 80
B. 90
C. 100
D. 110
E. 120
7. Perhatikan program berikut ini:
function akhir(Arr: array of integer, idx, a, b:integer,): integer;
begin
if idx < 11 then
begin
if idx >= a and idx <= b then
akhir := Arr[idx] + test(A,B,10) + akhir(Arr, idx+1, a, b);
else akhir := akhir(Arr, idx+1, a, b);
end
else akhir := 0;
end;
Berapakah nilai x apabila fungsi di atas dipanggil dengan x := akhir(A, 1, 4, 6) di mana array
A-nya berisi elemen [1, 2, 4, 5 , 7, 8, 12, 14, 21, 40]?
A. 42
B. 43
C. 45
D. 50
E. 65
Bagian II Programming Tertulis
1. Diberikan dua buah segmen garis pada sebuah bidang. Setiap segmen gari stersebut paralel
terhadap sumbu-X atau sumbu-Y. Tugas anda adalah menentukan bagaimana segmen garis
tersebut berpotongan dan mengembalikan salah satu string berikut:
”TIDAK” jika kedua garis tidak berpotongan
”TITIK” jika perpotongan dari kedua garis membentuk sebuah titik
”GARIS” jika perpotongan kedua garis tersebut membentuk sebuah garis
Segmen garis tersebut diberikan dalam bentuk s1 dan s2, dimana s1 dan s2 terdiri dari 4 buah
titik x1, y1, x2, y2 yang menunjukkan titik-titik ujung dari segmen garis tersebut. Nilai
integer untuk keempat titik tersebut antara –1000 sd 1000.
Contoh:
Kasus 1
Input:
0001
1011
Output:
TIDAK
Kasus 2
Input
0 –1 0 1
-1 0 1 0
Output:
TITIK
Kasus 3
Input:
0020
1 0 10 0
Ouput:
GARIS
2. Buat sebuah program yang melakukan proses pengurutan sebuah data secara ascending
(terurut naik). Input program anda adalah 2 buah bilangan N dan Arr, dimana N
menunjukkan jumlah elemen dan Arr adalah elemen-elemen yang akan diurutkan.
Contoh:
Kasus 1
Input:
5
12345
Output:
12345
Kasus 2
Input:
5
54321
Output:
12345
Download