Исследование вычислительной эффективности веб-технологий

Программные средства разработки приложения. Анализ алгоритма решения. Определение попадания точки внутрь фигуры. Анализ вариантов использования программы. Логическое проектирование серверной части. Сравнительный анализ вычислительной эффективности.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 16.02.2016
Размер файла 1,5 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

ВВЕДЕНИЕ

Сегодня вычислительная техника является неотъемлемой частью нашей жизни. Она дает возможность автоматизировать большие объемы рутинной работы, моделировать сложные процессы, решать различные инженерные и математические задачи.

На данный момент существует множество технологий для решения различного рода задач. Все их можно условно поделить на настольные, клиент-серверные и веб-технологии.

Windows Presentation Foundation (WPF) - технология, представляющая разработчикам обширный API-интерфейс для создания настольных приложений, имеющих насыщенный дизайн и интерактивность и включающий новую модель построения пользовательских приложений основанный на DirectX. Технология включает в себя использование XAML - декларативного языка разметки.

Традиционный (классический) способ создания веб-приложений заключается в добавлении специальных элементов управления, допускающих программное управление (например, скриптов на языках JavaScript) в HTML код. Данная технология - ASP (англ. Active Server Pages -- «активные серверные страницы») была предложена компанией Microsoft в 1996 году и разработана для операционных систем из семейства Windows NT, и функционирует под управлением веб-сервера Microsoft IIS. Основным недостатком применения технологии ASP является то, что использовать ее для выполнения больших объемов вычислительной работы на сервере нецелесообразно из-за медленной работы скриптов, поскольку при выполнении активных страниц большая часть времени расходуется на процесс их интерпретации. Однако технология ASP, несмотря на свои очевидные недостатки: относительно медленную работу, линейную модель программирования, невозможность использования всех преимуществ объектно-ориентированного программирования, используется по причине своей простоты, низкого порога вхождения, малой требовательности к ресурсам.

JScript-- это современный язык скриптов с обширными возможностями по применению. Это настоящий объектно-ориентированный язык, сохранивший, тем не менее, качества, присущие языку скриптов.

Однако на смену классическим технологиям приходят современные концепции: разделение кода и разметки, а соответственно, разделение дизайна и бизнес-логики приложения, использование объектно-ориентированного языка C# и т.п, что позволяет автоматизировать и ускорить процесс разработки приложений и оформления проектной документации.

При проектировании и реализации серверной части популярной среди программистов является технология веб - сервисов ASP.NET. Данная технология позволяет сосредоточиться над решением поставленных задач, значительно упрощая работу с транспортировкой и преобразованием данных. С ASP.NET поставляется специальный класс IHttpHandler для .asmx (называемых WebServiceHandler), который обеспечивает набор необходимых функциональных возможностей.

Перечисленные выше технологии будут использоваться в курсовой работе.

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

алгоритм вычислительный логический серверный

Цель данной курсовой работы - исследование вычислительной эффективности веб-технологий. В ходе выполнения курсовой необходимо спроектировать и реализовать 3 приложения, каждое из которых считает площадь фигуры методом «Монте-Карло», причем каждое приложение должно быть реализовано с использованием разных технологий программирования.

Вариант №29:

1) фигура ambd (рисунок 1);

2) настольное приложение на базе WPF/C#;

3) веб-приложение на базе ASP/JScript;

4) веб-приложение на базе WPF/ASMX/C#.

В данной работе рассматривается задача вычисления площади фигуры, представленного на рис. 1, методом Монте-Карло.

Рис. 1. Фигурa ambd внутри прямоугольника

Исходными данными для приложений являются координаты угловых точек треугольника abd, в котором , как видно из рис. 1.

Для вычисления площади фигуры необходимо вначале вычислить площадь прямоугольника, описывающего заданную фигуру, а затем N раз сгенерировать по два случайных числа для координат x и y, определяющие точку внутри прямоугольника. Генерируемые случайным образом точки должны равномерно заполнять площадь прямоугольника. Для этого случайные числа должны иметь равномерное распределение (по ширине и высоте прямоугольника соответственно).

Для каждой точки выполняется проверка, попала ли точка внутрь заданной фигуры. Если из N точек M точек оказалось внутри фигуры, а площадь прямоугольника равна S, то площадь фигуры будет приближенно равна .

Поскольку площадь фигуры легко вычисляется по правилам геометрии, мы можем определить относительную погрешность приближенного вычисления этой площади методом Монте-Карло. Естественно, чем больше N, тем меньше погрешность такого вычисления.

Каждое приложение шесть раз повторяет эксперимент и вычисляет площадь фигуры методом Монте-Карло для соответственно. В каждом эксперименте определяется относительная погрешность вычисления площади (в процентах) и его длительность (в миллисекундах). В веб-приложениях клиент перед каждым экспериментом передает на сервер координаты точек треугольника и значение N, а после завершения эксперимента получает от сервера значения площади, рассчитанной методом Монте-Карло, количества попавших в фигуру точек и относительной погрешности.

По результатам экспериментов каждое приложение выдает на экран таблицу, показывающую зависимости значений относительной погрешности и длительности эксперимента от величины N.

2 Разработка технического задания

2.1 Анализ вариантов использования программы

Требуется разработать программу, которая позволяла бы пользователю вычислять площадь фигуры ambd методом Монте-Карло. Программа должна позволять пользователю:

· ввод координат контрольного примера;

· ввод координат пользователем;

· очистка полей ввода координат

· выполнение расчетов по введенным координатам;

· завершение работы приложения.

После ввода координат и подтверждения на расчет программа должна автоматически проверить корректность введенных данных. На рис. 2 представлена диаграмма вариантов работы программы.

Рис. 2. Диаграмма вариантов использования приложений

Из рис. 2. видно, что при запуске программы пользователю предлагается выбрать способ ввода новых координат, затем выполняется проверка на их корректность. В течение одного сеанса пользователь имеет возможность многократно использовать программу.

2.2 Требования к приложениям

В соответствии с заданием к курсовой работе требуется разработать три различных приложения. Все программы должны удовлетворять следующим требованиям:

· иметь интуитивно понятный интерфейс;

· вычислять площадь фигуры методом Монте-Карло, рассчитывать погрешность вычисления, а также измерять время расчета для каждого N= 103, 104, 105, 106, 107 количества точек;

· сообщать пользователю об ошибках;

· иметь возможность запуска повторного расчета.

В соответствии с номером варианта, каждое приложение должно быть выполнено с использованием требуемых технологий.

Настольное приложение на базе WPF/XBAP:

· интерфейс: WPF;

· язык реализации: XBAP.

Веб-приложение на базе ASP/JScript:

· интерфейс: веб-страница;

· языки реализации: HTML, JScript.

Веб-приложение на базе WPF/ASMX/C#:

· язык реализации: C#;

· тип: веб-приложение;

· клиентская часть: WPF;

· серверная часть: ASMX;

· тип веб-сервиса: асинхронный.

3 Анализ алгоритма решения

3.1 Метод Монте-Карло

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

По условию курсового проекта все приложения должны находить площадь геометрической фигуры методом Монте-Карло.

Имеем некоторую фигуру (T) на плоскости, площадь которой требуется найти. Для этого необходимо ограничить её другой наименьшей фигурой (P), площадь которой легко вычислить аналитически. Пусть про любую точку K можно быстро узнать принадлежит ли она фигуре T. Имея общее количество точек N, считаем, сколько точек (L) попало в фигуру T. Зная площадь Sp фигуры (P), рассчитываем площадь ST фигуры T по следующей формуле:

.

Для каждого приложения необходимо определить относительную погрешность вычислений. Для этого по формулам геометрии необходимо найти точную площадь геометрической фигуры. Расчет относительной погрешности осуществляется по формуле:

,

где - площадь фигуры, вычисленная по геометрическим формулам, - площадь фигуры, вычисленная по методу Монте-Карло.

3.2 Определение попадания точки внутрь фигуры

Имеем фигуру ambd и произвольную точку P, лежащие в одной плоскости. Требуется определить, принадлежит ли точка P фигуре ambd, если известны координаты вершин треугольника abd и координаты точки.

Искомую фигуру можно разбить на две более простые: полуокружность ab и треугольник abd. Следовательно, надо проверять попала ли точка в треугольник или полуокружность в зависимости от значения координаты x случайно сгенерируемой точки, т.е если координата x точки меньше, чем координата х центра полуокружности, то проверяем попала ли точка в полуокружность, иначе проверяем попала ли точка в треугольник.

Проверка попадания точки внутрь окружности

Имеем случайно выбранную точку P(xp,yp) и имеем полуокружность с центром в точке O(x0,y0) и радиусом R. Тогда условие попадания точки в полуокружность будет иметь следующий вид:

Если

то точка P(xp,yp) лежит внутри окружности.

Данный алгоритм прост и не требует большого количества вычислений.

Проверка попадания точки внутрь прямоугольника

Чтобы определить попала ли точка в треугольник, необходимо найти уравнения прямых ad и bd, ограничивающих треугольник снизу и сверху соответственно, а затем проверить условие попадания yad<yp<ybd , где yр - ордината сгенерированной точки, у - ордината соответствующей точки прямой ad, ybd - ордината соответствующие точки прямой bd

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

Уравнение прямой bd находится по формуле:

,

где .

Следовательно, для попадания между прямыми ad и bd ордината точки должна удовлетворять неравенству:

0

4 Настольное приложение на базе WPF/XBAP

4.1 Программные средства разработки приложения

Для создания настольного приложения была выбрана интегрированная среда разработки Microsoft Visual Studio 2013. Так как это новейшая IDE от Microsoft поддерживающая разработку клиентских приложений на языке C#. Visual Studio -- включает интегрированную среду разработки программного обеспечения и ряд других инструментальных средств, обеспечивающих в совокупности высокое качество кода на протяжении всего цикла жизни ПО, от проектирования до внедрения. Данные продукты позволяют разрабатывать как консольные приложения, так и приложения с графическим интерфейсом, в том числе с поддержкой технологии Windows Forms, а также веб-сайты, веб-приложения, веб-службы как в родном, так и в управляемом кодах для всех платформ, поддерживаемых Microsoft.

XBAP (англ. XAML Browser Application -- браузерное приложение XAML) -- это WPF-приложение, которые выполняется внутри браузера Web-страниц.

Приложение ХВАР является полноценным приложениям WPF, имеющим некоторые основные отличия:

ХВАР-приложение выполняется внутри окна браузера и может занимать всю область Web-страницы или только часть. (В HTML размечается с помощью дескриптора <iframe>.)

ХВАР-приложение имеет ограниченные права в целях применения облегчённой модели развертывания, позволяющей пользователям запускать приложения WPF без риска выполнения потенциально опасного кода.

Приложению ХВАР предоставляются те же разрешения, что и приложению .NET, которое запускается из глобальной или локальной сети, так как используется аналогичный механизм безопасности.

ХВАР-приложение не требует инсталляции (специальной установки на компьютер пользователя).

При запуске приложения ХВАР оно загружается и помещается в кэш браузера, но не устанавливается в системе. Это дает Web-модель мгновенного обновления -- при каждом обращении пользователя к данному приложению загружается новая версия (если оно отсутствует в кэше и было обновлено).

В отличие от программной модели, используемой в технологиях ActiveX и Silverlight, где апплеты действительно загружаются внутри процесса браузера, XBAP-приложения только отображают своё содержимое в окне браузера, но при этом, как любое WPF-приложение, запускаются в виде отдельного процесса управляемого средой CLR.

Одно из преимуществ приложений ХВАР -- возможность работать с ними без лишних подсказок и приглашений: пользователь может открыть приложение ХВАР в браузере и начать работать с ним точно так же, как с Java-апплетом, Flash-анимацией или оснащенной кодом JavaScript Web-страницей. Никакого приглашения выполнить инсталляцию и предупреждения по поводу безопасности не появляется. Windows Presentation Foundation (WPF) -- это платформа пользовательского интерфейса, которая позволяет создавать многофункциональные интерактивные клиентские приложения. Платформа разработки WPF поддерживает широкий набор возможностей разработки приложений, включая модель приложения, ресурсы, элементы управления, графику, макет, привязки данных, документы и безопасность. Это подмножество платформы .NET Framework, поэтому пользователям, которые ранее выполняли построение приложений в платформе .NET Framework, используя ASP.NET или Windows Forms, будут знакомы принципы программирования. WPF использует язык XAML для обеспечения декларативной модели для программирования приложений.

XAML -- это декларативный язык разметки. С точки зрения модели программирования .NET Framework язык XAML упрощает создание пользовательского интерфейса для приложения .NET Framework. Можно создать видимые элементы пользовательского интерфейса в декларативной разметке XAML, а затем отделить определение пользовательского интерфейса от логики времени выполнения, используя файлы кода программной части, присоединенные к разметке с помощью определений разделяемых классов. При представлении в виде текста файлы XAML являются XML-файлами.

4.2 Логическое проектирование

В соответствии с заданием необходимо создать настольное приложение на базе WPF/XBAP. Данное приложение реализовано в соответствии с концепцией объектно-ориентированного программирования. Все классы находятся в пространстве имен app1. Файловый состав приложения имеет следующий вид:

· Файл Page1.xaml.cs - в нем находится класс Page1, в котором описан интерфейс взаимодействия с пользователем (описаны обработчики события - нажатие кнопки, проверки вводимы данных и т.д);

· Файл Page1.xaml - в нем находится код разметки формы;

· Файл Point.cs - содержит класс Point;

· Файл IceCream.cs - содержит классы Triangle, Circle, Rectangle и IceCream.

Класс Page1 содержит методы, необходимые для взаимодействия с пользователем. Диаграмма класса Page1 представлена на рис. 3.

Рис.3. Диаграмма класса Page1

Класс Page1 содержит следующий конструктор:

Page1() - вызывает инициализацию компонентов формы.

Класс Page1 содержит следующие методы:

Button1_Click(object sender, RoutedEventArgs e):void - обработчик события нажатия на кнопку Button1, вызывает метод check класса Page1, вызывает методы расчёта площади фигуры, осуществляет вывод результатов;

Button2_Click(object sender, RoutedEventArgs e):void - обработчик события нажатия на кнопку Button2, очищает поля для ввода координат;

Button3_Click(object sender, RoutedEventArgs e):void - обработчик события нажатия на кнопку Button3, инициализирует точки, необходимые для контрольного примера, заполняет поля для ввода координат;

Check():bool - проверка введенных координат;

LostFocusTB():void - изменение введенных координат.

Класс Point необходим для более удобной работы с точками. Диаграмма класса Point представлена на рис. 4.

Рис. 4. Диаграмма класса Point

Класс Point содержит следующий конструктор:

Point(int a, int b) - инициализация точки по двум ее координатам

Класс Point содержит следующие свойства:

PointX:float - ордината точки;

PointY:float - абсцисса точки.

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

Рис. 5. Диаграмма класса Circle

Класс Circle содержит следующий конструктор:

Circle(Point p1, Point p2) - инициализация полуокружности по двум точкам

Класс Circle содержит следующие свойства:

CentrPoint:Point - центр полуокружности;

MinX:float - минимальный Х геометрической фигуры;

Класс Circle содержит следующие методы:

Square():float - возвращает площадь полуокружности;

PointInCircle(Point p):bool - проверяет попадание точки в полуокружность.

Класс Triangle предоставляет необходимые методы для работы с треугольником, как частью геометрической фигуры. Диаграмма класса Triangle представлена на рис.6.

Рис. 6. Диаграмма класса Triangle

Класс Triangle содержит следующий конструктор:

Triangle(Point p1, Point p2, Point p3) - инициализация треугольника по трем точкам

Класс Triangle содержит следующие свойства:

MaxX:float - максимальный Х геометрической фигуры;

MaxY:float - максимальный Y геометрической фигуры;

MinY: float - минимальный Y геометрической фигуры;

Класс Triangle содержит следующие методы:

PointInLines(Point P): bool - проверяет попадание точки в треугольник;

Square(): float - возвращает площадь треугольника.

Класс Rectangle предоставляет необходимые методы для работы с прямоугольником, описанного вокруг геометрической фигуры. Диаграмма класса Rectangle представлена на рис. 7.

Рис. 7. Диаграмма класса Rectangle

Класс Rectangle содержит следующий конструктор:

Rectangle(float MiX, float MaX, float MiY, float MaY)- инициализирует прямоугольник по четырем точкам;

Класс Rectangle содержит следующие методы:

Square():float - возвращает площадь прямоугольника.

Класс IceCream предоставляет необходимые методы для работы с геометрической фигурой. Данный класс использует четыре вышеописанных класса. Диаграмма класса IceCream представлена на рис. 8.

Рис. 8. Диаграмма класса IceCream

Класс IceCream содержит следующий конструктор:

IceCream(Point a, Point b, Point e)- инициализирует полуокружность ab, треугольник abd и прямоугольник abcd

Класс IceCream содержит следующие свойства:

maxX:float - максимальный Х геометрической фигуры;

maxY:float - максимальный Y геометрической фигуры;

minx:float - минимальный Х геометрической фигуры;

minY:float - минимальный Y геометрической фигуры.

Класс IceCream содержит следующие методы:

realSquare():float - возвращает реально посчитанную площадь геометрической фигуры;

PointInIceCream(Point p): bool - проверяет попадание точки в геометрическую фигуру;

MonteCarloSquare(int count, out int numberPoints, out float rel_delta): float - возвращает площадь геометрической фигуры посчитанную методом Монте-Карло, схема метода изображена на рис. 9.

Рис. 9. Схема метода MonteCarloSquare

4.3 Системные требования

Для корректной работы приложения требуется:

· операционная система Windows Vista с пакетом обновления (SP2) и выше;

· архитектура 32-разрядная (x86)/64-разрядная (x64);

· процессор мощностью 1,6 ГГц или выше;

· 1 ГБ ОЗУ (1,5 ГБ для виртуальной машины);

· наличие 1 Мб свободного дискового пространства;

· видеоадаптер, совместимый с DirectX 9;

· установленный .NET Framework 4.5.

4.4 Результаты работы

Результаты работы настольного приложения представлены на рис. 10.

Рис. 10. Результаты работы настольного приложения на базе WPF/XBAP

5 ВЕБ-ПРИЛОЖЕНИЕ НА БАЗЕ ASP/JSCRIPT

5.1 Программные средства реализации приложения

ASP (Active Server Pages, активные серверные страницы) - это среда выполнения приложений, встроенная в веб-сервер IIS (Internet Information Server, информационный сервер Интернета). В активных серверных страницах (файлах с расширением .asp) обычно имеются сценарии на скриптовых языках (например,VBScript или JScript), которые выполняются на сервере (в контексте IIS) до передачи HTML кода клиенту. Для обозначения сценариев, исполняющихся на стороне сервера, применяются специальные теги <% %>.

Данное приложение реализуется с помощью языков скриптов - JScript и JavaScript. В качестве интерпретатора скриптов использовался IIS и встроенный в Microsoft Visual Studio сервер. Разработка приложения велась в JetBrains WebStorm 6.0.1.

Приложение состоит из двух страниц: MonteKarlo.html и MonteKarlo.asp.

5.2 Логическое проектирование приложения

На странице MonteKarlo.html реализуется ввод данных пользователем в таблицу (координат вершин треугольника, площадь которой необходимо посчитать). После чего, при нажатии кнопки «Расчитать», введенные данные будут отправлены с помощью метода Post на страницу MonteKarlo.asp, которая будет производить необходимые вычисления. Код, реализующий выше приведенные действия, выглядит следующим образом:

<form action = "MonteKarlo.asp" method = "POST" name = "MonteKarlo">

Параметр action указывает имя серверной страницы, которой посылаются данные для обработки, а параметр method определяет способ отсылки данных на сервер. Имя формы используется для доступа к ее элементам. На форме расположены шесть полей для ввода текста - по одному на координату каждой точки. Пример тега для редактирования поля для ввода текста:

<input type="text" value = "10" name="KoordinX_B" size="20" onchange = "changeBX();" id = "bx">

Страница MonteKarlo.asp, реализует вычисление площади геометрической фигуры, относительной погрешности вычислений и времени. Данная страница написана на языке скриптов Jscript.

На активной серверной странице MonteKarlo.asp выполняются все функции по расчету требуемых параметров и вывод результатов. Ниже описаны все используемые клиентские функции.

CircleSquare() - возвращает площадь полуокружности;

TriangleSquare() - возвращает площадь треугольника;

PointInTriangle(x, y)- проверяет попадание точки в треугольник;

PointInCirle(x,y) - проверяет попадание точки в полуокружность;

PointInIceCream(x,y) - проверяет попадание точки в геометрическую фигуру;

area()- возвращает реальную площадь геометрической фигуры;

Calculate(amountPoints) - расчет площади методом Монте-Карло.

5.3 Системные требования

Для корректной работы приложения требуется:

· операционная система Windows XP с пакетом обновления (SP2) и выше;

· архитектура 32-разрядная (x86) /64-разрядная (x64);

· процессор мощностью 1,6 ГГц или выше;

· 512 МБ ОЗУ;

· 1 ГБ (NTFS) свободного дискового пространства.

Для выполнения ASP приложения необходимо наличие следующих программных пакетов:

· операционная система MS Windows 2000 или выше;

· информационный сервер Интернета (Internet Information Server, IIS 5.1 или выше);

· наличие браузера MS Internet Explorer 5.0 или выше.

5.4 Результаты работы

Результаты работы веб-приложения представлены на рис. 11.

Рис. 11. Результаты работы веб-приложения на базе ASP/JScript

6 ПРИЛОЖЕНИЕ НА БАЗЕ WPF/ASMX/C#

6.1 Программные средства разработки

Программные средства разработки данного приложения описаны в п.4.1

6.2 Логическое проектирование серверной части

В соответствии с заданием, необходимо создать веб-сервис XML, который будет вычислять геометрической фигуры ambd методом Монте-Карло. Сервис будет называться WebSevice_MonteKarlo и иметь один веб-метод MK_Square, который принимает координаты точек треугольника и количество итераций, и возвращает количество попавших в область геометрической фигуры точек, реальную площадь, площадь, посчитанную методом Монте-Карло, погрешность и время работы метода. Диаграмма класса WS_MonteKarlo представлена на рис. 12.

Рис. 12. Диаграмма класса WS_MonteKarlo

MK_Square(float ax, float ay, float bx, float by, float ex, float ey, int count, out int numberPoints, out float real_delta, out float realsquare, out DateTime start, out DateTime end):float - вызывает метод MonteKarloSquare(count, out numberPoints, out real_delta) класса IceCream;

Класс Point необходим для более удобной работы с точками. Диаграмма класса Point представлена на рис. 13.

Рис. 13. Диаграмма класса Point

Класс Point содержит следующий конструктор:

Point(int a, int b) - инициализация точки по двум ее координатам

Класс Point содержит следующие свойства:

PointX:float - ордината точки;

PointY:float - абсцисса точки.

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

Рис. 14. Диаграмма класса Circle

Класс Circle содержит следующий конструктор:

Circle(Point p1, Point p2) - инициализация полуокружности по двум точкам

Класс Circle содержит следующие свойства:

CentrPoint: Point - центр полуокружности;

MinX: float - минимальный Х геометрической фигуры;

Класс Circle содержит следующие методы:

Square():float - возвращает площадь полуокружности;

PointInCircle(Point p):bool - проверяет попадание точки в полуокружность.

Класс Triangle предоставляет необходимые методы для работы с треугольником, как частью геометрической фигуры. Диаграмма класса Triangle представлена на рис. 15.

Рис. 15. Диаграмма класса Triangle

Класс Triangle содержит следующий конструктор:

Triangle(Point p1, Point p2, Point p3) - инициализация треугольника по трем точкам

Класс Triangle содержит следующие свойства:

MaxX: float - максимальный Х геометрической фигуры;

MaxY: float - максимальный Y геометрической фигуры;

MinY: float - минимальный Y геометрической фигуры.

Класс Triangle содержит следующие методы:

PointInLines(Point P): bool - проверяет попадание точки в треугольник;

Square(): float - возвращает площадь треугольника.

Класс Rectangle предоставляет необходимые методы для работы с прямоугольником, описанного вокруг геометрической фигуры. Диаграмма класса Rectangle представлена на рис. 16.

Рис. 16. Диаграмма класса Rectangle

Класс Rectangle содержит следующий конструктор:

Rectangle(float MiX, float MaX, float MiY, float MaY)- инициализирует прямоугольник по четырем точкам;

Класс Rectangle содержит следующие методы:

Square():float - возвращает площадь прямоугольника.

Класс IceCream предоставляет необходимые методы для работы с геометрической фигурой. Данный класс использует четыре вышеописанных класса. Диаграмма класса IceCream представлена на рис. 17.

Рис. 17. Диаграмма класса IceCream

Класс IceCream содержит следующий конструктор:

IceCream(Point a, Point b, Point e)- инициализирует полуокружность ab, треугольник abd и прямоугольник abcd

Класс IceCream содержит следующие свойства:

maxX:float - максимальный Х геометрической фигуры;

maxY:float - максимальный Y геометрической фигуры;

minx:float - минимальный Х геометрической фигуры;

minY - минимальный Y геометрической фигуры.

Класс IceCream содержит следующие методы:

realSquare():float - возвращает реально посчитанную площадь геометрической фигуры;

PointInIceCream(Point p): bool - проверяет попадание точки в геометрическую фигуру;

MonteCarloSquare(int count, out int numberPoints, out float rel_delta): float - возвращает площадь геометрической фигуры посчитанную методом Монте-Карло.

6.3 Логическое проектирование клиентской части

Реализуем клиентское WPF приложение, которое будет обращаться к созданному ранее веб-сервису. Для этого добавим в решение новый веб-сайт и создадим веб-ссылку на веб-метод.

Класс Page1 содержит методы, необходимые для взаимодействия с пользователем. Диаграмма класса Page1 представлена на рис. 18.

Рис. 18. Диаграмма класса Page1

Button1_Click(object sender, RoutedEventArgs e):void - обработчик события нажатия на кнопку Button1, вызывает метод MK_Square веб-сервиса WebSevice_MonteKarlo, выводит результаты выполнения веб-метода в таблицу;

Button2_Click(object sender, RoutedEventArgs e):void - обработчик события нажатия на кнопку Button2, очищает поля для ввода координат;

Button3_Click(object sender, RoutedEventArgs e):void - обработчик события нажатия на кнопку Button3, инициализирует точки, необходимые для контрольного примера, заполняет поля для ввода координат;

KoordinX_A_TextChanged(object sender, EventArgs e)- проверка вводимых координат;

KoordinX_B_TextChanged(object sender, EventArgs e)- проверка вводимых координат;

KoordinX_E_TextChanged(object sender, EventArgs e)- проверка вводимых координат;

KoordinY_A_TextChanged(object sender, EventArgs e)- проверка вводимых координат;

KoordinY_B_TextChanged(object sender, EventArgs e)- проверка вводимых координат;

KoordinY_E_TextChanged(object sender, EventArgs e)- проверка вводимых координат.

6.4 Руководство системного программиста

Приложение разработано для вычисления площади фигуры методом Монте-Карло. Программа реализована на языке программирования высокого уровня С#.

Для работы приложения требуется наличие следующих программных пакетов:

· операционная система MS Windows XP или более поздняя версия;

· наличие обозревателя MS Internet Explorer 5.0 или выше;

· Microsoft .Net Framework 3.0 или старше.

Программа в дополнительной настройке не нуждается.

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

Приложение разработано для вычисления площади фигуры методом Монте-Карло. Данное приложение состоит из двух частей (клиентской и серверной). В клиентской части реализован интерфейс WPF. Серверным приложением является веб-служба ASMX/C#.

Проект состоит из следующих файлов:

1) MainWindow.aspx- файл содержащий в себе веб-форму;

2) MainWindow.aspx.cs - файл содержащий в себе код для обработки событий происходящих на форме;

3) Web.config - файл содержащий в себе настройки для корректной работы приложения на базе ASMX/C#

4) WS_MonteKarlo.asmx - файл отвечающий за серверную часть;

5) IceCream.cs - файл, содержащий классы IceCream, Triangle, Circle, Rectangle

6) Point.cs - файл, содержащий класс Point.

Для корректной работы приложения требуется:

· операционная система Windows 2000 или старше;

· Microsoft .Net Framework 3.0 или старше;

· 128 Мб оперативной памяти;

· наличие 30 Мб свободного места на жестком диске.

Для запуска программы необходимо запустить проект App3.

Входными данными являются:

· координаты точек.

Выходными данными являются:

· таблица с информацией о работе метода Монте-Карло:

· количество точек для данного опыта;

· количество попавших в фигуру точек;

· площадь фигуры, вычисленная методом Монте-Карло;

· площадь фигуры, вычисленная по правилам геометрии;

· погрешность вычислений;

· время вычислений.

6.6 Руководство пользователя

Приложение разработано для вычисления площади треугольника методом Монте-Карло.

Программа выполнится успешно если компьютер удовлетворяет системным требованиям указанным в пункте 6.6.

Получите у человека, который разворачивает приложения, адрес и введите его в браузере. Пример адреса, который вам будет предоставлен - «http://localhost:21645/WebServiceMK.asmx».

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

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

6.7 Системные требования

Для выполнения приложения необходимо:

· операционная система MS Windows 2000 или более поздняя версия;

· наличие обозревателя MS Internet Explorer 5.0 или выше;

· Microsoft .Net Framework 3.0 или старше;

· 128 Мб оперативной памяти;

· наличие 30 Мб свободного места на жестком диске.

6.8 Результаты работы

Результаты веб-приложения представлены на рисунке 19.

Рис.19. Результаты работы приложения на базе WPF/ASMX/C#

7 АНАЛИЗ ВЫЧИСЛИТЕЛЬНОЙ ЭФФЕКТИВНОСТИ

Исследование вычислительной сложности алгоритма производится путем определения зависимости времени вычисления площади фигуры от количества генерируемых точек для метода Монте-Карло. Результаты представлены в таблице 1.

Таблица 1. Сравнение вычислительной эффективности приложений

Количество точек

Время выполнения приложения, мс

Настольное приложение WPF/XBAP

WEB приложение на базе Asp/JScript

Веб-приложение на базе WPF/ASMX/C#

1000

2

39

1

10000

6

653

2

100000

48

5053

18

1000000

500

44898

191

10000000

5355

438337

1745

Из таблицы видно, что приложение на базе WPF/ASMX/C# оказалось самым производительным. Также самым медленным по времени выполнения является веб-приложение на базе ASP/JScript. Это связано с тем, что JavaScript чувствителен к количеству переменных и из-за большого количества переменных приложение выполняется медленнее, чем все остальные.

Исследования проводились на ЭВМ со следующими характеристиками:

· процессор - Intel® Core™ i5-3210M CPU @2.50GHz 2.50GHz;

· оперативная память - 4096 Мб;

· операционная система - Windows 7 SP1;

· видеокарта - NVIDIA GeForce 610M 2048Mb.

ЗАКЛЮЧЕНИЕ

В ходе работы были разработаны три приложения: настольное приложение WPF/XBAP, веб-приложение на базе ASP/JScript, приложение на базе WPF/ASMX/C#, решающие одну и ту же задачу приближенного вычисления площади фигуры методом Монте-Карло. По полученным результатам была исследована вычислительная эффективность различных технологий программирования, а также были закреплены знания, полученные в ходе изучения курса "Технологии программирования".

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

1. ГОСТ 19.106-78 ЕСПД. Требования к программным документам, выполненным печатным способом.

2. ГОСТ 19.401-78 ЕСПД. Текст программы. Требования к содержанию и оформлению.

3. ГОСТ 19.402-78 ЕСПД. Описание программы.

4. ГОСТ 19.404-79 ЕСПД. Пояснительная записка. Требования к содержанию и оформлению.

5. ГОСТ 2.10 -95 «Общие требования к текстовым документам».

6. ГОСТ 19.701 - 90 ЕСПД. Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения.

7. ГОСТ 19.503-79 Руководство системного программиста. Требования к содержанию и оформлению.

8. ГОСТ 19.504-79 Руководство программиста. Требования к содержанию и оформлению.

9. ГОСТ 19.505-79 Руководство пользователя. Требования к содержанию и оформлению.

10. Компьютерное оформление отчетных документов / Составитель Т.И. Матикашвили, ТулГУ, Тула, 2000. -36 с.

11. Библиотека Microsoft MSDN - URL: http://msdn.microsoft.com/ru-ru/library

12. Шилдт Г. - C# 4.0 полное руководство - Москва: Вильямс, 2011 1056 с.

13. Мэтт Зандстра - PHP. Объекты, шаблоны и методики программирования Москва: Вильямс, 2011. - 528 c.

14. Никсон Р. - Создаем динамические веб-сайты с помощью PHP, MySQL, JavaScript и CSS - Питер, 2013. - 560 с.

15. Эндрю Троелсен - Язык программирования C# 5.0 и платформа .NET 4.5 Москва: Вильямс, 2013. - 1311 с.

ПРИЛОЖЕНИЕ

Файл Point.h (Файлы настольного приложения на базе WPF/C#)

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

//using System.Threading.Tasks;

namespace WPF_MonteKarlo

{

public class Point

{

private

float x, y;

public

Point(float a, float b) { x = a; y = b; }

public float PointX

{

get

{ return x; }

}

public float PointY

{

get

{ return y; }

}

}

}

Файл IceCream.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace WPF_MonteKarlo

{

class IceCream

{

private

Triangle abe;

Circle ab;

Rectangle abcd;

public

IceCream(Point a, Point b, Point e)

{

abe = new Triangle(a, b, e);

ab = new Circle(a, b);

abcd = new Rectangle(ab.MinX, abe.MaxX, abe.MinY, abe.MaxY);

}

public bool PointInIceCream(Point randP)

{

if (randP.PointX>(ab.CentrPoint.PointX))

{ return abe.PointInLines(randP);}

else

{ return ab.PointInCircle(randP); }

}

public float realSquare() { return (abe.Square() + ab.Square());}

public float minX

{

get

{

return ab.MinX;

}

}

public float maxX

{

get

{

return abe.MaxX;

}

}

public float minY

{

get

{

return abe.MinY;

}

}

public float maxY

{

get

{

return abe.MaxY;

}

}

public float MonteKarloSquare(int count, out int numberPoints, out float rel_delta)

{

Random rand = new Random();

numberPoints = 0;

//DateTime start_date_time = DateTime.Now;

for (int k = 0; k < count; k++)

{

Point p = new Point(minX + (float)(rand.NextDouble() * (maxX - minX)),

minY + (float)(rand.NextDouble() * (maxY - minY)));

if (PointInIceCream(p))

{

numberPoints++;

}

}

//DateTime end_date_time = DateTime.Now;

float MK_Square = abcd.Square() * ((float)numberPoints / (float)count);

rel_delta = (float)Math.Round((Math.Abs((MK_Square - realSquare()) * 100) / realSquare()) * 10000) / (float)10000.0;

return MK_Square;

}

}

class Triangle

{

private

Point a, b, e;

float k1;

float k2;

public

Triangle(Point p1, Point p2, Point p3)

{

a = p1; b = p2; e = p3;

k1 = (e.PointY - a.PointY) / (e.PointX - a.PointX);

k2 = (e.PointY - b.PointY) / (e.PointX - b.PointX);

}

public float Square()

{

float ab = (float)Math.Sqrt(Math.Pow((a.PointX - b.PointX), 2) + Math.Pow((a.PointY - b.PointY), 2));

float ae = (float)Math.Sqrt(Math.Pow((a.PointX - e.PointX), 2) + Math.Pow((a.PointY - e.PointY), 2));

float be = (float)Math.Sqrt(Math.Pow((b.PointX - e.PointX), 2) + Math.Pow((b.PointY - e.PointY), 2));

float polperim = (ab + ae + be) / 2.0f;

return (float)Math.Sqrt((polperim * (polperim - ab) * (polperim - ae) * (polperim - be)));

}

public bool PointInLines(Point p)

{

if ((((p.PointX - a.PointX) * k1 + a.PointY) >= p.PointY) || (((p.PointX - b.PointX) * k2 + b.PointY) <= p.PointY))

{

return true;

}

else

{

return false;

}

}

public float MaxX

{

get

{

return e.PointX;

}

}

public float MinY

{

get

{

return a.PointY;

}

}

public float MaxY

{

get

{

return b.PointY;

}

}

}

class Circle

{

private

Point Centr;

float r;

public

Circle(Point p1, Point p2)

{

r = (p2.PointY - p1.PointY) / 2;

Centr = new Point(p1.PointX, p1.PointY + r);

}

public float Square()

{

return (float)(Math.PI * Math.Pow(r, 2) / 2.0);

}

public bool PointInCircle(Point p1)

{

if (p1.PointX < Centr.PointX)

{

return ((Math.Pow(p1.PointX - Centr.PointX, 2) + Math.Pow(p1.PointY - Centr.PointY, 2)) <= Math.Pow(r, 2));

}

else { return false; }

}

public float MinX

{

get

{

return Centr.PointX - r;

}

}

public Point CentrPoint

{

get

{

return Centr;

}

}

}

class Rectangle

{

private

float MinX, MaxX, MinY, MaxY;

public

Rectangle(float MiX, float MaX, float MiY, float MaY)

{

MinX = MiX;

MaxX = MaX;

MinY = MiY;

MaxY = MaY;

}

public float Square()

{

return (MaxX - MinX) * (MaxY - MinY);

}

}

}

Файл Page1.xaml

<Page x:Class="app1.Page1"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

mc:Ignorable="d"

d:DesignHeight="300" d:DesignWidth="300"

Title="Page1">

<Grid Margin="0,0,-326,0">

<TextBox x:Name="KoordinX_A" HorizontalAlignment="Left" Height="23" Margin="61,52,0,0" TextWrapping="Wrap" Text="-8" VerticalAlignment="Top" Width="54" LostFocus="LostFocusTB"/>

<TextBox x:Name="KoordinX_B" HorizontalAlignment="Left" Height="23" Margin="61,75,0,0" TextWrapping="Wrap" Text="-8" VerticalAlignment="Top" Width="54" LostFocus="LostFocusTB"/>

<TextBox x:Name="KoordinX_D" HorizontalAlignment="Left" Height="23" Margin="61,98,0,0" TextWrapping="Wrap" Text="37" VerticalAlignment="Top" Width="54" LostFocus="LostFocusTB"/>

<TextBox x:Name="KoordinY_A" HorizontalAlignment="Left" Height="23" Margin="146,52,0,0" TextWrapping="Wrap" Text="-9" VerticalAlignment="Top" Width="54" LostFocus="LostFocusTB"/>

<TextBox x:Name="KoordinY_B" HorizontalAlignment="Left" Height="23" Margin="146,75,0,0" TextWrapping="Wrap" Text="17" VerticalAlignment="Top" Width="54" LostFocus="LostFocusTB"/>

<TextBox x:Name="KoordinY_D" HorizontalAlignment="Left" Height="23" Margin="146,98,0,0" TextWrapping="Wrap" Text="-9" VerticalAlignment="Top" Width="54" LostFocus="LostFocusTB"/>

<Button x:Name="Button1" Content="Расчёт" HorizontalAlignment="Left" Margin="243,49,0,0" VerticalAlignment="Top" Width="149" RenderTransformOrigin="0.427,0.455" Click="Button1_Click"/>

<ListBox x:Name="List" HorizontalAlignment="Left" Height="153" Margin="0,147,0,0" VerticalAlignment="Top" Width="626"/>

<Label Content="A" HorizontalAlignment="Left" Margin="10,49,0,0" VerticalAlignment="Top"/>

<Label Content="B" HorizontalAlignment="Left" Margin="10,73,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.623,0.128"/>

<Label Content="D" HorizontalAlignment="Left" Margin="10,98,0,0" VerticalAlignment="Top"/>

<Label Content="X" HorizontalAlignment="Left" Margin="68,21,0,0" VerticalAlignment="Top"/>

<Label Content="Y" HorizontalAlignment="Left" Margin="153,21,0,0" VerticalAlignment="Top"/>

<Button Content="Очистить" HorizontalAlignment="Left" Margin="243,73,0,0" VerticalAlignment="Top" Width="149" Click="Button2_Click"/>

<Button Content="Контрольный пример" HorizontalAlignment="Left" Margin="243,99,0,0" VerticalAlignment="Top" Width="149" Click="Button3_Click"/>

</Grid>

</Page>

Файл Page1.xaml.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Data;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Imaging;

using System.Windows.Navigation;

using System.Windows.Shapes;

namespace app1

{

/// <summary>

/// Логика взаимодействия для Page1.xaml

/// </summary>

public partial class Page1 : Page

{

public Page1()

{

InitializeComponent();

}

float ax = -8;

float bx = -8;

float dx = 37;

float ay = -9;

float by = 17;

float dy = -9;

private bool check()

{

bool result = true; // ошибок нет

float Number;

string Error = "";

if (float.TryParse(KoordinY_A.Text, out Number)) // проверка координаты Y точки А

{

if (float.Parse(KoordinY_A.Text) >= float.Parse(KoordinY_B.Text))

{

Error += "Координата Y точки A не может быть больше координаты Y точки В ";

KoordinY_A.Text = ay.ToString();

result = false;

}

if (float.Parse(KoordinY_A.Text) > float.Parse(KoordinY_D.Text))

{

Error += "Координата Y точки A не может быть больше координаты Y точки D";

KoordinY_A.Text = ay.ToString();

result = false;

}

}

else

{

result = false;

}

if (float.TryParse(KoordinY_B.Text, out Number)) // проверка координаты Y точки B

{

if (float.Parse(KoordinY_B.Text) <= float.Parse(KoordinY_A.Text))

{

Error += "Координата Y точки B не может быть меньше координаты Y точки А";

KoordinY_B.Text = by.ToString();

result = false;

}

if (float.Parse(KoordinY_B.Text) <= float.Parse(KoordinY_D.Text))

{

Error += "Координата Y точки B не может быть меньше координаты Y точки D";

KoordinY_B.Text = by.ToString();

result = false;

}

}

else

{

result = false;

}

if (float.TryParse(KoordinX_A.Text, out Number)) //проверка координаты Х точки А

{

if (float.Parse(KoordinX_A.Text) >= float.Parse(KoordinX_D.Text))

{

Error += "Координата X точки A не может быть больше координаты X точки D";

KoordinX_A.Text = ax.ToString();

result = false;

}

}

else

{

result = false;

}

if (float.TryParse(KoordinX_B.Text, out Number)) //проверка координаты Х точки B

{

if (float.Parse(KoordinX_B.Text) >= float.Parse(KoordinX_D.Text))

{

Error += "Координата X точки B не может быть больше координаты X точки D";

KoordinX_B.Text = bx.ToString();

result = false;

}

}

else

{

result = false;

}

if (float.TryParse(KoordinX_D.Text, out Number)) //проверка координаты Х точки Е

{

if ((float.Parse(KoordinX_D.Text) <= float.Parse(KoordinX_A.Text)) || (float.Parse(KoordinX_D.Text) <= float.Parse(KoordinX_B.Text)))

{

Error += "Координата X точки D не может быть меньше координаты X точки А и В";

KoordinX_D.Text = dx.ToString();

result = false;

}

}

else

{

result = false;

}

if (float.TryParse(KoordinY_D.Text, out Number)) // проверка координаты Y точки Е

{

if ((float.Parse(KoordinY_D.Text) < float.Parse(KoordinY_A.Text)))

{

Error += "Координата Y точки D не может быть меньше координаты Y точки А";

KoordinY_D.Text = dy.ToString();

result = false;

}

if ((float.Parse(KoordinY_D.Text) >= float.Parse(KoordinY_B.Text)))

{

Error += "Координата Y точки D не может быть больше координаты Y точки В";

KoordinY_D.Text = dy.ToString();

result = false;

}

}

else

{

result = false;

}

if (result == false)

{

MessageBox.Show(Error, "Введено некорректное значение координат", MessageBoxButton.OK, MessageBoxImage.Warning);

return result;

}

else

{

return result;

}

}

private void LostFocusTB(object sender, RoutedEventArgs ee)

{

TextBox EventTextBox = (TextBox)sender;

float Number = 0.0f;

string TextInTextBox = EventTextBox.Text.Replace(".", ",");

if (float.TryParse(TextInTextBox, out Number))

{

if (EventTextBox.Equals(KoordinX_A)) // проверка координаты X точки А

{

KoordinX_B.Text = KoordinX_A.Text;

ax = float.Parse(KoordinX_A.Text);

bx = float.Parse(KoordinX_B.Text);

}

if (EventTextBox.Equals(KoordinX_B)) // проверка координаты X точки B

{

KoordinX_A.Text = KoordinX_B.Text;

bx = float.Parse(KoordinX_B.Text);

ax = float.Parse(KoordinX_A.Text);

}

if (EventTextBox.Equals(KoordinX_D)) // проверка координаты X точки D

{

dx = float.Parse(KoordinX_D.Text);

}

if (EventTextBox.Equals(KoordinY_A)) // проверка координаты Y точки A

{

KoordinY_D.Text = ay.ToString();

dy = float.Parse(KoordinY_D.Text);

ay = float.Parse(KoordinY_A.Text);

}

if (EventTextBox.Equals(KoordinY_B)) // проверка координаты Y точки B

{

by = float.Parse(KoordinY_B.Text);

}

if (EventTextBox.Equals(KoordinY_D)) // проверка координаты Y точки D

{

ay = float.Parse(KoordinY_A.Text);

dy = float.Parse(KoordinY_D.Text);

KoordinY_A.Text = dy.ToString();

}

if (KoordinX_A.Text != "" && KoordinX_B.Text != "" && KoordinX_D.Text != "" && KoordinY_A.Text != ""

&& KoordinY_B.Text != "" && KoordinY_D.Text != "")

{

Button1.IsEnabled = true;

}

else

{

Button1.IsEnabled = false;

}

}

else

{

MessageBoxResult cur_result = MessageBox.Show("Введено некорректное значение координаты\n",

//"Будет поставлено предыдущее значение",

"Введено некорректное значение координаты", MessageBoxButton.OK,

MessageBoxImage.Exclamation);

if (cur_result == MessageBoxResult.OK)

{

if (EventTextBox.Equals(KoordinX_A))

{

KoordinX_A.Text = ax.ToString();

}

if (EventTextBox.Equals(KoordinX_B))

{

KoordinX_B.Text = bx.ToString();

}

if (EventTextBox.Equals(KoordinX_D))

{

KoordinX_D.Text = dx.ToString();

}

if (EventTextBox.Equals(KoordinY_A))

{

KoordinY_A.Text = ay.ToString();

}

if (EventTextBox.Equals(KoordinY_B))

{

KoordinY_B.Text = by.ToString();

}

if (EventTextBox.Equals(KoordinY_D))

{

KoordinY_D.Text = ay.ToString();

}

}

}

}

private void Button1_Click(object sender, RoutedEventArgs e)

{

if (check())

{

List.Items.Clear();

Point a = new Point(ax, ay);

Point b = new Point(bx, by);

Point d = new Point(dx, dy);

IceCream icecream = new IceCream(a, b, d);

float perc;

string one_line;

List.Items.Add("Кол-во точек " + "Попавшие точки " + "S Монте-Карло " + "Реальная S " + "Погрешность " + "Время расчёта, мc");

float square = icecream.realSquare();

for (int i = 3; i < 8; i++)

{

string space = " ";

int numberPoints = 0;

float rel_delta = 0;

float MK_Square = 0;

DateTime start_date_time = DateTime.Now;

MK_Square = icecream.MonteKarloSquare((int)Math.Pow(10, i), out numberPoints, out rel_delta);

DateTime end_date_time = DateTime.Now;

TimeSpan arv_time = end_date_time - start_date_time;

for (int j = 1; j < 9 - i; j++) { space += " "; }

perc = MK_Square / square;

if (perc >= 1) { perc = perc - 1; } else { perc = 1 - perc; }

one_line = Math.Pow(10, i) + space + " " + numberPoints.ToString() + space + " " + MK_Square.ToString(format: "F") + " " +

square.ToString(format: "F") + " " + perc.ToString(format: "P") + " " + arv_time.TotalMilliseconds;

List.Items.Add(one_line); //List.Items.Add("____________________________");

}

}

else { }

}

private void Button2_Click(object sender, RoutedEventArgs ee)

{

KoordinX_A.Text = KoordinX_B.Text =

KoordinX_D.Text = KoordinY_A.Text =

KoordinY_B.Text = KoordinY_D.Text = "";

Button1.IsEnabled = false;

}

private void Button3_Click(object sender, RoutedEventArgs ee)

{

ax = bx = -8;

dx = 37;

ay = dy = -9;

by = 17;

KoordinX_A.Text = ax.ToString();

KoordinX_B.Text = bx.ToString();

KoordinX_D.Text = dx.ToString();

KoordinY_A.Text = ay.ToString();

KoordinY_B.Text = by.ToString();

KoordinY_D.Text = dy.ToString();

Button1.IsEnabled = true;

}

}

}

Файл MonteKarlo.html (Файлы веб-приложения на базе ASP/Jscript)

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

<title>Расчет площади методом Монте-Карло</title>

<script>

function changeAX() {

document.getElementById("bx").value = document.getElementById("ax").value;

}

function changeBX() {

document.getElementById("ax").value = document.getElementById("bx").value;

}

function Reset() {

MonteKarlo.KoordinX_A.value = "";

MonteKarlo.KoordinX_B.value = "";

MonteKarlo.KoordinX_D.value = "";

MonteKarlo.KoordinY_A.value = "";

MonteKarlo.KoordinY_B.value = "";

MonteKarlo.KoordinY_D.value = "";

}

function Example() {

MonteKarlo.KoordinX_A.value = "10";

MonteKarlo.KoordinX_B.value = "10";

MonteKarlo.KoordinX_D.value = "40";

MonteKarlo.KoordinY_A.value = "0";

MonteKarlo.KoordinY_B.value = "10";

MonteKarlo.KoordinY_D.value = "0";

}

</script>

</script>

</head>

<body>

<form action="MonteKarlo.asp" method="POST" name="MonteKarlo">

<div id="container">

<img src="icecream2.jpg" width="50%" align="right">

<table border="2" width="49%" height="25%" bgcolor="Azure" bordercolor="Black">

<tr>

<th colspan="3">Координаты треугольника ABD</th>

</tr>

<tr>

<td width="14%">Точка А:</td>

<td width="43%"><input type="text" value="10" name="KoordinX_A" size="20" onchange="changeAX();" id="ax"></td>

<td width="43%"><input type="text" value="0" name="KoordinY_A" size="20" id="ay"></td>

</tr>

<tr>

<td width="14%">Точка B:</td>

<td width="43%"><input type="text" value="10" name="KoordinX_B" size="20" onchange="changeBX();" id="bx"></td>

<td width="43%"><input type="text" value="10" name="KoordinY_B" size="20" id="by"></td>

</tr>

<tr>

<td width="14%">Точка D:</td>

<td width="43%"><input type="text" value="40" name="KoordinX_D" size="20" id="ex"></td>

<td width="43%"><input type="text" value="0" name="KoordinY_D" size="20" id="ey"></td>

</tr>

<tr></tr>

</table>

<br></br>

<input type="submit" value="Расчитать" name="Okay" width="20%"></td>

<input type="button" value="Очистить" onclick="Reset()" name="Cancel" width="20%" id="Button2">

<input type="button" value="Контрольный пример" onclick="Example()" name="Cancel" width="20%" id="Button3">


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.