Дополнения к матрицам в стандартном модуле:
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:
parent
ae51ba42d0
commit
cd2556f89f
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%MINOR%=6
|
||||
%REVISION%=2493
|
||||
%COREVERSION%=3
|
||||
%REVISION%=2494
|
||||
%MINOR%=6
|
||||
%MAJOR%=3
|
||||
|
|
|
|||
44
InstallerSamples/Graphics/GraphWPF/MandelbrotWPF.pas
Normal file
44
InstallerSamples/Graphics/GraphWPF/MandelbrotWPF.pas
Normal 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.
|
||||
|
||||
|
|
@ -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<T>(Self: <b>array</b> [,] <b>of</b> T): integer;</code>
|
||||
<br> Êîëè÷åñòâî ñòîëáöîâ â äâóìåðíîì ìàññèâå</td></tr>
|
||||
<tr><td><code><b>function</b> Cols<T>(Self: <b>array</b> [,] <b>of</b> T): <b>array</b> <b>of</b> <b>array</b> <b>of</b> T;</code>
|
||||
<br> <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> Âîçâðàùàåò ìàññèâ ñòîëáöîâ äâóìåðíîãî ìàññèâà</td></tr>
|
||||
<tr><td><code><b>function</b> ColSeq<T>(Self: <b>array</b> [,] <b>of</b> T; k: integer): <b>sequence </b> <b>of</b> T;</code>
|
||||
<br> k-òûé ñòîëáåö äâóìåðíîãî ìàññèâà êàê ïîñëåäîâàòåëüíîñòü</td></tr>
|
||||
<tr><td><code><b>function</b> ColsSeq<T>(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> Âîçâðàùàåò ïî çàäàííîìó äâóìåðíîìó ìàññèâó ïîñëåäîâàòåëüíîñòü èíäåêñîâ ýëåìåíòîâ, óäîâëåòâîðÿþùèõ çàäàííîìó óñëîâèþ</td></tr>
|
||||
<tr><td><code><b>function</b> Indices<T>(Self: <b>array</b> [,] <b>of</b> T; cond: (T,integer,integer) -> boolean): <b>sequence </b> <b>of</b> (integer, integer);</code>
|
||||
<br> Âîçâðàùàåò ïî çàäàííîìó äâóìåðíîìó ìàññèâó ïîñëåäîâàòåëüíîñòü èíäåêñîâ ýëåìåíòîâ, óäîâëåòâîðÿþùèõ çàäàííîìó óñëîâèþ</td></tr>
|
||||
<tr><td><code><b>function</b> MatrEqual<T>(Self,b: array[,] <b>of</b> T): boolean;</code>
|
||||
<br> Åñòü ëè ýëåìåíò â ìàòðèöå</td></tr>
|
||||
<tr><td><code><b>function</b> MatrSlice<T>(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> Âîçâðàùàåò ñðåç äâóìåðíîãî ìàññèâà. RowIndex è ColIndex çàäàþò ñðåçàåìûå ñòðîêè è ñòîëáöû</td></tr>
|
||||
<tr><td><code><b>function</b> MatrSlice<T>(Self: array[,] <b>of</b> T; FromRow, ToRow, FromCol, ToCol: integer): array[,] <b>of</b> T;</code>
|
||||
<br> Âîçâðàùàåò ñðåç äâóìåðíîãî ìàññèâà ìåæäó ñòðîêàìè FromRow, ToRow è ñòîëáöàìè FromCol, ToCol</td></tr>
|
||||
<tr><td><code><b>function</b> operator in<T>(x: T; a: array[,] <b>of</b> T): boolean;</code>
|
||||
<br> Åñòü ëè ýëåìåíò â ìàòðèöå</td></tr>
|
||||
<tr><td><code><b>function</b> Print<T>(Self: <b>array</b> [,] <b>of</b> T; w: integer := 4): <b>array</b> [,] <b>of</b> T;</code>
|
||||
<br> Âûâîä äâóìåðíîãî ìàññèâà, 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> Ìåíÿåò ñòðîêó k äâóìåðíîãî ìàññèâà íà äðóãóþ ñòðîêó</td></tr>
|
||||
<tr><td><code><b>procedure</b> SetRow<T>(Self: <b>array</b> [,] <b>of</b> T; k: integer; a: <b>sequence </b> <b>of</b> T);</code>
|
||||
<br> Ìåíÿåò ñòðîêó k äâóìåðíîãî ìàññèâà íà äðóãóþ ñòðîêó</td></tr>
|
||||
<tr><td><code><b>function</b> Size<T>(Self: <b>array</b> [,] <b>of</b> T): (integer,integer);</code>
|
||||
<br> Êîëè÷åñòâî ñòîëáöîâ â äâóìåðíîì ìàññèâå</td></tr>
|
||||
<tr><td><code><b>procedure</b> SwapCols<T>(Self: <b>array</b> [,] <b>of</b> T; k1, k2: integer);</code>
|
||||
<br> Ìåíÿåò ìåñòàìè äâà ñòîëáöà äâóìåðíîãî ìàññèâà ñ íîìåðàìè k1 è k2</td></tr>
|
||||
<tr><td><code><b>procedure</b> SwapRows<T>(Self: <b>array</b> [,] <b>of</b> T; k1, k2: integer);</code>
|
||||
|
|
|
|||
|
|
@ -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<T>(Self: <b>array</b> <b>of</b> T; eq: (T,T)->boolean; start: integer := 0): integer;</code>
|
||||
<br> Íàõîäèò ïåðâóþ ïàðó ïîäðÿä èäóùèõ îäèíàêîâûõ ýëåìåíòîâ, èñïîëüçóÿ ôóíêöèþ ñðàâíåíèÿ eq, è âîçâðàùàåò èíäåêñ ïåðâîãî ýëåìåíòà ïàðû. Åñëè íå íàéäåí, âîçâðàùàåòñÿ -1</td></tr>
|
||||
<tr><td><code><b>function</b> ArrEqual<T>(Self,b: <b>array</b> <b>of</b> T): boolean;</code>
|
||||
<br> Âîçâðàùàåò, ñîâïàäàþò ëè ìàññèâû</td></tr>
|
||||
<tr><td><code><b>function</b> BinarySearch<T>(Self: <b>array</b> <b>of</b> T; x: T): integer;</code>
|
||||
<br> Âûïîëíÿåò áèíàðíûé ïîèñê â îòñîðòèðîâàííîì ìàññèâå</td></tr>
|
||||
<tr><td><code><b>function</b> Combinations<T>(Self: <b>array</b> <b>of</b> T; m: integer): <b>sequence </b> <b>of</b> <b>array</b> <b>of</b> T;</code>
|
||||
|
|
|
|||
|
|
@ -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> Âîçâðàùàåò ìàññèâ, çàïîëíåííûé äèàïàçîíîì çíà÷åíèé</td></tr>
|
||||
<tr><td><code><b>function</b> Arr(a: CharRange): <b>array</b> <b>of</b> char;</code>
|
||||
<br> Âîçâðàùàåò ìàññèâ, çàïîëíåííûé äèàïàçîíîì çíà÷åíèé</td></tr>
|
||||
<tr><td><code><b>function</b> ArrEqual<T>(a, b: <b>array</b> <b>of</b> T): boolean;</code>
|
||||
<br> Âîçâðàùàåò, ñîâïàäàþò ëè ìàññèâû</td></tr>
|
||||
<tr><td><code><b>function</b> ArrFill<T>(count: integer; x: T): <b>array</b> <b>of</b> T;</code>
|
||||
<br> Âîçâðàùàåò ìàññèâ èç count ýëåìåíòîâ x</td></tr>
|
||||
<tr><td><code><b>function</b> ArrGen<T>(count: integer; gen: integer->T): <b>array</b> <b>of</b> T;</code>
|
||||
|
|
|
|||
|
|
@ -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> Âîçâðàùàåò äëèíó äèíàìè÷åñêîãî ìàññèâà ïî ðàçìåðíîñòè dim</td></tr>
|
||||
<tr><td><code><b>function</b> Low(a: <b>array</b> <b>of</b> T): integer;</code>
|
||||
<br> Âîçâðàùàåò 0</td></tr>
|
||||
<tr><td><code><b>function</b> MatrEqual<T>(a, b: <b>array</b> [,] <b>of</b> T): boolean;</code>
|
||||
<br> Ñðàâíèâàåò ìàòðèöû íà ðàâåíñòâî</td></tr>
|
||||
<tr><td><code><b>procedure</b> Reverse<T>(a: <b>array</b> <b>of</b> T);</code>
|
||||
<br> Èçìåíÿåò ïîðÿäîê ýëåìåíòîâ â äèíàìè÷åñêîì ìàññèâå íà ïðîòèâîïîëîæíûé</td></tr>
|
||||
<tr><td><code><b>procedure</b> Reverse<T>(a: <b>array</b> <b>of</b> T; index, count: integer);</code>
|
||||
|
|
|
|||
|
|
@ -20,10 +20,18 @@
|
|||
<br> Ãåíåðèðóåò äâóìåðíûé ìàññèâ ïî ìàññèâó ìàññèâîâ ñòîëáöîâ</td></tr>
|
||||
<tr><td><code><b>function</b> MatrByCol<T>(a: <b>sequence </b> <b>of</b> <b>array</b> <b>of</b> T): <b>array</b> [,] <b>of</b> T;</code>
|
||||
<br> Ãåíåðèðóåò äâóìåðíûé ìàññèâ ïî ïîñëåäîâàòåëüíîñòè ìàññèâîâ ñòîëáöîâ</td></tr>
|
||||
<tr><td><code><b>function</b> MatrByCol<T>(a: <b>sequence </b> <b>of</b> <b>sequence </b> <b>of</b> T): <b>array</b> [,] <b>of</b> T;</code>
|
||||
<br> Ãåíåðèðóåò äâóìåðíûé ìàññèâ ïî ïîñëåäîâàòåëüíîñòè ïîñëåäîâàòåëüíîñòåé ñòîëáöîâ</td></tr>
|
||||
<tr><td><code><b>function</b> MatrByCol<T>(m,n: integer; a: <b>sequence </b> <b>of</b> T): <b>array</b> [,] <b>of</b> T;</code>
|
||||
<br> Ãåíåðèðóåò äâóìåðíûé ìàññèâ ïî ñòîëáöàì èç ïîñëåäîâàòåëüíîñòè</td></tr>
|
||||
<tr><td><code><b>function</b> MatrByRow<T>(a: <b>array</b> <b>of</b> <b>array</b> <b>of</b> T): <b>array</b> [,] <b>of</b> T;</code>
|
||||
<br> Ãåíåðèðóåò äâóìåðíûé ìàññèâ ïî ìàññèâó ìàññèâîâ ñòðîê</td></tr>
|
||||
<tr><td><code><b>function</b> MatrByRow<T>(a: <b>sequence </b> <b>of</b> <b>array</b> <b>of</b> T): <b>array</b> [,] <b>of</b> T;</code>
|
||||
<br> Ãåíåðèðóåò äâóìåðíûé ìàññèâ ïî ïîñëåäîâàòåëüíîñòè ìàññèâîâ ñòðîê</td></tr>
|
||||
<tr><td><code><b>function</b> MatrByRow<T>(a: <b>sequence </b> <b>of</b> <b>sequence </b> <b>of</b> T): <b>array</b> [,] <b>of</b> T;</code>
|
||||
<br> Ãåíåðèðóåò äâóìåðíûé ìàññèâ ïî ïîñëåäîâàòåëüíîñòè ïîñëåäîâàòåëüíîñòåé ñòðîê</td></tr>
|
||||
<tr><td><code><b>function</b> MatrByRow<T>(m,n: integer; a: <b>sequence </b> <b>of</b> T): <b>array</b> [,] <b>of</b> T;</code>
|
||||
<br> Ãåíåðèðóåò äâóìåðíûé ìàññèâ ïî ñòðîêàì èç ïîñëåäîâàòåëüíîñòè</td></tr>
|
||||
<tr><td><code><b>function</b> MatrFill<T>(m, n: integer; x: T): <b>array</b> [,] <b>of</b> T;</code>
|
||||
<br> Âîçâðàùàåò äâóìåðíûé ìàññèâ ðàçìåðà m x n, çàïîëíåííûé ýëåìåíòàìè x</td></tr>
|
||||
<tr><td><code><b>function</b> MatrGen<T>(m, n: integer; gen: (integer,integer)->T): <b>array</b> [,] <b>of</b> T;</code>
|
||||
|
|
|
|||
|
|
@ -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> Âèäû ñèñòåìû êîîðäèíàò</td></tr>
|
||||
<tr><td><code>FontStyle = (Normal,Bold,Italic,BoldItalic);</code>
|
||||
<br> Òèï ñòèëÿ øðèôòà</td></tr>
|
||||
<tr><td><code>GBrush = System.Windows.Media.Brush;</code>
|
||||
<br> Òèï êèñòè</td></tr>
|
||||
<tr><td><code>GColor = System.Windows.Media.Color;</code>
|
||||
<br> Òèï öâåòà</td></tr>
|
||||
<tr><td><code>GPoint = System.Windows.Point;</code>
|
||||
<br> <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></td></tr>
|
||||
<br> Òèï òî÷êè</td></tr>
|
||||
<tr><td><code>GRect = System.Windows.Rect;</code>
|
||||
<br> Òèï ïðÿìîóãîëüíèêà</td></tr>
|
||||
<tr><td><code>GWindow = System.Windows.Window;</code>
|
||||
|
|
@ -34,5 +38,7 @@
|
|||
<br> Òèï êëàâèøè</td></tr>
|
||||
<tr><td><code>Point = System.Windows.Point;</code>
|
||||
<br> Òèï òî÷êè</td></tr>
|
||||
<tr><td><code>Vector = System.Windows.Vector;</code>
|
||||
<br> Òèï âåêòîðà</td></tr>
|
||||
</table>
|
||||
</body></HTML>
|
||||
|
|
@ -1 +1 @@
|
|||
3.6.3.2493
|
||||
3.6.3.2494
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
!define VERSION '3.6.3.2493'
|
||||
!define VERSION '3.6.3.2494'
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
8
TestSuite/errors/err0363_T_T.pas
Normal file
8
TestSuite/errors/err0363_T_T.pas
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
type
|
||||
T<T> = class
|
||||
public T: T;
|
||||
end;
|
||||
|
||||
begin
|
||||
|
||||
end.
|
||||
|
|
@ -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.
Loading…
Reference in a new issue