Интерпретатор арифметических выражений - 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;
            }
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.154 из 5
Похожие ответы