Capítulo 05: Estruturas Condicionais Simples (SE e Operadores Relacionais)

🎯 Objetivo da Aula

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) { ... } no Portugol Studio.
  3. Utilizar com maestria os Operadores Relacionais Modernos (==, !=, >, <, >=, <=).
  4. Implementar travas de segurança e regras de conformidade operacional.

📥 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 legislação 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 emitir um alerta na tela da cabine e calcular o valor da multa por sobrecarga.

Missão: Construir um programa em Portugol que receba o peso na balança e execute a rotina de autuação apenas se o caminhão estiver acima do limite legal.


🧠 Fundamentos: O Desvio Condicional Simples

1. Como Funciona a Tomada de Decisão?

A estrutura condicional avalia uma Expressão Booleana que resulta exclusivamente em verdadeiro ou falso:

  • Se for verdadeiro, o computador entra nas chaves { } do se e executa as instruções.
  • Se for falso, o computador pula as chaves e segue em frente.
graph TD
    A[Início: Leitura do Peso] --> B{Peso > 16.000 kg?}
    B -- "verdadeiro (Sim)" --> C["Entra nas chaves { }:<br/>1. Exibir ALERTA DE EXCESSO<br/>2. Calcular Multa"]
    B -- "falso (Não)" --> D[Continuar Fluxo Normal]
    C --> D
    D --> E[Fim do Programa]
    
    style B fill:#f39c12,stroke:#fff,color:#fff
    style C fill:#c0392b,stroke:#fff,color:#fff
    style D fill:#27ae60,stroke:#fff,color:#fff

2. Tabela de Operadores Relacionais no Portugol Studio

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

Nunca use = para comparar igualdade:
Em C, Java, JavaScript e Portugol Studio, == (dois iguais) compara valores; = (um igual) faz atribuição.

== e != também funcionam com texto (cadeia)
Os operadores desta tabela não se limitam a números: nome == "Carlos" ou status != "Pendente" comparam o conteúdo de duas cadeia diretamente, sem precisar de nenhuma função especial (diferente de Java, onde comparar texto exige .equals()).


📖 Exemplo Guiado: Balança Fiscal de Rodovia

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
programa 
{
	funcao inicio() 
	{
		cadeia placa
		real pesoBruto, excessoKg, valorMulta
		real limiteLegal = 16000.0

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

		// Teste Condicional Simples
		se (pesoBruto > limiteLegal) 
		{
			excessoKg = pesoBruto - limiteLegal
			valorMulta = excessoKg * 5.50 // R$ 5,50 por kg excedente

			escreva("\n [!] ALERTA CRÍTICO: SOBRECARGA DETECTADA!\n")
			escreva("     Veículo Placa   : ", placa, "\n")
			escreva("     Excesso Apurado : ", excessoKg, " kg\n")
			escreva("     Multa Aplicada  : R$ ", valorMulta, "\n")
			escreva("     Status: VEÍCULO RETIDO PARA TRANSBORDO.\n")
		}

		escreva("\nProcedimento de pesagem finalizado.\n")
	}
}

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

 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.0 kg
     Multa Aplicada  : R$ 8250.0
     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 programa estoque_minimo.por que receba o saldo atual de paletes. 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 Pontualidade

A FastLog paga um bônus de R$ 500,00 se a taxa de pontualidade do motorista for maior ou igual a 95.0%. Crie um programa bonus_motorista.por 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.por.
  2. Teste com pesos que ativem o se e pesos normais que passem direto.
  3. No Microsoft Teams, envie na tarefa “Portugol Cap 05 - Condicionais Simples”.
  4. Clique em Entregar (Turn In).

💡 Checkpoint de Lógica & Engenharia de Software

Você acabou de aplicar a base de Branching (Desvio de Fluxo). No desenvolvimento de software bancário, travas condicionais simples são responsáveis por validar se o saldo da conta é suficiente antes de autorizar qualquer saque ou transferência Pix.


🔥 Desafio de Fixação: Desconto Comercial de Frete

Crie um programa 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 a pagar.


🔑 Gabarito de Código Completo

Prática 1:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
programa {
	funcao inicio() {
		inteiro saldoAtual, estoqueIdeal = 200, unidadesComprar

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

		se (saldoAtual <= 50) {
			unidadesComprar = estoqueIdeal - saldoAtual
			escreva("\n[ALERTA] Estoque crítico! Solicitar compra urgente de reposição.\n")
			escreva("Necessário encomendar: ", unidadesComprar, " unidades para atingir o estoque ideal.\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() {
		cadeia motorista
		real salarioBase, pontualidade, salarioFinal

		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) {
			salarioFinal = salarioBase + 500.00
			escreva("\n>>> PARABÉNS! Meta de pontualidade batida.\n")
			escreva(">>> Bônus de R$ 500,00 creditado.\n")
		}

		escreva("\nMotorista: ", motorista, "\n")
		escreva("Remuneração Final: R$ ", salarioFinal, "\n")
	}
}

Desafio:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
programa {
	funcao inicio() {
		real valorOriginal, desconto, valorFinal

		escreva("Valor do Frete (R$): ")
		leia(valorOriginal)

		valorFinal = valorOriginal

		se (valorOriginal > 5000.00) {
			desconto = valorOriginal * 0.08
			valorFinal = valorOriginal - desconto
			escreva("Desconto Comercial (8%): R$ ", desconto, "\n")
		}

		escreva("Valor a Pagar: R$ ", valorFinal, "\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. O que acontece quando a expressão booleana dentro de um se (condicao) resulta em falso, segundo o capítulo?
  2. Na tabela de operadores relacionais, qual operador representa “diferente de” no Portugol Studio?
  3. Segundo o quadro de atenção (CAUTION) do capítulo, qual é o erro comum entre = e == ao construir uma condição?
  4. Qual é o limite legal de peso, em kg, usado no Cenário Prático e no Exemplo Guiado da balança rodoviária?
  5. No Exemplo Guiado, o que o programa calcula e exibe quando o pesoBruto excede o limiteLegal?
  6. Na Prática Obrigatória 1 (Alerta de Ponto de Reposição de Estoque), qual condição (com qual operador relacional) dispara o alerta de estoque crítico?
  7. Qual é o valor do estoque ideal usado para calcular quantas unidades faltam encomendar, na Prática Obrigatória 1?
  8. Na Prática Obrigatória 2 (Bonificação de Motoristas por Pontualidade), qual percentual mínimo de pontualidade garante o bônus de R$ 500,00?
  9. Segundo o Checkpoint de Lógica, em que tipo de sistema (setor citado no texto) travas condicionais simples são usadas para validar saldo antes de autorizar uma transação?
  10. Se a=10 e b=20, qual é o resultado de a >= 10, de acordo com a tabela de operadores relacionais do capítulo?