18. Perulangan — Solusi PR
File solusi .lua ada di
exercises/18/homework/solutions/.
Soal 1 — Hitung sampai 20
Soal. Cetak angka 1 sampai 20 menggunakan perulangan
while.
Cara berpikir. Perulangan while butuh
nilai awal, kondisi berhenti, dan pembaruan. Mulai dari 1, berhenti
setelah 20, tambah 1 di setiap putaran.
Solusi.
local i = 1
while i <= 20 do
print(i)
i = i + 1
endKesalahan umum.
- Lupa menulis
i = i + 1. Kondisinya akan selalu benar, sehingga perulangan tidak pernah berhenti. - Menggunakan
i < 20, sehingga angka 20 tidak ikut tercetak.<=menyertakan batas akhirnya.
Soal 2 — Tabel perkalian 7
Soal. Cetak 7 * i = hasil untuk
i dari 1 sampai 12.
Cara berpikir. Ini cocok untuk for
numerik klasik. Setiap putaran mencetak satu baris dari i
dan 7 * i.
Solusi.
for i = 1, 12 do
print("7 * " .. i .. " = " .. (7 * i))
endTanda kurung di sekitar 7 * i tidak wajib (perkalian
lebih kuat ikatannya daripada ..) tapi membantu memperjelas
maksud.
Kesalahan umum.
- Menulis
for i = 1, 12, 1 do. Argumen langkah sudah default ke1, jadi ini cuma menambah kebisingan. Hapus saja. - Bingung antara
7 * i(yang dicetak) dengani(penghitungnya).
Soal 3 — Berhenti di ambang batas
Soal. Tambahkan 1, 2, 3, ... ke sebuah total. Berhenti begitu totalnya melebihi 100. Cetak nilai penghitung dan totalnya.
Cara berpikir. Dua variabel: penghitung yang
bertambah 1 setiap putaran, dan total yang bertambah sebesar nilai
penghitung. Kondisi keluar, total > 100, diletakkan di
dalam sebagai if ... break, yang cocok dipakai bersama
while true do.
Solusi.
local i = 1
local total = 0
while true do
total = total + i
if total > 100 then
break
end
i = i + 1
end
print("Stopped at i = " .. i .. " with total = " .. total)Untuk i = 1..14, jumlah 1+2+...+14 = 105
adalah total pertama yang melewati 100:
Stopped at i = 14 with total = 105
Kesalahan umum.
- Menambah
i = i + 1sebelum menambah ketotal. Itu artinya yang ditambahkan adalahiberikutnya, bukan yang sekarang. Urutkan dengan sengaja. - Meletakkan
breaksetelahi = i + 1. Makaiyang tercetak akan satu angka lebih dari nilai yang sebenarnya mendorong total melewati 100. Keduanya bisa berjalan; pastikan kamu melakukannya dengan sadar.
Tantangan — Jumlahkan 1..N
Soal. Baca n, jumlahkan 1..n dengan
perulangan for, lalu bandingkan dengan rumus tertutup
n * (n + 1) / 2.
Cara berpikir. Perulangan for dari 1
sampai n menambahkan setiap penghitung ke total. Rumus
tertutup untuk n bilangan bulat positif pertama adalah
n * (n + 1) / 2, trik Gauss. Cetak keduanya, pastikan
hasilnya sama.
Solusi.
io.write("Enter a positive whole number n: ")
local n = tonumber(io.read())
local total = 0
for i = 1, n do
total = total + i
end
print("Sum from 1 to " .. n .. " is " .. total)
print("Formula gives " .. (n * (n + 1) / 2))Operator / menghasilkan bilangan desimal, jadi baris
kedua akan menampilkan .0 di akhir. Itu memang sudah
benar.
Kesalahan umum.
- Lupa menyetel
totalke0sebelum perulangan. Kalau dimulai darinilmaka hasilnyanil + 1, yang akan menyebabkan error. - Menulis rumusnya sebagai
n * n + 1 / 2. Urutan operasi penting: tanda kurung di sekitar(n + 1)diperlukan.
Selesai?
Sekarang kamu sudah bisa mengulang pekerjaan dengan semua jenis perulangan. Selanjutnya, Perulangan bersarang menumpuk perulangan untuk membangun grid, dan Pola perulangan menamai tugas-tugas yang paling sering dikerjakan oleh perulangan. Lalu mini-proyek Bagian 4 — sebuah Permainan Tebak Angka dan Batu-Gunting-Kertas — menggabungkan keputusan dan pengulangan.