Você está na página 1de 35

43

3 A Iteratividade







3.1 Automatizando as Clulas do Excel

At o momento a nica forma de mostrar ao usurio o resultado da programao era
o uso do MsgBox. Essa caixa de sada uma forma muito prxima do que faziam os
programas escritos em linguagens antes das orientadas objeto. No VBA em questo, o
objetivo principal trabalhar direto nas clulas que esto armazenando dados. Empresas
nos dias atuais possuem dados arquivados em planilhas Excel e no so poucos. Com a
internet, aquisio em real time se tornou muito fcil e assim as planilhas lotam
facilmente durante algumas horas de servio. A grande novidade do Excel foi seu poder de
no somente trabalhar com as clulas como um banco de dados e com operaes simples
pr-definidas, mas possibilitar que programas que antes precisavam de linguagens e
entradas e sadas de dados especficas pudessem ser automatizadas com os conhecimentos
j existentes em termos de programao. Assim, usando o VBA possvel conversar com
as clulas e ordenar tarefas tais como fazer aquisio de dados, fazer grfico de maneira
automtica, copiar, colar, e programas mais complexos tais como testes estatsticos,
simulaes, jogos, etc.
Para programar uma planilha e interagir com as clulas a funo chave dentro do
VBA Cells. O leitor deve enxergar na planilha como se fosse uma grande matriz, onde as
colunas A, B, C, etc. estaro numeradas no VBA como 1, 2, 3, etc. e as linhas da mesma
forma. Assim, para copiar o valor de uma clula do Excel para uma varivel do VBA o
comando :

Varivel = Cells(linha, coluna)
Onde linha e coluna so os nmeros associados a linha e coluna do Excel. Por exemplo a
clula A1 dentro do VBA ser cells(1,1), a clula B4 ser cells(4,2) e assim por diante.
Suponha que se deseja alimentar uma varivel x do VBA com o valor que est na clula
A1. Para isso basta dizer que a varivel recebe o valor de cells(1,1) conforme a
programao a seguir.




44
Se for desejado o contrrio, ou seja, colocar os clculos realizados no VBA dentro
das clulas do excel o processo inverso e para isso basta dizer que cells(2,3) recebe x, o
que indicar ao Excel que a clula C2 dever receber tal valor.

Exemplo 3.1
Fazer um programa que calcule a mdia dos valores armazenados nas clulas A1,
A2, A3 e A4 do Excel a seguir e coloque o valor na clula A5.





O leitor deve perceber duas noes importantes nesse exemplo. A primeira que o
nome do programa no deve ser o mesmo da varivel. Se criar um programa com o mesmo
nome da varivel o compilador apresentar mensagem de erro em alguns casos futuros.
Nesse exemplo simples o compilador no apresenta erro e deixar passar, mas em exemplos
mais complexos ele probe o uso de nome da varivel. Deve ser observado que o nome do
programa foi media_clulas (sem acento) enquanto o nome da varivel foi media (sem
acento). A segunda noo importante quanto ao parntesis. O parntesis da programao
fundamental, uma vez que todos os termos do divisor devem estar sob o mesmo
parntesis. Isso indica ao computador que todos os termos devem ser computados e o
resultado dividido por quatro. Se o parntesis mais externo for retirado, o computador vai
entender que se deseja dividir apenas a clula A4 por quatro e no todas, o que deixa o
programa errado. Esse erro seria um erro de lgica e no um erro de linguagem, o que no
seria detectado pelo compilador.

Exemplo 3.2
Dispor os dados da Acesita-SA da forma como est representada abaixo em sua planilha e
fazer um programa em VBA para dar o somatrio dos cinco valores da ao.


45
A soluo a programao a seguir onde o resultado ser apresentado na clula A8
ou cells(8,1) no VBA.



O leitor deve estar perguntando mas se for muitas linhas?. Claro, para um nmero
acima de trs linhas no tem sentido esse tipo de programao. Mas uma vez entendida a
relao entre as clulas e o VBA o leitor est preparado para a noo de iteratividade.


3.2 O comando Do While

A palavra iterao e no interao. A iteratividade significa repetio e a
interatividade o modo como se estabelece uma relao entre pessoas, equipamentos,
softwares, etc. A iterao a pea principal da programao, o que faz a automao
funcionar e dar a falsa impresso as pessoas que o computador pensa e rpido para
realizar suas tarefas. na iterao que os clculos mais complexos se realizam e as
atividades mais complexas executadas de maneira rpida e automtica. Em todas as
linguagens de programao existem tipos de comandos ou funes para exercer essa
atividade de iterao. O primeiro comando de repetio no VBA o comando Do While
cuja estrutura a seguinte.



Entre o comando Do While e o comando Loop, tudo o que estiver dentro dever ser
executado repetidamente quantas vezes for necessria at o atendimento da condio lgica
estabelecida na frente de Do While. Essa condio lgica ou condio de parada da
repetio deve ser colocada de forma adequada. O uso do comando Do While de forma
errada pode ocasionar um loop infinito no programa que precisar ser abortado para poder
ser interrompido. As condies de parada so as mesmas condies lgicas para a funo if
ou seja,



46


diferente
a igual ou maior
que maior
a igual ou menor
que menor
<>
>=
>
<=
<



Exemplo 3.3
Fazer um programa para escrever 10 vezes a palavra teste.

Para resolver esse problema o programador dever introduzir a figura do
contador. ele que dir ao Do While quantas vezes o cursor dever ir at o comando loop
e voltar. O algoritmo bsico desse programa ser:

(1) Ler o nmero de repeties desejado pelo usurio (no caso 10).
(2) O contador comea com 1.
(3) Enquanto o contador no for igual ou superior a 10, continue imprimindo a palavra
teste.
(4) Acrescente o contador do valor anterior mais um.
(5) Se contador ultrapassou a 10 o programa pra.

O passo (4) do algoritmo muito importante. Isso porque em programao como j
mencionado antes no existe igualdade de valores, mas sim posies ocupadas (bit
ocupado). Ento para aumentar um contador de uma unidade, o programador deve informar
ao computador que o valor que ele possui no passado em sua memria deve ser apagado e
substitudo pelo que ele tinha somado de um, ou seja,

1 + cont cont

O programa nesse caso ser:




47
Exemplo 3.3
Fazer um programa para escrever 10 vezes a palavra teste nas clulas do Excel
onde a coluna A deve mostrar o nmero da repetio e a coluna B a palavra repetida.





O que acontece se tanto no exemplo com MsgBox ou nas clulas o programador
esquecer da linha do contador i =i +1? O programa entra em loop infinito e apenas um
ctrl+break consegue interromp-lo.



Esse fato ocorre porque como no foi alimentado o contador i, o valor dele ser
sempre 1 e quando o cursor alcana a palavra loop obrigado a voltar at onde est o Do
While. Na verificao da pergunta se i <10 como i ser sempre 1, ser sempre menor que
10 o que obriga o computador infinitamente a repetio a menos que seja interrompido pelo
comando break.
Outro tipo de loop infinito quando o programador esquece e acaba invertendo os
papis do contador e do valor de parada n. Observe o programa a seguir.
48

Nesse erro o programador trocou n por i e assim infinitamente o computador
imprime a palavra teste nas clulas. Por sorte como i foi definido como inteiro seu valor
tem um limite pequeno de memria e a ltima clula que recebe a palavra est na linha
32767. Mas se for definida a varivel i como nmero single ou double o programa s pra
na ltima linha do Excel (65.536).


Figura 3.1 Loop infinito por erro de programao do comando Do While


O clculo de algumas leis matemticas um excelente exerccio de raciocnio lgico
para a programao de computadores. Por exemplo, regras matemticas, gerao de
nmeros, sempre preparam melhor um programador quando estiver diante de problemas
mais complexos. O exemplo 3.4 sugere uma forma de gerao de mltiplos do nmero 5.
49
Exemplo 3.4
Fazer um programa que calcule e imprima nas clulas do Excel todos os mltiplos
de 5 at 20 inclusive.













Nesse caso os mltiplos so sempre gerados pelo prprio contador multiplicado pelo
nmero 5. Observando a tabela pode-se notar como a regra do contador gera os nmeros.

Contador Nmero gerado
1 5*1
2 5*2
3 5*3
4 5*4

Exemplo 3.4
Fazer um algoritmo que gere e imprima na forma de linhas da planilha os
primeiros 11 nmeros pares comeando pelo zero.















A forma de gerao dos pares do exemplo 3.4 poderia ser usada para a gerao dos
mltiplos de 5 do exemplo 3.3. A idia bsica ainda a mesma, ou seja, uma condio de
parada que no caso foi o nmero par 20 pois de antemo o programador sabia que ele era o
50
dcimo primeiro par depois do zero. Mas uma maneira melhor de programar evitando
nmeros predefinidos ou conhecidos pelo programador, pois se o usurio mudar de idia o
programa ainda deve continuar funcionando. Assim uma melhor programao seria:



Essa forma de programao melhor que a anterior pois se o usurio no quiser
mais apenas 11 nmeros pares mas 50 nmeros, por exemplo, ento o programador no
precisaria alterar nada. Na verdade, para ficar o mais genrico possvel seria ainda melhor
que o programa lesse o valor da quantidade de nmeros desejada para ser gerada. Assim, ao
invs de n =11 o mais correto seria

n =Cint ( InputBox ( n = ) )

Outro ponto a ressaltar que nesse algoritmo existem na verdade dois contadores
que agem de forma diferente. O contador da varivel i marca a quantidade de nmeros
gerados e a varivel soma gera os pares subseqentes.

i Soma(passada) Soma(futura)
1 0 2
2 2 4
3 4 6
4 6 8


Quando o valor de i 1 a soma que comea zero e depois de impressa nas clulas
ela recebe o valor somado ao seu antigo valor, por isso 2 + soma soma . Quando a
varivel i aumenta para 2 est indicando que esse novo valor 2 recebido por soma um
valor futuro que deve ser computado quando o cursor retornar na linha do Do While.




51
Exemplo 3.5
Faa um programa para imprimir nas clulas do Excel a soma de n nmeros.

Esse tipo de programa muito parecido com a programao existente dentro da
funo autosoma do excel representada pelo boto de somatrio .
Novamente o programador precisa de dois contadores, um para marcar quantos
pontos esto sendo contados dentro do loop e o contador que far a soma dos nmeros. A
diferena em relao ao exemplo 3.4 que agora o nmero no fixo como o dois dos
nmeros pares. Aqui os n nmeros esto na planilha.



O programa l a quantidade de nmeros inseridas nas clulas da coluna A e ento
comea a fazer a soma dos nmeros. A soma inicial zero, e quando entra no Do While a
soma passada desaparece e em seu lugar salvo o valor antigo mais o valor da clula.
Quando o cursor voltar a esse ponto, o valor da soma desaparece e em seu lugar somado o
valor antigo do passo anterior com o valor novo da clula e assim at o contador i
estourar o valor final n.
No ltimo comando, como o programa j conhece a quantidade de dados n ele
ordena que o computador coloque depois do ltimo dado o valor da soma, por isso o
comando de linha Cells ( n+1 , 1 ) = soma.
O resultado final ser:

ltima linha com o valor da soma



52
Exemplo 3.6
Fazer um programa que tome os valores da coluna A do Excel, multiplique termo a
termo com os elementos da coluna B salvando os resultados na coluna C. No final o
programa dever somar os valores da coluna C e mostrar a soma aps a ltima clula.



Nesse exemplo o procedimento para a resoluo o seguinte:
(1) Leia a quantidade de nmeros.
(2) Coloque no Do While o produto de cada clula de A por B em C.
(3) Crie uma varivel soma que some cada novo valor da varivel C.
(4) Imprima aps a ltima clula de C o valor da soma total.



O leitor deve observar que apesar de saber quantos elementos tm em cada coluna, o
programa fica mais geral quando se pergunta o valor de n. Se a planilha alterar a quantidade
de nmeros o programa no precisa ser alterado. A coluna C est representada pelo
comando de linha Cells ( i , 3) = Cells ( i , 1) * Cells ( i , 2). Para cada linha i alterada
pelo loop uma nova clula na mesma linha e coluna C gerada pelo produto de A e B.
Ao mesmo tempo o programa repete as lgicas das somas dos exemplos anteriores e
vai somando esses termos novos para cada nova linha i. Depois que o contador i chegou ao
fim, o valor final da soma impresso na linha aps o ltimo dado representado pelo
comando de linha Cells ( n + 1, 3 ) = soma.



53
3.3 Seqncias Matemticas

Como j mencionado antes, a melhor maneira de aprender a lgica de programao
se estudando as regras matemticas e operaes algbricas, tentando automatiz-las.
Quando se consegue isso, os outros tipos de programao do dia a dia se tornam muito mais
fceis para os programadores iniciantes. Seqncias de nmeros e sries numricas sempre
foram desafiadoras para o entendimento matemtico sobre a noo de limite e a definio
da entidade definida como infinito.
A seqncias possuem uma representao prpria quando se conhece a regra que
gera os nmeros que a compem. Assim, por exemplo, algumas representaes podem ser
formuladas como nos casos a seguir, tomando-se um termo genrico da seqncia como a
n
:

(a) L
4
1
,
3
1
,
2
1
, 1 tem representao
n
a
n
1
=

(b) L ,
9
4
,
7
3
,
5
2
,
3
1
tem representao
1 2 +
=
n
n
a
n


(c) L ,
4
1
,
3
1
,
2
1
, 1 tem representao
n
a
n
n
1
) 1 (
+

=

(d) L , 4 , 3 , 2 , 1 tem representao n a
n
=

Essas fascinantes representaes matemticas sempre intrigaram sobre a
possibilidade da existncia de um limite e se esse limite finito ou infinito. A definio de
limite tem uma formulao matemtica rigorosa e encontrada nos livros de clculo como a
seguir.

Definio de Limite de Seqncias
Uma seqncia {a
n
} converge para o nmero L se para todo nmero positivo
existe um nmero inteiro N > 0 tal que para todo n
< > L a N n
n

Se esse nmero L no existe, diz-se que a seqncia {a
n
} diverge.

A definio matemtica anterior afirma que uma vez escolhida uma regio de raio
em torno de um nmero L, existir dentro da seqncia um termo inicial a partir do qual
todos os outros nunca ultrapassaro a distncia em torno desses termos. Se esse termo
cujo ndice N no puder ser encontrado, afirma-se ento que a seqncia no tem limite e
cresce indefinidamente.
O leitor pode estar se perguntando qual a utilidade de tais definies dentro da
computao. Essas definies permitiram que diversas reas criassem tabelas padro para
seus clculos tais como fsica, qumica, matemtica, engenharia, administrao e economia.
Mais especificamente em economia e finanas seqncias especficas permitiram a criao
de tabelas por exemplo para depreciao de ativos usando a seqncia de Fibonacci.
54
Essas seqncias podem ajudar ainda a formarem sries infinitas as quais podem
representar funes, integrais, derivadas, nmeros especficos tais como e o nmero de
Euler e. A mais famosa histria a respeito de Gauss que com oito anos de idade, de
castigo em sala de aula acabou criando a regra para soma de srie infinita com progresso
geomtrica (PG). Assim como seqncias tambm o estudo de convergncia para sries
infinitas so muito importante para todas as reas de estudo relacionadas com computao.
Uma srie bastante conhecida a srie harmnica que representada pela soma dos
termos
L + + + + =
4
1
3
1
2
1
1 S

onde S pode ser escrito na representao matemtica

=
+ + + =
1
3
1
2
1
1
1
n
n
L
Essa srie utilizada por exemplo em estudos de harmonia musical, em engenharia,
matemtica e pode-se provar, ao contrrio do que o leitor pode pensar, que essa srie tem
limite infinito. Ou seja, essa srie cresce indiscriminadamente e no converge para nenhum
nmero de termo final n. Se um programa computacional fosse feito para encontrar o valor
dessa srie dependendo no nmero de termos colocados pelo usurio ocorreria o chamado
overflow ou estouro de memria.
Algumas sries se tornaram to especiais que receberam nomes e hoje so usadas
por milhares de pessoas todos os dias com um nico aperto de tecla de uma calculadora de
bolsa, tais como seno, cosseno, raiz quadrada, exponencial entre outras. As representaes
de algumas sries especiais so apresentadas a seguir:

(a) L L
+
+ + =

)! 1 2 (
) 1 (
! 5 ! 3
) sen(
1 2 5 3
n
x x x
x x
n
n

(b) L L + + + =
)! 2 (
) 1 (
! 6 ! 4 ! 2
1 ) cos(
2 6 4 2
n
x x x x
x
n
n

(c) L L + + + + + + =
! ! 3 ! 2 ! 1
1
3 2
n
x x x x
e
n
x

(d)

+
+ +

+ +
+

+
+

+
+

=
+
+
L L
1 2
1 2
5
5
3
3
) 1 )( 1 2 (
) 1 (
) 1 ( 5
) 1 (
) 1 ( 3
) 1 (
1
1
2 ) ln(
n
n
x n
x
x
x
x
x
x
x
x para valores 0 > x
(e) L L +
+
+ + + + =
+
)! 1 2 ( ! 7 ! 5 ! 3
) senh(
1 2 7 5 3
n
x x x x
x x
n



O leitor deve ter percebido que algumas representaes dos termos a
n
dessas sries
so bastante complexos. nesse aspecto que a computao com a idia de iteratividade
veio agilizar todo a forma de raciocnio cientfico com rapidez e segurana. O programador
no precisa conhecer o termo de convergncia a
n
de uma determinada srie. O programador
precisar apenas de observar qual a regra lgica de iteratividade existente na srie e com o
55
uso do comando Do While por exemplo gerar a srie at o nmero de termos desejado pelo
usurio.

Exemplo 3.7
Fazer uma programao macro para gerar e imprimir nas clulas da planilha do
Excel a seqncia de termos abaixo.





Essa seqncia tem a representao matemtica i a
i
= , ou ainda, o i-simo
argumento da seqncia o prprio valor da seqncia. Ento o algoritmo dever perguntar
ao usurio quantos termos deseja gerar e coloc-los nas clulas.



Exemplo 3.8
Fazer um algoritmo e programe uma macro para gerar a seqncia harmnica nas
clulas do Excel.

n
1
, ,
4
1
,
3
1
,
2
1
, 1 L

Nesse caso o algoritmo muito parecido como exemplo anterior, no devendo o
leitor confundir o termo n da representao matemtica com o nmero de termos que os
programas normalmente pedem. Por exemplo, se o usurio desejar 4 termos, a programao
dever ser o inverso do contador, at o loop parar no valor 4.

Para 10 termos o resultado


56
e a programao da macro a que se segue.



Exemplo 3.8

Fazer uma macro para a seqncia abaixo e imprimir o resultado nas clulas da
planilha em Excel.

{ } n , , 3 , 2 , 1 L
A programao muito parecida com a dos outros exemplos, mas com o cuidado de
usar corretamente a funo para extrair a raiz quadrada dos nmeros, que no caso sero os
contadores da seqncia. A funo a ser utilizada Sqr() conforme soluo a seguir.



Cujo resultado para n =10






57
Apesar de muito parecida a programao de sries infinitas deve ser realizada com
muito cuidado, pois a regra da soma deve ser sempre lembrada na hora da programao.
Deve-se sempre lembrar que a igualdade representa na verdade que uma posio na
memria ser sempre a mesma e ir ser apagada para receber um novo valor a cada
iterao.
Para fazer a programao da srie

=
=
n
i
i S
1
, por exemplo, cada novo termo
calculado deve-se trocar o valor da nova soma.





A programao da srie a seguinte:



Usando n =10 termos,



Como se chega nesses valores? O novo termo sempre o contador que sempre
somado de um dentro do Do While. Ento a soma anterior se apaga e no seu lugar entra o
valor antigo da memria mais o valor atual do contador. Ento no primeiro passo a soma
nula, mas antes do loop a soma recebe o novo termo que no caso o valor 1 do contador.
Como o valor antigo da soma era zero, ento seu novo valor ser 0 +1. Quando o cursor
chega no loop o contador para o prximo passo j vale 2 e ento para a prxima soma, o
Soma Soma + novo_valor
58
valor ser apagado da memria e em seu lugar entrar 1 +2, conforme os passos mostrados
a seguir.




Mas o leitor deve ter cuidado. Imagine que se deseja somar 20.000 termos da srie.
Primeiro que ao invs de colunas, os resultados devero ser salvos em linhas, trocando a
formulao para Cells ( i ,1). Em segundo lugar, ao rodar o programa com n =20.000 o
resultado o apresentado a seguir:



Ocorre um estouro de memria porque a definio das variveis no Dim foi que a
soma era inteira ( integer ), mas o valor de uma varivel inteira limitado a cerca de
33.000. Ao observar a planilha abaixo observa-se que o programa pra na linha 255, limite
da varivel inteira com a soma valendo 32.640.



59

Por isso a definio correta da varivel importante e o programa por exemplo
poderia ser alterado colocando-se por exemplo formato do tipo Long, que conforme
definio do auto-ajuda do VBA tem valor varivel entre 2.147.483.648 e +
2.147.483.647.


Outra soluo poderia ser dimensionar a varivel soma como single que tem o
intervalo definido abaixo dentro do VBA.


Ento, nesse exemplo com 20 mil linhas, ou n =20.000 termos o resultado ser

=
=
20000
1
8
10 2
1
i
i


com a dimenso das variveis adotadas como a seguir





60
Exemplo 3.9
Fazer uma macro para gerar a soma de n termos da srie harmnica conforme
representao a seguir.

L L + + + + + = =

=
n i
S
n
i
1
3
1
2
1
1
1
1


O programa no tem muitas diferenas em relao ao programa comentado
anteriormente. Novamente a varivel de soma e novos termos no podem ser inteiros, e
nesse caso, nem mesmo inteiro longo(Long) pois tem-se fraes envolvidas na srie.




Para n =20 termos o resultado ser o apresentado a seguir. O leitor poder perceber que
intuitivamente compreende-se o comentrio feito sobre convergncia. Ao observar apenas
os nmeros na representao da srie, permite uma falsa impresso de que os nmeros
subseqentes esto diminuindo e portanto, a srie deve convergir para algum nmero. No
o que acontece como apresentado na planilha.

Exemplo 3.10
Fazer uma macro para gerar a soma de n termos da srie conforme representao a
seguir.

L L + + + + + = =

=
2
1
2
1
9
1
4
1
1
1
n i
S
n
i

Nesse exemplo, o programa idntico ao anterior, mas o leitor deve tomar o
cuidado de observar como fica o termo novo ao quadrado. O parntesis obrigatrio no
61
divisor, caso contrrio o computador dividir 1 por i e o resultado da diviso multiplicar por
i novamente.


Para n =20, o resultado


0
0,2
0,4
0,6
0,8
1
1,2
1,4
1,6
1,8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Iterao
V
a
l
o
r

d
a

S
o
m
a



Esse resultado interessante, pois empiricamente possvel comprovar a noo
matemtica de convergncia. Essa srie demonstrada em clculo diferencial e integral
62
como convergente e o programa comprova que somente com 20 termos os nmeros
estacionam em torno de 1,60.


3.4 A Seqncia de Fibonacci

Porque essa seqncia importante e tem nome especial amplamente difundida nos
meios acadmicos? A seqncia possui a seguinte representao

0 1 1 2 3 5 8 13 21 34 55 ...

Conta-se que esta seqncia foi descrita por Leonardo de Pisa, conhecido como
Fibonacci por volta do ano 1200 (DC) para descrever o crescimento de uma populao de
coelhos. Os nmeros descrevem o nmero de casais em uma populao de coelhos depois
de n meses com as seguintes hipteses:

(i) No primeiro ms nasce apenas um casal.
(ii) Casais reproduzem-se apenas o segundo ms de vida.
(iii) Todo ms cada casal frtil d luz a um novo casal.
(iv) Os coelhos nunca morrem.

Depois que a seqncia ficou conhecida, muitas aplicaes foram encontradas para
sua utilizao tais como a forma das galxias, as relaes na filotaxia do girassol e do
abacaxi, pinturas, arquitetura grega e egpcia, o vo dos pssaros e por fim se chegou ao
gold number que resulta no clculo da razo urea.
A regra da gerao da seqncia de Fibonacci simples e observando os nmeros
percebe-se que sempre um nmero gerado pela soma dos dois termos anteriores. Em
termos de finanas, a depreciao de ativos o quanto um determinado investimento perde
valor anos seguidos. Essa depreciao melhor explicada por tabelas baseadas na
seqncia de Fibonacci. O detalhe que a seqncia de Fibonacci pode tambm ser gerada
por uma frmula fechada, que representa cada termo. A frmula conhecida como frmula
de Binet(1786-1856)

+
=
n n
n
F
2
5 1
2
5 1
5
1


Ento o que se faz para montar uma tabela de depreciao a criao de seqncia
formada de fraes onde os numeradores e denominadores so nmeros de Fibonacci.
Assim a melhor tabela de depreciao ser criada para o perodo em anos (varivel T):

( )

=

T T
T
T
T
T
F
F
F
F
F
F
d d d
2
1
2
3 2
2
1 2
2 1
, , , , , , L L
onde nesse caso
63
( ) ( ) L L , 3 , 2 , 1 , 1 , 0 , , , , ,
4 3 2 1 0
= F F F F F
Se por exemplo, o perodo for de T =4 anos a tabela para depreciao do valor do
investimento ser
( )

=
21
1
,
21
2
,
21
5
,
21
13
, , , , , ,
8
1
8
3
8
5
8
7
4 3 2 1
F
F
F
F
F
F
F
F
d d d d
ou seja, esses valores para anos subseqentes devero ser multiplicados pelo valor inicial
do investimento ou do ativo.
Outra aplicao para finanas muito utilizada pelos analistas tcnicos a noo de
suporte e resistncia para o preo de uma ao ou opo em bolsa de valores.




Segundo anlise tcnica de aes, as aes seguem ciclos de compras e vendas de
aes. Os preos oscilam conforme a demanda por uma determinada empresa. Se houver
muitos compradores de PETR4 (Petrobrs) e poucos vendedores seu preo sobe. Se houver
muitos vendedores e poucos compradores seu preo cai. Essas subidas momentneas de
preos ou quedas podem seguir um certo padro. Assim, uma linha de suporte representa
um preo segundo qual a partir de ento ocorre uma reverso e uma subida. Esse o
momento de compra do ativo. Do lado oposto, a linha de resistncia informa o preo
mximo a partir do qual ao romper essa barreira o preo tende a voltar para valores mais
baixos. Esse o momento de venda do ativo.
Essas linhas de suporte e resistncia so conhecidas como linhas de Fibonacci.
Essas linhas so traadas em torno de 38% e 62% do menor preo histrico. E porque esses
valores de percentagem. Se os nmeros de Fibonacci forem colocados na planilha do Excel,
conforme mostrado a seguir, pode-se fazer a diviso de cada termo em relao ao termo
anterior.
Assim, da seqncia de Fibonacci tem-se x
1
=1/1 =1; depois x
2
=2/1=2 e assim
sucessivamente. Na planilha a seguir pode-se verificar na linha 1 a seqncia de Fibonacci
e na linha abaixo as divises sucessivas dos termos.


64


Observa-se que estas divises convergem para 1,62, indicando a percentagem de
62%, ou seja a resistncia no caso da ao de uma empresa negociada em bolsa de valores.
Seu complemento para 100% 38%, a linha de suporte da ao. dessa forma portanto
que muitos traders realizam suas operaes de compra e venda observando as linhas de
Fibonacci de suporte e resistncia.
A gerao dos nmeros de Fibonacci, como visto tem suas diversas aplicaes, e
claro o primeiro algoritmo de seqncias normalmente apresentado a iniciantes em
programao. Isto porque a programao e gerao automticas envolvem a noo de
variveis recebendo valores que no prximo loop desaparecem.
Neste ponto muito importante a noo do uso do chamado teste de mesa do
programador. O programador coloca no papel, todas as variveis que programou e
acompanha, simulando na mente como se fosse o computador o que ocorre em cada passo.
A idia comear nomeando o primeiro valor da seqncia como ult, uma varivel
que da direita para esquerda seria o ltimo nmero da seqncia. Uma segunda varivel
necessria seria o penul, como penltimo valor da direita para a esquerda.



Ento deve-se seguir a seguinte ordem de repetio,



Uma vez dentro do Do While a repetio dever ser de tal forma que o valor da
varivel ult recebe o valor de penul antes da prxima iterao e a varivel penul recebe a
soma anterior. Ento quem tinha valor ult descartado para receber penul, quem tinha
penul descartado para receber a soma e a nova soma? A nova soma s realizada depois da
realimentao do loop no Do While
65


O programa ento fica,




O leitor deve observar que como os dois primeiros termos da srie j foram
impressos nas clulas A1 e B1, ento a contagem inicial do contador comea em 3 e no em
um como os outros programas comeavam.
O teste de mesa ento fornece como simulao o resultado esperado do computador.


i ult penul soma impresso
3 0 1 1 1
4 1 1 2 2
5 1 2 3 3
6 2 3 5 5



66
3.5 O comando for

Assim como outras linguagens, o VBA- Excel possui uma outra forma de fazer as
iteraes de programas. O primeiro comando visto nas sees anteriores foi o comando Do
While. Esse comando, como tambm j mencionado, faz o programa correr risco de entrar
em loop infinito se ocorrer o esquecimento da atualizao do contador. Sob o comando for
esse risco no ocorre pois o contador atualizado automaticamente.



A palavra for indica ao computador que para o incio apontado logo em seguida at
o final da contagem indicada por to o computador est preso e dever repetir as iteraes
para cada next. A comparao se o contador j est na ltima iterao tambm automtica
e est embutida na primeira linha do comando.



Exemplo 3.11

Fazer um programa para dar a soma de n termos da srie

L L + + + + = =

=
2
1
2
2
9
2
4
2
2
2
n i
S
n
i


Outra diferena importante que o contador no precisa ser iniciado no caso do uso
do for pois ele automtico. A programao fica muito parecida com as outras sries,
trocando-se apenas os termos referentes ao Do While por for.


67


Pode-se observar que a funo do next i dizer ao computador prximo valor de i
o que ser subentendido que i ser somado de 1. Mas ser possvel fazer o contador
percorrer valores que no sejam inteiros? Sim possvel usando o comando step e indicar
de quanto deve ser adicionado o contador em cada passo.



O step 0.1 diz ao computador que ele dever repetir todos os passos dentro do loop
at o next i at n, mas andando de 0,1 em 0,1. Se n =1 tem-se 10 passos a serem repetidos.
Mas de qualquer forma ser necessrio um contador extra para indicar em qual clula se
dar a impresso. Isso porque como o contador do for no um nmero inteiro, se o
programador colocar o prprio i entrar em loop infinito pois no existe cells(1,0.1), tanto
os nmeros de linhas e colunas devem ser inteiros. Por isso foi criado um contador
chamado t dentro do programa. Pode-se perceber que esse novo contador apenas um
auxlio como marcador das colunas.






68
Exemplo 3.12
Um trader baixou em 5 minutos 2 dados a cada 15 segundos sobre as aes da
Petrobrs (Petr4) e da Usiminas (Usim5) conforme tabela a seguir. Fazer um programa para
calcular o preo mdio nesses 5 minutos e colocar o resultado depois dos ltimos dados
como mostrado na tabela.



A mdia a soma dos valores das aes e depois a diviso dessa soma pelo nmero
de termos. Ento o programa deve pedir ao usurio quantos dados esto na planilha e
depois da ltima linha de dado colocar o valor da mdia.
n
x
Mdia
n
i
i

=
=
1

O leitor deve perceber que nesse caso os valores das clulas com os dados no
podero ter o mesmo contador como indicador de linha, pois na primeira linha tem-se texto
indicando o nome das aes. As clulas com valores devem comear a partir de i +1. No
final do programa tambm os valores devero ser colocados com na linha n +2. Se os
dados comeassem na primeira linha a mdia estaria na linha n +1, mas como a primeira
linha no pode ser computada, ento dever ser mais uma linha para baixo, ou n +2.





69



Duas variveis soma foram criadas para cada uma das aes e nas colunas 2
e 3 pois a primeira coluna apenas marca o nmero do dado adquirido. O resultado nesse
caso ser




Exemplo 3.12
A noo de limite e convergncia muito utilizada em cursos de clculo diferencial
e integral. Pode-se provar que a srie abaixo converge para o nmero 0,5. Ou seja,

2
1
7 * 5
1
5 * 3
1
3 * 1
1
= + + + L


Assim, pede-se fazer um programa em VBA-Excel, onde o usurio fornea o nmero N de
termos desejados e o programa imprime via MsgBox a soma desses N termos, respeitando
a lgica da srie acima.

Essa lgica muito parecida com a gerao de mltiplos apresentada anteriormente.
Pode-se tambm utilizar a idia do algoritmo de Fibonacci,mas gerando os nmeros
mpares subseqentes. Por exemplo se comear ult =1 e penul = 3 e ir adicionado o valor 2
para ambas as variveis a parte de baixo das fraes est pronta. O leitor no pode esquecer
de declarar ult e penul como Long ou Single pois pode ocorrer o mesmo problema j
70
apresentado em exemplo anterior de estouro ou overflow por atingir o limite de nmero
inteiro.



Para o caso n =200 o resultado


A flecha indica onde os mpares so gerados iterativamente para as duas variveis
ult e penul.


3.6 Sries com sinais alternados

As programaes das sees anteriores apenas mencionavam sries com soma dos
termos de mesmo sinal. E quando os sinais forem alternados, ora positivo para um termo e
ora negativo para outro. Pode-se nesse caso usar a noo de (-1)
i
e dessa forma quando i for
par o sinal positivo, ou ainda quando i for mpar o sinal negativo. Observe o exemplo a
seguir.







71
Exemplo 3.13
Fazer um algoritmo e implemente um programa em VBA Excel onde o usurio
entra apenas com o nmero de termos desejado e o programa mostra em MsgBox o valor da
soma.

L
36
6
25
5
16
4
9
3
4
2
1
1
+ + = S


A soluo nesse caso fcil de perceber pois os termos das fraes em cima so
valores do contador e embaixo o contador ao quadrado. Para alternar o sinal da soma deve-
se colocar (-1)
i-1
multiplicando as fraes. Coloca-se o sinal negativo elevado a (i-1) pois
no primeiro passo quando i =1 a soma dever ser positiva e igual a 1.



Para n =10 o resultado ser















72

3.7 Sries com funes matemticas

Exemplo 3.14

Fazer uma subrotina que leia um nmero N de pontos com coordenadas x e y fornecidas
pelo usurio ( o par (x,y) um ponto no plano ) e diga se esse ponto pertence figura
abaixo com os limites -1 x 1, y0 e x
2
+y
2
1.

Para cada ponto lido dever aparecer uma mensagem MsgBox dizendo se o ponto pertence
ou no figura.


Exemplo: (0,0) -------- PERTENCE FIGURA
(0,2) -------- NO PERTENCE FIGURA

Existem duas maneiras para resolver esse problema. As duas solues so as seguintes:

Primeira Soluo






-1 +1
+1
73
Segunda Soluo


Exemplo 3.15
Fazer um programa para calcular o fatorial de um nmero inteiro N. Sabe-se que a
formulao do fatorial
n n N = ) 1 ( 3 2 1 ! L










Exemplo 3.16
Fazer um programa para calcular o valor do exponencial de x, onde o usurio
fornece o nmero termos para a preciso deseja e o valor de x e o programa imprime o
valor em MsgBox usando a srie abaixo:
L L + + + + + + =
! ! 3 ! 2 ! 1
1
3 2
n
x x x x
e
n
x








74



3.8 Sries indiretas


Exemplo 3.17
Escrever abaixo um algoritmo para uma macro em Excel-VBA, onde o usurio fornece o
nmero n de termos desejados e o programa informa via MsgBox a soma da srie abaixo:

L + + + + =
65
1
35
1
14
1
2
1
S

















75

3.9 Exerccios


(1) Fazer um algoritmo e uma macro no Excel, onde deve se ler o nmero N de uma
seqncia de nmeros naturais e posteriormente ler a prpria seqncia. Uma vez
armazenados os nmeros da seqncia nas clulas do Excel, o programa deve mostrar
em uma determinada clula o valor da soma dos nmeros pares (SP) e em outra o valor
da soma dos nmeros mpares (SI).


(2) Elaborar um algoritmo e uma macro no Excel onde, uma vez conhecido o tamanho N
da seqncia e a prpria seqncia, armazenar os nmeros nas clulas do Excel. No
final o programa deve mostrar em uma clula a soma dos nmeros negativos e em outra
a soma dos nmeros positivos.


(3) Deseja-se ter uma macro onde, fornecidos os valores inteiros A, B e C, verificar se eles
formam os lados de um tringulo retngulo. Ao final, a macro deve imprimir uma
mensagem dizendo se eles formam ou no lado de um tringulo retngulo.


(4) Gerar e salvar nas clulas do Excel usando macro, a seqncia: 1, 3, 4, 7, 11, 18, 29, ...
at seu vigsimo termo.


(5) Gerar e salvar nas clulas do Excel usando macro a seqncia: 1, 4, 9, 16, 25, 36, 49,...



(6) Observe a tabela dos rendimentos(%) de um fundo de investimento:
Ms 1 2 3 4 5 6 7 8 9 10 11 12
Ret 7 7,5 6 6,5 8 7,1 6 6 10 9,5 9 9
Fazer um algoritmo e um programa em macro onde:
(i) O usurio entra com os valores via inputBox e o programa salva esses valores nas
clulas do Excel.
(ii) O programa descobre o maior rendimento.
(iii) O programa mostra o valor do maior rendimento via MsgBox.


(7) Fazer um algoritmo e um programa em macro onde o usurio entra com N valores de
aes de uma empresa via Cdbl e o programa armazena o resultado nas clulas do Excel.
Aps isso, o programa dever fornecer a mdia desses valores e o desvio padro (risco da
ao).

(8) Fazer um algoritmo para passar n elementos de uma coluna do Excel para uma linha.
76

(9) Criar um algoritmo para calcular a soma abaixo at o termo N que o usurio desejar.
S = + + + +
70
7
69
14
68
21
67
28
...
(10) Fazer um programa que leia um valor X e depois calcule e escreva o resultado do
seguinte somatrio at o termo N desejado pelo usurio:
...
4 3 2 1
22 23 24 25
+ +
X X X X


(11) Fazer um algoritmo e programa em VBA-Excel que leia uma quantidade N de valores
numricos e conte e diga ao usurio quantos pares e quantos mpares existem.

(12) O mtodo de Newton para encontrar soluo numrica para raiz de uma funo
muito simples e til em diversas situaes. A frmula :
) (
) (
1
k
k
k k
x f
x f
x x

=
+
Onde f a funo e f a derivada da funo. Fazer um algoritmo e rode o programa em
VBA-Excel para encontrar uma das razes da funo 6 5 ) (
2
+ = x x x f .

(13) Fazer um algoritmo e implemente um programa em VBA Excel onde o usurio entra
apenas com o nmero de termos desejado e o programa mostra em MsgBox o valor da
soma.
L
125
1
64
1
27
1
8
1
1 S + + =

(14) Escrever abaixo um algoritmo para uma macro em Excel-VBA, onde o usurio fornece
o nmero n de termos desejados e o programa informa via MsgBox a soma da srie
abaixo:

L + + =
65
1
35
1
14
1
2
1
S

(15) Fazer um programa em VBA onde o usurio entra com o nmero de termos para a
srie do cosseno e o valor de x. O programa imprime em MsgBox o valor do cosseno
usando a srie
L L + + + =
)! 2 (
) 1 (
! 6 ! 4 ! 2
1 ) cos(
2 6 4 2
n
x x x x
x
n
n







77
(16) Fazer um programa em VBA onde o usurio entra com o nmero de termos para a
srie do seno e o valor de x. O programa imprime em MsgBox o valor do seno usando a
srie
L L
+
+ + =

)! 1 2 (
) 1 (
! 5 ! 3
) sen(
1 2 5 3
n
x x x
x x
n
n


(17) Fazer um programa em VBA onde o usurio entra com o nmero de termos para a
srie do seno hiperblico (senh(x)) e o valor de x. O programa imprime em MsgBox o valor
do seno usando a srie
L L +
+
+ + + + =
+
)! 1 2 ( ! 7 ! 5 ! 3
) senh(
1 2 7 5 3
n
x x x x
x x
n


(18) A integral abaixo no pode ser resolvida utilizando as tcnicas usuais de clculo
diferencial e integral. Mas, pela aproximao da integral em N termos da srie abaixo, tem-
se uma boa aproximao do seu valor exato.

+ + =

x
u
x x x
x du e
0
7 5 3
! 3 * 7 ! 2 * 5 ! 1 * 3
2
L


Assim, pede-se que seja desenvolvido uma macro em VBA-Excel onde o usurio entra com
a varivel N ( que representa a quantidade de termos) e x ( que representa o limite de
integrao ) e o programa imprime numa MsgBox o resultado da integral.

Você também pode gostar