このページでは、しゅんぜい氏の発行されているメルマガのうち「データベース」について
編集して掲載しています。
図1の流れ図を実行すると、図2の配列Aの内容が図3の配列Bになる。
流れ図の【 】に入れるべき操作はどれか。なお、配列A,Bの要素は
それぞれ A(i, j), B(i, j) で参照する。
_____
( 開 始 ) j
 ̄ ̄│ ̄ ̄ ──────────────→
──┴── 0 1 2 3 4 5 6 7
/ ループ1 \ ┌─┬─┬─┬─┬─┬─┬─┬─┐
│ i=0,1,…,7 │ │0│ │●│●│●│●│●│●│ │
└───┬───┘ │ ├─┼─┼─┼─┼─┼─┼─┼─┤
──┴── │1│ │●│ │ │ │ │ │ │
/ ループ2 \ │ ├─┼─┼─┼─┼─┼─┼─┼─┤
│ j=0,1,…,7 │ │2│ │●│ │ │ │ │ │ │
└───┬───┘ │ ├─┼─┼─┼─┼─┼─┼─┼─┤
┌──┴──┐ │3│ │●│●│●│●│ │ │ │
│【 】│ i│ ├─┼─┼─┼─┼─┼─┼─┼─┤
└──┬──┘ │4│ │●│ │ │ │ │ │ │
┌───┴───┐ │ ├─┼─┼─┼─┼─┼─┼─┼─┤
│ │ │5│ │●│ │ │ │ │ │ │
\ ループ2 / │ ├─┼─┼─┼─┼─┼─┼─┼─┤
──┬── │6│ │●│ │ │ │ │ │ │
┌───┴───┐ │ ├─┼─┼─┼─┼─┼─┼─┼─┤
│ │ ↓7│ │●│ │ │ │ │ │ │
\ ループ1 / └─┴─┴─┴─┴─┴─┴─┴─┘
──┬── 図2 実行前の配列A
──┴──
( 終 了 ) j
 ̄ ̄ ̄ ̄ ̄ ──────────────→
0 1 2 3 4 5 6 7
図1 流れ図 ┌─┬─┬─┬─┬─┬─┬─┬─┐
│0│ │ │ │ │ │ │ │ │
│ ├─┼─┼─┼─┼─┼─┼─┼─┤
│1│●│●│●│●│●│●│●│●│
│ ├─┼─┼─┼─┼─┼─┼─┼─┤
│2│ │ │ │ │●│ │ │●│
│ ├─┼─┼─┼─┼─┼─┼─┼─┤
│3│ │ │ │ │●│ │ │●│
i│ ├─┼─┼─┼─┼─┼─┼─┼─┤
│4│ │ │ │ │●│ │ │●│
│ ├─┼─┼─┼─┼─┼─┼─┼─┤
│5│ │ │ │ │ │ │ │●│
│ ├─┼─┼─┼─┼─┼─┼─┼─┤
│6│ │ │ │ │ │ │ │●│
│ ├─┼─┼─┼─┼─┼─┼─┼─┤
↓7│ │ │ │ │ │ │ │ │
└─┴─┴─┴─┴─┴─┴─┴─┘
図3 実行後の配列B
ア A(i, j) → B(j, i)
イ A(i, j) → B(j, 7−i)
ウ A(i, j) → B(7−j, i)
エ A(i, j) → B(7−j, 7−i)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■解答■(出典:H10. データベース 問54)
----------------------------------------------------------------------
イ A(i, j) → B(j, 7−i)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■解説■
----------------------------------------------------------------------
今週は、フローチャート特集をやっています。
今日も配列に関する問題でした。問題を見るのが大変だったかも(^^;
今日の問題は、配列内のデータを回転させる操作の問題です。
配列Aのデータを右に90度回転させたのが配列Bになっています。
2つの図をよく見比べて、どの要素がどこに移動しているのかを考えると
答えがわかると思います。
ちょっと横幅が狭いのですが、図2と図3を横に並べて見てみましょう。
縦の添え字が i 、横が添え字が j です。
j j
──────────────→ ──────────────→
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
┌─┬─┬─┬─┬─┬─┬─┬─┐┌─┬─┬─┬─┬─┬─┬─┬─┐
0│ │●│●│●│●│●│●│ ││ │ │ │ │ │ │ │ │
├─┼─┼─┼─┼─┼─┼─┼─┤├─┼─┼─┼─┼─┼─┼─┼─┤
1│ │●│ │ │ │ │ │ ││●│●│●│●│●│●│●│●│
├─┼─┼─┼─┼─┼─┼─┼─┤├─┼─┼─┼─┼─┼─┼─┼─┤
2│ │●│ │ │ │ │ │ ││ │ │ │ │●│ │ │●│
├─┼─┼─┼─┼─┼─┼─┼─┤├─┼─┼─┼─┼─┼─┼─┼─┤
3│ │●│●│●│●│ │ │ ││ │ │ │ │●│ │ │●│
├─┼─┼─┼─┼─┼─┼─┼─┤├─┼─┼─┼─┼─┼─┼─┼─┤
4│ │●│ │ │ │ │ │ ││ │ │ │ │●│ │ │●│
├─┼─┼─┼─┼─┼─┼─┼─┤├─┼─┼─┼─┼─┼─┼─┼─┤
5│ │●│ │ │ │ │ │ ││ │ │ │ │ │ │ │●│
├─┼─┼─┼─┼─┼─┼─┼─┤├─┼─┼─┼─┼─┼─┼─┼─┤
6│ │●│ │ │ │ │ │ ││ │ │ │ │ │ │ │●│
├─┼─┼─┼─┼─┼─┼─┼─┤├─┼─┼─┼─┼─┼─┼─┼─┤
7│ │●│ │ │ │ │ │ ││ │ │ │ │ │ │ │ │
└─┴─┴─┴─┴─┴─┴─┴─┘└─┴─┴─┴─┴─┴─┴─┴─┘
図2 実行前の配列A 図3 実行後の配列B
さて、2つの図を見比べるのですが、考えやすい部分を見つけましょう。
この場合、図2の2列目(j=1 の縦1列) に注目するとわかりやすいです。
この列は、配列にすべての値が入っているので、動きが見やすくなります。
注目する部分を決めたら、後は1つ1つデータを追っていきます。
図2の2列目の一番上(i=0) から、順に下に見ていきます。
まず、A(0, 1) は B(1, 7) に移動していますね。
同様に図2の2列目を追っていくと
A(0, 1) は B(1, 7) へ
A(1, 1) は B(1, 6) へ
A(2, 1) は B(1, 5) へ
A(3, 1) は B(1, 4) へ
A(4, 1) は B(1, 3) へ
A(5, 1) は B(1, 2) へ
A(6, 1) は B(1, 1) へ
A(7, 1) は B(1, 0) へ
となっています。
ここまで来れば、もう図は見なくても答えが出ます(^^;
配列A,Bの関係は、Aの列の要素(j の値)とBの行の要素(i の値)が
等しくなっています。(全部 1 になっていることからわかります)
> A(0, 1) は B(1, 7) へ
↑ ↑
ここは全部等しい
さらに、配列Aの行の要素(i の値)を7から引いた値とBの列の要素
(j の値)が等しくなっています。
> A(0, 1) は B(1, 7) へ
> A(1, 1) は B(1, 6) へ
↑ ↑
Aの i この値は、7からAの i を引いたもの
これらをまとめると A(i, j) → B(j, 7−i) となります。
よって、「イ」が正解です。