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
end

Keluaran:

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)
end

Keluaran (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)
end

Keluaran:

*
**
***
****

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.