第11回 二次元配列(6/25)

二次元配列

今週は配列の復習と仕上げとして,二次元配列の扱い方を取り上げる.


第9回演習の解答例


これまで習った「配列」は,要素が直線状に並ぶデータ形式であった.
一次元データの代表的な例としては,温度や電圧などの時系列データが挙げられる.
一方,画像などは二次元的にデータが並ぶ形式である.

今回の演習では,二次元データをプログラム中で操作する方法を学ぶ.

例えば下に示すような成績表は,出席番号と科目という 2つの要素(行,列)から成り立っている.

出席番号 語学 材料力学 熱力学機械力学流体力学
16571748297
28483746465
37474788078
49090909090
58778856088
69395949295

この表に示す様なデータを,プログラム中で効率よく扱うために二次元配列を用いる.

int seiseki[6][5]; 二次元配列の宣言.[6][5]は配列の大きさ.
(行6人分,列5科目分の記憶場所を確保する)
int seiseki[6][5]={ {65, 71, 74, 82, 97 } ,
                    {84, 83, 74, 64, 65 } ,
                    {74, 74, 78, 80, 78 } ,
                    {90, 90, 90, 90, 90 } ,
                    {87, 78, 85, 60, 88 } ,
                    {93, 95, 94, 92, 95 }  };
宣言と同時に初期化
(括弧の対応,カンマの区切り方に注意)
seiseki[0][2] = 0; 代入.
この例では出席番号 1 番の熱力学の点数を 0 にする.
printf("%d¥n", seiseki[1][0]); 参照.
この例では出席番号 2 番の語学の点数を画面に表示にする.

二次元配列の宣言,使用法は基本的には1次元配列と同じく

  1. 配列の添え字はそれぞれ 0 から始まる.
  2. 添え字は(配列の要素数 - 1)まで使用可能.上の例では a[0][0] から a[5][4] まで参照,および代入が可能.
  3. 配列名の命名規則は予約語を除く a-z, A-Z, 0-9, _ の組み合わせ.一般の変数と同じ.

である.

演習では扱わないが,三次元配列,四次元配列・・・も同様に宣言することが出来る.


int  a[100][20][100];
float  data[4][3][6][10];


演習課題

問(1)から問(3)には以下の成績表を使って答えよ.

*出席番号は 1 から始まるが,配列の添え字は 0 から始まることに注意!

出席番号 語学 材料力学 熱力学機械力学流体力学 平均点 偏差値
16571748297--
28483746465--
37474788078--
49090909090--
58778856088--
69395949295--

問(1)

まず,各人の平均値を順次計算するプログラムを作る.

問(2)

次に,合計点の標準偏差を求め,各点数の偏差値を求める.

偏差値 = 50 + 10 * (得点 - 平均点) / 標準偏差

標準偏差 =

x は点数,n はデータ数(ここでは人数)

問(3)

結果を成績のよい順(総合得点,または科目別順位)に並べ替え,表示してみよう.

問(4)

画像データ(グラフィックス)は,二次元配列を用いる典型的な例です.

通常、2値画像(”0”か”1”かで白黒を判定する画像)において”0”は”白”を、”1”は”黒”を表します.

以下の表で”1”の箇所には黒の代わりに”x”を、”0”の箇所には白の代わりにスペースを画面に表示するようなプログラムを組もう.

問(5)

問(4)で画面に表示した画像の白黒を反転させてみよう.

問(6)

三目並べのプログラムを組もう.

三目並べとは2人で行うゲームです.3×3のマスに○と×を交互に描き込んでいって,縦,横.斜めのいずれかに,同じ記号を3つ並べる事の出来た方を勝ちとするゲームです.

今回は,1君と2さんの二人で交互に遊べるようなプログラムを組んでみましょう.

問(6)-1

3行3列の二次元配列を用意し,0で初期化しておく.

問(6)-2

(行,列,人)の順にキーボードから(1,1,1)と入力すると,

次に,(行,列,人)の順にキーボードから(2,0,2)と入力すると,

と画面に表示するようなプログラムを組みましょう.

スーパーアドバンスドステップ

まだまだ余裕だ!と,やる気に満ち溢れている人は,問(6)で組んだプログラムに

(1)入力エラーチェック

(2)勝ち負け判定を

を加えてみよう!!

授業終了時までのプログラムと完成した提出用プログラムをoh-meijiシステムを使って提出すること
授業終了時に送るのは出席の確認用である.完成した課題は提出用の回に送ること
(提出期限を厳守し,提出用の回に提出しないと採点を行わない)