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

📄 again.cpp

📁 实现节能发电调度的机组排序
💻 CPP
字号:
#include <vector>
#include <string>
#include <iostream>
#include <fstream>
#include <ctype.h>
using namespace std;

class Psta  
{
public:
	Psta();
	//Psta(double sk, string sname, double smax, double smin);
	virtual ~Psta();
	void set_value(double sk, string sname, double smax, double smin);    //设定值
	void show_name();             //机组名
	void show_contrib();          //出力
	bool set_contrib(double &scon, bool whether_max, bool whether_min, double &dx);       //设定出力
	void set_contrib_min();
	void set_contrib_max_dx(double dx);
	bool compare_max(double target);     //是否越上限
	bool compare_min(double target);     //是否越下限
    bool operator >(const Psta &P);      // 大于号重载
	friend int print_result(vector<Psta> &vec, ofstream &outfile, bool whe);     //结果显示
    friend void bubble(vector<Psta> &vec, double &sum);
private:
	double min;
	double max;
	double k;               //平均煤耗
	double contrib;         //出力
    string name;            //机组名
};

bool Psta::operator >(const Psta &P)
{
	return k>P.k?1:0;                 //大于P为真
}

Psta::Psta()
{
	k=0; name="";max=0;min=0;contrib=0;
}


/*Psta::Psta(double sk, string sname, double smax, double smin)
{
	k=sk; name=sname;max=smax;min=smin;contrib=0;
}*/

void Psta::set_value(double sk, string sname, double smax, double smin)
{
	k=sk; name=sname;max=smax;min=smin;contrib=0;
}

Psta::~Psta()
{
}

void Psta::show_name()
{
	cout<<name<<" "<<k<<" "<<max<<" "<<min<<" "<<contrib<<'\n';
}

void Psta::show_contrib()
{
	cout<<contrib<<'\n';
}

void Psta::set_contrib_min()
{
	contrib=min;
}

void Psta::set_contrib_max_dx(double dx)
{
	contrib=max-dx;
}

bool Psta::set_contrib(double &scon, bool whether_max, bool whether_min, double &dx)
{
	if(whether_max)
	{   
		contrib=max;
		//cout<<name<<"'s Contribution is "<<contrib<<"  \n";
	    scon=scon-max;
    	return true;
	}
	else
	{
		if(!whether_min)
		{	
			contrib=scon;
			scon=0;
    		return true;
		}
		else 
		{
			dx=min-scon;
			return false;
		}
	}
}

bool Psta::compare_max(double target)
{
	return max<=target?1:0 ;             //机组最大功率小于给定功率为1
}

bool Psta::compare_min(double target)
{
	return min>target?1:0;            //机组最小功率大于给定功率为1
}

void bubble(vector<Psta> &vec, double &sum)
{
	for(int ix=0; ix<vec.size(); ++ix)
	{
		for(int jx=ix+1; jx<vec.size(); ++jx)
		{
			if(vec[ix]>vec[jx])
			{
				swap( vec[ix],vec[jx]);
			}
		}
	}
    for(ix=0; ix<vec.size();++ix)
		sum+=vec[ix].max;
}

void swap(Psta &p1, Psta &p2)
{
	Psta temp;
	temp = p1;
	p1 = p2;
	p2 = temp;
}
void initialization(vector<Psta> &vec, ifstream &infile, double & _POWER)
{
	double k, max, min;
	string name;
	Psta P;
	if (!infile)
	{
		cerr<<"The in-file is not existed!";
	}
	else
	{
		infile>>_POWER;
		while( infile>>name)
		{
			infile >>k>>max>>min;
			P.set_value(k,name,max,min);
			vec.push_back(P);
		}
	}
}

int print_result(vector<Psta> &vec, ofstream &outfile, bool whe)
{
	if(!outfile)
	{
		cerr<<"Unable to save session data!\n";
		return 0;
	}
	else
	{
		if(whe)
		{
	    	for(int ix=0; ix<vec.size(); ++ix)
			{
	    		outfile <<(ix+1)<<":   "
	    			    <<vec[ix].name<<"   "
		    		    <<vec[ix].contrib<<"   "
		    			<<vec[ix].max<<"   "
		    			<<vec[ix].min<<"   "<<'\n';
		    	cout <<(ix+1)<<":   "
		    		 <<vec[ix].name<<"   "
			    	 <<vec[ix].contrib<<"   "
			         <<vec[ix].max<<"   "
			    	 <<vec[ix].min<<"   "<<'\n';
			}
		}
		else 
		{
			outfile<<"The needed power is too large! And every power station should run at its max load! \n";
			return 0;
		}
	}
}

bool Display(vector<Psta> &vec, double scon, double &sum)
{
	double dx=0;
	double temp=0;
	if(sum>=scon)
	{
	    for( int ix=0; ix<vec.size(); ix++)
		{
    		if(scon!=0)
			{
    			if(!(vec[ix].set_contrib(scon, vec[ix].compare_max(scon), vec[ix].compare_min(scon),dx)))
				{
    				vec[ix].set_contrib_min();
    				vec[ix-1].set_contrib_max_dx(dx);
    				dx=0;
    				scon=0;
				}
			}
    		else
    			ix=vec.size();
		}
		return 1;
	}
	else
	{
		cerr<<"The needed power is too large! And every power station should run at its max load! \n";
		return 0;
	}
}

int main()
{
	double _POWER;
	double sum=0;
    ofstream outfile("out.txt");
	ifstream infile("data_in.txt");
	vector<Psta> vec;
	initialization(vec, infile, _POWER);
	bubble(vec,sum);
	print_result(vec, outfile, Display(vec, _POWER,sum));
    return 0;
}

⌨️ 快捷键说明

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