Мои программы
"Анализ "Скатерти Улама" блоками"
|||||||||||||||||||||||||||||||||||||||||||||||||||||
Исходник программы
https://yadi.sk/d/D4zAXfuz3QVHS8
|||||||||||||||||||||||||||||||||||||||||||||||
Скачать файл doc
https://disk.yandex.ru/i/jbTKrr5AjHeMiw
||||||||||||||||||||||||||||||||||||||||||||||||||
Описание программы "Анализ "Скатерти Улама" блоками"
ПРОГРАММА «Анализ «Скатерти Улама» блоками»
1. Скатерть Улама
Математический объект «Скатерть Улама».
Описание, например, в:
http://www.school12-egorievsk.narod.ru/studies/informat/yr...
http://letopis.kulichki.net/2010/04-2010/nom1856.htm
2. Определение блоков
2.1 Вертикальные и горизонтальные блоки
Программа «Анализ «Скатерти Улама» блоками» анализирует «Скатерть Улама» на основе подсчёта блоков разных видов.
Блоками названы непрерывные последовательности единиц или нулей.
В квадратной матрице максимальная длина блока равна числу строк (столбцов).
Поясним на примерах вертикальные и горизонтальные блоки.
Горизонтальный блок из четырех 1:
Пять блоков из пяти 0 и один блок из двух 0.
000000
111100
000000
000000
000000
000000
Вертикальный блок из пяти 1.
Пять блоков из пяти 0 и один блок и из одного 0.
000001
000001
000001
000001
000001
000000
2.2.Диагональные блоки
Определение главной и побочной диагонали матрицы:
http://www.fxyz.ru/формулы_по_математике/линейная_алгебра/матрицы/
В квадратных матрицах, главная диагональ – диагональная линия элементов, проходящая с северо-запада на юго-восток.
Диагональ с юго-запада на северо-восток -побочная диагональ.
Кроме главной и побочной диагонали имеются малые диагонали параллельные главной или побочной диагоналям (мое определение).
Ниже показана матрица, в которой кроме побочной диагонали из 1 имеютсяблоки на малых диагоналях параллельных побочной диагонали:
- малая диагональ c блоком из трех 1;
- три малые диагонали с блоками из одного 0.
- две малые диагонали с блоками из двух 0.
- две малые диагонали с блоками из трех 0;
- однамалаядиагональ с блоком из четырех 0;
- двемалые диагонали с блоками из пяти0
000001
001010
010100
101000
010000
100000
Проверка.
Общее число элементов по числу различных диагоналей:
1х6 +1х3 + 3х1 + 2х2 +2х3 + 1х4+2х5 =
6 +3+ 3+4+6+4+10 = 36;
Подобная проверка предусмотрена и в программе «Анализ «Скатерти Улама» блоками».
Ниже матрица с главной диагональю из 1 и блока из трех 1.
Блоки из 0 аналогично примеру выше.
101000
010100
001010
000100
000010
000001
В программе закомментировано построение случайной матрицы. Полезно для анализа расчётов по программе провести расчёты со случайной матрицей.
3. Критерий упорядочения матриц
Для сравнения различных матриц предлагается «показатель длины блоков» по величине и количеству блоков.
Вычисление «Показателя длины блоков» проводится в три этапа:
1)Длины блоков уменьшаются на 1.
Вычисляется сумма произведений полученной величины и числа блоков.
2)Вычисляется целая часть из произведения корняквадратного величины по п.1 и 10000.
3)Вычисляется целая часть из частного от деления величины по п.2 и числа строк. Матрица квадратная.
For i1:=1 to mm do
aa:= aa+ (i1-1)*(i1-1)* uu4[i1];
aaa1:=round (Sqrt(aa)*10000);
aaa:= round (aaa1/mm);
Данный показатель одинаков для случайных матриц разной размерности. При внесении в матрицу горизонтальных или вертикальных блоков показатель меняет свое значение.
4. Структура программы «Анализ «Скатерти Улама» блоками»
Программа состоит из двух частей:
Часть 1.
Построение на квадратной матрице с нечетными числами строк и столбцов «Скатерти Улама»
Часть 2
Вычисление числа блоков разных видов.
Вначале введем множества малых диагоналей параллельных побочной диагонали: А1 и А2 и- главной диагонали Б1 и Б2.
Пояснение:
*
*
А2*А1
*
*
*
*
Б1*Б2А2
*
В результате выполнения программы определяются массивы:
uu2 – число блоков 1 по горизонтали
uu3 – число блоков 0 по горизонтали
uu4 – число блоков 1 по вертикали
uu5 – число блоков 0 по вертикали
uu6 – число блоков 1: побочная горизонталь + А1
uu7 – число блоков 1: А2
uu8 – число блоков 1: побочная горизонталь + А1 +А2
uu9 – число блоков 1: главная горизонталь + Б1
uu10 – число блоков 1: Б2
uu11 – число блоков 1: главная горизонталь + Б1 +Б2
uu12 – число блоков 0: главная горизонталь + Б1
uu13 – число блоков 0: Б2
uu14 – число блоков 0: главная горизонталь + Б1 +Б2
5. Вывод по программы «Анализ «Скатерти Улама» блоками»
Таблица 1: «Скатерть Улама».
Простые числа выделены *.
Таблица 3: На «Скатерти Улама» показаны только простые числа.
Таблица 2. Вывод массивов uu2 – uu14.
Каждый столбец:
Имя массива, вид блоков 0 или 1, суммарное число единиц или 0 в блоках, число блоков по нарастанию длины блока, начиная с единичной длины блока.
Кроме того, выведены показатели длины блоков.
Остальные величины для настройки.
6. Результаты
1.Число блоков из 1 (простые числа) длиной более 1 по горизонтали и вертикали весьма мало.
2.Блоки из 0 (составные числа) по горизонтали и вертикали имеют следующую особенность: число блоков нечетной длиной значительно больше числа блоков с четной длиной.
3.В меньшей мере эта закономерность справедлива и для диагональных блоков из 0.
||||||||||||||||||||||||||||||
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Программа создания "Скатерти Улама" в графическом формате
А. Жуков «Изучаем DELPHI»
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function good(Numb:integer):boolean;
var
i:integer;
begin
good:= true;
for i:=2 to Trunc(Sqrt(Numb)) do
if (Numb mod i) =0then
begin
good := false;
exit;
end; end;
procedure TForm1.Button1Click(Sender: TObject);
label
up;
var
i,x,y,n,nx,ny,i1:integer;
begin
n:=2;
x:=Image1.Width div 2+1;
y:=x-1;
with Image1.Canvas do
begin Brush.Color:=clYellow;
FillRect(ClientRect);
Pixels[x,y]:=clBlack;
ny:=1;
up:for i:=1 to ny do
begin
dec(y); //1
inc(n);
if good(n) then Pixels[x,y]:=clBlack;
end;
nx:=ny+1;
for i:=1 to nx do
begin
dec (x); //2
inc(n);
if good(n) thenPixels[x,y]:=clBlack;
end;
ny:=nx;
for i:=1 to ny do
begin
inc(y);//3
inc(n);
if good(n) thenPixels[x,y]:=clBlack;
end;
nx:=ny+1;
for i:=1 to nx do
begin
inc(x);//4
inc(n);
if good(n) thenPixels[x,y]:=clBlack;
end;
if n>=Image1.Width*Image1.Height
then exit;
ny:=nx;
{ Application.ProcessMessages; }
goto up;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Close
end;
end.
||||||||||||||||||||||||||||||||||||||||||||
пост слишком длинный...
Математический объект «Скатерть Улама»
Может в институте кому-то и интересно, но зачем еще енто надо не могу понять Да и дельфи остался в узко определенных кругах.
goto up;
Этой строки было достаточно, чтобы больше никуда не смотреть.
Займитесь чем-то более полезным и размещайте код на предназначенных для этого ресурсах типа гитхаб
когда я писал проектарбайт, я выбрал программу в bcb5 кажется или 6, уже не помню.
Вот я там точно так же распечатал помимо кода все формы, чтобы записка показалась потолще и меньше самому писать.
Но здесь это зачем? Эти формы создаются через гуй и никому даже в голову не придёт копировать отсюда в файлы и делать проект.
В крайнем случае откройте для себя Git . Ссылки на репрозиторий хватило бы с головой, если кто-то захочет посмотреть как писали 23 года назад
Фашизм будет разбит
Человека карают только те боги, в которых он верит
Цель поста.С компом даже не слишком одаренные могут прогуляться на полях одарённых
Возможно, эта новость могла показаться интересной на форуме домохозяек, но никак не тут.
Понятно, что интересно и хочется с кем-то поделиться. Но сейчас писать код вообще не проблема. Тем более такой https://regal-wisp-d7e1af.netlify.app/ вполне возможно, что что-то и неправильно, но ведь ни одной строчки кода не написано лично.
Зачем на СИ,если быстрей на Д?
Выбор языка в данном случае лежит на исполнителе. Просто Дельфи был хорош в 90. Сейчас ситуация несколько другая, как и с Си.
Пишу, как хобби, программы,на разные темы.
Дельфи 7.
Поделюсь.
А Вы по образованию математик? Сейчас надо писать не на Дельфи и Бейсике, а на Яваскрипт и Солидити,
тогда можно в интернетах публиковать, ХТМЛ и Яваскрипт у пользователя сам работает, без компиляции.
Мои темы, мне надо больше числовых последовательностей: https://foren.germany.ru/programmer/f/40788253.html

ПРОГРАММА «2-Арифметическая»
ОГЛАВЛЕНИЕ
1. Сведения об арифметической прогрессии
2 Цель программы
3. Исходные данные
4. Алгоритм
5.Вывод
6. Итоги
7. Скачать программу
Приложение 1
Распечатка программы «2-Арифметическая»
1. Сведения об арифметической прогрессии
Википедия
Арифметическая прогрессия
Материал из Википедии — свободной энциклопедии
Арифмети́ческая прогре́ссия - последовательность чисел (членов прогрессии), в которой каждое число, начиная со второго, получается из предыдущего добавлением к нему постоянного числа(шага, или разности прогрессии).
2. Цель программы
Программа «2—Арифметическая» есть продолжение исследований про программе «1-Ариметическая». Цель программы изучить закономерности серий простых чисел при разных комбинациях первого числа прогрессии и шага прогрессии.
3. Исходные данные.
Пример
Const
w1=199;//нижняя граница первых чисел арифметической прогресии
w=1000; //верхняя граница первых чисел арифметической прогресии
ma =30;// нижняя граница шагов арифметической прогрессии
m=600;//верхняяграница шагов арифметической прогрессии
n=300;// число членов арифметической прогрессии
4. Алгоритм
4.1.Общий цикл по переменой r.
На каждой итерации первое число равно r.
Генерируются арифметическиепрогрессии с шагами от 1 до m.
4.2. На каждой итерации цикла r формируется массивы
s:array [1..m,1..n] of cardinal;//таблица арифметических прогрессий,
//каждая из n элементов, при m величин шагов, вычисляется
//последовательнодля 1-w первых чисел
a: array [1..w, 1..m] ofcardinal;//длины маскимальных серий
//простых чисел при разных сочетанияхпервых чисел и величины шага
c: array [1..w,1..m] ofcardinal;
// номер шага началамаксимальных длин серий простых чисел
h: array [1..50] ofcardinal;
//распределениедлинсерий простых чисел
4.3. По матрице ф находится m1 – дли на максимальной серии протычх чисел.
4.4.По числу m1 и матрицам aи c находятся матрицы
p:array [1..10,1..100] ofcardinal;//
//p[1,t] первые числа в максимальной серии
//p[2,t]шагв максимальной серии
//p[3,t]номер шагав максимальной серии
//p[4,t]длинамаксимальной серии
// t- порядковый номер максимальной серии.
//Равен номеру окантовки.
u: array [1..50] of cardinal;
//распределениедлин максимальных серий простыхчисел
h: array [1..50] ofcardinal;
5. Вывод
Выводятся все массивы введенные выше.
Массивы c и a выводятся в одной таблице №1
Пары чисел: ca
6. Итоги
Найдены три сериипо 10 простых.
Первое число – шаг – номер шага – длина серии простых
199210110
21042012610
799420125..10
7. Скачать программу
zip
https://disk.yandex.ru/d/gCPBHHR82Djq8Q
Приложение 1
Распечатка программы2-Арифметическая
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button5: TButton;
Label1: TLabel;
StringGrid2: TStringGrid;
StringGrid3: TStringGrid;
Edit1: TEdit;
Label4: TLabel;
StringGrid1: TStringGrid;
StringGrid4: TStringGrid;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
{ w1=4;//нижняя граница начальных чисел арифметической прогресии
w=40 ;//верхняя граница начальных чисел арифметической прогресии
ma =1;// нижняя граница шагов арифметической прогрессии
m=12;//верхняяграница шагов арифметической прогрессии
n=25;// число членов арифметической прогрессии }
w1=1;//нижняя граница первых чисел арифметической прогресии
w=1500; //верхняя граница первых чисел арифметической прогресии
ma =300;// нижняя граница шагов арифметической прогрессии
m=300;//верхняяграница шагов арифметической прогрессии
n=1000;// число членов арифметической прогрессии
var
Tick: Cardinal;
s:array [1..m,1..n] of cardinal;//таблица арифметических прогрессий,
//каждая из n элементов, при m величин шагов, вычисляется
//последовательнодля 1-w первых чисел
a: array [1..w, 1..m] ofcardinal;//длины маскимальных серий
//простых чисел при разных сочетанияхпервых чисел и величины шага
c: array [1..w,1..m] ofcardinal;
// номер шага началамаксимальных длин серий простых чисел
p:array [1..10,1..100] ofcardinal;//
//p[1,t] первые числа в максимальной серии
//p[2,t]шагв максимальной серии
//p[3,t]номер шагав максимальной серии
//p[4,t]длинамаксимальной серии
// t- порядковый номер максимальной серии.
//Равен номеру окантовки.
u: array [1..50] of cardinal;
//распределениедлин максимальных серий простыхчисел
h: array [1..50] ofcardinal;
//расрпределениедлинсерий простых чисел
i,j,q ,z,r,i1,j1,tt,t,k,x,e ,aa,v,d,y:cardinal;
n1, n2, n3,n4: cardinal;//
m1,m2,m3,m4,m5: cardinal;//
f1,f2,f3,f4,f5:cardinal;//
// Функция нахождения простых чисел
// По книгеЖуков "Программируем в Delphi"
function good(Numb:integer):boolean;
var
i:integer;
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
good:= true;
for i:=2 to Trunc(Sqrt(Numb)) do
if (Numb mod i) =0then
begin
good := false;
exit;
end; end;
procedure TForm1.Button1Click(Sender: TObject);
// окантовка
begin
for q:=1 to m// нумерация по вертикалив табл №1 ,
do if good (q) then StringGrid2.Cells[0,q]:='*'+IntToStr(q)
elseStringGrid2.Cells[0,q]:=IntToStr(q);
for q:=1 to n //нумерация по горизонтали в табл №1 ,
doif good (q) thenStringGrid2.Cells[q,0]:='*'+IntToStr(q)
elseStringGrid2.Cells[q,0]:=IntToStr(q);
for q:= 1 to w// нумерация по вертикалив табл №1 ,
do if good (q) then StringGrid1.Cells[0,q]:='*'+IntToStr(q)
elseStringGrid1.Cells[0,q]:=IntToStr(q);
for q:=1 to m //нумерация по горизонтали в табл №1 ,
doif good (q) thenStringGrid1.Cells[q,0]:='*'+IntToStr(q)
elseStringGrid1.Cells[q,0]:=IntToStr(q);
for q:= 1 to 10// нумерация по вертикалив табл №1 ,
do if good (q) then StringGrid4.Cells[0,q]:='*'+IntToStr(q)
elseStringGrid4.Cells[0,q]:=IntToStr(q);
for q:=1 to 100//нумерация по горизонтали в табл №1 ,
doif good (q) thenStringGrid4.Cells[q,0]:='*'+IntToStr(q)
elseStringGrid4.Cells[q,0]:=IntToStr(q);
//////////////////
aa:=((2*3)*(5*7)) ;
for r:= w1 to w do
begin
n1:=0; n2:=0;
for i:=ma to m do
for j:=1 to n do
s[i,j] :=0;
for i:=mato mdo
s[i,1] :=r;
for I:=ma to m do
for J:=2 to n do
s[i,J] :=s[i,J-1] +i;
//отыскание максимальныхсерийпростых чисел
//вычисление матрицыс[i,j]
for I:=ma to m do begin
n2:=0;n1:=0;
for J:=1 to ndobegin
if good (s[i,j]) thenbegin
x:=1;n2:=n2+1 ;d:=d+1;END;
if good (s[i,j])=FALSE then
begin
h[n2] := h[n2] +1;
v:= v+1;
end;
if (good (s[i,j])=FALSE )AND (N2>N1)
then begin
n1:= n2; n2:=0; a[r,i] :=n1;
n4:=j;c[r,i] := J-n1;
end;
if (((j=n) and(n2>0))and good (s[i,j])) thenh[n2] := h[n2] +1;
if j=n then
if ((good (s[i,j])AND (N2>N1)))
then begin
n1:= n2;h[n1] := h[n1] +1; n2:=0; a[r,i] :=n1; n4:=j;
c[r,i] := J;
end;
if (good (s[i,j])=FALSE )then n2:=0;
end;
if x=0 then e:=e+1;
x:=0;
end;
end;
/////////распределение серий по длине
/////////////////////////////
//отыскание максимальной серии
for i:=w1 to w do
for j:=ma tom do
if a[i,j] >m1 then
begin m1:= a[i,j]; m2:=i; m3:= j;m4:=c[i,j];
end;
for i:=w1 to w do
for j:=ma tom do
if a[i,j]=m1 then
m5:= m5+1;
for i:=w1 to w do
for j:=ma tom do
if a[i,j] = m1 then begin
k:=k+1;p[1,k] :=i;p[2,k]:=j; p[3,k] := c[i,j]; p[4,k] := m1;
end;
u[50]:=0;
for i:=w1 to w dobegin
for j:=ma tom do
if a[i,j]>0 then
begin
t:=a[i,j];
u[t]:=u[t] +1;
end;
end;
for i:=1 to 50 do
if h>0 then
Z:=z+h*i;
for i:=1 to 50 do
if u>0 then
tt:=tt+u*i;
y:= v+d;
StringGrid2.Cells[0,0] := 's[..]';
StringGrid1.Cells[0,0] := 'a[]c[]';
StringGrid4.Cells[0,0] := '№ 4';
StringGrid4.Cells[0,1] := 'p[1,k]';
StringGrid4.Cells[0,2] := 'p[2,k]';
StringGrid4.Cells[0,3] := 'p[3,k]';
StringGrid4.Cells[0,4] := 'p[4,k]';
StringGrid4.Cells[0,7] := 'u[1..50]';
StringGrid4.Cells[0,8] := 'h[1..50]';
Form1.Caption:=IntToStr(GetTickCount-Tick);
for i:=1 to mdo
for j:=1 to n doif s[i,j]>0 then
if good (s[i,j]) then StringGrid2.Cells[j,i]:='*'+ ' '+ IntToStr(s[i,j])
else StringGrid2.Cells[j,i]:= IntToStr(s[i,j]);
Form1.Caption:=IntToStr(GetTickCount-Tick);
for i:=w1 to wdo
for j:=ma to m do
StringGrid1.Cells[j,i]:=
IntToStr( c[i,j])+''+ IntToStr( a[i,j]);
for i:=1 to 5do
for j:=1 to 100 do
if good (p[i,j]) then
StringGrid4.Cells[j,i]:='*'+IntToStr(p[i,j])
elseStringGrid4.Cells[j,i]:= IntToStr(p[i,j]);
for i1:=1 to 50 do
StringGrid4.Cells[i1,7]:= IntToStr(u[i1]);
for i:=1 to 50do
StringGrid4.Cells[i,8]:= IntToStr(h);
Edit1.Text :='n1=' +''+ IntToStr(n1)+''+
'n2=' +''+ IntToStr(n2)
+''+ 'n3=' +''+ IntToStr(n3)
+''+ 'n4=' +''+ IntToStr(n4)
+''+ 'm1=' +''+ IntToStr(m1)
+''+ 'm2=' +''+ IntToStr(m2)
+''+ 'm3=' +''+ IntToStr(m3)
+''+ 'm4=' +''+ IntToStr(m4)
+''+ 'm5=' +''+ IntToStr(m5)
+''+ 'f1=' +''+ IntToStr(f1)
+''+ 'f2=' +''+ IntToStr(f2)
+''+ 'h[1]=' +''+ IntToStr(h[1])
+'' +' h[2] '+''+ IntToStr(h[2])
+'' +'v='+ ''+ IntToStr(v)
+''+ 'd=' +''+ IntToStr(d)
+''+ 'y=' +''+ IntToStr(y) ;
Edit2.Text :=IntToStr(u[50])
+''+'z=' +''+ IntToStr(z)
+''+ ' tt=' +''+ IntToStr(tt)
+''+ ' e=' +''+ IntToStr(e)
+''+ ' x=' +''+ IntToStr(x)
+''+ ' aa=' +''+ IntToStr(aa);
Form1.Caption:=IntToStr(GetTickCount-Tick);
end;
////////////////////////////////////////////////////////////////
procedure TForm1.Button5Click(Sender: TObject);
begin
close
end;
initialization
randomize;
end.
Странно, когда человек не понимает с первого раза. Банить что ли нужно обязательно?
Не надо постить здесь простыни программ и детский сад. Сделайте себе блог и играйтесь там.
Кстати, программы выводятся здесь с использованием тэга 'pre' в ручном режиме? Но лучше прилагать файл если больше десятка строк.
Текст для комфорта.
не для комфорта, а для раздражения
Что мне интересно
Ну так и делайте то, что вам интересно, зачем это здесь?
Неужели непонятно, что это уровень детского сада.
Я прилагаю ссылки на папку программы и doc.
Неужели серьезно думаете, что кто то это будет смотреть?
Логические многочлены
Скачать текст
https://disk.yandex.ru/i/60DI4OG5bXSvEw
||||||||||||||||||||||||||||||||||||||||||||||||||
ПРОГРАММА
1-многочлен
Генерация случайногологического многочлена
1.Общее описание
2.Условные обозначения
3.Упрощения
4.Структура многочлена
5.Формированиеисходного многочлена
6.Формирование концовки многочлена
7.Ввод – вывод
1.Общее описание
Программа предназначена для формирования случайных логических многочленов.
Случайным образом выбирается порядок элементов логического многочлена:
логические операции (связки), скобки, логические операции (связки), переменные.
Связки: отрицание, конъюкция, дизъюнкция,импликация и эквиаленция
Скобки: левая иправая
Принято: 11 переменных.
2.Условные обозначения
Для упрощения программы введены условные обозначения.
Связки:
Отрицание: знак минус«-»
Связки:
Конъюнкция:1
Дизъюнкция: 2
Импликация:3
Эквиваленция: 4
Скобки:
Левая: 6
Правая: 7
Переменные
Числа в диапазоне:10 -11
В формуле(A связка B): A - первая переменная,B – вторая переменная
3.Упрощения
В ходе построения многочлена не формируются последовательности:
Отрицаниеотрицание,отрицаниеотрицаниеотрицание………………………………………..
Переменная связка переменная связкапеременная ……….
4. Структура многочлена
4.1 Вначале формируется исходный многочлен длиной y.
Левые скобки и переменные, перед которыми отрицания, считаются за один элемент многочлена.
Если исходный многочленлогически не завершен, добавляется концовка.
4.2.Построение многочлена начинается с левой скобки или переменной.
4.3. При формировании многочлена вычисляются:
k - Число левых скобокp – число правых скобок
При формировании многочлена проверяется условие: k>p
В сформированном многочлене k=p
4.4 Формирование исходного многочлена продолжается, пока с учётом концовки можно создать логически непротиворечивый многочлен.
То есть исходные многочлены имеют длину в диапазоне: 3 …y
5.Формированиеисходного многочлена
Левая скобка: левая скобка илипервая переменная
Связка: левая скобка, вторая переменная
Первая переменная: связка
Связка: левая скобка или вторая переменная
Правая скобка: связка или правая скобка
Вторая переменная: правая скобка
6.Формирование концовки многочлена
Левая скобка – правыескобки
Правая скобка – правые скобки
Вторая переменная – правые скобки
Связка – переменная – правые скобки
Первая переменная – связка – вторая переменная – правая скобка
7.Ввод и вывод
Входные данные:
y=25;//предельная длина исходного многочлена
a1 = 5;// для вычисления вероятности
b1 = 5 ; // для вычисления вероятности
b2=5; // для вычисления вероятности
d1=5;// для вычисления вероятности
w=5; // для вычисления вероятности
w1=5;// для вычисления вероятности
w2=5;// для вычисления вероятности
w3=5;// для вычисления вероятности
Вывод:
Первая строка: многочлен
Вторая строка: номер операции, в которой определен элементмногочлена
Третья строка: текущая величина k
Четвертая строка: текущая величина p
Пятая строка: метка T (0 и 1). Служит для определения переменой, первая или вторая.
Скачать
https://yadi.sk/d/TLyaE5TMSo9dFg
///////////////
//////////////////////////////////////
ПРОГРАММА
2- многочлен
Генерация случайногологического многочлена заданной длины
Программа 2- многочлен является развитием программы 1- многочлен.
Отыскиваются путем перебора исходный многочлен длиной y.
Введен циклrepeat …..until.
Числоитераций в этом цикле ограничено числом f.
Которое задается.
Текущее число итераций в цикле – число v.
Если найден исходный многочлен длиной y включается концовка.
Вывод многочлена.
Если за число итераций fискомый многочлен не найден, выводится текущий результат.
Скачать обновление 10 01 2020 h
Программа: 2-2 многочлен
https://yadi.sk/d/SSfiUDsWgz3W9Q
////////////////////////////////////////////
/////////////////////////////////////////////////////
ПРОГРАММА
Вычисление логического многочлена
]1.О программе
2.Исходные данные
3.Алгоритм
4.Данные для отладки
5.Итог
6.Вывод
7.Скачивание
1.О программе
Программа «Вычисление логического многочлена» предназначено для вычисления логического многочлена.
Программа на Дельфи7.
Вычисляется многочлен, генерируемый программой «Генерация случайногологического многочлена».
Цель программы.
Оценить корректность программ:
«Генерация случайногологического многочлена» и«Вычисление логического многочлена».
То есть этап исследования.
]2.Исходные данные[/color]
Исходные данные для вычисления логического многочлена те же, что в программе
«Генерация случайногологического многочлена».
3.Алгоритм
Переменным случайно присваиваются величины 1 и 0.
Затем последовательно осуществляются итерации.
Итерация 1.
Последовательность:
Левая скобка – переменная – правая скобка
Заменяется на– переменная.
Если такой последовательности в многочлене нет, многочлен не меняется.
Итерация 2
Последовательность
Переменная – связка – переменная
Вычисляется: 0 или 1.
Если такой последовательности в многочлене нет, многочлен не меняется.
Последовательность:
переменная 1- связка 1 –переменная 2 – связка 2 – переменная 4
Вычисляется в такой последовательности:
переменная 1- связка 1(переменная 2 – связка 2 – переменная 4)
Редко получается фрагмент многочлена, не доступный сокращению.
4.Данные для отладки
Матрица 1
Первые 5 строк – программа «Генерация случайногологического многочлена».
Строка 6
Число левых скобок после каждой итерации.
rr:array[1..2*y] of integer ;//
Строка 7
Число правых скобок после каждой итерации.
dd:array[1..2*y] of integer ;//
Строка 8
Величины переменных
za:array[1..11] of integer ;//
Строка 9
Позиция в многочлене при очередной итерации 1
Строка 9
xa:array[1..50] of integer ;//
Строка 10
Позиция в многочлене при очередной итерации 2
fa:array[1..300] of integer ;//
строка 11
Переменная aa
1 итерация 1, 0 итерация 0
ga:array[1..300] of integer ;//
Со строки 14 последовательность преобразований исходного многочлена
m:array[1..(2*y),1..300]of Int64;//
Матрица 4
Для отладки
v1:array[1..(2*y),1..300]of Int64;//
5.Итог
Edit 5
www – число итераций, цикл - ii
vvv – значение многочлена
]6.Вывод
Необходимо дальнейшее исследование для исключения
не корректных ситуаций.
]7.Скачивание
Скачать программу
Вычисление логического многочлена.
Исправлено10 01 2012
Программа 2-2 многочлен
]
https://yadi.sk/d/ZwuM25wo4mJyOw
//////////////////////////////
//////////////////////////////////////
ПРОГРАММА
3-1 многочлен
1.Общее описание
2.Алгоритм
3.Вывод
1.Общее описание
Программа, версия 3-1, предназначена для выявления соответствия в многочлене правых и левых скобок.
Кстати.
Недостаток Дельфи 7:
Скобкиbeginend не пронумерованы.
В сложной программе можно совершить ошибку.
]2.Алгоритм
Исходный многочлен генерируется по программе генерации случайного многочлена:
Версия 1-1.
Сканируется многочлен.
На каждом шаге определяется соответствие правой и левой скобки.
Находится фрагментыправая …… левая скобка.
Скобки нумеруются по номеру шага, на котором выявлено соответствие.
Нумерованные скобки исключаются из рассмотрения.
3.Вывод:
Первая строка в таблице № 2: исходный многочлен
Вторая строка: номера левых и правых.
Скачать: версия3-1
https://yadi.sk/d/vg8iwKUdKV5xdQ
/////////////////////////////////
/////////////////////////////////////
Конечно! Вот пример программы на Delphi 7, которая случайным образом генерирует логические многочлены, используя логические операции (связки), скобки и переменные.
unit LogicalPolynomial;
interface
uses
SysUtils, Classes, Controls, Forms, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
function GenerateRandomPolynomial(Depth: Integer): string;
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
Operations: array[0..4] of string = ('~', '&', '|', '->', '<->');
Variables: array[0..3] of string = ('A', 'B', 'C', 'D');
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Clear;
Memo1.Lines.Add('Случайный логический многочлен:');
Memo1.Lines.Add(GenerateRandomPolynomial(3));
end;
function TForm1.GenerateRandomPolynomial(Depth: Integer): string;
var
OpIndex, VarIndex: Integer;
SubFormula1, SubFormula2: string;
begin
if Depth = 0 then
begin
VarIndex := Random(Length(Variables));
Result := Variables[VarIndex];
Exit;
end;
OpIndex := Random(Length(Operations));
if Operations[OpIndex] = '~' then
begin
Result := Operations[OpIndex] + '(' + GenerateRandomPolynomial(Depth - 1) + ')';
end
else
begin
SubFormula1 := GenerateRandomPolynomial(Depth - 1);
SubFormula2 := GenerateRandomPolynomial(Depth - 1);
Result := '(' + SubFormula1 + ' ' + Operations[OpIndex] + ' ' + SubFormula2 + ')';
end;
end;
end.
это сочинил copilot проверять не стану.
Кстати это была тема той самой проектарбайт и ваша программа смотрится на фоне той очень бледно. Хотя сейчас понимаю, что сделана она была абсолютно неграмотно. У меня не было ограничения по количеству переменных и итераций. Ну разве что размером окна ввода
Фашизм будет разбит
Человека карают только те боги, в которых он верит
ПРОГРАММА «Простые 1»
ОГЛАВЛЕНИЕ
1. Общее
2. Математика
3. Вывод
4.Анализ результатов
5. Примеры многочленов
6.Скачать программу «Простые 1
Приложение 1
Распечатка программы «Простые 1»
1. Общее
Не всем дано доказывать теоремы.
Но каждый может внести что-то новое в науку при помощи компьютера.
Моделируя ситуации в разных областях науки.
Это интересней, чем компьютерные игры, которые, по сути, пустая трата времени.
Но для моделирования всяких ситуаций надо владеть какими-то познаниями в программировании. Изучение современных языков трудностей не представляет.
Так для овладения языком Дельфи 7 достаточно месяца три.
2. Математика
Многие многочлены в определенном диапазоне x дают последовательность простых чисел.
Об этом, например, a*x*x +b*x +c
http://vlad-utenkov.narod.ru/personal2/informat/km/pr/pr.h...
Наиболее известный многочлен такого вида открыт Эйлером:
x*x - x + 41
В программе «Простые 1» собирается статистика по значениям квадратных многочленов
a*x*x +b*x +cв диапазоне от 1 до n.
Статистика собирается для двух многочленов:
a*i*i +b*i +cи a1*i*i+b1*i +c1
где i текущая переменная от 1 до n
a, b, c, a1, b1, c1 и nзадаются, как const, в тексте программы.
Такая же статистика и для ряда натуральных чисел.
3. Вывод
Массивы
s1:array [1..n] of integer;// значения многочлена № 1
s2:array [1..n] of integer;//1 -простое число, 0 - составное число
//многочлен № 1
s3:array [1..n] of integer;// значения многочлена № 2
s4:array [1..n] of integer;// 1 -простое число, 0 - составное число
//многочлен № 21
s5:array [1..n] of integer;// простые числа натурального ряда
s6:array [1..n] of integer;//составные числа натурального ряда
s7:array [1..n] of integer;//ряд простых чисел
s8:array [1..50] of integer;// сравнение максимальных
//цепей простых чисел в многочленах№1 и №2,
// Если длина цепей одинакова
const
n =10000;// число вычислений значений многочленови ряда натуральных чисел
// многочлен Эйлера
a=1;
b = -1;
c=41;
// двойник многочлена Эйлера
a1= 4;
b1= -258 ;
c1=4201;
Переменные
a= 1-первый коэффициент многочлена
b= -1 – второй коэффициент многочлена
c=41 – третий коэффициент многочлена
v=0- равна 0, если все величины многочлена больше нуля.
Если величина многочлена меньше или равна нулю,v равно текущему i(x)
z1=4149- число простых
z2=5851- число составных
w=40 – максимальная длина цепи из простых
m=0 -текущее величина цепи из простых
j1=40- величина i в конце максимальной цепи из простых
j2= 1- величина i в начале максимальной цепи из простых
s=19- максимальная длина цепи из составных
t=2- текущее величина цепи из составных
u1=9283- величина i в конце максимальной цепи из составных
u2= 9265 - величина i в начале максимальной цепи из простых
y1= 9999 – величина i для последнего простого из n величин многочлена
s2[n]= 0
d1= 262125,82080 – средняя величиназначений многочлена
h1= 0,4149 – отношение числа простых к n
Вывод для многочлена №2 и ряда натуральных чисел аналогичен
Рядпростых чисел
n4=5736397 – сумма простых
z7=1230- число простых
d4= 4663,73740- средняя величина простого
4.Анализ результатов
4.1. Последовательности от многочленов можно сравнивать по доле простых.
В натуральном ряду среди первых 10000 доля простых – 0,123
4.2. Подбором коэффициентов многочлена можно получить последовательность без простых.
Например, все члены последовательности делятся на 2 или 3.
4.3. Имеется многочлена с простыми и составными, но доля простых мала.
Например
h2= 0,047
a1=1;
b1= -3 ;
c1=17;
4.4.Многочлен Эйлера даёт последовательность в 40 простых чисел при изменении x от1 до 40.
Величины простых чисел возрастают, но их последовательность не совпадает с последовательностью простых натурального ряда.
Для удобства сравнения во множестве простых натурального рядапростые даны с 41, как и для многочлена Эйлера.
4.5. Найден двойник многочлена Эйлера.
a1= 4;
b1= -258 ;
c1=4201
При n=10000 доля простых для многочлена Эйлера- 0, 4149, для двойника – 0, 3802
Тоже цепочка из 40 простых, но при x = 13-52
Величины многочлена в этом диапазоне те же, что и для многочлена Эйлера, но порядок другой.
Результат сравнения множествоs8.
5. Примеры многочленов
// многочлен Эйлера
a=1;
b = -1;
c=41;
// двойник многочлена Эйлера
//a1= 4;
// b1= -258 ;
//c1=4201;
// двойник многочлена Эйлера
//a1= 1;
//b1= -3 ;
//c1=43;
// нетпростых, только чётные
//a1= 1;
// b1= -5 ;
//c1=40;
//мало простыхполовина чётных
//a1= 1;
// b1= -8 ;
//c1=41;
/// очень мало простых половина чётных
//a1= 2;
//b1= -3 ;
//c1=39;
// простых нет все значения делятся на три
//a1=3;
// b1= -3 ;
//c1=39;
// мало простыхh2= 0,047
//a1=1;
//b1= -3 ;
// c1=17;
6.Скачать программу «Простые 1
https://disk.yandex.ru/d/SVq4kurS6Eo6Ug
Приложение 1
Распечатка программы «Простые 1»
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button5: TButton;
Label1: TLabel;
StringGrid2: TStringGrid;
StringGrid3: TStringGrid;
Edit1: TEdit;
Label2: TLabel;
Label4: TLabel;
Label5: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Label3: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
n =10000;// число вычмислений значений многочленов
// многочлен Эйлера
a=1;
b = -1;
c=41;
// двойник многочлена Эйлера
//a1= 4;
// b1= -258 ;
//c1=4201;
// двойник многочлена Эйлера
//a1= 1;
//b1= -3 ;
//c1=43;
// нетпростых, только чётные
//a1= 1;
// b1= -5 ;
//c1=40;
//мало простыхполовина чётных
//a1= 1;
// b1= -8 ;
//c1=41;
/// очень мало проствых половина чётных
//a1= 2;
//b1= -3 ;
//c1=39;
// простых нет все занчения делятся на три
//a1=3;
// b1= -3 ;
//c1=39;
// мало простыхh2= 0,047
//a1=1;
//b1= -3 ;
// c1=17;
var
Tick: Cardinal;
s1:array [1..n] of integer;// значения многочлена № 1
s2:array [1..n] of integer;//1 -простое число, 0 - составное число
//многочлен № 1
s3:array [1..n] of integer;// значения многочлена № 2
s4:array [1..n] of integer;// 1 -простое число, 0 - составное число
//многочлен № 21
s5:array [1..n] of integer;// простые числа натурального ряда
s6:array [1..n] of integer;//составные числа нарурального ряда
s7:array [1..n] of integer;//ряд простых чисел
s8:array [1..50] of integer;// сравнение максимальных
//цепей простых чисел в многочленах№1 и №2
r,w, w1, w2, k,f,g, h, ha,q,i,j : integer; //
j1,j2,j3,j4,j5,j6,j7,j8,i2,i1, i3,i4,i5,i6,i7,i8,i9,i0, l: integer; //
x1, x2, z,z1, z2, z3, z4,z5, z6,z7,v,v1,v2, e: integer;//
m, m1, m2, mm, a2,m3,m4,m5 ,vv: integer;//
y, y1, y2,y3, d, p, s, t, u1,u2 , p1, t1, u3,u4 : integer;//
h1,h2,h3: variant;//
n1, n2, n3,n4: cardinal;//
d1, d2, d3, d4: variant;//
// Функция нахождения простых чисел
// По книгеЖуков "Программируем в Delphi"
function good(Numb:integer):boolean;
var
i:integer;
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
good:= true;
for i:=2 to Trunc(Sqrt(Numb)) do
if (Numb mod i) =0then
begin
good := false;
exit;
end; end;
procedure TForm1.Button1Click(Sender: TObject);
// окантовка
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
for q:=1 to n //нумерация по горизонтали в табл №1 ,
do StringGrid2.Cells[q,0]:=IntToStr(q);
for q:=1 to n// нумерация по вертикалив табл №1 ,
doStringGrid2.Cells[0,q]:=IntToStr(q);
////////////////// a b c
for i:=1 to ndo
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
s1:=(a*i*i + b*i + c);
if s1<=0 then begin v:=i; break
end; end;
for j:= 1 to N dobegin
IF S1[j]> 0 then
if good (s1[j]) then
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
s2[j]:=1 ; z1:= z1+1; end
elsebegin s2[j]:=0;z2:= z2+1;
end;end;
// простые - многочлен № 1
for i:=1 to n dobegin
if s2=1 then m:=m+1 ;
if s2 =0 then begin
if m>w then
beginw:=m;j1:= i-1;end;
m:=0
end;
end;
//end;
j2 := j1-w+1;
//составные - многочлен № 1
for i:=1 to n dobegin
if ((s2[i-1] =1) and(s2 =0)) then y1 := i ;
if s2=0 thent:=t+1 ;
if s2 =1 then begin
if t>s then
begins:=t; u1:= i-1;end;
end;
if s2 =1 then t:=0;
end;
u2 := u1-s+1;
///////////a1 b1 c1
for i:=1 to ndo
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
s3:=(a1*i*i+ b1*i+ c1);
if s3<=0 then begin v1:=i; break
end; end;
for j:= 1 to N dobegin
Form1.Caption:=IntToStr(GetTickCount-Tick);
IF S3[j]> 0 then
if good (s3[j]) then
begin
s4[j]:=1 ; z3:= z3+1; end
elsebegin s4[j]:=0;z4:= z4+1;
end;end;
m1:=0;
for i:=1 to n dobegin//простые- многгочлен № 2
if s4=1 then m1:=m1+1 ;
if s4 =0 then begin
if m1>w1 then
beginw1:=m1;j3:= i-1;end;
m1:=0
end;
end;
j4 := j3-w1+1;
//составные- многочлен № 2
for i:=1 to n dobegin
if ((s4[i-1] =1) and(s4 =0)) then y2 := i ;
if s4=0 then t1:=t1+1 ;
if s4 =1 then begin
if t1>d then
begind:=t1;u3:= i-1;t1:=0; end;
if s2 =0 then t1 :=0;
end;
end;
u4 := u3-d+1;
/////////////////////////////натуральный ряд чисел
for j:= 1 to N dobegin
if good (j) then
begin
s5[j]:=j ; z5:= z5+1; end
elsebegin s6[j]:=j;z6:= z6+1;
end;end;
m2:=0;
// натуральный ряд составные числа
for i:=1 to n dobegin
if ((s5[i-1] >0) and(s6 >0)) then y3 := i ;
if s5=0 then m2:=m2+1 ;
if s5 >0 then begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
if m2>w2 then
beginw2:=m2;j5:= i-1;end;
m2:=0
end;
end;
j6 := j5-w2+1;
// ряд простых числел
for j:= 1 to N do
if good (j) then
begin
z7:= z7+1; s7[z7]:=j end;
// частное простых и всех чисел
h1 := z1/n;//многочлен № 1
h2 := z3/n;//многочлен № 2
h3:= z5/n; // ряд натуральных чисел
for i:= 1 to n do
n1 := n1 + s1;
for i:= 1 to n do
n2 := n2 + s3;
for i:= 1 to n do
begin
if s5>0 then n3 := n3+s5;
if s6>0 then n3 := n3+s6;
end;
for i:= 1 to n do
n4 := n4 + s7;
d1 :=n1/n;
d2 :=n2/n;
d3 :=n3/n;
d4 := n4/z7;
for i:= j2 to j1 do
for j:= j4to j3 do
ifs1 = s3[j] then s8 :=s1 ;
//////////////////////////
for i:=1 to ndobegin
StringGrid2.Cells[i,1]:=
IntToStr( s1);
StringGrid2.Cells[i,2]:=
IntToStr( s2);
StringGrid2.Cells[i,4]:=
IntToStr( s3);
StringGrid2.Cells[i,5]:=
IntToStr( s4);
ifs5=0 then
StringGrid2.Cells[i,7]:= '-';
ifs5>0 then
StringGrid2.Cells[i,7]:=IntToStr(i);
ifs5>0 then
StringGrid2.Cells[i,8]:= '-';
ifs5=0 then
StringGrid2.Cells[i,8]:=IntToStr( i);
IntToStr( s6);
StringGrid2.Cells[i,10]:=
IntToStr( s7);
// выоод простых чисел с 41
if s7>=41 then
StringGrid2.Cells[i-13,10]:=
IntToStr( s7);
end;
for i:=1 to 50do
if i<=w then
StringGrid2.Cells[i,12]:=
IntToStr( s8)
else StringGrid2.Cells[i,12]:='-';
Edit1.Text :=
'a='+' '+IntToStr(a)+''+
'b='+' '+IntToStr(b)+''+
'c='+''+IntToStr(c)+''+
'v='+''+IntToStr(v)+''+
'z1='+''+IntToStr(z1)+''+
'z2='+''+IntToStr(z2)+''+
'w='+''+IntToStr(w)+''+
'm='+''+IntToStr(m) +''+
'j1='+''+IntToStr(j1) +''+
'j2='+' '+IntToStr(j2) +''+
's='+''+IntToStr(s) +''+
't='+''+IntToStr(t)+''+
'u1='+''+IntToStr(u1) +''+
'u2='+' '+IntToStr(u2) +''+
'y1='+' '+IntToStr(y1) +''+
's2[n]='+' '+IntToStr(s2[n]) +''+
'd1='+' '+FormatFloat('0.00000',d1)+''+
'h1='+' '+FormatFloat('0.00000',h1);
Edit2.Text :=
'a1='+''+IntToStr(a1)+''+
'b1='+' '+IntToStr(b1)+''+
'c1='+''+IntToStr(c1)+''+
'v1='+''+IntToStr(v1)+''+
'z3='+''+IntToStr(z3)+''+
'z4='+''+IntToStr(z4)+''+
'w1='+''+IntToStr(w1)+''+
'm1='+''+IntToStr(m1) +''+
'j3='+''+IntToStr(j3) +''+
'j4='+' '+IntToStr(j4)+''+
'd='+''+IntToStr(d) +''+
't1='+''+IntToStr(t1)+''+
'u3='+''+IntToStr(u3) +''+
'u4='+' '+IntToStr(u4) +''+
'y2='+' '+IntToStr(y2) +''+
's4[n]='+' '+IntToStr(s4[n]) +''+
'd2='+' '+FormatFloat('0.00000',d2)+''+
'h2='+' '+ FormatFloat('0.00000',h2);
Edit3.Text :=
'v2='+''+IntToStr(v2)+''+
'z5='+''+IntToStr(z5)+''+
'z6='+''+IntToStr(z6)+''+
'w2='+''+IntToStr(w2)+''+
'm2='+''+IntToStr(m2) +''+
'j5='+''+IntToStr(j5) +''+
'j6='+''+IntToStr(j6) +''+
'y3='+''+IntToStr(y3) +''+
's5[n]='+' '+IntToStr(s5[n]) +''+
'd3='+' '+FormatFloat('0.00000',d3)+''+
'h3='+''+FormatFloat('0.00000',h3);
Edit4.Text :=
'n4='+''+IntToStr(n4) +''+
'z7='+''+IntToStr(z7) +''+
'd4='+' '+FormatFloat('0.00000',d4);
end;
////////////////////////////////////////////////////////////////
procedure TForm1.Button5Click(Sender: TObject);
begin
close
end;
initialization
randomize;
end.
///////////////////////////////////
обидно, когда человек не может научится работать с форумом.
Пожалели бы тех, кто в первых раз пришел, столько скроллировать и смотреть неформатированный код. Ну хоть бы так сделали, если нравиться мусор выкладывать
BEGIN ShowTheMenu; GetUserChoice; IF (UserChoice = 'a') OR (UserChoice = 'b') THEN BEGIN GetNumberToConvert; DoTheConversion; DisplayTheAnswer; Wait; END; END;
обидно, когда человек не может научится работать с форумом, если нравиться мусор выкладывать
дедульке 77 лет, врядли он понимает как работает интернеты и форум, это его внучок балуется!

обидно, когда человек не может научится работать с форумом.Пожалели бы тех, кто в первых раз пришел, столько скроллировать и смотреть неформатированный код. Ну хоть бы так сделали, если нравиться мусор выкладывать
Если 77-летний дедулька начнёт форматировать тегами, тогда не только метрами скроллить придётся,
он тегами ГОРИЗОНТАЛЬНО страницу порвёт, пусть мусорит только в одной теме, всёравно старый.
Если бы он хотел, мог бы просто свои программы обсудить, зачем они нужны и как на них обогатиться,
Как можно сделать - распечатать в PDF и прикрепить к сообщению форума. Пример я прилепил внизу,
дальше, копируем из 1.PDF файла, обратно в текстовый файл, переименовываем в 1.HTML, обогащаемся.

+
переводим .PDF в .txt, потом в .html, потом можно с любого браузера стартовать: https://7495.strana.de/proverka.html
в первом окошке адрес блокчейна, в последующие окошки адреса кошельков, думаю всё и так интуитивно понятно!

откуда внучку знать что такое delphi7 ? Сейчас такое никто не использует.
в посте #18, автор темы пишет "...Так для овладения языком Дельфи 7 достаточно месяца три."
а может всё бы иначе, пришел проведать деда, в шкафу пыльные учебники по дельфи и бейсику,
включил компьютер, там на старом пентиуме, тоже такие же листинги программ, копирует и постит.
Хотя всё может быть по другому, я же спросил, кто он по профессии, МАТЕМАТИК? ответа пока нет

обидно, когда человек не может научится работать с форумом, если нравиться мусор выкладыватьдедульке 77 лет, врядли он понимает как работает интернеты и форум, это его внучок балуется!
Реально похоже, будто старый ноут дедов откопал, а там пароли сохранённые. ))
Если 77-летний дедулька начнёт форматировать тегами, тогда не только метрами скроллить придётся,
он тегами ГОРИЗОНТАЛЬНО страницу порвёт, пусть мусорит только в одной теме, всёравно старый.
Алекснек вроде не старый, но страницу горизонтально регулярно рвёт. И ничё - ценный специалист. ))
переводим .PDF в .txt, потом в .html, потом можно с любого браузера стартовать: https://7495.strana.de/proverka.html
в первом окошке адрес блокчейна, в последующие окошки адреса кошельков, думаю всё и так интуитивно понятно!
Нихрена непонятно, как перевести в фургоны, доски и шоколадки.
переводим .PDF в .txt, потом в .html, потом можно с любого браузера стартовать: https://7495.strana.de/proverka.html
в первом окошке адрес блокчейна, в последующие окошки адреса кошельков, думаю всё и так интуитивно понятно!
Нихрена непонятно, как перевести в фургоны, доски и шоколадки.
Я тебе ещё ТРИ ГОДА назад рассказывал, когда ты ещё всё сравнивал с Новосибирском, сырки просроченные из пальмового масла...
сейчас вроде перестал жрать всякую дрянь, пересел на другую машину, но всё ещё бездомный и по привычке натираешь лоб калом.
Итак, копируешь из .pdf код в .txt файл, потом переименовываешь в .html, до этого момента понятно? а потом в любом магазине:
карточку достал - шоколадку оплатил, или в салоне последней модели теслу, зашел, оплатил, уехал, в чём собственно сложности?

это банковская карточка от бинанцы (криптобиржи), если кто не понял...

ПРОГРАММА «Простые 2»
ОГЛАВЛЕНИЕ
1. Общее
2. Математика
3. Вывод
4.Анализ результатов
5.Скачать программу «Простые 2»
Приложение 1
Распечатка программы «Простые 2»
1. Общее
В программе «Простые 1» исследован многочлен a*x*x +b*x +cв части генерации простых чисел.
Коэффициенты задаются.
В скатерти Улама по диагонали значения этого многочлена при разных последовательностях x.
Для трёх значений предполагаемого многочлена d1, d2, d3 при x1, x2, x3 можно отыскать значениякоэффициентов
a, b, c.
2. Математика
Для
x1 =1
x2 = 2
x3=3
коэффициенты находятся по формулам
d:=((k3-2*k2+k1) Mod 2 ) ;
If (d>0) then
fa:=111else
begin
a:= (k3-2*k2+k1)div 2;
b:= k2-k1-3*a;
c:= k1-a-b;
end;
d:=((k6-2*k5+k4) Mod 2 ) ;
If (d>0) then
fb:=222else
begin
a1:= (k6-2*k5+k4)div 2;
b1:= k5-k4-3*a;
c1:= k4-a-b;
end;
Продолжение расчётов, если коэффициенты целые числа.
Если коэффициенты дробные, выводятся соответственно для многочленов № 1 и № 2:
fa =111 иfb=222.
Дальнейшие вычисления те же, что и в Программе «Простые 1».
3. Вывод
Вывод тот же, что в программе «Простые 1».
Дополнен выводом чисел fa иfb.
4.Анализ результатов
По диагональным числам Скатерти Улама часто удается найти многочлен с большей долей простых чисел, чем в ряду натуральных чисел.
5.Скачать программу «Простые 2»
https://disk.yandex.ru/d/M3YYAVqN3TQuQQ
Приложение 1
Распечатка программы «Простые 2»
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button5: TButton;
Label1: TLabel;
StringGrid2: TStringGrid;
StringGrid3: TStringGrid;
Edit1: TEdit;
Label2: TLabel;
Label4: TLabel;
Label5: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Label3: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
n =20000;// число вычмислений значений многочленов
// k1 =1499;
//k2=1657;
//k3=1823;
k1 =3463;
k2=3701;
k3=3947;
//fb=222
//k4=2;
//k5=3;
//k6=17;
k4=1823;
k5= 1997;
k6= 2179;
var
Tick: Cardinal;
s1:array [1..n] of integer;// значения многочлена № 1
s2:array [1..n] of integer;//1 -простое число, 0 - составное число
//многочлен № 1
s3:array [1..n] of integer;// значения многочлена № 2
s4:array [1..n] of integer;// 1 -простое число, 0 - составное число
//многочлен № 21
s5:array [1..n] of integer;// простые числа натурального ряда
s6:array [1..n] of integer;//составные числа нарурального ряда
s7:array [1..n] of integer;//ряд простых чисел
s8:array [1..50] of integer;// сравнение максимальных
//цепей простых чисел в многочленах№1 и №2
r,w, w1, w2, k,f,g, h, ha,q,i,j : integer; //
j1,j2,j3,j4,j5,j6,j7,j8,i2,i1, i3,i4,i5,i6,i7,i8,i9,i0, l: integer; //
x1, x2, z,z1, z2, z3, z4,z5, z6,z7, v,v1,v2, e: integer;//
m, m1, m2, mm, a2,m3,m4,m5 ,vv: integer;//
y, y1, y2,y3, d, p, s, t, u1,u2 , p1, t1, u3,u4 :integer;//
h1,h2,h3: variant;//
n1, n2, n3,n4: cardinal;//
d1, d2, d3, d4: variant;//
a, b, c, a1, b1, c1, fa, fb:integer;//
// Функция нахождения простых чисел
// По книгеЖуков "Программируем в Delphi"
function good(Numb:integer):boolean;
var
i:integer;
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
good:= true;
for i:=2 to Trunc(Sqrt(Numb)) do
if (Numb mod i) =0then
begin
good := false;
exit;
end; end;
procedure TForm1.Button1Click(Sender: TObject);
// окантовка
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
for q:=1 to n //нумерация по горизонтали в табл №1 ,
do StringGrid2.Cells[q,0]:=IntToStr(q);
for q:=1 to n// нумерация по вертикалив табл №1 ,
doStringGrid2.Cells[0,q]:=IntToStr(q);
// Вычисление коэффициентов многочлена
d:=((k3-2*k2+k1) Mod 2 ) ;
If (d>0) then
fa:=111else
begin
a:= (k3-2*k2+k1)div 2;
b:= k2-k1-3*a;
c:= k1-a-b;
end;
d:=((k6-2*k5+k4) Mod 2 ) ;
If (d>0) then
fb:=222else
begin
a1:= (k6-2*k5+k4)div 2;
b1:= k5-k4-3*a;
c1:= k4-a-b;
end;
////////////////// a b c
//////////////////////////////////
if fa=0 then begin
for i:=1 to ndo
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
s1:=(a*i*i + b*i + c);
if s1<=0 then begin v:=i; break
end; end;
for j:= 1 to N dobegin
IF S1[j]> 0 then
if good (s1[j]) then
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
s2[j]:=1 ; z1:= z1+1; end
elsebegin s2[j]:=0;z2:= z2+1;
end;end;
// простые - многочлен № 1
for i:=1 to n dobegin
if s2=1 then m:=m+1 ;
if s2 =0 then begin
if m>w then
beginw:=m;j1:= i-1;end;
m:=0
end;
end;
//end;
j2 := j1-w+1;
//составные - многочлен № 1
for i:=1 to n dobegin
if ((s2[i-1] =1) and(s2 =0)) then y1 := i ;
if s2=0 thent:=t+1 ;
if s2 =1 then begin
if t>s then
begins:=t; u1:= i-1;end;
end;
if s2 =1 then t:=0;
end;
u2 := u1-s+1;
end;
///////////a1 b1 c1
if fb =0 then begin
for i:=1 to ndo
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
s3:=(a1*i*i+ b1*i+ c1);
if s3<=0 then begin v1:=i; break
end; end;
for j:= 1 to N dobegin
Form1.Caption:=IntToStr(GetTickCount-Tick);
IF S3[j]> 0 then
if good (s3[j]) then
begin
s4[j]:=1 ; z3:= z3+1; end
elsebegin s4[j]:=0;z4:= z4+1;
end;end;
m1:=0;
for i:=1 to n dobegin//простые- многгочлен № 2
if s4=1 then m1:=m1+1 ;
if s4 =0 then begin
if m1>w1 then
begin w1:=m1;j3:= i-1;end;
m1:=0
end;
end;
j4 := j3-w1+1;
//составные- многочлен № 2
for i:=1 to n dobegin
if ((s4[i-1] =1) and(s4 =0)) then y2 := i ;
if s4=0 then t1:=t1+1 ;
if s4 =1 then begin
if t1>d then
begind:=t1;u3:= i-1;t1:=0; end;
if s2 =0 then t1 :=0;
end;
end;
u4 := u3-d+1;
end;
/////////////////////////////натуральный ряд чисел
for j:= 1 to N dobegin
if good (j) then
begin
s5[j]:=j ; z5:= z5+1; end
elsebegin s6[j]:=j;z6:= z6+1;
end;end;
m2:=0;
// натуральный ряд составные числа
for i:=1 to n dobegin
if ((s5[i-1] >0) and(s6 >0)) then y3 := i ;
if s5=0 then m2:=m2+1 ;
if s5 >0 then begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
if m2>w2 then
beginw2:=m2;j5:= i-1;end;
m2:=0
end;
end;
j6 := j5-w2+1;
// ряд простых числел
for j:= 1 to N do
if good (j) then
begin
z7:= z7+1; s7[z7]:=j end;
// частное простых и всех чисел
h1 := z1/n;//многочлен № 1
h2 := z3/n;//многочлен № 2
h3:= z5/n; // ряд натуральных чисел
for i:= 1 to n do
n1 := n1 + s1;
for i:= 1 to n do
n2 := n2 + s3;
for i:= 1 to n do
begin
if s5>0 then n3 := n3+s5;
if s6>0 then n3 := n3+s6;
end;
for i:= 1 to n do
n4 := n4 + s7;
d1 :=n1/n;
d2 :=n2/n;
d3 :=n3/n;
d4 := n4/z7;
for i:= j2 to j1 do
for j:= j4to j3 do
ifs1 = s3[j] then s8 :=s1 ;
//////////////////////////
for i:=1 to ndobegin
StringGrid2.Cells[i,1]:=
IntToStr( s1);
StringGrid2.Cells[i,2]:=
IntToStr( s2);
StringGrid2.Cells[i,4]:=
IntToStr( s3);
StringGrid2.Cells[i,5]:=
IntToStr( s4);
ifs5=0 then
StringGrid2.Cells[i,7]:= '-';
ifs5>0 then
StringGrid2.Cells[i,7]:=IntToStr(i);
ifs5>0 then
StringGrid2.Cells[i,8]:= '-';
ifs5=0 then
StringGrid2.Cells[i,8]:=IntToStr( i);
IntToStr( s6);
StringGrid2.Cells[i,10]:=
IntToStr( s7);
// выоод простых чисел с 41
// if s7>=41 then
// StringGrid2.Cells[i-13,10]:=
// IntToStr( s7);
StringGrid2.Cells[i,10]:=
IntToStr( s7);
end;
for i:=1 to 50do
if i<=w then
StringGrid2.Cells[i,12]:=
IntToStr( s8)
else StringGrid2.Cells[i,12]:='-';
Edit1.Text :=
'a='+' '+IntToStr(a)+''+
'b='+' '+IntToStr(b)+''+
'c='+''+IntToStr(c)+''+
'v='+''+IntToStr(v)+''+
'z1='+''+IntToStr(z1)+''+
'z2='+''+IntToStr(z2)+''+
'w='+''+IntToStr(w)+''+
'm='+''+IntToStr(m) +''+
'j1='+''+IntToStr(j1) +''+
'j2='+' '+IntToStr(j2) +''+
's='+''+IntToStr(s) +''+
't='+''+IntToStr(t)+''+
'u1='+''+IntToStr(u1) +''+
'u2='+' '+IntToStr(u2) +''+
'y1='+' '+IntToStr(y1) +''+
's2[n]='+' '+IntToStr(s2[n]) +''+
'd1='+' '+FormatFloat('0.00000',d1) +''+
'h1='+' '+FormatFloat('0.00000',h1);
Edit2.Text :=
'a1='+''+IntToStr(a1)+''+
'b1='+' '+IntToStr(b1)+''+
'c1='+''+IntToStr(c1)+''+
'v1='+''+IntToStr(v1)+''+
'z3='+''+IntToStr(z3)+''+
'z4='+''+IntToStr(z4)+''+
'w1='+''+IntToStr(w1)+''+
'm1='+''+IntToStr(m1) +''+
'j3='+''+IntToStr(j3) +''+
'j4='+' '+IntToStr(j4)+''+
'd='+''+IntToStr(d) +''+
't1='+''+IntToStr(t1)+''+
'u3='+''+IntToStr(u3) +''+
'u4='+' '+IntToStr(u4) +''+
'y2='+' '+IntToStr(y2) +''+
's4[n]='+' '+IntToStr(s4[n]) +''+
'd2='+' '+FormatFloat('0.00000',d2)+''+
'h2='+' '+ FormatFloat('0.00000',h2);
Edit3.Text :=
'v2='+''+IntToStr(v2)+''+
'z5='+''+IntToStr(z5)+''+
'z6='+''+IntToStr(z6)+''+
'w2='+''+IntToStr(w2)+''+
'm2='+''+IntToStr(m2) +''+
'j5='+''+IntToStr(j5) +''+
'j6='+''+IntToStr(j6) +''+
'y3='+''+IntToStr(y3) +''+
's5[n]='+' '+IntToStr(s5[n]) +''+
'd3='+' '+FormatFloat('0.00000',d3)+''+
'h3='+''+FormatFloat('0.00000',h3);
Edit4.Text :=
'n4='+''+IntToStr(n4) +''+
'z7='+''+IntToStr(z7) +''+
'd4='+' '+FormatFloat('0.00000',d4)+''+
'fa='+''+IntToStr(fa) +''+
'fb='+''+IntToStr(fb) ;
end;
////////////////////////////////////////////////////////////////
procedure TForm1.Button5Click(Sender: TObject);
begin
close
end;
initialization
randomize;
end.
иногда, однако, появляются вакансии с Дельфи.Но вот среди рекрутеров точно нет понимающих отличия от СБилдер.
В точности мой случай. Тоже как то написал бевербунг упомянув знания делфи, хотя знал только BCB и то последние годы его не касался. Взяли потому как шеф загорелся идеей скинуть на меня древнюю делфи программу, которую давно хотели заменить, но как то потом.
Вот так до знакомства с этой программой дело так и не дошло, всё другие проекты были.
Фашизм будет разбит
Человека карают только те боги, в которых он верит
Да оставь - пусть постит.
Да, похоже случай клинический, научить делать вложение или форматирование кода не получится
Ну может, хоть код шарить научится
«Моделирование отбора длялокусов в разных хромосомах»
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Скачать текст
https://disk.yandex.ru/i/SV4Ke8iYp8NYGg
Программа:
«Моделирование отбора длялокусов в разных хромосомах»
Вступление
Приводится описание программы моделирования одного гипотетического
варианта естественного отбора: Мутации в двух хромосомах.
1. Естественный отбор
По Дарвину особи с полезными признаками, дают больше потомства.
Чаще, но не всегда,достигается или повышением плодовитости при сохранении времени жизни, или увеличением времени жизни при сохранении прежней плодовитости, или действуют оба фактора одновременно.
По Дарвину это и есть положительный отбор. Имеются в виду признаки, полученные при мутациях и передающиеся по наследству. Понятие альтруизма здесь не рассматривается. Наследование генов альтруизма рассмотрено в ветви: АЛЬТРУИЗМ. Генетика конкретизировала основу понятия «признак» - гены. Основные определения по генетике в приложениях 1 - 6. Каждый признак определяется определенным геном или комбинацией генов. Гены поразличным причинаммутируют. Мутация определенного гена порождает аллели этого гена.
А, следовательно, и новые признаки организма. Естественный отбор может происходить по разным вариантам.
Вариант 1. Гены мутируют. Последствия мутаций в одном гене могут быть: положительные, отрицательные и нейтральные. Положительные мутации в процессе сохраняютсявсё большего числа особей. Отрицательные мутации «вымываются».
Вариант 2. При совпадении нескольких определенных нейтральных мутаций в разных хромосомах организм приобретает новые признаки, способствующие увеличению численности таких организмов. Для исследования такого варианта отбора разработана программа «Моделирование естественного отбора длялокусов в разных хромосомах».
]2. Цель программы
В программе «Моделирование естественного отбора длялокусов в разных хромосомах» изучается ситуация. Некие существа размножаются половым путем. Для определенности: «мужчины» и «женщины». Название условное. Могут быть и кузнечики. От перемены местами мужчин и женщин задача не меняется. Сделано гипотетическое допущение. Особь, у которой в определенных хромосомах в заданных локусах расположенызаданные гены из списка аллель генов,получает преимущество перед другими особями: меньше вероятность смерти. Такие особи получают условное название: особи с геномом плюс(+). Моделируется половой процесс с обменом хромосом между родителями при зачатии. Выясняется, сколько должно произойти рождений и смертей, для преобладания в сообществе особей с геномом плюс.
Две хромосомы 1 и 2, одинаковы для мужчин и женщин.
Гены в хромосоме 1: x1 и x2.
Гены в хромосоме 2: y1 и y2.
Аллели генов x1 и x2: 1,2…,.c
Аллели генов y1 и y2: 1,2…,.c
Гены в хромосомах 1 и 2 различны.
В конкретной программе особыс аллелеями:
x1 = 1
x2 = 1
y1 = 2
y2 = 2
Названы особями с геномом +.
Они имеют меньшую вероятность смерти.
То есть могут за «жизнь» произвести больше потомства.
В исходном состоянии задается некоторое множество мужчин и женщин.
Мужчин p3, женщинp4.
Для первой позиции (особи) в соответствующем массиве задается геном +.
Для остальных геном случайно.
Далее имитируется процесс размножения.
До достижения количества мужчин и женщин соответственно: p1 и p2.
В примере программы
p1 = p2
p3 = p4
]3. Формат программы.
Программа составлена на DELPHI 7. Ввод исходных данных непосредственно в тексте программы. Для работы с программой необходимо установить DELPHI 7.
Скачать программу A-2chr
https://yadi.sk/d/42DrSMFQfcv8x
]3. Биологическая интерпретация
Программа имеет следующую биологическую интерпретацию.
На необитаемом острове появилась популяция из p3 – «мужчин» и p4 – «женщин».
Один мужчина и одна женщина имеют геном +.
Данный геном уменьшает вероятность смерти.
Популяция может из-за ограниченных ресурсов увеличить численность только до p1 – «мужчин» и p2 – «женщин».
Другой вариант вымереть.
В определенное время года происходит вымирание, в другой сезон размножение.
Задано ограничение на число лет существования популяции - kk
Определяется: какая доля особей через kk лет с геномом плюс среди живущих мужчин и женщин и среди потенциально возможного числа мужчин и женщин.
4. Алгоритм
Алгоритм состоит из следующих блоков.
БЛОК ОКАНТОВКИ ТАБЛИЦ
БЛОК СУПЕРЦИКЛА
БЛОК СМЕРТЬ +РОЖДЕНИЕ
БЛОК СМЕРТЬ
БЛОК РОЖДЕНИЕ
БЛОК ВЫВОДА
]4.1. БЛОК ОКАНТОВКИ ТАБЛИЦ
Проставка номеров строк и столбцов
4.2. БЛОК СУПЕРЦИКЛА
В ходе суперцикла повторяется:
БЛОК СМЕРТЬ+РОЖДЕНИЕ
.
Смысл суперцикла.
Данные по выполнению БЛОК СМЕРТЬ+РОЖДЕНИЕ
имеют большой вероятностный разброс.
Поэтому следует использовать усредненные данные по ходу выполнения суперцикла.
4.3. БЛОК СМЕРТЬ+РОЖДЕНИЕ
Поочередно выполняются:
БЛОК СМЕРТЬ
БЛОК РОЖДЕНИЯ
Ограничениями служат:
Максимальное число мужчин – константа p1;
Максимальное число женщин – константа p2;
Заданное число итераций – константаkk.
Используется цикл while
4.4. БЛОК СМЕРТИВ ходе выполнения этого блока поочередно сканируются массивы мужчин и женщин.
С заданной вероятности имитируется смерть, то есть обнуление просканированных позиций массивов.
Для особей с геномом + устанавливается меньшая вероятность смерти.
Число проведения итераций БЛОК СМЕРТИ задается.
Константа t.
4.4. БЛОК РОЖДЕНИЯВ ходе выполнения БЛОК РОЖДЕНИЯ вначале определяется число рождений.
Если число мужчин превышает число женщин, число рождений задается долей от числа мужчин.
В противном случае число рождений- доля от числа женщин.
Рождение мужчины или женщины случайно.
Далее случайным образом выбирается пара мужчина – женщина.
Далее имитируется рождение новой особи.
Генотип определяется в соответствии с законом Менделя.
4.5. Исходные данные
Исходные данные (const) вводятся непосредственно в тексте программы.
5. Массивы и переменные
Основныемассивы. Массив исходных мужчин u1[1..k,1..p3,1..2], где: k – число пар гомологичных хромосом, комбинации которых исследуются. p3 – число мужчин на старте программы. Позиции 1 и 2 соответствуют аллелям гена в гомологичных хромосомах.
Все аллели гена для заданного локуса пронумерованы
от 1 до с.
Принято: число аллель генов для всех локусов одинаково. Константа c задается в исходных данных.
Задается также массив u2[1..k,1..p4,1..2].
Где p4 число женщин.
Также задаются числа, определяющие вероятность смерти, вероятность рождения мужчины или женщины, вероятность для выбора варианта комбинации генов мужчины и женщины у потомка.
В тексте программы задаются особи с геномом плюс.
В данном варианте программы по одной особи на позиции № 1.
В ходе выполнения программы преобразуются массивы
ua[1..k,1..p3,1..2] и ub[1..k,1..p3,1..2], соответственно мужчины и женщины.
6. БЛОК ВЫВОДА
6.1 Общее
Выводятся данные следующего вида:
А) Усредненные данные по всем итерациям суперцикла.
Б) Данные по первым 20 итерациям суперцикла
В) Данные по заданной итерации № ss суперцикла.
+.1. Данные по совокупности суперцикла
Дано в разделе 7.
6.2. Данные по 20 итерациям суперцикла:
Вывод массивы v[1..20], m[1..20] и d[1..20] соответственно для каждой итерации итог: число мужчин с геномом плюс, число мужчин и число незаполненных ячеек в массиве ua[1..20], то есть число потенциально возможных мужчин.
6.3. Данные по заданной итерации суперцикла
Смотреть по тексту программы
]7. Результаты счета.
Предусмотрен вывод:
a: integer; // сумма мужчин за суперцикл
l: integer; // сумма отсутствия мужчин за суперцикл
v: integer; // сумма мужчин с геномом плюс за суперцикл
b: currency; // среднее число мужчин за суперцикл
l1: currency; //среднее число отсутствия мужчин за суперцикл
w: currency; среднее число мужчин с геномом плюс за суперцикл
g: currency; //за супер цикл. Отношение числа мужчин с геномом плюс к общему числу мужчин
g1: currency; // за супер цикл. Отношение числа мужчин с геномом плюс к потенциальномучислу мужчин
aa: integer; // сумма женщин за суперцикл
y1: integer; // сумма отсутствия сумма отсутствия женщин за суперциклза суперцикл
vv: integer; // сумма женщин с геномом плюс за суперцикл
1bb: currency; // среднее число женщин за суперцикл
yy: currency; // среднее число отсутствия женщин за суперцикл
ww: currency; // среднее число женщин с геномом плюс за суперцикл
gg: currency; //за супер цикл. Отношение числа женщин с геномом плюс к общему числу женщин
gg1: currency; // за супер цикл. Отношение числа женщин с геномом плюс к потенциальномучислу женщин
gg2: integer; //число циклов суперцикла без вымирания для мужчин
gg3: integer; //число циклов суперцикла без вымирания для мужчин
r1: currency; //за суперцикл. Число циклов без вымирания для мужчин к общему числу циклов
r2: currency; //за суперцикл. Число циклов без вымирания для женщин к общему числу циклов
Имеются три варианта счета:
А) Вымирание: обнуление массивов ua[1..k,1..p1,1..2]и ub[1..k,1..p2,1..2] .
Б) Число элементов массивов ua[1..k,1..p1,1..2]и ub[1..k,1..p2,1..2] с геномом плюс в ходе расчётов существенно не изменились.
В) Число элементов массивов ua[1..k,1..p1,1..2]и ub[1..k,1..p2,1..2] с геномом плюс в ходе расчётов существенно увеличилось.
Интересен вариант В.
Иллюстрация эволюции.
Пример.
Исходные данные:
t = 1;// Число циклов смертей
kk = 1;// допустимое число циклов в основном цикле
p1 =2000;// Число мужчин- конечное(не более)
p2 = 2000; // Число женщин- конечное(не более)
p3 = переменная;//начальное число мужчин
p4 =переменная;//начальное число женщин
принято
p3 =p4
ff=5; // 1критерий для определения вероятностейсмерти
o3 = 2 ;//числодля расчёта рождений за цикл размножения (рождений) // наo3 делится числомужчин (женщин в текущий момент расчета)
fff = 20; // длярасчёта случайной величиныпри определении вероятности// смерти мужчин и женщин вне генома плюс
rr = 40 ; // для расчёта случайной величиныпри определении вероятности// смерти мужчин и женщин c геномом плюс
k = 2; // число независимо наследуемых генов
// размещены в неголомогичных хромосомах
c = 5; //число независимо наследуемых генов в расчете
sss =100; // число суперциклов
Ниже вывод для
p3 =p4: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30
b: currency; // среднее число мужчин за суперцикл
w: currency; среднее число мужчин с геномом плюс за суперцикл
g: currency; // за супер цикл. Отношение числа мужчин с геномом плюс к общему числу мужчин
g1: currency; // за супер цикл. Отношение числа мужчин с геномом плюс к потенциальномучислу мужчин
r1: currency; //за суперцикл. Число циклов без вымирания для мужчин к общему числу циклов
0
Результаты счёта
p3= p41bwgg1r1
1---891,26---891,26---1---0,4456---0,77
2---752,65---714,11---0,9487---0,3571---0,725
3---537,235---532,585---0,9913---0,2663---0,68
4---372,075---366,135---0,984---0,1831---0,645
5---265,49---261,89---0,9864---0,1309---0,6
6---220,29---219,275---0,9954---0,1096---0,53
7---173,2---172,055---0,9984---0,086---0,5
8---260,415---259,295---0,9957---0,1296---0,525
9---200,31---199,03---0,9936---0,0995---0,55
10---194,4---192,9---0,9923---0,0964---0,585
15---142,38---140,67---0,988---0,0703---0,6
20---99,335---97,59---0,9824---0,0488---0,58
25---111,91---109,55---0,9789---0,0548---0,56
30---142,3---139,8---0,9825---0,0699---0,58
35---88,395---86,355---0,5769---0,0432---0,59
40---93,26---90,495---0,9704---0,0452---0,58
50---95,885---92,33---0,929---0,0462---0,67
60---48,495---44,28---0,9131---0,221---0,695
70---86,67---80,21---0,9255---0,0401---0,759
80---80,27---71,505---0,8908---0,0358---0,79
90---34,945---24,325---0,691---0,0122---0,835
100---51,1---33,48---0,6552---0,0167---0,89
150---47,545---11,28---0,2372---0,0056---0,97
200---72,07---11,405---0,1582---0,0057---1
250---110,35---11,99---0,1087---0,006---1
300---144,59---10,45---0,0723---0,0052---1
|||||||||||||||||||||||||||||||||||||||||||||||||
Приложение 1
Основные принципы
Организм состоит из клеток. В клетках ядра. В ядрах хромосомы. Наборы хромосом почти во всех клетках одинаковы. Исключения половые клеткии красные кровяные тельца. Общее название совокупности хромосом – генотип организма. Каждая хромосома последовательность генов. Каждый ген кодирует определенную функцию организма. Например, синтез белка. Местоположения генов в хромосоме называется локусами. Вариантывариантов генов длякакого-либо локуса хромосомы носит название – аллеля. В диплоидном организме хромосомы образуют гомологичные пары. В хромосомах - гомологах местоположение локусов совпадают.
Каждая из хромосом гомологичной пары в каждом локусе имеет определенную аллелю гена. Аллели могут совпадать, а могут и отличаться. Исключение половые хромосомы.
Ниже они не рассматриваются. В одинаковых локусах хромосом - гомологов содержатся гены из списка аллель генов для данного локуса. Набор хромосом определяет построение и функции организма. Используется термин – фенотип. Фенотип определяется всеми хромосомами. В результате сложного процесса размноженияу потомка каждая пара хромосом гомологов состоит из одной хромосомы отца и из одной хромосомы матери. Множество пар хромосом сохраняется. Выбор одной из двух гомологичных хромосом родителей для потомка происходит случайным образом с вероятностью 0,5.
||||||||||||||||||||||||||||||||||||||||||
Приложение 2.
Законы комбинации аллелей при размножении в http://tigrasp.narod.ru/s-g3.html
||||||||||||||||||||||||||||||||||
Приложение 3
http://ru.wikipedia.org/wiki/Локус в биологии означает фиксированное положение (локализацию) на хромосоме, например, положение гена. Вариант последовательности ДНК в данном локусе называется аллелью. Упорядоченный перечень локусов для какого-либо генома называется генетической картой. Генное картирование — это определение локусa для специфического биологического признака.
Диплоидные или полиплоидные клетки, которые несут одинаковые аллели на каком-либо локусе называются гомозиготными по этому локусу, а те, которые несут различные аллели — гетерозиготными.
||||||||||||||||||||||||||||||||||||||||||||||||||Приложение 4
Изучением генов занимается наука генетика, родоначальником которой считается Грегор Мендель, который в 1865 году опубликовал результаты своих исследований о передаче по наследству признаков при скрещивании гороха. Сформулированные им закономерности впоследствии назвали Законами Менделя.….В настоящее время, в молекулярной биологии установлено, что гены — это участки ДНК, несущие какую-либо целостную информацию — о строении одной молекулы белка или одной молекулы РНК. Эти и другие функциональные молекулы определяют развитие, рост и функционирование организма.
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
]Приложение 5
http://dic.academic.ru/dic.nsf/enc_medicine/33962/Хромосомы
Хромосомы
(греч. chrōma цвет, окраска + sōma тело) основные структурно-функциональные элементы клеточного ядра, содержащие гены. Название «хромосомы» обусловлено их способностью интенсивно окрашиваться основными красителями во время деления клетки. Каждый биологический вид характеризуется постоянством числа, размеров и других морфологических признаков X. Хромосомный набор половых и соматических клеток различен. В соматических клетках содержится двойной (диплоидный) набор Х. который можно разделить на пары гомологичных (идентичных) хромосом, сходных по величине и морфологии. Один из гомологов всегда отцовского, другой— материнского происхождения. В половых клетках (гаметах) эукариот (многоклеточных организмов, в т.ч. человека) все хромосомы набора представлены в единственном числе (гаплоидный хромосомный набор). В оплодотворенной яйцеклетке (зиготе) гаплоидные наборы мужских и женских гамет объединяются в дном ядре, восстанавливая двойной набор хромосом. У человека диплоидный хромосомный набор (кариотип) представлен 22 парами хромосом (аутосом) и одной парой половых хромосом (гоносом). Половые хромосомы различаются не только по составу содержащихся в них генов, но и по своей морфологии. Развитие из зиготы женской особи определяет пара половых хромосом, состоящая из двух Х-хромосом, то есть ХХ-пара, а мужской — пара, состоящая из X-хромосомы и У-хромосомы, — то есть ХУ-пара.
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Приложение 6
http://dic.academic.ru/dic.nsf/enc_psyc … оминантные
Доминантные и рецессивные гены (genetic dominance and recessiveness)
По иронии судьбы, о наследственности животных нам известно гораздо больше, чем о наследственности чел. Наследственность является результатом комбинаций генов. Гены — это биохимические функциональные элементы хромосом, определяющие потенциальный пол и др. признаки у зародыша. Хромосомы представлены парами в ядре каждого сперматозоида и каждой яйцеклетки. У чел. имеется 23 пары, или 46 хромосом, причем одну пару называют половыми хромосомами, потому что они определяют пол будущего организма. Клетки женского организма несут две Х-хромосомы, тогда как клетки мужского содержат одну Х- и одну Y-хромосому. Y-хромосома мельче по размеру и содержит меньше генов на своей поверхности, чем Х-хромосома.
В результате клеточного деления в яичниках все яйцеклетки содержат одну Х-хромосому, тогда как клеточное деление в яичках приводит к тому, что половина сперматозоидов содержит Х-хромосому, а др. их половина — Y-хромосому. Т. о., в половине случаев челов. яйцеклетка оплодотворяется сперматозоидами, несущими Х-хромосому, и еще в половине — сперматозоидами, несущими Y-хромосому, так что половина рождающихся в популяции детей должна бы иметь мужской пол, а половина — женский. (Мальчиков все же рождается чуть больше, но среди них и смертность выше, а потому соотношение полов быстро уравнивается; по мере того как дети становятся старше, соотношение полов сдвигается в сторону преобладания представительниц женского пола вследствие большей устойчивости женского организма к болезням.) ………………..X. К. Финк
Кажется это отец Бората. Старый отец, Борат старый, Борат поздний ребёнок...
А Вы видели, вам тут одну ночную простыню затерли? Про скатерть Пифагора, не?

ФАНТАЗИИ НА ТЕМУ КВАРКОВ
Скачать текст
https://disk.yandex.ru/i/bgSTyfFpIcpAqA
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ПРОГРАММА«4-кварк»
ОГЛАВЛЕНИЕ
1.Общее
2.Ядро атома
3.Программа «4-кварк»
4.Алгоритм
5.Ввод
6.Вывод
7.Программа
1.Общее
В наукетри метода:
А) Эксперимент
Б) Теория
В) Моделирование
Программа «4-кварк» мысленный эксперимент по моделированию сборки кварков в объекты атомного ядра.
Естьещё одна цель.
Популяризацияязыка программирования Дельфи 6, как самого комфортного для изучения.
2. Ядро атома
Ядросостоит из протонов и нейтронов.
Протон: два кварка u, один – d.
Нейтрон: два кварка d, один – u.
Число протонов меньше или равно числу нейтронов.
Но возможно кварки образуют и другие структуры.
Например,
Суперпротон: четыре кварка u, два –d.
Супернейтрон: четыре кварка d, два – u.
Косвенно это подтверждает эксперимент
http://nuclphys.sinp.msu.ru/mirrors/qnuc.htm
]3. Программа «4-кварк»
Программа «4-кварк» моделирует вариант сборки кварковв протоны и нейтроны.
Это мысленный эксперимент.
Изучение вероятности сборки заданного числа кварков в протоны и нейтроны.
Задача может решена и аналитически.
Однако моделирование позволяет вводить разные ограничения.
Что затруднительно в математических методах.
В дальнейшем намечено моделировать сборки кварков в более массивные структуры,
чем протоны и нейтроны.
4. Алгоритм
Программа содержит 3 цикла.
«Суперциклтерации - основные циклы.
«Основной цикл»: итерации «циклы по три». В ходе «основного цикла» делается попытка сборки атомного ядра с заданным числом протонов и нейтронов.
Цикл по три – попытка сборки нуклон (протона или нейтрона).
Кваркшифруется -1, d -2.
Протон: два 1 и один 2
Нейтрон: два 2, один 1.
Нет смысла: три 1 и три 2.
5. Ввод
Ввод непосредственно в программе.
z – число протонов
n – число нейтронов.
В программе определяется число кварков для заданного z иn.
Сборка по полученному числу кварков.
ttt - -допустимое число итераций суперцикла.
6. Вывод
Матрица s – состав нуклонов.
Матрица p – число кварков в отдельных нуклонах.
tt- число итераций для получения сборки ядра.
Программа
Программа на языке Дельфи 7.
Практически расчеты в допустимое время при числе нуклонов менее 50.
Скачать программу «4-кварк».
https://yadi.sk/d/y2dAiTNl4353WA
////////////////////////////////////////////////////////////////////////////////////////////
ПРОГРАММА«ф-кварк»
ОГЛАВЛЕНИЕ
]1.Общее
2.Ядро атома
3.Программа «ф-кварк»
4.Алгоритм
5.Ввод
6.Вывод
7.Программа
1.Общее
Программа «ф-кварк» продолжение программы «4-кварк».
Тоже научная фантастика в части строения атомного ядра.
2. Ядро атома
Ядросостоит из протонов и нейтронов.
Протон: два кварка u, один – d.
Нейтрон: два кварка d, один – u.
В отличие от программы «4-кварк»
добавлена возможность существования
Суперпротон: четыре кварка u, два –d.
Супернейтрон: четыре кварка d, два – u.
3. Программа «ф-кварк»
Программа «ф-кварк» моделирует вариант сборки кварковв протоны, нейтроны, суперпротоны, супернейтроны.,
Это мысленный эксперимент.
Пока тестируется алгоритм.
Изучение статистических закономерностей на потом.
4. Алгоритм
Программа содержит 3 цикла.
«Суперцикл»: итерации - основные циклы.
«Основной цикл»: итерации «циклы по шесть.
В ходе «основного цикла» делается попытка сборки атомного ядра с заданным числом протонов и нейтронов.
Цикл по шести – попытка сборки нуклон (протона или нейтрона, суперпротон или супернейтрон).
Кваркшифруетсяu-1, d -2.
Протон: два 1 и один 2
Нейтрон: два 2, один 1.
Суперпротон: четыре 1 и два 2.
Супернейтрон: четыре 2 идва 1.
Если первые три кварка = 4, протон
Если первые три кварка =5, нейтрон
Если шесть кварков = 8, суперпротон
Если шесть кварков =10,супернейтрон
5. Ввод
Ввод непосредственно в программе.
z – число протонов
n – число нейтронов.
tt - -допустимое число итераций суперцикла.
6. Вывод
Матрица s – состав нуклонов.
Матрица p – сумма чисел 1 и 2 , присвоенных кваркам u и d
Матрица m: 1 – протон или нейтрон, 2 – суперпротон или супернейтрон, 3 – выборка пустая
7. Программа
Скаать программу «ф-кварк».[/color][/size]
https://yadi.sk/d/AMSnmgt61tOlVA
///////////////////////////////////////////////////////////////////////////
ПРОГРАММА«ы-кварк»
ОГЛАВЛЕНИЕ
1.Общее
2.Ядро атома
3.Программа «ы-кварк»
4.Алгоритм
5.Ввод
6.Вывод
7.Программа
1.Общее
Программа «ы-кварк» продолжение программы «ф-кварк».
Тоже научная фантастика в части строения атомного ядра.
2. Ядро атома
Допущение.
Ядросостоит из протонов, нейтронови суперпрототонов, супернейтронов.
Протон: два кварка u, один – d.
Нейтрон: два кварка d, один – u.
Суперпротон: четыре кварка u, два –d.
Супернейтрон: четыре кварка d, два – u.
3. Программа «ы-кварк»
Программа «ы-кварк» моделирует вариант сборки кварковв протоны, нейтроны и суперпротоны, супернейтроны.,
Это мысленный эксперимент.
В дополнении к «ф-программе» в программе «ы-кварк» введен цикл по сбору статистики.
4. Алгоритм
Программа содержит 4 цикла.
Цикл статистики: итерации суперциклы
«Суперцикл»: итерации - основные циклы.
По суперциклу фиксируется нахождение ядра с заданными числами протонов и нейтронов.
«Основной цикл»: итерации «циклы по шесть.
В ходе «основного цикла» делается попытка сборки атомного ядра с заданным числом протонов и нейтронов.
Цикл по шести – попытка сборки нуклон (протона или нейтрона, суперпротон или супернейтрон).
Кваркшифруетсяu-1, d -2.
Протон: два 1 и один 2
Нейтрон: два 2, один 1.
Суперпротон: четыре 1 и два 2.
Супернейтрон: четыре 2 идва 1.
Если первые три кварка = 4, протон
Если первые три кварка =5, нейтрон
Если шесть кварков = 8, суперпротон
Если шесть кварков =10,супернейтрон
5. Ввод
Ввод непосредственно в программе.
h – число итераций для сбора статистики
z – число протонов
n – число нейтронов.
tt - -допустимое число итераций суперцикла.
6. Вывод
Матрицаs – состав нуклонов.
Матрица u: сумма чисел присвоенных нуклонам
Матрицаm:1 – протон или нейтрон, 2 – суперпротон или супернейтрон, 3 – выборка пустая
Матрицаk1:для каждой итерации цикла статистики числа протонов и нейтронов, одиночных и составе суперпротонов и супернейтронов.
n1 – отношение числа одиночных протонов к числу протонов в составе суперпротонов
n2 - отношение числа одиночных нейтронов к числу протонов в составе суперпротонов
hh – равно 7777при превышении допустимого числа итераций суперцикла
7. Программа
Программа на Дельфи 7.
Ввод непосредственно в программе.
Скачать программу «ы-кварк».
Проблема в ИИ что каждое предложение она интерпретирует по своему. Как пример степень числа она заменяет на обычную мультипликацию ++. Площади вычисляет по своему. И вообще, в немецких школах к примеру абитуриенты некоторые не могли ещё 10 лет назад найти значение х как процентуальную долю.
ПРОГРАММА «+-Алгебраический многочлен»
ОГЛАВЛЕНИЕ
1. Общее
2. Исходные данные
3. Алгоритм
4. Итог
5. Скачать программу
Приложение 1
Распечатка программы
1. Общее
Программа «+-Алгебраический многочлен» разработана в развитие программы «1-Алгебраический многочлен».
Снято ограничение: положительные степени и коэффициенты одночлена.
Моё мнение.
Курс информатики в школе должен быть пересмотрен.
Необходимо.
1.Школьник должен освоить язык программирования.
Разный по школам.
Самый простой Дельфи 7.
Остальное не важно.
2.Программирование должно быть на основе школьных предметов.
Знаний программирования для освоения в объеме решения задач школьной программы нужно немного.
Михаил Фленов
БИБЛИЯDELPHI
676 стр.
Для решения многих задач по школьной программы достаточно изучить 40 стр.
Программирование, как плавание. Одни люди плавают, другие нет.
Можно плавать по-собачьи, можно баттерфляем.
Алгебра в школе – много об операциях с алгебраическими многочленами.
О многочленах
https://math-prosto.ru/ru/pages/polynomials/polynomial_deg...
Программа «1 –Алгебраический многочлен» создает случайный многочлен.
Есть разные способы генерации случайного многочлена.
Отдельный вопрос насколько разные способы тождественны.
Генерация в программе включает:
1.Генерация членов многочлена
2.Приведение подобных членов
3.Группировка по степени многочлена.
2. Исходные данные]
b=50;//число одночленов в исходном многочлене
c= 20;// задание вероятности одночлена не равного нулю
c1=10;//задание вероятности одночлена не равного нулю
d=20;// задание вероятности степени переменой
f=191; //задание вероятности значения коэффициента в одночлене
e1=8; //знак степени
e2=13;//знак степени
e3= 9; //знак коэффициента
e4= 15;//знак коэффициента
3. Алгоритм
Действие 1
Формируется исходный многочлен
w:array [1..2,1..b] ofcardinal;//
Выбор знака степени одночлена: e1 и e2
Выбор знака коэффициента: e3 и e4
Действие 2
Приводятся подобные члены
u1:array [1..2,1..b] ofcardinal;//массив после приведения
Действие 3
Расстановка одночленов по степени неизвестной
u2:array [1..2,1..b] ofcardinal;// одночлены расставлены по степени
//неизвестной
4. Итог
Массив u2.
5. Скачать программу
https://disk.yandex.ru/d/tbpUMe7ALG3_XQ
Приложение 1
Распечатка программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button5: TButton;
Label1: TLabel;
StringGrid2: TStringGrid;
StringGrid3: TStringGrid;
Edit1: TEdit;
Label4: TLabel;
StringGrid1: TStringGrid;
StringGrid4: TStringGrid;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
b=50;//число одночленов в исходном многочлене
c= 20;// задание вероятности одночлена не равного нулю
c1=10;//задание вероятности одночлена не равного нулю
d=20;// задание вероятности степени переменой
f=191; //задание вероятности значения коэффициента в одночлене
e1=8; //знак степени
e2=13;//знак степени
e3= 9; //знак коэффицинта
e4= 15;//знак коэффицинта
var
Tick: Cardinal;
w:array [1..2,1..b] ofinteger;//
//1 - степень переменной, 2 - коэффицент одночлена
p : array [1..b] of integer;//номера одночленов не равных нулю
p1 :array [1..b] of integer;//массив номеров цикла
u:array [1..2,1..b] ofinteger;//дубль массива
// подобных одночленов массива u
u2:array [1..2,1..b] ofinteger;// одночлены расставлены по степени
y:array [1..199] ofinteger;// массив сложения одночленов
tt,i,j,q ,z,r,i1,i2,i3,i4,i5,i6,j1,j2,j3,g ,k, v:integer;
t,n1, n2, n3,n4 ,n5,n6: integer;//
m1,m2,m3,m4,m5: integer;//
f1,f2,f3,f4,f5,z2,z4,z6,z8,z9, x: integer;//
z1,z3,z5,z7 : real;
n: variant;
procedure TForm1.Button1Click(Sender: TObject);
// окантовка
begin
for q:=1 to 10// нумерация по вертикалив табл №1 ,
doStringGrid1.Cells[0,q]:=IntToStr(q) ;
for q:=1 to b //нумерация по горизонтали в табл №1 ,
doStringGrid1.Cells[q,0]:=IntToStr(q);
for q:= 1 to b// нумерация по вертикалив табл №2 ,
do StringGrid2.Cells[0,q]:=IntToStr(q);
for q:=1 to b //ну2мерация по горизонтали в табл №2 ,
doStringGrid2.Cells[q,0]:=IntToStr(q);
for q:= 1 to 10// нумерация по вертикалив табл №1 ,
doStringGrid3.Cells[0,q]:=IntToStr(q);
for q:=1 to 500//нумерация по горизонтали в табл №1 ,
doStringGrid3.Cells[q,0]:=IntToStr(q);
StringGrid1.Cells[0,0] := '№1';
StringGrid2.Cells[0,0] := '№2';
StringGrid1.Cells[0,1] := 'w[1,..]';
StringGrid1.Cells[0,2] := 'w[2,..]';
StringGrid1.Cells[0,3] := 'p[..]';
StringGrid1.Cells[0,4] := 'p1[..]';
StringGrid1.Cells[0,7] := 'y[..]';
StringGrid2.Cells[0,1] := 'u1[1,..]';
StringGrid2.Cells[0,2] := 'u1[2,..]';
StringGrid2.Cells[0,5] := 'u2[1,..]';
StringGrid2.Cells[0,6] := 'u2[2,..]';
For i:=1 to b do//формирование случайного многочлепна
if(random (c) +1) <=c1 then
begin
k:=k+1;
p[k] :=k;
p1[k] :=i;
if e1<random (e2) then
w[1,k]:= random(d)
else w[1,k] := -random(d);
if e3<random (e4) then
w[2,k]:= random(f)
else w[2,k] := -random(f)
end;
for i:=1to b do//приведение подобных одночленов
for j:= 1 to bdo
begin
u[1,j] := w[1,j];
u[2,j] := w[2,j];
end;
for z:=1 to b do
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
for i2:=z+1 to b do
if u[1,z] = u[1,i2] thenbegin
v:=i2; x:=x+1; y[i2] :=i2;
u[2,z]:= u[2,z]+u[2,i2];
u[1,i2] :=0;
u[2,i2] :=0;
end;
end;
//Растановка одночленов по величине
// степени переменной
for i:=1 to 2 do
for j:=1 to b do begin
u2[1,j]:= u[1,j]+d;
u2[2,j]:= u[2,j];
end;
for tt:=1 to b*b do
for i3 := 2 to bdo
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
begin
n1:=u2[1,i3-1] ;
n2 :=u2[2,i3-1] ;
n3 :=u2[1,i3];
n4 := u2[2,i3] ;
end;
if (n1>0) and ((n3>=0)and (n4<>0))then
ifn1< n3then
begin
u2[1,(i3-1)]:=n3;
u2[2,i3-1]:=n4;
u2[1,(i3)] :=n1 ;
u2[2,i3] :=n2;
end;
if(n2=0) and (n4<>0) then
begin
u2[1,(i3-1)]:=n3;
u2[2,i3-1]:=n4;
u2[1,(i3)] :=n1 ;
u2[2,i3] :=n2;
end;
end;
for j2:=1 to b do
u2[1,j2]:=u2[1,j2] -d;
//////////////////////////////////////////////////////////////
for j:=1 tob do begin
StringGrid2.Cells[j,1] := IntToStr(u[1,j]);
StringGrid2.Cells[j,2] := IntToStr(u[2,j]);
StringGrid2.Cells[j,5] := IntToStr(u2[1,j]);
StringGrid2.Cells[j,6] := IntToStr(u2[2,j]);
end;
for i:=1 to 2 do
for j:=1 tob do
StringGrid1.Cells[j,i] := IntToStr(w[i,j]);
for i:=1 to b do begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
StringGrid1.Cells[i,3] := IntToStr(p);
StringGrid1.Cells[i,4] := IntToStr(p1);
//StringGrid1.Cells[i,5] := IntToStr(p2);
StringGrid1.Cells[i,7] := IntToStr(y);
end;
Edit1.Text :=
'k=' +''+ IntToStr(k)
+''+ 'p[2]=' +''+ IntToStr(p[2])
+''+ 't=' +''+FormatFloat('0.00',t)
+''+ 'x=' +''+ IntToStr(x)
+''+ 'y[2]=' +''+ IntToStr(y[2])
+''+ 'n1=' +''+ IntToStr(n1)
+''+ 'n2=' +''+ IntToStr(n2)
+''+ 'n3=' +''+ IntToStr(n3)
+''+ 'n4=' +''+ IntToStr(n4)
+''+ 'u2[1,10]=' +''+ IntToStr(u2[1,10]) ;
end;
////////////////////////////////////////////////////////////////
procedure TForm1.Button5Click(Sender: TObject);
begin
close
end;
initialization
randomize;
end.
Экономика
||||||||||||||||||||||||||||||||||||||||||||||||||
Первый вариант:программа "Ресурсы А"
Задача - Ресурсы.
Имеется s ресурсов.
Имеется r производств.
Для каждого производства расходуется некоторое
количество ресурсов.
Продукт производства прямо пропорционален объему
израсходованных ресурсов.
Для каждого производства ресурсы в заданной пропорции.
То есть объем производства прямо пропорционален
любому из израсходованных ресурсов.
Продуктам производства присваивается цена и объем.
Общая задача:
Максмизировать доход от производств.
Пока решается элементарная задача: одно производство.
r = 1
Цель:оценить максимальный расход ресурсов при разных
способах задания исходных ресурсов и ресурсов для производства.
Принято случайное задание объемов исходных ресурсов
и ресурсов для производства.
Определяется средний расход суммы ресурсов за t циклов статистики.
В ходе расчётов можно менять:
Число ресурсов,
Средний объем исходных ресурсов
Средний объем ресурсов для производства.
Скачать программу
ПРОГРАММА «1-Опознание»
ОГЛАВЛЕНИЕ
1. Исследование опознания
2. Исходные данные
3 Цель программы
4. Алгоритм
5.Вывод
6. Итоги
7. Скачать программу
Приложение 1
Распечатка программы «1-Опознание»
1. Исследование опознания
Исследование опознания можно разделить на три этапа.
Этап 1.
Задаются объекты опознания.
Этап 2
Задаются условия опознания.
Этап 3
Задается алгоритм опознания.
2. Исходные данные.
Пример
Const
a=1000; //размер матрицы объектов
b=30;//число объектов
c=12;// номер объекта для вывода
d=2;//задание вероятности
x1=1;//координата1 окна опознания
y1=1;// координата 1 окна опознания
x2=200;//координата2 окна опознания
y2=200;// координата 2 окна опознания
3. Цель программы
В процессе опознания определяется наиболее вероятные центры объектов в окне опознания.
4. Алгоритм]
4.1.Находятся центры объектов на исходной матрице.
w:array [1..3, 1..b] ofcardinal;//1, 2 координаты центров объектов
// объектов опознания
4.2. Находятся элементы объектов.
Вероятность элемента объекта определяется расстоянием от центра объекта.
Чем больше расстояние, тем меньше вероятность появления элемента объекта.
Расстояние находится в прямоугольнойметрике.
s:array [1..a,1..a,1..b] ofcardinal;// матрицаразмещения элементов
//объектов на матрице
4.3. Вычисляются матрицы
u: array [1..b] of variant;//частное суммы элементов объекта в окне опознания
//к сумме элементов всех объектов
u1: array [1..b] of variant;// частное суммы элементов объекта в окне опознания
//к сумме элементовобъекта
4.4. Находится максимальный элемент множества u –z1, объект –z2.
Находится максимальный элемент множества u1 –z3, объект –z4.
4.5. Находится второй по величине максимальный элемент множества u –z5, объект –z6.
Находится второй по величине максимальный элемент множества u1 –z7, объект –z8.
6. Итоги]
Как показали расчёты, центр объекта z1 часто, но не всегда, лежит в окне опознания.
7. Вывод
Выводятся все массивы введенные вышеz1,z2, z3, z4.
7. Скачать программу
https://disk.yandex.ru/d/uqpxmWG8Pj8HLA
]
]
Приложение 1
Распечатка программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button5: TButton;
Label1: TLabel;
StringGrid2: TStringGrid;
StringGrid3: TStringGrid;
Edit1: TEdit;
Label4: TLabel;
StringGrid1: TStringGrid;
StringGrid4: TStringGrid;
procedure Button1Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
a=1000; //размер матрицы объектов
b=30;//число объектов
c=12;// номер объекта для вывода
d=2;//задание вероятности
x1=1;//координата1 окнаопзнавания
y1=1;// координата 1 окнаопзнавания
x2=250;//координата2опзнавания
y2=250;// координата 2 окна опзнавания
var
Tick: Cardinal;
w:array [1..3, 1..b] ofcardinal;//1, 2 координаты центров объектов
// объектов опознания
//3 число элементов объекта
s:array [1..a,1..a,1..b] ofcardinal;// матрицаразмещения элементов
//объектов на матрице
p:array [1..b] ofcardinal;// сумма элементовдля каждого объекта
// в окне опознания
u: array [1..b] of variant;//частное суммы элементов объекта в окне опознания
//к сумме элементов всех объектов
u1: array [1..b] of variant;//частное сумме элементов объекта в окне опознания
//к сумме элементовобъекта
i,j,q ,z,r,i1,j1,tt,t,g ,k, v,y:integer;
n1, n2, n3,n4: integer;//
m1,m2,m3,m4,m5: integer;//
f1,f2,f3,f4,f5,z2,z4,z6,z8 : integer;//
z1,z3,z5,z7 : real;
procedure TForm1.Button1Click(Sender: TObject);
// окантовка
begin
for q:=1 to 5// нумерация по вертикалив табл №1 ,
doStringGrid1.Cells[0,q]:=IntToStr(q) ;
for q:=1 to b //нумерация по горизонтали в табл №1 ,
doStringGrid1.Cells[q,0]:=IntToStr(q);
for q:= 1 to a// нумерация по вертикалив табл №2 ,
do StringGrid2.Cells[0,q]:=IntToStr(q);
for q:=1 to a //ну2мерация по горизонтали в табл №2 ,
doStringGrid2.Cells[q,0]:=IntToStr(q);
for q:= 1 to 10// нумерация по вертикалив табл №1 ,
doStringGrid3.Cells[0,q]:=IntToStr(q);
for q:=1 to b//нумерация по горизонтали в табл №1 ,
doStringGrid3.Cells[q,0]:=IntToStr(q);
StringGrid1.Cells[0,0] := 'w[ ]';
StringGrid2.Cells[0,0] := 's[ ]';
StringGrid3.Cells[0,1] := 'p[ ]';
StringGrid3.Cells[0,2] := 'u[ ]';
StringGrid3.Cells[0,3] := 'u1[ ]';
////////////////// Генерация объектов
for r:= 1 to b do
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
n1:=0; n2:=0;
begin
n1:= random(a)+1;
n2:= random(a)+1;
w[1,r] := n1;
w[2,r] := n2;
end;
begin
for i:=1 to a do
for j:=1 to a do
if ((random (((abs(n1-i)+abs(n2-j)))+1)*3) <=d )
then s[i,j,r] :=r;
end;
end;
fort:=1 to b do
for i:=1 to a do
for j:=1 to a do
if s[i,j,t] >0then
w[3,t] :=w[3,t]+1;
//// Опознавание объъектов
for g:=1 to bdo
for i:=y1 to y2 do
for j:=x1 to x2 do
if s[i,j,g] >0thenbegin
Form1.Caption:=IntToStr(GetTickCount-Tick);
p[g] :=p[g] +1;
z:=z+1;
end;
for i:=1 to b do begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
u := 100*p /z;
u := 100*p /z;
u1 := 1000* p/w[3,i];
end;
//Опознание центров z2 и z4в окне опознанпия
for i:=1 to b do
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
ifu > z1 then begin z1:= u; z2:=i;end;
ifu1 > z3 then begin z3:= u1; z4:=i;end;
end;
//Опознание центров z6 и z8в окне опознанпия
for i:=1 to b do
begin
if i<>z2 then ifu > z5 then begin z5:= u; z6:=i;end;
if i<>z4 then ifu1 > z7 then begin z7:= u1; z8:=i;end;
end;
////Вывод
for i:=1 to bdobegin
Form1.Caption:=IntToStr(GetTickCount-Tick);
StringGrid1.Cells[i,1]:= IntToStr(w[1,i]);
StringGrid1.Cells[i,2]:= IntToStr(w[2,i]);
StringGrid1.Cells[i,3]:= IntToStr(w[3,i]);
end;
for I:=1 to a do
for J:=1 to ado
StringGrid2.Cells[j,i]:= IntToStr(s[i,j,z4])+' * '+IntToStr(s[i,j,z8]);
for j:=1 to b do
StringGrid3.Cells[j,1]:= IntToStr(p[j]) ;
fori:=1 to b dobegin
Form1.Caption:=IntToStr(GetTickCount-Tick);
StringGrid3.Cells[i,2]:=FormatFloat('0.00',u);
StringGrid3.Cells[i,3]:=FormatFloat('0.00',u1);
end;
Edit1.Text :='w[1,1]=' +''+ IntToStr(w[1,1])
+''+ 'w[2,1]=' +''+ IntToStr(w[2,1])
+''+ 'n1=' +''+ IntToStr(n1)+''+ 'n2=' +''+ IntToStr(n2)
+''+ 'z=' +''+ IntToStr(z)
+''+ 'z1=' +''+ FormatFloat('0.00',z1) +''+ 'z2=' +''+ IntToStr(z2)
+''+ 'z3=' +''+ FormatFloat('0.00',z3) +''+ 'z4=' +''+ IntToStr(z4)
+''+ 'z5=' +''+ FormatFloat('0.00',z5) +''+ 'z6=' +''+ IntToStr(z6)
+''+ 'z7=' +''+ FormatFloat('0.00',z7) +''+ 'z8=' +''+ IntToStr(z8);
Form1.Caption:=IntToStr(GetTickCount-Tick);
end;
////////////////////////////////////////////////////////////////
procedure TForm1.Button5Click(Sender: TObject);
begin
close
end;
initialization
randomize;
end.
ПРОГРАММА «1-Опознание»
]
ОГЛАВЛЕНИЕ]
1. Исследование опознания
2. Исходные данные
3 Цель программы
4. Алгоритм
5.Вывод
6. Итоги
7. Скачать программу
Приложение 1
Распечатка программы «1-Опознание»
1. Исследование опознания
Исследование опознания можно разделить на три этапа.
Этап 1.
Задаются объекты опознания.
Этап 2
Задаются условия опознания.
Этап 3
Задается алгоритм опознания.
2. Исходные данные.
Пример
Const
a=1000; //размер матрицы объектов
b=30;//число объектов
c=12;// номер объекта для вывода
d=2;//задание вероятности
x1=1; //координата 1 окна опознания
y1=1; // координата 1 окна опознания
x2=200; //координата 2 окна опознания
y2=200; // координата 2 окна опознания
3. Цель программы
В процессе опознания определяется наиболее вероятные центры объектов в окне опознания.
4. Алгоритм]
4.1. Находятся центры объектов на исходной матрице.
w: array [1..3, 1..b] of cardinal;//1, 2 координаты центров объектов
// объектов опознания
4.2. Находятся элементы объектов.
Вероятность элемента объекта определяется расстоянием от центра объекта.
Чем больше расстояние, тем меньше вероятность появления элемента объекта.
Расстояние находится в прямоугольной метрике.
s: array [1..a,1..a,1..b] of cardinal;// матрица размещения элементов
//объектов на матрице
4.3. Вычисляются матрицы
u: array [1..b] of variant;//частное суммы элементов объекта в окне опознания
//к сумме элементов всех объектов
u1: array [1..b] of variant;// частное суммы элементов объекта в окне опознания
//к сумме элементов объекта
4.4. Находится максимальный элемент множества u –z1, объект –z2.
Находится максимальный элемент множества u1 –z3, объект –z4.
4.5. Находится второй по величине максимальный элемент множества u –z5, объект –z6.
Находится второй по величине максимальный элемент множества u1 –z7, объект –z8.
6. Итоги]
Как показали расчёты, центр объекта z1 часто, но не всегда, лежит в окне опознания.
7. Вывод
Выводятся все массивы введенные выше z1, z2, z3, z4.
7. Скачать программу
https://disk.yandex.ru/d/uqpxmWG8Pj8HLA
]
]
Приложение 1
Распечатка программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button5: TButton;
Label1: TLabel;
StringGrid2: TStringGrid;
StringGrid3: TStringGrid;
Edit1: TEdit;
Label4: TLabel;
StringGrid1: TStringGrid;
StringGrid4: TStringGrid;
procedure Button1Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
a=1000; //размер матрицы объектов
b=30;//число объектов
c=12;// номер объекта для вывода
d=2;//задание вероятности
x1=1; //координата 1 окна опзнавания
y1=1; // координата 1 окна опзнавания
x2=250; //координата 2 опзнавания
y2=250; // координата 2 окна опзнавания
var
Tick: Cardinal;
w: array [1..3, 1..b] of cardinal;//1, 2 координаты центров объектов
// объектов опознания
//3 число элементов объекта
s: array [1..a,1..a,1..b] of cardinal;// матрица размещения элементов
//объектов на матрице
p: array [1..b] of cardinal;// сумма элементов для каждого объекта
// в окне опознания
u: array [1..b] of variant;//частное суммы элементов объекта в окне опознания
//к сумме элементов всех объектов
u1: array [1..b] of variant;//частное сумме элементов объекта в окне опознания
//к сумме элементов объекта
i,j,q ,z,r,i1,j1,tt,t,g ,k, v,y: integer;
n1, n2, n3,n4 : integer;//
m1,m2,m3,m4,m5: integer;//
f1,f2,f3,f4,f5,z2,z4,z6,z8 : integer;//
z1,z3,z5,z7 : real;
procedure TForm1.Button1Click(Sender: TObject);
// окантовка
begin
for q:=1 to 5 // нумерация по вертикали в табл №1 ,
do StringGrid1.Cells[0,q]:=IntToStr(q) ;
for q:=1 to b //нумерация по горизонтали в табл №1 ,
do StringGrid1.Cells[q,0]:=IntToStr(q);
for q:= 1 to a // нумерация по вертикали в табл №2 ,
do StringGrid2.Cells[0,q]:=IntToStr(q);
for q:=1 to a //ну2мерация по горизонтали в табл №2 ,
do StringGrid2.Cells[q,0]:=IntToStr(q);
for q:= 1 to 10 // нумерация по вертикали в табл №1 ,
do StringGrid3.Cells[0,q]:=IntToStr(q);
for q:=1 to b//нумерация по горизонтали в табл №1 ,
do StringGrid3.Cells[q,0]:=IntToStr(q);
StringGrid1.Cells[0,0] := 'w[ ]';
StringGrid2.Cells[0,0] := 's[ ]';
StringGrid3.Cells[0,1] := 'p[ ]';
StringGrid3.Cells[0,2] := 'u[ ]';
StringGrid3.Cells[0,3] := 'u1[ ]';
////////////////// Генерация объектов
for r:= 1 to b do
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
n1:=0; n2:=0;
begin
n1:= random(a)+1;
n2:= random(a)+1;
w[1,r] := n1;
w[2,r] := n2;
end;
begin
for i:=1 to a do
for j:=1 to a do
if ((random (((abs(n1-i)+abs(n2-j)))+1)*3) <=d )
then s[i,j,r] :=r;
end;
end;
for t:=1 to b do
for i:=1 to a do
for j:=1 to a do
if s[i,j,t] >0 then
w[3,t] := w[3,t]+1;
//// Опознавание объъектов
for g:=1 to b do
for i:=y1 to y2 do
for j:=x1 to x2 do
if s[i,j,g] >0 then begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
p[g] := p[g] +1;
z:=z+1;
end;
for i:=1 to b do begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
u := 100* p /z;
u := 100* p /z;
u1 := 1000* p/w[3,i];
end;
//Опознание центров z2 и z4 в окне опознанпия
for i:=1 to b do
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
if u > z1 then begin z1:= u; z2:=i;end;
if u1 > z3 then begin z3:= u1; z4:=i;end;
end;
// Опознание центров z6 и z8 в окне опознанпия
for i:=1 to b do
begin
if i<>z2 then if u > z5 then begin z5:= u; z6:=i;end;
if i<>z4 then if u1 > z7 then begin z7:= u1; z8:=i;end;
end;
////Вывод
for i:=1 to b do begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
StringGrid1.Cells[i,1]:= IntToStr(w[1,i]);
StringGrid1.Cells[i,2]:= IntToStr(w[2,i]);
StringGrid1.Cells[i,3]:= IntToStr(w[3,i]);
end;
for I:=1 to a do
for J:=1 to a do
StringGrid2.Cells[j,i]:= IntToStr(s[i,j,z4])+' * '+IntToStr(s[i,j,z8]);
for j:=1 to b do
StringGrid3.Cells[j,1]:= IntToStr(p[j]) ;
for i:=1 to b do begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
StringGrid3.Cells[i,2]:= FormatFloat('0.00',u);
StringGrid3.Cells[i,3]:= FormatFloat('0.00',u1);
end;
Edit1.Text :='w[1,1]=' +' '+ IntToStr(w[1,1])
+' '+ 'w[2,1]=' +' '+ IntToStr(w[2,1])
+' '+ 'n1=' +' '+ IntToStr(n1) +' '+ 'n2=' +' '+ IntToStr(n2)
+' '+ 'z=' +' '+ IntToStr(z)
+' '+ 'z1=' +' '+ FormatFloat('0.00',z1) +' '+ 'z2=' +' '+ IntToStr(z2)
+' '+ 'z3=' +' '+ FormatFloat('0.00',z3) +' '+ 'z4=' +' '+ IntToStr(z4)
+' '+ 'z5=' +' '+ FormatFloat('0.00',z5) +' '+ 'z6=' +' '+ IntToStr(z6)
+' '+ 'z7=' +' '+ FormatFloat('0.00',z7) +' '+ 'z8=' +' '+ IntToStr(z8);
Form1.Caption:=IntToStr(GetTickCount-Tick);
end;
///////// ///////////////////////////////////////////////////////
procedure TForm1.Button5Click(Sender: TObject);
begin
close
end;
initialization
randomize;
end.
internal class Program
{
private static ulong idCounter = 0;
static void Main(string[] args)
{
Task[] tasks = new Task[10];
for (int j = 0; j < tasks.Length; j++) {
tasks[j] = Task.Factory.StartNew(Increment);
}
Task.WaitAll(tasks);
Debug.WriteLine($"Counter: {idCounter}");
}
private static void Increment()
{
for (int i = 0; i < 10000; i++) {
idCounter++;
}
}
}
К вашему восприятию ИТ здесь работает не логически..и это уже какой год.
Настрогать приложений ну совсем не хорошая идея. Сколько человек этим заинтересуются??
А порт можно самим поменять.
]ПРОГРАММА «2-Опознание»
]
ОГЛАВЛЕНИЕ
1. Исследование опознания
2. Исходные данные
3 Цель программы
4. Алгоритм
5.Вывод
6. Итоги
7. Скачать программу
]Приложение 1
Распечатка программы «2-Опознание»
1. Исследование опознания
Исследование опознания можно разделить на три этапа.
Этап 1.
Задаются объекты опознания.
Этап 2
Задаются условия опознания.
Этап 3
Задается алгоритм опознания.
2. Исходные данные.
Пример
Const
a=1000; //размер матрицы объектов
b=30;//число объектов
c=12;// номер объекта для вывода
d=2;//задание вероятности
x1=1;//координата1 окнаопознавания
y1=1;// координата 1 окнаопознавания
x2=150;//координата2опознавания
y2=150;// координата 2 окна опознавания
h=5;//суперцикл
3. Цель программы
Программа ««2-Опознание» развитие программы«1-Опознание».
По программе«1-Опознание» в процессе опознания определяется центры объектов в окне опознания.
По программе «2-Опознание»собирается статистика нахождения, хотя бы одного центра объекта
в окне опознания.
4. Алгоритм
4.1.Находятся центры объектов на исходной матрице.
w:array [1..3, 1..b] ofcardinal;//1, 2 координаты центров объектов
// объектов опознания, 3 – число элементов объекта опознания
4.2. Находятся элементы объектов.
Вероятность элемента объекта определяется расстоянием от центра объекта.
Чем больше расстояние, тем меньше вероятность появления элемента объекта.
Расстояние находится в прямоугольнойметрике.
s:array [1..a,1..a,1..b] ofcardinal;// матрицаразмещения элементов
//объектов на матрице
4.3. Вычисляются матрицы
u: array [1..b] of variant;//частное суммы элементов объекта в окне опознания
//к сумме элементов всех объектов
u1: array [1..b] of variant;// частное суммы элементов объекта в окне опознания
//к сумме элементовобъекта
4.4. Находится максимальный элемент множества u –z1, объект –z2.
Находится максимальный элемент множества u1 –z3, объект –z4.
4.5. Находится второй по величине максимальный элемент множества u –z5, объект –z6.
Находится второй по величине максимальный элемент множества u1 –z7, объект –z8.
4.6. Расчёты по 4.1 – 4.5 проводятся h раз – суперцикл.
Вычисляются:
Z9 – число нахождений, хотя бы одного центра объекта
в окне опознания за суперцикл.
n – частное от деления z9 на h.
Массив u2[1..h] – элемент u2 равен 1, при нахождения на шаге i суперцикла, хотя бы одного центра объекта в окне опознания, и -0 в противном случае.
6. Итоги
Как показали расчёты, центр объекта z1 часто, но не всегда, лежит в окне опознания.
Можно выявить соответствие размера окна опознания и z10.
7. Вывод
Выводятся все массивы введенные вышеи z1, z2, z3, z4, z5, z6, z7, z8, z9, z10.
Массив s[1..a,1..a,1..b] выводится при значениях s[1..a,1..a,z4] и s[1..a,1..a,z8].
Элемент матрицы s[1..a,1..a,z4] * s[1..a,1..a,z8]
7. Скачать программу
https://disk.yandex.ru/d/lwAc9bq2Lkohrg
Приложение 1
Распечатка программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button5: TButton;
Label1: TLabel;
StringGrid2: TStringGrid;
StringGrid3: TStringGrid;
Edit1: TEdit;
Label4: TLabel;
StringGrid1: TStringGrid;
StringGrid4: TStringGrid;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
a=1000; //размер матрицы объектов
b=30;//число объектов
c=12;// номер объекта для вывода
d=2;//задание вероятности
x1=1;//координата1 окнаопознания
y1=1;// координата 1 окнаопознания
x2=150;//координата2опознания
y2=150;// координата 2 окна
h=5;//суперцикл
var
Tick: Cardinal;
w:array [1..3, 1..b] ofcardinal;//1, 2 координаты центров объектов
// объектов опознания
//3 число элементов объекта
s:array [1..a,1..a,1..b] ofcardinal;// матрицаразмещения элементов
//объектов на матрице
p:array [1..b] ofcardinal;// сумма элементовдля каждого объекта
// в окне опознания
u: array [1..b] of variant;//частное суммы элементов объекта в окне опознания
//к сумме элементов всех объектов
u1: array [1..b] of variant;//частное сумме элементов объекта в окне опознания
u2: array [1..h] of cardinal;//1 центр объекта в окне опознания, 0 - вне окна
i,j,q ,z,r,i1,i2,i3,j1,tt,t,g ,k, v,y:integer;
n1, n2, n3,n4: integer;//
m1,m2,m3,m4,m5: integer;//
f, f1,f2,f3,f4,f5,z2,z4,z6,z8,z9 : integer;//
z1,z3,z5,z7 : real;
n: variant;
procedure TForm1.Button1Click(Sender: TObject);
// окантовка
begin
for q:=1 to 5// нумерация по вертикалив табл №1 ,
doStringGrid1.Cells[0,q]:=IntToStr(q) ;
for q:=1 to b //нумерация по горизонтали в табл №1 ,
doStringGrid1.Cells[q,0]:=IntToStr(q);
for q:= 1 to a// нумерация по вертикалив табл №2 ,
do StringGrid2.Cells[0,q]:=IntToStr(q);
for q:=1 to a //ну2мерация по горизонтали в табл №2 ,
doStringGrid2.Cells[q,0]:=IntToStr(q);
for q:= 1 to 10// нумерация по вертикалив табл №1 ,
doStringGrid3.Cells[0,q]:=IntToStr(q);
for q:=1 to 500//нумерация по горизонтали в табл №1 ,
doStringGrid3.Cells[q,0]:=IntToStr(q);
StringGrid1.Cells[0,0] := 'w[ ]';
StringGrid2.Cells[0,0] := 's[ ]';
StringGrid3.Cells[0,1] := 'p[ ]';
StringGrid3.Cells[0,2] := 'u[ ]';
StringGrid3.Cells[0,3] := 'u1[ ]';
StringGrid3.Cells[0,4] := 'u2[ ]';
////////////////// Генерация объектов
forf:=1 to h do//Суперрцикл
begin //f
for i:=1 to b do
begin
p :=0;
u :=0;
u1 := 0;
end;
for i:=1 to 3 do
for j:=1 to b do
w[i,j] :=0;
for i1:=1 to a do
for i2:=1 to a do
for i3:=1 to b do
s[i1,i2,i3] :=0;
z1:=0; z2:=0; z3:=0; z4:=0;
z5:=0; z6:=0; z7:=0; z8:=0;
for r:= 1 to b do
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
n1:=0; n2:=0;
begin
n1:= random(a)+1;
n2:= random(a)+1;
w[1,r] := n1;
w[2,r] := n2;
end;
for i:=1 to a do
for j:=1 to a do
if ((random (((abs(n1-i)+abs(n2-j)))+1)*3) <=d )
then s[i,j,r] :=r;
end;
fort:=1 to b do
for i:=1 to a do
for j:=1 to a do
if s[i,j,t] >0then
w[3,t] :=w[3,t]+1;
//// Опознавание объъектов
for g:=1 to bdo
for i:=y1 to y2 do
for j:=x1 to x2 do
if s[i,j,g] >0thenbegin
Form1.Caption:=IntToStr(GetTickCount-Tick);
p[g] :=p[g] +1;
z:=z+1;
end;
for i:=1 to b do begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
u := 100*p /z;
u := 100*p /z;
u1 := 1000* p/w[3,i];
end;
//Опознание центров z2 и z4в окне опознанпия
for i:=1 to b do
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
ifu > z1 then begin z1:= u; z2:=i;end;
ifu1 > z3 then begin z3:= u1; z4:=i;end;
end;
//Опознание центров z6 и z8в окне опознанпия
for i:=1 to b do
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
if i<>z2 then ifu > z5 then begin z5:= u; z6:=i;end;
if i<>z4 then ifu1 > z7 then begin z7:= u1; z8:=i;end;
end;
if ( ((w[1,z4]>=x1) and(w[1,z4]<=x2)) and
((w[2,z4]>=y1) and(w[2,z4]<=y2)) )
thenbegin z9 := z9+1; u2[f] :=1;end;
end;//f
N:= z9/h;
////Вывод
for i:=1 to bdobegin
Form1.Caption:=IntToStr(GetTickCount-Tick);
StringGrid1.Cells[i,1]:= IntToStr(w[1,i]);
StringGrid1.Cells[i,2]:= IntToStr(w[2,i]);
StringGrid1.Cells[i,3]:= IntToStr(w[3,i]);
end;
for I:=1 to a do
for J:=1 to ado
StringGrid2.Cells[j,i]:= IntToStr(s[i,j,z4])+' * '+IntToStr(s[i,j,z8]);
for j:=1 to b do
StringGrid3.Cells[j,1]:= IntToStr(p[j]) ;
fori:=1 to b dobegin
Form1.Caption:=IntToStr(GetTickCount-Tick);
StringGrid3.Cells[i,2]:=FormatFloat('0.00',u);
StringGrid3.Cells[i,3]:=FormatFloat('0.00',u1);
end;
fori3:=1 to h dobegin
StringGrid3.Cells[i3,4]:=IntToStr(u2[i3])
end;
Edit1.Text :=
'n1=' +''+ IntToStr(n1)+''+ 'n2=' +''+ IntToStr(n2)
+''+ 'z=' +''+ IntToStr(z)
+''+ 'z1=' +''+ FormatFloat('0.00',z1) +''+ 'z2=' +''+ IntToStr(z2)
+''+ 'z3=' +''+ FormatFloat('0.00',z3) +''+ 'z4=' +''+ IntToStr(z4)
+''+ 'z5=' +''+ FormatFloat('0.00',z5) +''+ 'z6=' +''+ IntToStr(z6)
+''+ 'z7=' +''+ FormatFloat('0.00',z7) +''+ 'z8=' +''+ IntToStr(z8);
Edit2.Text :=
'z9=' +''+ IntToStr(z9)
+''+ 'n=' +''+ FormatFloat('0.00',n)
+''+ 'n=' +''+'u2[h]=' +''+ IntToStr(u2[h])
end;
////////////////////////////////////////////////////////////////
procedure TForm1.Button5Click(Sender: TObject);
begin
close
end;
initialization
randomize;
end.
ПРОГРАММА «3-Опознание»
1.Алгоритм
Программа «3-Опознание» имеет одно отличие от программы «2-Опознание».
Это нахождение расстояния при определении вероятности появление элемента объекта.
В программе «2-Опознание» вероятность появления элемента объекта находится с использованием
расстояния в прямоугольной метрике.
Википедия
…метрика, введённая Германом Минковским. Согласно этой метрике, расстояние между двумя точками равно сумме модулей разностей их координат.
В программе «3-Опознание» вероятность появления элемента объекта находится с использованием
расстояния в эвклидовой метрике.
То есть по теореме Пифагора.
2. Итог
Z9 – число нахождений, хотя бы одного центра объекта
в окне опознания за суперцикл.
n – частное от деления z9 на h (число шагов суперцикла).
Расчёты показали совпадение величины n длядвух метрик.
Что требует объяснения.
3. Скачать программу
https://disk.yandex.ru/d/eZsrf3cc8zgxiA
Приложение 1
Распечатка программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button5: TButton;
Label1: TLabel;
StringGrid2: TStringGrid;
StringGrid3: TStringGrid;
Edit1: TEdit;
Label4: TLabel;
StringGrid1: TStringGrid;
StringGrid4: TStringGrid;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
a=1000; //размер матрицы объектов
b=30;//число объектов
c=12;// номер объекта для вывода
d=2;//задание вероятности
x1=1;//координата1 окнаопознания
y1=1;// координата 1 окнаопознания
x2=150;//координата2опознания
y2=150;// координата 2 окна
h=100 ; //суперцикл
var
Tick: Cardinal;
w:array [1..3, 1..b] ofcardinal;//1, 2 координаты центров объектов
// объектов опознания
//3 число элементов объекта
s:array [1..a,1..a,1..b] ofcardinal;// матрицаразмещения элементов
//объектов на матрице
p:array [1..b] ofcardinal;// сумма элементовдля каждого объекта
// в окне опознания
u: array [1..b] of variant;//частное суммы элементов объекта в окне опознания
//к сумме элементов всех объектов
u1: array [1..b] of variant;//частное сумме элементов объекта в окне опознания
u2: array [1..h] of cardinal;//1 центр объекта в окне опознания, 0 - вне окна
tt,i,j,q ,z,r,i1,i2,i3,j1,t,g ,k, v,y:integer;
n1, n2, n3,n4: integer;//
m1,m2,m3,m4,m5: integer;//
f, f1,f2,f3,f4,f5,z2,z4,z6,z8,z9 : integer;//
z1,z3,z5,z7 : real;
n: variant;
procedure TForm1.Button1Click(Sender: TObject);
// окантовка
begin
for q:=1 to 5// нумерация по вертикалив табл №1 ,
doStringGrid1.Cells[0,q]:=IntToStr(q) ;
for q:=1 to b //нумерация по горизонтали в табл №1 ,
doStringGrid1.Cells[q,0]:=IntToStr(q);
for q:= 1 to a// нумерация по вертикалив табл №2 ,
do StringGrid2.Cells[0,q]:=IntToStr(q);
for q:=1 to a //ну2мерация по горизонтали в табл №2 ,
doStringGrid2.Cells[q,0]:=IntToStr(q);
for q:= 1 to 10// нумерация по вертикалив табл №1 ,
doStringGrid3.Cells[0,q]:=IntToStr(q);
for q:=1 to 500//нумерация по горизонтали в табл №1 ,
doStringGrid3.Cells[q,0]:=IntToStr(q);
StringGrid1.Cells[0,0] := 'w[ ]';
StringGrid2.Cells[0,0] := 's[ ]';
StringGrid3.Cells[0,1] := 'p[ ]';
StringGrid3.Cells[0,2] := 'u[ ]';
StringGrid3.Cells[0,3] := 'u1[ ]';
StringGrid3.Cells[0,4] := 'u2[ ]';
////////////////// Генерация объектов
forf:=1 to h do//Суперрцикл
begin //f
for i:=1 to b do
begin
p :=0;
u :=0;
u1 := 0;
end;
for i:=1 to 3 do
for j:=1 to b do
w[i,j] :=0;
for i1:=1 to a do
for i2:=1 to a do
for i3:=1 to b do
s[i1,i2,i3] :=0;
z1:=0; z2:=0; z3:=0; z4:=0;
z5:=0; z6:=0; z7:=0; z8:=0;
for r:= 1 to b do
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
n1:=0; n2:=0;
begin
n1:= random(a)+1;
n2:= random(a)+1;
w[1,r] := n1;
w[2,r] := n2;
end;
for i:=1 to a do
for j:=1 to a do
begin
if(random (Trunc (Sqrt( Sqr(abs(n1-i))+Sqr(abs(n2-j)) )
+1)) *3)<=dthen s[i,j,r] :=r;
end; end;
tt:=Trunc(Sqrt (0));//для ясности
{?x Sqrt (x) Квадратный корень из x
x2 Sqr (x) Квадрат x
}
fort:=1 to b do
for i:=1 to a do
for j:=1 to a do
if s[i,j,t] >0then
w[3,t] :=w[3,t]+1;
//// Опознавание объъектов
for g:=1 to bdo
for i:=y1 to y2 do
for j:=x1 to x2 do
if s[i,j,g] >0then begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
p[g] :=p[g] +1;
z:=z+1;
end;
for i:=1 to b do begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
u := 100*p /z;
u := 100*p /z;
u1 := 1000* p/w[3,i];
end;
//Опознание центров z2 и z4в окне опознанпия
for i:=1 to b do
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
ifu > z1 then begin z1:= u; z2:=i;end;
ifu1 > z3 then begin z3:= u1; z4:=i;end;
end;
//Опознание центров z6 и z8в окне опознанпия
for i:=1 to b do
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
if i<>z2 then ifu > z5 then begin z5:= u; z6:=i;end;
if i<>z4 then ifu1 > z7 then begin z7:= u1; z8:=i;end;
end;
if ( ((w[1,z4]>=x1) and(w[1,z4]<=x2)) and
((w[2,z4]>=y1) and(w[2,z4]<=y2)) )
thenbegin z9 := z9+1; u2[f] :=1;end;
end;//f
N:= z9/h;
////Вывод
for i:=1 to bdobegin
Form1.Caption:=IntToStr(GetTickCount-Tick);
StringGrid1.Cells[i,1]:= IntToStr(w[1,i]);
StringGrid1.Cells[i,2]:= IntToStr(w[2,i]);
StringGrid1.Cells[i,3]:= IntToStr(w[3,i]);
end;
for I:=1 to a do
for J:=1 to ado
StringGrid2.Cells[j,i]:= IntToStr(s[i,j,z4])+' * '+IntToStr(s[i,j,z8]);
for j:=1 to b do
StringGrid3.Cells[j,1]:= IntToStr(p[j]) ;
fori:=1 to b dobegin
Form1.Caption:=IntToStr(GetTickCount-Tick);
StringGrid3.Cells[i,2]:=FormatFloat('0.00',u);
StringGrid3.Cells[i,3]:=FormatFloat('0.00',u1);
end;
fori3:=1 to h dobegin
StringGrid3.Cells[i3,4]:=IntToStr(u2[i3])
end;
Edit1.Text :=
'n1=' +''+ IntToStr(n1)+''+ 'n2=' +''+ IntToStr(n2)
+''+ 'z=' +''+ IntToStr(z)
+''+ 'z1=' +''+ FormatFloat('0.00',z1) +''+ 'z2=' +''+ IntToStr(z2)
+''+ 'z3=' +''+ FormatFloat('0.00',z3) +''+ 'z4=' +''+ IntToStr(z4)
+''+ 'z5=' +''+ FormatFloat('0.00',z5) +''+ 'z6=' +''+ IntToStr(z6)
+''+ 'z7=' +''+ FormatFloat('0.00',z7) +''+ 'z8=' +''+ IntToStr(z8);
Edit2.Text :=
'z9=' +''+ IntToStr(z9)
+''+ 'n=' +''+ FormatFloat('0.00',n)
+''+'u2[h]=' +''+ IntToStr(u2[h])
+''+'tt=' +''+ IntToStr(tt)
end;
////////////////////////////////////////////////////////////////
procedure TForm1.Button5Click(Sender: TObject);
begin
close
end;
initialization
randomize;
end.
Программа«Мыслеворот»
||||||||||||||||||||||||||||||||||
|||||||||||||||||||||||||||||||||||
[size=20][color=maroon]1. Основной цикл.
На вход блокаприходит переменная ss.
В диапазоне 1-a.
В блоке 1 происходит преобразование числа
ss в число tt.
Порядок преобразований определяется массивом U1[1..a].
Номер входа ss - на выходе число tt.
Число tt равно числу с номером ss в массиве U1[1..a].
В начале вычислений ss = pp.
Далее.
На входе блока числа ss = tt, на выходе ss.
Основной цикл повторяется k1.
Числа ss записываются в массив c[1..k1].
[/color][/size]
[size=20][color=purple]2. Суперцикл
Для набора статистики основной цикл повторяется d раз.
Результаты по сумме циклов определенной длинысуммируются в массиве U4[1..a].
[/color][/size]
[color=fuchsia][size=20]3. Пакеты
По результатам многочисленных вычислений определена следующая закономерность.
Последовательность чисел ss образует периодически повторяющиесяпакеты (последовательности чисел).
Предусмотрено вычисление массива u4[1..a].
Каждая позиция i массива u5[1..a] равна сумме пакетов длины i в суперцикле.
В данном варианте программы Мыслеворот 5 учитываются только пакеты длиной не более 32.
[/size][/color]
[size=20][color=green]4. Вывод.
4.1. pp..2. tt и ss.
4.2. Четырьмя строками в соответствии со значениями k:1 …49, 50 …99, 100 …149,(k1- 4)…k1.
4.3. u4[1..a]
Последний результат в суперцикле при вычислении основного цикла.
4.3. u5[1..a]
Суммарные результаты основных циклов при выполнении суперцикла.
4.4. Edit 2 Входные данные:
a, d, k1.
4.5. p6
Суммарное число выхода из основного цикла
c наличием одного повторяющегося пакета.
Правильный результат
4.6. p7
Суммарное число выхода из основного цикла
наличием двух повторяющихся пакетов.
Это для тестирования сбоев в программе.
4.7. p 8
Суммарное число выхода из основного цикла при наличии трёх повторяющхся циклов.
Это для тестирования сбоев в программе.
4.8. p9
Число нулей в массивах c[k].
Правильный результат a *d – p6
if u5[p5] =1
then p6:= p6 +1;
if u5[p5] =2
then p7:= p7 +1;
if u5[p5] =3
then p8:= p8 +1;
if u5[p5] =0
then p9:= p9 +1
[/color][/size]
[size=20][color=navy]5. Указания к расчётам.
Как было упомянуто, программа не учитывает пакеты длиной более 32.
Поэтому ограничения на числа a и d.
Показатель правильных расчётов: p6 = d.[/color][/size]
[size=20][color=blue]6. Результаты счёта.
6.1. С «возрастанием» a увеличивается длина пакета.
6.2. С «возрастанием» d появляются пакеты большой длины.
5.3. При «малых» k1 и «больших» d и a изредка не формируются повторяющиеся пакеты.
[/color][/size]
[size=20][color=teal]Скачать программу[/color][/size]
https://yadi.sk/d/11p3jtKEuGXn5
//////////////////////////////////////
|||||||||||||||||||||||||||||||||||||||||||||||||||||
[size=20][color=blue]В развитие программы 5 – Мыслеворот создана программа В- Мыслеворот
Отличия:
А) Снято ограничениепо максимальной длине цикла.
Б) Введен массив.
U6[1...a]
Элементы массива равны отношению смежных элементов массива u4[1...a],
То есть сумм циклов, длины которых отличается на единицу.
В) Введен массив.
U7[1...a]
Элементi равен сумме последовательностей ss длиной i.
Отсчёт от начала вычислениядо формировки цикла ss.
Г) Вычисляется p11 – максимально длинный цикл.
Д)Вычисляется p12– максимально длинная последовательность от начала расчёта
до формирования первого цикла ss.
Е) Вычисляется средняя длина цикла – pa
Ж) Вычисляется средняя длина последовательности до формирования цикла- pb[/color][/size]
[size=20][color=maroon]Определена закономерность:
pa примерно равно pb[/color][/size]
[size=18][color=purple]Комментарий: Использован алгоритм определения циклов с двумя допущениями.
1. Длина цикла не превышает a
2. В цикле не повторяющихся чисел.
[/color][/size]
[size=18][color=green]Эти два допущения подтверждены расчётами.
Но следует доказать.[/color][/size]
[size=20][color=red]Скачать исходник[/color][/size]
https://yadi.sk/d/1Vx5n2IQvKBCe
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[size=20][color=blue]В вероятностных расчётах обычно действует общее правило.
С увеличением числа расчётов результаты «стремятся» к неким
усредненным показателям.
По программе «Мыслеворот» проведен расчёты
при:
k1 = 300a = 50d =100000
Для трёх вариантов расчётов получены следующие результаты
(результаты счёта для трёх вариантов разделены «-»).
[/color][/size]
[size=18][color=maroon]p11 (максимальная длина цикла) = 26-26-25
p12 (максимальная длина последовательности до вхождения в цикл) = 26-26-28
pa (средняя длина цикла) = 4,78-4,79-4,76
pb (средняя длина последовательности до вхождения в цикл) = 4,77-4,77-4,77
[/color][/size]
|||||||||||||||||||||||||||||
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[size=20][color=blue]Вычиcляются
s(a) = pa : a
где:
а - число чисел в массиве преобразования -u1[1..a] (программа С- Мыслеворот)
pa: -средняя длина цикла(программа С- Мыслеворот)[/color][/size]
[color=maroon][size=18]s(50) = 0,09500
s(150) = 05313
s(1000) = 0,01936
s(2000) = 0,01422
a(5000) = 0,00891
s(10000) = 0,00623
s(30000) = 0,00366
s(50000) = 0,00267
s(60000) = 0,00256 (?)
s(80000) = 0,00019
[/size][/color]
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|||||||||||||||||||||||||||||||||||||
[size=20][color=maroon]Программа Мыслеворот моделирует
распространение фронта изменений вфизической среде.
Причемсвойства фронта меняются под воздействием среды.
Когда-то наступает равновесие.
Характеристики фронта уже не меняются.
[/color][/size]
[size=20][color=purple]Пример для физики.
Кристаллизация.
[/color][/size]
[size=20][color=blue]Пример для человеческого общества.
Распространение слуха.
Вначале слух трансформируется в процессе распространения,
затем принимает законченную форму.[/color][/size]
||||||||||||||||||||||||||||||||||||||||||||||||
|||||||||||||||||||||||||||||||||||||||||||||||||||
[size=20][color=maroon]В программе С - Мыслеворот матрица преобразованийU1[1..a]
формируется следующим образом:
Случайно выбираются числа из последовательности чисел от 1 до a.
Исходная последовательность чисел не изменяется.
Из них формируетсямассив преобразованийU1[1..a].
В результате в массиве преобразований некоторые числа из массива a
могут быть более одного раза, а некоторых чисел может не быть.
В программеП - Мыслеворот массив преобразованийU1[1..a]
- перестановка чисел от 1 до a.[/color][/size]
[color=green]Скачать[/color]
https://yadi.sk/d/tt0QStIL3Gzain
[size=20][color=navy]ПрограммыС - Мыслевороти П - Мыслеворот имеют одинаковый алгоритм.
Только в программеП - Мыслеворот несколько изменены выходные данные.
Для удобства в программеП- Мыслеворот предусмотрен простой переход к
алгоритму программы С - Мыслеворот.[/color][/size]
[size=20][color=purple]Результаты счета по двум программам сильно различаются.
1. С - Мыслеворот.
Суммациклов почти плавно уменьшается с ростом длины цикла.
П - Мыслеворот
Сумма циклов почти одинакова для каждой длины цикла.
2.С - Мыслеворот
Последовательность чисел ss вступает в цикл после нескольких итераций
Массивu9
П. - Мыслеворот
Последовательность чисел ss вступает в цикл с первой итерации
Массивu9
[/color][/size]
Разбиение чисел на квадраты
/||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[size=20][color=maroon]В 1770 году Лагранж дал нам теорему.
В современной форме:
А.А. Бухштаб
Теория чисел
Теорема 303. (Лагранж) Каждое натуральное число представимо в виде суммы четырёх квадратов целых чисел.
[/color][/size]
[size=20][color=blue]Лагранж засчитывал и квадраты нуля.
[/color][/size]
[size=20][color=purple]Любопытно.
А что будет, если исключить квадраты нуля?
Условное название: разбиение А.
Разработана программа 4 kvadrat.
Программа отыскивает все возможные Разбиения А.
Вычисления.
Рассчитано разбиение совокупности целых чисел от 1 до 1500.
Результат.
1.Наибольшее число безРазбиения А – 128.
2.Среди 1500 чисел наибольшее число разбиений – 81 для1470.
3.Вычислены средние числа разбиений:x1 и x2.[/color][/size]
[size=20][color=green]Скачать программу 4 kvadrat
https://yadi.sk/d/3mkh6ZYI3Xm7rQ[/color][/size]
//////////////////////
|}}}}}}}}}}}}}}}
[size=20][color=maroon]В развитие программы 4 kvadrat разработана программа 5 kvadrat.
Вместо 4 квадратов число разбивается на 5 квадратов.
Условное название: разбиение В.
Программа отыскивает все возможные Разбиения В.
Вычисления.
Рассчитано разбиение совокупности натуральных чисел от 1 до 1500.
Результат.
1.Наибольшее число безРазбиения В среди 1500 натуральных числе– 33.
2.Среди натуральных 1500 чисел наибольшее число разбиений – 332 для1459 .
3.Вычислены средние числа разбиений:x1 и x2.
[/color][/size]
5 kvadrat
u1[ww]=--126------p=--1500------k=--166------w=--38------x1=--098,333------x2=--170,789
4 kvadrat
u1[ww]=--54------p=--1500------k=--48------w=--38------x1=--021,205------x2=--044,038
3 kvadrat
u1[ww]=--9------p=--1499------k=--0------w=--38------x1=--003,461------x2=--010,318
[size=20][color=green]Скачать программу 5 kvadrat.[/color][/size]
https://yadi.sk/d/Pw8-Q0bH3XpSnX
|||||||||||||||||||||||||||||||||||||||||||
|||||||||||||||||||||||||||||||||||||||||||||||
В развитие программы 4 kvadrat разработана программа 1 kvadrat.
Вместо 4 квадратов число «разбивается» на 1 квадрат.
Условное название: разбиение Д.
Программа отыскивает все возможные Разбиения Д.
Вычисления.
Рассчитано разбиение совокупности натуральных чисел от 1 до 1500.
Результат.
1.Наибольшее число безРазбиения Д среди 1500 натуральных чисел– 0.
2.Среди 1500 чисел наибольшее число разбиений – 1 для1444 .
3.Вычислены средние числа разбиений:x1 и x2.
5 kvadrat
u1[ww]=--126------p=--1500------k=--166------w=--38------x1=--098,333------x2=--170,789
4 kvadrat
u1[ww]=--54------p=--1500------k=--48------w=--38------x1=--021,205------x2=--044,038
3 kvadrat
u1[ww]=--9------p=--1499------k=--0------w=--38------x1=--003,461------x2=--010,318
2 kvadrat
u1[ww]=--1------p=--1493------k=--0------w=--38------x1=--000,389------x2=--002,787
1 kvadrat
u1[ww]=--1------p=--1444------k=--0------w=--38------x1=--000,025------x2=--001,619
[size=20][color=green]Скачать программу 1 kvadrat.[/color][/size]
https://yadi.sk/i/lEGrhgbK3YAqi7
||||||||||||||||||||||||||||||||||||
|||||||||||||||||||||||||||||||||||||
В развитие программы 4 kvadrat разработана программа 1 kvadrat.
Вместо 4 квадратов число «разбивается» на 1 квадрат.
Условное название: разбиение Д.
Программа отыскивает все возможные Разбиения Д.
Вычисления.
Рассчитано разбиение совокупности натуральных чисел от 1 до 1500.
Результат.
- Наибольшее число безРазбиения Д среди 1500 натуральных чисел– 0.
- Среди 1500 чисел наибольшее число разбиений – 1 для1444 .
- Вычислены средние числа разбиений:x1 и x2.
5 kvadrat
u1[ww]=--126------p=--1500------k=--166------w=--38------x1=--098,333------x2=--170,789
4 kvadrat
u1[ww]=--54------p=--1500------k=--48------w=--38------x1=--021,205------x2=--044,038
3 kvadrat
u1[ww]=--9------p=--1499------k=--0------w=--38------x1=--003,461------x2=--010,318
2 kvadrat
u1[ww]=--1------p=--1493------k=--0------w=--38------x1=--000,389------x2=--002,787
1 kvadrat
u1[ww]=--1------p=--1444------k=--0------w=--38------x1=--000,025------x2=--001,619
Скачать программу 1 kvadrat.
https://yadi.sk/d/scvFLwmD3YAome
???????????????????????????????????????????????
[color=maroon][size=20]Людям свойственно стремление познать новое.
Гении типа Эйлера делают это без особых усилий.
Остальные с трудом.
Но сейчас нашему мозгу может помочь компьютер.
Так, например, меня заинтересовала проблема разбиениячислана произведение четырёх чисел(квадраты).
Например, разбиение на 5 квадратов.
a = qwen+ asdm+zxcv+yuib+hjkg
Каждый квадрат отличается, хотя одним сомножителем.
Разработана программа Xkvadrat.
Заменяет ранее выставленные программы.
Задается последовательность чисел.
Минимальное uu, максимальное d.
Для каждого числа в этом диапазоне проверяется возможность разбиения на заданное число квадратов – ss.
Число ss задается в диапазоне от 1 до 10.[/size][/color]
[color=purple]Результаты расчётов:
Массивu1 : array [1.. d]
u1 : число разбиений на квадраты числа i.
Массивua : array [1.. 5, 0..1000]
ua[1,j]:число разбиений, ua[2,j]:суммаразбиений
Массивub : array [1..100, 1..30]
ub[i,1]………ub[i,k]: I – номер разбиения, k – число квадратов в разбиении
Величина элемента массива число в разбиении на квадраты.
hh – максимальное число разбиений на квадраты при заданном ss
zz –максимальное число с максимальным разбиением на квадраты.
x1и x2 – усредненные показатели[/color]
Скачать программу Xkvadrat (Delphi)
https://yadi.sk/d/cESXKcBCUh0ltw
Предполагается, что возможно повезёт,и из расчётов, выявятся какие либо закономерности.
Разбиение чисел на квадраты
КОМЕНТАРИИ К ПРОГРАММАМ
https://fguploniis.mybb.ru/viewtopic.php?id=788
/||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[size=20][color=maroon]В 1770 году Лагранж дал нам теорему.
В современной форме:
А.А. Бухштаб
Теория чисел
Теорема 303. (Лагранж) Каждое натуральное число представимо в виде суммы четырёх квадратов целых чисел.
[/color][/size]
[size=20][color=blue]Лагранж засчитывал и квадраты нуля.
[/color][/size]
[size=20][color=purple]Любопытно.
А что будет, если исключить квадраты нуля?
Условное название: разбиение А.
Разработана программа 4 kvadrat.
Программа отыскивает все возможные Разбиения А.
Вычисления.
Рассчитано разбиение совокупности целых чисел от 1 до 1500.
Результат.
1. Наибольшее число без Разбиения А – 128.
2. Среди 1500 чисел наибольшее число разбиений – 81 для 1470.
3. Вычислены средние числа разбиений: x1 и x2.[/color][/size]
[size=20][color=green]Скачать программу 4 kvadrat
https://yadi.sk/d/3mkh6ZYI3Xm7rQ[/color][/size]
//////////////////////
|}}}}}}}}}}}}}}}
[size=20][color=maroon]В развитие программы 4 kvadrat разработана программа 5 kvadrat.
Вместо 4 квадратов число разбивается на 5 квадратов.
Условное название: разбиение В.
Программа отыскивает все возможные Разбиения В.
Вычисления.
Рассчитано разбиение совокупности натуральных чисел от 1 до 1500.
Результат.
1. Наибольшее число без Разбиения В среди 1500 натуральных числе – 33.
2. Среди натуральных 1500 чисел наибольшее число разбиений – 332 для 1459 .
3. Вычислены средние числа разбиений: x1 и x2.
[/color][/size]
5 kvadrat
u1[ww]=--126------p=--1500------k=--166------w=--38------x1=--098,333------x2=--170,789
4 kvadrat
u1[ww]=--54------p=--1500------k=--48------w=--38------x1=--021,205------x2=--044,038
3 kvadrat
u1[ww]=--9------p=--1499------k=--0------w=--38------x1=--003,461------x2=--010,318
[size=20][color=green]Скачать программу 5 kvadrat.[/color][/size]
https://yadi.sk/d/Pw8-Q0bH3XpSnX
|||||||||||||||||||||||||||||||||||||||||||
|||||||||||||||||||||||||||||||||||||||||||||||
В развитие программы 4 kvadrat разработана программа 1 kvadrat.
Вместо 4 квадратов число «разбивается» на 1 квадрат.
Условное название: разбиение Д.
Программа отыскивает все возможные Разбиения Д.
Вычисления.
Рассчитано разбиение совокупности натуральных чисел от 1 до 1500.
Результат.
1. Наибольшее число без Разбиения Д среди 1500 натуральных чисел – 0.
2. Среди 1500 чисел наибольшее число разбиений – 1 для 1444 .
3. Вычислены средние числа разбиений: x1 и x2.
5 kvadrat
u1[ww]=--126------p=--1500------k=--166------w=--38------x1=--098,333------x2=--170,789
4 kvadrat
u1[ww]=--54------p=--1500------k=--48------w=--38------x1=--021,205------x2=--044,038
3 kvadrat
u1[ww]=--9------p=--1499------k=--0------w=--38------x1=--003,461------x2=--010,318
2 kvadrat
u1[ww]=--1------p=--1493------k=--0------w=--38------x1=--000,389------x2=--002,787
1 kvadrat
u1[ww]=--1------p=--1444------k=--0------w=--38------x1=--000,025------x2=--001,619
[size=20][color=green]Скачать программу 1 kvadrat.[/color][/size]
https://yadi.sk/i/lEGrhgbK3YAqi7
||||||||||||||||||||||||||||||||||||
|||||||||||||||||||||||||||||||||||||
В развитие программы 4 kvadrat разработана программа 1 kvadrat.
Вместо 4 квадратов число «разбивается» на 1 квадрат.
Условное название: разбиение Д.
Программа отыскивает все возможные Разбиения Д.
Вычисления.
Рассчитано разбиение совокупности натуральных чисел от 1 до 1500.
Результат.
- Наибольшее число без Разбиения Д среди 1500 натуральных чисел – 0.
- Среди 1500 чисел наибольшее число разбиений – 1 для 1444 .
- Вычислены средние числа разбиений: x1 и x2.
5 kvadrat
u1[ww]=--126------p=--1500------k=--166------w=--38------x1=--098,333------x2=--170,789
4 kvadrat
u1[ww]=--54------p=--1500------k=--48------w=--38------x1=--021,205------x2=--044,038
3 kvadrat
u1[ww]=--9------p=--1499------k=--0------w=--38------x1=--003,461------x2=--010,318
2 kvadrat
u1[ww]=--1------p=--1493------k=--0------w=--38------x1=--000,389------x2=--002,787
1 kvadrat
u1[ww]=--1------p=--1444------k=--0------w=--38------x1=--000,025------x2=--001,619
Скачать программу 1 kvadrat.
https://yadi.sk/d/scvFLwmD3YAome
???????????????????????????????????????????????
[color=maroon][size=20]Людям свойственно стремление познать новое.
Гении типа Эйлера делают это без особых усилий.
Остальные с трудом.
Но сейчас нашему мозгу может помочь компьютер.
Так, например, меня заинтересовала проблема разбиения числа на произведение четырёх чисел (квадраты).
Например, разбиение на 5 квадратов.
a = qwen+ asdm+zxcv+yuib+hjkg
Каждый квадрат отличается, хотя одним сомножителем.
Разработана программа Xkvadrat.
Заменяет ранее выставленные программы.
Задается последовательность чисел.
Минимальное uu, максимальное d.
Для каждого числа в этом диапазоне проверяется возможность разбиения на заданное число квадратов – ss.
Число ss задается в диапазоне от 1 до 10.[/size][/color]
[color=purple]Результаты расчётов:
Массив u1 : array [1.. d]
u1 : число разбиений на квадраты числа i.
Массив ua : array [1.. 5, 0..1000]
ua[1,j]: число разбиений, ua[2,j]: сумма разбиений
Массив ub : array [1..100, 1..30]
ub[i,1]………ub[i,k]: I – номер разбиения, k – число квадратов в разбиении
Величина элемента массива число в разбиении на квадраты.
hh – максимальное число разбиений на квадраты при заданном ss
zz – максимальное число с максимальным разбиением на квадраты.
x1 и x2 – усредненные показатели[/color]
Скачать программу Xkvadrat (Delphi)
https://yadi.sk/d/cESXKcBCUh0ltw
Предполагается, что возможно повезёт, и из расчётов, выявятся какие либо закономерности.
Разбиение числа на кубы
Комментарии к программам
https://fguploniis.mybb.ru/viewtopic.php?id=794
|||||||||||||||||||||||||||||||||||||||||||||
[size=20][color=maroon]Совокупность чисел напоминает звездное небо.
Что-то загадочное и непонятное.
Математики и астрономы создают из беспорядка удивительные теории.
Для любопытства создал программы для вычисления разбиения чисел на квадраты.
Это ветвь «Разбиения числа на квадраты».
Теперь очередь разбиения чисел на кубы.
От одного до семи.
Порядок вычислений тот же, что квадратов.
Результаты расчётов для разбиения на кубы 1-7.[/color][/size]
№ 1
u1[ww]=--1------p=--1331------k=--0------w=--11------x1=--000,007------x2=--001,198------kk=--11
№ 2
1[ww]=--1------p=--1458------k=--0------w=--11------x1=--000,038------x2=--000,907------kk=--5------rr=--11
№ 3
u1[ww]=--2------p=--1485------k=--0------w=--11------x1=--000,130------x2=--001,073------kk=--6------rr=--8vv=--9------tt=--0
№ 4
u1[ww]=--1------p=--1496------k=--0------w=--11------x1=--000,342------x2=--001,545------kk=--4------rr=--6rr=--6------vv=--610------tt=--10
№ 5
u1[ww]=--4------p=--1500------k=--2------w=--11------x1=--000,746------x2=--002,373
№ 6
u1[ww]=--5------p=--1500------k=--4------w=--11------x1=--001,416------x2=--003,637
№ 7
u1[ww]=--9------p=--1500------k=--2------w=--11------x1=--002,433------x2=--005,423
[size=20][color=green]Скачать
Программы [/color][/size]
kub 1 -kub 7
https://yadi.sk/d/b6b4yBwU3YKpVf
|||||||||||||||||||||||||||||||
|||||||||||||||||||||||||||||
[size=20][color=maroon]Людям свойственно стремление познать новое.
Гении типа Эйлера делают это без особых усилий.
Остальные с трудом.
Но сейчас нашему мозгу может помочь компьютер.
Так, например, меня заинтересовала проблема разбиениячислана произведение трёх чисел(кубы).
Например, разбиение на 5 кубов.
a = qwe+ asd+zxc+yui+hjk
Каждый куб отличается, хотя одним сомножителем.
Разработана программа Xcub.
Заменяет ранее выставленные программы.
Задается последовательность чисел.
Минимальное uu, максимальное d.
Для каждого числа в этом диапазоне проверяется возможность разбиения на заданное число кубов – ss.
Число ss задается в диапазоне от 1 до 10.[/color][/size]
[size=20][color=purple]Результаты расчётов:
Массивu1 : array [1.. d]
u1 : число разбиений на квадраты числа i.
Массивua : array [1.. 5, 0..1000]
ua[1,j]:число разбиений, ua[2,j]:суммаразбиений
Массивub : array [1..100, 1..30]
ub[i,1]………ub[i,k]: I – номер разбиения, k – число кубов в разбиении
Величина элемента массива число в разбиении на кубы.
hh – максимальное число разбиений на кубы при заданном ss
zz –максимальное число с максимальным разбиением на кубы.
x1и x2 – усредненные показатели
[/color][/size]
[size=20][color=green]Скачать программу Xcub[/color][/size]
https://yadi.sk/d/Chu4yjcqFZTJMQ
[size=20][color=blue]Предполагается, что возможно повезёт,и из расчётов, выявятся какие либо закономерности.
Например.[/color][/size]
ss = 10uu = 3
dhh
1000
2000
3001
4001
5001
10002
15004
20007
25009
300014
350016
400023
450027
500033
550041
600051
|||||||||||||||||||||||||||||||||||
|||||||||||||||||||||||||||||||||||||||||
Разбиение числа на числа в четвёртой степени
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[size=20][color=maroon]Продолжение программcubiи chvadrati.
Исследуется разбиение числа на числа в четвертой степени.
От одного до 7.
Числа для разбиения 1 и более.
Результаты счёта для разбиений1 -7.[/color][/size]
1
u1[ww]=--1------p=--1296------k=--0------w=--6------x1=--000,004------x2=--001,081------kk=--6
2
u1[ww]=--1------p=--1377------k=--0------w=--6------x1=--000,012------x2=--000,640------kk=--3------rr=--6
3
u1[ww]=--1------p=--1458------k=--0------w=--6------x1=--000,026------x2=--000,533------kk=--3------rr=--3vv=--6------tt=--0
4
u1[ww]=--1------p=--1474------k=--0------w=--6------x1=--000,047------x2=--000,514------kk=--2------rr=--3rr=--3------vv=--36------tt=--6
5
u1[ww]=--1------p=--1493------k=--0------w=--6------x1=--000,075------x2=--000,535
6
u1[ww]=--1------p=--1494------k=--0------w=--6------x1=--000,107------x2=--000,577
7
u1[ww]=--1------p=--1495------k=--0------w=--6------x1=--000,145------x2=--000,633
[size=20][color=green]Скачать программы [/color][/size]
https://yadi.sk/d/i5mx9Gsn3YvFxa
|||||||||||||||||||
||||||||||||||||||||||||||||||||||||||
Случайные перестановки
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[size=20][color=blue]В задачах моделирования иногда требуется сгенерировать
случайную перестановку из d объектов.
Как понимать случайную?
Каким-то образом сгенерированы
все возможные перестановки.
Их d!
Пронумеруем, и случайным образом выбирается одна перестановка.
Проще так.
Случайно выбирается первый объект.
Из оставшегося множества второй объект и т.д.
Эти два способа интуитивно равнозначны.
По второму способу разработана маленькая программа:
+perectroika.
Вход: d – число объектов.
Объекты пронумерованы.
В строке 2 таблицы случайная перестановка.
Остальные данные вывода для понимания алгоритма.
Скачать программу[/color][/size]
https://yadi.sk/d/Z-7tdH2G3GZUtu
|||||||||||||||||||||||||||||||||||||||||||||||||
||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[color=purple][size=30]Программа
«Построение случайного графа»[/size]
[/color]
[size=20][color=maroon]1.Общее[/color][/size]
Теория графов:это набор алгоритмов для вычисления разных характеристик графов.
Чтобы оценить алгоритмы, надо провести проверочные расчёты.
Для получения полезной информации расчёты следует проводить над однотипными графами.
Таким объектом могут быть случайные графы.
То есть графы параметры, которых имеют вероятностный вид.
Конкретно.
Есть граф G с n вершинами.
Случайным образом вводятся ребра (дуги).
Принято, что ребро соответствует двум противоположно направленным дугам.
По определенному порядку вводятся дуги.
Важнейшей характеристикой графа являютсястепени вершин.
Степень вершины это число ребёр, инцидентных вершине или число дуг исходящих (входящих) дуг.
Распределение степеней вершин зависит от алгоритма построения случайного графа.
Граф G – связный.
То есть между каждыми двумя вершинами есть путь из рёбер или однонаправленных дуг.
[size=20][color=maroon]2.Алгоритм – основной цикл[/color][/size]
Алгоритм построения случайного графа сходен с алгоритмом случайного дерева.
Исходное состояние: nподграфов.
По одной вершине в подграфе.
Далее случайным образом выбираются подграфыbи d.
К подграфуb присоединяются вершины подграфа d.
Между вершинами подграфов случайным образом вводятся по паре противоположно направленных дуг.
Обязательно между вершиной подграфаb и вершиной подграфаd не входившей в подграф b.
Так заполняется матрица смежности.
Между каждой парой вершин только одна пара противоположно направленных дуг.
Расчёты заканчиваются, если в подграфе n вершин.
[size=20][color=maroon]3.Алгоритм – суперцикл[/color][/size]
Для получения усредненных величин введен суперцикл.
На каждой итерации основного цикла выполняется основной цикл.
[size=20][color=maroon]4.Исходные[/color][/size]
n- число вершин графа
tt- допустимое число итераций основного цикла
x – число итераций суперцикла
CC -
[size=20][color=maroon]5.Вывод[/color][/size]
K – счетчик основного цикла
u:array [1..n, 1 ..n] - подграфы
p : array [1..n,1..n]- матрица смежности
uu :array [1..5*n] – величина k при формировании подграфа[color=green][/color]
r :array [1..n]- - суммарные степени вершин
s1:array [1..100, 1..2]- последовательность пар подграфов b и d
hh :array [1..x]- матрица вспомогательная
r1 : array [1..n]- усредненные степени вершин
ff: array [1..n]- матрица вспомогательная
r2 : array [1..n]- матрица вспомогательная
r3 : array [1..n] -матрица вспомогательная
Вспомогательные матрицы намечено использовать для изучения распределения степеней вершин
[size=20][color=maroon]6.Программа A Graf[/color][/size]
Программа на Дельфи 7
[size=20]Скачать[/size]
«Моделирование отбора длялокусов в разных хромосомах»
Комментарии к программам
https://fguploniis.mybb.ru/viewtopic.php?id=486
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[size=20]Программа:
«Моделирование отбора длялокусов в разных хромосомах»[/size]
[size=20]Вступление[/size]
Приводится описание программы моделирования одного гипотетического
варианта естественного отбора: Мутации в двух хромосомах.
[size=20]1. Естественный отбор [/size]
По Дарвину особи с полезными признаками, дают больше потомства.
Чаще, но не всегда,достигается или повышением плодовитости при сохранении времени жизни, или увеличением времени жизни при сохранении прежней плодовитости, или действуют оба фактора одновременно.
По Дарвину это и есть положительный отбор. Имеются в виду признаки, полученные при мутациях и передающиеся по наследству. Понятие альтруизма здесь не рассматривается. Наследование генов альтруизма рассмотрено в ветви: АЛЬТРУИЗМ. Генетика конкретизировала основу понятия «признак» - гены. Основные определения по генетике в приложениях 1 - 6. Каждый признак определяется определенным геном или комбинацией генов. Гены поразличным причинам мутируют. Мутация определенного гена порождает аллели этого гена.
А, следовательно, и новые признаки организма. Естественный отбор может происходить по разным вариантам.
Вариант 1. Гены мутируют. Последствия мутаций в одном гене могут быть: положительные, отрицательные и нейтральные. Положительные мутации в процессе сохраняютсявсё большего числа особей. Отрицательные мутации «вымываются».
Вариант 2. При совпадении нескольких определенных нейтральных мутаций в разных хромосомах организм приобретает новые признаки, способствующие увеличению численности таких организмов. Для исследования такого варианта отбора разработана программа «Моделирование естественного отбора длялокусов в разных хромосомах».
[size=20]2. Цель программы[/size]
В программе «Моделирование естественного отбора длялокусов в разных хромосомах» изучается ситуация. Некие существа размножаются половым путем. Для определенности: «мужчины» и «женщины». Название условное. Могут быть и кузнечики. От перемены местами мужчин и женщин задача не меняется. Сделано гипотетическое допущение. Особь, у которой в определенных хромосомах в заданных локусах расположенызаданные гены из списка аллель генов,получает преимущество перед другими особями: меньше вероятность смерти. Такие особи получают условное название: особи с геномом плюс(+). Моделируется половой процесс с обменом хромосом между родителями при зачатии. Выясняется, сколько должно произойти рождений и смертей, для преобладания в сообществе особей с геномом плюс.
Две хромосомы 1 и 2, одинаковы для мужчин и женщин.
Гены в хромосоме 1: x1 и x2.
Гены в хромосоме 2: y1 и y2.
Аллели генов x1 и x2: 1,2…,.c
Аллели генов y1 и y2: 1,2…,.c
Гены в хромосомах 1 и 2 различны.
В конкретной программе особыс аллелеями:
x1 = 1
x2 = 1
y1 = 2
y2 = 2
Названы особями с геномом +.
Они имеют меньшую вероятность смерти.
То есть могут за «жизнь» произвести больше потомства.
В исходном состоянии задается некоторое множество мужчин и женщин.
Мужчин p3, женщинp4.
Для первой позиции (особи) в соответствующем массиве задается геном +.
Для остальных геном случайно.
Далее имитируется процесс размножения.
До достижения количества мужчин и женщин соответственно: p1 и p2.
В примере программы
p1 = p2
p3 = p4
[size=20]3. Формат программы.[/size]
Программа составлена на DELPHI 7. Ввод исходных данных непосредственно в тексте программы. Для работы с программой необходимо установить DELPHI 7.
[size=20][color=red]Скачать
Дельфи 7[/color][/size]
https://yadi.sk/d/W3zk0vU2fJdZe
[size=20][color=red]Скачать программу A-2chr[/color][/size]
https://yadi.sk/d/42DrSMFQfcv8x
[size=20]3. Биологическая интерпретация[/size]
Программа имеет следующую биологическую интерпретацию.
На необитаемом острове появилась популяция из p3 – «мужчин» и p4 – «женщин».
Один мужчина и одна женщина имеют геном +.
Данный геном уменьшает вероятность смерти.
Популяция может из-за ограниченных ресурсов увеличить численность только до p1 – «мужчин» и p2 – «женщин».
Другой вариант вымереть.
В определенное время года происходит вымирание, в другой сезон размножение.
Задано ограничение на число лет существования популяции - kk
Определяется: какая доля особей через kk лет с геномом плюс среди живущих мужчин и женщин и среди потенциально возможного числа мужчин и женщин.
[size=20]4. Алгоритм[/size]
Алгоритм состоит из следующих блоков.
БЛОК ОКАНТОВКИ ТАБЛИЦ
БЛОК СУПЕРЦИКЛА
БЛОК СМЕРТЬ +РОЖДЕНИЕ
БЛОК СМЕРТЬ
БЛОК РОЖДЕНИЕ
БЛОК ВЫВОДА
[size=20]4.1. БЛОК ОКАНТОВКИ ТАБЛИЦ[/size]
Проставка номеров строк и столбцов
[size=20]4.2. БЛОК СУПЕРЦИКЛА[/size]
В ходе суперцикла повторяется:
БЛОК СМЕРТЬ+РОЖДЕНИЕ
.
Смысл суперцикла.
Данные по выполнению БЛОК СМЕРТЬ+РОЖДЕНИЕ
имеют большой вероятностный разброс.
Поэтому следует использовать усредненные данные по ходу выполнения суперцикла.
[size=20]4.3. БЛОК СМЕРТЬ+РОЖДЕНИЕ[/size]
Поочередно выполняются:
БЛОК СМЕРТЬ
БЛОК РОЖДЕНИЯ
Ограничениями служат:
Максимальное число мужчин – константа p1;
Максимальное число женщин – константа p2;
Заданное число итераций – константаkk.
Используется цикл while
[size=20]4.4. БЛОК СМЕРТИ[/size]
В ходе выполнения этого блока поочередно сканируются массивы мужчин и женщин.
С заданной вероятности имитируется смерть, то есть обнуление просканированных позиций массивов.
Для особей с геномом + устанавливается меньшая вероятность смерти.
Число проведения итераций БЛОК СМЕРТИ задается.
Константа t.
[size=20]4.4. БЛОК РОЖДЕНИЯ[/size]
В ходе выполнения БЛОК РОЖДЕНИЯ вначале определяется число рождений.
Если число мужчин превышает число женщин, число рождений задается долей от числа мужчин.
В противном случае число рождений- доля от числа женщин.
Рождение мужчины или женщины случайно.
Далее случайным образом выбирается пара мужчина – женщина.
Далее имитируется рождение новой особи.
Генотип определяется в соответствии с законом Менделя.
[size=20]4.5. Исходные данные[/size]
Исходные данные (const) вводятся непосредственно в тексте программы.
[size=20]5. Массивы и переменные[/size]
Основныемассивы. Массив исходных мужчин u1[1..k,1..p3,1..2], где: k – число пар гомологичных хромосом, комбинации которых исследуются. p3 – число мужчин на старте программы. Позиции 1 и 2 соответствуют аллелям гена в гомологичных хромосомах.
Все аллели гена для заданного локуса пронумерованы
от 1 до с.
Принято: число аллель генов для всех локусов одинаково. Константа c задается в исходных данных.
Задается также массив u2[1..k,1..p4,1..2].
Где p4 число женщин.
Также задаются числа, определяющие вероятность смерти, вероятность рождения мужчины или женщины, вероятность для выбора варианта комбинации генов мужчины и женщины у потомка.
В тексте программы задаются особи с геномом плюс.
В данном варианте программы по одной особи на позиции № 1.
В ходе выполнения программы преобразуются массивы
ua[1..k,1..p3,1..2] и ub[1..k,1..p3,1..2], соответственно мужчины и женщины.
[size=20]6. БЛОК ВЫВОДА
[/size]
[size=20]6.1 Общее[/size]
Выводятся данные следующего вида:
А) Усредненные данные по всем итерациям суперцикла.
Б) Данные по первым 20 итерациям суперцикла
В) Данные по заданной итерации № ss суперцикла.
[size=20]6.1. Данные по совокупности суперцикла[/size]
Дано в разделе 7.
[size=20]6.2. Данные по 20 итерациям суперцикла:[/size]
Вывод массивы v[1..20], m[1..20] и d[1..20] соответственно для каждой итерации итог: число мужчин с геномом плюс, число мужчин и число незаполненных ячеек в массиве ua[1..20], то есть число потенциально возможных мужчин.
[size=20]6.3. Данные по заданной итерации суперцикла[/size]
Смотреть по тексту программы
[size=20]7. Результаты счета.[/size]
Предусмотрен вывод:
a: integer; // сумма мужчин за суперцикл
l: integer; // сумма отсутствия мужчин за суперцикл
v: integer; // сумма мужчин с геномом плюс за суперцикл
b: currency; // среднее число мужчин за суперцикл
l1: currency; //среднее число отсутствия мужчин за суперцикл
w: currency; среднее число мужчин с геномом плюс за суперцикл
g: currency; //за супер цикл. Отношение числа мужчин с геномом плюс к общему числу мужчин
g1: currency; // за супер цикл. Отношение числа мужчин с геномом плюс к потенциальномучислу мужчин
aa: integer; // сумма женщин за суперцикл
y1: integer; // сумма отсутствия сумма отсутствия женщин за суперциклза суперцикл
vv: integer; // сумма женщин с геномом плюс за суперцикл
bb: currency; // среднее число женщин за суперцикл
yy: currency; // среднее число отсутствия женщин за суперцикл
ww: currency; // среднее число женщин с геномом плюс за суперцикл
gg: currency; //за супер цикл. Отношение числа женщин с геномом плюс к общему числу женщин
gg1: currency; // за супер цикл. Отношение числа женщин с геномом плюс к потенциальномучислу женщин
gg2: integer; //число циклов суперцикла без вымирания для мужчин
gg3: integer; //число циклов суперцикла без вымирания для мужчин
r1: currency; //за суперцикл. Число циклов без вымирания для мужчин к общему числу циклов
r2: currency; //за суперцикл. Число циклов без вымирания для женщин к общему числу циклов
Имеются три варианта счета:
А) Вымирание: обнуление массивов ua[1..k,1..p1,1..2]и ub[1..k,1..p2,1..2] .
Б) Число элементов массивов ua[1..k,1..p1,1..2]и ub[1..k,1..p2,1..2] с геномом плюс в ходе расчётов существенно не изменились.
В) Число элементов массивов ua[1..k,1..p1,1..2]и ub[1..k,1..p2,1..2] с геномом плюс в ходе расчётов существенно увеличилось.
Интересен вариант В.
Иллюстрация эволюции.
Пример.
Исходные данные:
t = 1;// Число циклов смертей
kk = 1;// допустимое число циклов в основном цикле
p1 =2000;// Число мужчин- конечное(не более)
p2 = 2000; // Число женщин- конечное(не более)
p3 = переменная;//начальное число мужчин
p4 =переменная;//начальное число женщин
принято
p3 =p4
ff=5; // 1критерий для определения вероятностейсмерти
o3 = 2 ;//числодля расчёта рождений за цикл размножения (рождений) // наo3 делится числомужчин (женщин в текущий момент расчета)
fff = 20; // длярасчёта случайной величиныпри определении вероятности// смерти мужчин и женщин вне генома плюс
rr = 40 ; // для расчёта случайной величиныпри определении вероятности// смерти мужчин и женщин c геномом плюс
k = 2; // число независимо наследуемых генов
// размещены в неголомогичных хромосомах
c = 5; //число независимо наследуемых генов в расчете
sss =100; // число суперциклов
Ниже вывод для
p3 =p4: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30
b: currency; // среднее число мужчин за суперцикл
w: currency; среднее число мужчин с геномом плюс за суперцикл
g: currency; //за супер цикл. Отношение числа мужчин с геномом плюс к общему числу мужчин
g1: currency; // за супер цикл. Отношение числа мужчин с геномом плюс к потенциальномучислу мужчин
r1: currency; //за суперцикл. Число циклов без вымирания для мужчин к общему числу циклов
Результаты счёта
p3= p41bwgg1r1
1---891,26---891,26---1---0,4456---0,77
2---752,65---714,11---0,9487---0,3571---0,725
3---537,235---532,585---0,9913---0,2663---0,68
4---372,075---366,135---0,984---0,1831---0,645
5---265,49---261,89---0,9864---0,1309---0,6
6---220,29---219,275---0,9954---0,1096---0,53
7---173,2---172,055---0,9984---0,086---0,5
8---260,415---259,295---0,9957---0,1296---0,525
9---200,31---199,03---0,9936---0,0995---0,55
10---194,4---192,9---0,9923---0,0964---0,585
15---142,38---140,67---0,988---0,0703---0,6
20---99,335---97,59---0,9824---0,0488---0,58
25---111,91---109,55---0,9789---0,0548---0,56
30---142,3---139,8---0,9825---0,0699---0,58
35---88,395---86,355---0,5769---0,0432---0,59
40---93,26---90,495---0,9704---0,0452---0,58
50---95,885---92,33---0,929---0,0462---0,67
60---48,495---44,28---0,9131---0,221---0,695
70---86,67---80,21---0,9255---0,0401---0,759
80---80,27---71,505---0,8908---0,0358---0,79
90---34,945---24,325---0,691---0,0122---0,835
100---51,1---33,48---0,6552---0,0167---0,89
150---47,545---11,28---0,2372---0,0056---0,97
200---72,07---11,405---0,1582---0,0057---1
250---110,35---11,99---0,1087---0,006---1
300---144,59---10,45---0,0723---0,0052---1
[color=green]|||||||||||||||||||||||||||||||||||||||||||||||||[/color]
[size=20]Приложение 1[/size]
Основные принципы
Организм состоит из клеток. В клетках ядра. В ядрах хромосомы. Наборы хромосом почти во всех клетках одинаковы. Исключения половые клеткии красные кровяные тельца. Общее название совокупности хромосом – генотип организма. Каждая хромосома последовательность генов. Каждый ген кодирует определенную функцию организма. Например, синтез белка. Местоположения генов в хромосоме называется локусами. Вариантывариантов генов длякакого-либо локуса хромосомы носит название – аллеля. В диплоидном организме хромосомы образуют гомологичные пары. В хромосомах - гомологах местоположение локусов совпадают.
Каждая из хромосом гомологичной пары в каждом локусе имеет определенную аллелю гена. Аллели могут совпадать, а могут и отличаться. Исключение половые хромосомы.
Ниже они не рассматриваются. В одинаковых локусах хромосом - гомологов содержатся гены из списка аллель генов для данного локуса. Набор хромосом определяет построение и функции организма. Используется термин – фенотип. Фенотип определяется всеми хромосомами. В результате сложного процесса размноженияу потомка каждая пара хромосом гомологов состоит из одной хромосомы отца и из одной хромосомы матери. Множество пар хромосом сохраняется. Выбор одной из двух гомологичных хромосом родителей для потомка происходит случайным образом с вероятностью 0,5.
[color=green]||||||||||||||||||||||||||||||||||||||||||[/color]
[size=20]Приложение 2. [/size]
Законы комбинации аллелей при размножении в http://tigrasp.narod.ru/s-g3.html
[color=green]||||||||||||||||||||||||||||||||||[/color]
[size=20]Приложение 3[/size]
http://ru.wikipedia.org/wiki/Локус в биологии означает фиксированное положение (локализацию) на хромосоме, например, положение гена. Вариант последовательности ДНК в данном локусе называется аллелью. Упорядоченный перечень локусов для какого-либо генома называется генетической картой. Генное картирование — это определение локусa для специфического биологического признака.
Диплоидные или полиплоидные клетки, которые несут одинаковые аллели на каком-либо локусе называются гомозиготными по этому локусу, а те, которые несут различные аллели — гетерозиготными.
[color=green]||||||||||||||||||||||||||||||||||||||||||||||||||[/color]
[size=20]Приложение 4[/size]
Изучением генов занимается наука генетика, родоначальником которой считается Грегор Мендель, который в 1865 году опубликовал результаты своих исследований о передаче по наследству признаков при скрещивании гороха. Сформулированные им закономерности впоследствии назвали Законами Менделя.….В настоящее время, в молекулярной биологии установлено, что гены — это участки ДНК, несущие какую-либо целостную информацию — о строении одной молекулы белка или одной молекулы РНК. Эти и другие функциональные молекулы определяют развитие, рост и функционирование организма.
[color=green]||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||[/color]
[size=20]Приложение 5[/size]
http://dic.academic.ru/dic.nsf/enc_medicine/33962/Хромосомы
Хромосомы
(греч. chrōma цвет, окраска + sōma тело) основные структурно-функциональные элементы клеточного ядра, содержащие гены. Название «хромосомы» обусловлено их способностью интенсивно окрашиваться основными красителями во время деления клетки. Каждый биологический вид характеризуется постоянством числа, размеров и других морфологических признаков X. Хромосомный набор половых и соматических клеток различен. В соматических клетках содержится двойной (диплоидный) набор Х. который можно разделить на пары гомологичных (идентичных) хромосом, сходных по величине и морфологии. Один из гомологов всегда отцовского, другой— материнского происхождения. В половых клетках (гаметах) эукариот (многоклеточных организмов, в т.ч. человека) все хромосомы набора представлены в единственном числе (гаплоидный хромосомный набор). В оплодотворенной яйцеклетке (зиготе) гаплоидные наборы мужских и женских гамет объединяются в одном ядре, восстанавливая двойной набор хромосом. У человека диплоидный хромосомный набор (кариотип) представлен 22 парами хромосом (аутосом) и одной парой половых хромосом (гоносом). Половые хромосомы различаются не только по составу содержащихся в них генов, но и по своей морфологии. Развитие из зиготы женской особи определяет пара половых хромосом, состоящая из двух Х-хромосом, то есть ХХ-пара, а мужской — пара, состоящая из X-хромосомы и У-хромосомы, — то есть ХУ-пара.
[color=green]||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||[/color]
[size=20]Приложение 6[/size]
http://dic.academic.ru/dic.nsf/enc_psyc … оминантные
Доминантные и рецессивные гены (genetic dominance and recessiveness)
По иронии судьбы, о наследственности животных нам известно гораздо больше, чем о наследственности чел. Наследственность является результатом комбинаций генов. Гены — это биохимические функциональные элементы хромосом, определяющие потенциальный пол и др. признаки у зародыша. Хромосомы представлены парами в ядре каждого сперматозоида и каждой яйцеклетки. У чел. имеется 23 пары, или 46 хромосом, причем одну пару называют половыми хромосомами, потому что они определяют пол будущего организма. Клетки женского организма несут две Х-хромосомы, тогда как клетки мужского содержат одну Х- и одну Y-хромосому. Y-хромосома мельче по размеру и содержит меньше генов на своей поверхности, чем Х-хромосома.
В результате клеточного деления в яичниках все яйцеклетки содержат одну Х-хромосому, тогда как клеточное деление в яичках приводит к тому, что половина сперматозоидов содержит Х-хромосому, а др. их половина — Y-хромосому. Т. о., в половине случаев челов. яйцеклетка оплодотворяется сперматозоидами, несущими Х-хромосому, и еще в половине — сперматозоидами, несущими Y-хромосому, так что половина рождающихся в популяции детей должна бы иметь мужской пол, а половина — женский. (Мальчиков все же рождается чуть больше, но среди них и смертность выше, а потому соотношение полов быстро уравнивается; по мере того как дети становятся старше, соотношение полов сдвигается в сторону преобладания представительниц женского пола вследствие большей устойчивости женского организма к болезням.) ………………..X. К. Финк
«Моделирование отбора для локусов в разных хромосомах»
Комментарии к программам
https://fguploniis.mybb.ru/viewtopic.php?id=486
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[size=20]Программа:
«Моделирование отбора для локусов в разных хромосомах»[/size]
[size=20]Вступление[/size]
Приводится описание программы моделирования одного гипотетического
варианта естественного отбора: Мутации в двух хромосомах.
[size=20]1. Естественный отбор [/size]
По Дарвину особи с полезными признаками, дают больше потомства.
Чаще, но не всегда, достигается или повышением плодовитости при сохранении времени жизни, или увеличением времени жизни при сохранении прежней плодовитости, или действуют оба фактора одновременно.
По Дарвину это и есть положительный отбор. Имеются в виду признаки, полученные при мутациях и передающиеся по наследству. Понятие альтруизма здесь не рассматривается. Наследование генов альтруизма рассмотрено в ветви: АЛЬТРУИЗМ. Генетика конкретизировала основу понятия «признак» - гены. Основные определения по генетике в приложениях 1 - 6. Каждый признак определяется определенным геном или комбинацией генов. Гены по различным причинам мутируют. Мутация определенного гена порождает аллели этого гена.
А, следовательно, и новые признаки организма. Естественный отбор может происходить по разным вариантам.
Вариант 1. Гены мутируют. Последствия мутаций в одном гене могут быть: положительные, отрицательные и нейтральные. Положительные мутации в процессе сохраняются всё большего числа особей. Отрицательные мутации «вымываются».
Вариант 2. При совпадении нескольких определенных нейтральных мутаций в разных хромосомах организм приобретает новые признаки, способствующие увеличению численности таких организмов. Для исследования такого варианта отбора разработана программа «Моделирование естественного отбора для локусов в разных хромосомах».
[size=20]2. Цель программы[/size]
В программе «Моделирование естественного отбора для локусов в разных хромосомах» изучается ситуация. Некие существа размножаются половым путем. Для определенности: «мужчины» и «женщины». Название условное. Могут быть и кузнечики. От перемены местами мужчин и женщин задача не меняется. Сделано гипотетическое допущение. Особь, у которой в определенных хромосомах в заданных локусах расположены заданные гены из списка аллель генов, получает преимущество перед другими особями: меньше вероятность смерти. Такие особи получают условное название: особи с геномом плюс(+). Моделируется половой процесс с обменом хромосом между родителями при зачатии. Выясняется, сколько должно произойти рождений и смертей, для преобладания в сообществе особей с геномом плюс.
Две хромосомы 1 и 2, одинаковы для мужчин и женщин.
Гены в хромосоме 1: x1 и x2.
Гены в хромосоме 2: y1 и y2.
Аллели генов x1 и x2: 1,2…,.c
Аллели генов y1 и y2: 1,2…,.c
Гены в хромосомах 1 и 2 различны.
В конкретной программе особы с аллелеями:
x1 = 1
x2 = 1
y1 = 2
y2 = 2
Названы особями с геномом +.
Они имеют меньшую вероятность смерти.
То есть могут за «жизнь» произвести больше потомства.
В исходном состоянии задается некоторое множество мужчин и женщин.
Мужчин p3, женщин p4.
Для первой позиции (особи) в соответствующем массиве задается геном +.
Для остальных геном случайно.
Далее имитируется процесс размножения.
До достижения количества мужчин и женщин соответственно: p1 и p2.
В примере программы
p1 = p2
p3 = p4
[size=20]3. Формат программы.[/size]
Программа составлена на DELPHI 7. Ввод исходных данных непосредственно в тексте программы. Для работы с программой необходимо установить DELPHI 7.
[size=20][color=red]Скачать
Дельфи 7[/color][/size]
https://yadi.sk/d/W3zk0vU2fJdZe
[size=20][color=red]Скачать программу A-2chr[/color][/size]
https://yadi.sk/d/42DrSMFQfcv8x
[size=20]3. Биологическая интерпретация[/size]
Программа имеет следующую биологическую интерпретацию.
На необитаемом острове появилась популяция из p3 – «мужчин» и p4 – «женщин».
Один мужчина и одна женщина имеют геном +.
Данный геном уменьшает вероятность смерти.
Популяция может из-за ограниченных ресурсов увеличить численность только до p1 – «мужчин» и p2 – «женщин».
Другой вариант вымереть.
В определенное время года происходит вымирание, в другой сезон размножение.
Задано ограничение на число лет существования популяции - kk
Определяется: какая доля особей через kk лет с геномом плюс среди живущих мужчин и женщин и среди потенциально возможного числа мужчин и женщин.
[size=20]4. Алгоритм[/size]
Алгоритм состоит из следующих блоков.
БЛОК ОКАНТОВКИ ТАБЛИЦ
БЛОК СУПЕРЦИКЛА
БЛОК СМЕРТЬ +РОЖДЕНИЕ
БЛОК СМЕРТЬ
БЛОК РОЖДЕНИЕ
БЛОК ВЫВОДА
[size=20]4.1. БЛОК ОКАНТОВКИ ТАБЛИЦ[/size]
Проставка номеров строк и столбцов
[size=20]4.2. БЛОК СУПЕРЦИКЛА[/size]
В ходе суперцикла повторяется:
БЛОК СМЕРТЬ+РОЖДЕНИЕ
.
Смысл суперцикла.
Данные по выполнению БЛОК СМЕРТЬ+РОЖДЕНИЕ
имеют большой вероятностный разброс.
Поэтому следует использовать усредненные данные по ходу выполнения суперцикла.
[size=20]4.3. БЛОК СМЕРТЬ+РОЖДЕНИЕ[/size]
Поочередно выполняются:
БЛОК СМЕРТЬ
БЛОК РОЖДЕНИЯ
Ограничениями служат:
Максимальное число мужчин – константа p1;
Максимальное число женщин – константа p2;
Заданное число итераций – константа kk.
Используется цикл while
[size=20]4.4. БЛОК СМЕРТИ[/size]
В ходе выполнения этого блока поочередно сканируются массивы мужчин и женщин.
С заданной вероятности имитируется смерть, то есть обнуление просканированных позиций массивов.
Для особей с геномом + устанавливается меньшая вероятность смерти.
Число проведения итераций БЛОК СМЕРТИ задается.
Константа t.
[size=20]4.4. БЛОК РОЖДЕНИЯ[/size]
В ходе выполнения БЛОК РОЖДЕНИЯ вначале определяется число рождений.
Если число мужчин превышает число женщин, число рождений задается долей от числа мужчин.
В противном случае число рождений - доля от числа женщин.
Рождение мужчины или женщины случайно.
Далее случайным образом выбирается пара мужчина – женщина.
Далее имитируется рождение новой особи.
Генотип определяется в соответствии с законом Менделя.
[size=20]4.5. Исходные данные[/size]
Исходные данные (const) вводятся непосредственно в тексте программы.
[size=20]5. Массивы и переменные[/size]
Основные массивы. Массив исходных мужчин u1[1..k,1..p3,1..2], где: k – число пар гомологичных хромосом, комбинации которых исследуются. p3 – число мужчин на старте программы. Позиции 1 и 2 соответствуют аллелям гена в гомологичных хромосомах.
Все аллели гена для заданного локуса пронумерованы
от 1 до с.
Принято: число аллель генов для всех локусов одинаково. Константа c задается в исходных данных.
Задается также массив u2[1..k,1..p4,1..2].
Где p4 число женщин.
Также задаются числа, определяющие вероятность смерти, вероятность рождения мужчины или женщины, вероятность для выбора варианта комбинации генов мужчины и женщины у потомка.
В тексте программы задаются особи с геномом плюс.
В данном варианте программы по одной особи на позиции № 1.
В ходе выполнения программы преобразуются массивы
ua[1..k,1..p3,1..2] и ub[1..k,1..p3,1..2], соответственно мужчины и женщины.
[size=20]6. БЛОК ВЫВОДА
[/size]
[size=20]6.1 Общее[/size]
Выводятся данные следующего вида:
А) Усредненные данные по всем итерациям суперцикла.
Б) Данные по первым 20 итерациям суперцикла
В) Данные по заданной итерации № ss суперцикла.
[size=20]6.1. Данные по совокупности суперцикла[/size]
Дано в разделе 7.
[size=20]6.2. Данные по 20 итерациям суперцикла:[/size]
Вывод массивы v[1..20], m[1..20] и d[1..20] соответственно для каждой итерации итог: число мужчин с геномом плюс, число мужчин и число незаполненных ячеек в массиве ua[1..20], то есть число потенциально возможных мужчин.
[size=20]6.3. Данные по заданной итерации суперцикла[/size]
Смотреть по тексту программы
[size=20]7. Результаты счета.[/size]
Предусмотрен вывод:
a : integer; // сумма мужчин за суперцикл
l : integer; // сумма отсутствия мужчин за суперцикл
v : integer; // сумма мужчин с геномом плюс за суперцикл
b : currency; // среднее число мужчин за суперцикл
l1 : currency; // среднее число отсутствия мужчин за суперцикл
w : currency; среднее число мужчин с геномом плюс за суперцикл
g : currency; // за супер цикл. Отношение числа мужчин с геномом плюс к общему числу мужчин
g1 : currency; // за супер цикл. Отношение числа мужчин с геномом плюс к потенциальному числу мужчин
aa : integer; // сумма женщин за суперцикл
y1 : integer; // сумма отсутствия сумма отсутствия женщин за суперцикл за суперцикл
vv : integer; // сумма женщин с геномом плюс за суперцикл
bb : currency; // среднее число женщин за суперцикл
yy : currency; // среднее число отсутствия женщин за суперцикл
ww : currency; // среднее число женщин с геномом плюс за суперцикл
gg : currency; // за супер цикл. Отношение числа женщин с геномом плюс к общему числу женщин
gg1 : currency; // за супер цикл. Отношение числа женщин с геномом плюс к потенциальному числу женщин
gg2 : integer; // число циклов суперцикла без вымирания для мужчин
gg3 : integer; // число циклов суперцикла без вымирания для мужчин
r1 : currency; // за суперцикл. Число циклов без вымирания для мужчин к общему числу циклов
r2 : currency; // за суперцикл. Число циклов без вымирания для женщин к общему числу циклов
Имеются три варианта счета:
А) Вымирание: обнуление массивов ua[1..k,1..p1,1..2] и ub[1..k,1..p2,1..2] .
Б) Число элементов массивов ua[1..k,1..p1,1..2] и ub[1..k,1..p2,1..2] с геномом плюс в ходе расчётов существенно не изменились.
В) Число элементов массивов ua[1..k,1..p1,1..2] и ub[1..k,1..p2,1..2] с геномом плюс в ходе расчётов существенно увеличилось.
Интересен вариант В.
Иллюстрация эволюции.
Пример.
Исходные данные:
t = 1;// Число циклов смертей
kk = 1;// допустимое число циклов в основном цикле
p1 =2000;// Число мужчин - конечное (не более)
p2 = 2000; // Число женщин - конечное (не более)
p3 = переменная; // начальное число мужчин
p4 =переменная; // начальное число женщин
принято
p3 = p4
ff =5; // 1 критерий для определения вероятностей смерти
o3 = 2 ;// число для расчёта рождений за цикл размножения (рождений) // на o3 делится число мужчин (женщин в текущий момент расчета)
fff = 20; // для расчёта случайной величины при определении вероятности// смерти мужчин и женщин вне генома плюс
rr = 40 ; // для расчёта случайной величины при определении вероятности// смерти мужчин и женщин c геномом плюс
k = 2; // число независимо наследуемых генов
// размещены в неголомогичных хромосомах
c = 5; // число независимо наследуемых генов в расчете
sss =100 ; // число суперциклов
Ниже вывод для
p3 = p4: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30
b : currency; // среднее число мужчин за суперцикл
w : currency; среднее число мужчин с геномом плюс за суперцикл
g : currency; // за супер цикл. Отношение числа мужчин с геномом плюс к общему числу мужчин
g1 : currency; // за супер цикл. Отношение числа мужчин с геномом плюс к потенциальному числу мужчин
r1 : currency; // за суперцикл. Число циклов без вымирания для мужчин к общему числу циклов
Результаты счёта
p3= p4 1 b w g g1 r1
1---891,26---891,26---1---0,4456---0,77
2---752,65---714,11---0,9487---0,3571---0,725
3---537,235---532,585---0,9913---0,2663---0,68
4---372,075---366,135---0,984---0,1831---0,645
5---265,49---261,89---0,9864---0,1309---0,6
6---220,29---219,275---0,9954---0,1096---0,53
7---173,2---172,055---0,9984---0,086---0,5
8---260,415---259,295---0,9957---0,1296---0,525
9---200,31---199,03---0,9936---0,0995---0,55
10---194,4---192,9---0,9923---0,0964---0,585
15---142,38---140,67---0,988---0,0703---0,6
20---99,335---97,59---0,9824---0,0488---0,58
25---111,91---109,55---0,9789---0,0548---0,56
30---142,3---139,8---0,9825---0,0699---0,58
35---88,395---86,355---0,5769---0,0432---0,59
40---93,26---90,495---0,9704---0,0452---0,58
50---95,885---92,33---0,929---0,0462---0,67
60---48,495---44,28---0,9131---0,221---0,695
70---86,67---80,21---0,9255---0,0401---0,759
80---80,27---71,505---0,8908---0,0358---0,79
90---34,945---24,325---0,691---0,0122---0,835
100---51,1---33,48---0,6552---0,0167---0,89
150---47,545---11,28---0,2372---0,0056---0,97
200---72,07---11,405---0,1582---0,0057---1
250---110,35---11,99---0,1087---0,006---1
300---144,59---10,45---0,0723---0,0052---1
[color=green]|||||||||||||||||||||||||||||||||||||||||||||||||[/color]
[size=20]Приложение 1[/size]
Основные принципы
Организм состоит из клеток. В клетках ядра. В ядрах хромосомы. Наборы хромосом почти во всех клетках одинаковы. Исключения половые клетки и красные кровяные тельца. Общее название совокупности хромосом – генотип организма. Каждая хромосома последовательность генов. Каждый ген кодирует определенную функцию организма. Например, синтез белка. Местоположения генов в хромосоме называется локусами. Варианты вариантов генов для какого-либо локуса хромосомы носит название – аллеля. В диплоидном организме хромосомы образуют гомологичные пары. В хромосомах - гомологах местоположение локусов совпадают.
Каждая из хромосом гомологичной пары в каждом локусе имеет определенную аллелю гена. Аллели могут совпадать, а могут и отличаться. Исключение половые хромосомы.
Ниже они не рассматриваются. В одинаковых локусах хромосом - гомологов содержатся гены из списка аллель генов для данного локуса. Набор хромосом определяет построение и функции организма. Используется термин – фенотип. Фенотип определяется всеми хромосомами. В результате сложного процесса размножения у потомка каждая пара хромосом гомологов состоит из одной хромосомы отца и из одной хромосомы матери. Множество пар хромосом сохраняется. Выбор одной из двух гомологичных хромосом родителей для потомка происходит случайным образом с вероятностью 0,5.
[color=green]||||||||||||||||||||||||||||||||||||||||||[/color]
[size=20]Приложение 2. [/size]
Законы комбинации аллелей при размножении в http://tigrasp.narod.ru/s-g3.html
[color=green]||||||||||||||||||||||||||||||||||[/color]
[size=20]Приложение 3[/size]
http://ru.wikipedia.org/wiki/Локус в биологии означает фиксированное положение (локализацию) на хромосоме, например, положение гена. Вариант последовательности ДНК в данном локусе называется аллелью. Упорядоченный перечень локусов для какого-либо генома называется генетической картой. Генное картирование — это определение локусa для специфического биологического признака.
Диплоидные или полиплоидные клетки, которые несут одинаковые аллели на каком-либо локусе называются гомозиготными по этому локусу, а те, которые несут различные аллели — гетерозиготными.
[color=green]||||||||||||||||||||||||||||||||||||||||||||||||||[/color]
[size=20]Приложение 4[/size]
Изучением генов занимается наука генетика, родоначальником которой считается Грегор Мендель, который в 1865 году опубликовал результаты своих исследований о передаче по наследству признаков при скрещивании гороха. Сформулированные им закономерности впоследствии назвали Законами Менделя.….В настоящее время, в молекулярной биологии установлено, что гены — это участки ДНК, несущие какую-либо целостную информацию — о строении одной молекулы белка или одной молекулы РНК. Эти и другие функциональные молекулы определяют развитие, рост и функционирование организма.
[color=green]||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||[/color]
[size=20]Приложение 5[/size]
http://dic.academic.ru/dic.nsf/enc_medicine/33962/Хромосомы
Хромосомы
(греч. chrōma цвет, окраска + sōma тело) основные структурно-функциональные элементы клеточного ядра, содержащие гены. Название «хромосомы» обусловлено их способностью интенсивно окрашиваться основными красителями во время деления клетки. Каждый биологический вид характеризуется постоянством числа, размеров и других морфологических признаков X. Хромосомный набор половых и соматических клеток различен. В соматических клетках содержится двойной (диплоидный) набор Х. который можно разделить на пары гомологичных (идентичных) хромосом, сходных по величине и морфологии. Один из гомологов всегда отцовского, другой— материнского происхождения. В половых клетках (гаметах) эукариот (многоклеточных организмов, в т.ч. человека) все хромосомы набора представлены в единственном числе (гаплоидный хромосомный набор). В оплодотворенной яйцеклетке (зиготе) гаплоидные наборы мужских и женских гамет объединяются в одном ядре, восстанавливая двойной набор хромосом. У человека диплоидный хромосомный набор (кариотип) представлен 22 парами хромосом (аутосом) и одной парой половых хромосом (гоносом). Половые хромосомы различаются не только по составу содержащихся в них генов, но и по своей морфологии. Развитие из зиготы женской особи определяет пара половых хромосом, состоящая из двух Х-хромосом, то есть ХХ-пара, а мужской — пара, состоящая из X-хромосомы и У-хромосомы, — то есть ХУ-пара.
[color=green]||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||[/color]
[size=20]Приложение 6[/size]
http://dic.academic.ru/dic.nsf/enc_psyc … оминантные
Доминантные и рецессивные гены (genetic dominance and recessiveness)
По иронии судьбы, о наследственности животных нам известно гораздо больше, чем о наследственности чел. Наследственность является результатом комбинаций генов. Гены — это биохимические функциональные элементы хромосом, определяющие потенциальный пол и др. признаки у зародыша. Хромосомы представлены парами в ядре каждого сперматозоида и каждой яйцеклетки. У чел. имеется 23 пары, или 46 хромосом, причем одну пару называют половыми хромосомами, потому что они определяют пол будущего организма. Клетки женского организма несут две Х-хромосомы, тогда как клетки мужского содержат одну Х- и одну Y-хромосому. Y-хромосома мельче по размеру и содержит меньше генов на своей поверхности, чем Х-хромосома.
В результате клеточного деления в яичниках все яйцеклетки содержат одну Х-хромосому, тогда как клеточное деление в яичках приводит к тому, что половина сперматозоидов содержит Х-хромосому, а др. их половина — Y-хромосому. Т. о., в половине случаев челов. яйцеклетка оплодотворяется сперматозоидами, несущими Х-хромосому, и еще в половине — сперматозоидами, несущими Y-хромосому, так что половина рождающихся в популяции детей должна бы иметь мужской пол, а половина — женский. (Мальчиков все же рождается чуть больше, но среди них и смертность выше, а потому соотношение полов быстро уравнивается; по мере того как дети становятся старше, соотношение полов сдвигается в сторону преобладания представительниц женского пола вследствие большей устойчивости женского организма к болезням.) ………………..X. К. Финк
[size=30]Программа Б--АКСОН
[/size]
[size=20][color=maroon]1.Общее
2.Нейронная сеть – граф
3.Активность нейронов
4.Входной сигнал
5.Связи между нейронами
6.Итерации основного цикла
7.Итерации суперцикла
8.Скачивание программы Б--АКСОН
[/color][/size]
[size=20][color=maroon]1.Общее[/color][/size]
Программа Б-АКСОН – развитие программы --АКСОН
Разум у живого реализован на основе нейронных сетей.
То есть нейронов, передающих между собой сигналы повышения активности (связи +) и уменьшения активности (связи -).
Нейроны имеют отростки: аксоны и дендриты.
Передатчик сигналов: аксон, приемник: дендрит.
В технике появились аналоги нейронных сетей живого.
Общее название
Такие сети наследовали только общие принципы нейронных сетей живого.
Аналоги не связаны биологическими ограничениями.
Ниже будет описана программа Б--АКСОН.
Цель программ серии АКСОН.
Изучить функционирования нейронных сетей.
И построить нейронную сеть с четким соответствием: входной сигнал – выходной сигнал.
Разумеется, имеется много вариантов анализа выходных сигналов.
Программы серии АКСОН.
Программа АКСОН.
Между нейронами только сигналы увеличения активности.
Входные сигналы – положительные.
Введена функция забывания, уменьшения активности нейронов со временем.
Программа в ветви «Комментарии к Программам».
Программа +- Аксон
Связи между нейронами + и -.
Входные сигналы +.
Программа –-АКСОН.
Связи между нейронами + и -.
Входные сигналы +и -.
Программа Б-АКСОН.
Связи между нейронами + и -.
Входные сигналы +и -.
Добавлена функция.
Расчёт для серии входных сигналов.
[size=20][color=maroon]2. Нейронная сеть – граф[/color][/size]
Нейронной сети соответствует ориентированный граф – орграф.
Нейрону ставится в соответствие вершина орграфа.
Ниже нейрон и вершина графа одинаковое содержание.
Число вершин – const: n.
Дуга между вершинами соответствует связи аксон – дендрит.
Дуга из вершины i в вершину j соответствует связи аксон – дендрит.
Между каждой парой может в каждом направление быть несколько дуг или не одной.
Число дуг случайная или постоянная величина.
Орграф может быть полносвязным.
Из каждой вершины можно достичь всех вершин по ориентации (направлению) дуг.
Орграф может быть частично связным, когда одни вершины имеют пути ко всем другим вершинам, другие только к части вершин. При построении орграфа в конкретной задаче проверка связности графа не проводилась. Для отдельных пар вершин по одному или двух направлениях случайным образом в конкретной программе задавалось отсутствие связи: const m.
[size=20][color=maroon]3. Активность нейронов[/color][/size]
Каждому нейрону при расчётах присваивается вес.Вес может быть со знаком плюс или минус. В конкретной программе вес – положительная величина не более const z или отрицательная величина не менее const z1.
[size=20][color=maroon]4. Входной сигнал[/color][/size]
В конкретной программе предусмотрены два вида входного сигнала.
Вес случайный и вес постоянный.
Переключатель: const k.
К = 1 – случайный входной сигнал: const a1
a1>0.
Диапазон: 0 – а1-1.
К = 2 – постоянный входной сигнал: const a2.
a2>0.
Входной сигнал подается одного веса на несколько нейронов.
Период подачи – переменная переменная ij.
Изменение ij в диапазоне v1 – v.
Входной сигнал – матрица f[1..n].
f – величина входного сигнала на нейрон –i.
[size=20][color=maroon]5. Связи между нейронами[/color][/size]
Связи между нейронами – матрица s[1..n,1..n].
Переключатель вида матрицы s[1..n,1..n].- pp.
pp =1
Вес элементов вероятностный в диапазоне 0 – a3-1.
a3>0.
pp =2
Вес элементов постоянный – a4.
Задаются нулевые связи между нейронами: const m.
Задаются положительные и отрицательные связимежду нейронами: const nn.
a4>0.
[size=20][color=maroon]6. Итерации основного цикла[/color][/size]
В работы программы по основному цикл, переменная i, последовательно заполняется матрица p[1..t1,1..n].
p[i,j] – вес нейрона j после итерации i.
Итерация.
Вес каждого нейрона увеличивается или уменьшается на сумму дуг в соответствии с матрицей s[1..n,1..n] от нейронов весом отличного от нуля.
Если вес нейрона при итерации превышает const z, весанейрона равен z.
Если сумма дуг с учётом знака менее const z1,вес нейрона равен z1.
Максимальное число итераций - const t1.
Если в ходе выполнения итераций на трех последовательных итерациях вес всех нейронов не меняется, вычисления заканчиваются.
Фиксируется ww = i-1.
[size=20][color=maroon]7. Итерации суперцикла[/color][/size]
Переменная суперцикла ij.
В ходе итераций суперцикла выполняются итерации основного цикла.
Диапазон изменения ij: v1 –v.
Заполняется массив s1[1..n].
Элемент s1 равен частному от деления на число нейронов – n суммы элементов строки wwматрицы p[1..n,1..n] при i =ij.
[size=20][color=maroon]8. Скачиваниие программы Б--АКСОН[/color][/size]
Программа АКСОН на Дельфи 7.
Ввод в программе –const.
Распечатка программы в WORD: Приложение 1.[/color][/size]
Для скачивания вариант с постоянными величинами вероятностей при разных входах в программу.
//initialization
//randomize;
Входные сигналы только с сигналом +.
Со знаком - заблокированы
Скачать программу Б--АКСОН
https://yadi.sk/d/ouwjDuZUQLzgVA
[size=20][color=maroon]Приложение 1[/color][/size]
программа WORD
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button5: TButton;
Label1: TLabel;
StringGrid2: TStringGrid;
StringGrid3: TStringGrid;
StringGrid4: TStringGrid;
Button4: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label4: TLabel;
Edit3: TEdit;
Label2: TLabel;
Label3: TLabel;
Label7: TLabel;
Label6: TLabel;
Edit4: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
n =300;// ÷ число нейронов
t1 =1500 ;//максимальное число итераций
a1 = 200;//абсолютный вес связи:аксон - дендрит
//вероятностное задание веса
a2 = 300;// абсолютный вес связи: аксон - дендрит
// вес постоянный
a3 =200;// вес входного сигнала
//вероятностное задание веса
a4=200 ;// постоянный вес входного сигнала
k=1 ;//переключатель связи аксон - дендрит
pp=1;//переключатель входного сигнала
v1 = 1;//
v=100;//формирование входного сигнала
//периодичность нулей
m=15;// отсутствие связи между нейронами
z= 300;// максимальный вес нейрона
z1= -300;// минимальный вес нейрона
nn=4;// связь аксон - дендрит
vv =5;// +- входной сигнал
jj = 7 ;// вывод входного сигнала ij = jj
var
Tick: Cardinal;
s:array [1..n, 1 ..n] of integer;// связи аксон - дендрит
p : array [1..t1,1..n] of integer;// состояние нейронов
f :array [1..n] of integer;// состояние входного сигнала
s1 : array [v1..v] of real; //
s2 :array [v1..v] of integer;//
s3 :array [v1..v] of integer;//
a, u, x,x1, c, b1,d1, t,d, g, q,i,j,h,i1,i2,hh : integer; //
j1,j2,j3,j4,j5,j6,j7,j8, i3,i4,i5,i6,i7,i8,i0: integer; //
w, e, e1, z2, z3: integer;//
m1 ,m2,m3,m4,m5, m6,m7 ,m8,m9,m10: integer;//
t3: integer;
ia, ib,ic, id ,it,iw, iu, ju, ja, jb, jc, jd ,jt, jw, ij : integer;//
zz ,ss,ww, sss, uu ,u1,u2,u3:integer;//
r, r1, r2, r3, r4, r5, r6:integer;//
ff ,tt ,c1, g1,cc,ccc, mm , kk:integer;//
l1, l2 ,l3,l4, r7, r8, r9: variant;//
p1,p2,p3,p4,p5,p6: real ; //
procedure TForm1.Button1Click(Sender: TObject);
// îêàíòîâêà
begin
for q:=1 to n //нумерация в горизонтали в табл. № 1 ,
do StringGrid1.Cells[q,0]:=IntToStr(q);
for q:=1 to 5// нумерация по вертикали в табл. № 1 ,
doStringGrid1.Cells[0,q]:=IntToStr(q);
for q:=1 to n // нумерация в горизонтали в табл. № 2
do StringGrid2.Cells[q,0]:=IntToStr(q);
for q:=1 to t1// нумерация по вертикали в табл. № 2
doStringGrid2.Cells[0,q]:=IntToStr(q);
for q:=1 to n // нумерация в горизонтали в табл. № 4
do StringGrid4.Cells[q,0]:=IntToStr(q);
for q:=1 to n// нумерация по вертикали в табл. № 4
doStringGrid4.Cells[0,q]:=IntToStr(q);
for q:=1 to n // нумерация в горизонтали в табл. № 3
do StringGrid3.Cells[q,0]:=IntToStr(q);
for q:=1 to n// нумерация по вертикали в табл. № 3
doStringGrid3.Cells[0,q]:=IntToStr(q);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
// формирование матрицы s
for i:=1 to n do
for j:= 1 to n do
if i<>jthen
begin
if k=1 thenbegin//a
s[i,j] := random ( a1);
mm:= random (nn);
if mm = 0 then s[i,j] := (- s[i,j]);
h:= random (m);
if h>3 then s[i,j] := 0;
end;//a
if k=2 thenbegin//b
s[i,j] := a2;
mm:= random (nn);
if mm = 0 then s[i,j] := (- s[i,j]);
h:= random (m);
if h>3 then s[i,j] := 0;
end;end;//b
for iu :=1 to n do
for ju := 1 to n do
begin
if s[iu,ju] >0 then u1 := u1 +1;
if s[iu,ju] =0 then u2 := u2 +1;
if s[iu,ju] <0 then u3 := u3 +1;
end;
//суперцикл
for ij := v1 to v do
// формирование входного сигнала
begin
m8:=0;m9:=0; m10 :=0;c:=0;r7:=0; r8:=0;w:=0;
for i:=1 to ndo
for j:=1 to ndo
p[i,j] := 0;
if pp = 1 then
for j:= 1 to n dobegin
W:=w+1;
f[j] := random ( a3);
hh:= random (vv);
d:=w mod ij ;
if d> 0 then f[j] := 0;
//if hh>3 then f[j] := -f[j];
end;
if pp=2 then
for j:=1 to ndo
begin
W:=w+1;
d:=w mod ij ;
if d = 0 then f[j] :=a4;
if d> 0 then f[j] := 0;
hh:= random (vv);
// if hh>3 then f[j] := -f[j];
end;
if ij = jj then
for j:= 1 to ndo
StringGrid1.Cells[j,1]:=
IntToStr( f[j]);
for jw :=1 to n dobegin
if f[jw]>0 then m8 := m8+1;
if f[jw]=0 then m9 := m9+1;
if f[jw]<0 then m10 := m10+1;
end;
// основной цикл
for j:=1 to ndo begin
p[1,j] := f[j] ;
end;
//основной цикл
for i:=1tot1 do
begin
c:= c+1;
if i>= 2 then begin
for ia:= 1 to n do
for ib := 1 to ndo
ifp[i-1,ib] <> 0
then if ib<>ia then
p[i,ia]:=p[i-1,ia]+ s[ib ,ia];
for it := 1 to ndobegin
if p[i,it]>z thenp[i,it]:=z;
if p[i,it]<z1 thenp[i,it]:=z1;
end;
kk:=0;
for iw:=1 to ndo
if(( p[c-3,iw]<>p[c-1,iw] )
or(p[c-1,iw]<>p[c,iw]) )then kk :=1;
if (kk =0)then begin uu:=777;ww:=c-1; break;end;
end;
end;
Form1.Caption:=IntToStr(GetTickCount-Tick);
for ic:=1 to ndobegin
if p[c-3,ic]= 0 then u:= u +1;
if p[c-3,ic]=z then x:= x +1;
if p[c-3,ic]=z1 then x1:= x1 +1;
ifp[c-3,ic]= a3 then ccc:= ccc +1;
if( ((p[c-3,ic]<>0) and ( p[c-3,ic]<>z))
and((p[c-3,ic]<>a3 ) and (p[c-3,ic]<>z1)) )
then g1:= g1+1;
if p[c,ic]= 0 then r:= r +1;
if p[c,ic]= z then e:= e +1;
if p[c,ic]= z1 then e1:= e1 +1;
ifp[c,ic]= a3 then cc:= cc +1;
if(((p[c,ic]<>0) and ( p[c,ic]<>z))
and((p[c,ic]<>a3 ) and ( p[c,ic]<>z1)))
then g:= g+1;
end;
t:= u+x+ccc+g;
for i:=1 to n do
for j:=1 to n do
begin
if s[i,j] = 0 then m1 := m1+1;
if s[i,j] >0 then m2 := m2+1 ;
if s[i,j] < 0 then m3 := m3+1 ;
if s[i,j] >0 then m4 := m4+s[i,j];
if s[i,j] <0 then m5 := m5+s[i,j];
END;
m7 := m1+m2+m3;
l1:=r/n;
l2:= e/n;
l3 := cc/n;
l4 := g/n;
r7:=0; r8 :=0;
for i:=1 to ndobegin
r7 := r7+ p[ww,i];
r8 := r8+ p[ww,i]*p[ww,i];
end;
p1:= r7/n;
p2:= r8/n;
p3:= Sqrt(p2);
s1[ij] := p1;
s2[ij] := ij;
s3[ij] := ww;
end;
for i:=1 to ndo
for j:=1 to ndo
StringGrid4.Cells[j,i]:=
IntToStr( s[i,j]);
for i:=1 to t1do
for j:= 1 to ndo
StringGrid2.Cells[j,i]:=
IntToStr( p[i,j]);
for j:= 1 to ndo
begin
StringGrid3.Cells[j,1]:=
FormatFloat('0.00',s1[j]);
StringGrid3.Cells[j,2]:=
IntToStr( s2[j]);
StringGrid3.Cells[j,3]:=
IntToStr( s3[j]);
end;
Edit1.Text := 'm='+'---'+IntToStr(m)+''+
'n='+'---'+IntToStr(n)+''+
't1='+'---'+IntToStr(t1)+''+
'a1='+'---'+IntToStr(a1)+''+
'a2='+'---'+IntToStr(a2)+''+
'a3='+'---' +IntToStr(a3)+''+
'k='+'---' +IntToStr(k)+''+
'nn='+'---' +IntToStr(nn) +''+
'v='+'---' +IntToStr(v)+''+
'c='+'---' +IntToStr(c) +''+
'z='+'---' +IntToStr(z)
+''+
'm8='+'---' +IntToStr(m8)+''+
'm9='+'---' +IntToStr(m9) +''+
'm10='+'---' +IntToStr(m10);
Edit2.Text := 'r='+'---'+IntToStr(r)+''+
'e='+'---'+IntToStr(e)+'' +
'e1='+'---'+IntToStr(e1)+'' +
'cc='+'---'+IntToStr(cc)+'' +
'g='+'---'+IntToStr(g)+'' +
't='+'---'+IntToStr(t)+'' +
'u='+'---'+IntToStr(u)+'' +
'x='+'---'+IntToStr(x)+'' +
'x1='+'---'+IntToStr(x1)+'' +
'ccc='+'---'+IntToStr(ccc)+'' +
'g1='+'---'+IntToStr(g1)
+''+
'ff='+'---'+IntToStr(ff)
+'' +
'u1='+'---'+IntToStr(u1)+'' +
'u2='+'---'+IntToStr(u2)
+''+
'u3='+'---'+IntToStr(u3);
Edit3.Text :=
'l1='+'---'+FormatFloat('0.000',l1)+'' +
'l2='+'---'+FormatFloat('0.000',l2)+'' +
'l3='+'---'+FormatFloat('0.000',l3) +'' +
'l4='+'---'+FormatFloat('0.000',l4) +'' +
'tt='+'---'+IntToStr(tt)+'' +
'uu='+'---'+IntToStr(uu)+''+
'ww='+'---'+IntToStr(ww)+''+
'm1='+'---'+IntToStr(m1)+'' +
'm2='+'---'+IntToStr(m2)+'' +
'm3='+'---'+IntToStr(m3)+'' +
'm4='+'---'+IntToStr(m4)+'' +
'm5='+'---'+IntToStr(m5)
+'' +
'm7='+'---'+IntToStr(m7);
Edit4.Text :=
'r7='+'---'+IntToStr(r7)+'' +
'r8='+'---'+IntToStr(r8)
+'' +
'p1='+'---'+FormatFloat('0.000',p1) +'' +
'p2='+'---'+FormatFloat('0.000',p2)
+'' +
's1[v1]='+'---'+FormatFloat('0.000',s1[v1])
+'' +
's1[v1+1]='+'---'+FormatFloat('0.000',s1[v1+2])
+'' +
's1[v-1]='+'---'+FormatFloat('0.000',s1[v-1])
+'' +
's1[v]='+'---'+FormatFloat('0.000',s1[v]);
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
end;
////////////////////////////////////////////////////////////////
procedure TForm1.Button5Click(Sender: TObject);
begin
close
end;
//initialization
//randomize;
end.
Дед, если бы ты хотел обсудить свои программы, другое дело. А так тонны непонятного мусора, с битыми ссылками.
Ты ссылки то свои хоть проверяй. Какой смысл? Как на всём этом можно заработать? Объясняй дед, пока живой...

////////////////////////////////////////////////////////////////////////////////////////////////////
[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.