Visual Basic 6 - Avaliando expressões matemáticas
Para encerrar o ciclo de artigos sobre o Visual Basic e a matemática deste ano , vou mostrar aqui como podemos usar o VB para avaliar e resolver expressões matemáticas.
Vou começar fazendo uma pergunta: É possível fazer um programa em Visual Basic que resolva expressões matemáticas ?? Vou ser mais objetivo. Como eu faria para resolver expressões matemáticas envolvendo operações matemáticas de subtração , adição , divisão , exponenciação , raiz quadrada , etc. ?
A ideia é que o usuário possa entrar com uma expressão matemática em um formulário e que o VB obtenha o resultado da expressão. Vamos a um exemplo :como poderiamos resolver uma expressão como a seguinte:
(-5 ^ 2) * 3 / (SQR(11 - 2 ) * .5) ^ 2
Se você não lembra , os principais operadores e funções matemáticas do VB são :
Operador | Significado |
+, - | Uniário positivo, negativo |
+ | Adição |
- | Subtração |
* | Multiplicação |
/ | Divisão |
Mod |
Retorna o resto da divisão entre dois números |
As principais funções são:
|
Na expressão - (-5 ^ 2) * 3 / (SQR(11 - 2 ) * .5) ^ 2 - queremos efetuar o calcula da expressão acima na seguinte ordem:
Parece uma tarefa bem complexa , não é mesmo ? Como faremos para resolver isto ?
Calma !!! O Visual Basic sempre tem um 'Ás guardado sob a manga' ...
Podemos descascar este 'abacaxi' de uma maneira bem mais fácil do que você esta imaginando...
Na verdade uma única linha de código é o suficiente para que o Visual Basic avalie expressões matemáticas e nos de o resultado.
Basta você usar o método Eval do objeto ScriptControl . Para ter acesso ao método você vai precisar referenciar o objeto no menu Project-> Components e selecionando a library : Microsoft Script Control 1.0.
O objeto ScriptControl possui além do método Eval outros métodos , propriedades e eventos que , por questão de simplicidade eu não vou abordar neste artigo. Vou portanto me ater ao método Eval :
O método Eval avalia uma expressão e retorna o resultado .Sua sintaxe é a seguinte:
object.Eval(expression)
Onde:
1- Object -
é o objeto ScriptControl.
2- expression - é uma string que contém uma expressão a ser
avaliada.
Obs: O contexto do método Eval é
determinado pelo objeto. Se o objeto é um módulo o contexto
estará restrito ao módulo se o objeto for o ScriptControl o
contexto é global.
Criando o projeto
Vamos agora aplicar esta teoria e mostrar que ela funciona, vamos criar um projeto no VB que resolver expressões matemáticas usando o método Eval do objeto ScriptControl.
1 - Crie um novo projeto no Visual Basic e no formulário padrão - que vou chamar de frmavalia.frm - insira os controles : TextBox , CommandButton , frame , label , e o componente ScriptControl , conforme abaixo:
2- Feito isto vamos inserir o código associado aos botões de comando (estou usando um array de controles). O indice 0 refere-se ao botão - Resolver Expressão - que chama o método Eval para resolver a expressão (txtresultado.Text = Resolve_Expressao(txtExpressao.Text) . O índice 1 refere-se ao botão - Novo Cálculo - que limpa os controles do formulário. (eu estou copiando o resultado para a área de transferência)
Private Sub Command1_Click(Index As Integer) Select Case Index Case 0 'resolve expressao On Error GoTo trata_erro frmResultado.Visible = True txtresultado.Text = Resolve_Expressao(txtExpressao.Text) Clipboard.SetText txtExpressao.Text & " = " & Trim(txtresultado.Text) Exit Sub trata_erro: If Err.Number = 1002 Then MsgBox "Erro de sintaxe na expressão , verifique a colocação dos parênteses '( )' !", vbCritical,_ "Erro na expressão" ElseIf Err.Number = 5 Then MsgBox "Operação inválida , !", vbCritical, "Erro na expressão" Else MsgBox Err.Number & " - " & vbCrLf & Err.Description End If Case 1 ' novo calculo frmResultado.Visible = False txtExpressao.SetFocus txtExpressao.SelStart = 0 txtExpressao.SelLength = Len(txtExpressao.Text) End Select End Sub |
3- O código da função - Resolve_Expressão - é o seguinte : A função avalia a expressão usando Eval.
Private Function Resolve_Expressao(expressao As String) Resolve_Expressao = ScriptControl1.Eval(expressao) End Function |
Não disse que era apenas uma linha de código !!!
Vamos rodar o projeto e ver se funciona. Abaixo o resultado para a expressão :
((( -5 ^ 2) * 3 )/ ( SQR((11 - 2 )) * .5)) ^ 2
Vamos
conferir ? 1- 5 ^ 2 * 3 = 75 2- SQR((11-2)) * 0,5 ^2 = 2,25 Dividindo 75(1) por 2,25(2) temos : 33,333333333 confere com o resultado!!! |
Observe que tivemos que utilizar os parênteses para delinear as precedências dos operadores. Se não tomarmos este cuidado o resultado não estará correto.
Quer outro exemplo !!! Que tal avaliar se uma expressão é verdadeira ou falsa ??? Sem problemas... veja..:
Este artigo encerra a série - VB e a matemática - pelos menos por este ano...
Até o próximo artigo... (o projeto completo esta no Super DVD Visual Basic)
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências: