Capítulo 07: Operadores Lógicos e Portas Booleanas (E, OU, NAO)

🎯 Objetivo da Aula

Em auditorias de conformidade (Compliance) e triagem de segurança, quase nunca avaliamos uma única regra isolada. Para liberar um caminhão para uma viagem noturna, por exemplo, o veículo precisa estar rastreado E o motorista precisa estar descansado OU possuir um segundo condutor de revezamento.

Nesta aula, você aprenderá a:

  1. Compreender a Álgebra Booleana e o funcionamento das Tabelas-Verdade.
  2. Dominar a conjunção e (AND), a disjunção ou (OR) e a negação nao (NOT) no Portugol Studio.
  3. Utilizar Parênteses de Agrupamento para definir a precedência exata de testes compostos.
  4. Construir filtros rigorosos de auditoria operacional.

📥 Material de Apoio e Código-Fonte da Aula:


🏢 O Cenário Prático (Seu Desafio)

Situação: A diretoria da FastLog instituiu o Programa de Qualificação de Transportadores (Selo Ouro). Para receber o Selo Ouro, a transportadora parceira deve atender simultaneamente a três requisitos:

  1. Ter taxa de pontualidade maior ou igual a 90.0%.
  2. Ter índice de avarias menor ou igual a 2.0%.
  3. NÃO possuir nenhuma pendência jurídica ou fiscal ativa (nao temPendenciaFiscal).

Missão: Você deve criar o programa de auditoria que avalie os três critérios em uma única expressão lógica e homologue ou reprove o parceiro comercial.


🧠 Fundamentos: As Tabelas-Verdade dos Operadores Booleanos

1. O Operador e (Conjunção / AND)

O operador e só resulta em verdadeiro se TODAS as condições forem verdadeiras ao mesmo tempo:

Expressão AExpressão BA e B
verdadeiroverdadeiroverdadeiro
verdadeirofalsofalso
falsoverdadeirofalso
falsofalsofalso

2. O Operador ou (Disjunção / OR)

O operador ou resulta em verdadeiro se PELO MENOS UMA das condições for verdadeira:

Expressão AExpressão BA ou B
verdadeiroverdadeiroverdadeiro
verdadeirofalsoverdadeiro
falsoverdadeiroverdadeiro
falsofalsofalso

3. O Operador nao (Negação / NOT)

O operador nao inverte o estado booleano (nao verdadeiro vira falso; nao falso vira verdadeiro).

graph TD
    A["Expressão: (Pontualidade >= 90) e (Avarias <= 2) e (nao PendenciaFiscal)"] --> B{Avaliação Booleana}
    B -- "Todos verdadeiro" --> C["Resultado: verdadeiro -> SELO OURO HOMOLOGADO!"]
    B -- "Qualquer falso" --> D["Resultado: falso -> FORNECEDOR REPROVADO"]
    
    style B fill:#8e44ad,stroke:#fff,color:#fff
    style C fill:#27ae60,stroke:#fff,color:#fff
    style D fill:#c0392b,stroke:#fff,color:#fff

📖 Exemplo Guiado: Auditoria de Homologação de Parceiros

Código do Programa:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
programa 
{
	funcao inicio() 
	{
		cadeia transportadora
		real taxaPontualidade, taxaAvarias
		logico temPendenciaFiscal, homologado

		escreva("=== AUDITORIA DE COMPLIANCE FASTLOG ===\n")
		escreva("Nome da Transportadora Parceira: ")
		leia(transportadora)
		escreva("Taxa de Pontualidade Histórica (%): ")
		leia(taxaPontualidade)
		escreva("Índice de Avarias de Carga (%): ")
		leia(taxaAvarias)
		escreva("Possui pendências jurídicas/fiscais? (verdadeiro/falso): ")
		leia(temPendenciaFiscal)

		// Expressão Lógica Composta
		homologado = (taxaPontualidade >= 90.0) e (taxaAvarias <= 2.0) e (nao temPendenciaFiscal)

		escreva("\n--- RESULTADO DA HOMOLOGAÇÃO ---\n")
		escreva("Parceiro Avaliado: ", transportadora, "\n")

		se (homologado) 
		{
			escreva("PARECER : [HOMOLOGADO] -> CONCESSÃO DO SELO OURO!\n")
			escreva("STATUS  : Liberado para contratos prioritários.\n")
		} 
		senao 
		{
			escreva("PARECER : [NÃO HOMOLOGADO] -> CRITÉRIOS NÃO ATINGIDOS.\n")
			escreva("STATUS  : Necessário plano de ação corretivo.\n")
		}
	}
}

✅ Exemplo de Execução no Console (Shift + F6):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
=== AUDITORIA DE COMPLIANCE FASTLOG ===
Nome da Transportadora Parceira: TransLog Express
Taxa de Pontualidade Histórica (%): 95.0
Índice de Avarias de Carga (%): 1.5
Possui pendências jurídicas/fiscais? (verdadeiro/falso): falso

--- RESULTADO DA HOMOLOGAÇÃO ---
Parceiro Avaliado: TransLog Express
PARECER : [HOMOLOGADO] -> CONCESSÃO DO SELO OURO!
STATUS  : Liberado para contratos prioritários.

🛠️ Prática Obrigatória 1: Liberação de Cancela de Portaria

Passo 1: O Desafio

Crie um programa liberacao_cancela.por que avalie as regras: Um caminhão só pode cruzar a cancela se:

  • O lacre estiver conferido (lacreConferido == verdadeiro) E
  • Possuir Nota Fiscal (temNotaFiscal == verdadeiro) OU autorização da diretoria (autorizacaoDiretoria == verdadeiro).

✅ Resultado Esperado (Prática 1):

1
2
3
4
5
Lacre conferido? (verdadeiro/falso): verdadeiro
Possui Nota Fiscal? (verdadeiro/falso): falso
Autorização da Diretoria? (verdadeiro/falso): verdadeiro

STATUS DA CANCELA: CANCELA ABERTA! Embarque autorizado.

🛠️ Prática Obrigatória 2: Detector de Risco Noturno

Um alerta de perigo deve ser emitido se o caminhão estiver trafegando em horário noturno (hora >= 22 ou hora < 5) E transportando carga de alto valor (valor > 50000) E com rastreador desligado (nao rastreadorLigado). Crie o programa detector_risco.por que emita o alarme de segurança.


📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_07_SeuNome_SeuSobrenome.por.
  2. Teste diferentes combinações booleanas para validar o circuito lógico.
  3. No Microsoft Teams, envie na tarefa “Portugol Cap 07 - Operadores Lógicos”.
  4. Clique em Entregar (Turn In).

💡 Checkpoint de Lógica & Engenharia de Software

Você acabou de dominar as Portas Lógicas Digitais. Em sistemas de segurança cibernética (Firewalls e autenticação de dois fatores - 2FA), expressões lógicas compostas são utilizadas para interceptar ataques e autorizar acessos com precisão de milissegundos.


🔥 Desafio de Fixação: Validador de Triângulos

Crie um programa que receba os 3 lados de um triângulo e verifique se as medidas formam um triângulo válido (a soma de dois lados deve ser sempre maior que o terceiro lado). Se for válido, informe se é Equilátero (3 lados iguais), Isósceles (2 lados iguais) ou Escaleno (3 lados diferentes).


🔑 Gabarito de Código Completo

Prática 1:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
programa {
	funcao inicio() {
		logico lacreConferido, temNotaFiscal, autorizacaoDiretoria, podeLiberar

		escreva("Lacre conferido? (verdadeiro/falso): ") leia(lacreConferido)
		escreva("Possui Nota Fiscal? (verdadeiro/falso): ") leia(temNotaFiscal)
		escreva("Autorização da Diretoria? (verdadeiro/falso): ") leia(autorizacaoDiretoria)

		podeLiberar = lacreConferido e (temNotaFiscal ou autorizacaoDiretoria)

		se (podeLiberar) {
			escreva("\nSTATUS DA CANCELA: CANCELA ABERTA! Embarque autorizado.\n")
		} senao {
			escreva("\nSTATUS DA CANCELA: BLOQUEADA! Pendência de conformidade.\n")
		}
	}
}

Prática 2:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
programa {
	funcao inicio() {
		inteiro hora
		real valorCarga
		logico rastreadorLigado, horarioNoturno, riscoCritico

		escreva("Hora da Viagem (0 a 23): ") leia(hora)
		escreva("Valor da Carga (R$): ") leia(valorCarga)
		escreva("Rastreador Ligado? (verdadeiro/falso): ") leia(rastreadorLigado)

		horarioNoturno = (hora >= 22) ou (hora < 5)
		riscoCritico = horarioNoturno e (valorCarga > 50000.00) e (nao rastreadorLigado)

		escreva("\n")
		se (riscoCritico) {
			escreva("[ALERTA VERMELHO] VIAGEM EM RISCO CRÍTICO! Acionar Torre de Controle.\n")
		} senao {
			escreva("[STATUS NORMAL] Parâmetros de segurança regulares.\n")
		}
	}
}

Desafio:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
programa {
	funcao inicio() {
		real a, b, c
		logico ehTriangulo

		escreva("Lado A: ") leia(a)
		escreva("Lado B: ") leia(b)
		escreva("Lado C: ") leia(c)

		ehTriangulo = (a + b > c) e (a + c > b) e (b + c > a)

		se (ehTriangulo) {
			se (a == b e b == c) {
				escreva("Triângulo Válido: EQUILÁTERO (3 lados iguais)\n")
			} senao se (a == b ou a == c ou b == c) {
				escreva("Triângulo Válido: ISÓSCELES (2 lados iguais)\n")
			} senao {
				escreva("Triângulo Válido: ESCALENO (3 lados diferentes)\n")
			}
		} senao {
			escreva("As medidas informadas NÃO formam um triângulo válido.\n")
		}
	}
}

📝 Atividade Extra: Questionário de Fixação (Caderno)

Instruções: Responda no caderno, de próprio punho, as 10 perguntas abaixo com base no que foi estudado neste capítulo. Ao concluir, leve o caderno até o professor para correção e visto.

  1. Segundo a tabela-verdade do operador e, quando o resultado é verdadeiro?
  2. Segundo a tabela-verdade do operador ou, quando o resultado é falso?
  3. O que faz o operador nao a uma expressão booleana? Qual o resultado de nao verdadeiro?
  4. Quais são os três critérios que uma transportadora parceira deve atender simultaneamente para receber o “Selo Ouro”, segundo o Cenário Prático?
  5. No Exemplo Guiado, como a variável homologado combina os três critérios de auditoria (que operadores lógicos conectam as três condições)?
  6. Na Prática Obrigatória 1 (Liberação de Cancela de Portaria), quais condições devem ser combinadas com E e quais devem ser combinadas com OU para liberar a passagem do caminhão?
  7. Na Prática Obrigatória 2 (Detector de Risco Noturno), quais três condições, combinadas com o operador E, disparam o alarme de segurança?
  8. No código do Exemplo Guiado, para que servem os parênteses ao redor de cada condição na expressão que calcula homologado?
  9. Segundo o Checkpoint de Lógica, em que tipo de sistemas de segurança (citados no texto) as expressões lógicas compostas são usadas para interceptar ataques e autorizar acessos?
  10. Na expressão do Exemplo Guiado, o que a parte nao temPendenciaFiscal avalia?