This commit is contained in:
Бондарев Иван 2017-10-08 17:03:23 +02:00
parent bab33a265b
commit 305dcdc034
8 changed files with 316 additions and 287 deletions

View file

@ -10200,9 +10200,9 @@ begin
end;
///--
function operator=<T1, T2> (Self: (T1,T2); v: (T1,T2)); extensionmethod := Self.Equals( v ) ;
function operator=<T1, T2> (Self: (T1,T2); v: (T1,T2)); extensionmethod := Object.ReferenceEquals(Self,v) ? True: Self.Equals( v ) ;
///--
function operator<><T1, T2> (Self: (T1,T2); v: (T1,T2)); extensionmethod := not Self.Equals( v );
function operator<><T1, T2> (Self: (T1,T2); v: (T1,T2)); extensionmethod := not (Self = v);
///--
function CompareToTup2<T1,T2>(v1: (T1,T2); v2: (T1,T2)) := (v1 as System.IComparable).CompareTo(v2);
///--
@ -10215,9 +10215,9 @@ function operator><T1, T2> (Self: (T1,T2); v: (T1,T2)); extensionmethod := Compa
function operator>=<T1, T2> (Self: (T1,T2); v: (T1,T2)); extensionmethod := CompareToTup2(Self,v) >= 0;
///--
function operator=<T1, T2, T3> (Self: (T1,T2,T3); v: (T1,T2,T3)); extensionmethod := Self.Equals( v ) ;
function operator=<T1, T2, T3> (Self: (T1,T2,T3); v: (T1,T2,T3)); extensionmethod := Object.ReferenceEquals(Self,v) ? True: Self.Equals( v ) ;
///--
function operator<><T1, T2, T3> (Self: (T1,T2,T3); v: (T1,T2,T3)); extensionmethod := not Self.Equals( v );
function operator<><T1, T2, T3> (Self: (T1,T2,T3); v: (T1,T2,T3)); extensionmethod := not (Self = v);
///--
function CompareToTup3<T1,T2,T3>(v1: (T1,T2,T3); v2: (T1,T2,T3)) := (v1 as System.IComparable).CompareTo(v2);
///--
@ -10230,9 +10230,9 @@ function operator><T1,T2,T3> (Self: (T1,T2,T3); v: (T1,T2,T3)); extensionmethod
function operator>=<T1,T2,T3> (Self: (T1,T2,T3); v: (T1,T2,T3)); extensionmethod := CompareToTup3(Self,v) >= 0;
///--
function operator=<T1, T2, T3, T4> (Self: (T1,T2,T3,T4); v: (T1,T2,T3,T4)); extensionmethod := Self.Equals( v ) ;
function operator=<T1, T2, T3, T4> (Self: (T1,T2,T3,T4); v: (T1,T2,T3,T4)); extensionmethod := Object.ReferenceEquals(Self,v) ? True: Self.Equals( v ) ;
///--
function operator<><T1, T2, T3, T4> (Self: (T1,T2,T3,T4); v: (T1,T2,T3,T4)); extensionmethod := not Self.Equals( v );
function operator<><T1, T2, T3, T4> (Self: (T1,T2,T3,T4); v: (T1,T2,T3,T4)); extensionmethod := not (Self = v);
///--
function CompareToTup4<T1,T2,T3,T4>(v1: (T1,T2,T3,T4); v2: (T1,T2,T3,T4)) := (v1 as System.IComparable).CompareTo(v2);
///--

View file

@ -1,16 +1,16 @@
/// Модуль электронного задачника Programming Taskbook 4
/// Модуль электронного задачника Programming Taskbook 4
unit PT4;
//------------------------------------------------------------------------------
// Модуль для подключения задачника Programming Taskbook
// Версия 4.15
// Copyright (c) 2006-2008 DarkStar, SSM
// Copyright (c) 2010 М.Э.Абрамян, дополнения к версии 1.3
// Copyright (c) 2014-2015 М.Э.Абрамян, дополнения к версии 4.13
// Copyright (c) 2015 М.Э.Абрамян, дополнения к версии 4.14
// Copyright (c) 2016 М.Э.Абрамян, дополнения к версии 4.15
// Copyright (c) 2017 М.Э.Абрамян, дополнения к версии 4.17
// Электронный задачник Programming Taskbook Copyright (c)М.Э.Абрамян, 1998-2017
// Модуль для подключения задачника Programming Taskbook
// Версия 4.15
// Copyright (©) 2006-2008 DarkStar, SSM
// Copyright (©) 2010 М.Э.Абрамян, дополнения к версии 1.3
// Copyright (©) 2014-2015 М.Э.Абрамян, дополнения к версии 4.13
// Copyright (©) 2015 М.Э.Абрамян, дополнения к версии 4.14
// Copyright (©) 2016 М.Э.Абрамян, дополнения к версии 4.15
// Copyright (©) 2017 М.Э.Абрамян, дополнения к версии 4.17
// Электронный задачник Programming Taskbook Copyright (c)М.Э.Абрамян, 1998-2017
//------------------------------------------------------------------------------
{$apptype windows}
@ -22,9 +22,9 @@ uses System,
System.Collections,
System.Runtime.InteropServices;
type
/// Тип указателя на узел списка
/// Тип указателя на узел списка
PNode = ^TNode;
/// Тип узла списка
/// Тип узла списка
TNode = record
Data: integer;
Next,Prev,Left,Right,Parent: PNode;
@ -80,240 +80,240 @@ type
property Data: integer read getData write SetData;
end;
/// Вывести формулировку задания
/// Вывести формулировку задания
procedure Task(name: string);
/// Ввести и вернуть значение целого типа
/// Ввести и вернуть значение целого типа
function GetInt: integer;
/// Ввести и вернуть значение целого типа
/// Ввести и вернуть значение целого типа
function GetInteger: integer;
/// Ввести и вернуть значение вещественного типа
/// Ввести и вернуть значение вещественного типа
function GetReal: real;
/// Ввести и вернуть значение вещественного типа
/// Ввести и вернуть значение вещественного типа
function GetDouble: real;
/// Ввести и вернуть значение символьного типа
/// Ввести и вернуть значение символьного типа
function GetChar: char;
/// Ввести и вернуть значение строкового типа
/// Ввести и вернуть значение строкового типа
function GetString: string;
/// Ввести и вернуть значение логического типа
/// Ввести и вернуть значение логического типа
function GetBool: boolean;
/// Ввести и вернуть значение логического типа
/// Ввести и вернуть значение логического типа
function GetBoolean: boolean;
/// Ввести и вернуть значение типа Node
/// Ввести и вернуть значение типа Node
function GetNode: Node;
/// Ввести и вернуть значение типа PNode
/// Ввести и вернуть значение типа PNode
function GetPNode: PNode;
/// Возвращает введенное значение типа integer
/// Возвращает введенное значение типа integer
function ReadInteger: integer;
/// Возвращает введенное значение типа real
/// Возвращает введенное значение типа real
function ReadReal: real;
/// Возвращает введенное значение типа char
/// Возвращает введенное значение типа char
function ReadChar: char;
/// Возвращает введенное значение типа string
/// Возвращает введенное значение типа string
function ReadString: string;
/// Возвращает введенное значение типа boolean
/// Возвращает введенное значение типа boolean
function ReadBoolean: boolean;
/// Возвращает введенное значение типа PNode
/// Возвращает введенное значение типа PNode
function ReadPNode: PNode;
/// Возвращает введенное значение типа Node
/// Возвращает введенное значение типа Node
function ReadNode: Node;
/// Возвращает введенное значение типа integer
/// Возвращает введенное значение типа integer
function ReadlnInteger: integer;
/// Возвращает введенное значение типа real
/// Возвращает введенное значение типа real
function ReadlnReal: real;
/// Возвращает введенное значение типа char
/// Возвращает введенное значение типа char
function ReadlnChar: char;
/// Возвращает введенное значение типа string
/// Возвращает введенное значение типа string
function ReadlnString: string;
/// Возвращает введенное значение типа boolean
/// Возвращает введенное значение типа boolean
function ReadlnBoolean: boolean;
/// Возвращает введенное значение типа PNode
/// Возвращает введенное значение типа PNode
function ReadlnPNode: PNode;
/// Возвращает введенное значение типа Node
/// Возвращает введенное значение типа Node
function ReadlnNode: Node;
// == Версия 4.15. Дополнения ==
// == Версия 4.15. Дополнения ==
/// Возвращает введенное значение типа integer.
/// Строковое приглашение prompt игнорируется
/// Возвращает введенное значение типа integer.
/// Строковое приглашение prompt игнорируется
function ReadInteger(prompt: string): integer;
/// Возвращает введенное значение типа real.
/// Строковое приглашение prompt игнорируется
/// Возвращает введенное значение типа real.
/// Строковое приглашение prompt игнорируется
function ReadReal(prompt: string): real;
/// Возвращает введенное значение типа char.
/// Строковое приглашение prompt игнорируется
/// Возвращает введенное значение типа char.
/// Строковое приглашение prompt игнорируется
function ReadChar(prompt: string): char;
/// Возвращает введенное значение типа string.
/// Строковое приглашение prompt игнорируется
/// Возвращает введенное значение типа string.
/// Строковое приглашение prompt игнорируется
function ReadString(prompt: string): string;
/// Возвращает введенное значение типа boolean.
/// Строковое приглашение prompt игнорируется
/// Возвращает введенное значение типа boolean.
/// Строковое приглашение prompt игнорируется
function ReadBoolean(prompt: string): boolean;
/// Возвращает введенное значение типа PNode.
/// Строковое приглашение prompt игнорируется
/// Возвращает введенное значение типа PNode.
/// Строковое приглашение prompt игнорируется
function ReadPNode(prompt: string): PNode;
/// Возвращает введенное значение типа Node.
/// Строковое приглашение prompt игнорируется
/// Возвращает введенное значение типа Node.
/// Строковое приглашение prompt игнорируется
function ReadNode(prompt: string): Node;
/// Возвращает введенное значение типа integer.
/// Строковое приглашение prompt игнорируется
/// Возвращает введенное значение типа integer.
/// Строковое приглашение prompt игнорируется
function ReadlnInteger(prompt: string): integer;
/// Возвращает введенное значение типа real.
/// Строковое приглашение prompt игнорируется
/// Возвращает введенное значение типа real.
/// Строковое приглашение prompt игнорируется
function ReadlnReal(prompt: string): real;
/// Возвращает введенное значение типа char.
/// Строковое приглашение prompt игнорируется
/// Возвращает введенное значение типа char.
/// Строковое приглашение prompt игнорируется
function ReadlnChar(prompt: string): char;
/// Возвращает введенное значение типа string.
/// Строковое приглашение prompt игнорируется
/// Возвращает введенное значение типа string.
/// Строковое приглашение prompt игнорируется
function ReadlnString(prompt: string): string;
/// Возвращает введенное значение типа boolean.
/// Строковое приглашение prompt игнорируется
/// Возвращает введенное значение типа boolean.
/// Строковое приглашение prompt игнорируется
function ReadlnBoolean(prompt: string): boolean;
/// Возвращает введенное значение типа PNode.
/// Строковое приглашение prompt игнорируется
/// Возвращает введенное значение типа PNode.
/// Строковое приглашение prompt игнорируется
function ReadlnPNode(prompt: string): PNode;
/// Возвращает введенное значение типа Node.
/// Строковое приглашение prompt игнорируется
/// Возвращает введенное значение типа Node.
/// Строковое приглашение prompt игнорируется
function ReadlnNode(prompt: string): Node;
// == Версия 4.15. Конец дополнений ==
// == Версия 4.15. Конец дополнений ==
// == Версия 4.17. Дополнения ==
// == Версия 4.17. Дополнения ==
/// Возвращает кортеж из двух введенных значений типа integer
/// Возвращает кортеж из двух введенных значений типа integer
function ReadInteger2: (integer, integer);
/// Возвращает кортеж из двух введенных значений типа real
/// Возвращает кортеж из двух введенных значений типа real
function ReadReal2: (real, real);
/// Возвращает кортеж из двух введенных значений типа char
/// Возвращает кортеж из двух введенных значений типа char
function ReadChar2: (char, char);
/// Возвращает кортеж из двух введенных значений типа string
/// Возвращает кортеж из двух введенных значений типа string
function ReadString2: (string, string);
/// Возвращает кортеж из двух введенных значений типа boolean
/// Возвращает кортеж из двух введенных значений типа boolean
function ReadBoolean2: (boolean, boolean);
/// Возвращает кортеж из двух введенных значений типа Node
/// Возвращает кортеж из двух введенных значений типа Node
function ReadNode2: (Node, Node);
/// Возвращает кортеж из двух введенных значений типа integer
/// Возвращает кортеж из двух введенных значений типа integer
function ReadlnInteger2: (integer, integer);
/// Возвращает кортеж из двух введенных значений типа real
/// Возвращает кортеж из двух введенных значений типа real
function ReadlnReal2: (real, real);
/// Возвращает кортеж из двух введенных значений типа char
/// Возвращает кортеж из двух введенных значений типа char
function ReadlnChar2: (char, char);
/// Возвращает кортеж из двух введенных значений типа string
/// Возвращает кортеж из двух введенных значений типа string
function ReadlnString2: (string, string);
/// Возвращает кортеж из двух введенных значений типа boolean
/// Возвращает кортеж из двух введенных значений типа boolean
function ReadlnBoolean2: (boolean, boolean);
/// Возвращает кортеж из двух введенных значений типа Node
/// Возвращает кортеж из двух введенных значений типа Node
function ReadlnNode2: (Node, Node);
/// Возвращает кортеж из трех введенных значений типа integer
/// Возвращает кортеж из трех введенных значений типа integer
function ReadInteger3: (integer, integer, integer);
/// Возвращает кортеж из трех введенных значений типа real
/// Возвращает кортеж из трех введенных значений типа real
function ReadReal3: (real, real, real);
/// Возвращает кортеж из трех введенных значений типа char
/// Возвращает кортеж из трех введенных значений типа char
function ReadChar3: (char, char, char);
/// Возвращает кортеж из трех введенных значений типа string
/// Возвращает кортеж из трех введенных значений типа string
function ReadString3: (string, string, string);
/// Возвращает кортеж из трех введенных значений типа boolean
/// Возвращает кортеж из трех введенных значений типа boolean
function ReadBoolean3: (boolean, boolean, boolean);
/// Возвращает кортеж из трех введенных значений типа Node
/// Возвращает кортеж из трех введенных значений типа Node
function ReadNode3: (Node, Node, Node);
/// Возвращает кортеж из трех введенных значений типа integer
/// Возвращает кортеж из трех введенных значений типа integer
function ReadlnInteger3: (integer, integer, integer);
/// Возвращает кортеж из трех введенных значений типа real
/// Возвращает кортеж из трех введенных значений типа real
function ReadlnReal3: (real, real, real);
/// Возвращает кортеж из трех введенных значений типа char
/// Возвращает кортеж из трех введенных значений типа char
function ReadlnChar3: (char, char, char);
/// Возвращает кортеж из трех введенных значений типа string
/// Возвращает кортеж из трех введенных значений типа string
function ReadlnString3: (string, string, string);
/// Возвращает кортеж из трех введенных значений типа boolean
/// Возвращает кортеж из трех введенных значений типа boolean
function ReadlnBoolean3: (boolean, boolean, boolean);
/// Возвращает кортеж из трех введенных значений типа Node
/// Возвращает кортеж из трех введенных значений типа Node
function ReadlnNode3: (Node, Node, Node);
/// Возвращает кортеж из двух введенных значений типа integer.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из двух введенных значений типа integer.
/// Строковое приглашение prompt игнорируется
function ReadInteger2(prompt: string): (integer, integer);
/// Возвращает кортеж из двух введенных значений типа real.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из двух введенных значений типа real.
/// Строковое приглашение prompt игнорируется
function ReadReal2(prompt: string): (real, real);
/// Возвращает кортеж из двух введенных значений типа char.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из двух введенных значений типа char.
/// Строковое приглашение prompt игнорируется
function ReadChar2(prompt: string): (char, char);
/// Возвращает кортеж из двух введенных значений типа string.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из двух введенных значений типа string.
/// Строковое приглашение prompt игнорируется
function ReadString2(prompt: string): (string, string);
/// Возвращает кортеж из двух введенных значений типа boolean.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из двух введенных значений типа boolean.
/// Строковое приглашение prompt игнорируется
function ReadBoolean2(prompt: string): (boolean, boolean);
/// Возвращает кортеж из двух введенных значений типа Node.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из двух введенных значений типа Node.
/// Строковое приглашение prompt игнорируется
function ReadNode2(prompt: string): (Node, Node);
/// Возвращает кортеж из двух введенных значений типа integer.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из двух введенных значений типа integer.
/// Строковое приглашение prompt игнорируется
function ReadlnInteger2(prompt: string): (integer, integer);
/// Возвращает кортеж из двух введенных значений типа real.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из двух введенных значений типа real.
/// Строковое приглашение prompt игнорируется
function ReadlnReal2(prompt: string): (real, real);
/// Возвращает кортеж из двух введенных значений типа char.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из двух введенных значений типа char.
/// Строковое приглашение prompt игнорируется
function ReadlnChar2(prompt: string): (char, char);
/// Возвращает кортеж из двух введенных значений типа string.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из двух введенных значений типа string.
/// Строковое приглашение prompt игнорируется
function ReadlnString2(prompt: string): (string, string);
/// Возвращает кортеж из двух введенных значений типа boolean.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из двух введенных значений типа boolean.
/// Строковое приглашение prompt игнорируется
function ReadlnBoolean2(prompt: string): (boolean, boolean);
/// Возвращает кортеж из двух введенных значений типа Node.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из двух введенных значений типа Node.
/// Строковое приглашение prompt игнорируется
function ReadlnNode2(prompt: string): (Node, Node);
/// Возвращает кортеж из трех введенных значений типа integer.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из трех введенных значений типа integer.
/// Строковое приглашение prompt игнорируется
function ReadInteger3(prompt: string): (integer, integer, integer);
/// Возвращает кортеж из трех введенных значений типа real.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из трех введенных значений типа real.
/// Строковое приглашение prompt игнорируется
function ReadReal3(prompt: string): (real, real, real);
/// Возвращает кортеж из трех введенных значений типа char.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из трех введенных значений типа char.
/// Строковое приглашение prompt игнорируется
function ReadChar3(prompt: string): (char, char, char);
/// Возвращает кортеж из трех введенных значений типа string.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из трех введенных значений типа string.
/// Строковое приглашение prompt игнорируется
function ReadString3(prompt: string): (string, string, string);
/// Возвращает кортеж из трех введенных значений типа boolean.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из трех введенных значений типа boolean.
/// Строковое приглашение prompt игнорируется
function ReadBoolean3(prompt: string): (boolean, boolean, boolean);
/// Возвращает кортеж из трех введенных значений типа Node.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из трех введенных значений типа Node.
/// Строковое приглашение prompt игнорируется
function ReadNode3(prompt: string): (Node, Node, Node);
/// Возвращает кортеж из трех введенных значений типа integer.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из трех введенных значений типа integer.
/// Строковое приглашение prompt игнорируется
function ReadlnInteger3(prompt: string): (integer, integer, integer);
/// Возвращает кортеж из трех введенных значений типа real.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из трех введенных значений типа real.
/// Строковое приглашение prompt игнорируется
function ReadlnReal3(prompt: string): (real, real, real);
/// Возвращает кортеж из трех введенных значений типа char.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из трех введенных значений типа char.
/// Строковое приглашение prompt игнорируется
function ReadlnChar3(prompt: string): (char, char, char);
/// Возвращает кортеж из трех введенных значений типа string.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из трех введенных значений типа string.
/// Строковое приглашение prompt игнорируется
function ReadlnString3(prompt: string): (string, string, string);
/// Возвращает кортеж из трех введенных значений типа boolean.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из трех введенных значений типа boolean.
/// Строковое приглашение prompt игнорируется
function ReadlnBoolean3(prompt: string): (boolean, boolean, boolean);
/// Возвращает кортеж из трех введенных значений типа Node.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из трех введенных значений типа Node.
/// Строковое приглашение prompt игнорируется
function ReadlnNode3(prompt: string): (Node, Node, Node);
// == Версия 4.17. Конец дополнений ==
// == Версия 4.17. Конец дополнений ==
procedure GetR(var param: real);
@ -341,9 +341,9 @@ procedure Put(param: boolean);
procedure Put(param: PNode);
procedure Put(param: Node);
//Ввод этих данных не поддерживается
//Ввод этих данных не поддерживается
///- read(a,b,...)
/// Вводит значения a,b,... из окна электронного задачника
/// Вводит значения a,b,... из окна электронного задачника
procedure read(var x: byte);
///--
procedure read(var x: shortint);
@ -381,21 +381,21 @@ procedure Readln;
procedure Print(params args: array of object);
procedure Println(params args: array of object);
// == Версия 4.15. Дополнения ==
// == Версия 4.15. Дополнения ==
procedure Print(s: string);
procedure Println(s: string);
// == Версия 4.15. Конец дополнений ==
// == Версия 4.15. Конец дополнений ==
/// Освобождает память, выделенную динамически, на которую указывает p
/// Освобождает память, выделенную динамически, на которую указывает p
procedure Dispose(p: pointer);
// Фиктивная пустая процедура - для Intellisense
// Нет, нельзя пользоваться - закрываются процедуры write системного модуля
// Фиктивная пустая процедура - для Intellisense
// Нет, нельзя пользоваться - закрываются процедуры write системного модуля
///- write(a,b,...)
/// Выводит значения a,b,... в окно электронного задачника
/// Выводит значения a,b,... в окно электронного задачника
//procedure write;
///--
@ -403,162 +403,162 @@ procedure __InitModule__;
///--
procedure __FinalizeModule__;
// == Версия 1.3. Дополнения ==
// == Версия 1.3. Дополнения ==
/// Выводит строку S в разделе отладки окна задачника
/// Выводит строку S в разделе отладки окна задачника
procedure Show(S: string);
/// Выводит число A с комментарием S в разделе отладки
/// окна задачника; для вывода числа отводится W экранных позиций
/// Выводит число A с комментарием S в разделе отладки
/// окна задачника; для вывода числа отводится W экранных позиций
procedure Show(S: string; A: integer; W: integer);
/// Выводит число A с комментарием S в разделе отладки
/// окна задачника; для вывода числа отводится W экранных позиций
/// Выводит число A с комментарием S в разделе отладки
/// окна задачника; для вывода числа отводится W экранных позиций
procedure Show(S: string; A: real; W: integer);
/// Выводит число A с комментарием S в разделе отладки окна задачника
/// Выводит число A с комментарием S в разделе отладки окна задачника
procedure Show(S: string; A: integer);
/// Выводит число A с комментарием S в разделе отладки окна задачника
/// Выводит число A с комментарием S в разделе отладки окна задачника
procedure Show(S: string; A: real);
/// Выводит число A в разделе отладки окна задачника;
/// для вывода отводится W экранных позиций
/// Выводит число A в разделе отладки окна задачника;
/// для вывода отводится W экранных позиций
procedure Show(A: integer; W: integer);
/// Выводит число A в разделе отладки окна задачника;
/// для вывода отводится W экранных позиций
/// Выводит число A в разделе отладки окна задачника;
/// для вывода отводится W экранных позиций
procedure Show(A: real; W: integer);
/// Выводит число A в разделе отладки окна задачника
/// Выводит число A в разделе отладки окна задачника
procedure Show(A: integer);
/// Выводит число A в разделе отладки окна задачника
/// Выводит число A в разделе отладки окна задачника
procedure Show(A: real);
/// Выполняет переход на новую экранную строку
/// в разделе отладки окна задачника
/// Выполняет переход на новую экранную строку
/// в разделе отладки окна задачника
procedure ShowLine;
/// Выводит строку S в разделе отладки окна задачника,
/// после чего выполняет переход на новую экранную строку
/// Выводит строку S в разделе отладки окна задачника,
/// после чего выполняет переход на новую экранную строку
procedure ShowLine(S: string);
/// Выводит число A с комментарием S в разделе отладки
/// окна задачника; для вывода числа отводится W экранных позиций.
/// После вывода данных выполняет переход на новую экранную строку
/// Выводит число A с комментарием S в разделе отладки
/// окна задачника; для вывода числа отводится W экранных позиций.
/// После вывода данных выполняет переход на новую экранную строку
procedure ShowLine(S: string; A: integer; W: integer);
/// Выводит число A с комментарием S в разделе отладки
/// окна задачника; для вывода числа отводится W экранных позиций.
/// После вывода данных выполняет переход на новую экранную строку
/// Выводит число A с комментарием S в разделе отладки
/// окна задачника; для вывода числа отводится W экранных позиций.
/// После вывода данных выполняет переход на новую экранную строку
procedure ShowLine(S: string; A: real; W: integer);
/// Выводит число A с комментарием S в разделе отладки окна задачника,
/// после чего выполняет переход на новую экранную строку
/// Выводит число A с комментарием S в разделе отладки окна задачника,
/// после чего выполняет переход на новую экранную строку
procedure ShowLine(S: string; A: integer);
/// Выводит число A с комментарием S в разделе отладки окна задачника,
/// после чего выполняет переход на новую экранную строку
/// Выводит число A с комментарием S в разделе отладки окна задачника,
/// после чего выполняет переход на новую экранную строку
procedure ShowLine(S: string; A: real);
/// Выводит число A в разделе отладки окна задачника;
/// для вывода отводится W экранных позиций.
/// После вывода числа выполняет переход на новую экранную строку
/// Выводит число A в разделе отладки окна задачника;
/// для вывода отводится W экранных позиций.
/// После вывода числа выполняет переход на новую экранную строку
procedure ShowLine(A: integer; W: integer);
/// Выводит число A в разделе отладки окна задачника;
/// для вывода отводится W экранных позиций.
/// После вывода числа выполняет переход на новую экранную строку
/// Выводит число A в разделе отладки окна задачника;
/// для вывода отводится W экранных позиций.
/// После вывода числа выполняет переход на новую экранную строку
procedure ShowLine(A: real; W: integer);
/// Выводит число A в разделе отладки окна задачника,
/// после чего выполняет переход на новую экранную строку
/// Выводит число A в разделе отладки окна задачника,
/// после чего выполняет переход на новую экранную строку
procedure ShowLine(A: integer);
/// Выводит число A в разделе отладки окна задачника,
/// после чего выполняет переход на новую экранную строку
/// Выводит число A в разделе отладки окна задачника,
/// после чего выполняет переход на новую экранную строку
procedure ShowLine(A: real);
/// Настраивает формат вывода вещественных чисел в разделе отладки
/// окна задачника. Если N > 0, то число выводится в формате
/// с фиксированной точкой и N дробными знаками. Если N = 0,
/// то число выводится в экспоненциальном формате, число дробных
/// знаков определяется шириной поля вывода
/// Настраивает формат вывода вещественных чисел в разделе отладки
/// окна задачника. Если N > 0, то число выводится в формате
/// с фиксированной точкой и N дробными знаками. Если N = 0,
/// то число выводится в экспоненциальном формате, число дробных
/// знаков определяется шириной поля вывода
procedure SetPrecision(N: integer);
/// Обеспечивает автоматическое скрытие всех разделов
/// окна задачника, кроме раздела отладки
/// Обеспечивает автоматическое скрытие всех разделов
/// окна задачника, кроме раздела отладки
procedure HideTask;
// == Конец дополнений к версии 1.3 ==
// == Конец дополнений к версии 1.3 ==
// == Версия 4.14. Дополнения ==
// == Версия 4.14. Дополнения ==
/// Вводит n целых чисел
/// и возвращает введенные числа в виде массива
/// Вводит n целых чисел
/// и возвращает введенные числа в виде массива
function ReadArrInteger(n: integer): array of integer;
/// Вводит n вещественных чисел
/// и возвращает введенные числа в виде массива
/// Вводит n вещественных чисел
/// и возвращает введенные числа в виде массива
function ReadArrReal(n: integer): array of real;
/// Вводит n строк
/// и возвращает введенные строки в виде массива
/// Вводит n строк
/// и возвращает введенные строки в виде массива
function ReadArrString(n: integer): array of string;
/// Вводит n целых чисел
/// и возвращает введенные числа в виде последовательности
/// Вводит n целых чисел
/// и возвращает введенные числа в виде последовательности
function ReadSeqInteger(n: integer): sequence of integer;
/// Вводит n вещественных чисел
/// и возвращает введенные числа в виде последовательности
/// Вводит n вещественных чисел
/// и возвращает введенные числа в виде последовательности
function ReadSeqReal(n: integer): sequence of real;
/// Вводит n строк
/// и возвращает введенные строки в виде последовательности
/// Вводит n строк
/// и возвращает введенные строки в виде последовательности
function ReadSeqString(n: integer): sequence of string;
/// Вводит размер набора целых чисел и его элементы
/// и возвращает введенный набор в виде последовательности
/// Вводит размер набора целых чисел и его элементы
/// и возвращает введенный набор в виде последовательности
function ReadSeqInteger(): sequence of integer;
/// Вводит размер набора вещественных чисел и его элементы
/// и возвращает введенный набор в виде последовательности
/// Вводит размер набора вещественных чисел и его элементы
/// и возвращает введенный набор в виде последовательности
function ReadSeqReal(): sequence of real;
/// Вводит размер набора строк и его элементы
/// и возвращает введенный набор в виде последовательности
/// Вводит размер набора строк и его элементы
/// и возвращает введенный набор в виде последовательности
function ReadSeqString(): sequence of string;
/// Вводит размер набора целых чисел и его элементы
/// и возвращает введенный набор в виде массива
/// Вводит размер набора целых чисел и его элементы
/// и возвращает введенный набор в виде массива
function ReadArrInteger(): array of integer;
/// Вводит размер набора вещественных чисел и его элементы
/// и возвращает введенный набор в виде массива
/// Вводит размер набора вещественных чисел и его элементы
/// и возвращает введенный набор в виде массива
function ReadArrReal(): array of real;
/// Вводит размер набора строк и его элементы
/// и возвращает введенный набор в виде массива
/// Вводит размер набора строк и его элементы
/// и возвращает введенный набор в виде массива
function ReadArrString(): array of string;
/// Вводит целую матрицу размера m на n по строкам
/// Вводит целую матрицу размера m на n по строкам
function ReadMatrInteger(m,n: integer): array [,] of integer;
/// Вводит размеры матрицы и затем целую матрицу указанных размеров по строкам
/// Вводит размеры матрицы и затем целую матрицу указанных размеров по строкам
function ReadMatrInteger(): array [,] of integer;
/// Вводит вещественную матрицу размера m на n по строкам
/// Вводит вещественную матрицу размера m на n по строкам
function ReadMatrReal(m,n: integer): array [,] of real;
/// Вводит размеры матрицы и затем вещественную матрицу указанных размеров по строкам
/// Вводит размеры матрицы и затем вещественную матрицу указанных размеров по строкам
function ReadMatrReal(): array [,] of real;
/// Вводит матрицу из строк размера m на n по строкам
/// Вводит матрицу из строк размера m на n по строкам
function ReadMatrString(m,n: integer): array [,] of string;
/// Вводит размеры матрицы и затем строковую матрицу указанных размеров по строкам
/// Вводит размеры матрицы и затем строковую матрицу указанных размеров по строкам
function ReadMatrString(): array [,] of string;
procedure ReadMatr(var m, n: integer; var a: array [,] of integer);
@ -603,7 +603,7 @@ procedure WriteMatr<T>(a: array of array of T);
procedure WriteMatr<T>(a: List<List<T>>);
// == Дополнения 2016.07
// == Дополнения 2016.07
procedure PrintMatr<T>(a: array[,] of T);
@ -611,16 +611,16 @@ procedure PrintMatr<T>(a: array of array of T);
procedure PrintMatr<T>(a: List<List<T>>);
// == Конец дополнений 2016.07
// == Конец дополнений 2016.07
// == Конец дополнений к версии 4.14 ==
// == Конец дополнений к версии 4.14 ==
implementation
const
NotSupportedReadTypeMessage = 'Ввод данных типа {0} не поддерживается';
NotSupportedWriteTypeMessage = 'Вывод данных типа {0} не поддерживается';
eMessage = 'Попытка обращения к объекту Node после вызова его метода Dispose';
NotSupportedReadTypeMessage = 'Ввод данных типа {0} не поддерживается';
NotSupportedWriteTypeMessage = 'Вывод данных типа {0} не поддерживается';
eMessage = 'Попытка обращения к объекту Node после вызова его метода Dispose';
var
loadNodes: ArrayList;
@ -1058,7 +1058,7 @@ begin
end;
// -----------------------------------------------------
// Функции Get
// Функции Get
// -----------------------------------------------------
function GetInt: integer;
var val:integer;
@ -1094,7 +1094,7 @@ end;
function GetString: string;
var val: System.Text.StringBuilder;
begin
val := new System.Text.StringBuilder(200);//TODO почему 200?
val := new System.Text.StringBuilder(200);//TODO почему 200?
_gets(val);
result := val.ToString;
end;
@ -1125,8 +1125,8 @@ var
p: IntPtr;
sNode: InternalNode;
begin
//raise new NotSupportedException('Работа с динамическими структурами задачника PT4 не поддерживается в этой версии компилятора. Исправление ошибки планируется в следуйщей версии');
//result := new PT4Node(sNode, p);// fixme здесь ошибка генерации кода!
//raise new NotSupportedException('Работа с динамическими структурами задачника PT4 не поддерживается в этой версии компилятора. Исправление ошибки планируется в следуйщей версии');
//result := new PT4Node(sNode, p);// fixme здесь ошибка генерации кода!
p := IntPtr.Zero;
sNode.Data := 0;
sNode.Next := IntPtr.Zero;
@ -1225,7 +1225,7 @@ begin
Result := GetNode;
end;
// == Версия 4.15. Дополнения ==
// == Версия 4.15. Дополнения ==
function ReadInteger(prompt: string): integer;
begin
@ -1297,9 +1297,9 @@ begin
Result := GetNode;
end;
// == Версия 4.15. Конец дополнений ==
// == Версия 4.15. Конец дополнений ==
// == Версия 4.17. Дополнения ==
// == Версия 4.17. Дополнения ==
function ReadInteger2: (integer, integer);
begin
@ -1541,11 +1541,11 @@ begin
Result := (GetNode, GetNode, GetNode);
end;
// == Версия 4.17. Конец дополнений ==
// == Версия 4.17. Конец дополнений ==
// -----------------------------------------------------
// Процедуры Put
// Процедуры Put
// -----------------------------------------------------
procedure PutInt(val: integer);
begin
@ -1594,7 +1594,7 @@ begin
end;
// -----------------------------------------------------
// Генерация исключений
// Генерация исключений
// -----------------------------------------------------
procedure RaisePTAndCheckPT(e: Exception);
begin
@ -1719,7 +1719,7 @@ begin
Print(args);
end;
// == Версия 4.15. Дополнения ==
// == Версия 4.15. Дополнения ==
procedure Print(s: string);
begin
@ -1731,7 +1731,7 @@ begin
write(s);
end;
// == Версия 4.15. Конец дополнений ==
// == Версия 4.15. Конец дополнений ==
{procedure write;
begin
@ -1769,7 +1769,7 @@ begin
var ip := IntPtr(PointerOutput(args[i]).p);
_PutP(ip);
end
// == Версия 4.17. Дополнения ==
// == Версия 4.17. Дополнения ==
else if args[i].GetType.FullName.StartsWith('System.Tuple') then
foreach var e in args[i].GetType.GetProperties do
InternalWrite(Arr(e.GetValue(args[i],nil)))
@ -1779,7 +1779,7 @@ begin
while e.MoveNext do
InternalWrite(Arr(e.Current));
end
// == Версия 4.17. Конец дополнений ==
// == Версия 4.17. Конец дополнений ==
else GenerateNotSupportedWriteTypeException(args[i].GetType.ToString);
end;
@ -1815,7 +1815,7 @@ begin
if InfoT=0 then
Console.WriteLine(InfoS);
FreePT;
// == Начало дополнений к версии 4.13 ==
// == Начало дополнений к версии 4.13 ==
var fpt := FinishPT;
if fpt = 1 then exit;
var asm := System.Reflection.Assembly.GetExecutingAssembly;
@ -1864,10 +1864,10 @@ begin
inc(i);
fpt := FinishPT;
end;
// == Конец дополнений к версии 4.13 ==
// == Конец дополнений к версии 4.13 ==
end;
// == Версия 1.3. Дополнения ==
// == Версия 1.3. Дополнения ==
var
D: integer := 2;
@ -1989,9 +1989,9 @@ begin
D := N;
end;
// == Конец дополнений к версии 1.3 ==
// == Конец дополнений к версии 1.3 ==
// == Версия 4.14. Дополнения ==
// == Версия 4.14. Дополнения ==
function ReadSeqInteger(): sequence of integer;
begin
@ -2263,7 +2263,7 @@ begin
write(a[i][j]);
end;
/// Выводит размер и элементы последовательности
/// Выводит размер и элементы последовательности
procedure WriteAll<T>(self: sequence of T); extensionmethod;
begin
var b := self.ToArray();
@ -2272,7 +2272,7 @@ begin
PT4.Put(e);
end;
/// Выводит элементы последовательности
/// Выводит элементы последовательности
procedure Write<T>(self: sequence of T); extensionmethod;
begin
var b := self.ToArray();
@ -2280,14 +2280,14 @@ begin
PT4.Put(e);
end;
/// Выводит элементы динамического массива
/// Выводит элементы динамического массива
procedure Write<T>(self: array of T); extensionmethod;
begin
for var i:=0 to self.Length-1 do
PT4.Put(self[i]);
end;
/// Выводит элементы матрицы
/// Выводит элементы матрицы
procedure Write<T>(self: array [,] of T); extensionmethod;
begin
for var i:=0 to self.GetLength(0)-1 do
@ -2295,7 +2295,7 @@ begin
PT4.Put(self[i,j]);
end;
// == Дополнения 2016.07
// == Дополнения 2016.07
procedure PrintMatr<T>(a: array[,] of T);
begin
@ -2318,7 +2318,7 @@ begin
write(a[i][j]);
end;
/// Выводит размер и элементы последовательности
/// Выводит размер и элементы последовательности
procedure PrintAll<T>(self: sequence of T); extensionmethod;
begin
var b := self.ToArray();
@ -2327,7 +2327,7 @@ begin
PT4.Put(e);
end;
/// Выводит размер и элементы динамического массива
/// Выводит размер и элементы динамического массива
procedure PrintAll<T>(self: array of T); extensionmethod;
begin
PT4.Put(self.Length);
@ -2335,7 +2335,7 @@ begin
PT4.Put(self[i]);
end;
/// Выводит размер и элементы динамического массива
/// Выводит размер и элементы динамического массива
procedure WriteAll<T>(self: array of T); extensionmethod;
begin
PT4.Put(self.Length);
@ -2343,7 +2343,7 @@ begin
PT4.Put(self[i]);
end;
/// Выводит элементы последовательности
/// Выводит элементы последовательности
procedure Writeln<T>(self: sequence of T); extensionmethod;
begin
var b := self.ToArray();
@ -2351,14 +2351,14 @@ begin
PT4.Put(e);
end;
/// Выводит элементы динамического массива
/// Выводит элементы динамического массива
procedure Writeln<T>(self: array of T); extensionmethod;
begin
for var i:=0 to self.Length-1 do
PT4.Put(self[i]);
end;
/// Выводит элементы матрицы
/// Выводит элементы матрицы
procedure Writeln<T>(self: array [,] of T); extensionmethod;
begin
for var i:=0 to self.GetLength(0)-1 do
@ -2366,13 +2366,13 @@ begin
PT4.Put(self[i,j]);
end;
// == Конец дополнений 2016.07
// == Конец дополнений 2016.07
/// Выводит в разделе отладки окна задачника
/// комментарий cmt, размер последовательности и значения,
/// полученные из элементов последовательности
/// с помощью указанного лямбда-выражения
/// Выводит в разделе отладки окна задачника
/// комментарий cmt, размер последовательности и значения,
/// полученные из элементов последовательности
/// с помощью указанного лямбда-выражения
function Show<TSource>(self: sequence of TSource; cmt: string; selector: System.Func<TSource, string>): sequence of TSource; extensionmethod;
begin
@ -2385,17 +2385,17 @@ begin
result := self;
end;
/// Выводит в разделе отладки окна задачника
/// размер последовательности и значения,
/// полученные из элементов последовательности
/// с помощью указанного лямбда-выражения
/// Выводит в разделе отладки окна задачника
/// размер последовательности и значения,
/// полученные из элементов последовательности
/// с помощью указанного лямбда-выражения
function Show<TSource>(Self: sequence of TSource; selector: System.Func<TSource, string>): sequence of TSource; extensionmethod;
begin
result := self.Show('', selector);
end;
/// Выводит в разделе отладки окна задачника
/// комментарий cmt, размер последовательности и ее элементы
/// Выводит в разделе отладки окна задачника
/// комментарий cmt, размер последовательности и ее элементы
function Show<TSource>(Self: sequence of TSource; cmt: string): sequence of TSource; extensionmethod;
begin
result := self;
@ -2414,14 +2414,14 @@ begin
end;
/// Выводит в разделе отладки окна задачника
/// размер последовательности и ее элементы.
/// Выводит в разделе отладки окна задачника
/// размер последовательности и ее элементы.
function Show<TSource>(Self: sequence of TSource): sequence of TSource; extensionmethod;
begin
result := self.Show('');
end;
// == Конец дополнений к версии 4.14 ==
// == Конец дополнений к версии 4.14 ==
initialization
__InitModule;

View file

@ -4,7 +4,7 @@ unit PT4Exam;
//------------------------------------------------------------------------------
// Модуль для подключения задачника PT for Exam
// Версия 1.2
// Copyright (c) 2014-2017 М.Э.Абрамян
// Copyright (©) 2014-2017 М.Э.Абрамян
//------------------------------------------------------------------------------

View file

@ -6,7 +6,7 @@ unit PT4TaskMakerNET;
//------------------------------------------------------------------------------
// Модуль для создания NET-библиотек с группами заданий в системе PascalABC.NET
//
// Copyright (c) 2013 М.Э.Абрамян
// Copyright (©) 2013 М.Э.Абрамян
// Электронный задачник Programming Taskbook Copyright (c) М.Э.Абрамян,1998-2013
//------------------------------------------------------------------------------

View file

@ -1,3 +1,5 @@
// Copyright (©) Ivan Bondarev, Stanislav Mihalkovich (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
unit Graph3D;
{$reference 'PresentationFramework.dll'}

View file

@ -0,0 +1,18 @@
var a: integer;
type
t1 = class
public constructor(i: integer);
begin
var p:procedure := () ->begin
a := i;
end;
p;
end;
end;
begin
var t := new t1(2);
assert(a = 2);
end.

View file

@ -746,8 +746,10 @@ namespace TreeConverter.LambdaExpressions.Closure
{
nodesToAdd.Add(generatedClass.AssignNodeForUpperClassFieldInitialization);
}
statementList.subnodes.InsertRange(0, nodesToAdd);
int ind = 0;
if (statementList.subnodes.Count > 0 && statementList.subnodes[0] is procedure_call && (statementList.subnodes[0] as procedure_call).func_name is inherited_ident)
ind = 1;
statementList.subnodes.InsertRange(ind, nodesToAdd);
}
}

View file

@ -282,7 +282,14 @@ namespace PascalABCCompiler.TreeConverter
internal bool can_call_inherited_ctor_call(statements_list lst)
{
return lst.statements.Count == 0;
if (lst.statements.Count == 0)
return true;
if (lst.statements[0] is basic_function_call)
{
base_function_call bfc = lst.statements[0] as basic_function_call;
}
return false;
}
public void reset()