As matrizes nos permitem fazer referência a uma série de variáveis com o mesmo nome e usar um número (um índice) para chamar elementos individuais nessa série. As matrizes têm limites superior e inferior e os elementos da matriz são contíguos dentro desses limites.
Os elementos da matriz são valores do mesmo tipo (sequência, número inteiro, registro, objeto personalizado).
No Delphi, existem dois tipos de matrizes: uma matriz de tamanho fixo que sempre permanece o mesmo tamanho - uma matriz estática - e uma matriz dinâmica cujo tamanho pode mudar em tempo de execução.
Matrizes estáticas
Suponha que estamos escrevendo um programa que permita ao usuário inserir alguns valores (por exemplo, o número de compromissos) no início de cada dia. Optaríamos por armazenar as informações em uma lista. Poderíamos chamar essa lista Compromissose cada número pode ser armazenado como Compromissos [1], Compromissos [2] e assim por diante.
Para usar a lista, devemos primeiro declará-la. Por exemplo:
var Compromissos: array [0..6] de Inteiro;
declara uma variável chamada Compromissos que mantém uma matriz unidimensional (vetor) de 7 valores inteiros. Dada esta declaração, Compromissos [3] denota o quarto valor inteiro em Compromissos. O número entre colchetes é chamado de índice.
Se criarmos um matriz estática mas não atribui valores a todos os seus elementos, os elementos não utilizados contêm dados aleatórios; eles são como variáveis não inicializadas. O código a seguir pode ser usado para definir todos os elementos na matriz Compromissos como 0.
para k: = 0 a 6 faça Compromissos [k]: = 0;
Às vezes, precisamos acompanhar as informações relacionadas em uma matriz. Por exemplo, para acompanhar cada pixel na tela do computador, é necessário consultar as coordenadas X e Y usando um multidimensional matriz para armazenar os valores.
Com o Delphi, podemos declarar matrizes de várias dimensões. Por exemplo, a instrução a seguir declara uma matriz bidimensional de 7 por 24:
var DayHour: matriz [1..7, 1..24] de Real;
Para calcular o número de elementos em uma matriz multidimensional, multiplique o número de elementos em cada índice. A variável DayHour, declarada acima, separa 168 elementos (7 * 24), em 7 linhas e 24 colunas. Para recuperar o valor da célula na terceira linha e sétima coluna, usaríamos: DayHour [3,7] ou DayHour [3] [7]. O código a seguir pode ser usado para definir todos os elementos na matriz DayHour como 0.
para i: = 1 a 7 do
para j: = 1 a 24 do
DayHour [i, j]: = 0;
Matrizes dinâmicas
Você pode não saber exatamente o tamanho de uma matriz. Você pode querer ter a capacidade de alterando o tamanho da matriz em tempo de execução. Uma matriz dinâmica declara seu tipo, mas não seu tamanho. O tamanho real de uma matriz dinâmica pode ser alterado em tempo de execução pelo uso do método SetLength procedimento.
var Estudantes: array de strings;
cria uma matriz dinâmica unidimensional de seqüências de caracteres. A declaração não aloca memória para Alunos. Para criar a matriz na memória, chamamos o procedimento SetLength. Por exemplo, dada a declaração acima,
SetLength (Alunos, 14);
aloca uma matriz de 14 strings, indexadas de 0 a 13. Matrizes dinâmicas são sempre indexadas por número inteiro, sempre começando de 0 a um a menos que seu tamanho em elementos.
Para criar uma matriz dinâmica bidimensional, use o seguinte código:
var Matrix: matriz de matriz de Double;
início
SetLength (matriz, 10, 20)
fim;
que aloca espaço para uma matriz bidimensional de 10 por 20 de valores de ponto flutuante duplo.
Para remover o espaço de memória de uma matriz dinâmica, atribua nulo à variável da matriz, como:
Matriz: = nulo;
Muitas vezes, seu programa não sabe em tempo de compilação quantos elementos serão necessários; esse número não será conhecido até o tempo de execução. Com matrizes dinâmicas, você pode alocar apenas o armazenamento necessário em um determinado momento. Em outras palavras, o tamanho das matrizes dinâmicas pode ser alterado em tempo de execução, o que é uma das principais vantagens das matrizes dinâmicas.
O próximo exemplo cria uma matriz de valores inteiros e chama a função Copiar para redimensionar a matriz.
var
Vetor: matriz de número inteiro;
k: inteiro;
início
SetLength (Vector, 10);
para k: = Baixo (Vector) a Alto (Vector) faça
Vetor [k]: = i * 10;
...
// agora precisamos de mais espaço
SetLength (Vector, 20);
// aqui, o vetor array pode conter até 20 elementos // (já possui 10 deles) end;
A função SetLength cria uma matriz maior (ou menor) e copia os valores existentes para o nova matriz. As funções Baixa e Alta garantem que você acesse todos os elementos da matriz sem olhar para trás no seu código para obter os valores inferiores e superiores corretos.