
サンプル・プログラム
配列と合計、平均
番号 | 点数 |
---|---|
1 | 92 |
2 | 85 |
3 | 69 |
4 | 94 |
5 | 81 |
6 | 76 |
7 | 96 |
8 | 100 |
9 | 74 |
10 | 79 |
11 | 76 |
12 | 92 |
また、PHPには、ExcelのSUMやAVERAGEのように、配列を使って簡単に合計や平均を求める関数が用意されている。
dt03-11-01.php
10: //配列
11: $a[1] = 92;
12: $a[2] = 85;
13: $a[3] = 69;
14: $a[4] = 94;
15: $a[5] = 81;
16: $a[6] = 76;
17: $a[7] = 96;
18: $a[8] = 100;
19: $a[9] = 74;
20: $a[10] = 79;
21: $a[11] = 76;
22: $a[12] = 92;
23:
24: //合計
25: $sum = array_sum($a);
26: //平均
27: $avg = $sum / count($a);
28:
29: //出力
30: printf("出席番号 点数\n");
31: printf("----------------\n");
32: foreach ($a as $key=>$val) {
33: printf(" %2d %4d\n", $key, $val);
34: }
35: printf("----------------\n");
36: printf("合計 %4d\n", $sum);
37: printf("平均 %4.1f\n", $avg);

C++による静的配列
C++用のプログラムが "dt03-11-03.cpp" である。
dt03-11-03.cpp
9: #include <iostream>
10: #include <iomanip>
11: #include <numeric>
12: using namespace std;
13:
14: #define ARRAY_LENGTH(array) (sizeof(array) / sizeof(array[0]))
15:
16: int main() {
17: //静的配列
18: int a[12];
19: a[0] = 92;
20: a[1] = 85;
21: a[2] = 69;
22: a[3] = 94;
23: a[4] = 81;
24: a[5] = 76;
25: a[6] = 96;
26: a[7] = 100;
27: a[8] = 74;
28: a[9] = 79;
29: a[10] = 76;
30: a[11] = 92;
31:
32: //合計
33: int sum = accumulate(begin(a), end(a), 0);
34: //平均
35: float avg = (float)sum / ARRAY_LENGTH(a);
36:
37: //出力
38: cout << "出席番号 点数" << endl;
39: cout << "----------------" << endl;
40: for (int i = 0; i < ARRAY_LENGTH(a); i++) {
41: cout << " " << setw(2) << i + 1;
42: cout << " " << setw(4) << a[i] << endl;
43: }
44: cout << "----------------" << endl;
45: cout << "合計 " << setw(4) << sum << endl;
46: cout << "平均 " << fixed << setprecision(1) << avg << endl;
47:
48: return (0);
49: }

accumulate はC++に追加された関数で、合計を計算するときなどに利用できる。
C++による動的配列
dt03-11-04.cpp
9: #include <iostream>
10: #include <iomanip>
11: #include <numeric>
12: using namespace std;
13:
14: int main() {
15: //動的配列
16: int size = 12;
17: int *a = new int[size];
18: a[0] = 92;
19: a[1] = 85;
20: a[2] = 69;
21: a[3] = 94;
22: a[4] = 81;
23: a[5] = 76;
24: a[6] = 96;
25: a[7] = 100;
26: a[8] = 74;
27: a[9] = 79;
28: a[10] = 76;
29: a[11] = 92;
30:
31: //合計
32: int sum = accumulate(a, a + size, 0);
33: //平均
34: float avg = (float)sum / size;
35:
36: //出力
37: cout << "出席番号 点数" << endl;
38: cout << "----------------" << endl;
39: for (int i = 0; i < size; i++) {
40: cout << " " << setw(2) << i + 1;
41: cout << " " << setw(4) << a[i] << endl;
42: }
43: cout << "----------------" << endl;
44: cout << "合計 " << setw(4) << sum << endl;
45: cout << "平均 " << fixed << setprecision(1) << avg << endl;
46:
47: //配列を削除
48: delete[] a;
49:
50: return (0);
51: }
また、明示的に delete を使って削除しないと、そのままヒープ領域の配列は残ったままになる。
C++による連想配列
今回のように添字を出席番号とする場合、0は使わないし、数字が連続しているとも限らない。そこで連想配列クラス map を使ったプログラムが "dt03-11-05.cpp" である。
dt03-11-05.cpp
9: #include <iostream>
10: #include <iomanip>
11: #include <map>
12: using namespace std;
13:
14: int main() {
15: //連想配列
16: map<int,int> a;
17: a[1] = 92;
18: a[2] = 85;
19: a[3] = 69;
20: a[4] = 94;
21: a[5] = 81;
22: a[6] = 76;
23: a[7] = 96;
24: a[8] = 100;
25: a[9] = 74;
26: a[10] = 79;
27: a[11] = 76;
28: a[12] = 92;
29:
30: //合計
31: int sum = 0;
32: for (int i = 1; i <= a.size(); i++) sum += a[i];
33:
34: //平均
35: float avg = (float)sum / a.size();
36:
37: //出力
38: cout << "出席番号 点数" << endl;
39: cout << "----------------" << endl;
40: for (int i = 1; i <= a.size(); i++) {
41: cout << " " << setw(2) << i;
42: cout << " " << setw(4) << a[i] << endl;
43: }
44: cout << "----------------" << endl;
45: cout << "合計 " << setw(4) << sum << endl;
46: cout << "平均 " << fixed << setprecision(1) << avg << endl;
47:
48: return (0);
49: }
点数の代入処理は、普通の配列と同じようにできる。
ただし、accumulate がうまく適用できないので、合計の計算はセオリー通りforループで組み立てた。
Pythonの辞書
代わりに、添字をキー(見出し語)とみなした辞書というデータ構造が用意されている。
辞書を使うことで、配列と同様、簡単に合計や平均を求めることができる。プログラム "dt03-11-02.py" の実行結果は、PHPの時と全く同じになる。
import sys
from statistics import mean
#配列(辞書)
a = {1:92, 2:85, 3:69, 4:94, 5:81, 6:76, 7:96, 8:100, 9:74, 10:79, 11:76, 12:92}
#合計
sum = sum(a.values());
#平均
avg = mean(a.values());
#出力
print("出席番号 点数");
print("----------------");
for key, val in a.items():
sys.stdout.write(" {0:2d}".format(key))
sys.stdout.write(" {0:4d}".format(val))
print()
print("----------------");
print("合計 {0:4d}".format(sum));
print("平均 {0:4.1f}".format(avg));
配列は、Excelの集計表のようなデータ群を扱うのに適している。多くの処理系では、配列を対象にした統計計算を行う関数が用意されている。