Curso de Basic
Vetores e Matrizes
Você está em: MarMSX >> Cursos >> BASIC
As variáveis possuem a limitação de comportar somente um dado para cada entidade que ela representa. Há situações em que precisamos armazenar mais de uma informação relacionada a essa entidade, como por exemplo, uma lista de alunos.
Um vetor é uma lista de dados do mesmo tipo, com o tamanho pré-determinado. Dessa forma, a "variável" passa a ter não mais um dado, mas N dados.
Uma matriz é um vetor de duas ou mais dimensões. No caso de duas dimensões, a matriz é uma tabela.
No Basic, o comando DIM declara uma variável numérica ou alfanumérica como vetor ou matriz. Sua sintaxe é:
DIM variável(tamanho_dimensão_1, tamanho_dimensão_2, ...)
Caso o vetor não tenha sido declarado antes de usar, o Basic limita esse vetor a 10 posições.
Vetores
Vejamos o benefício do uso de vetores em nossos programas: suponha que desejamos ler e armazenar na memória o nome de 10 alunos.
10 INPUT"Aluno 1";A1$
20 INPUT"Aluno 2";A2$
30 INPUT"Aluno 3";A3$
40 INPUT"Aluno 4";A4$
50 INPUT"Aluno 5";A5$
60 INPUT"Aluno 6";A6$
70 INPUT"Aluno 7";A7$
80 INPUT"Aluno 8";A8$
90 INPUT"Aluno 9";A9$
100 INPUT"Aluno 10";AA$
O programa é grande e possui muitas variáveis para armazenar a mesma entidade "aluno". Imagine se quisermos imprimir a informação de cada um deles ...
Vamos criar um vetor "A$" com 10 posições e reescrever o programa cima:
10 DIM A$(10)
20 FOR I=1 TO 10
30 PRINT"Aluno";I;:INPUT A$(I)
40 NEXT I
O programa está bem menor, além de toda entidade "aluno" estar ligada a uma única "variável", o "A$". A impressão de cada nome se resumiria ao comando comum "PRINT A$(I)".
Ao criarmos o vetor A$ com 10 posições, nós reservamos um espaço na memória para colocarmos 11 strings. Isto porque o vetor em Basic varia de 0 a N:
O acesso à leitura ou armazenamento de dados no vetor é feito informando-se a posição desejada no argumento passado entre parêntesis:
vetor(posição)
No caso de desejarmos inserir um nome na posição 4, faríamos:
A$(4)="Zé"
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
|
|
|
|
Zé |
|
|
|
|
|
|
Ao tentarmos acessar uma posição fora dos limites, uma mensagem de erro "Subscript out of range" surge. Além disso, uma variável não pode ser redimensionada, ou o erro "Redimensioned array" surge.
As strings são "vetores de caracteres" e possuem tamanho variável, ou seja, podem ser redimensionadas. O artigo de vetores dessa página aborda essa questão. Além disso, esse artigo mostra como as variáveis e vetores são armazenados na memória.
Há duas possibilidades de lidar com essa questão do vetor variar de 0 a N:
- Dimensionar o vetor com o tamanho igual a N-1 e trabalhar com índice da forma "pos-1"
- Dimensionar o vetor com o tamanho igual a N e descartar a posição 0. Assim o índice fica na forma "pos". É o que foi feito até aqui.
Exemplo para o caso 1:
10 DIM A$(9)
20 FOR I=1 TO 10
30 PRINT"Aluno";I;:INPUT A$(I-1)
40 NEXT I
Esta forma economiza espaço, pois evita o descarte da posição 0.
Matrizes
Uma matriz é um vetor com duas ou mais dimensões.
Aproveitando o exemplo da seção anterior, vamos criar uma tabela com a nota de 2 provas mais a média final para cada um dos 10 alunos:
10 DIM N(10,3)
O comando anterior cria uma tabela com 10 linhas e 3 colunas (descartando-se a posição 0 em cada dimensão):
|
Nota 1 |
Nota 2 |
Média |
Aluno 1 |
|
|
|
Aluno 2 |
|
|
|
Aluno 3 |
|
|
|
Aluno 4 |
|
|
|
Aluno 5 |
|
|
|
Aluno 6 |
|
|
|
Aluno 7 |
|
|
|
Aluno 8 |
|
|
|
Aluno 9 |
|
|
|
Aluno 10 |
|
|
|
Como calcular a média do aluno 6?
A$(6,3) = (A$(6,1) + A$(6,2)) / 2
Um programa completo para ler as informações dos alunos e calcular a média.
10 DIM A$(10)
20 DIM N(10,3)
30 FOR I=1 TO 10
40 PRINT"ALUNO";I
50 INPUT"NOME";A$(I)
60 INPUT"NOTA 1";N(I,1)
70 INPUT"NOTA 2";N(I,2)
80 N(I,3)=(N(I,1)+N(I,2))/2
90 PRINT
100 NEXT I
Obs:
- Como são apenas 2 notas, é mais econômico repetir o comando INPUT do que criar um laço FOR para ler as notas.
- O cálculo da média aproveita o laço FOR da leitura dos dados. É comum alguém imaginar calcular isso depois, mas é um desperdício de prorgrama e desempenho.
- A reunião do vetor de alunos com a tabela de notas criou uma "tabela maior" e com dados alfanuméricos e numéricos. Entretanto é apenas uma relação lógica, sem qualquer vinculação física. Estão apenas relacionadas pelo número da linha, onde cada uma representa um aluno e suas respectivas notas.