Notes examen 3

Notes examen 3

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

Bonsoir,

Je viens de mettre dans Moodle les notes de l'examen final 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 et lire le corrigé (ci-joint) avant de poser d'autres questions.

De plus, je tiens également à préciser que les 3.75 (et les 4.0) finaux ne sont pas le résultat d'un arrondi arbitraire, mais bien une décision de ma part (bien sûr compatible avec le barème ci-dessous) : j'ai pris la peine de vérifier personnellement tous les cas limites.

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 : pour cet examen qui était noté sur 100 point cela correspond donc également à votre nombre de 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.).

    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 de l'examen 3

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

Au niveau final du cours, c'est aussi une excellente année avec 81.4% de réussite et 4.46 de moyenne. Voici la distribution des notes finale :

distribution des notes finales

Pour finir, comme toujours, divers commentaires pour vous améliorer encore (pour le 2nd semestre) sont donnés ci-dessous.

Toute bonne continuation à toutes et à tous !

Question 1

max : 29 / 29 ; moyenne : 20.7 / 29 ; taux de réussite : 71.4%.

  • Q1.1: trop d'erreur sur le passage par valeur.

  • Q1.3.2: plusieurs oubli des unités (Sont-ce des Physiciens ?...)

  • Q1.3.4: plusieurs ne font encore pas le lien entre la formule de reconstruction et le résultat du théorème de Niquist-Shannon, c.-à-d. ne réalisent pas que cette somme redonne le signal de départ.

Question 2

max : 11 / 11 ; moyenne : 7.2 / 11 ; taux de réussite : 65.3%.

  • Ce qui ressort le plus c’est la confusion Q2.4 entre les notions de complexité d’algorithme de de complexité de problème.
    J'ai visiblement raté qqchose au niveau de mon cours... :-(

  • Q2.1 : dans l'ensemble très bon, quelques personnes ont oublié la ligne pour X dans le 2.1.2

  • Q2.3: l'argument de la redondance a souvent été oublié


Question 3 :

max : 17 / 16 ; moyenne : 12.4 / 16 ; taux de réussite : 83.7%.

  • trop d'étudiants ne savent pas calculer une valeur moyenne et oublient de prendre en compte les probabilités de chaque thé dans le calcul de la longueur moyenne

  • plusieurs erreurs dans la construction de l'arbre dont confusion entre procédure de Huffman et celle de Shannon-Fano

  • trop d'erreurs de calcul dans 3.1


Question 4 :

max : 12 / 12 ; moyenne : 5.7 / 12 ; taux de réussite : 41.9%.

  • positif: typedef quasiment tout le temps fait

  • mauvaise gestion des exceptions: beaucoup d’étudiants se sont emmêlés les pinceaux en écrivant des try et catch a l’intérieur même des fonctions

  • les indices de C ont très rarement été translatés

  • M souvent initialisée vide

  • l’intégrité de C n'a été vérifiée que dans un tiers des copies

    Quand vous écrivez une fonction en C++, ou quand vous effectuez des opérations, il est important de penser à vérifier qu'elles sont valides, que les hypothèses nécessaires sont vérifiées.

    Cette façon de pratiquer n'est visiblement pas encore un réflexe.

  • Utilisation d'une fonction

    max()
    avec 3 arguments (qui n'existe pas en C++); il suffit d'écrire
    max(a, max(b, c))
    (à noter cependant que
    max({a,b,c})
    (avec accolades) existe: c'est une « liste d'initialisation » , concept que l'on verra au second semestre).

  • encore (examen 2) des problèmes avec les vecteurs et array , comme :

    C.push_back( 0 )
    ou
    C[0][0].size()
    ou encore
    C.size() = m+1

Question 5 :

max : 13 / 13 ; moyenne : 6.7 / 13 ; taux de réussite : 46.2%.

  • Q5.1: trop d'étudiants ont trouvé 3 ou 5 comme exposant alors que c'est une conversion binaire d'un nombre (binaire) finissant par 0 !! (est-ce un problème de lecture dans le mauvais sens ?)

  • environ un quart ont d'abord pris l'exposant avant la mantisse. Pourquoi ??

  • Calcul: plusieurs ont calculé avec des fractions, c'est plus facile de manipuler les puissances de 2

  • Attention, 2^1 == 2 et non pas 1 !

  • Q5.2 beaucoup beaucoup trop de solutions compliquées difficile à suivre (cf corrigé)

  • Q5.2 plusieurs ont pris l'exposant/la mantisse comme des int/string binaire),

  • énormément de problème avec l'ordre des puissances négatives (de la mantisse), trop souvent à l'envers ou commençant à la puissance 0 au lieu de -1.

  • beaucoup n'ont pas utilisé une syntaxe C++ (puissance, barre de fraction, etc.)

  • on a aussi eu plusieurs décrémentations de

    size_t
    (avec test >= 0, donc underflow).

  • beaucoup se contentent de d'afficher la mantisse telle quelle ou ne savent pas la calculer

  • Beaucoup ne savent pas faire de conversions d'un nombre en binaire alors que le sujet a été largement couvert (plusieurs fois) et que l'examen était avec documents...

  • Trop d'oublis d'initialiser des variables de type élémentaire (int, double etc.)

    Remarque: on peut déclarer et initialiser en même temps (

    int n; n = m;
    s'écrit mieux
    int n(m);


Question 6 :

max : 21.5 / 19 ; moyenne : 14.4 / 19 ; taux de réussite : 85.1%.

  • entêtes (include, using namespace std) souvent absents (pourtant on demandait un programme ici)

    quelques manques du

    return
    du
    main

  • Peu ont déclaré la constante

    q0

  • pas d'initialisation de la variable (

    q
    ) avant lecture : pensez au cas d'erreur ! (cf cours sur les entrées-sorties)

  • boucle de saisie : confusion boucle while et do-while (ce qui entraîne du « copié-collé »)

  • trop de

    int
    à la place de
    double
    alors qu'il est clair que ce sont des grandeurs physiques

  • Many students overcomplicated their code in various ways: some wrote a method for everything, which made the code harder to read and understand ultimately; a few wrote recursive functions instead of using loops which was quite confusing.

  • Many students confused the signs for velocity/height. Thus, their loop would never end!

  • trop de variables déclarées mais non initialisées, ou même pas déclarées.

    Attention également à la portée des variables

  • Certains ont aussi eu de la peine à distinguer r, q et q0.

  • pratiquement aucun étudiant ne pense à introduire des constantes pour les constantes du problème (q0, hauteur ou vitesse de crash)

  • Certains arrivent à oublier la mise à jour du carburant malgré la remarque de la donnée !