243

Создание Windows приложения с использованием Windows Forms

Курсовая

Информатика, кибернетика и программирование

Разработка алгоритма и программы на языке С# вычисления площади, ограниченной двумя кривыми, заданными вариантом индивидуального задания для интервала, определяемого пользователем в диалоговом режиме.

Русский

2012-11-14

401 KB

173 чел.

Министерство образования и науки РФ

ФГБОУ ВПО «Ижевский Государственный Технический Университет»

Кафедра: «Мехатронные системы»

Пояснительная записка к курсовому проекту

по дисциплине «Информатика»

на тему: «Создание Windows приложения

с использованием Windows Forms»

Выполнил:

студент группы 3-35-1

Чуйков Р.И.

Проверил:

преподаватель

Ананин Н.С.

Рецензент:

Лекомцев П.В.

Ижевск 2012

Содержание

Техническое задание 3

Введение 4

1 Разработка алгоритма 5

1.1 Разработка математического алгоритма 5

1.2 Разработка схем алгоритма 7

2 Разработка программы 11

3 Руководство оператора 18

4 Руководство программиста 19

5 Вычислительный эксперимент 20

Заключение 26

Список литературы 27


Техническое задание

Разработать алгоритм и программу на языке С# вычисления площади, ограниченной двумя кривыми, заданными вариантом индивидуального задания для интервала, определяемого пользователем в диалоговом режиме. Предусмотреть проверку ввода данных на корректность и графическое отображение заданных функций. Предусмотреть в программе вызов справки.

Вариант задания представлен в таблице 1.

Таблица 1.  Вариант задания

Функция 1: y = a*tg(b*x+c)

Функция 2: y = a*cos(b*x+c)

Метод интегрирования: метод Гаусса


                                                Введение

Программа, предназначенная для расчёта площади фигуры, ограниченной графиками двух исходных функций y = a*tg(b*x+c) и y = a*cos(b*x+c)и пределами интегрирования, вводимыми пользователем в диалоговом режиме, разработана в среде программирования «Microsoft Visual Studio 2010 Ultimate», на языке программирования C#.

Язык C# является наиболее известной новинкой в области создания языков программирования. Ввиду очень удобного объектно-ориентированного дизайна, C# является хорошим выбором для конструирования различных компонентов – от высокоуровневой
бизнес логики до системных приложений, использующих низкоуровневый код. Также
следует отметить, что C# является и Web ориентированным - используя встроенные конструкции языка компоненты, могут быть превращены в Web сервисы, к которым можно будет обращаться из Internet посредством любого языка на любой операционной системе. 

В C# унифицирована система типов, можно рассматривать каждый тип как объект. Несмотря на то, используется класс, структура, массив или встроенный тип, можно обращаться к нему как к объекту. Объекты собраны в пространства имен (namespaces),которые позволяют программно обращаться к чему-либо. Это значит, что вместо списка включаемых файлов заголовков в своей программе необходимо написать какие пространства имен, для доступа к объектам и классам внутри них, будут использоваться. В C# выражение using позволяет не писать каждый раз название пространства имен, когда необходимо использовать класс из него. Например, пространство имен System содержит несколько классов, в том числе и Console.


1 Разработка алгоритма

Алгоритм программы состоит из двух частей:

  1.  Математический алгоритм – вычисление интеграла;
  2.  Общий алгоритм работы программы.

  1.  Разработка математического алгоритма

Численное интегрирование  — вычисление значения определённого интеграла (как правило, приближённое). Под численным интегрированием понимают набор численных методов отыскания значения определённого интеграла.

Численное интегрирование применяется, когда:

  1.  Сама подынтегральная функция не задана аналитически. Например, она представлена в виде таблицы (массива) значений в узлах некоторой расчётной сетки.
  2.  Аналитическое представление подынтегральной функции известно, но её первообразная не выражается через аналитические функции.

В этих двух случаях невозможно вычисление интеграла по формуле Ньютона-Лейбница. Также, возможна ситуация, когда вид первообразной настолько сложен, что быстрее вычислить значение интеграла численным методом.

Метод Гаусса — метод численного интегрирования, позволяющий повысить алгебраический порядок точности методов на основе интерполяционных формул путём специального выбора узлов интегрирования без увеличения числа используемых значений подынтегральной функции. Метод Гаусса позволяет достичь максимальной для данного числа узлов интегрирования алгебраической точности.

Формула нахождения определенного интеграла методом Гаусса

Например, для двух узлов можно получить метод 3-го порядка точности тогда как для равноотстоящих узлов метода выше 2-го порядка получить невозможно. В общем случае, используя n точек, можно получить метод с порядком точности 2n − 1. Значения узлов метода Гаусса по n точкам являются корнями полинома Лежандра степени n и приводятся в справочниках специальных функций вместе с соответствующими весами. Наиболее известен метод Гаусса по 5 точкам.

Алгебраический порядок точности численного метода (порядок точности численного метода, степень точности численного метода, порядок точности, степень точности) — наибольшая степень полинома, для которой численный метод даёт точное решение задачи.

Другое определение: говорят, что численный метод имеет порядок точности , если его остаток  равен нулю для любого полинома степени , но не равен нулю для полинома степени .

Очевидно, что метод левых (или правых) прямоугольников имеет порядок точности 0, метод Рунге — Кутты (решения дифференциалных уравнений) четвёртого порядка — 4. Широко известный метод Гаусса по пяти точкам имеет порядок точности 9. Менее очевидно, но легко показывается, что порядок точности метода трапеций — 1, а метода Симпсона — 4.

Наивысшая возможная алгебраическая степень точности для методов численного интегрирования достигается для метода Гаусса.

Для метода Рунге — Кутты решения ОДУ порядок точности имеет другое значение — максимальное число первых членов ряда Тейлора полученного решения, совпадающих с действительным решением ОДУ


1.2 Разработка схем алгоритма

Схема алгоритма программы представлена на рисунке 1.

Рисунок 1 – Схема алгоритма программы, считающей площадь, ограниченную двумя исходными функциями и границами интегрирования.

Рисунок 1 – Схема алгоритма программы, считающей площадь, ограниченную двумя исходными функциями и границами интегрирования (Продолжение )  


Схема алгоритма метода класса, выводящего окно справки, представлена на рисунке 2.

 

Рисунок 2 – Схема алгоритма программы, выводящей окно справки.


Схема алгоритма процедуры, считающей площадь, ограниченную двумя исходными функциями и границами интегрирования, представлена на рисунке 3.

Рисунок 3 – Схема алгоритма процедуры, считающей площадь, ограниченную двумя исходными функциями и пределами интегрирования


2 Разработка программы

Программа, предназначенная для расчёта площади, ограниченной графиками двух исходных функций y1= a*cos(b*x+c) и y2= a*tg(b*x+c) и пределами интегрирования, вводимыми пользователем в диалоговом режиме, разработана в среде программирования «Microsoft Visual Studio 2010 Ultimate», на языке программирования C#.

Программа содержит несколько классов: классы, отображающие окна программы, включающий в себя методы вычисления площадей, и класс для построения графиков.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace WindowsFormsApplication9

{

   class functions

   {

       /// <summary>

       /// коэффициенты в функциях

       /// </summary>

       public double a;

       public double b;

       public double c;

       /// <summary>

       /// пределы интегрирования

       /// </summary>

       public double x1;

       public double x2;

       public functions(double a, double b, double c, double x1, double x2)

       {

           this.a = a;

           this.b = b;

           this.c = c;

           this.x1 = x1;

           this.x2 = x2;

       }

       /// <summary>

       /// Метод, вычисляющий значение функции y=a*cos(b*x+c).

       /// </summary>

       /// <param name="x"></param>

       /// <returns>значение функции y=a*cos(b*x+c)</returns>

       public double f1(double x)

       {

           double y2 = Math.Pow(a, b * x + c);

           return y2;

       }

       /// <summary>

       /// Метод, вычисляющий значение функции y=a*tg(b*x+c).

       /// </summary>

       /// <param name="x"></param>

       /// <returns>значение функции y=a*tg(b*x+c)</returns>

      

Рисунок 4 – Текст класса, включающего методы вычисления функций и площадей

       public double f2(double x)

       {

           double y1 = a * Math.Cos(b * x + c);

           return y1;

       }

       /// <summary>

       /// Подынтегральная функция

       /// </summary>

       /// <param name="x"></param>

       /// <returns>Модуль разности функций</returns>

       private double F(double x)

       {

           double m = Math.Abs(f1(x) - f2(x));

           return m;

       }

       /// <summary>

       /// Нахождение площади методом Гаусса

       /// </summary>

       /// <returns>Площадь фигуры образованной двумя функциями </returns>

       public double Gauss()

       {

           double I;

           double c = 0.5 * (x2 - x1);

           double d = 0.5 * (x2 + x1);

           double e = 0.5 * (x2 - x1)/Math.Sqrt(3);

           I = c * (F(d - e) + F(d + e));

           return I;

       }

   }

}

Рисунок 4– Текст класса, включающего методы вычисления функций и площадей (Продолжение)


Текст класса, включающего методы построения графиков функций, представлен на рисунке 5.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Drawing;

namespace WindowsFormsApplication9

{

   class Grafik : Control

   {

       /// <summary>

       /// Масштаб и инициализация переменных

       /// </summary>

       public double maxX = 7;

       public double maxY = 7;

       double a, b, c;

       int x1, x2;

       

       Nullable<Point> lastPoint;

       public List<List<Point>> pointList1 = new List<List<Point>>();

       protected override void OnPaint(PaintEventArgs e)

       {

           this.SetStyle(ControlStyles.ResizeRedraw, true);

           Graphics g = e.Graphics;

           Pen p = new Pen(Color.Black, 1);

           ///Ocи x и y

           g.DrawLine(p, this.Size.Width / 2, 0, this.Size.Width / 2, this.Size.Height);

           g.DrawLine(p, 0, this.Size.Height / 2, this.Size.Width, this.Size.Height / 2);

           /// Стрелки на осях

           g.DrawLine(p, this.Size.Width / 2, 0, this.Size.Width / 2 - 5, 10);

           g.DrawLine(p, this.Size.Width / 2, 0, this.Size.Width / 2 + 5, 10);

           g.DrawLine(p, this.Size.Width, this.Size.Height / 2, this.Size.Width - 10, this.Size.Height / 2 - 5);

           g.DrawLine(p, this.Size.Width, this.Size.Height / 2, this.Size.Width - 10, this.Size.Height / 2 + 5);

           ///Деления

           for (int i = 0; i < this.Size.Width - 10; i = i + 10)

           {

               g.DrawLine(p, i, this.Size.Height / 2 - 1, i, this.Size.Height / 2 + 1);

           }

           for (int i = 0; i < this.Size.Height; i = i + 10)

           {

               g.DrawLine(p, this.Size.Width / 2 - 1, i, this.Size.Width / 2 + 1, i);

           }

Рисунок 5 – Текст класса, включающего методы построения графиков функций


           ///Подпись x, y, 0

           Font f = new System.Drawing.Font("Comic Sans MS", 10);

           g.DrawString("0", f, Brushes.Black, this.Size.Width / 2 - 15, this.Size.Height / 2 + 3);

           g.DrawString("y", f, Brushes.Black, this.Size.Width / 2 - 15, 3);

           g.DrawString("x", f, Brushes.Black, this.Size.Width - 15, this.Size.Height / 2);

           GRAF(a, b, c, x1, x2);

       }

       ///Преобразование координат

       public Point koordinat(double koordX, double koordY)

       {

           Point p = new Point();

           p.X = (int)(koordX * this.Size.Width / (2 * maxX)) + this.Size.Width / 2;

           p.Y = -(int)(koordY * this.Size.Height / (2 * maxY)) + this.Size.Height / 2;

           return p;

       }

       ///Обнуление

       public void SetNullLastPoint()

       {

           lastPoint = null;

       }

       ///Рисование графика

       public void AddTochka(double xTochki, double yTochki, Color col)

       {            

           

               Pen p = new Pen(col, 2);

               Graphics g = this.CreateGraphics();

               Point point = koordinat(xTochki, yTochki);

               {

                   if (lastPoint != null)

                   {

                       g.DrawLine(p, lastPoint.Value, point);

                   }

                   lastPoint = koordinat(xTochki, yTochki);

               }           

       }

       ///Рисование первого предела

       public void AddPredel_1(int x1, Color col)

       {

           Pen p = new Pen(Color.Black, 1);

           Graphics g = this.CreateGraphics();

           g.DrawLine(p, this.Size.Width / 2 + x1, 0, this.Size.Width / 2 + x1, 500);

       }

       ///Рисование второго предела

       public void AddPredel_2(int x2, Color col)

       {

           Pen p = new Pen(Color.Black, 1); Graphics g = this.CreateGraphics(); g.DrawLine(p, this.Size.Width / 2 + x2, 0, this.Size.Width / 2 + x2, 500);

       }

Рисунок 5– Текст класса, включающего методы построения графиков функций (Продолжение)


      ///Метод перерисовки графиков

       public void GRAF(double a, double b, double c, int x1, int x2)

       {

           if (a != 0 && b != 0 && c != 0 && x1 != 0 && x2 != 0)

           {

               this.a = a;

               this.b = b;

               this.c = c;

               this.x1 = x1;

               this.x2 = x2;

               functions fun1 = new functions(a, b, c, x1, x2);

               ///Рисование графика функции y = a*tg(b*x+c)

               for (double x = -maxX; x < maxX; x = x + 0.001)

               {

                   double y = fun1.f1(x);

                   AddTochka(x, y, Color.LightCoral);

               }

               SetNullLastPoint();

               ///Рисование графика функции y = a*cos(b*x+c)

               functions fun2 = new functions(a, b, c, x1, x2);

               for (double x = -maxX; x < maxX; x = x + 0.001)

               {

                   double y = fun2.f2(x);

                   AddTochka(x, y, Color.BlueViolet);

               }

               SetNullLastPoint();

               ///Пределы интегрирования

               AddPredel_1(x1, Color.Black);

               AddPredel_2(x2, Color.Black);

           }

       }

   }

}

Рисунок 5– Текст класса, включающего методы построения графиков функций (Продолжение)


Текст основного класса, отображающего главное окно программы, представлен на рисунке 6.

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;

namespace WindowsFormsApplication9

{

   public partial class Form1 : Form

   {

       public Form1()

       {

           InitializeComponent();

       }

       

       /// <summary>

       /// Вывод результата интегрирования, после нажатия кнопки "Результат"

       /// </summary>

       /// <param name="sender"></param>

       /// <param name="e"></param>

       private void button1_Click(object sender, EventArgs e)

       {

           ///Проверка на корректность введенных данных

           try

           {

               ///Инициализация переменных

               double a = Convert.ToDouble(pole_a.Text);

               double b = Convert.ToDouble(pole_b.Text);

               double c = Convert.ToDouble(pole_c.Text);

               int x1 = Convert.ToInt32(pole_x1.Text);

               int x2 = Convert.ToInt32(pole_x2.Text);

               ///Нахождение площади 

               functions S = new functions(a, b, c, x1, x2);

               double I = S.Gauss();

               string z = Convert.ToString(I);

               label4.Text = "= " + z;

           }

           catch

           {

               Oshibka o = new Oshibka();

               o.Show();

           }

       }

       /// <summary>

       /// Вызов справки

       /// </summary>

       /// <param name="sender"></param>

       /// <param name="e"></param>

       private void button2_Click(object sender, EventArgs e)

       {

           Spravka s = new Spravka();

           s.Show();

       }

   Рисунок 6 - Текст класса, отображающего главное окно программы

       /// <summary>

       /// Построение графиков, после нажатия кнопки "Графики"

       /// </summary>

       /// <param name="sender"></param>

       /// <param name="e"></param>

       private void button3_Click(object sender, EventArgs e)

       {         

           this.grafik.Refresh();

           this.grafik.Invalidate();

          

           try

           {

               double a = Convert.ToDouble(pole_a.Text);

               double b = Convert.ToDouble(pole_b.Text);

               double c = Convert.ToDouble(pole_c.Text);

               int x1 = Convert.ToInt32(pole_x1.Text);

               int x2 = Convert.ToInt32(pole_x2.Text);

               this.grafik.GRAF(a, b, c, x1, x2);               

           }

           catch

           {

               Oshibka o = new Oshibka();

               o.Show();

           }

       }

       /// <summary>

       /// Выход из приложения

       /// </summary>

       /// <param name="sender"></param>

       /// <param name="e"></param>

       private void button4_Click(object sender, EventArgs e)

       {

           DialogResult res = MessageBox.Show("закрыть проект?", "Выход", MessageBoxButtons.YesNo);

           if (res == DialogResult.Yes)

           {

               MessageBox.Show("Выход");

               this.Close();

           }

       }    

   }

}

Рисунок 6– Текст класса, отображающего главное окно программы (Продолжение)


3 Руководство оператора

Назначение программы: программа предназначена для расчёта площади фигуры, ограниченной графиками двух исходных функций y1 = a*tg(bx+c) и y2 = a*cos(b*x+c) и пределами интегрирования, вводимыми пользователем в диалоговом режиме, а также для отображения графиков этих функций.

Входные параметры (задаваемые пользователем в диалоговом режиме):

а, b, cкоэффициенты исходных функций y1 = a*tg(bx+c) и y2 = a*cos(b*x+c);

x1 – начало интервала интегрирования;

x2 – конец интервала интегрирования.

Для корректной работы программы все параметры должны иметь численные значения. Значения коэффициентов могут быть дробными, а значения начала и конца интегрирования целочисленными.  Дробные числа необходимо вводить через запятую.

В случае неверного заполнения полей ввода, либо заполнения не всех предусмотренных полей, программа сообщит оператору о возникновении ошибки (вывод окна «ОШИБКА»).

            Описание работы кнопок:

           «Графики» - При нажатии кнопки «Графики» происходит построение графиков функций у1 = a*tg(bx+c) и y2 = a*cos(b*x+c) и пределами интегрирования х1 и х2.

«Результат» - При нажатии кнопки «Результат» происходит расчёт площади, ограниченной графиками функций y1 = a*tg(bx+c) и y2 = a*cos(b*x+c) (расчёт площади производится методом Гаусса), выводится числовое значение вычисленной площади в поле «Вывод площади».

«Справка» -  При нажатии кнопки «Справка», происходит  вызов окна справки.

«Выход» - При нажатии кнопки «Выход», происходит закрытие приложения, ведущее за собой выбор «Да» или «Нет».

          


4 Руководство программиста

Назначение и условия применения программы

Программа предназначена для расчёта площади фигуры, ограниченной графиками двух исходных функций y1 = a*tg(bx+c) и y2 = a*cos(b*x+c)   и пределами интегрирования. Программа работает в диалоговом режиме. В программе предусмотрена проверка ввода данных на корректность и графическое отображение заданных функций.

Обращение к программе

Program.cs – главная точка входа для приложения;

Form1.cs – основной класс, используемый для отображения главного окна приложения;

Spravochka.cs– класс, используемый для отображения окна справки;

Oshibochka.cs– класс, используемый для отображения сообщения об ошибке;

functions.cs–класс, включающий в себя методы расчетов значений функций и площадей фигур, образуемых графиками заданных функций;

Grafik.cs – класс, включающий в себя методы построения координатной плоскости и графиков функций;

Входные и выходные данные

Входные и выходные параметры всех методов имеют тип double.

Список основных методов, используемых в программе:

  •  public double f1(double a, double b, double c, double x) и public double f2(double a, double b, double c, double x) – методы, вычисляющие значения функций;
  •  private double F(double x, double m)  – методы, вычисляющий модуль разности функций;
  •  public void AddTochka (double xTochki, double yTochki, Color col) – метод, рисующий графики.


5 Вычислительный эксперимент

Окно программы и окно справки представлены на рисунках 7,8.

Рисунок 7 – Окно программы

Рисунок 8 – Окно справки

                                                   Вычислительный эксперимент №1

В первом вычислительном эксперименте предусмотрим ввод положительных целых чисел.

Рисунок 9 – Вычислительный эксперимент №1


Вычислительный эксперимент №2

Во втором вычислительном эксперименте предусмотрим ввод отрицательных чисел.

Рисунок 10 – Вычислительный эксперимент №2


Вычислительный эксперимент №3

В третьем вычислительном эксперименте предусмотрим ввод некорректных данных (буквы).

Рисунок 11 – Вычислительный эксперимент №3


Вычислительный эксперимент №4

В четвертом вычислительном эксперименте предусмотрим заполнение не всех полей для ввода.

Рисунок 12 – Вычислительный эксперимент №4


Заключение

В процессе выполнения представленной курсовой работы были приобретены навыки по созданию Windows-приложений в среде программирования «Microsoft Visual Studio 2010 Ultimate», на языке программирования C#.

Разработанный программный продукт работает исправно и выполняет свои функции, что подтверждается результатами вычислительного эксперимента.


Список литературы

  1.  Агуров П.А. С#. Разработка компонентов в MS Visual Studio 2008/2010.СПб.: БХВ –Петербург, 2008. 480с.

  1.  Марченко А.Л. C#. Введение в программирование. Учебное пособие. М.: МГУ им. М.В. Ломоносова ,2005. 317с.

  1.  Биллиг В.А. Основы программирования на C#//Учебное пособие. 2005. URL:http://www.intuit.ru/department/pl/csharp (дата обращения 16.01.12)


 

А также другие работы, которые могут Вас заинтересовать

35947. Основное общее образование – вторая ступень общего образования 51 KB
  Федеральный компонент государственного стандарта общего образования направлен на приведение содержания образования в соответствие с возрастными особенностями подросткового периода когда ребенок устремлен к реальной практической деятельности познанию мира самопознанию и самоопределению. Федеральный компонент направлен на реализацию следующих основных целей: формирование целостного представления о мире основанного на приобретенных знаниях умениях навыках и способах деятельности; приобретение опыта разнообразной деятельности индивидуальной...
35949. Синтетическая теория эволюции 50.5 KB
  Она представляет собой учение об эволюции органического мира разработанное на основе данных современной генетики экологии и классического дарвинизма. В разработку синтетической теории эволюции внесли вклад многие ученые. Основные положения синтетической теории эволюции в общих чертах можно выразить следующим образом: Материалом для эволюции служат наследственные изменения мутации как правило генные и их комбинации.
35950. Роман Ф.М. Достоевского «Бедные люди» 42 KB
  Достоевский возмущен тем что для маленького человека главное в жизни вещь Акакий Акакиевич в Шинели Гоголя. Достоевский пишет Антишинель. Достоевский наделяет героя амбициозностью. Достоевский в течение написания романа сам становится писателем.
35952. Коммуна 41.5 KB
  Членами Коммуны были избраны 86 человек. Среди членов Коммуны были служащие врачи журналисты адвокаты рабочие. По многим вопросам неоякобинцы и бланкисты голосовали вместе образуя большинство Коммуны. Более плодотворной оказалась деятельность Коммуны в области удовлетворения насущных социальноэкономических требований парижан.
35953. Стратегии и методы исследования психического развития ребенка 41.5 KB
  Стратегия формирования психических процессов активного вмешательства построения процесса с заданными свойствами экспериментально-генетический метод метод экспериментально вызванного генеза Выготский метод поэтапно=планомерного формирования умственных понятий и образов. Благодаря стратегии формирования психических функций удается проникнуть в суть развития психики. Леонтьева: всякая деятельность выступает как сознательное действие затем как операция и по мере формирования становится функцией. Теория формирования умственных...
35955. Понятие, признаки и цели предприятия 99.5 KB
  Понятие признаки и цели предприятия Предприятие это самостоятельный хозяйствующий субъект созданный предпринимателем или группой предпринимателей для производства продукции выполнения работ и оказании услуг с целью удовлетворения потребностей членов общества и получения прибыли. Принято выделять следующие признаки предприятия: 1. Для функционирования предприятия необходим обособленный комплекс орудий и других средств производства земельные участки машины оборудование сырье материалы. Продукция предприятия может использоваться в...