using System;
namespace lolo
{
abstract class Element{
public int id;
public int input_count;
public int[] values;
public int[] input;
public int output;
public int type = 0; //1 - and, 0 - or
public int function(int type, int input_count, int[] values){
if (type == 1) {
output = 1;
for (int i = 0; i < input_count; i++) {
if (id < 4)
break;
if (values [i] == 0) {
output = 0;
}
}
} else if (type == 0) {
output = 0;
for (int i=0; i < input_count; i++){
if (id < 4)
break;
if (values [i] == 1) {
output = 1;
}
}
}
return output;
}
}
class AND : Element{
public AND(int id, int input_count, int[] input, int[] values){
this.id = id;
this.input_count = input_count;
this.values = values;
this.input = input;
}
}
class OR : Element{
public OR(int id, int input_count, int[] input, int[] values){
this.id = id;
this.input_count = input_count;
this.values = values;
this.input = input;
}
}
class Scheme {
int[] values0, values1, values2, values3;
Element[] mass;
public Scheme(int[] values0, int[] values1, int[] values2, int[] values3){
this.values0 = values0;
this.values1 = values1;
this.values2 = values2;
this.values3 = values3;
Element[] mass;
}
public void onScreen(int number, Element[] mass){
this.mass = mass;
Console.Write ("1. id элемента: " + mass[number].id + "\n" +
"2. Количество входов: " + mass [number].input_count + "\n" +
"3. id присоединенных элементов: ");
for (int i = 0; i < mass [number].input_count; i++) {
if (number < 4) {
Console.Write ("нет подключенных элементов");
break;
}
Console.Write (mass [number].input [i] + " ");
}
Console.WriteLine ();
Console.Write ("4. Значения на входе: ");
for(int i=0; i<mass[number].input_count; i++)
Console.Write(mass[number].values[i] + " ");
Console.WriteLine ();
Console.Write("5. Значение на выходе: " + mass[number].function(0,mass[0].input_count,values0));
}
public Element[] ono(){
// Элемент с id = 0
int[] inputs0 = new int[]{ 0 };
OR idZero = new OR (0, 2, inputs0, values0);
int result0 = idZero.function(0,2,values0);
// Элемент с id = 1
int[] inputs1 = new int[]{ 0 };
AND idOne = new AND (1, 3, inputs1, values1);
int result1 = idOne.function(1,3,values1);
// Элемент с id = 2
int[] inputs2 = new int[]{ 0 };
AND idTwo = new AND (2, 4, inputs2, values2);
int result2 = idTwo.function(1,4,values2);
// Элемент с id = 3
int[] inputs3 = new int[]{ 0 };
OR idThree = new OR (3, 4, inputs3, values3);
int result3 = idThree.function(0,4,values3);
// Элемент с id = 4
int[] inputs4 = new int[]{ 0, 1 };
int[] values4 = new int[]{ result0, result1 };
AND idFour = new AND (4, 2, inputs4, values4);
int result4 = idFour.function(1,2,values4);
// Элемент с id = 5
int[] inputs5 = new int[]{ 4, 2 };
int[] values5 = new int[]{ result2, result4 };
OR idFive = new OR (5, 2, inputs5, values5);
int result5 = idFive.function(0,2,values5);
// Элемент с id = 6
int[] inputs6 = new int[]{ 5, 3 };
int[] values6 = new int[]{ result3, result5 };
AND idSix = new AND (6, 2, inputs6, values6);
Console.WriteLine ("Значение на выходе схемы:" + idSix.function(1,2,values6));
Element[] mass = new Element[]{idZero, idOne, idTwo, idThree, idFour, idFive, idSix};
return mass;
}
}
class MainClass
{
public static void Main (string[] args)
{
int[] values0 = new int[]{ 0, 1 };
int[] values1 = new int[]{ 1, 1, 1 };
int[] values2 = new int[]{ 0, 1, 1, 1 };
int[] values3 = new int[]{ 0, 1, 0, 0 };
Scheme inside = new Scheme (values0, values1, values1, values3);
int num = 0;
Element[] mass = inside.ono ();
Console.WriteLine ("Характеристики " + num + " элемента");
inside.onScreen (num, mass);
}
}
}