Bonjour à toutes et à tous !
J'ai publié les notes de l'examen dans IS-Accademia et peux donc maintenant vous donner le corrigé (en pièce jointe en bas de ce message) et ci-dessous les commentaires généraux sur les résultats. Je vais aussi 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) : j'ai pris la peine de vérifier personnellement tous les cas limites.
De plus, je rappelle également que, conformément à ce qui a été expliqué dans le tout premier cours, tous les arrondis ont été effectués vers le haut (c.-à-d. : > 50% du barème = 3.75, > 55% = 4, > 60% = 4.25, etc.).
L'histogramme suivant présente la répartition des notes finales (plus bas il y a celui des points à l'examen):
Commentaires sur l'examen
Général
Voici la distribution des points de l'examen:
min : 0, max : 138.75/150, moyenne : 73.10, écart-type : 29.57, médiane : 73.25.
Le barème pour cet examen a été fixé à 127 points.
Au niveau général, ce qui m'a le plus frappé cette année, c'est:
- le très faible taux de réussite (ayant plusieurs origines/explications, mais quand même...);
- la beaucoup plus grande hétérogénéité de la classe;
-
l'écart entre la partie théorie et la partie C++: beaucoup d'étudiant(e)s ayant décemment réussi la partie théorie ont été très mauvais(e)s sur le C++; cela me pose soucis pour le second semestre...
Il faudrait vraiment rattraper rapidement ce retard.
Question 1
min : 0, max : 10/10, moyenne : 7.64, écart-type : 2.08, médiane : 8.5.
- Souvent mauvais nombre de termes (inégalité stricte).
- Pas de unsigned int pour le prototype.
- Ne pas comprendre ce qu'est une fonction C++ / les entrées de l'algorithme.
Question 2
min : 0, max : 41.5/41, moyenne : 14.46, écart-type : 10.12, médiane : 13.75.
- Très mauvais résultats en moyenne.
- Certains ne lisent pas la consigne et utilisent du pseudo-code.
2.1
-
Trois approches d'écrire cet algorithme:
-
(trop peu) directe avec une boucle whileoufor;
- (trop souvent) concaténation, puis tri (avec diverses versions de tris plus ou moins réussies);
-
fusion avec (au moins) deux boucles for.
-
(trop peu) directe avec une boucle
-
trop souvent des « and» à la place de «or» dans la boucle
- Aussi les contrôles sur index/taille ont être omis.
-
Dans les cas de double for, plusieurs erreurs: L2 non traitée si L1 vide, duplication d'éléments d'une (ou des deux) liste(s), erreurs d'index (iau lieu dei-1)
-
Certains utilisent des stringau lieu devector...
2.2
- Souvent laissé vide ou sans justification.
- Utilisation de notation non spécifiée (n, sans dire ce qu'est n).
2.3
- Souvent laissé vide.
-
Pratiquement toujours, passage par valeur des arguments (alors que l'appel récursif MODIFIE les arguments)
-
Pop/push devant un std::vector(ça n'est pas possible)
- Souvent une approche itérative (ou récursif uniquement si la taille des listes est différentes, itératif sinon)
Question 3
min : 0, max : 19.5/20, moyenne : 12.16, écart-type : 4.75, médiane : 12.75.
- Beaucoup de fautes d'inattention/de calcul.
- Trop d'étudiants ne savent pas faire le code de Huffman
- 3.2 beaucoup d'incompréhension sur le « code binaire naïf » (c.-à-d. que le message de « il faut log(k)+1 bits pour représenter k informations » n'est pas compris dans son essence)
- 3.3 : incompréhension du rôle du th. de Shannon et beaucoup de fautes diverses de conversion, d'oubli d'un coefficient, ...
Question 4
min : 0, max : 15/15, moyenne : 8.35, écart-type : 4.51, médiane : 9.
- Souvent les justifications n'étaient pas suffisantes.
- Plusieurs fois on a pas remarqué que le deuxième appel à la fonction se termine en un temps constant.
- Oubli de mentionner la complexité constante du corps du while
- Utilisation de notation non spécifiée (n, sans dire ce qu'est n).
- non utilisation de la notation Theta()
Question 5
min : 0, max : 13/13, moyenne : 9.10, écart-type : 4.08, médiane : 10.5.
- 5.1 : Principalement oubli du fait qu'on a deux conditions à satisfaire.
- 5.2 : Beaucoup d'approches plus ou moins directes, mais en général la majorité des étudiants ont compris l'affirmation à démontrer et plus ou moins comment le faire.
- 5.3 : Les étudiants trouvent en général la formule, mais l'erreur 810 mod 91 = 9 ou 81 est commune.
- 5.4 : Plusieurs étudiants n'ont pas montré leurs calculs, mais ils ont obtenu une valeur proche de 222. Les fautes de calcul sont les plus communes pour cet exercice.
- 5.5 : Certains étudiants ont oublié de lire ou n'ont pas compris la consigne (on cherche uniquement la signature).
Question 6
min : 0, max : 25/25, moyenne : 11.45, écart-type : 8.44, médiane : 10.75.
-
Trop d'étudiants se laissent encore piéger par la division entière : 1/ndonne 0 (sauf si n vaut 1)
- copiés-collés : il est agréable de constater que beaucoup d'étudiants évitent le copié-collé sur la fonction fit() (et y font appel), mais, à l'opposé, beaucoup d'étudiants « copient-collent » le calcul de la droite au lieu de faire appel à line_value()...
- plusieurs ne savent pas calculer/écrire x^2 en C++ ( ^ n'est pas l'opérateur puissance en C++ ; et pow(2,x) c'est 2^x pas x^2 !)
- et beaucoup de petites fautes de syntaxe ; il semble aussi par ailleurs que plusieurs étudiants n'ont jamais vraiment fait de code C++...
Question 7
min : 0, max : 16/16, moyenne : 5.11, écart-type : 4.20, médiane : 4.
- Beaucoup de réponses vides
- 7.2 b) confusion filtre passe-bas idéal et filtre demandé (à moyenne mobile); très peu ont trouvé les bonnes amplitudes
Question 8
min : 0, max : 10/10, moyenne : 4.69, écart-type : 2.58, médiane : 4.
- Les deux premières questions ont globalement été bien réussies, à quelques erreur près sur la route (par exemple tous les routeurs notés). Les erreurs les plus fréquentes étaient de donner le chemin par la lettre d'arrivée, ou, pour le 8.2, de considérer que enlever le point C raccourcit le chemin.
- La troisième question fut beaucoup moins réussie. Peu avaient le bon raisonnement (p.ex. oubli des acquittements ou de la perte sur le second envoi), et il y avait très souvent des calculs imprécis, qui donnaient des résultats anormalement longs ou courts.