С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 14.11.2013
Сообщений: 7
1

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

17.12.2013, 19:57. Показов 1633. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
помогите, прошу очень-очень, суть вопроса внизу

Задание, на основе которого написан код:

Строки данного класса могут содержать только символы "0" или "1".Если в составе инициализирующей строки будут встречены любые символы, отличные от допустимых, класс Битовая_строка принимает нулевое значение. Содержимое данных строк рассматривается как двоичное число. Отрицательные числа хранятся в дополнительном коде.

Для класса Битовая_строка определить следующие методы:
- конструктор, принимающий в качестве параметра строковый литерал;
- деструктор;
- изменение знака на противоположный (перевод числа в дополнительный код);
- присваивание;
- вычисление арифметической суммы строк;
- проверка на равенство.
В случае необходимости более короткая битовая строка расширяется влево знаковым разрядом.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
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 и перегрузить операции отношения для реализации значимой семантики сравнения объектов по какому-либо полю на свое усмотрение.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.12.2013, 19:57
Ответы с готовыми решениями:

Как реализовать интерфейс IComparable и перегрузить операции отношения?
Здравствуйте! Помогите, пожалуйста, с заданием: Выполнить задание 9, используя для хранения...

Реализовать интерфейс IComparable и перегрузить операции отношения
Задание (лаб. 9): 1. Создать абстрактный класс Persona с методами, позволяющим вывести на экран...

Реализовать интерфейс IComparable и перегрузить операции отношения для реализации семантики
Нужно в программу добавить реализацию интерфейса IComparable и перегрузить операции отношения для...

Во всех классах реализовать интерфейс IComparable и перегрузить метод CompareTo для сравнения объектов
В программах требуется описать базовый класс (возможно, абстрактный), в котором задается интерфейс...

2
Администратор
Эксперт .NET
9616 / 4758 / 761
Регистрация: 17.04.2012
Сообщений: 9,612
Записей в блоге: 14
18.12.2013, 20:58 2
Примерно так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    class stroka : IComparable
    {
        // ...
        public int CompareTo(object obj) {
            stroka s = obj as stroka;
            if (s == null)
                return -1; // можно вызвать здесь InvalidCastException
            if (this.dlina < s.dlina)
                return -1;
            if (this.dlina > s.dlina)
                return 1;
            else return 0;
        }
    }
1
Эксперт .NET
17791 / 12942 / 3381
Регистрация: 17.09.2011
Сообщений: 21,223
19.12.2013, 01:38 3
Цитата Сообщение от tezaurismosis Посмотреть сообщение
C#
1
2
3
4
5
if (this.dlina < s.dlina)
* * * * * * * * return -1;
* * * * * * if (this.dlina > s.dlina)
* * * * * * * * return 1;
* * * * * * else return 0;
Здесь можно читануть:
C#
1
return this.dlina.CompareTo(s.dlina);
2
19.12.2013, 01:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.12.2013, 01:38
Помогаю со студенческими работами здесь

Как реализовать интерфейс IComparable в этой программе?
Надо выполнить данную программу используя для хранения экземпляров разработанных классов...

Как реализовать интерфейс IComparable в индексируемом классе
Как реализовать интерфейс IComparable, если невозможно доступиться до индексируемых полей внутри...

Как перегрузить операции отношения для реализации значимой семантики сравнения объектов
Добрый вечер, уважаемые участники форума. Есть поставленная задача с наследованием: Она в...

Нужно реализовать интерфейс IComparable в каждом из наследуемых классов
Вот у меня есть абстрактный класс и наследуемые от него три, запихнул их в коллекцию. Нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru