Exemple #1
0
        /// <summary>
        /// Делит 2 нечётких числа
        /// </summary>
        /// <param name="a">Первое нечёткое число делимое</param>
        /// <param name="b">Второе нечёткое число делитель</param>
        /// <returns>частное двух нечётких чисел</returns>
        public static Fuzzy_numbers <Tip_Element> operator /(Fuzzy_numbers <Tip_Element> a, Fuzzy_numbers <Tip_Element> b)
        {
            Fuzzy_numbers <Tip_Element> _Temp = new Fuzzy_numbers <Tip_Element>("(" + a.Name + "/" + b.Name + ")");

            foreach (Element_Fuzzy_numbers <Tip_Element> aa in a)
            {
                foreach (Element_Fuzzy_numbers <Tip_Element> bb in b)
                {
                    Element_Fuzzy_numbers <Tip_Element> TempElement = new Element_Fuzzy_numbers <Tip_Element>((dynamic)aa.Element / (dynamic)bb.Element, aa.Accessory_Function * bb.Accessory_Function);
                    if (!_Temp.ContainsElement(TempElement.Element))
                    {
                        _Temp.Add(TempElement);
                    }
                    else
                    {
                        Element_Fuzzy_numbers <Tip_Element> ss = _Temp.ReturnElementForElement(TempElement.Element);
                        if (ss != null)
                        {
                            if (TempElement.Accessory_Function.CompareTo(ss.Accessory_Function) < 0)
                            {
                                _Temp.Delete(ss);
                                _Temp.Add(TempElement);
                            }
                        }
                    }
                }
            }
            return(_Temp);
        }
        /// <summary>
        /// Переопределение базового сравнения
        /// </summary>
        /// <param name="obj">Объект для сравнения с текущим</param>
        /// <returns>true если равны false иначе</returns>
        public override bool Equals(System.Object obj)
        {
            Element_Fuzzy_numbers <Tip_Element> p = obj as Element_Fuzzy_numbers <Tip_Element>;

            if ((System.Object)p == null || obj == null)
            {
                return(false);
            }
            return((Element.CompareTo(p.Element) == 0) && (Accessory_Function == p.Accessory_Function));
        }
Exemple #3
0
        /// <summary>
        /// Удаляет из нечёткого числа указанный элемент.
        /// </summary>
        /// <param name="Element">Элемент нечёткого числа</param>
        public void Delete(Element_Fuzzy_numbers <Tip_Element> Element)
        {
            if (Mass == null)//если число не объявлено, объявляем его
            {
                Mass = new List <Element_Fuzzy_numbers <Tip_Element> >();
            }

            if (Mass.Contains(Element)) //если такого элемента еще в числе нету
            {
                Mass.Remove(Element);   //добавляем элемент
            }
        }
Exemple #4
0
        /// <summary>
        /// Сортировка нечёткого числа по значению функции принадлежности элемента числа
        /// </summary>
        /// <param name="A">Нечёткое число</param>
        /// <param name="low">Начальный элемент</param>
        /// <param name="high">Конечный элемент</param>
        public static Fuzzy_numbers <Tip_Element> qSort_from_Accessory_Function(Fuzzy_numbers <Tip_Element> A, int low = 0, int high = 0)
        {
            int i = low;
            int j = high;
            Element_Fuzzy_numbers <Tip_Element> x = A[(low + high) / 2];  // x - опорный элемент посредине между low и high

            do
            {
                while (A[i].Accessory_Function < x.Accessory_Function)
                {
                    ++i;                                                     // поиск элемента для переноса в старшую часть
                }
                while (A[j].Accessory_Function > x.Accessory_Function)
                {
                    --j;                                                     // поиск элемента для переноса в младшую часть
                }
                if (i <= j)
                {
                    // обмен элементов местами:
                    Element_Fuzzy_numbers <Tip_Element> temp = A[i];
                    A[i] = A[j];
                    A[j] = temp;
                    // переход к следующим элементам:
                    i++; j--;
                }
            } while (i < j);
            if (low < j)
            {
                qSort_from_Accessory_Function(A, low, j);
            }
            if (i < high)
            {
                qSort_from_Accessory_Function(A, i, high);
            }
            return(A);
        }
Exemple #5
0
 /// <summary>
 /// Определяет содержится ли в данном нечётком числе указанный элемент нечёткого числа
 /// </summary>
 /// <param name="FuzzyElement">Элемент нечёткого числа</param>
 /// <returns>true - если содержится, иначе false</returns>
 public Boolean ContainsFuzzyElement(Element_Fuzzy_numbers <Tip_Element> FuzzyElement)
 {
     return(this.Mass.Contains(FuzzyElement));
 }