From 0e4e812835016d03e362133e0c4b7ef434344c8b Mon Sep 17 00:00:00 2001 From: Mikhalkovich Stanislav Date: Thu, 16 Apr 2020 20:10:58 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=B8=D0=BD=D1=81=D1=82=D0=B0=D0=BB=D0=BB=D1=8F?= =?UTF-8?q?=D1=82=D0=BE=D0=B2=20-=20=D1=83=D0=B1=D1=80=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=20Full=20pack=20-=20=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20sta?= =?UTF-8?q?ndardpack=20=D0=B2=D0=BA=D0=BB=D1=8E=D1=87=D0=B0=D0=B5=D1=82=20?= =?UTF-8?q?=D0=B0=D0=B2=D1=82=D0=BE=D0=BC=D0=B0=D1=82=D0=B8=D1=87=D0=B5?= =?UTF-8?q?=D1=81=D0=BA=D0=BE=D0=B5=20=D1=81=D0=BA=D0=B0=D1=87=D0=B8=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=B8?= =?UTF-8?q?=20.NET=20=D0=B5=D1=81=D0=BB=D0=B8=20=D1=8D=D1=82=D0=BE=20?= =?UTF-8?q?=D0=BD=D0=B5=D0=BE=D0=B1=D1=85=D0=BE=D0=B4=D0=B8=D0=BC=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Configuration/GlobalAssemblyInfo.cs | 2 +- Configuration/Version.defs | 4 +- Release/pabcversion.txt | 2 +- ReleaseGenerators/DotNet40.nsh | 37 +- ReleaseGenerators/DotNet47.nsh | 27 +- ReleaseGenerators/DotNetChecker.nsh | 26 +- ReleaseGenerators/PascalABCNETStandart.nsi | 2 + ReleaseGenerators/PascalABCNETWithDotNet.nsi | 3 +- .../PascalABCNETWithDotNet40.nsi | 3 +- ReleaseGenerators/PascalABCNET_ALL.bat | 5 +- ReleaseGenerators/PascalABCNET_version.nsh | 2 +- ReleaseGenerators/RebuildStandartModules.pas | 2 +- ReleaseGenerators/sect_Core.nsh | 11 + ReleaseGenerators/sect_VisualPABCNET.nsh | 4 +- TestSuite/PlusIfOp.pas | 2 +- Utils/NSIS/Plugins/DotNetChecker.dll | Bin 0 -> 86528 bytes bin/Lib/School.pas | 377 ++++++++++++++++++ 17 files changed, 450 insertions(+), 59 deletions(-) create mode 100644 Utils/NSIS/Plugins/DotNetChecker.dll create mode 100644 bin/Lib/School.pas diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs index e74c637f2..008cca7ec 100644 --- a/Configuration/GlobalAssemblyInfo.cs +++ b/Configuration/GlobalAssemblyInfo.cs @@ -15,7 +15,7 @@ internal static class RevisionClass public const string Major = "3"; public const string Minor = "6"; public const string Build = "2"; - public const string Revision = "2403"; + public const string Revision = "2414"; public const string MainVersion = Major + "." + Minor; public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision; diff --git a/Configuration/Version.defs b/Configuration/Version.defs index 4d5321a0d..0a285f104 100644 --- a/Configuration/Version.defs +++ b/Configuration/Version.defs @@ -1,4 +1,4 @@ -%MINOR%=6 -%REVISION%=2403 %COREVERSION%=2 +%REVISION%=2414 +%MINOR%=6 %MAJOR%=3 diff --git a/Release/pabcversion.txt b/Release/pabcversion.txt index 95713ea0b..814282acf 100644 --- a/Release/pabcversion.txt +++ b/Release/pabcversion.txt @@ -1 +1 @@ -3.6.2.2403 +3.6.2.2414 diff --git a/ReleaseGenerators/DotNet40.nsh b/ReleaseGenerators/DotNet40.nsh index 52f7a9e88..78b61eaee 100644 --- a/ReleaseGenerators/DotNet40.nsh +++ b/ReleaseGenerators/DotNet40.nsh @@ -5,26 +5,23 @@ SectionGroup "Microsoft .NET Framework" _DOTNET Section "Microsoft .NET Framework 4.0" Framework SectionIn 1 2 -; IfFileExists "$WINDIR\Microsoft.NET\Framework\v2.0.50727\System.dll" +3 0 -; MessageBox MB_YESNO "Для работы компилятора необходима платформа Microsoft .NET версии 2.0 либо выше. Установить платформу Microsoft .NET Framework 2.0?" IDYES insalldotnet -; Goto notinsalldotnet -; Goto dotnetinstalled - IfFileExists "$WINDIR\Microsoft.NET\Framework\v4.0.30319\System.dll" 0 +2 - ;ReadRegDWORD $1 HKLM "Software\Microsoft\NET Framework Setup\NDP\v2.0.50727" "SP" - ;IntCmp $1 2 dotnetinstalled installdotnet dotnetinstalled - Goto dotnetinstalled - installdotnet: - SetOutPath "$INSTDIR" - File "DotNet40\${WindowsInstallerPath}" - ExecWait '"$INSTDIR\${WindowsInstallerPath}" /Quiet /Norestart' - Delete "$INSTDIR\${WindowsInstallerPath}" - File "DotNet40\${DotNet}" - ExecWait '"$INSTDIR\${DotNet}" /Q' - Delete "$INSTDIR\${DotNet}" - Goto exit - dotnetinstalled: - ;MessageBox MB_OK "Платформа Microsoft .NET версии 4.0 уже установлена на этом компьютере." - exit: +!insertmacro CheckNetFramework 40Full +; IfFileExists "$WINDIR\Microsoft.NET\Framework\v4.0.30319\System.dll" 0 +2 +; ;ReadRegDWORD $1 HKLM "Software\Microsoft\NET Framework Setup\NDP\v2.0.50727" "SP" +; ;IntCmp $1 2 dotnetinstalled installdotnet dotnetinstalled +; Goto dotnetinstalled +; installdotnet: +; SetOutPath "$INSTDIR" +; File "DotNet40\${WindowsInstallerPath}" +; ExecWait '"$INSTDIR\${WindowsInstallerPath}" /Quiet /Norestart' +; Delete "$INSTDIR\${WindowsInstallerPath}" +; File "DotNet40\${DotNet}" +; ExecWait '"$INSTDIR\${DotNet}" /Q' +; Delete "$INSTDIR\${DotNet}" +; Goto exit +; dotnetinstalled: +; ;MessageBox MB_OK "Платформа Microsoft .NET версии 4.0 уже установлена на этом компьютере." +; exit: SectionEnd Section "Russian Language Pack" LangPack SectionIn 1 diff --git a/ReleaseGenerators/DotNet47.nsh b/ReleaseGenerators/DotNet47.nsh index 21919569b..e52a30629 100644 --- a/ReleaseGenerators/DotNet47.nsh +++ b/ReleaseGenerators/DotNet47.nsh @@ -3,19 +3,20 @@ SectionGroup "Microsoft .NET Framework" _DOTNET Section "Microsoft .NET Framework 4.7" Framework SectionIn 1 2 - IfFileExists "$WINDIR\Microsoft.NET\Framework\v4.0.30319\System.dll" 0 +2 - ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" "Release" - IntCmp $1 460805 dotnetinstalled installdotnet dotnetinstalled - Goto dotnetinstalled - installdotnet: - SetOutPath "$INSTDIR" - File "DotNet471\${DotNet}" - ExecWait '"$INSTDIR\${DotNet}" /Q' - Delete "$INSTDIR\${DotNet}" - Goto exit - dotnetinstalled: - ;MessageBox MB_OK "Платформа Microsoft .NET версии 4.0 уже установлена на этом компьютере." - exit: + !insertmacro CheckNetFramework 471 +; IfFileExists "$WINDIR\Microsoft.NET\Framework\v4.0.30319\System.dll" 0 +2 +; ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" "Release" +; IntCmp $1 460805 dotnetinstalled installdotnet dotnetinstalled +; Goto dotnetinstalled +; installdotnet: +; SetOutPath "$INSTDIR" +; File "DotNet471\${DotNet}" +; ExecWait '"$INSTDIR\${DotNet}" /Q' +; Delete "$INSTDIR\${DotNet}" +; Goto exit +; dotnetinstalled: +; ;MessageBox MB_OK "Платформа Microsoft .NET версии 4.7.1 уже установлена на этом компьютере." +; exit: SectionEnd Section "Framework Class Library Help" FrameworkHelp SectionIn 1 diff --git a/ReleaseGenerators/DotNetChecker.nsh b/ReleaseGenerators/DotNetChecker.nsh index 34ef1a636..4c6ad98a6 100644 --- a/ReleaseGenerators/DotNetChecker.nsh +++ b/ReleaseGenerators/DotNetChecker.nsh @@ -71,7 +71,7 @@ StrCpy $dotNetReadableVersion${FrameworkVersion} "1.0" ${EndIf} - DetailPrint "Checking .NET Framework version..." + DetailPrint "Проверка версии .NET Framework..." Push $0 Push $1 @@ -87,48 +87,48 @@ ${If} $0 == "false" ${OrIf} $0 == "f" ; if script is compiled in ANSI mode then we get only an "f" https://github.com/ReVolly/NsisDotNetChecker/issues/4 - DetailPrint ".NET Framework $dotNetReadableVersion${FrameworkVersion} not found, download is required for program to run." + DetailPrint ".NET Framework $dotNetReadableVersion${FrameworkVersion} не найдена, требуется установить перед инсталляцией PascalABC.NET." Goto NoDotNET${FrameworkVersion} ${Else} - DetailPrint ".NET Framework $dotNetReadableVersion${FrameworkVersion} found, no need to install." + DetailPrint ".NET Framework $dotNetReadableVersion${FrameworkVersion} найдена, нет необходимости инсталлировать." Goto NewDotNET${FrameworkVersion} ${EndIf} NoDotNET${FrameworkVersion}: MessageBox MB_YESNOCANCEL|MB_ICONEXCLAMATION \ - ".NET Framework not installed. Required version: $dotNetReadableVersion${FrameworkVersion}.$\nDownload .NET Framework $dotNetReadableVersion${FrameworkVersion} from microsoft.com?" \ + ".NET Framework не установлена. Требуемая версия: $dotNetReadableVersion${FrameworkVersion}.$\nЗагрузить .NET Framework $dotNetReadableVersion${FrameworkVersion} с microsoft.com?" \ /SD IDYES IDYES DownloadDotNET${FrameworkVersion} IDNO NewDotNET${FrameworkVersion} goto GiveUpDotNET${FrameworkVersion} ;IDCANCEL DownloadDotNET${FrameworkVersion}: - DetailPrint "Beginning download of .NET Framework $dotNetReadableVersion${FrameworkVersion}." + DetailPrint "Начало скачивания .NET Framework $dotNetReadableVersion${FrameworkVersion}." NSISDL::download $dotNetUrl${FrameworkVersion} "$TEMP\dotnetfx.exe" - DetailPrint "Completed download." + DetailPrint "Скачивание окончено." Pop $0 ${If} $0 == "cancel" MessageBox MB_YESNO|MB_ICONEXCLAMATION \ - "Download canceled. Continue Installation?" \ + "Скачивание отменено. Продолжить инсталляцию?" \ IDYES NewDotNET${FrameworkVersion} IDNO GiveUpDotNET${FrameworkVersion} ${ElseIf} $0 != "success" MessageBox MB_YESNO|MB_ICONEXCLAMATION \ - "Download failed:$\n$0$\n$\nContinue Installation?" \ + "Скачивание завершилось неудачей:$\n$0$\n$\nПродолжить инсталляцию?" \ IDYES NewDotNET${FrameworkVersion} IDNO GiveUpDotNET${FrameworkVersion} ${EndIf} - DetailPrint "Pausing installation while downloaded .NET Framework installer runs." + DetailPrint "Пауза инсталляции PascalABC.NET пока запущен инсталлятор .NET Framework." ExecWait '$TEMP\dotnetfx.exe /q /c:"install /q"' - DetailPrint "Completed .NET Framework install/update. Removing .NET Framework installer." + DetailPrint "Завершена инсталляция .NET Framework. Удаляется .NET Framework инсталлятор." Delete "$TEMP\dotnetfx.exe" - DetailPrint ".NET Framework installer removed." + DetailPrint ".NET Framework инсталлятор удалён." goto NewDotNet${FrameworkVersion} GiveUpDotNET${FrameworkVersion}: - Abort "Installation canceled by user." + Abort "Инсталляция прервана пользователем." NewDotNET${FrameworkVersion}: - DetailPrint "Proceeding with remainder of installation." + DetailPrint "Переход к оставшейся части установки." Pop $7 Pop $6 Pop $5 diff --git a/ReleaseGenerators/PascalABCNETStandart.nsi b/ReleaseGenerators/PascalABCNETStandart.nsi index 235421773..bc1629d31 100644 --- a/ReleaseGenerators/PascalABCNETStandart.nsi +++ b/ReleaseGenerators/PascalABCNETStandart.nsi @@ -1,6 +1,8 @@ SetCompressor /SOLID lzma OutFile "..\Release\PascalABCNETSetup.exe" !include PascalABCNET_head.nsh +!include DotNetChecker.nsh +!include DotNet47.nsh !include PascalABCNET_sections.nsh !include PascalABCNET_end.nsh !include "nsProcess.nsh" diff --git a/ReleaseGenerators/PascalABCNETWithDotNet.nsi b/ReleaseGenerators/PascalABCNETWithDotNet.nsi index b87b8f665..b2af3dd21 100644 --- a/ReleaseGenerators/PascalABCNETWithDotNet.nsi +++ b/ReleaseGenerators/PascalABCNETWithDotNet.nsi @@ -1,6 +1,7 @@ -SetCompressor bzip2 +SetCompressor /SOLID lzma OutFile "..\Release\PascalABCNETWithDotNetSetup.exe" !include PascalABCNET_head.nsh +!include DotNetChecker.nsh !include DotNet47.nsh ;!include DotNetHelp.nsh !include PascalABCNET_sections.nsh diff --git a/ReleaseGenerators/PascalABCNETWithDotNet40.nsi b/ReleaseGenerators/PascalABCNETWithDotNet40.nsi index 2ae198eda..bb1a8f971 100644 --- a/ReleaseGenerators/PascalABCNETWithDotNet40.nsi +++ b/ReleaseGenerators/PascalABCNETWithDotNet40.nsi @@ -1,6 +1,7 @@ -SetCompressor bzip2 +SetCompressor /SOLID lzma OutFile "..\Release\PascalABCNETWithDotNet40Setup.exe" !include PascalABCNET_head.nsh +!include DotNetChecker.nsh !include DotNet40.nsh ;!include DotNetHelp.nsh !include PascalABCNET_sections.nsh diff --git a/ReleaseGenerators/PascalABCNET_ALL.bat b/ReleaseGenerators/PascalABCNET_ALL.bat index 08da77e81..b56fcaf6a 100644 --- a/ReleaseGenerators/PascalABCNET_ALL.bat +++ b/ReleaseGenerators/PascalABCNET_ALL.bat @@ -1,5 +1,6 @@ "..\utils\NSIS\Unicode\makensis.exe" PascalABCNETMini.nsi "..\utils\NSIS\Unicode\makensis.exe" PascalABCNETStandart.nsi -"..\utils\NSIS\Unicode\makensis.exe" PascalABCNETWithDotNet.nsi +copy ..\Release\PascalABCNETSetup.exe ..\Release\PascalABCNETWithDotNetSetup.exe +rem "..\utils\NSIS\Unicode\makensis.exe" PascalABCNETWithDotNet.nsi PascalABCNETConsoleZIP.bat -PascalABCNETMonoZIP.bat \ No newline at end of file +rem PascalABCNETMonoZIP.bat \ No newline at end of file diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh index b9544234a..983a01b35 100644 --- a/ReleaseGenerators/PascalABCNET_version.nsh +++ b/ReleaseGenerators/PascalABCNET_version.nsh @@ -1 +1 @@ -!define VERSION '3.6.2.2403' +!define VERSION '3.6.2.2414' diff --git a/ReleaseGenerators/RebuildStandartModules.pas b/ReleaseGenerators/RebuildStandartModules.pas index d09c24b0d..52d5c5b3e 100644 --- a/ReleaseGenerators/RebuildStandartModules.pas +++ b/ReleaseGenerators/RebuildStandartModules.pas @@ -15,7 +15,7 @@ ABCDatabases,BlockFileOfT,Controls, OpenCL, OpenCLABC, OpenGL, OpenGLABC, - BBCMicroBit + BBCMicroBit, School, SF ; begin diff --git a/ReleaseGenerators/sect_Core.nsh b/ReleaseGenerators/sect_Core.nsh index d6d3fa6af..c85d2b535 100644 --- a/ReleaseGenerators/sect_Core.nsh +++ b/ReleaseGenerators/sect_Core.nsh @@ -132,6 +132,8 @@ File ..\bin\Lib\OpenCLABC.pcu File ..\bin\Lib\OpenGL.pcu File ..\bin\Lib\OpenGLABC.pcu + File ..\bin\Lib\School.pcu + File ..\bin\Lib\SF.pcu File ..\bin\Lib\PABCRtl.dll File ..\bin\Lib\HelixToolkit.Wpf.dll @@ -198,6 +200,9 @@ ${AddFile} "OpenCLABC.pcu" ${AddFile} "OpenGL.pcu" ${AddFile} "OpenGLABC.pcu" + ${AddFile} "School.pcu" + ${AddFile} "SF.pcu" + ${AddFile} "PABCRtl.dll" ${AddFile} "HelixToolkit.Wpf.dll" ${AddFile} "HelixToolkit.dll" @@ -274,6 +279,9 @@ File ..\bin\Lib\OpenCLABC.pas File ..\bin\Lib\OpenGL.pas File ..\bin\Lib\OpenGLABC.pas + File ..\bin\Lib\School.pas + File ..\bin\Lib\SF.pas + File ..\bin\Lib\__RedirectIOMode.vb File ..\bin\Lib\VBSystem.vb @@ -336,6 +344,9 @@ ${AddFile} "OpenCLABC.pas" ${AddFile} "OpenGL.pas" ${AddFile} "OpenGLABC.pas" + ${AddFile} "School.pas" + ${AddFile} "SF.pas" + ${AddFile} "__RedirectIOMode.vb" ${AddFile} "VBSystem.vb" diff --git a/ReleaseGenerators/sect_VisualPABCNET.nsh b/ReleaseGenerators/sect_VisualPABCNET.nsh index adce630e3..7241ce4a3 100644 --- a/ReleaseGenerators/sect_VisualPABCNET.nsh +++ b/ReleaseGenerators/sect_VisualPABCNET.nsh @@ -17,7 +17,7 @@ File "..\bin\samples.pct" File "..\bin\school.pct" File "..\bin\Pause.exe" - File "..\bin\nuget.exe" + ;File "..\bin\nuget.exe" File "..\bin\FormatterOptions.ini" File "..\bin\ProgrammRunner.exe" File "..\bin\pabcworknet.ini" @@ -39,7 +39,7 @@ ${AddFile} "samples.pct" ${AddFile} "school.pct" ${AddFile} "Pause.exe" - ${AddFile} "nuget.exe" + ;${AddFile} "nuget.exe" ${AddFile} "FormatterOptions.ini" ${AddFile} "ProgrammRunner.exe" diff --git a/TestSuite/PlusIfOp.pas b/TestSuite/PlusIfOp.pas index 08557bdb4..c270de3a3 100644 --- a/TestSuite/PlusIfOp.pas +++ b/TestSuite/PlusIfOp.pas @@ -1,5 +1,5 @@ begin - var a := 2 + if true then 2 else 3; + Print(if true then 2 else 3 + if true then 2 else 3); var b := 2 * if true then 2 else 3; var c := 2 < if true then 2 else 3; end. \ No newline at end of file diff --git a/Utils/NSIS/Plugins/DotNetChecker.dll b/Utils/NSIS/Plugins/DotNetChecker.dll new file mode 100644 index 0000000000000000000000000000000000000000..46f5515b8547b9b9250254cdfa9b6e4cf856d0ab GIT binary patch literal 86528 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�wXk5W)u@E=b@3F=>-CZ*1$bsnV|+re!*GtbrMkzh-7(R%DS+v-{4I zU*K`t~7pXVWHKpJsbV;+vdmTOa)l%!QTw_K55lw txp4kH&VHI#f9LgwgGdk!ydXx0jR(&`if1#l*$jO)AMg= 2 do + (r, x) := (x mod 2 + r, x Shr 1); + Result := x + r +end; + +function Bin(x: BigInteger): string; +begin + x := Abs(x); + var r := ''; + while x >= 2 do + (r, x) := (byte(x mod 2) + r, x div 2); + Result := byte(x) + r +end; + +{$region} + +{$region Oct} + +function Oct(x: int64): string; +begin + x := Abs(x); + var r := ''; + while x >= 8 do + (r, x) := (x mod 8 + r, x Shr 3); + Result := x + r +end; + +function Oct(x: BigInteger): string; +begin + x := Abs(x); + var r := ''; + while x >= 8 do + (r, x) := (byte(x mod 8) + r, x div 8); + Result := byte(x) + r +end; + +{$region} + + +{$region Hex} +function Hex(x: int64): string; +begin + x := Abs(x); + var s := '0123456789ABCDEF'; + var r := ''; + while x >= 16 do + (r, x) := (s[x mod 16 + 1] + r, x Shr 4); + Result := s[x + 1] + r +end; + +function Hex(x: BigInteger): string; +begin + x := Abs(x); + var s := '0123456789ABCDEF'; + var r := ''; + while x >= 16 do + (r, x) := (s[byte(x mod 16) + 1] + r, x div 16); + Result := s[byte(x) + 1] + r +end; + +{$region} + +{$region Dec} + +function Dec(s: string; base: integer): int64; +begin + if not (base in 2..36) then + raise new School_InvalidBase + ($'ToDecimal: Недопустимое основание {base}'); + var sb := '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; + s := s.ToUpper; + var r := s.Except(sb[:base + 1]).JoinToString; + if r.Length > 0 then + raise new School_BadCharInString + ($'ToDecimal: Недопустимый символ "{r}" в строке {s}'); + var (pa, p) := (BigInteger.One, BigInteger.Zero); + foreach var c in s.Reverse do + begin + var i := Pos(c, sb) - 1; + p += pa * i; + pa *= base + end; + Result := int64(p) +end; + +function DecBig(s: string; base: integer): BigInteger; +begin + if not (base in 2..36) then + raise new School_InvalidBase + ($'ToDecimal: Недопустимое основание {base}'); + var sb := '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; + s := s.ToUpper; + var r := s.Except(sb[:base + 1]).JoinToString; + if r.Length > 0 then + raise new School_BadCharInString + ($'ToDecimal: Недопустимый символ "{r}" в строке {s}'); + var pa := BigInteger.One; + Result := BigInteger.Zero; + foreach var c in s.Reverse do + begin + var i := Pos(c, sb) - 1; + Result += pa * i; + pa *= base + end +end; + +{$region} + +{$region MinMax} + +/// Возвращает кортеж из минимума и максимума последовательности s +function MinMax(s: sequence of int64): (int64, int64); +begin + var (min, max) := (int64.MaxValue, int64.MinValue); + foreach var m in s do + if m < min then + min := m + else if m > max then + max := m; + Result := (min, max) +end; + +/// Возвращает кортеж из минимума и максимума последовательности s +function MinMax(s: sequence of integer): (integer, integer); +begin + var (min, max) := (integer.MaxValue, integer.MinValue); + foreach var m in s do + if m < min then + min := m + else if m > max then + max := m; + Result := (min, max) +end; + +/// Возвращает кортеж из минимума и максимума последовательности +function MinMax(Self: sequence of int64): (int64, int64); extensionmethod := + MinMax(Self); + +/// Возвращает кортеж из минимума и максимума последовательности +function MinMax(Self: sequence of integer): (integer, integer); + extensionmethod := MinMax(Self); + +{$region} + +{$region НОДНОК} + +/// Возвращает НОД и НОК пары чисел +function НОДНОК(a, b: int64): (int64, int64); +begin + (a, b) := (Abs(a), Abs(b)); + var (a1, b1) := (a, b); + while b <> 0 do + (a, b) := (b, a mod b); + Result := (a, a1 div a * b1) +end; + +{$region} + +{$region Factorize} + +/// Разложение числа на простые множители +function Factorize(n: int64): array of int64; +begin + n := Abs(n); + var i: int64 := 2; + var L := new List; + while i * i <= n do + if n mod i = 0 then + begin + L.Add(i); + n := n div i; + if n < i then + break + end + else + i += i = 2 ? 1 : 2; + if n > 1 then + L.Add(n); + Result := L.ToArray +end; + +/// Разложение числа на простые множители +function Factorize(n: integer): array of integer; +begin + n := Abs(n); + var i := 2; + var L := new List; + while i * i <= n do + if n mod i = 0 then + begin + L.Add(i); + n := n div i; + if n < i then + break + end + else + i += i = 2 ? 1 : 2; + if n > 1 then + L.Add(n); + Result := L.ToArray +end; + +/// разложение числа на простые множители +function Factorize(Self: int64): array of int64; extensionmethod := + Factorize(Self); + +/// Разложение числа на простые множители +function Factorize(Self: integer): array of integer; extensionmethod := + Factorize(Self); + +{$region} + +{$region Primes} + +/// Простые числа на интервале [2;n] +function Primes(n: integer): array of integer; +// Модифицированное решето Эратосфена на [2;n] +begin + var Mas := ArrFill(n, True); + var i := 2; + while i * i <= n do + begin + if Mas[i-1] then + begin + var k := i*i; + while k <= n do + begin + Mas[k-1] := False; + k += i + end + end; + Inc(i) + end; + n := Mas.Count(t -> t); + Result := new integer[n-1]; + i := 0; + for var j := 1 to Mas.High do + if Mas[j] then + begin + Result[i] := j+1; + Inc(i) + end +end; + +/// Первые n простых чисел +function FirstPrimes(n: integer): array of integer; +// Модифицированное решето Эратосфена +begin + var n1 := Trunc(Exp((Ln(n)+1.088)/0.8832)); + var Mas := ArrFill(n1, True); + var i := 2; + while i * i <= n1 do + begin + if Mas[i-1] then + begin + var k := i*i; + while k <= n1 do + begin + Mas[k-1] := False; + k += i + end + end; + Inc(i) + end; + //n := Mas.Count(t -> t); + Result := new integer[n]; + i := 0; + for var j := 1 to Mas.High do + if Mas[j] then + begin + Result[i] := j+1; + Inc(i); + if i = n then + break + end +end; + +{$region} + +{$region Digits} + +/// Возвращает массив, содержащий цифры числа +function Digits(n: int64): array of integer; +begin + var St := new Stack; + n := Abs(n); + if n = 0 then + Result := Arr(0) + else + begin + while n > 0 do + begin + St.Push(n mod 10); + n := n div 10 + end; + Result := St.ToArray + end +end; + +/// Возвращает массив, содержащий цифры числа +function Digits(Self: integer): array of integer; + extensionmethod := Digits(Self); + +/// возвращает массив, содержащий цифры числа +function Digits(Self: int64): array of integer; + extensionmethod := Digits(Self); + +{$region} + +end. \ No newline at end of file