Procalc v1.0
Versão Programador
Conteúdo
Procalc ... 4 Primeiros botões ... 5 Funções Básicas ... 6 Como funciona ... 7 Funções avançadas ... 8 Logaritmo ... 8 Logaritmo Natural ... 9 Expoente ... 10 Factorial ... 11 Raiz quadrada e raiz cúbica ... 12 Seno, Cosseno e Tangente ... 13 Funções extra ... 15 Funções e Gráficos ... 16 Imprimir ... 18 Menu Ficheiro ... 19 Copiar / Colar / Cortar / Seleccionar Tudo / Sair ... 19 Sair ... 19Procalc
Procalc uma calculadora científica e gráfica programada em Visual Basic. Esta calculadora promete ser precisa e eficiente em todo o tipo de aplicações. Dispõe de um design exclusivo e é uma excelente alternativa às calculadoras convencionais. Esta inovadora ferramenta de trabalho, de fácil utilização mostra como é possível transportar com grande facilidade a programação mais avançada apenas num pequeno aplicativo. Todo o código foi estruturado de forma a obter o melhor desempenho possível. Através de avançadas fórmulas matemáticas foi‐nos possível criar comandos semelhantes aos das calculadoras científicas e gráficas. Funções trigonométricas como seno, co‐seno e tangente, foram verdadeiros desafios da programação, tal como o cálculo do logaritmo, factorial e raiz cúbica. Não obstante das funções gráficas, não podemos deixar de mencionar a relação de conhecimentos matemáticos com o domínio do tratamento de imagem numa linguagem de programação. Podemos afirmar desta forma que atingimos com sucesso, um grande objectivo do projecto, a criação de gráficos através de funções.Primeiros botões
Criamos um controlo arrays através da propriedade caption do visual Basic. Incluímos também instruções, ciclos e variáveis para controlar o valor inserido, desta forma evitamos a criação de erros em quanto digitamos números. Este código foi construído para que quando carregamos nos botões numéricos, o valor seja acrescentado no display da direita para a esquerda. Acrescentamos o Botão desligar e o display da maquina. O display é uma textbox do visual Basic e o botão off contem a instrução Unload Me para descarregar o programa da memória. Private Sub Command1_Click(Index As Integer) If ind = 4 Then prev = 0 Text1.Text = "" ind = 0 End If opnre = 0 If oflag = 0 Then Text1.Text = " " End If oflag = 1 If Command1(Index).Caption <> "." Then If Text1.Text <> " 0" Then Text1.Text = Text1.Text & Command1(Index).Caption Else Text1.Text = " " & Command1(Index).Caption End If Else If dflag = 0 Then Text1.Text = Text1.Text & "." dflag = 1 Else MsgBox ("Erro") End If End If End Sub
Funções Básicas
Para começar construímos as funções básicas de qualquer calculadora como, somar, subtrair, multiplicar, dividir, percentagem e igual. Mais uma vez através de arrays de Index distinguimos as funções atribuídas a cada botão. Para cada operação temos uma forma de cálculo, ou seja algumas funções já vêm incluídas no visual Basic, outras temos de ser nós a construir código de forma a obter o resultado pretendido, por exemplo: ‐ O cálculo de um expoente pode ser feito através de um símbolo ASCII em vez de fazer o cálculo por extenso. Ou seja, para o resultado de 53 podemos fazer de duas formas. Resultado = 5 x 5 x 5 ou Resultado = 5 ^ 3 O mesmo se passa com outros caracteres como a soma(+), subtracção(‐), divisão(/), multiplicação (x), etc. Embora este método simplifique a programação existe ainda muito trabalho para fazer. Por exemplo, para achar a raiz cúbica de um número temos que escrever a formula por extenso, tal como Newton a escreveu. Para 3√6 temos : Resultado = 6 ^ (1 / 3) Private Sub Command2_Click(Index As Integer) If VF = True Then Dim pica As Integer pica = Text1.Text Text1.Text = var1 ^ pica VF = False Else End If Dim n As Long Dim r As Long If opnre = 0 Or Index = 4 Then If ind = 0 Then prev = prev + Val(Text1.Text) ElseIf ind = 1 Then prev = prev ‐ Val(Text1.Text) ElseIf ind = 6 Then prev = prev Mod Val(Text1.Text) ElseIf ind = 7 Then r = Fix(Val(Text1.Text)) n = Fix(Val(prev))Como funciona
A melhor forma que encontramos para calcular valores é através do armazenamento em variáveis, ou seja, sempre que introduzimos um valor e depois carregamos numa tecla de função (soma por exemplo), esse valor fica guardado na memória através de uma variável até ser novamente necessário. Por exemplo, para o cálculo de 3+2= No código temos declarado a variável VAR1, depois de o utilizador ter introduzido o número 3 e carregado na tecla (+) o valor será armazenado na memória ou seja (VAR1 = 3). Assim depois de o utilizador introduzir o número 2 e carregar na tecla igual (=) o código vai ser processado da seguinte forma: Resultado = var1 + 2Funções avançadas
Logaritmo
Já demos uma ideia de como funcionam as teclas mais básicas. Agora vamos mostrar como é que funcionam os botões da parte mais avançada. Comecemos pelo calculo do Logaritmo. Na Matemática, o Logaritmo de base b, maior que zero e diferente de 1, é uma função de domínio ]0;+∞[ e imagem injectiva e contínua que devolve o expoente na equação bn = x. Normalmente é escrito como logb x = n. Por exemplo: 34 = 81 portanto log381 = 4 Em termos simples o logaritmo é o expoente que uma dada base deve ter para produzir certa potência. No último exemplo o logaritmo de 81 na base 3 é 4, porque 4 é o expoente que a base 3 deve usar para obter 81. Para cálculo no visual Basic fazemos: If Val(Text1.Text) > 0 Then Text1.Text = Str((Log(Val(Text1.Text)) / Log(10))) Else MsgBox (" ILEGAL. Log não é positivo ") End If Nesta fórmula deixamos as variáveis de parte e trabalhamos directamente com os valores do display. Fizemos isto agora, e fazemos sempre que o resultado for de cálculo imediato, assim poupamos memória e aceleramos o processo.Logaritmo Natural
O logaritmo natural (LN) é o logaritmo de base ℮, onde ℮ é um número irracional aproximadamente igual a 2,718281828459045... (chamado Número de Euler). É, portanto, a função inversa da função exponencial. O logaritmo natural é definido para todos os números reais estritamente positivos, e admite uma extensão como uma função complexa analítica em C/{0} . Em termos simples, o logaritmo natural é uma função que é o expoente de uma potência de e, e aparece frequentemente nos processos naturais (o que explica o nome "logaritmo natural"). Esta função torna possível o estudo de fenómenos que evoluem de maneira exponencial. No visual Basic fazemos da seguinte forma: If val(Text1.Text) > 0 Then Text1.Text = Log(val(Text1.Text)) Else MsgBox (" ILEGAL. LN não é positivo ") End If Mas uma vez não foi necessária a criação de variáveis.Expoente
O expoente significa multiplicar um número real (base) por ele mesmo X vezes, onde X é a potência (número natural). Para x℮ temos: If Val(Text1.Text) < 700 Then Text1.Text = Str(Exp(Val(Text1.Text))) Else MsgBox (" OVERFLOW. Valor muito grande ") End If Sendo ℮ um valor constante na matemática. Para x2 e x3 temos
If (Val(Text1.Text)) < 1290 Then Text1.Text = Text1.Text ^ 2 (ou 3) Else MsgBox ("OVERFLOW.VALOR MUITO GRANDE ") End If
Para xy temos um processo diferente, vamos por passos.
O utilizador: ‐ introduz um valor ‐carrega no botão xy [O código guarda o valor numa variável (varX).] ‐ introduz o expoente ‐Carrega no (=) [O código guarda o expoente noutra variável (varY) e dispõe o código da seguinte forma, resultado = varX ^ varY.] Botão (xy): If Text1.Text <> "" Then varX = Text1.Text Text1.Text = "" VF = True Else End If Botão (=): If VF = True Then Dim varY As Integer varY = Text1.Text Text1.Text = varX ^ varY VF = False Else
Facto
positivorial
Na matemá os menores o A função fac Por exemplo 5! = 1 × 2 × Esta definiç 0! = 1 No visual Ba Text1.Text = ática, o factor ou iguais a n. ctorial é norm o, 3 × 4 × 5 = 12 ão implica em asic temos: = Str(fact(Val ial de um núm Isso é escrito malmente def 20 m particular q l(Text1.Text)) mero natural o como n! e li finida por: que: ) n é o produt do como "fac o de todos os ctorial de n ". s inteirosRaiz quadrada e raiz cúbica
Como já tínhamos mencionado a raiz cúbica calcula‐se através da fórmula: Resultado = var1 ^ (1 / 3) A raiz quadrada calcula‐se através de uma função predefinida do visual basic: Resultado = Sqr(Val(var1))Seno, Cosseno e Tangente
seno = cateto oposto dividido pela hipotenusa cosseno = cateto adjacente dividido pela hipotenusa tangente = cateto oposto dividido pelo cateto adjacente SENO‐ Text1.Text = Str(Sin(ang * Val(Text1.Text))) COSSENO‐ Text1.Text = Str((Atn(Val(Text1.Text))) / ang) TANGENT‐ Text1.Text = Str(Sin(ang * Val(Text1.Text)) / Cos(ang * Val(Text1.Text))) Em que str designa uma função numérica do visual Basic “ang” o tipo de ângulo a calcular, o valor é predefinido e pode ser seleccionado pelo utilizador. No Visual Basic temos : Private Sub Option2_Click(Index As Integer) Select Case Index Case 0 ang = 3.141592654 / 180 Case 1 ang = 1 Case 2 ang = 3.141592654 / 200 End Select End Sub No código acima vemos que é criado 3 parâmetros “no caso de” então se tiver a trabalhar normalmente em graus o valor ângulo que será usado para converter um valor em graus é resultado de 3.141592654 conhecido por e dividido por 180 ou sejaNeste caso o programador poderia deixar apenas o valor, uma vez que são valores fixos, o que não acontece porque iria dificultar o trabalho a programadores futuros que queriam analisar o código.
Funções extra
Estas teclas foram criadas a pensar em possíveis problemas do utilizador, assim tentamos facilitar com algumas funções simples. ‐ Introduz automaticamente o valor de . ‐ Guarda o valor do display, numa Label ao lado. ‐ Impressão rápida da janela actual.Funções e Gráficos
Uma função é determinada pelo seu gráfico e pela especificação do conjunto de chegada. Embora o conceito de gráfico esteja relacionado ao conceito de desenho, pode‐se falar do gráfico de funções em espaços de dimensão infinita. Através de uma PictureBox foi‐nos possível criar gráficos do tipo y=ax + b (rectas) e y=ax*x+bx+c (parábolas). Para aceder às funções e gráficos basta aceder no menu a gráfico e clicar criar aparecendo o seguinte menu, em que se pode recriar na forma gráfica funções do primeiro grau e do segundo grau e comparando estas sobre as mesmas, uma vez que ao criar nova função a anterior só será apagada se clicar no botão Limpar. No visual Basic temos: Private Sub Command53_Click() Graph.ScaleMode = 3 Dim a, b, RandomColor a = Text2.Text b = Text3.Text X = 0 Y = 50 RandomColor = QBColor(Rnd * 14) + 1X = (i ‐ 5000) / 50 Y1 = a * X + b O que o código acima realiza é criada duas textbox do tipo text, em que são definidos valores de referencia. De seguida é criada aleatoriamente uma cor para o desenho do gráfico entrando num ciclo que realizará 10000 ciclos para os valores introduzidos nas textbox para o tipo de função em questão. Assim podemos dizer que neste caso a recta é definida por 10000 pontos, embora na realidade se saiba que as rectas em termos de pontos são ilimitadas, em termos de programação criar um recta nesses termos o programa iria entrar em processamento infinito bloqueando como acontece diariamente ao utilizador comum.
Para as funções do segundo grau acontece exactamente o mesmo do acima descrito com a diferença que muda a expressão em questão e como a expressão contêm mais uma variável é adicionada uma textbox.
Private Sub Command55_Click() Graph.ScaleMode = 3 Dim a, b, RandomColor a = Text5.Text b = Text4.Text c = Text6.Text RandomColor = QBColor(Rnd * 14) + 1 For i = 1 To 10000 X = (i ‐ 5000) / 50 Y1 = a * X * X + b * X + c X1 = X
Imprimir
Esta opção do menu o que faz é um printscreen dos formulários do programa, ou seja em linguagem de utilizador comum é uma fotografia da janela do programa e passa‐a directamente para a impressora que estiver predefinida. Para tal acontecer é só associar o botão à função predefinida no visual Basic : Private Sub agora_Click() Me.PrintForm End Sub