Herramientas de usuario

Herramientas del sitio


es:manual:items:externosficherogenerativas

Preguntas generativas con ficheros

Las preguntas con fichero pueden a su vez estar basadas en ítems generativos. Esto permite a Siette generar distintas instancias de preguntas con ficheros, ya sea como parte del enunciado, o utilizando distintos caso de prueba. Esta técnica permitiría cambiar las especificaciones para que cada alumno tuviera que implementar una practica similar pero ligeramente diferente, o simplemente para que los casos de prueba se generen de forma aleatoria. El siguiente ejemplo ilustra algunos de estos aspectos:

Ejemplo

En este ejemplo se usará Java como lenguaje de programación para introducir algunas nuevas características: el uso del directorio base, y la generación automática de casos de prueba, mediante un ítem base generativo, y el uso de respuestas por resultados de ejecución. El problema propuesto es el siguiente:

en donde se utiliza una clase Args.java con un método leer para contruir el array. Esta clase es la siguiente:

public class Args {
	public static double[] leer(String[] args) {
		double[] array = new double[args.length];
		for(int i=0; i<args.length; i++) {
			array[i] = Double.parseDouble(args[i]);
		}
		return array;
	}
}

Para que el programa que envie el alumno pueda compilar correctamente, es necesario incluir esta clase; pero se trata de una clase fija definida por el profesor, y el alumno no necesita enviarla. Para ello lo ínico que hay que hacer es colocar esta clase en algun subdirectorio dentro del directorio auxiliar de la asignatura utilizando el Gestión de archivos. En este ejemplo, la clase se situa en el subdirectorio demo/java:

Una vez hecho esto, en el ítem base hay que indicar, en la pestaña Avanzado que utilice este directorio como directorio base, lo que hara que todo su contenido se copie en el directorio de trabajo.

El ítem base es un ítem de respuesta libre que espera tres posibles respuestas, correspondientes a las tres etiquetas: EXEC, NOCOMPILE, NOEXEC, reconocidas por estos tres patrones:

pero a su vez, este ítem base se ha definido como un item generativo, que utilizando la clase siette.util.Random genera cuatro números reales n1, n2, n3 y n4 de los que halla su promedio. Este código esta escrito en el campo Enunciado del ítem base:

Estos cuatro valores son precisamente los que se usarán como entrada para las pruebas del código, que se escriben en lenguaje SPSL en la sección Avanzado, auqnue en este caso, sobre el código en SPSL se han escrito estas las variables JSP generadas anteriormente, es decir, el script de procesamiento es:

@PatronSiette: false, false, false, true
@OnError stop
javac Pregunta.java                           <> *error*              ->      : NOCOMPILE
java Pregunta <%=n1%> <%=n2%> <%=n3%> <%=n4%> == #<%= promedio %>#1%  -> EXEC : NOEXEC

que se instanciará para cada alumno con unos valores diferentes para las variables JSP n1, n2, n3, n4 de los y promedio

La primera sentencia de prueba realiza la compilación, si ésta no consigue compilar el programa, devolvera la etiqueta <!– NOCOMPILE –>, y luego prueba la ejecución utilizando cuatro valores reales y comparándolos con un patron Siette que se construye a partir del valor promedio con una tolerancia del 1%, para evitar problemas de redondeo.

Otra posible opción de implementación de este ítem sería utilizar directamente el valor devuelto por la ejecución del programa, es deicr, modificar el script de procesamiento de esta forma:

@PatronSiette: false, false, false, true
@OnError stop
javac Pregunta.java                               <> *error*  ->  : NOCOMPILE
java Pregunta <%= n1%> <%= n2%> <%= n3%> <%= n4%> 

en donde ahora la última es una Sentencias de prueba simple, que no comprueba la salida, y siempre tiene éxito y en vez de devolver como respuesta una etiqueta, devuelve directamente la salida de la instrucción del sistema operativo sin modificarla (en este caso el valor numérico del promedio)

Para que esto funcione es necesario modificar los patrones de respuesta del ítem base

en donde ahora, el resultado esperado es un número, y el patrón #<%= promedio %>#1% reconoce ahora la respuesta como correcta.

La ventaja de esta técnica es que pueden añadirse otros patrones para detectar casos comunes de errores que resultan en una respuesta incorrecta. Por ejemplo, si en vez de usar una variable de tipo double para la suma se utiliza una variable de tipo int, se produce un error de redondeo, que puede detectarse mediante otro nuevo patrón que se añade a los anteriores.

Cuando el alumno comete este error en el código, la respuesta encajará con este patrón y se puede añadir un refuerzo que indique cuál ha sido exactamente el error:

Cualquier otra respuesta o código del alumno que no sea ni la respuesta correcta, ni la respuesta de un fallo conocido será reconocida por el patrón por defecto del ítem base.

es/manual/items/externosficherogenerativas.txt · Última modificación: 2023/09/27 16:31 por root

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki