using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace SimpleCalc
{
public class Calculate
{
#region Переменные
private string lineLog = ""; //переменная для ведения лога
private string[] listOperatorsd = { "+", "-", "/", "*" }; //виды действий над числами
private float answer = 0; //конечный результат
private List<string> addChange = new List<string>(); //коллекция действий
private FormCalculate frm; //форма калькулятора
private string error=""; //переменная для ошибок
#region Глобальные
public string LineLog { get { return lineLog; } }
#endregion Глобальны
#endregion Переменные
public Calculate(FormCalculate Frm)
{
this.frm = Frm; // передаем форму
}
public void ChoiceMethod(string Tag)
{
addChange.Add(Tag); //добавляем действие в класс
}
public string Count()
{
answer=0;
float num = 0;
lineLog = "";
string strAction = "";
int count = addChange.Count;
try
{
//записываем первой число в качестве ответа
answer = Convert.ToSingle(addChange[0]);
//лог
lineLog += answer.ToString();
}
catch (System.Exception err)
{
//если возникают ошибки, ловим
}
for (int i = 1; i < count; i++)
{
if ((count - i) > 1)
{
//распознаем действие
strAction = defineArrayItemOperator(addChange[i]);
//перекидываем на следующее число
i++;
}
if (defineArrayItemNum(addChange[i]))
{
//обрабатываем текстовый формат в число
num = Convert.ToSingle(addChange[i]);
}
//выполняем функцию расчета
answer = action(num, strAction);
lineLog += " " + strAction + " " + num;
}
//лог
lineLog += " = " + answer.ToString();
//очищаем коллекцию действий
addChange.Clear();
//передаем переменную в форму
return answer.ToString();
}
private bool defineArrayItemNum(string tag)
{
/*
* Функция, которая определяет, что строка является числом или нет
* */
bool ifNum = false;
float number = 0;
try
{
number = Convert.ToSingle(tag);
ifNum = true;
}
catch(System.Exception err)
{
error = err.ToString();
ifNum = false;
}
return ifNum;
}
private string defineArrayItemOperator(string tag)
{
/*
* Проверям, есть ли в нашем списке подходящее действие над числом
* */
string oper = "";
foreach (string list in listOperatorsd)
{
if (tag == list)
{
oper = list;
break;
}
else
{
oper = "";
}
}
return oper;
}
private float action(float num, string action)
{
/*
* Выполняем операцию над числом
* */
if (action != "")
{
switch (action)
{
case "+":
{
answer += num;
break;
}
case "-":
{
answer -= num;
break;
}
case "/":
{
answer /= num;
break;
}
case "*":
{
answer *= num;
break;
}
}
action = "";
}
return answer;
}
}
}