Element.Cs
using System;
using System.Collections.Generic;
using System.Text;
namespace Laba2_3_var_4
{
//----------Задание 1 Описать базовый класс "Элемент"-------
abstract class Element
{
//--------------------2------------------------------
//конструктор без параметров
public Element()
{
}
//конструктор с установкой входов и имени
public Element(string name, int enter)
{
this.name = name;
this.enter = enter;
quit = 1;
}
//конструктор задающий имя, вход и выход
public Element(string name, int enter, int quit)
{
this.name = name;
this.enter = enter;
this.quit = quit;
}
//---------------1------------------------------------
private string name;//имя
private int enter;//кол-во входов
private int quit;//кол-во выходов
//---------------3------------------------------------
//свойство выдающее имя элемента
public string Name
{
get { return name; }
}
//свойство выдающее и устанавлтвающее кол-во входов
public int Enter
{
get { return enter; }
set { enter = Enter; }
}
//свойство выдающее и устанавлтвающее кол-во выходов
public int Quit
{
get { return quit; }
set { quit = Quit; }
}
//переопределение метода equals
public override bool Equals(object obj)
{
if (obj == null || GetType() != obj.GetType())
return this == (Element)obj;
else return false;
}
//переопределение оператора ==
public static bool operator ==(Element x, Element y)
{
if (y.GetType() == x.GetType())
return x.name == y.name && x.enter == y.enter && x.quit == y.quit;
else return false;
}
//переопределение оператора !=
public static bool operator !=(Element x, Element y)
{
if (y.GetType() == x.GetType())
return !(x == y);
else return false;
}
//
public override int GetHashCode()
{
return name.GetHashCode() ^ enter.GetHashCode() ^ quit.GetHashCode();
}
}
}
Reg.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace Laba2_3_var_4
{
//Задание 4 Класс Регистр
class Reg
{
private int raz;//размерность регистра
private List<Trigger> registr = new List<Trigger>();
private byte[][] RegEnter;//массив для T и Q(t)
private byte[] quit;//массив выходов регистра
//конструктор создающий массивы
public Reg(int raz)
{
this.raz = raz;
RegEnter = new byte[raz][];
quit = new byte[raz];
for (int i = 0; i < raz; i++)
{
registr.Add(new Trigger(Convert.ToString(i + 1), 2, 2));
}
}
//метод устанавливающий значения на вход
public bool SetReg(byte[][] enter)
{
try
{
for (int i = 0; i < raz; i++)
{
RegEnter[i] = enter[i];
registr[i].SetEnter(RegEnter[i]);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return false;
}
return true;
}
//метод возвращающий значения выхода
public byte[] GetQuit()
{
for (int i = 0; i < raz; i++)
{
quit[i] = registr[i].GetQuitL();
}
return quit;
}
//метод возвращающий значения с определённого выхода
public byte GetIQuit(string name)
{
for (int i = 0; i < raz; i++)
{
if (registr[i].Name == name)
return registr[i].GetQuitL();
}
return 2;
}
//метод сбрасывающий значения регистра
public void Reset()
{
for (int i = 0; i < raz; i++)
{
registr[i].Reset();
}
}
//переопределение метода equals
public override bool Equals(object obj)
{
if (obj == null || GetType() != obj.GetType())
return this == (Reg)obj;
else return false;
}
//переопределение оператора ==
public static bool operator ==(Reg x, Reg y)
{
if (y.GetType() == x.GetType())
return x.raz == y.raz && x.quit == y.quit && x.RegEnter == y.RegEnter && x.registr == y.registr;
else return false;
}
//переопределение оператора !=
public static bool operator !=(Reg x, Reg y)
{
if (y.GetType() == x.GetType())
return !(x == y);
else return false;
}
//
public override int GetHashCode()
{
return raz.GetHashCode() ^ quit.GetHashCode() ^ RegEnter.GetHashCode() ^ registr.GetHashCode();
}
}
}