VB - Resolvendo uma equação do 2o. Grau


Continuando nossa série de artigos sobre VB e a matemática vamos mostrar como resolver uma equação do segundo grau. Estou usando a abordagem procedural e procurando tornar o código o mais simples possível. Vamos começar pelos conceitos matemáticos e depois vou mostrar como criar o projeto VB para resolver o problema.

Os conceitos Matemáticos

Toda equação do tipo ax²+bx+c, com coeficientes numéricos a, b e c com . é chamada de equação do 2o. grau . Exemplos:

Equação
a 
b 
c
x²+3x-1
1
3
-1
4x-x²-2
-1
4
-2
Para resolver estas equações, utilizamos a fórmula de Baskara que permite calcular as duas raízes simultaneamente. A fórmula é a seguinte:

Onde x é a raiz da equação do segundo grau.(podemos ter até duas raízes)

Toda equação do segundo grau terá ou não raizes reais em função do valor do discriminante :
De acordo com o valor do discriminante podemos ter os valores para Delta :

Classificação das equações do segundo grau

- Incompletas: Se um dos coeficientes ( b ou c ) for nulo, temos uma equação do 2º grau incompleta.

1º caso: b=0 ==> x²-9=0  =>  x²=9  =>  x=  =>  x=3

2º caso: c=0 ==> x²-9x=0 =>  Basta fatorar o fator comum x => x(x-9)=0  =>  x=0,9

3º caso: b=c=0 ==> 2x²=0  =>  x=0

O projeto para cálculo da equação do segundo grau

Como já conhecemos as regras de 'negócio' podemos implementar o algoritimo para resolver o problema. Na verdade a primeira coisa que devemos fazer sempre antes de sentar e codificar é fazer uma análise do problema e rascunhar um algoritimo com os passos necessários para chegarmos á solução do problema. Por falar nisto vejamo como ficaria um possível algoritimo representado no fluxograma abaixo para este nosso caso:

Bonitinho , não é mesmo ???

Agora vamos ao VB : inicie um novo projeto e no formulário padrão insira os controles conforme o layout abaixo:

- O usuário deverá informar os valores para os coeficientes de x^2 , x e para a constante.

- O coeficiente para x e para constante pode ser suprimido (basta clicar no checkbox ao lado do controle textbox)

- O resultado é exibido no frame da direita

- Para limpar os controles e começar de novo basta clicar em - Efetuar Novo Cálculo

O código do projeto

Vou mostrar somente o código mais importante e que realmente efetua a operação. Primeiro na seção - General Declarations do formulário temos as variáveis declaradas:

Option Explicit
Dim A As Single
Dim B As Single
Dim C As Single
Dim Discriminante As Single
Dim X1 As Single
Dim X2 As Single
Dim n As Integer
Dim mensagem As String
Lembra por que usamos - Option Explicit ??

Não lembra !!! Bem , fazemos isto para forçar a declaração de variáveis

Assim não podemos usar uma variável que não seja declarada antes

Agora o código do botão - Resolver Equação - que calcula o determinante e as raizes da equação.(se houver).

Private Sub cmdResolver_Click()

A = Val(txtCoX2.Text)
B = Val(txtCoX.Text)
C = Val(txtConst.Text)

If A = 0 Then
  MsgBox "O valor do coeficiente A não pode ser igual a zero.", vbCritical, mensagem
  Exit Sub
End If

cmdNovoCalculo.Enabled = True

Discriminante = (B ^ 2 - 4 * A * C)
If Discriminante < 0 Then
  lblX1Val = ""
  lblX2Val = ""
  MsgBox ("Esta equação não possui raizes reais !."), vbCritical, mensagem
Else
  X1 = (-B + Sqr(Discriminante)) / (2 * A)
  X2 = (-B - Sqr(Discriminante)) / (2 * A)
  If Discriminante = 0 Then
    lblX1Val = X1
    lblX2Val = X1
    MsgBox ("Esta equação possui duas raizes reais iguais."), vbInformation, mensagem
  Else
    lblX1Val = X1
    lblX2Val = X2
    MsgBox ("Esta equação possui duas raizes reais."), vbInformation, mensagem
  End If
End If

End Sub

Este código é a aplicação do algoritmo representado pelo fluxograma exibido ; nele fazemos os cálculos para achar as raízes da equação segundo as regras para uma equação do segundo grau.

O código dado abaixo esta associado ao evento Keypress das caixas de texto ; Nele permitimos somente a entra de valores numéricos , do sinal de - , e do Backspace ( Keyascii = 8):

Private Sub txtConst_KeyPress(KeyAscii As Integer)
  If KeyAscii = 8 Then
    txtConst.Text = Left(txtConst.Text, (Len(txtConst.Text) - 1))
    SendKeys "{END}"
  End If
  If KeyAscii < 43 Or KeyAscii > 57 Or KeyAscii = 47 Or KeyAscii = 44 Then KeyAscii = 0
End Sub

Private Sub txtCoX_KeyPress(KeyAscii As Integer)
  If KeyAscii = 8 Then
    txtCoX.Text = Left(txtCoX.Text, (Len(txtCoX.Text) - 1))
    SendKeys "{END}"
  End If
  If KeyAscii < 43 Or KeyAscii > 57 Or KeyAscii = 47 Or KeyAscii = 44 Then KeyAscii = 0
End Sub

Private Sub txtCoX2_KeyPress(KeyAscii As Integer)
  If KeyAscii = 8 Then
    txtCoX2.Text = Left(txtCoX2.Text, (Len(txtCoX2.Text) - 1))
    SendKeys "{END}"
  End If
  If KeyAscii < 43 Or KeyAscii > 57 Or KeyAscii = 47 Or KeyAscii = 44 Then KeyAscii = 0
End Sub

Ao executar a aplicação e informar algumas valores válidos para os coeficientes A , B e C da equação temos o resultado como mostrado abaixo:

Um formulário dando informação sobre as raízes é exibido antes do formulário acima, basta clicar em OK para continuar:

Para encerrar o projeto usamos o código abaixo que causa um efeito fazendo com que formulário se desloque para a esquerda da sumir:

Private Sub cmdSair_Click()
While frmQuadratica.Left > -9000
   frmQuadratica.Left = frmQuadratica.Left - 1
   DoEvents
Wend
End
End Sub

Você acabou de ver como o VB pode ser usado para ensinar matemática , espero que tenha gostado . Aguarde que voltarei ao tema - O VB e a matemática ...(o projeto completo esta no super CD VB)


José Carlos Macoratti