Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet
This commit is contained in:
commit
9baccc150c
|
|
@ -15,7 +15,7 @@ internal static class RevisionClass
|
||||||
public const string Major = "3";
|
public const string Major = "3";
|
||||||
public const string Minor = "8";
|
public const string Minor = "8";
|
||||||
public const string Build = "3";
|
public const string Build = "3";
|
||||||
public const string Revision = "3104";
|
public const string Revision = "3105";
|
||||||
|
|
||||||
public const string MainVersion = Major + "." + Minor;
|
public const string MainVersion = Major + "." + Minor;
|
||||||
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;
|
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
%COREVERSION%=3
|
|
||||||
%REVISION%=3104
|
|
||||||
%MINOR%=8
|
%MINOR%=8
|
||||||
|
%REVISION%=3105
|
||||||
|
%COREVERSION%=3
|
||||||
%MAJOR%=3
|
%MAJOR%=3
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ type
|
||||||
const fname = 'a.dat';
|
const fname = 'a.dat';
|
||||||
|
|
||||||
begin
|
begin
|
||||||
var m := new Node(5,new Node(3,new Node(4,nil)));
|
var m := new Node(5,new Node(3,new Node(4,nil))); // Связный список
|
||||||
Serialize(fname,m); // Сериализуем объект в файл
|
Serialize(fname,m); // Сериализуем объект в файл
|
||||||
var m1 := Deserialize(fname) as Node; // Десериализуем из файла
|
var m1 := Deserialize(fname) as Node; // Десериализуем из файла
|
||||||
Print(m1);
|
Print(m1);
|
||||||
28
InstallerSamples/StandardUnits/PlotWPF/PlotWPFExample1.pas
Normal file
28
InstallerSamples/StandardUnits/PlotWPF/PlotWPFExample1.pas
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
// пример вывода графиков разных видов
|
||||||
|
uses PlotWPF;
|
||||||
|
|
||||||
|
begin
|
||||||
|
var g := new GridWPF(2,2,10);
|
||||||
|
|
||||||
|
var c := new LineGraphWPF(0,Pi,v -> v*Sin(v*10));
|
||||||
|
c.PlotRect := Rect(0,0,10,10);
|
||||||
|
c.Graph[0].ChangeData(0,Pi,x->x*x);
|
||||||
|
c.Graph[0].Color := Colors.Green;
|
||||||
|
c.Graph[0].Thickness := 3;
|
||||||
|
c.AddLineGraph(0,Pi,v -> Sqrt(v));
|
||||||
|
|
||||||
|
var c2 := new LineGraphWPF(0,Pi,v -> Sin(v*10)-Cos(v*7));
|
||||||
|
|
||||||
|
var c4 := new MarkerGraphWPF(|1.0,2,3,4,5|,|5.0,15,7,12,2|);
|
||||||
|
c4.AddLineGraph(|1.0,2,3,4,5|,|5.0+1,15+1,7+1,12+1,2+1|);
|
||||||
|
c4.AddMarkerGraph(|1.0,2,3,4,5|,|5.0+1,15+1,7+1,12+1,2+1|,Colors.Bisque,MarkerType.Diamond,8);
|
||||||
|
c4.Graph[0].Thickness := 0.7;
|
||||||
|
c4.Graph[1].MarkerType := MarkerType.Box;
|
||||||
|
c4.Graph[2].Thickness := 0.7;
|
||||||
|
|
||||||
|
var gg := new GridWPF(2,2,3);
|
||||||
|
new LineGraphWPF(0,2,x->Cos(10*x));
|
||||||
|
new LineGraphWPF(0,2,x->Sqrt(x));
|
||||||
|
new LineGraphWPF(0,2,x->Sin(10*x));
|
||||||
|
new LineGraphWPF(0,2,x->exp(x));
|
||||||
|
end.
|
||||||
|
|
@ -1,20 +1,12 @@
|
||||||
Uses Timers;
|
uses Timers;
|
||||||
|
|
||||||
var t1, t2: Timer;
|
procedure OnTimer1 := Write('!');
|
||||||
|
|
||||||
procedure OnTimer1;
|
procedure OnTimer2 := Write('?');
|
||||||
begin
|
|
||||||
Write('!');
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure OnTimer2;
|
|
||||||
begin
|
|
||||||
Write('?');
|
|
||||||
end;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
t1 := new Timer(200, OnTimer1);
|
var t1 := new Timer(200, OnTimer1);
|
||||||
t2 := new Timer(300, OnTimer2);
|
var t2 := new Timer(300, OnTimer2);
|
||||||
t1.Start;
|
t1.Start;
|
||||||
t2.Start;
|
t2.Start;
|
||||||
Sleep(10000);
|
Sleep(10000);
|
||||||
|
|
|
||||||
|
|
@ -1,59 +1,37 @@
|
||||||
// "Собачка". Иллюстрация использования таймера.
|
// "Собачка". Иллюстрация использования таймера.
|
||||||
uses GraphABC, Timers;
|
uses GraphWPF, Timers;
|
||||||
|
|
||||||
var
|
var
|
||||||
t: Timer;
|
xx,yy,px,py: real;
|
||||||
xx,yy,px,py: integer;
|
|
||||||
|
|
||||||
procedure Draw;
|
procedure Draw;
|
||||||
begin
|
begin
|
||||||
FillCircle(xx,yy,11);
|
FillCircle(xx,yy,11);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure Show;
|
procedure TimerProc;
|
||||||
begin
|
|
||||||
Brush.Color := clBlack;
|
|
||||||
Draw;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure Hide;
|
|
||||||
begin
|
|
||||||
Brush.Color := clWhite;
|
|
||||||
Draw;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure Move(x,y: integer);
|
|
||||||
begin
|
|
||||||
Hide;
|
|
||||||
xx := x;
|
|
||||||
yy := y;
|
|
||||||
show;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure Timer1;
|
|
||||||
begin
|
begin
|
||||||
if (xx<>px) or (yy<>py) then
|
if (xx<>px) or (yy<>py) then
|
||||||
begin
|
begin
|
||||||
var t := 1/10;
|
var t := 1/10;
|
||||||
var newx := round((1-t)*xx+t*px);
|
var newx := round((1-t)*xx+t*px);
|
||||||
var newy := round((1-t)*yy+t*py);
|
var newy := round((1-t)*yy+t*py);
|
||||||
Move(newx,newy);
|
(xx,yy) := (newx,newy);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure MouseMove(x,y,mb: integer);
|
|
||||||
begin
|
begin
|
||||||
px := x; py := y;
|
Window.Title := '"Собачка"';
|
||||||
end;
|
Brush.Color := Colors.Black;
|
||||||
|
|
||||||
begin
|
|
||||||
SetWindowCaption('"Собачка"');
|
|
||||||
SetSmoothingOff;
|
|
||||||
OnMouseMove:=MouseMove;
|
|
||||||
xx := 100; yy := 100;
|
xx := 100; yy := 100;
|
||||||
px := xx; py := yy;
|
|
||||||
Show;
|
OnMouseMove := procedure(x,y,mb) -> (px,py) := (x,y);
|
||||||
Timer1;
|
|
||||||
t := new Timer(20,Timer1);
|
OnDrawFrame := dt -> begin
|
||||||
|
FillCircle(xx,yy,11);
|
||||||
|
end;
|
||||||
|
|
||||||
|
var t := new Timer(20,TimerProc);
|
||||||
t.Start;
|
t.Start;
|
||||||
end.
|
end.
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ begin
|
||||||
end;
|
end;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
Init4;
|
Init1;
|
||||||
ToPoint(x0,y0);
|
ToPoint(x0,y0);
|
||||||
SetWidth(0.5);
|
SetWidth(0.5);
|
||||||
//SetColor(Colors.Red);
|
//SetColor(Colors.Red);
|
||||||
|
|
|
||||||
53
InstallerSamples/StandardUnits/Turtle/Turtle2.pas
Normal file
53
InstallerSamples/StandardUnits/Turtle/Turtle2.pas
Normal file
|
|
@ -0,0 +1,53 @@
|
||||||
|
uses Turtle,GraphWPF;
|
||||||
|
|
||||||
|
var
|
||||||
|
Atom,FStr,XStr,YStr: string;
|
||||||
|
angle,len,x0,y0: real;
|
||||||
|
n: integer;
|
||||||
|
|
||||||
|
procedure Init1; // Dragon
|
||||||
|
begin
|
||||||
|
(Atom,FStr,XStr,YStr) := ('fx','f','x+yf+','-fx-y');
|
||||||
|
(angle,len,n,x0,y0) := (90,3,15,300,450);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure Init2; // Koch curve
|
||||||
|
begin
|
||||||
|
(Atom,FStr,XStr,YStr) := ('F', 'F-F++F-F', '', '');
|
||||||
|
(angle,len,n,x0,y0) := (60,5,7,10,550);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure Init3; // Quadratic Koch Island
|
||||||
|
begin
|
||||||
|
(Atom,FStr,XStr,YStr) := ('F+F+F+F', 'F+F-FF+F+F-F', '', '');
|
||||||
|
(angle,len,n,x0,y0) := (90,4,4,250,450);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure Init4; // Gosper hexagonal curve
|
||||||
|
begin
|
||||||
|
(Atom,FStr,XStr,YStr) := ('XF', 'F', 'X+YF++YF-FX--FXFX-YF+','-FX+YFYF++YF+FX--FX-Y');
|
||||||
|
(angle,len,n,x0,y0) := (60,4,5,580,56);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure RunStr(s: string; n: integer);
|
||||||
|
begin
|
||||||
|
foreach var c in s do
|
||||||
|
case c of
|
||||||
|
'+': Turn(angle);
|
||||||
|
'-': Turn(-angle);
|
||||||
|
'f','F': if n>0 then RunStr(FStr,n-1) else Forw(len);
|
||||||
|
'x','X': if n>0 then RunStr(XStr,n-1);
|
||||||
|
'y','Y': if n>0 then RunStr(YStr,n-1);
|
||||||
|
else Print('error')
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Init2;
|
||||||
|
ToPoint(x0,y0);
|
||||||
|
SetWidth(0.5);
|
||||||
|
//SetColor(Colors.Red);
|
||||||
|
Down;
|
||||||
|
RunStr(Atom,n);
|
||||||
|
Up;
|
||||||
|
end.
|
||||||
53
InstallerSamples/StandardUnits/Turtle/Turtle3.pas
Normal file
53
InstallerSamples/StandardUnits/Turtle/Turtle3.pas
Normal file
|
|
@ -0,0 +1,53 @@
|
||||||
|
uses Turtle,GraphWPF;
|
||||||
|
|
||||||
|
var
|
||||||
|
Atom,FStr,XStr,YStr: string;
|
||||||
|
angle,len,x0,y0: real;
|
||||||
|
n: integer;
|
||||||
|
|
||||||
|
procedure Init1; // Dragon
|
||||||
|
begin
|
||||||
|
(Atom,FStr,XStr,YStr) := ('fx','f','x+yf+','-fx-y');
|
||||||
|
(angle,len,n,x0,y0) := (90,3,15,300,450);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure Init2; // Koch curve
|
||||||
|
begin
|
||||||
|
(Atom,FStr,XStr,YStr) := ('F', 'F-F++F-F', '', '');
|
||||||
|
(angle,len,n,x0,y0) := (60,5,7,10,550);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure Init3; // Quadratic Koch Island
|
||||||
|
begin
|
||||||
|
(Atom,FStr,XStr,YStr) := ('F+F+F+F', 'F+F-FF+F+F-F', '', '');
|
||||||
|
(angle,len,n,x0,y0) := (90,4,4,250,450);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure Init4; // Gosper hexagonal curve
|
||||||
|
begin
|
||||||
|
(Atom,FStr,XStr,YStr) := ('XF', 'F', 'X+YF++YF-FX--FXFX-YF+','-FX+YFYF++YF+FX--FX-Y');
|
||||||
|
(angle,len,n,x0,y0) := (60,4,5,580,56);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure RunStr(s: string; n: integer);
|
||||||
|
begin
|
||||||
|
foreach var c in s do
|
||||||
|
case c of
|
||||||
|
'+': Turn(angle);
|
||||||
|
'-': Turn(-angle);
|
||||||
|
'f','F': if n>0 then RunStr(FStr,n-1) else Forw(len);
|
||||||
|
'x','X': if n>0 then RunStr(XStr,n-1);
|
||||||
|
'y','Y': if n>0 then RunStr(YStr,n-1);
|
||||||
|
else Print('error')
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Init3;
|
||||||
|
ToPoint(x0,y0);
|
||||||
|
SetWidth(0.5);
|
||||||
|
//SetColor(Colors.Red);
|
||||||
|
Down;
|
||||||
|
RunStr(Atom,n);
|
||||||
|
Up;
|
||||||
|
end.
|
||||||
52
InstallerSamples/StandardUnits/Turtle/Turtle4.pas
Normal file
52
InstallerSamples/StandardUnits/Turtle/Turtle4.pas
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
uses Turtle,GraphWPF;
|
||||||
|
|
||||||
|
var
|
||||||
|
Atom,FStr,XStr,YStr: string;
|
||||||
|
angle,len,x0,y0: real;
|
||||||
|
n: integer;
|
||||||
|
|
||||||
|
procedure Init1; // Dragon
|
||||||
|
begin
|
||||||
|
(Atom,FStr,XStr,YStr) := ('fx','f','x+yf+','-fx-y');
|
||||||
|
(angle,len,n,x0,y0) := (90,3,15,300,450);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure Init2; // Koch curve
|
||||||
|
begin
|
||||||
|
(Atom,FStr,XStr,YStr) := ('F', 'F-F++F-F', '', '');
|
||||||
|
(angle,len,n,x0,y0) := (60,5,7,10,550);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure Init3; // Quadratic Koch Island
|
||||||
|
begin
|
||||||
|
(Atom,FStr,XStr,YStr) := ('F+F+F+F', 'F+F-FF+F+F-F', '', '');
|
||||||
|
(angle,len,n,x0,y0) := (90,4,4,250,450);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure Init4; // Gosper hexagonal curve
|
||||||
|
begin
|
||||||
|
(Atom,FStr,XStr,YStr) := ('XF', 'F', 'X+YF++YF-FX--FXFX-YF+','-FX+YFYF++YF+FX--FX-Y');
|
||||||
|
(angle,len,n,x0,y0) := (60,4,5,580,56);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure RunStr(s: string; n: integer);
|
||||||
|
begin
|
||||||
|
foreach var c in s do
|
||||||
|
case c of
|
||||||
|
'+': Turn(angle);
|
||||||
|
'-': Turn(-angle);
|
||||||
|
'f','F': if n>0 then RunStr(FStr,n-1) else Forw(len);
|
||||||
|
'x','X': if n>0 then RunStr(XStr,n-1);
|
||||||
|
'y','Y': if n>0 then RunStr(YStr,n-1);
|
||||||
|
else Print('error')
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Init4;
|
||||||
|
ToPoint(x0,y0);
|
||||||
|
SetWidth(0.5);
|
||||||
|
Down;
|
||||||
|
RunStr(Atom,n);
|
||||||
|
Up;
|
||||||
|
end.
|
||||||
7
InstallerSamples/WhatsNew/3_7_2/AllDelimiters.pas
Normal file
7
InstallerSamples/WhatsNew/3_7_2/AllDelimiters.pas
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
// Разделитель AllDelimiters содержит все основные символы,
|
||||||
|
// которые могут служить разделителями между словами
|
||||||
|
begin
|
||||||
|
var s := '123@!45 @#$678\/|?90~;';
|
||||||
|
s.ToWords(AllDelimiters).Println;
|
||||||
|
end.
|
||||||
|
|
||||||
5
InstallerSamples/WhatsNew/3_7_2/BigIntSumProd.pas
Normal file
5
InstallerSamples/WhatsNew/3_7_2/BigIntSumProd.pas
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
// Методы .Sum, .Average и .Product для последовательности BigInteger
|
||||||
|
begin
|
||||||
|
var s := SeqGen(10,i->BigInteger(i)**i);
|
||||||
|
Print(s.Sum,s.Product,s.Average);
|
||||||
|
end.
|
||||||
5
InstallerSamples/WhatsNew/3_7_2/CountOf.pas
Normal file
5
InstallerSamples/WhatsNew/3_7_2/CountOf.pas
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
// Стандартный метод последовательности CountOf
|
||||||
|
begin
|
||||||
|
var a := Arr(1,3,5,7,1,2,1,3,1,5);
|
||||||
|
a.CountOf(1).Print;
|
||||||
|
end.
|
||||||
12
InstallerSamples/WhatsNew/3_7_2/IsIntegerReal.pas
Normal file
12
InstallerSamples/WhatsNew/3_7_2/IsIntegerReal.pas
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
// Методы строк .IsInteger и .IsReal
|
||||||
|
begin
|
||||||
|
var s := '123.4 3 5 6.6 a v 67';
|
||||||
|
var (si,sr) := (0,0.0);
|
||||||
|
foreach var w in s.ToWords do
|
||||||
|
if w.IsInteger then
|
||||||
|
si += w.ToInteger
|
||||||
|
else if w.IsReal then
|
||||||
|
sr += w.Toreal;
|
||||||
|
Print(si,sr);
|
||||||
|
end.
|
||||||
|
|
||||||
14
InstallerSamples/WhatsNew/3_7_2/PermCombCart.pas
Normal file
14
InstallerSamples/WhatsNew/3_7_2/PermCombCart.pas
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
// Все виды использования Permutations, Combinations, Cartesian
|
||||||
|
##
|
||||||
|
var a := Arr(1,3,5,7);
|
||||||
|
a.Permutations.Println;
|
||||||
|
a.Cartesian(2).Println;
|
||||||
|
a.Permutations(2).Println;
|
||||||
|
a.Combinations(2).Println;
|
||||||
|
Println;
|
||||||
|
var s := Seq(1,3,5,7);
|
||||||
|
s.Permutations.Println;
|
||||||
|
s.Cartesian(2).Println;
|
||||||
|
s.Permutations(2).Println;
|
||||||
|
s.Combinations(2).Println;
|
||||||
|
|
||||||
6
InstallerSamples/WhatsNew/3_7_2/ToWordsStrDelim.pas
Normal file
6
InstallerSamples/WhatsNew/3_7_2/ToWordsStrDelim.pas
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
// Метод строк .ToWords со строкой, содержащей разделители
|
||||||
|
begin
|
||||||
|
var s := '123.4, 6.6; 67';
|
||||||
|
s.ToWords(' ,;').PrintLines
|
||||||
|
end.
|
||||||
|
|
||||||
9
InstallerSamples/WhatsNew/3_7_2/bi.pas
Normal file
9
InstallerSamples/WhatsNew/3_7_2/bi.pas
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
// Литералы BigInteger
|
||||||
|
begin
|
||||||
|
Println(25bi ** 25 + 17bi ** 17);
|
||||||
|
|
||||||
|
var p := 1bi;
|
||||||
|
for var i:=2 to 50 do
|
||||||
|
p *= i;
|
||||||
|
Println($'50! = {p}');
|
||||||
|
end.
|
||||||
10
InstallerSamples/WhatsNew/3_7_2/ext_foreach.pas
Normal file
10
InstallerSamples/WhatsNew/3_7_2/ext_foreach.pas
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
// Расширенный foreach с распаковкой значений в переменные
|
||||||
|
begin
|
||||||
|
var a := Arr((1,2),(3,4),(5,6));
|
||||||
|
foreach var (x,y) in a do // Распаковка кортежей
|
||||||
|
Print(x,y);
|
||||||
|
Println;
|
||||||
|
var b := Arr(|1,2,3|,|4,5|,|6,7,8,9|);
|
||||||
|
foreach var (x,y) in b do // Распаковка последовательностей
|
||||||
|
Print(x,y);
|
||||||
|
end.
|
||||||
4
InstallerSamples/WhatsNew/3_7_2/usesInShortPrograms.pas
Normal file
4
InstallerSamples/WhatsNew/3_7_2/usesInShortPrograms.pas
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
// В коротких подпрограммах можно использовать подключение модулей
|
||||||
|
##
|
||||||
|
uses Graph3D;
|
||||||
|
Sphere(Origin,1);
|
||||||
14
InstallerSamples/WhatsNew/3_8_0/MultidimensionalSlices.pas
Normal file
14
InstallerSamples/WhatsNew/3_8_0/MultidimensionalSlices.pas
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
// Срезы многомерных массивов
|
||||||
|
begin
|
||||||
|
var m := MatrByRow(||1,2,3,4|,|5,6,7,8|,|9,10,11,12||);
|
||||||
|
Println(m[:,:]); // [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
|
||||||
|
Println(m[::1,::1]); // [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
|
||||||
|
Println(m[1:3,1:4]); // [[6,7,8],[10,11,12]]
|
||||||
|
Println(m[::2,::3]); // [[1,4],[9,12]]
|
||||||
|
Println(m[::-2,::-1]); // [[12,11,10,9],[4,3,2,1]]
|
||||||
|
Println(m[^2::-1,^2::-1]); // [[7,6,5],[3,2,1]]
|
||||||
|
Println(m[:^1,:^1]); // [[1,2,3],[5,6,7]]
|
||||||
|
Println(m[1,:]); // Одномерный массив [5,6,7,8]
|
||||||
|
Println(m[^1,:]); // Одномерный массив [9,10,11,12]
|
||||||
|
Println(m[:,^1]); // Одномерный массив [4,8,12]
|
||||||
|
end.
|
||||||
9
InstallerSamples/WhatsNew/3_8_0/UnpackLambdaParams.pas
Normal file
9
InstallerSamples/WhatsNew/3_8_0/UnpackLambdaParams.pas
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
// Распаковка составного параметра лямбда-выражения в переменные
|
||||||
|
begin
|
||||||
|
var s := Seq(('Умнова',16),('Иванов',23),
|
||||||
|
('Попова',17),('Козлов',24));
|
||||||
|
Println('Совершеннолетние:');
|
||||||
|
s.Where(\(name,age) -> age >= 18).Println;
|
||||||
|
Println('Сортировка по фамилии:');
|
||||||
|
s.OrderBy(\(name,age) -> name).Println;
|
||||||
|
end.
|
||||||
18
InstallerSamples/WhatsNew/3_8_1/CacheAttribute.pas
Normal file
18
InstallerSamples/WhatsNew/3_8_1/CacheAttribute.pas
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
// Результат функции кешируется в словаре
|
||||||
|
[Cache]
|
||||||
|
function fib(n: integer): integer :=
|
||||||
|
if n in 1..2 then 1
|
||||||
|
else fib(n-1) + fib(n-2);
|
||||||
|
|
||||||
|
function fib1(n: integer): integer :=
|
||||||
|
if n in 1..2 then 1
|
||||||
|
else fib1(n-1) + fib1(n-2);
|
||||||
|
|
||||||
|
begin
|
||||||
|
// Кеширование есть. Работает сотые доли секунды
|
||||||
|
Println(fib(42),MillisecondsDelta/1000);
|
||||||
|
|
||||||
|
// Кеширования нет - быстродействие катастрофически падает
|
||||||
|
// из-за многочисленных повторяющихся вычислений
|
||||||
|
Println(fib1(42),MillisecondsDelta/1000);
|
||||||
|
end.
|
||||||
4
InstallerSamples/WhatsNew/3_8_1/EachCount.pas
Normal file
4
InstallerSamples/WhatsNew/3_8_1/EachCount.pas
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
##
|
||||||
|
var s := 'каракатица так и катится';
|
||||||
|
// EachCount возвращает частотный словарь (элемент,количество)
|
||||||
|
s.EachCount.Println
|
||||||
5
InstallerSamples/WhatsNew/3_8_1/FunInShortPrograms.pas
Normal file
5
InstallerSamples/WhatsNew/3_8_1/FunInShortPrograms.pas
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
##
|
||||||
|
// В коротких программах можно описывать подпрограммы
|
||||||
|
function Add(a,b: integer) := a + b;
|
||||||
|
|
||||||
|
Print(Add(2,3));
|
||||||
7
InstallerSamples/WhatsNew/3_8_1/LambdaBodyAssignment.pas
Normal file
7
InstallerSamples/WhatsNew/3_8_1/LambdaBodyAssignment.pas
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
begin
|
||||||
|
var f: procedure(x: integer);
|
||||||
|
var sum := 0;
|
||||||
|
f := x -> begin sum += x end; // ранее
|
||||||
|
f := x -> (sum += x); // сейчас
|
||||||
|
// f := x -> sum += x; // ошибка компиляции
|
||||||
|
end.
|
||||||
28
InstallerSamples/WhatsNew/3_8_1/PlotWPFExample1.pas
Normal file
28
InstallerSamples/WhatsNew/3_8_1/PlotWPFExample1.pas
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
// пример вывода графиков разных видов
|
||||||
|
uses PlotWPF;
|
||||||
|
|
||||||
|
begin
|
||||||
|
var g := new GridWPF(2,2,10);
|
||||||
|
|
||||||
|
var c := new LineGraphWPF(0,Pi,v -> v*Sin(v*10));
|
||||||
|
c.PlotRect := Rect(0,0,10,10);
|
||||||
|
c.Graph[0].ChangeData(0,Pi,x->x*x);
|
||||||
|
c.Graph[0].Color := Colors.Green;
|
||||||
|
c.Graph[0].Thickness := 3;
|
||||||
|
c.AddLineGraph(0,Pi,v -> Sqrt(v));
|
||||||
|
|
||||||
|
var c2 := new LineGraphWPF(0,Pi,v -> Sin(v*10)-Cos(v*7));
|
||||||
|
|
||||||
|
var c4 := new MarkerGraphWPF(|1.0,2,3,4,5|,|5.0,15,7,12,2|);
|
||||||
|
c4.AddLineGraph(|1.0,2,3,4,5|,|5.0+1,15+1,7+1,12+1,2+1|);
|
||||||
|
c4.AddMarkerGraph(|1.0,2,3,4,5|,|5.0+1,15+1,7+1,12+1,2+1|,Colors.Bisque,MarkerType.Diamond,8);
|
||||||
|
c4.Graph[0].Thickness := 0.7;
|
||||||
|
c4.Graph[1].MarkerType := MarkerType.Box;
|
||||||
|
c4.Graph[2].Thickness := 0.7;
|
||||||
|
|
||||||
|
var gg := new GridWPF(2,2,3);
|
||||||
|
new LineGraphWPF(0,2,x->Cos(10*x));
|
||||||
|
new LineGraphWPF(0,2,x->Sqrt(x));
|
||||||
|
new LineGraphWPF(0,2,x->Sin(10*x));
|
||||||
|
new LineGraphWPF(0,2,x->exp(x));
|
||||||
|
end.
|
||||||
10
InstallerSamples/WhatsNew/3_8_1/SortKeyProjection.pas
Normal file
10
InstallerSamples/WhatsNew/3_8_1/SortKeyProjection.pas
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
begin
|
||||||
|
var pp := |('Сидоров',21),('Петров',23), ('Попов',20),('Иванов',22)|;
|
||||||
|
// Сортировка с проекцией на ключ
|
||||||
|
Sort(pp, p->p[0]);
|
||||||
|
Println('По фамилии');
|
||||||
|
pp.Println;
|
||||||
|
Sort(pp, p->p[1]);
|
||||||
|
Println('По возрасту');
|
||||||
|
pp.Println;
|
||||||
|
end.
|
||||||
5
InstallerSamples/WhatsNew/3_8_1/UnpackValueTuple.pas
Normal file
5
InstallerSamples/WhatsNew/3_8_1/UnpackValueTuple.pas
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
begin
|
||||||
|
// Можно распаковывать также тип System.ValueTuple
|
||||||
|
var (n,s) := System.ValueTuple.Create(2,'ab');
|
||||||
|
Print(n,s);
|
||||||
|
end.
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
{$zerobasedstrings}
|
||||||
|
begin
|
||||||
|
// Директива воздействует на доступ по индексу и на срезы
|
||||||
|
// Директива глобальна и распространяется на весь файл
|
||||||
|
var s := '0123456789';
|
||||||
|
Println(s[0:5],s[5:8],s[8:]); // 01234 567 89
|
||||||
|
// Директива НЕ воздействует на доступ по индексу с конца
|
||||||
|
Print(s[^1]);
|
||||||
|
end.
|
||||||
|
|
||||||
4
InstallerSamples/WhatsNew/3_8_2/CastRealToInteger.pas
Normal file
4
InstallerSamples/WhatsNew/3_8_2/CastRealToInteger.pas
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
begin
|
||||||
|
var i: integer := integer(2.7); // Аналогично Trunc, но гораздо эффективнее
|
||||||
|
Print(i);
|
||||||
|
end.
|
||||||
5
InstallerSamples/WhatsNew/3_8_2/NotIn.pas
Normal file
5
InstallerSamples/WhatsNew/3_8_2/NotIn.pas
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
begin
|
||||||
|
var a := Arr(1,3,5);
|
||||||
|
if 4 not in a then
|
||||||
|
Print('4 not in ' + a.JoinToString(','));
|
||||||
|
end.
|
||||||
7
InstallerSamples/WhatsNew/3_8_2/PartialSum.pas
Normal file
7
InstallerSamples/WhatsNew/3_8_2/PartialSum.pas
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
begin
|
||||||
|
var a := Arr(1..10);
|
||||||
|
a.Println;
|
||||||
|
var ps := a.PartialSum;
|
||||||
|
ps.Println;
|
||||||
|
ps.Incremental.Println; // Incremental - "почти" обратная к PartialSum
|
||||||
|
end.
|
||||||
5
InstallerSamples/WhatsNew/3_8_2/RandomDiap.pas
Normal file
5
InstallerSamples/WhatsNew/3_8_2/RandomDiap.pas
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
begin
|
||||||
|
Random(1..9).Println;
|
||||||
|
Random(1.0..2.0).Println;
|
||||||
|
Random('a'..'z').Println;
|
||||||
|
end.
|
||||||
|
|
@ -1 +1 @@
|
||||||
3.8.3.3104
|
3.8.3.3105
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
!define VERSION '3.8.3.3104'
|
!define VERSION '3.8.3.3105'
|
||||||
|
|
|
||||||
|
|
@ -1864,10 +1864,15 @@ begin
|
||||||
var dc := myvis.RenderOpen;
|
var dc := myvis.RenderOpen;
|
||||||
var r := Rect(0,0,Window.Width,Window.Height);
|
var r := Rect(0,0,Window.Width,Window.Height);
|
||||||
var mm := (canvas as MyVisualHost).RenderTransform.Value;
|
var mm := (canvas as MyVisualHost).RenderTransform.Value;
|
||||||
|
var m1 := mm;
|
||||||
mm.Invert;
|
mm.Invert;
|
||||||
r.Transform(mm);
|
r.Transform(mm);
|
||||||
dc.DrawRectangle(Brushes.White,nil,r);
|
dc.DrawRectangle(Brushes.White,nil,r);
|
||||||
var rr := Rect(0,0,rtbmap.Width,rtbmap.Height);
|
|
||||||
|
var rr: GRect;
|
||||||
|
if CurrentCoordType = MathematicalCoords then
|
||||||
|
rr := Rect(r.Left,r.Top,rtbmap.Width/m1.M11,rtbmap.Height/-m1.M22)
|
||||||
|
else rr := Rect(0,0,rtbmap.Width,rtbmap.Height);
|
||||||
dc.DrawImage(rtbmap,rr);
|
dc.DrawImage(rtbmap,rr);
|
||||||
dc.Close;
|
dc.Close;
|
||||||
(canvas as MyVisualHost).children.Insert(0,myvis);
|
(canvas as MyVisualHost).children.Insert(0,myvis);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue