Pertanyaan
iketahui potongan program sebagai berikut: ef lagi (a: integer;b: integer) t=(a+b) div 2; if (a<=b)then write () lagi (a, t-1); endif; enddef; Dengan pemanggilan:lagi(1,10), apa hasilnya? Catatan: "div" digunakan sebagai pembagian bilangan bulat. Contoh:10 div 3=3,10 div 4=2,10 div 5=2 Select one: a. b. C. )d. ) e.xx
Solusi
Jawaban
C.
Penjelasan
Berdasarkan potongan program yang diberikan, kita dapat menganalisis sebagai berikut:1. Fungsi `lagi` menerima dua parameter integer, yaitu `a` dan `b`.2. Variabel `t` diinisialisasi dengan hasil dari penjumlahan `a` dan `b` yang kemudian dibagi 2.3. Jika `a` kurang dari atau sama dengan `b`, maka fungsi `write` akan dipanggil dengan nilai `a`.4. Fungsi `lagi` akan dipanggil kembali dengan `a` sebagai parameter pertama dan `t-1` sebagai parameter kedua.5. Proses ini akan berlanjut sampai `a` lebih besar dari `b`.Dengan pemanggilan `lagi(1,10)`, kita dapat menghitung sebagai berikut:- Pada pemanggilan pertama, `t` = (1 + 10) div 2 = 5.5. Karena 1 kurang dari 10, maka `write(1)` akan dipanggil dan fungsi `lagi` akan dipanggil kembali dengan `a` = 1 dan `t` = 4.5.- Pada pemanggilan kedua, `t` = (1 + 4.5) div 2 = 2.75. Karena 1 kurang dari 4.5, maka `write(1)` akan dipanggil dan fungsi `lagi` akan dipanggil kembali dengan `a` = 1 dan `t` = 1.75.- Pada pemanggilan ketiga, `t` = (1 + 1.75) div 2 = 1.375. Karena 1 kurang dari 1.75, maka `write(1)` akan dipanggil dan fungsi `lagi` akan dipanggil kembali dengan `a` = 1 dan `t` = 0.625.- Pada pemanggilan keempat, `t` = (1 + 0.625) div 2 = 0.8125. Karena 1 kurang dari 0.625, maka `write(1)` akan dipanggil dan fungsi `lagi` akan dipanggil kembali dengan `a` = 1 dan `t` = 0.125.- Pada pemanggilan kelima, `t` = (1 + 0.125) div 2 = 0.5625. Karena 1 kurang dari 0.125, maka `write(1)` akan dipanggil dan fungsi `lagi` akan dipanggil kembali dengan `a` = 1 dan `t` = 0.- Pada pemanggilan keenam, `t` = (1 + 0) div 2 = 0.5. Karena 1 kurang dari 0, maka `write(1)` akan dipanggil dan fungsi `lagi` akan dipanggil kembali dengan `a` = 1 dan `t` = -0.5.- Pada pemanggilan ketujuh, `t` = (1 + -0.5) div 2 = 0.25. Karena 1 kurang dari -0.5, maka `write(1)` akan dipanggil dan fungsi `lagi` akan dipanggil kembali dengan `a` = 1 dan `t` = -0.75.- Pada pemanggilan kedelapan, `t` = (1 + -0.75) div 2 = 0.125. Karena 1 kurang