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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



Введение

В настоящее время разработка программного обеспечения ведется в рамках корпоративных сетей ЭВМ, среди которых все большее распространение получают Интранет/Интернет сети. Для работы в таких сетях используется совершенно новый вид программных продуктов – Web-приложения, в которых тем или иным способом реализуются клиентская и серверная активности, широко применяются СОМ объекты и Web сервисы для осуществления основной функциональности приложения. В Web приложениях иначе, чем в локальных приложениях MS Windows, реализуются и графический интерфейс пользователя, и вообще организация всего приложения. Появилась и объектно-ориентированная платформа.NET фирмы Microsoft с удобной средой разработки Web приложений - MS Visual Studio.NET.

Разработка современных программных продуктов обычно выполняется с использованием языка визуального моделирования UML, предназначенного для определения, визуализации и документирования сущностей создаваемой объектно-ориентированной системы. При этом широко применяются готовые типовые решения (архитектурные паттерны, двоичные компоненты, сервисы), часто доступные через Internet или имеющиеся на рынке современного программного обеспечения.

Известно, что серверы Web хранят информацию в виде текстовых файлов, называемых также страницами сервера Web. Помимо текста, такие страницы могут содержать ссылки на другие страницы (расположенные на том же самом или другом сервере), ссылки на графические изображения, аудио- и видеоинформацию, различные объекты ввода данных (поля, кнопки, формы и т. д.), а также другие объекты. Фактически страницы Web представляют собой некоторое связующее звено между объектами различных типов.

Для доступа к информации, расположенной на серверах Web, пользователи применяют специальные клиентские программы - браузеры. Наибольшей популярностью пользуются браузеры Microsoft Internet Explorer и Opera. Каждая страница сервера Web имеет свой так называемый универсальный адрес ресурса Universal Resource Locator (URL). Для того чтобы получить доступ к той или иной странице, пользователь должен указать ее адрес URL программе браузера. Как правило, любой сервер Web имеет одну главную страницу, содержащую ссылки на все другие страницы этого сервера. Поэтому просмотр содержимого сервера Web обычно начинается с его главной страницы.

Существуют различные способы реализации серверной активности. Традиционный (классический) способ создания активных серверных страниц (Active Server Pages, ASP) заключается в добавлении скриптов на языках JavaScript и VBScript в HTML код. Однако применение скрипов для выполнения больших объемов вычислительной работы на сервере нецелесообразно из-за медленной работы скриптов, поскольку при выполнении активных страниц большая часть времени расходуется на процесс интерпретации скрипов.

Современные технологии, такие как ASP.NET и Java, позволяют создавать активные серверные страницы практически без скриптов, а код таких страниц, написанный на объектно-ориентированных языках C# и Java, хранится в двоичном (откомпилированном) виде. При этом автоматизируется процесс создания кода страниц и значительно упрощается его отладка.

Целью курсовой работы является исследование вычислительной эффективности технологий программирования, включая Web-технологии, а также закрепление знаний, полученных в курсе “Технологии программирования”, приобретения навыков клиент-серверной реализации прикладной задачи в виде Web приложения с использованием Web сервисов, практическое освоение современных Web технологий, использующих как скрипты, так и функциональные и объектно-ориентированные языки программирования, приобретения навыков оформления и выпуска документации в соответствии с ГОСТ.

 

 

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

Вариант №1(четырехугольник abce)

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

· настольное приложение, имеющее графический интерфейс пользователя, реализованное на языке WPF

· Web приложение на базе скриптов на языке haxe/PHP

· Web приложение с компилируемым кодом, написанным на базе технологии ASP.NET(тип Web сервиса - асинхронный, язык Web сервиса – C#, язык клиента – WPF)

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


Рис. 1. Четырехугольник abce, внутри прямоугольника

 

Исходными данными для всех приложений должны являться координаты 4 точек заданного четырехугольника(a,b,c,e), причем xa < xe < xd.

Приложение должно поддерживать:

· Выполнение вычислений по контрольным примерам, заранее заготовленными при разработке

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

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

· Выполнение вычислений по пользовательским координатам

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

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

· Количество точек, для которого проводился эксперимент

· Количество точек, попавших в заданный четырехугольник

· Площадь, рассчитанная методом Монте-Карло

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

· Время выполнения вычислений

Также выводится математическая площадь заданного четырехугольника и площадь прямоугольника, описывающего наш четырехугольник.

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

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

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

1. Ввод координат:

· контрольные примеры

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

· случайные числа, исходя из условий допустимости

2. Произвести расчет по введенным координатам

3. Выход из программы

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

На рис. 2 представлена диаграмма вариантов использования (Use Case – диаграмма), разработанная в соответствии со стандартом UML.

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

Из рис. 2 видно, что при вводе новых значений координат выполняется проверка на их корректность, связь типа <<extend>>, говорит о том, что эта процедура является расширением для действия, к которому указывает стрелка ассоциации. Так же на диаграмме присутствуют связи типа <<include>>, что означает обязательное выполнение действия, к которому направлена стрелка ассоциации. Связь пользователя с программой обозначена как " 1 n ", это означает, что пользователь может в течение одного сеанса многократно использовать данную программу

Рассмотрим спецификацию вариантов использования "Вычислить площадь четырехугольника" на примере настольного приложения.

1.0. Наименование варианта использования: "Вычислить площадь четырехугольника".

1.1. Краткое описание:вариант использования инициируется активным субъектом "пользователь" и предлагает возможности выбора из трех доступных действий.

Потоки событий

Основной поток

Функции варианта использования начинают выполняться с запуска субъектом «пользователь» программного продукта. Система активизирует интерфейс пользователя и предлагает пользователю выбрать одну из следующих опций: «ввести новые значения и произвести по ним расчет», «произвести повторный расчет», «рассчитать по случайным значениям координат», «выход».

Если выбрана опция «ввести новые значения и произвести по ним расчет», то система предложит последовательно задать новые значения координат четырехугольника (при некорректном значении координат выполняется альтернативный поток 2.2.1). Новые значения координат становятся текущими данными. Система обрабатывает текущие данные и выводит на дисплей консоли следующие данные:

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

· площадь описанного прямоугольника

· таблицу, состоящую из пяти строк, в каждой из которых определены следующие поля:

– количество точек для текущего опыта

– количество попавших в четырехугольник точек

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

– погрешность вычислений в процентах

– время, затраченное на вычисление

Вариант использования активизируется с начала.

Если выбрана опция «произвести повторный расчет», то система обрабатывает текущие данные и выводит на дисплей следующие данные:

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

· площадь описанного прямоугольника

· таблицу, состоящую из пяти строк, в каждой из которых определены следующие поля:

– количество точек для текущего опыта

– количество попавших в четырехугольник точек

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

– погрешность вычислений в процентах

– время, затраченное на вычисление

Вариант использования активизируется с начала.

Если выбрана опция "выход", то выполняется системная функция, завершающая выполнение программного продукта.

Альтернативные потоки

2.2.1 Неверное значение координаты: введено неверное значение координаты; субъекту предоставляется возможность ввести координаты заново.

3.0. Специальные требования: специальные требования не определены.

4.0. Предусловия: предусловия не определены.

5.0. Постусловия: постусловия не определены.

6.0. Дополнительные замечания: дополнительных замечаний нет.

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

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

Настольное приложение, имеющее консольный или графический интерфейс пользователя:

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

· язык: C#

Web приложение на базе скриптов:

· интерфейс: PHP

· язык: haxe

Web приложение с компилируемым кодом:

· интерфейс: ASP.NET

· язык: С#

· элементы управления: WPF

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

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

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

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

· таблица, состоящая из пяти строк, в каждой из которых определены следующие поля:

– количество точек для текущего опыта

– количество попавших в четырехугольник точек

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

– погрешность вычислений в процентах

– время(в миллисекундах), затраченное на вычисление

 

Структура приложения

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

Index.html – модуль, содержащий интерфейс взаимодействия с пользователем(GUI). Представляет собой документ html-разметки.

Рисунок 10. Пользовательский интерфейс приложения haXe/PHP

Main.hx – модуль, содержащий функции, реализующие логику программы. При компиляции, на его основе, создаются PHP-файлы.

Рисунок 11. Результаты эксперимента haXe/PHP

Проектирование приложения.

Приложение состоит из страницы index.html реализующей пользовательский интерфейс и страницы index.php, которая была автоматически сгенерирована компилятором haXe, и содержит в себе алгоритм расчета площади по методу Монте-Карло. После заполнения пользователем входных данных и нажатия клавиши “Рассчитать”, данные с помощью метода Post передаются на вход скрипту, который производит математические вычисления. После завершения работы, отображается страница с результатами эксперимента.

В процессе создания приложения на языке haxe были спроектированы следующие функции и классы:

Class Main

Static function main() - определяют точку входа в программу.

Static function Math_Square – вычисление площади четырехугольника по правилам геометрии.

static function getCurve - вывод уравнения прямой, для проверки принадлежности точки четырехугольнику(используется в функции MonteKarlo_Square)

static function MonteKarlo_Square – собственно сам метод Монте-Карло. Вначале определяется площадь описанного четырехугольника, затем на основании этого определяется диапазон координат случайных точек, после этого определяется принадлежность точки заданному четырехугольнику. При попадании точки, выполняется увеличение количества точек, попавших в четырехугольник.

В листинге приведено определение попадания точки в четырехугольник:

Листинг №1. Определение попадания точки в четырехугольник. haXe.

if(x3<x4) //esli c<e(slychai 1)

{

if(randx<x2)

{

newy = getCurve(x1,y1,x2,y2,randx);

if(randy<=newy)

{

points+=1;

}

}

if(randx==x2)

{

points+=1;

}

if(randx==x3)

{

points+=1;

}

if(randx>x2&&randx<x3)

{

points+=1;

 

}

if(randx>x3)

{

newy= getCurve(x3,y3,x4,y4,randx);

if(randy>=newy)

{

points+=1;

}

}

}

if(x3==x4) //esli c==e(slychai 2)

{

if(randx<x2)

{

newy = getCurve(x1,y1,x2,y2,randx);

if(randy<=newy)

{

points+=1;

}

}

 

if(randx>=x2&&randx<=x3)

{

points+=1;

}

}

if(x3>x4) //esli c>e(slychai 3)

{

if(randx<x2)

{

newy = getCurve(x1,y1,x2,y2,randx);

if(randy<=newy)

{

points+=1;

}

}

if(randx==x2)

{

points+=1;

}

if(randx==x3)

{

points+=1;

}

if(randx==x4)

{

points+=1;

}

if(randx>x2&&randx<x4)

{

points+=1;

}

if(randx>x4&&randx<x3)

{

newy = getCurve(x3,y3,x4,y4,randx);

if(randy>=newy)

{

points+=1;

}

}

 

 

6. Клиент-Серверное приложение на базе ASP.NET

Листинг №2. Обработчик асинхронного взаимодействия

private void MonteCarloABCECompleted(object sender, MonteCarloABCECompletedEventArgs e)

{

object[] result = new object[5];

result = e.Result;

}

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

Service proxy = new Service();

proxy.MonteCarloABCECompleted += new MonteCarloABCECompletedEventHandler(this.MonteCarloABCECompleted);

proxy.MonteCarloABCEAsync(Ax, Ay, Bx, By, Cx, Ex, n);

 

Генерирование прокси-класса

После создания клиентского приложения ему необходимо добавить прокси-класс для доступа к web-сервису. Прокси-класс – это класс, созданный из файлаWSDL Web-службы, позволяющий клиенту вызывать методы Web-службы по Интернету. Клиенту не обязательно просматривать прокси-класс или выполнять с ним какие-либо операции.

После тестирования работы Web-службы, мы можем добавить в клиентское приложение ссылку на Web-службу, т.е. создать прокси-класс.

Существуют два способа создания прокси-класса в.NET:

· воспользоваться утилитой командной строки wsdl.ехе

· воспользоваться предлагаемой в Visual Studio возможностью для добавления Web-ссылок

Оба эти подхода, по сути, дают один и тот же результат, поскольку они пред­полагают использование одних и тех же классов в.NET Framework для выполне­ния фактической работы. Отличием подхода, предполагающего использование утилиты wsdl.exe, от под­хода, предполагающего использование функции для добавления Web-ссылок в приложение ASP.NET, является то, что в случае применения функции для добавления Web-ссылок увидеть фактический код прокси-класса будет невозможно (потому что он генерируется позже, во время компиляции). Это ограничение не распространяется на клиентов других типов, например, приложений Windows Form или консольного типа. Они не используют мо­дель компиляции ASP.NET, поэтому код прокси-класса добавляется прямо в проект.

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

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

· операционная система MS Windows XP(SP2)/XP(SP3)/Vista/Win7

· наличие Microsoft.NET Framework версии 3.5 или выше

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

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

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

· наличие виртуального каталога, содержащего непосредственно Web-сервис

· наличие каталога images в корне диска C:\, в котором содержатся изображения, используемые приложением

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

Приложение предназначено для вычисления площади четырехугольника методом Монте-Карло. Приложение состоит из двух частей (клиентской и серверной) и реализовано на языке программирования высокого уровня C#. Серверная часть реализована на чистом C#, в то время, как клиентское приложение использует технологию WPF.

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

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

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

Для выполнения приложения необходимо выполнить следующие действия:

· запустить исполняемый модуль программы, который находится по адресу Projects\P3_WPF\P3_WPF\bin\Debug\ P3_WPF.exe (Для дальнейшей работы достаточно скопировать P3_WPF.exe в любую удобную директорию)

· в появившемся окне программы ввести координаты четырехугольника, либо выбрать вариант «контрольный пример», который автоматически внесет данные, по которым будет производиться расчет

· нажать на кнопку «Рассчитать» и дождаться результатов работы программы (результат работы программы представлен на рис.15)

· выход из программы осуществляется посредством закрытия окна приложения

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

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

Структура приложения

Данное приложение состоит из двух частей (клиентской и серверной). В клиентской части реализован интерфейс пользователя с помощью технологии WPF. Серверным приложением является Web-служба XML технологии ASP.NET.

Клиентское приложение.

В состав проекта клиентского приложения ASP.NET входят следующие файлы:

MainWindow.xaml – файл, содержащий информацию о контролах и разметке этих контролов на языке xaml;

MainWindow.xaml.cs – Файл, в котором содержится сама логика программы(алгоритм метода Монте-Карло, обработчики событий, и т.д.)

Reference.cs – содержит прокси-класс web-сервиса;

Reference.map – содержит ссылки на файлы с расширениями.disco и.wsdl;

Service.disco – содержит ссылки и адреса на механизмы, используемые для доступа к web-сервису;

Service.wsdl – описание web-сервиса.

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

System – основное пространство имен, содержит фундаментальные и базовые классы, которые определяют распространенные типы значений и ссылочные типы данных, события и обработчики событий, интерфейсы, атрибуты и исключения обработки. Также содержит классы, обеспечивающие поддержку преобразования типов данных, операций с параметрами методов, математических операций, удаленного и локального вызова программ, управления средой приложений и контроля управляемых и неуправляемых приложений;

System.Drawing – пространство имен обеспечивает доступ к GDI + основным инструментариям графики. Предоставляет методы для рисования с устройством отображения классов, таких как прямоугольник и точка инкапсуляции GDI + примитивов.

System.Collections – пространство имен в котором содержится большое количество встроенных типов, таких как массив, очередь, стек и др. Обладает широкими возможностями для работы со своими встроенными типами, что позволяет наиболее эффективно ими управлять.

Серверное приложение (web-сервис).

Проект web-сервиса содержит следующие файлы:

Service.asmx – точка входа в web-сервис;

Service.cs – содержит основной код (реализацию) web-сервиса;

web.config – содержит настройки web-сервиса.

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

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

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

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

Для выполнения приложения необходимо выполнить следующие действия:

· запустить исполняемый модуль программы;

· в появившемся окне MS Windows ввести координаты четырехугольника, по которым будет производиться расчет;

· в появившемся окне программы ввести координаты четырехугольника, либо выбрать вариант «контрольный пример», который автоматически внесет данные, по которым будет производиться расчет;

· нажать на кнопку «Рассчитать» и дождаться результатов работы программы (результат работы программы представлен на рис.);

· выход из программы осуществляется посредством закрытия окна приложения.

Сообщения оператору

Если пользователь в текстовом поле ввода координат введет недопустимый символ, то ему будет показано сообщение-подсказка об ошибке и о причинах ее возникновения. Что бы устранить данную ошибку необходимо просто ввести корректное значение координаты или нажать на кнопку «Очистить», для обнуления введенных данных.

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

Тестирование приложения

Результаты тестирования представлены на рис. 15

 

 

Заключение

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

В результате выполнении данной курсовой работы были закреплены знания по курсу "Технологии программирования" и приобретены навыки клиент-серверной реализации прикладной задачи (задачи вычисления площади геометрической фигуры методом Монте-Карло) в виде Web приложения с использованием Web сервера IIS и Web сервисов XML, технологий ASP, ASP.NET, WPF, языков C#, haxe, PHP, HTML, а также различных инструментальных систем и библиотек, автоматизирующих проектирование и программирование создаваемого приложения.

 

 

Приложения

Листинг приложения на базе WPF

Файл MainWindow.xaml

 

<Window

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

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

x:Class="П1_ТП.Window1"

x:Name="Window"

Title="П1.WPF: Метод Монте-Карло ABCE"

Height="600" Width="600"

MinWidth="600" MinHeight="600" SnapsToDevicePixels="False" MaxWidth="600" MaxHeight="600" Loaded="Window_Loaded">

<Grid Height="509">

<Grid.ColumnDefinitions>

<ColumnDefinition Width="472*" />

<ColumnDefinition Width="106*" />

</Grid.ColumnDefinitions>

<GroupBox Header="Контрольные примеры" Height="54" Name="groupBox1" VerticalAlignment="Bottom" Margin="0,0,0,-10" FontStyle="Normal" FontWeight="Normal" Grid.ColumnSpan="2">

<WrapPanel Height="26" Name="wrapPanel2" Width="523">

<Button Height="23" Name="button1" Width="104" Click="button1_Click" Content="№1(C&gt;E)"></Button>

<Button Height="23" Name="button2" Width="104" Click="button2_Click" Content="№2(C=E)"></Button>

<Button Height="23" Name="button3" Width="104" Click="button3_Click" Content="№3(C&gt;E)"></Button>

<Button Height="23" Name="button4" Width="104" Click="button4_Click" Content="rand №4(C&lt;E)"></Button>

<Button Height="23" Name="button5" Width="104" Click="button5_Click" Content="rand №5(C&gt;E)"></Button>

</WrapPanel>

</GroupBox>

<GroupBox Header="Таблица результатов" Margin="0,229,0,43" Name="groupBox2" Grid.ColumnSpan="2">

<WrapPanel Height="186" Name="wrapPanel1" Width="521">

<TextBox Height="50.347" Name="textBox1" Width="104" IsReadOnly="True" MinLines="1" MaxLines="2" TextWrapping="WrapWithOverflow" CharacterCasing="Normal" AutoWordSelection="False" AcceptsTab="False" AcceptsReturn="False" TextDecorations="None" TextAlignment="Center">Количество точек</TextBox>

<TextBox Height="50.339" Name="textBox2" Width="104" IsReadOnly="True" TextAlignment="Center" TextWrapping="WrapWithOverflow">Количество попавших точек</TextBox>

<TextBox Height="50.339" Name="textBox3" Width="104" IsReadOnly="True" TextAlignment="Center" TextWrapping="WrapWithOverflow">Рассчитанная площадь</TextBox>

<TextBox Height="50.344" Name="textBox4" Width="104" IsReadOnly="True" TextAlignment="Center" TextWrapping="WrapWithOverflow">Погрешность, %</TextBox>

<TextBox Height="50.334" Name="textBox5" Width="104" IsReadOnly="True" TextAlignment="Center" TextWrapping="WrapWithOverflow">Время, ms</TextBox>

<TextBox Height="23" Name="textBox6" Width="104" IsReadOnly="True" />

<TextBox Height="23" Name="textBox7" Width="104" IsReadOnly="True" />

<TextBox Height="23" Name="textBox8" Width="104" IsReadOnly="True" />

<TextBox Height="23" Name="textBox9" Width="104" IsReadOnly="True" />

<TextBox Height="23" Name="textBox10" Width="104" IsReadOnly="True" />

<TextBox Height="23" Name="textBox11" Width="104" IsReadOnly="True" />

<TextBox Height="23" Name="textBox12" Width="104" IsReadOnly="True" />

<TextBox Height="23" Name="textBox13" Width="104" IsReadOnly="True" />

<TextBox Height="23" Name="textBox14" Width="104" IsReadOnly="True" />

<TextBox Height="23" Name="textBox15" Width="104" IsReadOnly="True" />

<TextBox Height="23" Name="textBox16" Width="104" IsReadOnly="True" />

<TextBox Height="23" Name="textBox17" Width="104" IsReadOnly="True" />

<TextBox Height="23" Name="textBox18" Width="104" IsReadOnly="True" />

<TextBox Height="23" Name="textBox19" Width="104" IsReadOnly="True" />

<TextBox Height="23" Name="textBox20" Width="104" IsReadOnly="True" />

<TextBox Height="23" Name="textBox21" Width="104" IsReadOnly="True" />

<TextBox Height="23" Name="textBox22" Width="104" IsReadOnly="True" />

<TextBox Height="23" Name="textBox23" Width="104" IsReadOnly="True" />

<TextBox Height="23" Name="textBox24" Width="104" IsReadOnly="True" />

<TextBox Height="23" Name="textBox25" Width="104" IsReadOnly="True" />

<TextBox Height="23" Name="textBox26" Width="104" IsReadOnly="True" />

<TextBox Height="23" Name="textBox27" Width="104" IsReadOnly="True" />

<TextBox Height="23" Name="textBox28" Width="104" IsReadOnly="True" />

<TextBox Height="23" Name="textBox29" Width="104" IsReadOnly="True" />

<TextBox Height="23" IsReadOnly="True" Name="textBox36" Width="104" />

<TextBox Height="23" IsReadOnly="True" Name="textBox37" Width="159" Text="Площадь прямоугольника:"></TextBox>

<TextBox Height="23" IsReadOnly="True" Name="textBox38" Width="104" />

<TextBox Height="23" IsReadOnly="True" Name="textBox39" Width="153" TextChanged="textBox39_TextChanged" Text="Математическая площадь"></TextBox>

<TextBox Height="23" IsReadOnly="True" Name="textBox40" Width="105" />

</WrapPanel>

</GroupBox>

<GroupBox Header="Рисунок" Height="211" Margin="0,0,174,0" Name="groupBox3" VerticalAlignment="Top">

<Image Height="169" Name="image1" Stretch="Fill" Width="257" HorizontalAlignment="Center" OpacityMask="Black" />

</GroupBox>

<GroupBox Header="Входные параметры" Height="230" Name="groupBox4" VerticalAlignment="Top" VerticalContentAlignment="Top" HorizontalAlignment="Right" Width="274" Margin="0,12,0,0" Grid.ColumnSpan="2"></GroupBox>

<Label Height="29" HorizontalAlignment="Right" Margin="0,199,126,0" Name="label4" VerticalAlignment="Top" Width="22">N:</Label>

<TextBox Height="25" HorizontalAlignment="Right" Margin="0,26,48,0" Name="textBox30" VerticalAlignment="Top" Width="93.5" TextChanged="textBox30_TextChanged">0</TextBox>

<TextBox Height="25" HorizontalAlignment="Right" Margin="0,22,10,0" Name="textBox31" VerticalAlignment="Top" Width="104.5" Grid.ColumnSpan="2">0</TextBox>

<TextBox Height="25" HorizontalAlignment="Right" Margin="0,56,48,0" Name="textBox32" VerticalAlignment="Top" Width="93.5" Text="0"></TextBox>

<TextBox Height="25" HorizontalAlignment="Right" Margin="0,54,10,0" Name="textBox33" VerticalAlignment="Top" Width="104.5" Grid.ColumnSpan="2">0</TextBox>

<TextBox Height="25" HorizontalAlignment="Left" Margin="330,86,0,0" Name="textBox34" VerticalAlignment="Top" Width="93.5" Text="0"></TextBox>

<TextBox Height="25" HorizontalAlignment="Right" Margin="0,86,12,0" Name="textBox35" VerticalAlignment="Top" Width="102.5" Text="0" Grid.ColumnSpan="2"></TextBox>

<ComboBox Height="22.48" HorizontalAlignment="Right" Margin="0,201,13,0" Name="comboBox1" VerticalAlignment="Top" Width="205" Text="auto" SelectedValuePath="auto" SelectedIndex="0" Grid.ColumnSpan="2">

<ComboBoxItem Name="auto">auto</ComboBoxItem>

<ComboBoxItem Name="одна">1000</ComboBoxItem>

<ComboBoxItem ForceCursor="False" Name="десять">10000</ComboBoxItem>

<ComboBoxItem Name="сто">100000</ComboBoxItem>

<ComboBoxItem Name="тыща">1000000</ComboBoxItem>

<ComboBoxItem Name="десятьтыща">10000000</ComboBoxItem>

</ComboBox>

<Label Height="25" Name="label1" Width="22" HorizontalAlignment="Right" Margin="0,84,15,0" VerticalAlignment="Top" Content="Ex:"></Label>

<Button Height="25" Name="button6" Width="102.5" Click="button6_Click" Margin="441,170,34,314" Grid.ColumnSpan="2">Очистить</Button>

<Button Height="25" Name="button7" Width="102.5" Click="button7_Click" IsCancel="False" Padding="1" HorizontalContentAlignment="Center" FlowDirection="LeftToRight" AllowDrop="True" BorderThickness="1" ClipToBounds="False" IsTabStop="True" Margin="331,170,38,314">Рассчитать</Button>

<Label Content="Bx:" Height="25" HorizontalAlignment="Right" Margin="0,55,142,0" Name="label3" VerticalAlignment="Top" Width="22" />

<Label Height="25" Name="label2" Content="Ax:" Margin="308,24,142,460"></Label>

<Label Content="Ay:" Height="25" Margin="436,26,14,458" Name="label5" />

<Label Content="By:" Height="25" Margin="436,56,14,428" Name="label6" />

<Label Content="Cx:" Height="25" Margin="308,86,142,398" Name="label7" />

</Grid>

</Window>

 

 

Файл MainWindow.xaml.cs

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Data;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Imaging;

using System.Windows.Navigation;

using System.Windows.Shapes;

using System.Threading;

 

namespace П3_ТП

{

 

 

/// <summary>

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

/// </summary>

public partial class Window1: Window

{

BitmapImage bitmap1, bitmap2, bitmap3, bitmap4, bitmap5;

int n = 0;

public Window1()

{

InitializeComponent();

Uri uri = new Uri(@"C:\images\image2_old.gif");

 

BitmapImage bitmap = new BitmapImage(uri);

image1.Source = bitmap;

 

Uri uri1 = new Uri(@"C:\images\image1.gif");

Uri uri2 = new Uri(@"C:\images\image2.gif");

Uri uri3 = new Uri(@"C:\images\image3.gif");

Uri uri4 = new Uri(@"C:\images\image4.gif");

Uri uri5 = new Uri(@"C:\images\image5.gif");

 

 

bitmap1 = new BitmapImage(uri1);

bitmap2 = new BitmapImage(uri2);

bitmap3 = new BitmapImage(uri3);

bitmap4 = new BitmapImage(uri4);

bitmap5 = new BitmapImage(uri5);

 

}

public double Ax;

public double Ay;

public double Bx;

public double By;

public double Cx;

public double Ex;

 

 

private void button7_Click(object sender, RoutedEventArgs e)

{

try

{

Ax = System.Convert.ToDouble(textBox30.Text);

Ay = System.Convert.ToDouble(textBox31.Text);

Bx = System.Convert.ToDouble(textBox32.Text);

By = System.Convert.ToDouble(textBox33.Text);

Cx = System.Convert.ToDouble(textBox34.Text);

Ex = System.Convert.ToDouble(textBox35.Text);

}

catch

{

MessageBox.Show("Ошибка", "Error", MessageBoxButton.OK, MessageBoxImage.Error);

return;

}

if (Ax > Bx || Bx > Cx || Ax > Ex || Ax > Cx || Ay > By)

{

MessageBox.Show("Проверьте правильность введенных данных", "Error", MessageBoxButton.OK, MessageBoxImage.Error);

return;

}

if (Ax == 0 && Bx == 0 && Cx == 0 && Ex == 0 && Ay == 0 && By == 0)

{

MessageBox.Show("Проверьте правильность введенных данных", "Error", MessageBoxButton.OK, MessageBoxImage.Error);

return;

}

 

//обработчик события расчитать

//запись чисел из формы в переменные

Ax = System.Convert.ToDouble(textBox30.Text);

Ay = System.Convert.ToDouble(textBox31.Text);

Bx = System.Convert.ToDouble(textBox32.Text);

By = System.Convert.ToDouble(textBox33.Text);

Cx = System.Convert.ToDouble(textBox34.Text);

Ex = System.Convert.ToDouble(textBox35.Text);

double n = 1000; //количество точек

//создание объектов класса "Точка"

point A = new point(Ax, Ay);

point B = new point(Bx, By);

point C = new point(Cx, By);

point E = new point(Ex, Ay);

// int points = 0; //по идее не нужно

Rect ABCE; //инициализация объекта класса прямоугольник

ABCE = new Rect(A, B, C, E); //присвоение координатам вершин координаты соответствующих точек

point tempy = new point(0, 0); //точка для проверки принадлежности по формуле y=kx+b

 

textBox37.Text = System.Convert.ToString(ABCE.S_Teor(ABCE)); //выводит теоретическую площадь

textBox38.Text = System.Convert.ToString(ABCE.S_O_Rect(ABCE)); //выводит площадь описанного четырехугольника

 

textBox6.Text = System.Convert.ToString(n); //Запись коичества точек

double test4 = ABCE.S_O_Rect(ABCE); //расчет погрешности

ABCE.points = 0;

 

textBox8.Text = System.Convert.ToString(ABCE.S_Monte(ABCE, System.Convert.ToInt32(n))); //запись количества точек

textBox7.Text = System.Convert.ToString(ABCE.points); //ВЫВОд количества точек, попавших в прямоугольник

double test = ABCE.S_Teor(ABCE); //временные переменные

double test2 = System.Convert.ToDouble(ABCE.S_Teor(ABCE) - ABCE.S_Monte(ABCE, System.Convert.ToInt32(n))); //аналогично

//расчет погрешности

test2 = test2 / ((ABCE.S_Monte(ABCE, System.Convert.ToInt32(n))) * 100.0); //погрешность

test2 = Math.Abs(test2);

test2 = Math.Abs(ABCE.S_Teor(ABCE) - ABCE.S_Monte(ABCE, System.Convert.ToInt32(n))) / ABCE.S_Monte(ABCE, System.Convert.ToInt32(n)) * 100.0; //вывод погрешности в %

textBox9.Text = System.Convert.ToString(test2); //вывод

double ttime = Convert.ToDouble(ABCE.time.Milliseconds.ToString()); //перевод времени в миллсикунды

textBox10.Text = System.Convert.ToString(ttime); //записываешь время в таблицу

 

n = 10000;//n=10000

ABCE.points = 0; //обнуление данных предыдущего эксперимента

textBox11.Text = System.Convert.ToString(n); //аналогично см. выше

textBox13.Text = System.Convert.ToString(ABCE.S_Monte(ABCE, System.Convert.ToInt32(n)));

textBox12.Text = System.Convert.ToString(ABCE.points);

textBox14.Text = System.Convert.ToString(Math.Abs(((ABCE.S_Teor(ABCE) - ABCE.S_Monte(ABCE, System.Convert.ToInt32(n))) / ABCE.S_Monte(ABCE, System.Convert.ToInt32(n)) * 100.0)));

ttime = Convert.ToDouble(ABCE.time.Milliseconds.ToString());

textBox15.Text = System.Convert.ToString(ttime);

 

n = 100000; //n = 100000

ABCE.points = 0; //аналогично см. выше

textBox16.Text = System.Convert.ToString(n);

textBox18.Text = System.Convert.ToString(ABCE.S_Monte(ABCE, System.Convert.ToInt32(n)));

textBox17.Text = System.Convert.ToString(ABCE.points);

textBox19.Text = System.Convert.ToString(Math.Abs(((ABCE.S_Teor(ABCE) - ABCE.S_Monte(ABCE, System.Convert.ToInt32(n))) / ABCE.S_Monte(ABCE, System.Convert.ToInt32(n)) * 100.0)));

ttime = Convert.ToDouble(ABCE.time.Milliseconds.ToString());

textBox20.Text = System.Convert.ToString(ttime);

 

n = 1000000; //n = 1000000

ABCE.points = 0; //Аналогично см.выше

textBox21.Text = System.Convert.ToString(n);

textBox23.Text = System.Convert.ToString(ABCE.S_Monte(ABCE, System.Convert.ToInt32(n)));

textBox22.Text = System.Convert.ToString(ABCE.points);

textBox24.Text = System.Convert.ToString(Math.Abs(((ABCE.S_Teor(ABCE) - ABCE.S_Monte(ABCE, System.Convert.ToInt32(n))) / ABCE.S_Monte(ABCE, System.Convert.ToInt32(n)) * 100.0)));

ttime = Convert.ToDouble(ABCE.time.Milliseconds.ToString());

textBox25.Text = System.Convert.ToString(ttime);

 

n = 10000000;

ABCE.points = 0;

textBox26.Text = System.Convert.ToString(n);

textBox28.Text = System.Convert.ToString(ABCE.S_Monte(ABCE, System.Convert.ToInt32(n)));

textBox27.Text = System.Convert.ToString(ABCE.points);

textBox29.Text = System.Convert.ToString(Math.Abs(((ABCE.S_Teor(ABCE) - ABCE.S_Monte(ABCE, System.Convert.ToInt32(n))) / ABCE.S_Monte(ABCE, System.Convert.ToInt32(n)) * 100.0)));

ttime = Convert.ToDouble(ABCE.time.Milliseconds.ToString());

textBox36.Text = System.Convert.ToString(ttime);

}

 

//slychai 1

private void button1_Click(object sender, RoutedEventArgs e)

{

Ax = 15; Ay = 10;

Bx = 30; By = 30;

Cx = 40; Ex = 50;

image1.Source = bitmap1;

//-------

textBox30.Text = Convert.ToString(Ax); textBox31.Text = Convert.ToString(Ay);

textBox32.Text = Convert.ToString(Bx); textBox33.Text = Convert.ToString(By);

textBox34.Text = Convert.ToString(Cx); textBox35.Text = Convert.ToString(Ex);

}



Поделиться:


Последнее изменение этой страницы: 2016-09-20; просмотров: 162; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.142.119.241 (0.424 с.)