ЗАДАНИЕ 1
Решение уравнений
Вариант 20
Выполнил студент гр. СТ-15
Кузнецов А.И.
Постановка задачи
Создать конструктор (Windows-форму) Form1.cs и клиентский код (программу) определения всех корней уравнения в интервале методом последовательного перебора точек с шагом . Проверить полученное решение подстановкой полученных корней в левую часть уравнения. При отсутствии корней программа должна печатать соответствующие комментарии.
Уравнение:
.
.
Текст клиентского кода программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
namespace WindowsFormsApplication_Уравнение
{
public partial class Form1: Form
{
double a, b, h;
double x, xh, xi, yi;
int i = 0, n;
double[] X, Y;
Bitmap myBmp;
double Mx, My, MaxY, MaxX;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
a = Convert.ToDouble(textBox1.Text);
b = Convert.ToDouble(textBox2.Text);
h = Convert.ToDouble(textBox3.Text);
x = a;
while (x < b)
{
xh = x + h;
if (f(x) * f(xh) <= 0)
{
i++;
xi = x + h / 2;
yi = f(xi);
listBox1.Items.Add(xi);
listBox2.Items.Add(yi);
}
x += h;
}
if (i == 0)
{
listBox1.Items.Add("В интервале x=[a; b]");
listBox1.Items.Add("корней нет");
}
}
private void button2_Click(object sender, EventArgs e)
{
// Построение графика
int[] yint, xint;
n = Convert.ToInt32(Math.Abs((b - a) / h));
Y = new double[n + 1];
X = new double[n + 1];
for (i = 0; i < n + 1; i++)
{
X[i] = a + i * h;
Y[i] = f(X[i]);
}
if (X == null || Y == null) return;
MaxY = 0;
MaxX = 0;
myBmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
Graphics gr1 = Graphics.FromImage(myBmp);
Pen P1 = new Pen(Color.Red, 2);
gr1.DrawRectangle(P1, 1, 1, pictureBox1.Width - 2, pictureBox1.Height - 2);
for (int i = 0; i < n + 1; i++)
{
if (System.Math.Abs(Y[i]) > MaxY)
{
MaxY = System.Math.Abs(Y[i]);
}
if (System.Math.Abs(X[i]) > MaxX)
{
MaxX = System.Math.Abs(X[i]);
}
}
My = (pictureBox1.Height) / 2.2 / MaxY;
Mx = (pictureBox1.Width) / 2.2 / MaxX;
yint = new int[n + 1];
xint = new int[n + 1];
for (int i = 0; i < n + 1; i++)
{
yint[i] = (pictureBox1.Height) / 2 - Convert.ToInt32(Y[i] * My);
xint[i] = pictureBox1.Width / 2 + Convert.ToInt32(X[i] * Mx);
}
Pen P2 = new Pen(Color.Green, 6);
for (int i = 0; i < n; i++)
{
gr1.DrawLine(P2, xint[i], yint[i], xint[i + 1], yint[i + 1]);
}
Pen P4 = new Pen(Color.Black, 3);
P4.SetLineCap(LineCap.Flat, LineCap.ArrowAnchor, DashCap.Flat);
Brush B2 = new SolidBrush(Color.Black);
System.Drawing.Font E = new Font("time new roman", 14);
gr1.DrawString("y", E, B2, pictureBox1.Width / 2 - 20, 0);
gr1.DrawString("x", E, B2, pictureBox1.Width - 20, pictureBox1.Height / 2);
gr1.DrawLine(P4, 10, (pictureBox1.Height) / 2, pictureBox1.Width - 10, (pictureBox1.Height) / 2);
gr1.DrawLine(P4, pictureBox1.Width / 2, (pictureBox1.Height) - 10, pictureBox1.Width / 2, 10);
pictureBox1.Image = myBmp;
}
private void button3_Click(object sender, EventArgs e)
{
Close();
}
// Вычисление левой части уравнения
double f(double x)
{
return 3 * Math.Sin(Math.Sqrt(x)) + 0.35 * x - 3.8;
}
}
}
Графический дизайн формы