C++で平均絶対偏差(MAD)を計算するプログラムの書き方
自然数の配列が与えられ、その平均絶対偏差(Mean Absolute Deviation:MAD)を計算することが課題です。平均絶対偏差とは、各データ点と平均値の差(偏差)の絶対値を取ったものの平均であり、データのばらつき具合を測るための統計量の一つです。これを求めるためには、平均、分散、標準偏差に関する基礎知識が必要となります。
平均絶対偏差を計算するには、以下の手順に従います。
平均を計算する
絶対偏差を計算する
計算したすべての偏差を合計する
公式を適用する

入力例と出力例
入力
arr[] = { 34,21,56,76,45,11}
出力
mean absolute deviation is : 18.5
入力
arr[] = {10, 15, 15, 17, 18, 21}
出力
mean absolute deviation is : 2.66
プログラムの処理手順
配列の要素を入力する
配列の平均を計算する
次の式を使って各要素の偏差を計算する
Sum = Sum + abs(arr[i] - Mean(arr, n))偏差の合計を配列の要素数で割り、平均絶対偏差を求める
(abs(arr[0] – mean) + abs(arr[1] – mean) + … + abs(arr[n-1] – mean)) / n
アルゴリズム
開始
ステップ1→ 平均を計算する関数を宣言する
float mean(float arr[], int size)
float型の sum = 0 を宣言
int i = 0、i < size、i++ の条件でループ
sum = sum + arr[i] を設定
ループ終了
sum / size を返す
ステップ2→ 偏差を計算する関数を宣言する
float deviation(float arr[], int size)
float型の sum = 0 を宣言
int i = 0、i < size、i++ の条件でループ
sum = sum + abs(arr[i] - mean(arr, size)) を設定
ループ終了
sum / size を返す
ステップ3→ main() 関数内
float arr[] = { 34,21,56,76,45,11} を宣言
int size = sizeof(arr) / sizeof(arr[0]) を宣言
deviation(arr, size) を呼び出す
終了
コード例
#include <bits/stdc++.h>
using namespace std;
//mean関数を使って平均を計算する
float mean(float arr[], int size){
float sum = 0;
for (int i = 0; i < size; i++)
sum = sum + arr[i];
return sum / size;
}
//平均絶対偏差を計算する
float deviation(float arr[], int size){
float sum = 0;
for (int i = 0; i < size; i++)
sum = sum + abs(arr[i] - mean(arr, size));
return sum / size;
}
int main(){
float arr[] = { 34,21,56,76,45,11};
int size = sizeof(arr) / sizeof(arr[0]);
cout<<"mean absolute deviation is : "<<deviation(arr, size);
return 0;
}
出力
上記のコードを実行すると、次の出力が得られます。
mean absolute deviation is : 18.5
コードの解説
このプログラムでは、まず mean() 関数が配列内の全要素を合計し、要素数で割ることで平均値を求めます。次に deviation() 関数が、各要素と平均値の差の絶対値を順に合計し、その合計を要素数で割ることで平均絶対偏差を計算します。最後に main() 関数で配列とそのサイズを定義し、deviation() 関数を呼び出して結果を標準出力に表示します。計算量は O(n) であり、要素数が増えても効率的に処理できる点が特徴です。
-
C++で十二面体の表面積を計算するプログラム
十二面体とは? 「十二面体(dodecahedron)」という言葉は、ギリシャ語に由来しています。「dodeca」は「12」、「hedron」は「面」を意味します。幾何学における十二面体とは、12枚の平面から構成される3次元の正多面体(プラトンの立体)のことです。 他の立体図形と同様に、十二面体にも以下のような特徴的な性質があります。 20個の頂点 30本の辺 12枚の正五角形の面(五角形は5つの辺を持つ多角形) 以下は十二面体の図です。 問題 一辺の長さが与えられたとき、その十二面体の表面積を求めるプログラムを作成します。ここでいう表面積とは、図形のすべての面が占める空間の総面積のこ
-
C++で学ぶクイックソート(QuickSort)の仕組みと実装方法
クイックソートとはクイックソート(Quicksort)は、比較に基づいて未ソートのリスト(配列)を並べ替えるソートアルゴリズムの一つです。「パーティション交換ソート(partition exchange sort)」とも呼ばれます。クイックソートは安定ソートではありません。これは、等しい値を持つ要素同士の相対的な順序が保持されないためです。ただし、配列に対してごくわずかな追加メモリだけで動作するため、メモリ効率に優れています。選択ソートと非常に似ていますが、常に最悪のパーティションを選んでしまうわけではない点が異なり、より洗練された形の選択ソートと捉えることもできます。クイックソートは最も効率