Pembahasan :
Ini adalah contoh kasus fungsi dengan mempergunakan rekursi (fungsi yang mampu memangil
dirinya sendiri)
Nilai x awal adalah 5, nilai y awal adalah 3 maka
fak (5,3) —> 5 * fak (5, 3-1) = 5 * 25 = 125
fak (5,2) —> 5 * fak (5, 2-1) = 5 * 5 = 25
fak (5,1) —> 5 * fak (5,1-1) = 5 * 1 = 5
fak (5,0) (proses selesai karena y =0)
Jadi yang muncul adalah
125
12. Jika writeln (fak(5,3)) diganti menjadi writeln (fak(4,5)), hasil dimunculkan adalah…
a. 20
b. 9
c. 1024
d. 64
e. 5
Pembahasan:
Kasus ini sama seperti pada soal 1
Nilai x awal adalah 4, nilai y awal adalah 5 maka
fak (4,5) —> 4 * fak (4, 5-1) dengan mempergunakan hasil fak ( 4,4) –> 4 * 256 = 1024
fak (4,4) —> 4 * fak (4, 4-1) dengan mempergunakan hasil fak ( 4,3) –> 4 * 64 = 256
fak (4,3) —> 4 * fak (4,3-1) dengan mempergunakan hasil fak ( 4,2) –> 4 * 16 = 64
fak (4,2) —> 4 * fak (4,2-1) dengan mempergunakan hasil fak ( 4,1) –> 4 * 4 = 16
fak (4,1) —> 4 * fak (4,1-1) = 4 * 1 = 4
fak (4,0) (proses selesai karena y =0)
Jadi yang muncul adalah
1024
Pembahasan
Ingat bentuk dekelarasi dari suatu fungsi
FUNCTION nama_fungsi(daftar_fungsi):tipe;
- daftar parameter berisi sejumlah parameter
- tipe menyatakan tipe dari hasil fungsi
- Jika fungsi tidak memiliki parameter, tanda () tidak perlu disertakan.
jadi jawabannya adalah e.function info(a:real);
Pembahasan
Fungsi ABC mengembalikan nilai b jika a merupakan kelipatan b (a mod b = 0). Jika b bukan
faktor dari a, maka fungsi ini akan memanggil dirinya kembali dengan parameter ABC(a,b‐1).
Tampak bahwa fungsi ABC akan mengembaikan nilai faktor terbesar dari a yang kurang dari
atau sama dengan b. Maka hasil ABC(12,4) adalah 4.
Pembahasan
i = 910 = 10012
i shl 4 = 100100002
(i shl 4)shr 6 = 102
((i shl 4)shr 6)shl 2 = 10002 = 810
Pada pemanggilan jalan(49) pada procedure di atas ini apa yang akan dicetaknya kemudian?
Pembahasan
perhatian dengan baik program tersebut, jika nilai n tersebut lebih besar dari nol maka statmen
dibawahnya akan di jalankan. karena terdapat begin … end di bawahnya jadi 2 statmen di antara
begin .. end akan di jalankan.
begin
jalan(n div 5);
write(n mod 5 + 1);
end;
jalan(49) :
- jalan(9)
‐ jalan(1)
‐ jalan(0)
‐ write(2)
‐ write(5)
- write(5)
**untuk mampu dalam memecahakan masalah untuk soal mengetahui digit awal atau akhir,
tentunya kita harus terbiasa dengan sifat-sifat bilangan pangkat!
a p x a q = a p+q
(a x b)p = a p x b p
a p : a q = a p-q
a0 = 1
(a p) q = a pxq
a –p = 1 / a p
Pembahasan
Untuk memecahkan soal seperti diatas mencari digit pertama, kita harus sederhanakan bentuk
pangkat tersebut agar menjadi bilangan tertentu di kaliakan 10 pangkat banyak.
= 1030003 x 29
= 29 x 1030003
= 512 x 1030003
perlu di ingat berapapun 10 dipangkatkan dari 1 sampai n hasilnya nol ke n dibelakangnya jadi
jumlah dua digit pertama adalah 5 + 1 = 6.
c := 0
d := 0
while (a>b) do
begin
a := a – b;
c := c + 1;
d := d + b;
end;
write(c,’,',d);
18. jika nilai a = 15, b = 4 maka keluaran dari program diatas adalah..
a. 3 , 12
b. 1 , 4
c. 0 , 0
d. 6 , 23
e. 2 , 8
Pembahasan
nilai awal a = 15, b = 4, c = 0, d = 0
kondisi a > b
—–>> 15 > 4 (True), maka
a = 15 – 4
= 11
c=0+1
=1
d=0+4
=4
—–>> 11 > 4 (True), maka
a = 11 – 4
=7
c=1+1
=2
d=4+4
=8
—–>> 7 > 4 (True), maka
a=7–4
=3
c=2+1
=3
d=8+4
= 12
—–>> 3 > 4 (False), maka perulangan dihentikan.
Jadi nilai c = 3, d = 12
19. jika nilai a = 34, b = 11 maka keluaran dari program diatas adalah..
a. 3 , 12
b. 1 , 4
c. 0 , 0
d. 6 , 23
e. 2 , 8
Pembahasan
nilai awal a = 34, b = 11, c = 0, d = 0
kondisi a > b
—–>> 34 > 11 (True), maka
a = 34 – 11
= 23
c=0+1
=1
d = 0 + 11
= 11
—–>> 23 > 11 (True), maka
a = 23 – 11
= 12
c=1+1
=2
d = 11 + 11
= 22
—–>> 12 > 11 (True), maka
a = 12 – 11
=1
c=2+1
=3
d = 22 + 11
= 33
—–>> 1 > 11 (False), maka perulangan dihentikan.
Jadi nilai c = 3, d = 33
**untuk soal 1 -2
y := 10;
x := 0;
for i := 0 to y-1 do
begin
x:=x+ 2 * i;
end;
Writeln (x);
Pembahasan
Program diatas akan mengulang pernyataan x:=x +2*i sebanyak 10 kali dari i = 0 sampai 9.
0 = 0 + 2*0
2 = 0 + 2*1
6 = 2 + 2*2
12 = 6 + 2*3
20 = 12 + 2*4
30 = 20 + 2*5
42 = 30 + 2*6
56 = 42 + 2*7
72 = 56 + 2*8
90 = 76 + 2*9
jadi nilai x yang akan dimunculkan adalah 90.
2. jika baris kelima (x:=x+2*i) diganti dengan x:= x + i
Berapakah output program tersebut?
a. 112
b. 110
c. 90
d. 72
e. 45
Pembahasan
0=0+0
1=0+1
3=1+2
6=3+3
10 = 6 + 4
15 = 10 + 5
21 = 15 + 6
28 = 21 + 7
36 = 28 + 8
45 = 36 + 9
jadi output nya adalah 45.
untuk soal no 22
program x;
var
i,j,k,l : integer;
begin
for i:= 1 to 2 do
for j := 1 to 2 do
write (i*j);
end.
Pembahasana
i * j
1) —> 1 * 1 = 1
2*1=2
3*1=3
2) —> 1 * 2 = 2
2*2=4
3*2=6
3) —> 1 * 3 = 3
2*3=6
3*3=9
karena write jadi hasil yang akan dimunculkan berjejeer ke samping 123246369.
**Untuk soal 23 – 24
FUNCTION fak (x, y: integer) : Integer;
BEGIN
if y:= 0 then fak := 1
else
fak := x * fak (x, y-1);
END;
Writeln (fak(5, 3));
23. Apa hasil dari program di atas!
a. 125
b. 8
c. 81
d. 3
e. 15
Pembahasan :
Ini adalah contoh kasus fungsi dengan mempergunakan rekursi (fungsi yang mampu memangil
dirinya sendiri)
Nilai x awal adalah 5, nilai y awal adalah 3 maka
fak (5,3) —> 5 * fak (5, 3-1) = 5 * 25 = 125
fak (5,2) —> 5 * fak (5, 2-1) = 5 * 5 = 25
fak (5,1) —> 5 * fak (5,1-1) = 5 * 1 = 5
fak (5,0) (proses selesai karena y =0)
Jadi yang muncul adalah
125
24. Jika writeln (fak(5,3)) diganti menjadi writeln (fak(4,5)), hasil dimunculkan adalah…
a. 20
b. 9
c. 1024
d. 64
e. 5
Pembahasan:
Kasus ini sama seperti pada soal 1
Nilai x awal adalah 4, nilai y awal adalah 5 maka
fak (4,5) —> 4 * fak (4, 5-1) dengan mempergunakan hasil fak ( 4,4) –> 4 * 256 = 1024
fak (4,4) —> 4 * fak (4, 4-1) dengan mempergunakan hasil fak ( 4,3) –> 4 * 64 = 256
fak (4,3) —> 4 * fak (4,3-1) dengan mempergunakan hasil fak ( 4,2) –> 4 * 16 = 64
fak (4,2) —> 4 * fak (4,2-1) dengan mempergunakan hasil fak ( 4,1) –> 4 * 4 = 16
fak (4,1) —> 4 * fak (4,1-1) = 4 * 1 = 4
fak (4,0) (proses selesai karena y =0)
Jadi yang muncul adalah
1024
Pembahasan
Ingat bentuk dekelarasi dari suatu fungsi
FUNCTION nama_fungsi(daftar_fungsi):tipe;
- daftar parameter berisi sejumlah parameter
- tipe menyatakan tipe dari hasil fungsi
- Jika fungsi tidak memiliki parameter, tanda () tidak perlu disertakan.
jadi jawabannya adalah e.function info(a:real);