CPPのプログラム。俺自身学習中なので、どうぞご一緒に。
ちなみに、これはMS-DOS上で最小二乗法を計算するプログラムです。ファイルセーブなんかができます。めんどくさいので、ソースの説明は直接俺に聞いてください。コメントもあんま丁寧には書いていません。
ダメじゃん(>_<)
一部ホムペでうまく表示できてないです。iostream.hとmath.h、stdio.hなんかをインクルードしてください。
Text2.exe


text2.cpp

#include 
#include "xydata.h"
#include "saisyou2.h"

main()
{
    cout << "------------------------------------------------------" << endl
		 << "最小2乗法で推定式と誤差を計算するプログラムversion2.0" << endl
		 << "              6/NOV/2003  by 奈良裕樹                 " << endl
		 << "------------------------------------------------------" << endl;
	xydata xyd;//////クラスの宣言
	saisyou2 cal;////
	int e;
    cout << "ファイルからのデータ読み込みなら0、入力ならそれ以外を押して下さい" << endl;
	cin >> e;
	if (e == 0)
	{
		if (xyd.fileread(&xyd))
		{
			//ファイル処理の失敗
			return 0;
		}
           cal.kinji(&xyd);/////xydataのメンバ変数をポインタで渡している
	       cal.gosa(&xyd);
	}
	else
	{
		xyd.nyuryoku();////////////////メンバ関数呼び出し
        cal.kinji(&xyd);/////xydataのメンバ変数をポインタで渡している
	    cal.gosa(&xyd);
	    cout << "データ保存なら0、そうでなければそれ以外の数を入力して下さい" << endl;
	    cin >> e;
	    if (e == 0)
	    {
	       xyd.filesave(&xyd);
	       cout << "保存されました。" << endl;
	    }
	}
	return 0;


saisyou2.cpp

#include 
#include "xydata.h"
#include "saisyou2.h"
#include 

void saisyou2::gosa(xydata *xyd)
{
    double y,g[100];
    int i;
    cout << "推定式からの誤差はそれぞれ" << endl;
	for (i=0;i< xyd->imax ;i++)
	{
	    y = xyd->b * xyd->xdata[i] + xyd->a;
		g[i] = pow((y-xyd->ydata[i])*(y-xyd->ydata[i]),0.5);	
		cout << "(" << xyd->xdata[i] << "," << xyd->ydata[i] << ")---" << g[i] << endl;
	}
};
void saisyou2::kinji(xydata *xyd)/////class saisyou2のメンバ関数
{/////////xydataのメンバ変数をポインタとして受け取って処理
	double xs=0,ys=0,x2s=0,x,y,x2,xy,xys=0;
	int i;
	for (i=0;i< xyd->imax ;i++)
	{
		x = xyd->xdata[i];
		y = xyd->ydata[i];
		x2=x*x;
		xy=x*y;
		xs=xs+x;
		ys=ys+y;
		xys=xys+xy;
		x2s=x2s+x2;
	}
	xyd->b=(xyd->imax * xys - xs * ys)/(xyd->imax * x2s - xs * xs);
	xyd->a=(x2s * ys - xs * xys)/(xyd->imax * x2s - xs * xs);
	cout << "推定される式は" << endl;
	cout << "y=" << xyd->b << "x+" << xyd->a << endl;
}



saisyou2.h

class saisyou2 : public xydata////class saisyou2はclass xydataから派生
{
public:
	void kinji(xydata *xyd);
    void saisyou2::gosa(xydata *xyd);
};



xydata.h

#include 
#include "xydata.h"
#include 

int xydata::fileread(xydata *xyd)
{
    FILE *fp;
	char filename[20];
	cout << "ファイル名を入力して下さい" << endl;
	cin >> filename;
    if (!(fp = fopen(filename,"rb")))
	{
		//ファイルオープンに失敗
		cout << "ファイルオープンに失敗しました" << endl;
		return 1;
	}
	//ファイルオープンに成功
	fread(&xyd,sizeof(class xydata),1,fp);

	if (fclose(fp))
	{
	   //ファイルクローズに失敗
	    cout << "ファイルクローズに失敗しました" << endl;
		unlink("filename");
	   return 1;
	}
	 else
	   //ファイルクローズに成功
	   return 0;
}

int xydata::filesave(xydata *xyd)
{
	FILE *fp;
	char filename[20];
	cout << "ファイル名を入力して下さい" << endl;
	cin >> filename;
	if (!(fp = fopen(filename,"wb")))
	{
		//ファイルオープンに失敗
        cout << "ファイルオープンに失敗しました" << endl;
		return 1;
	}
	//ファイルオープンに成功

    if (fwrite(&xyd, sizeof(class xydata),1,fp) < 1)
	{
	   //書き込みエラー発生
		cout << "書き込みエラーが発生しました" << endl;
	   if (fclose(fp))
	      //ファイルクローズに失敗
          cout << "ファイルクローズに失敗しました" << endl;
	      unlink("filename");
	      return 1;
	 }

	if (fclose(fp))
	{
	   //ファイルクローズに失敗
       cout << "ファイルクローズに失敗しました" << endl;
	   unlink("filename");
	   return 1;
	}
	 else
	    return 0;
}


void xydata::nyuryoku()////class xydataのメンバ関数
{
	int i,h;
    do{
         cout << "データ数を入力(100個以内)" << endl;
	     cin >> imax;
	}while(imax > 100);
	for (i=0;i> xdata[i];
		cout << "y=";
		cin >> ydata[i];
	}
	do{
	for (i=0;i> h;
	if (h > imax)
	{
		cout << h <<"番目のデータはありません" << endl;
	}
	else if (h != 0)
	{
        cout << h <<"番目のxとyの組を入力" << endl;
		cout << "x=";
		cin >> xdata[h-1];
		cout << "y=";
		cin >> ydata[h-1];
	}
	}while(h != 0);
		
}


xydata.h

class xydata/////class xydataの記述
{
public:
	int imax;
	double a,b;
	double xdata[100],ydata[100];
	void nyuryoku();
	int fileread(xydata *xyd);
	int filesave(xydata *xyd);
};




TOP