using static System.Math;
namespace KHTI.Labs.Furieer
public static void Main(string[] args)
Console.Write("Введите точку в интервале от [-Pi, Pi]: ");
var x = double.Parse(Console.ReadLine());
Console.WriteLine("Указанная точка находиться за пределами интвервала");
Console.WriteLine($"f({x}) = {GetExact(x):f5}\t(точное)");
Console.WriteLine($"f({x}) = {GetByFourier(x, 100):f5}\t(при n = 100)");
Console.WriteLine($"f({x}) = {GetByFourier(x, 1_000):f5}\t(при n = 1 000)");
Console.WriteLine($"f({x}) = {GetByFourier(x, 10_000):f5}\t(при n = 10 000)");
Console.WriteLine($"f({x}) = {GetByFourier(x, 100_000):f5}\t(при n = 100 000)");
Console.WriteLine($"f({x}) = {GetByFourier(x, 1_000_000):f5}\t(при n = 1 000 000)");
private static double GetByFourier(double x, int n)
for (var i = 1; i <= n; i++)
result += GetA(n) * Cos(n * x) + GetB(n) * Sin(n * x);
private static double GetA(int n) => ((n - 4 * PI * n) * Sin(PI * n) - 4 * Cos(PI * n) + 4) / (PI * Pow(n, 2));
private static double GetB(int n) => (n - 4 * Sin(PI * n) + (4 * PI - 1) * n * Cos(PI * n)) / (PI * Pow(n, 2));
private static double GetExact(double x) => x < 0 ? 0 : 1 - 4 * x;