
- •Содержание: Введение
- •Постановка задачи
- •Разработка технического задания
- •2.1 Анализ вариантов использования программы
- •Требования к приложениям
- •Анализ алгоритма решения задачи
- •3.1 Метод Монте-Карло
- •3.2 Определение попадания точки внутрь трапеции
- •Настольное приложение wpf
- •4.1 Технология Windows Presentation Foundation
- •4.2 Логическое проектирование приложения
- •4.4 Руководство системного программиста
- •4.5 Руководство программиста
- •4.6 Руководство пользователя
- •4.6.1 Назначение приложения
- •4.6.2 Условия выполнения приложения
- •4.6.3 Выполнение приложения
- •4.6.1 Сообщения оператору
- •Тестирование приложения
- •5.1 Программные средства для разработки приложения
- •Логическое проектирование
- •5.2 Руководство системного программиста
- •5.2.1 Общие сведения
- •5.2.2 Системные требования
- •5.3.3 Проектирование приложения.
- •Листинг №2. Определение попадания точки в четырехугольник. HaXe.
- •6. Клиент-Серверное приложение на базе asp.Net
- •6.1 Программные средства разработки приложения
- •6.2 Логическое проектирование Web-сервиса
- •6.3 Логическое проектирование клиентской части
- •6.4 Генерирование прокси-класса
- •6.5 Системные требования
- •Руководство программиста
- •6.7.1 Назначение и условия применения приложения
- •Структура приложения
- •6.8.4 Сообщения оператору
- •6.9 Тестирование приложения
- •Анализ вычислительной эффективности приложений
- •Заключение
- •Приложения
- •9.1 Листинг приложения на базе wpf Файл MainWindow.Xaml
- •Файл MainWindow.Xaml.Cs
- •9.2 Листинг приложения на базе haXe/php Файл Main.Hx
- •Файл Index.Html
- •9.3 Листинг клиент-северного приложения на базе asp.Net Файл Service.Asmx
- •Файл Service.Cs
- •Файл MainWindow.Xaml
- •Файл MainWindow.Xaml.Cs
9.3 Листинг клиент-северного приложения на базе asp.Net Файл Service.Asmx
<%@ WebService Language="C#" CodeBehind="~/App_Code/Service.cs" Class="Service" %>
Файл Service.Cs
using System;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// Чтобы разрешить вызывать веб-службу из сценария с помощью ASP.NET AJAX, раскомментируйте следующую строку.
// [System.Web.Script.Services.ScriptService]
public class Service : System.Web.Services.WebService
{
public Service()
{
//Раскомментируйте следующую строку в случае использования сконструированных компонентов
//InitializeComponent();
}
//proverka popadaniya tochki dlya naklonnih liniy
public double getCurve(double x1, double y1, double x2, double y2, double x3)
{
double k = (y2-y1)/(x2-x1);
double b = y1-k*x1;
double y = k*x3+b;
return y;
}
[WebMethod]
public double[] MonteCarloABCE(double Ax, double Ay, double Bx, double By, double Cx, /*double Cy,*/ double Ex, /*double Ey,*/ int n)
{
double[] rezult = new double[5];
//------------
Random test = new Random();
//eto visota opisannogo pryamoygolnika
double RH = By - Ay;
//eto wirina opisannogo pryamoygolnika;
double RW = 0;
double MaxX = 0;
double MaxY = 0;
double MinX = 0;
double MinY = 0;
double Cy = By;
double Ey = Ay;
MaxX = Math.Max(Math.Max(Ax,Bx),Math.Max(Cx,Ex));
MaxY = Math.Max(Math.Max(Ay,By),Math.Max(Cy,Ey));
MinX = Math.Min(Math.Min(Ax,Bx),Math.Min(Cx,Ex));
MinY = Math.Min(Math.Min(Ay,By),Math.Min(Cy,Ey));
RW = MaxX - MinX;
RH = MaxY - MinY;
//Plowad Opisannogo pryamoygolnika:
double S_Rect_O = 0 ;
S_Rect_O = RW * RH; //plowad opisannogo recta
double points = 0; //eto kol-vo popavwih tochek
double Square_Karlo = 1; //hyi znaet zachem
double delta = 0; //pogrewnost
DateTime stop, start; //zasekaem time
TimeSpan time; //init time
double S_Teor = 0;
//------------
S_Teor = (By-Ay) * (((Ex-Ax) + (Cx - Bx)) / 2); //schitaem plowad po teorii
//------------
double RandX = 0; //init tochek dlya random
double RandY = 0; //analogichno
double newy = 0; //proverka popadaniya
start = System.DateTime.Now;
for (int i = 0; i < n; i++) //Monte_Karlo v rabote
{
if (i == 0)
{
start = System.DateTime.Now;
}//zasekaem vremya
RandX = (test.NextDouble() * (MaxX - MinX) + MinX); //generiryem
RandY = (test.NextDouble() * (MaxY - MinY) + MinY); //analogichno
// if(x3<x4) esli c<e(slychai 1)
if (Cx < Ex)
{
if (RandX < Bx)
{
newy = getCurve(Ax, Ay, Bx, By, RandX);
if (RandY <= newy)
{
points += 1;
}
}
if (RandX == Bx)
{
points += 1;
}
if (RandX == Cx)
{
points += 1;
}
if (RandX > Bx && RandX < Cx)
{
points += 1;
}
if (RandX > Cx)
{
newy = getCurve(Cx, Cy, Ex, Ey, RandX);
if (RandY >= newy)
{
points += 1;
}
}
}
//if(Cx==Ex) //esli c==e(slychai 2)
if (Cx == Ex)
{
if (RandX < Bx)
{
newy = getCurve(Ax, Ay, Bx, By, RandX);
if (RandY <= newy)
{
points += 1;
}
}
if (RandX >= Bx && RandX <= Cx)
{
points += 1;
}
}
//if(Cx>Ex) //esli c>e(slychai 3)
if (Cx > Ex)
{
if (RandX < Bx)
{
newy = getCurve(Ax, Ay, Bx, By, RandX);
if (RandY <= newy)
{
points += 1;
}
}
if (RandX == Bx)
{
points += 1;
}
if (RandX == Cx)
{
points += 1;
}
if (RandX == Ex)
{
points += 1;
}
if (RandX > Bx && RandX < Cx)
{
newy = getCurve(Cx, Cy, Ex, Ey, RandX);
if (RandY >= newy)
{
points += 1;
}
}
}
}
stop = System.DateTime.Now;
time = stop - start;
Square_Karlo = points / n * S_Rect_O;
delta = System.Math.Abs(((Square_Karlo - S_Teor) / S_Teor) * 100);
//------------
rezult[0] = n;
rezult[1] = points;
rezult[2] = Math.Round(Square_Karlo * 10000) / 10000;
rezult[3] = Math.Round(delta * 10000) / 10000;
rezult[4] = Convert.ToDouble(time.Milliseconds.ToString());
return rezult;
}
}