Создание клиентского кода Form1.cs




ЗАДАНИЕ 1

Решение уравнений

Цель задания

1. Получение практических навыков работы с Windows-проектом.

2. Знакомство с алгоритмом решения уравнений методом перебора.

 

Постановка задачи

Создать конструктор (Windows-форму) Form1.cs и клиентский код (программу) определения всех корней уравнения в интервале методом последовательного перебора точек с шагом . Проверить полученное решение подстановкой полученных корней в левую часть уравнения. При отсутствии корней программа должна печатать соответствующие комментарии.

 

Варианты уравнений

 

№ вар. Уравнение Интервал
 
 
 
 
 
 
 
 
 
 
 
 

 

Содержание отчета

1. Постановка задачи для конкретного варианта.

2. Текст клиентского кода программы

3. Графический дизайн формы.

 

 

Создание конструктора Form1.cs

1. На рис. 1. показан начальный вид конструктора Form1.cs, возникающего при создании Windows-проекта.

 

Рис. 1.

 

2. Из меню “Вид” открыть “Панель элементов” и “Окно свойств”. Увеличить форму Form1 (рис. 2).

 

Рис. 2.

 

3. Поместить на форму элементы label1, label2, label3, label4, label5, label6, textBox1, textBox2, textBox3, listBox1, listBox2, button1, button2, button3, pictureBox1 (рис. 3). Номера элементов при переносе их на форму появляются автоматически. Элементы textBox1, textBox2, textBox3 помещены справа от соответствующих меток label1, label2, label3. Элементы listBox1, listBox2 показаны ниже соответствующих меток label4, label5. Желтым цветом показан элемент pictureBox1.

Предупреждение: в процессе создания конструктора Form1.cs не щелкать дважды на перенесенных элементах.

 

Рис. 3.

 

4. С помощью строки Text окна свойств дать имена всем элементам (рис. 4). Метка label6 должна содержать заданное по варианту уравнение. Дать форме имя: Решение уравнений.

 

 

 

Создание клиентского кода Form1.cs

1. Щелкнуть правой кнопкой мыши на конструкторе Form1.cs, выбрать пункт “Перейти к коду”.

2. Добавить в раздел using строку:

using System.Drawing.Drawing2D;

3. Вставить в код описания:

double a, b, h;

double x, xh, xi, yi;

int i = 0, n;

double[] X, Y;

Bitmap myBmp;

double Mx, My, MaxY, MaxX;

4. Щелкнуть дважды на кнопке “Решение” конструктора Form1.cs, на место курсора вставить в код ввод значений a, b, h из текстовых полей textBox1, textBox2, textBox3 и блок определения корней уравнения:

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("корней нет");

}

5. Щелкнуть дважды на кнопке “График”, на место курсора вставить в код блок построения графика левой части уравнения:

// Построение графика

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;

6. Щелкнуть дважды на кнопке “Выход”, на место курсора вставить Close();

7. Вставить в код функцию вычисления левой части уравнения согласно заданному варианту:

// Вычисление левой части уравнения

double f(double x)

{

return 3 * Math.Sin(Math.Sqrt(x)) + 0.35 * x - 3.8;

}



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-06-30 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: