Анализатор вводимой строки с целью вычислить введенное математическое выражение - C#
Формулировка задачи:
Привет! Пишу для себя простенький мат анализатор вводимой строки с целью вычислить введенное математическое выражение. Найденные мною синтаксичесические анализаторы большие и страшные. Он еще не готов, но ошибки не дают продолжить.
Свои действия прокоментировал, если кому не понятен смысл моих телодвижений. Собственно проблемы.
1. Не могу вывести одно значение массива операторов operatsS. Если выводить весь массив на экран показывает корректно.
2. Оператор Math.Pow ругается что нельзя неявно преобразовать доубле в инт (он не работает с инт?). Если создавать массив доубле, то проблема пропадает, но появляется 3.
3. Переменной Result не присвоено значение...?? (если заранее присвоить переменной 0, то независимо от всего, выводит значение 0.
Просьба камнями не кидать. Если есть решение получше - предложите) Спасибо.
static void Main(string[] args) { Console.WriteLine("Введите математическое выражение"); string Nach = Console.ReadLine(); string[] operandS = Nach.Split('+', '-', '*', '/', '^'); получаю массив операндов. string[] operatsS = Nach.Split('0', '1', '2', '3', '4', '5', '6', '7', '8', '9'); получаю массив операторов. int[] operandI = operandS.Select(s => int.Parse(s)).ToArray(); конвертирую массив в цифры. int Result; switch (operatsS[0]) начинаю прописывать логику. { case "*": Result = operandI[0] * operandI[1]; break; case "/": Result = operandI[0] / operandI[1]; break; case "^": Result = Math.Pow(operandI[0], operandI[1]); break; } Console.WriteLine(Result); Console.ReadLine(); }
Решение задачи: «Анализатор вводимой строки с целью вычислить введенное математическое выражение»
textual
Листинг программы
namespace ConsoleApplication { class Program { static void Main(string[] args) { Console.WriteLine("Введите математическое выражение"); string Nach = Console.ReadLine(); string[] operandS = Nach.Split('+', '-', '*', '/', '^'); //получаю массив операндов. string[] operatsS = Nach.Split(new char[] {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}, StringSplitOptions.RemoveEmptyEntries); //получаю массив операторов. здесь лучше пропускать пустые значения int[] operandI = operandS.Select(s => int.Parse(s)).ToArray(); // конвертирую массив в цифры. double Result = 0; switch (operatsS[0]) // начинаю прописывать логику. { case "*": Result = operandI[0] * operandI[1]; break; case "/": Result = (double)operandI[0] / (double)operandI[1]; break; case "^": Result = Math.Pow(operandI[0], operandI[1]); break; } Console.WriteLine(Result); Console.ReadLine(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д