@ -1,16 +1,16 @@
/ / / Модуль электронного задачника Programming Taskbook 4
/ / / Модуль электронного задачника Programming Taskbook 4
unit PT4;
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Модуль для подключения задачника Programming Taskbook
/ / Версия 4.15
/ / Copyright ( c ) 2 0 0 6 - 2 0 0 8 DarkStar, SSM
/ / Copyright ( c ) 2 0 1 0 М . Э. Абрамян, дополнения к версии 1.3
/ / Copyright ( c ) 2 0 1 4 - 2 0 1 5 М . Э. Абрамян, дополнения к версии 4.13
/ / Copyright ( c ) 2 0 1 5 М . Э. Абрамян, дополнения к версии 4.14
/ / Copyright ( c ) 2 0 1 6 М . Э. Абрамян, дополнения к версии 4.15
/ / Copyright ( c ) 2 0 1 7 М . Э. Абрамян, дополнения к версии 4.17
/ / Электронный задачник Programming Taskbook Copyright ( c) М . Э. Абрамян, 1 9 9 8 - 2 0 1 7
/ / Модуль для подключения задачника Programming Taskbook
/ / Версия 4.15
/ / Copyright ( © ) 2 0 0 6 - 2 0 0 8 DarkStar, SSM
/ / Copyright ( © ) 2 0 1 0 М . Э. Абрамян, дополнения к версии 1.3
/ / Copyright ( © ) 2 0 1 4 - 2 0 1 5 М . Э. Абрамян, дополнения к версии 4.13
/ / Copyright ( © ) 2 0 1 5 М . Э. Абрамян, дополнения к версии 4.14
/ / Copyright ( © ) 2 0 1 6 М . Э. Абрамян, дополнения к версии 4.15
/ / Copyright ( © ) 2 0 1 7 М . Э. Абрамян, дополнения к версии 4.17
/ / Электронный задачник Programming Taskbook Copyright ( c) М . Э. Абрамян, 1 9 9 8 - 2 0 1 7
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{$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( 2 0 0 ) ; / / TODO почему 2 0 0 ?
val : = new System. Text . StringBuilder( 2 0 0 ) ; / / TODO почему 2 0 0 ?
_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;