Example #1
0
        FunctionContainer Randomizer(int curDeep)
        {
            int a = rnd.Next(1, deepFunction * 10);

            if (curDeep <= (a / 10))
            {
                if (a % 2 == 0)
                {
                    return(FunctionContainer.CreateFunctionContainer_TwoArgs(
                               StandartElementaryFunctions.FunctionsTwoArgs[rnd.Next(0, StandartElementaryFunctions.FunctionsTwoArgs.Count - 1)].FuncName));
                }
                else
                {
                    return(FunctionContainer.CreateFunctionContainer_OneArg(
                               StandartElementaryFunctions.FunctionsOneArg[rnd.Next(0, StandartElementaryFunctions.FunctionsOneArg.Count - 1)].FuncName));
                }
            }
            else
            {
                if (a % 2 == 0)
                {
                    return(FunctionContainer.CreateFunctionContainer_SameArgs((byte)rnd.Next(1, argsCount)));
                }
                else
                {
                    return(FunctionContainer.CreateFunctionContainer_ConstArg(rnd.Next(-25, 25)));
                }
            }
        }
Example #2
0
        public FunctionContainer GenerateFunctionContainer(FunctionContainer parent)
        {
            var funcC = Randomizer(parent?.DeepLevel + 1 ?? 0);

            funcC.Parent = parent;

            while (!funcC.IsCorrectWithoutChilds())
            {
                GenerateFunctionContainer(funcC);
            }

            return(funcC);
        }
Example #3
0
        /// <summary>
        /// Замена дочернего объекта
        /// </summary>
        /// <param name="oldChild">Заменяемый дочерний объект</param>
        /// <param name="newChild">Новый дочерний объект</param>
        /// <returns></returns>
        public bool ChangeChild(FunctionContainer oldChild, FunctionContainer newChild)
        {
            for (int i = 0; i < childs.Count; i++)
            {
                if (childs[i].Equals(oldChild))
                {
                    childs[i]       = newChild;
                    newChild.Parent = this;
                    return(true);
                }

                if (childs[i].ChangeChild(oldChild, newChild))
                {
                    return(true);
                }
            }

            return(false);
        }
Example #4
0
 /// <summary>
 /// Добавлние контейнера в список дочерних контейнеров
 /// </summary>
 /// <param name="child">Добавляемый контейнер</param>
 public void AddChild(FunctionContainer child) => child.Parent = this;