Notes finales

Notes finales

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

Bonsoir,

Les notes finales sont accessibles sur IS-Accademia. Voici ci-joint (attachés en pièce jointe tout en bas) le corrigé de l'examen et divers commentaires généraux ; je vais également vous envoyer sous peu par email vos résultats personnels.

MERCI DE LIRE ATTENTIVEMENT le corrigé et les commentaires ci-joints avant de poser d'autres questions.

Je tiens également à souligner que (comme indiqué dans le tout premier cours) tous les arrondis ont déjà été faits vers le haut et que cette note finale n'est pas de résultat d'un arrondi arbitraire, mais que j'ai pris « un certain temps » à regarder personnellement en détail tous les cas limites.

Concernant les notes mises dans Moodle (onglet Notes), comme d'habitude :

  • les notes publiées correspondent à la fraction que vous avez obtenue, multipliée par 100 : par exemple pour l'examen final, cela correspond à
    100 * votre total de points / 94
    car cet examen a finalement été noté sur 94 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 » ;

  • la note « Note » 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.).

Les histogrammes ci-dessous présentent respectivement la répartition des points obtenus à l'examen, ainsi que les notes finales dans la branche.

Je vous souhaite à toutes et tous de bonnes vacances, un bel été et une excellente continuation.

Remarques sur l'examen :

Q1

Globalement un bien meilleur ressenti qu'au midterm, le cours semble mieux assimilé ; p.ex. beaucoup moins oublient d'allouer la mémoire.

- Problèmes avec les définitions cycliques (Node contient Node*) .

- Beaucoup de gens ne prennent pas en compte le cas où l'on ajoute dans
  une PQueue vide et en général beaucoup de corner cases oubliés (p.ex.
  oubli de remettre à jour la tête ou la queue).

- Beaucoup de mal avec l'échange de Node, ils oublient souvent les
  Node avant et après les deux Node échangées.

- Students forget NULL checks quite often.
 
- 1.2: The most common mistake was only destroying the node (without
  the content) or the queue (without looping).

- 1.4: In general, most students handle allocation really well, but
  forget to keep the old value in case of error.

- 1.5: I would say that ~30% of the students only handled the standard
  case.

- beaucoup de memory leaks, en particulier dans create_new_node()
  et merge_priority()
  typiquement sur le realloc : ne PAS faire ptr = realloc(ptr, ...)
  (ne pas directement assigner le pointeur réalloué)

- plusieurs copiés-collés dans insert_value() et dans merge_priority()

- mélanges dans l'ordre d'assignation des pointeurs, surtout dans
  swap_with_previous


A FEW people still had trouble with:

- returning addresses of local variables

- weirdly initializing structure pointers
  (for example: Node* node = {NULL, NULL, NULL} )

- not freeing previously allocated objects in case of an error

- accessing the priority queue (like this: queue[i])

- declaring a pointer and allocating some memory just to
  immediately re-assign it
  (something like:
    Node* n = malloc(...);
    n = queue->head)
  )

Et on a aussi eu quelques élèves qui semblaient ne pas avoir suivi le
cours, le code écrit ne ressemblait en rien à du C.

======================================================================
Q2-

- 2.1: globalement bien réussi

- 2.2: majoritairement ratée :
  beaucoup une confusion entre la compilation et l’édition de liens.
  confusions entre le rôle des fichiers .o et .c/.h
  surtout il est frappant de voir souvent l'incohérence suivante :
    - correctement répondu en 2.1 que le .h sert à COMPILER
    - correctement répondu en 2.2.a que c'est de l'édition de liens
    - et ensuite dire que c'est un problème de .h ...

- 2.3 la plupart des étudiant(e)s n'ont pas remarqué le fait que double*
  array[] causait une erreur
  (alors que c'est une erreur relevée dans le compte-rendu du midterm)

  plusieurs d'étudiant(e)s pensent que calloc init à 0 qui est
  différent de NULL

- 2.4: pas bien réussie par la plupart : mal ou peu répondu (surtout
   la partie dessin, alors que c'est pratiquement à l'identique une
   étude de cas faite en classe) ; mais globalement celles/ceux qui
   l'ont fait ont bien compris.
   
   beaucoup ne savent pas que realloc() fait malloc() sur NULL

   plusieurs corrections de sizeof(void*) en sizeof(char**) ou sizeof(char*)
   [pourquoi ?]

   plusieurs corrections de !d à d == NULL

- 2.5: beaucoup d'étudiant(e)s n'ont pas remarqué le problème avec
  l'allocation statique de la string retournée par la fonction
  first_two dans la dernière question.
  (alors que c'est une erreur relevée dans le compte-rendu du midterm)


2.4 et 2.5: plusieurs croient que l'initialisation
   char str[] = "qqchose";
   est incorrecte ou est const
   ( confusion avec char* str = "qqchose"; )

Histogrammes :