/// <summary>
        /// генерация комбинации второй степени по первому числу со всеми
        /// </summary>
        /// <param name="index1">индекс первого числа</param>
        /// <param name="num1">номер переменной типа категория</param>
        /// <param name="index2">индекс числа начиная с которого генерируем</param>
        /// <returns></returns>
        private List <Kombinacia> addKombo2perTwoStep(int index1, int num1, int index2)
        {
            List <Kombinacia> list = new List <Kombinacia>();
            var p1 = listpers[index1];

            for (int i = index2; i < listpers.Count; i++)
            {
                var p2 = listpers[i];
                if (p2.IfKategori)
                {
                    for (int j = 0; j < p2.getCountKat(); j++)
                    {
                        Kombinacia         k       = new Kombinacia();
                        List <Peremennaya> pl      = new List <Peremennaya>();
                        List <int>         numbers = new List <int>();
                        pl.Add(p1); pl.Add(p2);
                        numbers.Add(num1); numbers.Add(j);
                        k.Create(pl, numbers);
                        list.Add(k);
                    }
                }
                else
                {
                    Kombinacia         k       = new Kombinacia();
                    List <Peremennaya> pl      = new List <Peremennaya>();
                    List <int>         numbers = new List <int>();
                    pl.Add(p1); pl.Add(p2);
                    numbers.Add(num1); numbers.Add(-1);
                    k.Create(pl, numbers);
                    list.Add(k);
                }
            }
            return(list);
        }
        /// <summary>
        /// генерирует первую степень комбинаций
        /// </summary>
        /// <returns></returns>
        private List <Kombinacia> genOneSt()
        {
            List <Kombinacia> list = new List <Kombinacia>();

            for (int i = 0; i < listpers.Count; i++)
            {
                if (listpers[i].IfKategori)
                {
                    for (int j = 0; j < listpers[i].getCountKat(); j++)
                    {
                        List <Peremennaya> p  = new List <Peremennaya>();
                        List <int>         ns = new List <int>();
                        p.Add(listpers[i]);
                        ns.Add(j);
                        Kombinacia k = new Kombinacia();
                        k.Create(p, ns);
                        list.Add(k);
                    }
                }
                else
                {
                    List <Peremennaya> p = new List <Peremennaya>();
                    List <int>         j = new List <int>();
                    p.Add(listpers[i]);
                    j.Add(-1);
                    Kombinacia k = new Kombinacia();
                    k.Create(p, j);
                    list.Add(k);
                }
            }
            return(list);
        }
        /// <summary>
        /// возвращает комбинацию третей степени
        /// </summary>
        /// <param name="index1">индекс первой переменной</param>
        /// <param name="num1">номер переменной в категории или -1, если не категория</param>
        /// <param name="index2">индекс второй переменной</param>
        /// <param name="num2">номер переменной в категории или -1, если не категория</param>
        /// <param name="index3">индекс третьей переменной с которой начинается генерация</param>
        /// <returns></returns>
        private List <Kombinacia> addKombo3per3St(int index1, int num1, int index2, int num2, int index3)
        {
            List <Kombinacia> list = new List <Kombinacia>();
            var p1 = listpers[index1];
            var p2 = listpers[index2];

            for (int i = index3; i < listpers.Count; i++)
            {
                var p3 = listpers[i];
                if (p3.IfKategori)
                {
                    for (int j = 0; j < p3.getCountKat(); j++)
                    {
                        Kombinacia         k    = new Kombinacia();
                        List <Peremennaya> pl   = new List <Peremennaya>();
                        List <int>         nums = new List <int>();
                        pl.Add(p1); pl.Add(p2); pl.Add(p3);
                        nums.Add(num1); nums.Add(num2); nums.Add(j);
                        k.Create(pl, nums);
                        list.Add(k);
                    }
                }
                else
                {
                    Kombinacia         k    = new Kombinacia();
                    List <Peremennaya> pl   = new List <Peremennaya>();
                    List <int>         nums = new List <int>();
                    pl.Add(p1); pl.Add(p2); pl.Add(p3);
                    nums.Add(num1); nums.Add(num2); nums.Add(-1);
                    k.Create(pl, nums);
                    list.Add(k);
                }
            }
            return(list);
        }
        private List <Kombinacia> getForKombiGen(int index, int nowst, int st, Kombinacia kombo)
        {
            List <Kombinacia> list = new List <Kombinacia>();

            if (nowst < st)
            {
                for (int i = index; i < listpers.Count; i++)
                {
                    if (listpers[i].IfKategori)
                    {
                        for (int j = 0; j < listpers[i].getCountKat(); j++)
                        {
                            Kombinacia tmpkombo = new Kombinacia(kombo);
                            tmpkombo.Create(listpers[i], j);
                            var tmp = getForKombiGen(i + 1, nowst + 1, st, tmpkombo);
                            list.AddRange(tmp);
                        }
                    }
                    else
                    {
                        Kombinacia tmpkombo = new Kombinacia(kombo);
                        tmpkombo.Create(listpers[i]);
                        var tmp = getForKombiGen(i, nowst + 1, st, tmpkombo);
                        list.AddRange(tmp);
                    }
                }
            }
            else if (nowst == st)
            {
                for (int i = index; i < listpers.Count; i++)
                {
                    if (listpers[i].IfKategori)
                    {
                        for (int j = 0; j < listpers[i].getCountKat(); j++)
                        {
                            Kombinacia tmpkombo = new Kombinacia(kombo);
                            tmpkombo.Create(listpers[i], j);
                            list.Add(tmpkombo);
                        }
                    }
                    else
                    {
                        Kombinacia tmpkombo = new Kombinacia(kombo);
                        tmpkombo.Create(listpers[i]);
                        list.Add(tmpkombo);
                    }
                }
            }
            else
            {
                Console.WriteLine("Текущая комбинация больше максимальной. Как код сюда попал????");
            }
            return(list);
        }
Example #5
0
 /// <summary>
 /// Создает новую комбинацию
 /// </summary>
 /// <param name="kombo">копинация значения которой копируются в новую</param>
 public Kombinacia(Kombinacia kombo)
 {
     this.pers       = new List <Peremennaya>(kombo.pers);
     this.numberscat = new List <int>(kombo.numberscat);
 }