public bool Calculo(bool P1, bool P2, TipOperacoes op) { switch (op) { case TipOperacoes.AND: return(Expressoes.And(P1, P2)); case TipOperacoes.OR: return(Expressoes.Or(P1, P2)); case TipOperacoes.IF: return(Expressoes.Iff(P1, P2)); case TipOperacoes.IFTHEN: return(Expressoes.IfThen(P1, P2)); //case TipOperacoes.NAND: // return Expressoes.N(P1, P2); //case TipOperacoes.AND: // return Expressoes.Na(P1, P2); //case TipOperacoes.AND: // return Expressoes.And(P1, P2); //case TipOperacoes.AND: // return Expressoes.And(P1, P2); default: throw new NotImplementedException(); } }
//Cria e preencher a tabela verdade public static bool[,] CriarTabela() { // Numero de variaveis e de conectivos byte nVar = 9, nElem = 8; bool[,] tabela = new bool[(int)Math.Pow(2, nVar), nVar + nElem]; //Cria a tabela [linha , coluna] //Apenas para auxiliar o preenchimento das variaveis ushort aux = Convert.ToUInt16(Math.Pow(2, nVar - 1)); //Define numero de elementos true ou false ushort contRepet = 0, contCol = 0; //'col' = colunas for (ushort col = 0; col < tabela.GetLength(1); col++) { if (col < nVar)//Verifica se estah em uma coluna de variaveis. Se sim as preenche, se nao define os conectivos a partir das variaveis ja preenchidas { //'row' = linhas for (ushort row = 0; row < tabela.GetLength(0); row++) { contRepet++; if (contRepet > (aux * 2)) { contRepet = 1; } if (contRepet <= aux) { tabela[row, col] = true; } else { tabela[row, col] = false; } } // Define ate que ponto vai ser True para depois passar para False aux /= 2; } else//Define valor dos conectivos { contCol++;//Para saber qual conectivo executar em cada coluna //'row' = linhas for (ushort row = 0; row < tabela.GetLength(0); row++) { switch (contCol)//Escolhe o conectivo pela coluna de conectivos { case 1: tabela[row, col] = Expressoes.Not(tabela[row, 3 - 1]); break; case 2: tabela[row, col] = Expressoes.Not(tabela[row, 5 - 1]); break; case 3: tabela[row, col] = Expressoes.And(tabela[row, 2 - 1], tabela[row, 3 - 1]); break; case 4: tabela[row, col] = Expressoes.And(tabela[row, 1 - 1], tabela[row, 9 - 1]); break; case 5: tabela[row, col] = Expressoes.And(tabela[row, 2 - 1], Expressoes.And(tabela[row, (nVar + 2) - 1], tabela[row, 9 - 1])); break; case 6: tabela[row, col] = Expressoes.IfThenElse(tabela[row, 4 - 1], tabela[row, 6 - 1], tabela[row, 7 - 1]); break; case 7: tabela[row, col] = Expressoes.IfThenElse(tabela[row, (nVar + 1) - 1], tabela[row, (nVar + 4) - 1], tabela[row, (nVar + 5) - 1]); break; case 8: tabela[row, col] = Expressoes.IfThenElse(tabela[row, (nVar + 3) - 1], tabela[row, (nVar + 6) - 1], tabela[row, (nVar + 7) - 1]); break; } } } } return(tabela); }
//Teste individual public static void TesteIndividual() { byte op = 0; Console.Clear(); Console.WriteLine(" PONTIFICIA UNIVERSIDADE CATOLICA DE MINAS GERAIS"); Console.WriteLine(" TRABALHO INTERDISCIPLINAR"); Console.WriteLine(" 1o PERIODO - SISTEMAS DE INFORMACAO"); Console.WriteLine("\n"); Console.WriteLine(" Escolha o conectivo a ser testado:\n"); Console.WriteLine(" 1 - NOT."); Console.WriteLine(" 2 - AND."); Console.WriteLine(" 3 - OR."); Console.WriteLine(" 4 - IF...THEN."); Console.WriteLine(" 5 - IF...THEN...ELSE."); Console.WriteLine(" 6 - IFF."); Console.WriteLine(" 7 - ORR."); Console.WriteLine(" 0 - Sair do menu de conectivos\n"); do { Console.Write(" Digite sua escolha => "); try { op = Convert.ToByte(Console.ReadLine()); } catch (OverflowException) { op = 8; } bool t1, t2, t3; switch (op) { case 1: Console.Write("\n Teste NOT (1 variavel)"); Console.Write("\n Digite o valor da variavel do teste (1 = true | 0 ou !=1 = false) => "); t1 = Convert.ToInt32(Console.ReadLine()) == 1 ? true : false; Console.Write("\n NOT T1({0}) = {1}\n\n", t1, Expressoes.Not(t1)); break; case 2: Console.Write("\n Teste AND (2 variaveis)"); Console.Write("\n Digite o valor da variavel 1 do teste (1 = true | 0 ou !=1 = false) => "); t1 = Convert.ToInt32(Console.ReadLine()) == 1 ? true : false; Console.Write(" Digite o valor da variavel 2 do teste (1 = true | 0 ou !=1 = false) => "); t2 = Convert.ToInt32(Console.ReadLine()) == 1 ? true : false; Console.Write("\n T1({0}) AND T2({1}) = {2}\n\n", t1, t2, Expressoes.And(t1, t2)); break; case 3: Console.Write("\n Teste OR (2 variaveis)"); Console.Write("\n Digite o valor da variavel 1 do teste (1 = true | 0 ou !=1 = false) => "); t1 = Convert.ToInt32(Console.ReadLine()) == 1 ? true : false; Console.Write(" Digite o valor da variavel 2 do teste (1 = true | 0 ou !=1 = false) => "); t2 = Convert.ToInt32(Console.ReadLine()) == 1 ? true : false; Console.Write("\n T1({0}) OR T2({1}) = {2}\n\n", t1, t2, Expressoes.Or(t1, t2)); break; case 4: Console.Write("\n Teste IF...THEN (2 variaveis)"); Console.Write("\n Digite o valor da variavel 1 do teste (1 = true | 0 ou !=1 = false) => "); t1 = Convert.ToInt32(Console.ReadLine()) == 1 ? true : false; Console.Write(" Digite o valor da variavel 2 do teste (1 = true | 0 ou !=1 = false) => "); t2 = Convert.ToInt32(Console.ReadLine()) == 1 ? true : false; Console.Write("\n IF T1({0}) THEN T2({1}) = {2}\n\n", t1, t2, Expressoes.IfThen(t1, t2)); break; case 5: Console.Write("\n Teste IF...THEN...ELSE (3 variaveis)"); Console.Write("\n Digite o valor da variavel 1 do teste (1 = true | 0 ou !=1 = false) => "); t1 = Convert.ToInt32(Console.ReadLine()) == 1 ? true : false; Console.Write(" Digite o valor da variavel 2 do teste (1 = true | 0 ou !=1 = false) => "); t2 = Convert.ToInt32(Console.ReadLine()) == 1 ? true : false; Console.Write(" Digite o valor da variavel 3 do teste (1 = true | 0 ou !=1 = false) => "); t3 = Convert.ToInt32(Console.ReadLine()) == 1 ? true : false; Console.Write("\n IF T1({0}) THEN T2({1}) ELSE T3({2}) = {3}\n\n", t1, t2, t3, Expressoes.IfThenElse(t1, t2, t3)); break; case 6: Console.Write("\n Teste IFF (2 variaveis)"); Console.Write("\n Digite o valor da variavel 1 do teste (1 = true | 0 ou !=1 = false) => "); t1 = Convert.ToInt32(Console.ReadLine()) == 1 ? true : false; Console.Write(" Digite o valor da variavel 2 do teste (1 = true | 0 ou !=1 = false) => "); t2 = Convert.ToInt32(Console.ReadLine()) == 1 ? true : false; Console.Write("\n T1({0}) IFF T2({1}) = {2}\n\n", t1, t2, Expressoes.Iff(t1, t2)); break; case 7: Console.Write("\n Teste ORR (2 variaveis)"); Console.Write("\n Digite o valor da variavel 1 do teste (1 = true | 0 ou !=1 = false) => "); t1 = Convert.ToInt32(Console.ReadLine()) == 1 ? true : false; Console.Write(" Digite o valor da variavel 2 do teste (1 = true | 0 ou !=1 = false) => "); t2 = Convert.ToInt32(Console.ReadLine()) == 1 ? true : false; Console.Write("\n T1({0}) ORR T2({1}) = {2}\n\n", t1, t2, Expressoes.Orr(t1, t2)); break; default: Console.WriteLine(" ERRO!!!"); Console.WriteLine(" Digito invalido!\n"); break; } } while (op != 0); }