Как написать простой калькулятор ч.2, листинг 1

 

Листинг 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
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;
}
}
}
 

Добавить комментарий