This commit is contained in:
miks1965 2017-03-08 00:30:47 +03:00
parent c7d2fac674
commit a8ee800840
17 changed files with 2183 additions and 1928 deletions

View file

@ -5,7 +5,7 @@ using System.Runtime.CompilerServices;
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("PascalABC.NET Compiler")]
[assembly: AssemblyCopyright("Copyright © 2005-2017 by Ivan Bondarev, Stanislav Mihalkovich")]
[assembly: AssemblyCopyright("Copyright © 2005-2016 by Ivan Bondarev, Stanislav Mihalkovich")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: AssemblyVersion(RevisionClass.FullVersion)]
@ -15,7 +15,7 @@ internal static class RevisionClass
public const string Major = "3";
public const string Minor = "2";
public const string Build = "0";
public const string Revision = "1386";
public const string Revision = "1398";
public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;

View file

@ -1,4 +1,4 @@
%MINOR%=2
%REVISION%=1386
%REVISION%=1398
%COREVERSION%=0
%MAJOR%=3

View file

@ -2,7 +2,7 @@
// This CSharp output file generated by Gardens Point LEX
// Version: 1.1.3.301
// Machine: DESKTOP-8EAQPI9
// DateTime: 11.02.2017 17:44:25
// DateTime: 26.02.2017 19:20:17
// UserName: ?????????
// GPLEX input file <ABCPascal.lex>
// GPLEX frame file <embedded resource>

View file

@ -1938,6 +1938,14 @@ proc_func_decl_noclass
{
$$ = SyntaxTreeBuilder.BuildShortFuncDefinition($3 as formal_parameters, $4 as procedure_attributes_list, $2 as method_name, null, $6, @1.Merge(@3));
}
| tkFunction func_name fp_list tkColon fptype optional_method_modificators1 tkAssign func_decl_lambda tkSemiColon
{
$$ = SyntaxTreeBuilder.BuildShortFuncDefinition($3 as formal_parameters, $6 as procedure_attributes_list, $2 as method_name, $5 as type_definition, $8, @1.Merge(@5));
}
| tkFunction func_name fp_list optional_method_modificators1 tkAssign func_decl_lambda tkSemiColon
{
$$ = SyntaxTreeBuilder.BuildShortFuncDefinition($3 as formal_parameters, $4 as procedure_attributes_list, $2 as method_name, null, $6, @1.Merge(@3));
}
| tkProcedure proc_name fp_list optional_method_modificators1 tkAssign unlabelled_stmt tkSemiColon
{
if ($6 is empty_statement)

File diff suppressed because it is too large Load diff

View file

@ -160,5 +160,6 @@ script=

View file

@ -1 +1 @@
!define VERSION '3.2.0.1386'
!define VERSION '3.2.0.1398'

View file

@ -912,6 +912,8 @@ begin
if oldBounds.IntersectsWith(newBounds) then
begin
r := GRectangle.Union(oldBounds,newBounds);
//TextOut(0,0,r.ToString);
//r.Width := r.Width + 5;
drawRect(r);
end
else

View file

@ -1217,25 +1217,6 @@ function Odd(i: uint64): boolean;
function Cplx(re,im: real): Complex;
/// Конструирует комплексное число по полярным координатам
function CplxFromPolar(magnitude,phase: real) : Complex;
/// Возвращает квадратный корень из комплексного числа
function Sqrt(c: Complex): Complex;
/// Возвращает модуль комплексного числа
function Abs(c: Complex): Complex;
/// Возвращает комплексно сопряженное число
function Conjugate(c: Complex): Complex;
/// Возвращает косинус комплексного числа
function Cos(c: Complex): Complex;
/// Возвращает экспоненту комплексного числа
function Exp(c: Complex): Complex;
/// Возвращает натуральный логарифм комплексного числа
function Log(c: Complex): Complex;
/// Возвращает десятичный логарифм комплексного числа
function Log10(c: Complex): Complex;
/// Возвращает степень комплексного числа
function Power(c,power: Complex): Complex;
/// Возвращает синус комплексного числа
function Sin(c: Complex): Complex;
// -----------------------------------------------------
//>> Процедуры для работы со стандартными множествами # Subroutines for set of T
@ -1715,6 +1696,8 @@ function SSet<T>(params a: array of T): SortedSet<T>;
function SSet<T>(a: sequence of T): SortedSet<T>;
/// Возвращает словарь пар элементов (ключ, значение)
function Dict<TKey, TVal>(params pairs: array of KeyValuePair<TKey, TVal>): Dictionary<TKey, TVal>;
/// Возвращает словарь пар элементов (ключ, значение)
function Dict<TKey, TVal>(params pairs: array of (TKey, TVal)): Dictionary<TKey, TVal>;
/// Возвращает пару элементов (ключ, значение)
function KV<TKey, TVal>(key: TKey; value: TVal): KeyValuePair<TKey, TVal>;
@ -4257,6 +4240,13 @@ begin
Result.Add(pairs[i].Key, pairs[i].Value);
end;
function Dict<TKey, TVal>(params pairs: array of (TKey, TVal)): Dictionary<TKey, TVal>;
begin
Result := new Dictionary<TKey, TVal>();
for var i := 0 to pairs.Length - 1 do
Result.Add(pairs[i][0], pairs[i][1]);
end;
function KV<TKey, TVal>(key: TKey; value: TVal): KeyValuePair<TKey, TVal>;
begin
Result := new KeyValuePair<TKey, TVal>(key, value);
@ -7069,24 +7059,6 @@ function Cplx(re,im: real) := new Complex(re,im);
function CplxFromPolar(magnitude,phase: real) := Complex.FromPolarCoordinates(magnitude,phase);
function Sqrt(c: Complex) := Complex.Sqrt(c);
function Abs(c: Complex) := Complex.Abs(c);
function Conjugate(c: Complex) := Complex.Conjugate(c);
function Cos(c: Complex) := Complex.Cos(c);
function Exp(c: Complex) := Complex.Exp(c);
function Log(c: Complex) := Complex.Log(c);
function Log10(c: Complex) := Complex.Log10(c);
function Power(c,power: Complex) := Complex.Pow(c,power);
function Sin(c: Complex) := Complex.Sin(c);
// -----------------------------------------------------
// Dynamic arrays: implementation
// -----------------------------------------------------

View file

@ -1,15 +1,15 @@
/// Модуль электронного задачника Programming Taskbook 4
/// Модуль электронного задачника Programming Taskbook 4
unit PT4;
//------------------------------------------------------------------------------
// Модуль для подключения задачника Programming Taskbook
// Версия 4.15
// Модуль для подключения задачника 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
// Электронный задачник Programming Taskbook Copyright (c)М.Э.Абрамян, 1998-2016
// Copyright (c) 2010 М.Э.Абрамян, дополнения к версии 1.3
// Copyright (c) 2014-2015 М.Э.Абрамян, дополнения к версии 4.13
// Copyright (c) 2015 М.Э.Абрамян, дополнения к версии 4.14
// Copyright (c) 2016 М.Э.Абрамян, дополнения к версии 4.15
// Электронный задачник Programming Taskbook Copyright (c)М.Э.Абрамян, 1998-2017
//------------------------------------------------------------------------------
{$apptype windows}
@ -21,9 +21,9 @@ uses System,
System.Collections,
System.Runtime.InteropServices;
type
/// Тип указателя на узел списка
/// Тип указателя на узел списка
PNode = ^TNode;
/// Тип узла списка
/// Тип узла списка
TNode = record
Data: integer;
Next,Prev,Left,Right,Parent: PNode;
@ -79,107 +79,107 @@ 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. Конец дополнений ==
procedure GetR(var param: real);
procedure GetN(var param: integer);
@ -206,9 +206,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);
@ -246,20 +246,20 @@ 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;
///--
@ -267,162 +267,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);
@ -467,7 +467,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);
@ -475,16 +475,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;
@ -922,7 +922,7 @@ begin
end;
// -----------------------------------------------------
// Функции Get
// Функции Get
// -----------------------------------------------------
function GetInt: integer;
var val:integer;
@ -958,7 +958,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;
@ -989,8 +989,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;
@ -1089,7 +1089,7 @@ begin
Result := GetNode;
end;
// == Версия 4.15. Дополнения ==
// == Версия 4.15. Дополнения ==
function ReadInteger(prompt: string): integer;
begin
@ -1161,10 +1161,10 @@ begin
Result := GetNode;
end;
// == Версия 4.15. Конец дополнений ==
// == Версия 4.15. Конец дополнений ==
// -----------------------------------------------------
// Процедуры Put
// Процедуры Put
// -----------------------------------------------------
procedure PutInt(val: integer);
begin
@ -1213,7 +1213,7 @@ begin
end;
// -----------------------------------------------------
// Генерация исключений
// Генерация исключений
// -----------------------------------------------------
procedure RaisePTAndCheckPT(e: Exception);
begin
@ -1338,7 +1338,7 @@ begin
Print(args);
end;
// == Версия 4.15. Дополнения ==
// == Версия 4.15. Дополнения ==
procedure Print(s: string);
begin
@ -1350,7 +1350,7 @@ begin
write(s);
end;
// == Версия 4.15. Конец дополнений ==
// == Версия 4.15. Конец дополнений ==
{procedure write;
begin
@ -1423,7 +1423,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;
@ -1432,6 +1432,15 @@ begin
var prg := asm.GetType(nm+'.Program');
var solveproc := prg.GetMethod('$Main');
var initproc := prg.GetMethod('$_InitVariables_');
if (solveproc = nil) or (initproc = nil) then
foreach var prg0 in asm.GetTypes() do
begin
prg := prg0;
solveproc := prg0.GetMethod('$Main');
initproc := prg0.GetMethod('$_InitVariables_');
if (solveproc <> nil) and (initproc <> nil) then
break;
end;
var examunit := asm.GetType('PT4Exam.PT4Exam');
var finexamproc: System.Reflection.MethodInfo := nil;
if examunit <> nil then
@ -1441,7 +1450,7 @@ begin
begin
StartPT(512);
try
foreach var f in prg.GetFields do
foreach var f in prg.GetFields() do
if not f.Name.StartsWith('$') then
try
f.SetValue(nil, nil);
@ -1452,11 +1461,7 @@ begin
solveproc.Invoke(nil,nil);
except
on e: Exception do
begin
//if e.InnerException<>nil then
RaisePT('HHH', 'ggg');
//RaisePT(e.InnerException.GetType.ToString, e.InnerException.Message);
end;
RaisePT(e.InnerException.GetType.ToString, e.InnerException.Message);
end;
if finexamproc <> nil then
finexamproc.Invoke(nil,nil);
@ -1465,10 +1470,10 @@ begin
inc(i);
fpt := FinishPT;
end;
// == Конец дополнений к версии 4.13 ==
// == Конец дополнений к версии 4.13 ==
end;
// == Версия 1.3. Дополнения ==
// == Версия 1.3. Дополнения ==
var
D: integer := 2;
@ -1590,9 +1595,9 @@ begin
D := N;
end;
// == Конец дополнений к версии 1.3 ==
// == Конец дополнений к версии 1.3 ==
// == Версия 4.14. Дополнения ==
// == Версия 4.14. Дополнения ==
function ReadSeqInteger(): sequence of integer;
begin
@ -1864,7 +1869,7 @@ begin
write(a[i][j]);
end;
/// Выводит размер и элементы последовательности
/// Выводит размер и элементы последовательности
procedure WriteAll<T>(self: sequence of T); extensionmethod;
begin
var b := self.ToArray();
@ -1873,7 +1878,7 @@ begin
PT4.Put(e);
end;
/// Выводит элементы последовательности
/// Выводит элементы последовательности
procedure Write<T>(self: sequence of T); extensionmethod;
begin
var b := self.ToArray();
@ -1881,14 +1886,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
@ -1896,7 +1901,7 @@ begin
PT4.Put(self[i,j]);
end;
// == Дополнения 2016.07
// == Дополнения 2016.07
procedure PrintMatr<T>(a: array[,] of T);
begin
@ -1919,7 +1924,7 @@ begin
write(a[i][j]);
end;
/// Выводит размер и элементы последовательности
/// Выводит размер и элементы последовательности
procedure PrintAll<T>(self: sequence of T); extensionmethod;
begin
var b := self.ToArray();
@ -1928,7 +1933,7 @@ begin
PT4.Put(e);
end;
/// Выводит размер и элементы динамического массива
/// Выводит размер и элементы динамического массива
procedure PrintAll<T>(self: array of T); extensionmethod;
begin
PT4.Put(self.Length);
@ -1936,7 +1941,7 @@ begin
PT4.Put(self[i]);
end;
/// Выводит размер и элементы динамического массива
/// Выводит размер и элементы динамического массива
procedure WriteAll<T>(self: array of T); extensionmethod;
begin
PT4.Put(self.Length);
@ -1944,7 +1949,7 @@ begin
PT4.Put(self[i]);
end;
/// Выводит элементы последовательности
/// Выводит элементы последовательности
procedure Writeln<T>(self: sequence of T); extensionmethod;
begin
var b := self.ToArray();
@ -1952,14 +1957,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
@ -1967,13 +1972,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
@ -1986,17 +1991,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;
@ -2015,14 +2020,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

@ -1,10 +1,10 @@
/// Модуль электронного задачника PT for Exam
/// Модуль электронного задачника PT for Exam
unit PT4Exam;
//------------------------------------------------------------------------------
// Модуль для подключения задачника PT for Exam
// Версия 1.1
// Copyright (c) 2014-2015 М.Э.Абрамян
// Версия 1.2
// Copyright (c) 2014-2017 М.Э.Абрамян
//------------------------------------------------------------------------------
@ -13,6 +13,30 @@ interface
procedure Task(name: string);
procedure FinExam;
//1.2
procedure Show(S: string);
procedure Show(S: string; A: Integer; W: Integer);
procedure Show(S: string; A: Real; W: Integer);
procedure Show(S: string; A: Integer);
procedure Show(S: string; A: Real);
procedure Show(A: Integer; W: Integer);
procedure Show(A: Real; W: Integer);
procedure Show(A: Integer);
procedure Show(A: Real);
procedure ShowLine;
procedure ShowLine(S: string);
procedure ShowLine(S: string; A: Integer; W: Integer);
procedure ShowLine(S: string; A: Real; W: Integer);
procedure ShowLine(S: string; A: Integer);
procedure ShowLine(S: string; A: Real);
procedure ShowLine(A: Integer; W: Integer);
procedure ShowLine(A: Real; W: Integer);
procedure ShowLine(A: Integer);
procedure ShowLine(A: Real);
procedure SetPrecision(N: integer);
procedure HideTask;
implementation
uses
@ -72,6 +96,112 @@ begin
NextTask := false;
end;
procedure Show(S: string);
begin
PT4.Show(S);
end;
procedure Show(S: string; A: Integer; W: Integer);
begin
PT4.Show(S, A, W);
end;
procedure Show(S: string; A: Real; W: Integer);
begin
PT4.Show(S, A, W);
end;
procedure Show(S: string; A: Integer);
begin
PT4.Show(S, A);
end;
procedure Show(S: string; A: Real);
begin
PT4.Show(S, A);
end;
procedure Show(A: Integer; W: Integer);
begin
PT4.Show(A, W);
end;
procedure Show(A: Real; W: Integer);
begin
PT4.Show(A, W);
end;
procedure Show(A: Integer);
begin
PT4.Show(A);
end;
procedure Show(A: Real);
begin
PT4.Show(A);
end;
procedure ShowLine(S: string);
begin
PT4.ShowLine(S);
end;
procedure ShowLine;
begin
PT4.ShowLine;
end;
procedure ShowLine(S: string; A: Integer; W: Integer);
begin
PT4.ShowLine(S, A, W);
end;
procedure ShowLine(S: string; A: Real; W: Integer);
begin
PT4.ShowLine(S, A, W);
end;
procedure ShowLine(S: string; A: Integer);
begin
PT4.ShowLine(S, A);
end;
procedure ShowLine(S: string; A: Real);
begin
PT4.ShowLine(S, A);
end;
procedure ShowLine(A: Integer; W: Integer);
begin
PT4.ShowLine(A, W);
end;
procedure ShowLine(A: Real; W: Integer);
begin
PT4.ShowLine(A, W);
end;
procedure ShowLine(A: Integer);
begin
PT4.ShowLine(A);
end;
procedure ShowLine(A: Real);
begin
PT4.ShowLine(A);
end;
procedure HideTask;
begin
PT4.HideTask;
end;
procedure SetPrecision(N: Integer);
begin
PT4.SetPrecision(N);
end;
initialization
finalization

View file

@ -0,0 +1,8 @@
function f: procedure := ()->write(1);
function f1: integer->integer := x->x;
begin
f()();
Print(f1()(2));
end.

View file

@ -912,6 +912,8 @@ begin
if oldBounds.IntersectsWith(newBounds) then
begin
r := GRectangle.Union(oldBounds,newBounds);
//TextOut(0,0,r.ToString);
//r.Width := r.Width + 5;
drawRect(r);
end
else

Binary file not shown.

View file

@ -1217,25 +1217,6 @@ function Odd(i: uint64): boolean;
function Cplx(re,im: real): Complex;
/// Конструирует комплексное число по полярным координатам
function CplxFromPolar(magnitude,phase: real) : Complex;
/// Возвращает квадратный корень из комплексного числа
function Sqrt(c: Complex): Complex;
/// Возвращает модуль комплексного числа
function Abs(c: Complex): Complex;
/// Возвращает комплексно сопряженное число
function Conjugate(c: Complex): Complex;
/// Возвращает косинус комплексного числа
function Cos(c: Complex): Complex;
/// Возвращает экспоненту комплексного числа
function Exp(c: Complex): Complex;
/// Возвращает натуральный логарифм комплексного числа
function Log(c: Complex): Complex;
/// Возвращает десятичный логарифм комплексного числа
function Log10(c: Complex): Complex;
/// Возвращает степень комплексного числа
function Power(c,power: Complex): Complex;
/// Возвращает синус комплексного числа
function Sin(c: Complex): Complex;
// -----------------------------------------------------
//>> Процедуры для работы со стандартными множествами # Subroutines for set of T
@ -1715,6 +1696,8 @@ function SSet<T>(params a: array of T): SortedSet<T>;
function SSet<T>(a: sequence of T): SortedSet<T>;
/// Возвращает словарь пар элементов (ключ, значение)
function Dict<TKey, TVal>(params pairs: array of KeyValuePair<TKey, TVal>): Dictionary<TKey, TVal>;
/// Возвращает словарь пар элементов (ключ, значение)
function Dict<TKey, TVal>(params pairs: array of (TKey, TVal)): Dictionary<TKey, TVal>;
/// Возвращает пару элементов (ключ, значение)
function KV<TKey, TVal>(key: TKey; value: TVal): KeyValuePair<TKey, TVal>;
@ -4257,6 +4240,13 @@ begin
Result.Add(pairs[i].Key, pairs[i].Value);
end;
function Dict<TKey, TVal>(params pairs: array of (TKey, TVal)): Dictionary<TKey, TVal>;
begin
Result := new Dictionary<TKey, TVal>();
for var i := 0 to pairs.Length - 1 do
Result.Add(pairs[i][0], pairs[i][1]);
end;
function KV<TKey, TVal>(key: TKey; value: TVal): KeyValuePair<TKey, TVal>;
begin
Result := new KeyValuePair<TKey, TVal>(key, value);
@ -7069,24 +7059,6 @@ function Cplx(re,im: real) := new Complex(re,im);
function CplxFromPolar(magnitude,phase: real) := Complex.FromPolarCoordinates(magnitude,phase);
function Sqrt(c: Complex) := Complex.Sqrt(c);
function Abs(c: Complex) := Complex.Abs(c);
function Conjugate(c: Complex) := Complex.Conjugate(c);
function Cos(c: Complex) := Complex.Cos(c);
function Exp(c: Complex) := Complex.Exp(c);
function Log(c: Complex) := Complex.Log(c);
function Log10(c: Complex) := Complex.Log10(c);
function Power(c,power: Complex) := Complex.Pow(c,power);
function Sin(c: Complex) := Complex.Sin(c);
// -----------------------------------------------------
// Dynamic arrays: implementation
// -----------------------------------------------------

View file

@ -1,15 +1,15 @@
/// Модуль электронного задачника Programming Taskbook 4
/// Модуль электронного задачника Programming Taskbook 4
unit PT4;
//------------------------------------------------------------------------------
// Модуль для подключения задачника Programming Taskbook
// Версия 4.15
// Модуль для подключения задачника 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
// Электронный задачник Programming Taskbook Copyright (c)М.Э.Абрамян, 1998-2016
// Copyright (c) 2010 М.Э.Абрамян, дополнения к версии 1.3
// Copyright (c) 2014-2015 М.Э.Абрамян, дополнения к версии 4.13
// Copyright (c) 2015 М.Э.Абрамян, дополнения к версии 4.14
// Copyright (c) 2016 М.Э.Абрамян, дополнения к версии 4.15
// Электронный задачник Programming Taskbook Copyright (c)М.Э.Абрамян, 1998-2017
//------------------------------------------------------------------------------
{$apptype windows}
@ -21,9 +21,9 @@ uses System,
System.Collections,
System.Runtime.InteropServices;
type
/// Тип указателя на узел списка
/// Тип указателя на узел списка
PNode = ^TNode;
/// Тип узла списка
/// Тип узла списка
TNode = record
Data: integer;
Next,Prev,Left,Right,Parent: PNode;
@ -79,107 +79,107 @@ 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. Конец дополнений ==
procedure GetR(var param: real);
procedure GetN(var param: integer);
@ -206,9 +206,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);
@ -246,20 +246,20 @@ 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;
///--
@ -267,162 +267,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);
@ -467,7 +467,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);
@ -475,16 +475,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;
@ -922,7 +922,7 @@ begin
end;
// -----------------------------------------------------
// Функции Get
// Функции Get
// -----------------------------------------------------
function GetInt: integer;
var val:integer;
@ -958,7 +958,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;
@ -989,8 +989,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;
@ -1089,7 +1089,7 @@ begin
Result := GetNode;
end;
// == Версия 4.15. Дополнения ==
// == Версия 4.15. Дополнения ==
function ReadInteger(prompt: string): integer;
begin
@ -1161,10 +1161,10 @@ begin
Result := GetNode;
end;
// == Версия 4.15. Конец дополнений ==
// == Версия 4.15. Конец дополнений ==
// -----------------------------------------------------
// Процедуры Put
// Процедуры Put
// -----------------------------------------------------
procedure PutInt(val: integer);
begin
@ -1213,7 +1213,7 @@ begin
end;
// -----------------------------------------------------
// Генерация исключений
// Генерация исключений
// -----------------------------------------------------
procedure RaisePTAndCheckPT(e: Exception);
begin
@ -1338,7 +1338,7 @@ begin
Print(args);
end;
// == Версия 4.15. Дополнения ==
// == Версия 4.15. Дополнения ==
procedure Print(s: string);
begin
@ -1350,7 +1350,7 @@ begin
write(s);
end;
// == Версия 4.15. Конец дополнений ==
// == Версия 4.15. Конец дополнений ==
{procedure write;
begin
@ -1423,7 +1423,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;
@ -1432,6 +1432,15 @@ begin
var prg := asm.GetType(nm+'.Program');
var solveproc := prg.GetMethod('$Main');
var initproc := prg.GetMethod('$_InitVariables_');
if (solveproc = nil) or (initproc = nil) then
foreach var prg0 in asm.GetTypes() do
begin
prg := prg0;
solveproc := prg0.GetMethod('$Main');
initproc := prg0.GetMethod('$_InitVariables_');
if (solveproc <> nil) and (initproc <> nil) then
break;
end;
var examunit := asm.GetType('PT4Exam.PT4Exam');
var finexamproc: System.Reflection.MethodInfo := nil;
if examunit <> nil then
@ -1441,7 +1450,7 @@ begin
begin
StartPT(512);
try
foreach var f in prg.GetFields do
foreach var f in prg.GetFields() do
if not f.Name.StartsWith('$') then
try
f.SetValue(nil, nil);
@ -1452,11 +1461,7 @@ begin
solveproc.Invoke(nil,nil);
except
on e: Exception do
begin
//if e.InnerException<>nil then
RaisePT('HHH', 'ggg');
//RaisePT(e.InnerException.GetType.ToString, e.InnerException.Message);
end;
RaisePT(e.InnerException.GetType.ToString, e.InnerException.Message);
end;
if finexamproc <> nil then
finexamproc.Invoke(nil,nil);
@ -1465,10 +1470,10 @@ begin
inc(i);
fpt := FinishPT;
end;
// == Конец дополнений к версии 4.13 ==
// == Конец дополнений к версии 4.13 ==
end;
// == Версия 1.3. Дополнения ==
// == Версия 1.3. Дополнения ==
var
D: integer := 2;
@ -1590,9 +1595,9 @@ begin
D := N;
end;
// == Конец дополнений к версии 1.3 ==
// == Конец дополнений к версии 1.3 ==
// == Версия 4.14. Дополнения ==
// == Версия 4.14. Дополнения ==
function ReadSeqInteger(): sequence of integer;
begin
@ -1864,7 +1869,7 @@ begin
write(a[i][j]);
end;
/// Выводит размер и элементы последовательности
/// Выводит размер и элементы последовательности
procedure WriteAll<T>(self: sequence of T); extensionmethod;
begin
var b := self.ToArray();
@ -1873,7 +1878,7 @@ begin
PT4.Put(e);
end;
/// Выводит элементы последовательности
/// Выводит элементы последовательности
procedure Write<T>(self: sequence of T); extensionmethod;
begin
var b := self.ToArray();
@ -1881,14 +1886,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
@ -1896,7 +1901,7 @@ begin
PT4.Put(self[i,j]);
end;
// == Дополнения 2016.07
// == Дополнения 2016.07
procedure PrintMatr<T>(a: array[,] of T);
begin
@ -1919,7 +1924,7 @@ begin
write(a[i][j]);
end;
/// Выводит размер и элементы последовательности
/// Выводит размер и элементы последовательности
procedure PrintAll<T>(self: sequence of T); extensionmethod;
begin
var b := self.ToArray();
@ -1928,7 +1933,7 @@ begin
PT4.Put(e);
end;
/// Выводит размер и элементы динамического массива
/// Выводит размер и элементы динамического массива
procedure PrintAll<T>(self: array of T); extensionmethod;
begin
PT4.Put(self.Length);
@ -1936,7 +1941,7 @@ begin
PT4.Put(self[i]);
end;
/// Выводит размер и элементы динамического массива
/// Выводит размер и элементы динамического массива
procedure WriteAll<T>(self: array of T); extensionmethod;
begin
PT4.Put(self.Length);
@ -1944,7 +1949,7 @@ begin
PT4.Put(self[i]);
end;
/// Выводит элементы последовательности
/// Выводит элементы последовательности
procedure Writeln<T>(self: sequence of T); extensionmethod;
begin
var b := self.ToArray();
@ -1952,14 +1957,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
@ -1967,13 +1972,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
@ -1986,17 +1991,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;
@ -2015,14 +2020,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

@ -1,10 +1,10 @@
/// Модуль электронного задачника PT for Exam
/// Модуль электронного задачника PT for Exam
unit PT4Exam;
//------------------------------------------------------------------------------
// Модуль для подключения задачника PT for Exam
// Версия 1.1
// Copyright (c) 2014-2015 М.Э.Абрамян
// Версия 1.2
// Copyright (c) 2014-2017 М.Э.Абрамян
//------------------------------------------------------------------------------
@ -13,6 +13,30 @@ interface
procedure Task(name: string);
procedure FinExam;
//1.2
procedure Show(S: string);
procedure Show(S: string; A: Integer; W: Integer);
procedure Show(S: string; A: Real; W: Integer);
procedure Show(S: string; A: Integer);
procedure Show(S: string; A: Real);
procedure Show(A: Integer; W: Integer);
procedure Show(A: Real; W: Integer);
procedure Show(A: Integer);
procedure Show(A: Real);
procedure ShowLine;
procedure ShowLine(S: string);
procedure ShowLine(S: string; A: Integer; W: Integer);
procedure ShowLine(S: string; A: Real; W: Integer);
procedure ShowLine(S: string; A: Integer);
procedure ShowLine(S: string; A: Real);
procedure ShowLine(A: Integer; W: Integer);
procedure ShowLine(A: Real; W: Integer);
procedure ShowLine(A: Integer);
procedure ShowLine(A: Real);
procedure SetPrecision(N: integer);
procedure HideTask;
implementation
uses
@ -72,6 +96,112 @@ begin
NextTask := false;
end;
procedure Show(S: string);
begin
PT4.Show(S);
end;
procedure Show(S: string; A: Integer; W: Integer);
begin
PT4.Show(S, A, W);
end;
procedure Show(S: string; A: Real; W: Integer);
begin
PT4.Show(S, A, W);
end;
procedure Show(S: string; A: Integer);
begin
PT4.Show(S, A);
end;
procedure Show(S: string; A: Real);
begin
PT4.Show(S, A);
end;
procedure Show(A: Integer; W: Integer);
begin
PT4.Show(A, W);
end;
procedure Show(A: Real; W: Integer);
begin
PT4.Show(A, W);
end;
procedure Show(A: Integer);
begin
PT4.Show(A);
end;
procedure Show(A: Real);
begin
PT4.Show(A);
end;
procedure ShowLine(S: string);
begin
PT4.ShowLine(S);
end;
procedure ShowLine;
begin
PT4.ShowLine;
end;
procedure ShowLine(S: string; A: Integer; W: Integer);
begin
PT4.ShowLine(S, A, W);
end;
procedure ShowLine(S: string; A: Real; W: Integer);
begin
PT4.ShowLine(S, A, W);
end;
procedure ShowLine(S: string; A: Integer);
begin
PT4.ShowLine(S, A);
end;
procedure ShowLine(S: string; A: Real);
begin
PT4.ShowLine(S, A);
end;
procedure ShowLine(A: Integer; W: Integer);
begin
PT4.ShowLine(A, W);
end;
procedure ShowLine(A: Real; W: Integer);
begin
PT4.ShowLine(A, W);
end;
procedure ShowLine(A: Integer);
begin
PT4.ShowLine(A);
end;
procedure ShowLine(A: Real);
begin
PT4.ShowLine(A);
end;
procedure HideTask;
begin
PT4.HideTask;
end;
procedure SetPrecision(N: Integer);
begin
PT4.SetPrecision(N);
end;
initialization
finalization