科目ごとの平均点(2次元配列) Column Average of a 2D Array
点数[生徒, 科目] という2次元配列を使います。外側ループで科目(列)を選び、内側ループでその科目の全生徒(行)を縦に足して合計を求め、生徒数で割って平均[科目]に格納します。
「外側=列、内側=行」で縦方向に集計するのがポイント。下の表で、走査中の列がどう縦に読まれ、科目平均が1つずつ埋まっていくかを見てください。
点数表(生徒 × 科目)
▶📖 記号の読み方(はじめての人はここを確認)
←代入(右の値を左の箱に入れる)。例: 合計 ← 0
=等しいか比べる(代入ではない)
≠等しくない(≠ は != と書いてもOK)
≤ / ≥以下 / 以上(<= / >= でもOK)
×かけ算(* でもOK)
÷わり算。答えの小数は捨てる(例: 7÷2=3)。/ でもOK
%わり算の余り(例: 7%2=1)
要素数(配列)配列の箱の数。2次元では 行数()・列数()
▲i / ▲j配列の下の三角は「いまコードが見ている位置」
algorithm.pseudo擬似言語 / IPA形式
1整数型の二次元配列: 点数2整数型の配列: 平均3整数型: i, j, 合計4for (j を 1 から 列数(点数) まで 1 ずつ増やす)5 合計 ← 06 for (i を 1 から 行数(点数) まで 1 ずつ増やす)7 合計 ← 合計 + 点数[i, j]8 endfor9 平均[j] ← 合計 ÷ 行数(点数)10endfor
▶ 実行を開始します
配列の可視化
箱の番号(添字)は 1 から始まります▶ 整数型の二次元配列: 点数
実行を開始します
点数(2次元配列)
国語
数学
理科
生徒1
80
70
90
生徒2
60
85
75
生徒3
100
40
80
生徒4
70
90
60
科目平均
0
0
0
いま見ているマス数字を書きかえたマス完了
くらべた回数
0
書きかえた回数
0
読んだ回数
0
変数の状態(いまの値)
i=—
行=生徒
j=—
列=科目
合計=—
今の科目の合計
1 / 39
速度
理解度チェック
解答すると、そのアルゴリズムが実際に動く様子を再生して確認できます。
確認問題 1
上の点数表で、国語(1列目: 80, 60, 100, 70)の平均、すなわち 平均[1] の値はいくつか。`÷` は整数除算。
確認問題 2
数学(2列目: 70, 85, 40, 90)の平均、すなわち 平均[2] の値はいくつか。
▶📊 計算量(速さの目安)— くわしく知りたい人向け
「計算量」は、データが増えたときに手間(時間)がどれくらい増えるかの目安です。n はデータの個数。記号の意味は各カードの下に書いてあります。
最良(いちばん速い場合)
O(n×m)
行の数 × 列の数 に比例(表の全マスを見る)
平均(ふつう)
O(n×m)
行の数 × 列の数 に比例(表の全マスを見る)
最悪(いちばん遅い場合)
O(n×m)
行の数 × 列の数 に比例(表の全マスを見る)
使う追加メモリ(空間)
O(m)