/// <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) { Fuzzy_numbers <Tip_Element> p = obj as Fuzzy_numbers <Tip_Element>; if ((System.Object)p == null || obj == null) { return(false); } return(Mass == p.Mass); }
/// <summary> /// Конструктор нечёткого числа /// </summary> /// <param name="Mass">Нечёткое число</param> /// <param name="name">Название нечёткого числа</param> public Fuzzy_numbers(Fuzzy_numbers <Tip_Element> FuzzyNumbers, String name = "") { this.Mass = FuzzyNumbers.Mass; if (name.Equals("")) { this.name = FuzzyNumbers.Name; } else { this.name = name; } }
/// <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); }