You are on page 1of 35

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.

43

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.

44

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,

45

< <= > >= <>

menor que menor ou igual a maior que maior ou igual a diferente

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,
cont cont + 1

O programa nesse caso ser:

46

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.

47

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. 48

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 1 2 3 4

Nmero gerado 5*1 5*2 5*3 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

49

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) 2 0 4 2 6 4 8 6

1 2 3 4

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 soma soma + 2 . 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.

50

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

51

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.

52

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 an:

1 1 1 (a) 1, , , L 2 3 4 (b)
1 2 3 4 , , , ,L 3 5 7 9

tem representao a n =
tem representao a n =

1 n
n 2n + 1

1 1 1 (c) 1, , , ,L 2 3 4

tem representao a n =

(1) n +1 n

(d) 1, 2 , 3 , 4 ,L

tem representao a n = 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 {an} converge para o nmero L se para todo nmero positivo existe um nmero inteiro N > 0 tal que para todo n n > N a n L <
Se esse nmero L no existe, diz-se que a seqncia {an} 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.

53

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 1 1 1 S = 1+ + + +L 2 3 4 onde S pode ser escrito na representao matemtica

n =1

1 1 1 = 1+ + +L n 2 3

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) sen( x) = x x3 x5 x 2 n 1 + L + (1) n L 3! 5! (2n + 1)!

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

(c) e x = 1 +

x x2 x3 xn + + +L+ +L n! 1! 2! 3! x 1 ( x 1) 3 ( x 1) 5 ( x 1) 2 n +1 (d) ln( x) = 2 + + +L+ + L para valores x > 0 3 5 2 n +1 5( x + 1) (2n + 1)( x + 1) x + 1 3( x + 1)

(e) senh( x) = x +

x3 x5 x7 x 2 n +1 + + +L +L 3! 5! 7! (2n + 1)!

O leitor deve ter percebido que algumas representaes dos termos an 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 an de uma determinada srie. O programador precisar apenas de observar qual a regra lgica de iteratividade existente na srie e com o

54

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 a i = 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. 1 1 1 1 1, , , , L , n 2 3 4
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

55

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.

2 , 3 ,L, n 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.

{ 1,

Cujo resultado para n = 10

56

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 S = calculado deve-se trocar o valor da nova soma.

n i =1

i , por exemplo, cada novo termo

Soma Soma + novo_valor

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

57

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.

58

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 i =1

1 = 2 10 8 i

com a dimenso das variveis adotadas como a seguir

59

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

n i =1

1 1 1 1 = 1+ + +L+ +L i n 2 3

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.
S=

n i =1

1 1 1 1 = 1+ + +L+ 2 +L 2 4 9 i n

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 60

divisor, caso contrrio o computador dividir 1 por i e o resultado da diviso multiplicar por i novamente.

Para n = 20, o resultado

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

Esse resultado interessante, pois empiricamente possvel comprovar a noo matemtica de convergncia. Essa srie demonstrada em clculo diferencial e integral

Valor da Soma

61

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) (ii) (iii) (iv) No primeiro ms nasce apenas um casal. Casais reproduzem-se apenas o segundo ms de vida. Todo ms cada casal frtil d luz a um novo casal. 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 1 1 + 5 1 5 Fn = 5 2 2

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):

(d1 , d 2 ,L, d T ) = F2T 1 , F2T 3 ,L,


F2T F2T onde nesse caso

F1 F2T

62

(F0 , F1 , F2 , F3 , F4 ,L) = (0,1,1,2,3,L)


Se por exemplo, o perodo for de T = 4 anos a tabela para depreciao do valor do investimento ser F F F (d1 , d 2 , d 3 , d 4 ) = 7 , 5 , 3 , F1 = 13 , 5 , 2 , 1 F F F F 21 21 21 21 8 8 8 8 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 x1 = 1/1 = 1; depois x2 = 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.

63

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

64

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 3 4 5 6

ult 0 1 1 2

penul 1 1 2 3

soma 1 2 3 5

impresso 1 2 3 5

65

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 S=

n i =1

2 i
2

= 2+

2 2 2 + +L 2 +L 4 9 n

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.

66

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.

67

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 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.

Mdia =

n i =1

xi

68

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,

1 1 1 1 + + +L = 1* 3 3 * 5 5 * 7 2
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

69

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.

70

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.

1 2 3 4 5 6 S= + + L 1 4 9 16 25 36
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 devese 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

71

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 x2 + y2 1.

+1

-1

+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

72

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 != 1 2 3 L (n 1) n

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: x x2 x3 xn ex = 1+ + + +L+ +L n! 1! 2! 3!

73

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:
S= 1 1 1 1 + + + +L 2 14 35 65

74

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: O usurio entra com os valores via inputBox e o programa salva esses valores nas (i) clulas do Excel. O programa descobre o maior rendimento. (ii) (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.

75

(9) Criar um algoritmo para calcular a soma abaixo at o termo N que o usurio desejar. 70 69 68 67 S= + + + +... 7 14 21 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:

25

24

23

22

+ ...

(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 :

x k +1 = x k

f (xk ) f ( x k )

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 f ( x) = x 2 5 x + 6 . (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.

1 1 1 1 S = 1 + + L 8 27 64 125
(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:

S=

1 1 1 1 + +L 2 14 35 65

(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 x2 x4 x6 x 2n cos( x) = 1 + + L + (1) n L 2! 4! 6! (2n)!

76

(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 x3 x5 x 2 n 1 sen( x) = x + L + (1) n L 3! 5! (2n + 1)! (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 x3 x5 x7 x 2 n +1 + + +L +L senh( x) = x + 3! 5! 7! (2n + 1)! (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, temse uma boa aproximao do seu valor exato.

e
0

u 2

x3 x5 x7 du = x + +L 3 *1! 5 * 2! 7 * 3!

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.

77

You might also like