27 jul 2010

Ejercicio VB.NET: ecuacion de 2do grado

PROBLEMA: Realizar programa para la solucion de ecuaciones del tipo ax^2 + bx + c = 0 utilizando procedimientos y funciones.


SOLUCION: La ecuación completa de segundo grado tiene siempre dos soluciones, no necesariamente distintas, llamadas raíces, que pueden ser reales o complejas, el discriminante esta dado por la expresion b^2-4ac y mediante este discriminante podremos saber el número y naturaleza de las soluciones:

  1. Dos soluciones reales y diferentes si el discriminante es mayor a cero(la parábola cruza dos veces el eje x);
  2. Una solución real doble, dicho de otro modo, de multiplicidad dos, si el discriminante es igual a cero (la parábola sólo toca en un punto al eje x);
  3. Dos números complejos conjugados si el discriminante es negativo, menor a cero (la parábola y el eje x no se cruzan).
Codigo fuente:


01 Module Module1
02     Dim aa, bb, cc, x1, x2, xaa, xbb, d As Double
03     Sub Main()
04         Do
05             Leer()
06             d = ecuacion_cuadratica()
07             Imprime(d)
08             Console.WriteLine("Para salir presione [s], para continuar presione ENTER")
09         Loop Until Console.ReadLine() = "s"
10     End Sub
11 
12     'procedimiento para leer tres valores numericos y asignarlos a las variables globales
13     ' aa,bb,cc
14     Private Sub Leer()
15         Console.Write("Ingresa A = ")
16         aa = Val(Console.ReadLine)
17         Console.Write("Ingresa B = ")
18         bb = Val(Console.ReadLine)
19         Console.Write("Ingresa C = ")
20         cc = Val(Console.ReadLine)
21     End Sub
22 
23     'funcion que calcula los valores para x1 y x2, tambien calcula el valor
24     'para el discriminante (d) que puede ser 0, > 0 ó < 0 y retorna este valor
25     Private Function ecuacion_cuadratica() As Double
26         d = (bb ^ 2) - (4 * aa * cc)
27         If d = 0 Then
28             x1 = bb / (2 * aa)
29             x2 = x1
30         End If
31         If d > 0 Then
32             x1 = (-bb + Math.Sqrt(d)) / (2 * aa)
33             x2 = (-bb - Math.Sqrt(d)) / (2 * aa)
34         End If
35         If d < 0 Then
36             x1 = -bb / (2 * aa)
37             x2 = x1
38             xaa = Math.Sqrt(-d) / (2 * aa)
39             xaa = xbb
40         End If
41         Return d
42     End Function
43 
44     'procedimiento que dado el valor del discriminante, imprime los valores
45     'para las raices x1 y x2
46     Private Sub Imprime(ByVal dd As Double)
47         If dd = 0 Then
48             Console.WriteLine("Las soluciones son iguales X1=X2=" & x1)
49         End If
50         If dd > 0 Then
51             Console.WriteLine("Las soluciones no son iguales")
52             Console.WriteLine("X1 = " & x1)
53             Console.WriteLine("X2 = " & x2)
54         End If
55         If dd < 0 Then
56             Console.WriteLine("Las soluciones son imaginarias")
57             Console.WriteLine("X1 =" & x1 & " + " & xaa & " i")
58             Console.WriteLine("X2 =" & x2 & " + " & xbb & " i")
59         End If
60     End Sub
61 End Module

Prueba: Para datos de entrada

A = -2, B = 12, C = -16  resultado; x1=2, x2=4
A = -4, B = -12, C = -8 resultado: x1=-2 , x2=-1
A = -4, B = -8, C = -4 resultado: x1=-1 , x2=-1

1 comentarios:

Anónimo dijo...

No resuelve las imaginarias verdad

Publicar un comentario

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | cna certification