01 / 16
Lógica de Programação · Sem 11 · Dia 1 (Aulas 1 e 2)

Vetores:
uma caixa
com gavetas

Da criação de listas ao acesso por índice — e o primeiro algoritmo clássico de busca: a busca linear em Python.

ProfessorGuilherme Antunes CursoTécnico em Desenvolvimento de Sistemas Duração100 minutos (Aula 1 + Aula 2)
02 / 16
Objetivos do Dia

Ao final, você será capaz de.

01

A1Entender por que muitas variáveis soltas não escalam e o que motiva o uso de vetores

02

A1Criar listas em Python e acessar elementos por índice — positivos e negativos

03

A2Entender por que escrever 100 se's aninhados é um beco sem saída — e como o laço resolve

04

A2Implementar uma busca linear com iteração, comparação e retorno de posição

03 / 16
Aula 1 Ponto de partida

O problema das muitas variáveis

Você foi contratado para construir um sistema de gestão escolar. Uma das funcionalidades: calcular a média de uma turma de 40 alunos. Sem vetor, você precisaria…

  • Declarar 40 variáveis (nota1, nota2, …, nota40)
  • Escrever 40 leituras com input(…)
  • Somar tudo em uma linha gigante

E se a turma virar 200 alunos? E se precisar achar a maior nota? O código vira impossível de manter.

nota1 = float(input())
nota2 = float(input())
nota3 = float(input())
nota4 = float(input())
nota5 = float(input())
# … 35 linhas a mais até nota40!

media = (nota1 + nota2 + nota3
        + nota4 + nota5 + ...
        + nota40) / 40

print(f"Média: {media}")
04 / 16
Aula 1 Construindo o conceito

O que é um vetor?

Um vetor (também chamado de array ou arranjo) é uma estrutura que armazena vários valores do mesmo tipo sob um único nome, organizados sequencialmente na memória. Cada valor é identificado por sua posição — o índice.

8.5[0]
7.0[1]
9.5[2]
6.0[3]
8.0[4]
🧠 Analogia: pense num armário com gavetas numeradas. Todas as gavetas têm o mesmo tipo de conteúdo, e você acessa cada uma pelo número da gaveta — não pelo conteúdo dela.
05 / 16
Aula 1 Construindo o conceito

4 características fundamentais

1

Ordenado

A ordem dos elementos é preservada — o primeiro item permanece o primeiro até você modificá-lo.

2

Tamanho dinâmico

Diferente de arrays clássicos, listas Python crescem e encolhem com .append(), .pop(), etc.

3

Acesso direto

Qualquer elemento pode ser acessado instantaneamente pelo seu índice — O(1).

4

Indexação flexível

Suporta índices negativos (lista[-1] = último) e fatiamento (lista[1:4]).

🧠 Por que isso importa: internamente, uma lista Python guarda os elementos em posições contíguas na memória. O acesso por índice usa a fórmula endereço_base + índice × tamanho_do_ponteiro e chega no elemento sem percorrer os anteriores.
06 / 16
Aula 1 Indexação em Python

Índice positivo e negativo

Python (como C, Java e JS) usa base 0: o primeiro elemento está em [0], o último em [tamanho - 1]. Mas Python tem um superpoder extra: índices negativos que contam de trás para frente.

Índice positivo (frente → fim)

8.5[0]
7.0[1]
9.5[2]
6.0[3]
8.0[4]

Primeiro elemento em notas[0]. Último em notas[4] ou notas[len(notas) - 1].

Índice negativo (fim → frente)

8.5[-5]
7.0[-4]
9.5[-3]
6.0[-2]
8.0[-1]

notas[-1] é sempre o último — não importa o tamanho da lista. notas[-2] é o penúltimo, e assim por diante.

⚠️ Cuidado: acessar notas[5] em uma lista de 5 elementos gera IndexError: list index out of range. O último índice válido é sempre tamanho - 1.
07 / 16
Aula 1 Sintaxe Python

Criando e acessando uma lista

notas = []

# Leitura das 40 notas
for i in range(40):
    nota = float(input(f"Nota {i+1}: "))
    notas.append(nota)

# Cálculo da média
soma = 0
for i in range(40):
    soma = soma + notas[i]

media = soma / 40
print(f"Média: {media:.2f}")
Nota 1: 8.5
Nota 2: 7.0
Nota 3: 9.5

Nota 40: 6.8

Média: 7.42

# range(40) gera 0..39
# por isso o "i+1" só
# para exibir de forma
# humanizada.
🧠 Três pontos-chave: notas = [] cria uma lista vazia; .append(nota) cresce a lista dinamicamente; for i in range(40) percorre os índices 0 a 39. Atalho Python: sum(notas) / len(notas) resolve a média em uma linha — mas entender o laço é essencial.
08 / 16
Aula 2 Ponte

Agora temos o vetor… e daí?

Na Aula 1 aprendemos a guardar dados em vetores. Mas guardar é só metade da história — a outra metade é recuperar. Como verificar se um valor específico está dentro do vetor? Esse é o problema da busca, e a forma mais simples de resolvê-lo tem nome: busca linear.

09 / 16
Aula 2 Ponto de partida

O problema da busca manual

Sistema de controle de estoque: você tem uma lista com 100 códigos de produto e precisa verificar se o código 4587 está cadastrado.

Sem laço, o código vira uma escada infinita de if-elif:

  • Compara produtos[0] com 4587
  • Se não, compara produtos[1] com 4587
  • Se não, compara produtos[2]… e assim até [99]

Resultado: centenas de linhas para um problema que cabe em uma dúzia.

codigo_procurado = 4587

if produtos[0] == codigo_procurado:
    print("Posição 0")
elif produtos[1] == codigo_procurado:
    print("Posição 1")
elif produtos[2] == codigo_procurado:
    print("Posição 2")
elif produtos[3] == codigo_procurado:
    print("Posição 3")
# … e assim por diante
# até produtos[99]!
else:
    print("Não encontrado")
10 / 16
Aula 2 Construindo o conceito

O que é busca linear?

A busca linear (ou busca sequencial) é o algoritmo mais simples para encontrar um valor dentro de um vetor. A ideia: percorrer cada elemento, um por um, até encontrar o procurado — ou até esgotar todas as posições.

15[0]
42[1]
8[2]
23[3] ✓
16[4]
4[5]
31[6]

Procurando 23? Confere [0] → não. [1] → não. [2] → não. [3]encontrou! O algoritmo para imediatamente e retorna a posição.

11 / 16
Aula 2 Antes do desafio

Passo a passo da busca linear

Esta é a receita completa do algoritmo. Guarde-a: no próximo slide você vai implementá-la sozinho.

1

Prepare os dados. Tenha a lista de números e leia o valor procurado com input().

2

Crie a "posição encontrada". Uma variável posicao = -1 — o -1 significa "ainda não achei".

3

Percorra a lista. Use for i in range(len(lista)) para visitar cada índice, um por um.

4

Compare e marque. Se lista[i] == alvo, guarde posicao = i e use break para parar o laço.

5

Decida a resposta. Depois do laço: se posicao != -1, mostre a posição; senão, avise que não foi encontrado.

⚠️ O break do passo 4 é essencial. Sem ele, o laço continua rodando mesmo depois de encontrar — desperdiçando comparações e podendo sobrescrever a posição correta.
12 / 16
Aula 2 Sua vez · Desafio

Desafio: implemente a busca linear

Complete o programa abaixo. Ele deve procurar o valor digitado pelo usuário e dizer em que posição ele está — ou avisar que não existe. Siga os 5 passos do slide anterior.

numeros = [15, 42, 8, 23, 16, 4, 31]
alvo = int(input("Valor a procurar: "))

posicao = -1                  # 2 · "ainda não achei"

for i in range(len(numeros)): # 3 · percorre os índices
    if numeros[i] == alvo:    # 4 · compara
        posicao = i           #     marca a posição
        break                 #     e para o laço

if posicao != -1:             # 5 · decide a resposta
    print(f"Encontrado na posição: {posicao}")
else:
    print("Valor não encontrado.")
Valor a procurar: 23
Encontrado na posição: 3

── seu programa deve passar ──
──────── nos 3 testes ────────

Valor a procurar: 99
Valor não encontrado.

Valor a procurar: 15
Encontrado na posição: 0
🎯 Regras do desafio: implemente a busca na mão, com laço e if — sem usar os atalhos alvo in numeros ou numeros.index(). Teste com os três valores ao lado: 23, 99 e 15.
13 / 16
Pause e responda

Quantas comparações?

Um algoritmo de busca linear procura o valor 50 em um vetor de 100 elementos. O valor 50 não está no vetor. Quantas comparações o algoritmo fará até concluir que ele não existe?

A1 — para na primeira posição
B50 — bate metade do vetor
C99 — para um antes do fim
D100 — examina todas as posições antes de desistir
🧠 Por que 100: no pior caso (elemento ausente ou no fim), a busca linear examina todos os elementos. É por isso que a complexidade é O(n) — dobrar o vetor dobra o tempo no pior caso.
14 / 16
Então ficamos assim…

O que aprendemos hoje

  • Lista em Python → estrutura ordenada de tamanho dinâmico com acesso direto por índice em O(1)
  • Indexação base 0 — primeiro elemento em [0], último em [len(lista) - 1] ou [-1]
  • Sintaxe Pythonlista = [], .append(), for i in range(len(lista))
  • Busca linear → laço + comparação + retorno de posição, com break ao encontrar
  • Pior caso da busca linear é O(n) — proporcional ao tamanho da lista
📚 Próxima aula · Dia 2

Bubble Sort + Estatísticas de vetor — aprenderemos o primeiro algoritmo de ordenação (com trocas adjacentes) e como calcular média, máximo e mínimo com uma única varredura.

15 / 16
Saiba mais · Para aprofundar

Vai além da aula 📺

Como declarar e atribuir valores

Vídeo objetivo mostrando como vetores são criados, preenchidos e aplicados na prática. Reforça os conceitos da Aula 1 com exemplos reais.

📎 BÓSON TREINAMENTOS — Declaração e atribuição de valores a vetores em lógica de programação. YouTube, 18 fev. 2021.
youtube.com/watch?v=Kvts4cOv2qM

Algoritmos de busca linear e binária

Visualização passo a passo de como cada algoritmo encontra (ou não) um valor dentro de um conjunto de dados. Ótimo para fixar a Aula 2.

📎 GIOVANNA MOELLER — Algoritmos de busca: linear e binária. YouTube, 23 nov. 2022.
youtube.com/watch?v=KUUXv6rBCrY

16 / 16
Referências

De onde veio cada coisa

ARANHA, R. V. Algoritmos e estruturas de dados II: busca sequencial. UFMT, [s.d.]. Disponível em: ufmt.dev/aed2/buscas/sequencial. Acesso em: 28 nov. 2025.

OLIVEIRA, I. Estrutura de dados parte 2: algoritmos de busca. DEV, 17 fev. 2023. Disponível em: dev.to/oliverigor27/estrutura-de-dados-parte-2-algoritimos-de-busca-3kg1. Acesso em: 28 nov. 2025.

Base institucional: SEDUC-SP. Educação Profissional Paulista — Técnico em Desenvolvimento de Sistemas. Componente 1, Unidade 4, Semana 11 (SISANO1C1B2S11A1 e SISANO1C1B2S11A2).

Identidade visual · imagens © Getty Images · adaptação para apresentação HTML por Guilherme Antunes