示例#1
0
 private void addFormulaBtn_Click(object sender, EventArgs e)
 {
     try
     {
         if (formulaFluentsCmb.SelectedValue == null)
         {
             return;
         }
         resultFormula.AddItem(formulaFluentsCmb.SelectedValue);
         formulaTB.Text = resultFormula.ToString();
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
     }
 }
示例#2
0
        private INumber DiffExecute(RuntimeData runtime, string t, INumber m, INumber param0, bool kaiki)
        {
            if (m is IConstParameter)
            {
                return(Number.New(0));
            }

            if (m is Variable)
            {
                Variable v = m.Clone() as Variable;
                if (v.Name == t)
                {
                    if (v.Pow.Equals(runtime, Number.New(1)))
                    {
                        return(v.Multi);
                    }
                    INumber multiple   = v.Multi.Multiple(runtime, v.Pow);
                    bool    powFormula = !(v.Pow is IConstParameter);
                    var     pow        = v.Pow;
                    v.Pow   = v.Pow.Subtract(runtime, Number.New(1));
                    v.Multi = multiple;

                    if (powFormula)
                    {
                        MultipleFormula mf = new Expression.MultipleFormula();
                        mf.AddItem(runtime, v);
                        mf.AddItem(runtime, ExecuteDiff(runtime, pow, t, param0));
                        return(mf);
                    }
                    else
                    {
                        if (runtime.Setting.DoOptimize)
                        {
                            return(v.Optimise(runtime));
                        }
                        else
                        {
                            return(v);
                        }
                    }
                }
                else
                {
                    if (kaiki)
                    {
                        throw new FunctionExecutionCancelException();
                    }

                    // y*(y')みたいな形にする
                    MultipleFormula mf = new Expression.MultipleFormula();
                    FunctionFormula ff = new Expression.FunctionFormula();
                    Formula         f  = new Formula()
                    {
                        Token = new Token("(", Analyzer.TokenType.Syntax)
                    };
                    var d = new Variable(new FuncCalc.Token(t, Analyzer.TokenType.Member));
                    mf.Items.Add(m);
                    ff.AddItem(runtime, new Member(new Token("diff", Analyzer.TokenType.Member)));
                    f.AddItem(runtime, d);
                    f.AddItem(runtime, new LineBreak(new Token(",", Analyzer.TokenType.Syntax)));
                    f.AddItem(runtime, v);
                    ff.AddItem(runtime, f);
                    mf.Items.Add(ff); // AddItemを使うと無限ループ
                    // return mf;
                    return(ff);
                }
            }

            throw new NotImplementedException();
        }