Curso de Basic
Vetores e Matrizes


  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:

0 1 2 3 4 5 6 7 8 9 10
                     

  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
                   

  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:
  1. Dimensionar o vetor com o tamanho igual a N-1 e trabalhar com índice da forma "pos-1"
  2. 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:


MARMSX/CURSOS/Basic