Buscar

Aprenda a usar arrays

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 6 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 6 páginas

Prévia do material em texto

Aprenda a usar arrays (matrizes ou vetores) em Delphi
Em programação de computadores, um array, também conhecido como vector (para arrays uni-dimensionais) ou matriz (para arrays bi-dimensionais), é uma das mais simples estruturas de dados. Os arrays mantêm uma série de elementos de dados, geralmente do mesmo tamanho e tipo de dados. Elementos individuais são acessados por sua posição no array. A posição é dada por um índice, também chamado de subscrição. O índice geralmente utiliza uma seqüência de números inteiros, (ao contrário de um array associativo) mas o índex pode ter qualquer valor ordinal. Alguns arrays são multi-dimensionais, significando que eles são indexados por um número fixo de números inteiros, por exemplo, por um seqüência (ou sucessão) finita de quatro números inteiros. Geralmente, arrays uni- e bi-dimensionais são os mais comuns.
Os 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.
Em Delphi um array é declarado da seguinte forma:
var
 valores: array[1..10] of Integer;
Aqui nós temos um array chamado valores que contém 10 elementos do tipo Integer. Estes elementos podem ser acessados por índices que variarão de 1 a 10, ou seja, podemos acessar o 5º elemento da seguinte forma:
procedure TForm1.Button1Click(Sender: TObject);
var
 valores: array[1..10] of Integer;
begin
 valores[5] := 20;
end;
Este tipo de array que ora criamos é chamado de array estático, em contraposição aos arrays dinâmicos, os quais podem ter seus tamanhos redimensionados durante a execução do programa.
A forma mais prática de se trabalhar com arrays em Delphi é usando laços. Veja:
procedure TForm1.Button1Click(Sender: TObject);
var
 valores: array[1..5] of Integer;
 i, soma: Integer;
begin
 // vamos preencher o array com os valores de 1 a 5
 for i := 1 to 5 do
 begin
 valores[i] := i;
 end;
 // vamos percorrer o array novamente e obter a soma dos
 // valores de seus elementos
 soma := 0;
 for i := 1 to 5 do
 begin
 soma := soma + valores[i];
 end;
 // vamos exibir o resultado
 ShowMessage('A soma dos valores é: ' + IntToStr(soma));
end;
Aqui nós declaramos um array de 5 elementos do tipo Integer e inicializamos seus elementos com os valores de 1 a 5. Em seguida percorremos todo o array novamente para obter a soma dos valores dos elementos.
É possível também declarar e já inicializar um array. Veja:
procedure TForm1.Button1Click(Sender: TObject);
const
 valores: array[1..5] of Integer = (3, 2, 6, 12, 9);
var
 i, soma: Integer;
begin
 // vamos percorrer o array novamente e obter a soma dos
 // valores de seus elementos
 soma := 0;
 for i := 1 to 5 do
 begin
 soma := soma + valores[i];
 end;
 // vamos exibir o resultado
 ShowMessage('A soma dos valores é: ' + IntToStr(soma));
end;
Note que aqui eu declarei o array como uma constante. Isso aconteceu porque o Delphi não permite que inicializemos variáveis locais ([DCC Error] Unit1.pas(32): E2195 Cannot initialize local variables). Caso você realmente precise do array como variável e não constante, e deseje inicializá-lo juntamente com a declaração, mova-o para a seção interface do formulário ou classe.
Para finalizar, veja que é possível criar arrays de todos os tipos em Delphi. Veja no trecho de código abaixo como usamos um array de Char para guardar uma palavra e exibí-la normal e depois invertida:
procedure TForm1.Button1Click(Sender: TObject);
const
 letras: array[1..5] of Char = ('O', 's', 'm', 'a', 'r');
var
 i: Integer;
 resultado: String;
begin
 resultado := '';
 // vamos exibir a palavra na forma normal
 for i := 1 to 5 do
 resultado := resultado + letras[i];
 // exibe o resultado
 ShowMessage(resultado);
 // vamos exibir a palavra invertida
 resultado := '';
 for i := 5 downto 1 do
 resultado := resultado + letras[i];
 // exibe o resultado
 ShowMessage(resultado);
end;
Como obter o índice inicial e final de uma matriz em Delphi
Como os índices das matrizes em Delphi, diferente de outras linguagens, nem sempre começam em 0, não podemos deduzir que Length() - 1 retornará o índice final da matriz. Desta forma, podemos usar as funções Low() e High(), ambas presentes na unit System.
A função Low() retorna o índice inicial da matriz, enquanto High() retorna o índice final. Veja:
procedure TForm3.Button1Click(Sender: TObject);
var
 valores: array[11..20] of Integer;
 inicio, fim: Integer;
begin
 // vamos obter o índice inicial da matriz
 inicio := Low(valores);
 // vamos obter o índice final da matriz
 fim := High(valores);
 // vamos exibir o resultado
 ShowMessage('O índice inicial da matriz é: ' + IntToStr(inicio));
 ShowMessage('O índice final da matriz é: ' + IntToStr(fim));
 ShowMessage('O tamanho da matriz é: ' + IntToStr((fim - inicio) + 1));
end;
Como obter o índice inicial e final de uma matriz em Delphi
Como os índices das matrizes em Delphi, diferente de outras linguagens, nem sempre começam em 0, não podemos deduzir que Length() - 1 retornará o índice final da matriz. Desta forma, podemos usar as funções Low() e High(), ambas presentes na unit System.
A função Low() retorna o índice inicial da matriz, enquanto High() retorna o índice final. Veja:
procedure TForm3.Button1Click(Sender: TObject);
var
 valores: array[11..20] of Integer;
 inicio, fim: Integer;
begin
 // vamos obter o índice inicial da matriz
 inicio := Low(valores);
 // vamos obter o índice final da matriz
 fim := High(valores);
 // vamos exibir o resultado
 ShowMessage('O índice inicial da matriz é: ' + IntToStr(inicio));
 ShowMessage('O índice final da matriz é: ' + IntToStr(fim));
 ShowMessage('O tamanho da matriz é: ' + IntToStr((fim - inicio) + 1));
end;
Gerando um número aleatório de 0 a 10 usando Delphi
Em algumas situações precisamos gerar números randômicos. Em Delphi isso pode ser feito com o auxílio da função Random(). Esta função aceita um valor inteiro e retorna um número aleatório maior ou igual a 0 e menor que o valor fornecido. Assim, se quisermos obter um número randômico na faixa de 0 a 10, só precisamos fornecer o valor 11 para a função Random(). Note ainda a chamada à função Randomize(), usada para iniciar o gerador de números randômicos.
Veja um exemplo no qual geramos um número aleatório na faixa de 0 a 10:
procedure TForm1.Button1Click(Sender: TObject);
var
 numero: integer;
begin
 // vamos iniciar o gerador de números randômicos
 Randomize;
 // vamos gerar um número aleatório entre 0 e 10
 numero := Random(11);
 // exibe o resultado
 ShowMessage('Número gerado: ' + IntToStr(numero));
end;
Trabalhando com strings em Delphi
Strings estão presentes em praticamente todos os programas que desenvolvemos, não importa a linguagem de programação usada. Sempre que queremos trabalhar com nomes de pessoas, nomes de cidades, palavras, frases e textos, as strings estão lá para nos auxiliar. Assim, para as linguagens de programação, as strings são apenas matrizes de caracteres (letras ou símbolos).
Em Delphi podemos declarar e inicializar strings da seguinte forma:
procedure TForm1.Button1Click(Sender: TObject);
var
 nome: string; // declara uma variável do tipo string
begin
 nome := 'Osmar J. Silva'; // inicializa a variável
 ShowMessage(nome); // exibe o conteúdo da string
end;
Quando declaramos uma string em Delphi usando a palavra-chave string, o compilador automaticamente assume o tipo UnicodeString, com uma capacidade de 2^30 caracteres (mais ou menos 1.073.741.824 caracteres) com uma capacidade variando de 4 bytes até 2GB.
Além do tipo string,o Delphi suporta outros tipos que possibilitam também o trabalho com strings e caracteres. Entre eles podemos citar ShortString, AnsiString, WideString entre outros. Quando puder dê mais uma revisada nas minha dicas sobre strings e caracteres para aprender mais.
É possível também usar o tipo string para criar strings com tamanhos pré-definidos. Veja:
var
 nome: string[5]; // declara uma variável do tipo string
 // que guardará apenas 5 caracteres
Aqui temos uma string que não suportará mais que cinco caracteres. Importante notar que, internamente, teremos agora uma string do tipo ShortString e não mais UnicodeString como anteriormente. Se tentarmos atribuir mais que cinco caracteres nesta variável, o restante será truncado:
nome := 'Osmar J. Silva'; // inicializa a variável
ShowMessage(nome); // mostrará apenas "Osmar"
Para finalizar, veja como podemos solicitar ao usuário que informe seu nome e exibí-lo usando a função ShowMessage():
procedure TForm1.Button1Click(Sender: TObject);
var
 nome: string; // declara uma variável do tipo string
begin
 // vamos solicitar ao usuário que informe seu nome
 nome := Dialogs.InputBox('Nome', 'Informe seu nome:', '');
 ShowMessage('Seu nome é: ' + nome); // mostrará apenas "Osmar"
end;
Como converter uma string em um valor numérico inteiro
Em algumas situações precisamos converter strings em valores numéricos do tipo inteiro. Isso acontece quando recebemos valores de caixas de texto e precisamos usuá-los em cálculos.
Vamos começar com a função StrToInt() da unit SysUtils. Esta função recebe uma string representando um valor inteiro válido e retorna um valor inteiro. Veja o exemplo:
procedure TForm1.Button1Click(Sender: TObject);
var
 valor1, valor2, soma: Integer;
begin
 // vamos receber as strings dos TEdits e converter
 // seus valores para inteiros
 valor1 := StrToInt(Edit1.Text);
 valor2 := StrToInt(Edit2.Text);
 // vamos obter a soma dos dois valores
 soma := valor1 + valor2;
 // vamos exibir o resultado. Note o uso de IntToStr() para
 // converter o valor inteiro em string
 ShowMessage('A soma é: ' + IntToStr(soma));
end;
Note que, se a string sendo convertida possuir um valor inteiro inválido, uma exceção do tipo EConvertError será lançada. Podemos evitar isso usando a função TryStrToInt(). Esta função recebe dois argumentos: a string a ser convertida e a variável do tipo Integer que receberá o valor. O resultado será true se a conversão for feita com sucesso e false em caso contrário. Veja:
procedure TForm1.Button1Click(Sender: TObject);
var
 valor: Integer;
begin
 // vamos tentar converter o valor da caixa de texto
 // em um inteiro
 if TryStrToInt(Edit1.Text, valor) then
 ShowMessage('Conversão efetuada com sucesso.')
 else
 ShowMessage('Erro na conversão');
end;
Há ainda uma terceira possibilidade: usar a função StrToIntDef(). Esta função funciona exatamente da mesma forma que StrToInt(), exceto que agora, se houver um erro de conversão, um valor inteiro padrão será retornado. Veja:
procedure TForm1.Button1Click(Sender: TObject);
var
 valor: Integer;
begin
 // vamos converter o valor da caixa de texto
 // em um inteiro. Se a conversão não puder ser feita
 // o valor 10 será atribuído à varial valor
 valor := StrToIntDef(Edit1.Text, 10);
 // vamos exibir o resultado
 ShowMessage(IntToStr(valor));
end;

Continue navegando