Post Reply 
Analysis Quadratic Equation STEP to STEP
10-13-2016, 03:23 AM (This post was last modified: 12-06-2016 11:24 PM by compsystems.)
Post: #1
Analysis Quadratic Equation STEP to STEP
numeric entry version in Spanish, soon in English, plus symbolic version, Comments, suggestions etc. are welcome

[Image: SolvingQuadraticEquationStepToStep_hp_prime_image04.png]

Source Code

PHP Code:
export coeficiente1_acoeficiente2_bcoeficiente3_ccoeficiente3_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 raiz1raiz2raizMayor;
  
local raiz1ParteRealraiz1ParteImagraiz2ParteRealraiz2ParteImagdiscriminante;

  
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 NOTinput( { coeficiente1_acoeficiente2_bcoeficiente3_ccoeficiente3_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 killend;
  
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 <> and coeficiente2_b <> 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 <> and coeficiente2_b == 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 <> and coeficiente2_b <> 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 == and coeficiente2_b == 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 == and coeficiente3_c == 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 == and coeficiente2_b <> 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 == and coeficiente2_b == 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 == and coeficiente2_b <> 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^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^"-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 == 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 <> 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 == 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: " QPIabs(raiz1ParteImag) ) + " → " approxabs(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 := -sqrtexprAux0 );
            
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 := -sqrtexprAux0 );
            
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 = " );

          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 == and (coeficiente2_b MOD 2) <> 0 then 
              
print( "" );
              
//print( "E12" ); // 1x² -3x +1.75 // IMPAR & 1
              
exprAux0 := (discriminante)/2;

              
raiz1 := -coeficiente2_b/exprAux0;
              
raiz2 := -coeficiente2_b/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/"-" 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/"+" exprAux0 "= " round(raiz2,3) );
              print( 
"" );
            else
              if 
coeficiente1_a <> 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 == 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

Quote: Ejemplos Salida Comentario
caso -1: discriminante < cero: Raíces complejas o imaginarios puros y opuestos
1*X^2 +2*X +3 = 0 raíces: X1 = -1+1.4142*i and X2 = -1-1.4142*i
1*X^2 -2*X +2 = 0 raíces: X1 = 1+1*i and X2 = 1-1*i
1*X^2 +0*X +1 = 0 raíces: X1 = +i and X2 = -i sin término lineal, imaginario puro y opuesto
1*X^2 +0*X +4 = 0 raíces: X1 = 2* i and X2 = -2*i sin término lineal, imaginario puro y opuesto

Caso 1: discriminante cero: Raíces reales con multiplicidad doble
1*X^2 -11.6*X +33.64 = 0 raíces: X1 = 5.8 and X2 = 5.8
1*X^2 -4*X +4 = 0 raíces: X1 = 2 and X2 =2
1*X^2 +0*X +0 = 0 raíces: X1 = 0 and X2 =0

Caso 2: discriminante > cero. Raíces reales diferentes u opuestas
1*X^2 -5*X +6 = 0 raíces: X1 = 2 and X2 = 3
1*X^2 +0*X -4 = 0 raíces: X1 = 2 and X2 = -2 sin término lineal, reales opuestos
1*X^2 -1.2*X -1.8 = 0 raíces: X1 = -0.86969384567 and X2 = 2.06969384567
1*X^2 -3*X +2 = 0 raíces: X1 = 1 and X2 =2
1*X^2 -3*X +0 = 0 raíces: X1 = 0 and X2 =3 sin termino independiente

Casos especiales:
0*X^2 -3*X +2 = 0 X = 0.66 sin termino cuadrático
0*X^2 -3*X +0 = 0 X = 0 sin termino cuadrático y sin termino independiente
0*X^2 +0*X +2 = 0 2=0 sin termino cuadrático y sin termino lineal Inconsistencia Matemática
0*X^2 +0*X +0 = 0 No hay ecuación
Find all posts by this user
Quote this message in a reply
Post Reply 




User(s) browsing this thread: