Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Sergioemus en 22 Noviembre 2011, 04:53 am



Título: PROBLEMA CON NUMERO IMAGINARIO
Publicado por: Sergioemus en 22 Noviembre 2011, 04:53 am
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



Título: Re: PROBLEMA CON NUMERO IMAGINARIO
Publicado por: BlackZeroX en 22 Noviembre 2011, 08:13 am
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
  1.  
  2. Option Explicit
  3.  
  4. Private Sub Form_Load()
  5. Dim qwX1    As Double
  6. Dim qwX2    As Double
  7.    Select Case scuation2Grade(1, 5, 8, qwX1, qwX2)
  8.        Case 0
  9.            MsgBox "X1 = " & qwX1 & vbCrLf & "X2 = " & qwX2
  10.        Case 1
  11.            MsgBox "La variable a no puede ser 0."
  12.        Case (-1)
  13.            MsgBox "Se ha producido una ecuacion que implica un numero imaginario (No se puede resolver de la manera habitual)."
  14.    End Select
  15. End Sub
  16.  
  17. 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
  18. '   //  Retorna 1   si es una divicion Infinita (Divicion entre 0) por teoria de limites.
  19. '   //  Retorna 0   si todo fue correctamente.
  20. '   //  Retorna -1  si se produjo una operacion que involucra un numero imaginario (Dicha operacion se muestra en el Debug).
  21. Dim qwSqr    As Double
  22.    scuation2Grade = 1
  23.    If (a = &H0) Then Exit Function         '   //  No se puede realizar una divicion entre cero.
  24.    qwSqr = (b * b) - (4 * a * c)
  25.    If (qwSqr > &H0) Then                     '   //  Numero imaginario...
  26.        qwOutX1 = (Sqr(qwSqr) - b) / (2 * a)
  27.        qwOutX2 = (Sqr(qwSqr) - b) / (2 * a)
  28.        scuation2Grade = 0
  29.    Else
  30.        qwSqr = (qwSqr * (-1))
  31.        Debug.Print "X1 = (" & b & " - sqr(" & qwSqr & ") * i) / " & (2 * a)
  32.        Debug.Print "X2 = (" & b & " + sqr(" & qwSqr & ") * i) / " & (2 * a)
  33.        scuation2Grade = -1
  34.    End If
  35. End Function
  36.  
  37.  

Dulces Lunas!¡.