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

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

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

помогите, прошу очень-очень, суть вопроса внизу Задание, на основе которого написан код: Строки данного класса могут содержать только символы "0" или "1".Если в составе инициализирующей строки будут встречены любые символы, отличные от допустимых, класс Битовая_строка принимает нулевое значение. Содержимое данных строк рассматривается как двоичное число. Отрицательные числа хранятся в дополнительном коде. Для класса Битовая_строка определить следующие методы: - конструктор, принимающий в качестве параметра строковый литерал; - деструктор; - изменение знака на противоположный (перевод числа в дополнительный код); - присваивание; - вычисление арифметической суммы строк; - проверка на равенство. В случае необходимости более короткая битовая строка расширяется влево знаковым разрядом.
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 и перегрузить операции отношения для реализации значимой семантики сравнения объектов по какому-либо полю на свое усмотрение.

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

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

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


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

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

11   голосов , оценка 4 из 5
Похожие ответы