Как реализовать интерфейс IComparable и перегрузить операции отношения? - C# (201042)
Формулировка задачи:
помогите, прошу очень-очень, суть вопроса внизу
Задание, на основе которого написан код:
Строки данного класса могут содержать только символы "0" или "1".Если в составе инициализирующей строки будут встречены любые символы, отличные от допустимых, класс Битовая_строка принимает нулевое значение. Содержимое данных строк рассматривается как двоичное число. Отрицательные числа хранятся в дополнительном коде.
Для класса Битовая_строка определить следующие методы:
- конструктор, принимающий в качестве параметра строковый литерал;
- деструктор;
- изменение знака на противоположный (перевод числа в дополнительный код);
- присваивание;
- вычисление арифметической суммы строк;
- проверка на равенство.
В случае необходимости более короткая битовая строка расширяется влево знаковым разрядом.
Сделала как написано, а теперь нужно выполнить то же задание используя для хранения экземпляров разработанных классов стандартные параметризованные коллекции. Во всех классах реализовать интерфейс IComparable и перегрузить операции отношения для реализации значимой семантики сравнения объектов по какому-либо полю на свое усмотрение.
using System; using System.Collections.Generic; using System.Text; namespace lab { class stroka { public string[] st = new string[20]; public int dlina; public stroka(string[] stp) { st = stp; } public stroka(char a) { st[0] = Convert.ToString(a); } public stroka() { } public void dlina_method(int a) { this.dlina = a; } public void chistka() { this.st = null; this.dlina = 0; } } class bit_stroka : stroka { public bool znak; public string st = " "; public bit_stroka(string stp) { st = stp; } ~bit_stroka() { } public static bit_stroka operator +(bit_stroka m1, bit_stroka m2) { bit_stroka str = new bit_stroka("0000000000000000000"); char[] a = str.st.ToCharArray(); for (int i = m1.st.Length - 1; i >= 0; i--) a[i] = Convert.ToString(Convert.ToInt32(Convert.ToString(m1.st[i])) + Convert.ToInt32(Convert.ToString(m2.st[i])))[0]; for (int i = m1.st.Length - 1; i > 0; i--) { if (a[i] == '2') { a[i - 1] = Convert.ToString(Convert.ToInt32(Convert.ToString(a[i-1])) + 1)[0]; a[i] = '0'; } if (a[i] == '3') { a[i - 1] = Convert.ToString(Convert.ToInt32(Convert.ToString(a[i-1])) + 1)[0]; a[i] = '1'; } } string g = ""; for (int i = 0; i < a.Length; i++) g += a[i]; str.st = g; return str; } public static bool operator ==(bit_stroka m1, bit_stroka m2) { bool x; if (m1.st == m2.st) x = true; else x = false; return x; } public static bool operator !=(bit_stroka m1, bit_stroka m2) { bool x; if (m1.st != m2.st) x = true; else x = false; return x; } public static bit_stroka dop_kod(bit_stroka m1) { char[] a = m1.st.ToCharArray(); if (m1.znak == false) { for (int i = a.Length-1; i >= 0; i--) { if (a[i] == '0') a[i] = '1'; else a[i] = '0'; } a[0] = Convert.ToChar(Convert.ToInt32(a[a.Length -1]) + 1); for (int i = a.Length-1; i >= 0; i--) { if (a[i] == '2') { a[i - 1] = Convert.ToChar(Convert.ToInt32(a[i]) + 1); a[i] = '0'; } if (a[i] == '3') { a[i - 1] = Convert.ToChar(Convert.ToInt32(a[i]) + 1); a[i] = '1'; } } m1.znak = true; } string g = ""; for (int i = 0; i < a.Length; i++) g += a[i]; m1.st = g; return m1; } public static bit_stroka prisvaivanie(string str) { bit_stroka m1 = new bit_stroka(str); return m1; } } class Program { static void Main(string[] args) { bit_stroka m1, m2, m3; m1 = bit_stroka.prisvaivanie("0000000000000110001"); m2 = bit_stroka.prisvaivanie("0000000000000011001"); Console.WriteLine("\n Первое число = "+ m1.st); Console.WriteLine("\n Второе число = "+ m2.st); m1 = bit_stroka.dop_kod(m1); Console.WriteLine("\n Умножение чисел = "+ m1.st); m3 = m1 + m2; Console.WriteLine("\n Сумма чисел = "+ m3.st); Console.WriteLine("\n Сравнение чисел m1 и m2"); if (m2 == m1) Console.WriteLine(" Числа равны"); else Console.WriteLine(" Числа не равны"); // Console.WriteLine("{0}\n{1}\n{2}", m1.st, m2.st,m3.st); Console.ReadLine(); } } }
Решение задачи: «Как реализовать интерфейс IComparable и перегрузить операции отношения?»
textual
Листинг программы
return this.dlina.CompareTo(s.dlina);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д