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

🎯 Objetivo da Aula

Programar não é sobre conhecer comandos, mas sobre como usar esses comandos para resolver um problema. Nesta aula, faremos uma revisão estratégica. O objetivo é aprender as 4 etapas do pensamento computacional: Decomposição, Reconhecimento de Padrões, Abstração e Algoritmos.


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

Situação: A FastLog quer um sistema que gerencie uma fila de 10 pacotes. Para cada pacote, o sistema deve:

  1. Validar se o peso é maior que zero.
  2. Calcular o frete (R$ 5,00 por quilo).
  3. Somar tudo no final.
  4. Avisar se algum pacote ultrapassa o limite de 50kg.

O Problema: Como organizar tantas regras sem se perder?


🧠 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: Checar Notas Fiscais]
    A --> D[Tarefa 3: Gerar Relatório]
    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

A decomposição consiste em quebrar um problema grande em tarefas menores. Observe como validamos o limite dentro de um loop de processamento:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
programa {
	funcao inicio() {
		real pesos[5]
		real total_frete = 0.0
		
		para (inteiro i = 0; i < 5; i++) {
			escreva("Peso do pacote ", i+1, ": ") leia(pesos[i])
			
			se (pesos[i] > 50) {
				escreva(">> ALERTA: Pacote pesado demais!\n")
			}
			total_frete += (pesos[i] * 5.0)
		}
		escreva("\nTotal de frete: R$ ", total_frete)
	}
}

🛠️ Prática Obrigatória 1: Análise de Dados

Crie um programa que leia 10 números em um vetor. Calcule a média desses números e, em seguida, use outro loop para contar e exibir quantos números são maiores que a média.

✅ Resultado Esperado

1
2
Média: 15.0
Números acima da média: 3

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

Crie uma variável global taxa_adm = 15.0. Crie uma função que use essa global para calcular o custo total de um frete, somando a taxa ao valor recebido como parâmetro.

✅ Resultado Esperado

1
2
Valor Base: 100.0
Custo Total (com taxa de 15.0): R$ 115.0

🔥 Desafio de Fixação (Opcional): Validador de CPF Simplificado

Crie um programa que peça o CPF do usuário (tipo cadeia). O programa deve validar apenas se o texto digitado possui exatamente 11 caracteres.


📤 Instruções de Entrega (Microsoft Teams)

Após validar seus códigos:

  1. Pense na estrutura (vetores, loops, funções) antes de começar a digitar.
  2. Salve os arquivos com a extensão .por (Ex: Atividade_19_SeuNome.por).
  3. Envie no Microsoft Teams na tarefa “Capítulo 19 - Estratégia de Resolução”.

🔑 Gabarito de Código

Prática 1:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
programa {
	funcao inicio() {
		real num[10], soma = 0.0, media
		inteiro maiores = 0
		para(inteiro i=0; i<10; i++) {
			escreva("N: ") leia(num[i])
			soma += num[i]
		}
		media = soma / 10
		para(inteiro i=0; i<10; i++) {
			se (num[i] > media) { maiores++ }
		}
		escreva("Média: ", media, "\nAcima da média: ", maiores)
	}
}

Desafio:

1
2
3
4
5
6
7
8
9
programa {
	inclua biblioteca Texto --> t
	funcao inicio() {
		cadeia cpf
		escreva("CPF: ") leia(cpf)
		se (t.numero_caracteres(cpf) == 11) { escreva("CPF Válido") }
		senao { escreva("CPF Inválido - Digite 11 números") }
	}
}