Raíces de la ecuación cuadrática en PSeInt

Más ejercicios resueltos

Si deseas revisar más ejercicios resueltos, haz click en el siguiente botón. 

Hallar las raíces de la ecuación cuadrática es uno de los problemas clásicos que se analizan cuando uno inicia en el mundo de la programación. Si deseas conocer con más detalle la definición de este problema, haz click en el siguiente enlace. En este artículo, analizamos al detalle y paso a paso, el algoritmo para calcular las raíces de una ecuación cuadrática usando como herramienta PSeInt

Parte de esta análisis se encuentra sintetizado en el vídeo «Raíces de la ecuación cuadrática en PSeInt» en nuestro canal de YouTube. Te invitamos a que lo visites.

A continuación presentamos nuestra alternativa de solución al problema del cálculo de las raíces de una ecuación de segundo grado en PSeInt. Analizaremos el algoritmo dividiéndolo en 7 pasos y explicaremos al detalle cada uno de éstos. Los pasos que analizaremos son los siguientes:

  • Lectura de datos.
  • Cálculo del discriminante.
  • Control de flujo para determinar si hay solución real.
  • Control de flujo para calcular la raíz única.
  • Control de flujo para calcular dos raíces reales.
  • Control de flujo para calcular raíces complejas.
  • Validación del coeficiente de la ecuación de segundo grado.

Lectura de datos

Como en todo algoritmo, la primera tarea a realizar, es la lectura de los datos de entrada. ¿Cómo hacemos para leer una ecuación cuadrática? Pues no existe un tipo de dato ecuación, para poder operar la ecuación y hallar su raíces, necesitamos los coeficientes de ésta. Por ello, tendremos que leer cada coeficiente. Para esto usamos la instrucción \texttt{Leer}. Los datos leídos se almacenan en las variables \texttt{a}, \texttt{b} y \texttt{c}.

pseudocódigo ecuación cuadrática v1
Lectura de datos

Cálculo del discriminante

El algoritmo para resolver la ecuación cuadrática se basa en torno al valor del discriminante. A través de este valor se decidirán las diversas formas de cálculo que existen para esta ecuación: raíz real única, raíces reales diferentes y raíces complejas. Por este motivo, el siguiente paso es calcular el discriminante. El discriminante se define a través de la siguiente expresión b^2-4ac .

Almacenaremos su valor en la variable \texttt{discriminante} y usaremos la expresión \texttt{b \^ {}2-4*a*c} para calcular su valor. Recuerde que en PSeInt, la potenciación se realiza con el operador ^.

pseudocódigo ecuación cuadrática v2
Cálculo del discriminante​

Control de flujo para determinar si hay solución real

Una vez que se ha calculado el discriminante, procedemos resolver la ecuación cuadrática. Para esto se hace necesario tomar dos caminos diferentes, uno para el cálculo de las raíces reales y otro para las raíces complejas. Para hacer la bifurcación entre estos dos caminos, usamos una estructura algorítmica selectiva con la condición \texttt{discriminante>=0}. Cuando la condición sea \texttt{Verdadera}, calcularemos las raíces reales. Cuando la condición sea \texttt{Falso}, procederemos a calcular las raíces complejas.

En PSeInt la selectiva se implementa a través de la instrucción \texttt{Si}.

pseudocódigo ecuación cuadrática v3
Control de flujo para determinar si hay solución real

Control de flujo para calcular la raíz única

Dentro del camino o alternativa para el cálculo de raíces reales, tenemos dos caminos adicionales: uno para el caso de la raíz única y otro para el caso de las dos raíces diferentes. Vamos a analizar en este paso, la alternativa para la solución única. Según lo indicado en el enunciado, se tendrá una solución única cuando \texttt{discriminante=0}.

Utilizaremos otra selectiva dentro de la selectiva anterior para hacer el cálculo de la raíz única. Esta situación se conoce con el nombre de estructuras algorítmicas selectivas anidadas.  Dado que el \texttt{discriminante} es igual a 0, la raíz se calcula usando la expresión:

x=\cfrac{-b}{2a}.

En la selectiva anidada colocaremos la expresión para calcular la raíz en PSeInt. La expresión usada será \texttt{-b/(2*a)}. Recuerde que los operadores aritméticos de división y multiplicación poseen la misma precedencia y se operan de izquierda a derecha. Por este motivo no es igual \texttt{-b/(2*a)} que \texttt{-b/2*a}. En el caso de \texttt{-b/2*a}, primero se ejecutaría \texttt{-b/2} y luego se multiplicaría por \texttt{a}. El cálculo del valor de la raíz única se puede apreciar en la siguiente figura entre las líneas 6–8.  

pseudocódigo ecuación cuadrática paso 4
Control de flujo para calcular la raíz única

Control de flujo para calcular dos raíces reales

Una vez que terminamos con el flujo para el cálculo de la raíz única, procederemos al cálculo de las raíces reales diferentes. Esto va a ocurrir solamente cuando \texttt{discriminante} \neq \texttt{0} pero a su vez, el discriminante, deberá ser positivo. Por este motivo, este camino lo colocamos dentro del bloque \texttt{SiNo} de la instrucción selectiva que tiene como condición \texttt{discriminante=0}.

 

Según la fórmula general de la ecuación cuadrática descrita en el enunciado, las raíces se calculan de la siguiente manera: 

x_{1,2}=\cfrac{-b \pm \sqrt{b^2-4ac}}{2a}

Debido a esto, la expresión para la calcular la primera raíz es \texttt{(-b+rc(discriminante))/(2*a)} y la expresión para la calcular la segunda raíz es \texttt{(-b-rc(discriminante))/(2*a)}. Recuerde que en PSeInt, la función \texttt{rc} permite realizar el cálculo de la raíz cuadrada

pseudocódigo ecuación cuadrática paso 5
Control de flujo para calcular dos raíces reales

Control de flujo para calcular raíces complejas

Finalmente diseñamos el flujo para que se calculen las raíces complejas. Solo haremos esto cuando  \texttt{discriminante<0}. Por este motivo, este camino lo colocamos dentro del bloque \texttt{SiNo} de la estructura algorítmica selectiva que tiene como condición \texttt{discriminante>=0}.

Dado que el \texttt{discriminante} es negativo, lo actualizamos con el valor absoluto para poder obtener la raíz cuadrada de éste. Para obtener la solución compleja, realizaremos el cálculo de la parte real y la parte imaginaria por separado. Luego, al imprimir, escribimos ambas partes y le incrementamos el caracter \texttt{i} para simular el número real.

Recuerde que en PSeInt, la función \texttt{abs} permite obtener el valor absoluto de un número determinado.

pseudocódigo ecuación cuadrática paso 6
Control de flujo para calcular raíces complejas

Validación del coeficiente de la ecuación

Para terminar el algoritmo, procedemos a la validación del coeficiente \texttt{a}. Para que exista una ecuación cuadrática, existe una restricción: el coeficiente \texttt{a} debe ser diferente de cero. Esta validación la realizaremos inmediatamente después de la lectura de los datos de entrada. 

pseudocódigo - ecuación cuadrática - validación de coeficiente a
Validación del coeficiente de la ecuación

Conclusión​​

Hemos presentado en este artículo, una alternativa de solución al algoritmo para calcular las raíces de una ecuación cuadrática en PSeInt. Se ha utilizado para el control de flujo, estructuras selectivas anidadas. Podrá descargar la solución propuesta en el repositorio GitHub de iterando++ a través del siguiente enlace

Hemos preparado otros artículos adicionales en donde describimos al detalle la implementación de este problema en lenguajes de programación. Te invitamos a leer los siguientes artículos de iterando++

Si te interesa profundizar más sobre sobre diseño algorítmico, te recomendamos el libro Foundations of Programming Languages de Kent D. D. Lee. En este libro encontrarás además información detallada sobre la programación orientada a objetos, funcional y lógica.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *