コード例 #1
0
        public void Test2()
        {
            InfixСonversion       ic = new InfixСonversion();
            List <ExpressionItem> ei = new List <ExpressionItem>
            {
                //"cos(130+140/sqrt(13^2))",
                new ExpressionItem(ItemType.Operation, Operation.Cosine),
                new ExpressionItem(ItemType.Bracket, Bracket.LeftBracket),
                new ExpressionItem(ItemType.Number, 45),
                new ExpressionItem(ItemType.Operation, Operation.Plus),
                new ExpressionItem(ItemType.Number, 450),
                new ExpressionItem(ItemType.Operation, Operation.Divide),
                new ExpressionItem(ItemType.Operation, Operation.SquareRoot),
                new ExpressionItem(ItemType.Bracket, Bracket.LeftBracket),
                new ExpressionItem(ItemType.Number, 10),
                new ExpressionItem(ItemType.Operation, Operation.Power),
                new ExpressionItem(ItemType.Number, 2),
                new ExpressionItem(ItemType.Bracket, Bracket.RightBracket),
                new ExpressionItem(ItemType.Bracket, Bracket.RightBracket),
            };

            ei = ic.InfixToPostfix(ei);
            _  = ic.CalculateValue(ei);
            Assert.AreEqual(1, 1);
        }
コード例 #2
0
        public void Test()
        {
            InfixСonversion ic = new InfixСonversion();

            _ = new List <ExpressionItem>
            {
                //"ln(12)*(13+cos(90))",
                new ExpressionItem(ItemType.Operation, Operation.Logarithm),
                new ExpressionItem(ItemType.Bracket, Bracket.LeftBracket),
                new ExpressionItem(ItemType.Number, 12),
                new ExpressionItem(ItemType.Bracket, Bracket.RightBracket),
                new ExpressionItem(ItemType.Operation, Operation.Multiply),
                new ExpressionItem(ItemType.Bracket, Bracket.LeftBracket),
                new ExpressionItem(ItemType.Number, 13),
                new ExpressionItem(ItemType.Operation, Operation.Plus),
                new ExpressionItem(ItemType.Operation, Operation.Cosine),
                new ExpressionItem(ItemType.Bracket, Bracket.LeftBracket),
                new ExpressionItem(ItemType.Number, 90),
                new ExpressionItem(ItemType.Bracket, Bracket.RightBracket),
                new ExpressionItem(ItemType.Bracket, Bracket.RightBracket),
            };
            List <ExpressionItem> ei = new List <ExpressionItem>
            {
                //cos(a+b/sqrt(d^2))
                //a = 45
                //b = 450
                //d = 10
                new ExpressionItem(ItemType.Operation, Operation.Cosine),
                new ExpressionItem(ItemType.Bracket, Bracket.LeftBracket),
                new ExpressionItem(ItemType.Number, 45),
                new ExpressionItem(ItemType.Operation, Operation.Plus),
                new ExpressionItem(ItemType.Number, 450),
                new ExpressionItem(ItemType.Operation, Operation.Divide),
                new ExpressionItem(ItemType.Operation, Operation.SquareRoot),
                new ExpressionItem(ItemType.Bracket, Bracket.LeftBracket),
                new ExpressionItem(ItemType.Number, 10),
                new ExpressionItem(ItemType.Operation, Operation.Power),
                new ExpressionItem(ItemType.Number, 2),
                new ExpressionItem(ItemType.Bracket, Bracket.RightBracket),
                new ExpressionItem(ItemType.Bracket, Bracket.RightBracket),
            };

            _ = ic.InfixToPostfix(ei);
            Assert.AreEqual(1, 1);
        }
コード例 #3
0
        public static void Show()
        {
            string pathToFolder = Directory.GetCurrentDirectory()
                                  .Replace(@"bin\Debug", "") + @"FilesSecond\";

            string[] text      = File.ReadAllLines(pathToFolder + "input" + ".txt");
            var      parser    = new InfixConvParser();
            var      parseText = parser.Parse(text);
            var      infixAlg  = new InfixСonversion();
            var      postfix   = infixAlg.InfixToPostfix(parseText);
            var      answer    = infixAlg.CalculateValue(postfix);
            var      sb        = new StringBuilder();

            foreach (var e in postfix)
            {
                switch (e.Type)
                {
                case ItemType.Bracket:
                    if (e.BraketType == Bracket.LeftBracket)
                    {
                        sb.Append("(");
                    }
                    else if (e.BraketType == Bracket.RightBracket)
                    {
                        sb.Append(")");
                    }
                    break;

                case ItemType.Number:
                    sb.Append(e.NumberValue);
                    break;

                case ItemType.Operation:
                    switch (e.OperationType)
                    {
                    case Operation.Cosine:
                        sb.Append("cos");
                        break;

                    case Operation.Divide:
                        sb.Append(":");
                        break;

                    case Operation.Logarithm:
                        sb.Append("lg");
                        break;

                    case Operation.Minus:
                        sb.Append("-");
                        break;

                    case Operation.Multiply:
                        sb.Append("*");
                        break;

                    case Operation.Plus:
                        sb.Append("+");
                        break;

                    case Operation.Power:
                        sb.Append("^");
                        break;

                    case Operation.Sine:
                        sb.Append("sin");
                        break;

                    case Operation.SquareRoot:
                        sb.Append("sqrt");
                        break;
                    }
                    break;
                }
                sb.Append(" ");
            }
            var prefixStr = sb.ToString();

            Console.WriteLine("Префиксная запись - " + text[0]);
            for (int i = 1; i < text.Count(); i++)
            {
                Console.WriteLine(text[i]);
            }
            Console.WriteLine("Результат в постфиксной записи - " + prefixStr);
            Console.WriteLine("Ответ: " + answer + ".");
        }