C++でクラス区間の算術平均を計算するプログラムの作成方法
ここでは、3つの配列が与えられた状況を考えます。1つ目の配列には各クラス区間(階級)の上限、2つ目の配列には下限、3つ目の配列には度数が格納されています。この記事では、これらのデータからクラス区間の算術平均を求める手順を解説し、実際に動作するC++プログラムを紹介します。
算術平均とは?
算術平均(相加平均)とは、データ集合に含まれるすべての要素の合計を、その集合の要素の総数で割ることで求められる平均値のことです。統計学において最も基本的な代表値の一つであり、データ全体の中心的な傾向を示します。
クラス区間の算術平均の計算方法
クラス区間ごとにまとめられたデータでは、個々の値がわからないため、各区間の中間点(階級値)を代表値として使用します。計算の手順は以下の通りです。
ステップ1:下限・上限・度数を確認する
| 下限 | 上限 | 度数 |
|---|---|---|
| 1 | 2 | 1 |
| 3 | 4 | 2 |
| 5 | 6 | 3 |
| 7 | 8 | 4 |
ステップ2:階級値(中間点)を求めて度数を掛ける
上限と下限を加えた合計を2で割ると、その区間の階級値(中間点)が求まります。次に、各階級値に対応する度数を掛け合わせます。
| 下限 | 上限 | 度数(f) | 階級値(m) | m×f |
|---|---|---|---|---|
| 1 | 2 | 1 | (1+2)/2=1.5 | 1.5×1=1.5 |
| 3 | 4 | 2 | (3+4)/2=3.5 | 3.5×2=7.0 |
| 5 | 6 | 3 | (5+6)/2=5.5 | 5.5×3=16.5 |
| 7 | 8 | 4 | (7+8)/2=7.5 | 7.5×4=30.0 |
ステップ3:算術平均を計算する
最後に、「階級値×度数」の合計を度数の合計で割れば、算術平均が求まります。
クラス区間の算術平均 = Σ(m×f) ÷ Σf = (1.5+7.0+16.5+30.0) ÷ (1+2+3+4) = 55.0 ÷ 10 = 5.5
入力と出力の例
Input: LowerLimit[] = {1, 6, 11, 16, 21}
UpperLimit[] = {5, 10, 15, 20, 25}
freq[] = {10, 20, 30, 40, 50}
Output: 16.3333
Input: LowerLimit[] = {1, 3, 5, 7}
UpperLimit[] = {2, 4, 6, 8}
freq[] = {1, 2, 3, 4}
Output: 5.5
アルゴリズム
START
Step 1 -> クラス区間の算術平均を計算する関数を宣言する
float AM(int LowerLimit[], int UpperLimit[], int freq[], int terms)
float mid[terms] を宣言する
float sum = 0 と Sum_freq = 0 を宣言して初期化する
for (int i = 0; i < terms; i++) のループ処理:
mid[i] = (LowerLimit[i] + UpperLimit[i]) / 2 を設定
sum = sum + mid[i] * freq[i] を設定
Sum_freq = Sum_freq + freq[i] を設定
ループ終了後、return sum / Sum_freq で結果を返す
Step 2 -> main() 内で
int LowerLimit[] = { 1, 3, 5, 7 } を宣言
int UpperLimit[] = { 2, 4, 6, 8 } を宣言
int freq[] = { 1, 2, 3, 4 } を宣言
int size = sizeof(freq) / sizeof(freq[0]) を宣言
AM(LowerLimit, UpperLimit, freq, size) を呼び出す
STOP
C++での実装例
#include <bits/stdc++.h>
using namespace std;
// クラス区間の算術平均を計算する関数
float AM(int LowerLimit[], int UpperLimit[], int freq[], int terms) {
float mid[terms];
float sum = 0, Sum_freq = 0;
for (int i = 0; i < terms; i++) {
// 整数同士の除算で小数が切り捨てられないようキャストする
mid[i] = (float)(LowerLimit[i] + UpperLimit[i]) / 2;
sum = sum + mid[i] * freq[i];
Sum_freq = Sum_freq + freq[i];
}
return sum / Sum_freq;
}
int main() {
int LowerLimit[] = { 1, 3, 5, 7 };
int UpperLimit[] = { 2, 4, 6, 8 };
int freq[] = { 1, 2, 3, 4 };
int size = sizeof(freq) / sizeof(freq[0]);
cout << "Arithmetic mean is : " << AM(LowerLimit, UpperLimit, freq, size);
return 0;
}
実行結果
Arithmetic mean is : 5.5
まとめ
クラス区間の算術平均は、「階級値×度数」の総和を度数の総和で割ることで求められます。実装時のポイントは、下限と上限がともにint型の場合、単純に2で割ると整数除算となり小数部分が切り捨てられるため、(float)でキャストしてから除算することです。この点に注意すれば、C++でも正確に算術平均を計算できます。
-
配列の全要素を乗算するC++プログラムの解説
整数型の要素を持つ配列が与えられたとき、配列内のすべての要素を掛け合わせ、その積を表示することを考えます。本記事では、この問題をC++(C言語スタイルのコード)で解く方法を、アプローチ、アルゴリズム、サンプルコード、実行結果まで順を追って解説します。 例 入力: arr[]={1,2,3,4,5,6,7} 出力: 1 x 2 x 3 x 4 x 5 x 6 x 7 = 5040 入力: arr[]={3, 4, 6, 2, 7, 8, 4} 出力: 3 x 4 x 6 x 2 x 7 x 8 x 4 = 32256 解き方のアプローチ この問題は、累積用の一時変数を用意し、配列の要素を先頭
-
C++で8進数を10進数に変換するプログラムの書き方
8進数が入力として与えられたとき、それを10進数に変換するのが本記事のテーマです。 コンピュータ上の10進数は基数10で表現されます。一方、8進数は基数8で表現され、使用できる数字は0〜7に限られます。これに対して10進数では、0〜9までの任意の数字を使用することができます。 8進数から10進数への変換手順 右から左へ向かって剰余演算により各桁を取り出し、0から始まるべき乗を掛けます。指数は「桁数 − 1」に達するまで1ずつ増加させます。 8進数を変換するため、べき乗の基数は8となります(8進数の基数が8であるため)。 入力された数値の各桁に基数とべき乗を掛け、その結果を記録します。 すべて