Загрузка данных
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);
}
}
}