diff --git a/CodeCompletion/DomConverter.cs b/CodeCompletion/DomConverter.cs index 9e3a5f69d..ec3900632 100644 --- a/CodeCompletion/DomConverter.cs +++ b/CodeCompletion/DomConverter.cs @@ -113,7 +113,8 @@ namespace CodeCompletion public void ConvertToDom(compilation_unit cu) { - CodeCompletionController.comp.CompilerOptions.SourceFileName = cu.file_name; + if (CodeCompletionController.comp != null) + CodeCompletionController.comp.CompilerOptions.SourceFileName = cu.file_name; visitor.Convert(cu); is_compiled = true; cur_used_assemblies = (Hashtable)PascalABCCompiler.NetHelper.NetHelper.cur_used_assemblies.Clone(); diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs index 43b5705bc..661227748 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 = "8"; public const string Build = "3"; - public const string Revision = "3236"; + public const string Revision = "3237"; 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 01a3664aa..36aa30d9a 100644 --- a/Configuration/Version.defs +++ b/Configuration/Version.defs @@ -1,4 +1,4 @@ -%COREVERSION%=3 -%REVISION%=3236 %MINOR%=8 +%REVISION%=3237 +%COREVERSION%=3 %MAJOR%=3 diff --git a/Release/pabcversion.txt b/Release/pabcversion.txt index fec14c8d1..788f57a45 100644 --- a/Release/pabcversion.txt +++ b/Release/pabcversion.txt @@ -1 +1 @@ -3.8.3.3236 +3.8.3.3237 diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh index 6a90be4bc..e0376ffa9 100644 --- a/ReleaseGenerators/PascalABCNET_version.nsh +++ b/ReleaseGenerators/PascalABCNET_version.nsh @@ -1 +1 @@ -!define VERSION '3.8.3.3236' +!define VERSION '3.8.3.3237' diff --git a/TestSuite/CompilationSamples/PABCSystem.pas b/TestSuite/CompilationSamples/PABCSystem.pas index 72fad8285..de95e6359 100644 --- a/TestSuite/CompilationSamples/PABCSystem.pas +++ b/TestSuite/CompilationSamples/PABCSystem.pas @@ -2271,6 +2271,8 @@ function SeqWhile(first: T; next: T->T; pred: T->boolean): sequence of T; function SeqWhile(first, second: T; next: (T,T) ->T; pred: T->boolean): sequence of T; /// Возвращает последовательность из count элементов x function SeqFill(count: integer; x: T): sequence of T; +/// Возвращает бесконечную рекуррентную последовательность элементов, задаваемую начальным элементом first и функцией next +function Iterate(first: T; next: T->T): sequence of T; /// Возвращает последовательность из n целых, введенных с клавиатуры function ReadSeqInteger(n: integer): sequence of integer; diff --git a/TestSuite/CompilationSamples/School.pas b/TestSuite/CompilationSamples/School.pas index b85f24066..a9abcecab 100644 --- a/TestSuite/CompilationSamples/School.pas +++ b/TestSuite/CompilationSamples/School.pas @@ -75,8 +75,16 @@ function FirstPrimes(k: integer): List; /// Количество простых делителей числа n function PrimeDivisorsCount(n: integer): integer; -/// Возвращает список, содержащий цифры числа n -function Digits(n: int64): List; +/// Возвращает целочисленный список расширенного представления +/// десятичного числа n по основанию base. +/// По умолчанию base=10 и возвращается список десятичных цифр числа n. +/// Обратное действие выполняет функция Refold. +function Digits(n: int64; base: integer := 10): List; + +/// Возвращает целое десятичное число на основе его расширенного представления +/// по основанию base (по умолчанию base=10). +/// Функция выполняет действие, обратное функции Digits, +function Refold(ext: List; base: integer := 10): int64; /// Возвращает список делителей натурального числа n function Divisors(n: integer): List; @@ -667,32 +675,47 @@ function PrimeDivisorsCount(Self: integer): integer; extensionmethod := PrimeDiv {$region Digits} -/// Возвращает список, содержащий цифры числа n -function Digits(n: int64): List; +/// Возвращает целочисленный список расширенного представления +/// десятичного числа n по основанию base. +/// По умолчанию base=10 и возвращается список десятичных цифр числа n. +/// Обратное действие выполняет функция Refold. +function Digits(n: int64; base: integer): List; begin Result := new List; - n := Abs(n); - if n = 0 then Result := |0|.ToList + if (n < 0) or (base < 2) then exit; + if n = 0 then Result := Lst(0) else - begin while n > 0 do begin - Result.Add(n mod 10); - n := n div 10 + var rem: integer := n mod base; + Result.Add(rem); + n := n div base end; Result.Reverse +end; + +function Digits(Self: integer; base: integer := 10): List; + extensionmethod := Digits(Self, base); + +function Digits(Self: int64; base: integer := 10): List; + extensionmethod := Digits(Self, base); + +/// Возвращает целое десятичное число на основе его расширенного представления +/// по основанию base (по умолчанию base=10). +/// Функция выполняет действие, обратное функции Digits +function Refold(ext: List; base: integer): int64; +begin + Result := 0; + var p := int64(1); + for var i := ext.Count -1 downto 0 do + begin + Result += ext[i] * p; + p *= base end end; -/// Возвращает список, содержащий цифры числа -function Digits(Self: integer): List; - extensionmethod := -Digits(Self); - -/// Возвращает список, содержащий цифры числа -function Digits(Self: int64): List; - extensionmethod := -Digits(Self); +function ReFold(Self: List; base: integer := 10): int64; + extensionmethod := Refold(Self, base); {$endregion} diff --git a/VisualPlugins/TraningControlPlugin/LoginForm.Designer.cs b/VisualPlugins/TraningControlPlugin/LoginForm.Designer.cs index 8a7f532f0..58b1fde1b 100644 --- a/VisualPlugins/TraningControlPlugin/LoginForm.Designer.cs +++ b/VisualPlugins/TraningControlPlugin/LoginForm.Designer.cs @@ -44,6 +44,7 @@ this.panelUnAuthorized = new System.Windows.Forms.Panel(); this.panelAuthorized = new System.Windows.Forms.Panel(); this.labelUserName = new System.Windows.Forms.Label(); + this.labelRating = new System.Windows.Forms.Label(); ((System.ComponentModel.ISupportInitialize)(this.userImage)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.groupImage)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.PluginImage)).BeginInit(); @@ -186,6 +187,7 @@ // // panelAuthorized // + this.panelAuthorized.Controls.Add(this.labelRating); this.panelAuthorized.Controls.Add(this.labelUserName); this.panelAuthorized.Location = new System.Drawing.Point(0, 0); this.panelAuthorized.Name = "panelAuthorized"; @@ -201,6 +203,15 @@ this.labelUserName.TabIndex = 11; this.labelUserName.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // + // labelRating + // + this.labelRating.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.labelRating.Location = new System.Drawing.Point(25, 53); + this.labelRating.Name = "labelRating"; + this.labelRating.Size = new System.Drawing.Size(372, 26); + this.labelRating.TabIndex = 12; + this.labelRating.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // // LoginForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -247,5 +258,6 @@ private System.Windows.Forms.Panel panelUnAuthorized; private System.Windows.Forms.Label labelUserName; private System.Windows.Forms.Panel panelAuthorized; + private System.Windows.Forms.Label labelRating; } } \ No newline at end of file diff --git a/VisualPlugins/TraningControlPlugin/LoginForm.cs b/VisualPlugins/TraningControlPlugin/LoginForm.cs index 0e9b6d9f1..acc838374 100644 --- a/VisualPlugins/TraningControlPlugin/LoginForm.cs +++ b/VisualPlugins/TraningControlPlugin/LoginForm.cs @@ -260,6 +260,7 @@ namespace DBAccessPluginNamespace closeButton.Focus(); panelUnAuthorized.SendToBack(); labelUserName.Text = login; + //labelRating.Text = "Рейтинг: "; } catch (Exception e) { diff --git a/bin/Lib/School.pas b/bin/Lib/School.pas index b85f24066..a9abcecab 100644 --- a/bin/Lib/School.pas +++ b/bin/Lib/School.pas @@ -75,8 +75,16 @@ function FirstPrimes(k: integer): List; /// Количество простых делителей числа n function PrimeDivisorsCount(n: integer): integer; -/// Возвращает список, содержащий цифры числа n -function Digits(n: int64): List; +/// Возвращает целочисленный список расширенного представления +/// десятичного числа n по основанию base. +/// По умолчанию base=10 и возвращается список десятичных цифр числа n. +/// Обратное действие выполняет функция Refold. +function Digits(n: int64; base: integer := 10): List; + +/// Возвращает целое десятичное число на основе его расширенного представления +/// по основанию base (по умолчанию base=10). +/// Функция выполняет действие, обратное функции Digits, +function Refold(ext: List; base: integer := 10): int64; /// Возвращает список делителей натурального числа n function Divisors(n: integer): List; @@ -667,32 +675,47 @@ function PrimeDivisorsCount(Self: integer): integer; extensionmethod := PrimeDiv {$region Digits} -/// Возвращает список, содержащий цифры числа n -function Digits(n: int64): List; +/// Возвращает целочисленный список расширенного представления +/// десятичного числа n по основанию base. +/// По умолчанию base=10 и возвращается список десятичных цифр числа n. +/// Обратное действие выполняет функция Refold. +function Digits(n: int64; base: integer): List; begin Result := new List; - n := Abs(n); - if n = 0 then Result := |0|.ToList + if (n < 0) or (base < 2) then exit; + if n = 0 then Result := Lst(0) else - begin while n > 0 do begin - Result.Add(n mod 10); - n := n div 10 + var rem: integer := n mod base; + Result.Add(rem); + n := n div base end; Result.Reverse +end; + +function Digits(Self: integer; base: integer := 10): List; + extensionmethod := Digits(Self, base); + +function Digits(Self: int64; base: integer := 10): List; + extensionmethod := Digits(Self, base); + +/// Возвращает целое десятичное число на основе его расширенного представления +/// по основанию base (по умолчанию base=10). +/// Функция выполняет действие, обратное функции Digits +function Refold(ext: List; base: integer): int64; +begin + Result := 0; + var p := int64(1); + for var i := ext.Count -1 downto 0 do + begin + Result += ext[i] * p; + p *= base end end; -/// Возвращает список, содержащий цифры числа -function Digits(Self: integer): List; - extensionmethod := -Digits(Self); - -/// Возвращает список, содержащий цифры числа -function Digits(Self: int64): List; - extensionmethod := -Digits(Self); +function ReFold(Self: List; base: integer := 10): int64; + extensionmethod := Refold(Self, base); {$endregion}