Интерпретатор арифметических выражений - C#

Узнай цену своей работы

Формулировка задачи:

Как сделать калькулятор который мог бы вычислять математические выражения. Например, a+b*(i/2-m) Программа должна воспринимать любые символы и спрашивать у пользователя их значение. Поделитесь пожалуйста примерами.

Решение задачи: «Интерпретатор арифметических выражений»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace OPN_Calc
  7. {
  8.     class Program
  9.     {
  10.         static void Main(string[] args)
  11.         {
  12.             Console.Write("Введите выражение: ");
  13.             string exp = Console.ReadLine();
  14.  
  15.             Console.WriteLine("Ваше выражение в ОПН выглядит так: " + GetExp(exp));
  16.             Console.ReadKey();
  17.         }
  18.  
  19.         static private string GetExp(string str)
  20.         {
  21.             string outString = "";
  22.             Stack<char> operStack = new Stack<char>();
  23.  
  24.             for (int i = 0; i < str.Length; i++)
  25.             {
  26.                 if (Char.IsDigit(str[i]))
  27.                     outString += str[i];
  28.                 else
  29.                 {
  30.                     if (str[i] == ' ')
  31.                         continue;
  32.  
  33.                     if (IsPerem(ch))
  34.     char per1 = zapros(ch);
  35.  
  36. static bool IsPerem(char ch)
  37. {
  38.     if ("abcdi.....xyz".)IndexOf(с) != -1))
  39.         return true;
  40.     return false;
  41. }
  42.  
  43. static char zapros(char ch)
  44. {
  45.     Console.Write("Значение переменной {0}:" , ch);
  46.     return Console.ReadLine();
  47. }
  48. else if (IsDelim(str[i]))
  49.                     {
  50.                         if (operStack.Count > 0)
  51.                             if (GetPriority(str[i]) <= GetPriority(operStack.Peek()))
  52.                                 outString += operStack.Pop();
  53.  
  54.                         operStack.Push(str[i]);
  55.                     }
  56.                     else if (str[i] == '(')
  57.                         operStack.Push(str[i]);
  58.  
  59.                     else if (str[i] == ')')
  60.                     {
  61.                         char s = operStack.Pop();
  62.  
  63.                         while (s != '(')
  64.                         {
  65.                             outString += s;
  66.                             s = operStack.Pop();
  67.                         }
  68.                     }
  69.                 }
  70.                 Console.WriteLine(outString);
  71.             }
  72.  
  73.             while (operStack.Count > 0)
  74.                 outString += operStack.Pop();
  75.  
  76.             return outString;
  77.         }
  78.  
  79.         static private bool IsDelim(char с)
  80.         {
  81.             if (("+-/*=^".IndexOf(с) != -1))
  82.                 return true;
  83.             return false;
  84.         }
  85.  
  86.         static private byte GetPriority(char s)
  87.         {
  88.             switch (s)
  89.             {
  90.                 case '(':
  91.                     return 0;
  92.                 case ')':
  93.                     return 1;
  94.                 case '+':
  95.                     return 2;
  96.                 case '-':
  97.                     return 3;
  98.                 case '*':
  99.                     return 4;
  100.                 case '/':
  101.                     return 4;
  102.                 case '^':
  103.                     return 5;
  104.                 default:
  105.                     return 6;
  106.             }
  107.         }
  108.     }
  109. }

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


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

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

13   голосов , оценка 4.154 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы