Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЗ_ТП_Алексеев_220201_verson 1.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
480 Кб
Скачать

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;

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]