243

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

Курсовая

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

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

Русский

2012-11-14

401 KB

178 чел.

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

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

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

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

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

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


 

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

14412. Экономические отношения современной молодежи в стране 32.5 KB
  Экономические отношения современной молодежи в стране. Молодёжь это особая социальновозрастная группа отличающаяся возрастными рамками и своим статусом в обществе: переход от детства и юности к социальной ответственности. Возрастные рамки позволяющие относить
14413. Экономическое отношение современной молодёжи в России 33.5 KB
  Экономическое отношение современной молодёжи в России Молодёжь в значительной части обладает тем уровнем мобильности интеллектуальной активности и здоровья который выгодно отличает её от других групп населения. В то же время перед любым обществом стоит вопрос о...
14414. Хочешь жить - умей вертеться 18.22 KB
  Хочешь жить умей вертеться. В современном мире все вращается вокруг денег. Каждый пытается гдето сэкономить а ктото старается увеличить свою прибыль. Что касаемо студентов... То не буду лукавить даже порой садясь в автобус или маршрутное такси нас давит жаба плат
14415. Экономические отношения современной молодёжи России 30 KB
  Экономические отношения современной молодёжи России сочинение Современная молодежь России в последнее время всё чаще идёт на поводу брендов о которых не умолкают СМИ стремится быть в первых рядах и подражать иностранным известным личностям в каких либо их приобре...
14416. Сочинение на тему: «Экономические отношения молодежи в стране» 20.49 KB
  Сочинение на тему: Экономические отношения молодежи в стране. В условиях социальноэкономического реформирования российского общества особую актуальность приобретают исследования проблем молодежи проживающей в малых городах. Проблемная ситуация заключается в то
14417. Экономические отношения современной молодёжи в моей группе 7.39 KB
  Экономические отношения современной молодёжи в моей группе. Экономические отношения это отношения между людьми по поводу распределения обмена и потребления благ. В экономические отношения люди обычно вступают исходя из мотивов выгоды. Дай то что нужно мне и ...
14418. Есть такая профессия - защищать Родину 482.72 KB
  Сочинение на тему: Есть такая профессия защищать Родину Я счастливый человек Я живу со своими родителями хожу в любимую школу слышу смех бабули и дедушки. Мне интересно читать книги рассматривать картинки в энциклопедиях изучать географические карты. Как мног
14419. Важный выбор 13.85 KB
  Важный выбор Мой важный выбор состоял в том что я решил сильно поменять свою жизнь поступив в суворовское военное училище. Одним летним утром я как обычно проснулся поздно но по новостям увидел передачу об Уссурийском суворовском военном училище.
14420. Важный выбор профессии 17.36 KB
  Я учусь в 8 классе мне 14 лет. Через несколько лет меня ждет расставание со школой. Но самое главное мне предстоит сделать очень важный выбор от которого впоследствии будет зависеть моя будущая жизнь. Кто поможет мне ответить на вопрос: Кем быть Куда пойти учиться ...