Capítulo 05: Estruturas Condicionais Simples (SE-ENTAO-FIMSE)

🎯 Objetivo da Aula

Um programa que apenas segue uma linha reta sem desvios é limitado. O verdadeiro poder da computação surge quando o algoritmo é capaz de avaliar uma condição lógica e decidir se deve ou não executar um determinado bloco de instruções.

Nesta aula, você aprenderá a:

  1. Compreender o conceito de Desvio de Fluxo Condicional Simples.
  2. Dominar a sintaxe da estrutura se (condicao) entao ... fimse.
  3. Utilizar com maestria todos os Operadores Relacionais do VisuAlg (=, <>, >, <, >=, <=).
  4. Implementar regras de negócio e travas de segurança em sistemas corporativos.

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


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

Situação: A balança da rodovia que dá acesso ao Centro de Distribuição da FastLog monitora o peso bruto dos caminhões. A lei de trânsito estabelece que caminhões do tipo Toco não podem ultrapassar o limite máximo de 16.000 kg (16 toneladas). Se um caminhão exceder esse peso, o sistema deve acionar uma sirene de alerta e calcular a multa por excesso de carga.

Missão: Construir um algoritmo de fiscalização rodoviária que receba o peso na balança e execute a rotina de autuação apenas se o caminhão estiver acima do limite legal permitido.


🧠 Fundamentos: A Lógica do Desvio Condicional

1. Como Funciona a Tomada de Decisão?

A estrutura condicional simples avalia uma Expressão Lógica (Booleana) que só pode resultar em VERDADEIRO ou FALSO:

  • Se o teste for VERDADEIRO, o computador desvia o fluxo e executa os comandos dentro do bloco.
  • Se o teste for FALSO, o computador simplesmente ignora o bloco e segue para a próxima instrução após o fimse.
graph TD
    A[Início: Leitura do Peso] --> B{Peso > 16.000 kg?}
    B -- "VERDADEIRO (Sim)" --> C["Executar Bloco:<br/>1. Exibir ALERTA DE EXCESSO<br/>2. Calcular Multa"]
    B -- "FALSO (Não)" --> D[Continuar Fluxo Normal]
    C --> D
    D --> E[Fim do Algoritmo]
    
    style B fill:#f39c12,stroke:#fff,stroke-width:2px,color:#fff
    style C fill:#c0392b,stroke:#fff,stroke-width:2px,color:#fff
    style D fill:#217346,stroke:#fff,stroke-width:2px,color:#fff

2. Tabela de Operadores Relacionais

OperadorSignificadoExemplo no CódigoResultado se A=10 e B=20
=Igual aA = BFALSO
<>Diferente deA <> BVERDADEIRO
>Maior queA > BFALSO
<Menor queA < BVERDADEIRO
>=Maior ou igual aA >= 10VERDADEIRO
<=Menor ou igual aB <= 15FALSO

Diferença de Sintaxe de Diferença (<> vs !=):
Em linguagens C, Java e Python, “diferente de” escreve-se !=. No VisuAlg e Pascal, escreve-se <> (menor que e maior que juntos).


3. A Sintaxe no VisuAlg

1
2
3
se (expressao_logica) entao
   // Bloco de comandos executado APENAS se for VERDADEIRO
fimse

📖 Exemplo Guiado: Balança Fiscal de Rodovia

Código do Algoritmo:

 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
algoritmo "Balanca_Fiscal"
var
   placa : caractere
   pesoBruto, limiteLegal, excessoKg, valorMulta : real

inicio
   limiteLegal <- 16000.0

   escreval("=== POSTO DE PESAGEM RODOVIÁRIA ===")
   escreva("Placa do Caminhão: ")
   leia(placa)
   escreva("Peso Registrado na Balança (kg): ")
   leia(pesoBruto)

   // Teste Condicional Simples
   se (pesoBruto > limiteLegal) entao
      excessoKg <- pesoBruto - limiteLegal
      valorMulta <- excessoKg * 5.50 // R$ 5,50 por kg excedente
      
      escreval("")
      escreval(" [!] ALERTA CRÍTICO: SOBRECARGA DETECTADA!")
      escreval("     Veículo Placa: ", placa)
      escreval("     Excesso Apurado: ", excessoKg:6:2, " kg")
      escreval("     Multa Aplicada : R$ ", valorMulta:8:2)
      escreval("     Status: VEÍCULO RETIDO PARA TRANSBORDO.")
   fimse

   escreval("")
   escreval("Procedimento de pesagem finalizado.")
fimalgoritmo

✅ Exemplo de Execução no Console (F9):

Com peso excedente (17.500 kg):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
=== POSTO DE PESAGEM RODOVIÁRIA ===
Placa do Caminhão: BRA-9090
Peso Registrado na Balança (kg): 17500

 [!] ALERTA CRÍTICO: SOBRECARGA DETECTADA!
     Veículo Placa: BRA-9090
     Excesso Apurado: 1500.00 kg
     Multa Aplicada : R$  8250.00
     Status: VEÍCULO RETIDO PARA TRANSBORDO.

Procedimento de pesagem finalizado.

🛠️ Prática Obrigatória 1: Alerta de Ponto de Reposição de Estoque

Passo 1: O Desafio

No galpão da FastLog, o estoque mínimo de segurança de paletes é de 50 unidades. Crie um algoritmo "Alerta_Estoque_Minimo" que receba o saldo atual de paletes em estoque. Se a quantidade for menor ou igual a 50, o sistema deve exibir:

  • "[ALERTA] Estoque crítico! Solicitar compra urgente de reposição."
  • Calcular quantas unidades faltam para atingir o estoque ideal de 200 unidades.

✅ Resultado Esperado (Prática 1):

1
2
3
4
Informe o saldo atual de paletes: 32

[ALERTA] Estoque crítico! Solicitar compra urgente de reposição.
Necessário encomendar: 168 unidades para atingir o estoque ideal.

🛠️ Prática Obrigatória 2: Bonificação de Motoristas por Eficiência

A FastLog paga um bônus de R$ 500,00 se a taxa de pontualidade do motorista for maior ou igual a 95%. Crie um algoritmo "Bonus_Pontualidade" que receba o nome do motorista, o salário base e o percentual de pontualidade. Se atingir a meta, acrescente o bônus de R$ 500,00 ao salário e exiba a mensagem de parabenização.


📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_05_SeuNome_SeuSobrenome.alg.
  2. Teste o programa com valores que ativam o se e com valores que não ativam.
  3. No Microsoft Teams, envie na tarefa “VisuAlg Cap 05 - Condicionais Simples”.
  4. Clique em Entregar (Turn In).

💡 Checkpoint de Lógica & Engenharia de Software

Você acabou de aprender sobre Branching (Desvio de Código). Na arquitetura da CPU, o processador utiliza uma técnica chamada Branch Prediction (Previsão de Desvio) para tentar adivinhar se a condição do se será verdadeira antes mesmo de calcular o resultado, otimizando o pipeline de execução.


🔥 Desafio de Fixação: Desconto para Fretes Acima de R$ 5.000

Crie um algoritmo que receba o valor de um frete. Se o frete for superior a R$ 5.000,00, conceda 8% de desconto comercial e exiba o novo valor com desconto.


🔑 Gabarito de Código Completo

Prática 1:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
algoritmo "Alerta_Estoque_Minimo"
var
   saldoAtual, estoqueIdeal, unidadesComprar : inteiro
inicio
   estoqueIdeal <- 200

   escreva("Informe o saldo atual de paletes: ")
   leia(saldoAtual)

   se (saldoAtual <= 50) entao
      unidadesComprar <- estoqueIdeal - saldoAtual
      escreval("")
      escreval("[ALERTA] Estoque crítico! Solicitar compra urgente de reposição.")
      escreval("Necessário encomendar: ", unidadesComprar, " unidades para atingir o estoque ideal.")
   fimse
fimalgoritmo

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
algoritmo "Bonus_Pontualidade"
var
   motorista : caractere
   salarioBase, pontualidade, salarioFinal : real
inicio
   escreva("Nome do Motorista: ") leia(motorista)
   escreva("Salário Base (R$): ") leia(salarioBase)
   escreva("Índice de Pontualidade (%): ") leia(pontualidade)

   salarioFinal <- salarioBase

   se (pontualidade >= 95.0) entao
      salarioFinal <- salarioBase + 500.00
      escreval("")
      escreval(">>> PARABÉNS! Meta de pontualidade batida.")
      escreval(">>> Bônus de R$ 500,00 creditado.")
   fimse

   escreval("")
   escreval("Motorista: ", motorista)
   escreval("Remuneração Final: R$ ", salarioFinal:8:2)
fimalgoritmo

Desafio:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
algoritmo "Desconto_Frete"
var
   valorOriginal, desconto, valorFinal : real
inicio
   escreva("Valor do Frete (R$): ")
   leia(valorOriginal)

   valorFinal <- valorOriginal

   se (valorOriginal > 5000.00) entao
      desconto <- valorOriginal * 0.08
      valorFinal <- valorOriginal - desconto
      escreval("Desconto Comercial (8%): R$ ", desconto:8:2)
   fimse

   escreval("Valor a Pagar: R$ ", valorFinal:8:2)
fimalgoritmo

📝 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 o capítulo, quais são os dois únicos resultados possíveis de uma Expressão Lógica (Booleana) avaliada por um se?
  2. O que acontece com o bloco de comandos dentro do se quando a condição testada resulta em FALSO?
  3. Qual é a sintaxe básica da estrutura condicional simples no VisuAlg (do se ao fimse)?
  4. Segundo a Tabela de Operadores Relacionais, qual operador representa “diferente de” no VisuAlg, e como ele se diferencia da sintaxe usada em C, Java e Python?
  5. No Exemplo Guiado (Balança Fiscal de Rodovia), qual é o limite legal de peso, em kg, considerado para acionar o alerta de sobrecarga?
  6. No Exemplo Guiado, qual fórmula foi usada para calcular o valor da multa por excesso de peso?
  7. Na Prática Obrigatória 1 (Alerta de Ponto de Reposição de Estoque), a partir de qual quantidade de paletes em estoque o sistema deve disparar o alerta crítico?
  8. Na Prática Obrigatória 2 (Bonificação de Motoristas por Eficiência), qual condição de pontualidade libera o bônus de R$ 500,00?
  9. Segundo o Checkpoint de Lógica, o que é o Branch Prediction (Previsão de Desvio) mencionado como técnica usada pela CPU?
  10. Segundo as Instruções de Entrega, com quais tipos de valores o programa deve ser testado antes do envio da atividade?