📄 again.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 + -