Как реализовать интерфейс 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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д