Bonjour à toutes et tous,

il y a quelques temps déjà, j'ai commencé a apprendre le c, puis maintenant me revoilà dans les méandres du c++,

dans mon apprentissage du c++, mon projet est une algorithme pour manipuler les fractions d'entier.

Mon code ne donne pas le résultat attendu

j'ai du mal à comprendre mon erreur

merci de m’orientè

Fichier.ccp

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <iostream>
#include "Fraction.h"
 
#include <iostream>
#include "Fraction.h"
 
using namespace std;
 
//---------------CONSTRUCTEURS FRACTIONS---------------------------------------------------------------------------
 
// FRACTION A 0 (DEFAULT)
Fraction::Fraction(): m_numerateur(0), m_denominateur(1){}
 
// FRACTION A 1 ENTIER
Fraction::Fraction(int numerateur): m_numerateur(numerateur), m_denominateur(1){}
 
// FRACTION
Fraction::Fraction(int numerateur, int denominateur): m_numerateur(numerateur), m_denominateur(denominateur){}
 
//----------------------------------------------------------------------------------------------------------------
 
 
// REDEFINITION OPERATEUR POUR AFFICHER
ostream& operator<<(ostream& flux, Fraction const& fraction){
 
        fraction.afficher(flux);
 
return flux;
}
 
//--------------- OPERATEUR-------------------------------------------
 
// OPERATEUR D'ADDITION
Fraction operator+(Fraction const& a, Fraction const& b){
 
          Fraction copie(a);
          copie += b;
 
return copie;
}
 
// OPERATEUR DE MULTIPLICATION
Fraction operator*(Fraction const& a, Fraction const& b){
 
          Fraction copie(a);
          copie *= b;
 
return copie;
}
 
//--------------------------------------------------------------------
 
 
// METHODE D'AFFICHAGE
void Fraction::afficher(ostream& flux) const{
 
     if(m_denominateur == 1){
 
        flux << m_numerateur;
 
     }else{
           flux << m_numerateur << '/' << m_denominateur;
          }
}
 
//----------------------OPERATEURS--------------------------------------------------------------
 
// METHODE D'ADDITION
Fraction& Fraction::operator+=(const Fraction &b){
 
           m_numerateur = b.m_denominateur * m_numerateur + m_denominateur * b.m_denominateur;
           m_denominateur *= b.m_denominateur;
 
return *this;
}
 
// METHODE DE MULTIPLICATION
Fraction& Fraction::operator*=(const Fraction &b){
 
           m_numerateur *= b.m_denominateur;
           m_denominateur *= b.m_denominateur;
 
return *this;
}
 
//----------------------------------------------------------------------------------------------
fichier.h

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#ifndef FRACTION_H_INCLUDED
#define FRACTION_H_INCLUDED
 
#include <iostream>
 
class Fraction{
 
public:
 
//-----------PROTOTYPES CONSTRUCTEURS FRACTIONS----------------------------
 
        // FRACTION A 0 (DEFAULT)
         Fraction();
 
         // FRACTION A 1 ENTIER
         Fraction(int numerateur);
 
 
            // FRACTION
         Fraction(int numerateur, int denominateur);
 
//------------------------------------------------------------------------
 
          // METHODE D'AFFICHAGE
         void afficher(std::ostream& flux) const;
 
         // METHODE D'ADDITION
         Fraction& operator+=(Fraction const& b);
 
         // METHODE DE MULTIPLICATION
         Fraction& operator*=(Fraction const& b);
 
 
private:
 
         int m_numerateur;
         int m_denominateur;
};
 
//-------------OPERATEURS-------------------------------------------------
 
// REDEFINITION OPERATEUR POUR AFFICHER
std::ostream& operator<<(std::ostream& flux, Fraction const& fraction);
 
//OPERATEUR D'ADDITION
Fraction operator+(Fraction const& a, Fraction const& b);
 
// OPERATEUR DE MULTIPLICATION
Fraction operator*(Fraction const& a, Fraction const& b);
 
//------------------------------------------------------------------------
 
 
 
#endif // FRACTION_H_INCLUDED
fichier main.ccp

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include "Fraction.h"
 
using namespace std;
 
int main(){
 
    Fraction a(4,5) ; //Déclare une fraction valant 4/5
    Fraction b(2);        //Déclare une fraction valant 2/1 (ce qui vaut 2)
    Fraction c,d;         //Déclare deux fractions valant 0
 
    c = a + b;
    cout << a << " + " << b << " = " << c << endl << endl;
 
    d = a * b;
    cout << a << " x " << b << " = " << d << endl;
 
    return 0;
}
résultat de l'addition : 9 / 5

résultat de la multiplication : 4 / 5