Как реализовать интерфейс IComparable и перегрузить операции отношения? - C# (201042)

Узнай цену своей работы

Формулировка задачи:

помогите, прошу очень-очень, суть вопроса внизу Задание, на основе которого написан код: Строки данного класса могут содержать только символы "0" или "1".Если в составе инициализирующей строки будут встречены любые символы, отличные от допустимых, класс Битовая_строка принимает нулевое значение. Содержимое данных строк рассматривается как двоичное число. Отрицательные числа хранятся в дополнительном коде. Для класса Битовая_строка определить следующие методы: - конструктор, принимающий в качестве параметра строковый литерал; - деструктор; - изменение знака на противоположный (перевод числа в дополнительный код); - присваивание; - вычисление арифметической суммы строк; - проверка на равенство. В случае необходимости более короткая битовая строка расширяется влево знаковым разрядом.
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. namespace lab
  5. {
  6. class stroka
  7. {
  8. public string[] st = new string[20];
  9. public int dlina;
  10. public stroka(string[] stp)
  11. {
  12. st = stp;
  13. }
  14. public stroka(char a)
  15. {
  16. st[0] = Convert.ToString(a);
  17. }
  18. public stroka()
  19. { }
  20. public void dlina_method(int a)
  21. {
  22. this.dlina = a;
  23. }
  24. public void chistka()
  25. {
  26. this.st = null;
  27. this.dlina = 0;
  28. }
  29. }
  30. class bit_stroka : stroka
  31. {
  32. public bool znak;
  33. public string st = " ";
  34. public bit_stroka(string stp)
  35. {
  36. st = stp;
  37. }
  38. ~bit_stroka()
  39. {
  40. }
  41. public static bit_stroka operator +(bit_stroka m1, bit_stroka m2)
  42. {
  43. bit_stroka str = new bit_stroka("0000000000000000000");
  44. char[] a = str.st.ToCharArray();
  45. for (int i = m1.st.Length - 1; i >= 0; i--)
  46. a[i] = Convert.ToString(Convert.ToInt32(Convert.ToString(m1.st[i])) + Convert.ToInt32(Convert.ToString(m2.st[i])))[0];
  47. for (int i = m1.st.Length - 1; i > 0; i--)
  48. {
  49. if (a[i] == '2')
  50. {
  51. a[i - 1] = Convert.ToString(Convert.ToInt32(Convert.ToString(a[i-1])) + 1)[0];
  52. a[i] = '0';
  53. }
  54. if (a[i] == '3')
  55. {
  56. a[i - 1] = Convert.ToString(Convert.ToInt32(Convert.ToString(a[i-1])) + 1)[0];
  57. a[i] = '1';
  58. }
  59.  
  60. }
  61. string g = "";
  62. for (int i = 0; i < a.Length; i++)
  63. g += a[i];
  64. str.st = g;
  65. return str;
  66. }
  67. public static bool operator ==(bit_stroka m1, bit_stroka m2)
  68. {
  69. bool x;
  70. if (m1.st == m2.st)
  71. x = true;
  72. else x = false;
  73. return x;
  74. }
  75. public static bool operator !=(bit_stroka m1, bit_stroka m2)
  76. {
  77. bool x;
  78. if (m1.st != m2.st)
  79. x = true;
  80. else x = false;
  81. return x;
  82. }
  83. public static bit_stroka dop_kod(bit_stroka m1)
  84. {
  85. char[] a = m1.st.ToCharArray();
  86. if (m1.znak == false)
  87. {
  88. for (int i = a.Length-1; i >= 0; i--)
  89. {
  90. if (a[i] == '0')
  91. a[i] = '1';
  92. else
  93. a[i] = '0';
  94. }
  95. a[0] = Convert.ToChar(Convert.ToInt32(a[a.Length -1]) + 1);
  96. for (int i = a.Length-1; i >= 0; i--)
  97. {
  98. if (a[i] == '2')
  99. {
  100. a[i - 1] = Convert.ToChar(Convert.ToInt32(a[i]) + 1);
  101. a[i] = '0';
  102. }
  103. if (a[i] == '3')
  104. {
  105. a[i - 1] = Convert.ToChar(Convert.ToInt32(a[i]) + 1);
  106. a[i] = '1';
  107. }
  108. }
  109.  
  110. m1.znak = true;
  111. }
  112. string g = "";
  113. for (int i = 0; i < a.Length; i++)
  114. g += a[i];
  115. m1.st = g;
  116. return m1;
  117. }
  118. public static bit_stroka prisvaivanie(string str)
  119. {
  120. bit_stroka m1 = new bit_stroka(str);
  121. return m1;
  122. }
  123.  
  124. }
  125. class Program
  126. {
  127. static void Main(string[] args)
  128. {
  129. bit_stroka m1, m2, m3;
  130. m1 = bit_stroka.prisvaivanie("0000000000000110001");
  131. m2 = bit_stroka.prisvaivanie("0000000000000011001");
  132. Console.WriteLine("\n Первое число = "+ m1.st);
  133. Console.WriteLine("\n Второе число = "+ m2.st);
  134. m1 = bit_stroka.dop_kod(m1);
  135. Console.WriteLine("\n Умножение чисел = "+ m1.st);
  136. m3 = m1 + m2;
  137. Console.WriteLine("\n Сумма чисел = "+ m3.st);
  138. Console.WriteLine("\n Сравнение чисел m1 и m2");
  139. if (m2 == m1)
  140. Console.WriteLine(" Числа равны");
  141. else
  142. Console.WriteLine(" Числа не равны");
  143. // Console.WriteLine("{0}\n{1}\n{2}", m1.st, m2.st,m3.st);
  144.  
  145. Console.ReadLine();
  146. }
  147. }
  148. }
Сделала как написано, а теперь нужно выполнить то же задание используя для хранения экземпляров разработанных классов стандартные параметризованные коллекции. Во всех классах реализовать интерфейс IComparable и перегрузить операции отношения для реализации значимой семантики сравнения объектов по какому-либо полю на свое усмотрение.

Решение задачи: «Как реализовать интерфейс IComparable и перегрузить операции отношения?»

textual
Листинг программы
  1. return this.dlina.CompareTo(s.dlina);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы