Capítulo 19: Lógica de Resolução de Problemas

🎯 Objetivo da Aula

Programar não é apenas decorar comandos, é saber como resolver problemas. Nesta aula, faremos uma revisão estratégica. O objetivo é aprender as etapas do pensamento computacional: Decomposição, Reconhecimento de Padrões, Abstração e Algoritmos, aplicando tudo o que vimos até aqui.


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

Situação: A FastLog precisa de um sistema que audite 5 pacotes. Para cada pacote, o sistema deve:

  1. Validar se o peso é maior que zero.
  2. Calcular o custo de armazenagem (R$ 2,00 por quilo).
  3. Somar o faturamento total no final.
  4. Avisar se algum pacote ultrapassa o limite de segurança de 100kg.

O Problema: Como organizar tantas regras sem criar um código confuso?


🧠 Fundamentos: A Teoria Traduzida

1. Decomposição

Nunca tente resolver o problema inteiro de uma vez. Quebre-o em partes menores.

✈️ Exemplo 1: Cotidiano (Viagem de Férias)

Para viajar, você precisa: 1. Comprar passagens, 2. Reservar hotel, 3. Arrumar as malas. São tarefas menores que formam o “Problema” da viagem.

🚚 Exemplo 2: Técnico (Auditoria de Embarque)

Para liberar um lote, você precisa: 1. Conferir pesos, 2. Validar NFs, 3. Registrar motorista.

graph TD
    A[Problema: Auditoria de Carga] --> B[Tarefa 1: Validar Pesos]
    A --> C[Tarefa 2: Calcular Custos]
    A --> D[Tarefa 3: Gerar Alertas]
    B --> E[Conclusão do Lote]
    C --> E
    D --> E
    
    style B fill:#f39c12,stroke:#fff,color:#fff
    style E fill:#2ecc71,stroke:#fff,color:#fff

📖 Exemplo Guiado: Auditoria de Cargas

Resolver problemas complexos exige decomposição. Aqui unimos vetores, loops e condicionais para auditar uma lista de pacotes e calcular custos.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
algoritmo "Auditoria_Cargas"
var
   pesos : vetor [1..5] de real
   i : inteiro
   total : real
inicio
   total <- 0
   para i de 1 ate 5 faca
      escreva("Peso pacote ", i, ": ") leia(pesos[i])
      se (pesos[i] > 100) entao
         escreval(">> ALERTA: Acima do limite!")
      fimse
      total <- total + (pesos[i] * 2.0)
   fimpara
   escreval("FATURAMENTO TOTAL: R$ ", total)
fimalgoritmo

🛠️ Prática Obrigatória 1: Refatoração Modular

Escolha um dos algoritmos que você desenvolveu nos capítulos anteriores (ex: Cálculo de Frete ou Médias). Refaça-o agora utilizando um Procedimento ou Função para separar a lógica de cálculo da lógica de exibição.

✅ Resultado Esperado

1
2
CÁLCULO PROCESSADO VIA MÓDULO:
Resultado: ...

🛠️ Prática Obrigatória 2: Simulador de Taxas FastLog

Crie uma variável global taxa_adm <- 15.0. Crie um procedimento que use essa variável global para calcular o custo final de um serviço, mas que tenha sua própria variável local custo_operacional. Exiba o resultado final.

✅ Resultado Esperado

1
2
3
Taxa Global: 15.0
Custo Local: 50.0
TOTAL DO SERVIÇO: R$ 65.0

🔥 Desafio de Fixação (Opcional): Classificador de Lote

Crie um programa que peça 10 números de série. O programa deve contar e exibir quantos desses números são maiores que um valor de referência X digitado pelo usuário no início do programa.


📤 Instruções de Entrega (Microsoft Teams)

Após validar seus códigos:

  1. Pense em como dividir o problema em partes menores antes de começar a digitar.
  2. Salve os arquivos com a extensão .alg (Ex: Atividade_19_SeuNome.alg).
  3. Envie no Microsoft Teams na tarefa “VisuAlg Cap 19 - Estratégia”.

🔑 Gabarito de Código

Prática 2:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
algoritmo "Taxas"
var
   taxa_adm : real // Global

procedimento CalcularTotal()
var
   custo_op : real // Local
inicio
   custo_op <- 50.0
   escreval("TOTAL: R$ ", taxa_adm + custo_op)
fimprocedimento

inicio
   taxa_adm <- 15.0
   CalcularTotal()
fimalgoritmo

Desafio:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
algoritmo "Contador"
var
   v : vetor [1..10] de inteiro
   i, x, cont : inteiro
inicio
   escreva("Referência X: ") leia(x)
   cont <- 0
   para i de 1 ate 10 faca
      escreva("Nº Série: ") leia(v[i])
      se (v[i] > x) entao
         cont <- cont + 1
      fimse
   fimpara
   escreva("Total acima de ", x, ": ", cont)
fimalgoritmo