PDI+VC · Ejercicio de Programación

EP06_03 — 🟡 Clasificación de Marcaciones en Hojas de Respuesta (OMR)

6.14.3 EP06_03 🟡 Clasificación de Marcaciones en Hojas de Respuesta (OMR)

Tras la corrección de la hoja y la segmentación de los cuadros de respuestas, el MCTest estima, para cada burbuja, un grado de relleno, representado por un valor entre \(0\) y \(100\). A partir de estos valores, el sistema debe determinar automáticamente la alternativa marcada, identificando también preguntas en blanco y casos de múltiples marcaciones.

En este ejercicio, implementará esta etapa de decisión del pipeline de OMR. La clasificación depende de un umbral de relleno: pequeñas variaciones en este valor pueden alterar el resultado de la lectura automática.

6.14.3.1 📋 Directrices de Implementación

  1. Parámetros: Leer los enteros \(Q\) (número de preguntas) y \(K\) (número de alternativas por pregunta, con \(2 \le K \le 26\)) y el umbral de relleno \(\mathrm{Th}\) (número real entre \(0\) y \(100\)).
  2. Grados de relleno: Para cada una de las \(Q\) preguntas, leer los \(K\) valores reales correspondientes a las alternativas A, B, C, …, en el orden de entrada.
  3. Conteo de marcaciones: Para cada pregunta, contar cuántas alternativas poseen un grado de relleno estrictamente mayor que \(\mathrm{Th}\).
  4. Clasificación:
    • Si ninguna alternativa excede \(\mathrm{Th}\), clasificar la pregunta como BRANCO.
    • Si exactamente una alternativa excede \(\mathrm{Th}\), imprimir la letra correspondiente (A, B, C, …).
    • Si dos o más alternativas exceden \(\mathrm{Th}\), clasificar la pregunta como DUPLA_MARCACAO.
  5. Salida por pregunta: Imprimir, en el orden de lectura, la clasificación de cada pregunta.
  6. Totales: Al final, imprimir el número de preguntas OK (una única marcación), BRANCO y DUPLA_MARCACAO.

6.14.3.2 📌 Restricciones Computacionales

  • Comparación estricta: solo los valores mayores que \(\mathrm{Th}\) se consideran marcaciones válidas; los valores exactamente iguales al umbral no deben contabilizarse.
  • Letras de las alternativas: el índice \(0\) corresponde a la alternativa A, el índice \(1\) a la alternativa B y así sucesivamente.
  • Múltiples marcaciones: siempre que dos o más alternativas excedan el umbral, la clasificación debe ser DUPLA_MARCACAO, independientemente de los respectivos grados de relleno.

6.14.3.3 🧠 Fundamentación Teórica

Situación Clasificación Interpretación
Exactamente una alternativa por encima del umbral Letra de la alternativa Respuesta válida
Ninguna alternativa por encima del umbral BRANCO Pregunta no respondida
Dos o más alternativas por encima del umbral DUPLA_MARCACAO Respuesta ambigua

El umbral de relleno controla la sensibilidad del algoritmo. Valores muy bajos tienden a aumentar el número de DUPLA_MARCACAO, mientras que valores muy altos pueden aumentar la cantidad de preguntas clasificadas como BRANCO.

6.14.3.4 📦 Especificación de Entrada y Salida (VPL)

Entrada:

  • Línea 1: Entero \(Q\).
  • Línea 2: Entero \(K\).
  • Línea 3: Número real \(\mathrm{Th}\).
  • Siguientes \(Q\) líneas: \(K\) números reales, correspondientes a los grados de relleno de las alternativas.
  • Línea 1: Entero \(Q\) y \(K\).

Salida:

  • \(Q\) líneas, cada una conteniendo la clasificación de la respectiva pregunta.
  • Línea final: OK: x BRANCO: y DUPLA_MARCACAO: z.

6.14.3.5 📌 Ejemplos

Entrada Salida Observación
3
4
50
10 85 5 12
20 15 18 22
90 88 10 5
B
BRANCO
DUPLA_MARCACAO
OK: 1 BRANCO: 1 DUPLA_MARCACAO: 1
En la primera pregunta solo B supera el umbral; en la segunda ninguna alternativa lo supera; en la tercera, A y B exceden el umbral.
1
2
50.0
50 50
BRANCO
OK: 0 BRANCO: 1 DUPLA_MARCACAO: 0
Los valores iguales al umbral no se consideran marcaciones válidas.
🎮 Simulador EP06_03: Clasificación de Marcas OMR 4 Alternativas
Ajuste el grado de relleno de cada burbuja (A–D) y el umbral para observar la clasificación resultante.
–
Figura 6.23: Simulador EP06_03: Clasificación de Marcaciones OMR
%%writefile EP06_03.py
# Código Python
Overwriting EP06_03.py
TestSuite("EP06_03.py").run()
✔️ EP06_03.cases ya existe en casos/
📋 5 caso(s) cargado(s) de casos/EP06_03.cases

🔍 Probando Python: EP06_03.py
⚠️ EP06_03.py: archivo vacío (menos de 3 líneas). Pruebas omitidas.