Основы объектно-ориентированного программирования на языке C# book | Page 178
8 Вправи
pc++;
break;
case 12:
proof[pc].IsAssertion = false;
proof[pc].Operation = "IMPLICATION";
proof[pc].Arg1 = s[top++];
proof[pc].Arg2 = s[top++];
pc++;
break;
case 13:
case 14:
A = s[top++]; B = s[top++];
int[] x = new int[256], y = new int[256];
x[0] = A; y[0] = B;
int count = 1;
while (count > 0)
{
count--;
if (proof[x[count]].Operation != proof[y[count
]].Operation)
{
count = -1;
break;
}
else if (proof[x[count]].Operation == "NOT")
{
x[count] = proof[x[count]].Arg1; y[count]
= proof[y[count]].Arg1; count++;
}
else if (proof[x[count]].Operation == "
IMPLICATION")
{
int xc = x[count], yc = y[count];
x[count] = proof[xc].Arg1; y[count] =
proof[yc].Arg1; count++;
x[count] = proof[xc].Arg2; y[count] =
proof[yc].Arg2; count++;
}
}
if (count == 0)
{
if (code == 13)
{
proof[pc].IsAssertion = true;
proof[pc].Operation = "IMPLICATION";
proof[pc].Arg1 = A;
proof[pc].Arg2 = B;
pc++;
}
else if (proof[A].IsAssertion || proof[B].
IsAssertion)
{
proof[A].IsAssertion = true;
proof[B].IsAssertion = true;
}
}
break;
case 15: ;
A = s[top++]; B = s[top++];
178