public int CompareTo(object obj)
        {
            if ((object)this == obj)
            {
                return(0);
            }
            егистр tmp = ( егистр)obj;

            string[] outPutA = GetOutputValue().Split(" ");
            string[] outPutB = tmp.GetOutputValue().Split(" ");
            int      sumA = 0, sumB = 0;

            for (int i = 0; i < capacity; ++i)
            {
                sumA += Int32.Parse(outPutA[i]);
                sumB += Int32.Parse(outPutB[i]);
            }
            // Больше тот регистр, у которого больше единиц на выходе.
            if (sumA < sumB)
            {
                return(-1);
            }
            if (sumA > sumB)
            {
                return(1);
            }
            return(0);
        }
Beispiel #2
0
        static void Main(string[] args)
        {
            // Выполнить задания лабораторной работы 9, используя для хранения экземпляров
            // разработанных классов стандартные параметризованные коллекции. Во всех классах
            // реализовать интерфейс IComparable и перегрузить операции отношения для
            // реализации значимой семантики сравнения объектов по какому-либо полю на
            // усмотрение студента.

            // Задача 6.
            // 1. Описать  базовый  класс  Элемент. Закрытые  поля: имя  элемента  (строка
            // символов); количество  входов  элемента; количество  выходов  элемента.
            // Методы: конструктор  класса  без  параметров; конструктор,  задающий  имя  и
            // устанавливающий  равным  1  количество входов  и  выходов; конструктор,  задающий
            // значения  всех  полей  элемента. Свойства: имя  элемента  (только  чтение);
            // количество  входов  элемента; количество  выходов  элемента.
            // 2. На  основе  класса  Элемент  описать  производный  класс  Комбинационный,
            // представляющий  собой  комбинационный  элемент  (двоичный  вентиль),  который
            // может  иметь  несколько  входов  и  один  выход. Поле — массив  значений  входов.
            // Методы: конструкторы; метод,  задающий  значение  на  входах  экземпляра  класса;
            // метод,  позволяющий  опрашивать  состояние  отдельного  входа  экземпляра класса;
            // метод,  вычисляющий  значение  выхода  (по  варианту  задания).
            // 3. На  основе  класса  Элемент  описать  производный  класс  Память, представляющий
            // собой  триггер.  Триггер  имеет  входы,  соответствующие  типу  триггера
            // (см.  далее  вариант  задания),  и  входы  установки  и  сброса.  Все  триггеры
            // считаются  синхронными,  сам  синхровход  в  состав  триггера  не  включается.
            // Поля: массив  значений  входов  объекта  класса,  в  массиве  учитываются  все
            // входы (управляющие  и  информационные); состояние  на  прямом  выходе  триггера;
            // состояние  на  инверсном  выходе  триггера. Методы: конструктор  (по  умолчанию сбрасывает
            // экземпляр  класса); конструктор  копирования; метод,  задающий  значение  на
            // входах  экземпляра  класса; методы,  позволяющие  опрашивать  состояния
            // отдельного  входа  экземпляра  класса; метод,  вычисляющий  состояние  экземпляра
            // класса  (по  варианту  задания) в  зависимости  от  текущего  состояния  и
            // значений  на  входах; метод,  переопределяющий  операцию  == для  экземпляров
            // класса. 4.   Создать  класс  Регистр,  используя  класс  Память  как  вложенный
            // класс. Поля: состояние  входа  «Сброс»  — один  для  экземпляра  класса; состояние
            // входа  «Установка»  — один  для  экземпляра  класса; массив  типа  Память
            // заданной  в  варианте  размерности; массив  (массивы),  содержащий  значения  на
            // соответствующих  входах  элементов  массива  типа  Память. Методы: метод, задающий
            // значение на входах экземпляра  класса; метод, позволяющий опрашивать состояние
            // отдельного  выхода  экземпляра  класса; О  метод,  вычисляющий  значение  нового
            // состояния  экземпляра  класса. Все  поля  классов  Элемент,  Комбинационный  и
            // Память  должны  быть  описаны  с  ключевым  словом  pri  vate. В  задании
            // перечислены  только  обязательные  члены  и  методы  класса.  Можно задавать
            // дополнительные  члены  и  методы,  если  они  не  отменяют  обязательные  и
            // обеспечивают  дополнительные  удобства  при  работе  с  данными  классами,
            // например,  описать  функции  вычисления  выхода/состояния  как  виртуальные.
            // 5.   Для  проверки  функционирования  созданных  классов  написать  программу,
            // использующую  эти  классы.  В  программе  должны  быть  продемонстрированы все
            // свойства  созданных  классов. Конкретный  тип  комбинационного  элемента,  тип
            // триггера  и  разрядность  регистра  выбираются  в  соответствии  с  вариантом
            // задания: Вариант 5, Комбинационный элемент ИЛИ-НЕ, Число входов 8, Триггер V,
            // Разрядность регистра 9.
            try
            {
                // Тестируем элементы класса Элемент и его потомков
                List <Элемент> elems = new List <Элемент>();
                elems.Add(new Элемент("Элемент1"));
                elems.Add(new Элемент("Элемент2", 2, 2));
                elems.Add(new Комбинационный("Элемент3 - Комбинационный",
                                             new byte[] { 0, 0, 1, 0, 1, 1, 1, 0 }));
                elems.Add(new Комбинационный());
                Console.WriteLine($"Состояние элемента {elems[2].Name}: " + elems[2].GetOutputValue());
                byte inp2 = elems[2].GetInputValue(3);
                Console.WriteLine($"На третьм входе Элемента 3 значение {inp2}");
                elems[2].SetInputs(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 });
                Console.WriteLine("Новое состояние третьего элемента: " + elems[2].GetOutputValue());
                Console.WriteLine("Состояние четвертого элемента по умолчанию: " + elems[3].GetOutputValue());

                // Тестируем класс Регистр и Память.
                егистр registr1 = new  егистр();
                registr1.SetInputs(new byte[, ] {
                    { 1, 1 }, { 1, 0 }, { 0, 1 }, { 0, 0 },
                    { 1, 1 }, { 1, 0 }, { 0, 1 }, { 1, 1 }, { 0, 0 }
                });
                Console.WriteLine(registr1.GetOutputValue());
                егистр.Память trigger = registr1.memory[0];
                string        result  = "";
                for (int i = 0; i < registr1.memory.Length; ++i)
                {
                    result = "";
                    if (trigger == registr1.memory[i])
                    {
                        result += $" {i + 1}";
                    }
                    if (result != "")
                    {
                        Console.WriteLine("Найдены совпадающие с первым триггеры. Их номера:" + result);
                    }
                }
                registr1.SetInputs(new byte[, ] {
                    { 1, 0 }, { 1, 1 }, { 0, 1 }, { 1, 1 },
                    { 0, 1 }, { 0, 1 }, { 1, 1 }, { 1, 1 }, { 0, 1 }
                });
                result = registr1.GetOutputValue();
                // Ожидается последовательность 1 0 0 1 1 1 1 0 0.
                Console.WriteLine(result);
                // Поместим экзмепляры памяти в параметризированную коллекцию List.
                List <егистр.Память> memory = new List <егистр.Память>(registr1.memory);
                int a = 0;
            }
            catch (Exception e)
            {
                Console.WriteLine("Возникла ошибка: " + e.Message);
            }
        }