Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МОЙ 2 ТП.doc
Скачиваний:
7
Добавлен:
09.09.2019
Размер:
793.6 Кб
Скачать

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();

}

}

}