blob: 5fa3f8f6ba9aa4a46f844b760d2256c4134dedd9 (
plain) (
blame)
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
|
#include "Expression.hpp"
#include "Num.hpp"
#include "Operation.hpp"
bool AreTheSame(Expression* left, Expression* right);
int main()
{
Expression* l = new Num(3);
Expression* r = new Num(7);
Expression* final1 = new Operation(l, '+', r);
Expression* l2 = new Num(3);
Expression* r2 = new Num(7);
Expression* final2 = new Operation(l2, '+', r2);
std::cout << final1->Evaluate();
std::cout << AreTheSame(final1, final2);
delete final1, final2; //Винаги трием най-големите 'Expression-и'. Те се грижат за по-малките от които са образувани.
}
bool AreTheSame(Expression* left, Expression* right)
{
if (left->getType() != right->getType())//гледаме дали не са от раличен тип (едното да е опрация,другото да е число)
return false; //очевидно са различни тогава
if (left->getType() == 1) //ако двете са числа
{
Num* l = (Num*)left; //Конвертираме пойнтерите
Num* r = (Num*)right;
return l->getNum() == r->getNum(); //сравняваме стойностите
}
else //Ако двете са операции
{
Operation* l = (Operation*)left;
Operation* r = (Operation*)right;
return (l->op == l->op) && AreTheSame(l->left, r->left) && AreTheSame(l->right, r->right);
//гледаме дали знаците на опрациите съвпадат, дали левите страни съвпадат и дали десните страни съвпадат.
}
}
|