二次元配列の問題

九九表を二次元配列に作成するプログラムをフローチャートで表します。

プログラムの条件は次のとおりです。

  • 九九表は変数 multiplication_tableでアクセスする
  • 配列の添字0から始まる
  • 0行目に1の段、1行目に2の段、・・・8行目に9の段の値が入る
  • 行に対する添字を変数 i 、列に対する添字を変数 j とする

変数名「multiplication_table」は「掛け算の表」という意味です。

九九表multiplication_tableの初期状態とプログラム実行後の内容は下図のとおりです。

multiplication_table

この表を完成させるために2つのフローチャートがあります。それぞれ、正しく実行できるように空欄を完成させましょう。

あれ? フローチャート1とフローチャート2は同じじゃないですか?

いえいえ、よく見てください。繰り返し条件と添字に入っている値をよく見てください。

そうか、前回の繰り返し処理では「i*j」で九九表を作ったけれど、配列に入れるので注意が必要なのか。

さすが亜美さん、いいところに気付きましたね。
空欄は九九表 multiplication_tableに九九の値を入れるのですが、添字の値を考えないと正しく九九表が作成できません。

以下の点に注意しましょう。

九九表の1の段には次のような計算で値が入ります。

この計算を実現するには、0行目(1の段)の0列目であれば次の命令を実行して値を代入します。

multiplication_table[0][0] = 1 * 1

しかし、添字のiとjの値に気を付けないと、間違った結果ができてしまいます。

フローチャート1とフローチャート2での注意ポイントをそれぞれ確認して空欄を完成させましょう。

フローチャート1:添字が0から始まる場合

「i=0」、「j=0」から始まるので

multiplication_table[ i ] [ j ] = i * j

を実行すると

multiplication_table[ 0 ] [ 0 ] = 0 * 0

になり、九九表の0行0列には「1」が入るはずが、「0」が入ってしまうため正しくありません。

iが0の時は1の段
iが1の時は2の段
計算する段の値は「iに1を加算」した値です。

例えば1の段を計算する時は次のようになります。

jが0の時は1×1
jが1の時は1×2
jが2の時は1×3
計算する値は「jに1を加算」した値です。

フローチャート1の①に入る命令

フローチャート2:添字が1から始まる場合

「i=1」、「j=1」から始まるので

multiplication_table[ i ] [ j ] = i * j

を実行すると

multiplication_table[ 1 ] [ 1 ] = 1 * 1

になり、「1」は九九表の0行0列に入るはずが、九九表の1行1列に入ってしまうため正しくない。

計算結果は合ってますが、代入される位置が間違っています。

行の添字は i=1 で1から始まってますが、代入する添字は0の行(iに1を減算)です。

列の添字は j=1 で1から始まってますが、代入する添字は0の列(jに1を減算)です。

次のフローチャートの②に入る命令を答えてください。

※この再現版では提出は行いません(送信先は未接続です)

Well done!

次のステップに進みましょう!

次のステップに進む

← 前のステップにもどる