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


using System;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;

namespace ChartApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            
            // Выставляем начальные значения в текстовые поля по умолчанию при запуске
            textBoxXmin.Text = "-5";
            textBoxXmax.Text = "5";
            textBoxStep.Text = "0,5";
        }

        // ==========================================
        // ЗАДАНИЕ 1: Графики функций sin(x) и cos(x)
        // ==========================================
        private void buttonTask1_Click(object sender, EventArgs e)
        {
            // 1. Считываем значения с формы
            if (!double.TryParse(textBoxXmin.Text, out double Xmin) ||
                !double.TryParse(textBoxXmax.Text, out double Xmax) ||
                !double.TryParse(textBoxStep.Text, out double Step))
            {
                MessageBox.Show("Пожалуйста, введите корректные числовые значения.");
                return;
            }

            // На случай, если пользователь перепутал границы местами
            if (Xmin > Xmax) { double temp = Xmin; Xmin = Xmax; Xmax = temp; }
            if (Step <= 0) Step = 0.5;

            // 2. Рассчитываем количество точек
            int count = (int)Math.Ceiling((Xmax - Xmin) / Step) + 1;

            // Массивы для данных
            double[] x = new double[count];
            double[] y1 = new double[count];
            double[] y2 = new double[count];

            // 3. Вычисляем значения в цикле
            for (int i = 0; i < count; i++)
            {
                x[i] = Xmin + Step * i;
                if (x[i] > Xmax) x[i] = Xmax; // Защита от перелета границы из-за точности double

                y1[i] = Math.Sin(x[i]);
                y2[i] = Math.Cos(x[i]);
            }

            // 4. Настраиваем оси и шаг сетки
            chart1.ChartAreas[0].AxisX.Minimum = Xmin;
            chart1.ChartAreas[0].AxisX.Maximum = Xmax;
            chart1.ChartAreas[0].AxisX.MajorGrid.Interval = Step;

            // 5. Очищаем старые графики и задаем легенду
            chart1.Series[0].Points.Clear();
            chart1.Series[1].Points.Clear();
            
            chart1.Series[0].LegendText = "sin(x)";
            chart1.Series[1].LegendText = "cos(x)";

            // Добавляем вычисленные точки на график
            chart1.Series[0].Points.DataBindXY(x, y1);
            chart1.Series[1].Points.DataBindXY(x, y2);
        }

        // ==========================================
        // ЗАДАНИЕ 2: Вариант №9
        // ==========================================
        // Функция 1: y = 0.0025 * b * x^3 + sqrt(x) + e^(0.82)
        // Функция 2 (Произвольная): y = b * sin(x) (придумана самостоятельно)
        // Параметры из методички: X0 = -1; Xk = 4; dx = 0.5; b = 2.3;
        // Примечание: так как в первой функции есть sqrt(x), значения X < 0 
        // вызовут ошибку (NaN). Программа автоматически обработает этот момент.
        // ==========================================
        private void buttonTask2_Click(object sender, EventArgs e)
        {
            // Фиксированные параметры для Варианта 9 из таблицы
            double Xmin = -1.0;
            double Xmax = 4.0;
            double Step = 0.5;
            double b = 2.3;

            // Записываем эти значения в TextBox на форме для наглядности
            textBoxXmin.Text = Xmin.ToString();
            textBoxXmax.Text = Xmax.ToString();
            textBoxStep.Text = Step.ToString();

            int count = (int)Math.Ceiling((Xmax - Xmin) / Step) + 1;

            // Будем использовать списки (List), так как при X < 0 корень не вычислить, 
            // и количество реальных точек для первой функции может быть меньше.
            var xList1 = new System.Collections.Generic.List<double>();
            var y1List = new System.Collections.Generic.List<double>();

            var xList2 = new System.Collections.Generic.List<double>();
            var y2List = new System.Collections.Generic.List<double>();

            for (int i = 0; i < count; i++)
            {
                double currentX = Xmin + Step * i;
                if (currentX > Xmax) currentX = Xmax;

                // Расчет первой функции (Вариант 9)
                // Проверяем ОДЗ для квадратного корня
                if (currentX >= 0)
                {
                    double y1 = 0.0025 * b * Math.Pow(currentX, 3) + Math.Sqrt(currentX) + Math.Exp(0.82);
                    xList1.Add(currentX);
                    y1List.Add(y1);
                }

                // Расчет второй (произвольной) функции: y = b * sin(x)
                // Для нее ограничений по ОДЗ нет, берем весь интервал от -1 до 4
                double y2 = b * Math.Sin(currentX);
                xList2.Add(currentX);
                y2List.Add(y2);
            }

            // Настройка отображения осей
            chart1.ChartAreas[0].AxisX.Minimum = Xmin;
            chart1.ChartAreas[0].AxisX.Maximum = Xmax;
            chart1.ChartAreas[0].AxisX.MajorGrid.Interval = Step;

            // Очистка и подписи легенды
            chart1.Series[0].Points.Clear();
            chart1.Series[1].Points.Clear();

            chart1.Series[0].LegendText = "Вариант 9 (y1)";
            chart1.Series[1].LegendText = "Произвольная b*sin(x) (y2)";

            // Вывод точек на экран
            chart1.Series[0].Points.DataBindXY(xList1, y1List);
            chart1.Series[1].Points.DataBindXY(xList2, y2List);
        }
    }
}