 Visual Basic 6 - Avaliando expressões
matemáticas
 
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)
 (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 Facebook
  
 Compartilhe no Twitter
 
Compartilhe no Twitter 
Referências: