Perulangan dalam Perulangan — Pseudocode

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"…

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:

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

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.

Yang akan kamu pelajari