Como parte de unos ejercicios de programación planteo la solución de una ecuación de segundo grado con una incógnita.
Usaremos HTML y Javascript para implemetar la solución a este problema ya que solo necesitaremos un navegador web y si estas leyendo esto quiere decir que ya cuentas con uno, además que no requerimos compilar el código.
Iniciemos haciendo un breve análisis del problema.
Una ecuación de segundo grado tiene la forma ax2 + bx + c = 0 y desde la secundaria nos enseñaron que pueden obtenerse los dos valores de x, que llamaremos x1 y x2, usando la formula general de solución para este tipo de ecuaciones:
Igualmente en la secundaria no dieron ciertas restricciones como que a debe ser diferente de cero, lo cual es porque no podriamos hacer la división entre cero además si a es cero tendriamos una ecuación de primer grado bx + c = 0. La otra restricción que nos dieron es que el contenido de la raíz cuadrada no puede ser menor a cero, ya que en el conjunto de los números reales no existe la raíz cuadrada de los números negativos.
De lo anterior podemos definir que:
Con el análisis anterior escribimos el siguiente algoritmo:
A continuación mostramos la implementación en una página HTML y usamos Javascript para programar el algoritmo.
Esta versión supone que no se pueden tener valores de X fuera del conjunto de los números Reales y solo resuelve ecuaciones de segundo grado.
Presiona aquí para ver la versión 1 de la página funcionando.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Solución a una Ecuación de 2do grado Versión 01</title>
<script type="text/javascript">
function resuelveEcuacion2doGrado(){
var a = eval(document.eq2.a.value);
var b = eval(document.eq2.b.value);
var c = eval(document.eq2.c.value);
var x1;
var x2;
var r ;
if(a != 0){
r = b*b - 4*a*c;
if(r >= 0){
x1 = (-b + Math.sqrt(r)) / (2 * a);
x2 = (-b - Math.sqrt(r)) / (2 * a);
document.eq2.x1.value = x1;
document.eq2.x2.value = x2;
}else{
alert("Las raíces son números complejos");
}
}else{
alert("Los valores no corresponden a una ecuación de 2do grado");
}
}
</script>
</head>
<body>
<form name="eq2">
<h2>Solución de una ecuación de 2do grado (ax<sup>2</sup> + bx + c = 0)</h2><br/><br/>
Asigna los valores de a, b y c y presiona el botón<br/>
<input type="text" name="a" size="2" /> x<sup>2</sup> +
<input type="text" name="b" size="2" /> x +
<input type="text" name="c" size="2" /> = 0
<br/>
<br/>
x1 = <input type="text" name="x1" /> <br/>
x2 = <input type="text" name="x2" /> <br/><br/>
<input type="button" value="Obten valores de X" onclick="javascript:resuelveEcuacion2doGrado();" />
</form>
</body>
</html>
Por supuesto que podemos mejorar algunos aspectos de la página anterior, por ejemplo, ocurrira un error si capturamos valores que no sean números en los campos de a, b y c.
Podemos también agregarle la funcionalidad para las ecuaciones de primer grado, es decir, cambiamos el mensaje de error en caso de que a = 0 y agregamos el cálculo de x1 = -c / b para una ecuación de primer grado, pero ahora nos interesa que b no sea cero, ya que en ese caso, cuando a = 0 y b = 0, no tenemos una ecuación, ya que no tenemos ninguna incógnita, y simplemente c = 0.
Presiona aquí para ver la versión 2 de la página funcionando.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Solución a una Ecuación de 2do grado Versión 02</title>
<script type="text/javascript">
function resuelveEcuacion2doGrado(){
var a = document.eq2.a.value;
var b = document.eq2.b.value;
var c = document.eq2.c.value;
var x1;
var x2;
var r ;
document.eq2.x1.value = "";
document.eq2.x2.value = "";
if(isNaN(a) || isNaN(b) || isNaN(c)){
alert("Debes capturar valores numericos");
return false;
}else{
a = eval(a);
b = eval(b);
c = eval(c);
}
if(a==undefined){
a = 0;
}
if(b==undefined){
b = 0;
}
if(c==undefined){
c = 0;
}
if(a != 0){
r = b*b - 4*a*c;
if(r >= 0){
x1 = (-b + Math.sqrt(r)) / (2 * a);
x2 = (-b - Math.sqrt(r)) / (2 * a);
document.eq2.x1.value = x1;
document.eq2.x2.value = x2;
}else{
alert("Las raíces son números complejos");
}
}else if(b !=0 ){
x1 = -c / b;
document.eq2.x1.value = x1;
document.eq2.x2.value = "";
alert("La ecuación es de primer grado, por lo que no hay valor para x2");
}else{
alert("Los valores que capturaste no corresponden con una ecuación.");
}
}
</script>
</head>
<body>
<form name="eq2">
<h2>Solución de ecuaciones de 1er y 2do grado (ax<sup>2</sup> + bx + c = 0 y bx + c = 0)</h2><br/><br/>
Asigna los valores de a, b y c y presiona el botón<br/>
<input type="text" name="a" size="2" /> x<sup>2</sup> +
<input type="text" name="b" size="2" /> x +
<input type="text" name="c" size="2" /> = 0
<br/>
<br/>
x1 = <input type="text" name="x1" /> <br/>
x2 = <input type="text" name="x2" /> <br/><br/>
<input type="button" value="Obten valores de X" onclick="javascript:resuelveEcuacion2doGrado();" />
</form>
</body>
</html>
Pero si ya hicimos todo lo anterior, por qué no también agregamos el cálculo de las raices complejas, es decir, para cuando b2 - 4ac sea menor a cero. Por supuesto esto no nos lo enseñan en la secundaria.
Presiona aquí para ver la versión 3 de la página funcionando.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Solución a una Ecuación de 2do grado Versión 03</title>
<script type="text/javascript">
function resuelveEcuacion2doGrado(){
var a = document.eq2.a.value;
var b = document.eq2.b.value;
var c = document.eq2.c.value;
var x1;
var x2;
var r ;
var pIm ;
var pRe ;
document.eq2.x1.value = "";
document.eq2.x2.value = "";
if(isNaN(a) || isNaN(b) || isNaN(c)){
alert("Debes capturar valores numericos");
return false;
}else{
a = eval(a);
b = eval(b);
c = eval(c);
}
if(a==undefined){
a = 0;
}
if(b==undefined){
b = 0;
}
if(c==undefined){
c = 0;
}
if(a != 0){
r = b*b - 4*a*c;
pRe = -b / (2 * a);
pIm = Math.sqrt(Math.abs(r)) / (2 * a);
if(r >= 0){
x1 = pRe + pIm;
x2 = pRe - pIm;
}else{
var signo = new Array();
signo[0] = " + ";
signo[1] = " - ";
if(pIm < 0){
signo[0] = " - ";
signo[1] = " + ";
}
x1 = pRe + signo[0] + Math.abs(pIm) + " i";
x2 = pRe + signo[1] + Math.abs(pIm) + " i";
}
}else if(b !=0 ){
x1 = -c / b;
x2 = "";
alert("La ecuación es de primer grado, por lo que no hay valor para x2");
}else{
alert("Los valores que capturaste no corresponden con una ecuación.");
x1 = "";
x2 = "";
}
document.eq2.x1.value = x1;
document.eq2.x2.value = x2;
}
</script>
</head>
<body>
<form name="eq2">
<h2>Solución de ecuaciones de 1er y 2do grado (ax<sup>2</sup> + bx + c = 0 y bx + c = 0)</h2>
<br/><br/>
Asigna los valores de a, b y c y presiona el botón<br/>
<input type="text" name="a" size="2" /> x<sup>2</sup> +
<input type="text" name="b" size="2" /> x +
<input type="text" name="c" size="2" /> = 0
<br/>
<br/>
x1 = <input type="text" name="x1" size="50" /> <br/>
x2 = <input type="text" name="x2" size="50" /> <br/><br/>
<input type="button" value="Obten valores de X" onclick="javascript:resuelveEcuacion2doGrado();" />
</form>
</body>
</html>
EFFM 2008-04-10
Comparte esta páginaescolar.mx
escolar.com.mx
Herramientas T.I. y noticias para Colegios, Profesores, Padres y Estudiantes.
Directorio de escuelas y colegios, desarrollo web para escuelas, exámenes en línea, diseño para centros educativos.