Proceso Calculo_de_las_raices_de_una_Ecuación_de_segundo_grado
// versión 1.0.1 ultima edicion 17/Oct/2014
// By Jaimeza www.jaimeza.org
// Para ejecutar este codigo use PSEINT http://pseint.sourceforge.net
Limpiar Pantalla
Definir coeficiente1_a, coeficiente2_b, coeficiente3_c Como Reales; // Definición de identificadores (coeficientes)
Definir raiz1, raiz1ParteReal, raiz1ParteImag, raiz2, raizMayor, discriminante Como Reales; // Para organizar las raices
Definir banderaDiscriminante Como entero;
Imprimir "Calculo de las raices de una Ecuación de segundo grado = a*X^2+b*X^1+c*X^0=0 == a*X^2+b*X+c=0";
// Mas info: http://es.wikipedia.org/wiki/Ecuaci%C3%B3n_de_segundo_grado
// Informacion de entrada
Imprimir "";
Imprimir "a es un coeficiente cuadrático";
Imprimir "b es el coeficiente lineal";
Imprimir "c es el coeficiente o término independiente";
Imprimir "";
// Entrada de datos
Imprimir "Entre el valor del coeficiente a: ",sin bajar;
Leer coeficiente1_a;
Imprimir "Entre el valor del coeficiente b: ",sin bajar;
Leer coeficiente2_b;
Imprimir "Entre el valor del coeficiente c: ",sin bajar;
Leer coeficiente3_c; // Leer ">", coeficiente3_c;
// Impresion de los datos de entrada
Imprimir "";
Imprimir "Los coeficientes son a = ",coeficiente1_a,", b = ",coeficiente2_b,", c = ",coeficiente3_c;
// Chequeo de argumentos de entrada
Si coeficiente1_a = 0 Entonces
Si coeficiente2_b = 0 Entonces
Si coeficiente3_c = 0 Entonces
Escribir "No hay ecuación, la expresion entrada es el numero cero => 0=0";
Sino // el coeficiente3 no es cero
Escribir "Contradiccion, la expresion entrada es un numero => ", coeficiente3_c, " = 0";
FinSi
Sino // el coeficiente2 no es cero
Escribir "Se reduce a una ecuación lineal";
Escribir "Solucion: x = ", -c/b;
FinSi
Sino
// Impresion "bonita" del polinomio
Imprimir "";
Imprimir "El polinomio es: P(x) = " ,sin bajar;
Si coeficiente1_a <> 1 Entonces
Si coeficiente2_b <> -1 Entonces
Imprimir coeficiente1_a,"*",sin bajar;
Sino
Imprimir "-",sin bajar;
FinSi
Fin Si
Imprimir "X^2",sin bajar;
Si coeficiente2_b >= 0 Entonces
Imprimir "+",sin bajar;
FinSi
Si coeficiente2_b <> 1 Entonces
Si coeficiente2_b <> -1 Entonces
Imprimir coeficiente2_b,"*",sin bajar;
Sino
Imprimir "-",sin bajar;
FinSi
FinSi
Imprimir "X",sin bajar;
Si coeficiente3_c >= 0 Entonces
Imprimir "+",coeficiente3_c;
Sino
Imprimir coeficiente3_c;
FinSi
// Calculos
discriminante = coeficiente2_b^2 - 4.0*coeficiente1_a*coeficiente3_c;
Imprimir "";
Escribir "Es valor del discriminante es: b^2 -4*a*c = ",discriminante;
// informacion de las raices
Si discriminante == 0 Entonces
Escribir "";
Escribir "Como el discriminante es 0 entonces hay 1 solucion en los numeros reales, con multiplicidad 2 (la parábola sólo toca en un punto al eje de las abscisas X)";
banderaDiscriminante := 0;
Sino
Si discriminante <= 0 Entonces
Escribir "";
Escribir "Como el discriminante es negativo entonces hay 2 soluciones en los numeros complejos, (un complejo y su conjugado) (la parábola no corta al eje de las abscisas X)";
banderaDiscriminante := 2;
Sino // discriminante >=0
Escribir "";
Escribir "Como el discriminante es positivo entonces hay 2 soluciones de numeros reales y diferentes (la parábola cruza dos veces el eje de las abscisas X)";
banderaDiscriminante := 1;
FinSi
FinSi
// calculo de las raices
Segun banderaDiscriminante Hacer
2:
Escribir ""
raiz1ParteReal := -coeficiente2_b / ( 2*coeficiente1_a );
raiz1ParteImag := raiz(-discriminante) / ( 2*coeficiente1_a );
Escribir "Primera raiz: ",raiz1ParteReal,"+",raiz1ParteImag,"*i";
Escribir "Segunda raiz: ",raiz1ParteReal,"-",raiz1ParteImag,"*i";
Escribir "Factorizar(P(X),X): ( x + ", -raiz1ParteReal,"-",raiz1ParteImag,"*i ) * ( x + ",-raiz1ParteReal,"+",raiz1ParteImag,"*i)";
0:
Escribir ""
raiz1 := -coeficiente2_b / ( 2*coeficiente1_a );
raiz2 := raiz1; // Raiz 1 == Raiz 2 (multiplicidad)
Escribir "raiz 1: ",raiz1;
Escribir "raiz 2: ",raiz2;
Escribir "Factorizar(P(X),X): ( X",(-raiz1)," )*( X",(-raiz2)," )";
1:
Escribir ""
raiz1 := ( -coeficiente2_b + raiz(discriminante) ) / ( 2*coeficiente1_a );
raiz2 := ( -coeficiente2_b - raiz(discriminante) ) / ( 2*coeficiente1_a );
// Ordenando raices de menor a mayor para una mejor impresion
Si raiz1 >= raiz2 Entonces
raizMayor := raiz1;
raiz1 = raiz2;
raiz2 = raizMayor;
FinSi
Escribir "Primera raiz: ",raiz1;
Escribir "Segunda raiz: ",raiz2;
Escribir ""
Escribir "Factorizar(P(X),X): ( X",(-raiz1)," )*( X",(-raiz2)," )";
//De Otro Modo:
FinSegun
FinSi
FinProceso
// Ejemplos para probar los tres casos
// ejp1: 1*X^2 +2*X +3 raices { -1 +1.4142*i, -1 -1.4142*i }
// ejp2: 1*X^2 -11.6*X +33.64 raices { 5.8, 5.8 } // determinante cero
// ejp3: 1*X^2 -5*X +6 raices { 2, 3 } // determinante mayor que cero
// ejp4: -5*X^2 +6*X +9 raices { -.86969384567, 2.06969384567 }