TD, TP, Projets
L'idée est de partir de notre code "débutant" et de l'améliorer vers un code plus "PRO".
Il ne resterait plus que l'ajout de la programmation objet (pour plus tard).
Travail préparatoire !
Reprenons le projet des soldes ! 💢 Enoncé
Analyse du problème
Je n'ose vous demander :
"qui a rédigé un cahier des charges et a pris le temps d'écrire un pseudo-code ?".
C'est pourtant ce que vous devrez rédiger en tant que chef de projet Junior, laissant à des jeunes stagiaires le soin d'implémenter (en Java, …) une solution.
Choix d'une structure :
Et oui, vous le savez un algorithme traite une information structurée.
Mettre vos articles dans un tableau est un très bon choix.
Il s'agit principalement parcourir ensuite notre tableau.
Nous pourrions utiliser une liste chainée (ou doublement chaînée), je pencherais pour une structure d'arbre équilibré, facilitant la recherche du MAX (O(profondeur)). Mais, je laisse au prof d'algo le choix de vous convaincre. Je ne vous apprends qu'à traduire vos choix en JS.
Prenons 5 minutes :
Je ne suis pas doué en rédaction. Lorsque j'écris "Prenons 5 minutes", je ne veux pas dire que j'ai mis 5 minutes pour implémenter mon proto.
J'ai mis en réalité plus d'un WE.
Non, l'idée de ce paragraphe est de vous inciter, une fois la mise en place d'un premier prototype, d'améliorer votre code (en prenant 5 minutes de recul !)
Analysons donc notre premier proto.
Analyse
Dans notre prototype de base, nous retirons à chaque itération l'achat le plus cher. C'est un choix !
Mais, il y a un autre problème, celui des performances.
Je vous ai donc demandé de chercher comment améliorer les performances du code de notre premier prototype ?
Voici deux axes d'améliorations.
Nous voyons lig. 54 que nous calculons pour chaque retrait le budget :
while (total(listeAchats) > budjet)
La seconde amélioration consisterait à être plus pertinent sur le retrait des articles.
Dans notre premier prototype, voici comment on retire un article :
retire 1 article (ici pantalon) -> calculer le total
retire 1 article (pantalon) -> calculer le total
retire 1 article (pantalon) -> calculer le total
On pourrait améliorer les performances en calculant directement la quantité de pantalon que l'on peut retirer sans pour autant calculer le total :
retire 3 pantalons -> calculer le total-3*Prix
A partir de Lundi, nous allons améliorer notre style d'écriture !
Vous ne devrez plus écrire des boucles de transformation, des boucles pour tester des valeurs, des boucles pour faire un total.
Vous ne devez plus écrire de forEach également.
Très prochainement, vous transformerez, filtrez, réduirez …