NUNCA MAIS PASSE RAIVA POR NÃO CONSEGUIR RESOLVER UM PROBLEMA COM O EXCEL - GARANTIDO!

UNIVERSIDADE DO VBA - Domine o VBA no Excel Criando Sistemas Completos - Passo a Passo - CLIQUE AQUI

Você está em: PrincipalArtigosLivrodelphibas › Capítulo 2 : 05
Quer receber novidades e e-books gratuitos?
« Anterior Δ Página principal ¤ Índice Próxima »
Delphi Básico
Autor: Rodrigo Costa e Silvio Ferreira
Lição 15 de 29 - Estruturas de Repetição

Estrutura de Repetição While..Do

O While é um comando de repetição que não possui controle de um contador automático e que testa a condição antes de executar o próximo loop. Este loop irá se repetir enquanto a condição for verdadeira. A sua forma básica é:

While <condição> Do
Begin
Comandos;
End;

Exemplo:

Contador := 0;
while Contador <= 10 do
begin
Contador := Contador + 1;
      Showmessage(IntToStr(Contador));
end;
Showmessage(‘Acabou de contar !!!!’);

No exemplo acima, utilizamos o comando While para contar até 10. Primeiro incializamos a variável Contador com 0 para garantir que a variável esteja sem “lixo” de memória. É interessante sempre incializar variáveis que serão acumulativas, pois assim temos certeza de que estaremos acumulando corretamente os valores.

Em seguida programamos: Enquanto a variável Contador for menor ou igual a 10 faça tudo o que está entre o begin e o end.

O código entre o begin e o end faz o seguinte: a variável Contador irá receber o que já está na variável Contador mais 1 e depois exibe o conteúdo através de uma mensagem na tela (Showmessage). Utilizamos a função IntToStr (Integer para String) pois a variável Contador é numérica e o comando Showmessage só aceita valores do tipo String.

No primeiro loop a variável possui 0, então Contador irá receber: 0 + 1 (que é igual a 1), no segundo loop, a variável possui 1, então Contador irá receber 1 + 1 (que é igual a 2 certo ?) no terceiro loop, a variável possui 2, então Contador irá receber 2 + 1 e assim por diante.

Quando a variável Contador somar 11, então a condição “Contador <= 10” não será mais verdadeira e o programa sairá do loop executando a próxima instrução após o end; que neste exemplo é outro comando Showmessage informando que a contagem terminou.

A estrutura de decisão While..Do é muito utilizada para tratamento seqüencial de registros, por exemplo, ler cada registro de uma tabela de banco de dados enquanto não chegar ao final da mesma ou então ler cada linha de um arquivo texto enquanto não chegar ao final do arquivo.

Vamos então criar um pequeno programa que lê cada linha de um arquivo texto enquanto não chegar ao final do arquivo.

Vamos utilizar o seguinte arquivo texto como exemplo:


Exemplo de arquivo texto

Nosso programa irá ler cada linha (da “Linha 1” até a “Linha 7”) e exibirá uma mensagem na tela com o conteúdo da linha lida.
Crie um novo projeto no Delphi através do menu File > New > Application. Altere as propriedades no Form seguindo a tabela abaixo:

Propriedade

Valor

Descrição

Caption

Exemplo While

Exibe o título do Formulário

Name

Form_while

Nome do objeto Formulário

Position

poScreenCenter

Posição do Formulário (Centralizado na Tela)

Agora insira um objeto BitBtn que está na paleta Additional. Este objeto é semelhante ao objeto Button só que possui mais recursos como, por exemplo, colocar uma imagem em seu corpo.


Objeto BitBtn

Vamos então selecionar uma imagem para este botão. Encontre a propriedade Glyph do objeto BitBtn e clique em “...”. Na tela que será exibida, clique em “Load...” para selecionar uma imagem. O Delphi, no momento da instalação, cria vários diretórios e um destes diretórios possui várias imagens para utilizarmos em botões. Estas imagens estão localizadas no seguinte diretório: C:\Arquivos de programas\Arquivos comuns\Borland Shared\Images\Buttons. Neste diretório selecione o arquivo: IMPORT.BMP


Selecionando uma imagem para o botão

Em seguida clique em “Abrir” e depois em “OK”. Agora altere as propriedades do BitBtn conforme a tabela abaixo:

Propriedade

Valor

Descrição

Caption

Ler Arquivo

Texto do botão

Layout

blGlyphTop

Posição da figura no botão (no topo)

Name

Btn_arquivo

Nome do objeto BitBtn

Ajuste o tamanho do Form e do Botão de forma a ter uma melhor aparência, abaixo exemplo de como ficou nosso Form:


Formulário Exemplo While

Agora temos que programar o botão para quando clicarmos nele, ele leia o arquivo texto de exemplo mostrado anteriormente. Este arquivo está salvo em C:\Exemplo.txt. Selecione o objeto btn_arquivo e acesse seu evento OnClick:


Acessando o Evento OnClick do btn_arquivo

Quando você acessar o evento OnClick do objeto btn_arquivo, o Delphi automaticamente montará a estrutura do procedimento para você:


Estrutura do evento OnClick do btn_arquivo

Altere o evento conforme a figura abaixo:


Evento OnClick já programado

Vamos entender o código acima:

var
  arquivo : TextFile;
  linha : string;

Criamos a seção “Var” antes do begin do procedimento para declarar as variáveis que serão utilizadas no evento OnClick do botão. A variável arquivo foi declarada do tipo TextFile (arquivo texto) pois irá armazenar em memória todo o conteúdo do arquivo Exemplo.txt. A variável linha é do tipo string e foi declarada assim, pois será utilizada para armazenar cada linha que será lida do arquivo texto (uma de cada vez obviamente).

  AssignFile(Arquivo,'C:\Exemplo.txt');
  Reset(Arquivo);

Após declarar as variáveis que serão utilizadas no decorrer do evento, dá-se então incío a execução do procedimento através da palavra reservada begin. A primeira instrução a ser executada “AssignFile(Arquivo,'C:\Exemplo.txt');” irá abrir o arquivo Exemplo.txt e armazenar seu conteúdo na variável arquivo. Em seguida posiciona o ponteiro no início do arquivo para que ele possa ser lido: “Reset(Arquivo);”.

  While not EOF(Arquivo) do
  begin
    Readln(Arquivo,linha);
    Showmessage(linha);
  end;
  Showmessage('Acabou de ler o arquivo !');

Enquanto não for o final do arquivo (EOF: end of file) faça tudo o que estiver entre os delimitadores begin e end. A instrução Readln(Arquivo,linha); irá ler a primeira linha do arquivo, armazenar seu conteúdo na variável linha e posicionar o ponteiro do arquivo na linha seguinte. Em seguida é exibido na tela o conteúdo da variável linha através do comando Showmessage. Isto se repetirá até que a condição not EOF(Arquivo) não seja mais verdadeira, em outras palavras, que se tenha chegado ao fim do arquivo. Quando isto ocorrer, o Delphi sairá do loop e executará a próxima instrução após o end que neste caso é uma mensagem informando que o programa acabou de ler o arquivo.

Estrutura de Repetição For..to..do

A estrutura de repetição for..to..do no Delphi baseia-se estritamente em um contador, o qual pode ser aumentado ou diminuído cada vez que o loop for executado. O contador é inicializado, e o loop irá se repetir enquanto o contador não chegar ao fim da contagem. O seu formato básico é:

For contador := inicio_da_contagem  to fim_da_contagem do
Begin
Comandos;
End;

Exemplo:

For Contador := 1 to 10 do
begin
      Showmessage(IntToStr(Contador));
end;
Showmessage(‘Acabou de contar !!!!’);

O código acima faz o seguinte: Para a variável Contador iniciando com o valor 1 e incrementando automaticamente (Contador := Contador + 1) até somar 10 faça tudo o que está entre o begin e o end. Neste exemplo, o código exibe o conteúdo através de uma mensagem na tela (Showmessage). Utilizamos a função IntToStr (Integer para String) pois a variável Contador é numérica e o comando Showmessage só aceita valores do tipo String. Isto se repetirá 10 vezes (for contador := 1 to 10 do) e então sairá do loop executando a próxima instrução após o end; que neste exemplo é outro comando Showmessage informando que a contagem terminou.

Vamos agora criar um outro programa para exemplificar a utilização do comando For aonde iremos utilizá-lo para varrer uma string verificando se existe um determinando caractere na mesma, caso exista, iremos substituí-lo por outro caractere.

Crie um novo projeto no Delphi através do menu File > New > Application. Altere as propriedades no Form seguindo a tabela abaixo:

Propriedade

Valor

Descrição

Caption

Exemplo For

Exibe o título do Formulário

Name

Form_for

Nome do objeto Formulário

Position

poScreenCenter

Posição do Formulário (Centralizado na Tela)

Insira três objetos Edit e um objeto Button.

Insira também um objeto Label e altere a propriedade Caption dele para: “Digite alguma coisa:”. Apague o conteúdo da propriedade text dos Edit’s e altere a propriedade Caption do Button para “Substituir caractere”.

Renomeie o objeto Edit1 para edt_texto, o objeto Edit2 para edt_caractere_antigo e o objeto Edit3 para edt_caractere_novo. Depois disso, altere a propriedade MaxLenght do objeto edt_texto para 30 e dos objeto edt_caractere_antigo e edt_caractere_novo para 1. A propriedade MaxLenght especifica o tamanho máximo em caracteres que um edit pode receber. Em nosso exemplo estamos dizendo que o edt_texto aceita até 30 caracteres e os edt_caractere_antigo e edt_caractere_novo só aceitam 1 caractere cada.

Você também pode formatar a fonte destes objetos como quiser utilizando a propriedade Font de cada um deles. Organize-os conforme a figura abaixo:


Tela do programa Exemplo For

Nosso programa irá substituir do texto informado no edt_texto o caractere informado no edt_caractere_antigo pelo caractere informado no edt_caractere_novo. Para isto, no evento OnClick do button digite o código abaixo:


Evento OnClick do Exemplo For

Entendendo o código acima:

var
  texto, caractere_antigo, caractere_novo : string;
  i : integer;

Declaração das variáveis que serão utilizadas no procedimento. As variáveis texto, caractere_antigo e caractere_novo são do tipo string, pois irão armazenar as informações informadas nos edit’s. A variável i é do tipo integer (numérico inteiro) e será utilizada pelo comando For como contador e como índice para “varrermos” o texto digitado.

  Texto := edt_texto.Text;
  caractere_antigo := edt_caractere_antigo.Text;
  caractere_novo := edt_caractere_novo.text;

Aqui estamos alimentando as variáveis com as informações digitadas nos Edit’s. A propriedade Text do edit é onde fica armazenado o texto digitado pelo usuário.

  For i:= 1 to Length(texto) do

Podemos ler a linha de código acima assim: Para a variável i iniciando a contagem em 1 até chegar ao tamanho da variável texto (onde está o texto que foi digitado pelo usuário), faça tudo o que estiver entre begin e end. Aqui utilizamos a função Lenght() que retorna o tamanho em número de caracteres no texto passado como parâmetro.

Exemplo: Lenght(‘Delphi 7’) é igual a 8, ou seja, 8 caracteres (o espaço também é um caractere). Neste exemplo o For executaria 8 loop’s (faria 8 vezes o que está entre o begin e o end).

    if texto[i] = caractere_antigo[1] then
      texto[i] := caractere_novo[1];

Aqui estamos verificando se a posição “i” da variável texto é igual a posição “1” da variável caractere_antigo. Caso isto seja verdadeiro, a posição “i” da variável texto irá receber a posição “1” da variável caractere_novo. Caso contrário nada será feito.
Quando o For executar o primeiro loop, a variável i terá o valor 1, então no primeiro loop a instrução texto[i] é o mesmo que texto[1], no segundo loop, a variável i terá o valor 2, então texto[i] será o mesmo que texto[2] e assim por diante até a variável i chegar ao tamanho do texto Lenght(texto).

Suponhamos que o usuário digite “Delphi 7”, neste caso:

texto[1] é igual a “D”
texto[2] é igual a “e”
texto[3] é igual a “l”
texto[4] é igual a “p”
texto[5] é igual a “h”
texto[6] é igual a “i”
texto[7] é igual a “ ”
texto[8] é igual a “7”

O programa então, irá verificar caractere por caractere se algum é igual ao caractere antigo, e caso verdadeiro, irá substituí-lo pelo caractere novo. Nós sabemos que as variáveis caractere_novo e caractere_antigo sempre irão armazenar somente um caractere, pois definimos a propriedade MaxLenght de cada Edit responsável por alimentá-las como 1. Então parece redundante as instruções caractere_antigo[1] e caractere_novo[1] porque nunca existirá uma posição maior que 1 nestas variáveis. No entanto, o Delphi interpreta uma variável string indexada como “char” e por isso, se não indexarmos também as variáveis caractere_novo e caractere_antigo o compilador irá dá erro de incompatibilidade entre Char e String e não executará o projeto.

  edt_texto.text := texto;

Quando a variável i atingir o tamanho do texto informado, o Delphi sairá do Loop e executará o próximo comando após o end: edt_texto.text := texto;. Esta instrução irá atribuir a propriedade text do edt_texto o conteúdo da variável texto que foi tratada dentro da estrutura For..to..do e já possui todas as alterações realizadas pelo programa.
Agora execute o projeto para testarmos. Como exemplo, digite: “a menina é linda” no edt_texto,  “a” no edt_caractere_antigo e “o” no edt_caractere_novo.


Preenchendo os campos

Em seguida clique no botão e observe o resultado:


Resultado da substituição do caractere “a” por “o”

Estrutura de Repetição Repeat..Until

Esta estrutura é utilizada quando não sabemos o número de repetições e quando os comandos devem ser executados pelo menos uma vez, antes da expressão ser avaliada.  Assim, o programa entra na estrutura Repeat..Until (Repita até que) e executa seus comandos pelo menos uma vez.  Ao chegar no fim da estrutura, a expressão será avaliada. Se o resultado da expressão for verdadeiro, então o compilador sai da estrutura de repetição. Sua forma geral é:

Repeat
Comandos;
Until condição

Exemplo:

Contador := 0;
Repeat
Contador := Contador + 1;
      Showmessage(IntToStr(Contador));
Until Contador = 10;
Showmessage(‘Acabou de contar !!!!’);

No exemplo acima, utilizamos o comando Repeat para contar até 10. Primeiro incializamos a variável Contador com 0 para garantir que a variável esteja sem “lixo” de memória.
Em seguida programamos: Repita tudo o que está entre o Repeat e o Until até que a variável Contador seja igual a 10. O código entre o Repeat e o Until faz o seguinte: a variável Contador irá receber o que já está na variável Contador mais 1 e depois exibe o conteúdo através de uma mensagem na tela (Showmessage).
Utilizamos a função IntToStr (Integer para String) pois a variável Contador é numérica e o comando Showmessage só aceita valores do tipo String.

No primeiro loop a variável possui 0, então Contador irá receber: 0 + 1 (que é igual a 1), no segundo loop, a variável possui 1, então Contador irá receber 1 + 1 (que é igual a 2 certo ?) no terceiro loop, a variável possui 2, então Contador irá receber 2 + 1 e assim por diante. Quando a variável Contador somar 10, então a condição “Contador = 10” será verdadeira e o programa sairá do loop executando a próxima instrução após o Until que neste exemplo é outro comando Showmessage informando que a contagem terminou.
« Anterior Δ Página principal ¤ Índice Próxima »

* Você pode baixar (fazer download) do conteúdo completo deste curso, em formato PDF, com 179 páginas, comprando o seguinte e-book:

DELPHI BÁSICO

LIVROS INDICADOS DE DELPHI:

Gostou deste artigo?

Quer receber novidades e e-books gratuitos?

Cursos Online

  • Banco de Dados
  • Carreira
  • Criação/Web
  • Excel/Projetos
  • Formação
  • + Todas as categorias
  • Contato: Telefone: (51) 3717-3796 | E-mail: webmaster@juliobattisti.com.br | Whatsapp: (51) 99627-3434

    Júlio Battisti Livros e Cursos Ltda | CNPJ: 08.916.484/0001-25 | Rua Vereador Ivo Cláudio Weigel, 537 - Universitário, Santa Cruz do Sul/RS, CEP: 96816-208

    Todos os direitos reservados, Júlio Battisti 2001-2019 ®

    [LIVRO]: MACROS E PROGRAMAÇÃO VBA NO EXCEL 2010 - PASSO-A-PASSO

    APRENDA COM JULIO BATTISTI - 1124 PÁGINAS: CLIQUE AQUI