var x,y:integer; procedure abc(a:integer;var b:integer); var c:integer; begin if not((a=0)or(b=0)) then if (a>b) then begin a:=a mod b; abc(b,a); end else begin b:=b mod a; abc(a,b); end; write(a,' '); end; begin x:=219; y:=168; abc(x,y); end.
-
Apa keluaran yang dihasilkan dari program tersebut?
-
Jika perintah “write(a,’ ‘);” diubah menjadi “write(b,’ ‘);” maka keluaran yang dihasilkan menjadi?
-
Nilai a akan tercetak setelah pemanggilan fungsi dengan parameter yang berbeda, sehingga nilai yang tercetak adalah nilai a dari akhir sampai ke awal. Sehingga keluaran yang dihasilkan adalah 3 0 3 6 15 51.
-
Nilai b tidak diubah menjadi b mod a, sehingga nilai b akan tetap. Oleh karena itu jika perintah diubah untuk menulis write(b,’ ‘) akan tercetak 0 3 6 15 51 168 yang mana nilai b dari akhir sampai ke awal.
Pemanggilan:
abc(219,168) => abc(168,51) => abc(51,15) => abc(15,6) => abc(6,3) => abc(3,0).
Kebetulan nilai a selalu lebih besar dari b yang artinya nilai a akhir adalah a mod b, sehingga urutannya
nilai a menjadi 51, 15, 6, 3, 0. Karena ketika pemanggilan abc(3,0)
tidak melakukan pemanggilan lagi, maka nilai a tidak perlu diubah (tetap 3).