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))); } } }
public FunctionContainer GenerateFunctionContainer(FunctionContainer parent) { var funcC = Randomizer(parent?.DeepLevel + 1 ?? 0); funcC.Parent = parent; while (!funcC.IsCorrectWithoutChilds()) { GenerateFunctionContainer(funcC); } return(funcC); }
/// <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); }
/// <summary> /// Добавлние контейнера в список дочерних контейнеров /// </summary> /// <param name="child">Добавляемый контейнер</param> public void AddChild(FunctionContainer child) => child.Parent = this;