C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++でクラス区間の算術平均を計算するプログラムの作成方法

ここでは、3つの配列が与えられた状況を考えます。1つ目の配列には各クラス区間(階級)の上限、2つ目の配列には下限、3つ目の配列には度数が格納されています。この記事では、これらのデータからクラス区間の算術平均を求める手順を解説し、実際に動作するC++プログラムを紹介します。

算術平均とは?

算術平均(相加平均)とは、データ集合に含まれるすべての要素の合計を、その集合の要素の総数で割ることで求められる平均値のことです。統計学において最も基本的な代表値の一つであり、データ全体の中心的な傾向を示します。

クラス区間の算術平均の計算方法

クラス区間ごとにまとめられたデータでは、個々の値がわからないため、各区間の中間点(階級値)を代表値として使用します。計算の手順は以下の通りです。

ステップ1:下限・上限・度数を確認する

下限上限度数
121
342
563
784

ステップ2:階級値(中間点)を求めて度数を掛ける

上限と下限を加えた合計を2で割ると、その区間の階級値(中間点)が求まります。次に、各階級値に対応する度数を掛け合わせます。

下限上限度数(f)階級値(m)m×f
121(1+2)/2=1.51.5×1=1.5
342(3+4)/2=3.53.5×2=7.0
563(5+6)/2=5.55.5×3=16.5
784(7+8)/2=7.57.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++でも正確に算術平均を計算できます。

  1. 配列の全要素を乗算する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 解き方のアプローチ この問題は、累積用の一時変数を用意し、配列の要素を先頭

  2. C++で8進数を10進数に変換するプログラムの書き方

    8進数が入力として与えられたとき、それを10進数に変換するのが本記事のテーマです。 コンピュータ上の10進数は基数10で表現されます。一方、8進数は基数8で表現され、使用できる数字は0〜7に限られます。これに対して10進数では、0〜9までの任意の数字を使用することができます。 8進数から10進数への変換手順 右から左へ向かって剰余演算により各桁を取り出し、0から始まるべき乗を掛けます。指数は「桁数 − 1」に達するまで1ずつ増加させます。 8進数を変換するため、べき乗の基数は8となります(8進数の基数が8であるため)。 入力された数値の各桁に基数とべき乗を掛け、その結果を記録します。 すべて