Ingeniería Informática

Ingeniería Telemática

Curso 2004-2005

Algoritmos y Estructuras de Datos

Fundamentos de Programación 2

PRÁCTICA 5

Universitat de València


PRÁCTICA Nº 5: 2 sesiones (S6: 25 de abril, 3, 4, 5 y 6 de mayo)

(S7: 9, 10, 11, 12 y 13 de mayo)

Generación de exámenes tipo test

0. Objetivos

a. Familiarizarse con el uso de listas con punto de interés.

b. Trabajo con punteros. Modificación de la clase lista para utilizar listas dinámicas doblemente enlazadas circulares y con nodo cabeza.

1. INTRODUCCIÓN

La dirección general de tráfico nos ha encargado un programa que permita controlar los tests de examen del carnet de conducir.

Para ello nos ha proporcionado un fichero con un listado de preguntas, posibles respuestas y las soluciones, para que a partir de ese listado podamos generar tanto los tests como las plantillas de corrección de los mismos.

Las preguntas contenidas en el fichero constarán de la siguiente información:

- Pregunta (cadena de texto con la pregunta).

- Respuesta A (texto de la respuesta A).

- Respuesta B (texto de la respuesta B).

- Respuesta C (texto de la respuesta C).

- Respuesta correcta (LETRA A, B o C).

- Nivel de dificultad de la pregunta (valor entero, de menor a mayor dificultad: 1-5).

- Número de veces usada la pregunta en un test.

Las restricciones establecidas a la hora de generar los tests:

A partir del almacén del total de preguntas, podremos crear los tests de examen, que serán un conjunto reducido de preguntas extraídas del almacén. Antes de generar el examen deberemos conocer el número de preguntas de que constará el examen.

Para evitar la repetición excesiva de preguntas en diferentes exámenes, las preguntas sólo podrán aparecer en un número determinado de tests. Este número deberá ser indicado por el usuario antes de generar el examen. Ésto significa que cuando una pregunta aparezca el número de veces establecido en diferentes tests (o más), la pregunta no deberá ser tenida en cuenta para la generación de test (pero no se elimina del almacén de preguntas).

Una vez establecidas qué preguntas se pueden usar para crear el examen, se debe proceder a la selección del número de preguntas fijado inicialmente para el examen. En general, un número inferior a las disponibles. El método de selección de preguntas es aleatorio y se explicará posteriormente.

Cuando se haya generado un test, se mostrará por pantalla las preguntas de las que consta y se exportará el examen a dos ficheros de texto que contendrán las preguntas y las soluciones respectivamente (el formato de los archivos se explica al final de este documento).

2. Realización de la práctica

El programa empezará cargando la información de todas las preguntas disponibles para los exámenes que están guardadas en el fichero ‘preguntas.txt’ y la almacenará en una lista.

A partir de esta lista (que llamaremos almacen) accederemos a un menú con las diferentes opciones que nos permitirá el programa. estas opciones serán:

1. Generar un nuevo test

La generación de un nuevo test tendrá diferentes pasos, para poder ajustarnos a los requisitos de la D.G.T.

Se pedirá al usuario un número entero que indicará el número máximo de veces que aceptamos que las preguntas hayan salido en tests previos. A partir de este número se cribarán todas aquellas preguntas de almacen que hayan aparecido más veces en otros tests.

Una vez tengamos la lista con preguntas candidatas (que llamaremos candidatas), tenemos que generar un nuevo test con preguntas elegidas al azar de entre las que nos han quedado.

Primero se pedirá al usuario un número de preguntas del que ha de constar el test. Este número no debe ser mayor que el número de preguntas de la lista candidatas. Si esto ocurre se debe informar al usuario con un mensaje por pantalla, permitiéndole introducir un número menor de preguntas o abandonar la generación del test.

A continuación, hay que elegir las preguntas. Para realizar esta elección nos moveremos aleatoriamente en la lista (candidatas) hacia delante o hacia atrás un número determinado de elementos. Se generará un número aleatorio que nos indicará la marcha del movimiento (0 = avanzar, 1 = retroceder) y otro que nos indicará el número de elementos que hay que desplazarse. El número de elementos a avanzar o retroceder debe de ser, como mucho, el número de elementos de la lista candidatas menos uno. Cada movimiento parte siempre de donde nos hemmos quedado en el desplazamiento anterior.

Una vez seleccionada la pregunta, se añadirá a una tercera lista donde sólo deben aparecer las preguntas del test (lista test), se eliminará la pregunta de la lista candidatas, para que no vuelva a aparecer en ese test, y finalmente se modificará en la lista almacen el número de veces que ha aparecido la pregunta en tests previos (incrementar en 1).

Para facilitar la búsqueda de preguntas entre las diferentes listas se propone numerarlas en el momento de la lectura del fichero e identificar las preguntas mediante ese índice. Esta numeración no debe quedar grabada en el archivo en disco, puesto que puede cambiar de una ejecución a otra del programa.

La modificación de un elemento de la lista se realizará mediante una secuencia de operaciones de consulta, eliminación e inserción en la lista.

Cuando terminemos de generar el test, lo pasaremos a dos ficheros de texto que contendrán por un lado el test y por otro las soluciones. El nombre de los ficheros se pedirá al usuario, siendo el nombre del test, el nombre dado por el usuario con la extensión ‘.test’ y el nombre de las soluciones, el nombre dado por el usuario con la extensión ‘.solucion’. El formato de estos ficheros se indica en el apartado ‘3. FORMATOS DE FICHEROS’.

2. Añadir preguntas propuestas

  1. En este apartado se pedirá al usuario el enunciado, las diferentes opciones y la solución de una pregunta y se insertará en la lista almacen, con el contador de veces aparecida a cero y con un número de pregunta igual al máximo que tengamos en la lista almacen más uno.

3. Eliminar preguntas propuestas

En este apartado se pedirá un número entero y se mostrará por pantalla la información referente a la pregunta identificada con ese número en el almacen. A partir de ahí, se pedirá confirmación al usuario para eliminar la pregunta del almacen.

4. Mostrar las preguntas del almacen

Mostraremos por pantallas todas las preguntas que hay en el almacen.

5. Guardar el almacen de preguntas en el fichero

Esta opción guardará en el fichero ‘preguntas.txt’ todas las preuntas de la lista almacen.

0. Salir

Esta opción terminará el bucle y saldrá del programa.

Opcionalmente, se pueden incorporar al menú las siguientes operaciones de análisis:

- Consultar la media de dificultad del total de preguntas del almacen.

- Consultar el número de preguntas usadas alguna vez..

- Consultar el número de preguntas no usadas en ningún test.

- Mostrar por pantalla las preguntas de un nivel de dificultad concreto.

Igualmente, como tarea opcional se propone que para formar un test de examen el usuario especificar la distribución de dificultad de las preguntas de las que consta el test, es decir:

- Nº preguntas de nivel 1

- Nº preguntas de nivel 2

- Nº preguntas de nivel 3

- Nº preguntas de nivel 4

- Nº preguntas de nivel 5

Entonces, las preguntas serán seleccionadas de forma arbitraria del total de preguntas del almacen, pero siempre respetando la distribución de dificultad establecida por el usuario.

El tipo Lista a utilizar en esta práctica se debe implementar mediante las llamadas listas doblemente enlazadas, circulares y con nodo cabeza. Este tipo de implementación es útil para la fase de selección de las preguntas del test y se debe aplicar a todas las listas que aparecen descritas en el texto. Para facilitar el desarrollo del trabajo se proporciona al estudiante una implementación simplemente enlazada del tipo Lista (que es eficaz para resolver las tareas, pero ineficiente en este caso). De esta manera, se puede abordar inicialmente la resolución del problema planteado y en una segunda fase se puede realizar la implementación doblemente enlazada de las listas y verificarla sobre el mismo programa. Ya que el programa debe funcionar correctamente tanto con listas simples como dobles.

Las listas doblemente enlazadas implementadas deben ajustarse al interfaz público establecido por la clase Lista (simplemente enlazada) que se proporciona.

3. FORMATOS DE FICHEROS

El formato del fichero ‘preguntas.txt’ es el siguiente:

- Pregunta (cadena de texto con la pregunta).

- Respuesta A (texto de la respuesta A).

- Respuesta B (texto de la respuesta B).

- Respuesta C (texto de la respuesta C).

- Respuesta correcta (LETRA A, B o C).

- Nivel de dificultad de la pregunta (valor entero, de menor a mayor dificultad: 1-5).

- Número de veces usada la pregunta en un test.

Cada una de estas informaciones ocupa una linea en el archivo

Un ejemplo sería:

La flecha verde del semáforo ¿qué permite hacer?

Seguir de frente o girar a la derecha

Nada, esperar a que cambie el semáforo principal

Tomar la dirección y sentido indicados por la flecha

C

2

0

Un toque largo de silbato emitido por un Agente de la Circulación indica:

Reanudación de la marcha

Detención obligatoria

Disminución de la velocidad

A

3

0

El formato de los ficheros de test generados '.test' será el siguiente:

Pregunta

Respuesta posible A

Respuesta posible B

Respuesta posible C

---

La cadena “---” actúa como separador de las preguntas.

Vemos a continuación un ejemplo de fichero de este tipo con dos preguntas:

¿Cuántos triángulos deben llevarse en un automóvil?

2

3

1

---

¿Podemos ir sin cinturón de seguridad por una autovía?

No

Sólo en días soleados

---

El formato del fichero de soluciones '.solucion' será el siguiente:

Respuesta

---

Es decir, que el fichero de soluciones asociado al ejemplo anterior sería:

A

---

B

---

4. Entrega de Programas

Cinco días después de realizada la sesión de prácticas se entregará al profesor la siguiente información:

  1. Archivo con el programa (pr05##.cpp)

  2. Archivo con la interfaz de la clase Lista (ListaDoble##.h)

  3. Archivo con la implementación de la clase Lista (ListaDoble##.cpp)

dónde ## es el número asignado a la pareja (01, 02,...) en cada grupo de prácticas.

Al comenzar la siguiente sesión de prácticas se entregará al profesor el formulario con la documentación definitiva de la práctica reflejando todo el trabajo realizado realmente en la práctica.

Nota Muy Importante

Antes de poder empezar a realizar cualquiera de las prácticas es necesario presentar las hojas de especificación de programas (formulario de documentación de programas) con las tareas que se van a realizar en la práctica, explicando brevemente como se van a solucionarse los problemas que se plantean.



ENTREGA DE PROGRAMAS:

Los días 14, 15, 16, 17 y 18 de mayo de 2005, correspondientes con las fechas de realización de prácticas 9, 10, 11, 12 y 13 de mayo respectivamente.

ENTREGA DE FORMULARIOS DEFINITIVOS DE DOCUMENTACIÓN:

Los días 16, 17, 18, 19 y 20 de Mayo de 2005, correspondientes con las fechas de realización de prácticas 9, 10, 11, 12 y 13 de mayo respectivamente

Práctica 5: Generación de exámenes tipo test 4/5