
- •Содержание: Введение
- •Постановка задачи
- •Разработка технического задания
- •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.2 Листинг приложения на базе haXe/php Файл Main.Hx
package ;
import haxe.Timer;
import php.Lib;
import php.Web;
class Main
{
static function main()
{
Lib.print("
<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8' /><title>П2. Haxe/PHP ABCE</title><style type='text/css'>
<!--
p { margin: 4px; }
form { margin: 0px;}
body {background-color: #FFFFFF;}
table { background-color: #F2F2F2; text-align: center;}
-->
</style></head><body><table width='640' border='1' align='center'cellspacing='0' cellpadding='0'><tr><td bgcolor='#C7C7C7'>П2. Haxe/PHP ABCE</td></tr><tr><td>
");
var params:Hash<Dynamic> = Web.getParams();
var Ax:Float = params.get("ax");
var Ay:Float = params.get("ay");
var Bx:Float = params.get("bx");
var By:Float = params.get("by");
var Cx:Float = params.get("cx");
var Cy:Float = By;
var Dx:Float = params.get("dx");
var Dy:Float = params.get("dy");
var Ex:Float = params.get("ex");
var Ey:Float = Ay;
var r_Cx:Float =Ex-Ax;
var u_By:Float = By-Ay;
var tests:Array<Bool> = [
((params.get("test1") == "on")?true:false),
((params.get("test2") == "on")?true:false),
((params.get("test3") == "on")?true:false),
((params.get("test4") == "on")?true:false),
((params.get("test5") == "on")?true:false)
];
var square_Rect = r_Cx * u_By;
var square = Math.round(Math_Square(Ax, Ay,Bx, By, Cx, Ex) * 1000) / 1000;
var soloma = Ax + Bx;
Lib.print("<table border='1' width='100%'>");
Lib.print("<tr><td>N</td><td>Математическая площадь</td> <td>Площадь (Монте-Карло)<td>Погрешность, %</td><td>Время, мс</td></td></tr>");
for (i in 0...tests.length)
if(tests[i])
{
var n:Int = cast 1000 * Math.pow(10, i);
Lib.print("<tr bgcolor='#ffffff'>");
Lib.print("<td>" + n + "</td>");
Lib.print("<td>" + square + "</td>");
var start_time = Timer.stamp();
var square_monte_carlo = MonteKarlo_Square(n, Ax,Ay,Bx, By, Cx,Ex);
var delta_time = Timer.stamp() - start_time;
Lib.print("<td>" + square_monte_carlo + "</td>");
Lib.print("<td>" + Math.round((Math.abs(square / square_monte_carlo - 1) * 100)*1000)/1000 + "</td>");
Lib.print("<td>" + Math.round(delta_time*1000) + "</td>");
Lib.print("</tr>");
}
Lib.print("</table>");
Lib.print("
<form id='form1' name='form1' action='index.html'>To return, click <input type='submit' value='Назад' /></form></td></tr></table></body></html>
");
}
static function Math_Square(x1:Float, y1:Float, x2:Float, y2:Float, x3:Float, x4:Float)
{
return Math.abs(((x4-x1) + (x3 - x2)) / 2) * (y2-y1);
}
static function getCurve(x1:Float,y1:Float,x2:Float,y2:Float,x3:Float)
{
var k:Float = (y2-y1)/(x2-x1);
var b:Float = y1-k*x1;
var y:Float = k*x3+b;
return y;
}
static function MonteKarlo_Square(n:Int, x1:Float, y1:Float, x2:Float, y2:Float, x3:Float,x4:Float)
{
//Count of hits
var points = 0;
var xMax = Math.max(Math.max(x1, x2),Math.max(x3,x4));
var xMin = Math.min(Math.min(x1, x2),Math.min(x3,x4));
var yMax = Math.max(y1, y2);
var yMin = Math.min(y1, y2);
var y3 = y2;
var y4 = y1;
var r_Cx:Float =xMax-xMin;
var u_By:Float = yMax-yMin;
var square_Rect = r_Cx * u_By;
var newy:Float = 0;
var randx:Float = 0; //init random variables
var randy:Float = 0;
var test = 0;
for (i in 0...n)
{
randx = Math.random() * (xMax - xMin) + xMin;
randy = Math.random() * (yMax - yMin) + yMin;
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;
}
}
}
}
return points*square_Rect/n;
}
}