Vetores no Portugol
Quando começamos a programar, é comum guardar um valor por vez em variáveis simples, como idade, nota ou nome.
Isso funciona bem quando temos poucos dados. Mas, quando precisamos guardar vários valores parecidos, usar uma variável diferente para cada um deles começa a deixar o programa mais confuso.
É exatamente nesse tipo de situação que os vetores se tornam úteis.
O que é um vetor
Seção intitulada “O que é um vetor”Um vetor é uma estrutura que permite armazenar vários valores do mesmo tipo usando um único nome.
Em vez de criar variáveis como nota1, nota2, nota3 e nota4, podemos criar um vetor chamado notas.
Cada valor fica guardado em uma posição desse vetor.
Veja a ideia:
nota1 = 7nota2 = 8nota3 = 6nota4 = 9Com vetor, podemos organizar assim:
notas[0] = 7notas[1] = 8notas[2] = 6notas[3] = 9Perceba que o nome continua sendo notas, mas agora usamos uma posição para indicar qual valor queremos acessar.
Quando usar vetor
Seção intitulada “Quando usar vetor”Usamos vetores quando precisamos trabalhar com vários dados do mesmo tipo e que pertencem ao mesmo conjunto.
Alguns exemplos:
- notas de uma turma
- pontuações de várias partidas
- temperaturas medidas em vários dias
- quantidade de passos registrada durante a semana
Sem vetor, o programa pode ficar assim:
inteiro nota1inteiro nota2inteiro nota3inteiro nota4Com vetor, a organização melhora:
inteiro notas[4]Isso facilita tanto a leitura do programa quanto o uso de repetições para percorrer todos os valores.
Declaração de vetor
Seção intitulada “Declaração de vetor”No Portugol, declaramos um vetor informando:
- o tipo dos valores
- o nome do vetor
- a quantidade de posições entre colchetes
Exemplos:
inteiro idades[5]real notas[4]cadeia nomes[10]Nesses exemplos:
idadesguarda 5 números inteirosnotasguarda 4 números reaisnomesguarda 10 cadeias de texto
Todos os valores dentro de um mesmo vetor devem ser do mesmo tipo.
Posições do vetor
Seção intitulada “Posições do vetor”Cada valor do vetor fica em uma posição.
No nosso material, vamos usar a regra mais comum em programação:
a primeira posição de um vetor é a posição
0
Por isso, um vetor com 5 elementos possui estas posições:
0, 1, 2, 3 e 4Veja um exemplo:
inteiro fases[5]
fases[0] = 12fases[1] = 15fases[2] = 18fases[3] = 10fases[4] = 20Podemos visualizar assim:
| Posição | Valor |
|---|---|
0 | 12 |
1 | 15 |
2 | 18 |
3 | 10 |
4 | 20 |
Perceba que a quantidade de elementos é 5, mas a última posição é 4.
Inserindo valores sem repetição
Seção intitulada “Inserindo valores sem repetição”Quando ainda estamos aprendendo vetores, é importante entender que cada posição pode receber um valor de forma manual.
Veja este exemplo:
programa{ funcao inicio() { inteiro pontos[4]
pontos[0] = 120 pontos[1] = 90 pontos[2] = 150 pontos[3] = 110 }}Nesse caso, o programa guarda um valor em cada posição do vetor pontos.
Também podemos fazer isso com leia:
programa{ funcao inicio() { inteiro idades[3]
escreva("Digite a primeira idade: ") leia(idades[0])
escreva("Digite a segunda idade: ") leia(idades[1])
escreva("Digite a terceira idade: ") leia(idades[2]) }}Esse tipo de preenchimento ajuda a entender como o acesso por posição funciona.
Lendo valores sem repetição
Seção intitulada “Lendo valores sem repetição”Depois de preencher o vetor, também podemos mostrar cada valor manualmente.
programa{ funcao inicio() { inteiro notas[4]
notas[0] = 7 notas[1] = 8 notas[2] = 6 notas[3] = 9
escreva("Nota 1: ", notas[0], "\n") escreva("Nota 2: ", notas[1], "\n") escreva("Nota 3: ", notas[2], "\n") escreva("Nota 4: ", notas[3], "\n") }}Isso mostra que podemos usar o valor de cada posição como usamos qualquer outra variável.
Preenchendo vetor com repetição
Seção intitulada “Preenchendo vetor com repetição”Quando o vetor possui muitas posições, preencher manualmente cada uma delas dá muito trabalho.
Nesses casos, usamos para para repetir a leitura.
programa{ funcao inicio() { inteiro numeros[5]
para (inteiro i = 0; i < 5; i++) { escreva("Digite o número da posição ", i, ": ") leia(numeros[i]) } }}Vamos analisar com calma:
i = 0faz o contador começar na primeira posiçãoi < 5faz o laço repetir enquanto ainda houver posições válidasi++avança para a próxima posição
Dentro do laço, usamos numeros[i], ou seja, a posição atual do vetor.
Percorrendo vetor com repetição
Seção intitulada “Percorrendo vetor com repetição”Percorrer um vetor significa passar por todas as suas posições, uma por uma.
Isso pode ser feito com para.
programa{ funcao inicio() { inteiro numeros[5]
numeros[0] = 10 numeros[1] = 20 numeros[2] = 30 numeros[3] = 40 numeros[4] = 50
para (inteiro i = 0; i < 5; i++) { escreva("Posição ", i, ": ", numeros[i], "\n") } }}Nesse exemplo, o programa visita todas as posições do vetor e mostra o valor guardado em cada uma delas.
Exemplos Práticos
Seção intitulada “Exemplos Práticos”Agora vamos usar vetores para resolver problemas comuns.
Soma dos valores de um vetor
Seção intitulada “Soma dos valores de um vetor”Quando queremos somar todos os valores de um vetor, usamos uma variável acumuladora.
Ela costuma começar com 0 e vai recebendo cada valor do vetor ao longo do percurso.
programa{ funcao inicio() { inteiro pontos[4] inteiro soma = 0
pontos[0] = 100 pontos[1] = 80 pontos[2] = 120 pontos[3] = 90
para (inteiro i = 0; i < 4; i++) { soma = soma + pontos[i] }
escreva("Soma total: ", soma) }}Nesse caso, a variável soma vai recebendo:
0 + 100- depois
100 + 80 - depois
180 + 120 - depois
300 + 90
No final, ela guarda o total.
Média dos valores de um vetor
Seção intitulada “Média dos valores de um vetor”Para calcular a média, primeiro somamos todos os valores. Depois, dividimos essa soma pela quantidade de elementos.
programa{ funcao inicio() { real notas[4] real soma = 0 real media
notas[0] = 7.5 notas[1] = 8.0 notas[2] = 6.5 notas[3] = 9.0
para (inteiro i = 0; i < 4; i++) { soma = soma + notas[i] }
media = soma / 4
escreva("Média: ", media) }}Perceba que usamos 4 porque esse vetor possui quatro elementos.
Comparações durante o percurso
Seção intitulada “Comparações durante o percurso”Também podemos usar se e senao enquanto percorremos o vetor.
Isso serve para fazer contagens, comparações e verificações.
Veja um exemplo que conta quantos números são positivos:
programa{ funcao inicio() { inteiro numeros[5] inteiro positivos = 0
numeros[0] = 3 numeros[1] = -2 numeros[2] = 7 numeros[3] = 0 numeros[4] = 5
para (inteiro i = 0; i < 5; i++) { se (numeros[i] > 0) { positivos = positivos + 1 } }
escreva("Quantidade de positivos: ", positivos) }}Agora veja um exemplo para descobrir o maior valor:
programa{ funcao inicio() { inteiro numeros[5] inteiro maior
numeros[0] = 12 numeros[1] = 8 numeros[2] = 25 numeros[3] = 10 numeros[4] = 17
maior = numeros[0]
para (inteiro i = 1; i < 5; i++) { se (numeros[i] > maior) { maior = numeros[i] } }
escreva("Maior valor: ", maior) }}Perceba a ideia importante:
- primeiro assumimos que o maior valor é o da primeira posição
- depois comparamos os demais elementos com ele
- se encontrarmos um valor maior, atualizamos a variável
maior
Também podemos fazer classificações simples, como verificar se um número é par ou ímpar:
programa{ funcao inicio() { inteiro numeros[4]
numeros[0] = 6 numeros[1] = 9 numeros[2] = 12 numeros[3] = 7
para (inteiro i = 0; i < 4; i++) { se (numeros[i] % 2 == 0) { escreva(numeros[i], " é par\n") } senao { escreva(numeros[i], " é ímpar\n") } } }}Erros comuns
Seção intitulada “Erros comuns”Ao trabalhar com vetores, alguns erros aparecem com muita frequência.
Confundir a quantidade com a última posição
Seção intitulada “Confundir a quantidade com a última posição”Se um vetor tem 5 elementos, as posições vão de 0 até 4.
Ou seja, a quantidade é 5, mas a última posição não é 5.
Esquecer que o índice começa em 0
Seção intitulada “Esquecer que o índice começa em 0”Quando usamos para, o mais comum é começar assim:
para (inteiro i = 0; i < 5; i++) {Se você começar no 1, a posição 0 fica sem ser usada.
Acessar uma posição fora do vetor
Seção intitulada “Acessar uma posição fora do vetor”Se o vetor tem 4 elementos, tentar acessar vetor[4] estará fora do limite.
Isso acontece porque as posições válidas seriam:
0, 1, 2 e 3Esquecer de inicializar o acumulador
Seção intitulada “Esquecer de inicializar o acumulador”Quando vamos somar valores, a variável acumuladora deve começar com 0.
inteiro soma = 0Se isso não for feito, o resultado da soma pode ficar incorreto.
Usar valores antes de preencher o vetor
Seção intitulada “Usar valores antes de preencher o vetor”Antes de mostrar, somar ou comparar elementos, o vetor precisa estar preenchido.
Por isso, normalmente o programa segue esta ordem:
- declara o vetor
- preenche as posições
- percorre o vetor para mostrar, somar ou comparar
Atualizar a variável errada dentro do para
Seção intitulada “Atualizar a variável errada dentro do para”Dentro de um percurso, é importante usar sempre a posição atual do vetor.
Por exemplo:
soma = soma + numeros[i]Se você esquecer o [i], o programa não estará trabalhando com o elemento esperado em cada volta do laço.