Lógica de Programação - Operadores Lógicos


No artigo anterior em lógica de programação, vimos o que são operadores relacionais. Que têm esse nome por relacionarem dois valores de mesmo tipo primitivo e retornarem um valor lógico de verdadeiro ou falso obtido pela relação. E nesse mesmo artigo vimos que são operadores binários e que não podem ser utilizados como  na matemática da forma (1 < x < 10) e sim (1 < x) e (x < 10). O que interliga essas duas operações relacionais é um operador lógico.

Operadores Lógicos

São quatro os operadores utilizados para a formação de novas proposições compostas a partir de proposições simples. Proposição é uma sentença lógica que podemos atribuir somente um valor, de verdadeiro ou falso. Você pode ler mais sobre lógica proposicional em Lógica Proposicional - Introdução. Os operadores lógicos são:

OperadorFunçãoExemplos
econjunção(a > b) e (a > c)
oudisjunção inclusiva(3 = 5) ou (5 = 3 + 2)
xoudisjunção exclusivaVERDADEIRO xou FALSO
naonegaçãonao VERDADEIRO

Tabela Verdade dos Operadores Lógicos

Tabela verdade é o conjunto de todas as possibilidades combinatórias entre os valores de diversas variáveis lógicas, as quais se encontram em apenas duas situações (V ou F), e um conjunto de operadores lógicos (Forbellone e Eberspächer, 2005).

Você pode ler detalhadamente sobre todas as tabelas verdades no artigo de Lógica Proposicional - Conectivo e Tabela Verdade. Aqui só será apresentado a ideia geral.

Conjunção e

Faz com que o resultado de um teste lógico se torne verdadeiro, somente se todas as condições também forem verdadeiras. Em algumas linguagens de programação é representado pelo operador "&&".
algoritmo "TabelaVerdadeE"
inicio
    escreva(VERDADEIRO e VERDADEIRO)
    escreva(VERDADEIRO e FALSO)
    escreva(FALSO e VERDADEIRO)
    escreva(FALSO e FALSO)
fimalgoritmo
Saída
VERDADEIRO
FALSO
FALSO
FALSO

Disjunção ou inclusivo

Faz com que o resultado de um teste lógico se torne verdadeiro, quando pelo menos uma condição é verdadeira. Em algumas linguagens de programação é representado pelo operador "||".
algoritmo "TabelaVerdadeOU"
var
inicio
    escreva(VERDADEIRO ou VERDADEIRO)
    escreva(VERDADEIRO ou FALSO)
    escreva(FALSO ou VERDADEIRO)
    escreva(FALSO ou FALSO)
fimalgoritmo
Saída
VERDADEIRO
VERDADEIRO
VERDADEIRO
FALSO

Disjunção ou exclusivo

Faz com que o resultado de um teste lógico se torne verdadeiro, somente se uma condição for verdadeira e a outra falsa. Também é chamado de xor (exclusive or) e em algumas linguagens de programação é representado pelo operador "^".
algoritmo "TabelaVerdadeXOU"
var
inicio
    escreva(VERDADEIRO xou VERDADEIRO)
    escreva(VERDADEIRO xou FALSO)
    escreva(FALSO xou VERDADEIRO)
    escreva(FALSO xou FALSO)
fimalgoritmo
Saída
FALSO
VERDADEIRO
VERDADEIRO
FALSO

Na Teoria dos Conjuntos, é conhecido como diferença simétrica, definido como tudo aquilo que pertence a união mas que não pertence a interseção. Você pode ler mais em Teoria dos Conjuntos - Diferença Simétrica.

Negação nao

Diferente de todos os operadores lógicos anteriores, que são binários, ou seja, que trabalham com dois operandos, o nao é um inversor lógico, portanto unário. Um nao VERDADEIRO é FALSO e um nao FALSO é VERDADEIRO. Em algumas linguagens de programação é representado pelo operador "!".

Na Teoria dos Conjuntos, é conhecido como complementar. Você pode ler mais sobre isso em Operações com Conjuntos parte 1.

Ordem de Precedência entre Operadores Lógicos

  1. Parênteses ( )
  2. Negação nao
  3. Conjunção e
  4. Disjunção inclusiva ou; Disjunção exclusiva xou
Em caso de empate, resolve-se da esquerda para a direita.

Operações Envolvendo Diversos Operadores

É possível utilizar muitos operadores em um teste lógico para se obter um valor verdade. Exemplo:

Em uma escola a média final de um aluno pode ir de 0 a 10. Com média entre 0 a 3, o aluno será reprovado; maior que 3 e menor que 6 resulta em exame e uma média maior ou igual a 6 resulta em aprovação desde que o aluno não tenha mais que 10 faltas.

Um aluno ficou de exame em uma disciplina na escola. Para passar nela, sua média mais a nota do exame deve ser maior ou igual a 12 e o aluno não pode ter mais de 10 faltas.
algoritmo "SituacaoAluno"
var
 media, exame: real
 faltas: inteiro
inicio
 escreva("Média do aluno: ")
 leia(media)

 escreva("Faltas do aluno: ")
 leia(faltas)

 escreva("Nota do exame: ")
 leia(exame)

 se (media + exame >= 12) e (faltas <= 10) entao
  escreva("APROVADO")
 senao
  escreva("REPROVADO")
 fimse
fimalgoritmo

Note que nessa condição foram utilizados aritméticos, relacionais e lógicos. Qual a ordem de precedência entre eles então?

Ordem de Precedência entre Operadores em Geral

É uma convenção, a maioria das linguagens de programação seguem esta ordem, mas elas possuem mais operadores do que os que aprenderemos aqui em pseudocódigo, por isso é uma convenção. Em C por exemplo, existe o operador ternário "? :" e operadores compostos como o "+=", além de outros operadores que não pertencem a classificação a seguir como operadores de incremento e decremento. Mas retomando a ordem que convencionalmente é seguida:
  1. Parênteses
  2. Aritméticos
  3. Relacionais
  4. Lógicos
Se houver uma operação de atribuição, ela sempre será feita por último. Exemplo:
algoritmo "SituacaoAluno"
var
 media, exame: real
 faltas: inteiro
 situacao: logico
inicio
 media := 4
 exame := 7
 faltas := 5

 situacao := (media + exame >= 12) e (faltas <= 10)
 escreva(situacao)
fimalgoritmo
Qual será a saída? Vamos resolver:
  1. situacao := (4 + 7 >= 12) e (5 <= 10) //Operadores aritméticos
  2. situacao := (11 >= 12) e (5 <= 10) //Operadores relacionais
  3. situacao := FALSO e VERDADEIRO //Operadores lógicos
  4. situacao := FALSO //Atribuição
Saída
FALSO

O que você aprendeu

Este artigo teve por objetivo apresentar os operadores lógicos, bem como sua utilização através do pseudocódigo, demonstrando sua importância e relacionando-os a outros assuntos importantes como Teoria dos Conjuntos e Lógica Proposicional. Você aprendeu:
  • O que são operadores lógicos.
  • Tabela verdade dos operadores lógicos.
  • Ordem de precedência entre operadores lógicos.
  • Operações com diversos operadores.
  • Ordem de precedência entre operadores em geral.

Referência Bibliográfica
MANZANO, J. A. N. G.; OLIVEIRA, J. F. Algoritmos: lógica para Desenvolvimento de Programação de Computadores. 17. ed. São Paulo: Érica, 2005. 219 p.

FORBELLONE, A. L. V.; EBERSPÄCHER, H. F. Lógica de programação: a construção de algoritmos e estrutura de dados. 3. ed. São Paulo: Prentice Hall, 2005. 208 p.


Para citar esse artigo:

Comentários