Bonjour à toutes et à tous !
Pour celles et ceux qui sont en conformité avec le cours
(dernière vérification hier soir),
je viens de publier les notes du devoir à la maison
et vais vous envoyer sous peu un email votre programme et les points obtenus
(si vous n'avez pas de note : veuillez au préalable vous
mettre en conformité avec le cours comme déjà expliqué
de moult fois [p.ex. https://moodlearchive.epfl.ch/2022-2023/mod/forum/discuss.php?d=82469])
Vos correcteurs ont PEUT ETRE ajouté des commentaires dans votre code
(qui va vous être retourné), mais sinon, les principales erreurs sont
détaillées ci-dessous.
Je vous recommande de les lire attentivement afin de progresser encore.
Ah, je tiens aussi à dire que les 3 dernières lignes de votre fiche de correction sont prévues pour normalement être à 0 : c'est surtout pour mettre des mallus. 0 dans ces 3 dernières lignes est donc normal.
Commentaires :
Avec une moyenne de 32.4 points sur 37 et 95% de réussite c'est un devoir très bien réussi (voir la distribution des points en fin de message). Et comme dit en classe, je vous félicite en plus pour vos préoccupations
de robustesse (« que faire si telle ou telle donnée est erronée ? », etc.
Attention cependant à ne pas être trop restrictif [surinterprétation])
Les bases de programmation que je vise semblent donc, dans l'ensemble, bien acquises par la classe ; ce qui me réjouit.
Et aussi, beaucoup pensent à mettre des commentaires. C'est très bien. Bravo !
Il reste cependant encore quelques points à améliorer globalement,
que je cite ci-dessous :
======================================================================
pas de constante en dur dans le code ("magic number")
ET ENCORE MOINS DE COPIE-COLLE: mettre DEUX fois -43 dans le code
est absolument à proscrire !
(imaginez le jour ou cette valeur doit changer)
======================================================================
oubli de passage par référence alors que l'objet doit être modifié
======================================================================
copié-collé d'expressions :
pour les détecter : si la donnée changeait sur ce point X,
combien de lignes de codes aurais-je à modifier ?
Si ce nombre est supérieur ou égal à 2, c'est certainement
un « copié-collé ».
exemple typique : g*mu ou -43
======================================================================
plus subtile/difficile à comprendre :
la délégation de responsabilités ("separation of concerns") :
ne pas faire faire à une autre fonction ce que "je" (= la fonction courrante)
suis censé faire
ou dans l'autre sens :
ne pas faire faire à une fonction ce qu'une autre doit faire
cela est aussi souvent lié au copié-collé tel qu'expliqué ci-dessus
======================================================================
oubli de la valeur absolue sur l'accélération
rappel : le test x == y sur les double
s'écrit abs(x - y) < epsilon
(à appliquer ici avec y = 0)
======================================================================
beaucoup d’incompréhension sur l'utilisation/le rôle de Status
(c'est lié au point ci-dessus)
======================================================================
Faire attention aux boucles infinies, si le code fonctionne pour
certaines valeurs, cela ne veut pas dire qu'il fonctionne pour
toutes.
======================================================================
encore bcp qui n'utilisent pas directement les bool :
if ((plongeur.etat.profondeur < max_depth) and (statut.ballon_gonfle == 0))
au lieu de
if ((plongeur.etat.profondeur < max_depth) and not statut.ballon_gonfle)
et aussi qui utilisent des int (0 1)
au lieu des valeurs bool true et false
======================================================================
variables globales qui ne sont ensuite utilisées que dans une seule fonction
(il ne faut pas !)
======================================================================
Pourquoi ces :
typedef struct Conditions Conditions;
???
d'où est-ce que ça vient ? Avez vous vu ça dans mon cours ?
C'est totalement inutile.
En C++ (contrairement à C)
struct X {
};
définit bien un type X.
======================================================================
mineur :
De nombreuses variables inutiles sont souvent créées : il faut penser
à créer des variables afin de stocker des résultats intermédiaires,
p.ex. pour éviter des « copiés-collés » mais sinon ce n'est pas
nécessaire.
======================================================================
Distribution des fractions des points (points divisés par 37) :