Мои программы
"Анализ "Скатерти Улама" блоками"
|||||||||||||||||||||||||||||||||||||||||||||||||||||
Исходник программы
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.
||||||||||||||||||||||||||||||||||||||||||||