Notes 2e devoir

Notes 2e devoir

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

Bonjour,

Je viens de mettre dans Moodle (onglet Notes sur le coté gauche) les notes du second exercice noté (exercice à la maison) et vais sous peu vous envoyer vos copies corrigées par email. Je vous fais part ici de commentaires généraux.

Concernant les notes publiées dans Moodle :

    Les notes publiées correspondent à la fraction que vous avez obtenue, multipliée par 100 : par exemple pour cet exercice noté, cela correspond à
    100 * votre total / 80
    car l'épreuve a été notée sur 80 points, hors bonus.

    La note «Note Finale (SAC)» correspond à la note arrondie, sur l'échelle habituelle 1-6 au quart de point, que vous auriez si on arrêtait là. Je la remettrai à jour à chaque nouvelle épreuve, suivant les pondérations indiquées dans le premier cours.

    La note «Total du cours» est calculée automatiquement par Moodle et correspond à la fraction moyenne, laquelle est arrondie pour calculer la note "Finale (SAC)" mentionnée ci-dessus. (> 55% = 4, > 60% = 4.25, etc.)

MERCI DE LES LIRE ATTENTIVEMENT les commentaires faits par vos correcteurs dans le fichier rendu par email (fichier YAML et ou directement dans votre code source ; un fichier .yaml est un simple fichier texte que l'on peut ouvrir dans n'importe quel éditeur),
ainsi que les remarques générales que voici :

Globalement, c'est un devoir très bien réussi (94.5% de réussite ; points allant de 0 à 83 sur 81, moyenne à 65.92 points, médiane à 70.5 -- voir la distribution en fin de message) malgré plusieurs élèves n'ayant visiblement pas eu le temps de faire correctement ce devoir (surcharge de fin de semestre ?), certains rendant par exemple quelque chose de plus proche du pseudo code que du C.
Mis à part ces cas particuliers, l'exercice est en général bien compris ; on a l'impression que la majorité des étudiant(e)s a bien compris les pointeurs et on voit même globalement une amélioration du niveau par rapport au premier devoir.

Néanmoins, plusieurs remarques ci-dessous pour encore vous améliorer.


Général :

- Oubli de vérification des allocations dynamique (retour de malloc/calloc/realloc)

- Fuite mémoire en cas d'erreur (oubli de free si retour pour cause d'erreur)

- Oubli des parenthèses autour des arguments des macros

- Plus rare mais grave : lorsque l'on passe un pointeur vers une
  structure dans laquelle écrire (e.g. `create` ou
    `create_shallow_backup`), allocation dynamique d'une nouvelle
  structure dans ce pointeur. Ensuite le reste de la fonction
  travaille avec ce pointeur, et il est perdu à la fin de la fonction.

- Dans `getline`, on a vu plusieurs fois `*where[i]` plutôt que
  `(*where)[i]`, ce qui pose des problèmes, évidemment.

- La fonction get_line() est parfois « mal terminée », '\0' au mauvais endroit ou valeur incorrect pour *how_many ou implémentation incorrect de la lecture de grandes chaînes.

- oubli de vérifications dans la fonction get_line (p.ex. EOF)

- plusieurs se compliquent trop la vie (algorithmique) et du coup c'est forcément plus long/compliqué à faire...

- trop peu d'utilisation de const

- et encore trop de confusion int/size_t


Spécifique à ce devoir :

- Non vérification des régions custom invalides (c'était un peu subtil)