[Suggestion mais pas vraiment] Cours de C++ de informaticienzero et mehdidou99

a marqué ce sujet comme résolu.

Bonsoir,

Veuillez m’excuser pour mon sujet qui est sans doute dans la mauvaise catégorie, mais je n’ai pas trouvé l’endroit pour le rédiger si ce n’est ici.

Mon désaccord porte sur le cours de C++ de informaticienzero et mehdidou99 au chapitre "Reprendrez-vous un peu de sucre syntaxique ?" : https://zestedesavoir.com/tutoriels/822/la-programmation-en-c-moderne/decoupons-tout-ca/reprendriez-vous-un-peu-de-sucre-syntaxique/ et plus exactement ici : https://zestedesavoir.com/tutoriels/822/la-programmation-en-c-moderne/decoupons-tout-ca/reprendriez-vous-un-peu-de-sucre-syntaxique/#:~:text=bool%20operator%3D%3D(Fraction,denominateur%20%3D%3D%20droite.denominateur%3B%0A%7D

En effet, la fonction écrite est plus compliquée qu’elle ne devrait l’être, puisqu’un test inutile est effectué. Vérifier gauche.denominateur == droite.denominateur revient à vérifier a.denominateur * b.denominateur == b.denominateur * a.denominateur, ce qui est tautologique (à cause de la commutativité de la multiplication).

(Il suffit de se souvenir que a a/b = c/d ssi a*d = b*c)

La fonction s’écrit donc simplement :

bool operator==(Fraction const & a, Fraction const & b)
{
    return a.numerateur * b.denominateur == a.denominateur * b.numerateur;
}

J’espère ne pas avoir fait d’erreur (car je suis fatigué à cette heure, mais cela ne m’excuserait pas).

Edit : Je viens de m’apercevoir en lisant la suite du code que vous n’avez pas pris en compte le fait que les numérateurs et dénominateurs pouvaient être négatifs. Ainsi les comparaisons <, <=, > et >= sont fausses. Il faudrait par exemple remplacer les types en entiers non signés (ou bien modifier les fonctions de comparaison).

Bref, c’était un détail qui a retenu mon attention, mais en dehors de cela, je trouve le cours très bien fait et je vous en remercie ! :D

Bonne continuation et bonne soirée.

+0 -0

Bonjour,

Oui, le forum « Bug & Suggestions » est destiné au développement de Zeste de Savoir. Par exemple si tu trouves un bug au sein du site (avec les fonctionnalités du site, par exemple, un problème de connexion) pas pour des erreurs dans les tutoriels.

Pour cela, à la fin d’un chapitre, tu as un bouton dédié. « Signaler une faute dans ce chapitre ». C’est pas le bouton le plus visible par-contre.


Sinon, effectivement :

Si : ab=xy=>ay=xb\frac{a}{b} = \frac{x}{y} => a*y = x*b

Normalement on ne devrait pas avoir de test supplémentaire à faire. Donc effectivement, si on implémente ça on a bien a.numerateurb.denominateur==a.denominateurb.numerateura.numerateur * b.denominateur == a.denominateur * b.numerateur uniquement.

+0 -0

J’ai transmis l’info par MP aux auteurs. Je laisse ce sujet ouvert pour qu’ils répondent (@staff : inutile de le fermer, une fois la discussion résolue, il finira par retomber dans les pages, ce n’est pas gênant :) ).

Bonne journée,

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte