-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlitteralerationnelle.cpp
94 lines (63 loc) · 3 KB
/
litteralerationnelle.cpp
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
#include "litteralerationnelle.h"
#include "litteralereelle.h"
#include "litteraleentiere.h"
#include "QDebug"
LitteraleRationnelle::LitteraleRationnelle(int s, LitteraleEntiere nom, LitteraleEntiere denom) : LitteraleNumerique(s), numerateur(nom), denominateur(denom)
{
}
LitteraleRationnelle::LitteraleRationnelle(QString input){
if(input.left(1)=="-"){
signe=1;
input=input.remove(0,1);
}
QStringList reels = input.split("/");
qDebug()<<reels.at(0);
qDebug()<<reels.at(1);
numerateur=LitteraleEntiere(reels.at(0));
denominateur=LitteraleEntiere(reels.at(1));
}
void LitteraleRationnelle::simplifier(){
}
QString LitteraleRationnelle::toString(){
if(signe==1)
return QString(numerateur.toString()+"/"+denominateur.toString());
else
return QString("-"+numerateur.toString()+"/"+denominateur.toString());
}
bool LitteraleRationnelle::estLitteraleRationnelle(QString bloc){
if(bloc.indexOf('/')!=-1){
if(bloc.indexOf('-')!=-1)
bloc = bloc.remove('-');
QString strNominateur = bloc.section('/', 0, 0);
QString strDenominateur = bloc.section('/', 1, 1);
qDebug() <<bloc << strNominateur << strDenominateur;
return (LitteraleEntiere::estLitteraleEntiere(strNominateur) && LitteraleEntiere::estLitteraleEntiere(strDenominateur));
}
else
return false;
}
Litterale* LitteraleRationnelle::operator+(Litterale& lit2){
// Si le second terme est un entier
if(LitteraleEntiere *lit2cast = dynamic_cast<LitteraleEntiere*>(&lit2)) {
int s = signe * lit2cast->getSigne();
unsigned int newNumerateur = denominateur.getValeur() * lit2cast->getValeur() + numerateur.getValeur();
unsigned int newDenominateur = denominateur.getValeur();
return new LitteraleRationnelle(s, LitteraleEntiere(1, newNumerateur), LitteraleEntiere(1, newDenominateur));
}
// Si le second terme est un rationnel
else if(LitteraleRationnelle *lit2cast = dynamic_cast<LitteraleRationnelle*>(&lit2)) {
int s = signe * lit2cast->getSigne();
unsigned int newNumerateur = denominateur.getValeur() * lit2cast->getNumerateur().getValeur() + numerateur.getValeur() * lit2cast->getDenominateur().getValeur();
unsigned int newDenominateur = denominateur.getValeur() * lit2cast->getDenominateur().getValeur();
return new LitteraleRationnelle(s, LitteraleEntiere(1, newNumerateur), LitteraleEntiere(1, newDenominateur));
}
// Si le second terme est un réel
else if(LitteraleReelle *lit2cast = dynamic_cast<LitteraleReelle*>(&lit2)) {
int s = signe * lit2cast->getSigne();
double res = numerateur.getValeur() / denominateur.getValeur(); // + lit2cast->getValeur();
return new LitteraleReelle(s, res);
}
}
Litterale* LitteraleRationnelle::operator*(Litterale& lit2){return this;}
Litterale* LitteraleRationnelle::operator/(Litterale& lit2){return this;}
Litterale* LitteraleRationnelle::operator-(Litterale& lit2){return this;}