export coeficiente1_a, coeficiente2_b, coeficiente3_c, coeficiente3_d; // Definición de coeficientes
export SolvingQuadraticEquationStepToS() // Solving and Analyzing a quadratic equation in a variable/Análisis de la Ecuación Cuadrática o de segundo grado en una variable
begin
// versión 1.0.2 última edición NOv 21 2016
// By Jaime Meza AKA CompSystems ©
// www.eonicasys.com.co
// I. Declaración de variables y constantes
print(); freeze;
print( "***Started execution***" ); wait(1); // Print on terminal Window
//local coeficiente1_a, coeficiente2_b, coeficiente3_c, coeficiente3_d; // Definición de coeficientes
local raiz1, raiz2, raizMayor;
local raiz1ParteReal, raiz1ParteImag, raiz2ParteReal, raiz2ParteImag, discriminante;
local banderaDiscriminante;
local banderaTermino ;
local exprAuxTexto0;
local exprAuxTexto1;
local exprAuxTexto2;
local exprAuxTexto3;
local exprAux0;
local exprAux1;
local parteReal;
local parteImag;
local numComplejo1;
local numComplejo2;
// I.1 Asignación de variables y constantes
numComplejo1:=[0,0];
numComplejo2:=[0,0];
parteReal := 1;
parteImag := 2;
exprAuxTexto0 := "";
banderaDiscriminante := 0;
banderaTermino := 0;
// II. Información de entrada
print();
print( " SOLUCIÓN Y ANÁLISIS DE LA ECUACIÓN" );
print( " DE SEGUNDO GRADO" );
print( "❑ Ecuacion canónica a*x²+b*x¹+c*x°=0 ⇢ ax²+bx+c=0, donde a, b, c ∈ ℝ" );
print( "❑ ó ax²+bx=d ⇢ llevando a forma estandar ax²+bx-d=0, donde d ∈ ℝ" );
// Mas info: http://es.wikipedia.org/wiki/Ecuaci%C3%B3n_de_segundo_grado
// https://www.wolframalpha.com/input/?i=handwritten+roots+ax%C2%B2%2Bbx%C2%B9%2Bc
// http://slideplayer.com/slide/1665366/
// http://wmatem.eis.uva.es/~matpag/CONTENIDOS/Conicas/marco_conicas.htm
print( "a:es el coeficiente del termino cuadrático ax²" );
print( "b: es el coeficiente del término lineal bx¹" );
print( "c ∨ d: es el coeficiente o término independiente cx°" );
print( "Soluciones: x12=-b/(2 a) ±√[b² -4 a c]/(2 a)" );
//print( "Ingrese los coeficientes. [Enter] para continuar" );
//wait();
//ax²bx¹cx°
// III: Solicitar Entrada de datos
//print( "Ingrese el valor del coeficiente a: " );
//if NOT( input( coeficiente1_a )) then kill; end;
//while true do if NOT( input( coeficiente1_a , "a x² + b x + c = 0 ∨ ax²+bx=d", "a:", "Ingrese el coeficiente a" ) ) then break; end; end;
//print( "Ingrese el valor del coeficiente b: " ); wait();
//if NOT( input( coeficiente2_b )) then kill; end;
//while true do if NOT( input( coeficiente2_b , "a x² + b x + c = 0" ∨ ax²+bx=d, "b:", "Ingrese el coeficiente b" ) ) then break; end; end;
//print( " Ingrese el valor del coeficiente c: " ); wait();
//if NOT( input( coeficiente3_c )) then kill; end;
//while true do if NOT( input( coeficiente3_c , "a x² + b x + c = 0" ∨ ax²+bx=d, "c:", "Ingrese el coeficiente c" ) ) then break; end; end;
//print( " Ingrese el valor de d: " ); wait();
//if NOT( input( coeficiente3_d )) then kill; end;
//while true do if NOT( input( coeficiente3_d , "a x² + b x + c = 0" ∨ ax²+bx=d, "c:", "Ingrese d" ) ) then break; end; end;
if NOT( input( { coeficiente1_a, coeficiente2_b, coeficiente3_c, coeficiente3_d }, "a x² + b x + c = 0 ∨ ax²+bx=d", { "a:", "b:", "c:", "d:"}, {"Ingrese el coeficiente a", "Ingrese el coeficiente b", "Ingrese el coeficiente c", "Ingrese el coeficiente d"} ) ) then kill; end;
coeficiente3_c := coeficiente3_c-coeficiente3_d; // llevando a forma estandar ax²+bx+c=0
// Impresión de los datos de entrada
print(); // clear lcd
print( "Use teclas cursor ↑↓ para desplazar la pantalla de salida" );
print("" );
print( "❑ Los coeficientes ingresados son" );
print( "a = " + coeficiente1_a + ", b = " + coeficiente2_b + ", c = " + coeficiente3_c);
// IV: Chequeo de argumentos (coeficientes) de entrada
// Puesto que la ecuación tiene 3 coeficientes, el número de combinaciones posibles de sus coeficientes es 3, n ^ = 8
case
// CASE 1 todos los coeficientes son diferentes de cero
// a x² + b x + c = 0
if coeficiente1_a <> 0 and coeficiente2_b <> 0 and coeficiente3_c <> 0 then
banderaTermino := 1;
end;
// CASE 2: sin termino lineal & -c/a > 0
// a x² + c = 0 ⇒ x1 = -√(-c/a) ∨ x2 = +√(-c/a)
// -c/a < 0 Imaginarios puros opuestos
if coeficiente1_a <> 0 and coeficiente2_b == 0 and coeficiente3_c <> 0 then // b = 0
banderaTermino := 2;
end;
// CASE 3: sin termino independiente una raiz es cero
// a x² + b x = 0 ⇒ x1 = 0 ∨ x2 = -b/2a
if coeficiente1_a <> 0 and coeficiente2_b <> 0 and coeficiente3_c == 0 then // c = 0
banderaTermino := 3;
end;
// CASE 4: Sin termino cuadratico y sin termino lineal resulta una INCONSISTENCIA MATEMÁTICA
// c ≠ 0 ⇒ c = 0
if coeficiente1_a == 0 and coeficiente2_b == 0 and coeficiente3_c <> 0 then // a = 0, b = 0
banderaTermino := 4;
end;
// CASE 5: sin termino lineal y sin termino independiente (la expresion solo contine el término de segundo grado)
// las dos raices son iguales a cero, el discriminante es cero
// a x² = 0 ⇒ √x² = 0 ⇒ x12 = ±0 (raíz o solución doble)
if coeficiente2_b == 0 and coeficiente3_c == 0 and coeficiente1_a <> 0 then // b = 0, c = 0
banderaTermino := 5;
end;
// CASE 6: Sin termino cuadratico y sin termino lineal la expresion se reduce a la ECUACIÓN LINEAL INCOMPLETA
// b x = 0 ⇒ x = 0 (única solución)
if coeficiente1_a == 0 and coeficiente2_b <> 0 and coeficiente3_c == 0 then // a = 0, c = 0
banderaTermino := 6;
end;
// CASE 7: Todos los coeficientes son cero, NO HAY ECUACIÓN
// 0+0+0 ⇒ 0
if coeficiente1_a == 0 and coeficiente2_b == 0 and coeficiente3_c == 0 then //
banderaTermino := 7;
end;
// CASE 8: Sin termino cuadratico la expresion se reduce a la ECUACIÓN LINEAL COMPLETA
// b x + c = 0 ⇒ x = -c/a (única solución)
if coeficiente1_a == 0 and coeficiente2_b <> 0 and coeficiente3_c <> 0 then // a = 0
banderaTermino := 8;
end;
end;
case // CASE 7:
if banderaTermino == 7 then
// EQ 19
print( "Todos los coeficientes son cero, NO HAY ECUACIÓN" );
print( "la expresión resultante es el número 0" );
end;
if banderaTermino == 4 then // CASE 4:
// EQ 18
print( "Sin termino cuadratico ax²y sin termino lineal bx¹, resulta una INCONSISTENCIA MATEMÁTICA" );
print( "la expresión resultante es un número y la ecuación es falsa: " + coeficiente3_c + " = 0" );
end;
if banderaTermino == 8 then // CASE 8:
// EQ 17
print( "Sin termino cuadratico ax² y con termino independiente cx°, la expresion se reduce a la ECUACIÓN LINEAL COMPLETA" );
exprAuxTexto0 := "";
if coeficiente2_b == -1 then
exprAuxTexto0 := exprAuxTexto0 + "-";
else
if coeficiente2_b > 0 then
if coeficiente2_b <> 1 then
exprAuxTexto0 := exprAuxTexto0 + coeficiente2_b + "*";
end;
else
exprAuxTexto0 := exprAuxTexto0 + coeficiente2_b + "*";
end;
end;
exprAuxTexto0 := exprAuxTexto0+"x";
if coeficiente3_c > 0 then
exprAuxTexto0 := exprAuxTexto0 + "+";
end;
exprAuxTexto0 := exprAuxTexto0 + coeficiente3_c;
print( exprAuxTexto0 + " = 0" );
print( "" );
if coeficiente1_a == 1 then //
print( "la solución simbolica unica es una linea recta: x = -c" );
else
print( "la solución simbolica unica es una linea recta: x = -c/b" );
end;
print( "evaluando" );
print( "x = " + exact(-coeficiente3_c/coeficiente2_b) + " = " + approx(-coeficiente3_c/coeficiente2_b) );
end;
if banderaTermino == 6 then // CASE 6:
// EQ 16
print( "Sin termino cuadratico ax² y sin termino independiente cx° la expresion se reduce a la ECUACIÓN LINEAL INCOMPLETA" );
exprAuxTexto0 := "";
if coeficiente2_b == -1 then
exprAuxTexto0 := exprAuxTexto0 + "-";
else
if coeficiente2_b > 0 then
if coeficiente2_b <> 1 then
exprAuxTexto0 := exprAuxTexto0 + coeficiente2_b + "*";
end;
else
exprAuxTexto0 := exprAuxTexto0 + coeficiente2_b + "*";
end;
end;
exprAuxTexto0 := exprAuxTexto0+"x";
print( exprAuxTexto0 + " = 0" );
print( "la única solución es: x = 0" );
end;
default //CASE 1 2 3 5:
// V: llevando la expresión de entrada a notación mas estándar -1*x² => -x². 1*x² => x²"
exprAuxTexto0 := "";
if coeficiente1_a == -1 then
exprAuxTexto0 := "-";
else
if coeficiente1_a <> 1 then
exprAuxTexto0 := coeficiente1_a + "*";
end;
end;
exprAuxTexto0 := exprAuxTexto0 + "x²";
if coeficiente2_b <> 0 then
if coeficiente2_b == -1 then
exprAuxTexto0 := exprAuxTexto0 + "-";
else
if coeficiente2_b > 0 then
exprAuxTexto0 := exprAuxTexto0 + "+";
if coeficiente2_b <> 1 then
exprAuxTexto0 := exprAuxTexto0 + coeficiente2_b + "*";
end;
else
exprAuxTexto0 := exprAuxTexto0 + coeficiente2_b + "*";
end;
end;
exprAuxTexto0 := exprAuxTexto0+"x";
end;
if coeficiente3_c <> 0 then
if coeficiente3_c > 0 then
exprAuxTexto0 := exprAuxTexto0 + "+";
end;
exprAuxTexto0 := exprAuxTexto0 + coeficiente3_c;
end;
case
// ecuación incompleta b ∨ c = 0
if banderaTermino == 2 then
print( "❑ La Ecuación Cuadrática no contiene termino lineal bx¹ y queda: " );
end;
if banderaTermino == 3 then
print( "❑ La Ecuación Cuadrática no contiene termino independiente cx° y queda: " );
end;
if banderaTermino == 5 then
print( "❑ La Ecuación Cuadrática solo contiene termino de segundo grado ax² y queda: " );
end;
default
print( "❑ La Ecuación Cuadrática contiene todos los términos (ax² bx¹ cx°) y queda:" );
end;//case
print( exprAuxTexto0 + " = 0" );
// VI: Cálculos
discriminante := coeficiente2_b^2 - 4 * coeficiente1_a * coeficiente3_c;
print( "❑ La fórmula del Discriminante de la ecuación cuadrática es el radical de la formula X12: D=b²-4ac ⇢√(" + coeficiente2_b^2 + "-4*" + coeficiente1_a + "*" + coeficiente3_c + ")=" + discriminante );
// eq1:=-b, eq2:=-√(b^2-4*a*c), eq3:=√(b^2-4*a*c), eq4:=(2*a)
// Información de la solución, los coeficientes y el discriminante determina la índole y la cantidad de raíces
print( "" );
print( "❑ INTERSECTOS CON EL EJE X/Y:" );
print( "" );
if discriminante == 0 then // D = 0
print( "Como el discriminante es 0, entonces hay 2 soluciones iguales en los números reales (raíz doble)." );
print( "Ó que es lo mismo, un intersecto o una solución en los ℝ con multiplicidad 2" );
if banderaTermino == 5 then // CASE 5: a*x² = 0; b = 0, c = 0 Solo continen el término de segundo grado
print( "(la parábola sólo toca al eje de las abscisas X y ordenadas Y en un solo punto)." );
print( "" ); print( "" ); print( "" );
if coeficiente1_a == 1 then
// EQ0
print( "❑ SOLUCIONES de 1x²=0, b=c=0:" ); // D = 0 & 1*x²=0. x=0 (2)
print( "" );
print( "x1,2 = -b/(2 a) ± √[b² -4 a c]/(2 a)" );
print( "radical √[b² -4 a c]=0 ⇢ Disc=0" );
print( "x1,2 = -0/2 ± 0/2" );
print( "" );
else
// EQ1
print( "❑ SOLUCIONES de ax²=0, b=c=0:" ); // D = 0 & 2*x²=0. x=0 (2)
print( "" );
print( "x1,2 = -b/(2 a) ± √[b² -4 a c]/(2 a)" );
print( "radical √[b² -4 a c]=0 ⇢ Disc=0" );
print( "x1,2= -0/(2 a) ± 0/(2 a)" );
print( "" );
end;
else // CASE 1 todos los coeficientes son diferentes de cero
print( "(la parábola sólo toca al eje de las abscisas X en un solo punto)." );
print( "Intersecto sobre el eje Y: (0," + coeficiente3_c + ")" );
print( "" );print("" );
if coeficiente1_a == 1 then
// EQ2
print( "❑ SOLUCIONES SIMBÓLICAS de 1x²+bx+c=0:" ); // D = 0 & 1*x²+2*x+1=0. x=-1 (2)
print( "" );
print( "x1,2 = -b/(2 a) ± √[b² -4 a c]/(2 a)" );
print( "radical √[b² -4 a c]=0 ⇢ Disc=0" );
print( "x1,2 = -b/2 ± 0/2" );
print( "" );
print( "x1 = -b/2 ∨" );
print( "x2 = -b/2 ∨" );
print( "" );
print( "x1,2 = -b/2" );
else
// EQ3
print( "❑ SOLUCIONES SIMBÓLICAS de ax²+bx+c=0:" ); // D = 0 & 2*x²+6*x+4.5=0, x=-1.5 (2)
print( "" );
print( "x1,2 = -b/(2 a) ± √[b² -4 a c]/(2 a)" );
print( "radical √[b² -4 a c]=0 ⇢ Disc=0" );
print( "x1,2 = -b/(2 a) ± 0/(2 a)" );
print( "" );
print( "x1 = -b/(2a) ∨" );
print( "x2 = -b/(2a) ∨" );
print("" );
print( "x1,2 = -b/(2a)" );
end;
end;
banderaDiscriminante := 1; // 1 raiz doble
else
if discriminante < 0 then // D < 0
print( "Como el discriminante es negativo, entonces hay 2 soluciones distintas en los números complejos ℂ:" );
if banderaTermino == 2 then // CASE 2: a x² + c = 0, b = 0 // sin termino lineal & -c/a < 0
print( "Imaginarios puros" );
if coeficiente1_a == 1 then
// EQ4
print( "(la parábola no toca al eje de las abscisas X)" );
print( "Intersecto sobre el eje Y: (0," + coeficiente3_c + ")" );
print( "" ); print( "" ); print( "" );
print( "❑ SOLUCIONES SIMBÓLICAS de 1x²+c=0, b=0:" ); // 1*x²+5 = 0 or x²=-5
print( "" );
print( "x1,2 = -b/(2 a) ± √[b² -4 a c]/(2 a)" );
print( "x1,2 = 0/2 ± √[-4 c]/2" );
print( "x1,2 = ±√(-c)" );
print( "subradical (s=-c ∧ s<0 ⇢ Disc<0)" ); // c > 0 or -c < 0
print( "" );
print( "x1 = -i*√|s| ∨" );
print( "x2 = +i*√|s| ∨" );
print( "x1,2 = ±i*√c" );
else
// EQ5
print( "(la parábola no toca al eje de las abscisas X)" );
print( "Intersecto sobre el eje Y: (0," + coeficiente3_c + ")" );
print( "" ); print( "" ); print( "" );
print( "❑ SOLUCIONES SIMBÓLICAS de ax²+c=0, b=0:" ); // 0.5*x²+3= 0 or 0.5*x²=-3
print( "" );
print( "x1,2 = -b/(2 a) ± √[b² -4 a c]/(2 a)" );
print( "x1,2 = 0/(2 a) ± √[-4 a c]/(2 a)" );
print( "x1,2 = ±√(-c/a)" );
print( "subradical (s=-c/a ∧ s<0 ⇢ Disc<0)" );// -c/a < 0 -3/0.5 < 0
print( "" );
print( "x1 = -i*√(-s) ∨" ); // -s para no calcularlo como raiz de numero negativo
print( "x2 = +i*√(-s) ∨" );
print( "x1,2 = ±i*√|s|" );
end;
else
print( "Un numero complejo y su conjugado" );
if coeficiente1_a == 1 then
// EQ6
print( "(la parábola no toca al eje de las abscisas X)" );
print( "Intersecto sobre el eje Y: (0," + coeficiente3_c + ")" );
print( "" );print( "" );print( "" );
print( "❑ SOLUCIONES SIMBÓLICAS de 1x²+bx+c=0" ); // 1*x²-4*x+5= 0
print( "" );
print( "x1,2 = -b/(2 a) ± √[b² -4 a c]/(2 a)" );
print( "subradical (b²-4ac)=D ⇢ Disc<0" );
print( "" );
print( "x1 = -b/2 + i*√[-D]/2) ∨" );
print( "x2 = -b/2 - i*√[-D]/2) ∨" );
print( "" );
print( "x1,2 = -b/2 ± i*√[-(b²-4c)]/2)" );
print( "" );
else
// EQ7
print( "Un numero complejo y su conjugado" );
print( "(la parábola no toca al eje de las abscisas X) " );
print( "Intersecto sobre el eje Y: (0," + coeficiente3_c + ") " );
print( "" ); print( "" ); print( "" );
print( "❑ SOLUCIONES SIMBÓLICAS de ax²+bx+c=0" ); // 2*x²-4*x+5= 0
print( "" );
print( "x1,2 = -b/(2 a) ± √[b² -4 a c]/(2 a)" );
print( "subradical (b²-4ac)=D ⇢ Disc<0" );
print( "" );
print( "x1 = -b/(2a) + i*√[-D]/(2a) ∨" );
print( "x2 = -b/(2a) - i*√[-D]/(2a) ∨" );
print( "" );
print( "x1,2 = -b/(2a) ± i*√[-(b²-4ac)]/(2a)" );
print( "" );
print( "" );
end;
end;
banderaDiscriminante := -1;
else // D > 0
print( "Como el discriminante es positivo, entonces la parábola cruza dos veces el eje de las abscisas X" );
print( "hay 2 soluciones diferentes en los números reales ℝ" );
if banderaTermino == 2 then // CASE 2: a x² + c = 0, b = 0 // sin termino lineal & -c/a > 0
print( "un número y su opuesto por que el eje focal es x=0" );
print( "Intersecto sobre el eje Y: (0," + coeficiente3_c + ") " );
if coeficiente1_a == 1 then
// EQ8
print( "" );
print( "❑ SOLUCIONES SIMBÓLICAS de 1x²+c=0, b=0:" ); // 1*x² - 5 = 0 or x² = 5
print( "" );
print( "x1,2 = -b/(2 a) ± √[b² -4 a c]/(2 a)" );
print( "x12 = 0 ± √[-4 c]/2" );
print( "x12 = 0 ± √(-c) " );
print( "subradical (s=-c ∧ s>0)" ); // c < 0 or -c > 0
print( "" );
print( "x1 = -√s ∨" );
print( "x2 = +√s ∨" );
print( "x12 = ±√-c" );
else
// EQ9
print( "" );
print( "❑ SOLUCIONES SIMBÓLICAS de ax²+c=0, b=0:" );
print( "" );
print( "x1,2 = -b/(2 a) ± √[b² -4 a c]/(2 a)" ); // 2*x² - 5 = 0
print( "x12 = 0 ± √[-4 a c]/(2 a) " );
print( "x12 = 0 ± √(-c/a) " );
print( "subradical (s=-c/a ∧ s>0)" );// -c/a > 0
print( "" );
print( "x1 = -√s ∨" );
print( "x2 = +√s" );
print( "x12 = ±√s" );
end;
else
if banderaTermino == 3 then // CASE 3: a x² + b x = 0 ⇒ x1 = 0 ∨ x2 = -b/2a, sin termino independiente una raiz o intersecto es cero
print("La palabra cruza el origen (0,0) " );
print( "Intersecto sobre el eje Y: (0," + coeficiente3_c + ") " );
print( "" );
if coeficiente1_a == 1 then // 1*x² - 2x = 0
// EQ10
print( "" );
print( "❑ SOLUCIONES SIMBÓLICAS de 1x²+bx=0, c=0:" ); // 1*x² - 2x = 0 x = 0 v x = 4
print( "" );
print( "x1,2 = -b/(2 a) ± √[b² -4 a c]/(2 a)" );
print( "x12 = -b/2 ± √[b²]/2" );
print( "x12 = -b/2 ± b/2" );
print( "" );
print( "x1 = 0 ∨" );
print( "x2 = -b" );
print( "" );
print( "" );
else
// EQ11
print( "" );
print( "❑ SOLUCIONES SIMBÓLICAS de ax²+bx=0, c=0:" ); // 0.5x² - 2x = 0 x = 0 v x = 4
print( "" );
print( "x1,2 = -b/(2 a) ± √[b² -4 a c]/(2 a)" );
print( "x12 = -b/(2 a) ± √[b²]/(2 a) " );
print( "x12 = -b/(2 a) ± b/(2 a)" );
print( "" );
print( "x1 = 0 ∨" );
print( "x2 = -b/a" );
print( "" );
print( "" );
end;
else // CASE 1: todos los coeficientes son diferentes de cero y D>0
print( "Intersecto sobre el eje Y: (0," + coeficiente3_c + ") " );
if coeficiente1_a == 1 and (coeficiente2_b MOD 2) <> 0 then // 1x² -3x +2 // IMPAR & 1
// EQ12
print( "" );
print( "❑ SOLUCIONES SIMBÓLICAS de 1x²+bx+c=0" );
print( "" );
print( "x12 = -b/2 ± √[b² -4 c]/2" );
print( "" );
else
if coeficiente1_a <> 1 and (coeficiente2_b MOD 2) == 0 then // 2x² +2x -3 // PAR
// EQ13
print( "" ); print( "" ); print( "" );
print( "❑ SOLUCIONES SIMBÓLICAS de ax²+2mx+c=0:" );
print( "" );
print( "b es #par: b=2*m, m=b/2" );
print( "x12 = -m/a ± √[m² -a c]/a" );
print( "" );
else
if coeficiente1_a == 1 and (coeficiente2_b MOD 2) == 0 then // 1x² +2x -3 // PAR & 1
// EQ14
print( "" ); print( "" ); print( "" );
print( "❑ SOLUCIONES SIMBÓLICAS de 1x²+2mx+c=0" );
print( "" );
print( "b es #par: b=2*m, m=b/2" );
print( "x12 = -m ±√(m² -c) " );
print( "" );
else // a <> 1, b no es par, c<>0 // 0.5x² -3x +2.5 // IMPAR
// EQ15
print( "" ); print( "" ); print( "" ); print( "" );
print( "❑ SOLUCIONES SIMBÓLICAS de ax²+bx+c=0" );
print( "" );
print( "x1,2 = -b/(2 a) ± √[b² -4 a c]/(2 a)" );
print( "x1 = -b/(2 a) - √[D]/(2 a) ∨" );
print( "x2 = -b/(2 a) + √[D]/(2 a) " );
print( "" );
end;
end;
end;
end;
end;
banderaDiscriminante := 2;
end;
end;
// Cálculo de las raíces
print( "❑ EVALUANDO:" );
case
// D<0
if banderaDiscriminante == -1 then
if banderaTermino == 2 then // CASE 2: sin termino lineal & -c/a < 0
raiz1ParteReal := 0;
if coeficiente1_a == 1 then // x² + c = 0 ⇒ x1,2 = ±i*√c"
print( "" );
//print( "E4" ); // 1*x²+5= 0
exprAux0 := √(coeficiente3_c);
print("x12 = ± i*√(" + coeficiente3_c + ")= ±i*" + round(exprAux0,4) );
else // // a x² + c = 0 ⇒ x12 = ±√(-c/a)
//print( "E5" ); // 0.5*x²+3= 0
print( "" );
exprAux0 := √(coeficiente3_c / coeficiente1_a);
print("x12 = ± i*√(" + coeficiente3_c + "/" + coeficiente1_a + ")= ±i*" + round(exprAux0,4) );
end;
raiz1ParteImag := -exprAux0; // -√(coeficiente3_c/1);
else // CASE 1 todos los coeficientes son diferentes de cero y D<0
if coeficiente1_a == 1 then // x12 = -b/2 ± i*√[-(b²-4c)]/2)
//print( "E6" ); // 1*x²-4*x+5= 0
print( "" );
raiz1ParteReal := -coeficiente2_b / 2;
exprAux1 := sqrt(-discriminante) / 2;
exprAuxTexto1 := "-" + coeficiente2_b + "/2";
exprAuxTexto2 := "√[-({" + coeficiente2_b + "}²-4*" + coeficiente3_c + ")]/2";
print( "x12=" + exprAuxTexto1 + "±i*" + exprAuxTexto2 + "= " );
print( "x12 = " + -coeficiente2_b + "/2" + " ± i*√[" + -discriminante + "]/2" + " = " + raiz1ParteReal + "±i*" + round(exprAux1,4) );
else // x12 = -b/(2a) ± i*√[-(b²-4ac)]/(2a)
//print( "E7" ); // 2*x²-4*x+5= 0
print( "" );
exprAux0 := 2*coeficiente1_a;
raiz1ParteReal := -coeficiente2_b / exprAux0;
exprAux1 := sqrt(-discriminante) / exprAux0;
exprAuxTexto0 := "(2*" + coeficiente1_a + ")";
exprAuxTexto1 := "-" + coeficiente2_b + "/" + exprAuxTexto0;
exprAuxTexto2 := "√[-({" + coeficiente2_b + "}²-4*" + coeficiente1_a + "*" + coeficiente3_c + ")]/" + exprAuxTexto0;
print( "x12=" + exprAuxTexto1 + "±i*" + exprAuxTexto2 + "= " );
print( "x12 = " + -coeficiente2_b + "/" + exprAux0 + " ± i*√[" + -discriminante + "]/" + exprAux0 + " = " + raiz1ParteReal + "±i*" + round(exprAux1,4) );
end;
raiz1ParteImag := -exprAux1;
end;
raiz2ParteReal := raiz1ParteReal;
raiz2ParteImag := exprAux1;
numComplejo1[parteReal] := raiz1ParteReal;
numComplejo1[parteImag] := raiz1ParteImag;
numComplejo2[parteReal] := raiz2ParteReal;
numComplejo2[parteImag] := raiz2ParteImag;
exprAuxTexto0 := "Primera raíz: x1 = ";
if numComplejo1[parteReal] <> 0 then
exprAuxTexto0 := exprAuxTexto0 + numComplejo1[parteReal];
end;
if numComplejo1[parteImag] >= 0 then
if numComplejo1[parteImag] == 1 then
exprAuxTexto0 := exprAuxTexto0 + "+i";
else
exprAuxTexto0 := exprAuxTexto0 + "+" + numComplejo1[parteImag] + "*i";
end;
else // <0
if numComplejo1[parteImag] == -1 then
exprAuxTexto0 := exprAuxTexto0 + "-i";
else
exprAuxTexto0 := exprAuxTexto0 + numComplejo1[parteImag] + "*i";
end;
end;
print( exprAuxTexto0 );
exprAuxTexto0 := "Segunda raíz: x2 = ";
if numComplejo2[parteReal] <> 0 then
exprAuxTexto0 := exprAuxTexto0 + numComplejo2[parteReal];
end;
if numComplejo2[parteImag] >= 0 then
if numComplejo2[parteImag] == 1 then
exprAuxTexto0 := exprAuxTexto0 + "+i";
else
exprAuxTexto0 := exprAuxTexto0 + "+" + numComplejo2[parteImag] + "*i";
end;
else // <0
if numComplejo2[parteImag] == -1 then
exprAuxTexto0 := exprAuxTexto0 + "-i";
else
exprAuxTexto0 := exprAuxTexto0 + numComplejo2[parteImag] + "*i";
end;
end;
print( exprAuxTexto0 );
print( "" );
print( "Valor exacto y/o aproximado" );
print( "Parte Real: " + QPI(raiz1ParteReal) + " → " + approx(raiz1ParteReal) );
print( "Parte Imaginaria: " + QPI( abs(raiz1ParteImag) ) + " → " + approx( abs(raiz1ParteImag) ) );
print( "Eje focal x = " + raiz1ParteReal );
print( "" );
end;//then-case
//CASE D=0
if banderaDiscriminante == 1 then // 1 raiz doble
if banderaTermino == 5 then // CASE 5: a x² = 0; b = 0, c = 0, Solo el término de segundo grado
if coeficiente1_a == 1 then
//print( "E0" ); // 1*x²=0
print( "" );
raiz1 := 0/2; // 0
print("x1 = " + raiz1 );
print("x2 = " + raiz1 );
else
//print( "E1" ); // 2*x²=0
print( "" );
exprAux1 := 2*coeficiente1_a;
raiz1 := 0/exprAux1; // 0
print("x1,2 = 0/(2*" + coeficiente1_a + ") = 0/" + exprAux1 + " = " + raiz1 );
print( "" );
end;
print( "Eje focal x = " + raiz1 );
print( "" );
else // CASE 1 todos los coeficientes son diferentes de cero y D=0
if coeficiente1_a == 1 then // "x1,2 = -b/2"
//print( "E2" ); // 1*x²+2*x+1=0. x=-1 (2)
print( "" );
raiz1 := -coeficiente2_b / 2;
exprAuxTexto0 := "-" + coeficiente2_b + "/2";
print("x12 = " + exprAuxTexto0 + " = " + raiz1 );
else // "x1,2 = -b/(2 a)"
//print( "E3" ); // 2*x²+6*x+4.5=0, x=-1.5 (2)
print( "" );
exprAux1 := 2*coeficiente1_a;
raiz1 := -coeficiente2_b / exprAux1;
exprAuxTexto0 := "-" + coeficiente2_b + "/(2*" + coeficiente1_a + ")";
exprAuxTexto1 := -coeficiente2_b + "/" + exprAux1;
print("x12 = " + exprAuxTexto0 + " = " + exprAuxTexto1 + " = " + raiz1 );
end;
raiz2 := raiz1; // Raiz1 == Raiz2 (multiplicidad 2)
print( "" );
print( "Valor exacto y/o aproximado" );
print( "" );
print( "Primera raíz: " + QPI(raiz1) + " → " + approx(raiz1) );
print( "Segunda raíz: " + QPI(raiz2) + " → " + approx(raiz2) );
print( "" );
print( "Eje focal x = " + raiz1 );
print( "" ); print( "" );
end;
end;//then
//CASE D>0
if banderaDiscriminante == 2 then
if banderaTermino == 2 then // CASE 2: sin termino lineal & -c/a > 0
if coeficiente1_a == 1 then
print( "" );
//print( "E8" ); // 1*x² - 5 = 0 or x² = 5
// 1*x² + c = 0 ⇒ x1 = -√(-c) ∨ x2 = +√(-c)
exprAux0 := -coeficiente3_c;
raiz1 := -sqrt( exprAux0 );
raiz2 := -raiz1;
print("x12 = ±√(-" + coeficiente3_c + ") = ±√(" + -coeficiente3_c + ") = " + round(raiz1,4) );
else
print( "" );
//print( "E9" ); // 2*x² - 5 = 0
// a*x² + c = 0 ⇒ x1 = -√(-c/a) ∨ x2 = +√(-c/a)
exprAux0 := (-coeficiente3_c / coeficiente1_a);
raiz1 := -sqrt( exprAux0 );
raiz2 := -raiz1;
print("x12 = ±√(-" + coeficiente3_c + "/" + coeficiente1_a + ") = ±√(" + -coeficiente3_c + "/" + coeficiente1_a + ") = " + round(raiz1,4) );
end;
print( "" );
// Ordenando raíces de menor a mayor tal y como se mostrarían marcadas en las abscisas.
if raiz1 >= raiz2 then
raizMayor := raiz1;
raiz1 := raiz2;
raiz2 := raizMayor;
end;
print( "Valor exacto y/o aproximado" );
print( "" );
print( "raíz menor: " + QPI(raiz1) + " → " + approx(raiz1) );
print( "raíz mayor: " + QPI(raiz2) + " → " + approx(raiz2) );
print( "" );
print( "Eje focal x = " + 0 );
else
if banderaTermino == 3 then // CASE 3: a x² + b x = 0 ⇒ x1 = 0 ∨ x2 = -b/2a, sin termino independiente una raiz es cero
raiz1 := 0;
if coeficiente1_a == 1 then // 1*x² - 2x = 0 x = 0 v x = 2
print( "" );
//print( "E10" );
raiz2 := -coeficiente2_b;
print("x2 = -" + coeficiente2_b + " = " + round(raiz2,5) );
else
print( "" );
//print( "E11" ); // 0.5x² - 2x = 0 x = 0 v x = 4
raiz2 := -coeficiente2_b / coeficiente1_a;
print("x2 = -" + coeficiente2_b + "/" + coeficiente1_a + " = " + -coeficiente2_b + "/" + coeficiente1_a + " = " + round(raiz2,5) );
end;
print( "" );
else // CASE 1 todos los coeficientes son diferentes de cero y D>0
if coeficiente1_a == 1 and (coeficiente2_b MOD 2) <> 0 then
print( "" );
//print( "E12" ); // 1x² -3x +1.75 // IMPAR & 1
exprAux0 := √(discriminante)/2;
raiz1 := -coeficiente2_b/2 - exprAux0;
raiz2 := -coeficiente2_b/2 + exprAux0;
//"x12 = -b/2 ± √[b² -4 c]/2"
print( "x1=-" + coeficiente2_b + "/(2*" + coeficiente1_a + ")-√[(" + coeficiente2_b + ")²-4*" + coeficiente1_a + "*" + coeficiente3_c + "]/(2*" + coeficiente1_a + ") " );
print( "x1 =" + -coeficiente2_b + "/2" + "-√[" + discriminante + "]/2" );
print( "x1 = " + -coeficiente2_b/2 + "-" + exprAux0 + "= " + round(raiz1,3) );
print( "" );
print( "x2=-" + coeficiente2_b + "/(2*" + coeficiente1_a + ")+√[(" + coeficiente2_b + ")²-4*" + coeficiente1_a + "*" + coeficiente3_c + "]/(2*" + coeficiente1_a + ") " );
print( "x2 = " + -coeficiente2_b + "/2" + "+√[" + discriminante + "]/2" );
print( "x2 = " + -coeficiente2_b/2 + "+" + exprAux0 + "= " + round(raiz2,3) );
print( "" );
else
if coeficiente1_a <> 1 and (coeficiente2_b MOD 2) == 0 then // 2x² +2x -3 // PAR
// print( "13" );
print( "" );
exprAux0 := coeficiente2_b/2;
raiz1 := -exprAux0/coeficiente1_a - sqrt(exprAux0²-coeficiente1_a*coeficiente3_c)/coeficiente1_a;
raiz2 := -exprAux0/coeficiente1_a + sqrt(exprAux0²-coeficiente1_a*coeficiente3_c)/coeficiente1_a;
//"x12 = -m/a ± √[m² -a c]/a"
print( "x1=-" + exprAux0 + "/" + coeficiente1_a + "-√[(" + exprAux0 + ")²-" + coeficiente1_a + "*" + coeficiente3_c + "]/" + coeficiente1_a + " = " );
print( "x1=-" + exprAux0 + "/" + coeficiente1_a + "-√[" + discriminante + "]/" + coeficiente1_a + " = " + raiz1 );
print( "x2=-" + exprAux0 + "/" + coeficiente1_a + "+√[(" + exprAux0 + ")²-" + coeficiente1_a + "*" + coeficiente3_c + "]/" + coeficiente1_a + " = " );
print( "x2=-" + exprAux0 + "/" + coeficiente1_a + "+√[" + discriminante + "]/" + coeficiente1_a + " = " + raiz2 );
print( "" );
else
if coeficiente1_a == 1 and (coeficiente2_b MOD 2) == 0 then // 1x² +2x -3 // PAR & 1
//print( "14" );
print( "" );
exprAux0 := coeficiente2_b/2;
raiz1 := -exprAux0 - sqrt(exprAux0²-coeficiente3_c);
raiz2 := -exprAux0 + sqrt(exprAux0²-coeficiente3_c);
print( "x1=-" + exprAux0 + "-√[(" + exprAux0 + ")²-" + coeficiente3_c + "] = " + raiz1 );
print( "x2=-" + exprAux0 + "+√[(" + exprAux0 + ")²-" + coeficiente3_c + "] = " + raiz2 );
print( "" );
else
// print( "15" );
print( "" );
exprAux1 := 2*coeficiente1_a;
exprAux0 := √(discriminante)/exprAux1;
raiz1 := -coeficiente2_b/exprAux1 - exprAux0;
raiz2 := -coeficiente2_b/exprAux1 + exprAux0;
//0.5x² -3x +2.5
print( "x1=-" + coeficiente2_b + "/(2*" + coeficiente1_a + ")-√[(" + coeficiente2_b + ")²-4*" + coeficiente1_a + "*" + coeficiente3_c + "]/(2*" + coeficiente1_a + ") " );
print( "x1=" + -coeficiente2_b + "/" + exprAux1 + "-√[" + discriminante + "]/" + exprAux1 );
if FP(√(discriminante)) == 0 then
print( "x1=" + -coeficiente2_b/exprAux1 + "-" + √(discriminante) + "/" + exprAux1 + "= " + round(raiz1,3) );
end;
print( "x1=" + -coeficiente2_b/exprAux1 + "-" + exprAux0 + "= " + round(raiz1,3) );
print( "" );
print( "x2=-" + coeficiente2_b + "/(2*" + coeficiente1_a + ")+√[(" + coeficiente2_b + ")²-4*" + coeficiente1_a + "*" + coeficiente3_c + "]/(2*" + coeficiente1_a + ") " );
print( "x2=" + -coeficiente2_b + "/" + exprAux1 + "+√[" + discriminante + "]/" + exprAux1 );
if FP(√(discriminante)) == 0 then
print( "x2=" + -coeficiente2_b/exprAux1 + "+" + √(discriminante) + "/" + exprAux1 + "= " + round(raiz1,3) );
end;
print( "x2=" + -coeficiente2_b/exprAux1 + "+" + exprAux0 + "= " + round(raiz2,3) );
print( "" );
end;
end;
end;
end;
// Ordenando raíces de menor a mayor tal y como se mostrarían marcadas en las abscisas.
if raiz1 >= raiz2 then
raizMayor := raiz1;
raiz1 := raiz2;
raiz2 := raizMayor;
end;
print( "Valor exacto y/o aproximado" );
print( "" );
print( "raíz menor: " + QPI(raiz1) + " → " + approx(raiz1) );
print( "raíz mayor: " + QPI(raiz2) + " → " + approx(raiz2) );
print( "" );
//print( "Eje focal x = " + 0 );
print( "" ); print( "" );
end;
end;//then
end;//case
end;//case
print( "" );
print( "***End execution***" ); wait();
return "Done";
// eq1:=(-b+√(b^2-4*a*c))/(2*a); eq2:=-b+√(b^2-4*a*c); eq3:=(2*a); [eq2,eq3]
end;