Codificación aprenderaprogramar.com: CU00237A
EJERCICIO VERIFICACIÓN DEL ALGORITMO DE LA ECUACIÓN CUADRÁTICA
Supón que haz desarrollado o te han facilitado el siguiente algoritmo, relativo a la resolución de la ecuación cuadrática ax2 + bx +c.
Pseudocódigo:
1. Inicio [Pseudocódigo aprenderaprogramar.com] 2. [Resolución de ecuación cuadrática ax2 + bx + c = 0] 3. Mostrar “Introduzca los valores de parámetros” 4. Pedir a, b, c 5. d = b ^ 2 - 4 * a * c : e = 2 * a 6. Si d = 0 Entonces Mostrar “x1 = x2 =”, - b / e SiNo Si d > 0 Entonces Mostrar “x1 =”, (- b + SQR(d)) / e Mostrar “x2 =”, (- b - SQR(d)) / e SiNo Mostrar “x1 =”, - b / e, “+”, SQR(- d) / e, “i” Mostrar “x2 =”, - b / e, “-”, SQR(- d) / e, “i” FinSi FinSi 7. Fin |
Queremos verificar la corrección de este algoritmo: para ello se pide comprobar el funcionamiento usando tablas de variables para los siguientes casos usando valores a, b y c enteros:
a) a > 0, b > 0, c > 0 . Cifras entre 1 y 10 .
b) a > 0, b > 0, c > 0 . Cifras entre 10 y 100 .
c) a > 0, b = c = 0 .
d) a = b = 0, c > 0 .
e) a > 0, b = 0, c > 0 .
f) a < 0, b < 0, c < 0 .
SOLUCIÓN
Vamos a suponer que de un libro de problemas hemos extraído esta tabla de valores de a, b, c con su respectiva solución (primera tabla) y vamos a comprobar qué resultados nos da el algoritmo que fue planteado (siguientes tablas).
a |
b |
c |
Resultado |
Se ajusta al caso |
2 |
4 |
2 |
x1 = x2 = - 1 |
a |
1 |
5 |
2 |
x1 = - 4,56 x2 = - 0,44 |
a |
30 |
50 |
20 |
x1 = -1 x2 = - 0,6667 |
b |
4 |
0 |
0 |
x1 = x2 = 0 |
c |
0 |
0 |
3 |
Inviable |
d |
3 |
0 |
2 |
x1 = 0,8165 i x2 = - 0,8165 i |
e |
- 4 |
- 5 |
- 1 |
x1 = - 1 x2 = - 0,25 |
f |
Caso Tipo a) |
|||||||
Estado |
a |
b |
c |
d |
e |
Visualización x1 |
Visualización X2 |
Valores iniciales |
2 |
4 |
2 |
~ |
~ |
~ |
~ |
Valor d y e |
~ |
~ |
~ |
0 |
4 |
~ |
~ |
Si ... |
~ |
~ |
~ |
~ |
~ |
- 1 |
- 1 [d = 0] |
Caso Tipo a) |
|||||||
Estado |
a |
b |
c |
d |
e |
Visualización x1 |
Visualización X2 |
Valores iniciales |
1 |
5 |
2 |
~ |
~ |
~ |
~ |
Valor d y e |
~ |
~ |
~ |
17 |
2 |
~ |
~ |
Si ... |
~ |
~ |
~ |
~ |
~ |
- 0,44 |
- 4,56 [d > 0] |
Caso Tipo b) |
|||||||
Estado |
a |
b |
c |
d |
e |
Visualización x1 |
Visualización X2 |
Valores iniciales |
30 |
50 |
20 |
~ |
~ |
~ |
~ |
Valor d y e |
~ |
~ |
~ |
100 |
60 |
~ |
~ |
Si ... |
~ |
~ |
~ |
~ |
~ |
- 0,6667 |
- 1 [d > 0] |
Caso Tipo c) |
|||||||
Estado |
a |
b |
c |
d |
e |
Visualización x1 |
Visualización X2 |
Valores iniciales |
4 |
0 |
0 |
~ |
~ |
~ |
~ |
Valor d y e |
~ |
~ |
~ |
0 |
8 |
~ |
~ |
Si ... |
~ |
~ |
~ |
~ |
~ |
0 |
0 [d = 0] |
Caso Tipo d) |
|||||||
Estado |
a |
b |
c |
d |
e |
Visualización x1 |
Visualización X2 |
Valores iniciales |
0 |
0 |
3 |
~ |
~ |
~ |
~ |
Valor d y e |
~ |
~ |
~ |
0 |
0 |
~ |
~ |
Si ... |
~ |
~ |
~ |
~ |
~ |
Indeterminación |
Indeterminación [d = 0] |
Caso Tipo e) |
|||||||
Estado |
a |
b |
c |
d |
e |
Visualización x1 |
Visualización X2 |
Valores iniciales |
3 |
0 |
2 |
~ |
~ |
~ |
~ |
Valor d y e |
~ |
~ |
~ |
- 24 |
6 |
~ |
~ |
Si ... |
~ |
~ |
~ |
~ |
~ |
0 + 0,8165 i |
0 - 0,8165 i [d < 0] |
Caso Tipo f) |
|||||||
Estado |
a |
b |
c |
d |
e |
Visualización x1 |
Visualización X2 |
Valores iniciales |
- 4 |
- 5 |
- 1 |
~ |
~ |
~ |
~ |
Valor d y e |
~ |
~ |
~ |
9 |
- 8 |
~ |
~ |
Si ... |
~ |
~ |
~ |
~ |
~ |
- 1 |
- 0,25 |
Comentarios: Se entiende que la construcción de las tablas se ha realizado siguiendo el algoritmo paso a paso. Si lo comparamos con los resultados previstos encontramos que:
· En los casos a, b, c y f hay una coincidencia total.
· En el caso d la previsión es de situación inviable (porque claro está, pretender resolver 3 = 0 es incongruente...) y al ejecutar el algoritmo nos encontramos con que aparece una indeterminación al tratar de resolver - b / e = 0 / 0. Hablaremos de ello después.
· En el caso e la solución es coincidente aunque detectamos que el algoritmo da lugar a una presentación que incluye un 0 + ... en la que podríamos omitir el cero a la hora de presentar el resultado. Esto es una cuestión de matiz: no afecta al resultado ni al funcionamiento del algoritmo, por lo que puede calificarse de poco relevante. En caso de que deseemos evitar que se produzca este tipo de presentación bastará introducir el código necesario para el tratamiento de esta situación.
Volvamos ahora al caso d. Si el ordenador se encuentra con una orden del tipo calcula 0 / 0 que es imposible de ejecutar, se generará un error. Esto no es una cuestión de matiz, porque estamos afectando al resultado y al funcionamiento del algoritmo. Que se genere un error en un programa no es una tragedia ya que tenemos que aprender a convivir con ellos. Pero no siendo trágico, tampoco es algo agradable ni deseable. Tenemos por objetivo construir programas eficientes y libres de errores.
En esta ocasión no podemos calificar el algoritmo como defectuoso puesto que su funcionamiento se comprueba correcto en un amplio rango de datos de entrada. Lo que sí podemos decir es que ciertos datos de entrada van a dar lugar a un error. ¿Qué hacer ante esto?
a) Asumir que se genera un error, que será tratado a través de un procedimiento de gestión de errores. Lo estudiaremos más adelante.
b) Realizar los pequeños (o grandes) cambios necesarios que eviten que se produzca el error.
En general trataremos de evitar el error y para ello trabajamos durante el diseño y verificación del algoritmo. En este ejemplo, una vez detectada esta posibilidad, se trataría de introducir una cláusula de modo que si b y e valen cero aparezca un mensaje “ecuación no válida”.
Para acceder a la información general sobre este curso y al listado completo de entregas pulsa en este link: Ver curso completo.
Para hacer un comentario o consulta utiliza los foros aprenderaprogramar.com, abiertos a cualquier persona independientemente de su nivel de conocimiento.