Дополнения к матрицам в стандартном модуле:

x in matr

MatrEqual(m,m1)
m.MatrEqual(m1)

ArrEqual(a,a1)
a.ArrEqual(a1)

MatrByRow, MatrByCol по последовательости

var (m,n) := matr.Size
This commit is contained in:
Mikhalkovich Stanislav 2020-05-30 11:31:17 +03:00
parent ae51ba42d0
commit cd2556f89f
15 changed files with 324 additions and 8 deletions

View file

@ -15,7 +15,7 @@ internal static class RevisionClass
public const string Major = "3";
public const string Minor = "6";
public const string Build = "3";
public const string Revision = "2493";
public const string Revision = "2494";
public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;

View file

@ -1,4 +1,4 @@
%MINOR%=6
%REVISION%=2493
%COREVERSION%=3
%REVISION%=2494
%MINOR%=6
%MAJOR%=3

View file

@ -0,0 +1,44 @@
// Демонстрация фрактальной графики. Множество Мандельброта
// Для каждой точки комплексной плоскости z=(x,y) выполняем итерационный процесс z=z*2+c, c=(cx,cy)
// Считаем количество итераций i до тех пор пока не выполнится условие |z|>max
// После этого рисуем точку z=(x,y) с насыщенностью красного цвета, пропорциональной i
uses GraphWPF;
const
max = 10;
coef1 = 0.5;
coef2 = 0.88;
scalex = 0.0035;
scaley = 0.0035;
dx = 430;
dy = 300;
begin
Window.Title := 'Фракталы: множество Мандельброта';
Window.SetSize(600,600);
Window.CenterOnScreen;
var m := Window.Width.Round;
var n := Window.Height.Round;
var a := new Color[m,n];
for var ix:=0 to m-1 do
for var iy:=0 to n-1 do
begin
var cx := scalex * (ix - dx);
var cy := scaley * (iy - dy);
var c := Cplx(cx,cy);
var z := Cplx(0,0);
var i := 1;
while i<255 do
begin
z := z*z+c;
if z.Magnitude>max then break;
i += 1;
end;
if i>=255 then a[ix,iy] := Colors.Red
else a[ix,iy] := RGB(255,255-i,255-i);
end;
DrawPixels(0,0,a);
Writeln('Время расчета = ',Milliseconds/1000,' с');
end.

View file

@ -12,7 +12,9 @@
<param name="Keyword" value="FillRandom">
<param name="Keyword" value="ForEach">
<param name="Keyword" value="Indices">
<param name="Keyword" value="MatrEqual">
<param name="Keyword" value="MatrSlice">
<param name="Keyword" value="operator">
<param name="Keyword" value="Print">
<param name="Keyword" value="Println">
<param name="Keyword" value="Row">
@ -22,6 +24,7 @@
<param name="Keyword" value="RowsSeq">
<param name="Keyword" value="SetCol">
<param name="Keyword" value="SetRow">
<param name="Keyword" value="Size">
<param name="Keyword" value="SwapCols">
<param name="Keyword" value="SwapRows">
<param name="Keyword" value="Transform"></object>
@ -32,7 +35,7 @@
<tr><td><code><b>function</b> ColCount&lt;T&gt;(Self: <b>array</b> [,] <b>of</b> T): integer;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Êîëè÷åñòâî ñòîëáöîâ â äâóìåðíîì ìàññèâå</td></tr>
<tr><td><code><b>function</b> Cols&lt;T&gt;(Self: <b>array</b> [,] <b>of</b> T): <b>array</b> <b>of</b> <b>array</b> <b>of</b> T;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></td></tr>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò ìàññèâ ñòîëáöîâ äâóìåðíîãî ìàññèâà</td></tr>
<tr><td><code><b>function</b> ColSeq&lt;T&gt;(Self: <b>array</b> [,] <b>of</b> T; k: integer): <b>sequence </b> <b>of</b> T;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k-òûé ñòîëáåö äâóìåðíîãî ìàññèâà êàê ïîñëåäîâàòåëüíîñòü</td></tr>
<tr><td><code><b>function</b> ColsSeq&lt;T&gt;(Self: <b>array</b> [,] <b>of</b> T): <b>sequence </b> <b>of</b> <b>sequence </b> <b>of</b> T;</code>
@ -61,10 +64,14 @@
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò ïî çàäàííîìó äâóìåðíîìó ìàññèâó ïîñëåäîâàòåëüíîñòü èíäåêñîâ ýëåìåíòîâ, óäîâëåòâîðÿþùèõ çàäàííîìó óñëîâèþ</td></tr>
<tr><td><code><b>function</b> Indices&lt;T&gt;(Self: <b>array</b> [,] <b>of</b> T; cond: (T,integer,integer) -&gt; boolean): <b>sequence </b> <b>of</b> (integer, integer);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò ïî çàäàííîìó äâóìåðíîìó ìàññèâó ïîñëåäîâàòåëüíîñòü èíäåêñîâ ýëåìåíòîâ, óäîâëåòâîðÿþùèõ çàäàííîìó óñëîâèþ</td></tr>
<tr><td><code><b>function</b> MatrEqual&lt;T&gt;(Self,b: array[,] <b>of</b> T): boolean;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Åñòü ëè ýëåìåíò â ìàòðèöå</td></tr>
<tr><td><code><b>function</b> MatrSlice&lt;T&gt;(Self: array[,] <b>of</b> T; RowIndex: <b>array</b> <b>of</b> integer; ColIndex: <b>array</b> <b>of</b> integer): array[,] <b>of</b> T;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò ñðåç äâóìåðíîãî ìàññèâà. RowIndex è ColIndex çàäàþò ñðåçàåìûå ñòðîêè è ñòîëáöû</td></tr>
<tr><td><code><b>function</b> MatrSlice&lt;T&gt;(Self: array[,] <b>of</b> T; FromRow, ToRow, FromCol, ToCol: integer): array[,] <b>of</b> T;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò ñðåç äâóìåðíîãî ìàññèâà ìåæäó ñòðîêàìè FromRow, ToRow è ñòîëáöàìè FromCol, ToCol</td></tr>
<tr><td><code><b>function</b> operator in&lt;T&gt;(x: T; a: array[,] <b>of</b> T): boolean;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Åñòü ëè ýëåìåíò â ìàòðèöå</td></tr>
<tr><td><code><b>function</b> Print&lt;T&gt;(Self: <b>array</b> [,] <b>of</b> T; w: integer := 4): <b>array</b> [,] <b>of</b> T;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âûâîä äâóìåðíîãî ìàññèâà, w - øèðèíà ïîëÿ âûâîäà</td></tr>
<tr><td><code><b>function</b> Print(Self: <b>array</b> [,] <b>of</b> real; w: integer := 7; f: integer := 2): <b>array</b> [,] <b>of</b> real;</code>
@ -91,6 +98,8 @@
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ìåíÿåò ñòðîêó k äâóìåðíîãî ìàññèâà íà äðóãóþ ñòðîêó</td></tr>
<tr><td><code><b>procedure</b> SetRow&lt;T&gt;(Self: <b>array</b> [,] <b>of</b> T; k: integer; a: <b>sequence </b> <b>of</b> T);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ìåíÿåò ñòðîêó k äâóìåðíîãî ìàññèâà íà äðóãóþ ñòðîêó</td></tr>
<tr><td><code><b>function</b> Size&lt;T&gt;(Self: <b>array</b> [,] <b>of</b> T): (integer,integer);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Êîëè÷åñòâî ñòîëáöîâ â äâóìåðíîì ìàññèâå</td></tr>
<tr><td><code><b>procedure</b> SwapCols&lt;T&gt;(Self: <b>array</b> [,] <b>of</b> T; k1, k2: integer);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ìåíÿåò ìåñòàìè äâà ñòîëáöà äâóìåðíîãî ìàññèâà ñ íîìåðàìè k1 è k2</td></tr>
<tr><td><code><b>procedure</b> SwapRows&lt;T&gt;(Self: <b>array</b> [,] <b>of</b> T; k1, k2: integer);</code>

View file

@ -1,5 +1,6 @@
<HTML><HEAD><object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
<param name="Keyword" value="AdjacentFind">
<param name="Keyword" value="ArrEqual">
<param name="Keyword" value="BinarySearch">
<param name="Keyword" value="Combinations">
<param name="Keyword" value="ConvertAll">
@ -31,6 +32,8 @@
</HEAD><body><H1>Ìåòîäû ðàñøèðåíèÿ îäíîìåðíûõ äèíàìè÷åñêèõ ìàññèâîâ</H1>
<table border=0 cellpadding=5><tr><td><code><b>function</b> AdjacentFind&lt;T&gt;(Self: <b>array</b> <b>of</b> T; eq: (T,T)-&gt;boolean; start: integer := 0): integer;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Íàõîäèò ïåðâóþ ïàðó ïîäðÿä èäóùèõ îäèíàêîâûõ ýëåìåíòîâ, èñïîëüçóÿ ôóíêöèþ ñðàâíåíèÿ eq, è âîçâðàùàåò èíäåêñ ïåðâîãî ýëåìåíòà ïàðû. Åñëè íå íàéäåí, âîçâðàùàåòñÿ -1</td></tr>
<tr><td><code><b>function</b> ArrEqual&lt;T&gt;(Self,b: <b>array</b> <b>of</b> T): boolean;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò, ñîâïàäàþò ëè ìàññèâû</td></tr>
<tr><td><code><b>function</b> BinarySearch&lt;T&gt;(Self: <b>array</b> <b>of</b> T; x: T): integer;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âûïîëíÿåò áèíàðíûé ïîèñê â îòñîðòèðîâàííîì ìàññèâå</td></tr>
<tr><td><code><b>function</b> Combinations&lt;T&gt;(Self: <b>array</b> <b>of</b> T; m: integer): <b>sequence </b> <b>of</b> <b>array</b> <b>of</b> T;</code>

View file

@ -1,5 +1,6 @@
<HTML><HEAD><object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
<param name="Keyword" value="Arr">
<param name="Keyword" value="ArrEqual">
<param name="Keyword" value="ArrFill">
<param name="Keyword" value="ArrGen">
<param name="Keyword" value="ArrRandom">
@ -19,6 +20,8 @@
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò ìàññèâ, çàïîëíåííûé äèàïàçîíîì çíà÷åíèé</td></tr>
<tr><td><code><b>function</b> Arr(a: CharRange): <b>array</b> <b>of</b> char;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò ìàññèâ, çàïîëíåííûé äèàïàçîíîì çíà÷åíèé</td></tr>
<tr><td><code><b>function</b> ArrEqual&lt;T&gt;(a, b: <b>array</b> <b>of</b> T): boolean;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò, ñîâïàäàþò ëè ìàññèâû</td></tr>
<tr><td><code><b>function</b> ArrFill&lt;T&gt;(count: integer; x: T): <b>array</b> <b>of</b> T;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò ìàññèâ èç count ýëåìåíòîâ x</td></tr>
<tr><td><code><b>function</b> ArrGen&lt;T&gt;(count: integer; gen: integer-&gt;T): <b>array</b> <b>of</b> T;</code>

View file

@ -3,6 +3,7 @@
<param name="Keyword" value="High">
<param name="Keyword" value="Length">
<param name="Keyword" value="Low">
<param name="Keyword" value="MatrEqual">
<param name="Keyword" value="Reverse">
<param name="Keyword" value="SetLength">
<param name="Keyword" value="Shuffle">
@ -20,6 +21,8 @@
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò äëèíó äèíàìè÷åñêîãî ìàññèâà ïî ðàçìåðíîñòè dim</td></tr>
<tr><td><code><b>function</b> Low(a: <b>array</b> <b>of</b> T): integer;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò 0</td></tr>
<tr><td><code><b>function</b> MatrEqual&lt;T&gt;(a, b: <b>array</b> [,] <b>of</b> T): boolean;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ñðàâíèâàåò ìàòðèöû íà ðàâåíñòâî</td></tr>
<tr><td><code><b>procedure</b> Reverse&lt;T&gt;(a: <b>array</b> <b>of</b> T);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Èçìåíÿåò ïîðÿäîê ýëåìåíòîâ â äèíàìè÷åñêîì ìàññèâå íà ïðîòèâîïîëîæíûé</td></tr>
<tr><td><code><b>procedure</b> Reverse&lt;T&gt;(a: <b>array</b> <b>of</b> T; index, count: integer);</code>

View file

@ -20,10 +20,18 @@
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ãåíåðèðóåò äâóìåðíûé ìàññèâ ïî ìàññèâó ìàññèâîâ ñòîëáöîâ</td></tr>
<tr><td><code><b>function</b> MatrByCol&lt;T&gt;(a: <b>sequence </b> <b>of</b> <b>array</b> <b>of</b> T): <b>array</b> [,] <b>of</b> T;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ãåíåðèðóåò äâóìåðíûé ìàññèâ ïî ïîñëåäîâàòåëüíîñòè ìàññèâîâ ñòîëáöîâ</td></tr>
<tr><td><code><b>function</b> MatrByCol&lt;T&gt;(a: <b>sequence </b> <b>of</b> <b>sequence </b> <b>of</b> T): <b>array</b> [,] <b>of</b> T;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ãåíåðèðóåò äâóìåðíûé ìàññèâ ïî ïîñëåäîâàòåëüíîñòè ïîñëåäîâàòåëüíîñòåé ñòîëáöîâ</td></tr>
<tr><td><code><b>function</b> MatrByCol&lt;T&gt;(m,n: integer; a: <b>sequence </b> <b>of</b> T): <b>array</b> [,] <b>of</b> T;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ãåíåðèðóåò äâóìåðíûé ìàññèâ ïî ñòîëáöàì èç ïîñëåäîâàòåëüíîñòè</td></tr>
<tr><td><code><b>function</b> MatrByRow&lt;T&gt;(a: <b>array</b> <b>of</b> <b>array</b> <b>of</b> T): <b>array</b> [,] <b>of</b> T;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ãåíåðèðóåò äâóìåðíûé ìàññèâ ïî ìàññèâó ìàññèâîâ ñòðîê</td></tr>
<tr><td><code><b>function</b> MatrByRow&lt;T&gt;(a: <b>sequence </b> <b>of</b> <b>array</b> <b>of</b> T): <b>array</b> [,] <b>of</b> T;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ãåíåðèðóåò äâóìåðíûé ìàññèâ ïî ïîñëåäîâàòåëüíîñòè ìàññèâîâ ñòðîê</td></tr>
<tr><td><code><b>function</b> MatrByRow&lt;T&gt;(a: <b>sequence </b> <b>of</b> <b>sequence </b> <b>of</b> T): <b>array</b> [,] <b>of</b> T;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ãåíåðèðóåò äâóìåðíûé ìàññèâ ïî ïîñëåäîâàòåëüíîñòè ïîñëåäîâàòåëüíîñòåé ñòðîê</td></tr>
<tr><td><code><b>function</b> MatrByRow&lt;T&gt;(m,n: integer; a: <b>sequence </b> <b>of</b> T): <b>array</b> [,] <b>of</b> T;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ãåíåðèðóåò äâóìåðíûé ìàññèâ ïî ñòðîêàì èç ïîñëåäîâàòåëüíîñòè</td></tr>
<tr><td><code><b>function</b> MatrFill&lt;T&gt;(m, n: integer; x: T): <b>array</b> [,] <b>of</b> T;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò äâóìåðíûé ìàññèâ ðàçìåðà m x n, çàïîëíåííûé ýëåìåíòàìè x</td></tr>
<tr><td><code><b>function</b> MatrGen&lt;T&gt;(m, n: integer; gen: (integer,integer)-&gt;T): <b>array</b> [,] <b>of</b> T;</code>

View file

@ -4,12 +4,14 @@
<param name="Keyword" value="Colors">
<param name="Keyword" value="CoordType">
<param name="Keyword" value="FontStyle">
<param name="Keyword" value="GBrush">
<param name="Keyword" value="GColor">
<param name="Keyword" value="GPoint">
<param name="Keyword" value="GRect">
<param name="Keyword" value="GWindow">
<param name="Keyword" value="Key">
<param name="Keyword" value="Point"></object>
<param name="Keyword" value="Point">
<param name="Keyword" value="Vector"></object>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"><link rel="StyleSheet" href="../../../default.css">
</HEAD><body><H1>Òèïû ìîäóëÿ GraphWPF</H1>
<table border=0 cellpadding=5><tr><td><code>Alignment = (LeftTop,CenterTop,RightTop,LeftCenter,Center,RightCenter,LeftBottom,CenterBottom,RightBottom);</code>
@ -22,10 +24,12 @@
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âèäû ñèñòåìû êîîðäèíàò</td></tr>
<tr><td><code>FontStyle = (Normal,Bold,Italic,BoldItalic);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Òèï ñòèëÿ øðèôòà</td></tr>
<tr><td><code>GBrush = System.Windows.Media.Brush;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Òèï êèñòè</td></tr>
<tr><td><code>GColor = System.Windows.Media.Color;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Òèï öâåòà</td></tr>
<tr><td><code>GPoint = System.Windows.Point;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></td></tr>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Òèï òî÷êè</td></tr>
<tr><td><code>GRect = System.Windows.Rect;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Òèï ïðÿìîóãîëüíèêà</td></tr>
<tr><td><code>GWindow = System.Windows.Window;</code>
@ -34,5 +38,7 @@
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Òèï êëàâèøè</td></tr>
<tr><td><code>Point = System.Windows.Point;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Òèï òî÷êè</td></tr>
<tr><td><code>Vector = System.Windows.Vector;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Òèï âåêòîðà</td></tr>
</table>
</body></HTML>

View file

@ -1 +1 @@
3.6.3.2493
3.6.3.2494

View file

@ -1 +1 @@
!define VERSION '3.6.3.2493'
!define VERSION '3.6.3.2494'

View file

@ -2120,9 +2120,12 @@ procedure Reverse(var s: string);
procedure Reverse(var s: string; index, count: integer);
/// Перемешивает динамический массив случайным образом
procedure Shuffle<T>(a: array of T);
/// Сравнивает матрицы на равенство
function MatrEqual<T>(a, b: array [,] of T): boolean;
/// Перемешивает список случайным образом
procedure Shuffle<T>(l: List<T>);
// -----------------------------------------------------
//>> Подпрограммы для генерации последовательностей # Subroutines for sequence generation
// -----------------------------------------------------
@ -2242,6 +2245,9 @@ function ReadArrReal(prompt: string; n: integer): array of real;
/// Выводит приглашение к вводу и возвращает массив из n строк, введенных с клавиатуры
function ReadArrString(prompt: string; n: integer): array of string;
/// Возвращает, совпадают ли массивы
function ArrEqual<T>(a, b: array of T): boolean;
// -----------------------------------------------------
//>> Подпрограммы для создания двумерных динамических массивов # Subroutines for matrixes
// -----------------------------------------------------
@ -2249,18 +2255,25 @@ function ReadArrString(prompt: string; n: integer): array of string;
function Matr<T>(m,n: integer; params data: array of T): array [,] of T;
/// Возвращает двумерный массив, заполненный значениями из одномерных массивов
function Matr<T>(params aa: array of array of T): array [,] of T;
/// Генерирует двумерный массив по массиву массивов строк
function MatrByRow<T>(a: array of array of T): array [,] of T;
/// Генерирует двумерный массив по последовательности массивов строк
function MatrByRow<T>(a: sequence of array of T): array [,] of T;
/// Генерирует двумерный массив по последовательности последовательностей строк
function MatrByRow<T>(a: sequence of sequence of T): array [,] of T;
/// Генерирует двумерный массив по строкам из последовательности
function MatrByRow<T>(m,n: integer; a: sequence of T): array [,] of T;
/// Генерирует двумерный массив по массиву массивов столбцов
function MatrByCol<T>(a: array of array of T): array [,] of T;
/// Генерирует двумерный массив по последовательности массивов столбцов
function MatrByCol<T>(a: sequence of array of T): array [,] of T;
/// Генерирует двумерный массив по последовательности последовательностей столбцов
function MatrByCol<T>(a: sequence of sequence of T): array [,] of T;
/// Генерирует двумерный массив по столбцам из последовательности
function MatrByCol<T>(m,n: integer; a: sequence of T): array [,] of T;
/// Возвращает двумерный массив размера m x n, заполненный случайными целыми значениями
function MatrRandom(m: integer := 5; n: integer := 5; a: integer := 0; b: integer := 100): array [,] of integer;
/// Возвращает двумерный массив размера m x n, заполненный случайными целыми значениями
@ -2770,6 +2783,7 @@ const
BAD_COL_INDEX_FROM = 'FromCol выходит за пределы индексов строк двумерного массива!!FromCol is out of range of 2-dim array column indexes';
BAD_COL_INDEX_TO = 'ToCol выходит за пределы индексов строк двумерного массива!!ToCol is out of range of 2-dim array column indexes';
SLICE_SIZE_AND_RIGHT_VALUE_SIZE_MUST_BE_EQUAL = 'Размеры среза и присваиваемого выражения должны быть равны!!Slice size and assigned expression size must be equal';
MATR_DIMENSIONS_MUST_BE_EQUAL = 'Размеры матриц должны совпадать!!Matrix dimensions must be equal';
// -----------------------------------------------------
// WINAPI
@ -4831,6 +4845,21 @@ begin
raise new System.ArgumentException('Функцию ReadArrString запрещено вызывать без параметров')
end;
function ArrEqual<T>(a, b: array of T): boolean;
begin
Result := True;
if a.Length<>b.Length then
Result := False
else
for var i:=0 to a.Length-1 do
if a[i]<>b[i] then
begin
Result := False;
exit;
end;
end;
function ReadSeqInteger(n: integer): sequence of integer;
begin
@ -10604,6 +10633,29 @@ begin
Result := Self.GetLength(1);
end;
/// Количество столбцов в двумерном массиве
function Size<T>(Self: array [,] of T): (integer,integer); extensionmethod;
begin
Result := (Self.GetLength(0),Self.GetLength(1));
end;
/// Есть ли элемент в матрице
function operator in<T>(x: T; a: array[,] of T): boolean; extensionmethod;
begin
var (m,n) := a.Size;
Result := False;
for var i:=0 to m-1 do
for var j:=0 to n-1 do
if a[i,j]=x then
begin
Result := True;
exit;
end;
end;
/// Есть ли элемент в матрице
function MatrEqual<T>(Self,b: array[,] of T): boolean; extensionmethod := MatrEqual(Self,b);
/// Вывод двумерного массива, w - ширина поля вывода
function Print<T>(Self: array [,] of T; w: integer := 4): array [,] of T; extensionmethod;
begin
@ -11016,6 +11068,28 @@ begin
Result := res;
end;
/// Генерирует двумерный массив по строкам из последовательности
function MatrByRow<T>(m,n: integer; a: sequence of T): array [,] of T;
begin
var res := new T[m,n];
var (i,j,num) := (0,0,0);
foreach var x in a do
begin
if num >= m*n then
break;
res[i,j] := x;
num += 1;
j += 1;
if j >= n then
begin
j := 0;
i += 1;
end;
end;
Result := res;
end;
/// Генерирует двумерный массив по массиву массивов столбцов
function MatrByCol<T>(a: array of array of T): array [,] of T;
begin
@ -11064,6 +11138,27 @@ begin
Result := res;
end;
/// Генерирует двумерный массив по столбцам из последовательности
function MatrByCol<T>(m,n: integer; a: sequence of T): array [,] of T;
begin
var res := new T[m,n];
var (i,j,num) := (0,0,0);
foreach var x in a do
begin
if num >= m*n then
break;
res[i,j] := x;
num += 1;
i += 1;
if i >= m then
begin
i := 0;
j += 1;
end;
end;
Result := res;
end;
// Реализация операций с матрицами - только после введения RowCount и ColCount
function MatrRandom(m: integer; n: integer; a, b: integer): array [,] of integer;
begin
@ -11131,6 +11226,24 @@ begin
Result[i, j] := ReadReal;
end;
function MatrEqual<T>(a, b: array [,] of T): boolean;
begin
var (m1,n1) := a.Size;
var (m2,n2) := b.Size;
Result := True;
if (m1<>m2) or (n1<>n2) then
Result := False
else
for var i:=0 to m1-1 do
for var j:=0 to n1-1 do
if a[i,j]<>b[i,j] then
begin
Result := False;
exit;
end;
end;
// -----------------------------------------------------
//>> Методы расширения одномерных динамических массивов # Extension methods for array of T
// -----------------------------------------------------
@ -11143,6 +11256,9 @@ end;
// Дополнения май 2020: Combinations, Permutations
/// Возвращает, совпадают ли массивы
function ArrEqual<T>(Self,b: array of T): boolean; extensionmethod := ArrEqual(Self,b);
/// Заполняет массив случайными значениями в диапазоне от a до b
procedure FillRandom(Self: array of integer; a,b: integer); extensionmethod;
begin

View file

@ -0,0 +1,8 @@
type
T<T> = class
public T: T;
end;
begin
end.

View file

@ -2120,9 +2120,12 @@ procedure Reverse(var s: string);
procedure Reverse(var s: string; index, count: integer);
/// Перемешивает динамический массив случайным образом
procedure Shuffle<T>(a: array of T);
/// Сравнивает матрицы на равенство
function MatrEqual<T>(a, b: array [,] of T): boolean;
/// Перемешивает список случайным образом
procedure Shuffle<T>(l: List<T>);
// -----------------------------------------------------
//>> Подпрограммы для генерации последовательностей # Subroutines for sequence generation
// -----------------------------------------------------
@ -2242,6 +2245,9 @@ function ReadArrReal(prompt: string; n: integer): array of real;
/// Выводит приглашение к вводу и возвращает массив из n строк, введенных с клавиатуры
function ReadArrString(prompt: string; n: integer): array of string;
/// Возвращает, совпадают ли массивы
function ArrEqual<T>(a, b: array of T): boolean;
// -----------------------------------------------------
//>> Подпрограммы для создания двумерных динамических массивов # Subroutines for matrixes
// -----------------------------------------------------
@ -2249,18 +2255,25 @@ function ReadArrString(prompt: string; n: integer): array of string;
function Matr<T>(m,n: integer; params data: array of T): array [,] of T;
/// Возвращает двумерный массив, заполненный значениями из одномерных массивов
function Matr<T>(params aa: array of array of T): array [,] of T;
/// Генерирует двумерный массив по массиву массивов строк
function MatrByRow<T>(a: array of array of T): array [,] of T;
/// Генерирует двумерный массив по последовательности массивов строк
function MatrByRow<T>(a: sequence of array of T): array [,] of T;
/// Генерирует двумерный массив по последовательности последовательностей строк
function MatrByRow<T>(a: sequence of sequence of T): array [,] of T;
/// Генерирует двумерный массив по строкам из последовательности
function MatrByRow<T>(m,n: integer; a: sequence of T): array [,] of T;
/// Генерирует двумерный массив по массиву массивов столбцов
function MatrByCol<T>(a: array of array of T): array [,] of T;
/// Генерирует двумерный массив по последовательности массивов столбцов
function MatrByCol<T>(a: sequence of array of T): array [,] of T;
/// Генерирует двумерный массив по последовательности последовательностей столбцов
function MatrByCol<T>(a: sequence of sequence of T): array [,] of T;
/// Генерирует двумерный массив по столбцам из последовательности
function MatrByCol<T>(m,n: integer; a: sequence of T): array [,] of T;
/// Возвращает двумерный массив размера m x n, заполненный случайными целыми значениями
function MatrRandom(m: integer := 5; n: integer := 5; a: integer := 0; b: integer := 100): array [,] of integer;
/// Возвращает двумерный массив размера m x n, заполненный случайными целыми значениями
@ -2770,6 +2783,7 @@ const
BAD_COL_INDEX_FROM = 'FromCol выходит за пределы индексов строк двумерного массива!!FromCol is out of range of 2-dim array column indexes';
BAD_COL_INDEX_TO = 'ToCol выходит за пределы индексов строк двумерного массива!!ToCol is out of range of 2-dim array column indexes';
SLICE_SIZE_AND_RIGHT_VALUE_SIZE_MUST_BE_EQUAL = 'Размеры среза и присваиваемого выражения должны быть равны!!Slice size and assigned expression size must be equal';
MATR_DIMENSIONS_MUST_BE_EQUAL = 'Размеры матриц должны совпадать!!Matrix dimensions must be equal';
// -----------------------------------------------------
// WINAPI
@ -4831,6 +4845,21 @@ begin
raise new System.ArgumentException('Функцию ReadArrString запрещено вызывать без параметров')
end;
function ArrEqual<T>(a, b: array of T): boolean;
begin
Result := True;
if a.Length<>b.Length then
Result := False
else
for var i:=0 to a.Length-1 do
if a[i]<>b[i] then
begin
Result := False;
exit;
end;
end;
function ReadSeqInteger(n: integer): sequence of integer;
begin
@ -10604,6 +10633,29 @@ begin
Result := Self.GetLength(1);
end;
/// Количество столбцов в двумерном массиве
function Size<T>(Self: array [,] of T): (integer,integer); extensionmethod;
begin
Result := (Self.GetLength(0),Self.GetLength(1));
end;
/// Есть ли элемент в матрице
function operator in<T>(x: T; a: array[,] of T): boolean; extensionmethod;
begin
var (m,n) := a.Size;
Result := False;
for var i:=0 to m-1 do
for var j:=0 to n-1 do
if a[i,j]=x then
begin
Result := True;
exit;
end;
end;
/// Есть ли элемент в матрице
function MatrEqual<T>(Self,b: array[,] of T): boolean; extensionmethod := MatrEqual(Self,b);
/// Вывод двумерного массива, w - ширина поля вывода
function Print<T>(Self: array [,] of T; w: integer := 4): array [,] of T; extensionmethod;
begin
@ -11016,6 +11068,28 @@ begin
Result := res;
end;
/// Генерирует двумерный массив по строкам из последовательности
function MatrByRow<T>(m,n: integer; a: sequence of T): array [,] of T;
begin
var res := new T[m,n];
var (i,j,num) := (0,0,0);
foreach var x in a do
begin
if num >= m*n then
break;
res[i,j] := x;
num += 1;
j += 1;
if j >= n then
begin
j := 0;
i += 1;
end;
end;
Result := res;
end;
/// Генерирует двумерный массив по массиву массивов столбцов
function MatrByCol<T>(a: array of array of T): array [,] of T;
begin
@ -11064,6 +11138,27 @@ begin
Result := res;
end;
/// Генерирует двумерный массив по столбцам из последовательности
function MatrByCol<T>(m,n: integer; a: sequence of T): array [,] of T;
begin
var res := new T[m,n];
var (i,j,num) := (0,0,0);
foreach var x in a do
begin
if num >= m*n then
break;
res[i,j] := x;
num += 1;
i += 1;
if i >= m then
begin
i := 0;
j += 1;
end;
end;
Result := res;
end;
// Реализация операций с матрицами - только после введения RowCount и ColCount
function MatrRandom(m: integer; n: integer; a, b: integer): array [,] of integer;
begin
@ -11131,6 +11226,24 @@ begin
Result[i, j] := ReadReal;
end;
function MatrEqual<T>(a, b: array [,] of T): boolean;
begin
var (m1,n1) := a.Size;
var (m2,n2) := b.Size;
Result := True;
if (m1<>m2) or (n1<>n2) then
Result := False
else
for var i:=0 to m1-1 do
for var j:=0 to n1-1 do
if a[i,j]<>b[i,j] then
begin
Result := False;
exit;
end;
end;
// -----------------------------------------------------
//>> Методы расширения одномерных динамических массивов # Extension methods for array of T
// -----------------------------------------------------
@ -11143,6 +11256,9 @@ end;
// Дополнения май 2020: Combinations, Permutations
/// Возвращает, совпадают ли массивы
function ArrEqual<T>(Self,b: array of T): boolean; extensionmethod := ArrEqual(Self,b);
/// Заполняет массив случайными значениями в диапазоне от a до b
procedure FillRandom(Self: array of integer; a,b: integer); extensionmethod;
begin

Binary file not shown.