0 / 0 / 0
Регистрация: 07.08.2020
Сообщений: 21
1

Калькулятор

03.09.2020, 22:54. Показов 234. Ответов 0

Author24 — интернет-сервис помощи студентам
C#
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
149
150
151
152
153
154
155
156
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApp127
{
    class RPN
    {
    static public double Calculate(string input)
        {
 
            {
                string output = GetExpression(input); 
                double result = Counting(output); 
                return result; 
            }
        }
 
        
        static private string GetExpression(string input)
        {
            {
                string output = string.Empty; 
                Stack<char> operStack = new Stack<char>(); 
 
                for (int i = 0; i < input.Length; i++) 
                {
                   
                    if (IsDelimeter(input[i]))
                        continue; 
 
                    
                    if (Char.IsDigit(input[i])) 
                    {
                        
                        while (!IsDelimeter(input[i]) && !IsOperator(input[i]))
                        {
                            output += input[i]; 
                            i++; 
 
                            if (i == input.Length) break; 
                        }
 
                        output += " "; 
                        i--; 
                    }
 
                    
                    if (IsOperator(input[i])) 
                    {
                        if (input[i] == '(') 
                            operStack.Push(input[i]); 
                        else if (input[i] == ')') 
                        {
                            
                            char s = operStack.Pop();
 
                            while (s != '(')
                            {
                                output += s.ToString() + ' ';
                                s = operStack.Pop();
                            }
                        }
                        else 
                        {
                            if (operStack.Count > 0) 
                                if (GetPriority(input[i]) <= GetPriority(operStack.Peek())) 
                                    output += operStack.Pop().ToString() + " "; 
 
                            operStack.Push(char.Parse(input[i].ToString())); 
 
                        }
                    }
                }
 
                
                while (operStack.Count > 0)
                    output += operStack.Pop() + " ";
 
                return output; 
            }
        }
 
        
        static private double Counting(string input)
        {
            {
                double result = 0; //Результат
                Stack<double> temp = new Stack<double>(); 
 
                for (int i = 0; i < input.Length; i++) 
                {
                    
                    if (Char.IsDigit(input[i]))
                    {
                        string a = string.Empty;
 
                        while (!IsDelimeter(input[i]) && !IsOperator(input[i])) 
                        {
                            a += input[i]; 
                            i++;
                            if (i == input.Length) break;
                        }
                        temp.Push(double.Parse(a)); 
                        i--;
                    }
                    else if (IsOperator(input[i])) 
                    {
                        
                        double a = temp.Pop();
                        double b = temp.Pop();
 
                        switch (input[i]) 
                        {
                            case '+': result = b + a; break;
                            case '-': result = b - a; break;
                            case '*': result = b * a; break;
                            case '/': result = b / a; break;
                            case '^': result = double.Parse(Math.Pow(double.Parse(b.ToString()), double.Parse(a.ToString())).ToString()); break;
                        }
                        temp.Push(result); 
                    }
                }
                return temp.Peek(); 
            }
        }
        static private bool IsDelimeter(char c)
        {
            if ((" =".IndexOf(c) != -1))
                return true;
            return false;
        }
        static private bool IsOperator(char с)
        {
            if (("+-/*^()".IndexOf(с) != -1))
                return true;
            return false;
        }
        static private byte GetPriority(char s)
        {
            switch (s)
            {
                case '(': return 0;
                case ')': return 1;
                case '+': return 2;
                case '-': return 3;
                case '*': return 4;
                case '/': return 4;
                case '^': return 5;
                default: return 6;
            }
        }
    }
}

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApp127
{
    class Program
    {
        static void Main(string[] args)
        {
            while (true) 
            {
                Console.Write("Введите выражение: "); 
                Console.WriteLine(RPN.Calculate(Console.ReadLine())); 
            }
        }
    }
}


Здравствуйте есть такой стек калькулятор как можно уменьшить размер кода а также добавить сюда валидацию ввода данных
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.09.2020, 22:54
Ответы с готовыми решениями:

калькулятор
здравствуйте))))дали задание сделать калькулятор хотелось бы самому разобраться в создание сего...

Калькулятор
Помогите пож. создать шестнадцатеричный калькулятор на Visual studio. Сделал сначала обычный...

калькулятор:)
Всем доброго времени суток) Нужно сделать строчный калькулятор на С#, выполняющий след. функции: +,...

калькулятор
Подскажите пожалуйста как реализовать программу “Калькулятор” в стиле ООП. В калькуляторе...

0
03.09.2020, 22:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.09.2020, 22:54
Помогаю со студенческими работами здесь

Калькулятор
Создать калькулятор выполняющий + -*/ у меня + работает, а остальные функции нет, хотя делала так...

Калькулятор
Только начинаю учить язык, до этого учил C++. Не пойму в чём ошибка в программе((( namespace...

Калькулятор
Вот сам код калькулятора... using System; using System.Collections.Generic; using...

Калькулятор
1.Как сделать, чтобы запятая не ставилась в самом начале ? 2.Как сделать, чтобы запятую можно было...

Калькулятор
Юзал поиск,подобного не нашел. Вообщем застрял на том,что не могу привязать кнопки...

Калькулятор
как сделать, чтобы калькулятор выполнял несколько действий подряд(2+2+2=6, а не 4, то есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru