Sebelum mulai, coba tebak. Program ini mencetak berapa baris, dan apa baris keempatnya?
UNTUK baris ← 1 SAMPAI 2
UNTUK kursi ← 1 SAMPAI 3
TULIS "Baris", baris, "kursi", kursi
AKHIR UNTUK
AKHIR UNTUK
Ada UNTUK di dalam UNTUK. Yang luar jalan 2 kali, yang dalam 3 kali. Jawabannya di bawah.
Yang dalam habis dulu, baru yang luar maju
Baris 1 kursi 1
Baris 1 kursi 2
Baris 1 kursi 3
Baris 2 kursi 1
Baris 2 kursi 2
Baris 2 kursi 3
Enam baris, dan yang keempat Baris 2 kursi 1. Waktu baris masih 1, perulangan dalam jalan sampai habis: kursi 1, 2, 3. Baru setelah itu baris naik jadi 2, dan perulangan dalam mulai lagi dari kursi 1. Jumlah putaran yang dalam: 2 kali 3, jadi 6.
Persis kayak membaca denah kursi: habiskan satu baris dari kiri ke kanan, baru turun ke baris berikutnya.
Satu baris denah, dirakit dulu
Pak RT minta denah kursi nobar di balai warga: tiga baris, tiap baris empat kursi, O untuk kursi kosong. Masalahnya, tiap TULIS selalu mencetak satu baris sendiri. Empat kali TULIS "O" jadi empat baris, bukan OOOO. Jadi barisnya dirakit dulu jadi satu teks, baru ditulis:
deret ← ""
UNTUK kursi ← 1 SAMPAI 4
deret ← deret + "O"
AKHIR UNTUK
TULIS deret
OOOO
"" itu teks kosong, belum ada hurufnya. Tiap putaran, deret + "O" menyambung satu O di ujungnya: O, OO, OOO, OOOO. TULIS-nya di luar perulangan, jadi tercetak sekali, setelah barisnya lengkap.
Denah lengkap
UNTUK baris ← 1 SAMPAI 3
deret ← ""
UNTUK kursi ← 1 SAMPAI 4
deret ← deret + "O"
AKHIR UNTUK
TULIS deret
AKHIR UNTUK
OOOO
OOOO
OOOO
Perhatikan tiga tempatnya:
deret ← ""ada di dalam perulangan luar, sebelum yang dalam. Tiap baris mulai dari teks kosong.deret ← deret + "O"ada di dalam perulangan dalam. Dia jalan sekali per kursi, 12 kali semuanya.TULIS deretada di dalam perulangan luar, sesudah yang dalam. Dia jalan sekali per baris, setelah barisnya lengkap.
Kursi yang sudah dipesan bisa ditandai X dengan JIKA di dalam perulangan dalam. Di sini kursi 3 di baris 2 sudah dipesan:
UNTUK baris ← 1 SAMPAI 3
deret ← ""
UNTUK kursi ← 1 SAMPAI 4
JIKA baris = 2 DAN kursi = 3 MAKA
deret ← deret + "X"
SELAIN ITU
deret ← deret + "O"
AKHIR JIKA
AKHIR UNTUK
TULIS deret
AKHIR UNTUK
OOOO
OOXO
OOOO
Batas dalam yang ikut nomor baris
Batas perulangan dalam boleh memakai variabel perulangan luar. Di sini, makin ke bawah barisnya makin pendek:
UNTUK baris ← 1 SAMPAI 4
deret ← ""
UNTUK kursi ← 1 SAMPAI 5 - baris
deret ← deret + "O"
AKHIR UNTUK
TULIS deret
AKHIR UNTUK
OOOO
OOO
OO
O
Di baris 1, 5 - baris itu 4, jadi perulangan dalamnya jalan 4 kali. Di baris 4, tinggal 1. Bentuk segitiga selalu begitu: banyaknya putaran yang dalam bergantung pada nomor barisnya.
⚠️ Denah yang melebar, numpuk, atau kepotong
deret ← ""di luar dua perulangan. Gak ada error, tapideretgak pernah dikosongkan lagi, jadi tiap baris menyambung baris sebelumnya:OOOO,OOOOOOOO,OOOOOOOOOOOO.TULIS deretdi dalam perulangan dalam. Barisnya tercetak tiap kali satu kursi ditambah:O,OO,OOO,OOOO, lalu mulai lagi untuk baris berikutnya. Denah tiga baris jadi 12 baris.- Nama yang sama untuk dua perulangan. Kalau dua-duanya
UNTUK i, perulangan dalam ikut mengubahimilik yang luar. Denah tiga baris tadi cuma tercetak satu baris, tanpa error. Pakai dua nama yang beda, misalnyabarisdankursi. - Angka disambung ke teks.
deret ← deret + kursiberhenti dengan "Baris 4: teks gak bisa langsung ditambah angka." Untuk merakit teks, ubah angkanya jadi teks dulu:deret + TEKS(kursi). AKHIR UNTUKkurang satu. DuaUNTUKbutuh duaAKHIR UNTUK. Kalau yang dalam lupa ditutup, komputer berhenti dengan "Baris 1: UNTUK ini belum ditutup." lalu memberi tahu tempatnya: "Tambahkan AKHIR UNTUK setelah baris 5."
TL;DR: Perulangan di dalam perulangan menjalankan yang dalam sampai habis untuk tiap putaran yang luar, jadi totalnya luar kali dalam: 3 baris kali 4 kursi, 12 putaran. Untuk mencetak satu baris berisi banyak tanda, rakit dulu jadi teks (deret ← "", lalu deret ← deret + "O"), baru TULIS sekali per baris. Kosongkan teksnya di awal tiap baris. Batas perulangan dalam boleh memakai variabel yang luar, dan dari situ muncul bentuk segitiga. Pakai dua nama yang beda untuk dua perulangan.