• Nenhum resultado encontrado

Estruturas de controlo repetitivo imbricadas

No documento Programação em VBA Texto Introdutório (páginas 52-56)

5.2 Estruturas de controlo repetitivo

5.2.6 Estruturas de controlo repetitivo imbricadas

Foi dito anteriormente que o corpo de um ciclo era constituído pelo conjunto de instruções que o ciclo irá executar repetidamente. Foi também dito que nesse conjunto de instruções se poderia incluir qualquer tipo de instruções, mesmo constituindo outras estruturas de controlo repetitivo. Destes ciclos se diz que se encontram imbricados ou embutidos um dentro do outro. Diz-se também que esses ciclos estão encadeados.

Figura 28: Exemplo de Ciclos Imbricados

cálculo de um factorial é realizado efectuando uma sucessão de multiplicações. Será necessário usar um ciclo para o efeito. Por sua vez, se pretendermos repetir esse cálculo um certo número de vezes, teremos também que usar um ciclo. Teremos assim um ciclo, chamemos-lhe exterior, que se encarrega de produzir uma sequência de factoriais e cujo corpo inclui por sua vez um ciclo, dito interior, que é responsável pelo cálculo de cada factorial. O diagrama de fluxo da Figura 28 na página precedente representa esta realidade. O código necessário para traduzir esse diagrama é o contido na Listagem 5.

Listing 5: Exemplo usando Ciclos Imbricados

1 num = InputBox ( " I n t r o d u z a ␣um␣ i n t e i r o ␣ p o s i t i v o " ) 2 Do U n t i l num < 0 3 f a c t o r i a l = 1 4 c o n t a d o r = 1 5 Do U n t i l c o n t a d o r > num 6 f a c t o r i a l = f a c t o r i a l ∗ c o n t a d o r 7 c o n t a d o r = c o n t a d o r +1 8 Loop

9 num = InputBox ( " I n t r o d u z a ␣um␣ i n t e i r o ␣ p o s i t i v o " ) 10 Loop

O ciclo exterior é controlado por uma sentinela, no caso qualquer valor inteiro não positivo. É um exemplo de sentinela constituído não por um valor específico mas por uma gama de valores possíveis. O ciclo interior é claramente controlado por contador, funcionando tantas vezes quantas o valor do inteiro cujo factorial se pretende calcular.

Listing 6: Exemplo de Sub-rotina usando Ciclos Imbricados

1 Sub F i l l R a n g e ( ) 2 Num = 1

3 For Row = 1 To 10 4 For Col = 1 To 10

5 C e l l s (Row , Col ) . Value = Num 6 Num = Num + 1

7 Next Col 8 Next Row 9 End Sub

O exemplo da Listagem 6 ilustra a utilização de dois ciclos imbricados para preencher uma tabela em Excel com valores que vão de 1 até 100 (o número de elementos da tabela). O ciclo interior preenche as células de uma linha da tabela. O ciclo exterior repete isso para cada um das linhas da tabela. O preenchimento das células é efectuado pela instrução 5, que usa o método Cells(Row, Col) para aceder acada célula da gama a que se aplica..

6

Variáveis indexadas - vectores e matrizes

Até agora, temos trabalhado com variáveis que podemos classificar como individuais. Como essas variáveis não podem conter simultaneamente mais que um dado, a atribuição de um novo valor a essa variável implica o desaparecimento do valor anteriormente nela contido.

Mediante a utilização de um novo tipo de variáveis, as variáveis do tipo Array (Vector), passa a ser possível armazenar na mesma variável múltiplos valores desde que sejam do mesmo tipo. Estamos, portanto, a utilizar agora variáveis que se podem classificar como variáveis múltiplas. Na Figura 29 podemos observar representações de uma variável simples do tipo integer e de uma variável múltipla (um vector uni-dimensional) contendo valores inteiros. Cada elemento do vector é identificado por um valor numérico específico.

Figura 29: Um vector é uma variável múltipla

Um vector é uma lista ordenada de variáveis simples do mesmo tipo. Pode também ser visto como um conjunto de variáveis simples agrupadas. Todos os elementos desse vector partilham o mesmo nome (o nome do vector) e são identificados individualmente mediante o valor dum índice, que determina qual a sua posição dentro do vector. É por isso que estas variáveis são conhecidas por variáveis indexadas.

Os valores do índice devem obrigatoriamente ser inteiros. O primeiro valor do índice é zero19.

Um elemento de um vector é identificado utilizando o nome do vector seguido do valor do índice dentro de parêntesis:

nome_vector(indice)

Exemplos:

var_Multipla(3) 4o elemento do vector ‘var_Multipla’

var_Multipla(7) 8o e último elemento do vector ‘var_Multipla’ notas(14) 15o elemento do vector ‘notas’

nomes(0) 1o elemento do vector ‘nomes’

Figura 30: Um exemplo de vector de strings

Os elementos de um vector não têm que ser inteiros, nem sequer valores numéricos. Na Figura 30 é representado um vector contendo strings (texto). Considerando o vector como armazenado os nomes dos membros de uma equipa de futebol, os sucessivos valores do índice podem ser vistos como os correspondentes números das suas camisolas. Note-se que estamos, neste caso, a forçar os valores do índice a iniciar em 1.

6.1

Declaração estática de vectores

Como qualquer outra variável, uma variável do tipo Array deve também ser declarada (criada) antes de poder ser usada. Para tal, deve ser usada a instrução Dim, que reserva espaço em memória suficiente para armazenar o número previsto de elementos do vector

20. Uma das formas de utilizar a instrução Dim para declarar vectores é a seguinte:

Dim nome_vector(num_elementos) As Tipo

Exemplos:

Dim var_Multipla(8) As Integer Dim notas(30) As Single

Dim nomes(100) As String

Note- se que num_elementos não se refere ao valor máximo que a variável índice pode assumir (7, no caso do vector var_Multipla) mas sim ao número de elementos do vector (8, neste caso). Por este processo, a declaração do limite inferior faz-se de forma implícita: por defeito assume-se como limite inferior do índice o valor zero (ou 1 se tal for especificado mediante a instrução Option Base 1 ).

Uma forma alternativa de utilizar a instrução Dim para declarar vectores implica a utilização da palavra reservada To, permitindo especificar o menor e o maior valor que o índice pode assumir:

Dim nome_vector(menorIndice To maiorIndice) As Tipo

Exemplos:

20Adicionalmente, a instrução Dim atribui valores iniciais a todos os elementos do vector (zeros no

Dim numeros(100 To 200) As Double Dim valores(-100 to 100) As Single

No documento Programação em VBA Texto Introdutório (páginas 52-56)

Documentos relacionados