PDI+VC · Exercício de Programação

EP06_03 — 🟡 Classificação de Marcações em Folhas de Resposta (OMR)

6.14.3 EP06_03 🟡 Classificação de Marcações em Folhas de Resposta (OMR)

Após a retificação da folha e a segmentação dos quadros de respostas, o MCTest estima, para cada bolha, um grau de preenchimento, representado por um valor entre \(0\) e \(100\). A partir desses valores, o sistema deve determinar automaticamente a alternativa marcada, identificando também questões em branco e casos de múltiplas marcações.

Neste exercício, você implementará essa etapa de decisão do pipeline de OMR. A classificação depende de um limiar de preenchimento: pequenas variações nesse valor podem alterar o resultado da leitura automática.

6.14.3.1 📋 Diretrizes de Implementação

  1. Parâmetros: Ler os inteiros \(Q\) (número de questões) e \(K\) (número de alternativas por questão, com \(2 \le K \le 26\)) e o limiar de preenchimento \(\mathrm{Th}\) (número real entre \(0\) e \(100\)).
  2. Graus de preenchimento: Para cada uma das \(Q\) questões, ler os \(K\) valores reais correspondentes às alternativas A, B, C, …, na ordem de entrada.
  3. Contagem de marcações: Para cada questão, contar quantas alternativas possuem grau de preenchimento estritamente maior que \(\mathrm{Th}\).
  4. Classificação:
    • Se nenhuma alternativa exceder \(\mathrm{Th}\), classificar a questão como BRANCO.
    • Se exatamente uma alternativa exceder \(\mathrm{Th}\), imprimir a letra correspondente (A, B, C, …).
    • Se duas ou mais alternativas excederem \(\mathrm{Th}\), classificar a questão como DUPLA_MARCACAO.
  5. Saída por questão: Imprimir, na ordem de leitura, a classificação de cada questão.
  6. Totais: Ao final, imprimir o número de questões OK (uma única marcação), BRANCO e DUPLA_MARCACAO.

6.14.3.2 📌 Restrições Computacionais

  • Comparação estrita: apenas valores maiores que \(\mathrm{Th}\) são considerados marcações válidas; valores exatamente iguais ao limiar não devem ser contabilizados.
  • Letras das alternativas: o índice \(0\) corresponde à alternativa A, o índice \(1\) à alternativa B e assim sucessivamente.
  • Múltiplas marcações: sempre que duas ou mais alternativas excederem o limiar, a classificação deve ser DUPLA_MARCACAO, independentemente dos respectivos graus de preenchimento.

6.14.3.3 🧠 Fundamentação Teórica

Situação Classificação Interpretação
Exatamente uma alternativa acima do limiar Letra da alternativa Resposta válida
Nenhuma alternativa acima do limiar BRANCO Questão não respondida
Duas ou mais alternativas acima do limiar DUPLA_MARCACAO Resposta ambígua

O limiar de preenchimento controla a sensibilidade do algoritmo. Valores muito baixos tendem a aumentar o número de DUPLA_MARCACAO, enquanto valores muito altos podem aumentar a quantidade de questões classificadas como BRANCO.

6.14.3.4 📦 Especificação de Entrada e Saída (VPL)

Entrada:

  • Linha 1: Inteiro \(Q\).
  • Linha 2: Inteiro \(K\).
  • Linha 3: Número real \(\mathrm{Th}\).
  • Próximas \(Q\) linhas: \(K\) números reais, correspondentes aos graus de preenchimento das alternativas.
  • Linha 1: Inteiro \(Q\) e \(K\).

Saída:

  • \(Q\) linhas, cada uma contendo a classificação da respectiva questão.
  • Linha final: OK: x BRANCO: y DUPLA_MARCACAO: z.

6.14.3.5 📌 Exemplos

Entrada Saída Observação
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
Na primeira questão apenas B supera o limiar; na segunda nenhuma alternativa o supera; na terceira, A e B excedem o limiar.
1
2
50.0
50 50
BRANCO
OK: 0 BRANCO: 1 DUPLA_MARCACAO: 0
Valores iguais ao limiar não são considerados marcações válidas.
🎮 Simulador EP06_03: Classificação de Marcações OMR 4 Alternativas
Ajuste o grau de preenchimento de cada bolha (A–D) e o limiar para observar a classificação resultante.
–
Figura 6.23: Simulador EP06_03: Classificação de Marcações OMR
%%writefile EP06_03.py
# Código Python
Writing EP06_03.py
TestSuite("EP06_03.py").run()
✔️ EP06_03.cases já existe em casos/
📋 5 caso(s) carregado(s) de casos/EP06_03.cases

🔍 Testando Python: EP06_03.py
⚠️ EP06_03.py: Arquivo sem conteúdo (menos de 3 linhas). Testes ignorados.