#include <iostream>
#include <cmath>

using namespace std;

double factorial(double x){ 
	if (x == 1){ // если x равен 1, то
		return 1; // вернуть 1
	}
	else { // иначе
		return x * factorial(x - 1); // вернуть x умноженный на факториал (x - 1)
	}
}

int main(){
	double e; // заданная точность
	double x; // искомое значение
	double s = 0, y = 1; // s - хранит предыдущее значение функции, y - текущее
	double n = 1; // переменная вычисления функции
	double PI = 3.141592653589; // число пи для перевода x из градусов в радианы
	double fact; // получает значение функции factorial()

	cout << "Input x: ";
	cin >> x; // ввод x

	cout << "Input epsilon: ";
	cin >> e; //ввод точности

	x = (PI/180) * x;  //перевод x в радианы для правильного вычисления

	while (abs(s - y) > e){ // Разница между предыдущим и нынешним значением заданной функции для правильного вычисления точности.
		s = y; // присваиваем s значение предыдущего значения y
		fact = factorial(2 * n);
		y = y + ((pow(-1, n) * pow(x, 2*n)) / fact); // вычисление функции
		n++; // увеличение переменной функции
	}

	// вывод проверки и результата работы программы соответственно
	cout << "COS fucntion: " << cos(x) << endl;
	cout << "Result:       " << y << endl;
	
	return 0;
}