採点されません。匿名です。 間違えることは学習の一部です。読むだけでもかまいません。

入れ子ループ

テクノロジ系 / loop (for / while / break / continue)

入れ子ループ

Lesson 3 / Chapter 5

ループの中にループを書ける

<?php
for ($i = 1; $i <= 3; $i++) {
    for ($j = 1; $j <= 3; $j++) {
        echo "$i-$j ";
    }
    echo "\n";
}

実行結果:

1-1 1-2 1-3
2-1 2-2 2-3
3-1 3-2 3-3

動きを 1 ステップずつ追う

for ($i = 1; $i <= 3; $i++) {        // 外側
    for ($j = 1; $j <= 3; $j++) {    // 内側
        echo "$i-$j ";
    }
    echo "\n";
}
  • 外側 $i = 1 の間に、内側 $j が 1→2→3 と全部回る
  • 内側が終わったら外側が $i = 2 に進む
  • 内側がまた 1→2→3 と回る
  • これを $i = 3 まで繰り返す

→ 内側ループは 外側 1 回ごとに最後まで 回る。

行 × 列の表を作る

<?php
for ($i = 1; $i <= 9; $i++) {
    for ($j = 1; $j <= 9; $j++) {
        echo $i * $j . " ";
    }
    echo "\n";
}
  • 外側 = 行
  • 内側 = 列
  • 内側ループの後ろに echo "\n"; を入れて改行

九九表のような格子状の出力は入れ子ループの定番。

図形を描く: 星のピラミッド

<?php
$n = 4;
for ($i = 1; $i <= $n; $i++) {
    for ($j = 1; $j <= $i; $j++) {
        echo "*";
    }
    echo "\n";
}

実行結果:

*
**
***
****
  • 外側 $i が「行数」を決める
  • 内側 $j$i 回まで回るので、星の数が行ごとに増える

内側の条件は外側の変数を使ってよい

ピラミッドの例で見た通り:

for ($i = 1; $i <= $n; $i++) {
    for ($j = 1; $j <= $i; $j++) {  // ← 外側の $i を使っている
        echo "*";
    }
    echo "\n";
}
  • 外側の $i は内側からも見える
  • 内側の回数を外側の値で変えられる

このチャプターでできるようになること

✅ ループの中にループを書ける

✅ 内側ループが外側 1 回ごとに最後まで回ると分かる

✅ 行 × 列の表を出力できる

✅ 外側の変数を内側の条件に使える

→ ドリルへ

考えてみよう

既定では正解・不正解の判定はしません。自分のペースで「答えを見る」を。採点してほしい場合だけ「採点してほしい」を押してください。

ドリル 01 — 九九表 (1×1 〜 9×9)

問題

入れ子ループを使って、1 x 1 = 1 から 9 x 9 = 81 までの九九を 1 行ずつ全て (81 行) 出力してください。

出力の形は A x B = C (空白区切り)。

期待される出力 (先頭抜粋):

1 x 1 = 1
1 x 2 = 2
...
1 x 9 = 9
2 x 1 = 2
2 x 2 = 4
...
9 x 9 = 81

採点

php scripts/grade.php topics/loop/ch05-nested/drill/01-multiplication-table/

ヒント

  • 外側 for ($i = 1; $i <= 9; $i++)
  • 内側 for ($j = 1; $j <= 9; $j++)
  • 内側で echo "$i x $j = " . ($i * $j) . "\n";

ドリル 02 — 星のピラミッド (左寄せ)

問題

標準入力で整数 N を 1 行受け取り、左寄せの星 (*) のピラミッドを N 段出力してください。

入力例:

4

期待される出力:

*
**
***
****

採点

php scripts/grade.php topics/loop/ch05-nested/drill/02-stars/

ヒント

  • $n = (int) trim(fgets(STDIN)); で N を読む
  • 外側 for ($i = 1; $i <= $n; $i++) で行数
  • 内側 for ($j = 1; $j <= $i; $j++) で星の数 ($i 個)
  • 内側で echo "*";、内側を抜けたら echo "\n";