
- •Введение
- •Постановка задачи
- •Анализ задачи проектирования
- •Анализ вариантов использования программы
- •Требования к приложениям
- •Определение попадания точки в четырехугольник
- •Настольное приложение на базе erlang
- •Создание приложения в среде ErlyBird
- •Реализация приложения
- •Реализация приложения
- •Создание Web –сервиса
- •Создание клиентского приложения WebForm
- •Создание прокси-класса
- •Системные требования
- •Руководство системного программиста
- •Заключение
- •Список литературы
- •Приложение Файл monte.Erl(настольное приложение)
- •Файл print.Erl
- •Файл monte_carlo.Html(web приложение на базе скриптов)
- •Файл service.Cs(web сервис)
- •Файл Service.Asmx
- •Файл Default.Aspx(клиентская часть приложения WebForm)
- •Файл Default.Aspx.Cs
Файл print.Erl
-module(print).
-compile(export_all).
cout([XA,YA,XB,YB,XC,YC,XD,YD])->
io:format("
_______________________________________________________________
| ^ y |
| | b c |
| | --------o---------------------o-------| |
| | | / \\ | |
| | | / \\ | |
| | | / \\ | |
| | | / \\ | |
| | | / \\ | |
| | | / \\ | |
| | |/ \\| x |
| |------о-------------------------------------o-------> |
| 0 a d |
| |
|______________________________________________________________|
~n"),
io:format("A = {~w,~w}~nB = {~w,~w}~nC = {~w,~w}~nD = {~w,~w}~n~n",[XA,YA,XB,YB,XC,YC,XD,YD]),
io:format("Точная площадь трапеции: ~w~n",[trunc(monte:sq_trap({XA,YA},{XB,YB},{XC ,YC},{XD,YD}))]),
io:format("Точная площадь прямоугольника: ~w ~n ",[monte:sq_ABCD({XA , XD},{YA,YB})]),
io:format("
________________________________________________________________________
|№ | N | Попавших | Площадь | Время,ms |Погрешность,%|
"),
str({{XA,YA},{XB,YB},{XC,YC},{XD,YD}},1000,1),
str({{XA,YA},{XB,YB},{XC,YC},{XD,YD}},10000,2),
str({{XA,YA},{XB,YB},{XC,YC},{XD,YD}},100000,3),
str({{XA,YA},{XB,YB},{XC,YC},{XD,YD}},1000000,4),
str({{XA,YA},{XB,YB},{XC,YC},{XD,YD}},10000000,5).
str({{XA,YA},{XB,YB},{XC,YC},{XD,YD}},N,N1)->
[_Sq_ABCD,Sq_trap,T,Essen,Enter,_SQR_PARAL]=monte:start2({XA,YA},{XB,YB},{XC,YC},{XD,YD},N),
io:format("|~w |~s |~s|~s|~s| ~w ~n",[N1,optz(N),optz(Enter),optz(Sq_trap),optz(T),Essen]).
optz(N)->
Length=length(integer_to_list(N)),
integer_to_list(N)++delim(12-Length).
delim(N)->
delim(N,[]).
delim(0,List)->
List;
delim(N,List)->
delim(N-1,List++" ").
Файл monte_carlo.Html(web приложение на базе скриптов)
<html><head>
<title>Метод Монте-Карло</title>
<script language = javascript>
var Ax, Ay, Bx, By, Cx, Cy, Dx, Dy,square,bool=false;
function testcoord()
{
if(cont_form.Axx.value==""||cont_form.Ayy.value==""||cont_form.Bxx.value==""||cont_form.Byy.value==""||cont_form.Cxx.value==""||cont_form.Dxx.value=="")
{
window.alert("Данные введены не полностью!!!!!!!!!!!!!");
return false;
}
else
{
Ax = parseInt(cont_form.Axx.value);
Ay = parseInt(cont_form.Ayy.value);
Bx = parseInt(cont_form.Bxx.value);
By = parseInt(cont_form.Byy.value);
Cx = parseInt(cont_form.Cxx.value);
Dx = parseInt(cont_form.Dxx.value);
Cy = parseInt(cont_form.Cyy.value);
Dy = parseInt(cont_form.Dyy.value);
square = (By-Ay)*(Dx-Ax);
if(Ax >= Bx || Bx >= Cx || Cx >= Dx || Ay >= By)
{
window.alert("Проверьте введеные данные");
return false;
}
else
{
bool=true;
}
}
if(bool==true)
{
document.write("<title>Результаты работы </title>");
document.write("<html><center><h1 align = center>Результат вычислений</h1><table border= 1 width = 80%><tr>");
document.write("<td align=center>Общее количествоо точек</td>");
document.write("<td align=center>Количествово попавших точек</td>");
document.write("<td align=center>Точная площадь трапеции</td>");
document.write("<td align=center>Посчитаная площадь трапеции </td>");
document.write("<td align=center>Погрешность, %</td>");
document.write("<td align=center>Время выполнения, мс </td></tr>");
var line1,line2,sq_ABCD,sq_trap,cont,iter=1000,x,y,square_method,pogreshn,not;
sq_ABCD=(Dx-Ax)*(By-Ay);
sq_trap=(0.5*((Dx-Ax)+(Cx-Bx))*(By-Ay));
for(var i = 0; i < 5;i++)
{
var Start=0,Finish=0;
TimeStart = new Date();
Start=TimeStart.getTime();
sq_ABCD=(Dx-Ax)*(By-Ay);
sq_trap=0.5*(((Dx-Ax)+(Cx-Bx))*(By-Ay));
cont = 0;
not=0;
for(var k = 0; k < iter; k++)
{
x = (Math.random()*(Dx - Ax)) + Ax;
y = (Math.random()*(By - Ay)) + Ay;
line1 = (Ay-By)*(x-Bx)/(Ax-Bx)+By ;
line2 = (Cy-Dy)*(x-Dx)/(Cx-Dx)+Dy ;
if (line1 >= y && line2 >= y)
cont++;
}
square_method = sq_ABCD*(cont/iter);
pogreshn=(square_method/sq_trap)*100-100;
TimeFinish = new Date();
Finish=TimeFinish.getTime();
document.write("<tr><td align=center>"+iter+"</td>");
document.write("<td align=center>"+cont+"</td>");
document.write("<td align=center>"+sq_trap+"</td>");
document.write("<td align=center>"+square_method.toFixed(2)+"</td>");
document.write("<td align=center>"+Math.abs(pogreshn.toFixed(3))+"</td>");
document.write("<td align=center>"+(Finish - Start)+"</td></tr></center>");
iter=iter*10;
}
document.write("</table>");
document.write("<h2>Нажмите Ctrl+R для нового расчета</h2></html>");
return true;
}
else
{
window.alert("Проверьте корректность введенных данных");
return false;
}
}
function func()
{
if(document.cont_form.chek[0].checked==true)
{
cont_form.Axx.value='';
cont_form.Bxx.value='';
cont_form.Cxx.value='';
cont_form.Dxx.value='';
cont_form.Ayy.value='';
cont_form.Byy.value='';
cont_form.Cyy.value='';
cont_form.Dyy.value='';
cont_form.square.value='';
}
if(document.cont_form.chek[2].checked==true)
{
cont_form.Axx.value=100;
cont_form.Bxx.value=200;
cont_form.Cxx.value=300;
cont_form.Dxx.value=400;
cont_form.Ayy.value=100;
cont_form.Byy.value=200;
Ay()
By()
}
if(document.cont_form.chek[1].checked==true)
{
cont_form.Axx.value=Math.floor(Math.random()*(20));
cont_form.Bxx.value=Math.floor(Math.random()*(30))+parseInt(cont_form.Axx.value)+1;
cont_form.Cxx.value=Math.floor(Math.random()*(40))+parseInt(cont_form.Bxx.value)+1;
cont_form.Dxx.value=Math.floor(Math.random()*(50))+parseInt(cont_form.Cxx.value)+1;
cont_form.Ayy.value=Math.floor(Math.random()*(20));
cont_form.Byy.value=Math.floor(Math.random()*(30))+parseInt(cont_form.Ayy.value)+1;
Ay()
By()
}
}
function By()
{
cont_form.Cyy.value=(cont_form.Byy.value);
}
function Ay()
{
cont_form.Dyy.value=(cont_form.Ayy.value);
}
function Cy()
{
cont_form.Byy.value=(cont_form.Cyy.value);
}
function Dy()
{
cont_form.Ayy.value=(cont_form.Dyy.value);
}
</script>
</head>
<body>
<h1 align = center>Метод Монте-Карло</h1>
<img src = "image.gif" alt = "Картинка не лежит в папке страницы, попробуйте обратиться к системному администратору">
<figcaption>Трапеция abcd</figcaption>
<h2>Введите координаты вершин</h2>
<h3>Для правильной работы программы нужно, чтобы <mark>Ах < Bx < Cx < Dx и Ay < By</mark></h3>
<form action = "monte_carlo.html" method = post name = "cont_form">
<table>
<tr><td><input type="radio" name="chek" Checked onClick="func()"></td><td>Ввод координат</td></tr>
<tr><td><input type="radio" name="chek" onClick="func()"></td><td>Рандомные координаты</td></tr>
<tr><td><input type="radio" name="chek" onClick="func()"></td><td>Пример</td></tr>
</table>
<table>
<tr><td><center>X</center></td><td><center>Y</center></td></tr>
<tr><td>A:
<input type="text" name="Axx" size="20"autofocus="autofocus"></td>
<td>
<input type="text" name="Ayy" onKeyUp="Ay();" size="20"></td></tr>
<tr><td>B:
<input type="text" name="Bxx" size="20"></td>
<td>
<input type="text" name="Byy" onKeyUp="By();" size="20"></td></tr>
<tr><td>C:
<input type="text" name="Cxx" size="20"></td>
<td>
<input type="text" name="Cyy" onKeyUp="Cy();" size="20"></td></tr>
<tr><td>D:
<input type="text" name="Dxx" size="20"></td>
<td>
<input type="text" name="Dyy" onKeyUp="Dy();" size="20"></td></tr>
<tr><td><input type="button" value="Расчет >>" onclick = "testcoord() ">
</td></tr>
</table>
</form>
</body></html>