PROBLEMA CON NUMERO IMAGINARIO

Iniciado por Sergioemus, 22 Noviembre 2011, 04:53 AM

0 Miembros y 1 Visitante están viendo este tema.

Sergioemus

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


BlackZeroX

#1
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...

Código (Vb) [Seleccionar]


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!¡.
The Dark Shadow is my passion.