VB . NET - Calculadora Científica
Que tal uma calculadora cientifica feita no VB .NET ?
Se você pensa que é necessário um código muito complexo para fazer uma calculadora científica vai se espantar ao ver o código desta que eu apresento aqui. O código precisa de refinamento mas mostra que com criatividade você pode fazer coisas incríveis com a linguagem Visual Basic.
Na verdade este código foi praticamente aproveitado como esta de um projeto feito em Visual Basic 6 : VB 6 - Calculadora Cientifica.
Com certeza pode ser refeito inteiramente usando os novos recursos do VB .NET mas apenas para mostrar que existe uma certa compatibilidade a nível de instruções e lógica o código foi aproveitado em um projeto VB .NET.
Calculadora Científica
Abra o Visual Basic 2008 Express Edition e crie um novo projeto do tipo Windows Forms Application e com o nome de Calculadora;
A seguir altere o nome do formulário form1 para calculadora.vb;
Crie o seguinte leiaute no formulário do projeto:
Efetue as seguintes definições no início do formulário:
Option
Strict OffDeclare as seguintes variáveis no formulário:
Dim op1 As Double Dim res As Double Dim op2 As Double Dim n As Double Dim i As Short Dim operador_Renomeado As String Dim s As String Dim c As StringA seguir inclua o código abaixo no formulário:
Private Sub cmdclear_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdclear.ClicktxtResultado.Text = "" End SubPrivate Sub cmddegrad_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmddegrad.Click
op1 = Val(txtResultado.Text) Select Case (Index) Case 0res = op1 * 3.142 / 180 Case 1res = 180 * op1 / 3.142 End SelecttxtResultado.Text = CStr(res) End SubPrivate Sub cmde_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmde.Click txtResultado.Text = "2.71828182845904523536" End SubPrivate Sub cmdlog_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdlog.Click Dim Index As Short = cmdlog.GetIndex(eventSender) op1 = Val(txtResultado.Text) Select Case (Index) Case 0res = System.Math.Log(op1) Case 1res = System.Math.Log(op1) / System.Math.Log(10) Case 2res = 10 ^ op1 End SelecttxtResultado.Text = CStr(res) End SubPrivate Sub cmdmemory_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdmemory.Click Dim Index As Short = cmdmemory.GetIndex(eventSender) Static m As Double Select Case (Index) Case 0 m = m + Val(txtResultado.Text) Case 1m = m - Val(txtResultado.Text) Case 2m = 0 txtResultado.Text = "" Case 3txtResultado.Text = CStr(m)MsgBox(m) End Select If m = 0 ThenText1.Text = "" ElseText1.Text = "M" End If End SubPrivate Sub cmdnumber_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdnumber.Click Dim Index As Short = cmdnumber.GetIndex(eventSender) Select Case (Index) Case 0 txtResultado.Text = txtResultado.Text & "1" Case 1txtResultado.Text = txtResultado.Text & "2" Case 2txtResultado.Text = txtResultado.Text & "3" Case 3txtResultado.Text = txtResultado.Text & "4" Case 4txtResultado.Text = txtResultado.Text & "5" Case 5txtResultado.Text = txtResultado.Text & "6" Case 6txtResultado.Text = txtResultado.Text & "7" Case 7txtResultado.Text = txtResultado.Text & "8" Case 8txtResultado.Text = txtResultado.Text & "9" Case 9txtResultado.Text = txtResultado.Text & "0" Case 10txtResultado.Text = txtResultado.Text & "." Case 11txtResultado.Text = txtResultado.Text & "A" Case 12txtResultado.Text = txtResultado.Text & "B" Case 13txtResultado.Text = txtResultado.Text & "C" Case 14txtResultado.Text = txtResultado.Text & "D" Case 15txtResultado.Text = txtResultado.Text & "E" Case 16txtResultado.Text = txtResultado.Text & "F" End Select End SubPrivate Sub cmdoperation_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdoperation.Click Dim Index As Short = cmdoperation.GetIndex(eventSender) On Error GoTo trataerro Select Case (Index) Case 0 op1 = Val(txtResultado.Text) operador_Renomeado = "/"txtResultado.Text = "" Case 1op1 = Val(txtResultado.Text) operador_Renomeado = "*"txtResultado.Text = "" Case 2op1 = Val(txtResultado.Text) operador_Renomeado = "+"txtResultado.Text = "" Case 3op1 = Val(txtResultado.Text) operador_Renomeado = "-"txtResultado.Text = "" Case 5op1 = Val(txtResultado.Text) operador_Renomeado = "^"txtResultado.Text = "" Case 6op1 = Val(txtResultado.Text) operador_Renomeado = "%"txtResultado.Text = "" Case 7op1 = Val(txtResultado.Text) operador_Renomeado = "$"txtResultado.Text = "" Case 4op2 = Val(txtResultado.Text) Select Case (operador_Renomeado) Case "+"res = op1 + op2 Case "-"res = op1 - op2 Case "*"res = op1 * op2 Case "/"res = op1 / op2 Case "^"res = op1 ^ op2 Case "%"res = op1 / op2 * 100 Case "$"res = op1 ^ (1 / op2) End SelecttxtResultado.Text = CStr(res)op1 = res End Select Exit Subtrataerro: MsgBox( "Erro no processamento.") End SubPrivate Sub cmdpercent_Click() res = res * 100 txtResultado.Text = CStr(res) End SubPrivate Sub cmdpi_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdpi.Click txtResultado.Text = CStr(62832 / 20000) '22 / 7 End SubPrivate Sub cmdpn_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdpn.Click res = Val(txtResultado.Text) res = -(res) txtResultado.Text = CStr(res) End SubPrivate Sub cmdsqr_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdsqr.Click Dim Index As Short = cmdsqr.GetIndex(eventSender) op1 = Val(txtResultado.Text) Select Case (Index) Case 0res = op1 * op1 * op1 Case 1res = op1 * op1 Case 2res = System.Math.Sqrt(op1) Case 3res = 1 / op1 Case 4n = 1 For i = 1 To op1n = i * n Next ires = n End SelecttxtResultado.Text = CStr(res) End SubPrivate Sub cmdtrigno_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdtrigno.Click Dim Index As Short = cmdtrigno.GetIndex(eventSender) op1 = Val(txtResultado.Text) Select Case (Index) Case 0 res = System.Math.Sin(op1 * 3.142 / 180) Case 1 res = System.Math.Cos(op1 * 3.142 / 180) Case 2 res = System.Math.Tan(op1 * 3.142 / 180) Case 3 res = 1 / System.Math.Tan(op1 * 3.142 / 180) End Select txtResultado.Text = CStr(res) End SubPrivate Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command1.Click s = txtResultado.Text c = CStr(Len(s)) If CDbl(c) = 0 Then txtResultado.Text = "" Elsec = CStr(CDbl(c) - 1)txtResultado.Text = VB.Left(s, CInt(c)) End IfEnd Sub Private Sub Form1_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load txtResultado.Text = "www.macoratti.net" End Sub |
E pronto ! podemos testar a calculadora:
Pegue o projeto completo aqui : CalculadoraCientificaNET.zip
Sugestões para melhorar o código:
1- Remova o tratamento de erro
On error Goto TrataErro e inclua um
Try/Catch (pelo amor de Deus...)
2- Utilize as novas funções para tratar Strings e operações numéricas do VB .NET
3- Analise a possibilidade de aplicar os conceitos de orientação a objeto ao
código usado: Classes, Interfaces, Design Patters, etc...
4- Corrija os possíveis bugs que com certeza irão ocorrer
durante a sua utilização (eu não testei todas as operações)
Nota: Para saber mais acompanhe os meus artigos:
Bom Estudo...
Eu sei é apenas Visual Basic , mas eu gosto...
José Carlos Macoratti