Estoy realizando un programa que resuelve ecuaciones de segundo grado con la formula general .. Asi obtener las dos raices ..
Bueno .. toda va bien el programa corre excelente y da resultados correctos , el problema es cuando metes algun dato que hace que nos de un numero imaginario
sqr(numero negativo) .. Ahi es donde esta el problema .. Tengo que agregar una i que representa un numero imaginario les paso el codigo para que lo chequen .. la pregunta del millon es
¿Como hacerle para agregarle la i ?
Option Explicit
Dim a As Double
Dim b As Double
Dim c As Double
-------------------------------------------------------------------------------------------------
Private Sub Formula(a As Double, b As Double, c As Double, d As Double)
Dim raiz1 As Double
Dim raiz2 As Double
d = (b ^ 2 - 4 * a * c)
If d < 0 Then ' Aqui me atore
raiz1 = (-b + Sqr(d)) / (2 * a)
raiz2 = (-b - Sqr(d)) / (2 * a)
lblResultado1.Caption = raiz1
lblResultado2.Caption = raiz2
end sub
-------------------------------------------------------------------------------------------------
Private Sub cmdCalcular_Click()
If txta = "" Then
MsgBox "Ingrese el valor a", vbCritical, "Error"
txta.SetFocus
ElseIf txtb = "" Then
MsgBox "Ingrese el valor b", vbCritical, "Error"
txtb.SetFocus
ElseIf txtc = "" Then
MsgBox "Ingrese el valor c", vbCritical, "Error"
txtc.SetFocus
Else
a = Val(txta.Text)
b = Val(txtb.Text)
c = Val(txtc.Text)
End If
Call Formula(a, b, c)
End Sub
Primero aprendete las leyes...
* Solamente podemos cancelar ese numero imaginario cuando esta al cuadro (cancelando la raiz) y solo obtendriamos el radical, de otra manera no se puede...
"i" solo es equitativo a la raiz de "-1" si es otro numero se deben aplicar propiedades...
Option Explicit
Private Sub Form_Load()
Dim qwX1 As Double
Dim qwX2 As Double
Select Case scuation2Grade(1, 5, 8, qwX1, qwX2)
Case 0
MsgBox "X1 = " & qwX1 & vbCrLf & "X2 = " & qwX2
Case 1
MsgBox "La variable a no puede ser 0."
Case (-1)
MsgBox "Se ha producido una ecuacion que implica un numero imaginario (No se puede resolver de la manera habitual)."
End Select
End Sub
Public Function scuation2Grade(ByVal a As Double, ByVal b As Double, ByVal c As Double, ByRef qwOutX1 As Double, ByRef qwOutX2 As Double) As Long
' // Retorna 1 si es una divicion Infinita (Divicion entre 0) por teoria de limites.
' // Retorna 0 si todo fue correctamente.
' // Retorna -1 si se produjo una operacion que involucra un numero imaginario (Dicha operacion se muestra en el Debug).
Dim qwSqr As Double
scuation2Grade = 1
If (a = &H0) Then Exit Function ' // No se puede realizar una divicion entre cero.
qwSqr = (b * b) - (4 * a * c)
If (qwSqr > &H0) Then ' // Numero imaginario...
qwOutX1 = (Sqr(qwSqr) - b) / (2 * a)
qwOutX2 = (Sqr(qwSqr) - b) / (2 * a)
scuation2Grade = 0
Else
qwSqr = (qwSqr * (-1))
Debug.Print "X1 = (" & b & " - sqr(" & qwSqr & ") * i) / " & (2 * a)
Debug.Print "X2 = (" & b & " + sqr(" & qwSqr & ") * i) / " & (2 * a)
scuation2Grade = -1
End If
End Function
Dulces Lunas!¡.