TNI+VO · Exercice de Programmation

EP06_03 — 🟡 Classification des Marques sur les Feuilles de Réponses (OMR)

6.14.3 EP06_03 🟡 Classification des Marques sur les Feuilles de Réponses (OMR)

Après la correction de la feuille et la segmentation des cadres de réponses, le MCTest estime, pour chaque bulle, un degré de remplissage, représenté par une valeur entre \(0\) et \(100\). À partir de ces valeurs, le système doit déterminer automatiquement l’alternative marquée, en identifiant également les questions blanches et les cas de marques multiples.

Dans cet exercice, vous implémenterez cette étape de décision du pipeline OMR. La classification dépend d’un seuil de remplissage : de petites variations de cette valeur peuvent modifier le résultat de la lecture automatique.

6.14.3.1 📋 Directives d’Implémentation

  1. Paramètres : Lire les entiers \(Q\) (nombre de questions) et \(K\) (nombre d’alternatives par question, avec \(2 \le K \le 26\)) ainsi que le seuil de remplissage \(\mathrm{Th}\) (nombre réel entre \(0\) et \(100\)).
  2. Degrés de remplissage : Pour chacune des \(Q\) questions, lire les \(K\) valeurs réelles correspondant aux alternatives A, B, C, …, dans l’ordre de saisie.
  3. Comptage des marques : Pour chaque question, compter combien d’alternatives ont un degré de remplissage strictement supérieur à \(\mathrm{Th}\).
  4. Classification :
    • Si aucune alternative ne dépasse \(\mathrm{Th}\), classer la question comme BRANCO.
    • Si exactement une alternative dépasse \(\mathrm{Th}\), imprimer la lettre correspondante (A, B, C, …).
    • Si deux alternatives ou plus dépassent \(\mathrm{Th}\), classer la question comme DUPLA_MARCACAO.
  5. Sortie par question : Imprimer, dans l’ordre de lecture, la classification de chaque question.
  6. Totaux : À la fin, imprimer le nombre de questions OK (une seule marque), BRANCO et DUPLA_MARCACAO.

6.14.3.2 📌 Contraintes Computationnelles

  • Comparaison stricte : seules les valeurs supérieures à \(\mathrm{Th}\) sont considérées comme des marques valides ; les valeurs exactement égales au seuil ne doivent pas être comptabilisées.
  • Lettres des alternatives : l’indice \(0\) correspond à l’alternative A, l’indice \(1\) à l’alternative B, et ainsi de suite.
  • Marques multiples : dès que deux alternatives ou plus dépassent le seuil, la classification doit être DUPLA_MARCACAO, indépendamment de leurs degrés de remplissage respectifs.

6.14.3.3 🧠 Fondement Théorique

Situation Classification Interprétation
Exactement une alternative au-dessus du seuil Lettre de l’alternative Réponse valide
Aucune alternative au-dessus du seuil BRANCO Question non répondue
Deux alternatives ou plus au-dessus du seuil DUPLA_MARCACAO Réponse ambiguë

Le seuil de remplissage contrôle la sensibilité de l’algorithme. Des valeurs très basses tendent à augmenter le nombre de DUPLA_MARCACAO, tandis que des valeurs très hautes peuvent augmenter la quantité de questions classées comme BRANCO.

6.14.3.4 📦 Spécification d’Entrée et de Sortie (VPL)

Entrée :

  • Ligne 1 : Entier \(Q\).
  • Ligne 2 : Entier \(K\).
  • Ligne 3 : Nombre réel \(\mathrm{Th}\).
  • Les \(Q\) lignes suivantes : \(K\) nombres réels, correspondant aux degrés de remplissage des alternatives.
  • Ligne 1 : Entiers \(Q\) et \(K\).

Sortie :

  • \(Q\) lignes, chacune contenant la classification de la question respective.
  • Ligne finale : OK: x BRANCO: y DUPLA_MARCACAO: z.

6.14.3.5 📌 Exemples

Entrée Sortie Observation
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
Dans la première question, seule B dépasse le seuil ; dans la deuxième, aucune alternative ne le dépasse ; dans la troisième, A et B dépassent le seuil.
1
2
50.0
50 50
BRANCO
OK: 0 BRANCO: 1 DUPLA_MARCACAO: 0
Les valeurs égales au seuil ne sont pas considérées comme des marques valides.
🎮 Simulateur EP06_03 : Classification des marques OMR 4 alternatives
Ajustez le degré de remplissage de chaque bulle (A–D) et le seuil pour observer la classification résultante.
–
Figure 6.23: Simulateur EP06_03 : Classification des marquages OMR
%%writefile EP06_03.py
# Code Python
Overwriting EP06_03.py
TestSuite("EP06_03.py").run()
✔️ EP06_03.cases existe déjà dans casos/
📋 5 cas chargé(s) depuis casos/EP06_03.cases

🔍 Test de Python : EP06_03.py
⚠️ EP06_03.py : fichier vide (moins de 3 lignes). Tests ignorés.