Capítulo 13: Vetores I: Arrays Unidimensionais (Indexação Base Zero)
🎯 Objetivo da Aula
Até agora, cada variável guardava apenas um único valor. Se precisássemos armazenar as placas de 50 caminhões no pátio, teríamos que declarar 50 variáveis diferentes (placa1, placa2, …, placa50), tornando o código inviável e impossível de automatizar com laços para.
Nesta aula, você aprenderá a:
- Compreender o conceito de Vetor (Array 1D).
- Dominar a sintaxe de declaração:
tipo nomeVetor[tamanho]. - Dominar a Regra de Ouro da Indexação Base Zero (
0atétamanho - 1). - Integrar Vetores com Laços
parapara preenchimento e listagem automatizada de dados em massa.
📥 Material de Apoio e Código-Fonte da Aula:
- 📄 Arquivo Pronto (.por): Baixar Capitulo_13.por (abra diretamente no Portugol Studio)
- 📦 Exercícios Separados (.zip): Baixar Capitulo_13.zip
🏢 O Cenário Prático (Seu Desafio)
Situação: O pátio de triagem da FastLog possui 5 Vagas de Espera numeradas de 0 a 4. Conforme os caminhões chegam da rodovia, o conferente precisa registrar a placa de cada veículo em sua respectiva vaga e emitir o Relatório Geral de Ocupação de Pátio para a torre de controle.
Missão: Construir o Gerenciador de Vagas de Pátio, criando um vetor de strings (cadeia vagas[5]), preenchendo as placas via teclado e imprimindo o mapa de ocupação formatado.
🧠 Fundamentos: A Estrutura de um Vetor Base Zero
1. O que é um Vetor?
Um Vetor (Array) é uma sequência contígua de posições de memória RAM identificadas por um Índice Numérico de Posição:
graph LR
subgraph Vetor_Vagas ["Vetor: cadeia vagas[5]"]
P0["vagas[0]<br/>'ABC-1234'"]
P1["vagas[1]<br/>'BRA-2E19'"]
P2["vagas[2]<br/>'XYZ-9000'"]
P3["vagas[3]<br/>'KML-4433'"]
P4["vagas[4]<br/>'JHG-7711'"]
end
style P0 fill:#2980b9,stroke:#fff,color:#fff
style P1 fill:#2980b9,stroke:#fff,color:#fff
style P2 fill:#2980b9,stroke:#fff,color:#fff
style P3 fill:#2980b9,stroke:#fff,color:#fff
style P4 fill:#2980b9,stroke:#fff,color:#fff2. A Regra de Ouro da Indexação Base Zero (0..N-1)
Em C, Java, JavaScript, Python e Portugol Studio:
O primeiro elemento de um vetor com 5 posições está no índice 0 e o último elemento está no índice 4 (5 - 1).
Se você tentar acessar vagas[5], o programa travará com erro de estouro de limites de memória (Array Index Out of Bounds)!
3. A Sintaxe de Declaração no Portugol Studio
Além de declarar o vetor vazio e preenchê-lo depois (como acima), você pode inicializá-lo diretamente com os valores já entre chaves { }, separados por vírgula, na mesma linha da declaração:
O Portugol Studio associa cada valor da lista à posição correspondente, na ordem em que aparecem: motoristas[0] recebe "Carlos Silva", motoristas[1] recebe "Beatriz Rocha", e assim por diante. A quantidade de valores entre chaves deve bater exatamente com o tamanho declarado do vetor.
4. Vetores + Laço para (A Combinação Perfeita)
📖 Exemplo Guiado: Controle de Vagas do Pátio
Código do Programa:
✅ Exemplo de Execução no Console (Shift + F6):
🛠️ Prática Obrigatória 1: Faturamento Anual por Trimestre
Passo 1: O Desafio
Crie um programa faturamento_trimestral.por que utilize um vetor de real com 4 posições (real trimestres[4]):
- Receba os 4 faturamentos trimestrais pelo teclado.
- Em um segundo laço
para, calcule a Soma Total Anual e a Média Trimestral de Vendas.
✅ Resultado Esperado (Prática 1):
🛠️ Prática Obrigatória 2: Catálogo de SKUs de Almoxarifado
Crie um programa catalogo_sku.por que declare um vetor de 6 posições de cadeia (cadeia catalogo[6]) para armazenar os códigos de produtos do galpão (ex: "LOG-01", "LOG-02"…).
Após cadastrar os 6 códigos, exiba a lista de inventário completa numerada de 0 a 5.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_13_SeuNome_SeuSobrenome.por. - Verifique se os laços
parautilizam estritamente o intervalo de0até< tamanho. - No Microsoft Teams, envie na tarefa “Portugol Cap 13 - Vetores Unidimensionais”.
- Clique em Entregar (Turn In).
💡 Checkpoint de Lógica & Engenharia de Software
Você acabou de dominar Alocação de Memória Contígua e Complexidade $O(1)$. Quando você acessa vagas[3], o computador não precisa procurar na memória: ele multiplica o índice 3 pelo tamanho em bytes do elemento e pula direto para o endereço físico exato instantaneamente.
🔥 Desafio de Fixação: Inversão de Ordem de Vetor
Crie um programa que leia 5 números inteiros em um vetor e, em seguida, utilize um laço para (inteiro i = 4; i >= 0; i--) para exibir os elementos na ordem inversa daquela em que foram digitados.
🔑 Gabarito de Código Completo
Prática 1:
Prática 2:
Desafio:
📝 Atividade Extra: Questionário de Fixação (Caderno)
Instruções: Responda no caderno, de próprio punho, as 10 perguntas abaixo com base no que foi estudado neste capítulo. Ao concluir, leve o caderno até o professor para correção e visto.
- O que é um Vetor (Array), segundo a definição apresentada nos Fundamentos deste capítulo?
- Qual é a sintaxe de declaração de um vetor no Portugol Studio? Dê um exemplo de um vetor de 5 posições do tipo
cadeia. - Explique a Regra de Ouro da Indexação Base Zero: em um vetor de 5 posições, qual é o índice do primeiro elemento e qual é o índice do último?
- O que acontece se você tentar acessar a posição
vagas[5]em um vetor declarado comocadeia vagas[5]? - No Exemplo Guiado (Controle de Vagas do Pátio), quantas vagas tem o pátio de triagem da FastLog e qual é o índice da última vaga?
- Na Prática Obrigatória 1 (Faturamento Anual por Trimestre), quais dois valores devem ser calculados a partir do vetor de 4 posições, após a leitura dos faturamentos?
- Na Prática Obrigatória 2 (Catálogo de SKUs de Almoxarifado), quantas posições tem o vetor de catálogo e de que tipo de dado ele é declarado?
- Segundo o Checkpoint de Lógica & Engenharia de Software, por que o acesso a um elemento de vetor pelo índice (como
vagas[3]) é considerado instantâneo, de complexidade O(1)? - Qual condição de laço
paradeve ser usada para percorrer corretamente todas as posições de um vetor de tamanho N, do primeiro ao último elemento, sem ultrapassar os limites da memória? - Dê um exemplo do dia a dia em que dados poderiam ser organizados de forma sequencial e numerada, de modo parecido com o vetor de vagas de pátio da FastLog.