Buku Panduan Olimpiade Sains Bidang Komputer
Kisi-Kisi dan Materi Uji Olimpiade Sains
BIDANG INFORMATIKA/KOMPUTER
Disertai Contoh-contoh dan Pembahasan
Diberikan fungsi berikut
function apaitu(a: integer; b: integer): integer;
begin
count := count + 1;
if (a > b) then apaitu := apaitu(b, a)
else if (a = 0) then apaitu := b
else apaitu := apaitu (b mod a, a)
end;
Pertanyaan: Jika fungsi tsb dipanggil dengan “
writeln(apaitu(1001, 1331));” berapakah
yang dicetaknya?
Pembahasan:
Fungsi tersebut adalah fungsi rekursif dengan nama apaitu. Itu
ditandai adanya pemanggilan fungsi bernama sama dengan dirinya. Di dalam
fungsi ada struktur bersarang (nested structure) if-then-else membentuk 3
pencabangan.
-
Cabang pertama, jika harga dalam variabel a lebih besar dari b, algoritma
akan melakukan pemanggilan rekursif dengan penukaran posisi variabel a
menjadi b dan b menjadi a.
-
Cabang kedua, jika a berharga 0 maka akan dikembalikan harga b.
-
Cabang ketiga, tentu untuk a lebih kecil dari b, akan memanggil secara
rekursif dengan posisi harga a diberi harga (b mod a) dan posisi harga b
diberi harga a.
Untuk semua cabang, tidak ada operasi lain sehingga hasilnya langsung
dikembalikan ke pemanggil sebelumnya. Operasi pada variabel count tidak
berarti apa-apa berkenaan dengan pertanyaan ini.
Pemanggilan
apaitu(1001, 1331) akan membawa ke cabang ketiga lalu
memanggi
apaitu(330, 1001). Kemudian akan membawa ke cabang ketiga lagi
lalu memanggil
apaitu(11, 330). Kembali lagi ke cabang ketiga dan memanggil
apaitu(0, 11)
. Pemanggilan terakhir ini akan memberikan harga variabel b
menjadi harga yang dikembalikan dari fungsi tersebut, kemudian diteruskan
ke pemanggilan sebelumnya, hingga ke pemanggilan pertama. Jadi
jawabannya 11.
Catatan: Jika anda dapat memahami algoritma-algoritma pada kedua contoh
di atas dengan baik, maka contoh ini dan contoh di atas menghasilkan harga
fungsi yang tepat sama.
ini hanya separuh soal dan kisi lainya bisa di download di sini
0 comments
boleh komen ,asal pakai hati ya...dan blog ini sudah dofollow
note:blog ini tidak membatasi orang yang berkomentar dengan nama Anonymous, seperti blog yang lain,jadi silahkan berkomentar sesuka hati ..!