Ejemplo n.º 1
0
        public Complex Calculate(string equation, string variablestring)
        {
            equation = DeCleanUp(equation);

            if (variablestring.Length > 0)
            {
                foreach (
                    var split in
                        variablestring.Split(';')
                            .Select(varstring => varstring.Split('='))
                            .Where(split => split.Length != 1 || split[0].Trim().Length != 0))
                {
                    if (split.Length != 2)
                        throw new ParseException(variablestring, 0,
                            "La liste doit être séparée par des points-virgules, ex. 'x=10; y=12'");
                    var varname = split[0].Trim();
                    var vareq = split[1].Trim();
                    var v = new Term();
                    v.Parse(vareq);
                    m_term.SetVar(varname, v.Value);
                }
            }
            m_term.Parse(equation);
            return m_term.Value;
        }
Ejemplo n.º 2
0
        public Function(string src, int start, EquationElement root)
        {
            m_startIndex = start;
            m_func = Term.ExtractName(src, start).ToLower();
            start += m_func.Length;
            // sauter tous les espaces, mais le prochain caractère doit être une parenthèse ouvrante
            if (start == src.Length)
                throw new ParseException(src, m_startIndex, "La fonction doit commencer par '('");
            while (src[start] == ' ')
                start++;
            if (src[start] != '(')
                throw new ParseException(src, m_startIndex, "La fonction doit commencer par '('");
            var termstart = start;
            var end = Term.FindMatchingEnd('(', src, termstart);
            while (end < termstart)
            {
                src += ')';

                end = Term.FindMatchingEnd('(', src, termstart);
            }
            /*if (end < termstart)
            {
                throw new ParseException(src, m_startIndex, "Pas de parenthèse fermante correspondante trouvée");
            }*/

            m_endindex = end;
            var allterms = src.Substring(termstart + 1, end - termstart - 1);
            //string[] terms = allterms.Split(',');
            var terms = GetTerms(allterms);
            m_terms = new List<Term>();
            foreach (var term in terms)
            {
                var newterm = new Term();
                newterm.Parse(term, root);
                newterm.Parent = this;
                m_terms.Add(newterm);
            }
        }
Ejemplo n.º 3
0
 public void SetVar(string varname, string value)
 {
     var term = new Term();
     term.Parse(value);
     SetVar(varname, term.Value);
 }