Capítulo 06: Condicionais Compostas e Encadeadas (SE / SENAO / SENAO SE)

🎯 Objetivo da Aula

Em sistemas corporativos, quase nunca ficamos sem fazer nada quando uma condição é falsa: tomamos um caminho alternativo (Senão / Else). E quando temos várias categorias possíveis (como faixas de risco ou tabelas de frete), precisamos encadear múltiplos testes lógicos.

Nesta aula, você aprenderá a:

  1. Dominar a estrutura condicional composta se ... senao (If / Else).
  2. Construir estruturas encadeadas com senao se (Else If) de alta legibilidade.
  3. Evitar o aninhamento excessivo e desorganizado de chaves.
  4. Desenvolver sistemas de classificação de risco e roteirização operacional.

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


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

Situação: A seguradora da FastLog exige uma classificação de risco rigorosa para todas as cargas transportadas:

  • Cargas com valor acima de R$ 100.000,00: Risco Alto (Exige Escolta Armada Obrigatória).
  • Cargas com valor entre R$ 30.000,00 e R$ 100.000,00: Risco Médio (Exige Rastreador Satelital Ativo).
  • Cargas com valor abaixo de R$ 30.000,00: Risco Padrão (Monitoramento Padrão de Pátio).

Missão: Construir o Classificador de Risco FastLog, recebendo o valor da mercadoria e devolvendo o protocolo exato de segurança exigido pela apólice.


🧠 Fundamentos: A Lógica do se / senao se / senao

graph TD
    A[Início: Avaliar Carga] --> B{Valor > R$ 100.000?}
    B -- "Sim (verdadeiro)" --> C["Caminho do SE:<br/>Exigir Escolta Armada"]
    B -- "Não (falso)" --> D{Valor >= R$ 30.000?}
    D -- "Sim (verdadeiro)" --> E["Caminho do SENAO SE:<br/>Exigir Rastreador Satelital"]
    D -- "Não (falso)" --> F["Caminho do SENAO Final:<br/>Risco Padrão"]
    C --> G[Fim do Algoritmo]
    E --> G
    F --> G
    
    style B fill:#8e44ad,stroke:#fff,color:#fff
    style D fill:#f39c12,stroke:#fff,color:#fff
    style C fill:#c0392b,stroke:#fff,color:#fff
    style E fill:#2980b9,stroke:#fff,color:#fff
    style F fill:#27ae60,stroke:#fff,color:#fff

1. A Sintaxe Encadeada no Portugol Studio

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
se (condicao_1) 
{
	// Executado se condicao_1 for verdadeiro
} 
senao se (condicao_2) 
{
	// Executado se condicao_1 for falso E condicao_2 for verdadeiro
} 
senao 
{
	// Executado se NENHUMA das condições anteriores for verdadeira
}

📖 Exemplo Guiado: Classificador de Seguro e Risco

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
programa 
{
	funcao inicio() 
	{
		cadeia codigoCarga
		real valorMercadoria

		escreva("=== SISTEMA DE GESTÃO DE RISCO FASTLOG ===\n")
		escreva("Código do CT-e: ")
		leia(codigoCarga)
		escreva("Valor Total da Carga (R$): ")
		leia(valorMercadoria)

		escreva("\n--- PROTOCOLO DE SEGURANÇA ASSEGURADO ---\n")

		se (valorMercadoria > 100000.00) 
		{
			escreva("CATEGORIA : RISCO ALTO [CLASSE A]\n")
			escreva("EXIGÊNCIA : Escolta Armada com 2 Viaturas + Isca Eletrônica\n")
		} 
		senao se (valorMercadoria >= 30000.00) 
		{
			escreva("CATEGORIA : RISCO MÉDIO [CLASSE B]\n")
			escreva("EXIGÊNCIA : Rastreador Satelital com Trava Remota\n")
		} 
		senao 
		{
			escreva("CATEGORIA : RISCO PADRÃO [CLASSE C]\n")
			escreva("EXIGÊNCIA : Monitoramento Padrão de Pátio\n")
		}

		escreva("==========================================\n")
	}
}

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

1
2
3
4
5
6
7
8
=== SISTEMA DE GESTÃO DE RISCO FASTLOG ===
Código do CT-e: CTE-9940
Valor Total da Carga (R$): 75000

--- PROTOCOLO DE SEGURANÇA ASSEGURADO ---
CATEGORIA : RISCO MÉDIO [CLASSE B]
EXIGÊNCIA : Rastreador Satelital com Trava Remota
==========================================

🛠️ Prática Obrigatória 1: Controle de Turno de Pátio

Passo 1: O Desafio

Crie um programa controle_turno.por que receba a hora atual (número inteiro de 0 a 23). Classifique em:

  • Das 06h às 13h: Turno 1 - Manhã
  • Das 14h às 21h: Turno 2 - Tarde/Noite
  • Das 22h às 05h: Turno 3 - Madrugada (Adicional Noturno)

✅ Resultado Esperado (Prática 1):

1
2
Informe a hora atual (0 a 23): 14
TURNO OPERACIONAL: Turno 2 - Tarde/Noite

🛠️ Prática Obrigatória 2: Simulador de Desconto por Volume

A FastLog oferece tabelas de desconto baseado no volume de caixas transportadas:

  • Acima de 500 caixas: 15% de desconto.
  • De 100 a 500 caixas: 10% de desconto.
  • Abaixo de 100 caixas: Sem desconto (preço integral). Crie um programa desconto_volume.por que calcule e exiba o valor final com o desconto aplicado.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_06_SeuNome_SeuSobrenome.por.
  2. Teste o código passando por todas as 3 categorias.
  3. No Microsoft Teams, envie na tarefa “Portugol Cap 06 - Condicionais Compostas”.
  4. Clique em Entregar (Turn In).

💡 Checkpoint de Lógica & Engenharia de Software

Você acabou de dominar Árvores de Decisão (Decision Trees). Em sistemas de recomendação de rotas (como Waze e Google Maps), encadeamentos condicionais avaliam congestionamento, pedágios e condições meteorológicas para sugerir a melhor rota ao motorista.


🔥 Desafio de Fixação: Calculadora de Categoria de CNH

Crie um programa que receba o peso bruto do caminhão em toneladas e a quantidade de passageiros, e informe qual categoria mínima de CNH é exigida:

  • Acima de 6 toneladas: Categoria C.
  • Acima de 8 passageiros: Categoria D.
  • Veículos com reboque/carreta acoplada: Categoria E.
  • Outros veículos leves: Categoria B.

🔑 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() {
		inteiro hora
		escreva("Informe a hora atual (0 a 23): ")
		leia(hora)

		se (hora <= 5) {
			escreva("TURNO OPERACIONAL: Turno 3 - Madrugada (Adicional Noturno)\n")
		} senao se (hora <= 13) {
			escreva("TURNO OPERACIONAL: Turno 1 - Manhã\n")
		} senao se (hora <= 21) {
			escreva("TURNO OPERACIONAL: Turno 2 - Tarde/Noite\n")
		} senao {
			escreva("TURNO OPERACIONAL: Turno 3 - Madrugada (Adicional Noturno)\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
22
23
24
programa {
	funcao inicio() {
		inteiro caixas
		real valorBruto, taxaDesconto, valorDesconto, valorFinal

		escreva("Quantidade de Caixas: ") leia(caixas)
		escreva("Valor Bruto do Frete (R$): ") leia(valorBruto)

		se (caixas > 500) {
			taxaDesconto = 0.15
		} senao se (caixas >= 100) {
			taxaDesconto = 0.10
		} senao {
			taxaDesconto = 0.0
		}

		valorDesconto = valorBruto * taxaDesconto
		valorFinal = valorBruto - valorDesconto

		escreva("\nDesconto Aplicado: ", taxaDesconto * 100, "%\n")
		escreva("Valor do Desconto: R$ ", valorDesconto, "\n")
		escreva("VALOR FINAL A PAGAR: R$ ", valorFinal, "\n")
	}
}

Desafio:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
programa {
	funcao inicio() {
		real pesoToneladas
		inteiro passageiros
		logico temCarreta

		escreva("Peso Bruto do Veículo (toneladas): ") leia(pesoToneladas)
		escreva("Capacidade de Passageiros: ") leia(passageiros)
		escreva("Possui carreta/reboque acoplado? (verdadeiro/falso): ") leia(temCarreta)

		se (temCarreta) {
			escreva("CNH MÍNIMA EXIGIDA: CATEGORIA E\n")
		} senao se (passageiros > 8) {
			escreva("CNH MÍNIMA EXIGIDA: CATEGORIA D\n")
		} senao se (pesoToneladas > 6.0) {
			escreva("CNH MÍNIMA EXIGIDA: CATEGORIA C\n")
		} senao {
			escreva("CNH MÍNIMA EXIGIDA: CATEGORIA B\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 os comentários do código de sintaxe do capítulo, em que situação o bloco dentro do senao (final) é executado?
  2. Segundo o Cenário Prático, qual classificação de risco é aplicada a cargas com valor acima de R$ 100.000,00, e qual exigência de segurança ela impõe?
  3. Qual é a faixa de valor (em R$) que define a classificação “Risco Médio”, segundo o Cenário Prático e o Exemplo Guiado?
  4. No Exemplo Guiado, qual exigência de segurança é exibida para a categoria “Risco Padrão” (Classe C)?
  5. Na Prática Obrigatória 1 (Controle de Turno de Pátio), quais são as três faixas de horário e os respectivos nomes de turno?
  6. Na Prática Obrigatória 2 (Simulador de Desconto por Volume), qual percentual de desconto é aplicado para pedidos acima de 500 caixas?
  7. E qual percentual de desconto é aplicado na faixa de 100 a 500 caixas, segundo a mesma prática?
  8. O que acontece com o desconto quando um pedido tem menos de 100 caixas, segundo a regra da Prática Obrigatória 2?
  9. Segundo o Checkpoint de Lógica, a que conceito o encadeamento condicional é comparado, e em quais aplicativos reais (citados no texto) esse tipo de lógica é usado?
  10. Segundo os comentários do código de sintaxe do capítulo, em que situação o bloco dentro do senao se (condicao_2) é executado?