Capítulo 13: Vetores Unidimensionais (Estruturas de Dados e Listas em Memória)

🎯 Objetivo da Aula

Até este momento, cada variável declarada na seção var guardava apenas um único valor por vez. Se precisássemos registrar 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 de repetição.

Nesta aula, você aprenderá a:

  1. Compreender o conceito de Estrutura de Dados Homogênea Unidimensional (Vetor / Array).
  2. Dominar a sintaxe de declaração: nomeVetor : vetor [1..N] de tipo.
  3. Acessar e modificar elementos individuais através do seu Índice Numérico de Posição (vetor[i]).
  4. Integrar Vetores com Laços para para preenchimento e listagem automatizada de dados em massa.

📥 Material de Apoio e Código-Fonte da Aula:


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

Situação: O pátio de triagem da FastLog possui 5 Vagas de Espera numeradas de 1 a 5. Conforme os caminhões chegam da estrada, o conferente precisa registrar a placa de cada um na respectiva vaga e, em seguida, emitir o Relatório Geral de Ocupação de Pátio para a torre de controle.

Missão: Você deve construir o Gerenciador de Vagas de Pátio, criando um vetor de caracteres de 5 posições, preenchendo as placas via teclado e imprimindo o mapa de ocupação formatado.


🧠 Fundamentos: A Anatomia de um Vetor

1. O que é um Vetor?

Um Vetor (Array) é uma sequência contígua de posições de memória que compartilham o mesmo nome e o mesmo tipo de dado, onde cada elemento é identificado por um Índice (Número de Posição):

graph LR
    subgraph Vetor_Vagas ["Vetor: vagas (de 1 ate 5)"]
        P1["vagas[1]<br/>'ABC-1234'"]
        P2["vagas[2]<br/>'BRA-2E19'"]
        P3["vagas[3]<br/>'XYZ-9000'"]
        P4["vagas[4]<br/>'KML-4433'"]
        P5["vagas[5]<br/>'JHG-7711'"]
    end
    
    style P1 fill:#2980b9,stroke:#fff,stroke-width:2px,color:#fff
    style P2 fill:#2980b9,stroke:#fff,stroke-width:2px,color:#fff
    style P3 fill:#2980b9,stroke:#fff,stroke-width:2px,color:#fff
    style P4 fill:#2980b9,stroke:#fff,stroke-width:2px,color:#fff
    style P5 fill:#2980b9,stroke:#fff,stroke-width:2px,color:#fff

2. A Sintaxe de Declaração no VisuAlg

Na seção var:

1
2
3
4
5
var
   vagas : vetor [1..5] de caractere
   faturamentoTrimestral : vetor [1..4] de real
   pesosPaletes : vetor [1..100] de real
   i : inteiro // Variável de índice para o laço

Indexação Base 1 no VisuAlg:
No VisuAlg e em Pascal, os vetores começam tradicionalmente no índice 1 (e vão até N). Em linguagens como C, Java, Python e JavaScript, os vetores começam no índice 0 (0 a N-1).


3. A Simbiose Perfeita: Vetores + Laço para

Nunca acesse posições de vetor de forma repetitiva manual. Use sempre a variável i do laço para:

1
2
3
4
5
// Preenchimento Automático
para i de 1 ate 5 faca
   escreva("Digite a placa para a vaga [", i, "]: ")
   leia(vagas[i]) // O 'i' assume 1, depois 2, depois 3...
fimpara

📖 Exemplo Guiado: Controle de Vagas do Pátio

Código do Algoritmo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
algoritmo "Controle_Vagas_Patio"
var
   vagas : vetor [1..5] de caractere
   i : inteiro

inicio
   escreval("==========================================")
   escreval("       FASTLOG - GESTÃO DE PÁTIO          ")
   escreval("==========================================")
   escreval("Cadastre as placas dos caminhões nas vagas:")
   escreval("")

   // 1. Entrada de Dados no Vetor
   para i de 1 ate 5 faca
      escreva("Informe a placa na Vaga [", i, "]: ")
      leia(vagas[i])
   fimpara

   // 2. Saída e Varredura do Vetor
   escreval("")
   escreval("============ MAPA DE OCUPAÇÃO ============")
   escreval(" VAGA  |  PLACA DO VEÍCULO ESTACIONADO    ")
   escreval("-------+----------------------------------")
   para i de 1 ate 5 faca
      escreval(" [ ", i, " ] |  ", vagas[i])
   fimpara
   escreval("==========================================")
fimalgoritmo

✅ Exemplo de Execução no Console (F9):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
==========================================
       FASTLOG - GESTÃO DE PÁTIO          
==========================================
Cadastre as placas dos caminhões nas vagas:

Informe a placa na Vaga [1]: ABC-1234
Informe a placa na Vaga [2]: BRA-2E19
Informe a placa na Vaga [3]: XYZ-9000
Informe a placa na Vaga [4]: KML-4433
Informe a placa na Vaga [5]: JHG-7711

============ MAPA DE OCUPAÇÃO ============
 VAGA  |  PLACA DO VEÍCULO ESTACIONADO    
-------+----------------------------------
 [ 1 ] |  ABC-1234
 [ 2 ] |  BRA-2E19
 [ 3 ] |  XYZ-9000
 [ 4 ] |  KML-4433
 [ 5 ] |  JHG-7711
==========================================

🛠️ Prática Obrigatória 1: Faturamento Anual por Trimestre

Passo 1: O Desafio

Crie um algoritmo "Faturamento_Trimestral" que utilize um vetor de real com 4 posições (vetor [1..4] de real) para armazenar o faturamento dos 4 trimestres do ano:

  1. Receba os 4 valores pelo teclado.
  2. Em um segundo laço para, calcule a Soma Total Anual e a Média Trimestral de Vendas.

✅ Resultado Esperado (Prática 1):

1
2
3
4
5
6
7
Faturamento Trimestre 1 (R$): 150000.00
Faturamento Trimestre 2 (R$): 180000.00
Faturamento Trimestre 3 (R$): 220000.00
Faturamento Trimestre 4 (R$): 310000.00

FATURAMENTO ANUAL CONSOLIDADO: R$ 860000.00
MÉDIA POR TRIMESTRE          : R$ 215000.00

🛠️ Prática Obrigatória 2: Cadastro de SKUs de Inventário

Crie um algoritmo "Catalogo_SKU" que utilize um vetor de 6 posições de caractere para armazenar os códigos de produtos do almoxarifado (ex: "LOG-01", "LOG-02"…). Após cadastrar todos os 6 códigos, exiba a lista de inventário completa numerada de 1 a 6.

✅ Resultado Esperado (Prática 2):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
=== CADASTRO DE SKUs DE ALMOXARIFADO ===
Código do SKU [1]: LOG-01
Código do SKU [2]: LOG-02
Código do SKU [3]: LOG-03
Código do SKU [4]: LOG-04
Código do SKU [5]: LOG-05
Código do SKU [6]: LOG-06

============ INVENTÁRIO ATIVO ============
Posição #1 -> Código: LOG-01
Posição #2 -> Código: LOG-02
Posição #3 -> Código: LOG-03
Posição #4 -> Código: LOG-04
Posição #5 -> Código: LOG-05
Posição #6 -> Código: LOG-06
==========================================

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_13_SeuNome_SeuSobrenome.alg.
  2. Certifique-se de que declarou o vetor com a sintaxe correta vetor [1..N] de tipo.
  3. No Microsoft Teams, envie na tarefa “VisuAlg Cap 13 - Vetores Unidimensionais”.
  4. Clique em Entregar (Turn In).

💡 Checkpoint de Lógica & Engenharia de Software

Você acabou de aprender sobre Estruturas de Dados Lineares e Alocação de Memória Contígua. Em baixo nível, os elementos de um vetor são armazenados lado a lado na memória RAM física, permitindo que a CPU acerte o endereço de qualquer elemento com acesso instantâneo em tempo constante ($O(1)$) através da fórmula: $\text{Endereço}(i) = \text{Base} + ((i - 1) \times \text{Tamanho})$. (O -1 existe porque, no VisuAlg, o primeiro índice é 1, não 0 — o primeiro elemento fica exatamente no endereço Base, sem deslocamento.)


🔥 Desafio de Fixação: Inversão de Ordem de Vetor

Crie um algoritmo que leia 5 números inteiros em um vetor e, em seguida, utilize um laço para ... passo -1 para exibir os elementos na ordem inversa daquela em que foram digitados.


🔑 Gabarito de Código Completo

Prática 1:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
algoritmo "Faturamento_Trimestral"
var
   trimestres : vetor [1..4] de real
   i : inteiro
   totalAnual, mediaTrimestre : real
inicio
   totalAnual <- 0.0

   escreval("=== APURAÇÃO CONTÁBIL TRIMESTRAL ===")
   para i de 1 ate 4 faca
      escreva("Faturamento Trimestre ", i, " (R$): ")
      leia(trimestres[i])
      totalAnual <- totalAnual + trimestres[i]
   fimpara

   mediaTrimestre <- totalAnual / 4.0

   escreval("")
   escreval("=============================================")
   escreval("FATURAMENTO ANUAL CONSOLIDADO: R$ ", totalAnual:10:2)
   escreval("MÉDIA POR TRIMESTRE          : R$ ", mediaTrimestre:10:2)
   escreval("=============================================")
fimalgoritmo

Prática 2:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
algoritmo "Catalogo_SKU"
var
   catalogo : vetor [1..6] de caractere
   i : inteiro
inicio
   escreval("=== CADASTRO DE SKUs DE ALMOXARIFADO ===")
   para i de 1 ate 6 faca
      escreva("Código do SKU [", i, "]: ")
      leia(catalogo[i])
   fimpara

   escreval("")
   escreval("============ INVENTÁRIO ATIVO ============")
   para i de 1 ate 6 faca
      escreval("Posição #", i, " -> Código: ", catalogo[i])
   fimpara
   escreval("==========================================")
fimalgoritmo

Desafio:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
algoritmo "Inversao_Vetor"
var
   numeros : vetor [1..5] de inteiro
   i : inteiro
inicio
   escreval("Digite 5 números inteiros:")
   para i de 1 ate 5 faca
      escreva("Elemento [", i, "]: ")
      leia(numeros[i])
   fimpara

   escreval("")
   escreval("--- EXIBIÇÃO NA ORDEM INVERSA ---")
   para i de 5 ate 1 passo -1 faca
      escreval("Posição [", i, "] = ", numeros[i])
   fimpara
fimalgoritmo

📝 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.

  1. O que é um Vetor (Array), segundo a definição apresentada nos Fundamentos deste capítulo?
  2. Escreva a sintaxe de declaração de um vetor na seção var, usando como exemplo um vetor de 5 posições do tipo caractere chamado vagas.
  3. Segundo o aviso importante do capítulo, a partir de qual índice os vetores começam no VisuAlg/Pascal, e a partir de qual índice eles começam em linguagens como C, Java, Python e JavaScript?
  4. Por que o capítulo recomenda usar a variável i do laço para para acessar as posições do vetor, em vez de digitar cada posição manualmente?
  5. No Cenário Prático, quantas vagas de espera tem o pátio de triagem da FastLog, e o que deve ser registrado em cada vaga?
  6. No algoritmo Controle_Vagas_Patio, quantos laços para são utilizados ao todo, e qual é a finalidade de cada um deles?
  7. Na Prática Obrigatória 1, além da soma total anual, qual outro cálculo deve ser feito a partir dos 4 valores armazenados no vetor de trimestres?
  8. Na Prática Obrigatória 2, quantas posições tem o vetor de SKUs do algoritmo Catalogo_SKU, e de que tipo de dado ele é declarado?
  9. Segundo o Checkpoint de Lógica, qual fórmula é usada para calcular o endereço de memória de um elemento i em um vetor, e em que complexidade de tempo esse acesso ocorre?
  10. Segundo os Fundamentos, qual problema prático teríamos ao tentar registrar as placas de 50 caminhões sem usar um vetor, apenas com variáveis isoladas?