Compreendendo e implementando tipos de dados de matriz em Delphi

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; 
instagram viewer

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.

instagram story viewer