Professional Documents
Culture Documents
19
Desde os primrdios dos tempos de tecnologia de programao, um programa de computador precisa passar por algumas seqncias de avaliaes. O editor de texto onde o usurio escreve o que ele deseja que o computador realize. Depois de escrever o programa, para que o mesmo converse com o computador, no pode haver erros na colocao das regras dentro da linguagem escolhida. Para isso as averiguaes de inconsistncias entre o que o programador deseja e o que ele pode usar naquela linguagem escolhida realizada pelo compilador. Caso haja alguma inconsistncia entre o programa escrito e a notao dos smbolos e regras permitidas pela linguagem, uma mensagem de erro enviada pelo compilador. A ltima fase o processo de linkagem realizada pelo linkador que vai atrelar ao programa todas as bibliotecas de funes que o programa poder acessar. Exemplo: a impresso de um grfico precisa de uma rotina da linguagem que permita a impresso. Se a linguagem no tem essa rotina ou funo que permita o programa imprimir um grfico ou imagem, o programa no poder realizar a tarefa e uma mensagem de erro ser emitida para o usurio. Todos esses alertas podem deixar o leitor iniciante confortvel, achando que seus erros sero alertados pelo computador. No, infelizmente o pior dos erros nunca alertado pelo computador. O erro lgico de pensamento do programador nunca encontrado pelo computador. Exemplo: se o programador enviou uma ordem para que o computador fazer a operao 2 + 3 = 4, se a regra de soma estiver de acordo com as permisses da linguagem, o computador vai enviar ao usurio a mensagem que dois mais trs quatro e no cinco. O problema que o computador recebeu uma ordem lgica errada, mas com comandos certos. Assim, caro leitor, lembre-se que seus erros de programao somente um ser humano poder encontrar ( no VBA-Excel pelo menos ).
Figura 2.2-
O processo de programao
No entanto, no VBA-Excel esse processo muito rpido e o leitor nem perceber qual dos processos est ocorrendo. Nos primrdios dos primeiros computadores linguagens as vezes demoravam minutos e at horas para compilar e mais ou menos o mesmo tempo para linkar. Exemplo disso a linguagem cientifica que dominou o mundo acadmico at a dcada de 1990, o FORTRAN, onde os compiladores eram programas externos a linguagem e os linkadores tambm. Para a execuo de um programa, o programador tinha que esperar bastante tempo e torcer para no acusar erros em sua programao.
20
Figura 2.3- Acessando o Visual Basic da planilha do Excel No caso do VBA-Excel, o ambiente de programao das macros se encontra no caminho ferramentas macros editor do visual basic. Ento aparecer a tela de programao ainda vazia com tela a esquerda mostrando a raiz e as planilhas contidas no arquivo em Excel (janela do project explorer) e a janela de propriedades que sero exploradas nos captulos posteriores. Clica-se ento no caminho ferramentas macros e ento ao abrir a nova tela de nomes, coloca-se um nome para o programa (ver Figura 2.5). Ao clicar no boto criar ser aberta a tela onde o programa dever ser escrito. nessa tela que comea toda a programao dos algoritmos e ser nessa tela que o computador interpretar os comandos do programador ( Figura 2.6).
21
22
Algumas observaes importantes devem ser feitas em relao ao nome do programa e nomes de variveis. Tanto os nomes dos programas quanto de variveis devem seguir a seguinte regra de nomeao: No pode comear com NMERO Exemplo: 1prog, 10xpe, 2123cal, 1aula, No pode ter espaos em branco Exemplo: aula 1 prog comp No pode ter acentos, c cedilha, ou qualquer pontuao Exemplo: aulo1 cwqr No pode passar de 8 caracteres Exemplo: programadecomputao1 Auladecomp PODE misturar letras e nmeros Exemplo: prog1 pr23rtu
23
Uma vez no mdulo de programao o usurio est pronto para colocar os algoritmos em funcionamento, utilizando-se para isso da linguagem de programao Visual Basic for Aplications (VBA). O primeiro ponto de contato do leitor com a programao que ser necessrio informar o computador sobre dados de entradas das variveis de problemas. O computador precisar sempre de uma informao inicial para poder processar os algoritmos. Essa informao inicial que se chama entrada de um programa de computador. Antes ser necessrio informar ao computador, quais so as variveis de que ele ir dispor no programa. A declarao das variveis feita atravs da nomenclatura dim que vem da palavra dimension, a qual dimensiona o tipo de varivel a ser usada pelo computador. Observe o trecho do programa teste a seguir:
O programa est informando ao computador que ele ter que usar uma varivel chamada x e ainda que essa varivel do tipo Integer, ou seja, uma varivel do tipo inteira, onde somente receber e usar valores inteiros (...,-2,-1,0,1,2,...). A partir de agora o computador precisar ter a informao de entrada sobre qual esse valor de x. Essa informao ser passada pelo usurio atravs de uma caixa de texto, com nome InputBox. Essa caixa ainda poder definir ao usurio qual o tipo de dado est entrando no programa. Por exemplo, se o dado for valor inteiro (Integer) ento a caixa de entrada receber uma nomeao Cint que significa (Change Integer). Outros tipos de caixa podero ser inseridos com tipos de variveis diferentes: CInt() dados inteiros. CSng() dados reais. CDbl() dados com dupla preciso. CStr() dados texto (String). Ento o programa teste para a entrada do valor de x ser:
O texto entre aspas o que o usurio ir receber na caixa de texto. Dentro das aspas o programador poder programar e escrever qualquer tipo de texto, pois a caixa reproduzir toda informao entre aspas. O resultado para o usurio ser:
24
Ao entrar com os dados o usurio informa ao computador o valor da varivel x e ento o computador poder fazer os clculos necessrios pois conhecer quem essa varivel. Mas, como o usurio visualizar o resultado das operaes programadas. Isso o que se chama sada de dados.
O exemplo a seguir mostra como a entrada de x apresentada na sada ao usurio atravs dos dois comandos InputBox e MsgBox.
25
O resultado ser a caixa de mensagem a seguir informando ao usurio o valor 2 que o usurio entrou na caixa InputBox.
Exemplo 2.1 Fazer um programa para calcular e mostrar ao usurio o valor de y dado pela equao y = 2 x + 4 . Quem a entrada desse programa? Claro que ser a varivel x enquanto a varivel y ser a sada que dever ser visualizada pelo usurio. E quais os tipos de resultados? Para qualquer valor de x, teremos valores de y desde que eles respeitem a regra da equao proposta. Ento x poder ser inteiro, racional ou real. Logo tanto a varivel de entrada x quanto a varivel de sada y sero nmeros reais. A macro programada nesse caso ser a apresentada a seguir.
26
O leitor iniciante perceber que o produto deve ser indicado pelo smbolo * . Sem esse smbolo o computador no saber que a constante x deve ser multiplicada por dois. Aqui cabe um parntesis. Na verdade y no igual a 2*x+4, mas sim ela est recebendo dessa operao um certo valor que dever ser armazenada numa certa posio de memria. O mais correto e aplicado durante muito tempo em cursos de computao tradicionais era que
y 2* x + 4
Essa sim a representao mais correta para no confundir principiantes de que se y=x ento x=y em qualquer parte do programa. Se na linha de baixo do programa, aparecer uma outra operao envolvendo y, o valor de x no ser alterado. Observe o exemplo a seguir 2.2. A pergunta nesse algoritmo ser: Qual o valor final de x quando o usurio entra com o valor x = 5? O valor de x ser 1 ou 5? Observe que quem recebe o valor de x y e no x recebe o valor de y. A notao mais correta
yx
que indica que y est recebe o valor de y, mas nada informado ao computador sobre o valor de x. Logo essa varivel x ter na memria o mesmo valor que o usurio entrou. Ou seja, no exemplo 2.2 se o usurio entrar com x = 5 a sada ser y = 1, pois y est recendo antes da apresentao na caixa de mensagens o valor 1 ou
y 1
27
Exemplo 2.2
A execuo desse programa usando x = 5 tem como resultado y = 1 conforme mostrado nas duas telas de execuo:
Exemplo 2.3
Elaborar um programa que onde o usurio entre com o valor de x e o programa mostre o valor de y respeitando a equao y = x 2 + 2 x + 5 . Aqui a novidade apenas como elevar a varivel ao quadrado, onde para isso o programador dever usar o smbolo ^ entre o x e a potncia. A soluo ser:
28
Exemplo 2.4
O usurio dever entrar com x e o programa imprimir o resultado da equao y= x A novidade nesse programa que a linguagem VBA assim como outras linguagens uma funo pr-definida para extrair a raiz quadrada de um nmero. No caso do VBA a funo Sqr( ), que vem da palavra em ingls Square Root (raiz quadrada).
Exemplo 2.5 {Descobrindo o ano de nascimento} Fazer um algoritmo onde o computador dever descobrir o ano de nascimento do usurio.
Esse algoritmo causa a sensao no usurio, de que o computador pensa ao responder. Logicamente s uma sensao pois o computador dever seguir lgica de linhas de pensamento humanas para poder dar a resposta. Assim, quando desejamos saber em que ano uma pessoa nasceu, qual a primeira pergunta que surge? bvio que ser: qual sua idade. E depois o que se faz subtrair o ano em que se est da idade da pessoa. Ento a linha de passos que o computador dever seguir ser: 1. 2. 3. 4. Usurio dever entrar com a idade. Ano atual subtrado da idade. Ano de nascimento recebe valor da operao ano atual subtrado da idade. Mostre o valor de ano de nascimento na caixa de mensagens.
29
Em termos de algoritmo a soluo ser: 1. Leia idade. 2. anonasc = 2007 idade 3. imprima anonasc Deve ser observado que nunca se pode usar uma varivel com nomes muito grande ou separada por espaos em branco. Para o programador sempre interessante usar nomes sugestivos da varivel ou se for o caso, usar o sinal de subscrio _ e nunca o hfen -. A varivel ano de nascimento poderia ser: anonasc, anonac, ano_nas, ano_de_nascimento, etc. Mas nunca ano de nascimento pois isso ocasionaria o chamado erro de compilao como pode ser observado a seguir.
Ento a soluo para esse algoritmo muito simples e a menos do cuidado dos nomes das variveis, acaba sendo mais simples do que os demais, mas causa a sensao de que o computador est realmente pensando sobre seu ano de nascimento.
30
Exemplo 2.6 {Descobrindo a idade} Fazer um algoritmo para descobrir a idade do usurio. Esse algoritmo o problema inverso do exemplo anterior, onde agora o computador deve descobrir a idade do usurio. A pergunta que o algoritmo deve fazer sobre o ano de nascimento do usurio. O algoritmo fica:
O leitor pode observar que a novidade nesse algoritmo a impresso na caixa de mensagem de texto aps a impresso da varivel. Sempre que se desejar continuar uma impresso de texto aps o aparecimento do valor das variveis, deve-se usar o smbolo & antes da varivel e atrs da varivel, para indicar que a caixa conter um texto logo a seguir.
Exemplo 2.7 {Raio de um crculo} Fazer um algoritmo onde o usurio entra com o raio de crculo e o programa mostra ao usurio a rea do crculo.
31
no existe vrgula separando as casas decimais como numa planilha comum do Excel com ortografia em Portugus. A separao deve ser feita com ponto decimal (.). Assim a constante pi deve ser 3.14 e no 3,14 na programao. A soluo apresentada na macro a seguir.
Um usurio possui aplicado dinheiro em trs tipos de investimentos que fornecem trs tipos de retornos diferentes conforme a tabela a seguir:
Retorno 12 9 6 Probabilidade 1/3 1/3 1/3 Evento 1 2 3
R=
3 i =1
ri
Fazer um algoritmo que pea ao usurio os trs retornos de investimento e assumindo uma probabilidade de ocorrncia de sucesso igual para os trs investimentos iguais a p calcule o retorno mdio pela frmula anterior.
Nesse caso, a probabilidade p deve ser solicitada pelo programa ao usurio e a soma dos trs retornos r1, r2 e r3 multiplicada por ela. O algoritmo :
32
Exemplo 2.9 { Algoritmo da adivinhao} 1. Pea ao usurio para digitar a idade dele. 2. Mande uma mensagem para ele pensar num nmero diferente de zero. 3. Mande uma mensagem para ele multiplicar o nmero pensado por 2. 4. Mande ele somar mentalmente o nmero resultante pelo nmero 6. 5. Mande uma mensagem para ele dividir o resultado pelo nmero 2. 6. Envie uma mensagem para ele subtrair o resultado obtido do valor do primeiro nmero pensado. 7. Mande a mensagem: O resultado 3
Por que esse algoritmo funciona e sempre fornece o resultado 3? Observe o que acontece com a matemtica das operaes que est por trs da brincadeira desse algoritmo.
33
ogo para qualquer nmero pensado o resultado sempre ser o nmero 3. O leitor deve estar perguntando porque a varivel idade entrou no programa. Para nada! Ela apenas entra para o usurio pensar que a idade tem alguma importncia no programa, mas na verdade ela no usada.
onde os comandos so lgicas operacionais do programa que estaro sujeitas a condio ser verdadeira ou falsa depois do If. Se a condio for verdadeira ento a linha logo abaixo do Then verdade e sero obedecidos esses comandos no programa. Caso seja falso depois do Else entra os comandos para essa condio. A estrutura if-then-else tem um resultado lgico binrio que divide o programa em ramos verdadeiros e falsos. Mas ateno todo if deve terminar com um End If.
34
Exemplo 2.10 Fazer um algoritmo que leia um nmero inteiro. Se esse nmero for menor ou igual do que 10 o programa envia uma mensagem ao usurio prejuzo. Caso contrrio mande uma mensagem lucro.
Esse algoritmo desvia depois da leitura o programa para a linha abaixo depois do Then caso o nmero fornecido pelo usurio seja menor que 10. Caso contrrio, o compilador manda o programa pular todas as ordens at encontrar o comando Else onde ento executar esses comandos at encontrar o End If.
Exemplo 2.11 Se uma conta bancria contm saldo inferior a R$10.000,00 o banco pagar juros de 2% ao ms na remunerao da conta-poupana. Se o saldo for superior a R$10.000,00 o banco pagar juros de 3% ao ms. Fazer um programa onde o usurio entra com o saldo de sua conta bancria e o programa informa o saldo corrigido.
35
O resultado ser
Muitas vezes necessrio encadear muitos if para traduzir o pensamento lgico desejado na soluo de um problema. Alm da estrutura if-then-else existe a possibilidade do uso do elseif que significa caso contrrio se. Esse comando lgico deve ser usado quando indicado ao computador que ao negar uma afirmao ele o faa em troca de outra pergunta lgica. Isso no significa que sempre que ocorrer uma falsidade na afirmao deve-se utilizar o comando elseif. s vezes o uso de vrios if um aps o outro pode resolver o problema da mesma forma.
Exemplo 2.12 No exemplo 2.10, suponha agora que se a conta possuir saldo inferior a R$10.000,00 o banco pagar juros de 2%. Mas diferente do exemplo anterior, assuma agora que para cada R$5.000,00 adicional acima de R$10.000,00 o banco pagar 0,5% a mais at atingir a taxa limite de 4%. Fazer um programa para calcular quanto uma conta bancria nessas condies ter no final do ms.
36
Algumas observaes importantes devem ser feitas a cerca desse exemplo com o uso do elseif. Se o saldo for inferior a R$10.000,00 a taxa assumida ser de 0,02 que corresponde a 2%. Mas caso contrrio, ou seja, se a taxa igual ou superior o computador deve perguntar se ela menor que R$15.000,00. Ento a diferena entre um else e um elseif que quando existe uma negao e o computador tem um elseif, ele no est somente verificando a negao da condio anterior, mas tambm perguntando se com a primeira negao a segunda condio satisfeita. Ento a parte do programa a seguir
Exerccio 2.13 Fazer um programa onde o computador leia um nmero inteiro fornecido pelo usurio e envia uma mensagem se esse nmero par ou mpar.
Discusso da resoluo Existem diversas maneiras de programar e pensar no algoritmo para resolver esse simples problema. O primeiro recordar dos tempos colegiais como esto relacionados os termos de uma diviso: divisor, dividendo, quociente e resto.
Dividendo Resto
Divisor Quociente
37
Uma outra forma de resolver esse problema fazendo o uso da funo mod que toda linguagem de programao possui. Essa funo j fornece o resto da diviso entre dois nmeros e sua utilizao segue a seguinte regra: x = num1 mod num2 e o resultado para x ser o resto da diviso de num1 por num2. Ento para o exemplo do nmero par ou mpar o programa fica como a seguir.
A ltima soluo apresentada a mais simples de todas. Para saber se o nmero par ou mpar basta usar a regra matemtica da potenciao do nmero (-1). Ou seja, todo nmero negativo elevado a nmero par ser positivo e elevado a mpar ser negativo. Ento basta programar uma condio lgica que verifica se o sinal dessa operao positivo ou negativo. A soluo apresentada a seguir.
38
Nesse ponto o leitor pode ficar confuso e se perguntar sobre qual soluo a mais correta?. A resposta que todas as formas so corretas desde que o resultado final seja correto. Claro que existem algumas solues mais rebuscadas e confusas com passos a mais que outras mais claras e objetivas. Esse tipo de anlise que faz a diferena num programador, que se faz entender aos outros ou somente a si prprio em sua programao. No entanto, sob o ponto de vista de anlise, se o programa solucionou o problema de forma correta em todos os passos, tanto faz a forma de resolver. O diferencial que o melhor programador se destaca perante aos outros se alm de mais elegante e simples seu programa economizar memria, o que significa economizar energia e tempo dispensado no trabalho.
2.4 Exerccios
(1) Fazer um algoritmo e programa em VBA-Excel onde o usurio entra com um nmero e o programa imprime uma mensagem dizendo se o nmero positivo ou negativo. (2) Fazer um algoritmo e programa em VBA-Excel onde o usurio entra com 3 nmeros usando InputBox e o programa calcula a mdia. (3) Projetar um algoritmo onde o usurio entra com 3 nmeros usando InputBox e o programa descobre e imprime uma mensagem dizendo qual o maior e qual o menor. (4) Fazer um programa onde o usurio entra via InputBox com dois nmeros reais. Se os dois nmeros forem iguais o programa deve enviar uma mensagem com o valor da soma de outras duas variveis X =2 e Y=1 .Se os dois nmeros forem diferentes o programa deve imprimir uma mensagem mostrando o valor da subtrao de X e Y.
39
(5) Dados 3 lados de um tringulo qualquer, fazer um programa onde ele descobre se o tringulo eqiltero, isceles ou escaleno. (6) Um comerciante deseja entrar com o valor de compra de uma mercadoria, o valor de venda da mesma e descobrir se o lucro foi <10%, entre 10% e 20%, ou ainda superior a 20%. Fazer um programa que imprima a mensagem dizendo em qual faixa a mercadoria do comerciante se localiza. (8) A frmula de converso de graus Farenheit para centgrados obtida por 5( F 32) C= 9 Fazer um algoritmo e programa em VBA-Excel onde o usurio entra com o grau F (Farenheit) e o programa mostra o valor em centgrados. (9) Fazer um programa onde o usurio entra com dois nmeros e programa imprime uma mensagem dizendo quantos % o primeiro menor que o segundo, ou caso contrrio, quantos % o primeiro maior que o segundo. (10) Lembrar do programa do retorno mdio da aula. Fazer um programa onde no mais os eventos tem mesma probabilidade de ocorrer. Ou seja, suponha o caso onde
Retorno 12 9 6
Evento 1 2 3
Quais so as entradas. Quais so as sadas. Programar novamente o algoritmo levando em conta que as probabilidades dos eventos so diferentes.
(11) Fazer um programa onde o usurio entra com 03 nmeros x1, x2 e x3 e o programa mostra numa MsgBox o valor da media dos nmeros e em outra MsgBox o valor do desvio padro. (12) Fazer um programa onde o usurio entra com os limites de um intervalo (inferior e superior) e logo em seguida o computador pede um nmero qualquer a esse usurio. Se o nmero pertence ao intervalo do usurio o programa manda uma mensagem pertence caso contrrio uma mensagem no pertence.
40
(13) O suporte de uma ao calculado como 30% do intervalo histrico de uma ao (mximo subtrado do mnimo). A resistncia calculada como o valor de 60% do intervalo histrico. Veja o exemplo: Baixa histrica: 1,50 Alta histrica: 2,20 Suporte: 1,5 + (2,20-1,50)*0,3 Resistncia: 1,5 + (2,20 1,5)*0,6 Faa um programa onde o usurio fornea o valor mais baixo historicamente e o valor mais alto e o programa diz qual o suporte e qual a resistncia. (14) Considere uma equao do segundo grau
Ax 2 + Bx + C = 0
Utilizando-se da varivel DELTA = B 2 4 AC escreva uma macro que calcule as razes da equao tal que: (i) Se no houver razes (DELTA<0) o programa retorna a mensagem no existem razes reais. (ii) Se houver uma nica raiz (DELTA = 0) o programa mostra ao usurio a nica raiz calculada como X1 = -B / (2*a) (iii) Se houver duas razes mostre ao usurio calculando-as da forma: X1 = ( -B + Sqr(DELTA) ) / ( 2*A ) X2 = ( -B - Sqr(DELTA) ) / ( 2*A ) Onde Sqr a funo do VBA para calcular a raiz quadrada de um nmero real.
(15) Fazer um programa que leia um nmero. Se o valor for negativo, inverter-lhe o sinal. Em qualquer caso, imprimir a raiz quadrada do nmero resultante. (16) Em uma disciplina, a nota final calculada pela mdia ponderada das trs notas do semestre: trabalho, prova escrita e laboratrio. O peso das notas na mdia , respectivamente 2, 5 e 3. As notas variam de 0 a 10 e o aluno considerado aprovado se a nota final for maior ou igual a 6. Elaborar um programa para calcular a nota final de um aluno e enviar uma mensagem se ele foi aprovado ou no. (17) Fazer um programa para ler trs valores {A, B,C}. Se A + B for menor do que C, enviar a mensagem dados errados. Caso contrrio, enviar a mensagem dados corretos. (18) Fazer um programa para ler dois nmeros inteiros A e B. Se A = B, atribuir para uma varivel X o valor 1.5 e para uma varivel Y o valor 2.5. Caso contrrio, atribuir os valores -1.5 e -2.5. Em todos os casos, imprimir os valores de X e Y.
41
(19) Fazer um programa para ler trs valores inteiros, A, B e C. Enviar uma mensagem de qual deles o menor nmero. (20) A tabela abaixo fornece os descontos de uma compra. Fazer um programa que leia o valor de uma compra, determine o desconto a ser aplicado e calcule o valor a ser pago pelo cliente. Tabela:
Valor da Compra (R$) Entre 0 e 20,00 Entre 21 e 50 Entre 51 e 100 Entre 101 e 1000 Maior que 1000
Desconto (%) 5 10 15 20 30
(21) Escreva um programa para ler um valor de um ngulo em graus, converter esse valor em radianos e enviar o valor em uma mensagem para o usurio. (22) Dados trs pontos (x1,y1), (x2,y2) e (x3,y3), escrever um programa para verificar se esses pontos esto alinhados. A condio de alinhamentos de trs pontos : y 3 y1 y 2 y 3 = x3 x1 x 2 x3
42