Anda di halaman 1dari 4

Posted on May 10, 2011 by ahmadrizal

01 function apaitu(a:integer; b:integer):integer;


02 var count : integer;
03 begin
04
05 count :=count + 1;
06 writeln(count);
07 if (a > b) then
08
apaitu := apaitu(b,a)
09 else if (a = 0) then
10

apaitu :=b

11 else
12
apaitu := apaitu(b mod a,a);
13 end;
14
15 begin
16 writeln(apaitu(1001,1331));
17 readln;
18 end.

Pembahasan :
Pemanggilan writeln(apaitu(1001,1331)) akan menghasilkan 11
01 A = 1001
02 B = 1331
03
04 if (a>b)

apaitu(a,b) if(a = 0)

apaitu := b apaitu(b mod a, a)

05 (1001>1331)tidak
06

if(1001=0)tidak

07

apaitu(1331 mod 1001,1001)


apaitu(330,1001)

08
09 (1001>330)ya
10
apaitu(330,1001)
11 (330>1001)tidak
12

if(330=0)tidak

13

apaitu(1001 mod 330,330)


apaitu(11,330)

14
15 (330 > 11) ya
16
apaitu(11,330)
17 (11 > 330) tidak
18

if(11=0) tidak

19

apaitu(330 mod 11,11)


apaitu(0,11)

20
21 (11 > 0) ya
22

apaitu(0,11)

23 (0 > 11) ya
24
25 NILAI A = 11

if(0=0) yA ---> PROSES SELESAI

Posted on May 9, 2011 by ahmadrizal


Soal 37 (OSK 2007)

01 function apaini(a:integer; b: integer):integer;


02 var
03 x,y,r : integer;
04 begin
05
06

x := a;
y := b;

07
08

while (y <> 0) do
begin

09
10

r := x mod y;
x := y;

11
12

y := r;
end;

13
apaini:=x;
14 end;
15
16 begin
17 writeln(apaini(414,662));
18 readln;
19 end.

Hasilnya adalah 2
Langkah-langkah penyelesaiannya :
01 while (y <> 0)
02
(662 <> 0)
03
04
05
06

r = x mod y
r = 414 mod 662

x = y
x = 662

y = r
y = 414

(414 <> 0)

r = 414
r = 662 mod 414

x = 414

y = 248

(248 <> 0)

r = 248
r = 414 mod 248

x = 248

y = 166

07
08

........

09
10

........
(2 <> 0)

r = 81 mod 2

(0 <> 0)

r = 0
Perulangan while berhenti...

11
12

r = 166

13
14 Sehingga mendapatkan nilai x = 2

x = 2

y = 0

Posted on May 9, 2011 by ahmadrizal


Soal No. 32 (OSK 2007)

01 const
02 xmin = -10;
xmax =
10;
04 ymin = -10;
03

05 ymax = 10;
06
07 function code(x:integer;y : integer):byte;
08 var c:byte;
09 begin
10
c:=0;
11
12

if (x < xmin) then


c:= c or 8
else if (x > xmax) then c:= c or 1;

13
14

if (y < ymin) then


c:= c or 4
else if (y > ymax) then c:= c or 2;

15
code :=c;
16 end ;
17
18 begin
19 writeln(code(-12,-12) or code(20,5));
20 readln;
21 end.
Jawaban:
Dari Soal diatas apabila progam dijalankan maka akan menghasilkan 0
Langkah-langkah penyelesaiannya :
01 Pemanggilan Code(-12,-12)
02 X = -12
03 Y = -12
04 C = 0
05 if (x < xmin) then c = c or 8
06 Jika (-12 < -10) maka c = 0 or 8 = 8
07
08 if (y < ymin) then c := c or 4

09 Jika (-12 < -10)maka c := 8 or 4 = 12


10 Code = c;
11 Code = 12
12
13 Pemanggilan Code(20,5)
14 X = 20
15 Y = 5
16 C = 0
17 if (x < xmin) then c = c or 8
18 Jika (20 < -10) maka tidak terpenuhi
19
20

Else if (x > xmax) then c = c or 1


Else Jika (20 > 10) maka c = 0 or 1 = 1

21 if (x < xmin) then


22 Jika (5 < -10) maka tidak terpenuhi
23 Else if (y > ymax) then
24 Else jika (5 > 10) maka tidak terpenuhi
25 Karena tidak ada yang terpenuhi maka Code = c
26 Code = 0
Dari proses di atas :
Pemanggilan code(-12,-12) menghasilkan 12
Pemanggilan code(20,5) menghasilkan 1
Sehingga (code(-12,-12) and code (20,5)) = 12 and 1 = 0

Anda mungkin juga menyukai