Arrays [matrizes ou vetores] em Delphi



Arrays podem ser considerados como as estruturas de dado mais simples que é possível imaginar. Têm a vantagem de que os seus elementos são acessíveis de forma rápida, mas têm uma notável limitação: são de tamanho fixo, mas podem ser incrementados ou diminuídos com determinados

algoritmos, geralmente envolvendo a cópia de elementos de um array para outro e reinicializando o original com a nova dimensão. Os vetores podem ser implementados desta forma.

Vamos começar com os array estático:

var
  wValores: array[1..10] of Integer;

Acima temos um array chamado wValores que contém 10 elementos do tipo Integer. Os elementos podem ser acessados por índices que variarão de 1 a 10;
procedure TFSistema.BtnAcrescentarValorClick(Sender: TObject);
var
  wValores: array[1..10] of Integer;
begin
  wValores[8] := 110;
end;

Abaixo preenchemos um Array com valores de 1 a 10, depois percorremos novamente o array e fizemos a soma dos elementos. E por fim exibimos uma mensagem com o soma obtida.
procedure TFSistema.BtnAcrescentarValorClick(Sender: TObject);
var
  wValores: array[1..10] of Integer;
  wCalculo, wCont: Integer;
begin
  for wCont := 1 to 10 do begin
    wValores[i] := wCont;
  end;
  wCalculo := 0;
  for wCont := 1 to 10 do begin
    wCalculo := wCalculo + wValores[wCont];
  end;
  ShowMessage('Valor: ' + IntToStr(wCalculo));
end;

Array com valores já iniciais:
procedure TFSistema.BtnAcrescentarValorClick(Sender: TObject);
const
  wValores: array[1..10] of Integer = (15, 7, 14, 10, 2, 9, 25, 22, 3, 16);
var
  wCalculo, wCont: Integer;
begin
  wCalculo := 0;
  for wCont := 1 to 10 do begin
    wCalculo := wCalculo + wValores[wCont];
  end;
  SowMessage('Valor: ' + IntToStr(wCalculo));
end;

Array dinâmicos:

A diferença é que não é necessário informar os índices que definem o tamanho. Essa informação é fornecida em tempo de execução, fazendo alocação dinâmica de memória, através do procedimento SetLength.

procedure TFSistema.BtnAcrescentarValorClick(Sender: TObject);
var
  wVetor :Array of Integer;
  wCont : Integer
begin
  SetLength(wVetor, 5); // Tamanho do vetor
  for wCont := 0 to High(wVetor) do    //Preenchendo
    wVetor[I] := wCont * 2

  SetLength(Vetor,10)  // Altera o tamanho do vetor
  for wCont := 0 to High(wVetor) do    //Preenchendo novamente
    wVetor[wCont] := wCont *2
end;

Algumas funções que podem ser utilizadas com o array dinâmico:

SetLength(Array,Tamanho) { determina o número de elementos do array. 
Tendo em vista que o valor default para o primeiro elemento é 0 (zero).}

High(Vetor) : Integer  { retorna o maior indice do array. Ex.: se o array tem tamanho 
10 e começa em 0 o resultado seria 9..}

Low(Vetor) : Integer { Retorna 0 ou seja o menor elemento do array.}

Length(Vetor)  { retorna o tamanho exato do array ou seja o valor que foi definido 
na função SetLength.}

Mais um exemplo simples de como usar o Array dinâmico 

type
  TMeses = Array of Integer;
var
  wMeses : TMeses;
begin
  wMeses := TMeses.Create(31,28,31,30,31,30,31,31,30,31,30,31);  { Isto inicializa o array com 12 
elementos iniciais, cada um com o respectivo valor, pela ordem apresentada}


3 comentários:

  1. Ótimo, tem algum exemplo mais pratico?

    ResponderExcluir
  2. Guria, tu é fodona, eu nunca ví criação de array dinâmico usando o método Create. Caiu o queixo...kkkk. Este eu não tinha explorado ainda.

    ResponderExcluir