/// <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)); }
/// <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); //добавляем элемент } }
/// <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); }
/// <summary> /// Определяет содержится ли в данном нечётком числе указанный элемент нечёткого числа /// </summary> /// <param name="FuzzyElement">Элемент нечёткого числа</param> /// <returns>true - если содержится, иначе false</returns> public Boolean ContainsFuzzyElement(Element_Fuzzy_numbers <Tip_Element> FuzzyElement) { return(this.Mass.Contains(FuzzyElement)); }