Загрузка данных


using System;
using System.Collections.Generic;

namespace FunctionPlot
{
    class Program
    {
        static void Main(string[] args)
        {
            // Параметры из задания (можно менять)
            double a = 0;
            double b = 4;
            double h = 0.02;

            // Функция
            Func<double, double> F = x => x * x + 1;

            Console.WriteLine($"Таблица значений F(x)=x^2+1 на [{a}, {b}] с шагом h={h}\n");
            Console.WriteLine("   x      |   F(x)   ");
            Console.WriteLine("----------|----------");

            double x = a;
            while (x <= b + 1e-10)
            {
                Console.WriteLine($"{x,8:F3} | {F(x),8:F3}");
                x += h;
            }

            // Вызов простого ASCII-графика
            DrawAsciiGraph(F, a, b, 50); // 50 - ширина графика в символах
            Console.ReadKey();
        }

        static void DrawAsciiGraph(Func<double, double> func, double a, double b, int width)
        {
            int height = 20;
            List<double> values = new List<double>();

            double minY = double.MaxValue;
            double maxY = double.MinValue;

            for (double x = a; x <= b; x += (b - a) / width)
            {
                double y = func(x);
                values.Add(y);
                if (y < minY) minY = y;
                if (y > maxY) maxY = y;
            }

            if (Math.Abs(maxY - minY) < 1e-9)
            {
                minY -= 0.5;
                maxY += 0.5;
            }

            char[,] grid = new char[height, width];
            for (int i = 0; i < height; i++)
                for (int j = 0; j < width; j++)
                    grid[i, j] = ' ';

            // Рисуем оси
            int zeroRow = (int)((0 - minY) / (maxY - minY) * (height - 1));
            zeroRow = Math.Max(0, Math.Min(height - 1, zeroRow));
            for (int j = 0; j < width; j++)
                grid[zeroRow, j] = '-';

            for (int i = 0; i < height; i++)
                grid[i, 0] = '|';

            grid[zeroRow, 0] = '+';

            // Рисуем график
            for (int j = 0; j < width; j++)
            {
                double y = values[j];
                int row = (int)((y - minY) / (maxY - minY) * (height - 1));
                row = Math.Max(0, Math.Min(height - 1, row));
                if (grid[row, j] == ' ')
                    grid[row, j] = '*';
            }

            // Вывод
            Console.WriteLine("\nASCII-график (ось X горизонтальна, ось Y вертикальна):\n");
            for (int i = height - 1; i >= 0; i--)
            {
                for (int j = 0; j < width; j++)
                    Console.Write(grid[i, j]);
                Console.WriteLine();
            }

            Console.WriteLine($"\nДиапазон Y: [{minY:F3}, {maxY:F3}]");
        }
    }
}