
Element.Cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Lab2V1
{
//----------Задание 1 Описать базовый класс "Элемент"-------
class Element
{
//Закрытые поля:
private String Name; //имя элемента (строка символов)
private int CntIn; //количество входов элемента
private int CntOut; //количество выходов элемента
//конструктор класса без параметров
public Element()
{
Name = "Элемент";
CntOut = 1;
CntIn = 1;
}
//конструктор, задающий имя и устанавливающий равным 1 количество входов и выходов
public Element(String Name)
{
this.Name = Name;
CntIn = 1;
CntOut = 1;
}
//конструктор, задающий значения всех полей элемента
public Element(String Name, int CountIn, int CountOut)
{
this.Name = Name;
this.CntIn = CountIn;
this.CntOut = CountOut;
}
//имя элемента (только чтение)
public String GetName
{
get { return Name; }
}
//количество входов элемента
public int CountIn
{
set { CntIn = value; }
get { return CntIn; }
}
//количество выходов элемента
public int CountOut
{
set { CntOut = value; }
get { return CntOut; }
}
//переопределение метода equals
public override bool Equals(object obj)
{
// Если параметр равен нулю, то возвращается ложь
if (obj == null)
{
return false;
}
// Если параметр не может быть приведен к типу Point возвращаем ложь.
Element p = obj as Element;
if ((System.Object)p == null)
{
return false;
}
// Return true if the fields match:
return (Name == p.Name) && (CntIn == p.CntIn) && (CntOut == p.CntOut);
}
//метод hashCode у одинаковых объектов должен быть одинаковым:
public override int GetHashCode()
{
return Name.GetHashCode() ^ CntIn.GetHashCode() ^ CntOut.GetHashCode();
}
}
}
Registr.Cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Lab2V1
{
//класс “Регистр”, использующий класс “Память” как вложенный класс
class Register
{
private bool Reset; //состояние входа «Сброс» — один для экземпляра класса
private bool Set; //состояние входа «Установка» — один для экземпляра класса
private Trigger[] Bank; //массив типа Память заданной в варианте размерности
private bool[] In; //массив, содержащий значения на соответствующих входах элементов массива типа “Память”
//конструктор
public Register()
{
Bank = new Trigger[8];
Bank.Initialize();
for (int i = 0; i < 8; i++)
{
Bank[i] = new Trigger();
}
Reset = false;
Set = false;
In = new bool[16];
In.Initialize();
}
//метод, задающий значение на входах экземпляра класса Register
public bool SetValue(bool[] NewValue)
{
if (In.GetLength(0) == NewValue.GetLength(0)) // если число входов регистра совпадает с веденным числом
{
bool[] tmp = new bool[2];
for (int i = 0; i < Bank.GetLength(0); i++)
{
tmp[0] = In[i * 2];
tmp[1] = In[i * 2 + 1];
if (Bank[i].SetValue(tmp) == false) //устанавливаем значения входов и-ого триггера
return false;
}
return true;
}
else
return false;
}
//метод, позволяющий опрашивать состояние отдельного выхода экземпляра класса Register
public bool GetOut(int Index, out bool Error)
{
if (Index < Bank.GetLength(0))
{
Error = false;
Bank[Index].Calc(); // вычисляем Q
return Bank[Index].GetOut(); //возвращаем значение Q с итого триггера
}
else
{
Error = true;
return false;
}
}
//метод, вычисляющий значение нового состояния экземпляра класса
public String Calc()
{
String zn = "";
bool[] tmp = new bool[2];
for (int i = 0; i < 8; i++)
{
tmp[0] = In[i * 2];
tmp[1] = In[i * 2 + 1];
Bank[i].SetValue(tmp); //устанавливает значение i-ого триггера
Bank[i].Calc(); //подсчитываем значение на выходе и-ого триггера
zn = zn + (Convert.ToInt32(Bank[i].GetOut())).ToString(); // добавляем к строке значение и-ого триггера
}
return zn;
}
//переопределение метода equals
public override bool Equals(System.Object obj)
{
// если параметр не может быть приведен к CombElem false:
Register p = obj as Register;
if ((object)p == null)
{
return false;
}
return (In == p.In) && (Reset == p.Reset) && (Bank == p.Bank) && (Set == p.Set);
}
//метод hashCode у одинаковых объектов должен быть одинаковым:
public override int GetHashCode()
{
return In.GetHashCode() ^ Reset.GetHashCode() ^ Set.GetHashCode() ^ Bank.GetHashCode();
}
}
}