Example #1
0
        static Dictionary <string, DetansPair> getDetans(PassiveElement[] elements, AdvancedScheme scheme, ref int detansCount)
        {
            Dictionary <string, DetansPair> elementsToDetanPairDictionary = new Dictionary <string, DetansPair>();
            int            elementsCount = elements.Length;
            List <Element> elementsList  = new List <Element>();

            foreach (PassiveElement element in scheme.passiveElementsList)
            {
                elementsList.Add(element);
            }
            List <Element> activeElementsForZ = scheme.activeElementsListForZ;
            List <Element> activeElementsForQ = scheme.activeElementsListForQ;
            //elementsList.AddRange(scheme.nullersList);
            string selectedElementsString = Calculations.elementsToNamesString(elements);

            for (int i = 0; i <= elementsCount; i++)
            {
                int[] indexes = Calculations.makeCombination(i);
                while (true)
                {
                    List <Element> removedElements    = new List <Element>();
                    List <Element> subtendedElements  = new List <Element>();
                    List <Element> localElementsList  = new List <Element>(elementsList);
                    List <Element> associatedElements = new List <Element>();
                    for (int j = 0; j < elementsCount; j++)
                    {
                        if (Array.IndexOf(indexes, j + 1) >= 0)
                        {
                            scheme.transformElementToInfin(elements[j], localElementsList);
                            associatedElements.Add(elements[j]);
                            removedElements.Add(elements[j]);
                        }
                        else
                        {
                            scheme.transformElementToZero(elements[j], localElementsList);
                            subtendedElements.Add(elements[j]);
                        }
                    }
                    List <Element> elementsListToZ = new List <Element>(localElementsList);
                    elementsListToZ.AddRange(activeElementsForZ);
                    List <Element> elementsListToQ = new List <Element>(localElementsList);
                    elementsListToQ.AddRange(activeElementsForQ);

                    string pattern               = "";
                    string delimiter             = ";";
                    string removedElementsString = Calculations.elementsToNamesString(removedElements, pattern, delimiter);
                    string keyString             = selectedElementsString + "|" + removedElementsString;

                    string numeratorDetan;
                    string denominatorDetan;
                    if (mainForm.elementsStringToDetansMap.ContainsKey(keyString))
                    {
                        numeratorDetan   = mainForm.elementsStringToDetansMap[keyString].itsNumeratorDetan;
                        denominatorDetan = mainForm.elementsStringToDetansMap[keyString].itsDenominatorDetan;
                    }
                    else
                    {
                        numeratorDetan = Calculations.getDetan(elementsListToZ);
                        //mainForm.elementsStringToDetansMap[keyString].itsNumeratorDetan = numeratorDetan;
                        denominatorDetan = Calculations.getDetan(elementsListToQ);
                        Calculations.correctFormule(ref numeratorDetan);
                        Calculations.correctFormule(ref denominatorDetan);
                        //mainForm.elementsStringToDetansMap[keyString].itsDenominatorDetan = denominatorDetan;
                        mainForm.elementsStringToDetansMap.Add(
                            keyString, new DetansPair(numeratorDetan, denominatorDetan));
                    }

                    //string detanZ = Calculations.getDetan(elementsListToZ);
                    //Calculations.correctFormule(ref detanZ);
                    //string detanQ = Calculations.getDetan(elementsListToQ);
                    //Calculations.correctFormule(ref detanQ);
                    string elementNames = Calculations.elementsToNamesString(associatedElements);
                    elementsToDetanPairDictionary.Add(elementNames, new DetansPair(numeratorDetan, denominatorDetan));
                    detansCount += 2;
                    if (Calculations.nextCombination(indexes, elements.Length) != 0)
                    {
                        break;
                    }
                }
            }
            return(elementsToDetanPairDictionary);
        }
Example #2
0
        /* Нахождение пар определителей N и D для всех возможных сочетаний элементов */
        /* из заданного набора elements */
        /* Возвращает ассоциативный массив, где ключ - сочетание элементов, значение - пара определителей */
        //static Dictionary<string, detansPair> getDetans(
        static Dictionary <string, DetansPair> getDetans(
            PassiveElement[] elements, AdvancedScheme scheme, ref int detansCount)
        {
            Dictionary <string, DetansPair> elementsToDetanPairDictionary = new Dictionary <string, DetansPair>();
            int            elementsCount = elements.Length;
            List <Element> elementsList  = new List <Element>();

            foreach (PassiveElement element in scheme.passiveElementsList)
            {
                elementsList.Add(element);
            }
            List <Element> activeElementsForZ = scheme.activeElementsListForZ;
            List <Element> activeElementsForQ = scheme.activeElementsListForQ;

            foreach (PassiveElement element in elements)
            {
                elementsList.AddRange((element).clonnedElements);

                elementsList.Remove((element).cloneElement);
            }
            string selectedElementsString = elementsToNamesString(elements);

            //elementsList.AddRange(scheme.nullersList);
            /* Перебор длин сочетаний элементов */
            for (int i = 0; i <= elementsCount; i++)
            {
                /* Первое сочетание данной длины */
                int[] indexes = makeCombination(i);
                /* Перебор остальных сочетаний данной длины */
                while (true)
                {
                    List <Element> removedElements    = new List <Element>();
                    List <Element> subtendedElements  = new List <Element>();
                    List <Element> localElementsList  = new List <Element>(elementsList);
                    List <Element> associatedElements = new List <Element>();
                    /* Перебор элементов данного сочетания */
                    for (int j = 0; j < elementsCount; j++)
                    {
                        /* Нейтрализация или стягивание элемента */
                        if (Array.IndexOf(indexes, j + 1) >= 0)
                        {
                            scheme.transformElementToInfin((elements[j]).cloneElement, localElementsList);
                            associatedElements.Add(elements[j]);
                            removedElements.Add(elements[j]);
                        }
                        else
                        {
                            scheme.transformElementToZero((elements[j]).cloneElement, localElementsList);
                            subtendedElements.Add(elements[j]);
                        }
                    }
                    /* Далее - формирование списка элементов и рассчет определителей */
                    List <Element> elementsListToZ = new List <Element>(localElementsList);
                    elementsListToZ.AddRange(activeElementsForZ);
                    List <Element> elementsListToQ = new List <Element>(localElementsList);
                    elementsListToQ.AddRange(activeElementsForQ);

                    string pattern               = "δ(%element%)";
                    string delimiter             = ";";
                    string removedElementsString = elementsToNamesString(removedElements, pattern, delimiter);
                    string keyString             = selectedElementsString + "|" + removedElementsString;

                    string numeratorDetan;
                    string denominatorDetan;
                    if (mainForm.elementsStringToDetansMap.ContainsKey(keyString))
                    {
                        numeratorDetan   = mainForm.elementsStringToDetansMap[keyString].itsNumeratorDetan;
                        denominatorDetan = mainForm.elementsStringToDetansMap[keyString].itsDenominatorDetan;
                    }
                    else
                    {
                        numeratorDetan = getDetan(elementsListToZ);
                        //mainForm.elementsStringToDetansMap[keyString].itsNumeratorDetan = numeratorDetan;
                        denominatorDetan = getDetan(elementsListToQ);
                        correctFormule(ref numeratorDetan);
                        correctFormule(ref denominatorDetan);
                        //mainForm.elementsStringToDetansMap[keyString].itsDenominatorDetan = denominatorDetan;
                        mainForm.elementsStringToDetansMap.Add(
                            keyString, new DetansPair(numeratorDetan, denominatorDetan));
                    }
                    string elementsString = elementsToNamesString(associatedElements);
                    elementsToDetanPairDictionary.Add(elementsString, new DetansPair(numeratorDetan, denominatorDetan));
                    detansCount += 2;

                    if (nextCombination(indexes, elements.Length) != 0)
                    {
                        break;
                    }
                }
            }
            return(elementsToDetanPairDictionary);
        }
Example #3
0
        static Dictionary<string, DetansPair> getDetans(PassiveElement[] elements, AdvancedScheme scheme, ref int detansCount)
        {
            Dictionary<string, DetansPair> elementsToDetanPairDictionary = new Dictionary<string, DetansPair>();
            int elementsCount = elements.Length;
            List<Element> elementsList = new List<Element>();
            foreach (PassiveElement element in scheme.passiveElementsList)
                elementsList.Add(element);
            List<Element> activeElementsForZ = scheme.activeElementsListForZ;
            List<Element> activeElementsForQ = scheme.activeElementsListForQ;
            //elementsList.AddRange(scheme.nullersList);
            string selectedElementsString = Calculations.elementsToNamesString(elements);
            for (int i = 0; i <= elementsCount; i++)
            {
                int[] indexes = Calculations.makeCombination(i);
                while (true)
                {
                    List<Element> removedElements = new List<Element>();
                    List<Element> subtendedElements = new List<Element>();
                    List<Element> localElementsList = new List<Element>(elementsList);
                    List<Element> associatedElements = new List<Element>();
                    for (int j = 0; j < elementsCount; j++)
                    {
                        if (Array.IndexOf(indexes, j + 1) >= 0)
                        {
                            scheme.transformElementToInfin(elements[j], localElementsList);
                            associatedElements.Add(elements[j]);
                            removedElements.Add(elements[j]);
                        }
                        else
                        {
                            scheme.transformElementToZero(elements[j], localElementsList);
                            subtendedElements.Add(elements[j]);
                        }
                    }
                    List<Element> elementsListToZ = new List<Element>(localElementsList);
                    elementsListToZ.AddRange(activeElementsForZ);
                    List<Element> elementsListToQ = new List<Element>(localElementsList);
                    elementsListToQ.AddRange(activeElementsForQ);

                    string pattern = "";
                    string delimiter = ";";
                    string removedElementsString = Calculations.elementsToNamesString(removedElements, pattern, delimiter);
                    string keyString = selectedElementsString + "|" + removedElementsString;

                    string numeratorDetan;
                    string denominatorDetan;
                    if (mainForm.elementsStringToDetansMap.ContainsKey(keyString))
                    {
                        numeratorDetan = mainForm.elementsStringToDetansMap[keyString].itsNumeratorDetan;
                        denominatorDetan = mainForm.elementsStringToDetansMap[keyString].itsDenominatorDetan;
                    }
                    else
                    {
                        numeratorDetan = Calculations.getDetan(elementsListToZ);
                        //mainForm.elementsStringToDetansMap[keyString].itsNumeratorDetan = numeratorDetan;
                        denominatorDetan = Calculations.getDetan(elementsListToQ);
                        Calculations.correctFormule(ref numeratorDetan);
                        Calculations.correctFormule(ref denominatorDetan);
                        //mainForm.elementsStringToDetansMap[keyString].itsDenominatorDetan = denominatorDetan;
                        mainForm.elementsStringToDetansMap.Add(
                            keyString, new DetansPair(numeratorDetan, denominatorDetan));
                    }

                    //string detanZ = Calculations.getDetan(elementsListToZ);
                    //Calculations.correctFormule(ref detanZ);
                    //string detanQ = Calculations.getDetan(elementsListToQ);
                    //Calculations.correctFormule(ref detanQ);
                    string elementNames = Calculations.elementsToNamesString(associatedElements);
                    elementsToDetanPairDictionary.Add(elementNames, new DetansPair(numeratorDetan, denominatorDetan));
                    detansCount += 2;
                    if (Calculations.nextCombination(indexes, elements.Length) != 0)
                        break;
                }
            }
            return elementsToDetanPairDictionary;
        }
Example #4
0
        /* Нахождение пар определителей N и D для всех возможных сочетаний элементов */
        /* из заданного набора elements */
        /* Возвращает ассоциативный массив, где ключ - сочетание элементов, значение - пара определителей */
        //static Dictionary<string, detansPair> getDetans(
        static Dictionary<string, DetansPair> getDetans(
            PassiveElement[] elements, AdvancedScheme scheme, ref int detansCount)
        {
            Dictionary<string, DetansPair> elementsToDetanPairDictionary = new Dictionary<string, DetansPair>();
            int elementsCount = elements.Length;
            List<Element> elementsList = new List<Element>();
            foreach (PassiveElement element in scheme.passiveElementsList)
            {
                elementsList.Add(element);
            }
            List<Element> activeElementsForZ = scheme.activeElementsListForZ;
            List<Element> activeElementsForQ = scheme.activeElementsListForQ;
            foreach (PassiveElement element in elements)
            {
                elementsList.AddRange((element).clonnedElements);

                elementsList.Remove((element).cloneElement);
            }
            string selectedElementsString = elementsToNamesString(elements);
            //elementsList.AddRange(scheme.nullersList);
            /* Перебор длин сочетаний элементов */
            for (int i = 0; i <= elementsCount; i++)
            {
                /* Первое сочетание данной длины */
                int[] indexes = makeCombination(i);
                /* Перебор остальных сочетаний данной длины */
                while (true)
                {
                    List<Element> removedElements = new List<Element>();
                    List<Element> subtendedElements = new List<Element>();
                    List<Element> localElementsList = new List<Element>(elementsList);
                    List<Element> associatedElements = new List<Element>();
                    /* Перебор элементов данного сочетания */
                    for (int j = 0; j < elementsCount; j++)
                    {
                        /* Нейтрализация или стягивание элемента */
                        if (Array.IndexOf(indexes, j + 1) >= 0)
                        {
                            scheme.transformElementToInfin((elements[j]).cloneElement, localElementsList);
                            associatedElements.Add(elements[j]);
                            removedElements.Add(elements[j]);
                        }
                        else
                        {
                            scheme.transformElementToZero((elements[j]).cloneElement, localElementsList);
                            subtendedElements.Add(elements[j]);
                        }
                    }
                    /* Далее - формирование списка элементов и рассчет определителей */
                    List<Element> elementsListToZ = new List<Element>(localElementsList);
                    elementsListToZ.AddRange(activeElementsForZ);
                    List<Element> elementsListToQ = new List<Element>(localElementsList);
                    elementsListToQ.AddRange(activeElementsForQ);

                    string pattern = "δ(%element%)";
                    string delimiter = ";";
                    string removedElementsString = elementsToNamesString(removedElements, pattern, delimiter);
                    string keyString = selectedElementsString + "|" + removedElementsString;

                    string numeratorDetan;
                    string denominatorDetan;
                    if (mainForm.elementsStringToDetansMap.ContainsKey(keyString))
                    {
                        numeratorDetan = mainForm.elementsStringToDetansMap[keyString].itsNumeratorDetan;
                        denominatorDetan = mainForm.elementsStringToDetansMap[keyString].itsDenominatorDetan;
                    }
                    else
                    {
                        numeratorDetan = getDetan(elementsListToZ);
                        //mainForm.elementsStringToDetansMap[keyString].itsNumeratorDetan = numeratorDetan;
                        denominatorDetan = getDetan(elementsListToQ);
                        correctFormule(ref numeratorDetan);
                        correctFormule(ref denominatorDetan);
                        //mainForm.elementsStringToDetansMap[keyString].itsDenominatorDetan = denominatorDetan;
                        mainForm.elementsStringToDetansMap.Add(
                            keyString, new DetansPair(numeratorDetan,denominatorDetan));
                    }
                    string elementsString = elementsToNamesString(associatedElements);
                    elementsToDetanPairDictionary.Add(elementsString, new DetansPair(numeratorDetan, denominatorDetan));
                    detansCount += 2;

                    if (nextCombination(indexes, elements.Length) != 0)
                        break;
                }
            }
            return elementsToDetanPairDictionary;
        }