Deutsch

Мои программы

31.01.25 14:46
Re: Мои программы
 
alek4 старожил
в ответ alek4 31.01.25 14:13

"Анализ "Скатерти Улама" блоками"


|||||||||||||||||||||||||||||||||||||||||||||||||||||

Исходник программы

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.

||||||||||||||||||||||||||||||||||||||||||||

 

Перейти на