今週は配列の復習と仕上げとして,二次元配列の扱い方を取り上げる.
これまで習った「配列」は,要素が直線状に並ぶデータ形式であった.
一次元データの代表的な例としては,温度や電圧などの時系列データが挙げられる.
一方,画像などは二次元的にデータが並ぶ形式である.
今回の演習では,二次元データをプログラム中で操作する方法を学ぶ.
例えば下に示すような成績表は,出席番号と科目という 2つの要素(行,列)から成り立っている.
出席番号 | 語学 | 材料力学 | 熱力学 | 機械力学 | 流体力学 |
1 | 65 | 71 | 74 | 82 | 97 |
2 | 84 | 83 | 74 | 64 | 65 |
3 | 74 | 74 | 78 | 80 | 78 |
4 | 90 | 90 | 90 | 90 | 90 |
5 | 87 | 78 | 85 | 60 | 88 |
6 | 93 | 95 | 94 | 92 | 95 |
この表に示す様なデータを,プログラム中で効率よく扱うために二次元配列を用いる.
int seiseki[6][5]; |
二次元配列の宣言.[6][5]は配列の大きさ. (行6人分,列5科目分の記憶場所を確保する) |
|
宣言と同時に初期化 (括弧の対応,カンマの区切り方に注意) |
seiseki[0][2] = 0; |
代入. この例では出席番号 1 番の熱力学の点数を 0 にする. |
printf("%d¥n", seiseki[1][0]); |
参照. この例では出席番号 2 番の語学の点数を画面に表示にする. |
二次元配列の宣言,使用法は基本的には1次元配列と同じく
a[0][0]
から a[5][4]
まで参照,および代入が可能.である.
演習では扱わないが,三次元配列,四次元配列・・・も同様に宣言することが出来る.
int a[100][20][100];
float data[4][3][6][10];
問(1)から問(3)には以下の成績表を使って答えよ.
*出席番号は 1 から始まるが,配列の添え字は 0 から始まることに注意!
出席番号 | 語学 | 材料力学 | 熱力学 | 機械力学 | 流体力学 | 平均点 | 偏差値 |
1 | 65 | 71 | 74 | 82 | 97 | - | - |
2 | 84 | 83 | 74 | 64 | 65 | - | - |
3 | 74 | 74 | 78 | 80 | 78 | - | - |
4 | 90 | 90 | 90 | 90 | 90 | - | - |
5 | 87 | 78 | 85 | 60 | 88 | - | - |
6 | 93 | 95 | 94 | 92 | 95 | - | - |
まず,各人の平均値を順次計算するプログラムを作る.
次に,合計点の標準偏差を求め,各点数の偏差値を求める.
偏差値 = 50 + 10 * (得点 - 平均点) / 標準偏差
標準偏差 =
x は点数,n はデータ数(ここでは人数)
結果を成績のよい順(総合得点,または科目別順位)に並べ替え,表示してみよう.
画像データ(グラフィックス)は,二次元配列を用いる典型的な例です.
通常、2値画像(”0”か”1”かで白黒を判定する画像)において”0”は”白”を、”1”は”黒”を表します.
以下の表で”1”の箇所には黒の代わりに”x”を、”0”の箇所には白の代わりにスペースを画面に表示するようなプログラムを組もう.
問(4)で画面に表示した画像の白黒を反転させてみよう.
三目並べのプログラムを組もう.
三目並べとは2人で行うゲームです.3×3のマスに○と×を交互に描き込んでいって,縦,横.斜めのいずれかに,同じ記号を3つ並べる事の出来た方を勝ちとするゲームです.
今回は,1君と2さんの二人で交互に遊べるようなプログラムを組んでみましょう.
3行3列の二次元配列を用意し,0で初期化しておく.
(行,列,人)の順にキーボードから(1,1,1)と入力すると,
次に,(行,列,人)の順にキーボードから(2,0,2)と入力すると,
と画面に表示するようなプログラムを組みましょう.
まだまだ余裕だ!と,やる気に満ち溢れている人は,問(6)で組んだプログラムに
(1)入力エラーチェック
(2)勝ち負け判定を
を加えてみよう!!
授業終了時までのプログラムと完成した提出用プログラムをoh-meijiシステムを使って提出すること
授業終了時に送るのは出席の確認用である.完成した課題は提出用の回に送ること
(提出期限を厳守し,提出用の回に提出しないと採点を行わない)