Изменение инсталлятов - убрали Full pack - теперь standardpack включает автоматическое скачивание версии .NET если это необходимо
This commit is contained in:
parent
fcf04d7c99
commit
0e4e812835
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%MINOR%=6
|
||||
%REVISION%=2403
|
||||
%COREVERSION%=2
|
||||
%REVISION%=2414
|
||||
%MINOR%=6
|
||||
%MAJOR%=3
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
3.6.2.2403
|
||||
3.6.2.2414
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
rem PascalABCNETMonoZIP.bat
|
||||
|
|
@ -1 +1 @@
|
|||
!define VERSION '3.6.2.2403'
|
||||
!define VERSION '3.6.2.2414'
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
ABCDatabases,BlockFileOfT,Controls,
|
||||
OpenCL, OpenCLABC,
|
||||
OpenGL, OpenGLABC,
|
||||
BBCMicroBit
|
||||
BBCMicroBit, School, SF
|
||||
;
|
||||
|
||||
begin
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
BIN
Utils/NSIS/Plugins/DotNetChecker.dll
Normal file
BIN
Utils/NSIS/Plugins/DotNetChecker.dll
Normal file
Binary file not shown.
377
bin/Lib/School.pas
Normal file
377
bin/Lib/School.pas
Normal file
|
|
@ -0,0 +1,377 @@
|
|||
unit School;
|
||||
|
||||
interface
|
||||
|
||||
/// Перевод десятичного числа в двоичную систему счисления
|
||||
function Bin(x: int64): string;
|
||||
|
||||
/// Перевод десятичного числа в двоичную систему счисления
|
||||
function Bin(x: BigInteger): string;
|
||||
|
||||
/// Перевод десятичного числа в восьмеричную систему счисления
|
||||
function Oct(x: int64): string;
|
||||
|
||||
/// Перевод десятичного числа в восьмеричную систему счисления
|
||||
function Oct(x: BigInteger): string;
|
||||
|
||||
/// Перевод десятичного числа в шестнадцатиричную систему счисления
|
||||
function Hex(x: int64): string;
|
||||
|
||||
/// Перевод десятичного числа в шестнадцатиричную систему счисления
|
||||
function Hex(x: BigInteger): string;
|
||||
|
||||
/// Перевод из системы по основанию base [2..36] в десятичную
|
||||
function Dec(s: string; base: integer): int64;
|
||||
|
||||
/// Перевод из системы по основанию base [2..36] в десятичную
|
||||
function DecBig(s: string; base: integer): BigInteger;
|
||||
|
||||
/// Возвращает кортеж из минимума и максимума последовательности s
|
||||
function MinMax(s: sequence of int64): (int64, int64);
|
||||
|
||||
/// Возвращает кортеж из минимума и максимума последовательности s
|
||||
function MinMax(s: sequence of integer): (integer, integer);
|
||||
|
||||
/// Ввозвращает НОД и НОК пары чисел
|
||||
function НОДНОК(a, b: int64): (int64, int64);
|
||||
|
||||
/// Разложение числа на простые множители
|
||||
function Factorize(n: int64): array of int64;
|
||||
|
||||
/// Рразложение числа на простые множители
|
||||
function Factorize(n: integer): array of integer;
|
||||
|
||||
/// Простые числа на интервале [2;n]
|
||||
function Primes(n: integer): array of integer;
|
||||
|
||||
/// Первые n простых чисел
|
||||
function FirstPrimes(n: integer): array of integer;
|
||||
|
||||
/// Возвращает массив, содержащий цифры числа
|
||||
function Digits(n: int64): array of integer;
|
||||
|
||||
implementation
|
||||
|
||||
type
|
||||
School_BadCharInString = class(Exception)
|
||||
end;
|
||||
|
||||
School_InvalidBase = class(Exception)
|
||||
end;
|
||||
|
||||
{$region Bin}
|
||||
|
||||
function Bin(x: int64): string;
|
||||
begin
|
||||
x := Abs(x);
|
||||
var r := '';
|
||||
while x >= 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<int64>;
|
||||
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<integer>;
|
||||
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<integer>;
|
||||
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.
|
||||
Loading…
Reference in a new issue