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