⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 application4.cpp

📁 对于特定长度的高速公路
💻 CPP
字号:
#include <iostream>
#include <fstream>
using namespace std;

class Point
{
	public:
		double x,y;
};

class Line
{
	public:
		double m, b;
};

class Linear_regress
{
	private:
		Point* fit_pts;
		Line fit_line;
		int num_fit_pts;


	public:
		void perform_regression(Point*, int, int);
};

class Traffic
{
	private:
		enum {MAX_NUM_ACCID_PTS=200};
		Point accid_pts[MAX_NUM_ACCID_PTS];
		int index_at_max_accid, num_accid_pts;
		Linear_regress& regression_reference;
	public:
		Traffic(Linear_regress&);
		void read_data();
		void find_index_at_max_accid();
		void calc_lines();
};

void Linear_regress::perform_regression(Point* array_beginning, 
int low_subscript, int high_subscript)
{
	double c, d, e, f, n;
	int i;

	c=d=e=f=0.0;

	num_fit_pts=high_subscript-low_subscript+1;
	fit_pts=array_beginning+low_subscript;

	for (i=0; i<num_fit_pts; i++)
		{
		c += fit_pts[i].x;
		d += fit_pts[i].y;
		e += fit_pts[i].x*fit_pts[i].x;
		f += fit_pts[i].x*fit_pts[i].y;
		}

	n = num_fit_pts;
	fit_line.m = (n*f - c*d)/(n*e - c*c);
	fit_line.b = (d*e - c*f)/(n*e - c*c);
    
	cout<<"The best fit line:"<<endl<<"   m="<<fit_line.m<<endl<<
			"   b="<<fit_line.b<<endl<<endl;

}

Traffic::Traffic(Linear_regress& regress_ref_var)
            : regression_reference (regress_ref_var), 
index_at_max_accid(0), num_accid_pts(0)
{
	int i;
	for (i=0; i<MAX_NUM_ACCID_PTS; i++)
		{
		accid_pts[i].x=0;
		accid_pts[i].y=0;
		}
}

void Traffic::read_data()
{
	int i;

	ifstream infile(".\\BESTLINE.DAT");

	i=0;
	do
		{
		infile>>accid_pts[i].x;
		infile>>accid_pts[i].y;
		i++;
		}   while (!infile.eof());

	num_accid_pts = i-1;
}


void Traffic::find_index_at_max_accid()
{
	int i;
	double max;

	max = accid_pts[0].y;
	for (i=1; i<num_accid_pts; i++)
		{
		if (accid_pts[i].y >= max)
			{
			max = accid_pts[i].y;
			index_at_max_accid = i;
			}
		}

}

void Traffic::calc_lines()
{
	cout<<"Line before maximum accidents."<<endl;
	regression_reference.perform_regression(accid_pts, 0, index_at_max_accid);

	cout<<"Line after maximum accidents."<<endl;
	regression_reference.perform_regression(accid_pts, index_at_max_accid, num_accid_pts-1);
}

int main ( )
{
	Linear_regress	regression_object;
	Traffic		monthly_traffic(regression_object);

	monthly_traffic.read_data();
	monthly_traffic.find_index_at_max_accid();
	monthly_traffic.calc_lines();

	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -