Exemplo n.º 1
0
        public MainForm()
        {
            InitializeComponent();
            OperationHandlers = new Dictionary <String, BinaryOperation> {
            };


            foreach (var control in OperationPanel.Controls)
            {
                var button = control as Button;
                var tag    = button.Tag as String;
                if (tag == "Number")
                {
                    button.Click += OnNumberButtonClick;
                }
                if (tag == "BinaryOperation")
                {
                    button.Click += OnOperatorButtonClick;
                    var operation = new BinaryOperation(button.Text);
                    OperationHandlers.Add(button.Text, operation);
                }
                button.Click += (object sender, EventArgs e) => UpdateLabels();
                Input         = new InputHandler();
            }
        }
Exemplo n.º 2
0
        private IOperation MultiplyOrDivision()
        {
            var operation = AnyOperation();

            while (_position < _expression.Length)
            {
                if (CurrentOperator("*"))
                {
                    operation = new BinaryOperation(operation, "*", AdditionOrSubtraction());
                }
                else if (CurrentOperator("/"))
                {
                    var rightOperation = AdditionOrSubtraction();
                    if (rightOperation.Calculate().Equals(0))
                    {
                        throw new Exception(String.Format("Деление на 0 в операции {0}/{1}", operation, rightOperation));
                    }
                    operation = new BinaryOperation(operation, "/", rightOperation);
                }
                else
                {
                    break;
                }
            }
            return(operation);
        }
Exemplo n.º 3
0
 public BackSpaceCommand(BinaryOperation op)
 {
     _Op = op;
     _Op.PropertyChanged += (s, e) => {
         if (CanExecuteChanged != null)
         {
             CanExecuteChanged(this, EventArgs.Empty);
         }
     };
 }
Exemplo n.º 4
0
        private double Evaluate()
        {
            if (!(CurrentOperation is null))
            {
                right = Input.ToDouble();
                if (left.HasValue && right.HasValue)
                {
                    var result = CurrentOperation.Evaluate(left.Value, right.Value);
                    Input.init(result);

                    CurrentOperation = null;
                    left             = result;
                    return(result);
                }
                else
                {
                    return(0);
                }
            }
Exemplo n.º 5
0
        private IOperation AdditionOrSubtraction()
        {
            var operation = MultiplyOrDivision();

            while (_position < _expression.Length)
            {
                if (CurrentOperator("+"))
                {
                    operation = new BinaryOperation(operation, "+", AdditionOrSubtraction());
                }
                else if (CurrentOperator("-"))
                {
                    operation = new BinaryOperation(operation, "-", AdditionOrSubtraction());
                }
                else
                {
                    break;
                }
            }
            return(operation);
        }
Exemplo n.º 6
0
        private void OnOperatorButtonClick(object sender, EventArgs e)
        {
            var button = sender as Button;

            if (CurrentOperation is null)
            {
                CurrentOperation = OperationHandlers[button.Text];
                left             = Input.ToDouble();
                if (left is null)
                {
                    return;
                }
                History = left.ToString() + CurrentOperation.ToString();
                Input.init(left.GetValueOrDefault());
            }
            else
            {
                var result = Evaluate();
                CurrentOperation = OperationHandlers[button.Text];
                History          = result.ToString() + CurrentOperation.ToString();
                Input.init(result);
            }
        }