Exemplo n.º 1
0
        private List <CalData> Bubble_Sort(List <CalData> unsorted_list)
        {
            int            n           = unsorted_list.Count;
            List <CalData> sorted_list = new List <CalData>();
            int            x;
            int            y;

            for (int j = 0; j < n; j++)
            {
                sorted_list.Add(unsorted_list.ElementAt(j));
            }

            try
            {
                for (int i = 0; i < n - 1; i++)
                {
                    for (int j = 0; j < n - i - 1; j++)
                    {
                        CalData index1 = new CalData();
                        CalData index2 = new CalData();

                        if (unsorted_list[j].ge_serial_no.Trim().Contains('X') || unsorted_list[j].ge_serial_no.Trim().Contains('R') || unsorted_list[j + 1].ge_serial_no.Trim().Contains('X') || unsorted_list[j].ge_serial_no.Trim().Contains('R'))
                        {
                            index1.ge_serial_no = unsorted_list.ElementAt(j).ge_serial_no.Replace('X', ' ').Trim();

                            index2.ge_serial_no = unsorted_list.ElementAt(j + 1).ge_serial_no.Replace('X', ' ').Trim();

                            x = Convert.ToInt32(index1.ge_serial_no.Replace('R', ' ').Trim());
                            y = Convert.ToInt32(index2.ge_serial_no.Replace('R', ' ').Trim());
                        }
                        else
                        {
                            x = Convert.ToInt32(index1.ge_serial_no.Trim());
                            y = Convert.ToInt32(index2.ge_serial_no.Trim());
                        }

                        //Console.WriteLine(x);
                        //Console.WriteLine(y);


                        if (x > y)
                        {
                            // swap temp and arr[i]

                            CalData temp = sorted_list[j];
                            sorted_list[j]     = sorted_list[j + 1];
                            sorted_list[j + 1] = temp;
                        }

                        //Console.WriteLine("index j: " + j + "  ");
                        //Console.WriteLine(sorted_list[j].ge_serial_no);
                    }
                }
            }
            catch (Exception ex)
            {
            }

            return(sorted_list);
        }
Exemplo n.º 2
0
        public override global::System.Data.DataSet Clone()
        {
            CalData cln = ((CalData)(base.Clone()));

            cln.InitVars();
            cln.SchemaSerializationMode = this.SchemaSerializationMode;
            return(cln);
        }
Exemplo n.º 3
0
 public CalData GetCalDataFromTDC(string strName)
 {
     if (tdc.CheckName(strName))
     {
         CalData datatemp = tdc.GetData(strName).GetCalData();
         return(datatemp);
     }
     return(null);
 }
Exemplo n.º 4
0
        public Matrix ConvertToMatrix()
        {
            string tempExpress = strExpress.Substring(1, strExpress.Length - 2);

            string[] rows     = tempExpress.Split(';');
            string[] firstRow = rows[0].Trim().Split(new char[] { ' ', ',' });
            int      col      = 0;

            for (int i = 0; i < firstRow.Length; i++)
            {
                if (string.IsNullOrEmpty(firstRow[i]))
                {
                }
                else
                {
                    col++;
                }
            }
            int row = rows.Length;

            double[,] data = new double[row, col];
            try
            {
                for (int i = 0; i < row; i++)
                {
                    string[] singlerow = rows[i].Trim().Split(new char[] { ' ', ',' });
                    int      column    = 0;
                    for (int j = 0; column < col; j++)
                    {
                        if (j < singlerow.Length)
                        {
                            if (string.IsNullOrEmpty(singlerow[j]))
                            {
                                continue;
                            }
                            string str = new ExpData(singlerow[j].Trim()).GetValueEx();
                            data[i, column] = double.Parse(str);
                        }
                        else
                        {
                            data[i, column] = 0;
                        }
                        column++;
                    }
                }
            }
            catch (ExpError e)
            {
                throw new AssignedError(e.Message + "\nAssignmentError::矩阵转换出错\n");
            }
            Matrix matrix = new Matrix(data);

            cd = matrix;
            return(matrix);
        }
Exemplo n.º 5
0
        public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedDataSetSchema(global::System.Xml.Schema.XmlSchemaSet xs)
        {
            CalData ds = new CalData();

            global::System.Xml.Schema.XmlSchemaComplexType type     = new global::System.Xml.Schema.XmlSchemaComplexType();
            global::System.Xml.Schema.XmlSchemaSequence    sequence = new global::System.Xml.Schema.XmlSchemaSequence();
            global::System.Xml.Schema.XmlSchemaAny         any      = new global::System.Xml.Schema.XmlSchemaAny();
            any.Namespace = ds.Namespace;
            sequence.Items.Add(any);
            type.Particle = sequence;
            global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable();
            if (xs.Contains(dsSchema.TargetNamespace))
            {
                global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream();
                global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream();
                try {
                    global::System.Xml.Schema.XmlSchema schema = null;
                    dsSchema.Write(s1);
                    for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext();)
                    {
                        schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current));
                        s2.SetLength(0);
                        schema.Write(s2);
                        if ((s1.Length == s2.Length))
                        {
                            s1.Position = 0;
                            s2.Position = 0;
                            for (; ((s1.Position != s1.Length) &&
                                    (s1.ReadByte() == s2.ReadByte()));)
                            {
                                ;
                            }
                            if ((s1.Position == s1.Length))
                            {
                                return(type);
                            }
                        }
                    }
                }
                finally {
                    if ((s1 != null))
                    {
                        s1.Close();
                    }
                    if ((s2 != null))
                    {
                        s2.Close();
                    }
                }
            }
            xs.Add(dsSchema);
            return(type);
        }
Exemplo n.º 6
0
        /// <summary>
        /// 单参数函数的求值
        /// </summary>
        /// <param name="str">函数名 添加新的函数必须在FuncName的Option[] 数组中添加登记才有效</param>
        /// <param name="num">参数</param></param>
        /// <returns>计算结果</returns>
        public static CalData CalFunc(string str, CalData paramer)
        {
            double num = 0;

            if (new Calculator().CheckFunName(str))
            {
                num = double.Parse((paramer as ExpData).GetValueEx());
            }


            switch (str)
            {
            case "sin":
                return(new ExpData(Math.Sin(num * pi).ToString()));

            case "cos":
                return(new ExpData(Math.Cos(num * pi).ToString()));

            case "tan":
                return(new ExpData(Math.Tan(num * pi).ToString()));


            case "sqrt":
                return(new ExpData(Math.Sqrt(num).ToString()));

            case "abs":
                return(new ExpData(Math.Abs(num).ToString()));

            case "circlearea":
                return(new ExpData((Math.PI * num * num).ToString()));

            case "exp":
                return(new ExpData((Math.Exp(num).ToString())));

            case "ln":
                return(new ExpData((Math.Log(num)).ToString()));

            case "lg":
                return(new ExpData((Math.Log10(num)).ToString()));

            case "asin":
                return(new ExpData((Math.Asin(num) * 180 / PI).ToString()));

            case "acos":
                return(new ExpData((Math.Acos(num) * 180 / PI).ToString()));

            case "atan":
                return(new ExpData((Math.Atan(num) * 180 / PI).ToString()));

            default:
                throw new CalculatorException("该函数参数错误,仅包含一个参数或者函数错误\n");
            }
        }
Exemplo n.º 7
0
        private CalData CalculatorArithmetic()
        {        //bugaid,只是最终完成简单的四则运算,添加双目运算符支持很简单的,基本上不用改什么
            //带参函数部分在PutFuncIntoData里面完成
            CalData sum = null;

            for (int i = 0; data[i] != null; i++)
            {
                if (data[i].GetTypeN() == 1)
                {
                    stacknum.Push(data[i].GetCalData());
                }
                else
                {
                    if (data[i].GetOption().op == '!')
                    {
                        CalData num1      = stacknum.Pop();
                        int     sumNumber = calculator.Factorial((int )(double.Parse(((ExpData)num1).GetValueEx())));
                        sum = new ExpData(sumNumber.ToString());
                    }
                    else
                    {
                        char    op   = data[i].GetOption().op;
                        CalData num1 = stacknum.Pop();
                        CalData num2 = stacknum.Pop();
                        if (num2 is ExpData && num1 is Matrix)
                        {
                            CalData temp = num2;
                            num2 = num1;
                            num1 = temp;
                            if (op == '-')
                            {
                                op   = '+';
                                num2 = (num2 as Matrix) * (-1);
                            }
                        }
                        sum = Calculator.CalSingleOperatorGeneric(num2, num1, op);
                    }
                    stacknum.Push(sum);
                }
            }
            CalData result = stacknum.Pop();

            if (stacknum.IsNotEmpty())
            {
                Wrong = true;
                stacknum.message.ErrorMessage += "Express Wrong!";
            }
            if (this.calculator.Wrong)
            {
                this.Wrong = true;
            }
            return(result);
        }
Exemplo n.º 8
0
        public bool CreateData(string name, CalData value)
        {
            bool right = true;

            if (name != "pi" && name != "e")
            {
                inputs.Add(new TempData(name, value));
            }
            else
            {
                right = false;
            }
            return(right);
        }
Exemplo n.º 9
0
        public BlockData ConverToBlock()
        {
            FuncString funstring    = new FuncString(strExpress);
            int        leftBracket  = funstring.FindOp(0, '(');
            int        rightBracket = funstring.FindOp(0, ')');
            int        commaSymbol  = funstring.FindOp(0, ',');

            string[] ab = strExpress.Split(',');
            double   a  = 0;
            double   b  = 0;

            try
            {
                string strA = new ExpData(ab[0].Substring(1)).GetValueEx();
                string strB = new ExpData(ab[1].Substring(0, ab[1].Length - 1)).GetValueEx();
                a = double.Parse(strA);
                b = double.Parse(strB);
            }
            catch (ExpError e)
            {
                throw new AssignedError(e.Message + "\nAssignmentError::区间转换出错" + "\n");
            }
            BlockData bd = new BlockData(a, b);
            bool      left;
            bool      right;

            if (leftBracket != -1 && leftBracket < commaSymbol)
            {
                left = false;
            }
            else
            {
                left = true;
            }
            if (rightBracket != -1 && rightBracket > commaSymbol)
            {
                right = false;
            }
            else
            {
                right = true;
            }
            bd.SetBlockBounderAvailable(left, right);
            cd = bd;
            return(bd);
        }
Exemplo n.º 10
0
        /// <summary>
        /// 计算返回结果 但是不修改表达式的值
        /// </summary>
        /// <returns></returns>
        public override string GetValueEx()
        {
            CalData cd = UIController.SimpleCal(express);

            if (cd == null)
            {
                throw new ExpError("ExpError::Not defined " + express + "!Ex");
            }
            string str = (cd as ExpData).GetValueEx();

            if (str == null)
            {
                str = "0";
                throw new ExpError("ExpError::Something Wrong Happened!Ex");
            }
            value = str;
            return(str);
        }
Exemplo n.º 11
0
        /// <summary>
        /// 一次性计算出结果 返回结果值并修改表达式
        /// </summary>
        /// <returns></returns>
        public string GetValueFinal()
        {
            CalData cd = UIController.SimpleCal(value);

            if (cd == null)
            {
                throw new AssignedError("AssignedError::Not defined " + express + "!Ex");
            }
            ExpData ed  = cd as ExpData;
            string  str = ed.GetValueEx();

//			string s =new UExpData ((cd as ExpData).GetExpress()).GetValueEx();
            if (str == null)
            {
                str = "0";
                throw new ExpError("ExpError::Something Wrong Happened!Final" + '\n');
            }
            value   = str;
            express = str;
            return(str);
        }
Exemplo n.º 12
0
        public DataType GetDataType()
        {
            DataType dt = new DataType();

            function.FuncString funstring = new function.FuncString(strExpress);

            int leftSquareBracket  = funstring.FindOp(0, '[');
            int rightSquareBracket = funstring.FindOp(0, ']');
            int leftBracket        = funstring.FindOp(0, '(');
            int rightBracket       = funstring.FindOp(0, ')');
            int commaSymbol        = funstring.FindOp(0, ',');
            int semicolon          = funstring.FindOp(0, ';');

            if (commaSymbol == -1 && semicolon == -1)
            {
                dt = DataType.EXP;
                cd = new UExpData(strExpress);
                (cd as UExpData).GetValueFinal();


                return(dt);
            }
            if (semicolon != -1)
            {
                dt = DataType.MATRIX;
                ConvertToMatrix();

                return(dt);
            }
            if (commaSymbol != -1)
            {
                dt = DataType.BLOCK;
                ConverToBlock();
                return(dt);
            }


            return(dt);
        }
Exemplo n.º 13
0
 public void SetValue(CalData value)
 {
     this.Value = value;
 }
Exemplo n.º 14
0
        public void Run()
        {
            Console.WriteLine("Hello World!Matrix allowed. type: help() to know how to use");
            while (InputData != "exit")
            {
                GetDataToInput();
//				PushToShow("进入run程序");
                funstring.SetString(InputData);
                int Extype = funstring.AnalyseEquation();
                if (Extype == 1 || Extype == 4)                  //没有等号 判断为命令或求值之类
//					PushToShow("不是存值");
                {
                    AnalyseInputG(Extype);
                    continue;
                }
                //保存起来
                string funs = funstring.GetFuncName();
                if (!CheckNameAcceptable(funs))
                {
                    continue;
                }
                CalData caldata = null;
                switch (Extype)
                {
                case 2:

                    DealAssignment da = new DealAssignment(funstring.GetFuncExpress());
                    if (tdc.CheckName(funs))
                    {
                        DataType getdt = new DataType();
                        try {
                            getdt = da.GetDataType();
                        } catch (ExpError e) {
                            PushToShow(e.Message);
                            continue;
                        }
                        if (getdt == DataType.EXP)
                        {
                            try {
                                ((UExpData)(da.GetCalData())).GetValueFinal();                                        //防止循环调用SimpleCal--> ReplaceParamers--> GetValueEx-->SimpleCal
                            } catch (AssignedError e) {
                                PushToShow(e.Message);
                                continue;
                            }
                        }
                    }
                    try {
                        caldata = da.GetCalData();
                    } catch (AssignedError e) {
                        PushToShow(e.Message);
                        continue;
                    }

                    break;

                case 3:
                    caldata = new FuncData(funstring.GetFuncExpress(), funstring.GetParamers());
                    break;

                default:
                    break;
                }
                if (CheckDuplicationName(funs))
                {
                    tdc.Remove(tdc.FindPosition(funs));
                }
                if (funstring.CheckFunName(funs))
                {
                    PushToShow("Variable Name not acceptable!");
                    continue;
                }

                if (tdc.CreateData(funstring.GetFuncName(), caldata))
                {
                    PushToShow("数据已保存");
                }
                else
                {
                    PushToShow("Not accept input!");
                }
            }
        }
Exemplo n.º 15
0
//		public void SetNum(double a)
//		{
//			this.num = a;
//			TypeN = 1;
//		}
        public void SetCalData(CalData a)
        {
            this.caldata = a;
            TypeN        = 1;
        }
Exemplo n.º 16
0
        private int PutFuncToData(int i)
        {
            CalData cd = GetCalDataFromTDC(strFun);

            if (cd != null)
            {
                data [da] = new Data();
                data[da].SetCalData(cd);
                da++;

                string str           = strcal.GetString();
                char   str_Num_Check = str[i - strFun.Length - 1];   //此处还有问题
                if (strcal.CheckNum(str_Num_Check))                  //解决 t=6 2t
                {
                    data[da] = new Data();
                    data[da].SetOption(new Option('*'));
                    da++;
                }
                strFun = "";
                return(i - 1);
            }
            int           k          = 0;
            SortBlockData sortblock2 = new SortBlockData( );
            FuncName      fn         = new FuncName();

            fn.SetFuncName(strFun);
            strFun = "";
            if ((new Calculator()).CheckFunName(fn.GetFuncName()))
            {
                k = strcal.FindBrackets(i + 1);                //只是简单的换个函数就可以实现多重嵌套函数了
                if (k == -1)
                {
                    SortBlockData.error.ErrorMessage += "括号不成对\n";
                    errorMessage += "括号不成对\n";
                    this.Wrong    = true;
                    return(-1);
                }
                string stri = strcal.FromToEnd(i, k - 1);

                //此处应该提取一个专门把函数里面的参数弄出来的类或方法
                CalString str = new CalString(stri);
//				int[] split = str.FindAllElements(new char[]{ ',' });
                int[] split = str.FindOpOutOfBrackets(',');

                split = str.PushToHead <int>(split, -1);
                string[] strsplit = new string[20];                //保存分割后的字符串
                for (int j = 0; j < split.Length - 1; j++)
                {
                    strsplit[j] = str.FromToEnd(split[j], split[j + 1] - 1);
                }

                int count = 0;
                strsplit[split.Length - 1] = str.FromToEnd(split[split.Length - 1], str.GetLength() - 1);



                CalData[] res = new CalData[split.Length];                //保存结果
                foreach (var element in strsplit)
                {
//					Console.WriteLine(element);
                    if (element == null)
                    {
                        break;
                    }
                    CalString     strpart   = new CalString(element);
                    SortBlockData sortblock = new SortBlockData();
                    sortblock.SetCalString(strpart);
                    res[count] = sortblock.GetResult();
                    if (sortblock.Wrong)
                    {
                        sortblock2.Wrong         = true;
                        sortblock2.errorMessage += sortblock.errorMessage;
                    }
                    count++;
                }
                CalData resu = null;
                resu = Calculator.CalFunc(fn.GetFuncName(), res);
                if (sortblock2.Wrong || sortblock2.calculator.Wrong)
                {
                    this.Wrong    = true;
                    errorMessage += sortblock2.errorMessage;
                }
                data [da] = new Data();
                data[da].SetCalData(resu);
                da++;
            }
            else
            {
                stackchop.message.ErrorMessage   += "include unkown characters\n";
                SortBlockData.error.ErrorMessage += fn.GetFuncName().Length > 1?"Include UnKnown 字符串":"Include UnKnown 字符";
                throw new SortBlockException(fn.GetFuncName().Length > 1?"Include UnKnown 字符串":"Include UnKnown 字符" + fn.GetFuncName() + "  还未定义");
                errorMessage += fn.GetFuncName().Length > 1?"Include UnKnown 字符串\n":"Include UnKnown 字符\n";
                Wrong         = true;        //其实这句话可以不要,不要就可以 时间6+你好9=15 而不出错;
                return(i);
            }
            return(k);
        }
Exemplo n.º 17
0
        public void Run()
        {
            InputData = GetInput();
            //				PushToShow("进入run程序");
            funstring.SetString(InputData);
            int Extype = funstring.AnalyseEquation();

            if (Extype == 1 || Extype == 4)
            {            //没有等号 判断为命令或求值之类
                //					PushToShow("不是存值");
                AnalyseInputG(Extype);
                return;
            }
            //保存起来
            string funs = funstring.GetFuncName();

            CalData caldata = null;

            switch (Extype)
            {
            case 2:

                DealAssignment da = new DealAssignment(funstring.GetFuncExpress());
                if (tdc.CheckName(funs))
                {
                    DataType getdt = new DataType();
                    try
                    {
                        getdt = da.GetDataType();
                    }
                    catch (ExpError e)
                    {
                        PushToShow(e.Message, "error");
                        return;
                    }
                    if (getdt == DataType.EXP)
                    {
                        try
                        {
                            ((ExpData)(da.GetCalData())).GetValueFinal();                                    //防止循环调用SimpleCal--> ReplaceParamers--> GetValueEx-->SimpleCal
                        }
                        catch (AssignedError e)
                        {
                            PushToShow(e.Message, "error");
                            return;
                        }
                    }
                }
                try
                {
                    caldata = da.GetCalData();
                }
                catch (AssignedError e)
                {
                    PushToShow(e.Message, "error");
                    return;
                }

                break;

            case 3:
                caldata = new FuncData(funstring.GetFuncExpress(), funstring.GetParamers());
                break;

            default:
                break;
            }
            if (CheckDuplicationName(funs))
            {
                tdc.Remove(tdc.FindPosition(funs));
            }
            if (funstring.CheckFunName(funs))
            {
                PushToShow("Variable Name not acceptable!", "error");
                return;
            }
            if (tdc.CreateData(funstring.GetFuncName(), caldata))
            {
                PushToShow("数据已保存");
            }
            else
            {
                PushToShow("Not accept input!", "error");
            }
            #region 之前写的不好就改了


            //				int a = funstring.FindOp(0, '=');
            //				int b = funstring.FindOp(0, '(');
            //				if (a != -1) {
            //
            //
            //					if (b > a) {
            //						funstring.AnalyseEquation();
            ////						funstring.ShowParamers();
            //						if(CheckDuplicationName()) continue;
            //
            //						tdc.CreateData(funstring.GetFuncName(), funstring.GetFuncExpress(), funstring.GetParamers());
            //					} else {
            //						funstring.AnalyseVariable();
            ////						funstring.ShowParamers();
            //						if(CheckDuplicationName()) continue;
            //						tdc.CreateData(funstring.GetFuncName(), funstring.GetFuncExpress());
            //					}
            //				} else {
            //
            //				}


            #endregion
        }
Exemplo n.º 18
0
            public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs)
            {
                global::System.Xml.Schema.XmlSchemaComplexType type     = new global::System.Xml.Schema.XmlSchemaComplexType();
                global::System.Xml.Schema.XmlSchemaSequence    sequence = new global::System.Xml.Schema.XmlSchemaSequence();
                CalData ds = new CalData();

                global::System.Xml.Schema.XmlSchemaAny any1 = new global::System.Xml.Schema.XmlSchemaAny();
                any1.Namespace       = "http://www.w3.org/2001/XMLSchema";
                any1.MinOccurs       = new decimal(0);
                any1.MaxOccurs       = decimal.MaxValue;
                any1.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
                sequence.Items.Add(any1);
                global::System.Xml.Schema.XmlSchemaAny any2 = new global::System.Xml.Schema.XmlSchemaAny();
                any2.Namespace       = "urn:schemas-microsoft-com:xml-diffgram-v1";
                any2.MinOccurs       = new decimal(1);
                any2.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
                sequence.Items.Add(any2);
                global::System.Xml.Schema.XmlSchemaAttribute attribute1 = new global::System.Xml.Schema.XmlSchemaAttribute();
                attribute1.Name       = "namespace";
                attribute1.FixedValue = ds.Namespace;
                type.Attributes.Add(attribute1);
                global::System.Xml.Schema.XmlSchemaAttribute attribute2 = new global::System.Xml.Schema.XmlSchemaAttribute();
                attribute2.Name       = "tableTypeName";
                attribute2.FixedValue = "AppointmentsDataTable";
                type.Attributes.Add(attribute2);
                type.Particle = sequence;
                global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable();
                if (xs.Contains(dsSchema.TargetNamespace))
                {
                    global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream();
                    global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream();
                    try {
                        global::System.Xml.Schema.XmlSchema schema = null;
                        dsSchema.Write(s1);
                        for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext();)
                        {
                            schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current));
                            s2.SetLength(0);
                            schema.Write(s2);
                            if ((s1.Length == s2.Length))
                            {
                                s1.Position = 0;
                                s2.Position = 0;
                                for (; ((s1.Position != s1.Length) &&
                                        (s1.ReadByte() == s2.ReadByte()));)
                                {
                                    ;
                                }
                                if ((s1.Position == s1.Length))
                                {
                                    return(type);
                                }
                            }
                        }
                    }
                    finally {
                        if ((s1 != null))
                        {
                            s1.Close();
                        }
                        if ((s2 != null))
                        {
                            s2.Close();
                        }
                    }
                }
                xs.Add(dsSchema);
                return(type);
            }
Exemplo n.º 19
0
        //f(x,y)=x+y+t

        /// <summary>
        /// 替换已知变量,fstr是一个字符串表达式:x+y 不是f=x+y ,没有用了,底层已经能够替换掉它了
        /// 没有变量是会原串返回的
        /// 里面找未知数时会调用底层 CalString 的函数,里面已经自动排除sin,cos,avg等 函数名了
        /// </summary>
        /// <param name="fstr">含参表达式</param>
        /// <param name="ps">排除变量</param>
        /// <returns>返回FuncExpressTemp为替换后的string
        /// 或含有未知变量返回null</returns>
        public static string ReplaceParamers(string fstr, string[] ps = null)
        {
            string[]   strarr = null;
            FuncString fs     = new FuncString(fstr);

//			fs.SetFuncExpressTemp(fstr);
            fs.SetFuncExpress(fstr);            //为向下兼容不出错


            FuncCal fc = new FuncCal();

            if (ps == null)
            {
                strarr = fs.FindUnKnown();
            }
            else
            {
                strarr = fs.FindUnKnown(ps);
            }

            fs.SetParamers(strarr);            //为向下兼容不出错,不明觉厉
            if (strarr.Length != 0)
            {
                PushToShow("含有未知数 尝试替换已知变量");
            }

            string[] paramersdata = new string[strarr.Length];
            fc.SetFuncString(fs);
            for (int i = 0; i < strarr.Length; i++)
            {
                if (tdc.CheckName(strarr[i]))
                {
                    CalData datatemp = tdc.GetData(strarr[i]).GetCalData();

                    switch (datatemp.CalType)
                    {
                    case DataType.BLOCK:
                    {
                        PushToShow("Type not match!");
                    }
                    break;

                    case DataType.EXP:
                    {
                        ExpData ed = (ExpData)datatemp;
                        paramersdata[i] = ed.GetValueEx();
                        PushToShow("提取" + strarr[i] + "的值:" + paramersdata[i]);
                        break;
                    }

                    case DataType.MATRIX:
                    {
                        Matrix matrix = (Matrix)datatemp;
                        PushToShow(matrix.ToString());
                    }
                    break;
                    }

//					if (datatemp.CalType == DataType.EXP) {
//						ExpData ed = (ExpData)datatemp;
//						paramersdata[i] = ed.GetValueEx();
//						PushToShow("提取" + strarr[i] + "的值:" + paramersdata[i]);
//					}
//
//					else
//						PushToShow("Type not match!");
                    continue;
                }

                PushToShow("未发现变量" + strarr[i] + "还未定义其值\n退出");
                return(null);
            }
            if (paramersdata.Length != 0)
            {
                fc.DealFuncstring(paramersdata);
            }
            else
            {
                fs.SetFuncExpressTemp(fstr);
            }
            return(fc.GetFuncString().GetFuncExpressTemp());
        }
Exemplo n.º 20
0
        //   2*3e
        void AnalyseInputG(int blacket)
        {
            if (blacket == 4)              //有括号的
            {
                if (IsOrder())
                {
//					PushToShow("进入命令程序");
                    Command cm   = new Command();
                    var     funs = funstring.GetFuncExpressTemp();
                    switch (funstring.GetFuncName())
                    {
                    case "plot":
                        string[]   paramers = funstring.GetParamersData();
                        FuncString funcs    = FindFuncInTDC(paramers[0]);
                        double     left     = 0;
                        double     right    = 1;
                        try {
                            left  = double.Parse(paramers[1]);
                            right = double.Parse(paramers[2]);
                        } catch {
                            if (tdc.CheckName(paramers[1]))
                            {
                                BlockData bd = (BlockData)tdc.GetData(paramers[1]).GetCalData();
                                if (bd != null)
                                {
                                    left  = bd.GetXStart();
                                    right = bd.GetXEnd();
                                }
                            }
                        }
                        if (funcs != null)
                        {
                            new Thread(new ThreadStart(() => cm.PlotFunc(funcs, 6, 1000, left, right))).Start();
//								new Thread(new ThreadStart(()=>cm.PlotFuncParallel(funcs, 6, 1000, -10, 10))).Start();
                        }
                        else
                        {
                            PushToShow("Wrong!");
                        }
                        break;

                    case "list":

                        #region 处理list
                        bool     needJudge = true;
                        DataType dt        = DataType.NONE;
                        switch (funs)
                        {
                        case "exp":
                            dt = DataType.EXP;
                            break;

                        case "matrix":
                            dt = DataType.MATRIX;
                            break;

                        case "block":
                            dt = DataType.BLOCK;
                            break;

                        case "func":
                            dt = DataType.FUNC;
                            break;

                        default:
                            needJudge = false;
                            break;
                        }
                        TempData td;
                        for (int i = 1; i < tdc.GetLength(); i++)
                        {
                            td = tdc.GetData(i);
                            bool show = false;
                            if (td != null)
                            {
                                CalData cd = td.GetCalData();
                                if (cd.CalType == dt)
                                {
                                    show = true;
                                }



                                if (!needJudge || show)
                                {
                                    PushToShow(td.ToString());
                                }
                            }
                        }
                        #endregion

                        break;

                    case "beep":
                        int times = 10;
                        int.TryParse(funs, out times);
                        if (times == 0)
                        {
                            times = 10;
                        }
                        for (int i = 0; i < times; i++)
                        {
                            PushToShow("倒计时" + (times - i - 1) + "s");
                            Console.Beep(1000 * 7, 500);
                            Console.Beep(500, 500);
                        }
                        Console.Beep(30000, 1000);

                        break;

                    case "clc":

                        if (string.IsNullOrEmpty(funs))
                        {
                            tdc.RemoveAll();
                            PushToShow("已清空存储数据");
                        }
                        else
                        {
                            if (tdc.CheckName(funs))
                            {
                                tdc.Remove(tdc.FindPosition(funs));
                                PushToShow("clear " + funs);
                            }
                            else
                            {
                                PushToShow("fail to clear.Can't find " + funs);
                            }
                        }
                        break;

                    case "exit":
                        Environment.Exit(0);
                        break;

                    case "clear":
                        Console.Clear();
                        break;                                //----------------------这个GetFuncExpressTemp最多返回""不会返回null

                    case "help":
                        cm.Help(funstring.GetFuncExpressTemp());
                        break;
                    }
                    return;
                }
                if (tdc.CheckName(funstring.GetFuncName()))
                {
                    PushToShow("该函数存在数据中");

                    if (funstring.GetParamers() != null)
                    {
                        PushToShow("进入函数求值过程");
                        FuncString funs   = FindFuncInTDC(funstring.GetFuncName());
                        double     result = GetFuncResult(funs, new FuncString(InputData).GetParamersData());
                        PushToShow("结果:" + result);
                    }
                    else
                    {
                        PushToShow("没有输入参数");
                    }
                    return;
//					PushToShow("这是啥:" + tdc.GetData(funstring.GetFuncName()).GetValue().ToString());
                }
                {
                    var str = SimpleCal(InputData);
                    if (str == null)
                    {
                        PushToShow("没有此函数");
                    }
                    else
                    {
                        PushToShow(str.ToString());
                    }

                    return;
                }
            }


            if (blacket == 1)              //没有括号 Name即是计算的表达式
            {
                var Name = funstring.GetFuncName();
                CheckDataType(Name);
            }
        }
Exemplo n.º 21
0
 public TempData(string name, CalData value)
 {
     this.Name  = name;
     this.Value = value;
 }