Мои программы
////////////////////////////////////////////////////////////////////////////////////////////////////
[size=28][color=red]Программа «2МЕДИАНА»[/color][/size]
[size=20][color=maroon]
Предисловие
1. Определения
2.Математика
3. Структура программы
4. Алгоритм программы по части 1
5.Алгоритм программы по части2
6.Алгоритм программы по части3
7. Вывод
8. Результат
9. Скачать программу «2Медиана»
Приложение 1
Распечатка программы «2МЕДИАНА»
[/color][/size]
[size=20][color=maroon] ПРЕДИСЛОВИЕ[/color][/size]
В дереве исследуется вершина с minmax расстоянием до вершин дерева.
Проведено моделирование и расчёт по формуле.
[size=20][color=maroon]
1. Определения. [/color][/size]
Дерево - связный граф без циклов.
Смежные вершины связаны неориентированным ребром или двумя противоположно направленными дугами.
В зависимости от решаемой задачи используются оба варианта.
Висячая вершина, вершина инцидентная только одному ребру (паре дуг).
Расстояние между двумя вершинами i и j равно сумме рёбер (дуг) по пути между этими вершинами.
Обозначается, как l(i,j).
Новая вершина дерева вводится на ребре между двумя смежными вершинами исходного дерева.
Если исходные вершины i и j, то для вновь введенной вершины k выполняется
l(l ,k) + l(k, j) = l(i, j)
[size=20][color=maroon]
2. Математика [/color][/size]
2.1. Медиана дерева.
Медиана - вершина исходного дерева или новая вершина, максимальное расстояние которой до остальных вершин дерева– минимально.
2.2. Нахождение медианы
Для нахождения медианы использован следующий алгоритм.
Шаг 1. Произвольно выбирается одна из висячих вершин - А
Шаг 2. Из вершины А определяетсярасстояние (сумма длин рёбер)до всех висячих вершин.
Шаг 3. Находится вершина Б с максимальным расстояниемl(А –Б).
Если таких вершиннесколько выбирается произвольно одна .
Шаг 4. Находится вершина В с максимальным расстоянием l(Б-В).
Шаг 5. Медиана есть вершина Г, которая лежит на пути Б-В и
l(Б,Г)= l(Г,В)=zg.
[size=20][color=maroon]
3. Структура программы [/color][/size]
3.1. Три части программы
Программа 1МЕДИАНА из трёх частей.
Часть 1
Программа «А - дерево» формирует случайное дерево.
Программа А-Дерево по ссылке
https://fguploniis.mybb.ru/viewtopic.php?id=1025
Часть 2
Находится вершина -медиана дерева.
Часть 3
Вычисление средних величин по циклам суперцикла.
Для набора статистики введен суперцикл.
Результаты суммируются и усредняются.
На каждом шаге суперцикла выполняются три операции.
А) Формируется случайное дерево ( Часть 1).
Б) Для случайного дерева находится медиана ( Часть 2).
По данным циклов суперцикла вычисляются средние величины (Часть 3)
3.3. Исходные данные для расчёта вводятся в текст программы (const)
Это:
x - число циклов суперцикла
n - число вершин исходного дерева
zs- задание средней длины ребра
at- корень степени
[size=20][color=maroon]
3. Алгоритм программы по части 1 [/color][/size]
Алгоритм программы по части 1 повторяет программу А-Дерево.
[size=20][color=maroon]
4.Алгоритм программы по части 2 [/color][/size]
Шаг 1
Вычисляется длины ребер (дуг) на основе средней длины ребра - zc.
Шаг 2
Выбирается случайно висячая вершина А (za)
Шаг 3
Находится вершина Б (zm).
l(А,Б) максимально по множеству вершин дерева
Построение матрицы pb
Матрица содержит информацию о направлении дуг при поиске расстояния от вершины А.
Для таких дуг, как метка, показана их длина.
Шаг 4
Находится вершина В(zf)
l(Б,В) максимально по множеству вершин дерева
Построение матрицы pc.
Матрица содержит информацию о направлении дуг при поиске расстояния от вершины Б.
Для таких дуг, как метка, показана их длина.
Шаг 5
Из вершины В определяется расстояниедо остальных вершин графа.
Находится вершина Б(zy).
l(В,Б) максимально по множеству вершин дерева
Построение матрицы pd.
Матрица содержит информацию о направлении дуг при поиске расстояния от вершины Б.
Для таких дуг, как метка, показана их длина.
Шаг 6
Находится матрица pv.
Матрица содержит только дуги по пути от Б к В и от В к Б.
Шаг 7
Находятся вершины на пути из Б в В.
Это осуществляется так.
Ведется поиск расстояний от В к Б только по дугам пути Б – В.
Шаг 8
Находится медиана – вершина x1.
Максимальное расстояние медианы до вершин дерева – zg.
Таких вершин две и более.
[size=20][color=maroon]
6.Алгоритм программы по части3 [/color][/size]
for i:=1 to x do
w1 := w1 + ww;
w2:= w1/x;
w3 := w2/(n);
w4:= w2/(zs);
w5:= w2/(zs*exp(1/at*ln(n)) );
На каждом цикле суперцикла находится величина zg .
zg = minmax l(x1, множество вершин дерева).
x1 - медиана
Сумма zg по всем циклам суперцикла - w1.
Усредненное по числу циклов - w2.
Усредненное по числу циклов и числу вершин дерева - w3.
Усредненное по числу циклов и средней длине ребра - w4.
Усреднено по числу циклов, средней длине ребра и делится на корень
1.75 (7/4)- w5.
Переменнаяw5 приx>50,zs>=10 и n>=100 слабо меняется при изменении n.
Отсюда принято
1,22 = zg:(zs * корень 1, 75 из n)
zg = 1,22 : (zs * корень 1, 75 из n) (1)
u1 расчёт zg по формуле (1).
u2 погрешность при расчётах по программе и по формуле.
u2 := (u1 - w2):u1;
[size=20][color=maroon]7.Вывод[/color][/size]
[color=blue][size=18]Выводятся следующие результаты в форме массивов
Переменных.
Назначение массивов в распечаткепрограммы – Приложение1.
Вывод переменных по расчёту медианы:
Edit 1 и Edit 2
Вывод переменных по расчёту случайного дерева:
Edit 3 и Edit 4
Основные переменные по
Вывод переменных по расчёту случайного дерева:
Edit 1 иEdit 2
Основные переменные по
Edit 1
y1=---0y2=---32y3=---88y4=---14y5=---72w2=---1131,700w3=---22,634w4=---11,317w5=---1,210u1=---1122,073u2=----0,009
Где
y1 – номер вершины, если медиана совпадает с вершиной.
И y=0, если не совпадает.
y2, y4 ребро, на котором введена медиана
y3, y5 длины ребер y2-медиана и медиана - y4
w2, w3, w4, w5, u1 u2 см. в разделе 6[/color=blue][/size=18]
[color=blue][size=18]Основные переменные по
Edit 2
za=---36zb=---18zc=---11zv=---11zn=---1442zm=---13zd=---2116zf=---14zg=---1058zq=---49zw=---49ze=---49zr=---2116zt=---0zy=---13x0=---113,15
za – вершина А
zn – l(А,Б)
zm – вершина Б
zf- вершинаВ
zd- l(Б,В)
zg -l(Б,В):2[color=blue][size=18]
[size=20][color=maroon]8.Результат[/color][/size]
Результаты расчёта по программе и формуле показали близкое совпадение.
Nu2
500,046
1000,008
2000,038
3000,029
4000,042
5000,069
600-0,021
700-0,007
800-0,012
900-0,002
1000-0,077
[size=20][color=maroon]
9. Скачать программу «2МЕДИАНА» [/size=20][/color=maroon]
https://disk.yandex.ru/d/b7WMbTGfVYohqg
////////////////
////////
[size=20][color=maroon]
Приложение 1 [/color][/size=20]
Распечатка программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Button1: TButton;
Button5: TButton;
Label1: TLabel;
StringGrid3: TStringGrid;
StringGrid4: TStringGrid;
Edit1: TEdit;
Edit2: TEdit;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label8: TLabel;
Label10: TLabel;
Edit3: TEdit;
Label11: TLabel;
StringGrid2: TStringGrid;
Label7: TLabel;
Label9: TLabel;
StringGrid5: TStringGrid;
StringGrid6: TStringGrid;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Edit4: TEdit;
StringGrid7: TStringGrid;
Label16: TLabel;
StringGrid8: TStringGrid;
StringGrid9: TStringGrid;
Label17: TLabel;
Label18: TLabel;
Label19: TLabel;
StringGrid10: TStringGrid;
Label20: TLabel;
Label21: TLabel;
Label22: TLabel;
Label23: TLabel;
Label24: TLabel;
Label25: TLabel;
Label26: TLabel;
Label28: TLabel;
procedure Button1click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
x=20;// число суперциклов
n=100;//число вершин
zs =100;//задание длины рёбер
at =1.75;// корень степени
var
Tick: Cardinal;
u:array [ 1..n, 1 ..n] of integer;//матрица фрагментов дерева при выполнении
//основного циклана пследнем цикле суперцикла
p : array [1..2*n,1..n] of integer;//матрица инциденций дуг
// на последнем цикле суперцикла
uu :array [1..5*n] of integer;//мартица номеров фрагментов
//по номерам циклов основного цикла на последнем цикле суперцикла
ua :array [1..5*n] of integer;//мартица номеров фрагментов
// по порядковому номеру объединения на последнем цикле суперцикла
r :array [1..n] of integer;// integer;//матрица инциденцийчисла дуг
//исходящих из вершин деревапосле последнего цикла суперцикла
pa :array [1..n, 1 ..n] of integer;//матрицадлин рёбер
pb :array [1..n, 1 ..n] of integer;//матрицарасстояний от вершины А
pc :array [1..n, 1 ..n] of integer;//матрицарасстояний от вершины Б
pd:array [1..n, 1 ..n] of integer;//матрицарасстояний от вершины В
pv :array [1..n, 1 ..n] of integer;//матрица
s1:array [1..n] of integer;// матрица суммы исходящих дуг
// с разбивкой по числу дуг инцидентных вершинам: 1,2, 3 ...n-1.//
s2:array [1..n] of variant;/// Число дуг в массиве S1 делится
//на число циклов в суперцикле
s3:array [1..n] of variant;//Число дуг в массиве S1 делится
//произведение число циклов в суперциклеи числа вершин.
// Ччисло циклов в суперцикле
ra : array [1..n] of integer;// матрица расстояний отвершины А
rb:array [1..n] of integer;//номера итераций при нахождении
//растояний от вершины А
rc:array [1..n] of integer;// матрица расстояний отвершины Б
rw:array [1..n] of integer;// /номера итераций при нахождении
//растояний от вершины Б
rd:array [1..n] of integer;// матрица расстояний отвершины В
rf:array [1..n] of integer;//номера итераций при нахождении
//растояний от вершины В
r1:array [1..n] of integer;//матрица расстояний
// на пути из вершины Б в В
r2:array [1..n] of integer;// номера итераций
// на пути изБ в В
r3:array [1..n] of integer;// перечень расстояний
// на пути из Б в В
r4:array [1..n] of integer;// перечень вершин
ww:array [1..x] of real; //
// на пути изБ в В
a, b, k, g, h, h1, q,i,j: integer; //
j1,j2,j3,j4,j5,j6,j7,j8,i2,i1,e, i3,i4,i5,i6,i7,i8,i9,i0: integer; //
m, aa, bb, z, f, c, w,v: integer;//
m1 ,m2,vv: integer;//
kk,ii , jj,t1, k1: integer;//
ia, ib, ic ,id,iw,ie, ja, jb,jc,jd,jw,je,jk : integer;//
za, zb, zc, zv, zn, zm,zd, zf, zg, zh, zk, zq, zw, ze, zr,zt,zy: integer;//
a1,tt: integer;//
z1, z2,z3: integer;//
x1, x2,x3,x4, y1,y2, y3, y4, y5: integer;//
x0, w1, w2,w3,w4, w5 :real; //
h2: variant;//
u1, u2, u3: real ;// вычислено по формуле
procedure TForm1.Button1click(Sender: TObject);
// окантовка
begin
begin
for q:=1 to n //нумерация по горизонтали в табл №1 ,
do StringGrid1.Cells[q,0]:=IntToStr(q);
for q:=1 to n// нумерация по вертикалив табл №1 ,
doStringGrid1.Cells[0,q]:=IntToStr(q);
for q:=1 to 42 //нумерация по горизонтали в табл №2,
do StringGrid2.Cells[q,0]:=IntToStr(q);
for q:=1 to 50// нумерация по вертикалив табл №2 ,
do StringGrid2.Cells[0,q]:=IntToStr(q);
for q:=1 to 3*n //нумерация по горизонтали в табл №3,
do StringGrid3.Cells[q,0]:=IntToStr(q);
for q:=1 to 25// нумерация по вертикалив табл №3 ,
doStringGrid3.Cells[0,q]:=IntToStr(q);
for q:=1 to n //нумерация по горизонтали в табл №4,
do StringGrid4.Cells[q,0]:=IntToStr(q);
for q:=1 to 2*n// нумерация по вертикалив табл №4 ,
doStringGrid4.Cells[0,q]:=IntToStr(q);
for q:=1 to n //нумерация по горизонтали в табл №1 ,
do StringGrid5.Cells[q,0]:=IntToStr(q);
for q:=1 to n// нумерация по вертикалив табл №1 ,
doStringGrid5.Cells[0,q]:=IntToStr(q);
for q:=1 to 50 //нумерация по горизонтали в табл №1 ,
do StringGrid6.Cells[q,0]:=IntToStr(q);
for q:=1 to 2*n// нумерация по вертикалив табл №1 ,
doStringGrid6.Cells[0,q]:=IntToStr(q);
for q:=1 to n //нумерация по горизонтали в табл №1 ,
do StringGrid7.Cells[q,0]:=IntToStr(q);
for q:=1 to n// нумерация по вертикалив табл №1 ,
doStringGrid7.Cells[0,q]:=IntToStr(q);
for q:=1 to n //нумерация по горизонтали в табл №1 ,
do StringGrid8.Cells[q,0]:=IntToStr(q);
for q:=1 to n// нумерация по вертикалив табл №1 ,
doStringGrid8.Cells[0,q]:=IntToStr(q) ;
for q:=1 to n //нумерация по горизонтали в табл №1 ,
do StringGrid9.Cells[q,0]:=IntToStr(q);
for q:=1 to n// нумерация по вертикалив табл №1 ,
doStringGrid9.Cells[0,q]:=IntToStr(q) ;
for q:=1 to n //нумерация по горизонтали в табл №1 ,
do StringGrid10.Cells[q,0]:=IntToStr(q);
for q:=1 to n// нумерация по вертикалив табл №1 ,
doStringGrid10.Cells[0,q]:=IntToStr(q)
end;
//суперцикл
for m:=1 to xdo
begin
/////////////////////////////////
// обнуление
za:=0;zb:=0;zc:=0;zv:=0;zn:=0;zm:=0;
zd:=0;zf:=0;zg:=0;zh:=0;zk:=0;zq:=0;
zw:=0;zr:=0;zt:=0;zy:=0;Ze:=0;
x0:=0;z1:=0; Z2:=0; Z3:=0;
f:=0;
for i:=1 to n do
for j:= 1 to n dobegin
pa[i,j] :=0;
pb[i,j] :=0;
pc[i,j] :=0;
pd[i,j] :=0;
pv[i,j] :=0;
end;
for i:=1 to n do
begin
ra:=0;
rb:=0;
rc:=0;
rw:=0 ;
rd:=0;
rf :=0;
r1:=0;
r2 :=0;
r3 :=0;
r4 :=0;
end;
////////////////////////////////////////
////////////////////////////////////////////////////////
////////////////////////////////////
//ЧАСТЬ 1
//нахождение случайного дерева
// обнуление
for id:=1 to 2*n do
for jd:=1 to n do
p[id,jd] :=0;
for iw := 1 to n do
for jw :=1 to n do
u[iw,jw] :=0;
for ie :=1 to 5*n do
uu[ie] :=0;
for ie :=1 to 5*n do
ua[ie] :=0;
for ie := 1 to n do
r[ie] := 0;
// исходные фрагменты
begin
for i:=1 to ndo
for j:=1 to ndo
if i=j thenp[i,j] :=1;
for i:= 1 to n do uu := 1;
for w:= 1 to (n-1) do// основной цикл
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
for i5 := 1 to 2do// пара фрагментов
begin // двойка
if i5 = 2 then//
C:=c+1;
//выбор фрагмента
V:=0;a:=0;
for i1 := 1 to (2*n) do
if uu[i1] >0 then
beginv:= v+1;
a:=random(v)+1;
end;
Z :=0;i2:=0;k:=0;
repeatbegin i2:= i2+1;k:=i2;
ifuu[i2] >0 then
z:= z+1 ; end;
until (z=a) ;
if i5 = 1 thenm1 := k;
if i5 = 2 thenm2 :=k;
if m=x then
begin
f:= f+1;
ua[f] :=k;
end;
//объединение фрагментов
vv := 0;
for i3 := 1 to n do
if p[k,i3]>0 then begin
vv:= vv+1;
p[w+n,i3]:=vv;
end;
//////////////////////////////////
//ввод ребра между соединяемыми фрагментами
//////////////////////////////// ii
begin
if i5 =1 then
begin
I7:=0;kk:= 0;; tt := 0;ii :=0;
for i6:=1 to n do
ifp[m1,i6]>0 thenkk := kk +1;
aa := random (kk) +1;
repeat
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
i7 := i7+1;
if p[m1,i7] >0 then tt:= tt+1; end;
until tt =aa;
end;
ii :=i7;
///////////////////////////////////
if i5 =2 then
begin
i0 := 0;k1:=0;t1:=0;jj:=0;
for i9:=1 to n do
ifp[m2,i9]>0 thenk1 := k1 +1;
bb := random (k1) +1;
repeat
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
i0 := i0+1;
if p[m2,i0] >0 then t1:= t1+1; end;
until t1 =bb;
jj :=i0;
u[ii,jj] := w;
u[jj,ii] := u[ii,jj];
end;
end;
/////////////////////////////////
if i5=2 then
uu[w+n] := w;
uu[k] := -w;
end ;
end;
h:=0;
for ia := 1 to n do
forja := 1 to n do
if u[ia,ja] >0 then
r[ia] := r[ia]+1;
for i:=1 to ndo
h := h+ r ;
for ib := 1 to n do
forjb := 1 to n do
if r[ib] = jb then s1[jb] := s1[jb] +1;
end;
/////////////////////////
for i:=1 to ndo
s2 := s1/x;
e:= h div 2;
for ic:=1 to n do
s3[ic] :=s1[ic]/(x*n);
for i:= 1 to n do
h1 := h1 + s1*i;
h2 := h1/x;
// ЧАСТЬ 2
// Нахождение медианы
begin
//Шаг1
//Расчёт длин рёбер
for i:=1 to n do
for j:=1 to n do
if j<ithen
if u[i,j]> 0 then
begin
pa[i,j] := (random (zs)+1)*2;
pa[j,i] := pa[i,j];
end;
//шаг 2
// Нахождение вершины А
for i:=1 to ndo
if r =1 thenzb:=zb+1;
zc:= random (zb) +1;
for i:=1 to n do begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
if r =1 thenzv :=zv +1;
if zv = zc then
begin
za := i;break
end;
end;
/////
//Шаг 3
//Находится вершина Б (zm).
//l(А,Б) максимально по множеству вершин дерева
//Построение матрицы pb
//Матрица содержит информацию о направлении дуг при поиске расстояния от вершины А.
//Для таких дуг, как метка, показана их длина.
ra[za] := 100;
for ie := 1 to n-1 do
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
for i:=1 to n do
for j:=1 to n do
ifpa[i,j]>0then
if ((ra>0) and (ra[j] =0))
then
begin
ra[j] := (ra + pa[i,j]); zq:= zq+1;
pb[i,j] := pa[i,j]; rc[j] := zq;
end;
end;
for i:=1 to n do ra:= ra -100;
//нахождение вершины Б
zn := ra[1]; zm :=1;
for i:=1 to n-1do
if ra[i+1]> zn then
begin zn := ra[i+1] ;
zm :=i+1 ;
end ;
//Шаг 4
//Находится вершина В(zf)
//l(Б,В) максимально по множеству вершин дерева
//Построение матрицы pc.
//Матрица содержит информацию о направлении дуг при поиске расстояния от вершины Б.
//Для таких дуг, как метка, показана их длина.
rb[zm] := 100;
for ie := 1 to n-1 do begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
for i:=1 to n do
for j:=1 to n do
if pa[i,j]>0 then
if ((rb>0) and (rb[j] =0))
then begin rb[j] := (rb + pa[i,j]) ;zw := zw +1;
pc[i,j] := pa[i,j];rw[j]:=zw;
end;
end;
for i:=1 to n do rb:= rb -100;
//построение матрицы pd
zd := rb[1]; zf :=1;
for i:=1 to n-1do
if rb[i+1]> zd then
begin zd := rb[i+1] ;
zf :=i+1
end ;
// Шаг 5
//Из вершины В определяется расстояниедо остальных вершин графа.
//Находится вершина Б(zy).
//l(В,Б) максимально по множеству вершин дерева
//Построение матрицы pd.
//Матрица содержит информацию о направлении дуг при поиске расстояния от вершины Б.
//Для таких дуг, как метка, показана их длина.
rd[zf] := 100;
for ie := 1 to n-1 do begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
for i:=1 to n do
for j:=1 to n do
if pa[i,j]>0 then
if ((rd>0) and (rd[j] =0))
then begin rd[j] := (rd + pa[i,j]) ; ze := ze +1;
pd[i,j] := pa[i,j]; rf[j] := ze;
end;
end;
for i:=1 to n do rd:= rd -100;
// Нахождение вершины Б
zr := rd[1]; zy :=1;
for i:=1 to n-1do
if rd[i+1]> zr then
begin zr := rd[i+1] ;
zy :=i+1
end ;
///////////////////////////////////////////////////////////
//////////////////////////////////////////
/////////////////////////////////////////////////////////////
zg := zd div 2;
//
x0 := zg/exp(1/at*ln(n));
//// сбор статистики
ww[m]:=zg ;
//Шаг 6
//Находится матрица pv.
//Матрица содержит только дуги по пути от Б к В и от В к Б.
for i:=1 to n do
for j:=1 to n do
begin
ifpc[i,j] = pd[j,i] then pv[i,j] := pa[i,j]
end;
// Шг 7
///////////// повторно расстояния от вершины В
//по матрице pv
// нахождение вершин в пути Б-В
// Ведется поиск расстояний от В к Б только по дугам пути Б - В.
r1[zy] := 100;
for ie := 1 to n-1 do begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
for i:=1 to n do
for j:=1 to n do
if pv[i,j]>0 then
if ((r1>0) and (r1[j] =0))
then begin r1[j] := (r1 + pv[i,j]) ;z1 := z1 +1;
r2[j] := z1;
end;
end;
for i:=1 to n do
if r1<>zq then
r1:= r1 -100;
// Нахождение вершины В
z2 := r2[1]; z3 :=1;
for i:=1 to n-1do
if r2[i+1]> z2 then
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
z2 := r2[i+1] ;
z3 :=i+1
end ;
////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
// Шаг 8
//Находится медиана - вершина x1.
//Максимальное расстояние медианы до вершин дерева - zg.
//Таких вершин две и более.
for i:=1 to n do
if r2>0 thenbegin
Form1.Caption:=IntToStr(GetTickCount-Tick);
r3[r2+1] := r1 ;
r4[r2+1] := i ;
end;
r4[1] := zy;
for i:=1 to n do
ifzg = r3 then y1 :=r4;
if y1 =0 then
for i:=1 to n-1 do
if (zg>r3) and (zg< r3[i+1]) then
begin y2 := r4 ;
y3 := zg- r3;
y4 := r4[i+1];
y5 := r3[i+1]-zg;
end;
end;
end;// суперцикл конец
// Обработка статистики
////
////
for i:=1 to x do
w1 := w1 + ww;
w2:= w1/x;
w3 := w2/(n);
w4:= w2/(zs);
w5:= w2/(zs*exp(1/at*ln(n)) );
w5:= w1/(zs*x*exp(1/at*ln(n)) );
//Эмпирическая формула (1)
u1 := 1.22* (zs*exp(1/at*ln(n)));
u2 := (u1 - w2)/u1;
/////////////////////////////
for i:=1 to ndo
for j:= 1 to ndo
StringGrid5.Cells[j,i]:=
IntToStr( pa[i,j]);
for i:=1 to ndo
StringGrid2.Cells[i,3]:=
IntToStr( r);
for i:=1 to 2*ndo
StringGrid2.Cells[i,1]:=
IntToStr( ua);
for i:=1 to ndo
StringGrid2.Cells[i,5]:=IntToStr(s1);
for i:=1 to ndo
StringGrid2.Cells[i,6]:=FormatFloat('0.0000',s2);
for i:=1 to ndo
StringGrid2.Cells[i,7]:=FormatFloat('0.0000',1000*s3);
for i:=1 to ndo
for j:= 1 to ndo
StringGrid1.Cells[j,i]:=
IntToStr( u[i,j]);
for i:=1 to 2*ndo
for j:= 1 to ndo
StringGrid4.Cells[j,i]:=
IntToStr( p[i,j]);
for i:=1 to 2*ndo
StringGrid3.Cells[i,1]:=
IntToStr( uu);
////////////////
Edit1.Text :=
'y1='+'---'+IntToStr(y1)+''+
'y2='+'---'+IntToStr(y2)+''+
'y3='+'---'+IntToStr(y3)+''+
'y4='+'---'+IntToStr(y4) +''+
'y5='+'---'+IntToStr(y5)+''+
//'w1='+'---'+FormatFloat('0.0',w1)+''+
'w2='+'---'+FormatFloat('0.000',w2) +''+
'w3='+'---'+FormatFloat('0.000',w3)+''+
'w4='+'---'+FormatFloat('0.000',w4)+''+
'w5='+'---'+FormatFloat('0.000',w5)+''+
' u1='+'---' +FormatFloat('0.000',u1)+'' +
'u2='+'--'+FormatFloat('0.000',u2);
Edit2.Text :=
'za='+'---'+IntToStr(za)+''+
'zb='+'---'+IntToStr(zb)+''+
'zc='+'---'+IntToStr(zc) +'' +
'zv='+'---'+IntToStr(zv) +'' +
'zn='+'---'+IntToStr(zn)+'' +
'zm='+'---'+IntToStr(zm) +'' +
'zd='+'---'+IntToStr(zd)+'' +
'zf='+'---'+IntToStr(zf) +'' +
'zg='+'---'+IntToStr(zg) +'' +'zq='+'---'+IntToStr(zq) +'' +
'zw='+'---'+IntToStr(zw)+'' +
'ze='+'---'+IntToStr(ze) +'' +
'zr='+'---'+IntToStr(zr)+'' +
'zt='+'---'+IntToStr(zt) +'' +
'zy='+'---'+IntToStr(zy)+'' +
'x0='+'---'+FormatFloat('0.00',x0);
Edit3.Text := 'kk='+'---'+IntToStr(kk)+''+
'aa='+'---'+IntToStr(aa)+'' +
'bb='+'---'+IntToStr(bb)+''+
'tt='+'---'+IntToStr(tt)+'' +
'ii='+'---'+IntToStr(ii)+'' +
'jj='+'---'+IntToStr(jj)+'' +
'k1='+'---'+IntToStr(k1)+''+
't1='+'---'+IntToStr(t1)+''+
'f='+'---'+IntToStr(f)+''+
'e='+'---'+IntToStr(e)+''+
'h='+'---'+IntToStr(h)+''+
't1='+'---'+IntToStr(t1)+''+
'k='+'---'+IntToStr(k) +''+
'w='+'---'+IntToStr(w)+''+
'c='+'---'+IntToStr(c)+''+
'z='+'---'+IntToStr(z)+''+
'v='+'---'+IntToStr(v)+' '+
'a='+'---'+IntToStr(a);
Edit4.Text :=
'm1='+'---'+IntToStr(m1)+''+
'm2='+'---'+IntToStr(m2) +''+
'i1='+'---'+IntToStr(i2) +''+
'i2='+'---'+IntToStr(i3) +''+
'i4='+'---'+IntToStr(i4) +''+
'i5='+'---'+IntToStr(i5)+''+
'i6='+'---'+IntToStr(i6)+''+
'i7='+'---'+IntToStr(i7) +''+
'i8'+'---'+IntToStr(i8) +''+
'i9='+'---'+IntToStr(i9)+''+
'i0='+'---'+IntToStr(i0) +''+
'h='+'---'+IntToStr(h) +''+
'h1='+'---'+IntToStr(h1) +''+
'h2='+'---'+FormatFloat('0.00',h2);
///////////////////////////////////////
for i:=1 to xdo
StringGrid6.Cells[i,11]:= FormatFloat('0.00',ww) ;
for i:=1 to ndo
for j:= 1 to ndobegin
StringGrid9.Cells[j,i]:=
IntToStr( pa[i,j]);
StringGrid7.Cells[j,i]:=
IntToStr( pb[i,j]);
StringGrid8.Cells[j,i]:=
IntToStr( pc[i,j]);
StringGrid5.Cells[j,i]:=
IntToStr( pd[i,j]);
StringGrid10.Cells[j,i]:=
IntToStr( pv[i,j]);
end;
for i:=1 to ndobegin
StringGrid6.Cells[i,1]:=IntToStr(ra);
StringGrid6.Cells[i,2]:=IntToStr(rc);
StringGrid6.Cells[i,3]:=IntToStr(rb);
StringGrid6.Cells[i,4]:=IntToStr(rw);
StringGrid6.Cells[i,5]:=IntToStr(rd);
StringGrid6.Cells[i,6]:=IntToStr(rf);
StringGrid6.Cells[i,7]:=IntToStr(r1);
StringGrid6.Cells[i,8]:=IntToStr(r2);
StringGrid6.Cells[i,9]:=IntToStr(r3);
StringGrid6.Cells[i,10]:=IntToStr(r4);
end;
end;
////////////////////////////////////////////////////////////////
procedure TForm1.Button5Click(Sender: TObject);
begin
close
end;
initialization
randomize;
end.