Created
April 2, 2015 04:19
-
-
Save Poplava/036eca7d43f6f9a77ea3 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
using namespace std; | |
class Arg | |
{ | |
private: | |
int _n; | |
int _a; | |
Arg* _der; | |
public: | |
Arg(int a, int n); | |
~Arg(); | |
void print(); | |
Arg* getDer(); | |
}; | |
Arg::Arg(int a, int n) : _a(a), _n(n), _der(nullptr) | |
{ | |
} | |
void Arg::print() | |
{ | |
cout << _a << "x^" << _n << " "; | |
} | |
Arg* Arg::getDer() | |
{ | |
int a, n; | |
if (_der != nullptr) return _der; | |
a = _a * _n; | |
n = _n - 1; | |
return new Arg(a, n); | |
} | |
class QueueArg | |
{ | |
private: | |
Arg* _arg; | |
QueueArg* _next; | |
public: | |
QueueArg(Arg* &arg); | |
~QueueArg(); | |
QueueArg* getNext(); | |
QueueArg* setNext(QueueArg* &qArg); | |
Arg* getArg(); | |
}; | |
QueueArg::QueueArg(Arg* &arg) : _arg(arg), _next(nullptr) | |
{ | |
} | |
QueueArg* QueueArg::getNext() | |
{ | |
return _next; | |
} | |
QueueArg* QueueArg::setNext(QueueArg* &qArg) | |
{ | |
_next = qArg; | |
return _next; | |
} | |
Arg* QueueArg::getArg() | |
{ | |
return _arg; | |
} | |
class Queue | |
{ | |
private: | |
QueueArg* _first; | |
QueueArg* _last; | |
public: | |
Queue(); | |
~Queue(); | |
QueueArg* push(QueueArg* &qArg); | |
QueueArg* pop(); | |
}; | |
Queue::Queue() : _first(nullptr), _last(nullptr) | |
{ | |
} | |
QueueArg* Queue::push(QueueArg* &qArg) | |
{ | |
if (_first == nullptr) { | |
_first = qArg; | |
_last = qArg; | |
} | |
else { | |
_last->setNext(qArg); | |
_last = qArg; | |
} | |
return _last; | |
} | |
QueueArg* Queue::pop() | |
{ | |
QueueArg* qArg; | |
if (_first == nullptr) { | |
return _first; | |
} | |
qArg = _first; | |
_first = _first->getNext(); | |
return qArg; | |
} | |
class Derivative | |
{ | |
private: | |
Queue* q; | |
int maxN; | |
public: | |
Derivative(); | |
~Derivative(); | |
void run(); | |
void createArg(int a, int n); | |
}; | |
Derivative::Derivative() | |
{ | |
q = new Queue(); | |
} | |
void Derivative::createArg(int a, int n) | |
{ | |
Arg* arg = new Arg(a, n); | |
QueueArg* qArg = new QueueArg(arg); | |
q->push(qArg); | |
} | |
void Derivative::run() | |
{ | |
int i, a; | |
cout << "Derivative 1.0" << endl; | |
cout << "Enter max x^" << endl; | |
cin >> maxN; | |
for (i = maxN; i >= 0; i--) { | |
cout << "Enter a for x^" << i << ": "; | |
cin >> a; | |
createArg(a, i); | |
} | |
QueueArg* qArg = q->pop(); | |
while (qArg != nullptr) { | |
qArg->getArg()->getDer()->print(); | |
qArg = q->pop(); | |
} | |
} | |
int main() | |
{ | |
Derivative* d = new Derivative(); | |
d->run(); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment