Ejercicio ejemplo resuelto: verificar el algoritmo de resolución de una ecuación cuadrática (2o grado) (CU00237A)

Resumen: Entrega nº36 del curso Bases de la programación Nivel II.
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:

Anagrama aprenderaprogramar.com

 

 


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.

Donar o colaborar

Este sitio se mantiene abierto gracias al apoyo de muchas personas. Si crees que merece la pena apoyar económicamente este sitio web puedes realizar una donación o colaborar. Contacta con nosotros.

¿Puedo yo aprender?

Seas o no del área informática, si quieres aprender a programar te ofrecemos una solución guiada y personalizada: realizar un curso tutorizado on-line. Con este tipo de curso, podrás aprender a programar de forma ágil y amena.

Acceder a detalles y precios de los cursos tutorizados on-line

Política sobre cookies

Utilizamos cookies propias y de terceros para ofrecerte una mejor experiencia y servicio, de acuerdo a tus hábitos de navegación.

Si continúas navegando, consideramos que aceptas su uso. Puedes obtener más información en nuestra Política de Cookies.

En Facebook!

Ahora puedes seguirnos en Facebook. Noticias, novedades y mucho más ¡Te esperamos!

RANKING APR2+

Ranking de lenguajes y entornos de programación aprenderaprogramar.com
 

JULIO - AGOSTO 2017

1. Java / J2EE
2. Entornos Oracle
3. Entornos SQL Server
4. JavaScript, jQuery
5. .NET, C#
6. HTML, CSS
7. Android, iOS
8. Php, MySql


Acceder a detalles sobre el ranking de programación aprenderaprogramar.com

FOROS APR2+

Pregunta, responde, consulta, lee, intercambia...

Participa!!! Entra en los foros aprenderaprogramar.com.

             Copyright 2006-2017 aprenderaprogramar.com                La web abierta a cualquier persona interesada en la programación