Anda di halaman 1dari 9

Untuk soal 1 – 2

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));
 
11. 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

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

3. Manakah yang salah dari deklarasi dibawah ini


  a. function info(a:byte):real;
  b. function info:byte;
  c. function info(a,b:byte) : real;
  d. function info(a: real; b:integer):real;
  e. function info(a:real);

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);

**function ABC (a, b : integer) : integer;


var
hasil : integer;
begin
if (a mod b = 0) then ABC := b
else ABC := ABC(a, b-1);
end;
Berapakah hasil ABC(12, 4)?

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.

** Procedure geser(i: integer);


begin
i := (((i shl 4) shr 6) shl 2);
writeln(i);
end;
Apakah output dari pemanggilan geser(9) di atas?

Pembahasan

i = 910 = 10012
i shl 4 = 100100002
(i shl 4)shr 6 = 102
((i shl 4)shr 6)shl 2 = 10002 = 810

Jadi output program diatas adalah 8


**procedure jalan(n: integer);
begin
if n > 0 then begin
jalan(n div 5);
write(n mod 5 + 1);
end;
end;

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)

Jadi, yang akan tercetak adalah 255

**untuk mampu dalam memecahakan masalah untuk soal mengetahui digit awal atau akhir,
tentunya kita harus terbiasa dengan sifat-sifat bilangan pangkat!

berikut beberapa sifat 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

Contoh soal sebagai berikut

Jumlah dua digit pertama dari bilangan hasil perkalian

5 30003 x 8 10004 Adalah…

Pembahasan

Untuk memecahkan soal seperti diatas mencari digit pertama, kita harus sederhanakan bentuk
pangkat tersebut agar menjadi bilangan tertentu di kaliakan 10 pangkat banyak.

lebih jelasnya mari kita sederhanakan :

5 30003 x 8 10004 =  5 30003 x (23) 10004


=
5 30003 x 23×10004
=
5 30003 x 230012
=
5 30003 x 230003 +9
=
5 30003 x 230003 x 29
=
(5 x 2)30003 x 29

= 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.

**potongan prgram dibawah untuk soal 1 -2

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);

1. Berapakah output dari program diatas?


a. 112
b. 110
c. 90
d. 72
e. 45

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.

22. output program diatas adalah?


a. 4
b. 6
c. 9
d. 123246369
e. 1
2
3
2
4
6
3
6
9

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

25. Manakah yang salah dari deklarasi dibawah ini


  a. function info(a:byte):real;
  b. function info:byte;
  c. function info(a,b:byte) : real;
  d. function info(a: real; b:integer):real;
  e. function info(a:real);

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); 

Anda mungkin juga menyukai