19. Perulangan bersarang — Solusi PR

File-file solusi .lua ada di exercises/19/homework/solutions/.

Soal 1 — Persegi panjang dari tanda pagar

Soal. Blok # selebar 5 dan setinggi 3.

Cara berpikirnya. Perulangan luar = baris (3). Perulangan dalam = kolom (5): bangun satu baris berisi lima #, lalu cetak.

Solusi.

for row = 1, 3 do
    local line = ""
    for col = 1, 5 do
        line = line .. "#"
    end
    print(line)
end

Soal 2 — Pasangan koordinat

Soal. Cetak setiap (x, y) untuk x dan y dari 1 sampai 3.

Solusi.

for x = 1, 3 do
    for y = 1, 3 do
        print("(" .. x .. ", " .. y .. ")")
    end
end

Keluaran: (1, 1), (1, 2), (1, 3), (2, 1), ... — sembilan baris.

Kesalahan umum.

  • Memakai x untuk kedua perulangan. Setiap perulangan butuh variabelnya sendiri.

Soal 3 — Tabel perkalian

Soal. Grid perkalian 5×5.

Solusi.

for row = 1, 5 do
    local line = ""
    for col = 1, 5 do
        line = line .. (row * col) .. "\t"
    end
    print(line)
end

Keluaran:

1   2   3   4   5
2   4   6   8   10
3   6   9   12  15
4   8   12  16  20
5   10  15  20  25

Tantangan — Segitiga siku-siku

Soal. Segitiga 6 baris di mana baris ke-n punya n bintang, lalu dibalik.

Solusi.

-- growing
for row = 1, 6 do
    local line = ""
    for star = 1, row do
        line = line .. "*"
    end
    print(line)
end

-- shrinking
for row = 6, 1, -1 do
    local line = ""
    for star = 1, row do
        line = line .. "*"
    end
    print(line)
end

Keduanya hanya berbeda di arah perulangan luar: 1, 6 naik, 6, 1, -1 turun. Perulangan dalam identik.

Kesalahan umum.

  • Memakai rentang dalam 1, 6 (tetap) alih-alih 1, row. Rentang dalam yang tetap menghasilkan persegi panjang; segitiga terbentuk karena jumlah dalam dikaitkan dengan baris saat ini.

Selesai?

Kamu sudah bisa membuat grid dan bentuk dari perulangan di dalam perulangan. Bab terakhir Bagian 4 — Pola perulangan — menamai tugas-tugas yang paling sering dikerjakan perulangan: menjumlahkan, menghitung, mencari, dan menandai.