20. Pola perulangan — Solusi PR

File solusi .lua ada di exercises/20/homework/solutions/.

Soal 1 — Faktorial

Soal. Kalikan bilangan 1 sampai 5 secara berurutan.

Cara mikirnya. Akumulasi, tapi pakai * bukan +. Mulai nilai produk dari 1 — kalau mulai dari 0, hasilnya pasti 0, karena apapun dikali nol hasilnya nol.

Solusi.

local product = 1
for i = 1, 5 do
    product = product * i
end
print(product)     -- 120

Soal 2 — Hitung kelipatan

Soal. Hitung bilangan dari 1 sampai 50 yang habis dibagi 7.

Solusi.

local hits = 0
for i = 1, 50 do
    if i % 7 == 0 then
        hits = hits + 1
    end
end
print(hits)        -- 7   (7, 14, 21, 28, 35, 42, 49)

Soal 3 — Kuadrat pertama yang besar

Soal. Temukan bilangan pertama yang kuadratnya lebih dari 200.

Solusi.

local first
for i = 1, 100 do
    if i * i > 200 then
        first = i
        break
    end
end
print(first)       -- 15   (14×14 = 196, 15×15 = 225)

Kesalahan umum.

  • Lupa menulis break, sehingga perulangan terus berjalan dan first malah berisi hasil terakhir yang cocok, bukan yang pertama.

Tantangan — Statistik rentang dalam satu kali jalan

Soal. Total, jumlah bilangan genap, dan tanda habis-dibagi-9 dari satu perulangan.

Solusi.

local total = 0
local evens = 0
local has_nine = false

for i = 1, 20 do
    total = total + i
    if i % 2 == 0 then evens = evens + 1 end
    if i % 9 == 0 then has_nine = true end
end

print("total", total)        -- 210
print("evens", evens)        -- 10
print("divisible by 9", has_nine)  -- true   (9 and 18)

Kesalahan umum.

  • Menulis tiga perulangan terpisah untuk rentang yang sama. Satu kali jalan sudah cukup untuk ketiga tugas sekaligus — makanya kamu perlu belajar mengenali pola-pola ini.

Selesai?

Begitulah akhir dari Bagian 4. Sekarang kamu sudah bisa bercabang dengan if, bernalar tentang nilai kebenaran menggunakan and/or/not, mengulang dengan berbagai jenis perulangan, menyarangkan perulangan untuk grid, dan memilih pola perulangan yang tepat sekilas pandang. Bagian 4 punya dua mini-proyek untuk merangkum semuanya: Number Guessing Game dan Rock-Paper-Scissors.