Digits с основанием в School

This commit is contained in:
Mikhalkovich Stanislav 2023-02-10 22:35:14 +03:00
parent 59409d8370
commit e3027f6a6a
10 changed files with 104 additions and 42 deletions

View file

@ -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();

View file

@ -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;

View file

@ -1,4 +1,4 @@
%COREVERSION%=3
%REVISION%=3236
%MINOR%=8
%REVISION%=3237
%COREVERSION%=3
%MAJOR%=3

View file

@ -1 +1 @@
3.8.3.3236
3.8.3.3237

View file

@ -1 +1 @@
!define VERSION '3.8.3.3236'
!define VERSION '3.8.3.3237'

View file

@ -2271,6 +2271,8 @@ function SeqWhile<T>(first: T; next: T->T; pred: T->boolean): sequence of T;
function SeqWhile<T>(first, second: T; next: (T,T) ->T; pred: T->boolean): sequence of T;
/// Возвращает последовательность из count элементов x
function SeqFill<T>(count: integer; x: T): sequence of T;
/// Возвращает бесконечную рекуррентную последовательность элементов, задаваемую начальным элементом first и функцией next
function Iterate<T>(first: T; next: T->T): sequence of T;
/// Возвращает последовательность из n целых, введенных с клавиатуры
function ReadSeqInteger(n: integer): sequence of integer;

View file

@ -75,8 +75,16 @@ function FirstPrimes(k: integer): List<integer>;
/// Количество простых делителей числа n
function PrimeDivisorsCount(n: integer): integer;
/// Возвращает список, содержащий цифры числа n
function Digits(n: int64): List<integer>;
/// Возвращает целочисленный список расширенного представления
/// десятичного числа n по основанию base.
/// По умолчанию base=10 и возвращается список десятичных цифр числа n.
/// Обратное действие выполняет функция Refold.
function Digits(n: int64; base: integer := 10): List<integer>;
/// Возвращает целое десятичное число на основе его расширенного представления
/// по основанию base (по умолчанию base=10).
/// Функция выполняет действие, обратное функции Digits,
function Refold(ext: List<integer>; base: integer := 10): int64;
/// Возвращает список делителей натурального числа n
function Divisors(n: integer): List<integer>;
@ -667,32 +675,47 @@ function PrimeDivisorsCount(Self: integer): integer; extensionmethod := PrimeDiv
{$region Digits}
/// Возвращает список, содержащий цифры числа n
function Digits(n: int64): List<integer>;
/// Возвращает целочисленный список расширенного представления
/// десятичного числа n по основанию base.
/// По умолчанию base=10 и возвращается список десятичных цифр числа n.
/// Обратное действие выполняет функция Refold.
function Digits(n: int64; base: integer): List<integer>;
begin
Result := new List<integer>;
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<integer>;
extensionmethod := Digits(Self, base);
function Digits(Self: int64; base: integer := 10): List<integer>;
extensionmethod := Digits(Self, base);
/// Возвращает целое десятичное число на основе его расширенного представления
/// по основанию base (по умолчанию base=10).
/// Функция выполняет действие, обратное функции Digits
function Refold(ext: List<integer>; 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<integer>;
extensionmethod :=
Digits(Self);
/// Возвращает список, содержащий цифры числа
function Digits(Self: int64): List<integer>;
extensionmethod :=
Digits(Self);
function ReFold(Self: List<integer>; base: integer := 10): int64;
extensionmethod := Refold(Self, base);
{$endregion}

View file

@ -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;
}
}

View file

@ -260,6 +260,7 @@ namespace DBAccessPluginNamespace
closeButton.Focus();
panelUnAuthorized.SendToBack();
labelUserName.Text = login;
//labelRating.Text = "Рейтинг: ";
}
catch (Exception e)
{

View file

@ -75,8 +75,16 @@ function FirstPrimes(k: integer): List<integer>;
/// Количество простых делителей числа n
function PrimeDivisorsCount(n: integer): integer;
/// Возвращает список, содержащий цифры числа n
function Digits(n: int64): List<integer>;
/// Возвращает целочисленный список расширенного представления
/// десятичного числа n по основанию base.
/// По умолчанию base=10 и возвращается список десятичных цифр числа n.
/// Обратное действие выполняет функция Refold.
function Digits(n: int64; base: integer := 10): List<integer>;
/// Возвращает целое десятичное число на основе его расширенного представления
/// по основанию base (по умолчанию base=10).
/// Функция выполняет действие, обратное функции Digits,
function Refold(ext: List<integer>; base: integer := 10): int64;
/// Возвращает список делителей натурального числа n
function Divisors(n: integer): List<integer>;
@ -667,32 +675,47 @@ function PrimeDivisorsCount(Self: integer): integer; extensionmethod := PrimeDiv
{$region Digits}
/// Возвращает список, содержащий цифры числа n
function Digits(n: int64): List<integer>;
/// Возвращает целочисленный список расширенного представления
/// десятичного числа n по основанию base.
/// По умолчанию base=10 и возвращается список десятичных цифр числа n.
/// Обратное действие выполняет функция Refold.
function Digits(n: int64; base: integer): List<integer>;
begin
Result := new List<integer>;
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<integer>;
extensionmethod := Digits(Self, base);
function Digits(Self: int64; base: integer := 10): List<integer>;
extensionmethod := Digits(Self, base);
/// Возвращает целое десятичное число на основе его расширенного представления
/// по основанию base (по умолчанию base=10).
/// Функция выполняет действие, обратное функции Digits
function Refold(ext: List<integer>; 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<integer>;
extensionmethod :=
Digits(Self);
/// Возвращает список, содержащий цифры числа
function Digits(Self: int64): List<integer>;
extensionmethod :=
Digits(Self);
function ReFold(Self: List<integer>; base: integer := 10): int64;
extensionmethod := Refold(Self, base);
{$endregion}