Capítulo 14: Vetores II: Buscas e Filtros

🎯 Objetivo da Aula

Ter os dados guardados em um vetor é apenas metade do trabalho. Nesta aula, você aprenderá a Processar esses dados. O objetivo é dominar algoritmos de Busca Linear (procurar um valor específico) e extrair informações inteligentes, como o maior ou menor valor de uma lista.


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

Situação: O sistema de segurança da FastLog registrou os números de série das últimas 5 cargas que saíram do galpão. O Problema: O supervisor quer saber se a carga de código 999 está entre essas 5. Se estiver, ele precisa saber em qual vaga ela foi registrada.

Missão: Criar um “Scanner de Carga” que percorra o vetor e localize o código informado.


🧠 Fundamentos: A Teoria Traduzida

1. O Algoritmo de Busca Linear

Para achar algo em um vetor, o computador olha posição por posição.

🔑 Exemplo 1: Cotidiano (Chaves)

Procurar a chave da porta no meio de um molho de 10 chaves.

📦 Exemplo 2: Técnico (Rastreio de Carga)

Procurar se o código SKU “LOG-99” está na lista de 100 itens do manifesto.

graph TD
    A[Início da Busca] --> B[Posição 1]
    B --> C{É o SKU correto?}
    C -- "Sim" --> D[Status: LOCALIZADO]
    C -- "Não" --> E[Próxima Posição]
    E --> B
    
    style D fill:#2ecc71,stroke:#fff,color:#fff

2. A Técnica da Bandeira (Flag)

Como o computador sabe se “achou” após o loop terminar? Usamos uma variável lógica (ex: encontrado) que começa como falso. Se o item for localizado, mudamos para verdadeiro.


📖 Exemplo Guiado: Scanner de Carga

Para localizar dados em um vetor, percorremos todas as posições. Usamos uma variável “bandeira” (logico) para saber se encontramos o item.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
algoritmo "Scanner_Carga"
var
   codigos : vetor [1..5] de inteiro
   pesquisa, i : inteiro
   achou : logico
inicio
   codigos[1] <- 101; codigos[2] <- 202; codigos[3] <- 303; codigos[4] <- 999; codigos[5] <- 505
   achou <- falso
   escreva("Carga para pesquisar: ") leia(pesquisa)
   
   para i de 1 ate 5 faca
      se (codigos[i] = pesquisa) entao
         achou <- verdadeiro
         escreval(">> Localizada na posição: ", i)
      fimse
   fimpara
   
   se (achou = falso) entao
      escreval("Carga não encontrada.")
   fimse
fimalgoritmo

🛠️ Prática Obrigatória 1: Maior Faturamento

Crie um algoritmo chamado “Maior_Valor”. Peça 5 valores de vendas ao usuário e guarde-os em um vetor. Em seguida, use um loop para descobrir e exibir qual foi o Maior Valor digitado.

✅ Resultado Esperado

1
2
Valores: 100, 500, 200, 300, 150
O maior valor é: 500.0

🛠️ Prática Obrigatória 2: Filtro de Preços FastLog

Crie um vetor com 5 preços de produtos. Peça ao usuário um “Orçamento Máximo”. O programa deve percorrer o vetor e exibir na tela apenas os produtos que possuem preço menor ou igual ao orçamento.

✅ Resultado Esperado

1
2
3
4
Orçamento: 50.0
Itens que cabem no bolso:
- Produto 1: R$ 45.0
- Produto 3: R$ 20.0

🔥 Desafio de Fixação (Opcional): Inverter Lista

Crie um programa que peça 5 nomes e guarde-os em um vetor. Em seguida, use um laço para para exibir esses nomes na ordem inversa (do último para o primeiro).


📤 Instruções de Entrega (Microsoft Teams)

Após validar seus códigos:

  1. Para encontrar o maior valor, assuma que o primeiro é o maior e compare com os outros.
  2. Salve os arquivos com a extensão .alg (Ex: Atividade_14_SeuNome.alg).
  3. Envie no Microsoft Teams na tarefa “VisuAlg Cap 14 - Manipulação de Vetores”.

🔑 Gabarito de Código

Prática 1:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
algoritmo "Maior_Valor"
var
   v : vetor [1..5] de real
   i : inteiro
   maior : real
inicio
   para i de 1 ate 5 faca
      escreva("Valor ", i, ": ") leia(v[i])
   fimpara
   maior <- v[1]
   para i de 2 ate 5 faca
      se (v[i] > maior) entao
         maior <- v[i]
      fimse
   fimpara
   escreva("O maior valor é: ", maior)
fimalgoritmo

Desafio:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
algoritmo "Inverter"
var
   nomes : vetor [1..5] de caractere
   i : inteiro
inicio
   para i de 1 ate 5 faca
      escreva("Nome: ") leia(nomes[i])
   fimpara
   escreval("--- ORDEM INVERSA ---")
   para i de 5 ate 1 passo -1 faca
      escreval(nomes[i])
   fimpara
fimalgoritmo