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

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

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

МИНОБРНАУКИ РОССИИ

Федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

«Тульский государственный университет»

Кафедра вычислительной техники






ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовой работе по дисциплине «Технологии программирования»

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

ВЕБ-ТЕХНОЛОГИЙ

Автор работы:

студент гр. 622121

Сальников В.В.

Руководитель работы:

ВТ Берсенев Г. Б.


Тула 2014

Введение


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

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

Одной из технологий создания веб-приложений является ASP.NET Web Forms. Это технология создания веб-приложений от компании Microsoft. Она является составной частью платформы Microsoft.NET и развитием более старой технологии Microsoft ASP. На данный момент последней версией этой технологии является ASP.NET 5. ASP.NET внешне во многом сохраняет схожесть с более старой технологией ASP, что позволяет разработчикам относительно легко перейти на ASP.NET. В то же время внутреннее устройство ASP.NET существенно отличается от ASP, поскольку она основана на платформе.NET и, следовательно, использует все новые возможности, предоставляемые этой платформой. Вторая технология в рамках создания веб-приложений это ASP.NET MVC. Обе эти технологии полностью поддерживаются в.NET Framework 4.0 и продолжают развиваться. Они имеют свои достоинства и недостатки. При выборе одной из них следует обратить внимание на значительное различие между концепциями разработки. В ходе выполнения этой работы будет использоваться технология ASP.NET Web Forms.

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

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

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


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

Вариант №14:

)        геометрическая фигура: ambe (рисунок 1);

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

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

)        веб-приложение на базе WebForm/ASMX/C# (тип клиента - синхронный).

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

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

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

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

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

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

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

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

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

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


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

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

·        ввод координат вручную;

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

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

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

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

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

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

В диаграмме использовались следующие типы отношений: расширение («расширить»), включение («включить») и наследование. Отношение расширения (Extend Relationship) определяет взаимосвязь базового варианта использования с другим вариантом использования, функциональное поведение которого задействуется базовым не всегда, а только при выполнении дополнительных условий. Отношение включения (Include Relationship) также является разновидностью отношения зависимости, но устанавливается только между двумя вариантами использования и указывает на то, что заданное поведение для одного варианта использования включается в качестве составного фрагмента в последовательность поведения другого варианта использования. Отношение наследования (Generalization Relationship) представляет собой связь между общей сущностью, называемой родителем, и более специализированной разновидностью этой сущности, называемой потомком. Потомок наследует все свойства и поведение своего родителя, но потомок может иметь собственное поведение и свойства.

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


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

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

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

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

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

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

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

·        тип: настольное приложение;

·        графический интерфейс WPF;

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

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

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

·        язык скрипта: Jscript;

·        язык разметки: HTML;

·        клиентская часть: страница с HTML разметкой;

·        серверная часть: активная страница ASP со скриптом на языке JScript.

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

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

·        интерфейс: страница WebForm с графическим интерфейсом;

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

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

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


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


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

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

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

.

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

.

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


Имеем фигуру ambe и произвольную точку P(xp,yp), лежащие в одной плоскости. Требуется определить, принадлежит ли точка P(xp,yp) фигуре ambe, если известны координаты фигуры abe и координаты точки Р.

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

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

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

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

Чтобы определить попала ли точка в треугольник, необходимо составить уравнения прямых ae и be.

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

, где .

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

, где .

Точка находится в треугольнике, если .

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


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


Для создания настольного приложения была выбрана интегрированная среда разработки Microsoft Visual Studio 2013. Так как это новейшая IDE от Microsoft поддерживающая разработку клиентских приложений на языке C#. Visual Studio - включает интегрированную среду разработки программного обеспечения и ряд других инструментальных средств, обеспечивающих в совокупности высокое качество кода на протяжении всего цикла жизни ПО, от проектирования до внедрения. Данные продукты позволяют разрабатывать как консольные приложения, так и приложения с графическим интерфейсом, в том числе с поддержкой технологии Windows Forms, а также веб-сайты, веб-приложения, веб-службы как в родном, так и в управляемом кодах для всех платформ, поддерживаемых Microsoft. # - является языком программирования, который разработан для создания множества приложений, работающих в среде.NET Framework. Язык C# прост, типобезопасен и объектно-ориентирован. Благодаря множеству нововведений C# обеспечивает возможность быстрой разработки приложений, но при этом сохраняет выразительность и элегантность, присущую С-подобным языкам.C# - это реализация языка C# корпорацией Майкрософт. Поддержка Visual C# в Visual Studio обеспечивается с помощью полнофункционального редактора кода, компилятора, шаблонов проектов, конструкторов, мастеров кода, мощного и удобного отладчика и многих других средств. Библиотека классов.NET Framework предоставляет доступ ко многим службам операционной системы и к другим полезным, хорошо спроектированным классам, что существенно ускоряет цикл разработки.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_MonteKarlo. Проект содержит и использует следующие классы:

·        PointF;

·        Triangle;

·        Circle;

·        Rectangle;

·        IceCream.

Для иллюстрации взаимосвязи классов создана карта кода, представленная на рис. 3.

Рис. 3. Карта кода проекта WPF_MonteKarlo

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

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

Класс MainWindow содержит следующий конструктор:() - вызывает инициализацию компонентов формы.

Класс MainWindow содержит следующие методы:_Click(object sender, RoutedEventArgs e):void - обработчик события нажатия на кнопку Button1, вызывает метод check класса MainWindow, CalkMKSquareThead класса MainWindow;_Click(object sender, RoutedEventArgs e):void - обработчик события нажатия на кнопку Button2, очищает поля для ввода координат;_Click(object sender, RoutedEventArgs e):void - обработчик события нажатия на кнопку Button3, инициализирует точки, необходимые для контрольного примера, заполняет поля для ввода координат;(IceCream icecream):void - инициализирует старт многопоточной обработки: 1) вызов метода MonteKarloSquare(int count, out int numberPoints, out int rel_delta) 2) вывод результатов вычисления;():bool - проверка введенных координат; ():void - изменение введенных координат.

Для работы с точками используется стандартный класс платформы.NET Framework 4.5 PointF пространства имен System.Drawing. Данный класс предоставляет упорядоченную пару координат Х и Y с плавающей запятой, определяющую точку на двумерной плоскости. Диаграмма класса PointF представлена на рис. 5.

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

Класс PointF содержит следующий конструктор:(float x, float y) - инициализирует новый экземпляр класса PointF с указанными координатами.

Класс PointF содержит следующие свойства:- получает значение, определяющее, пуст ли класс PointF;:float - получает или задает координату Х точки PointF;:float - получает или задает координату Y точки PointF.

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

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

Класс Circle содержит следующий конструктор:(PointF a, PointF b) - инициализация полуокружности по двум точкам.

Класс Circle содержит следующие свойства::PointF - центр полуокружности;:float - минимальный х геометрической фигуры.

Класс Circle содержит следующие методы:():float - возвращает площадь полуокружности;(PointF p):bool - проверяет попадание точки в полуокружность.

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

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

Класс Triangle содержит следующий конструктор:(PointF a1, PointF b1, PointF e1) - инициализация треугольника по трем точкам.

Класс Triangle содержит следующие свойства::float - максимальный х геометрической фигуры;:float - максимальный y геометрической фигуры;: float - минимальный y геометрической фигуры.

Класс Triangle содержит следующие методы:(PointF P): bool - проверяет попадание точки в треугольник;(): float - возвращает площадь треугольника.

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

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

Класс Rectangle содержит следующий конструктор:(float MiX, float MaX, float MiY, float MaY)- инициализирует прямоугольник по четырем точкам.

Класс Rectangle содержит следующие методы:():float - возвращает площадь прямоугольника.

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

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

Класс IceCream содержит следующий конструктор:(PointF a, PointF b, PointF e)- инициализирует полуокружность ab, треугольник abe и прямоугольник abcd.

Класс IceCream содержит следующие свойства::float - максимальный x геометрической фигуры;:float - максимальный y геометрической фигуры;:float - минимальный x геометрической фигуры;:float - минимальный y геометрической фигуры.

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

4.3    Структура программы


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

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

·        MainWindow.xaml содержит код разметки формы;

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

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


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

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

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

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

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

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

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

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

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


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

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

5. Веб-приложение на базе ASP/JSCRIPT

 

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

веб приложение программный площадь

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

Данное приложение реализуется с помощью языков скриптов - JScript и JavaScript. В качестве интерпретатора скриптов использовался IIS. Разработка приложения велась в NotePad++.

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

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

Ввод данных (координат вершин фигуры, площадь которой необходимо посчитать) осуществляется на странице MonteKarlo.html. При нажатии кнопки «Расчитать» типа submit, введенные данные будут отправлены с помощью метода 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)- проверяет попадание точки (x,y) в треугольник;

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

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

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

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

 

.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 или выше.

 

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


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

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

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


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

.NET - это технология для разработки веб-приложений, которая построена поверх.NET, что позволяет ей использовать огромное количество готовых классов при разработке. Существует несколько фреймворков, которые обогащают технологию, такие как ASP.NET MVC, ASP.NET WebForms и WebMatrix. В данной курсовой работе третье приложение написано на основе технологии ASP.NET WebForms..NET WebForms - это технология разработки веб-приложений, основная цель которой - сделать веб-разработку такой же простой и визуальной, как и разработку оконных приложений.

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

Используя VisualStudio, можно создавать веб-формы ASP.NET в интегрированной среде разработки с широкими возможностями. Например, вы можете перетаскивать серверные элементы управления для компоновки страницы с веб-формами. Можно с легкостью устанавливать свойства для элементов управления, описывать события взаимодействия с ними. Для написания серверного кода для обработки логики страницы можно использовать язык.NET, такой как VisualBasic или C# (в данной курсовой работе используется C#).

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


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

Рис. 12. Диаграмма класса WS_MonteKarlo веб-сервиса

Класс WS_MonteKarlo содержит следующие методы:_Square(PointF a, PointF b,PointF e, 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.

Класс IceCream использует классы PointF, Circle, Triangle, Rectangle. Структуру и диаграммы этих классов можно посмотреть в пункте 4.2.

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


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

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

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

Класс WBFClientMK содержит следующие методы:_Click(object sender, RoutedEventArgs e):void - обработчик события нажатия на кнопку Button1, вызывает метод MK_Square веб-сервиса WebSevice_MonteKarlo, выводит результаты выполнения веб-метода в таблицу;_Click(object sender, RoutedEventArgs e):void - обработчик события нажатия на кнопку Button2, очищает поля для ввода координат;_Click(object sender, RoutedEventArgs e):void - обработчик события нажатия на кнопку Button3, инициализирует точки, необходимые для контрольного примера, заполняет поля для ввода координат;_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    Руководство системного программиста

Общие сведения о приложении

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

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

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

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

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

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

Настройка приложения

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

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

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

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

Структура программы

Приложение состоит из следующих проектов:

.        WebFormClientMK (клиент), который содержит следующие файлы:

·        WBFClientMK.aspx - содержит разметку веб-формы;

·        WBFClientMK.aspx.cs - содержит в себе код для обработки событий, происходящих на форме.

2.       WebServiceMonteKarlo (веб-сервис), который содержит следующие файлы:

·        Web.congif - содержит в себе настройки для корректной работы приложения на базе ASMX/C#;

·        WS_MonteKarlo.asmx - точка в входа веб-сервис;

·        WS_MonteKarlo.asmx.cs - содержит веб-метод MK_Square;

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

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

Входными данными являются координаты угловых точек фигуры;

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

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

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

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

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

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

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

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

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

Назначение приложения

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

Условия выполнения приложения

Для успешной работы программы необходимо иметь компьютер с соответствующим системным требованиям (см. пункт «6.7 Системные требования»). А также получить от администратора сервера адрес веб-приложения.

Выполнение приложения

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

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

 

7. Анализ вычислительной эффективности


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

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

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

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


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

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

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

1000

0

22

10

10000

3

450

17

100000

27

2719

40

1000000

277

24441

309

10000000

3019

245248

3150


Из таблицы видно, что приложение на базе WebForm/ASMX/C# оказалось самым производительным. Также самым медленным по времени выполнения является веб-приложение на базе ASP/JScript. Объясняется это тем, что JScript - скриптовый язык, и его сценарии не транслируются ни в машинный, ни в байт-код, а каждый раз интерпретируются сервером.

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

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

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

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

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

Заключение


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

Также были закреплены знания, полученные в ходе изучения курса "Технологии программирования".

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


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

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

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

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

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

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

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

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

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

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

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

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

.        Натан, А. WPF 4. Подробное руководство. - СПб. : Символ-Плюс, 2011. - 880 с.

.        Ч. Петцольд Microsoft Windows Presentation Foundation - М. : Русская Редакция; СПб. : Питер, 2008. - 944 с.

Приложение

 

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

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

{IceCream

{abe;ab;abcd;k1;k2;(PointF a, PointF b, PointF e)

{= new Triangle(a, b, e);= new Circle(a, b);= new Rectangle(ab.minX, abe.maxX, abe.minY, abe.maxY);

}bool PointInIceCream(PointF randP)

{(randP.X>(ab.centrPoint.X))

{ 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 PointF(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;(PointF a1, PointF b1, PointF e1)

{= a1; b = b1; e = e1;= (e.Y - a.Y) / (e.X - a.X);= (e.Y - b.Y) / (e.X - b.X);

}float Square()

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

}bool PointInLines(PointF p)

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

{true;

}

{false;

}

}float maxX

{

{e.X;

}

}float minY

{

{a.Y;

}

}float maxY

{

{b.Y;

}

}

}Circle

{centr;r;(PointF a, PointF b)

{= (b.Y - a.Y) / 2;= new PointF(a.X, a.Y + r);

}float Square()

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

}bool PointInCircle(PointF p1)

{(p1.X < centr.X)

{((Math.Pow(p1.X - centr.X, 2) + Math.Pow(p1.Y - centr.Y, 2)) <= Math.Pow(r, 2));

}{ return false; }

}float minX

{

{centr.X - r;

}

}PointF centrPoint

{

{centr;

}

}

}Rectangle

{minX, maxX, minY, maxY;(float MiX, float MaX, float MiY, float MaY)

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

{(maxX - minX) * (maxY - minY);

}

}

}

Файл MainWindow.xaml

<Window x:Class="WPF_MonteKarlo.MainWindow"="http://schemas.microsoft.com/winfx/2006/xaml/presentation":x="http://schemas.microsoft.com/winfx/2006/xaml"="Расчет площади методом Монте-Карло" Height="416.289" Width="654.78" ShowInTaskbar="False" Background="#FF8D8D8D" WindowStyle="ThreeDBorderWindow" Loaded="Window_Loaded" ResizeMode="NoResize" Icon="Graphicloads-Food-Drink-Icecream-2.ico">

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

<RichTextBox x:Name="RichResultTB" Margin="10,223,10,18" Background="White" BorderBrush="Red" RenderTransformOrigin="0.665,0.689">

<FlowDocument>

<Paragraph/>

</FlowDocument>

</RichTextBox>

<Canvas Height="218" VerticalAlignment="Top" Background="#FF8D8D8D" RenderTransformOrigin="0.5,0.5">

<Image x:Name="Image1" Height="179" Canvas.Left="337" Width="305" Canvas.Top="29" Source="Image/Мороженкаv2.bmp" />

<Button x:Name="Button1" Content="Рассчитать" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Click="Button1_Click" Canvas.Left="20" Canvas.Top="168" Height="40"/>

<GroupBox Header="Координаты точек" HorizontalAlignment="Center" VerticalAlignment="Top" Height="134" Width="309" Margin="0" Panel.ZIndex="2" BorderBrush="#FFFF0004" Foreground="Black" OpacityMask="#FF200CEE" Canvas.Left="10" Canvas.Top="29">

<WrapPanel Margin="0,0,-2,0">

<WrapPanel Height="26" Width="290">

<Label Content="" Width="78"/>

<Label Content="Координата Х" Width="115"/>

<Label Content="Координата Y" Width="94"/>

</WrapPanel>

<Label Content="Точка А:"/>

<TextBox x:Name="KoordinX_A" Height="23" TextWrapping="Wrap" Text="-7" Width="120" LostFocus="LostFocusTB"/>

<TextBox x:Name="KoordinY_A" Height="23" TextWrapping="Wrap" Text="-9" Width="120" LostFocus="LostFocusTB"/>

<Label Content="Точка В:" Width="56"/>

<TextBox x:Name="KoordinX_B" Height="23" TextWrapping="Wrap" Text="-7" Width="120" LostFocus="LostFocusTB"/>

<TextBox x:Name="KoordinY_B" Height="23" TextWrapping="Wrap" Text="17" Width="120" LostFocus="LostFocusTB"/>

<Label Content="Точка Е:" Width="56"/>

<TextBox x:Name="KoordinX_E" Height="23" TextWrapping="Wrap" Text="37" Width="120" LostFocus="LostFocusTB"/>

<TextBox x:Name="KoordinY_E" Height="23" TextWrapping="Wrap" Text="9" Width="120" LostFocus="LostFocusTB"/>

</WrapPanel>

</GroupBox>

<Button x:Name="Button2" Content="Очистить" Canvas.Left="100" Canvas.Top="168" Width="75" Height="40" Click="Button2_Click"/>

<Button x:Name="Button3" Content="Контрольный пример" Canvas.Left="180" Canvas.Top="168" Width="139" Height="40" Click="Button3_Click"/>

<Label Content="Курсовая работа по исследованию вычислительной эффективности веб-технологий. Выполнил: ст. гр. 622121 Сальников В.В. " Height="29" FontFamily="Tahoma" FontSize="11" Width="652" Foreground="Black"/>

</Canvas>

<Label Content="" HorizontalAlignment="Left" Margin="0,317,0,0" VerticalAlignment="Top" Height="18" FontSize="7" Width="54"/>

</Grid>

</Window>

Файл MainWindow.xaml.cs

using System;System.Collections.Generic;System.Linq;System.Text;System.Drawing;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;WPF_MonteKarlo

{

/// <summary>

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

/// </summary>partial class MainWindow : Window

{MainWindow()

{();

}PointF a = new PointF(-7, -9);PointF b = new PointF(-7, 17);PointF e = new PointF(37, 9);

//float ax = -7;

// float bx = -7;

//float ex = 37;

// float ay = -9;

//float by = 17;

//float ey = 9;calc_thread = null;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 точки В ";_A.Text = a.Y.ToString();= false;

}(float.Parse(KoordinY_A.Text) >= float.Parse(KoordinY_E.Text))

{+= "Координата Y точки A не может быть больше координаты Y точки E";_A.Text = a.Y.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 точки А";_B.Text = b.Y.ToString();= false;

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

{+= "Координата Y точки B не может быть меньше координаты Y точки E";_B.Text = b.Y.ToString();= false;

}

}

{= false;

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

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

{+= "Координата X точки A не может быть больше координаты X точки E";_A.Text = a.X.ToString();= false;

}

}

{= false;

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

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

{+= "Координата X точки B не может быть больше координаты X точки E";_B.Text = b.X.ToString();= false;

}

}

{= false;

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

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

{+= "Координата X точки E не может быть меньше координаты X точки А и В";_E.Text = e.X.ToString();= false;

}

}

{= false;

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

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

{+= "Координата Y точки E не может быть меньше координаты Y точки А";_E.Text = e.Y.ToString();= false;

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

{+= "Координата Y точки E не может быть больше координаты Y точки В";_E.Text = e.Y.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;.X = float.Parse(KoordinX_B.Text);

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

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

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

{.X = float.Parse(KoordinX_E.Text);

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

{.Y = float.Parse(KoordinY_A.Text);

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

{.Y = float.Parse(KoordinY_B.Text);

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

{.Y = float.Parse(KoordinY_E.Text);

}(KoordinX_A.Text!="" && KoordinX_B.Text!="" && KoordinX_E.Text!="" && KoordinY_A.Text != ""

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

{.IsEnabled = true;

}

{.IsEnabled = false;

}

}

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

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

"Введено некорректное значение координаты", MessageBoxButton.OK,.Exclamation);(cur_result == MessageBoxResult.OK)

{(EventTextBox.Equals(KoordinX_A))

{_A.Text = a.X.ToString();

}(EventTextBox.Equals(KoordinX_B))

{_B.Text = b.X.ToString();

}(EventTextBox.Equals(KoordinX_E))

{_E.Text = e.X.ToString();

}(EventTextBox.Equals(KoordinY_A))

{_A.Text = a.Y.ToString();

}(EventTextBox.Equals(KoordinY_B))

{_B.Text = b.Y.ToString();

}(EventTextBox.Equals(KoordinY_E))

{_E.Text = e.Y.ToString();

}

//KoordinX_A.Text = ax.ToString(); //.X.ToString("R");

//KoordinX_B.Text = bx.ToString();//.X.ToString("R");

//KoordinX_E.Text = ex.ToString(); //.X.ToString("R");

//KoordinY_A.Text = ay.ToString();//.X.ToString("R");

//KoordinY_B.Text = by.ToString(); //.X.ToString("R");

//KoordinY_E.Text = ey.ToString();//.X.ToString("R");

}

}

}void CalcMKSquareThead(IceCream icecream)

{_thread = new Thread(new ParameterizedThreadStart(delegate(object thr_obj)

{

{this_form = (MainWindow)thr_obj;t = null; TableRowGroup trg = null;tr = null; TableCell tcell = null;j = 3;_form.Dispatcher.BeginInvoke(new Action(delegate()

{.Document.Blocks.Clear();= new Table();= new TableRowGroup();= new TableRow();= new TableCell();.Blocks.Add(new Paragraph(new Run("Число точек")));.Cells.Add(tcell);= new TableCell();.Blocks.Add(new Paragraph(new Run("Число попавших точек точек")));.Cells.Add(tcell);= new TableCell();.Blocks.Add(new Paragraph(new Run("Площадь Монте-Карло")));.Cells.Add(tcell);= new TableCell();.Blocks.Add(new Paragraph(new Run("Точная площадь")));.Cells.Add(tcell);= new TableCell();.Blocks.Add(new Paragraph(new Run("Относительная погрешность,%")));.Cells.Add(tcell);= new TableCell();.Blocks.Add(new Paragraph(new Run("Время вычисления,мс")));.Cells.Add(tcell);.Rows.Add(tr);.RowGroups.Add(trg);.Document.Blocks.Add(t);

}), null);square = icecream.realSquare();(int i = 3; i < 8; i++)

{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;_form.Dispatcher.BeginInvoke(new Action(delegate()

{= new TableRow();= new TableCell();.Blocks.Add(new Paragraph(new Run(Math.Pow(10, j).ToString())));.Cells.Add(tcell);= new TableCell();.Blocks.Add(new Paragraph(new Run(numberPoints.ToString())));.Cells.Add(tcell);= new TableCell();.Blocks.Add(new Paragraph(new Run(MK_Square.ToString())));.Cells.Add(tcell);= new TableCell();.Blocks.Add(new Paragraph(new Run(square.ToString())));.Cells.Add(tcell);= new TableCell();.Blocks.Add(new Paragraph(new Run(rel_delta.ToString())));.Cells.Add(tcell);= new TableCell();.Blocks.Add(new Paragraph(Run((((int)arv_time.TotalMilliseconds).ToString()))));.Cells.Add(tcell);.Rows.Add(tr);++;

}), null);

}

}(Exception ex)

{ }

}

));_thread.Priority = ThreadPriority.Highest;_thread.Start(this);

}void Button1_Click(object sender, RoutedEventArgs n)

{(check())

{= new PointF(a.X, a.Y);= new PointF(b.X, b.Y);= new PointF(e.X, e.Y);icecream = new IceCream(a, b, e);(icecream);

}{ }

}void Window_Loaded(object sender, RoutedEventArgs e)

{tbl = null; TableRowGroup trg = null;tblrw = null; TableCell tblcell = null;.Document.Blocks.Clear();= new Table();= new TableRowGroup();= new TableRow();= new TableCell();.Blocks.Add(new Paragraph(new Run("Число точек")));.Cells.Add(tblcell);= new TableCell();.Blocks.Add(new Paragraph(new Run("Число попавших точек")));.Cells.Add(tblcell);= new TableCell();.Blocks.Add(new Paragraph(new Run("Площадь Монте-Карло")));.Cells.Add(tblcell);= new TableCell();.Blocks.Add(new Paragraph(new Run("Точная площадь")));.Cells.Add(tblcell);= new TableCell();.Blocks.Add(new Paragraph(new Run("Относительная погрешность,%")));.Cells.Add(tblcell);= new TableCell();.Blocks.Add(new Paragraph(new Run("Время вычисления,мс")));.Cells.Add(tblcell);.Rows.Add(tblrw);.RowGroups.Add(trg);.Document.Blocks.Add(tbl);

}void Button2_Click(object sender, RoutedEventArgs ee)

{_A.Text = KoordinX_B.Text =_E.Text = KoordinY_A.Text =_B.Text = KoordinY_E.Text = "";.IsEnabled = false;

}void Button3_Click(object sender, RoutedEventArgs ee)

{= new PointF(10, 0);= new PointF(10, 10);= new PointF(40, 5);_A.Text = a.X.ToString();_B.Text = b.X.ToString();_E.Text = e.X.ToString();_A.Text = a.Y.ToString();_B.Text = b.Y.ToString();_E.Text = e.Y.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_E.value = "";.KoordinY_A.value = "";.KoordinY_B.value = "";.KoordinY_E.value = "";

}Example()

{.KoordinX_A.value = "10";.KoordinX_B.value = "10";.KoordinX_E.value = "40";.KoordinY_A.value = "0";.KoordinY_B.value = "10";.KoordinY_E.value = "5";

}

</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">Координаты треугольника ABE</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%">Точка E:</td>

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

<td width="43%"><input type="text" value = "5" name="KoordinY_E" 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_E.value = "";.KoordinY_A.value = "";.KoordinY_B.value = "";.KoordinY_E.value = "";

}Example()

{.KoordinX_A.value = "10";.KoordinX_B.value = "10";.KoordinX_E.value = "40";.KoordinY_A.value = "0";.KoordinY_B.value = "10";.KoordinY_E.value = "5";

}

</script>

<%xa=Request.Form("KoordinX_A");ya=Request.Form("KoordinY_A");xb=Request.Form("KoordinX_B");yb=Request.Form("KoordinY_B");xe=Request.Form("KoordinX_E");ye=Request.Form("KoordinY_E");Radius = (yb-ya)/2;CentrX = xa;CentrY = ya+Radius;minX = xa - (yb-ya);maxX = xe;minY = ya;maxY = yb;k1 = (ye - ya) / (xe - xa);k2 = (ye - yb) / (xe - xb);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));ae = Math.sqrt(Math.pow(xa-xe,2)+Math.pow(ya-ye,2));be = Math.sqrt(Math.pow(xe-xb,2)+Math.pow(ye-yb,2));polperim = (ab + ae + be)/2;Math.sqrt(polperim*(polperim-ab)*(polperim-ae)*(polperim-be)) ;

}PointInTriangle(x, y)

{((((x-xa)*k1+ya)>=y) || (((x-xb)*k2+yb)<=y))

{true;

}

{false;

}

}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">Координаты треугольника ABE</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 = <%=xe%> name="KoordinX_E" size="20"></td>

<td width="43%"><input type="text" value = <%=ye%> name="KoordinY_E" 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>

Файл WS_MonteKarlo.asmx(Веб-приложение на базе WebForm/ASMX/C#)

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

Файл WS_MonteKarlo.cs

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

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

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

{class WS_MonteKarlo : System.Web.Services.WebService

{

[WebMethod]float MK_Square(PointF a, PointF b, PointF e, int count, out int numberPoints, out float real_delta, out float realsquare, out DateTime start, out DateTime end)

{= DateTime.Now;icecream = new IceCream(a, b, e);montekarloSquare = icecream.MonteKarloSquare(count, out numberPoints, out real_delta);= icecream.realSquare();= DateTime.Now;montekarloSquare;

}

}}

Файл WBFClientMK.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="WBFClientMK.aspx.cs" Inherits="WBFClientMK" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

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

<title></title>

</head>

<form id="form1" runat="server">

<asp:Table ID="Table2" runat="server" BackColor="White" BorderColor="Blue" BorderWidth="3px" GridLines="Both" Width="900px">

<asp:TableRow runat="server">

<asp:TableCell runat="server">

<asp:Panel ID="Panel2" runat="server" > <%--Height="186px"--%>

<p>Координаты точек:</p>

<p>

<asp:Table runat="server">

<asp:TableRow>

<asp:TableCell Width ="55">

</asp:TableCell>

<asp:TableCell>

Координата Х

</asp:TableCell>

<asp:TableCell Width ="55">

</asp:TableCell>

<asp:TableCell>

Координата Y

</asp:TableCell>

</asp:TableRow>

</asp:Table>

</p>

<p style="height: 20px">

Точка А:<asp:TextBox ID="KoordinX_A" runat="server" CausesValidation="True" AutoPostBack="True" OnTextChanged="KoordinX_A_TextChanged" >-7</asp:TextBox>

<asp:RequiredFieldValidator ID="RequiredFieldValidator7" runat="server" ControlToValidate="KoordinX_A" ErrorMessage="*"></asp:RequiredFieldValidator>

<asp:TextBox ID="KoordinY_A" runat="server" CausesValidation="True" AutoPostBack="True" OnTextChanged="KoordinY_A_TextChanged" >-3</asp:TextBox>

<asp:RequiredFieldValidator ID="RequiredFieldValidator8" runat="server" ControlToValidate="KoordinY_A" ErrorMessage="*"></asp:RequiredFieldValidator>

</p>

<p style="height: 20px">

Точка В:<asp:TextBox ID="KoordinX_B" runat="server" AutoPostBack="True" CausesValidation="True" OnTextChanged="KoordinX_B_TextChanged">-7</asp:TextBox>

<asp:RequiredFieldValidator ID="RequiredFieldValidator9" runat="server" ControlToValidate="KoordinX_B" ErrorMessage="*"></asp:RequiredFieldValidator>

<asp:TextBox ID="KoordinY_B" runat="server" AutoPostBack="True" CausesValidation="True" OnTextChanged="KoordinY_B_TextChanged">17</asp:TextBox>

<asp:RequiredFieldValidator ID="RequiredFieldValidator10" runat="server" ControlToValidate="KoordinY_B" ErrorMessage="*"></asp:RequiredFieldValidator>

</p>

<p style="height: 20px">

Точка E:<asp:TextBox ID="KoordinX_E" runat="server" AutoPostBack="True" CausesValidation="True" OnTextChanged="KoordinX_E_TextChanged">37</asp:TextBox>

<asp:RequiredFieldValidator ID="RequiredFieldValidator11" runat="server" ControlToValidate="KoordinX_E" ErrorMessage="*"></asp:RequiredFieldValidator>

<asp:TextBox ID="KoordinY_E" runat="server" AutoPostBack="True" CausesValidation="True" OnTextChanged="KoordinY_E_TextChanged">9</asp:TextBox>

<asp:RequiredFieldValidator ID="RequiredFieldValidator12" runat="server" ControlToValidate="KoordinY_E" ErrorMessage="*"></asp:RequiredFieldValidator>

</p>

</asp:Panel>

<asp:Button ID="Button1" runat="server" Text="Рассчитать" OnClick="Button1_Click" />

<asp:Button ID="Button2" runat="server" Text="Очистить" OnClick="Button2_Click" />

<asp:Button ID="Button3" runat="server" Text="Контрольный пример" OnClick="Button3_Click" CausesValidation="False" />

<p>

<asp:Label ID="Label1" runat="server" BorderColor="Red" ForeColor="Red"></asp:Label>

</p>

</asp:TableCell>

<asp:TableCell runat="server">

<asp:Image ID="Image2" runat="server" Height="200px" ImageUrl="Image/Мороженкаv2.bmp" />

</asp:TableCell>

</asp:TableRow>

</asp:Table>

<br />

<asp:Table ID="Table1" runat="server" BorderWidth ="3px" BorderColor="Blue" GridLines="Vertical" Width="900px">

<asp:TableRow> <asp:TableCell>Число точек</asp:TableCell>

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

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

<asp:TableCell>Точная площадь</asp:TableCell>

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

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

</asp:TableRow>

<asp:TableRow runat="server">

<asp:TableCell runat="server"></asp:TableCell>

<asp:TableCell runat="server"></asp:TableCell>

<asp:TableCell runat="server"></asp:TableCell>

<asp:TableCell runat="server"></asp:TableCell>

<asp:TableCell runat="server"></asp:TableCell>

<asp:TableCell runat="server"></asp:TableCell>

</asp:TableRow>

<asp:TableRow runat="server">

<asp:TableCell runat="server"></asp:TableCell>

<asp:TableCell runat="server"></asp:TableCell>

<asp:TableCell runat="server"></asp:TableCell>

<asp:TableCell runat="server"></asp:TableCell>

<asp:TableCell runat="server"></asp:TableCell>

<asp:TableCell runat="server"></asp:TableCell>

</asp:TableRow>

<asp:TableRow runat="server">

<asp:TableCell runat="server"></asp:TableCell>

<asp:TableCell runat="server"></asp:TableCell>

<asp:TableCell runat="server"></asp:TableCell>

<asp:TableCell runat="server"></asp:TableCell>

<asp:TableCell runat="server"></asp:TableCell>

<asp:TableCell runat="server"></asp:TableCell>

</asp:TableRow>

<asp:TableRow runat="server">

<asp:TableCell runat="server"></asp:TableCell>

<asp:TableCell runat="server"></asp:TableCell>

<asp:TableCell runat="server"></asp:TableCell>

<asp:TableCell runat="server"></asp:TableCell>

<asp:TableCell runat="server"></asp:TableCell>

<asp:TableCell runat="server"></asp:TableCell>

</asp:TableRow>

<asp:TableRow runat="server">

<asp:TableCell runat="server"></asp:TableCell>

<asp:TableCell runat="server"></asp:TableCell>

<asp:TableCell runat="server"></asp:TableCell>

<asp:TableCell runat="server"></asp:TableCell>

<asp:TableCell runat="server"></asp:TableCell>

<asp:TableCell runat="server"></asp:TableCell>

</asp:TableRow>

</asp:Table>

</form>

</body>

</html>

Файл WBFClientMK.aspx.cs

using System;System.Collections.Generic;System.Web;System.Web.UI;System.Web.UI.WebControls;localhost;partial class WBFClientMK : System.Web.UI.Page

{_MonteKarlo WS_MK = new WS_MonteKarlo();a, b, e;void Page_Load(object sender, EventArgs ee)

{

}void Button1_Click(object sender, EventArgs ee)

{= new PointF();= new PointF();= new PointF();.X = float.Parse(KoordinX_A.Text);.X = float.Parse(KoordinX_B.Text);.X = float.Parse(KoordinX_E.Text);.Y = float.Parse(KoordinY_A.Text);.Y = float.Parse(KoordinY_B.Text);.Y = float.Parse(KoordinY_E.Text);numberPoints;MK_Square;rel_delta;square;start;end;start1;end1;(int i = 3; i < 8; i++)

{count = (int)Math.Pow(10, i);= 0;_Square = 0;_delta = 0;= 0;= DateTime.Now;_Square = WS_MK.MK_Square(a,b,e,count, out numberPoints, out rel_delta, out square, out start, out end);= DateTime.Now;time1 = end1 - start1;.Rows[i - 2].Cells[0].Text = count.ToString();.Rows[i - 2].Cells[1].Text = numberPoints.ToString();.Rows[i - 2].Cells[2].Text = MK_Square.ToString();.Rows[i - 2].Cells[3].Text = square.ToString();.Rows[i - 2].Cells[4].Text = rel_delta.ToString();.Rows[i - 2].Cells[5].Text = ((int)time1.TotalMilliseconds).ToString();

}

}void Button2_Click(object sender, EventArgs ee)

{_A.Text = "";_B.Text = "";_E.Text = "";_A.Text = "";_B.Text = "";_E.Text = "";

}void Button3_Click(object sender, EventArgs ee)

{.X = 10;.Y = 0;.X = 10;.Y = 10;.X = 40;.Y = 5;_A.Text = a.X.ToString();_B.Text = b.X.ToString();_E.Text = e.X.ToString();_A.Text = a.Y.ToString();_B.Text = b.Y.ToString();_E.Text = e.Y.ToString();

}void KoordinX_A_TextChanged(object sender, EventArgs e)

{Number;(float.TryParse(KoordinX_A.Text,out Number))

{(Number>float.Parse(KoordinX_E.Text.ToString()))

{.Text = "Координата X точки A не может быть больше координаты X точки E";.Enabled = false;;

}

{_B.Text = KoordinX_A.Text;.Text = "";.Enabled = true;

}

}

{.Text = "Некоректный ввод данных";.Enabled = false;

}

}void KoordinX_B_TextChanged(object sender, EventArgs e)

{Number;(float.TryParse(KoordinX_B.Text, out Number))

{(Number > float.Parse(KoordinX_E.Text.ToString()))

{.Text = "Координата X точки B не может быть больше координаты X точки E";.Enabled = false;;

}

{_A.Text = KoordinX_B.Text;.Text = "";.Enabled = true;

}

}

{.Text = "Некоректный ввод данных";.Enabled = false;

}

}void KoordinY_E_TextChanged(object sender, EventArgs e)

{Number;(float.TryParse(KoordinY_E.Text.ToString(),out Number))

{(Number>=float.Parse(KoordinY_B.Text.ToString()))

{.Text = "Координата Y точки E не может быть больше координаты Y точки В ";.Enabled = false;;

}

{.Text = "";.Enabled = true;

}(Number <= float.Parse(KoordinY_A.Text.ToString()))

{.Text = "Координата Y точки E не может быть меньше координаты Y точки А";.Enabled = false;

}

{.Text = "";.Enabled = true;

}

}

{

}

}void KoordinX_E_TextChanged(object sender, EventArgs e)

{Number;(float.TryParse(KoordinX_E.Text, out Number))

{(Number <= float.Parse(KoordinX_A.Text.ToString()))

{.Text = "Координата X точки E не может быть меньше координаты X точки А и В";.Enabled = false;;

}

{.Text = "";.Enabled = true;

}

}

{.Text = "Некоректный ввод данных";.Enabled = false;

}

}void KoordinY_A_TextChanged(object sender, EventArgs e)

{

//////Number;(float.TryParse(KoordinY_A.Text, out Number))

{(Number >= float.Parse(KoordinY_E.Text.ToString()))

{.Text = "Координата Y точки A не может быть больше координаты Y точки E";.Enabled = false;;

}

{.Text = "";.Enabled = true;

}(Number >= float.Parse(KoordinY_B.Text.ToString()))

{.Text = "Координата Y точки A не может быть больше координаты Y точки B";.Enabled = false;

}

{.Text = "";.Enabled = true;;

}

///(float.Parse(KoordinY_E.Text.ToString()) >= float.Parse(KoordinY_B.Text.ToString()))

{.Text = "Координата Y точки E не может быть больше координаты Y точки В ";.Enabled = false;

}

{.Text = "";.Enabled = true;

}(float.Parse(KoordinY_E.Text.ToString()) <= float.Parse(KoordinY_A.Text.ToString()))

{.Text = "Координата Y точки E не может быть меньше координаты Y точки А";.Enabled = false;

}

{.Text = "";.Enabled = true;

}

}

{.Text = "Некоректный ввод данных";.Enabled = false;

}

}void KoordinY_B_TextChanged(object sender, EventArgs e)

{

//////Number;(float.TryParse(KoordinY_B.Text, out Number))

{(Number <= float.Parse(KoordinY_E.Text.ToString()))

{.Text = "Координата Y точки B не может быть меньше координаты Y точки E";.Enabled = false;;

}

{.Text = "";.Enabled = true;

}(Number <= float.Parse(KoordinY_A.Text.ToString()))

{.Text = "Координата Y точки B не может быть больше координаты Y точки A";.Enabled = false;

}

{.Text = "";.Enabled = true;

}

///(float.Parse(KoordinY_E.Text.ToString()) >= float.Parse(KoordinY_B.Text.ToString()))

{.Text = "Координата Y точки E не может быть больше координаты Y точки В ";.Enabled = false;

}

{.Text = "";.Enabled = true;

}(float.Parse(KoordinY_E.Text.ToString()) <= float.Parse(KoordinY_A.Text.ToString()))

{.Text = "Координата Y точки E не может быть меньше координаты Y точки А";.Enabled = false;

}

{.Text = "";.Enabled = true;

}

}

{.Text = "Некоректный ввод данных";.Enabled = false;

}

}

}


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