void File_Operate::Fileoperate()
{
	Scan Sc;    
    Print Put;  
    Calculation Ca;
	
	ifstream infile; 
    ofstream outfile;
    
    //打开文件 
    infile.open(getsfile.c_str(),ios::in); 
    outfile.open(putsfile.c_str(),ios::out);
    	
    string get_str;
    	
    while(!infile.eof()) //未处理到文件尾 
    {
    	getline(infile,get_str); //读入数据 
    		
    	queue<string> que;
    		
    	que = Sc.ToStringQueue(get_str);
    		
    	double result=0;
    		
    	result = Ca.carryout(que);
    		
    	outfile << result << endl;
    }
    	
    //关闭文件 
    infile.close();
    outfile.close();
}
Exemple #2
0
int main(int argc, char* argv[])
{

	string input;	//接收键盘输入的表达式 	
	Scan sc;
	Print pr;
	Calculation cal;
	queue<string> q;
	string res;
	
	if (argc == 2)
	{
		input = argv[1];
		q = sc.toStringQueue(input);
		sc.clearQue();
		pr.print(pr.getInfomation(sc.getFlag(), cal.getResult(q)));
	}
	else if (argc == 3 && strcmp(argv[1], "-a") == 0)
	{
		input = argv[argc - 1];
		q = sc.toStringQueue(input);
		pr.printQue(q);
		sc.clearQue();
		pr.print(pr.getInfomation(sc.getFlag(), cal.getResult(q)));
	}
	else if (argc == 4 && strcmp(argv[1], "-f") == 0)
	{
		sc.read(argv[2], argv[3]);
		
	}

	return 0;
}
Exemple #3
0
int main(int argc, char* argv[])
{
	bool flag = false;
	stack <double>result;
	string character;
	queue<string>que_character;
	Scan INPUT;
	//Print OUTPUT;
	Calculation CAL;
	Calculation RES;
	
	character = argv[1];
	
	if(character == "-a")
	{
		character = argv[2];
		flag = true;
	}
	if(flag)
	{
		cout << character << "=";
	}
	
	que_character = INPUT.ToStringQueue (character);
	result = CAL.Separate (que_character);
	RES.CoutResult(result);
	//OUTPUT.print(que_character);
	return 0;
}
Exemple #4
0
int main(int argc, char* argv[])
{
	Scan in;
	
	Calculation cal;
	
	string input;
	
	//将传入表达式赋给input 
	if(strcmp(argv[1], "-a") == 0)
	{
		cout << argv[2] << "= ";
		input = argv[2];
	} 
	
	else
	{
		input = argv[1];
	}
	
	//首先判断输入字符串中数字串长度不超过10位
	if (!in.checkNumberLen(input))
	{
		return 0;
	}
	
	cal.getQueue(in.ToStringQueue(input));

	return 0;
}
Exemple #5
0
//以文件方式输出结果
void Print::ToPrintIs_f(string sText_txt, string sResult_txt) 
{
	
	ifstream in;
	ofstream out;

	//打开文件
	in.open(sText_txt.c_str(), ios::in);
	out.open(sResult_txt.c_str(), ios::out);
	
	while (!in.eof())
	{
		Scan scan;
		Calculation calculate;
		string sExperssion;
		
		//从sText_txt路径获取数据
		getline(in, sExperssion, '\n');

		//拆分表达式
		scan.ToStringQueue(sExperssion);

		
		//计算表达式的值
		calculate.ToCalculate(scan.q);

		//在sResult_txt路径下输出结果
		out << calculate.m_dResult << endl;
	}

	//关闭文件
	in.close();
	out.close();
}
Exemple #6
0
int main(int argc, char* argv[])	//用cmd传参的方法输入数据
{

	if (strcmp(argv[1],"-f") == 0)	//"-f" 用文件输入输出
	{
		freopen(argv[2],"r",stdin);
		freopen(argv[3],"w",stdout);
		string str;
		while (cin >> str)
		{
			
			/*定义在循环内,缩小变量作用域,代替每次的初始化,避免造成多次输出留下问题 */ 
			Scan get_scanf;			
			Print put_printf;
			get_scanf.ToStringQueue(str);
			CheckInput *ck = new CheckInput;
			get_scanf.ErrorType += ck->CheckIfCorrect(get_scanf.que); //存入输入错误类型
			if (get_scanf.ErrorType == "")					//判断输入是否合法,无错误类型则合法
			{
				Calculation *cal = new Calculation;
				cal->Calculate(get_scanf.que);				//计算
				put_printf.PrResult(cal->result);
				delete  cal;
			}
			else
			{
				put_printf.PrErTpye(get_scanf.ErrorType);	//输出计算结果
			}
			
			str = "";
			delete ck;
		}
	}
Exemple #7
0
Verify::Verify() {
  District_number = 0;
  Count = 0;
  Calculation cal;
  Permutation_number = cal.factorial(Degree);
  for (int i = 1; i <= Degree; i++) {
    Permutation_sequence.push_back(i);
  }
}
Exemple #8
0
vector<int> Verify::retrieve_permutation(const string& str) {

  string strng;
  Calculation cal;
  Utility util;
  unsigned int index = str.length() - 2;
  int size = table_list.tables[index].size();
  for(int i = 0; i < size; i++) {
    strng = table_list.tables[index][i];
    if(cal.find_str(strng, str)) {
      return util.string2permutation(cal.extract_powvs_string(strng, str.length()));
    }
  }
  cout << "*** Cannot find the permutation: " << str << endl;
  exit(-1);
}
Exemple #9
0
//以非文件方式输出结果
void Print::ToPrintIsNot_f(string sInput, bool bIs_a)
{
	Scan scan;
	Calculation calculate;

	//拆分表达式
	scan.ToStringQueue(sInput);

	//计算表达式的值
	calculate.ToCalculate(scan.q);

	if (bIs_a)
	{
		cout << sInput << "= ";
	}
	cout << calculate.m_dResult << endl;
}
Exemple #10
0
int main(int argc, char* argv[])
{
	string input;
	string output;

	int temp = 0;//判断是否有“-a”
	int i;

	Scan sca;
	Calculation calcul;

	for (i = 1; i < argc; i++)
	{
		input = argv[i];
		if (input == "-a")
		{
			temp = 1;
			continue;
		}

	}

	sca.ToStringQueue(input);
	queue<string>*q = sca.GetQueue();//定义队列指针接收队列

	//如果数字符合要求才运算 
	if (sca.m_ijudge == 0)
	{
		if (temp == 1)
		{
			cout << input << "= ";
		}
		calcul.trans(q);
		double result = calcul.count();
		cout << result << endl;

	}
	else
	{
		return 0;
	}

	system("pause");
	return 0;
}
int main(int argc , char *argv[])
{
	Scan scan;
	//Print print;
	Calculation calculation;
	string input;
	//cin >> input;
	
	/*根据argc的值对input赋值*/
	if(argc == 2)
	{
		input = argv[1];
	}
	else
	{
		input = argv[2];
	}
	
	scan.ToStringQueue (input); /*将input传入Scan进行处理*/
	calculation.GetQueue(scan.ReturnQueue()); /*将处理后的queue传入Calculation*/
	calculation.Change(scan.ReturnQueue()); /*将传入的queue进行后缀转化*/

	//calculation.Ans();
	
	/*根据argc的值进行不同输出*/
	if(argc == 2)
	{
		calculation.Ans();
	}
	else
	{
		cout << argv[2] << "= ";
		calculation.Ans();
	}

	//if(scan.IsError() == false)
	//	print.print(scan.ReturnQueue());
	//else
		//cout << "超过十位啦!";

	return 0;
}
Exemple #12
0
int main(int argc, char** argv)
{
    string input;
    string parameter;
    double result;
    queue<string> seperatedExpression;
    Scan scan;
    Calculation cal;
    Print print;
    
    parameter = argv[1];
    
    cout << setprecision(precision);
    
    if (parameter == "-a")                                                //输入参数为 -a 的情况,输出表达式 
    {
		input = argv[2];
	    
	    seperatedExpression = scan.ToStringQueue(input);
	    
		if (seperatedExpression.front() == "ERROR")                       //若返回字符串为 ERROR 则报错并退出循环 
		{
		    print.PrintLengthError();
		    return 0;
		}
		
		result = cal.Calculate(seperatedExpression);
		print.PrintA(input,result);
	}
	
	else if (parameter == "-f")                                          //输入参数为 -f 的情况,对文件进行读写 
    {
		if (scan.Open(argv[2]) && print.Open(argv[3]))
		{
			while (!scan.IsEOF())                                        //循环读入每行,计算和写入文件 
			{
				result = 0;
				while(!seperatedExpression.empty())
				{
					seperatedExpression.pop();
				}
				
				scan.Read();
				
				if (scan.GetInput() == "")
				{
					continue;
				}
				
				seperatedExpression = scan.ToStringQueue(scan.GetInput());
				
				if (seperatedExpression.front() == "ERROR")
				{ 
				    print.PrintLengthError();
				    continue;
				}
				
				result = cal.Calculate(seperatedExpression);
				print.PrintF(result);
			}
			
			scan.Close();
			print.Close();
		}
		else
		{
			cout << "Open file failed.";
			return 0;
		}
	}
	
	else                                                                 //无参数情况 
	{
		input = argv[1];
	    seperatedExpression = scan.ToStringQueue(input);
	    
		if (seperatedExpression.front() == "ERROR")
		{ 
		    print.PrintLengthError(); 
		    return 0;
		}
		
		result = cal.Calculate(seperatedExpression);
		print.DefaultPrint(result);
	}
	
    return 0;
}
Exemple #13
0
int main()
{
    bool Exit = false;

while (Exit == false){

    Move a;
    Move b;

    string User1;
    int num1;
    string User2;
    int num2;
    int counter=1;
    bool LinCom=false;
    vector <int> Played;
    int WhoMove=1;
    int Lim;
    EuclideanAlgorithm tester;

    User1 = a.User_Input(WhoMove);
    num1 = a.Num_Played(User1);
    Played.push_back(num1);


    WhoMove++;

    User2 = b.User_Input(WhoMove);
    num2 = b.Num_Played(User2);
    Played.push_back(num2);

    WhoMove++;

    Calculation calc1;

    if (tester.GCD(num1, num2) == 1){
        Lim=calc1.Limit(Played);

    }else{
        cout << "Why would you start off the game with two numbers that are not relatively \ncoprime?  I'll set the limit to 300 just to be nice ;)" << endl;
        Lim=300;
        Played.push_back(200);

    }

    cout << "All numbers greater than " << Lim << " have been eliminated." << endl << endl;

    vector <int> Legal = calc1.Legal(Played, Lim);
    cout << "Remaining numbers:  ";
    for (vector<int>::iterator it = Legal.begin(); it != Legal.end(); ++it) {
        if (it==Legal.end()-1){
            cout << ' ' << *it << "." << endl;
        }else{
        cout << ' ' << *it << ", ";
        }
    }


    /*cout << "THIS IS A TEST" << endl;

    vector <int> F;
    F.push_back(15);
    F.push_back(11);
    F.push_back(8);

    vector <int> E = calc.Legal(F, 80);
    cout << "Remaining numbers:  ";
    for (vector<int>::iterator it3 = E.begin(); it3 != E.end(); ++it3) {
        if (it3==E.end()-1){
            cout << ' ' << *it3 << "." << " Size of "<< E.size() << endl;
        }else{
        cout << ' ' << *it3 << ", ";
        }
    }*/
        cout << "Played Numbers:\t";
        for (vector<int>::iterator it3 = Played.begin(); it3 != Played.end(); ++it3) {
        if (it3==Played.end()-1){
            cout << ' ' << *it3 << "." << endl;
        }else{
        cout << ' ' << *it3 << ", ";
        }
    }

    cout << endl;


        if (calc1.Game_Over(Legal, WhoMove)==true){
        cout << "Play again? (Y or N)" << endl;
        string Playing1;
        cin >> Playing1;
        if (Playing1 == "N"){
            Exit = true;
        }
    }

vector <int> TLegal = Legal;

    Calculation calc;


while (calc.Game_Over(TLegal, WhoMove)==false){

    User1 = a.User_Input(WhoMove);
    num1 = a.Num_Played(User1);




    if (calc.MoveLegal(TLegal, num1)==true){

    Played.push_back(num1);
    double Lim=calc.Limit(Played);

    cout << "All numbers greater than " << Lim << " have been eliminated." << endl;
    cout << endl;

    TLegal = calc.Legal(Played, Lim);
    cout << "Remaining numbers:  ";

    for (vector<int>::iterator it = TLegal.begin(); it != TLegal.end(); ++it) {
        if (it==TLegal.end()-1){
            cout << ' ' << *it << "." << endl;
        }else{
        cout << ' ' << *it << ", ";
        }
    }

        cout << "Played Numbers:\t";

        for (vector<int>::iterator it3 = Played.begin(); it3 != Played.end(); ++it3) {
        if (it3==Played.end()-1){
            cout << ' ' << *it3 << "." << endl;
        }else{
        cout << ' ' << *it3 << ", ";
        }
    }


    WhoMove++;
    if (calc.Game_Over(TLegal, WhoMove)==true){
        cout << "Play again? (Y or N)" << endl;
        string Playing;
        cin >> Playing;
        if (Playing == "N"){
            Exit = true;
        }
    }
   // }else{
     //   cout << "Illegal move:  Try again " << endl;
    //}


}else{
bool ModelValidator::isValid(const Calculation& calculation, bool allowDefaults/* = false*/)
{
	RETURN_IF_UID_NOT_VALID(calculation.GetUID(), "Calculation UID");
	RETURN_IF_STR_EMPTY(calculation.GetDescription(), "Calculation Description");

	RETURN_IF_STR_EMPTY(calculation.GetCodeValue(), "Calculation Code Value");
	RETURN_IF_STR_EMPTY(calculation.GetCodeMeaning(), "Calculation Code Meaning");
	RETURN_IF_STR_EMPTY(calculation.GetCodingSchemeDesignator(), "Calculation Coding Scheme Designator");

	for (CalcResultVector::const_iterator iter = calculation.GetCalculationResultCollection().begin(); iter < calculation.GetCalculationResultCollection().end(); iter++)
		RETURN_IF_NOT_VALID1(*iter, allowDefaults, "Calculation Result is invalid");

	for (ReferencedCalcVector::const_iterator iter = calculation.GetReferencedCalculationCollection().begin(); iter < calculation.GetReferencedCalculationCollection().end(); iter++)
		RETURN_IF_NOT_VALID1(*iter, allowDefaults, "Referenced Calculation is invalid");

	for (ReferencedGeometricShapeVector::const_iterator iter = calculation.GetReferencedGeometricShapeCollection().begin(); iter < calculation.GetReferencedGeometricShapeCollection().end(); iter++)
		RETURN_IF_NOT_VALID1(*iter, allowDefaults, "Referenced Geometric Shape is invalid");

	if (!allowDefaults)
	{
		RETURN_IF_STR_EMPTY(calculation.GetCodingSchemeVersion(), "Calculation Coding Scheme Version");
		RETURN_IF_STR_EMPTY(calculation.GetMathML(), "MathML");
		RETURN_IF_STR_EMPTY(calculation.GetAlgorithmName(), "AlgorithmName");
		RETURN_IF_STR_EMPTY(calculation.GetAlgorithmVersion(), "AlgorithmVersion");
	}

	return true;
}