#include <iomanip>
#include <sstream>
#include <string>
#include "node.hpp"
#include "parser.hpp"

int main(int argc, char *argv[])
{
	double t0;
	int N;
	std::cout << "Dar t0: \n";
	std::cin >> t0;

	std::cout << "Dar N: \n";
	std::cin >> N;

	std::cout << "Dar f(t): \n";
	std::string lin;

	while (!std::cin.eof() && std::cin.peek()!=';')
		lin+= char(std::cin.get());
	lin+= std::cin.get();
	Parser e(lin, NULL, NULL);
	Node* f= e.Tree();

	int k=0;
	double fac= 1.0;

	std::cout << "f(t)= ";
	while (k<=N) {
		std::cout << std::showpos << f->eval(t0);
		if (k!=0)
			std::cout << "(t"  << t0 << ")^" << std::noshowpos << k;
		else
			std::cout << std::noshowpos;
		std::cout << "/" << fac;
		Node* fp= f->deriv();
		delete f;
		f= fp->simp();
		delete fp;
		fac*= ++k;
	}
	std::cout << std::endl;
	delete f;

	return EXIT_SUCCESS;
}
