「第4章 平均値と分散」Win32コンソールアプリケーション版
<岡本安晴「大学生のための心理学VC++プログラミング入門」>の第4章のサンプルプログラムのWin32版をVisual C++2008で作成した。プログラムファイルは圧縮ファイルとしてまとめた。圧縮ファイルはクリックしてダウンロードしたものをマウスの右ボタンでクリックして表示されるメニュから「解凍」あるいは「展開」を選んで解凍することができる。解凍したプログラムファイルはVisual C++2010でも開くことができる。
リスト4-1のWin32版(ファイル入出力版は後半に用意)
圧縮ファイルsample4_1win32.zip
#include "stdafx.h"
#include <iostream>
#include <cmath> // sqrt
などの使用のため
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
double x[100];
double c;
cout
<< "基準値= ";
cin
>> c;
int n = -1;
while (true) {
n++;
cout
<< "data-" << n+1
<< " = ";
cin
>> x[n];
if (x[n] < c) break;
}
if (n < 1) return
0;
double sum = 0.0, ssum = 0.0;
for (int i = 0; i
< n; i++){
sum
+= x[i];
ssum
+= x[i] * x[i];
}
cout
<< endl << "入力データ..." << endl;
for (int i = 0; i
< n; i++)
cout
<< "データ-"
<< i+1 << " = "
<< x[i] << endl;
double mean = sum / n;
double var = (ssum - n * mean * mean) / n;
double sd = sqrt(var);
double uvar = var * n / (n - 1.0);
double sd_uvar = sqrt(uvar);
cout
<< endl << "平均値= "
<< mean << endl;
cout
<< "分散= "
<< var << endl;
cout
<< "標準偏差= "
<< sd << endl;
cout
<< "不偏分散= "
<< uvar << endl;
cout
<< "不偏分散の平方根= " << sd_uvar << endl;
cout
<< endl << "何か文字を入力して終了。" << endl;
char ck;
cin
>> ck;
return 0;
}
リスト4-1のWin32版(ファイル入出力版):テキストファイルとして用意されたデータファイルから読み込み、計算結果をテキストファイルに出力するサンプルプログラム。
圧縮ファイルsample4_1win32f.zip
#include "stdafx.h"
#include <iostream>
#include <cmath> // sqrt
などの使用のため
#include <fstream> // ファイル入出力用のストリーム(クラス型)利用のため
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
cout
<< "入力ファイル名= ";
char fnm[200];
cin
>> fnm;
ifstream
fin;
fin.open(fnm);
if (fin.fail()){
cout
<< "入力ファイル設定エラー" << endl;
cout
<< "何か文字を入力して終了" << endl;
char ck;
cin
>> ck;
return 9;
}
cout
<< "出力ファイル名= ";
char fonm[200];
cin
>> fonm;
ofstream
fout;
fout.open(fonm);
fout
<< "入力ファイル..." << fnm << endl << endl;
double x[10000];
double c;
fin
>> c; // 入力データの終わりを示す基準値の設定
int n = -1;
while (true) {
n++;
fin
>> x[n];
if (x[n] < c) break; // 入力データの終わり
}
fin.close();
if (n < 1){
fout.close();
return 0;
}
double sum = 0.0, ssum = 0.0;
for (int i = 0; i
< n; i++){
sum
+= x[i];
ssum
+= x[i] * x[i];
}
fout
<< "入力データ..." << endl;
for (int i = 0; i
< n; i++)
fout
<< "データ-"
<< i+1 << " = "
<< x[i] << endl;
double mean = sum / n;
double var = (ssum - n * mean * mean) / n;
double sd = sqrt(var);
double uvar = var * n / (n - 1.0);
double sd_uvar = sqrt(uvar);
fout
<< endl << "平均値= "
<< mean << endl;
fout
<< "分散= "
<< var << endl;
fout
<< "標準偏差= "
<< sd << endl;
fout
<< "不偏分散= "
<< uvar << endl;
fout
<< "不偏分散の平方根= " << sd_uvar << endl;
fout.close();
cout
<< endl << "出力ファイル<"
<< fonm << ">が保存されました" << endl;
cout
<< endl << "何か文字を入力して終了。" << endl;
char ck;
cin
>> ck;
return 0;
}
上のファイル入出力サンプルプログラム用入力ファイル例:1番目の値を基準値として、それより小さい値が読み込まれるとデータの終わりと判定される。
-1
1
10
2
9
3
8
4
7
5
6
-9
上のデータファイルを入力ファイルとしたときの出力ファイルは以下のようになる。
入力ファイル...Data.txt
入力データ...
データ-1 = 1
データ-2 = 10
データ-3 = 2
データ-4 = 9
データ-5 = 3
データ-6 = 8
データ-7 = 4
データ-8 = 7
データ-9 = 5
データ-10 = 6
平均値= 5.5
分散= 8.25
標準偏差= 2.87228
不偏分散= 9.16667
不偏分散の平方根= 3.02765