Bimbingan Olimpiade Komputer : Pembahasan 3. OSK 2007

Soal 39. OSK 2007
4checks.com-Free Shipping and Handling on All Personal Checks with code DWF008

function apaitu(a:integer; b:integer):integer;
var count : integer;
begin

count :=count + 1;
writeln(count);
if (a > b) then
   apaitu := apaitu(b,a)
else if (a = 0) then
     apaitu :=b
else
    apaitu := apaitu(b mod a,a);
end;

begin
writeln(apaitu(1001,1331));
readln;
end.

Pembahasan :
Pemanggilan writeln(apaitu(1001,1331)) akan menghasilkan 11

A = 1001
B = 1331

if (a>b)  apaitu(a,b) if(a = 0)  apaitu := b apaitu(b mod a, a)
(1001>1331)tidak
                      if(1001=0)tidak     apaitu(1331 mod 1001,1001)
                                               apaitu(330,1001)

(1001>330)ya
            apaitu(330,1001)
(330>1001)tidak
                      if(330=0)tidak    apaitu(1001 mod 330,330)
                                             apaitu(11,330)

(330 > 11) ya
            apaitu(11,330)
(11 > 330) tidak
                      if(11=0) tidak    apaitu(330 mod 11,11)
                                            apaitu(0,11)

(11 > 0) ya
                apaitu(0,11)
(0 > 11) ya
                        if(0=0) yA ---> PROSES SELESAI	      
NILAI A = 11

Link Yang berhubungan :

Bimbingan Olimpiade Komputer : Pembahasan 2. OSK 2007

Soal 37 (OSK 2007)
4checks.com-Free Shipping and Handling on All Personal Checks with code DWF008

function apaini(a:integer; b: integer):integer;
var
x,y,r : integer;
begin
     x := a;
     y := b;
     while (y <> 0) do
     begin
          r := x mod y;
          x := y;
          y := r;
     end;
     apaini:=x;
end;

begin
writeln(apaini(414,662));
readln;
end.

Hasilnya adalah 2

Langkah-langkah penyelesaiannya :

while (y <> 0)         r = x mod y           x = y         y = r
        (662 <> 0)     r = 414 mod 662     x = 662      y = 414
                           r = 414
        (414 <> 0)     r = 662 mod 414     x = 414      y = 248
                           r = 248
        (248 <> 0)     r = 414 mod 248     x = 248      y = 166
                           r = 166
        ........
        ........
        (2 <> 0)        r = 81 mod 2          x = 2          y = 0
                           r = 0
        (0 <> 0)        Perulangan while berhenti...

Sehingga mendapatkan nilai x = 2

Link Yang berhubungan :

Bimbingan Olimpiade Komputer : Pembahasan 1. OSK 2007

Soal No. 32 (OSK 2007)
4checks.com-Free Shipping and Handling on All Personal Checks with code DWF008

const
xmin = -10;
xmax = 10;
ymin = -10;
ymax = 10;

function code(x:integer;y : integer):byte;
var c:byte;
begin
     c:=0;
     if (x < xmin) then          c:= c or 8
     else if (x > xmax) then   c:= c or 1;
     if (y < ymin) then          c:= c or 4
     else if (y > ymax) then   c:= c or 2;
     code :=c;
end ;

begin
writeln(code(-12,-12) or code(20,5));
readln;
end.

Jawaban:
Dari Soal diatas apabila progam dijalankan maka akan menghasilkan 0

Langkah-langkah penyelesaiannya :

Pemanggilan Code(-12,-12)
X = -12
Y = -12
C = 0
if (x < xmin) then  c = c or 8
Jika (-12 < -10) maka c = 0 or 8 = 8

if (y < ymin) then c := c or 4
Jika (-12 < -10)maka c := 8 or 4 = 12
Code = c;
Code = 12

Pemanggilan Code(20,5)
X = 20
Y = 5
C = 0
if (x < xmin) then c = c or 8
Jika (20 < -10) maka tidak terpenuhi
	Else if (x > xmax) then  c = c or 1
	Else Jika (20 > 10) maka c = 0 or 1 = 1
if (x < xmin) then …
Jika (5 < -10) maka tidak terpenuhi
	Else if (y > ymax) then …
Else jika (5 > 10) maka tidak terpenuhi
Karena tidak ada yang terpenuhi maka Code = c
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

Link Yang berhubungan :