Skip to content

proyectosingenieriauninorte/EjerciciosAritmeticos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EjerciciosAritmeticos

Este es un repositorio que contiene un programa de práctica adaptativa de ejercicios de sumas de números enteros con base en niveles de dificultad, escrito en Java.

Editores, Lenguajes Usados y Detalles del Proyecto en Java

Este programa fue desarrollado principalmente en Apache Netbeans IDE 16, usando el JDK 17.0.6 (javac 17.0.6) como un proyecto de Java Application con Maven. El nombre de este proyecto Java es EjerciciosAritmeticos, el group id asignado fue co.com.alprosoft, y el nombre de paquete asignado, co.com.alprosoft.ejerciciosaritmeticos.

El directorio relativo en donde se albergan los archivos .java de este proyecto es: EjerciciosAritmeticos\src\main\java\co\com\alprosoft\ejerciciosaritmeticos

Documentación de las versiones de este programa

En Java se desarrollaron varias clases: Cronografo, DecisionValidador, Dificultad, Ejercicio, EjerciciosAritmeticos, GeneradorEjercicios, MaquinaDificultades, ValidadorRespuesta y Versiones. La clase EjerciciosAritmeticos representaba al programa principal. Originalmente, se consideraron tres versiones para este programa: 1, 2 y 3, pero estas versiones estaban embebidas en el mismo archivo o programa; no eran programas diferentes.

Versión 1

  1. Un nivel de dificultad sólo era representado por un número (que es un dato ordinal).
  2. Para evaluar una respuesta dada por el usuario, y poder decidir el siguiente nivel de dificultad a considerar y el siguiente ejercicio a mostrar al usuario, sólo se necesita saber cuál es la respuesta correcta del ejercicio y qué es lo que el usuario respondió ante ese ejercicio.
  3. El único criterio de decisión del validador para determinar el siguiente nivel de dificultad y el siguiente ejercicio es la corrección de la respuesta del usuario, es decir, si el usuario respondió correctamente o no al ejercicio. Si respondió correctamente, entonces toma la decisión de aumentar el nivel de dificultad en 1 y cambiar el ejercicio a mostrar (el aumentar o disminuir el nivel de dificultad implica necesariamente un cambio de ejercicio – un ejercicio no puede cambiar su nivel de dificultad durante la ejecución del programa de ejercicios de sumas). Si respondió incorrectamente, entonces toma la decisión de mantener el nivel de dificultad y el mismo ejercicio.
  4. En este escenario:
    1. No existe disminución del nivel de dificultad.
    2. No existen cambios de ejercicio, excepto cuando hay un aumento del nivel de dificultad. Por lo tanto, sólo es posible trabajar 1 ejercicio por cada nivel de dificultad. No es posible terminar con todos los niveles de dificultad del ejercicio de sumas hasta que el usuario haya resuelto 1 ejercicio de cada nivel de dificultad.
    3. No existe un límite en el número de intentos que puede realizar el usuario para resolver un ejercicio, ni un límite de tiempo asignado para ello. Por consiguiente, no es posible progresar a un nivel de dificultad superior hasta que el usuario haya resuelto el ejercicio dado.

Versión 2

  1. Un nivel de dificultad tenía como características un número que lo representa, y un tiempo máximo de respuesta correcta.
  2. Para evaluar una respuesta dada por el usuario, y poder decidir el siguiente nivel de dificultad a considerar y el siguiente ejercicio a mostrar al usuario, se necesita saber cuál es la respuesta correcta del ejercicio, qué es lo que el usuario respondió ante ese ejercicio, cuál es el nivel de dificultad del ejercicio, cuál es el tiempo máximo de respuesta correcta asignado al ejercicio con base en el nivel de dificultad de este, y cuál fue el tiempo de respuesta correcta del usuario.
  3. Para determinar el siguiente nivel de dificultad y el siguiente ejercicio, el validador considera tres posibles eventos:
    1. Si el usuario responde correctamente al ejercicio, y el tiempo de respuesta correcta del ejercicio por parte del usuario es menor o igual que el tiempo máximo de respuesta correcta de ejercicios que están en el mismo nivel de dificultad del ejercicio evaluado, entonces se toma la decisión de aumentar el nivel de dificultad y de cambiar el ejercicio.
    2. Si el usuario responde correctamente al ejercicio, pero el tiempo de respuesta correcta del ejercicio por parte del usuario es mayor que el tiempo máximo de respuesta correcta de ejercicios que están en el mismo nivel de dificultad del ejercicio evaluado, entonces se toma la decisión de mantener el nivel de dificultad y de cambiar el ejercicio.
    3. Si el usuario responde incorrectamente al ejercicio, entonces se toma la decisión de mantener el nivel de dificultad y el mismo ejercicio.
  4. En este escenario:
    1. No existe disminución del nivel de dificultad.
    2. Existe la posibilidad de cambiar de ejercicio, manteniendo el mismo nivel de dificultad, pero esto sólo ocurre cuando el usuario responde correctamente a un ejercicio, pero no lo logra en un tiempo establecido según el nivel de dificultad del ejercicio. Así, ya es posible trabajar más de 1 ejercicio por cada nivel de dificultad, pero eso sólo depende del tiempo que se demore el usuario resolviendo correctamente los ejercicios.
    3. No existe un límite en el número de intentos que puede realizar el usuario para resolver un ejercicio, pero sí un límite de tiempo asignado para ello, pero este límite de tiempo sólo aplica para poder progresar a un nivel de dificultad superior, no para evitar un cambio de ejercicio. Por consiguiente, no es posible cambiar de ejercicio hasta que el usuario lo haya resuelto correctamente, aunque sí es posible progresar a un nivel de dificultad superior con un ejercicio diferente a uno dado inicialmente, siempre y cuando este lo resuelva correctamente y lo haga lo suficientemente rápido.

Versión 3

  1. Un nivel de dificultad tenía como características un número que lo representa, un tiempo máximo de respuesta correcta, y un número máximo de intentos.
  2. Para evaluar una respuesta dada por el usuario, y poder decidir el siguiente nivel de dificultad a considerar y el siguiente ejercicio a mostrar al usuario, se necesita saber cuál es la respuesta correcta del ejercicio, qué es lo que el usuario respondió ante ese ejercicio, cuál es el nivel de dificultad del ejercicio, cuál es el tiempo máximo de respuesta correcta asignado al ejercicio con base en el nivel de dificultad de este, cuál fue el tiempo de respuesta correcta del usuario, cuál es el número máximo de intentos que puede realizar el usuario para alcanzar la respuesta correcta del ejercicio según su nivel de dificultad, y cuál fue el número de intentos requeridos por el usuario para alcanzar la respuesta correcta.
  3. Para determinar el siguiente nivel de dificultad y el siguiente ejercicio, el validador considera cuatro posibles eventos:
    1. Si el usuario responde correctamente al ejercicio, y el tiempo de respuesta correcta del ejercicio por parte del usuario es menor o igual que el tiempo máximo de respuesta correcta de ejercicios que están en el mismo nivel de dificultad del ejercicio evaluado, entonces se toma la decisión de aumentar el nivel de dificultad y de cambiar de ejercicio.
    2. Si el usuario responde correctamente al ejercicio, pero el tiempo de respuesta correcta del ejercicio por parte del usuario es mayor que el tiempo máximo de respuesta correcta de ejercicios que están en el mismo nivel de dificultad del ejercicio evaluado, entonces se toma la decisión de mantener el nivel de dificultad y de cambiar de ejercicio.
    3. Si el usuario responde incorrectamente al ejercicio, y el número de intentos realizados por el usuario para responderlo es mayor o igual que el número de intentos permitidos para ello según el nivel de dificultad del ejercicio, entonces se toma la decisión de disminuir el nivel de dificultad, y cambiar de ejercicio.
    4. Si el usuario responde incorrectamente al ejercicio, pero el número de intentos realizados por el usuario para responderlo no supera al número de intentos permitidos para ello según el nivel de dificultad del ejercicio, entonces se toma la decisión de mantener el nivel de dificultad y el mismo ejercicio.
  4. En este escenario:
    1. Sí existe disminución del nivel de dificultad. De hecho, esto ocurre en esta versión del programa de ejercicios de sumas como penalización cuando ocurren múltiples intentos incorrectos consecutivos para un mismo ejercicio.
    2. Existe la posibilidad de cambiar de ejercicio, manteniendo el mismo nivel de dificultad. Esto ocurre cuando el usuario responde correctamente a un ejercicio, pero no lo logra en un tiempo establecido según el nivel de dificultad del ejercicio, o cuando el usuario responde incorrectamente a un ejercicio, pero aún le restan intentos para ello según el nivel de dificultad del ejercicio. Esto significa que es posible trabajar más de 1 ejercicio por cada nivel de dificultad, pero sólo cuando el usuario presenta dificultades al resolver ejercicios.
    3. Existe un límite en el número de intentos que puede realizar el usuario para resolver un ejercicio, y un límite de tiempo asignado para ello. El primer límite es el criterio de validador para determinar cuándo se debe disminuir el nivel de dificultad al usuario, mientras que el segundo límite es el criterio del validador para determinar cuándo se debe aumentar el nivel de dificultad al usuario.
    4. No obstante, en esta versión del programa de sumas, se observa que cuando el usuario está teniendo dificultades para resolver correctamente un ejercicio, este es forzado a responderla correctamente, sin oportunidad alguna para responder otro ejercicio del mismo nivel de dificultad, para poder mantenerse prácticamente en el mismo nivel de dificultad. Sin embargo, cuando el usuario está teniendo dificultades para resolver rápidamente un ejercicio, pero no para resolverlos correctamente, entonces el usuario sí tiene oportunidad para responder otro ejercicio del mismo nivel de dificultad.
    5. Por lo tanto, se mantiene, al igual que en las demás versiones, la necesidad del usuario para resolver un conjunto de ejercicios de manera impositiva, puesto que el usuario no tiene control sobre qué ejercicios quiere hacer.

Componentes (Clases)

  1. La clase Cronografo (Cronografo.java) se utiliza como soporte para el programa principal, para poder monitorear el tiempo de respuesta de un usuario frente a un ejercicio, iniciando el cronógrafo cuando el usuario apenas logra ver el ejercicio, hasta que el usuario envía una respuesta al ejercicio.
  2. La clase MaquinaDificultades (MaquinaDificultades.java) se utiliza en el programa principal para establecer los niveles de dificultad en los que estará involucrado el usuario del programa principal, así como el nivel de dificultad en el que se encuentra en un momento dado. Esta clase es básicamente una máquina de estados, en donde cada estado es un nivel de dificultad. En esta clase existen dos estados especiales, aparte de los estados que corresponden a cada nivel de dificultad, que son: ESTADO_INICIO, y ESTADO_FIN, los cuales ayudan a verificar si un usuario aún no ha comenzado el proceso de involucrarse con cada uno de los niveles de dificultad establecidos, y si este ya terminó este proceso, respectivamente. Finalmente, la clase MaquinaDificultades se utiliza en la clase ValidadorRespuesta para que el juez automático logre saber cuál es el nivel de dificultad actual del usuario, así como los niveles de dificultad superior e inferior con respecto al actual, y así, determinar de qué nivel de dificultad debería ser el próximo ejercicio mostrado al usuario.
  3. La clase Dificultad (Dificultad.java) se usa principalmente para representar a un nivel de dificultad. Sin embargo, un nivel de dificultad se puede representar con un número mayor o menor de atributos, dependiendo del grado de complejidad empleado para hacer la representación de un nivel de dificultad, el cual depende, a su vez, de la versión del programa de sumas, puesto que en las versiones posteriores del programa de sumas se consideran características adicionales con respecto a versiones anteriores, las cuales dependen del nivel de dificultad. La clase Dificultad se utiliza en la clase DecisionValidador para definir cuál es el nivel de dificultad del siguiente ejercicio que se debería mostrar al estudiante; en la clase Ejercicio, para establecer cuál es el nivel de dificultad inherente al ejercicio; en la clase GeneradorEjercicios, como soporte para generar un ejercicio aleatorio que se encuentre en el nivel de dificultad dado; en la clase MaquinaDificultades, para establecer los niveles de dificultad posibles de la máquina de dificultades, así como el nivel de dificultad en el que se encuentra actualmente el usuario, para definir los estados especiales de la máquina de dificultades, y para la gestión de muchas operaciones relacionadas con la máquina de dificultades; y en el programa principal, para definir los niveles de dificultades que el estudiante deberá enfrentar en el programa de ejercicios de sumas, dependiendo de la versión de este programa.
  4. La clase Ejercicio (Ejercicio.java) es una representación de un ejercicio que, en este caso, corresponde a un ejercicio de sumas entre dos números de 1, 2 o 3 dígitos, o un ejercicio de multiplicación entre dos números de 1 o 2 dígitos, dependiendo del nivel de dificultad en el que está actualmente el estudiante. La clase Ejercicio se usa en la clase GeneradorEjercicios como soporte para generar ejercicios de sumas; en la clase ValidadorRespuesta, para poder obtener los datos del ejercicio como un insumo para tomar una decisión frente a una respuesta dada por el usuario a este ejercicio: si el nivel de dificultad en el que debe estar el usuario a continuación debería ser una inferior, la misma, o una superior, y si es la misma, si se debiera mostrar el mismo ejercicio, u otro distinto. Además, la clase Ejercicio se utiliza en el programa principal para tener la referencia de cuál es el ejercicio mostrado al estudiante actualmente.
  5. La clase GeneradorEjercicios (GeneradorEjercicios.java) sólo se utiliza en el programa principal para generar aleatoriamente ejercicios aritméticos según un nivel de dificultad establecido.
  6. La clase DecisionValidador (DecisionValidador.java) representa la decisión tomada por un validador automático de respuestas, en tres aspectos: Primero, si la respuesta dada por el usuario es correcta o no; segundo, cuál es el nivel de dificultad del siguiente ejercicio a mostrar al usuario; y tercero, si el siguiente ejercicio a mostrar al usuario es el mismo u otro. Esta clase sólo se usa en el programa principal para recibir una decisión tomada por el validador automático, y principalmente, en la clase DecisionValidador, como soporte para que el validador pueda construir y enviar una decisión por cada respuesta al programa principal, y de esta forma, el flujo de interacción entre el usuario y los ejercicios de sumas pueda continuar.
  7. La clase ValidadorRespuesta (ValidadorRespuesta.java) es la clase que se utiliza para tomar datos relevantes al ejercicio y a una respuesta del usuario frente a ese ejercicio, y con base en estos datos, producir una decisión que es enviada al programa principal para poder saber qué nivel de dificultad y qué ejercicio mostrar al usuario a continuación. Como mínimo, un validador de respuesta requiere saber cuál es la respuesta correcta al ejercicio, y qué respondió el usuario ante ese ejercicio, pero en las versiones posteriores del programa de ejercicios de sumas, el número de datos requeridos para tomar una decisión aumenta.
  8. La clase Versiones (Versiones.java) sólo contiene tres constantes que representan a las tres versiones del programa de ejercicios de suma, y esta clase se usa tanto en el programa principal, para decidir qué versión usar, y para establecer el flujo de control del programa, dependiendo de la versión usada, como en la clase ValidadorRespuesta, para validar qué versión del programa de ejercicios de sumas se está usando actualmente, y de esta forma, tomar cada decisión por cada respuesta del usuario de forma correcta, de acuerdo a lo indicado en cada versión.
  9. La clase EjerciciosAritmeticos (EjerciciosAritmeticos.java) es, por supuesto, el programa principal del programa de ejercicios de sumas.

Cómo usar este proyecto Java

Estos proyecto se puede ejecutar en el IDE sugerido inicialmente, pero debería poderse ejecutar bien con un compilador de Java. En general, para usar o probar este proyecto, se debe ejecutar la clase principal; es decir, EjerciciosAritmeticos.java.

Licencia

MIT.

Autor

Leandro Alejandro Niebles Carbonó (GitHub: carbonol).

About

Programa de práctica de ejercicios de sumas. Escrito en Java.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages