OSP 2013

Perhatikan program di bawah ini, untuk soal no 44 dan 45:
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.
  1. Apa keluaran yang dihasilkan dari program tersebut?

  2. Jika perintah “write(a,’ ‘);” diubah menjadi “write(b,’ ‘);” maka keluaran yang dihasilkan menjadi?


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

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

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

Share Now:

5 2 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments

Langganan

Subscribe To Our Newsletter

0
Would love your thoughts, please comment.x
()
x

Follow TikTok Kami @cahinfor

Pembahasan soal tahun 2023 sudah tersedia di TikTok Kami loh!