Notes examen 2

Notes examen 2

by Jean-Cédric Chappelier -
Number of replies: 0

Bonjour,

Je viens de mettre dans Moodle les notes du second examen (programmation) et voici les commentaires généraux sur les résultats (sujet et corrigé en pièces jointes en bas de ce message). Et je vais sous peu vous envoyer vos résultats personnels par email.

MERCI DE LIRE ATTENTIVEMENT le présent message avant de poser d'autres questions.

Concernant les notes mises dans Moodle (onglet Notes) :

  • Les notes ne sont publiées (et les résultats communiqués) que si vous avez rejoint le groupe Coursera (cf les nombreux messages à ce sujet) et soumis les devoirs («Exercices de programmation»/«Programming assignments»).
    Si ce n'est pas le cas, veuillez d'abord vous mettre en conformité avec cette règle du cours (cf 1ère semaine).

  • Les notes publiées correspondent à la fraction que vous avez obtenue, multipliée par 100 : par exemple pour cet examen, cela correspond à
    100 * votre total de points / 54
    car l'épreuve est notée sur 54 points.

  • La note « Total du cours » est calculée automatiquement par Moodle et correspond à la fraction moyenne, laquelle est arrondie pour calculer la note « Note », laquelle correspond à la note arrondie, sur l'échelle habituelle 1-6, avec un arrondi vers le haut (c.-à-d. : > 50% = 3.75, > 55% = 4, > 60% = 4.25, etc.), que vous auriez si on arrêtait à ce stade.
    Je la remettrai à jour à la fin du semestre, après le dernier examen.

    Tout ceci a été clairement expliqué dans le premier cours.

L'histogramme suivant présente la répartition des points obtenus à cet examen:
distribution des points au second examen

Le nombre maximum de points obtenus a été de 59 sur 54. Les 50.5 points (=90% du barème max, correspondant à la limite inférieure du 5.75) ont été atteints (ou dépassés) par 74 d'entre vous (24%) et 83.5% ont eu plus de la 55% des points (c.-à-d. 4.0 ou plus). Cet examen est donc très bien réussie. Bravo !

Ceci dit, de l'autre coté (cf histogramme ci-dessus), un certain nombre d'entre vous (environ 7%) ont encore beaucoup (voire énormément) de mal avec la programmation.
A ces étudiants qui ont complètement raté l'examen je conseillerais de tout reprendre au départ et dans l'ordre du cours (variables, types, if, for, while et fonctions) et en suivant les conseils donnés en cours. Il n'est encore pas trop tard, mais cela ne sert à rien d'essayer de continuer à apprendre si les bases les plus rudimentaires ne sont pas acquises ! Reprenez les bases, mais faites-le sérieusement et DÈS MAINTENANT.

Je voudrais également donner ici un autre conseil : regarder les corrigés, regarder un camarade faire la donnée, lire le livre ne suffit pas !
Il faut absolument travailler par vous-même, vous mettre devant l'écran vide et faire tout l'exercice par vous-même.
Et si vous êtes bloqués, n'abandonnez pas trop vite, notez le (pourquoi vous êtes bloqués) et demandez nous ensuite conseil (explication sur les raisons du blocage). Ne consultez le corrigé (ou l'assistant) qu'une fois que vous avez clairement identifié pourquoi vous étiez bloqué. C'est comme cela que vous pourrez progresser.

Voici maintenant, pour tout le monde, des remarques plus détaillées, afin de vous corriger/vous améliorer (voir aussi le corrigé ci-joint) :

Question 1

Très bien réussie : moyenne 10.23 (sur 13); max 15 (2 pt de bonus); taux de réussite (> 7.15 points) : 83.1%

Commentaires :

  • Very successfull; Not many syntax errors; students have learned.
  • A relatively "dangerous" thing students were doing (which was *intentionnaly* NOT presented in the lessons) is to use iterator to pass over a vector in 1.3, and then modify it, which may invalidate the iterator. Some students have successfully handled this, but in general I don't understand why about half of them modified the original vector instead of building a new one.
  • Frequent mistake was the use of vector<vector<...>> instead of vector<array<...>>
  • (Dans filtre) Trop d'étudiants modifient le signal original (ce qu'il ne faut pas !)
  • Oubli de tester si le tableau est vide avant de l'utiliser
  • confusions entre type et identifiant , p.ex. : Spectre.size()

Question 2

Très bien réussie : moyenne 13.83 (sur 18); max 19.5 (1.5 pt de bonus); taux de réussite (> 9.9 points) : 86.1%

Commentaires :

  • passage par référence et structure compris par la très grosse majorité
  • trop de « copiés-collés » dans les questions 2.1 et 2.4
  • Retour de bool: beacoup trop font un if-else au lieu de retourner directement le bool, cf post sur le forum de programmation à ce sujet
  • « unsigned double » n'existe pas et n'a aucun sens !!
  • quelques oubli du point-virgule en fin de struct
  • La dernière question a par contre été moins bien réussie que prévue (c'est dommage car c'est typiquement ce que vous devriez pouvoir faire, faire une simulation « physique ») :
    • oubli d'inverser la vitesse du chien
    • oubli de vérifier le signe de la vitesse du chien avant de l'inverser
    • oubli d'incrémenter le temps
    • certains n'ont juste pas compris comment aborder le problème: oublient les move() (ou les font partiellement), font deux boucles, etc.

Question 3

Moins bien réussie : moyenne 15.2 (sur 23); max 27 (4 pt de bonus); taux de réussite : 66.7%

3.4 a clairement été l’exercice qui a posé le plus de problèmes, et aussi celui le moins rempli en général (abandon par manque de temps? abandon à cause de la difficulté perçue ?). Seulement 45% de réussite sur cette question.

Commentaires :

  • question 3.2 : parcours de tous les éléments (paires dupliquées) ou oubli de la moitié des vérifications
  • La vaste majorité des étudiants avec un "is_prefix_free" correct ont utilisé deux for-loops passant sur tous les indexes et ensuite ont testé si i == j, plutôt que faire 2 tests "is_prefix"
  • question 3.4 : passage par référence et suppression de la string lors du parcours (détruit le message d'origine)
  • La plupart des étudiants qui ont complété la question 3.4 ont utilisé un "while(s.size() > 0)" couplé à un "s = s.substring()"; pourquoi modifier la chaîne de départ (pas grave si c'est une copie; mais ce n'est pas nécessaire; très grave si c'est un passage par référence)
  • Beaucoup des fonctions decode() dans la question 3.4 contenaient des boucles infinies
  • Certains étudiants confondent encore "return" et "cout"
  • Trop d'étudiant semblent ignorer l'existance de += pour les string (ajout) et se compliquent la vie avec des insert/replace/push_back ou autres horreurs.
  • Certains étudiants semblent confondre les vectors et les structs et essaient d'accéder aux champs de leurs structs par index
  • Certains étudiants ont implémenté "is_prefix" à la place de "is_prefix_free" dans la question 3.2
  • Trop de solutions ad-hoc (fonctionnement uniquement pour l'exemple fourni) au lieu de générales.
  • De façon générale, trop d'étudiants perdent des points ici ou là par manque de lecture/respect de la consigne (e.g. essayer de convertir les char en int/size_t). C'est dommage de perdre des points comme cela.

Remarque mineures :

  • Boucles séparées pour la vérification d'erreur et pour la traduction dans la question 3.3 -
  • noms de variables qui ne veulent rien dire: c'est plus simple pour vous (et pour les correcteurs) de prendre l'habitude de nommer ses variables correctement, et pas juste a, C, L, c, et autres. Dans certains cas, ca se comprend (i ou j dans une boucle for, ou lorsqu'il y en a peu) mais sinon ça devient compliqué (de lire, de se relire et) de savoir ce qu'est cette variable.