19. Perulangan Bersarang
Sebuah perulangan mengulang satu blok kode. Tapi bagaimana kalau blok itu sendiri berisi perulangan lain? Itulah perulangan bersarang: perulangan dalam akan berjalan penuh di setiap putaran perulangan luar. Pola ini berguna untuk membuat grid, tabel, dan apapun yang punya baris dan kolom.
Perulangan di dalam perulangan
Tempatkan satu for di dalam yang lain. Perulangan dalam
selesai lebih dulu sebelum perulangan luar bergerak maju:
for outer = 1, 3 do
for inner = 1, 2 do
print(outer, inner)
end
endKeluaran:
1 1
1 2
2 1
2 2
3 1
3 2
Ikuti urutannya. Selama outer bernilai 1,
perulangan dalam berjalan (1, 2). Lalu
outer menjadi 2 dan perulangan dalam berjalan
lagi. Totalnya 3 × 2 = 6 kali jalan.
Berikan nama yang berbeda untuk kedua variabel
perulangan. Kalau keduanya bernama i, perulangan dalam akan
menimpa penghitung perulangan luar. Pasangan
row/col atau i/j
adalah yang paling umum dipakai.
Membangun satu baris sekaligus
Satu nilai per baris jarang cocok untuk membuat grid. Trik yang biasa dipakai: perulangan luar menangani baris; perulangan dalam membangun satu string yang kemudian dicetak saat baris selesai:
for row = 1, 3 do
local line = ""
for col = 1, 3 do
line = line .. (row * col) .. "\t"
end
print(line)
endKeluaran (grid perkalian 3×3):
1 2 3
2 4 6
3 6 9
Perhatikan bahwa local line = "" berada di
dalam perulangan luar tapi di luar perulangan dalam. Nilai
ini direset setiap baris baru, terisi selama perulangan dalam berjalan,
lalu dicetak.
Buka exercises/19/01-grid.lua. Program ini mencetak grid
3×3. Ubah hanya dua rentangnya untuk menjadikannya 5×5.
Segitiga dengan rentang dalam yang berubah
Rentang perulangan dalam bisa bergantung pada variabel perulangan
luar. Jalankan dari 1 sampai row dan kamu akan
mendapat bentuk segitiga:
for row = 1, 4 do
local line = ""
for star = 1, row do
line = line .. "*"
end
print(line)
endKeluaran:
*
**
***
****
Baris 1 berjalan sekali; baris 4, empat kali. Bentuknya muncul sendiri dari matematikanya.
Berapa kali isi perulangan dijalankan?
Kalikan jumlahnya. Perulangan luar 10 putaran yang membungkus
perulangan dalam 10 putaran akan menjalankan isinya
10 × 10 = 100 kali. Jumlahnya tumbuh cepat: tiga perulangan
yang masing-masing 100 putaran berarti satu juta kali jalan. Sangat
kuat, jadi perhatikan angkanya.
PR
File PR ada di exercises/19/homework/.
Soal 1 — Persegi panjang dari tanda pagar
Buka exercises/19/homework/01-rectangle.lua. Dengan
perulangan bersarang, cetak persegi panjang dari # selebar
5 dan setinggi 3:
#####
#####
#####
Soal 2 — Pasangan koordinat
Buka exercises/19/homework/02-coords.lua. Cetak setiap
pasangan (x, y) untuk x dan y
dari 1 sampai 3, satu per baris: (1, 1),
(1, 2), dan seterusnya. Sembilan baris total.
Soal 3 — Tabel perkalian
Buka exercises/19/homework/03-times-table.lua. Cetak
grid perkalian lengkap dari 1×1 sampai 5×5:
lima baris yang masing-masing berisi lima angka dipisahkan tab.
Tantangan — Segitiga siku-siku
Buka exercises/19/homework/04-triangle.lua. Cetak
segitiga siku-siku dari * setinggi 6 baris, di mana baris
ke-n berisi n bintang. Untuk tantangan
tambahan, balikkan ke atas (6 bintang di baris pertama, 1 di baris
terakhir).
Mentok atau sudah selesai? Buka halaman solusi PR.