Vetores (Arrays Unidimensionais)
Aprenda a estruturar, armazenar e manipular dados em coleções sequenciais homogêneas no Portugol Studio.
A Motivação: O Problema das Variáveis Isoladas
Imagine que você precise desenvolver um programa para registrar e analisar a idade de todos os 40 alunos de uma turma escolar. Utilizando apenas os conceitos básicos de variáveis comuns, a única solução seria declarar 40 variáveis diferentes de forma isolada na memória:
programa { funcao inicio() { inteiro idade1, idade2, idade3, idade4, idade5, idade6 // ... até idade40 // Entrada de dados totalmente repetitiva leia(idade1) leia(idade2) leia(idade3) // ... } }
O que é um Vetor?
Para solucionar esse cenário, utilizamos uma estrutura de dados fundamental chamada Vetor (ou Array).
O vetor é uma estrutura de dados unidimensional, homogênea e estática que armazena vários dados sob um único identificador.
"O vetor pode ser visto como uma variável que possui diversas posições na memória e com isso pode armazenar diversos valores (do mesmo tipo)."
Ao invés de criarmos 40 espaços independentes na memória, reservamos um bloco contíguo de posições e o dividimos em pequenos compartimentos ("colunas") para armazenar nossos dados de forma uniforme.
Declaração e Sintaxe no Portugol Studio
Os vetores no Portugol Studio são estruturas estáticas: o seu tamanho deve ser obrigatoriamente definido antes de ser utilizado e não poderá ser alterado dinamicamente durante a execução do programa.
Sintaxe Geral:
tipo_do_vetor nome_do_vetor[quantidade_de_elementos]
Exemplos de Declaração:
cadeia nomeAluno[40] // Armazena até 40 nomes de alunos (cadeias de caracteres) inteiro idade[10] // Armazena 10 idades de forma sequencial (inteiros) real mediaFinal[18] // Armazena 18 notas de média de alunos (números reais)
Mapeamento por Índices e Memória
Para identificar e manipular individualmente cada valor de um vetor, utilizamos um número sequencial denominado Índice.
A regra de ouro dos índices é:
- O primeiro elemento do vetor sempre reside no índice
0. - O último elemento do vetor estará no índice
TamanhoTotal - 1.
Se declararmos um vetor com 5 elementos do tipo real para notas (real notaQ[5]), a estrutura do vetor na memória será mapeada desta maneira:
(1ª posição)
(2ª posição)
(3ª posição)
(4ª posição)
(Última posição)
Escrita e Leitura: Manual vs. Automatizada
Método Manual (Evitar!):
Acessar as posições individualmente e manualmente anula as vantagens de usar vetores no seu projeto:
inteiro idade[10] leia(idade[0]) leia(idade[1]) // ... processo cansativo e repetitivo até chegar em leia(idade[9]) leia(idade[9])
Método Automatizado (Recomendado!):
A melhor abordagem é utilizar uma estrutura de repetição para. O contador interno do laço serve dinamicamente como o índice do próprio vetor, reduzindo dezenas de linhas de código para apenas poucas instruções:
programa { funcao inicio() { inteiro idade[10] // Entrada de dados automatizada por varredura de índice para(inteiro i = 0; i < 10; i++) { escreva("Digite a idade da posição ", i, ": ") leia(idade[i]) } // Saída de dados automatizada na tela escreva("\nValores digitados no vetor: ") para(inteiro i = 0; i < 10; i++) { escreva(idade[i], " ") } } }
Prática e Exercícios do Material
Impressão de Ordem Direta
Crie um algoritmo que leia 10 números inteiros e armazene em um vetor. Ao final, mostre todos os números digitados na ordem em que foram inseridos.
programa { funcao inicio() { inteiro numeros[10] para(inteiro i = 0; i < 10; i++) { escreva("Digite o valor ", i + 1, ": ") leia(numeros[i]) } escreva("\nOrdem de inserção: ") para(inteiro i = 0; i < 10; i++) { escreva(numeros[i], " ") } } }
Múltiplos de 3 e Pesquisa
Altere o exercício anterior para que o vetor só aceite valores múltiplos de 3. Depois de preencher todo o vetor, leia mais um valor do teclado e busque no vetor indicando se o número está presente ou não.
programa { funcao inicio() { inteiro vetor[10] inteiro temp, busca logico encontrado = falso // Entrada com validação (somente múltiplos de 3) para(inteiro i = 0; i < 10; ) { escreva("Digite o múltiplo de 3 para o índice ", i, ": ") leia(temp) se(temp % 3 == 0) { vetor[i] = temp i++ // Só avança o loop se o dado for válido } senao { escreva("Erro: O valor não é múltiplo de 3!\n") } } // Realizando a busca sequencial escreva("\nDigite um número para pesquisar no vetor: ") leia(busca) para(inteiro i = 0; i < 10; i++) { se(vetor[i] == busca) { encontrado = verdadeiro } } se(encontrado) { escreva("O valor ", busca, " está PRESENTE no vetor!") } senao { escreva("O valor ", busca, " NÃO está no vetor.") } } }
Análise de Dados e Inversão
Faça um programa para ler 10 números do teclado. Após a leitura de todos os números apresente: o maior número, o menor número, a média dos números e imprima os números na ordem inversa do cadastro.
Interseção de Vetores
Faça um algoritmo que leia dois vetores de 10 posições cada. Crie um terceiro vetor que contenha somente os valores que aparecem nos dois vetores (interseção). Mostre o vetor resultante sem valores repetidos.
Materiais Complementares de Apoio
Slides: Arquitetura de Vetores
Acesse o slide de apoio técnico para fixar os conceitos visuais e o mapeamento de posições de memória para vetores.
Videoaula: Dominando Vetores
Assista à explicação detalhada com exemplos práticos, execução passo a passo e resoluções no Portugol Studio.
Repositório de Código Fonte
Explore, acesse e faça o download de todos os códigos-fonte de exemplo e exercícios estruturados nesta trilha.