1) Diberikan penggalan program sebagai berikut. (note: program ini merupakan Pascallike pseudocode, secara sintaks belum tentu sama dengan Pascal). function f(n: int) begin if n=0 then f:=0 else f := n + f(n-1); end; Berapakah nilai f(5) ? (A) 125 (B) 0 (C) 5 (D) 15 (E) 25
Jawaban soal nomor 1 : Soal ini merupakan soal algoritma pemrograman mengenai function. Inti soal di atas adalah sebagai berikut : if n=0 then f:=0 ; secara awam artinya adalah bila nilai n = 0, maka nilai f = 0 else f:= n + f (n-1) ; yang berarti bila nilai n 0, maka nilai f = n + f (n-1) Berapa nilai f(5)? Perhitungan : f(5), dimana n = 5, maka f = 5 + f(4) = 5 + (4 + f(3)) = 5 + 4 + (3 + f(2)) = 5 + 4 + 3 + (2 + f(1)) = 5 + 4 + 3 + 2 + 1 + 0 = 15 Dengan demikian, jawaban yang benar adalah (D) 15 2) Jika M(x, y) adalah pernyataan x lebih besar dari y, dan terdapat deretan perintah dalam pseudo Pascal berikut: while M(x, y) do begin x := x - 10; y := y + 2; end; dengan harga mula-mula x = 70 dan y = 5, berapakah harga y setelah deretan keluar dari loop while? A. 11
B. 15 C. 17 D. 21 E. 25 Jawab: OK akan kita bahasa pertanyaan di atas. Perhatikan bahwa loop while memiliki syarat x lebih besar dari y. Sehingga selama syarat tersebut terpenuhi (syarat bernilai TRUE) maka looping akan terus dijalankan. Dan proses looping akan berhenti apabila syarat sudah tidak terpenuhi (bernilai FALSE) Perhatikan jalannya proses berikut ini: x = 70, y = 5 Cek (x > y) -> (70 > 5) -> TRUE x = x - 10 = 70 - 10 = 60 y=y+2=5+2=7 Cek (x > y) -> (60 > 7) -> TRUE x = x - 10 = 60 - 10 = 50 y=y+2=7+2=9 Cek (x > y) -> (50 > 9) -> TRUE x = x - 10 = 50 - 10 = 40 y = y + 2 = 9 + 2 = 11 Cek (x > y) -> (40 > 11) -> TRUE x = x - 10 = 40 - 10 = 30 y = y + 2 = 11 + 2 = 13 Cek (x > y) -> (30 > 13) -> TRUE x = x - 10 = 30 - 10 = 20 y = y + 2 = 13 + 2 = 15 Cek (x > y) -> (20 > 15) -> TRUE x = x - 10 = 20 - 10 = 10 y = y + 2 = 15 + 2 = 17 Cek (x > y) -> (10 > 17) -> FALSE STOP Setelah proses looping while selesai, nilai y terakhir adalah 17 (Jawaban yang benar C). Pertanyaan : 3) Untuk menukar isi dua variabel integer (keduanya bernama a dan b) tanpa bantuan variabel lain adalah A. a := b - a; b := b - a; a := b + a; B. b := b - a; a := b + a; a := b - a; C. a := b + a; a := b - a; b := b - a; D. a := b - a; b := b - a; a := b - a;
E. a := b + a; b := b + a; a := b + a; Jawab : Untuk menjawab pertanyaan di atas, kita akan cek terlebih dahulu semua alternatif jawaban. Kita coba untuk pemisalan awal nilai a = 5 dan b = 3. Kita akan mencari jawaban sedemikian hingga hasil akhir dari proses perhitungan menghasilkan a = 3 dan b = 5. Option A. a = b - a = 3 - 5 = -2 b = b - a = 3 - (-2) = 5 a = b + a = 5 + (-2) = 3 Jadi a = 3 dan b = 5 (BENAR) Option B. b = b - a = 3 - 5 = -2 a = b + a = -2 + 5 = 3 a = b - a = -2 - 3 = -5 Jadi a = -5 dan b = -2 (SALAH) Option C. a=b+a=3+5=8 a = b - a = 3 - 8 = -5 b = b - a = 3 - (-5) = 8 Jadi a = -5 dan b = 8 (SALAH) 4)Jika M(x, y) adalah pernyataan x lebih besar dari y, dan terdapat deretan perintah dalam pseudo Pascal berikut: while M(x, y) do begin x := x - 10; y := y + 2; end; dengan harga mula-mula x = 70 dan y = 5, berapakah harga y setelah deretan keluar dari loop while?
A. 11 B. 15 C. 17 D. 21 E. 25 Jawab: OK akan kita bahasa pertanyaan di atas. Perhatikan bahwa loop while memiliki syarat x lebih besar dari y. Sehingga selama syarat tersebut terpenuhi (syarat bernilai TRUE) maka looping akan terus dijalankan. Dan proses looping akan berhenti apabila syarat sudah tidak terpenuhi (bernilai FALSE) Perhatikan jalannya proses berikut ini: x = 70, y = 5 Cek (x > y) -> (70 > 5) -> TRUE x = x - 10 = 70 - 10 = 60 y = y + 2 = 5 + 2 = 7 Cek (x > y) -> (60 > 7) -> TRUE x = x - 10 = 60 - 10 = 50 y = y + 2 = 7 + 2 = 9 Cek (x > y) -> (50 > 9) -> TRUE x = x - 10 = 50 - 10 = 40 y = y + 2 = 9 + 2 = 11 Cek (x > y) -> (40 > 11) -> TRUE x = x - 10 = 40 - 10 = 30 y = y + 2 = 11 + 2 = 13 Cek (x > y) -> (30 > 13) -> TRUE x = x - 10 = 30 - 10 = 20 y = y + 2 = 13 + 2 = 15 Cek (x > y) -> (20 > 15) -> TRUE
x = x - 10 = 20 - 10 = 10 y = y + 2 = 15 + 2 = 17 Cek (x > y) -> (10 > 17) -> FALSE STOP Setelah proses looping while selesai, nilai y terakhir adalah 17 (Jawaban yang benar C).
5) Untuk menukar isi dua variabel integer (keduanya bernama a dan b) tanpa bantuan variabel lain adalah A. a := b a; b := b a; a := b + a; B. b := b a; a := b + a; a := b a; C. a := b + a; a := b a; b := b a; D. a := b a; b := b a; a := b a; E. a := b + a; b := b + a; a := b + a; Jawab : Untuk menjawab pertanyaan di atas, kita akan cek terlebih dahulu semua alternatif jawaban. Kita coba untuk pemisalan awal nilai a = 5 dan b = 3. Kita akan mencari jawaban sedemikian hingga hasil akhir dari proses perhitungan menghasilkan a = 3 dan b = 5. Option A. a = b a = 3 5 = -2 b = b a = 3 (-2) = 5 a = b + a = 5 + (-2) = 3 Jadi a = 3 dan b = 5 (BENAR) Option B. b = b a = 3 5 = -2 a = b + a = -2 + 5 = 3 a = b a = -2 3 = -5 Jadi a = -5 dan b = -2 (SALAH) Option C. a=b+a=3+5=8 a = b a = 3 8 = -5
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(2
33. Berapakah harga j setelah keluar dari iterasi for tersebut? a. 681 b. 600 c. -681 d. -702 e. -101 jawaban: C, Pembahasan sama persis seperti di atas