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

  • Вид работы:
    Дипломная (ВКР)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    855,94 Кб
  • Опубликовано:
    2016-02-16
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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

ВВЕДЕНИЕ


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

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

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

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

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

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

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

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

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

Вариант №29:

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

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

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

)        веб-приложение на базе 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 Требования к приложениям


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

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

·        вычислять площадь фигуры методом Монте-Карло, рассчитывать погрешность вычисления, а также измерять время расчета для каждого 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 ордината точки должна удовлетворять неравенству:



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 для обеспечения декларативной модели для программирования приложений.- это декларативный язык разметки. С точки зрения модели программирования .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 выполняются все функции по расчету требуемых параметров и вывод результатов. Ниже описаны все используемые клиентские функции.() - возвращает площадь полуокружности;

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

_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

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

KoordinX_A_TextChanged(object sender, EventArgs e)- проверка вводимых координат;_B_TextChanged(object sender, EventArgs e)- проверка вводимых координат;_E_TextChanged(object sender, EventArgs e)- проверка вводимых координат;_A_TextChanged(object sender, EventArgs e)- проверка вводимых координат;_B_TextChanged(object sender, EventArgs e)- проверка вводимых координат;_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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

Получите у человека, который разворачивает приложения, адрес и введите его в браузере. Пример адреса, который вам будет предоставлен - «#"863722.files/image028.gif">

Рис.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 ЕСПД. Текст программы. Требования к содержанию и оформлению.

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

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

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

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

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

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

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

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

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

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

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

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

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

ПРИЛОЖЕНИЕ

 

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

using System;System.Collections.Generic;System.Linq;System.Text;

//using System.Threading.Tasks;

WPF_MonteKarlo

{class Point

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

float PointX

{

{ return x; }

}float PointY

{

{ return y; }

}

}

Файл IceCream.cs

System;System.Collections.Generic;System.Linq;System.Text;

WPF_MonteKarlo

{IceCream

{abe;ab;abcd;(Point a, Point b, Point e)

{= new Triangle(a, b, e);= new Circle(a, b);= new Rectangle(ab.MinX, abe.MaxX, abe.MinY, abe.MaxY);

}bool PointInIceCream(Point randP)

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

{ return abe.PointInLines(randP);}

{ return ab.PointInCircle(randP); }

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

{

{ab.MinX;

}

}float maxX

{

{abe.MaxX;

}

}float minY

{

{abe.MinY;

}

}float maxY

{

{abe.MaxY;

}

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

{rand = new Random();= 0;

//DateTime start_date_time = DateTime.Now;(int k = 0; k < count; k++)

{p = new Point(minX + (float)(rand.NextDouble() * (maxX - minX)),+ (float)(rand.NextDouble() * (maxY - minY)));(PointInIceCream(p))

{++;

}

}

//DateTime end_date_time = DateTime.Now;MK_Square = abcd.Square() * ((float)numberPoints / (float)count);_delta = (float)Math.Round((Math.Abs((MK_Square - realSquare()) * 100) / realSquare()) * 10000) / (float)10000.0;MK_Square;

}

}

Triangle

{a, b, e;k1;k2;(Point p1, Point p2, Point p3)

{= p1; b = p2; e = p3;= (e.PointY - a.PointY) / (e.PointX - a.PointX);= (e.PointY - b.PointY) / (e.PointX - b.PointX);

}

float Square()

{

ab = (float)Math.Sqrt(Math.Pow((a.PointX - b.PointX), 2) + Math.Pow((a.PointY - b.PointY), 2));ae = (float)Math.Sqrt(Math.Pow((a.PointX - e.PointX), 2) + Math.Pow((a.PointY - e.PointY), 2));be = (float)Math.Sqrt(Math.Pow((b.PointX - e.PointX), 2) + Math.Pow((b.PointY - e.PointY), 2));polperim = (ab + ae + be) / 2.0f;(float)Math.Sqrt((polperim * (polperim - ab) * (polperim - ae) * (polperim - be)));

}

bool PointInLines(Point p)

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

{true;

}

{false;

}

}

float MaxX

{

{e.PointX;

}

}

float MinY

{

{a.PointY;

}

}

float MaxY

{

{b.PointY;

}

}

}Circle

{Centr;r;(Point p1, Point p2)

{= (p2.PointY - p1.PointY) / 2;= new Point(p1.PointX, p1.PointY + r);

}

float Square()

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

}

bool PointInCircle(Point p1)

{(p1.PointX < Centr.PointX)

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

}{ return false; }

}

float MinX

{

{Centr.PointX - r;

}

}

Point CentrPoint

{

{Centr;

}

}

}

Rectangle

{MinX, MaxX, MinY, MaxY;(float MiX, float MaX, float MiY, float MaY)

{= MiX;= MaX;= MiY;= MaY;

}float Square()

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

}

}

}

Файл Page1.xaml

<Page x:Class="app1.Page1"="http://schemas.microsoft.com/winfx/2006/xaml/presentation":x="http://schemas.microsoft.com/winfx/2006/xaml":mc="http://schemas.openxmlformats.org/markup-compatibility/2006":d="http://schemas.microsoft.com/expression/blend/2008":Ignorable="d":DesignHeight="300" d:DesignWidth="300"="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

System;System.Collections.Generic;System.Linq;System.Text;System.Threading.Tasks;System.Windows;System.Windows.Controls;System.Windows.Data;System.Windows.Documents;System.Windows.Input;System.Windows.Media;System.Windows.Media.Imaging;System.Windows.Navigation;System.Windows.Shapes;

app1

{

/// <summary>

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

/// </summary>partial class Page1 : Page

{Page1()

{();

}

ax = -8;bx = -8;dx = 37;ay = -9;by = 17;dy = -9;

bool check()

{result = true; // ошибок нетNumber;Error = "";

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

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

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

KoordinY_A.Text = ay.ToString();= false;

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

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

KoordinY_A.Text = ay.ToString();= false;

}

}

{= false;

}

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

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

{

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

KoordinY_B.Text = by.ToString();= false;

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

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

KoordinY_B.Text = by.ToString();= false;

}

}

{= false;

}

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

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

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

KoordinX_A.Text = ax.ToString();= false;

}

}

{= false;

}

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

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

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

KoordinX_B.Text = bx.ToString();= false;

}

}

{= false;

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

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

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

KoordinX_D.Text = dx.ToString();= false;

}

}

{= false;

}

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

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

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

KoordinY_D.Text = dy.ToString();= false;

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

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

KoordinY_D.Text = dy.ToString();= false;

}

}

{= false;

}(result == false)

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

}

{result;

}

}

void LostFocusTB(object sender, RoutedEventArgs ee)

{EventTextBox = (TextBox)sender;Number = 0.0f;TextInTextBox = EventTextBox.Text.Replace(".", ",");(float.TryParse(TextInTextBox, out Number))

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

{_B.Text = KoordinX_A.Text;= float.Parse(KoordinX_A.Text);= float.Parse(KoordinX_B.Text);

}

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

{_A.Text = KoordinX_B.Text;= float.Parse(KoordinX_B.Text);= float.Parse(KoordinX_A.Text);

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

{= float.Parse(KoordinX_D.Text);

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

{_D.Text = ay.ToString();= float.Parse(KoordinY_D.Text);= float.Parse(KoordinY_A.Text);

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

{= float.Parse(KoordinY_B.Text);

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

{= float.Parse(KoordinY_A.Text);= float.Parse(KoordinY_D.Text);_A.Text = dy.ToString();

}

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

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

{.IsEnabled = true;

}

{.IsEnabled = false;

}

}

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

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

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

MessageBoxImage.Exclamation);(cur_result == MessageBoxResult.OK)

{(EventTextBox.Equals(KoordinX_A))

{_A.Text = ax.ToString();

}(EventTextBox.Equals(KoordinX_B))

{_B.Text = bx.ToString();

}(EventTextBox.Equals(KoordinX_D))

{_D.Text = dx.ToString();

}(EventTextBox.Equals(KoordinY_A))

{_A.Text = ay.ToString();

}(EventTextBox.Equals(KoordinY_B))

{_B.Text = by.ToString();

}(EventTextBox.Equals(KoordinY_D))

{_D.Text = ay.ToString();

}

}

}

}void Button1_Click(object sender, RoutedEventArgs e)

{(check())

{.Items.Clear();a = new Point(ax, ay);b = new Point(bx, by);d = new Point(dx, dy);icecream = new IceCream(a, b, d);perc;one_line;

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

float square = icecream.realSquare();(int i = 3; i < 8; i++)

{space = " ";numberPoints = 0;rel_delta = 0;MK_Square = 0;start_date_time = DateTime.Now;_Square = icecream.MonteKarloSquare((int)Math.Pow(10, i), out numberPoints, out rel_delta);end_date_time = DateTime.Now;arv_time = end_date_time - start_date_time;(int j = 1; j < 9 - i; j++) { space += " "; }= MK_Square / square;(perc >= 1) { perc = perc - 1; } else { perc = 1 - perc; }_line = Math.Pow(10, i) + space + " " + numberPoints.ToString() + space + " " + MK_Square.ToString(format: "F") + " " +.ToString(format: "F") + " " + perc.ToString(format: "P") + " " + arv_time.TotalMilliseconds;.Items.Add(one_line); //List.Items.Add("____________________________");

}

}{ }

}void Button2_Click(object sender, RoutedEventArgs ee)

{_A.Text = KoordinX_B.Text =_D.Text = KoordinY_A.Text =_B.Text = KoordinY_D.Text = "";.IsEnabled = false;

}

void Button3_Click(object sender, RoutedEventArgs ee)

{= bx = -8;= 37;= dy = -9;= 17;

_A.Text = ax.ToString();_B.Text = bx.ToString();_D.Text = dx.ToString();_A.Text = ay.ToString();_B.Text = by.ToString();_D.Text = dy.ToString();.IsEnabled = true;

}

}

}

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



<html>

<head>

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

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

<script>changeAX() {.getElementById("bx").value = document.getElementById("ax").value;

}changeBX() {.getElementById("ax").value = document.getElementById("bx").value;

}Reset() {.KoordinX_A.value = "";.KoordinX_B.value = "";.KoordinX_D.value = "";.KoordinY_A.value = "";.KoordinY_B.value = "";.KoordinY_D.value = "";

}Example() {.KoordinX_A.value = "10";.KoordinX_B.value = "10";.KoordinX_D.value = "40";.KoordinY_A.value = "0";.KoordinY_B.value = "10";.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">

<br></br>

<table border="1">

<tr>

<td>Число точек</td>

<td>Число попавших точек</td>

<td>Площадь Монте-Карло</td>

<td>Точная площадь</td>

<td>Относительная погрешность, %</td>

<td>Время вычисления, мс</td>

</tr>

</table>

</div>

</form>

</body>

</html>

Файл MonteKarlo.asp

<%@ LANGUAGE = "JScript" %>

<% Server.ScriptTimeOut =210%>

<html>

<head>

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

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

<script>Reset()

{.KoordinX_A.value = "";.KoordinX_B.value = "";.KoordinX_D.value = "";.KoordinY_A.value = "";.KoordinY_B.value = "";.KoordinY_D.value = "";

}Example()

{.KoordinX_A.value = "10";.KoordinX_B.value = "10";.KoordinX_D.value = "40";.KoordinY_A.value = "0";.KoordinY_B.value = "10";.KoordinY_D.value = "0";

}

</script>

<%xa=Request.Form("KoordinX_A");ya=Request.Form("KoordinY_A");xb=Request.Form("KoordinX_B");yb=Request.Form("KoordinY_B");xd=Request.Form("KoordinX_D");yd=Request.Form("KoordinY_D");

Radius = (yb-ya)/2;CentrX = xa;CentrY = ya+Radius;minX = xa - (yb-ya);maxX = xd;minY = ya;maxY = yb;

RectangleSquare = ((maxX-minX)*(maxY-minY));;pointsCount = 0;totalPoints = 0;t;mca;precission = 0;

CircleSquare()

{(Math.PI*Math.pow(Radius,2))/2;

}

TriangleSquare()

{ab = Math.sqrt(Math.pow(xa-xb,2)+Math.pow(ya-yb,2));ad = Math.sqrt(Math.pow(xa-xd,2)+Math.pow(ya-yd,2));bd = Math.sqrt(Math.pow(xd-xb,2)+Math.pow(yd-yb,2));polperim = (ab + ad + bd)/2;

Math.sqrt(polperim*(polperim-ab)*(polperim-ad)*(polperim-bd)) ;

}

PointInTriangle(x, y)

{a = (x - xa) * (xa - yb) - (xa - xb) * (y - ya);b = (x - xb) * (yb - yd) - (xb - xd) * (y - yb);c = (x - xd) * (yd - ya) - (xd - xa) * (y - yd);

((a >= 0 && b >= 0 && c >= 0) || (a <= 0 && b <= 0 && c <= 0));

}PointInCirle(x,y)

{(x < (CentrX))

{((Math.pow(x - CentrX, 2) + Math.pow(y - CentrY, 2)) <= Math.pow(Radius, 2));

}{ return false; }

}

PointInIceCream(x,y)

{(x>CentrX)

{PointInTriangle(x,y);

}

{PointInCirle(x,y);

}

}increment(i) {1000 * Math.pow(10, i);

}

area()

{CircleSquare() + TriangleSquare();

}Calculate(amountPoints) {startTime = new Date;

= 0;(var i = 0; i < amountPoints; i++)

{x = Math.random() * (maxX - minX) + minX;y = Math.random() * (maxY - minY) + minY;(PointInIceCream(x,y))

{++;

}

endTime = new Date;= (endTime.getTime() - startTime.getTime()) / 1000;

= RectangleSquare*(pointsCount/amountPoints);= Math.abs(((mca - area()) / area()) * 100);

}

%>

</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 = <%=xa%> name="KoordinX_A" size="20"></td>

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

</tr>

<tr>

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

<td width="43%"><input type="text" value = <%=xb%> name="KoordinX_B" size="20"></td>

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

</tr>

<tr>

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

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

<td width="43%"><input type="text" value = <%=yd%> name="KoordinY_D" size="20"></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">

<br></br>

<table border = "1">

<tr>

<td>Число точек</td>

<td>Число попавших точек</td>

<td>Площадь Монте-Карло</td>

<td>Точная площадь</td>

<td>Относительная погрешность, %</td>

<td>Время вычисления, мс</td>

</tr>

<%for (var i = 3; i < 8; i++) {= Math.pow(10,i);(totalPoints);

%>

<tr>

<td><%=totalPoints%></td>

<td><%=pointsCount %></td>

<td><%=mca.toFixed(4)%></td>

<td><%=area().toFixed(4)%></td>

<td><%=precission.toFixed(4) %></td>

<td><%=t %></td>

</tr>

<% } %>

</table>

</div>

</form>

</body>

</html>

Файл Point (Файлы веб-приложения на базе WPF/ASMX/C#)

using System;System.Collections.Generic;System.Web;

/// <summary>

/// Сводное описание для Point

/// </summary>class Point

{Point()

{

//

// TODO: добавьте логику конструктора

//

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

float PointX

{

{ return x; }

}float PointY

{

{ return y; }

}

}

Файл IceCream.cs

using System;System.Collections.Generic;System.Web;

/// <summary>

/// Сводное описание для IceCream

/// </summary>

///WSMK

{class IceCream

{abe;ab;abcd;()

{

}IceCream(Point a, Point b, Point e)

{= new Triangle(a, b, e);= new Circle(a, b);= new Rectangle(ab.MinX, abe.MaxX, abe.MinY, abe.MaxY);

}bool PointInIceCream(Point randP)

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

{ return abe.PointInLines(randP); }

{ return ab.PointInCircle(randP); }

}

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

float minX

{

{ab.MinX;

}

}float maxX

{

{abe.MaxX;

}

}float minY

{

{abe.MinY;

}

}float maxY

{

{abe.MaxY;

}

}

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

{rand = new Random();= 0;

//DateTime start_date_time = DateTime.Now;(int k = 0; k < count; k++)

{p = new Point(minX + (float)(rand.NextDouble() * (maxX - minX)),+ (float)(rand.NextDouble() * (maxY - minY)));(PointInIceCream(p))

{++;

}

}

//DateTime end_date_time = DateTime.Now;MK_Square = abcd.Square() * ((float)numberPoints / (float)count);_delta = (float)Math.Round((Math.Abs((MK_Square - realSquare()) * 100) / realSquare()) * 10000) / (float)10000.0;MK_Square;

}

}

Triangle

{a, b, e;k1;k2;(Point p1, Point p2, Point p3)

{= p1; b = p2; e = p3;= (e.PointY - a.PointY) / (e.PointX - a.PointX);= (e.PointY - b.PointY) / (e.PointX - b.PointX);

}

float Square()

{

ab = (float)Math.Sqrt(Math.Pow((a.PointX - b.PointX), 2) + Math.Pow((a.PointY - b.PointY), 2));ae = (float)Math.Sqrt(Math.Pow((a.PointX - e.PointX), 2) + Math.Pow((a.PointY - e.PointY), 2));be = (float)Math.Sqrt(Math.Pow((b.PointX - e.PointX), 2) + Math.Pow((b.PointY - e.PointY), 2));polperim = (ab + ae + be) / 2.0f;(float)Math.Sqrt((polperim * (polperim - ab) * (polperim - ae) * (polperim - be)));

}bool PointInLines(Point p)

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

{true;

}

{false;

}

}

float MaxX

{

{e.PointX;

}

}float MinY

{

{a.PointY;

}

}

float MaxY

{

{b.PointY;

}

}

}

Circle

{Centr;r;(Point p1, Point p2)

{= (p2.PointY - p1.PointY) / 2;= new Point(p1.PointX, p1.PointY + r);

}float Square()

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

}bool PointInCircle(Point p1)

{(p1.PointX < Centr.PointX)

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

}{ return false; }

}

float MinX

{

{Centr.PointX - r;

}

}

Point CentrPoint

{

{Centr;

}

}

}Rectangle

{MinX, MaxX, MinY, MaxY;(float MiX, float MaX, float MiY, float MaY)

{= MiX;= MaX;= MiY;= MaY;

}float Square()

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

}

}

}

Файл WebServiceMK.asmx

<%@ WebService Language="C#" CodeBehind="~/App_Code/WS_MonteKarlo.cs" Class="WSMK.WS_MonteKarlo" %>

Файл WebServiceMK.cs

using System;System.Collections.Generic;System.Web;System.Web.Services;

//[WebService(Namespace = "http://tempuri.org/")]

//[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

WSMK

{class WS_MonteKarlo : System.Web.Services.WebService

{

public WS_MonteKarlo()

{

//Раскомментируйте следующую строку в случае использования сконструированных компонентов

//InitializeComponent();

}

[WebMethod]float 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)

{a = new Point(ax, ay);b = new Point(bx, by);e = new Point(ex, ey);= DateTime.Now;icecream = new IceCream(a, b, e);montekarloSquare = icecream.MonteKarloSquare(count, out numberPoints, out real_delta);= icecream.realSquare();= DateTime.Now;montekarloSquare;

}

}

Файл MainWindow.aspx


<Page x:Class="app3.Page1"="http://schemas.microsoft.com/winfx/2006/xaml/presentation":x="http://schemas.microsoft.com/winfx/2006/xaml":mc="http://schemas.openxmlformats.org/markup-compatibility/2006":d="http://schemas.microsoft.com/expression/blend/2008":Ignorable="d":DesignHeight="300" d:DesignWidth="300"="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 x:Name="Button2" Content="Очистить" HorizontalAlignment="Left" Margin="243,73,0,0" VerticalAlignment="Top" Width="149" Click="Button2_Click"/>

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

</Grid>

</Page>

Файл MainWindow.aspx.cs

using System;System.Collections.Generic;System.Linq;System.Text;System.Threading.Tasks;System.Windows;System.Windows.Controls;System.Windows.Data;System.Windows.Documents;System.Windows.Input;System.Windows.Media;System.Windows.Media.Imaging;System.Windows.Navigation;System.Windows.Shapes;System.Threading;app3.ServiceReference1;

app3

{

/// <summary>

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

/// </summary>partial class Page1 : Page

{Page1()

{();

}

_MonteKarloSoapClient newMK = new WS_MonteKarloSoapClient();delegate float DelegateWithParameters(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);ax = -8;bx = -8;dx = 37;ay = -9;by = 17;dy = -9;

bool check()

{result = true; // ошибок нетNumber;Error = "";

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

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

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

KoordinY_A.Text = ay.ToString();= false;

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

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

KoordinY_A.Text = ay.ToString();= false;

}

}

{= false;

}

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

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

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

KoordinY_B.Text = by.ToString();= false;

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

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

KoordinY_B.Text = by.ToString();= false;

}

}

{= false;

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

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

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

KoordinX_A.Text = ax.ToString();= false;

}

}

{= false;

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

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

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

KoordinX_B.Text = bx.ToString();= false;

}

}

{= false;

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

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

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

KoordinX_D.Text = dx.ToString();= false;

}

}

{= false;

}

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

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

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

KoordinY_D.Text = dy.ToString();= false;

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

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

KoordinY_D.Text = dy.ToString();= false;

}

}

{= false;

}(result == false)

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

}

{result;

}

}

void LostFocusTB(object sender, RoutedEventArgs ee)

{EventTextBox = (TextBox)sender;Number = 0.0f;TextInTextBox = EventTextBox.Text.Replace(".", ",");(float.TryParse(TextInTextBox, out Number))

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

{_B.Text = KoordinX_A.Text;= float.Parse(KoordinX_A.Text);= float.Parse(KoordinX_B.Text);

}

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

{_A.Text = KoordinX_B.Text;= float.Parse(KoordinX_B.Text);= float.Parse(KoordinX_A.Text);

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

{= float.Parse(KoordinX_D.Text);

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

{_D.Text = ay.ToString();= float.Parse(KoordinY_D.Text);= float.Parse(KoordinY_A.Text);

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

{

= float.Parse(KoordinY_B.Text);

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

{= float.Parse(KoordinY_A.Text);= float.Parse(KoordinY_D.Text);_A.Text = dy.ToString();

}

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

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

{.IsEnabled = true;

}

{.IsEnabled = false;

}

}

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

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

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

MessageBoxImage.Exclamation);(cur_result == MessageBoxResult.OK)

{(EventTextBox.Equals(KoordinX_A))

{_A.Text = ax.ToString();

}(EventTextBox.Equals(KoordinX_B))

{_B.Text = bx.ToString();

}(EventTextBox.Equals(KoordinX_D))

{_D.Text = dx.ToString();

}(EventTextBox.Equals(KoordinY_A))

{_A.Text = ay.ToString();

}(EventTextBox.Equals(KoordinY_B))

{_B.Text = by.ToString();

}(EventTextBox.Equals(KoordinY_D))

{_D.Text = ay.ToString();

}

}

}

}

void Button1_Click(object sender, RoutedEventArgs e)

{(check())

{

delFoo = new DelegateWithParameters(newMK.MK_Square);.Items.Clear();one_line;

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

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

{space = " ";numberPoints = 0;rel_delta = 0;square = 0;count = (int)Math.Pow(10, i);start;end;.Visibility = Visibility.Hidden;MKtag = delFoo.BeginInvoke(ax, ay, bx, by, dx, dy, count, out numberPoints, out rel_delta, out square, out start, out end, null, null);MKResult = delFoo.EndInvoke(out numberPoints, out rel_delta, out square, out start, out end, MKtag);arv_time = end - start;(int j = 1; j < 9 - i; j++) { space += " "; }_line = Math.Pow(10, i) + space + " " + numberPoints.ToString() + space + " " + MKResult.ToString(format: "F") + " " +.ToString(format: "F") + " " + rel_delta.ToString(format: "F") + "% " + arv_time.TotalMilliseconds;.Items.Add(one_line); //List.Items.Add("____________________________");.Visibility = Visibility.Visible;

}

}{ }

}void Button2_Click(object sender, RoutedEventArgs ee)

{_A.Text = KoordinX_B.Text =_D.Text = KoordinY_A.Text =_B.Text = KoordinY_D.Text = "";.IsEnabled = false;

}

void Button3_Click(object sender, RoutedEventArgs ee)

{= bx = -8;= 37;= dy = -9;= 17;

_A.Text = ax.ToString();_B.Text = bx.ToString();_D.Text = dx.ToString();_A.Text = ay.ToString();_B.Text = by.ToString();_D.Text = dy.ToString();.IsEnabled = true;

}

}

}

[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/MK_Square", ReplyAction="*")].Threading.Tasks.Task<app3.ServiceReference1.MK_SquareResponse> MK_SquareAsync(app3.ServiceReference1.MK_SquareRequest request);

}

[System.Diagnostics.DebuggerStepThroughAttribute()]

[System.ServiceModel.MessageContractAttribute(WrapperName="MK_Square", WrapperNamespace="http://tempuri.org/", IsWrapped=true)]partial class MK_SquareRequest {

[System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://tempuri.org/", Order=0)]float ax;

[System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://tempuri.org/", Order=1)]float ay;

[System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://tempuri.org/", Order=2)]float bx;

[System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://tempuri.org/", Order=3)]float by;

[System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://tempuri.org/", Order=4)]float ex;

[System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://tempuri.org/", Order=5)]float ey;

[System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://tempuri.org/", Order=6)]int count;MK_SquareRequest() {

}

MK_SquareRequest(float ax, float ay, float bx, float by, float ex, float ey, int count) {.ax = ax;.ay = ay;.bx = bx;.by = by;.ex = ex;.ey = ey;.count = count;

}

}

[System.Diagnostics.DebuggerStepThroughAttribute()]

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]

[System.ServiceModel.MessageContractAttribute(WrapperName="MK_SquareResponse", WrapperNamespace="http://tempuri.org/", IsWrapped=true)]partial class MK_SquareResponse {

[System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://tempuri.org/", Order=0)]float MK_SquareResult;

[System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://tempuri.org/", Order=1)]int numberPoints;

[System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://tempuri.org/", Order=2)]float real_delta;

[System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://tempuri.org/", Order=3)]float realsquare;

[System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://tempuri.org/", Order=4)]System.DateTime start;

[System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://tempuri.org/", Order=5)]System.DateTime end;MK_SquareResponse() {

}MK_SquareResponse(float MK_SquareResult, int numberPoints, float real_delta, float realsquare, System.DateTime start, System.DateTime end) {.MK_SquareResult = MK_SquareResult;.numberPoints = numberPoints;.real_delta = real_delta;.realsquare = realsquare;.start = start;.end = end;

}

}

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]interface WS_MonteKarloSoapChannel : app3.ServiceReference1.WS_MonteKarloSoap, System.ServiceModel.IClientChannel {

}

[System.Diagnostics.DebuggerStepThroughAttribute()]

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]partial class WS_MonteKarloSoapClient : System.ServiceModel.ClientBase<app3.ServiceReference1.WS_MonteKarloSoap>, app3.ServiceReference1.WS_MonteKarloSoap {WS_MonteKarloSoapClient() {

}

WS_MonteKarloSoapClient(string endpointConfigurationName) :(endpointConfigurationName) {

}

WS_MonteKarloSoapClient(string endpointConfigurationName, string remoteAddress) :(endpointConfigurationName, remoteAddress) {

}

WS_MonteKarloSoapClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :(endpointConfigurationName, remoteAddress) {

}WS_MonteKarloSoapClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :(binding, remoteAddress) {

}

[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)].ServiceReference1.MK_SquareResponse app3.ServiceReference1.WS_MonteKarloSoap.MK_Square(app3.ServiceReference1.MK_SquareRequest request) {base.Channel.MK_Square(request);

}float 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 System.DateTime start, out System.DateTime end) {.ServiceReference1.MK_SquareRequest inValue = new app3.ServiceReference1.MK_SquareRequest();.ax = ax;.ay = ay;.bx = bx;.by = by;.ex = ex;.ey = ey;.count = count;.ServiceReference1.MK_SquareResponse retVal = ((app3.ServiceReference1.WS_MonteKarloSoap)(this)).MK_Square(inValue);= retVal.numberPoints;_delta = retVal.real_delta;= retVal.realsquare;= retVal.start;= retVal.end;retVal.MK_SquareResult;

}System.Threading.Tasks.Task<app3.ServiceReference1.MK_SquareResponse> MK_SquareAsync(app3.ServiceReference1.MK_SquareRequest request) {base.Channel.MK_SquareAsync(request);

}

}

}


Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!