From 357048de07b9d6d40e4f6b64ce382471badf4a74 Mon Sep 17 00:00:00 2001 From: Mikhalkovich Stanislav Date: Tue, 3 Feb 2026 11:22:00 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BD=D0=B5=D1=81=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D1=80=D1=8B=20=D0=B2=20WhatsNew?= =?UTF-8?q?=203.11?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WhatsNew/3_11_0/ArrInitWithEmpty.pas | 9 ++++++++ InstallerSamples/WhatsNew/3_11_0/InRange.pas | 12 ++++++++++ .../WhatsNew/3_11_0/IsOrdered1.pas | 23 +++++++++++++++++++ .../WhatsNew/3_11_0/UnpackKeyValuePair.pas | 7 ++++++ .../WhatsNew/3_11_0/exit_param1.pas | 8 +++++++ .../WhatsNew/3_11_0/exit_param2.pas | 13 +++++++++++ .../WhatsNew/3_11_0/exit_param3.pas | 12 ++++++++++ .../WhatsNew/3_11_0/exit_param4.pas | 15 ++++++++++++ 8 files changed, 99 insertions(+) create mode 100644 InstallerSamples/WhatsNew/3_11_0/ArrInitWithEmpty.pas create mode 100644 InstallerSamples/WhatsNew/3_11_0/InRange.pas create mode 100644 InstallerSamples/WhatsNew/3_11_0/IsOrdered1.pas create mode 100644 InstallerSamples/WhatsNew/3_11_0/UnpackKeyValuePair.pas create mode 100644 InstallerSamples/WhatsNew/3_11_0/exit_param1.pas create mode 100644 InstallerSamples/WhatsNew/3_11_0/exit_param2.pas create mode 100644 InstallerSamples/WhatsNew/3_11_0/exit_param3.pas create mode 100644 InstallerSamples/WhatsNew/3_11_0/exit_param4.pas diff --git a/InstallerSamples/WhatsNew/3_11_0/ArrInitWithEmpty.pas b/InstallerSamples/WhatsNew/3_11_0/ArrInitWithEmpty.pas new file mode 100644 index 000000000..0e4fc30c7 --- /dev/null +++ b/InstallerSamples/WhatsNew/3_11_0/ArrInitWithEmpty.pas @@ -0,0 +1,9 @@ +// Уточнение инициализации элемента массива пустой коллекцией +begin + var a: array of array of integer := [[],[],[1]]; + Println(a,TypeName(a)); + var b := [[],[1],[]]; + Println(b,TypeName(b)); + var aa: array of array of array of integer := [[[],[2]],[]]; + Print(aa,TypeName(aa)); +end. \ No newline at end of file diff --git a/InstallerSamples/WhatsNew/3_11_0/InRange.pas b/InstallerSamples/WhatsNew/3_11_0/InRange.pas new file mode 100644 index 000000000..bae4f2d17 --- /dev/null +++ b/InstallerSamples/WhatsNew/3_11_0/InRange.pas @@ -0,0 +1,12 @@ +begin + // Поведение изменено!! Теперь диапазон [6,2] считается пустым + 5.InRange(6,2).Println; + + // Универсальная InRange. Должен поддерживаться интерфейс IComparable + InRange(5,2,6).Println; + + var dt1 := DateTime.Create(2025,04,16); + var dt2 := DateTime.Create(2025,04,29); + var dt3 := DateTime.Now; + InRange(dt2,dt1,dt3).Println; +end. \ No newline at end of file diff --git a/InstallerSamples/WhatsNew/3_11_0/IsOrdered1.pas b/InstallerSamples/WhatsNew/3_11_0/IsOrdered1.pas new file mode 100644 index 000000000..c7890adf8 --- /dev/null +++ b/InstallerSamples/WhatsNew/3_11_0/IsOrdered1.pas @@ -0,0 +1,23 @@ +type + Player = auto class + Name: string; Points: integer; + end; + +function GetPlayers := [ + new Player('Alice', 120), + new Player('Bob', 95), + new Player('Charlie', 130), + new Player('Diana', 110) +]; + +begin + var leaderboard := GetPlayers; + Println(leaderboard); + if not leaderboard.IsOrderedByDescending(p -> p.Points) then + Println('Рейтинг составлен неверно!'); + + leaderboard := leaderboard.OrderByDescending(p -> p.Points).ToArray; + Println(leaderboard); + if leaderboard.IsOrderedByDescending(p -> p.Points) then + Println('Теперь рейтинг составлен верно!'); +end. \ No newline at end of file diff --git a/InstallerSamples/WhatsNew/3_11_0/UnpackKeyValuePair.pas b/InstallerSamples/WhatsNew/3_11_0/UnpackKeyValuePair.pas new file mode 100644 index 000000000..a7296a068 --- /dev/null +++ b/InstallerSamples/WhatsNew/3_11_0/UnpackKeyValuePair.pas @@ -0,0 +1,7 @@ +begin + var t := 2 to 3.5; + var (a,b) := t; + Println(a,b); + foreach var (a1,b1) in Dict(1 to 7, 22 to 555) do + Println(a1,b1); +end. \ No newline at end of file diff --git a/InstallerSamples/WhatsNew/3_11_0/exit_param1.pas b/InstallerSamples/WhatsNew/3_11_0/exit_param1.pas new file mode 100644 index 000000000..b80388847 --- /dev/null +++ b/InstallerSamples/WhatsNew/3_11_0/exit_param1.pas @@ -0,0 +1,8 @@ +function fff: integer; +begin + exit(3) +end; + +begin + Print(fff()); +end. \ No newline at end of file diff --git a/InstallerSamples/WhatsNew/3_11_0/exit_param2.pas b/InstallerSamples/WhatsNew/3_11_0/exit_param2.pas new file mode 100644 index 000000000..e6d8401d4 --- /dev/null +++ b/InstallerSamples/WhatsNew/3_11_0/exit_param2.pas @@ -0,0 +1,13 @@ +function IsPrime(n: integer): boolean; +begin + if n < 2 then exit(False); + for var i:=2 to n.Sqrt.Trunc do + if n.Divs(i) then + exit(False); + exit(True); +end; + +begin + IsPrime(17).Print; + IsPrime(1).Print; +end. diff --git a/InstallerSamples/WhatsNew/3_11_0/exit_param3.pas b/InstallerSamples/WhatsNew/3_11_0/exit_param3.pas new file mode 100644 index 000000000..0829699b2 --- /dev/null +++ b/InstallerSamples/WhatsNew/3_11_0/exit_param3.pas @@ -0,0 +1,12 @@ +begin + var IsPrime: integer → boolean := n → begin + if n < 2 then exit(False); + for var i:=2 to n.Sqrt.Trunc do + if n.Divs(i) then + exit(False); + exit(True); + end; + + IsPrime(17).Print; + IsPrime(1).Print; +end. diff --git a/InstallerSamples/WhatsNew/3_11_0/exit_param4.pas b/InstallerSamples/WhatsNew/3_11_0/exit_param4.pas new file mode 100644 index 000000000..ba17ecf39 --- /dev/null +++ b/InstallerSamples/WhatsNew/3_11_0/exit_param4.pas @@ -0,0 +1,15 @@ +function FastPower(a: real; n: integer): real; +begin + if n = 0 then exit(1); // a^0 = 1 + if n = 1 then exit(a); // a^1 = a + if n < 0 then exit(1 / FastPower(a, -n)); // отрицательная степень + + var half := FastPower(a, n div 2); + if n mod 2 = 0 then exit(half * half); // чётная степень + exit(half * half * a); // нечётная +end; + +begin + Writeln('2^10 = ', FastPower(2, 10)); // 1024 + Writeln('3^-2 = ', FastPower(3, -2)); // 0.111... +end. \ No newline at end of file