vb - avaliando expressões matemáticas

Upload: eliseu-andre

Post on 19-Jul-2015

43 views

Category:

Documents


0 download

TRANSCRIPT

VB - Avaliando expresses matemticas

http://www.macoratti.net/vb_aval.htm

VB - Avaliando expresses matemticasPara encerrar o ciclo de artigos sobre o Visual Basic e a matemtica deste ano , vou mostrar aqui como podemos usar o VB para avaliar e resolver expresses matemticas. Vou comear fazendo uma pergunta: possvel fazer um programa em Visual Basic que resolva expresses matemticas ?? Vou ser mais objetivo. Como eu faria para resolver expresses matemticas envolvendo operaes matemticas de subtrao , adio , diviso , exponenciao , raiz quadrada , etc. ? A idia que o usurio possa entrar com uma expresso matemtica em um formulrio e que o VB obtenha o resultado da expresso. Vamos a um exemplo :como poderiamos resolver uma expresso como a seguinte:

(-5 ^ 2) * 3 / (SQR(11 - 2 ) * .5) ^ 2Se voc no lembra , os principais operadores e funes matemticas do VB so : Operador +, + * / Mod As principais funes so: Funes Matemticas Significado SQR ^ Clcula a raiz quadrada Exponenciao Significado Unirio positivo, negativo Adio Subtrao Multiplicao Diviso Retorna o resto da diviso entre dois nmeros

Na expresso - (-5 ^ 2) * 3 / (SQR(11 - 2 ) * .5) ^ 2 seguinte ordem:

- queremos efetuar o clcula da expresso acima na

1. - 5 ^ 2 e multiplicar o resultado por 3 2. Extrair a raiz quadrada da diferena entre 11 e 2 multiplicar por 0,5 e elevar o resultado ao 3.quadrado Dividir o resultado obtido em 1 pelo resultado obtido em 2

Parece uma tarefa bem complexa , no 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 fcil do que voc esta imaginando... Na verdade uma nica linha de cdigo o suficiente para que o Visual Basic avalie expresses matemticas e nos de o resultado. Basta voc usar o mtodo Eval do objeto ScriptControl . Para ter acesso ao mtodo voc vai precisar referenciar o objeto no menu Project-> Components e selecionando a library : Microsoft Script Control 1.0. O objeto ScriptControl possui alm do mtodo Eval outros mtodos , propriedades e eventos que , por questo de simplicidade eu no vou abordar neste artigo. Vou portanto me ater ao mtodo Eval

1 de 4

26/01/2012 20:38

VB - Avaliando expresses matemticas

http://www.macoratti.net/vb_aval.htm

: O mtodo Eval avalia uma expresso e retorna o resultado .Sua sintaxe a seguinte:

object.Eval(expression)Onde: 1- Object - o objeto ScriptControl. 2- expression - uma string que contm uma expresso a ser avaliada. Obs: O contexto do mtodo Eval method determinado pelo objeto. Se o objeto um mdulo o contexto estar restrito ao mdulo se o objeto for o ScriptControl o contexto global.

Criando o projetoVamos agora aplicar esta teoria e mostrar que ela funciona, vamos criar um projeto no VB que resolver expresses matemticas usando o mtodo Eval do objeto ScriptControl. 1 - Crie um novo projeto no Visual Basic e no formulrio padro - 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 cdigo associado aos botes de comando (estou usando um array de controles). O indice 0 refere-se ao boto - Resolver Expresso - que chama o mtodo Eval para resolver a expresso (txtresultado.Text = Resolve_Expressao(txtExpressao.Text) . O ndice 1 refere-se ao boto - Novo Clculo - que limpa os controles do formulrio. (eu estou copiando o resultado para a rea de transferncia) 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 expresso , verifique a colocao dos parnteses '( )' !", vbCritical,_ "Erro na expresso" ElseIf Err.Number = 5 Then MsgBox "Operao invlida , !", vbCritical, "Erro na expresso"

2 de 4

26/01/2012 20:38

VB - Avaliando expresses matemticas

http://www.macoratti.net/vb_aval.htm

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 cdigo da funo - Resolve_Expresso - o seguinte : A funo avalia a expresso usando Eval. Private Function Resolve_Expressao(expressao As String) Resolve_Expressao = End Function

ScriptControl1.Eval(expressao)

No disse que era apenas uma linha de cdigo !!! Vamos rodar o projeto e ver se funciona. Abaixo o resultado para a expresso : ((( -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 parnteses para delinear as precedncias dos operadores. Se no tomarmos este cuidado o resultado no estar correto. Quer outro exemplo !!! Que tal avaliar se uma expresso verdadeira ou falsa ??? Sem problemas... veja..:

3 de 4

26/01/2012 20:38

VB - Avaliando expresses matemticas

http://www.macoratti.net/vb_aval.htm

Este artigo encerra a srie - VB e a matemtica - pelos menos por este ano... At o prximo artigo... (o projeto completoesta no super CD VB)

Jos Carlos Macoratti

4 de 4

26/01/2012 20:38