データベース

このページでは、しゅんぜい氏の発行されているメルマガのうち「データベース」について

編集して掲載しています。

 

[ ホーム ] [ 上へ ]


配列の回転(H10. データベース 問54)


 図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) となります。
 よって、「イ」が正解です。

戻る