Skip to content

Instantly share code, notes, and snippets.

@Poplava
Created April 2, 2015 04:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Poplava/036eca7d43f6f9a77ea3 to your computer and use it in GitHub Desktop.
Save Poplava/036eca7d43f6f9a77ea3 to your computer and use it in GitHub Desktop.
#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