/// <summary> /// <para> /// To determine the sequence of actions: execution priority is medium /// </para> /// <para> /// Medium priority operations: multiplication, division, moduloDivision /// </para> /// </summary> private UniversalOperation ParsingAnExpression_MediumPriority() { UniversalOperation result = ParsingAnExpression_HighPriority(); while (true) { //You can use this for multiplicatio, division, moduloDivision if (MatchSearch('×') || MatchSearch('*')) { result = new Multiply(result, ParsingAnExpression_HighPriority()); } else if (MatchSearch('%')) { result = new ModuleDivision(result, ParsingAnExpression_HighPriority()); } else if (MatchSearch('÷')) { result = new Division(result, ParsingAnExpression_HighPriority()); } /*else if(MatchSearch('¹')) * { * result = new PartOfTheWhole(result, ParsingAnExpression_HighPriority()); * }*/ else { return(result); } } }
public double Calculate(string curExp) { position = 0; _currentExpression = curExp.ToLower().Replace(" ", "").Replace("\t", "").Replace("\n", ""); if (_currentExpression.Length == 0) { throw new Exception("You must enter an expression"); } UniversalOperation result = ParsingAnExpression_LowPriority(); LastValidation(); return(result.Operation()); }
private UniversalOperation ParsingAnExpression_HighPriority() { UniversalOperation result = ParsingAnExpression_VeryHighPriority(); while (true) { if (MatchSearch('^')) { result = new Pow(result, ParsingAnExpression_HighPriority()); } else { return(result); } } }
/// <summary> /// To find the percentage of a number /// </summary> /// <returns> /// Percentage of number /// </returns> public double CalcPercentage(string currentNumber, string currentExpression) { //Calculating the number from which to find the percentage this.currentExpression = currentExpression; pos = 0; UniversalOperation number = ParsingAnExpression_LowPriority(); //Calculate the percentage which to find this.currentExpression = currentNumber; pos = 0; UniversalOperation percent = ParsingAnExpression_LowPriority(); //Calculating the percentage of a number UniversalOperation result = new Multiplication(new Division(number, new Number(100)), percent); return(result.Operation()); }
/// <summary> /// To find the percentage of a number /// </summary> /// <returns> /// Percentage of number /// </returns> #endregion #region Private methods /// <summary> /// <para> /// To determine the sequence of actions: execution priority is low /// </para> /// <para> /// Low priority operations: addition, subtraction /// </para> /// </summary> private UniversalOperation ParsingAnExpression_LowPriority() { UniversalOperation result = ParsingAnExpression_MediumPriority(); while (true) { if (MatchSearch('+')) { result = new Addition(result, ParsingAnExpression_MediumPriority()); } else if (MatchSearch('-')) { result = new Subtraction(result, ParsingAnExpression_MediumPriority()); } else { return(result); } } }
/// <summary> /// <para> /// To determine the sequence of actions: execution priority is medium /// </para> /// <para> /// Medium priority operations: multiplication, division /// </para> /// </summary> private UniversalOperation ParsingAnExpression_MediumPriority() { UniversalOperation result = ParsingAnExpression_HighPriority(); while (true) { if (MatchSearch('×')) { result = new Multiplication(result, ParsingAnExpression_HighPriority()); } else if (MatchSearch('÷') || MatchSearch('/')) { result = new Division(result, ParsingAnExpression_HighPriority()); } else { return(result); } } }
/// <summary> /// <para> /// To determine the sequence of actions: execution priority is medium /// </para> /// <para> /// Medium priority operations: multiplication, division, moduloDivision /// </para> /// </summary> private UniversalOperation ParsingAnExpression_MediumPriority() { UniversalOperation result = ParsingAnExpression_HighPriority(); while (true) { //You can use this for multiplicatio, division, moduloDivision if (MatchSearch('×') || MatchSearch('*')) { } else if (MatchSearch('%')) { } else if (MatchSearch('/') || MatchSearch('÷')) { } else { return(result); } } }
public Pow(UniversalOperation leftArg, UniversalOperation rightArg) : base(leftArg, rightArg) { }
public Sqr(UniversalOperation sqr) : base(sqr) { }
public Subtraction(UniversalOperation leftArg, UniversalOperation rightArg) : base(leftArg, rightArg) { }
public Exponentiation(UniversalOperation number, UniversalOperation power) : base(number, power) { }
public Sqrt(UniversalOperation sqrt) : base(sqrt) { }
public BinaryOperation(UniversalOperation leftArg, UniversalOperation rightArg) { this.leftArg = leftArg; this.rightArg = rightArg; }
public UnaryOperation(UniversalOperation arg) { this.arg = arg; }
public Cosine(UniversalOperation Argument) : base(Argument) { }
public ModuleDivision(UniversalOperation leftArg, UniversalOperation rightArg) : base(leftArg, rightArg) { }
public Tangent(UniversalOperation Argument) : base(Argument) { }
public Sinus(UniversalOperation Argument) : base(Argument) { }
public Negation(UniversalOperation negate) : base(negate) { }
public RootExtraction(UniversalOperation root) : base(root) { }
public Sqrt(UniversalOperation Argument) : base(Argument) { }
public Addition(UniversalOperation leftArg, UniversalOperation rightArg) : base(leftArg, rightArg) { }
public Exp(UniversalOperation Argument) : base(Argument) { }
public Multiply(UniversalOperation leftArg, UniversalOperation rightArg) : base(leftArg, rightArg) { }
public PartOfTheWhole(UniversalOperation PartOfTheWhole) : base(PartOfTheWhole) { }