Консольный калькулятор - C# (213875)

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

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

калькулятор консольный на C# когда вводится выражение к примеру 5-4*(4-3) оно будет типа string как его конвертировать в числовой тип и в нужный тип для знаков сложения, умножения, скобок,....чтобы потом совершить вычисление и вывести результат?

Решение задачи: «Консольный калькулятор»

textual
Листинг программы
using System;
using System.Text;
using System.Collections;
using System.Text.RegularExpressions;
using System.IO;
 
namespace ConsoleApplication2
{
    // объект калькулятор
    class xCalc
    {
        static public string mul_div(string str){ // умножение и деление
            double na, nb;
            Regex reg = new Regex(@"(\-*[\d,]+)([\*\/]{1})(\-*[\d,]+)");
            Match mat = reg.Match(str);
            if(mat.Groups.Count == 4) {
                na = double.Parse(mat.Groups[1].ToString());
                nb = double.Parse(mat.Groups[3].ToString());
                if (mat.Groups[2].ToString()[0] == '*')
                    na *= nb;
                else if(mat.Groups[2].ToString()[0] == '/')
                    na /= nb;       
                return str.Replace(mat.Groups[0].ToString(), na.ToString());
            }
            return str;
        }
 
        static public string add_sub(string str) { // сложение и вычитание
            double na, nb;
            Regex reg = new Regex(@"(\-*[\d,]+)([\+\-]{1})(\-*[\d,]+)");
            Match mat = reg.Match(str);
            if (mat.Groups.Count > 2)
            {
                na = double.Parse(mat.Groups[1].ToString());
                nb = double.Parse(mat.Groups[3].ToString());
                if (mat.Groups[2].ToString()[0] == '+')
                    na += nb;
                else if (mat.Groups[2].ToString()[0] == '-')
                    na -= nb;
                return str.Replace(mat.Groups[0].ToString(), na.ToString());
            }
            return str;
        }
 
        static public string scoba(string str){ // разбор скобок
            char[] buf = { '*', '/' };
            Regex reg  = new Regex(@"\(([^\(\)]+)\)");
            if (! reg.IsMatch(str))
                return str;
            Match mat = reg.Match(str);
            string cm = mat.Groups[1].ToString();
            while (cm.IndexOfAny(buf) != -1)
                cm = xCalc.mul_div(cm);
            Regex test = new Regex(@"^(\-*[\d,]+)$");
            while (! test.IsMatch(cm))
                cm = xCalc.add_sub(cm);
            str = str.Replace(mat.Groups[0].ToString(), cm);
            return scoba(str);
        }
 
        static public double calc(string str) { // функция для расчёта
            str = scoba(str);
            char[] buf = { '*', '/' };
            while (str.IndexOfAny(buf) != -1)
                str = xCalc.mul_div(str);
            Regex test = new Regex(@"^(\-*[\d,]+)$");
            while (! test.IsMatch(str))
                str = xCalc.add_sub(str);
            return double.Parse(str);
        }
    };
 
    class Program
    {
        static void Main(string[] args)
        {
            // Не большой тест, если точности не будет выбросите код
            // расчёт с целыми числами (-1)такая запись не поддерживается
            Console.WriteLine("{0}\t{1}", xCalc.calc("49/7+20*5-400"), 49/7+20*5-400);
            Console.WriteLine("{0}\t{1}", xCalc.calc("5*6+8*6"), 5*6+8*6);
            Console.WriteLine("{0}\t{1}", xCalc.calc("(5-4*(10-8))*(4-3)"), (5-4*(10-8))*(4-3));
            Console.WriteLine("{0}\t{1}", xCalc.calc("-7+8/2*(-200-100*2)"), -7+8/2*(-200-100*2));
            Console.WriteLine("{0}\t{1}\n\n", xCalc.calc("-4/-4+-5/-5"), -4/-4+-5/-5);
 
            // расчёт с не целыми с двойной точностью, в строке пишеться запятая а не точка
            Console.WriteLine("{0}\t{1}", xCalc.calc("3,14*2/7,2"), 3.14*2/7.2);
            Console.WriteLine("{0}\t{1}", xCalc.calc("4,5*2,5-4,5/2+(-0,45-1,2)"), 4.5*2.5-4.5/2+(-0.45-1.2));
            Console.WriteLine("{0}\t{1}", xCalc.calc("20,5*(100/2,7)-(0,5*(0,7*(3,4+3)))"), 20.5*(100/2.7)-(0.5*(0.7*(3.4+3))));
            Console.ReadKey();
        }
    }
}

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


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

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

7   голосов , оценка 3.857 из 5