Estas 2 instancias matemáticas han de ser consideradas en la creación del trabajo, sin embargo, también han de ser consideradas los desbordes de las aplicaciones en si. Tal es el caso de ingreso de letras o caracteres ajenos a los dígitos, o bien fuera del formato establecido. A continuación se presentan ejemplos de entrada, proceso y salida, con descripción de solución planteada.
1. “0 , 1” ->[Proceso]->”Error”.
Este caso, es el mencionado, en el apartado de errores matemáticos. Puesto que la ecuación de cálculo para “a” se encuentra una división. Es posible dar múltiples soluciones a este error, sin embargo la solución más práctica está dada en la base de datos. El lenguaje SQL cuando se encuentra con una división por cero, ésta retorna un valor Null. Quedando de este modo solucionado el problema de dividir por cero.
2. “1,1 <ENTER> 1,2 <ENTER> 1,3” ->[Proceso]->”Error”
Para esta situación, el análisis matemático hace evidente que la ecuación de la recta no está dada en la forma y=ax+b, puesto que el x es constante. Esta ecuación será dada por X=1, para todo Y. Acá se presenta nuevamente una división por cero, tanto para la ecuación de obtención de “a” como para la obtención de R2. Nuevamente no es necesaria una solución por el programador de las aplicaciones, puesto que SQL se encarga de dar respuesta con un Null.
3. “1,8 <ENTER> 3,8 <ENTER> 7,8” ->[Proceso]->”Error”
Al igual que el caso anterior tenemos una recta con una pendiente complicada, tal es el caso de pendiente cero. Es simplemente una recta paralela al eje x. Quedan Y=8, para todo X. Este tipo de caso presenta problemas en la obtención de R2, dado que convertirá al denominador de la ecuación en cero. No así en el caso de obtener “a” y “b”, pues si bien “a” es cero, “b” obtiene un valor que está dado en la igualdad de todos los puntos “y”, para este caso 8. Nuevamente el programador está a salvo pues SQL se encarga de asignar un NULL en el cálculo de R2.
4. “1,1 <ENTER> 1,1 <ENTER> 1,1” ->[Proceso]->”Error”
Este caso viene a ser la conjunción del 2 y del 3. Es evidente que matemáticamente se tendrán problemas para calcular “a”, porque se genera la división 0/0, luego como “b” se obtiene en función de “a”, también tendrá problemas desde el punto de vista matemático y finalmente R2, quedaría de la forma 0/(0*0). Para esto habiendo dado respuesta a los casos anteriores simplemente apoyándonos en la capacidad de SQL de retornar Null en las divisiones por cero, es notorio que se usará la misma metodología.
5. “2,4” ->[Proceso]-> “Ingresar más puntos”.
Ahora este caso, si bien se mencionó anteriormente, Se debe ver desde el punto de vista de la programación. Al ser un solo punto, el promedio de ese punto será el mismo punto, por lo que en el cálculo de “a”, se generará una división por cero. SQL se encargará de retornar NULL, pero a nivel de programación para evitar este caso, simplemente se obiga el ingreso de más datos.
6. ...“2,a”... ->[Proceso]->”Dato no ingresado a la Base de Datos”
Existe la posibilidad de realizar un ingreso erróneo, para esto simplemente las aplicaciones validan que el tipo de dato ingreso para cada par de coordenadas sea un dato número. De no ser numérico da el aviso de que el dato no fue ingresado, que en realidad está siendo validado antes de siquiera enviarlo.
7. ...“5,8” ->[Proceso]->”Desea Ingresar más Datos? (s/n)” “x” ->[Proceso]->”Desea Ingresar más Datos?(s/n)”
Este caso es exclusivo del programa en consola. Con cada ingreso de datos, se le pregunta al usuario si desea ingresar más, para esto él puede dar por respuesta “s” o “n”. Si el usuario se equivoca, no se podría asumir ni “s” ni “n”, por lo que es prudente volver a preguntar hasta obtener una respuesta dentro de las 2 alternativas posibles.
Descripción de la Solución
Para el diseño de la base de datos, se usarán solo dos tablas, una donde se almacenen los puntos y otra donde se almacenarán a, b y R2. La obtención de éstos valores será tarea de la Base de Datos y se realizará todo mediante vistas, ya que esta herramienta de SQL permite obtener valores sin necesidad de almacenarlos.
El UML de la base de datos queda así:
Explicación:
Está la tabla Parejas, que es donde son almacenados todos los pares de datos (x,y). Para la obtención de “a”, se crea una vista con el promedio de X y el promedio de Y, ésta vista es llamada por la vista “diferencia”, la cual resta cada valor de x con el promedio obtenido, lo mismo realiza para cada valor de y. Luego esta vista diferencia es llamada por Producto, la cual multiplica cada Diferencia de X con cada diferencia de Y. La vista Numerador se encarga de realizar la sumatoria de todos los valores de la vista Producto. Todo este camino genera el numerador de a en la siguiente ecuación:
Para la construcción del denominador, realiza la sumatoria del atributo que corresponde a la Diferencia de X en la vista diferencia, al cuadrado. Luego vasta con realizar la vista que posea la división del numerador con denominador.
Para obtener “b”, al estar en función de columnas ya creadas en las vistas, simplemente se llaman para ser operadas. Se necesita el Promedio de Y, obtenido en la Vista promedio, restar con el resultado entre la multiplicación de la columna a de la vista a, por la columna promedio de la vista promedio.
Obtener R2, requiere de la creación de de 5 vistas más, las cuales siguen el mismo modo de operación que las vistas que generan a y b.
De este modo, es posible realizar múltiples cálculos que no requieren almacenamiento de sus resultados, pues no son relevantes. Ya que al usuario final solo le interesa la obtención de la ecuación de la recta.
Desarrollo de la Solución en Java
Al conocer que la aplicación solo requiere el ingreso de pares, su esquema de GUI es el siguiente:
La aplicación GUI contará con 2 campos donde se pondrá cada valor X e Y respectivamente. El botón ingresar, al ser presionado sacará los datos de los campos, los validará como enteros y almacenará en un ArrayList. Este botón puede ser presionado tantos pares se deseen ingresar.
El botón calcular permite llamar a las vistas que en la base de dato generan a,b y R2.
Interacción de Solución en Consola.
Se pide el ingreso de X, luego de Y. Si uno de éstos no es un entero, retorna un error.
Si el primer ingreso es correcto, ambos enteros, solicita inmediatamente el ingreso de un segundo par. De ahí en adelante preguntará posterior a cada par ingresado si desea ingresar más, de obtener una respuesta negativa, mostrará en consola el valor calculado de a, b y R2.
Diagrama de Actividad Solución Consola.
Diagrama Actividad Solución GUI
Capturas Consola y GUI