Bonjour à tous,
En ce moment, je suis un cour pour apprendre à programmer en C++ et j'ai eu envie de tester mes connaissances en POO en codant un programme sur les fraction (addition, multiplication, comparaison) en utilisant des opérateurs et des classes. En fait je veux juste avoir votre avis sur mon programme. Cependant le code source n'est pas très lisible et non optimisé donc soyez indulgent
Voila le main.cpp :
Code C++ : 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 #include <iostream> #include <ostream> #include "prototype.h" using namespace std; int main() { Fraction a(4), b(2,7); // Par defaut "a" aura comme denominateur 1 Fraction c, d; d = a * b; c = a + b; d.simplifie(); c.simplifie(); // Simplification des resultats avant affichage sur la console cout << a << " + " << b << " = " << c << endl; cout << a << " * " << b << " = " << d << endl; // Affichage du calcul if(a > b) // Ici je ne vais tout de meme pas vous faire un dessin ^^ cout << "a est plus grand que b." << endl; else if(a==b) cout << "a est egal a b." << endl; else cout << "a est plus petit que b." << endl; return 0; }
Et pour le fonction.cpp :
Code C++ : 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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146 #include <ostream> #include "prototype.h" using namespace std; Fraction::Fraction(int numerateur, int denominateur) : m_numerateur(numerateur), m_denominateur(denominateur) { } void Fraction::afficher(ostream& flux) const { if(m_denominateur != 1) { flux << m_numerateur << "/" << m_denominateur; } else { flux << m_numerateur; } } Fraction operator+(Fraction const& a, Fraction const& b) { Fraction resultat; resultat = a+b; return resultat; } Fraction& Fraction::operator+(Fraction const& b) { Fraction resultat; int copie; int copie2; resultat.m_denominateur = m_denominateur * b.m_denominateur; copie = m_denominateur * b.m_numerateur; copie2 = m_numerateur * b.m_denominateur; resultat.m_numerateur = copie + copie2; return resultat; } ostream& operator<<(ostream &flux, Fraction const& fraction) { fraction.afficher(flux); return flux; } Fraction& Fraction::operator*(Fraction const& b) { Fraction resultat; resultat.m_numerateur = m_numerateur * b.m_numerateur; resultat.m_denominateur = m_denominateur * b.m_denominateur; return resultat; } bool operator>(Fraction const& a, Fraction const& b) { bool tf; tf = a.estMoin(b); return tf; } bool operator==(Fraction const& a, Fraction const& b) { bool tf; tf = a.estEgal(b); return tf; } bool Fraction::estEgal(Fraction const& b) const { int test; int test2; test = m_numerateur / m_denominateur; test2 = b.m_numerateur / b.m_denominateur; if(test == test2) { return true; } else { return false; } } bool Fraction::estMoin(Fraction const& b) const { int test; int test2; test = m_numerateur / m_denominateur; test2 = b.m_numerateur / b.m_denominateur; if(test > test2) { return true; } else { return false; } } // Aide de Matheo pour la simplification int pgcd(int a, int b) { while (b != 0) { const int t = b; b = a%b; a=t; } return a; } void Fraction::simplifie() { int nombre=pgcd(m_numerateur, m_denominateur); m_numerateur /= nombre; m_denominateur /= nombre; }
Enfin le prototype.h :
Code C++ : 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 #ifndef PROTOTYPE_H_INCLUDED #define PROTOTYPE_H_INCLUDED #include <ostream> class Fraction { public: void afficher(std::ostream &flux) const; Fraction(int numerateur = 0, int denominateur = 1); Fraction& operator+(Fraction const& b); Fraction& operator*(Fraction const& b); bool estEgal(Fraction const& b) const; bool estMoin(Fraction const& b) const; void simplifie(); private: int m_numerateur; int m_denominateur; }; Fraction operator+(Fraction const& a, Fraction const& b); std::ostream& operator<<(std::ostream &flux, Fraction const& fraction); Fraction operator*(Fraction const& a, Fraction const& b); bool operator>(Fraction const& a, Fraction const& b); bool operator==(Fraction const& a, Fraction const& b); int pgcd(int a, int b); #endif // PROTOTYPE_H_INCLUDED
Voila
ps : Désolé pour les fautes d'orthographes. Mon IDE : Code Block
Partager