Интерпретатор арифметических выражений - C#
Формулировка задачи:
Как сделать калькулятор который мог бы вычислять математические выражения. Например, a+b*(i/2-m)
Программа должна воспринимать любые символы и спрашивать у пользователя их значение. Поделитесь пожалуйста примерами.
Решение задачи: «Интерпретатор арифметических выражений»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace OPN_Calc { class Program { static void Main(string[] args) { Console.Write("Введите выражение: "); string exp = Console.ReadLine(); Console.WriteLine("Ваше выражение в ОПН выглядит так: " + GetExp(exp)); Console.ReadKey(); } static private string GetExp(string str) { string outString = ""; Stack<char> operStack = new Stack<char>(); for (int i = 0; i < str.Length; i++) { if (Char.IsDigit(str[i])) outString += str[i]; else { if (str[i] == ' ') continue; if (IsPerem(ch)) char per1 = zapros(ch); static bool IsPerem(char ch) { if ("abcdi.....xyz".)IndexOf(с) != -1)) return true; return false; } static char zapros(char ch) { Console.Write("Значение переменной {0}:" , ch); return Console.ReadLine(); } else if (IsDelim(str[i])) { if (operStack.Count > 0) if (GetPriority(str[i]) <= GetPriority(operStack.Peek())) outString += operStack.Pop(); operStack.Push(str[i]); } else if (str[i] == '(') operStack.Push(str[i]); else if (str[i] == ')') { char s = operStack.Pop(); while (s != '(') { outString += s; s = operStack.Pop(); } } } Console.WriteLine(outString); } while (operStack.Count > 0) outString += operStack.Pop(); return outString; } static private bool IsDelim(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; } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д