você está aqui: Home  → Arquivo de Mensagens

Ebook Gratuito: Dá para fazer em Shell?, com o Prof. Julio Neves

Redução de expressões com operadores lógicos

Colaboração: Ricardo Takemura

Data de Publicação: 11 de março de 2016

Para quem fez informática: alguém se lembra de algumas aulas sobre redução de expressões lógicas? Sabia que dá para aplicar no código-fonte de uma aplicação?

Por exemplo, se eu tenho a condição:

if (((x == 0) || (y == 0)) && ((x == 0) || (z == 0))) { 
... 
} 

Eu posso reduzi-la pela equivalência:

(A OR B) AND (A OR C) -> A OR (B AND C) 

Assim, eu posso simplificar o código da seguinte maneira:

if ((x == 0) || ((y == 0) && (z == 0))) { 
... 
} 

A mesma coisa, eu poderia fazer com outras expressões:

(A AND B) OR (A AND C) -> A AND (B OR C) 
(A AND B) AND (A AND C) -> A AND B AND C 
(A OR B) OR (A OR C) -> A OR B OR C 

O legal, é que vale para aquelas expressões mais "complicadas" (ou mais "cabeças", como alguns falam :P ) :

NOT A OR NOT B -> NOT (A AND B) 
NOT A AND NOT B -> NOT (A OR B) 
(NOT A AND B) OR (NOT B AND A) -> A XOR B 
(NOT A OR B) AND (NOT B OR A) -> NOT (A XOR B) 

Vamos pegar a última expressão acima:

if (((!(a > b)) || (c < d)) && ((!(c < d)) || (a > b))) { 
... 
} 

Aplicando:

(NOT A OR B) AND (NOT B OR A) -> NOT (A XOR B) 

Temos:

if (!((a > b) ^ (c < d))) { 
... 
} 

Será que isso ajuda alguém? :)



Veja a relação completa dos artigos de Ricardo Takemura