Notação simples para coleções e registros
Neste capítulo, vamos padronizar uma notação enxuta para representar coleções (LISTA, VETOR e MATRIZ) e estruturas com campos (REGISTRO). A ideia é conseguir descrever dados e manipulações comuns (acesso, iteração, tamanho, inserção e remoção) sem depender de bibliotecas específicas.
Convenções que usaremos
- Índices: usaremos índices iniciando em 0 (zero) para vetores, listas e matrizes. Se você preferir iniciar em 1, mantenha a escolha consistente no algoritmo.
- Acesso: colchetes para índice:
A[i]eM[linha][coluna]. - Tamanho: função conceitual
TAMANHO(X)retorna a quantidade de elementos. - Operações conceituais (sem biblioteca):
INSIRA(X, pos, valor),REMOVA(X, pos),ANEXE(X, valor)(insere ao final).
VETOR: coleção indexada de tamanho fixo
Um VETOR é uma coleção indexada com tamanho definido na criação. É adequado quando você sabe quantos itens terá e quer acesso rápido por índice.
Declaração e inicialização
Notação sugerida:
VETOR notas[5] // 5 posições: 0..4Inicialização com valores (quando fizer sentido no seu pseudocódigo):
VETOR notas[5] = [7.5, 8.0, 6.0, 9.0, 7.0]Inicialização preenchendo com um valor padrão:
- Ouça o áudio com a tela desligada
- Ganhe Certificado após a conclusão
- + de 5000 cursos para você explorar!
Baixar o aplicativo
VETOR contagem[10] // 10 posições: 0..9
PARA i DE 0 ATÉ 9 FAÇA
contagem[i] = 0
FIM PARAAcesso por índice
mediaParcial = (notas[0] + notas[1]) / 2Iteração (percorrer o vetor)
Padrão recomendado: usar TAMANHO para não “espalhar” o número de elementos pelo código.
soma = 0
PARA i DE 0 ATÉ TAMANHO(notas) - 1 FAÇA
soma = soma + notas[i]
FIM PARAPasso a passo prático: calcular mínimo, máximo e média
Objetivo: dado um vetor de números, calcular min, max e media.
- Passo 1: inicialize
minemaxcom o primeiro elemento. - Passo 2: percorra do segundo elemento em diante, atualizando
minemax. - Passo 3: acumule a soma para calcular a média ao final.
VETOR v[6] = [10, 4, 7, 7, 2, 9]
min = v[0]
max = v[0]
soma = v[0]
PARA i DE 1 ATÉ TAMANHO(v) - 1 FAÇA
SE v[i] < min ENTÃO
min = v[i]
FIM SE
SE v[i] > max ENTÃO
max = v[i]
FIM SE
soma = soma + v[i]
FIM PARA
media = soma / TAMANHO(v)LISTA: coleção indexada de tamanho variável
Uma LISTA é uma coleção que pode crescer e diminuir. No pseudocódigo essencial, tratamos lista como “vetor dinâmico” conceitual: você pode inserir e remover, e o tamanho muda.
Declaração e inicialização
LISTA nomes = []
LISTA idades = [18, 21, 19]Tamanho e acesso
n = TAMANHO(idades)
primeiraIdade = idades[0]Inserção e remoção (conceituais)
Definimos operações com efeito claro, sem assumir implementação:
ANEXE(L, x): adiciona ao final.INSIRA(L, pos, x): insere empos, deslocando itens à direita.REMOVA(L, pos): remove o item depos, deslocando itens à esquerda.
LISTA L = [10, 20, 30]
ANEXE(L, 40) // L = [10, 20, 30, 40]
INSIRA(L, 1, 15) // L = [10, 15, 20, 30, 40]
REMOVA(L, 2) // remove o item na posição 2 (20): L = [10, 15, 30, 40]Passo a passo prático: remover todos os valores abaixo de um limite
Problema: dada uma lista de números, remover todos os elementos menores que limite.
O cuidado aqui é que, ao remover um item, os índices mudam. Um padrão simples é percorrer com ENQUANTO e só avançar o índice quando não remover.
- Passo 1: comece em
i = 0. - Passo 2: se
L[i]for menor que o limite, remova e mantenhai(pois um novo elemento “caiu” nessa posição). - Passo 3: caso contrário, avance
i.
LISTA L = [5, 12, 3, 20, 8]
limite = 10
i = 0
ENQUANTO i < TAMANHO(L) FAÇA
SE L[i] < limite ENTÃO
REMOVA(L, i)
SENÃO
i = i + 1
FIM SE
FIM ENQUANTO
// Resultado esperado: L = [12, 20]MATRIZ: coleção bidimensional (linhas x colunas)
Uma MATRIZ organiza dados em duas dimensões. Use quando o problema naturalmente envolve linhas e colunas (tabela, grade, imagem, distâncias entre pontos, etc.).
Declaração e inicialização
MATRIZ M[3][4] // 3 linhas (0..2) e 4 colunas (0..3)Inicialização preenchendo com zero (padrão comum):
PARA i DE 0 ATÉ 2 FAÇA
PARA j DE 0 ATÉ 3 FAÇA
M[i][j] = 0
FIM PARA
FIM PARAInicialização literal (quando útil para exemplos):
MATRIZ A[2][3] = [
[1, 2, 3],
[4, 5, 6]
]Acesso por índice
x = A[1][2] // linha 1, coluna 2 (valor 6)Padrões para percorrer matrizes
Padrão 1: varrer tudo (linha por linha)
PARA i DE 0 ATÉ LINHAS(M) - 1 FAÇA
PARA j DE 0 ATÉ COLUNAS(M) - 1 FAÇA
// use M[i][j]
FIM PARA
FIM PARASe você não quiser introduzir LINHAS e COLUNAS, pode manter as dimensões como constantes nomeadas:
LIN = 3
COL = 4
MATRIZ M[LIN][COL]
PARA i DE 0 ATÉ LIN - 1 FAÇA
PARA j DE 0 ATÉ COL - 1 FAÇA
M[i][j] = 0
FIM PARA
FIM PARAPadrão 2: percorrer a diagonal principal (somente quando a matriz é quadrada)
somaDiag = 0
PARA i DE 0 ATÉ N - 1 FAÇA
somaDiag = somaDiag + M[i][i]
FIM PARAPadrão 3: somar por linha e por coluna
// soma de cada linha
PARA i DE 0 ATÉ LINHAS(M) - 1 FAÇA
somaLinha = 0
PARA j DE 0 ATÉ COLUNAS(M) - 1 FAÇA
somaLinha = somaLinha + M[i][j]
FIM PARA
ESCREVA("Linha ", i, ": ", somaLinha)
FIM PARAPasso a passo prático: encontrar o maior valor e sua posição
- Passo 1: assuma o primeiro elemento como maior.
- Passo 2: varra a matriz inteira comparando.
- Passo 3: ao atualizar o maior, guarde também
iej.
maior = M[0][0]
posI = 0
posJ = 0
PARA i DE 0 ATÉ LINHAS(M) - 1 FAÇA
PARA j DE 0 ATÉ COLUNAS(M) - 1 FAÇA
SE M[i][j] > maior ENTÃO
maior = M[i][j]
posI = i
posJ = j
FIM SE
FIM PARA
FIM PARA
ESCREVA("Maior=", maior, " em (", posI, ",", posJ, ")")REGISTRO: agrupar campos relacionados
Um REGISTRO (ou estrutura) agrupa campos de tipos diferentes sob um mesmo nome. Use quando um “item” tem várias propriedades (ex.: aluno tem nome, idade, nota).
Definição e criação
REGISTRO Aluno
nome: TEXTO
idade: INTEIRO
nota: REAL
FIM REGISTRO
VAR a: Aluno
a.nome = "Ana"
a.idade = 20
a.nota = 8.5Lista de registros (tabela de objetos)
Uma forma comum de organizar dados é uma LISTA de REGISTRO:
LISTA alunos = []
REGISTRO Aluno
nome: TEXTO
idade: INTEIRO
nota: REAL
FIM REGISTRO
VAR x: Aluno
x.nome = "Ana"
x.idade = 20
x.nota = 8.5
ANEXE(alunos, x)
VAR y: Aluno
y.nome = "Bruno"
y.idade = 22
y.nota = 6.0
ANEXE(alunos, y)Acesso a campos e iteração
PARA i DE 0 ATÉ TAMANHO(alunos) - 1 FAÇA
ESCREVA(alunos[i].nome, " - ", alunos[i].nota)
FIM PARAPasso a passo prático: calcular estatísticas a partir de registros
Problema: dada uma lista de alunos, calcular média das notas, maior nota e o nome do aluno com maior nota.
- Passo 1: inicialize acumuladores (soma) e “melhor aluno” com o primeiro registro.
- Passo 2: percorra a lista somando notas e comparando para achar a maior.
- Passo 3: calcule a média ao final.
soma = 0
maiorNota = alunos[0].nota
nomeMaior = alunos[0].nome
PARA i DE 0 ATÉ TAMANHO(alunos) - 1 FAÇA
soma = soma + alunos[i].nota
SE alunos[i].nota > maiorNota ENTÃO
maiorNota = alunos[i].nota
nomeMaior = alunos[i].nome
FIM SE
FIM PARA
media = soma / TAMANHO(alunos)
ESCREVA("Média=", media)
ESCREVA("Maior nota=", maiorNota, " (", nomeMaior, ")")Padrões úteis de organização de dados
Vetor paralelo vs. registro
Dois jeitos de representar “alunos com nome e nota”:
- Vetores paralelos:
VETOR nomes[]eVETOR notas[]com o mesmo índice representando a mesma pessoa. - Lista de registros:
LISTA alunosonde cada item temnomeenota.
Como padrão de pseudocódigo, prefira registro quando os campos pertencem ao mesmo “objeto”, pois reduz erros de desalinhamento de índices.
Tabela de referência rápida
| Estrutura | Quando usar | Acesso | Tamanho |
|---|---|---|---|
| VETOR | Quantidade fixa, acesso rápido | v[i] | fixo (ou TAMANHO(v)) |
| LISTA | Quantidade variável, inserções/remoções | L[i] | TAMANHO(L) |
| MATRIZ | Dados em linhas e colunas | M[i][j] | LINHAS(M), COLUNAS(M) |
| REGISTRO | Campos relacionados em um item | r.campo | não se aplica |
Exercícios práticos
1) Manipular lista de valores (inserção, remoção e filtragem)
Dada uma lista L de inteiros:
- a) Insira o valor
99na posição0. - b) Remova o elemento da última posição.
- c) Remova todos os valores negativos.
Escreva o pseudocódigo usando INSIRA, REMOVA, TAMANHO e um laço que não pule elementos após remoção.
2) Estatísticas em vetor
Dado um vetor V com N números reais:
- a) Calcule a média.
- b) Calcule a variância (média dos quadrados das diferenças para a média).
- c) Calcule o desvio padrão (raiz quadrada da variância) se você aceitar a operação
RAIZcomo função conceitual.
Dica de padrão: faça em duas passagens (primeiro a média, depois a variância).
// Passagem 1: média
soma = 0
PARA i DE 0 ATÉ N - 1 FAÇA
soma = soma + V[i]
FIM PARA
media = soma / N
// Passagem 2: variância
soma2 = 0
PARA i DE 0 ATÉ N - 1 FAÇA
d = V[i] - media
soma2 = soma2 + d * d
FIM PARA
variancia = soma2 / N3) Percorrer matriz e gerar uma matriz transformada
Dada uma matriz M de inteiros (LIN x COL), crie uma matriz T onde:
T[i][j] = 1seM[i][j]for maior que 0T[i][j] = 0caso contrário
Use o padrão de varredura completa (dois laços).
4) Organizar dados em registros e buscar por campo
Defina um registro Produto com campos codigo (inteiro), nome (texto) e preco (real). Em seguida:
- a) Crie uma lista com pelo menos 5 produtos.
- b) Dado um
codigoProcurado, encontre o produto e escreva seu nome e preço. - c) Se não encontrar, escreva “não encontrado”.
REGISTRO Produto
codigo: INTEIRO
nome: TEXTO
preco: REAL
FIM REGISTRO
// Busca linear por código
achou = FALSO
PARA i DE 0 ATÉ TAMANHO(produtos) - 1 FAÇA
SE produtos[i].codigo == codigoProcurado ENTÃO
ESCREVA(produtos[i].nome, " - ", produtos[i].preco)
achou = VERDADEIRO
PARE
FIM SE
FIM PARA
SE achou == FALSO ENTÃO
ESCREVA("não encontrado")
FIM SE