Pseudocodigo ecuación de segundo grado

Mi consulta se basa en que tengo que realizar un pseudocodigo de un programa que pida los coeficientes de una ecuación de segundo grado y calcule sus soluciones.

Quisiera consultar mi desarrollo mas que nada cuando el discriminante es 0 o menor:

PROGRAMA Ecuación_2°_Grado
Variables
a, b, c, discriminante, sol1, sol2, raiz_imaginaria, raiz_real: número entero
INSTRUCCIONES
ESCRIBIR “Deme coeficientes: ”
LEER (a, b, c)
discriminante = b ^ 2 – 4 * a * c
Si discriminante > 0 entonces
ESCRIBIR “La ecuación tendrá 2 soluciones: “
Sol1 = (-b + discriminante) / 2 * a
Sol2 = (-b - discriminante) / 2 * a
ESCRIBIR “Solución 1: “, sol1
ESCRIBIR “Solución 2: “, sol2
Sino si discriminante = 0 entonces
ESCRIBIR “La ecuación tendrá 1 solución: “
sol1 = sol 2 = - b/2
ESCRIBIR “El valor de la solución es: “, sol1
Si no
ESCRIBIR “Las dos soluciones son complejas”
raiz_imaginaria = -b /2*a
raiz_real = raíz(discriminante) / 2*a
ESCRIBIR “Raiz imaginaria: “, raiz_imaginaria
ESCRIBIR “Raiz real: ”, raiz_real
fin si
FIN PROGRAMA

2 Respuestas

Respuesta
1

Gina Kon!

No he hecho nunca programas en pseudo código, la verdad que prefiero escribirlos directamente en BASIC, creo que quedan más claros.

Me parece que pones que las variables son números enteros.

Eso no es cierto, los coeficientes a, b y c si que serán enteros si no quieres introducir coeficientes que no lo sean, y ello hará que el discriminante también sea entero. Pero las soluciones tienen que ser reales, ten en cuenta que hay operaciones de raíz cuadrada y división que no nos van a dar resultados enteros normalmente.

a, b, c, discriminante: numero entero

raiz_discriminante, sol1, sol2 , raiz_imaginaria, raiz_real: número real

Aunque ya te digo que a, b, c y discriminante también podrían ser números reales sin ningún problema.

En la parte de dos raíces reales te has olvidado de sacar la raíz cuadrada del discriminante, por eso he añadido esa variable en la definición.

Quedará así:

raiz_discriminante = raiz cuadrada(discriminante)

Sol1 = (-b + raiz_discriminante) / 2 * a
Sol2 = (-b - raiz_discriminante) / 2 * a

La parte de la raíz única estaría bien

La parte de la raíz compleja está bastante floja, sería así más o menos:

ESCRIBIR “Las dos soluciones son complejas”

raiz_discrimanante = raiz cuadrada(-discriminante)

raiz_imaginaria = raiz_discriminante / 2*a
raiz_real = -b / 2*a
ESCRIBIR “solución 1:", raiz_real, " + ", raiz_discriminante, "i"
ESCRIBIR “solución 2:", raiz_real, " - ", raiz_discriminante, "i"

Y eso es todo.

Muchas gracias por tu respuesta, adjunto mi pseudocodigo para verificar los arreglos:

PROGRAMA Ecuación_2°_Grado
VARIABLES
a, b, c , discriminante: número entero
sol1, sol2 , raiz_imaginaria, raiz_real: numero real
INSTRUCCIONES
ESCRIBIR “Deme coeficientes: ”
LEER (a, b, c)
discriminante = raíz( b ^ 2 – 4 * a * c)
si discriminante > 0 entonces
ESCRIBIR “La ecuación tendrá 2 soluciones: “
Sol1 = (-b + discriminante) / 2 * a
Sol2 = (-b - discriminante) / 2 * a
ESCRIBIR “Solución 1: “, sol1
ESCRIBIR “Solución 2: “, sol2
sino si discriminante = 0 entonces
ESCRIBIR “La ecuación tendrá 1 solución: “
sol1 = sol 2 = - b/2
ESCRIBIR “El valor de la solución es: “, sol1
Si no
ESCRIBIR “Las dos soluciones son complejas”
discriminante = raíz(- discriminante)
raiz_imaginaria = discriminante / 2 *a
raiz_real = -b / 2 *a
ESCRIBIR “Solución 1: “, raíz_ real, “ +” , discriminante
ESCRIBIR “Solución 2: ”, raiz_real, “ – “, discriminante
fin si
FIN PROGRAMA

Muchas gracias por la ayuda!!

Veo que has optado por no añadir la variable raiz_discriminante sino reutilizar la variable discriminante, veo que lo has hecho así en la parte de las soluciones complejas. Pero cuando hay dos soluciones reales también hay que hacer la raíz cuadrada del discriminante, acuérdate de la fórmula:

$$x=\frac{-b\pm \sqrt{b^2-4ac}}{2a}=\frac{-b\pm \sqrt {discriminante}}{2a}$$

luego en la parte de las soluciones reales tienes que añadir la línea que pongo en negrita:

ESCRIBIR “La ecuación tendrá 2 soluciones: “

discriminante = raíz(discriminante)

Sol1 = (-b + discriminante) / 2 * a
Sol2 = (-b - discriminante) / 2 * a

Y eso es todo, acuérdate de hacer esa corrección.

Gracias por responder, ni me queda claro la parte donde se calculan las raíces complejas:

ESCRIBIR “solución 1:", raiz_real, " + ", raiz_discriminante, "i"

Aquí tu estas sumando el valor de la variable raiz_real al valor de la variable raiz_discriminante? o estas concatenando?

Desde ya muchas gracias por tu ayuda!!!

Hay que entender bien el problema empezando por la fórmula de la ecuación de segundo grado. Espero que cuando sean una o dos raíces reales lo entiendas bien, es una mera operación con números reales.

Pero cuando el discriminante es negativo no se puede operar de la misma forma, las respuestas son dos números complejos conjugados. Y un número complejo tiene dos componentes, la primera se llama componente real y se escribe tal cual, la segunda se llama imaginaria y se escribe seguida de la letra i, donde la letra i significa la raíz cuadrada de -1.

Vamos a hacer un ejemplo sencillo

$$\begin{align}&x^2+2x+2=0\\ &\\ &x = \frac{-2\pm \sqrt{2^2-4·1·2}}{2}=\frac{-2\pm \sqrt{-4}}{2}=\\ &\\ &\frac{-2\pm 2 \sqrt{-1}}{2}=-1\pm \sqrt{-1}= -1 \pm i\end{align}$$

Asi es como se escriben los números complejos en notación cartesiana.

La parte real era -b/2a = -2/2 = -1

Y la parte imaginaria

raíz (-discriminante) / 2a = raíz (4) / 2 = 2/2 = 1

Las soluciones son

Solución1: 1+i

Solución2: 1-i

La redacción final de la parte compleja es:

ESCRIBIR “Las dos soluciones son complejas”
discriminante = raíz cuadrada(-discriminante)
raiz_imaginaria = discriminante / 2*a
raiz_real = -b / 2*a
ESCRIBIR “solución 1:", raiz_real, " + ", raiz_discriminante, "i"
ESCRIBIR “solución 2:", raiz_real, " - ", raiz_discriminante, "i"

Y la salida para el ejemplo que te di sería esta

solución 1: 1 + 1i

Solución 2: 1 - 1i

Se podría hacer mejor para prescindir del 1 que va delante de i pero es lo menos importante.

Fíjate que el " + " no es ni una suma ni una concatenación, es un carácter que aparece escrito en la solución, lo mismo que el " - "

Y eso es todo.

Clarísima tu respuesta, gracias. Lo he compilado con java :

System.out.println("Las dos soluciones son complejas");
raiz_discriminante =Math.sqrt(-discriminante);
raiz_imaginaria = raiz_discriminante / (2 * a);
raiz_real = -b / (2*a);
System.out.println("Sol1: " + raiz_real + " + " + raiz_discriminante + "i");
System.out.println("Sol2: " + raiz_real + " - "+ raiz_discriminante+ "i");

Y con valores de

a: 1

b: 2

c: 2

Salida:

Las dos soluciones son complejas
Sol1: -1.0 + NaNi
Sol2: -1.0 - NaNi

sera un error de la función SQRT el vallor NaN?

Gracias como siempre por tu pedagogia!!

Siempre quise aprender C y Java pero no lo hice. No me muestras la línea donde se calcula el discriminante.

Con los datos que ma das el discriminante sería -4 con lo que sería

math.sqrt(-(-4)) = Math.sqrt(4) = 2

que luego se simplifica con el 2 del denominador y quedaría

-1.0+1.0i

-1.0-1.0i

El NaN que te sale significa Not a Number (no es un número), eso es lo que devuelve la función Math. Sqrt.

Asegurate de cual es el discriminante haciendo que lo escriba, debe ser negativo cuando las raíces sean complejas.

La función parece estar bien. No se si el java será sensible a mayúsculas o minúsculas, creo que no, con lo que la función Math. Sqrt estaría bien escrita.

Ya me contarás.

Hola experto, sigue dándome lo mismo con las mismos valores usado anteriormente y asegurándome del valor del discriminante.

Mi código:

//ahi veo el valor del discriminante que me imprime nan

//lo hice en dos veces para asegurarme ya que antes había realizado el calculo de manera conjunta

discriminante = Math.pow(b, 2) - (4*a*c);
discriminante =Math.sqrt(discriminante);
System.out.println(discriminante);

//parte del if con raíces negativas:

else
{
System.out.println("Las dos soluciones son complejas");
raiz_discriminante =Math.sqrt((-discriminante));
raiz_imaginaria = raiz_discriminante / (2 * a);
raiz_real = -b / (2*a);
System.out.println("Sol1: " + raiz_real + " + " + raiz_discriminante + "i");
System.out.println("Sol2: " + raiz_real + " - "+ raiz_discriminante+ "i");
}

Pantalla:

Deme coeficientes
a:1
b:2
c:2
NaN
Las dos soluciones son complejas
Sol1: -1.0 + NaNi
Sol2: -1.0 - NaNi

Desde ya gracias por tu pedagogía y tiempo!!!

Has escrito:

discriminante = Math.pow(b, 2) - (4*a*c);
discriminante =Math.sqrt(discriminante);
System.out.println(discriminante);

quita la línea

discriminante =Math.sqrt(discriminante);

Porque no puede hacer la raíz cuadrada de un número negativo, por eso te da NaN. Además estabas calculando dos veces la raíz cuadrada.

Entonces, cuando las raíces sean reales deberás calcular

raiz_discriminante = Math.sqrt(discriminante)

Y cuando sean complejas

raiz_discriminante = Math.sqrt(-discriminante)

Yo creo que si haces eso bien funcionará. Si no, mándame el código entero para que pueda decirte donde corregirlo, ya que yo no sé casi nada de Java y no te haría el programa completo pero sí puedo corregir uno que me mandes sencillo.

Ya hace unos cuantos que no consultas. Si ya está resuelto puntúa

Respuesta

Las ecuaciones de segundo grado exigen la validación de valor del discriminante y de esa forma dar solución en el conjunto de los números reales o complejos.

Comparto un link con la solución y validación del discriminante en lenguaje python:

https://tutorias.co/sentencias-if-else-python-ecuacion-de-segundo-grado/https://tutorias.co/sentencias-if-else-python-ecuacion-de-segundo-grado/

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas