243

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

Курсовая

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

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

Русский

2012-11-14

401 KB

141 чел.

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

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

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

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

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

на тему: «Создание 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)


 

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

40488. Образ Бабы Яги 21.5 KB
  Баба Яга живет в избушке находящейся на границе двух миров в тёмном лесу. Баба Яга безусловно злой персонаж но делает добрые дела. Костяная нога лежит на печи: нос в потолок врос а пятки в дверь упираются атрибуты смерти – Баба Яга живет в гробу С одной стороны Баба Яга окружена атрибутами смерти а с другой – атрибуты кухни. В XVIII веке в Европе – добрая волшебница и злая колдунья; в России – одна Баба Яга.
40489. Образ врагов в былинах 20 KB
  Образ врагов в былинах. Эволюция образа: Змей Горыныч – самый древний зооморфный СоловейРазбойник – промежуточный образ терратоморфный Тугарин – человек но остается змеиное – крылья от Горыныча антропоморфный король литовский Калин – антропоморфные сам богатырь если отпадет от земли русской – Дунай.
40490. Образ Ивана Дурака 24 KB
  Образ Ивана Дурака. Иван Дурак открывает ряд литературных персонажей который заканчивается Христом. В волшебной сказке Иван – дурак в архетипичном смысле слова. Иван Дурак – высокий дурак ср.
40491. Образ Ильи Муромца в былине Илья и Святогор 20.5 KB
  Образ Ильи Муромца в былине 'Илья и Святогор'. Инвариант: Святогор и велик и высок его земля не держит и он ездит по горам всё что находится в горизонтальной плоскости – хорошо всё что в вертикальной – плохо. Святогор и Русь – несовместимые понятия. Святогор – символ природы гора камень.
40492. Образ Князя Владимира в былинах 21 KB
  Образ Князя Владимира в былинах. Основную часть русских былин прежде всего киевского цикла ученые связывают с Киевской Русью и правлением князя Владимира. Время князя Владимира – время больших событий. Былинный образ Владимира прошел сложную историю.
40493. Образ Кощея 22 KB
  А рабство – социальная смерть = Кощей – полная смерть и физическая и социальная. он сама смерть т. смерть бессмертна. Как же можно победить смерть Смерть Кощея спрятана на конце иголки – символ.
40494. Основные проблемы современной фольклористики 23 KB
  Основные проблемы современной фольклористики. У современной фольклористики те же самые проблемы что и у академических школ новые. Проблемы: вопрос о происхождении фольклора. проблемы изучения нового нетрадиционного фольклора.
40495. Особенности поэтики былин 28.5 KB
  Стих былины – тонический многосложный с тремя или даже четырьмя сильными ударениями. Художественные средства былины подчинены оценке поведения персонажей. Структура былины: Запев – вступление которое имеет целью привлечь внимание слушателей. Зачин – устойчивое начало былины которое служит исходным моментом действия и часто содержит экспозицию.
40496. Особенности поэтики волшебной сказки 24.5 KB
  Особенности поэтики волшебной сказки. Композиция: начало и финал сказки очень жесткие В. Пропп Путьдорога = жизнь судьба героя 1 2 1 – начало сказки: В некотором царстве в некотором государстве. 2 – конец сказки: И я там было мед пиво пил по усам текло да в рот не попало.