하한값 배열, 상한값 배열, 그리고 도수(빈도) 배열 세 가지가 주어졌을 때, 해당 계급구간들의 산술평균을 계산하는 것이 이번 글의 목표입니다.
산술평균이란?
산술평균은 자료 집합에 속한 모든 값의 합을 전체 데이터 개수로 나누어 구하는 대푯값으로, 흔히 '평균'이라고 부르는 값입니다.
계급구간 산술평균 계산 방법
- 먼저 각 계급의 하한값, 상한값, 도수가 다음과 같이 주어져 있다고 가정합니다.
| 하한 | 상한 | 도수 |
|---|---|---|
| 1 | 2 | 1 |
| 3 | 4 | 2 |
| 5 | 6 | 3 |
| 7 | 8 | 4 |
- 각 계급의 중간값인 계급값(m)은 상한과 하한을 더한 후 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 |
- 마지막으로 m×f 값들의 총합을 도수의 총합으로 나누면 최종 산술평균이 완성됩니다.
계급구간 산술평균 = Σ(m×f) / Σf = (1.5 + 7.0 + 16.5 + 30.0) / (1 + 2 + 3 + 4) = 5.5
입력·출력 예시
입력: LowerLimit[] = {1, 6, 11, 16, 21}
UpperLimit[] = {5, 10, 15, 20, 25}
freq[] = {10, 20, 30, 40, 50}
출력: 16.3333
입력: LowerLimit[] = {1, 3, 5, 7, 9}
UpperLimit[] = {2, 4, 6, 8, 10}
freq[] = {1, 2, 3, 4, 5}
출력: 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, 9} 선언
int UpperLimit[] = {2, 4, 6, 8, 10} 선언
int freq[] = {1, 2, 3, 4, 5} 선언
int size = sizeof(freq) / sizeof(freq[0])
AM(LowerLimit, UpperLimit, freq, size) 호출
STOPC++ 구현 코드
#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] = (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, 9 };
int UpperLimit[] = { 2, 4, 6, 8, 10 };
int freq[] = { 1, 2, 3, 4, 5 };
int size = sizeof(freq) / sizeof(freq[0]);
cout<<"산술평균 : "<<AM(LowerLimit, UpperLimit, freq, size);
return 0;
}실행 결과
산술평균 : 5.5